Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit