[pypy-svn] r4864 - in pypy/branch/src-newobjectmodel/pypy: interpreter objspace

arigo at codespeak.net arigo at codespeak.net
Thu Jun 3 15:31:39 CEST 2004


Author: arigo
Date: Thu Jun  3 15:31:39 2004
New Revision: 4864

Modified:
   pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py
   pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py
   pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
Log:
object.__setattr__, object.__delattr__, and tiny fixes.


Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py	Thu Jun  3 15:31:39 2004
@@ -9,8 +9,6 @@
 class Wrappable(object):
     """A subclass of Wrappable is an internal, interpreter-level class
     that can nevertheless be exposed at application-level by space.wrap()."""
-    def __wrap__(self, space):
-        return self
 
 class NoValue(Exception):
     """Raised to signal absence of value, e.g. in the iterator accessing

Modified: pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py	Thu Jun  3 15:31:39 2004
@@ -8,9 +8,9 @@
         name = space.unwrap(w_name)
         w_descr = space.lookup(w_obj, name)
         if w_descr is not None:
-            if space.is_data_descr(w_descr):  # 
+            if space.is_data_descr(w_descr):
                 return space.get(w_descr,w_obj,space.type(w_obj))
-        w_dict = space.getdict(w_obj)   # 
+        w_dict = space.getdict(w_obj)
         if w_dict is not None:  
             try:
                 return space.getitem(w_dict,w_name)
@@ -20,7 +20,32 @@
         if w_descr is not None:
             return space.get(w_descr,w_obj,space.type(w_obj))
         raise OperationError(space.w_AttributeError,w_name)
-        
+
+    def descr__setattr__(space, w_obj, w_name, w_value):
+        name = space.unwrap(w_name)
+        w_descr = space.lookup(w_obj, name)
+        if w_descr is not None:
+            if space.is_data_descr(w_descr):
+                return space.set(w_descr,w_obj,w_value)
+        w_dict = space.getdict(w_obj)
+        if w_dict is not None:
+            return space.setitem(w_dict,w_name,w_value)
+        raise OperationError(space.w_AttributeError,w_name)
+
+    def descr__delattr__(space, w_obj, w_name):
+        name = space.unwrap(w_name)
+        w_descr = space.lookup(w_obj, name)
+        if w_descr is not None:
+            if space.is_data_descr(w_descr):
+                return space.delete(w_descr,w_obj)
+        w_dict = space.getdict(w_obj)
+        if w_dict is not None:
+            return space.delitem(w_dict,w_name)
+        raise OperationError(space.w_AttributeError,w_name)
+
+    def descr__init__(space, w_obj, *args_w, **kwds_w):
+        pass   # XXX some strange checking maybe
+
 class DescrOperation:
 
     def getdict(space, w_obj):
@@ -30,9 +55,7 @@
         return space.get(w_descr, w_obj, space.type(w_obj))
 
     def is_data_descr(space, w_obj):
-        # XXX check this logic
-        return (space.lookup(w_obj, '__set__') is not None and
-                space.lookup(w_obj, '__get__') is not None)
+        return space.lookup(w_obj, '__set__') is not None
 
     def get_and_call(space, w_descr, w_obj, w_args, w_kwargs):
         if isinstance(w_descr, Function):  # wrapped Function actually

Modified: pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py	Thu Jun  3 15:31:39 2004
@@ -69,9 +69,12 @@
 
         self.object_typedef = TypeDef('object', 
             __getattribute__ = gateway.interp2app(Object.descr__getattribute__.im_func),
+            __setattr__ = gateway.interp2app(Object.descr__setattr__.im_func),
+            __delattr__ = gateway.interp2app(Object.descr__delattr__.im_func),
             __str__ = gateway.interp2app(lambda space, w_x: str(w_x)),
             __repr__ = gateway.interp2app(lambda space, w_x: repr(w_x)),
             __class__ = GetSetProperty(self.__class__.type),
+            __init__ = gateway.interp2app(Object.descr__init__.im_func),
             )
  
         self.w_None = None



More information about the Pypy-commit mailing list