예제 #1
0
    def test_nested_code_objects(self):
        mod = """
def f(): return 1
f()"""
        data = serialize(compile(mod, "spli", "exec"))
        spli_code = deserialize(data)
        assert len(spli_code.co_consts_w) == 2
        assert isinstance(spli_code.co_consts_w[0], pycode.Code)
        assert spli_code.co_consts_w[0].co_consts_w[0] is objects.spli_None
        assert spli_code.co_consts_w[0].co_consts_w[1].as_int() == 1
예제 #2
0
    def test_basic(self):
        def f():
            return 1

        coderepr = serialize(f.func_code)
        code = deserialize(coderepr)
        assert code.co_nlocals == f.func_code.co_nlocals
        assert code.co_argcount == 0
        assert code.co_stacksize == f.func_code.co_stacksize
        assert code.co_names == []
        assert self.eval(code).value == 1
예제 #3
0
    def test_one(self):
        def f(a, b):
            return a + b
        data = serialize(f.func_code)
        space = objects.DumbObjSpace()
        def run(a, b):
            co = deserialize(data)
            args = []
            args.append(space.wrap(a))
            args.append(space.wrap(b))
            w_res = execution.run(co, args)
            assert isinstance(w_res, objects.Int)
            return w_res.value

        assert run(2, 3) == 5
        res = interpret(run, [2, 3])
        assert res == 5
예제 #4
0
 def interpret(self, f, args):
     coderepr = serializer.serialize(f.func_code)
     arg_params = ", ".join(['arg%d' % i for i in range(len(args))])
     arg_ass = ";".join(['frame.locals[%d] = space.wrap(arg%d)' % (i, i) for
                              i in range(len(args))])
     space = objects.DumbObjSpace()
     source = py.code.Source("""
     def bootstrap(%(arg_params)s):
         co = serializer.deserialize(coderepr)
         frame = interpreter.SPLIFrame(co)
         %(arg_ass)s
         return frame.run()
     """ % locals())
     d = globals().copy()
     d['coderepr'] = coderepr
     d['space'] = space
     exec source.compile() in d
     return self.meta_interp(d['bootstrap'], args, listops=True)
예제 #5
0
    def test_one(self):
        def f(a, b):
            return a + b

        data = serialize(f.func_code)
        space = objects.DumbObjSpace()

        def run(a, b):
            co = deserialize(data)
            args = []
            args.append(space.wrap(a))
            args.append(space.wrap(b))
            w_res = execution.run(co, args)
            assert isinstance(w_res, objects.Int)
            return w_res.value

        assert run(2, 3) == 5
        res = interpret(run, [2, 3])
        assert res == 5
예제 #6
0
파일: test_jit.py 프로젝트: njues/Sypy
 def interpret(self, f, args):
     coderepr = serializer.serialize(f.func_code)
     arg_params = ", ".join(['arg%d' % i for i in range(len(args))])
     arg_ass = ";".join([
         'frame.locals[%d] = space.wrap(arg%d)' % (i, i)
         for i in range(len(args))
     ])
     space = objects.DumbObjSpace()
     source = py.code.Source("""
     def bootstrap(%(arg_params)s):
         co = serializer.deserialize(coderepr)
         frame = interpreter.SPLIFrame(co)
         %(arg_ass)s
         return frame.run()
     """ % locals())
     d = globals().copy()
     d['coderepr'] = coderepr
     d['space'] = space
     exec source.compile() in d
     return self.meta_interp(d['bootstrap'], args, listops=True)