[pypy-commit] pypy cpyext-ext: add a TypeDef to W_MemberDesc with the corrent name

mattip pypy.commits at gmail.com
Fri Jan 15 09:33:54 EST 2016


Author: mattip <matti.picus at gmail.com>
Branch: cpyext-ext
Changeset: r81796:aced3aac84e6
Date: 2016-01-15 15:45 +0200
http://bitbucket.org/pypy/pypy/changeset/aced3aac84e6/

Log:	add a TypeDef to W_MemberDesc with the corrent name

diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -8,7 +8,8 @@
 
 from pypy.interpreter.baseobjspace import W_Root, DescrMismatch
 from pypy.interpreter.error import OperationError
-from pypy.interpreter.typedef import GetSetProperty
+from pypy.interpreter.typedef import (GetSetProperty, TypeDef,
+        interp_attrproperty, interp_attrproperty, interp2app)
 from pypy.module.__builtin__.abstractinst import abstract_issubclass_w
 from pypy.module.cpyext import structmemberdefs
 from pypy.module.cpyext.api import (
@@ -69,6 +70,7 @@
     return space.wrap(W_GetSetPropertyEx(getset, w_type))
 
 class W_MemberDescr(GetSetProperty):
+    name = 'member_descriptor'
     def __init__(self, member, w_type):
         self.member = member
         self.name = rffi.charp2str(member.c_name)
@@ -85,6 +87,18 @@
                                 cls=None, use_closure=True,
                                 tag="cpyext_2")
 
+# change the typedef name
+W_MemberDescr.typedef = TypeDef(
+    "member_descriptor",
+    __get__ = interp2app(GetSetProperty.descr_property_get),
+    __set__ = interp2app(GetSetProperty.descr_property_set),
+    __delete__ = interp2app(GetSetProperty.descr_property_del),
+    __name__ = interp_attrproperty('name', cls=GetSetProperty),
+    __objclass__ = GetSetProperty(GetSetProperty.descr_get_objclass),
+    __doc__ = interp_attrproperty('doc', cls=GetSetProperty),
+    )
+assert not W_MemberDescr.typedef.acceptable_as_base_class  # no __new__
+
 def convert_getset_defs(space, dict_w, getsets, w_type):
     getsets = rffi.cast(rffi.CArrayPtr(PyGetSetDef), getsets)
     if getsets:


More information about the pypy-commit mailing list