[pypy-svn] r72936 - pypy/branch/cpython-extension/pypy/module/cpyext
xoraxax at codespeak.net
xoraxax at codespeak.net
Sat Mar 27 02:45:34 CET 2010
Author: xoraxax
Date: Sat Mar 27 02:45:33 2010
New Revision: 72936
Modified:
pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
Log:
Add comments about missing code, set _HEAPTYPE.
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 Sat Mar 27 02:45:33 2010
@@ -6,7 +6,7 @@
from pypy.interpreter.gateway import ObjSpace, W_Root
from pypy.interpreter.gateway import interp2app, unwrap_spec
from pypy.interpreter.baseobjspace import Wrappable
-from pypy.objspace.std.typeobject import W_TypeObject
+from pypy.objspace.std.typeobject import W_TypeObject, _HEAPTYPE
from pypy.objspace.std.objectobject import W_ObjectObject
from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.module.cpyext.api import cpython_api, cpython_api_c, cpython_struct, \
@@ -202,8 +202,10 @@
dict_w = {}
convert_method_defs(space, dict_w, pto.c_tp_methods, pto)
convert_getset_defs(space, dict_w, pto.c_tp_getset, pto)
+ # XXX missing: convert_member_defs
W_TypeObject.__init__(self, space, rffi.charp2str(pto.c_tp_name),
bases_w or [space.w_object], dict_w)
+ self.__flags__ = _HEAPTYPE
class W_PyCObject(Wrappable):
def __init__(self, space):
@@ -256,9 +258,7 @@
base_pyo = rffi.cast(PyObject, obj_pto.c_tp_base)
Py_XDECREF(space, base_pyo)
Py_XDECREF(space, obj_pto.c_tp_bases)
- # XXX XDECREF tp_dict, tp_mro, tp_cache,
- # tp_subclasses
- # free tp_doc
+ Py_XDECREF(space, obj_pto.c_tp_cache) # lets do it like cpython
if obj_pto.c_tp_flags & Py_TPFLAGS_HEAPTYPE:
lltype.free(obj_pto.c_tp_name, flavor="raw")
obj_pto_voidp = rffi.cast(rffi.VOIDP_real, obj_pto)
@@ -293,6 +293,11 @@
pto.c_tp_free = PyObject_Del.api_func.get_llhelper(space)
pto.c_tp_name = rffi.str2charp(w_type.getname(space, "?"))
pto.c_tp_basicsize = -1 # hopefully this makes malloc bail out
+ pto.c_tp_itemsize = 0
+ # uninitialized fields:
+ # c_tp_print, c_tp_getattr, c_tp_setattr
+ # XXX implement
+ # c_tp_compare and the following fields (see http://docs.python.org/c-api/typeobj.html )
bases_w = w_type.bases_w
assert len(bases_w) <= 1
pto.c_tp_base = lltype.nullptr(PyTypeObject)
@@ -308,6 +313,7 @@
pto.c_obj_type = lltype.nullptr(PyObject.TO)
# XXX fill slots in pto
+ # would look like fixup_slot_dispatchers()
return pto
@cpython_api([PyTypeObjectPtr], rffi.INT_real, error=-1)
@@ -339,6 +345,11 @@
pto.c_tp_bases = make_ref(space, bases)
if w_obj is None:
PyPyType_Register(space, pto)
+ # missing:
+ # inherit_special, inherit_slots, setting __doc__ if not defined and tp_doc defined
+ # inheriting tp_as_* slots
+ # unsupported:
+ # tp_mro, tp_subclasses
finally:
pto.c_tp_flags &= ~Py_TPFLAGS_READYING
pto.c_tp_flags = (pto.c_tp_flags & ~Py_TPFLAGS_READYING) | Py_TPFLAGS_READY
More information about the Pypy-commit
mailing list