[pypy-commit] pypy kill-someobject: merge

fijal noreply at buildbot.pypy.org
Sun Oct 7 19:56:31 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: kill-someobject
Changeset: r57845:4766f06dd382
Date: 2012-10-07 19:55 +0200
http://bitbucket.org/pypy/pypy/changeset/4766f06dd382/

Log:	merge

diff --git a/pypy/jit/codewriter/call.py b/pypy/jit/codewriter/call.py
--- a/pypy/jit/codewriter/call.py
+++ b/pypy/jit/codewriter/call.py
@@ -180,11 +180,8 @@
         """
         fnptr = self.rtyper.type_system.getcallable(graph)
         FUNC = get_functype(lltype.typeOf(fnptr))
-        assert lltype.Ptr(lltype.PyObject) not in FUNC.ARGS
-        if self.rtyper.type_system.name == 'ootypesystem':
-            XXX
-        else:
-            fnaddr = llmemory.cast_ptr_to_adr(fnptr)
+        assert self.rtyper.type_system.name == "lltypesystem"
+        fnaddr = llmemory.cast_ptr_to_adr(fnptr)
         NON_VOID_ARGS = [ARG for ARG in FUNC.ARGS if ARG is not lltype.Void]
         calldescr = self.cpu.calldescrof(FUNC, tuple(NON_VOID_ARGS),
                                          FUNC.RESULT, EffectInfo.MOST_GENERAL)
diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -430,7 +430,6 @@
               'enable_opts': 'all',
               }
 unroll_parameters = unrolling_iterable(PARAMETERS.items())
-DEFAULT = object()
 
 # ____________________________________________________________
 
@@ -552,7 +551,7 @@
 def _set_param(driver, name, value):
     # special-cased by ExtRegistryEntry
     # (internal, must receive a constant 'name')
-    # if value is DEFAULT, sets the default value.
+    # if value is None, sets the default value.
     assert name in PARAMETERS
 
 @specialize.arg(0, 1)
@@ -564,7 +563,7 @@
 @specialize.arg(0, 1)
 def set_param_to_default(driver, name):
     """Reset one of the tunable JIT parameters to its default value."""
-    _set_param(driver, name, DEFAULT)
+    _set_param(driver, name, None)
 
 def set_user_param(driver, text):
     """Set the tunable JIT parameters from a user-supplied string
@@ -641,11 +640,7 @@
             self.bookkeeper._jit_annotation_cache[driver] = cache
         for key, s_value in kwds_s.items():
             s_previous = cache.get(key, annmodel.s_ImpossibleValue)
-            s_value = annmodel.unionof(s_previous, s_value)
-            if annmodel.isdegenerated(s_value):
-                raise JitHintError("mixing incompatible types in argument %s"
-                                   " of jit_merge_point/can_enter_jit" %
-                                   key[2:])
+            s_value = annmodel.unionof(s_previous, s_value)  # where="mixing incompatible types in argument %s of jit_merge_point/can_enter_jit" % key[2:]
             cache[key] = s_value
 
         # add the attribute _dont_reach_me_in_del_ (see pypy.rpython.rclass)
@@ -775,7 +770,7 @@
     def compute_result_annotation(self, s_driver, s_name, s_value):
         from pypy.annotation import model as annmodel
         assert s_name.is_constant()
-        if not self.bookkeeper.immutablevalue(DEFAULT).contains(s_value):
+        if annmodel.s_None.contains(s_value):
             if s_name.const == 'enable_opts':
                 assert annmodel.SomeString(can_be_None=True).contains(s_value)
             else:
@@ -795,7 +790,7 @@
         else:
             repr = lltype.Signed
         if (isinstance(hop.args_v[2], Constant) and
-            hop.args_v[2].value is DEFAULT):
+            hop.args_v[2].value is None):
             value = PARAMETERS[name]
             v_value = hop.inputconst(repr, value)
         else:
diff --git a/pypy/rpython/lltypesystem/test/test_lltype.py b/pypy/rpython/lltypesystem/test/test_lltype.py
--- a/pypy/rpython/lltypesystem/test/test_lltype.py
+++ b/pypy/rpython/lltypesystem/test/test_lltype.py
@@ -718,10 +718,6 @@
     gc.collect()
     repr(s)
 
