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

nik at codespeak.net nik at codespeak.net
Tue Apr 4 19:00:21 CEST 2006


Author: nik
Date: Tue Apr  4 19:00:20 2006
New Revision: 25310

Modified:
   pypy/dist/pypy/rpython/ootypesystem/rlist.py
   pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py
Log:
code and test for lists with initial items in ootypesystem.


Modified: pypy/dist/pypy/rpython/ootypesystem/rlist.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/rlist.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/rlist.py	Tue Apr  4 19:00:20 2006
@@ -54,13 +54,12 @@
         return r_list.send_message(hop, "setitem", can_raise=True)
 
 def newlist(llops, r_list, items_v):
-    c1 = inputconst(ootype.Void, r_list.lowleveltype)
-    v_result = llops.genop("new", [c1], resulttype=r_list.lowleveltype)
-    #LIST = r_list.LIST
-    #cno = inputconst(Signed, len(items_v))
-    #v_result = llops.gendirectcall(LIST.ll_newlist, cno)
-    #v_func = inputconst(Void, dum_nocheck)
-    #for i, v_item in enumerate(items_v):
-    #    ci = inputconst(Signed, i)
-    #    llops.gendirectcall(ll_setitem_nonneg, v_func, v_result, ci, v_item)
+    c_1ist = inputconst(ootype.Void, r_list.lowleveltype)
+    v_result = llops.genop("new", [c_1ist], resulttype=r_list.lowleveltype)
+    c_append = inputconst(ootype.Void, "append")
+    # This is very inefficient for a large amount of initial items ...
+    for v_item in items_v:
+        llops.genop("oosend", [c_append, v_result, v_item],
+                resulttype=ootype.Void)
     return v_result
+

Modified: pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py	Tue Apr  4 19:00:20 2006
@@ -67,3 +67,11 @@
         res = interpret(f, [2], type_system="ootype")
         assert res == -1 
 
+    def test_initialize(self):
+        def f(x):
+            l = [1, 2]
+            l.append(x)
+            return l[2]
+        res = interpret(f, [3], type_system="ootype")
+        assert res == 3 
+



More information about the Pypy-commit mailing list