Example #1
0
    def __init__(self, annotator, type_system="lltype"):
        self.annotator = annotator

        if self.getconfig().translation.backendopt.simplify_disabled:
            for i in annotator.translator.graphs:
                i._after_rtype = True

        self.lowlevel_ann_policy = LowLevelAnnotatorPolicy(self)

        if isinstance(type_system, str):
            if type_system == "lltype":
                self.type_system = LowLevelTypeSystem.instance
            elif type_system == "ootype":
                self.type_system = ObjectOrientedTypeSystem.instance
            else:
                raise TyperError("Unknown type system %r!" % type_system)
        else:
            self.type_system = type_system
        self.type_system_deref = self.type_system.deref
        self.reprs = {}
        self._reprs_must_call_setup = []
        self._seen_reprs_must_call_setup = {}
        self._dict_traits = {}
        self.class_reprs = {}
        self.instance_reprs = {}
        self.pbc_reprs = {}
        self.classes_with_wrapper = {}
        self.wrapper_context = None  # or add an extra arg to convertvar?
        self.classdef_to_pytypeobject = {}
        self.concrete_calltables = {}
        self.class_pbc_attributes = {}
        self.oo_meth_impls = {}
        self.cache_dummy_values = {}
        self.typererrors = []
        self.typererror_count = 0
        # make the primitive_to_repr constant mapping
        self.primitive_to_repr = {}
        if self.type_system.offers_exceptiondata:
            self.exceptiondata = self.type_system.exceptiondata.ExceptionData(
                self)
        else:
            self.exceptiondata = None

        try:
            self.seed = int(os.getenv('RTYPERSEED'))
            s = 'Using %d as seed for block shuffling' % self.seed
            self.log.info(s)
        except:
            self.seed = 0
        self.order = None
        # the following code would invoke translator.goal.order, which is
        # not up-to-date any more:
        ##        RTYPERORDER = os.getenv('RTYPERORDER')
        ##        if RTYPERORDER:
        ##            order_module = RTYPERORDER.split(',')[0]
        ##            self.order = __import__(order_module, {}, {},  ['*']).order
        ##            s = 'Using %s.%s for order' % (self.order.__module__, self.order.__name__)
        ##            self.log.info(s)
        self.crash_on_first_typeerror = True
Example #2
0
def test_llop_interp():
    from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy

    def llf(x, y):
        return llop.int_add(lltype.Signed, x, y)

    res = interpret(llf, [5, 7], policy=LowLevelAnnotatorPolicy())
    assert res == 12
Example #3
0
    def test_cast_primitive(self):
        from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy

        def llf(u):
            return lltype.cast_primitive(lltype.Signed, u)

        res = self.interpret(llf, [r_uint(-1)],
                             policy=LowLevelAnnotatorPolicy())
        assert res == -1
        res = self.interpret(llf, ['x'], policy=LowLevelAnnotatorPolicy())
        assert res == ord('x')

        def llf(v):
            return lltype.cast_primitive(lltype.Unsigned, v)

        res = self.interpret(llf, [-1], policy=LowLevelAnnotatorPolicy())
        assert res == r_uint(-1)
        res = self.interpret(llf, [u'x'], policy=LowLevelAnnotatorPolicy())
        assert res == ord(u'x')
        res = self.interpret(llf, [1.0], policy=LowLevelAnnotatorPolicy())
        assert res == r_uint(1)

        def llf(v):
            return lltype.cast_primitive(lltype.Char, v)

        res = self.interpret(llf, [ord('x')], policy=LowLevelAnnotatorPolicy())
        assert res == 'x'

        def llf(v):
            return lltype.cast_primitive(lltype.UniChar, v)

        res = self.interpret(llf, [ord('x')], policy=LowLevelAnnotatorPolicy())
        assert res == u'x'

        def llf(v):
            return lltype.cast_primitive(rffi.SHORT, v)

        res = self.interpret(llf, [123], policy=LowLevelAnnotatorPolicy())
        assert res == 123

        def llf(v):
            return lltype.cast_primitive(lltype.Signed, v)

        res = self.interpret(llf, [rffi.r_short(123)],
                             policy=LowLevelAnnotatorPolicy())
        assert res == 123
Example #4
0
def test_llop_with_voids_interp():
    from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy
    S = lltype.GcStruct('S', ('x', lltype.Signed), ('y', lltype.Signed))
    name_y = void('y')

    def llf():
        s = lltype.malloc(S)
        llop.bare_setfield(lltype.Void, s, void('x'), 3)
        llop.bare_setfield(lltype.Void, s, name_y, 2)
        return s.x + s.y

    res = interpret(llf, [], policy=LowLevelAnnotatorPolicy())
    assert res == 5
Example #5
0
def test_adtmeths():
    policy = LowLevelAnnotatorPolicy()

    def h_newstruct():
        return malloc(S)

    S = GcStruct('s', ('x', Signed), adtmeths={"h_newstruct": h_newstruct})

    def f():
        return S.h_newstruct()

    s = interpret(f, [], policy=policy)

    assert typeOf(s) == Ptr(S)

    def h_alloc(n):
        return malloc(A, n)

    def h_length(a):
        return len(a)

    A = GcArray(Signed,
                adtmeths={
                    "h_alloc": h_alloc,
                    "h_length": h_length,
                    'flag': True
                })

    def f():
        return A.h_alloc(10)

    a = interpret(f, [], policy=policy)

    assert typeOf(a) == Ptr(A)
    assert len(a) == 10

    def f():
        a = A.h_alloc(10)
        return a.h_length()

    res = interpret(f, [], policy=policy)
    assert res == 10

    def f():
        return A.flag

    res = interpret(f, [], policy=policy)
    assert res
Example #6
0
 def specialize__ll(pol, *args):
     from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy
     return LowLevelAnnotatorPolicy.default_specialize(*args)
Example #7
0
 def specialize__ll_and_arg(pol, *args):
     from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy
     return LowLevelAnnotatorPolicy.specialize__ll_and_arg(*args)
Example #8
0
 def specialize__ll_and_arg(pol, *args):
     from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy
     return LowLevelAnnotatorPolicy.specialize__ll_and_arg(*args)
Example #9
0
 def specialize__ll(pol, *args):
     from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy
     return LowLevelAnnotatorPolicy.default_specialize(*args)