[pypy-svn] r9505 - in pypy/dist/pypy/translator: . test

sanxiyn at codespeak.net sanxiyn at codespeak.net
Fri Feb 25 17:17:19 CET 2005


Author: sanxiyn
Date: Fri Feb 25 17:17:19 2005
New Revision: 9505

Modified:
   pypy/dist/pypy/translator/annrpython.py
   pypy/dist/pypy/translator/gencl.py
   pypy/dist/pypy/translator/test/snippet.py
   pypy/dist/pypy/translator/test/test_cltrans.py
Log:
"x in y" for GenCL.
 * Translate to CL's "find"
 * Represent tuple as cons
 * Annotate "x in y" as SomeBool
 * Tests


Modified: pypy/dist/pypy/translator/annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/annrpython.py	(original)
+++ pypy/dist/pypy/translator/annrpython.py	Fri Feb 25 17:17:19 2005
@@ -440,6 +440,10 @@
     _registeroperations(locals())
     del _registeroperations
 
+    # XXX "contains" clash with SomeObject method
+    def consider_op_contains(self, seq, elem):
+        return annmodel.SomeBool()
+
     def consider_op_newtuple(self, *args):
         return annmodel.SomeTuple(items = args)
 

Modified: pypy/dist/pypy/translator/gencl.py
==============================================================================
--- pypy/dist/pypy/translator/gencl.py	(original)
+++ pypy/dist/pypy/translator/gencl.py	Fri Feb 25 17:17:19 2005
@@ -54,6 +54,10 @@
         result, (arg1, arg2) = self.result, self.args
         cl_op = self.binary_ops[op]
         print "(setq", s(result), "(", cl_op, s(arg1), s(arg2), "))"
+    def op_contains(self):
+        s = self.str
+        result, (arg1, arg2) = self.result, self.args
+        print "(setq", s(result), "(not (not (find", s(arg2), s(arg1), "))))"
     def op_add(self):
         s = self.str
         result, (arg1, arg2) = self.result, self.args
@@ -171,7 +175,10 @@
         else:
             return "#<%r>" % (obj,)
     def conv(self, val):
-        if isinstance(val, bool): # should precedes int
+        if isinstance(val, tuple):
+            val = map(self.conv, val)
+            return "'(%s)" % ' '.join(val)
+        elif isinstance(val, bool): # should precedes int
             if val:
                 return "t"
             else:

Modified: pypy/dist/pypy/translator/test/snippet.py
==============================================================================
--- pypy/dist/pypy/translator/test/snippet.py	(original)
+++ pypy/dist/pypy/translator/test/snippet.py	Fri Feb 25 17:17:19 2005
@@ -40,6 +40,9 @@
 def my_contains(seq=seqtype, elem=anytype):
     return elem in seq
 
+def is_one_or_two(n=int):
+    return n in (1, 2)
+
 def two_plus_two():
     """Array test"""
     array = [0] * 3

Modified: pypy/dist/pypy/translator/test/test_cltrans.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_cltrans.py	(original)
+++ pypy/dist/pypy/translator/test/test_cltrans.py	Fri Feb 25 17:17:19 2005
@@ -66,6 +66,14 @@
         assert cl_bool(42) == True
         assert cl_bool(True) == True
 
+    def test_contains(self):
+        my_contains = make_cl_func(t.my_contains)
+        assert my_contains([1, 2, 3], 1)
+        assert not my_contains([1, 2, 3], 0)
+        is_one_or_two = make_cl_func(t.is_one_or_two)
+        assert is_one_or_two(2)
+        assert not is_one_or_two(3)
+
     def test_array(self):
         cl_four = make_cl_func(t.two_plus_two)
         assert cl_four() == 4



More information about the Pypy-commit mailing list