[pypy-svn] r64928 - in pypy/branch/pyjitpl5/pypy/rpython/ootypesystem: . test

antocuni at codespeak.net antocuni at codespeak.net
Fri May 1 11:10:32 CEST 2009


Author: antocuni
Date: Fri May  1 11:10:25 2009
New Revision: 64928

Modified:
   pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/rootype.py
   pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/test/test_oortype.py
Log:
implement '==' and '!=' for ootype classes


Modified: pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/rootype.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/rootype.py	(original)
+++ pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/rootype.py	Fri May  1 11:10:25 2009
@@ -113,6 +113,19 @@
         v = rpair.rtype_eq(hop)
         return hop.genop("bool_not", [v], resulttype=ootype.Bool)
 
+
+class __extend__(pairtype(OOClassRepr, OOClassRepr)):
+    def rtype_is_((r_obj1, r_obj2), hop):
+        vlist = hop.inputargs(r_obj1, r_obj2)
+        return hop.genop('oois', vlist, resulttype=ootype.Bool)
+
+    rtype_eq = rtype_is_
+
+    def rtype_ne(rpair, hop):
+        v = rpair.rtype_eq(hop)
+        return hop.genop("bool_not", [v], resulttype=ootype.Bool)
+
+
 class OOBoundMethRepr(Repr):
     def __init__(self, ootype, name):
         self.lowleveltype = ootype

Modified: pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/test/test_oortype.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/test/test_oortype.py	(original)
+++ pypy/branch/pyjitpl5/pypy/rpython/ootypesystem/test/test_oortype.py	Fri May  1 11:10:25 2009
@@ -403,3 +403,21 @@
     g = gengraph(f)
     rettype = g.getreturnvar().concretetype
     assert rettype._hints['immutable']
+
+
+def test_compare_classes():
+    A = ootype.Instance("A", ootype.ROOT)
+    B = ootype.Instance("B", ootype.ROOT)
+
+    cls1 = ootype.runtimeClass(A)
+    def fn(n):
+        if n:
+            cls2 = ootype.runtimeClass(A)
+        else:
+            cls2 = ootype.runtimeClass(B)
+
+        assert (cls1 == cls2) == (not (cls1 != cls2))
+        return cls1 == cls2
+
+    res = interpret(fn, [1], type_system='ootype')
+    assert res



More information about the Pypy-commit mailing list