[pypy-commit] pypy framestate: wip
rlamy
noreply at buildbot.pypy.org
Mon Nov 24 17:30:04 CET 2014
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: framestate
Changeset: r74692:f6216e53dcae
Date: 2014-11-22 22:44 +0000
http://bitbucket.org/pypy/pypy/changeset/f6216e53dcae/
Log: wip
diff --git a/rpython/flowspace/bytecode.py b/rpython/flowspace/bytecode.py
--- a/rpython/flowspace/bytecode.py
+++ b/rpython/flowspace/bytecode.py
@@ -134,31 +134,34 @@
return next_offset, op
def _iter_instr(self, code):
+ self.offset = 0
while self.offset < len(code.co_code):
next_offset, instr = self.read(code, self.offset)
yield instr
self.offset = next_offset
+ def _add_jump(self, i, target):
+ self.cuts.append(i + 1)
+ self.pending_cuts.append(target)
+
def build_flow(self, code):
contents = []
offsets = []
- jumps = {}
+ self.pending_cuts = []
pos_map = {}
- cuts = []
- self.offset = 0
+ self.cuts = []
i = 0
for instr in self._iter_instr(code):
offsets.append(self.offset)
pos_map[self.offset] = i
contents.append(instr)
if instr.has_jump():
- jumps[self.offset] = instr.arg
- cuts.append(i + 1)
+ self._add_jump(i, instr.arg)
i += 1
- cuts.extend([pos_map[n] for n in jumps.values()])
- cuts.sort()
+ self.cuts.extend([pos_map[n] for n in self.pending_cuts])
+ self.cuts.sort()
pendingblocks = [SimpleBlock(contents[i:j])
- for i, j in zip([0] + cuts, cuts + [len(code.co_code)])]
+ for i, j in zip([0] + self.cuts, self.cuts + [len(code.co_code)])]
graph = BytecodeGraph(pendingblocks[0])
for block in pendingblocks:
More information about the pypy-commit
mailing list