[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