[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