[pypy-svn] r4847 - pypy/branch/src-newobjectmodel/pypy/objspace

pedronis at codespeak.net pedronis at codespeak.net
Thu Jun 3 10:05:28 CEST 2004


Author: pedronis
Date: Thu Jun  3 10:05:27 2004
New Revision: 4847

Modified:
   pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py
Log:
get operation should fallback to return obj



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 10:05:27 2004
@@ -44,19 +44,21 @@
     def get(space,w_descr,w_obj,w_type):
         w_get = space.lookup(w_descr,'__get__')
         if w_get is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            return w_obj
         return space.get_and_call_function(w_descr,w_obj,w_type)
 
     def set(space,w_descr,w_obj,w_val):
         w_get = space.lookup(w_descr,'__set__')
         if w_get is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                   space.wrap("object is not a descriptor with set"))
         return space.get_and_call_function(w_descr,w_obj,w_val)
 
     def delete(space,w_descr,w_obj):
         w_get = space.lookup(w_descr,'__get__')
         if w_get is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                   space.wrap("object is not a descriptor with delete"))
         return space.get_and_call_function(w_descr,w_obj)
 
     def getattr(space,w_obj,w_name):
@@ -72,13 +74,15 @@
     def setattr(space,w_obj,w_name,w_val):
         w_descr = space.lookup(w_obj,'__setattr__')
         if w_descr is None:
-            raise OperationError(space.w_AttributeError) # xxx error
+            raise OperationError(space.w_AttributeError,
+                   space.wrap("object is readonly"))
         return space.get_and_call_function(w_descr,w_obj,w_name,w_val)
 
     def delattr(space,w_obj,w_name):
         w_descr = space.lookup(w_obj,'__delattr__')
         if w_descr is None:
-            raise OperationError(space.w_AttributeError) # xxx error
+            raise OperationError(space.w_AttributeError,
+                    space.wrap("object does not support attribute removal"))
         return space.get_and_call_function(w_descr,w_obj,w_name)
 
     def str(space,w_obj):
@@ -92,31 +96,36 @@
     def contains(space,w_obj,w_val):
         w_descr = space.lookup(w_obj,'__contains__')
         if w_descr is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                   space.wrap("object doesn't know about contains"))
         return space.get_and_call_function(w_descr,w_obj,w_val)
         
     def iter(space,w_obj):
-        w_descr = space.lookup(w_obj,'__delattr__')
+        w_descr = space.lookup(w_obj,'__iter__')
         if w_descr is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                   space.wrap("object is not iter()-able"))
         return space.get_and_call_function(w_descr,w_obj)
 
     def getitem(space,w_obj,w_key):
         w_descr = space.lookup(w_obj,'__getitem__')
         if w_descr is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                    space.wrap("cannot get items from object"))
         return space.get_and_call_function(w_descr,w_obj,w_key)
 
     def setitem(space,w_obj,w_key,w_val):
         w_descr = space.lookup(w_obj,'__setitem__')
         if w_descr is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                    space.wrap("cannot set items on object"))
         return space.get_and_call_function(w_descr,w_obj,w_key,w_val)
 
     def delitem(space,w_obj,w_key):
         w_descr = space.lookup(w_obj,'__delitem__')
         if w_descr is None:
-            raise OperationError(space.w_TypeError) # xxx error
+            raise OperationError(space.w_TypeError,
+                   space.wrap("cannot delete items from object"))
         return space.get_and_call_function(w_descr,w_obj,w_key)
 
 



More information about the Pypy-commit mailing list