[pypy-svn] r14672 - in pypy/dist/pypy/rpython: . test

pedronis at codespeak.net pedronis at codespeak.net
Thu Jul 14 19:00:47 CEST 2005


Author: pedronis
Date: Thu Jul 14 19:00:29 2005
New Revision: 14672

Modified:
   pypy/dist/pypy/rpython/rtuple.py
   pypy/dist/pypy/rpython/test/test_rtuple.py
Log:
tuple conversions with test



Modified: pypy/dist/pypy/rpython/rtuple.py
==============================================================================
--- pypy/dist/pypy/rpython/rtuple.py	(original)
+++ pypy/dist/pypy/rpython/rtuple.py	Thu Jul 14 19:00:29 2005
@@ -117,7 +117,19 @@
         return newtuple(hop.llops, res, vlist)
     rtype_inplace_add = rtype_add
 
-
+    def convert_from_to((r_from, r_to), v, llops):
+        if len(r_from.items_r) == len(r_to.items_r):
+            n = len(r_from.items_r)
+            items_v = []
+            for i in range(n):
+                item_v = r_from.getitem(llops, v, i)
+                item_v = llops.convertvar(item_v,
+                                              r_from.items_r[i],
+                                              r_to.items_r[i])
+                items_v.append(item_v)
+            return newtuple(llops, r_to, items_v)
+        return NotImplemented
+                
 # ____________________________________________________________
 #
 #  Irregular operations.

Modified: pypy/dist/pypy/rpython/test/test_rtuple.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rtuple.py	(original)
+++ pypy/dist/pypy/rpython/test/test_rtuple.py	Thu Jul 14 19:00:29 2005
@@ -86,3 +86,21 @@
         return total
     res = interpret(f, [93813])
     assert res == 93813
+
+def test_conv():
+    def t0():
+        return (3, 2, None)
+    def t1():
+        return (7, 2, "xy")
+    def f(i):
+        if i == 1:
+            return t1()
+        else:
+            return t0()
+
+    res = interpret(f, [1])
+    assert res.item0 == 7
+    assert isinstance(typeOf(res.item2), Ptr) and ''.join(res.item2.chars) == "xy"
+    res = interpret(f, [0])
+    assert res.item0 == 3
+    assert isinstance(typeOf(res.item2), Ptr) and not res.item2



More information about the Pypy-commit mailing list