[pypy-svn] r25948 - pypy/dist/pypy/rpython/ootypesystem

antocuni at codespeak.net antocuni at codespeak.net
Tue Apr 18 15:43:14 CEST 2006


Author: antocuni
Date: Tue Apr 18 15:43:09 2006
New Revision: 25948

Modified:
   pypy/dist/pypy/rpython/ootypesystem/rlist.py
Log:
Modified newlist in order to use _ll_resize and ll_setitem_fast
instead of append.



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 18 15:43:09 2006
@@ -82,13 +82,22 @@
 
 
 def newlist(llops, r_list, items_v):
-    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)
+    c_list = inputconst(ootype.Void, r_list.lowleveltype)
+    v_result = llops.genop("new", [c_list], 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)
+
+    c_resize = inputconst(ootype.Void, "_ll_resize")
+    c_length = inputconst(ootype.Signed, len(items_v))
+    llops.genop("oosend", [c_resize, v_result, c_length], resulttype=ootype.Void)
+    
+    c_setitem = inputconst(ootype.Void, "ll_setitem_fast")
+    for i, v_item in enumerate(items_v):
+        ci = inputconst(Signed, i)
+        llops.genop("oosend", [c_setitem, v_result, ci, v_item], resulttype=ootype.Void)
     return v_result
 
 



More information about the Pypy-commit mailing list