[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