-def test_pyobject():
-    p = pyobjectptr({42: 84})
-    assert typeOf(p) == Ptr(PyObject)
-
 def test_name_clash():
     import re
     fn = lltype.__file__
diff --git a/pypy/rpython/memory/gctransform/support.py b/pypy/rpython/memory/gctransform/support.py
--- a/pypy/rpython/memory/gctransform/support.py
+++ b/pypy/rpython/memory/gctransform/support.py
@@ -3,17 +3,6 @@
 from pypy.annotation import model as annmodel
 import os
 
-def var_ispyobj(var):
-    if hasattr(var, 'concretetype'):
-        if isinstance(var.concretetype, lltype.Ptr):
-            return var.concretetype.TO._gckind == 'cpy'
-        else:
-            return False
-    else:
-        # assume PyObjPtr
-        return True
-
-PyObjPtr = lltype.Ptr(lltype.PyObject)
 
 def find_gc_ptrs_in_type(TYPE):
     if isinstance(TYPE, lltype.Array):
@@ -33,20 +22,6 @@
     else:
         return []
 
-def type_contains_pyobjs(TYPE):
-    if isinstance(TYPE, lltype.Array):
-        return type_contains_pyobjs(TYPE.OF)
-    elif isinstance(TYPE, lltype.Struct):
-        result = []
-        for name in TYPE._names:
-            if type_contains_pyobjs(TYPE._flds[name]):
-                return True
-        return False
-    elif isinstance(TYPE, lltype.Ptr) and TYPE.TO._gckind == 'cpy':
-        return True
-    else:
-        return False
-
 def get_rtti(TYPE):
     if isinstance(TYPE, lltype.RttiStruct):
         try:
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
@@ -1,4 +1,3 @@
-import py
 from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.objspace.flow.model import SpaceOperation, Variable, Constant, \
      c_last_exception, checkgraph
@@ -7,24 +6,18 @@
 from pypy.translator.unsimplify import starts_with_empty_block
 from pypy.translator.backendopt.support import var_needsgc
 from pypy.translator.backendopt import inline
-from pypy.translator.backendopt import graphanalyze
 from pypy.translator.backendopt.canraise import RaiseAnalyzer
 from pypy.translator.backendopt.ssa import DataFlowFamilyBuilder
 from pypy.translator.backendopt.constfold import constant_fold_graph
 from pypy.annotation import model as annmodel
 from pypy.rpython import rmodel
-from pypy.rpython.memory import gc
-from pypy.rpython.memory.gctransform.support import var_ispyobj
 from pypy.rpython.annlowlevel import MixLevelHelperAnnotator
 from pypy.rpython.rtyper import LowLevelOpList
 from pypy.rpython.rbuiltin import gen_cast
 from pypy.rlib.rarithmetic import ovfcheck
-import sys
-import os
 from pypy.rpython.lltypesystem.lloperation import llop
-from pypy.translator.simplify import join_blocks, cleanup_graph
+from pypy.translator.simplify import cleanup_graph
 
-PyObjPtr = lltype.Ptr(lltype.PyObject)
 
 class GcHighLevelOp(object):
     def __init__(self, gct, op, index, llops):
@@ -55,17 +48,9 @@
 
         if var_needsgc(v_result):
             gct.livevars.append(v_result)
-            if var_ispyobj(v_result):
-                if opname in ('getfield', 'getarrayitem', 'same_as',
-                                 'cast_pointer', 'getsubstruct',
-                                 'getinteriorfield'):
-                    # XXX more operations?
-                    gct.push_alive(v_result, self.llops)
-            elif opname not in ('direct_call', 'indirect_call'):
+            if opname not in ('direct_call', 'indirect_call'):
                 gct.push_alive(v_result, self.llops)
 
-
-
     def rename(self, newopname):
         self.llops.append(
             SpaceOperation(newopname, self.spaceop.args, self.spaceop.result))
@@ -85,8 +70,8 @@
 
     def cast_result(self, var):
         v_result = self.spaceop.result
-        resulttype = getattr(v_result, 'concretetype', PyObjPtr)
-        curtype = getattr(var, 'concretetype', PyObjPtr)
+        resulttype = v_result.concretetype
+        curtype = var.concretetype
         if curtype == resulttype:
             self.genop('same_as', [var], resultvar=v_result)
         else:
@@ -120,11 +105,8 @@
             self.minimalgctransformer = None
 
     def get_lltype_of_exception_value(self):
-        if self.translator is not None:
-            exceptiondata = self.translator.rtyper.getexceptiondata()
-            return exceptiondata.lltype_of_exception_value
-        else:
-            return lltype.Ptr(lltype.PyObject)
+        exceptiondata = self.translator.rtyper.getexceptiondata()
+        return exceptiondata.lltype_of_exception_value
 
     def need_minimal_transform(self, graph):
         self.seen_graphs[graph] = True
@@ -329,28 +311,11 @@
         hop.rename('bare_' + opname)
         self.pop_alive(v_old, hop.llops)
 
-
     def push_alive(self, var, llops):
-        if var_ispyobj(var):
-            self.push_alive_pyobj(var, llops)
-        else:
-            self.push_alive_nopyobj(var, llops)
+        self.push_alive_nopyobj(var, llops)
 
     def pop_alive(self, var, llops):
-        if var_ispyobj(var):
-            self.pop_alive_pyobj(var, llops)
-        else:
-            self.pop_alive_nopyobj(var, llops)
-
-    def push_alive_pyobj(self, var, llops):
-        if hasattr(var, 'concretetype') and var.concretetype != PyObjPtr:
-            var = gen_cast(llops, PyObjPtr, var)
-        llops.genop("gc_push_alive_pyobj", [var])
-
-    def pop_alive_pyobj(self, var, llops):
-        if hasattr(var, 'concretetype') and var.concretetype != PyObjPtr:
-            var = gen_cast(llops, PyObjPtr, var)
-        llops.genop("gc_pop_alive_pyobj", [var])
+        self.pop_alive_nopyobj(var, llops)
 
     def push_alive_nopyobj(self, var, llops):
         pass
@@ -359,7 +324,7 @@
         pass
 
     def var_needs_set_transform(self, var):
-        return var_ispyobj(var)
+        return False
 
     def default(self, hop):
         hop.llops.append(hop.spaceop)
diff --git a/pypy/rpython/memory/gcwrapper.py b/pypy/rpython/memory/gcwrapper.py
--- a/pypy/rpython/memory/gcwrapper.py
+++ b/pypy/rpython/memory/gcwrapper.py
@@ -5,6 +5,7 @@
 from pypy.rpython.memory import gctypelayout
 from pypy.objspace.flow.model import Constant
 
+
 class GCManagedHeap(object):
 
     def __init__(self, llinterp, flowgraphs, gc_class, GC_PARAMS={}):
@@ -152,9 +153,6 @@
         else:
             return True
 
-    def pyobjectptr(self, klass):
-        raise NotImplementedError(klass)
-
 # ____________________________________________________________
 
 class LLInterpRootWalker:
@@ -193,8 +191,7 @@
         super(DirectRunLayoutBuilder, self).__init__(GCClass, lltype2vtable)
 
     def make_finalizer_funcptr_for_type(self, TYPE):
-        from pypy.rpython.memory.gctransform.support import get_rtti, \
-                type_contains_pyobjs
+        from pypy.rpython.memory.gctransform.support import get_rtti
         rtti = get_rtti(TYPE)
         if rtti is not None and hasattr(rtti._obj, 'destructor_funcptr'):
             destrptr = rtti._obj.destructor_funcptr
@@ -203,7 +200,6 @@
         else:
             return None, False
 
-        assert not type_contains_pyobjs(TYPE), "not implemented"
         t = self.llinterp.typer.annotator.translator
         light = not FinalizerAnalyzer(t).analyze_light_finalizer(destrgraph)
         def ll_finalizer(addr, dummy):
@@ -218,8 +214,7 @@
         return llhelper(gctypelayout.GCData.FINALIZER_OR_CT, ll_finalizer), light
 
     def make_custom_trace_funcptr_for_type(self, TYPE):
-        from pypy.rpython.memory.gctransform.support import get_rtti, \
-                type_contains_pyobjs
+        from pypy.rpython.memory.gctransform.support import get_rtti
         rtti = get_rtti(TYPE)
         if rtti is not None and hasattr(rtti._obj, 'custom_trace_funcptr'):
             return rtti._obj.custom_trace_funcptr
diff --git a/pypy/rpython/memory/lltypelayout.py b/pypy/rpython/memory/lltypelayout.py
--- a/pypy/rpython/memory/lltypelayout.py
+++ b/pypy/rpython/memory/lltypelayout.py
@@ -47,8 +47,6 @@
         return "i"
     elif isinstance(TYPE, lltype.FuncType):
         return "i"
-    elif isinstance(TYPE, lltype.PyObjectType):
-        return "i"
     else:
         assert 0, "type %s not yet implemented" % (TYPE, )
 
@@ -71,8 +69,6 @@
         return get_fixed_size(lltype.Unsigned)
     elif isinstance(TYPE, lltype.FuncType):
         return get_fixed_size(lltype.Unsigned)
-    elif isinstance(TYPE, lltype.PyObjectType):
-        return get_fixed_size(lltype.Unsigned)
     assert 0, "not yet implemented"
 
 def get_variable_size(TYPE):
@@ -89,8 +85,6 @@
         return 0
     elif isinstance(TYPE, lltype.FuncType):
         return 0
-    elif isinstance(TYPE, lltype.PyObjectType):
-        return 0
     elif isinstance(TYPE, lltype.Ptr):
         return 0
     else:
diff --git a/pypy/rpython/ootypesystem/rdict.py b/pypy/rpython/ootypesystem/rdict.py
--- a/pypy/rpython/ootypesystem/rdict.py
+++ b/pypy/rpython/ootypesystem/rdict.py
@@ -7,6 +7,8 @@
 from pypy.rpython.ootypesystem import ootype
 from pypy.rlib import objectmodel
 from pypy.rpython import rmodel, llinterp
+# This is needed by other things, don't remove!
+from pypy.rpython.rdict import rtype_newdict
 
 
 class DictRepr(AbstractDictRepr):
diff --git a/pypy/rpython/rdict.py b/pypy/rpython/rdict.py
--- a/pypy/rpython/rdict.py
+++ b/pypy/rpython/rdict.py
@@ -1,10 +1,5 @@
-from pypy.tool.pairtype import pairtype
 from pypy.annotation import model as annmodel
-from pypy.objspace.flow.model import Constant
 from pypy.rpython.lltypesystem import lltype
-from pypy.rlib.rarithmetic import r_uint
-from pypy.rlib.objectmodel import hlinvoke
-from pypy.rlib import objectmodel
 from pypy.rpython import rmodel
 
 
@@ -58,9 +53,6 @@
 def rtype_newdict(hop):
     hop.inputargs()    # no arguments expected
     r_dict = hop.r_result
-    if r_dict == robject.pyobj_repr: # special case: SomeObject: SomeObject dicts!
-        cdict = hop.inputconst(robject.pyobj_repr, dict)
-        return hop.genop('simple_call', [cdict], resulttype = robject.pyobj_repr)
     cDICT = hop.inputconst(lltype.Void, r_dict.DICT)
     v_result = hop.gendirectcall(hop.rtyper.type_system.rdict.ll_newdict, cDICT)
     return v_result
diff --git a/pypy/rpython/test/test_robject.py b/pypy/rpython/test/test_robject.py
deleted file mode 100644
--- a/pypy/rpython/test/test_robject.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from pypy.rpython.lltypesystem.lltype import *
-from pypy.rpython.test.test_llinterp import interpret
-
-
-def test_simple():
-    def fn(obj):
-        return obj + 1
-    _1L = pyobjectptr(1L)
-    res = interpret(fn, [_1L], someobjects=True)
-    assert res._obj.value == 2L
-
-def test_obj_obj_dict():
-    def f(i, c):
-        d = {}
-        d[1] = 'a'
-        d['a'] = i
-        d['ab'] = c
-        d[i] = c
-        return len(d)
-    res = interpret(f, [2, 'c'], someobjects=True)
-    assert res == 4
-    res = interpret(f, [3, 'c'], someobjects=True)
-    assert res == 4
-
-def test_obj_list():
-    def f(i, c):
-        lis = [1, 2, 3, 4]
-        lis[i] = c
-        lis.append(i)
-        return len(lis)
-    res = interpret(f, [2, 'c'], someobjects=True)
-    assert res == 5
-    res = interpret(f, [3, 'c'], someobjects=True)
-    assert res == 5
-
-def test_obj_iter():
-    def f(flag):
-        if flag:
-            x = (1, 2)
-        else:
-            x = '34'
-        lst = [u for u in x]
-        return lst[flag]
-    res = interpret(f, [1], someobjects=True)
-    assert res._obj.value == 2
-    res = interpret(f, [0], someobjects=True)
-    assert res._obj.value == '3'
-
-def test_listofobj_iter():
-    def f(look):
-        lst = ['*', 2, 5]
-        for u in lst:
-            if u == look:
-                return True
-        return False
-    res = interpret(f, [1], someobjects=True)
-    assert res is False
-    res = interpret(f, [2], someobjects=True)
-    assert res is True
diff --git a/pypy/rpython/typesystem.py b/pypy/rpython/typesystem.py
--- a/pypy/rpython/typesystem.py
+++ b/pypy/rpython/typesystem.py
@@ -119,7 +119,7 @@
         return hop.genop('ptr_nonzero', vlist, resulttype=lltype.Bool)
 
     def getconcretetype(self, v):
-        return getattr(v, 'concretetype', lltype.Ptr(lltype.PyObject))
+        return v.concretetype
 
     def null_callable(self, T):
         return lltype.nullptr(T.TO)
diff --git a/pypy/translator/c/funcgen.py b/pypy/translator/c/funcgen.py
--- a/pypy/translator/c/funcgen.py
+++ b/pypy/translator/c/funcgen.py
@@ -53,7 +53,7 @@
         self.collect_var_and_types()
 
         for v in self.vars:
-            T = getattr(v, 'concretetype', PyObjPtr)
+            T = v.concretetype
             # obscure: skip forward references and hope for the best
             # (needed for delayed function pointers)
             if isinstance(T, Ptr) and T.TO.__class__ == ForwardReference:
@@ -121,7 +121,7 @@
         db = self.db
         lltypes = identity_dict()
         for v in self.vars:
-            T = getattr(v, 'concretetype', PyObjPtr)
+            T = v.concretetype
             typename = db.gettype(T)
             lltypes[v] = T, typename
         self.illtypes = lltypes
@@ -221,12 +221,6 @@
             if len(block.exits) == 0:
                 assert len(block.inputargs) == 1
                 # regular return block
-                if self.exception_policy == "CPython":
-                    assert self.lltypemap(self.graph.getreturnvar()) == PyObjPtr
-                    yield 'if (RPyExceptionOccurred()) {'
-                    yield '\tRPyConvertExceptionToCPython();'
-                    yield '\treturn NULL;'
-                    yield '}'
                 retval = self.expr(block.inputargs[0])
                 if self.exception_policy != "exc_helper":
                     yield 'RPY_DEBUG_RETURN();'
@@ -241,20 +235,12 @@
                 assert block.exitswitch != c_last_exception
                 # block ending in a switch on a value
                 TYPE = self.lltypemap(block.exitswitch)
-                if TYPE in (Bool, PyObjPtr):
+                if TYPE == Bool:
                     expr = self.expr(block.exitswitch)
                     for link in block.exits[:0:-1]:
                         assert link.exitcase in (False, True)
-                        if TYPE == Bool:
-                            if not link.exitcase:
-                                expr = '!' + expr
-                        elif TYPE == PyObjPtr:
-                            yield 'assert(%s == Py_True || %s == Py_False);' % (
-                                expr, expr)
-                            if link.exitcase:
-                                expr = '%s == Py_True' % expr
-                            else:
-                                expr = '%s == Py_False' % expr
+                        if not link.exitcase:
+                            expr = '!' + expr
                         yield 'if (%s) {' % expr
                         for op in self.gen_link(link):
                             yield '\t' + op
