Author: Ronan Lamy <[email protected]>
Branch: framestate
Changeset: r74690:2e6b3ffcdaab
Date: 2014-11-22 20:25 +0000
http://bitbucket.org/pypy/pypy/changeset/2e6b3ffcdaab/
Log: start refactoring bc_reader.build_flow()
diff --git a/rpython/flowspace/bytecode.py b/rpython/flowspace/bytecode.py
--- a/rpython/flowspace/bytecode.py
+++ b/rpython/flowspace/bytecode.py
@@ -96,22 +96,6 @@
cls.num = self.register_name(name, cls)
return cls
- def disassemble(self, code):
- contents = []
- offsets = []
- jumps = {}
- pos = 0
- i = 0
- while pos < len(code.co_code):
- offsets.append(pos)
- next_pos, op = self.read(code, pos)
- contents.append(op)
- if op.has_jump():
- jumps[pos] = op.arg
- pos = next_pos
- i += 1
- return contents, offsets, jumps
-
def read(self, code, offset):
"""
Decode the instruction starting at position ``offset``.
@@ -150,10 +134,25 @@
return next_offset, op
def build_flow(self, code):
- contents, offsets, jumps = self.disassemble(code)
- pos_map = dict([(pos, i) for i, pos in enumerate(offsets)])
- cuts = sorted([pos_map[n] + 1 for n in jumps.keys()] +
- [pos_map[n] for n in jumps.values()])
+ contents = []
+ offsets = []
+ jumps = {}
+ pos_map = {}
+ cuts = []
+ pos = 0
+ i = 0
+ while pos < len(code.co_code):
+ offsets.append(pos)
+ pos_map[pos] = i
+ next_pos, op = self.read(code, pos)
+ contents.append(op)
+ if op.has_jump():
+ jumps[pos] = op.arg
+ cuts.append(i + 1)
+ pos = next_pos
+ i += 1
+ cuts.extend([pos_map[n] for n in jumps.values()])
+ cuts.sort()
pendingblocks = [SimpleBlock(contents[i:j])
for i, j in zip([0] + cuts, cuts + [len(code.co_code)])]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit