[pypy-commit] pypy framestate: wip
rlamy
noreply at buildbot.pypy.org
Mon Nov 24 17:30:06 CET 2014
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: framestate
Changeset: r74694:e380b790156e
Date: 2014-11-22 23:32 +0000
http://bitbucket.org/pypy/pypy/changeset/e380b790156e/
Log: wip
diff --git a/rpython/flowspace/bytecode.py b/rpython/flowspace/bytecode.py
--- a/rpython/flowspace/bytecode.py
+++ b/rpython/flowspace/bytecode.py
@@ -135,10 +135,15 @@
def _iter_instr(self, code):
self.offset = 0
+ i = 0
while self.offset < len(code.co_code):
+ self.pos_map[self.offset] = i
+ if self.offset in self.pending_cuts:
+ self.cuts.append(self.pos_map[self.offset])
next_offset, instr = self.read(code, self.offset)
yield instr
self.offset = next_offset
+ i += 1
def _add_jump(self, i, target):
self.cuts.append(i + 1)
@@ -146,23 +151,19 @@
j = self.pos_map[target]
self.cuts.append(j)
else:
- self.pending_cuts.append(target)
+ self.pending_cuts.add(target)
def build_flow(self, code):
contents = []
offsets = []
- self.pending_cuts = []
+ self.pending_cuts = set()
self.pos_map = {}
self.cuts = []
- i = 0
for instr in self._iter_instr(code):
offsets.append(self.offset)
- self.pos_map[self.offset] = i
contents.append(instr)
if instr.has_jump():
- self._add_jump(i, instr.arg)
- i += 1
- self.cuts.extend([self.pos_map[n] for n in self.pending_cuts])
+ self._add_jump(self.pos_map[self.offset], instr.arg)
self.cuts.sort()
pendingblocks = [SimpleBlock(contents[i:j])
for i, j in zip([0] + self.cuts, self.cuts + [len(code.co_code)])]
More information about the pypy-commit
mailing list