[pypy-commit] pypy kill-someobject: merge

fijal noreply at buildbot.pypy.org
Sun Oct 7 21:00:05 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: kill-someobject
Changeset: r57863:9f74be6a89fd
Date: 2012-10-07 20:59 +0200
http://bitbucket.org/pypy/pypy/changeset/9f74be6a89fd/

Log:	merge

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/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
@@ -201,9 +201,7 @@
             return self.static_deallocator_funcptrs[TYPE]
         #print_call_chain(self)
 
-        if TYPE._gckind == 'cpy':
-            return # you don't really have an RPython deallocator for PyObjects
-        rtti = get_rtti(TYPE) 
+        rtti = get_rtti(TYPE)
         if rtti is not None and hasattr(rtti._obj, 'destructor_funcptr'):
             destrptr = rtti._obj.destructor_funcptr
             DESTR_ARG = lltype.typeOf(destrptr).TO.ARGS[0]
@@ -266,7 +264,6 @@
         return fptr
 
     def dynamic_deallocation_funcptr_for_type(self, TYPE):
-        assert TYPE._gckind != 'cpy'
         if TYPE in self.dynamic_deallocator_funcptrs:
             return self.dynamic_deallocator_funcptrs[TYPE]
         #print_call_chain(self)
diff --git a/pypy/rpython/memory/gctransform/test/test_boehm.py b/pypy/rpython/memory/gctransform/test/test_boehm.py
--- a/pypy/rpython/memory/gctransform/test/test_boehm.py
+++ b/pypy/rpython/memory/gctransform/test/test_boehm.py
@@ -5,8 +5,7 @@
 from pypy.translator.translator import graphof
 from pypy.translator.c.gc import BoehmGcPolicy
 from pypy.rpython.memory.gctransform.test.test_transform import LLInterpedTranformerTests
-from pypy import conftest
-import py
+
 
 class TestLLInterpedBoehm(LLInterpedTranformerTests):
     gcpolicy = BoehmGcPolicy
@@ -34,11 +33,6 @@
     f, t = make_boehm_finalizer(S)
     assert f is None
 
-def test_boehm_finalizer_pyobj():
-    S = lltype.GcStruct("S", ('x', lltype.Ptr(lltype.PyObject)))
-    f, t = make_boehm_finalizer(S)
-    assert f is not None
-
 def test_boehm_finalizer___del__():
     S = lltype.GcStruct("S", ('x', lltype.Signed), rtti=True)
     def f(s):
@@ -53,24 +47,6 @@
                                             lltype.Void),
                             "destructor_funcptr",
                             _callable=f)
-    pinf = lltype.attachRuntimeTypeInfo(S, qp, destrptr=dp)
+    lltype.attachRuntimeTypeInfo(S, qp, destrptr=dp)
     f, t = make_boehm_finalizer(S)
     assert f is not None
-
-def test_boehm_finalizer_nomix___del___and_pyobj():
-    S = lltype.GcStruct("S", ('x', lltype.Signed),
-                             ('y', lltype.Ptr(lltype.PyObject)), rtti=True)
-    def f(s):
-        s.x = 1
-    def type_info_S(p):
-        return lltype.getRuntimeTypeInfo(S)
-    qp = lltype.functionptr(lltype.FuncType([lltype.Ptr(S)],
-                                            lltype.Ptr(lltype.RuntimeTypeInfo)),
-                            "type_info_S",
-                            _callable=type_info_S)
-    dp = lltype.functionptr(lltype.FuncType([lltype.Ptr(S)],
-                                            lltype.Void),
-                            "destructor_funcptr",
-                            _callable=f)
-    pinf = lltype.attachRuntimeTypeInfo(S, qp, destrptr=dp)
-    py.test.raises(Exception, "make_boehm_finalizer(S)")
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
@@ -1,6 +1,5 @@
 from pypy.rpython.memory.gctransform.transform import BaseGCTransformer
 from pypy.objspace.flow.model import c_last_exception, Variable
-from pypy.rpython.memory.gctransform.support import var_ispyobj
 from pypy.translator.backendopt.support import var_needsgc
 from pypy.translator.translator import TranslationContext, graphof
 from pypy.translator.exceptiontransform import ExceptionTransformer
