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
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
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
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
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
def specialize__ll(pol, *args): from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy return LowLevelAnnotatorPolicy.default_specialize(*args)
def specialize__ll_and_arg(pol, *args): from pypy.rpython.annlowlevel import LowLevelAnnotatorPolicy return LowLevelAnnotatorPolicy.specialize__ll_and_arg(*args)