Author: Matti Picus <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit