Beispiel #1
0
 def visitPropertySetter(self, ctx):
     name = ctx.children[1].accept(self)
     argName = ctx.children[3].accept(self)
     body = ctx.children[6].accept(self)
     param = Object()
     param.set = Function([argName], self.environment, body)
     return (name, param)
 def visitPropertySetter(self, ctx):
     name = ctx.children[1].accept(self)
     argName = ctx.children[3].accept(self)
     body = ctx.children[6].accept(self)
     param = Object()
     param.set = Function([argName], self.environment, body)
     return (name, param)
Beispiel #3
0
 def execute_MAKE_OBJECT(self, nr_elements):
     obj = Object()
     for i in range(0, nr_elements):
         key = self.stack.pop()
         value = self.stack.pop()
         setattr(obj, key, value)
     self.stack.push(obj)
Beispiel #4
0
 def execute_NEW(self, nr_arguments):
     constructor = self.stack.pop()
     arguments = []
     for i in range(0, nr_arguments):
         arguments.insert(0, self.stack.pop())
     obj = Object()
     constructor(obj, *arguments)
     self.stack.push(obj)
 def test_043_make_getter(self):
     f = Function(None, None, None)
     obj = Object()
     self.run_test_executor([[OpCode.PUSH, obj], [OpCode.PUSH, f],
                             [OpCode.PUSH, 'test'], [OpCode.MAKE_GETTER]],
                            [obj], {}, {})
     self.assertTrue(isinstance(obj.test, Property))
     self.assertEqual(obj.test.getter, f)
     self.assertEqual(obj.test.setter, None)
 def test_014_store_member(self):
     obj = Object()
     setattr(obj, 'a', -1.0)
     self.run_test_executor([[OpCode.PUSH, 1.0], [OpCode.PUSH, obj],
                             [OpCode.STORE_MEMBER, 'a']], [1.0], {}, {})
     self.assertEqual(obj.a, 1.0)
     arr = [1.0, 2.0, 4.0]
     self.run_test_executor([[OpCode.PUSH, -1.0], [OpCode.PUSH, arr],
                             [OpCode.STORE_MEMBER, 1]], [-1.0], {}, {})
     self.assertEqual(arr, [1.0, -1.0, 4.0])
    def test_024_new(self):
        def func_new(env):
            self.assertTrue(env.value("this"), Object)
            self.assertEqual(env.value('a'), 1.0)
            self.assertEqual(env.value('b'), 2.0)

        f = Function(['a', 'b'], Environment(), func_new)
        self.run_test_executor([[OpCode.PUSH, 1.0], [OpCode.PUSH, 2.0],
                                [OpCode.PUSH, f], [OpCode.NEW, 2]], [Object()],
                               {}, {})
    def execute_make_object(self, count):
        '''
    Execute the MAKE_OBJECT instruction
    '''
        arr = self.execute_pop(count * 2)
        obj = Object()

        for i in range(0, len(arr), 2):
            setattr(obj, arr[i], arr[i + 1])
        self.stack.push(obj)
 def test_013_load_member(self):
     obj = Object()
     setattr(obj, 'a', -1.0)
     self.run_test_executor([[OpCode.PUSH, obj], [OpCode.LOAD_MEMBER, 'a']],
                            [-1.0], {}, {})
     arr = [1.0, 2.0, 4.0]
     self.run_test_executor([[OpCode.PUSH, arr], [OpCode.LOAD_MEMBER, 1]],
                            [2.0], {}, {})
     self.run_test_executor(
         [[OpCode.PUSH, arr], [OpCode.LOAD_MEMBER, 'length']], [3.0], {},
         {})
 def test_016_store_index(self):
     obj = Object()
     setattr(obj, 'a', -1.0)
     self.run_test_executor([[OpCode.PUSH, 1.0], [OpCode.PUSH, obj],
                             [OpCode.PUSH, 'a'], [OpCode.STORE_INDEX]],
                            [1.0], {}, {})
     self.assertEqual(obj.a, 1.0)
     arr = [1.0, 2.0, 4.0]
     self.run_test_executor([[OpCode.PUSH, -1.0], [OpCode.PUSH, arr],
                             [OpCode.PUSH, 1], [OpCode.STORE_INDEX]],
                            [-1.0], {}, {})
     self.assertEqual(arr, [1.0, -1.0, 4.0])
 def test_015_load_index(self):
     obj = Object()
     setattr(obj, 'a', -1.0)
     self.run_test_executor(
         [[OpCode.PUSH, obj], [OpCode.PUSH, 'a'], [OpCode.LOAD_INDEX]],
         [-1.0], {}, {})
     arr = [1.0, 2.0, 4.0]
     self.run_test_executor(
         [[OpCode.PUSH, arr], [OpCode.PUSH, 1], [OpCode.LOAD_INDEX]], [2.0],
         {}, {})
     self.run_test_executor(
         [[OpCode.PUSH, arr], [OpCode.PUSH, 'length'], [OpCode.LOAD_INDEX]],
         [3.0], {}, {})
    def execute_new(self, argCount):
        '''
    Execute the NEW instruction
    '''
        func = self.stack.pop()
        args = []
        obj = Object()
        if argCount > 0:
            args = self.execute_pop(argCount)

        args = list(reversed(args))

        func(obj, *args)

        self.execute_push(obj)
Beispiel #13
0
    def visitObjectLiteralExpression(self, ctx):
        obj = Object()

        # res is a list of tuples
        res = ctx.children[0].accept(self)

        for value in res:
            if len(value) == 3:
                prop = Property(obj)
                if value[0] == 'get':
                    prop.getter = value[-1]
                else:
                    prop.setter = value[-1]
                setattr(obj, str(value[1]), prop)
            else:
                setattr(obj, str(value[0]), value[1])
        return obj
 def test_041_make_object(self):
     (stack, env) = self.run_test_executor(
         [[OpCode.PUSH, 1.0], [OpCode.PUSH, 'a'], [OpCode.PUSH, 2.0],
          [OpCode.PUSH, 'b'], [OpCode.MAKE_OBJECT, 2]], [Object()], {}, {})
     self.assertEqual(stack[0].a, 1.0)
     self.assertEqual(stack[0].b, 2.0)
Beispiel #15
0
 def visitPropertyGetter(self, ctx):
     name = ctx.children[1].accept(self)
     body = ctx.children[5].accept(self)
     param = Object()
     param.get = Function([], self.environment, body)
     return (name, param)
 def visitPropertyGetter(self, ctx):
     name = ctx.children[1].accept(self)
     body = ctx.children[5].accept(self)
     param = Object()
     param.get = Function([], self.environment, body)
     return (name, param)