def test_singlelineno(self): code = self._compile("a = 1\n" # line 1 ) self.assertIn("a", code.co_names) op_and_line = [(op.name, op.line) for op in opcodes.dis_code(code)] self.assertEqual([("LOAD_CONST", 1), ("STORE_NAME", 1), ("LOAD_CONST", 1), ("RETURN_VALUE", 1)], op_and_line)
def test_singlelineno(self): code = self._compile("a = 1\n" # line 1 ) self.assertIn("a", code.co_names) op_and_line = [(op.name, op.line) for op in opcodes.dis_code(code)] self.assertEquals([("LOAD_CONST", 1), ("STORE_NAME", 1), ("LOAD_CONST", 1), ("RETURN_VALUE", 1)], op_and_line)
def test_lineno(self): code = self._compile("a = 1\n" # line 1 "\n" # line 2 "a = a + 1\n" # line 3 ) self.assertIn("a", code.co_names) op_and_line = [(op.name, op.line) for op in opcodes.dis_code(code)] self.assertEquals([("LOAD_CONST", 1), ("STORE_NAME", 1), ("LOAD_NAME", 3), ("LOAD_CONST", 3), ("BINARY_ADD", 3), ("STORE_NAME", 3), ("LOAD_CONST", 3), ("RETURN_VALUE", 3)], op_and_line)
def order_code(code): """Split a CodeType object into ordered blocks. This takes a CodeType object (i.e., a piece of compiled Python code) and splits it into ordered basic blocks. Args: code: A loadmarshal.CodeType object. Returns: A CodeBlocks instance. """ bytecodes = opcodes.dis_code(code) add_pop_block_targets(bytecodes) # TODO(kramm): move into pyc/opcodes.py? return OrderedCode(code, bytecodes, compute_order(bytecodes), code.python_version)
def visit_code(self, code): code.co_code = opcodes.dis_code(code) return code
def test_mode(self): code = self._compile("foo", mode="eval") self.assertIn("foo", code.co_names) ops = [op.name for op in opcodes.dis_code(code)] self.assertEquals(["LOAD_NAME", "RETURN_VALUE"], ops)