Author: Armin Rigo <ar...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit