Author: Alex Gaynor <alex.gay...@gmail.com> Branch: kill-someobject Changeset: r57855:e101d8f7ba51 Date: 2012-10-07 20:30 +0200 http://bitbucket.org/pypy/pypy/changeset/e101d8f7ba51/
Log: kill tons of pyobj code diff --git a/pypy/rpython/llinterp.py b/pypy/rpython/llinterp.py --- a/pypy/rpython/llinterp.py +++ b/pypy/rpython/llinterp.py @@ -846,12 +846,6 @@ def op_gc_deallocate(self, TYPE, addr): raise NotImplementedError("gc_deallocate") - def op_gc_push_alive_pyobj(self, pyobj): - raise NotImplementedError("gc_push_alive_pyobj") - - def op_gc_pop_alive_pyobj(self, pyobj): - raise NotImplementedError("gc_pop_alive_pyobj") - def op_gc_reload_possibly_moved(self, v_newaddr, v_ptr): assert v_newaddr.concretetype is llmemory.Address assert isinstance(v_ptr.concretetype, lltype.Ptr) @@ -938,28 +932,6 @@ def op_stack_current(self): return 0 - # operations on pyobjects! - for opname in lloperation.opimpls.keys(): - exec py.code.Source(""" - def op_%(opname)s(self, *pyobjs): - for pyo in pyobjs: - assert lltype.typeOf(pyo) == lltype.Ptr(lltype.PyObject) - func = lloperation.opimpls[%(opname)r] - try: - pyo = func(*[pyo._obj.value for pyo in pyobjs]) - except Exception: - self.make_llexception() - return self.heap.pyobjectptr(pyo) - """ % locals()).compile() - del opname - - def op_simple_call(self, f, *args): - assert lltype.typeOf(f) == lltype.Ptr(lltype.PyObject) - for pyo in args: - assert lltype.typeOf(pyo) == lltype.Ptr(lltype.PyObject) - res = f._obj.value(*[pyo._obj.value for pyo in args]) - return self.heap.pyobjectptr(res) - # __________________________________________________________ # operations on addresses @@ -980,7 +952,7 @@ return llmemory.raw_malloc_usage(size) def op_raw_free(self, addr): - checkadr(addr) + checkadr(addr) llmemory.raw_free(addr) def op_raw_memclear(self, addr, size): diff --git a/pypy/rpython/lltypesystem/lloperation.py b/pypy/rpython/lltypesystem/lloperation.py --- a/pypy/rpython/lltypesystem/lloperation.py +++ b/pypy/rpython/lltypesystem/lloperation.py @@ -8,7 +8,7 @@ class LLOp(object): def __init__(self, sideeffects=True, canfold=False, canraise=(), - pyobj=False, canmallocgc=False, canrun=False, oo=False, + canmallocgc=False, canrun=False, oo=False, tryfold=False): # self.opname = ... (set afterwards) @@ -32,9 +32,6 @@ assert not canraise or not canfold - # The operation manipulates PyObjects - self.pyobj = pyobj - # The operation can go a GC malloc self.canmallocgc = canmallocgc if canmallocgc: @@ -476,8 +473,6 @@ 'gc_restore_exception': LLOp(), 'gc_call_rtti_destructor': LLOp(), 'gc_deallocate': LLOp(), - 'gc_push_alive_pyobj': LLOp(), - 'gc_pop_alive_pyobj': LLOp(), 'gc_reload_possibly_moved': LLOp(), # see rlib/objectmodel for gc_identityhash and gc_id 'gc_identityhash': LLOp(sideeffects=False, canmallocgc=True), @@ -602,17 +597,6 @@ } # ***** Run test_lloperation after changes. ***** - - # __________ operations on PyObjects __________ - -from pypy.objspace.flow.operation import FunctionByName -opimpls = FunctionByName.copy() -opimpls['is_true'] = bool -for opname in opimpls: - LL_OPERATIONS[opname] = LLOp(canraise=(Exception,), pyobj=True) -LL_OPERATIONS['simple_call'] = LLOp(canraise=(Exception,), pyobj=True) -del opname, FunctionByName - # ____________________________________________________________ # Post-processing 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 @@ -1,12 +1,12 @@ from pypy.rpython.memory.gctransform.transform import GCTransformer, mallocHelpers -from pypy.rpython.memory.gctransform.support import type_contains_pyobjs, \ - get_rtti, _static_deallocator_body_for_type, LLTransformerOp, ll_call_destructor +from pypy.rpython.memory.gctransform.support import (get_rtti, + _static_deallocator_body_for_type, LLTransformerOp, ll_call_destructor) from pypy.rpython.lltypesystem import lltype, llmemory from pypy.objspace.flow.model import Constant from pypy.rpython.lltypesystem.lloperation import llop -from pypy.rpython.lltypesystem import rffi from pypy.rpython import rmodel + class BoehmGCTransformer(GCTransformer): malloc_zero_filled = True FINALIZER_PTR = lltype.Ptr(lltype.FuncType([llmemory.Address], lltype.Void)) @@ -99,20 +99,7 @@ destrptr = None DESTR_ARG = None - if type_contains_pyobjs(TYPE): - if destrptr: - raise Exception("can't mix PyObjects and __del__ with Boehm") - - static_body = '\n'.join(_static_deallocator_body_for_type('v', TYPE)) - d = {'pop_alive': LLTransformerOp(self.pop_alive), - 'PTR_TYPE':lltype.Ptr(TYPE), - 'cast_adr_to_ptr': llmemory.cast_adr_to_ptr} - src = ("def ll_finalizer(addr):\n" - " v = cast_adr_to_ptr(addr, PTR_TYPE)\n" - "%s\n")%(static_body,) - exec src in d - fptr = self.annotate_finalizer(d['ll_finalizer'], [llmemory.Address], lltype.Void) - elif destrptr: + if destrptr: EXC_INSTANCE_TYPE = self.translator.rtyper.exceptiondata.lltype_of_exception_value typename = TYPE.__name__ def ll_finalizer(addr): diff --git a/pypy/translator/c/test/test_boehm.py b/pypy/translator/c/test/test_boehm.py --- a/pypy/translator/c/test/test_boehm.py +++ b/pypy/translator/c/test/test_boehm.py @@ -2,11 +2,11 @@ from pypy.translator.translator import TranslationContext from pypy.rpython.lltypesystem import lltype, llmemory from pypy.rpython.lltypesystem.lloperation import llop -from pypy.rpython.memory.test import snippet from pypy.translator.c.genc import CExtModuleBuilder from pypy.rlib.objectmodel import keepalive_until_here from pypy import conftest + def setup_module(mod): from pypy.rpython.tool.rffi_platform import configure_boehm from pypy.translator.platform import CompilationError @@ -69,7 +69,6 @@ fn() def test__del__(self): - from pypy.rpython.lltypesystem.lloperation import llop class State: pass s = State() @@ -105,7 +104,6 @@ def test_id_is_weak(self): # test that compute_unique_id(obj) does not keep obj alive - from pypy.rpython.lltypesystem.lloperation import llop from pypy.rlib.objectmodel import compute_unique_id class State: pass @@ -155,7 +153,6 @@ assert 0 < res2 <= 5 def test_del_raises(self): - from pypy.rpython.lltypesystem.lloperation import llop class A(object): def __del__(self): s.dels += 1 @@ -199,31 +196,6 @@ fn = self.getcompiled(f) res = fn() assert res == 10 - - # this test shows if we have a problem with refcounting PyObject - def test_refcount_pyobj(self): - from pypy.rpython.lltypesystem.lloperation import llop - def prob_with_pyobj(b): - return 3, b - def collect(): - llop.gc__collect(lltype.Void) - f = self.getcompiled(prob_with_pyobj, [object]) - c = self.getcompiled(collect, []) - from sys import getrefcount as g - obj = None - before = g(obj) - f(obj) - f(obj) - f(obj) - f(obj) - f(obj) - c() - c() - c() - c() - c() - after = g(obj) - assert abs(before - after) < 5 def test_zero_malloc(self): T = lltype.GcStruct("C", ('x', lltype.Signed)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit