[pypy-svn] r8988 - pypy/dist/pypy/objspace

pedronis at codespeak.net pedronis at codespeak.net
Tue Feb 8 14:58:51 CET 2005


Author: pedronis
Date: Tue Feb  8 14:58:51 2005
New Revision: 8988

Modified:
   pypy/dist/pypy/objspace/descroperation.py
Log:
checking __coerce__ return values



Modified: pypy/dist/pypy/objspace/descroperation.py
==============================================================================
--- pypy/dist/pypy/objspace/descroperation.py	(original)
+++ pypy/dist/pypy/objspace/descroperation.py	Tue Feb  8 14:58:51 2005
@@ -306,13 +306,17 @@
                 w_left_impl, w_right_impl = w_right_impl, w_left_impl
 
         w_res = _invoke_binop(space, w_left_impl, w_obj1, w_obj2)
-        if w_res is not None and not space.is_w(w_res, space.w_None):
-            return w_res
-        w_res = _invoke_binop(space, w_right_impl, w_obj2, w_obj1)
-        if w_res is not None and not space.is_w(w_res, space.w_None):
-            return w_res
-        raise OperationError(space.w_TypeError,
-                space.wrap("coercion failed"))        
+        if w_res is None or space.is_w(w_res, space.w_None):
+            w_res = _invoke_binop(space, w_right_impl, w_obj2, w_obj1)
+            if w_res is None  or space.is_w(w_res, space.w_None):
+                raise OperationError(space.w_TypeError,
+                                     space.wrap("coercion failed"))
+        if (not space.is_true(space.isinstance(w_res, space.w_tuple)) or
+            space.int_w(space.len(w_res)) != 2):
+            raise OperationError(space.w_TypeError,
+                                 space.wrap("coercion should return None or 2-tuple"))
+        return w_res
+    
 
 
     # xxx round, ord



More information about the Pypy-commit mailing list