[pypy-svn] r25347 - in pypy/dist/pypy/rpython: ootypesystem test

nik at codespeak.net nik at codespeak.net
Wed Apr 5 12:10:55 CEST 2006


Author: nik
Date: Wed Apr  5 12:10:52 2006
New Revision: 25347

Modified:
   pypy/dist/pypy/rpython/ootypesystem/rlist.py
   pypy/dist/pypy/rpython/ootypesystem/rtuple.py
   pypy/dist/pypy/rpython/test/test_rtuple.py
Log:
implement rtyping of list(sometuple) for ootypesystem.


Modified: pypy/dist/pypy/rpython/ootypesystem/rlist.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/rlist.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/rlist.py	Wed Apr  5 12:10:52 2006
@@ -80,6 +80,14 @@
                 resulttype=ootype.Void)
     return v_result
 
+# These helpers are trivial but help encapsulation
+
+def ll_newlist(LIST):
+    return ootype.new(LIST)
+
+def ll_append(lst, item):
+    lst.append(item)
+
 # ____________________________________________________________
 #
 #  Iteration.

Modified: pypy/dist/pypy/rpython/ootypesystem/rtuple.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/rtuple.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/rtuple.py	Wed Apr  5 12:10:52 2006
@@ -35,6 +35,20 @@
         vinst, = hop.inputargs(self)
         return hop.genop('ooidentityhash', [vinst], resulttype=ootype.Signed)
 
+    def rtype_bltn_list(self, hop):
+        from pypy.rpython.ootypesystem import rlist
+        v_tup = hop.inputarg(self, 0)
+        LIST = hop.r_result.lowleveltype
+        c_list = inputconst(ootype.Void, LIST)
+        v_list = hop.gendirectcall(rlist.ll_newlist, c_list)
+        for index in range(len(self.items_r)):
+            name = self.fieldnames[index]
+            r_item = self.items_r[index]
+            c_name = hop.inputconst(ootype.Void, name)
+            v_item = hop.genop("oogetfield", [v_tup, c_name], resulttype=r_item)
+            v_item = hop.llops.convertvar(v_item, r_item, hop.r_result.item_repr)
+            hop.gendirectcall(rlist.ll_append, v_list, v_item)
+        return v_list
 
 _tuple_types = {}
 

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	Wed Apr  5 12:10:52 2006
@@ -187,14 +187,14 @@
         assert res1 != res2
 
     def test_tuple_to_list(self):
-        if self.type_system == "ootype":
-            py.test.skip("XXX fix me if ootypes support lists")
-        
         def f(i, j):
             return list((i, j))
 
         res = self.interpret(f, [2, 3])
-        assert res._obj.items == [2, 3]
+        if self.type_system == "lltype":
+            assert res._obj.items == [2, 3]
+        else:
+            assert res._list == [2, 3]
 
     def test_tuple_iterator_length1(self):
         def f(i):



More information about the Pypy-commit mailing list