Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r72087:74b48b794989 Date: 2014-06-17 10:19 +0200 http://bitbucket.org/pypy/pypy/changeset/74b48b794989/
Log: Fix for test_recursive that shows that we're clearing too much random stuff across a general CALL_ASSEMBLER for example diff --git a/rpython/jit/metainterp/heapcache.py b/rpython/jit/metainterp/heapcache.py --- a/rpython/jit/metainterp/heapcache.py +++ b/rpython/jit/metainterp/heapcache.py @@ -6,7 +6,7 @@ def __init__(self): self.reset() - def reset(self, reset_virtuals=True): + def reset(self, reset_virtuals=True, trace_branch=True): # contains boxes where the class is already known self.known_class_boxes = {} # store the boxes that contain newly allocated objects, this maps the @@ -14,14 +14,19 @@ # escaped the trace or not (True means the box never escaped, False # means it did escape), its presences in the mapping shows that it was # allocated inside the trace - self.new_boxes = {} + if trace_branch: + self.new_boxes = {} + else: + for box in self.new_boxes: + self.new_boxes[box] = False if reset_virtuals: self.likely_virtuals = {} # only for jit.isvirtual() # Tracks which boxes should be marked as escaped when the key box # escapes. self.dependencies = {} # contains frame boxes that are not virtualizables - self.nonstandard_virtualizables = {} + if trace_branch: + self.nonstandard_virtualizables = {} # heap cache # maps descrs to {from_box, to_box} dicts @@ -207,7 +212,7 @@ # state at least in the 'CALL_*' operations that release the GIL. We # tried to do only the kind of resetting done by the two loops just # above, but hit an assertion in "pypy test_multiprocessing.py". - self.reset(reset_virtuals=False) + self.reset(reset_virtuals=False, trace_branch=False) def is_class_known(self, box): return box in self.known_class_boxes _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit