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

Reply via email to