[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