[pypy-svn] r73751 - pypy/branch/cpython-extension/pypy/module/cpyext

afa at codespeak.net afa at codespeak.net
Thu Apr 15 01:12:15 CEST 2010


Author: afa
Date: Thu Apr 15 01:12:13 2010
New Revision: 73751

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/pyobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
Log:
no more special case for tp_dealloc


Modified: pypy/branch/cpython-extension/pypy/module/cpyext/pyobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/pyobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/pyobject.py	Thu Apr 15 01:12:13 2010
@@ -2,7 +2,7 @@
 
 from pypy.interpreter.baseobjspace import W_Root, Wrappable, SpaceCache
 from pypy.rpython.lltypesystem import rffi, lltype
-from pypy.module.cpyext.api import cpython_api, \
+from pypy.module.cpyext.api import cpython_api, bootstrap_function, \
      PyObject, ADDR,\
      Py_TPFLAGS_HEAPTYPE, PyTypeObjectPtr
 from pypy.module.cpyext.state import State
@@ -47,7 +47,10 @@
                     tp_dealloc.api_func.functype,
                     tp_dealloc.api_func.get_wrapper(space))
             else:
-                return null_dealloc # XXX PyObject_dealloc?
+                from pypy.module.cpyext.typeobject import subtype_dealloc
+                return llhelper(
+                    subtype_dealloc.api_func.functype,
+                    subtype_dealloc.api_func.get_wrapper(space))
 
         if tp_alloc:
             def allocate(self, space, w_type):
@@ -81,7 +84,12 @@
 
     typedescr_cache[typedef] = CpyTypedescr()
 
-make_typedescr(None)
+ at bootstrap_function
+def init_pyobject(space):
+    from pypy.module.cpyext.object import PyObject_dealloc
+    make_typedescr(None)
+    make_typedescr(space.w_object.instancetypedef,
+                   dealloc=PyObject_dealloc)
 
 @specialize.memo()
 def _get_typedescr_1(typedef):

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py	Thu Apr 15 01:12:13 2010
@@ -386,27 +386,16 @@
 
 def type_attach(space, py_obj, w_type):
     """ Allocates a PyTypeObject from a w_type which must be a PyPy type. """
-    from pypy.module.cpyext.object import PyObject_dealloc, PyObject_Del
+    from pypy.module.cpyext.object import PyObject_Del
 
     assert isinstance(w_type, W_TypeObject)
 
     pto = rffi.cast(PyTypeObjectPtr, py_obj)
 
+    typedescr = get_typedescr(w_type.instancetypedef)
+
     # dealloc
-    if space.is_w(w_type, space.w_object):
-        pto.c_tp_dealloc = llhelper(PyObject_dealloc.api_func.functype,
-                PyObject_dealloc.api_func.get_wrapper(space))
-    elif space.is_w(w_type, space.w_type):
-        pto.c_tp_dealloc = llhelper(type_dealloc.api_func.functype,
-                type_dealloc.api_func.get_wrapper(space))
-        #pto.c_tp_dealloc = get_typedescr(w_type.instancetypedef).get_dealloc(space)
-    elif space.is_w(w_type, space.w_str):
-        pto.c_tp_dealloc = get_typedescr(w_type.instancetypedef).get_dealloc(space)
-    elif space.is_w(w_type, space.w_unicode):
-        pto.c_tp_dealloc = get_typedescr(w_type.instancetypedef).get_dealloc(space)
-    else:
-        pto.c_tp_dealloc = llhelper(subtype_dealloc.api_func.functype,
-                subtype_dealloc.api_func.get_wrapper(space))
+    pto.c_tp_dealloc = typedescr.get_dealloc(space)
     # buffer protocol
     if space.is_w(w_type, space.w_str):
         setup_string_buffer_procs(space, pto)



More information about the Pypy-commit mailing list