[pypy-commit] pypy gc_no_cleanup_nursery: fix
arigo
noreply at buildbot.pypy.org
Sun Sep 28 19:09:09 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: gc_no_cleanup_nursery
Changeset: r73737:bf3432da552c
Date: 2014-09-28 18:45 +0200
http://bitbucket.org/pypy/pypy/changeset/bf3432da552c/
Log: fix
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -254,7 +254,10 @@
for i in range(self.getlength()):
itemvalue = self.get_item_value(i)
if itemvalue is not None:
- itemboxes.append(itemvalue.get_key_box())
+ box = itemvalue.get_key_box()
+ else:
+ box = None
+ itemboxes.append(box)
visitor.register_virtual_fields(self.keybox, itemboxes)
for i in range(self.getlength()):
itemvalue = self.get_item_value(i)
@@ -280,9 +283,10 @@
def get_item_value(self, i):
"""Return the i'th item, unless it is 'constvalue' on a 'clear'
- array. In that case, return None. The idea is that this
- method returns the value that must be set into an array that
- was allocated with zero=True if 'clear' is True."""
+ array. In that case (or if the i'th item is already None),
+ return None. The idea is that this method returns the value
+ that must be set into an array that was allocated "correctly",
+ i.e. if 'clear' is True, that means with zero=True."""
subvalue = self._items[i]
if self.clear and subvalue is self.constvalue:
subvalue = None
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -562,16 +562,19 @@
# NB. the check for the kind of array elements is moved out of the loop
if arraydescr.is_array_of_pointers():
for i in range(length):
- decoder.setarrayitem_ref(array, i, self.fieldnums[i],
- arraydescr)
+ num = self.fieldnums[i]
+ if not tagged_eq(num, UNINITIALIZED):
+ decoder.setarrayitem_ref(array, i, num, arraydescr)
elif arraydescr.is_array_of_floats():
for i in range(length):
- decoder.setarrayitem_float(array, i, self.fieldnums[i],
- arraydescr)
+ num = self.fieldnums[i]
+ if not tagged_eq(num, UNINITIALIZED):
+ decoder.setarrayitem_float(array, i, num, arraydescr)
else:
for i in range(length):
- decoder.setarrayitem_int(array, i, self.fieldnums[i],
- arraydescr)
+ num = self.fieldnums[i]
+ if not tagged_eq(num, UNINITIALIZED):
+ decoder.setarrayitem_int(array, i, num, arraydescr)
return array
def debug_prints(self):
More information about the pypy-commit
mailing list