diff --git a/pypy/translator/c/genc.py b/pypy/translator/c/genc.py
--- a/pypy/translator/c/genc.py
+++ b/pypy/translator/c/genc.py
@@ -276,44 +276,6 @@
             extrafiles.append(fn)
         return extrafiles
 
-class ModuleWithCleanup(object):
-    def __init__(self, mod):
-        self.__dict__['mod'] = mod
-
-    def __getattr__(self, name):
-        mod = self.__dict__['mod']
-        obj = getattr(mod, name)
-        parentself = self
-        if callable(obj) and getattr(obj, '__module__', None) == mod.__name__:
-            # The module must be kept alive with the function.
-            # This wrapper avoids creating a cycle.
-            class Wrapper:
-                def __init__(self, obj):
-                    self.myself = parentself
-                    self.func = obj
-                def __call__(self, *args, **kwargs):
-                    return self.func(*args, **kwargs)
-            obj = Wrapper(obj)
-        return obj
-
-    def __setattr__(self, name, val):
-        mod = self.__dict__['mod']
-        setattr(mod, name, val)
-
-    def __del__(self):
-        import sys
-        if sys.platform == "win32":
-            from _ctypes import FreeLibrary as dlclose
-        else:
-            from _ctypes import dlclose
-        # XXX fish fish fish
-        mod = self.__dict__['mod']
-        dlclose(mod._lib._handle)
-        try:
-            del sys.modules[mod.__name__]
-        except KeyError:
-            pass
-
 
 class CStandaloneBuilder(CBuilder):
     standalone = True
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,23 +1,18 @@
-import autopath, sys, os, py
+import sys
+
+import py
+
 from pypy.rpython.lltypesystem.lltype import *
 from pypy.annotation import model as annmodel
 from pypy.translator.translator import TranslationContext
-from pypy.translator.c.database import LowLevelDatabase
 from pypy.translator.c import genc
-from pypy.translator.c.gc import NoneGcPolicy
-from pypy.objspace.flow.model import Constant, Variable, SpaceOperation
-from pypy.objspace.flow.model import Block, Link, FunctionGraph
-from pypy.tool.udir import udir
-from pypy.translator.gensupp import uniquemodulename
-from pypy.translator.backendopt.all import backend_optimizations
 from pypy.translator.interactive import Translation
 from pypy.rlib.entrypoint import entrypoint
 from pypy.tool.nullpath import NullPyPathLocal
 
+
 def compile(fn, argtypes, view=False, gcpolicy="ref", backendopt=True,
             annotatorpolicy=None):
-    if argtypes is not None and "__pypy__" in sys.builtin_module_names:
-        py.test.skip("requires building cpython extension modules")
     t = Translation(fn, argtypes, gc=gcpolicy, backend="c",
                     policy=annotatorpolicy)
     if not backendopt:
@@ -49,19 +44,11 @@
 def test_simple():
     def f(x):
         return x*2
-    t = TranslationContext()
-    t.buildannotator().build_types(f, [int])
-    t.buildrtyper().specialize()
 
-    t.config.translation.countmallocs = True
-    builder = genc.CExtModuleBuilder(t, f, config=t.config)
-    builder.generate_source()
-    builder.compile()
-    f1 = builder.get_entry_point()
+    f1 = compile(f, [int])
 
     assert f1(5) == 10
     assert f1(-123) == -246
-    assert builder.get_malloc_counters()() == (0, 0)
 
     py.test.raises(Exception, f1, "world")  # check that it's really typed
 
diff --git a/pypy/translator/interactive.py b/pypy/translator/interactive.py
--- a/pypy/translator/interactive.py
+++ b/pypy/translator/interactive.py
@@ -1,9 +1,7 @@
-import optparse
-
-import autopath
 from pypy.translator.translator import TranslationContext
 from pypy.translator import driver
 