@@ -110,22 +109,13 @@
                                                   and not is_borrowed(v)])
     push_alives = len([op for op in block.operations
                        if op.opname == 'gc_push_alive'])
-    pyobj_push_alives = len([op for op in block.operations
-                             if op.opname == 'gc_push_alive_pyobj'])
 
-    # implicit_pyobj_pushalives included calls to things that return pyobject*
-    implicit_pyobj_pushalives = len([op for op in block.operations
-                                     if var_ispyobj(op.result)
-                                     and op.opname not in ('getfield', 'getarrayitem', 'same_as')])
-    nonpyobj_gc_returning_calls = len([op for op in block.operations
-                                       if op.opname in ('direct_call', 'indirect_call')
-                                       and var_needsgc(op.result)
-                                       and not var_ispyobj(op.result)])
+    gc_returning_calls = len([op for op in block.operations
+                              if op.opname in ('direct_call', 'indirect_call')
+                              and var_needsgc(op.result)])
 
     pop_alives = len([op for op in block.operations
                       if op.opname == 'gc_pop_alive'])
-    pyobj_pop_alives = len([op for op in block.operations
-                            if op.opname == 'gc_pop_alive_pyobj'])
     if pop_alives == len(block.operations):
         # it's a block we inserted
         return
@@ -135,9 +125,8 @@
         for v2 in link.target.inputargs:
             if var_needsgc(v2) and not is_borrowed(v2):
                 refs_out += 1
-        pyobj_pushes = pyobj_push_alives + implicit_pyobj_pushalives
-        nonpyobj_pushes = push_alives + nonpyobj_gc_returning_calls
-        assert refs_in + pyobj_pushes + nonpyobj_pushes == pop_alives + pyobj_pop_alives + refs_out
+        pushes = push_alives + gc_returning_calls
+        assert refs_in + pushes == pop_alives + refs_out
 
 def rtype(func, inputtypes, specialize=True):
     t = TranslationContext()
@@ -229,55 +218,6 @@
         return a.x + b.x
     t, transformer = rtype_and_transform(f, [int], _TestGCTransformer)
 
-def test_pyobj():
-    def f(x):
-        if x:
-            a = 1
-        else:
-            a = "1"
-        return int(a)
-    t, transformer = rtype_and_transform(f, [int], _TestGCTransformer)
-    fgraph = graphof(t, f)
-    gcops = [op for op in fgraph.startblock.exits[0].target.operations
-                 if op.opname.startswith("gc_")]
-    for op in gcops:
-        assert op.opname.endswith("_pyobj")
-
-def test_call_return_pyobj():
-    def g(factory):
-        return factory()
-    def f(factory):
-        g(factory)
-    t, transformer = rtype_and_transform(f, [object], _TestGCTransformer)
-    fgraph = graphof(t, f)
-    ops = getops(fgraph)
-    calls = ops['direct_call']
-    for call in calls:
-        if call.result.concretetype is not lltype.Bool: #RPyExceptionOccurred()
-            assert var_ispyobj(call.result)
-
-def test_getfield_pyobj():
-    class S:
-        pass
-    def f(thing):
-        s = S()
-        s.x = thing
-        return s.x
-    t, transformer = rtype_and_transform(f, [object], _TestGCTransformer)
-    fgraph = graphof(t, f)
-    pyobj_getfields = 0
-    pyobj_setfields = 0
-    for b in fgraph.iterblocks():
-        for op in b.operations:
-            if op.opname == 'getfield' and var_ispyobj(op.result):
-                pyobj_getfields += 1
-            elif op.opname == 'bare_setfield' and var_ispyobj(op.args[2]):
-                pyobj_setfields += 1
-    # although there's only one explicit getfield in the code, a
-    # setfield on a pyobj must get the old value out and decref it
-    assert pyobj_getfields >= 2
-    assert pyobj_setfields >= 1
-
 def test_pass_gc_pointer():
     S = lltype.GcStruct("S", ('x', lltype.Signed))
     def f(s):
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
@@ -505,7 +505,6 @@
         if add_flags:
             flags.update(add_flags)
         flavor = flags['flavor']
-        assert flavor != 'cpy', "cannot malloc CPython objects directly"
         meth = getattr(self, 'gct_fv_%s_malloc_varsize' % flavor, None)
         assert meth, "%s has no support for malloc_varsize with flavor %r" % (self, flavor) 
         return self.varsize_malloc_helper(hop, flags, meth, [])
@@ -583,7 +582,6 @@
         flags = op.args[1].value
         flavor = flags['flavor']
         v = op.args[0]
-        assert flavor != 'cpy', "cannot free CPython objects directly"
         if flavor == 'raw':
             v = hop.genop("cast_ptr_to_adr", [v], resulttype=llmemory.Address)
             if flags.get('track_allocation', True):
diff --git a/pypy/rpython/rmodel.py b/pypy/rpython/rmodel.py
--- a/pypy/rpython/rmodel.py
+++ b/pypy/rpython/rmodel.py
@@ -172,16 +172,15 @@
             isinstance(T.TO, (lltype.Struct,
                               lltype.Array,
                               lltype.ForwardReference))):
-            assert T.TO._gckind != 'cpy'
             return DummyValueBuilder(rtyper, T.TO)
         else:
             return None
 
     def rtype_bltn_list(self, hop):
-        raise TyperError, 'no list() support for %r' % self
+        raise TyperError('no list() support for %r' % self)
 
     def rtype_unichr(self, hop):
-        raise TyperError, 'no unichr() support for %r' % self
+        raise TyperError('no unichr() support for %r' % self)
 
     # default implementation of some operations
 
diff --git a/pypy/rpython/test/test_rbool.py b/pypy/rpython/test/test_rbool.py
--- a/pypy/rpython/test/test_rbool.py
+++ b/pypy/rpython/test/test_rbool.py
@@ -1,11 +1,10 @@
 from pypy.translator.translator import TranslationContext
-from pypy.rpython.lltypesystem.lltype import pyobjectptr
 from pypy.annotation import model as annmodel
 from pypy.rpython.test import snippet
 from pypy.rpython.test.tool import BaseRtypingTest, LLRtypeMixin, OORtypeMixin
 
+
 class TestSnippet(object):
-    
     def _test(self, func, types):
         t = TranslationContext()
         t.buildannotator().build_types(func, types)
diff --git a/pypy/rpython/test/test_rbuiltin.py b/pypy/rpython/test/test_rbuiltin.py
--- a/pypy/rpython/test/test_rbuiltin.py
+++ b/pypy/rpython/test/test_rbuiltin.py
@@ -562,31 +562,6 @@
 
 
 class TestLLtype(BaseTestRbuiltin, LLRtypeMixin):
-
-    def test_isinstance_obj(self):
-        _1 = lltype.pyobjectptr(1)
-        def f(x):
-            return isinstance(x, int)
-        res = self.interpret(f, [_1], someobjects=True)
-        assert res is True
-        _1_0 = lltype.pyobjectptr(1.0)
-        res = self.interpret(f, [_1_0], someobjects=True)
-        assert res is False
-
-    def test_hasattr(self):
-        class A(object):
-            def __init__(self):
-                self.x = 42
-        def f(i):
-            a = A()
-            if i==0: return int(hasattr(A, '__init__'))
-            if i==1: return int(hasattr(A, 'y'))
-            if i==2: return int(hasattr(42, 'x'))
-        for x, y in zip(range(3), (1, 0, 0)):
-            res = self.interpret(f, [x], someobjects=True)
-            assert res._obj.value == y
-        # hmm, would like to test against PyObj, is this the wrong place/way?
-
     def test_cast(self):
         def llfn(v):
             return rffi.cast(rffi.VOIDP, v)
@@ -607,7 +582,8 @@
         res = self.interpret(llfn, [lltype.nullptr(rffi.VOIDP.TO)])
         assert res == 0
         assert isinstance(res, r_ulonglong)
-        
+
+
 class TestOOtype(BaseTestRbuiltin, OORtypeMixin):
 
     def test_instantiate_multiple_meta(self):
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))
diff --git a/pypy/translator/c/test/test_genc.py b/pypy/translator/c/test/test_genc.py
--- a/pypy/translator/c/test/test_genc.py
+++ b/pypy/translator/c/test/test_genc.py
@@ -1,10 +1,7 @@
-import sys
-
 import py
 import ctypes
 
 from pypy.rpython.lltypesystem.lltype import *
-from pypy.annotation import model as annmodel
 from pypy.translator.translator import TranslationContext
 from pypy.translator.c import genc
 from pypy.translator.interactive import Translation
@@ -94,16 +91,6 @@
     assert f1(-5) == -42
 
 
-def test_rptr_array():
-    A = GcArray(Ptr(PyObject))
-    def f(i, x):
-        p = malloc(A, i)
-        p[1] = x
-        return p[1]
-    f1 = compile(f, [int, annmodel.SomePtr(Ptr(PyObject))])
-    assert f1(5, 123) == 123
-    assert f1(12, "hello") == "hello"
-
 def test_empty_string():
     A = Array(Char, hints={'nolength': True})
     p = malloc(A, 1, immortal=True)
@@ -304,61 +291,12 @@
     def f():
         x = [1]
         y = ['b']
-        objectmodel.keepalive_until_here(x,y)
+        objectmodel.keepalive_until_here(x, y)
         return 1
 
     f1 = compile(f, [])
     assert f1() == 1
 
-def test_refcount_pyobj():
-    def prob_with_pyobj(b):
-        return 3, b
-
-    f = compile(prob_with_pyobj, [object])
-    from sys import getrefcount as g
-    obj = None
-    import gc; gc.collect()
-    before = g(obj)
-    f(obj)
-    after = g(obj)
-    assert before == after
-
-def test_refcount_pyobj_setfield():
-    import weakref, gc
-    class S(object):
-        def __init__(self):
-            self.p = None
-    def foo(wref, objfact):
-        s = S()
-        b = objfact()
-        s.p = b
-        wr = wref(b)
-        s.p = None
-        return wr
-    f = compile(foo, [object, object], backendopt=False)
-    class C(object):
-        pass
-    wref = f(weakref.ref, C)
-    gc.collect()
-    assert not wref()
-
-def test_refcount_pyobj_setfield_increfs():
-    class S(object):
-        def __init__(self):
-            self.p = None
-    def goo(objfact):
-        s = S()
-        b = objfact()
-        s.p = b
-        return s
-    def foo(objfact):
-        s = goo(objfact)
-        return s.p
-    f = compile(foo, [object], backendopt=False)
-    class C(object):
-        pass
-    print f(C)
-
 def test_print():
     def f():
         for i in range(10):
@@ -375,7 +313,7 @@
 
     t = Translation(f, [], backend="c")
     t.annotate()
-    compiled_fn = t.compile_c()
+    t.compile_c()
     if py.test.config.option.view:
         t.view()
     assert 'pypy_xyz_f' in t.driver.cbuilder.c_source_filename.read()
@@ -391,7 +329,7 @@
 
     t = Translation(f, [], backend="c", secondaryentrypoints="test_entrypoints42")
     t.annotate()
-    compiled_fn = t.compile_c()
+    t.compile_c()
     if py.test.config.option.view:
         t.view()
     assert 'foobar' in t.driver.cbuilder.c_source_filename.read()
@@ -406,7 +344,7 @@
     export_struct("BarStruct", foo._obj)
     t = Translation(f, [], backend="c")
     t.annotate()
-    compiled_fn = t.compile_c()
+    t.compile_c()
     if py.test.config.option.view:
         t.view()
     assert ' BarStruct ' in t.driver.cbuilder.c_source_filename.read()
@@ -416,7 +354,6 @@
     from pypy.rpython.annlowlevel import llhelper
     from pypy.rpython.lltypesystem import lltype
     from pypy.rlib.objectmodel import specialize
-    from pypy.rlib.nonconst import NonConstant
     FT = lltype.ForwardReference()
     FTPTR = lltype.Ptr(FT)
     STRUCT = lltype.Struct("foo", ("bar", FTPTR))
@@ -464,7 +401,6 @@
     assert fn(True)
 
 def test_inhibit_tail_call():
-    from pypy.rpython.lltypesystem import lltype
     def foobar_fn(n):
         return 42
     foobar_fn._dont_inline_ = True


More information about the pypy-commit mailing list