def __init__(self, annotator): self.annotator = annotator self.lowlevel_ann_policy = LowLevelAnnotatorPolicy(self) self.type_system = LowLevelTypeSystem() self.reprs = {} self._reprs_must_call_setup = [] self._seen_reprs_must_call_setup = {} self._dict_traits = {} self.rootclass_repr = RootClassRepr(self) self.rootclass_repr.setup() self.instance_reprs = {} self.type_for_typeptr = {} 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.cache_dummy_values = {} self.lltype2vtable = {} self.typererrors = [] self.typererror_count = 0 # make the primitive_to_repr constant mapping self.primitive_to_repr = {} self.isinstance_helpers = {} self.exceptiondata = ExceptionData(self) self.custom_trace_funcs = [] 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
def test_llop_interp(): from rpython.rtyper.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
def test_ptr(): policy = LowLevelAnnotatorPolicy() @signature(types.ptr(rstr.STR), returns=types.none()) def f(buf): pass argtype = getsig(f, policy=policy)[0] assert isinstance(argtype, SomePtr) assert argtype.ll_ptrtype.TO == rstr.STR def g(): f(rstr.mallocstr(10)) getsig(g, policy=policy)
def test_cast_primitive(self): 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
def test_llop_with_voids_interp(): from rpython.rtyper.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
def test_adtmeths(): policy = LowLevelAnnotatorPolicy() def h_newstruct(): return lltype.malloc(S) S = lltype.GcStruct('s', ('x', lltype.Signed), adtmeths={"h_newstruct": h_newstruct}) def f(): return S.h_newstruct() s = interpret(f, [], policy=policy) assert lltype.typeOf(s) == lltype.Ptr(S) def h_alloc(n): return lltype.malloc(A, n) def h_length(a): return len(a) A = lltype.GcArray(lltype.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 lltype.typeOf(a) == lltype.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
def specialize__ll_and_arg(pol, *args): from rpython.rtyper.annlowlevel import LowLevelAnnotatorPolicy return LowLevelAnnotatorPolicy.specialize__ll_and_arg(*args)
def specialize__ll(pol, *args): from rpython.rtyper.annlowlevel import LowLevelAnnotatorPolicy return LowLevelAnnotatorPolicy.default_specialize(*args)