[pypy-commit] pypy framestate: move disassemble() to BytecodeReader

rlamy noreply at buildbot.pypy.org
Mon Nov 24 17:29:44 CET 2014


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: framestate
Changeset: r74675:2309d510d8bb
Date: 2014-05-10 20:30 +0100
http://bitbucket.org/pypy/pypy/changeset/2309d510d8bb/

Log:	move disassemble() to BytecodeReader

diff --git a/rpython/flowspace/bytecode.py b/rpython/flowspace/bytecode.py
--- a/rpython/flowspace/bytecode.py
+++ b/rpython/flowspace/bytecode.py
@@ -58,25 +58,9 @@
         self.signature = cpython_code_signature(self)
         self.build_flow()
 
-    def disassemble(self):
-        contents = []
-        offsets = []
-        jumps = {}
-        pos = 0
-        i = 0
-        while pos < len(self.co_code):
-            offsets.append(pos)
-            next_pos, op = self.decode(pos)
-            contents.append(op)
-            if op.has_jump():
-                jumps[pos] = op.arg
-            pos = next_pos
-            i += 1
-        return contents, offsets, jumps
-
     def build_flow(self):
         next_pos = pos = 0
-        contents, offsets, jumps = self.disassemble()
+        contents, offsets, jumps = bc_reader.disassemble(self)
         self.contents = zip(offsets, contents)
         self.pos_index = dict((offset, i) for i, offset in enumerate(offsets))
         # add end marker
@@ -109,8 +93,6 @@
         next_offset = self.contents[i+1][0]
         return next_offset, op
 
-    def decode(self, offset):
-        return bc_reader.read(self, offset)
 
 class BytecodeReader(object):
     def __init__(self, opnames):
@@ -129,6 +111,22 @@
         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``.


More information about the pypy-commit mailing list