Beispiel #1
0
 def test_Sub(self):
     ctx = Py27EmitterContext().emit_fragment(Subtract())
     # XXX: this should not be allowed in practice
     self.assertEqual(ctx.last_builder.buf.tolist(), [24])
     self.assertEqual(ctx.last_builder.stack_changes, [dec_inc(-2, +1)])
     self.assertEqual(ctx.last_builder.stack_usage(), (-2, -1, 0))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Beispiel #2
0
 def test_smoke(self):
     ctx = Py27EmitterContext().emit_fragment(Return(Add(Load(0), Load(1))))
     self.assertEqual(
         ctx.last_builder.buf.tolist(),
         [124, 0, 0, 124, 1, 0, 23, 83])
     self.assertEqual(
         ctx.last_builder.stack_changes,
         [dec_inc(-0, +1), dec_inc(-0, +1), dec_inc(-2, +1), dec_inc(-1, 0)])
     self.assertEqual(ctx.last_builder.stack_usage(), (0, 0, 2))
     self.assertTrue(ctx.last_builder.is_valid_stack(), True)
Beispiel #3
0
 def assertPerfectCode(self, fn, *nodes):
     ctx = Py27EmitterContext().emit(Flags(FLAG_NESTED), *nodes)
     orig = fn.__code__
     # Useful for readability on failure
     self.assertEqual(
         [ord(c) for c in orig.co_code], ctx.last_builder.buf.tolist())
     made = ctx.make_code(
         ctx.last_builder,
         name=fn.__name__,
         filename=fn.__code__.co_filename,
         firstlineno=fn.__code__.co_firstlineno)
     # Useful for readability on non-trivial failure
     self.assertEqual(code_props(orig), code_props(made))
     # Actual correctness check
     self.assertEqual(orig, made)
Beispiel #4
0
 def test_it_really_works(self):
     ctx = Py27EmitterContext().emit(
         Function(('a', 'b'), "add two things together",
             Return(Add(Load('a'), Load('b')))))
     code = ctx.make_code(ctx.last_builder, name="add")
     globals = {}
     name = None
     argdefs = ()
     closure = ()
     # function(code, globals[, name[, argdefs[, closure]]])
     add = types.FunctionType(code, globals, name, argdefs, closure)
     # Now see if it really works
     self.assertEqual(add(1, 2), 3)
     self.assertEqual(add("hello", " world"), "hello world")
     self.assertEqual(add(['foo'], ['bar']), ['foo', 'bar'])
Beispiel #5
0
 def test_Return(self):
     ctx = Py27EmitterContext().emit_fragment(Return())
     self.assertEqual(ctx.last_builder.buf.tolist(), [83])
     self.assertEqual(ctx.last_builder.stack_changes, [dec_inc(-1, +0)])
     self.assertEqual(ctx.last_builder.stack_usage(), (-1, -1, 0))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Beispiel #6
0
 def test_Store(self):
     ctx = Py27EmitterContext().emit_fragment(Store(0xAABB))
     self.assertEqual(ctx.last_builder.buf.tolist(), [125, 0xBB, 0xAA])
     self.assertEqual(ctx.last_builder.stack_usage(), (-1, -1, 0))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Beispiel #7
0
 def test_Load(self):
     ctx = Py27EmitterContext().emit_fragment(Load(0xAABB))
     self.assertEqual(ctx.last_builder.buf.tolist(), [124, 0xBB, 0xAA])
     self.assertEqual(ctx.last_builder.stack_usage(), (0, 1, 1))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Beispiel #8
0
 def test_Const(self):
     ctx = Py27EmitterContext().emit_fragment(Const("hi"))
     self.assertEqual(ctx.last_builder.buf.tolist(), [100, 1, 0])
     self.assertEqual(ctx.last_builder.stack_usage(), (0, 1, 1))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Beispiel #9
0
 def test_Neg(self):
     ctx = Py27EmitterContext().emit_fragment(Neg())
     self.assertEqual(ctx.last_builder.buf.tolist(), [11])
     self.assertEqual(ctx.last_builder.stack_usage(), (-1, 0, 0))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Beispiel #10
0
def et(t):
    return Py27EmitterContext().emit_fragment(t).buf.tolist()
Beispiel #11
0
def en(n):
    return Py27EmitterContext().emit_fragment([n]).buf.tolist()