def test_find_initializing_stores_across_blocks(): class A(object): pass class B(object): pass def f(x): a1 = A() a2 = A() a = A() b = B() b.a = a if x: b.b = a1 b.c = a2 else: b.c = a1 b.b = a2 t = rtype(f, [int]) etrafo = ExceptionTransformer(t) graphs = etrafo.transform_completely() collect_analyzer = CollectAnalyzer(t) init_stores = find_initializing_stores(collect_analyzer, t.graphs[0]) assert len(init_stores) == 5
def rtype_and_transform(func, inputtypes, transformcls, specialize=True, check=True): t = rtype(func, inputtypes, specialize) transformer = transformcls(t) etrafo = ExceptionTransformer(t) etrafo.transform_completely() graphs_borrowed = {} for graph in t.graphs: graphs_borrowed[graph] = transformer.transform_graph(graph) if conftest.option.view: t.view() t.checkgraphs() if check: for graph, is_borrowed in graphs_borrowed.iteritems(): for block in graph.iterblocks(): checkblock(block, is_borrowed, block is graph.startblock) return t, transformer
def test_find_initializing_stores(): class A(object): pass class B(object): pass def f(): a = A() b = B() b.a = a b.b = 1 t = rtype(f, []) etrafo = ExceptionTransformer(t) graphs = etrafo.transform_completely() collect_analyzer = CollectAnalyzer(t) init_stores = find_initializing_stores(collect_analyzer, t.graphs[0]) assert len(init_stores) == 1
def getexceptiontransformer(self): if self.rtyper is None: raise ValueError("no rtyper") if self.exceptiontransformer is not None: return self.exceptiontransformer from pypy.translator.exceptiontransform import ExceptionTransformer self.exceptiontransformer = ExceptionTransformer(self) return self.exceptiontransformer
def test_list_operations(): class A(object): pass def f(): l = [A(), A()] l.append(A()) l[1] = l[0] return len(l) t = rtype(f, []) backend_optimizations(t, clever_malloc_removal=False, storesink=True) etrafo = ExceptionTransformer(t) graph = etrafo.transform_completely() collect_analyzer = CollectAnalyzer(t) clean_setarrayitems = find_clean_setarrayitems(collect_analyzer, t.graphs[0]) assert len(clean_setarrayitems) == 1
def test_find_clean_setarrayitems(): S = lltype.GcStruct('S') A = lltype.GcArray(lltype.Ptr(S)) def f(): l = lltype.malloc(A, 3) l[0] = lltype.malloc(S) l[1] = lltype.malloc(S) l[2] = lltype.malloc(S) x = l[1] l[0] = x return len(l) t = rtype(f, []) etrafo = ExceptionTransformer(t) graph = etrafo.transform_completely() collect_analyzer = CollectAnalyzer(t) clean_setarrayitems = find_clean_setarrayitems(collect_analyzer, t.graphs[0]) assert len(clean_setarrayitems) == 1