Author: Carl Friedrich Bolz <cfb...@gmx.de>
Branch: optinfo-into-bridges
Changeset: r87808:19183b43c40b
Date: 2016-10-14 17:00 +0200
http://bitbucket.org/pypy/pypy/changeset/19183b43c40b/

Log:    just use an over-allocated list

diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py 
b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -56,7 +56,6 @@
     metainterp_sd = optimizer.metainterp_sd
 
     # class knowledge
-    numb_state.grow(len(liveboxes)) # bit too much
     bitfield = 0
     shifts = 0
     for box in liveboxes:
@@ -76,7 +75,6 @@
     # heap knowledge
     if optimizer.optheap:
         triples = optimizer.optheap.serialize_optheap(liveboxes_set)
-        numb_state.grow(len(triples) * 3 + 1)
         numb_state.append_int(len(triples))
         for box1, descr, box2 in triples:
             index = metainterp_sd.descrs_dct.get(descr, -1)
@@ -87,7 +85,6 @@
             numb_state.append_int(index)
             numb_state.append_short(tag_box(box2, liveboxes_from_env, memo))
     else:
-        numb_state.grow(1)
         numb_state.append_int(0)
 
 def deserialize_optimizer_knowledge(optimizer, resumestorage, frontend_boxes, 
liveboxes):
diff --git a/rpython/jit/metainterp/resumecode.py 
b/rpython/jit/metainterp/resumecode.py
--- a/rpython/jit/metainterp/resumecode.py
+++ b/rpython/jit/metainterp/resumecode.py
@@ -22,6 +22,7 @@
 """
 
 from rpython.rtyper.lltypesystem import rffi, lltype
+from rpython.rlib import objectmodel
 
 NUMBERINGP = lltype.Ptr(lltype.GcForwardReference())
 NUMBERING = lltype.GcStruct('Numbering',
@@ -89,13 +90,11 @@
 
 class Writer(object):
     def __init__(self, size):
-        self.current = []
+        self.current = objectmodel.newlist_hint(size)
         self.grow(size)
-        self._pos = 0
 
     def append_short(self, item):
-        self.current[self._pos] = item
-        self._pos += 1
+        self.current.append(item)
 
     def append_int(self, item):
         short = rffi.cast(rffi.SHORT, item)
@@ -103,13 +102,13 @@
         return self.append_short(short)
 
     def create_numbering(self):
-        return create_numbering(self.current[:self._pos])
+        return create_numbering(self.current)
 
     def grow(self, size):
-        self.current.extend([rffi.cast(rffi.SHORT, 0)] * size)
+        pass
 
     def patch_current_size(self, index):
-        item = self._pos
+        item = len(self.current)
         short = rffi.cast(rffi.SHORT, item)
         assert rffi.cast(lltype.Signed, short) == item
         self.current[index] = short
diff --git a/rpython/jit/metainterp/test/test_resumecode.py 
b/rpython/jit/metainterp/test/test_resumecode.py
--- a/rpython/jit/metainterp/test/test_resumecode.py
+++ b/rpython/jit/metainterp/test/test_resumecode.py
@@ -38,8 +38,9 @@
 
 @hypothesis_and_examples
 def test_reader(l):
-    w = Writer(len(l))
-    for num in l:
-        w.append_int(num)
-    n = w.create_numbering()
-    assert unpack_numbering(n) == l
+    for size in [len(l), 0]:
+        w = Writer(len(l))
+        for num in l:
+            w.append_int(num)
+        n = w.create_numbering()
+        assert unpack_numbering(n) == l
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to