Author: Matti Picus <matti.pi...@gmail.com> Branch: missing-tp_new Changeset: r87879:1df087c4e903 Date: 2016-10-19 18:16 +0300 http://bitbucket.org/pypy/pypy/changeset/1df087c4e903/
Log: move the last-ditch tp_new assignment to later in type_attach diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py --- a/pypy/module/cpyext/typeobject.py +++ b/pypy/module/cpyext/typeobject.py @@ -391,13 +391,6 @@ pto.c_tp_itemsize = base_pto.c_tp_itemsize pto.c_tp_flags |= base_pto.c_tp_flags & Py_TPFLAGS_CHECKTYPES pto.c_tp_flags |= base_pto.c_tp_flags & Py_TPFLAGS_HAVE_INPLACEOPS - flags = rffi.cast(lltype.Signed, pto.c_tp_flags) - base_object_pyo = make_ref(space, space.w_object) - base_object_pto = rffi.cast(PyTypeObjectPtr, base_object_pyo) - if base_pto != base_object_pto or flags & Py_TPFLAGS_HEAPTYPE: - if not pto.c_tp_new: - pto.c_tp_new = base_pto.c_tp_new - Py_DecRef(space, base_object_pyo) def check_descr(space, w_self, w_type): if not space.isinstance_w(w_self, w_type): @@ -751,6 +744,13 @@ if space.is_w(w_type, space.w_object): pto.c_tp_new = rffi.cast(newfunc, 1) update_all_slots(space, w_type, pto) + if not pto.c_tp_new: + base_object_pyo = make_ref(space, space.w_object) + base_object_pto = rffi.cast(PyTypeObjectPtr, base_object_pyo) + flags = rffi.cast(lltype.Signed, pto.c_tp_flags) + if pto.c_tp_base != base_object_pto or flags & Py_TPFLAGS_HEAPTYPE: + pto.c_tp_new = pto.c_tp_base.c_tp_new + Py_DecRef(space, base_object_pyo) pto.c_tp_flags |= Py_TPFLAGS_READY return pto _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit