[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