[pypy-svn] r8891 - pypy/dist/pypy/interpreter

arigo at codespeak.net arigo at codespeak.net
Sat Feb 5 01:40:36 CET 2005


Author: arigo
Date: Sat Feb  5 01:40:36 2005
New Revision: 8891

Modified:
   pypy/dist/pypy/interpreter/typedef.py
Log:
<member 'x' of 'Y' object> -- for slots.



Modified: pypy/dist/pypy/interpreter/typedef.py
==============================================================================
--- pypy/dist/pypy/interpreter/typedef.py	(original)
+++ pypy/dist/pypy/interpreter/typedef.py	Sat Feb  5 01:40:36 2005
@@ -131,6 +131,34 @@
 
     return GetSetProperty(fget)
 
+class Member(Wrappable):
+    """For slots."""
+    def __init__(self, index, name):  # XXX ,cls later
+        self.index = index
+        self.name = name
+
+    def descr_member_get(space, w_member, w_obj, w_cls=None):
+        if space.is_w(w_obj, space.w_None):
+            return w_member
+        else:
+            w_result = w_obj.slots_w[self.index]
+            if w_result is None:
+                raise OperationError(space.w_AttributeError,
+                                     space.wrap(self.name)) # XXX better message
+            return w_result
+
+    def descr_member_set(space, w_member, w_obj, w_value):
+        w_obj.slots_w[self.index] = w_value
+
+    def descr_member_del(space, w_member, w_obj):
+        w_obj.slots_w[self.index] = None
+
+    typedef = TypeDef("member",
+        __get__ = interp2app(descr_member_get),
+        __set__ = interp2app(descr_member_set),
+        __delete__ = interp2app(descr_member_del),
+        )
+
 # ____________________________________________________________
 #
 # Definition of the type's descriptors for all the internal types



More information about the Pypy-commit mailing list