[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