[pypy-svn] r75111 - pypy/trunk/pypy/module/cpyext

afa at codespeak.net afa at codespeak.net
Fri Jun 4 17:17:21 CEST 2010


Author: afa
Date: Fri Jun  4 17:17:19 2010
New Revision: 75111

Modified:
   pypy/trunk/pypy/module/cpyext/pyobject.py
   pypy/trunk/pypy/module/cpyext/typeobject.py
Log:
Little cleanup


Modified: pypy/trunk/pypy/module/cpyext/pyobject.py
==============================================================================
--- pypy/trunk/pypy/module/cpyext/pyobject.py	(original)
+++ pypy/trunk/pypy/module/cpyext/pyobject.py	Fri Jun  4 17:17:19 2010
@@ -2,9 +2,9 @@
 
 from pypy.interpreter.baseobjspace import W_Root, SpaceCache
 from pypy.rpython.lltypesystem import rffi, lltype
-from pypy.module.cpyext.api import cpython_api, bootstrap_function, \
-     PyObject, PyObjectP, ADDR, CANNOT_FAIL, \
-     Py_TPFLAGS_HEAPTYPE, PyTypeObjectPtr
+from pypy.module.cpyext.api import (
+    cpython_api, bootstrap_function, PyObject, PyObjectP, ADDR,
+    CANNOT_FAIL, Py_TPFLAGS_HEAPTYPE, PyTypeObjectPtr)
 from pypy.module.cpyext.state import State
 from pypy.objspace.std.typeobject import W_TypeObject
 from pypy.rlib.objectmodel import specialize, we_are_translated
@@ -263,9 +263,9 @@
     Allocates a PyObject, and fills its fields with info from the given
     intepreter object.
     """
+    state = space.fromcache(RefcountState)
     w_type = space.type(w_obj)
     if w_type.is_cpytype():
-        state = space.fromcache(RefcountState)
         py_obj = state.get_from_lifeline(w_obj)
         if py_obj:
             Py_IncRef(space, py_obj)
@@ -274,7 +274,6 @@
     typedescr = get_typedescr(w_obj.typedef)
     py_obj = typedescr.allocate(space, w_type, itemcount=itemcount)
     if w_type.is_cpytype():
-        state = space.fromcache(RefcountState)
         state.set_lifeline(w_obj, py_obj)
     typedescr.attach(space, py_obj, w_obj)
     return py_obj
@@ -333,7 +332,7 @@
     # This reference is not yet a real interpreter object.
     # Realize it.
     ref_type = rffi.cast(PyObject, ref.c_ob_type)
-    if ref_type == ref:
+    if ref_type == ref: # recursion!
         raise InvalidPointerException(str(ref))
     w_type = from_ref(space, ref_type)
     assert isinstance(w_type, W_TypeObject)

Modified: pypy/trunk/pypy/module/cpyext/typeobject.py
==============================================================================
--- pypy/trunk/pypy/module/cpyext/typeobject.py	(original)
+++ pypy/trunk/pypy/module/cpyext/typeobject.py	Fri Jun  4 17:17:19 2010
@@ -376,8 +376,8 @@
 
 @cpython_api([PyObject], lltype.Void, external=False)
 def type_dealloc(space, obj):
+    from pypy.module.cpyext.object import PyObject_dealloc
     obj_pto = rffi.cast(PyTypeObjectPtr, obj)
-    type_pto = obj.c_ob_type
     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)
@@ -389,11 +389,7 @@
             lltype.free(obj_pto.c_tp_as_number, flavor='raw')
         Py_DecRef(space, base_pyo)
         rffi.free_charp(obj_pto.c_tp_name)
-        obj_pto_voidp = rffi.cast(rffi.VOIDP_real, obj_pto)
-        generic_cpy_call(space, type_pto.c_tp_free, obj_pto_voidp)
-        if type_pto.c_tp_flags & Py_TPFLAGS_HEAPTYPE:
-            pto = rffi.cast(PyObject, type_pto)
-            Py_DecRef(space, pto)
+        PyObject_dealloc(space, obj)
 
 
 def type_attach(space, py_obj, w_type):



More information about the Pypy-commit mailing list