Author: Maciej Fijalkowski <fij...@gmail.com> Branch: kill-someobject Changeset: r57846:4bd09f2bcf13 Date: 2012-10-07 19:55 +0200 http://bitbucket.org/pypy/pypy/changeset/4bd09f2bcf13/
Log: merge diff --git a/pypy/rpython/memory/gctransform/boehm.py b/pypy/rpython/memory/gctransform/boehm.py --- a/pypy/rpython/memory/gctransform/boehm.py +++ b/pypy/rpython/memory/gctransform/boehm.py @@ -57,12 +57,6 @@ self.mixlevelannotator.finish() # for now self.mixlevelannotator.backend_optimize() - def push_alive_nopyobj(self, var, llops): - pass - - def pop_alive_nopyobj(self, var, llops): - pass - def gct_fv_gc_malloc(self, hop, flags, TYPE, c_size): # XXX same behavior for zero=True: in theory that's wrong if TYPE._is_atomic(): diff --git a/pypy/rpython/memory/gctransform/framework.py b/pypy/rpython/memory/gctransform/framework.py --- a/pypy/rpython/memory/gctransform/framework.py +++ b/pypy/rpython/memory/gctransform/framework.py @@ -5,8 +5,7 @@ from pypy.rpython.lltypesystem.lloperation import LL_OPERATIONS from pypy.rpython.memory import gctypelayout from pypy.rpython.memory.gctransform.log import log -from pypy.rpython.memory.gctransform.support import get_rtti, \ - ll_call_destructor, type_contains_pyobjs, var_ispyobj +from pypy.rpython.memory.gctransform.support import get_rtti, ll_call_destructor from pypy.rpython.memory.gctransform.transform import GCTransformer from pypy.rpython.memory.gctypelayout import ll_weakref_deref, WEAKREF, \ WEAKREFPTR @@ -19,6 +18,7 @@ TYPE_ID = llgroup.HALFWORD + class CollectAnalyzer(graphanalyze.BoolGraphAnalyzer): def analyze_direct_call(self, graph, seen=None): @@ -1174,21 +1174,13 @@ def var_needs_set_transform(self, var): return var_needsgc(var) - def push_alive_nopyobj(self, var, llops): - pass - - def pop_alive_nopyobj(self, var, llops): - pass - def get_livevars_for_roots(self, hop, keep_current_args=False): if self.gcdata.gc.moving_gc and not keep_current_args: # moving GCs don't borrow, so the caller does not need to keep # the arguments alive - livevars = [var for var in hop.livevars_after_op() - if not var_ispyobj(var)] + livevars = [var for var in hop.livevars_after_op()] else: livevars = hop.livevars_after_op() + hop.current_op_keeps_alive() - livevars = [var for var in livevars if not var_ispyobj(var)] return livevars def compute_borrowed_vars(self, graph): @@ -1244,7 +1236,6 @@ rtti = get_rtti(TYPE) destrptr = rtti._obj.destructor_funcptr DESTR_ARG = lltype.typeOf(destrptr).TO.ARGS[0] - assert not type_contains_pyobjs(TYPE), "not implemented" typename = TYPE.__name__ def ll_finalizer(addr, ignored): v = llmemory.cast_adr_to_ptr(addr, DESTR_ARG) diff --git a/pypy/rpython/memory/gctransform/refcounting.py b/pypy/rpython/memory/gctransform/refcounting.py --- a/pypy/rpython/memory/gctransform/refcounting.py +++ b/pypy/rpython/memory/gctransform/refcounting.py @@ -142,11 +142,11 @@ def var_needs_set_transform(self, var): return var_needsgc(var) - def push_alive_nopyobj(self, var, llops): + def push_alive(self, var, llops): v_adr = gen_cast(llops, llmemory.Address, var) llops.genop("direct_call", [self.increfptr, v_adr]) - def pop_alive_nopyobj(self, var, llops): + def pop_alive(self, var, llops): PTRTYPE = var.concretetype v_adr = gen_cast(llops, llmemory.Address, var) diff --git a/pypy/rpython/memory/gctransform/test/test_transform.py b/pypy/rpython/memory/gctransform/test/test_transform.py --- a/pypy/rpython/memory/gctransform/test/test_transform.py +++ b/pypy/rpython/memory/gctransform/test/test_transform.py @@ -5,22 +5,19 @@ from pypy.translator.translator import TranslationContext, graphof from pypy.translator.exceptiontransform import ExceptionTransformer from pypy.rpython.lltypesystem import lltype -from pypy.objspace.flow.model import Variable -from pypy.annotation import model as annmodel -from pypy.rpython.extregistry import ExtRegistryEntry from pypy import conftest + class LLInterpedTranformerTests: def llinterpreter_for_transformed_graph(self, f, args_s): from pypy.rpython.llinterp import LLInterpreter from pypy.translator.c.genc import CStandaloneBuilder - from pypy.translator.c import gc t = rtype(f, args_s) # XXX we shouldn't need an actual gcpolicy here. cbuild = CStandaloneBuilder(t, f, t.config, gcpolicy=self.gcpolicy) - db = cbuild.generate_graphs_for_llinterp() + cbuild.generate_graphs_for_llinterp() graph = cbuild.getentrypointptr()._obj.graph # arguments cannot be GC objects because nobody would put a # proper header on them @@ -32,7 +29,6 @@ t.view() return llinterp, graph - def test_simple(self): from pypy.annotation.model import SomeInteger @@ -67,7 +63,6 @@ r.append(x) return len(r) - llinterp, graph = self.llinterpreter_for_transformed_graph(f, [SomeInteger()]) res = llinterp.eval_graph(graph, [0]) @@ -85,7 +80,6 @@ x = 'brrrrrrr' return len(x + 'a') - llinterp, graph = self.llinterpreter_for_transformed_graph(f, [SomeBool()]) res = llinterp.eval_graph(graph, [True]) @@ -93,12 +87,13 @@ res = llinterp.eval_graph(graph, [False]) assert res == f(False) + class _TestGCTransformer(BaseGCTransformer): - def push_alive_nopyobj(self, var, llops): + def push_alive(self, var, llops): llops.genop("gc_push_alive", [var]) - def pop_alive_nopyobj(self, var, llops): + def pop_alive(self, var, llops): llops.genop("gc_pop_alive", [var]) @@ -151,7 +146,7 @@ t.buildrtyper().specialize() if conftest.option.view: t.view() - return t + return t def rtype_and_transform(func, inputtypes, transformcls, specialize=True, check=True): t = rtype(func, inputtypes, specialize) @@ -199,7 +194,7 @@ c.x = 1 return c t, transformer = rtype_and_transform(f, [], _TestGCTransformer) - + def test_call_function(): class C: pass @@ -323,7 +318,7 @@ except ValueError: return 0 t, transformer = rtype_and_transform(g, [int], _TestGCTransformer) - + def test_no_livevars_with_exception(): def g(): raise TypeError @@ -338,7 +333,8 @@ def test_bare_setfield(): from pypy.rpython.lltypesystem.lloperation import llop class A: - def __init__(self, obj): self.x = obj + def __init__(self, obj): + self.x = obj def f(v): inst = A(v) llop.setfield(lltype.Void, inst, 'x', v) diff --git a/pypy/rpython/memory/gctransform/transform.py b/pypy/rpython/memory/gctransform/transform.py --- a/pypy/rpython/memory/gctransform/transform.py +++ b/pypy/rpython/memory/gctransform/transform.py @@ -312,15 +312,9 @@ self.pop_alive(v_old, hop.llops) def push_alive(self, var, llops): - self.push_alive_nopyobj(var, llops) + pass def pop_alive(self, var, llops): - self.pop_alive_nopyobj(var, llops) - - def push_alive_nopyobj(self, var, llops): - pass - - def pop_alive_nopyobj(self, var, llops): pass def var_needs_set_transform(self, var): diff --git a/pypy/rpython/memory/test/test_transformed_gc.py b/pypy/rpython/memory/test/test_transformed_gc.py --- a/pypy/rpython/memory/test/test_transformed_gc.py +++ b/pypy/rpython/memory/test/test_transformed_gc.py @@ -1,10 +1,9 @@ import py -import sys import inspect + from pypy.translator.c import gc from pypy.annotation import model as annmodel -from pypy.annotation import policy as annpolicy -from pypy.rpython.lltypesystem import lltype, llmemory, llarena, rffi, llgroup +from pypy.rpython.lltypesystem import lltype, llmemory, rffi, llgroup from pypy.rpython.memory.gctransform import framework, shadowstack from pypy.rpython.lltypesystem.lloperation import llop, void from pypy.rlib.objectmodel import compute_unique_id, we_are_translated @@ -25,7 +24,7 @@ t.config.translation.gc = gcname t.config.translation.gcremovetypeptr = True t.config.set(**extraconfigopts) - ann = t.buildannotator(policy=annpolicy.StrictAnnotatorPolicy()) + ann = t.buildannotator() ann.build_types(func, inputtypes) if specialize: diff --git a/pypy/rpython/ootypesystem/test/test_ooclean.py b/pypy/rpython/ootypesystem/test/test_ooclean.py --- a/pypy/rpython/ootypesystem/test/test_ooclean.py +++ b/pypy/rpython/ootypesystem/test/test_ooclean.py @@ -1,25 +1,21 @@ -from pypy.rpython.lltypesystem import lltype from pypy.rpython.ootypesystem import ootype from pypy.rpython.test.test_llinterp import get_interpreter import py -import sys def check_only_ootype(graph): def check_ootype(v): t = v.concretetype assert isinstance(t, ootype.Primitive) or isinstance(t, ootype.OOType) - for block in graph.iterblocks(): for var in block.getvariables(): check_ootype(var) for const in block.getconstants(): check_ootype(const) -def interpret(func, values, view=False, viewbefore=False, policy=None, - someobjects=False): +def interpret(func, values, view=False, viewbefore=False, policy=None): interp, graph = get_interpreter(func, values, view, viewbefore, policy, - someobjects, type_system='ootype') + type_system='ootype') for g in interp.typer.annotator.translator.graphs: check_only_ootype(g) return interp.eval_graph(graph, values) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit