Exemplo n.º 1
0
 def test_execute_reference_type_parameter(self):
     from VM import VM
     vm = VM()
     
     foo = ClassDefinition()
     foo.namespace = 'ConsoleApplication1'
     foo.name = 'foo'
     fooType = Types.register_custom_type(foo)
     
     fooObject = ReferenceType()
     fooObject.name = 'f'
     fooObject.type = fooType
     fooObject.value = Variable(3333)
     
     bar = ClassDefinition()
     bar.namespace = 'ConsoleApplication1'
     bar.name = 'bar'
     barType = Types.register_custom_type(bar)
     
     barObject = ReferenceType()
     barObject.type = barType
     field = ReferenceType()
     field.name = 'f'
     field.type = fooType
     barObject.add_field(field)
     
     vm.stack.push(barObject)
     
     x = ldfld('class ConsoleApplication1.foo ConsoleApplication1.bar::f')
     
     x.execute(vm)
     self.assertEqual(vm.stack.count(), 1)
     self.assertEqual(barObject.fields[0], vm.stack.pop())
Exemplo n.º 2
0
 def test_execute_reference_type_stores_reference_type_in_local_but_doesnt_change_name(self):
     from VM import VM
     vm = VM()
     x = stloc('0')
     m = MethodDefinition()
     localr = ReferenceType()
     localr.name = 'foobar'
     m.locals.append(localr)
     vm.set_current_method(m)
     r2 = ReferenceType()
     vm.stack.push(r2)
     x.execute(vm)
     
     self.assertEqual(vm.stack.count(), 0)
     self.assertEqual(m.locals[0], r2)
     self.assertEqual(m.locals[0].name, 'foobar')
Exemplo n.º 3
0
    def test_execute_reference_type_stores_reference_type_in_local_but_doesnt_change_name(
            self):
        from VM import VM
        vm = VM()
        x = stloc('0')
        m = MethodDefinition()
        localr = ReferenceType()
        localr.name = 'foobar'
        m.locals.append(localr)
        vm.set_current_method(m)
        r2 = ReferenceType()
        vm.stack.push(r2)
        x.execute(vm)

        self.assertEqual(vm.stack.count(), 0)
        self.assertEqual(m.locals[0], r2)
        self.assertEqual(m.locals[0].name, 'foobar')