[pypy-commit] pypy cpyext-gc-support: more fix

arigo noreply at buildbot.pypy.org
Mon Oct 26 04:25:12 EDT 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: cpyext-gc-support
Changeset: r80455:85a201e4f4a4
Date: 2015-10-26 09:24 +0100
http://bitbucket.org/pypy/pypy/changeset/85a201e4f4a4/

Log:	more fix

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
@@ -282,8 +282,8 @@
                            alloc_pyobj=type_alloc_pyobj,
                            fill_pyobj=type_fill_pyobj,
                            alloc_pypy=type_alloc_pypy,
-                           fill_pypy=type_fill_pypy)
-                   #dealloc=type_dealloc)
+                           fill_pypy=type_fill_pypy,
+                           dealloc=type_dealloc)
 
 
 @cpython_api([PyObject], lltype.Void, external=False)
@@ -358,21 +358,18 @@
     c_buf.c_bf_getreadbuffer = buf_getreadbuffer.api_func.get_llhelper(space)
     pto.c_tp_as_buffer = c_buf
 
- at cpython_api([PyObject], lltype.Void, external=False)
-def type_dealloc(space, obj):
+def type_dealloc(space, obj_pto):
     from pypy.module.cpyext.object import PyObject_dealloc
-    obj_pto = rffi.cast(PyTypeObjectPtr, obj)
     base_pyo = rffi.cast(PyObject, obj_pto.c_tp_base)
     Py_DecRef(space, obj_pto.c_tp_bases)
     Py_DecRef(space, obj_pto.c_tp_mro)
     Py_DecRef(space, obj_pto.c_tp_cache) # let's do it like cpython
     Py_DecRef(space, obj_pto.c_tp_dict)
     if obj_pto.c_tp_flags & Py_TPFLAGS_HEAPTYPE:
-        heaptype = rffi.cast(PyHeapTypeObject, obj)
+        heaptype = rffi.cast(PyHeapTypeObject, obj_pto)
         Py_DecRef(space, heaptype.c_ht_name)
         Py_DecRef(space, base_pyo)
-        PyObject_dealloc(space, obj)
-
+        PyObject_dealloc(space, rffi.cast(PyObject, obj_pto))
 
 def type_alloc(space, w_metatype):
     ZZZ
@@ -397,9 +394,15 @@
     return rffi.cast(PyObject, heaptype)
 
 def type_alloc_pyobj(space, w_type):
-    pto = lltype.malloc(PyTypeObject, flavor='raw', zero=True,
+    heaptype = lltype.malloc(PyHeapTypeObjectStruct, flavor='raw', zero=True,
                         track_allocation=False)
-    pto.c_tp_flags |= Py_TPFLAGS_READYING
+    pto = heaptype.c_ht_type
+    pto.c_tp_flags |= Py_TPFLAGS_HEAPTYPE | Py_TPFLAGS_READYING
+    pto.c_tp_as_number = heaptype.c_as_number
+    pto.c_tp_as_sequence = heaptype.c_as_sequence
+    pto.c_tp_as_mapping = heaptype.c_as_mapping
+    pto.c_tp_as_buffer = heaptype.c_as_buffer
+
     return pto, RRC_PERMANENT
 
 def type_fill_pyobj(space, w_type, pto):


More information about the pypy-commit mailing list