[pypy-svn] r36754 - pypy/dist/pypy/jit/timeshifter
ac at codespeak.net
ac at codespeak.net
Sun Jan 14 18:29:57 CET 2007
Author: ac
Date: Sun Jan 14 18:29:56 2007
New Revision: 36754
Modified:
pypy/dist/pypy/jit/timeshifter/rtimeshift.py
Log:
(pedronis, arre) Make the order of jitstate.virtualizables deterministic.
Modified: pypy/dist/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/dist/pypy/jit/timeshifter/rtimeshift.py Sun Jan 14 18:29:56 2007
@@ -771,12 +771,12 @@
frame = self.fz_frame .unfreeze(incomingvarboxes, memo)
exc_type_box = self.fz_exc_type_box .unfreeze(incomingvarboxes, memo)
exc_value_box = self.fz_exc_value_box.unfreeze(incomingvarboxes, memo)
- virtualizables = {}
+ virtualizables = []
for fz_virtualizable_box in self.fz_virtualizables:
virtualizable_box = fz_virtualizable_box.unfreeze(incomingvarboxes,
memo)
assert isinstance(virtualizable_box, rvalue.PtrRedBox)
- virtualizables[virtualizable_box] = None
+ virtualizables.append(virtualizable_box)
return JITState(None, frame, exc_type_box, exc_value_box,
virtualizables=virtualizables)
@@ -834,21 +834,25 @@
self.resumepoint = resumepoint
self.greens = newgreens
self.resuming = resuming # None or a ResumingInfo
+
+ # XXX can not be adictionary
+ # it needs to be iterated in a deterministic order.
if virtualizables is None:
- virtualizables = {}
+ virtualizables = []
self.virtualizables = virtualizables
def add_virtualizable(self, virtualizable_box):
assert isinstance(virtualizable_box, rvalue.PtrRedBox)
- self.virtualizables[virtualizable_box] = None
+ if virtualizable_box not in self.virtualizables:
+ self.virtualizables.append(virtualizable_box)
def split(self, newbuilder, newresumepoint, newgreens):
memo = rvalue.copy_memo()
- virtualizables = {}
+ virtualizables = []
for virtualizable_box in self.virtualizables:
new_virtualizable_box = virtualizable_box.copy(memo)
assert isinstance(new_virtualizable_box, rvalue.PtrRedBox)
- virtualizables[new_virtualizable_box] = None
+ virtualizables.append(new_virtualizable_box)
later_jitstate = JITState(newbuilder,
self.frame.copy(memo),
self.exc_type_box .copy(memo),
@@ -874,9 +878,11 @@
self._enter_block(incoming, memo)
virtualizables = self.virtualizables
builder = self.curbuilder
- for virtualizable_box in virtualizables.keys():
- if virtualizable_box.content not in memo.containers:
- del virtualizables[virtualizable_box]
+ self.virtualizables = []
+ for virtualizable_box in virtualizables:
+ if virtualizable_box.content in memo.containers:
+ self.virtualizables.append(virtualizable_box)
+ else:
content = virtualizable_box.content
assert isinstance(content, rcontainer.VirtualizableStruct)
content.store_back(self)
@@ -887,7 +893,7 @@
if virtualizables:
builder = self.curbuilder
gv_base = builder.get_frame_base()
- for virtualizable_box in virtualizables.keys():
+ for virtualizable_box in virtualizables:
content = virtualizable_box.content
assert isinstance(content, rcontainer.VirtualizableStruct)
content.prepare_for_residual_call(self, gv_base)
@@ -896,7 +902,7 @@
virtualizables = self.virtualizables
if virtualizables:
builder = self.curbuilder
- for virtualizable_box in virtualizables.keys():
+ for virtualizable_box in virtualizables:
content = virtualizable_box.content
assert isinstance(content, rcontainer.VirtualizableStruct)
content.after_residual_call(self)
@@ -906,22 +912,22 @@
result.fz_frame = self.frame.freeze(memo)
result.fz_exc_type_box = self.exc_type_box .freeze(memo)
result.fz_exc_value_box = self.exc_value_box.freeze(memo)
- fz_virtualizables = result.fz_virtualizables = {}
+ fz_virtualizables = result.fz_virtualizables = []
for virtualizable_box in self.virtualizables:
assert virtualizable_box in memo.boxes
- fz_virtualizables[virtualizable_box.freeze(memo)] = None
+ fz_virtualizables.append(virtualizable_box.freeze(memo))
return result
def replace(self, memo):
self.frame.replace(memo)
self.exc_type_box = self.exc_type_box .replace(memo)
self.exc_value_box = self.exc_value_box.replace(memo)
- virtualizables = {}
- for virtualizable_box in self.virtualizables:
+ virtualizables = []
+ for i in range(len(self.virtualizables)):
+ virtualizable_box = self.virtualizables[i]
new_virtualizable_box = virtualizable_box.replace(memo)
assert isinstance(new_virtualizable_box, rvalue.PtrRedBox)
- virtualizables[new_virtualizable_box] = None
- self.virtualizables = virtualizables
+ self.virtualizables[i] = new_virtualizable_box
def get_locals_gv(self): # xxx
# get all the genvars that are "alive", i.e. stored in the JITState
More information about the Pypy-commit
mailing list