Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
 def visit_code(self, code):
     code.co_code = opcodes.dis_code(code)
     return code
Esempio n. 7
0
 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)