[pypy-svn] r4863 - pypy/branch/src-newobjectmodel/pypy/objspace
arigo at codespeak.net
arigo at codespeak.net
Thu Jun 3 13:08:24 CEST 2004
Author: arigo
Date: Thu Jun 3 13:08:24 2004
New Revision: 4863
Modified:
pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py
pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
Log:
Default comparison rules.
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 13:08:24 2004
@@ -18,7 +18,7 @@
if not e.match(space,space.w_KeyError):
raise
if w_descr is not None:
- return space.get(w_descr,w_obj,space.wrap(type))
+ return space.get(w_descr,w_obj,space.type(w_obj))
raise OperationError(space.w_AttributeError,w_name)
class DescrOperation:
@@ -239,8 +239,23 @@
w_res = _invoke_binop(space,w_right_impl,w_obj2,w_obj1)
if w_res is not None:
return _conditional_neg(space,w_res,do_neg2)
- raise OperationError(space.w_TypeError,
- space.wrap("operands do not support comparison"))
+ # fall back to internal rules
+ if space.is_true(space.is_(w_obj1, w_obj2)):
+ return space.wrap(0)
+ if space.is_true(space.is_(w_obj1, space.w_None)):
+ return space.wrap(-1)
+ if space.is_true(space.is_(w_obj2, space.w_None)):
+ return space.wrap(1)
+ if space.is_true(space.is_(w_typ1, w_typ2)):
+ w_id1 = space.id(w_obj1)
+ w_id2 = space.id(w_obj2)
+ else:
+ w_id1 = space.id(w_typ1)
+ w_id2 = space.id(w_typ2)
+ if space.is_true(space.lt(w_id1, w_id2)):
+ return space.wrap(-1)
+ else:
+ return space.wrap(1)
# regular methods def helpers
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 13:08:24 2004
@@ -359,9 +359,13 @@
return space.wrap(basedef.rawdict[name])
return None
else:
- for cls in w_obj.__class__.__mro__:
+ # hack hack hack: ignore the real 'object' and use our own
+ for cls in w_obj.__class__.__mro__[:-1]:
if name in cls.__dict__:
return cls.__dict__[name]
+ basedef = space.object_typedef
+ if name in basedef.rawdict:
+ return space.wrap(basedef.rawdict[name])
return None
def get_and_call(self, w_descr, w_obj, w_args, w_kwargs):
More information about the Pypy-commit
mailing list