+
 DEFAULTS = {
   'translation.backend': None,
   'translation.type_system': None,
@@ -44,7 +42,7 @@
              self.ensure_setup()
         elif kind == 'post':
             pass
-            
+
     def ensure_setup(self, argtypes=None, policy=None, standalone=False):
         if not self.driver_setup:
             if standalone:
@@ -74,7 +72,8 @@
         kwds.pop('policy', None)
         kwds.pop('standalone', None)
         gc = kwds.pop('gc', None)
-        if gc: self.config.translation.gc = gc
+        if gc:
+            self.config.translation.gc = gc
         self.config.translation.set(**kwds)
 
     def ensure_opt(self, name, value=None, fallback=None):
@@ -88,13 +87,13 @@
         if val is not None:
             return val
         raise Exception(
-                    "the %r option should have been specified at this point" %name)
+                    "the %r option should have been specified at this point" % name)
 
     def ensure_type_system(self, type_system=None):
         if self.config.translation.backend is not None:
             return self.ensure_opt('type_system')
         return self.ensure_opt('type_system', type_system, 'lltype')
-        
+
     def ensure_backend(self, backend=None):
         backend = self.ensure_opt('backend', backend)
         self.ensure_type_system()
@@ -121,20 +120,20 @@
     def rtype(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         ts = self.ensure_type_system()
-        return getattr(self.driver, 'rtype_'+ts)()        
+        return getattr(self.driver, 'rtype_' + ts)()
 
     def backendopt(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         ts = self.ensure_type_system('lltype')
-        return getattr(self.driver, 'backendopt_'+ts)()                
-            
+        return getattr(self.driver, 'backendopt_' + ts)()
+
     # backend depedent
 
     def source(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         backend = self.ensure_backend()
-        getattr(self.driver, 'source_'+backend)()
-       
+        getattr(self.driver, 'source_' + backend)()
+
     def source_c(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         self.ensure_backend('c')
@@ -148,15 +147,15 @@
     def compile(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         backend = self.ensure_backend()
-        getattr(self.driver, 'compile_'+backend)()
+        getattr(self.driver, 'compile_' + backend)()
         return self.driver.c_entryp
-       
+
     def compile_c(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         self.ensure_backend('c')
         self.driver.compile_c()
         return self.driver.c_entryp
-  
+
     def compile_cli(self, argtypes=None, **kwds):
         self.update_options(argtypes, kwds)
         self.ensure_backend('cli')
diff --git a/pypy/translator/llsupport/test/test_wrapper.py b/pypy/translator/llsupport/test/test_wrapper.py
deleted file mode 100644
--- a/pypy/translator/llsupport/test/test_wrapper.py
+++ /dev/null
@@ -1,60 +0,0 @@
-import py
-from pypy import conftest
-from pypy.translator.translator import TranslationContext
-from pypy.translator.llsupport.wrapper import new_wrapper
-from pypy.rpython.rmodel import PyObjPtr
-from pypy.rpython.llinterp import LLInterpreter
-from pypy.rpython.lltypesystem import lltype
-
-
-class TestMakeWrapper:
-
-    def getgraph(self, func, argtypes=None):
-        from pypy.config.pypyoption import get_pypy_config
-        config = get_pypy_config(translating=True)
-        config.translation.gc = "ref"
-        config.translation.simplifying = True
-        t = TranslationContext(config=config)
-        if argtypes is None:
-            argtypes = []
-        a = t.buildannotator()
-        a.build_types(func, argtypes)
-        a.simplify()
-        t.buildrtyper().specialize()
-        wrapperptr = new_wrapper(func, t)
-        wrappergraph = wrapperptr._obj.graph
-        F = lltype.typeOf(wrapperptr).TO
-        assert F.ARGS == (PyObjPtr,) * len(wrappergraph.getargs())
-        assert F.RESULT == PyObjPtr
-
-        for inputarg in wrappergraph.getargs():
-            assert inputarg.concretetype == PyObjPtr
-        assert wrappergraph.getreturnvar().concretetype == PyObjPtr
-        return t.graphs[0], wrappergraph, t
-
-    def interpret(self, t, graph, *args):
-        interp = LLInterpreter(t.rtyper)
-        result = interp.eval_graph(graph, [lltype.pyobjectptr(arg)
-                                               for arg in args])
-        return result._obj.value
-
-    def test_simple(self):
-        def f(x):
-            return x * 3
-        graph, wrappergraph, t = self.getgraph(f, [int])
-        res = self.interpret(t, wrappergraph, 3)
-        assert res == 9
-
-    def test_manyargs(self):
-        def f(x, y, z):
-            return x * y + z
-        graph, wrappergraph, t = self.getgraph(f, [int, int, int])
-        res = self.interpret(t, wrappergraph, 3, 4, 5)
-        assert res == 3 * 4 + 5
-
-    def test_returnnone(self):
-        def f():
-            pass
-        graph, wrappergraph, t = self.getgraph(f)
-        res = self.interpret(t, wrappergraph)
-        assert res is None
diff --git a/pypy/translator/llsupport/wrapper.py b/pypy/translator/llsupport/wrapper.py
deleted file mode 100644
--- a/pypy/translator/llsupport/wrapper.py
+++ /dev/null
@@ -1,78 +0,0 @@
-from pypy.objspace.flow.model import Variable
-from pypy.objspace.flow.model import Block, Link, FunctionGraph, checkgraph
-from pypy.rpython.lltypesystem.lltype import \
-     Ptr, PyObject, typeOf, Signed, FuncType, functionptr, nullptr, Void
-from pypy.rpython.rtyper import LowLevelOpList
-from pypy.rpython.rmodel import inputconst, PyObjPtr
-from pypy.rpython.robject import pyobj_repr
-
-from pypy.rpython.typesystem import getfunctionptr
-
-
-
-def new_wrapper(func, translator, newname=None):
-    # The basic idea is to produce a flow graph from scratch, using the
-    # help of the rtyper for the conversion of the arguments after they
-    # have been decoded.
-    
-    bk = translator.annotator.bookkeeper
-    graph = bk.getdesc(func).getuniquegraph()
-
-    f = getfunctionptr(graph)
-    FUNCTYPE = typeOf(f).TO
-
-    newops = LowLevelOpList(translator.rtyper)
-
-    varguments = []
-    for var in graph.startblock.inputargs:
-        v = Variable(var)
-        v.concretetype = PyObjPtr
-        varguments.append(v)
-
-    wrapper_inputargs = varguments[:]
-    # use the rtyper to produce the conversions
-    inputargs = f._obj.graph.getargs()
-    for i in range(len(varguments)):
-        if FUNCTYPE.ARGS[i] != PyObjPtr:
-            rtyper = translator.rtyper
-            r_arg = rtyper.bindingrepr(inputargs[i])
-            # give the rtyper a chance to know which function we are wrapping
-            rtyper.set_wrapper_context(func)
-            varguments[i] = newops.convertvar(varguments[i],
-                                              r_from = pyobj_repr,
-                                              r_to = r_arg)
-            rtyper.set_wrapper_context(None)
-
-    vlist = [inputconst(typeOf(f), f)] + varguments
-    vresult = newops.genop('direct_call', vlist, resulttype=FUNCTYPE.RESULT)
-
-    if FUNCTYPE.RESULT != PyObjPtr:
-        # convert "result" back to a PyObject
-        rtyper = translator.rtyper
-        assert rtyper is not None, (
-            "needs the rtyper to perform function result conversions")
-        r_result = rtyper.bindingrepr(f._obj.graph.getreturnvar())
-        vresult = newops.convertvar(vresult,
-                                    r_from = r_result,
-                                    r_to = pyobj_repr)
-
-    # "return result"
-    block = Block(wrapper_inputargs)
-    wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
-    translator.update_call_graph(wgraph, graph, object())
-    translator.graphs.append(wgraph)
-    block.operations[:] = newops
-    block.closeblock(Link([vresult], wgraph.returnblock))
-    wgraph.getreturnvar().concretetype = PyObjPtr
-    checkgraph(wgraph)
-
-    # the above convertvar()s may have created and annotated new helpers
-    # that need to be specialized now
-    translator.rtyper.specialize_more_blocks()
-
-    return functionptr(FuncType([PyObjPtr] * len(wrapper_inputargs),
-                                PyObjPtr),
-                       wgraph.name,
-                       graph = wgraph,
-                       exception_policy = "CPython")
-


More information about the pypy-commit mailing list