[pypy-commit] pypy default: Merged type_system-cleanup into default

rlamy noreply at buildbot.pypy.org
Fri Oct 9 20:47:20 CEST 2015


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: 
Changeset: r80097:ca136a601d5b
Date: 2015-10-09 19:47 +0100
http://bitbucket.org/pypy/pypy/changeset/ca136a601d5b/

Log:	Merged type_system-cleanup into default

diff --git a/pypy/module/_io/interp_io.py b/pypy/module/_io/interp_io.py
--- a/pypy/module/_io/interp_io.py
+++ b/pypy/module/_io/interp_io.py
@@ -118,7 +118,7 @@
     if buffering < 0:
         buffering = DEFAULT_BUFFER_SIZE
 
-        if space.config.translation.type_system == 'lltype' and 'st_blksize' in STAT_FIELD_TYPES:
+        if 'st_blksize' in STAT_FIELD_TYPES:
             fileno = space.c_int_w(space.call_method(w_raw, "fileno"))
             try:
                 st = os.fstat(fileno)
diff --git a/pypy/module/sys/vm.py b/pypy/module/sys/vm.py
--- a/pypy/module/sys/vm.py
+++ b/pypy/module/sys/vm.py
@@ -57,8 +57,7 @@
         raise OperationError(space.w_ValueError,
                              space.wrap("recursion limit must be positive"))
     space.sys.recursionlimit = new_limit
-    if space.config.translation.type_system == 'lltype':
-        _stack_set_length_fraction(new_limit * 0.001)
+    _stack_set_length_fraction(new_limit * 0.001)
 
 def getrecursionlimit(space):
     """Return the last value set by setrecursionlimit().
diff --git a/pypy/tool/pypyjit.py b/pypy/tool/pypyjit.py
--- a/pypy/tool/pypyjit.py
+++ b/pypy/tool/pypyjit.py
@@ -93,7 +93,6 @@
     try:
         interp, graph = get_interpreter(entry_point, [], backendopt=False,
                                         config=config,
-                                        type_system=config.translation.type_system,
                                         policy=PyPyAnnotatorPolicy(space))
     except Exception, e:
         print '%s: %s' % (e.__class__, e)
diff --git a/rpython/jit/backend/arm/test/support.py b/rpython/jit/backend/arm/test/support.py
--- a/rpython/jit/backend/arm/test/support.py
+++ b/rpython/jit/backend/arm/test/support.py
@@ -8,7 +8,6 @@
 from rpython.rlib.jit import JitDriver
 
 class JitARMMixin(support.LLJitMixin):
-    type_system = 'lltype'
     CPUClass = getcpuclass()
     # we have to disable unroll
     enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap"
diff --git a/rpython/jit/backend/llsupport/test/test_regalloc_integration.py b/rpython/jit/backend/llsupport/test/test_regalloc_integration.py
--- a/rpython/jit/backend/llsupport/test/test_regalloc_integration.py
+++ b/rpython/jit/backend/llsupport/test/test_regalloc_integration.py
@@ -86,11 +86,9 @@
                                    EffectInfo.MOST_GENERAL)
 
     namespace = locals().copy()
-    type_system = 'lltype'
 
     def parse(self, s, boxkinds=None, namespace=None):
         return parse(s, self.cpu, namespace or self.namespace,
-                     type_system=self.type_system,
                      boxkinds=boxkinds)
 
     def interpret(self, ops, args, run=True, namespace=None):
diff --git a/rpython/jit/backend/test/calling_convention_test.py b/rpython/jit/backend/test/calling_convention_test.py
--- a/rpython/jit/backend/test/calling_convention_test.py
+++ b/rpython/jit/backend/test/calling_convention_test.py
@@ -23,7 +23,6 @@
     pass
 
 class CallingConvTests(Runner):
-    type_system = 'lltype'
     Ptr = lltype.Ptr
     FuncType = lltype.FuncType
 
diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -1775,7 +1775,6 @@
 
 class LLtypeBackendTest(BaseBackendTest):
 
-    type_system = 'lltype'
     Ptr = lltype.Ptr
     FuncType = lltype.FuncType
     malloc = staticmethod(lltype.malloc)
@@ -3147,7 +3146,7 @@
             ops = [
                 ResOperation(rop.CALL_RELEASE_GIL_I,
                              [ConstInt(saveerr), ConstInt(func1_adr)]
-                                 + inputargs, 
+                                 + inputargs,
                              descr=calldescr),
                 ResOperation(rop.GUARD_NOT_FORCED, [], descr=faildescr),
             ]
diff --git a/rpython/jit/backend/test/support.py b/rpython/jit/backend/test/support.py
--- a/rpython/jit/backend/test/support.py
+++ b/rpython/jit/backend/test/support.py
@@ -7,7 +7,6 @@
 
 class BaseCompiledMixin(object):
 
-    type_system = None
     CPUClass = None
     basic = False
 
@@ -29,7 +28,6 @@
 
         self.pre_translation_hook()
         t = self._get_TranslationContext()
-        t.config.translation.type_system = self.type_system # force typesystem-specific options
         if listcomp:
             t.config.translation.list_comprehension_operations = True
 
@@ -111,7 +109,6 @@
 
 
 class CCompiledMixin(BaseCompiledMixin):
-    type_system = 'lltype'
     slow = False
 
     def setup_class(cls):
diff --git a/rpython/jit/backend/x86/test/test_basic.py b/rpython/jit/backend/x86/test/test_basic.py
--- a/rpython/jit/backend/x86/test/test_basic.py
+++ b/rpython/jit/backend/x86/test/test_basic.py
@@ -6,7 +6,6 @@
 from rpython.rlib.jit import JitDriver
 
 class Jit386Mixin(support.LLJitMixin):
-    type_system = 'lltype'
     CPUClass = getcpuclass()
     # we have to disable unroll
     enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap"
diff --git a/rpython/jit/codewriter/call.py b/rpython/jit/codewriter/call.py
--- a/rpython/jit/codewriter/call.py
+++ b/rpython/jit/codewriter/call.py
@@ -9,7 +9,7 @@
     QuasiImmutAnalyzer, RandomEffectsAnalyzer, effectinfo_from_writeanalyze,
     EffectInfo, CallInfoCollection)
 from rpython.rtyper.lltypesystem import lltype, llmemory
-from rpython.rtyper.typesystem import getfunctionptr
+from rpython.rtyper.lltypesystem.lltype import getfunctionptr
 from rpython.rlib import rposix
 from rpython.translator.backendopt.canraise import RaiseAnalyzer
 from rpython.translator.backendopt.writeanalyze import ReadWriteAnalyzer
@@ -178,7 +178,6 @@
         """
         fnptr = getfunctionptr(graph)
         FUNC = lltype.typeOf(fnptr).TO
-        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),
diff --git a/rpython/jit/codewriter/test/test_call.py b/rpython/jit/codewriter/test/test_call.py
--- a/rpython/jit/codewriter/test/test_call.py
+++ b/rpython/jit/codewriter/test/test_call.py
@@ -159,8 +159,6 @@
     class FakeRTyper:
         class annotator:
             translator = None
-        class type_system:
-            name = 'lltypesystem'
 
     def getfunctionptr(graph):
         F = lltype.FuncType([], lltype.Signed)
diff --git a/rpython/jit/codewriter/test/test_jtransform.py b/rpython/jit/codewriter/test/test_jtransform.py
--- a/rpython/jit/codewriter/test/test_jtransform.py
+++ b/rpython/jit/codewriter/test/test_jtransform.py
@@ -30,7 +30,6 @@
     return Constant(x, lltype.typeOf(x))
 
 class FakeRTyper:
-    class type_system: name = 'lltypesystem'
     instance_reprs = {}
 
 class FakeCPU:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -88,8 +88,6 @@
 # ____________________________________________________________
 
 class LLtypeMixin(object):
-    type_system = 'lltype'
-
     def get_class_of_box(self, box):
         base = box.getref_base()
         return lltype.cast_opaque_ptr(rclass.OBJECTPTR, base).typeptr
@@ -123,7 +121,7 @@
                             ('value', lltype.Signed),
                             ('next', lltype.Ptr(NODE3)),
                             hints={'immutable': True}))
-    
+
     node = lltype.malloc(NODE)
     node.value = 5
     node.next = node
@@ -236,7 +234,7 @@
     inst_step = cpu.fielddescrof(W_ROOT, 'inst_step')
     inst_w_list = cpu.fielddescrof(W_ROOT, 'inst_w_list')
     w_root_vtable = lltype.malloc(OBJECT_VTABLE, immortal=True)
-    
+
     tsize = cpu.sizeof(T, None)
     cdescr = cpu.fielddescrof(T, 'c')
     ddescr = cpu.fielddescrof(T, 'd')
@@ -462,8 +460,7 @@
 class BaseTest(object):
 
     def parse(self, s, boxkinds=None, want_fail_descr=True, postprocess=None):
-        self.oparse = OpParser(s, self.cpu, self.namespace, 'lltype',
-                               boxkinds,
+        self.oparse = OpParser(s, self.cpu, self.namespace, boxkinds,
                                None, False, postprocess)
         return self.oparse.parse()
 
@@ -571,4 +568,3 @@
     return newloop
 
 # ____________________________________________________________
-
diff --git a/rpython/jit/metainterp/test/support.py b/rpython/jit/metainterp/test/support.py
--- a/rpython/jit/metainterp/test/support.py
+++ b/rpython/jit/metainterp/test/support.py
@@ -166,7 +166,7 @@
 class JitMixin:
     basic = True
     enable_opts = ENABLE_ALL_OPTS
-    
+
 
     # Basic terminology: the JIT produces "loops" and "bridges".
     # Bridges are always attached to failing guards.  Every loop is
@@ -243,7 +243,6 @@
 
     def meta_interp(self, *args, **kwds):
         kwds['CPUClass'] = self.CPUClass
-        kwds['type_system'] = self.type_system
         if "backendopt" not in kwds:
             kwds["backendopt"] = False
         if "enable_opts" not in kwds and hasattr(self, 'enable_opts'):
@@ -286,7 +285,6 @@
 
 
 class LLJitMixin(JitMixin):
-    type_system = 'lltype'
     CPUClass = runner.LLGraphCPU
 
     @staticmethod
diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -894,8 +894,8 @@
             try:
                 return ovfcheck(x * y)
             except OverflowError:
-                raise            
-        
+                raise
+
         def f(x, y):
             try:
                 return g(x, y)
@@ -1074,7 +1074,7 @@
         from rpython.jit.metainterp.warmspot import WarmRunnerDesc
 
         interp, graph = get_interpreter(f, [0, 0], backendopt=False,
-                                        inline_threshold=0, type_system=self.type_system)
+                                        inline_threshold=0)
         clear_tcache()
         translator = interp.typer.annotator.translator
         translator.config.translation.gc = "boehm"
@@ -4342,8 +4342,8 @@
         myjitdriver = JitDriver(greens = ['num'],
                                 reds = ['n', 'x', 'x0', 'x1', 'x2', 'x3', 'x4',
                                         'x5', 'x6', 'x7', 'l', 's'])
- 
-        
+
+
         self.meta_interp(allfuncs, [9, 2000])
 
     def test_unichar_ord_is_never_signed_on_64bit(self):
diff --git a/rpython/jit/metainterp/test/test_loop.py b/rpython/jit/metainterp/test/test_loop.py
--- a/rpython/jit/metainterp/test/test_loop.py
+++ b/rpython/jit/metainterp/test/test_loop.py
@@ -20,7 +20,6 @@
         return ll_meta_interp(f, args, enable_opts=self.enable_opts,
                               policy=policy,
                               CPUClass=self.CPUClass,
-                              type_system=self.type_system,
                               backendopt=backendopt)
 
     def run_directly(self, f, args):
@@ -1038,7 +1037,7 @@
 
     def test_unroll_issue_3(self):
         py.test.skip("decide")
-        
+
         from rpython.rlib.rerased import new_erasing_pair
         b_erase, b_unerase = new_erasing_pair("B")    # list of ints
         c_erase, c_unerase = new_erasing_pair("C")    # list of Nones
@@ -1083,7 +1082,7 @@
                 elif i % 5 == 0:
                     s += 1
                 elif i % 7 == 0:
-                    s += 1            
+                    s += 1
                 i -= 1
             return s
 
@@ -1093,7 +1092,7 @@
     def test_sharing_guards(self):
         py.test.skip("unimplemented")
         driver = JitDriver(greens = [], reds = 'auto')
-        
+
         def f(i):
             s = 0
             while i > 0:
diff --git a/rpython/jit/metainterp/test/test_virtualizable.py b/rpython/jit/metainterp/test/test_virtualizable.py
--- a/rpython/jit/metainterp/test/test_virtualizable.py
+++ b/rpython/jit/metainterp/test/test_virtualizable.py
@@ -1114,10 +1114,8 @@
                                        if getattr(graph, 'func', None) is f]
         init_graph = t._graphof(Frame.__init__.im_func)
 
-        deref = t.rtyper.type_system.deref
-
         def direct_calls(graph):
-            return [deref(op.args[0].value)._callable.func_name
+            return [op.args[0].value._obj._callable.func_name
                     for block, op in graph.iterblockops()
                         if op.opname == 'direct_call']
 
diff --git a/rpython/jit/metainterp/test/test_warmspot.py b/rpython/jit/metainterp/test/test_warmspot.py
--- a/rpython/jit/metainterp/test/test_warmspot.py
+++ b/rpython/jit/metainterp/test/test_warmspot.py
@@ -13,7 +13,8 @@
         self.result = result
 
 
-class WarmspotTests(object):
+class TestLLWarmspot(LLJitMixin):
+    CPUClass = runner.LLGraphCPU
 
     def test_basic(self):
         mydriver = JitDriver(reds=['a'],
@@ -575,10 +576,6 @@
                                 "with the same jitdriver")
 
 
-class TestLLWarmspot(WarmspotTests, LLJitMixin):
-    CPUClass = runner.LLGraphCPU
-    type_system = 'lltype'
-
 class TestWarmspotDirect(object):
     def setup_class(cls):
         from rpython.jit.metainterp.typesystem import llhelper
diff --git a/rpython/jit/metainterp/test/test_warmstate.py b/rpython/jit/metainterp/test/test_warmstate.py
--- a/rpython/jit/metainterp/test/test_warmstate.py
+++ b/rpython/jit/metainterp/test/test_warmstate.py
@@ -76,7 +76,7 @@
                 hash_whatever(lltype.typeOf(s2), s2))
         assert equal_whatever(lltype.typeOf(s1), s1, s2)
     fn(42)
-    interpret(fn, [42], type_system='lltype')
+    interpret(fn, [42])
 
 
 def test_make_unwrap_greenkey():
diff --git a/rpython/jit/metainterp/warmspot.py b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -52,7 +52,7 @@
     warmrunnerdesc.finish()
     translator.warmrunnerdesc = warmrunnerdesc    # for later debugging
 
-def ll_meta_interp(function, args, backendopt=False, type_system='lltype',
+def ll_meta_interp(function, args, backendopt=False,
                    listcomp=False, translationoptions={}, **kwds):
     if listcomp:
         extraconfigopts = {'translation.list_comprehension_operations': True}
@@ -62,7 +62,6 @@
         extraconfigopts['translation.' + key] = value
     interp, graph = get_interpreter(function, args,
                                     backendopt=False,  # will be done below
-                                    type_system=type_system,
                                     **extraconfigopts)
     clear_tcache()
     return jittify_and_run(interp, graph, args, backendopt=backendopt, **kwds)
@@ -71,7 +70,7 @@
                     backendopt=False, trace_limit=sys.maxint,
                     inline=False, loop_longevity=0, retrace_limit=5,
                     function_threshold=4, disable_unrolling=sys.maxint,
-                    enable_opts=ALL_OPTS_NAMES, max_retrace_guards=15, 
+                    enable_opts=ALL_OPTS_NAMES, max_retrace_guards=15,
                     max_unroll_recursion=7, **kwds):
     from rpython.config.config import ConfigError
     translator = interp.typer.annotator.translator
@@ -525,17 +524,13 @@
                 fatalerror('~~~ Crash in JIT! %s' % (e,))
         crash_in_jit._dont_inline_ = True
 
-        if self.translator.rtyper.type_system.name == 'lltypesystem':
-            def maybe_enter_jit(*args):
-                try:
-                    maybe_compile_and_run(state.increment_threshold, *args)
-                except Exception, e:
-                    crash_in_jit(e)
-            maybe_enter_jit._always_inline_ = True
-        else:
-            def maybe_enter_jit(*args):
+        def maybe_enter_jit(*args):
+            try:
                 maybe_compile_and_run(state.increment_threshold, *args)
-            maybe_enter_jit._always_inline_ = True
+            except Exception as e:
+                crash_in_jit(e)
+        maybe_enter_jit._always_inline_ = True
+
         jd._maybe_enter_jit_fn = maybe_enter_jit
         jd._maybe_compile_and_run_fn = maybe_compile_and_run
 
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -84,7 +84,7 @@
 
     use_mock_model = False
 
-    def __init__(self, input, cpu, namespace, type_system, boxkinds,
+    def __init__(self, input, cpu, namespace, boxkinds,
                  invent_fail_descr=default_fail_descr,
                  nonstrict=False, postproces=None):
         self.input = input
@@ -92,7 +92,6 @@
         self._postproces = postproces
         self.cpu = cpu
         self._consts = namespace
-        self.type_system = type_system
         self.boxkinds = boxkinds or {}
         if namespace is not None:
             self._cache = namespace.setdefault('_CACHE_', {})
@@ -133,7 +132,7 @@
     def box_for_var(self, elem):
         xxx
         try:
-            return self._cache[self.type_system, elem]
+            return self._cache[elem]
         except KeyError:
             pass
         if elem.startswith('i'):
@@ -155,7 +154,7 @@
                     break
             else:
                 raise ParseError("Unknown variable type: %s" % elem)
-        self._cache[self.type_system, elem] = box
+        self._cache[elem] = box
         box._str = elem
         return box
 
@@ -426,13 +425,13 @@
         inpargs = self.parse_header_line(line[1:-1])
         return base_indent, inpargs, lines
 
-def parse(input, cpu=None, namespace=None, type_system='lltype',
+def parse(input, cpu=None, namespace=None,
           boxkinds=None, invent_fail_descr=default_fail_descr,
           no_namespace=False, nonstrict=False, OpParser=OpParser,
           postprocess=None):
     if namespace is None and not no_namespace:
         namespace = {}
-    return OpParser(input, cpu, namespace, type_system, boxkinds,
+    return OpParser(input, cpu, namespace, boxkinds,
                     invent_fail_descr, nonstrict, postprocess).parse()
 
 def pure_parse(*args, **kwds):
diff --git a/rpython/jit/tool/test/test_jitoutput.py b/rpython/jit/tool/test/test_jitoutput.py
--- a/rpython/jit/tool/test/test_jitoutput.py
+++ b/rpython/jit/tool/test/test_jitoutput.py
@@ -21,7 +21,7 @@
 
     cap = py.io.StdCaptureFD()
     try:
-        ll_meta_interp(f, [10], CPUClass=runner.LLGraphCPU, type_system='lltype',
+        ll_meta_interp(f, [10], CPUClass=runner.LLGraphCPU,
                        ProfilerClass=Profiler)
     finally:
         out, err = cap.reset()
diff --git a/rpython/rtyper/extfunc.py b/rpython/rtyper/extfunc.py
--- a/rpython/rtyper/extfunc.py
+++ b/rpython/rtyper/extfunc.py
@@ -1,6 +1,6 @@
 from rpython.rtyper import extregistry
 from rpython.rtyper.extregistry import ExtRegistryEntry
-from rpython.rtyper.lltypesystem.lltype import typeOf
+from rpython.rtyper.lltypesystem.lltype import typeOf, FuncType, functionptr
 from rpython.annotator import model as annmodel
 from rpython.annotator.signature import annotation
 
@@ -157,7 +157,6 @@
         r_result = rtyper.getrepr(s_result)
         ll_result = r_result.lowleveltype
         name = getattr(self, 'name', None) or self.instance.__name__
-        fake_method_name = rtyper.type_system.name[:2] + 'typefakeimpl'
         impl = getattr(self, 'lltypeimpl', None)
         fakeimpl = getattr(self, 'lltypefakeimpl', self.instance)
         if impl:
@@ -201,13 +200,10 @@
             obj = rtyper.getannmixlevel().delayedfunction(
                 impl, signature_args, hop.s_result)
         else:
-            #if not self.safe_not_sandboxed:
-            #    print '>>>>>>>>>>>>>-----------------------------------'
-            #    print name, self.name
-            #    print '<<<<<<<<<<<<<-----------------------------------'
-            obj = rtyper.type_system.getexternalcallable(args_ll, ll_result,
-                                 name, _external_name=self.name, _callable=fakeimpl,
-                                 _safe_not_sandboxed=self.safe_not_sandboxed)
+            FT = FuncType(args_ll, ll_result)
+            obj = functionptr(FT, name, _external_name=self.name,
+                              _callable=fakeimpl,
+                              _safe_not_sandboxed=self.safe_not_sandboxed)
         vlist = [hop.inputconst(typeOf(obj), obj)] + hop.inputargs(*args_r)
         hop.exception_is_here()
         return hop.genop('direct_call', vlist, r_result)
diff --git a/rpython/rtyper/llinterp.py b/rpython/rtyper/llinterp.py
--- a/rpython/rtyper/llinterp.py
+++ b/rpython/rtyper/llinterp.py
@@ -466,7 +466,7 @@
         raise LLException(etype, evalue, *extraargs)
 
     def invoke_callable_with_pyexceptions(self, fptr, *args):
-        obj = self.llinterpreter.typer.type_system.deref(fptr)
+        obj = fptr._obj
         try:
             return obj._callable(*args)
         except LLException, e:
@@ -644,7 +644,7 @@
             array[index] = item
 
     def perform_call(self, f, ARGS, args):
-        fobj = self.llinterpreter.typer.type_system.deref(f)
+        fobj = f._obj
         has_callable = getattr(fobj, '_callable', None) is not None
         if hasattr(fobj, 'graph'):
             graph = fobj.graph
@@ -669,7 +669,7 @@
         graphs = args[-1]
         args = args[:-1]
         if graphs is not None:
-            obj = self.llinterpreter.typer.type_system.deref(f)
+            obj = f._obj
             if hasattr(obj, 'graph'):
                 assert obj.graph in graphs
         else:
diff --git a/rpython/rtyper/lltypesystem/lltype.py b/rpython/rtyper/lltypesystem/lltype.py
--- a/rpython/rtyper/lltypesystem/lltype.py
+++ b/rpython/rtyper/lltypesystem/lltype.py
@@ -2265,6 +2265,35 @@
     o = _func(TYPE, _name=name, **attrs)
     return _ptr(Ptr(TYPE), o)
 
+def _getconcretetype(v):
+    return v.concretetype
+
+def getfunctionptr(graph, getconcretetype=_getconcretetype):
+    """Return callable given a Python function."""
+    llinputs = [getconcretetype(v) for v in graph.getargs()]
+    lloutput = getconcretetype(graph.getreturnvar())
+
+    FT = FuncType(llinputs, lloutput)
+    name = graph.name
+    if hasattr(graph, 'func') and callable(graph.func):
+        # the Python function object can have _llfnobjattrs_, specifying
+        # attributes that are forced upon the functionptr().  The idea
+        # for not passing these extra attributes as arguments to
+        # getcallable() itself is that multiple calls to getcallable()
+        # for the same graph should return equal functionptr() objects.
+        if hasattr(graph.func, '_llfnobjattrs_'):
+            fnobjattrs = graph.func._llfnobjattrs_.copy()
+            # can specify a '_name', but use graph.name by default
+            name = fnobjattrs.pop('_name', name)
+        else:
+            fnobjattrs = {}
+        # _callable is normally graph.func, but can be overridden:
+        # see fakeimpl in extfunc.py
+        _callable = fnobjattrs.pop('_callable', graph.func)
+        return functionptr(FT, name, graph=graph, _callable=_callable,
+                           **fnobjattrs)
+    else:
+        return functionptr(FT, name, graph=graph)
 
 def nullptr(T):
     return Ptr(T)._defl()
@@ -2444,3 +2473,5 @@
         for item in v.items:
             for i in dissect_ll_instance(item, t.OF, memo):
                 yield i
+
+
diff --git a/rpython/rtyper/rmodel.py b/rpython/rtyper/rmodel.py
--- a/rpython/rtyper/rmodel.py
+++ b/rpython/rtyper/rmodel.py
@@ -2,7 +2,7 @@
 from rpython.flowspace.model import Constant
 from rpython.rtyper.error import TyperError, MissingRTypeOperation
 from rpython.rtyper.lltypesystem import lltype
-from rpython.rtyper.lltypesystem.lltype import Void, Bool, LowLevelType
+from rpython.rtyper.lltypesystem.lltype import Void, Bool, LowLevelType, Ptr
 from rpython.tool.pairtype import pairtype, extendabletype, pair
 
 
@@ -239,7 +239,8 @@
         if hop.s_result.is_constant():
             return hop.inputconst(Bool, hop.s_result.const)
         else:
-            return hop.rtyper.type_system.check_null(self, hop)
+            vlist = hop.inputargs(self)
+            return hop.genop('ptr_nonzero', vlist, resulttype=Bool)
 
 
 class IteratorRepr(Repr):
@@ -282,7 +283,23 @@
     def rtype_is_((robj1, robj2), hop):
         if hop.s_result.is_constant():
             return inputconst(Bool, hop.s_result.const)
-        return hop.rtyper.type_system.generic_is(robj1, robj2, hop)
+        roriginal1 = robj1
+        roriginal2 = robj2
+        if robj1.lowleveltype is Void:
+            robj1 = robj2
+        elif robj2.lowleveltype is Void:
+            robj2 = robj1
+        if (not isinstance(robj1.lowleveltype, Ptr) or
+                not isinstance(robj2.lowleveltype, Ptr)):
+            raise TyperError('is of instances of the non-pointers: %r, %r' % (
+                roriginal1, roriginal2))
+        if robj1.lowleveltype != robj2.lowleveltype:
+            raise TyperError('is of instances of different pointer types: %r, %r' % (
+                roriginal1, roriginal2))
+
+        v_list = hop.inputargs(robj1, robj2)
+        return hop.genop('ptr_eq', v_list, resulttype=Bool)
+
 
     # default implementation for checked getitems
 
diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py
--- a/rpython/rtyper/rpbc.py
+++ b/rpython/rtyper/rpbc.py
@@ -13,11 +13,11 @@
 from rpython.rtyper.error import TyperError
 from rpython.rtyper.lltypesystem import rffi
 from rpython.rtyper.lltypesystem import llmemory
-from rpython.rtyper.lltypesystem.lltype import (typeOf, Void, ForwardReference,
-    Struct, Bool, Char, Ptr, malloc, nullptr, Array, Signed, cast_pointer)
+from rpython.rtyper.lltypesystem.lltype import (
+    typeOf, Void, ForwardReference, Struct, Bool, Char, Ptr, malloc, nullptr,
+    Array, Signed, cast_pointer, getfunctionptr)
 from rpython.rtyper.rmodel import (Repr, inputconst, CanBeNull, mangle,
     warning, impossible_repr)
-from rpython.rtyper.typesystem import getfunctionptr
 from rpython.tool.pairtype import pair, pairtype
 from rpython.translator.unsimplify import varoftype
 
@@ -266,7 +266,7 @@
             else:
                 # missing entry -- need a 'null' of the type that matches
                 # this row
-                llfn = self.rtyper.type_system.null_callable(row.fntype)
+                llfn = nullptr(row.fntype.TO)
             llfns[row.attrname] = llfn
         if len(self.uniquerows) == 1:
             if found_anything:
@@ -291,7 +291,7 @@
         elif isinstance(value, staticmethod):
             value = value.__get__(42)  # hackish, get the function wrapped by staticmethod
         if value is None:
-            null = self.rtyper.type_system.null_callable(self.lowleveltype)
+            null = nullptr(self.lowleveltype.TO)
             return null
         funcdesc = self.rtyper.annotator.bookkeeper.getdesc(value)
         return self.convert_desc(funcdesc)
@@ -914,7 +914,7 @@
                 return None
             else:
                 T = self.lowleveltype
-                return self.rtyper.type_system.null_callable(T)
+                return nullptr(T.TO)
         bk = self.rtyper.annotator.bookkeeper
         classdesc = bk.getdesc(cls)
         return self.convert_desc(classdesc)
diff --git a/rpython/rtyper/rtyper.py b/rpython/rtyper/rtyper.py
--- a/rpython/rtyper/rtyper.py
+++ b/rpython/rtyper/rtyper.py
@@ -23,9 +23,8 @@
 from rpython.rtyper.exceptiondata import ExceptionData
 from rpython.rtyper.lltypesystem.lltype import (Signed, Void, LowLevelType,
     Ptr, ContainerType, FuncType, functionptr, typeOf, RuntimeTypeInfo,
-    attachRuntimeTypeInfo, Primitive)
+    attachRuntimeTypeInfo, Primitive, getfunctionptr)
 from rpython.rtyper.rmodel import Repr, inputconst, BrokenReprTyperError
-from rpython.rtyper.typesystem import LowLevelTypeSystem, getfunctionptr
 from rpython.rtyper import rclass
 from rpython.rtyper.rclass import RootClassRepr
 from rpython.tool.pairtype import pair
@@ -38,7 +37,6 @@
     def __init__(self, annotator):
         self.annotator = annotator
         self.lowlevel_ann_policy = LowLevelAnnotatorPolicy(self)
-        self.type_system = LowLevelTypeSystem()
         self.reprs = {}
         self._reprs_must_call_setup = []
         self._seen_reprs_must_call_setup = {}
@@ -874,7 +872,7 @@
         # build the 'direct_call' operation
         f = self.rtyper.getcallable(graph)
         c = inputconst(typeOf(f), f)
-        fobj = self.rtyper.type_system.deref(f)
+        fobj = f._obj
         return self.genop('direct_call', [c]+newargs_v,
                           resulttype = typeOf(fobj).RESULT)
 
diff --git a/rpython/rtyper/test/test_llannotation.py b/rpython/rtyper/test/test_llannotation.py
--- a/rpython/rtyper/test/test_llannotation.py
+++ b/rpython/rtyper/test/test_llannotation.py
@@ -5,7 +5,7 @@
 from rpython.rlib.rarithmetic import r_uint, r_singlefloat
 from rpython.rtyper.llannotation import (
     SomePtr, annotation_to_lltype, ll_to_annotation)
-from rpython.rtyper.typesystem import lltype
+from rpython.rtyper.lltypesystem import lltype
 import rpython.rtyper.rtyper  # make sure to import the world
 
 class C(object):
diff --git a/rpython/rtyper/test/test_llinterp.py b/rpython/rtyper/test/test_llinterp.py
--- a/rpython/rtyper/test/test_llinterp.py
+++ b/rpython/rtyper/test/test_llinterp.py
@@ -59,8 +59,7 @@
     _tcache.clear()
 
 def get_interpreter(func, values, view='auto', viewbefore='auto', policy=None,
-                    type_system="lltype", backendopt=False, config=None,
-                    **extraconfigopts):
+                    backendopt=False, config=None, **extraconfigopts):
     extra_key = [(key, value) for key, value in extraconfigopts.iteritems()]
     extra_key.sort()
     extra_key = tuple(extra_key)
@@ -93,10 +92,8 @@
     return interp, graph
 
 def interpret(func, values, view='auto', viewbefore='auto', policy=None,
-              type_system="lltype", backendopt=False, config=None,
-              malloc_check=True, **kwargs):
+              backendopt=False, config=None, malloc_check=True, **kwargs):
     interp, graph = get_interpreter(func, values, view, viewbefore, policy,
-                                    type_system=type_system,
                                     backendopt=backendopt, config=config,
                                     **kwargs)
     if not malloc_check:
@@ -112,10 +109,9 @@
     return result
 
 def interpret_raises(exc, func, values, view='auto', viewbefore='auto',
-                     policy=None, type_system="lltype",
+                     policy=None,
                      backendopt=False):
     interp, graph  = get_interpreter(func, values, view, viewbefore, policy,
-                                     type_system=type_system,
                                      backendopt=backendopt)
     info = py.test.raises(LLException, "interp.eval_graph(graph, values)")
     try:
diff --git a/rpython/rtyper/test/test_rlist.py b/rpython/rtyper/test/test_rlist.py
--- a/rpython/rtyper/test/test_rlist.py
+++ b/rpython/rtyper/test/test_rlist.py
@@ -191,7 +191,6 @@
 
 
 class TestRlist(BaseRtypingTest):
-    type_system = 'lltype'
     rlist = ll_rlist
 
     def test_simple(self):
diff --git a/rpython/rtyper/test/test_rvirtualizable.py b/rpython/rtyper/test/test_rvirtualizable.py
--- a/rpython/rtyper/test/test_rvirtualizable.py
+++ b/rpython/rtyper/test/test_rvirtualizable.py
@@ -153,10 +153,7 @@
             if vinst_ll.vable_token:
                 raise ValueError
         annhelper = MixLevelHelperAnnotator(rtyper)
-        if self.type_system == 'lltype':
-            s_vinst = SomePtr(v_inst_ll_type)
-        else:
-            s_vinst = annmodel.SomeOOInstance(v_inst_ll_type)
+        s_vinst = SomePtr(v_inst_ll_type)
         funcptr = annhelper.delayedfunction(mycall, [s_vinst], annmodel.s_None)
         annhelper.finish()
         replace_force_virtualizable_with_call(graphs, v_inst_ll_type, funcptr)
@@ -340,7 +337,6 @@
             g(a)
 
         t, typer, graph = self.gengraph(f, [])
-        deref = typer.type_system.deref
 
         desc = typer.annotator.bookkeeper.getdesc(g)
         g_graphs = desc._cache.items()
@@ -357,7 +353,7 @@
         def get_direct_call_graph(graph):
             for block, op in graph.iterblockops():
                 if op.opname == 'direct_call':
-                    return deref(op.args[0].value).graph
+                    return op.args[0].value._obj.graph
             return None
 
         assert get_direct_call_graph(f_graph) is g_graph_directly
diff --git a/rpython/rtyper/test/tool.py b/rpython/rtyper/test/tool.py
--- a/rpython/rtyper/test/tool.py
+++ b/rpython/rtyper/test/tool.py
@@ -3,7 +3,6 @@
 from rpython.rtyper.test.test_llinterp import gengraph, interpret, interpret_raises
 
 class BaseRtypingTest(object):
-    type_system = 'lltype'
     FLOAT_PRECISION = 8
 
     def gengraph(self, func, argtypes=[], viewbefore='auto', policy=None,
@@ -12,10 +11,10 @@
                         backendopt=backendopt, config=config)
 
     def interpret(self, fn, args, **kwds):
-        return interpret(fn, args, type_system=self.type_system, **kwds)
+        return interpret(fn, args, **kwds)
 
     def interpret_raises(self, exc, fn, args, **kwds):
-        return interpret_raises(exc, fn, args, type_system=self.type_system, **kwds)
+        return interpret_raises(exc, fn, args, **kwds)
 
     def float_eq(self, x, y):
         return x == y
diff --git a/rpython/rtyper/typesystem.py b/rpython/rtyper/typesystem.py
deleted file mode 100644
--- a/rpython/rtyper/typesystem.py
+++ /dev/null
@@ -1,78 +0,0 @@
-
-"""typesystem.py -- Typesystem-specific operations for RTyper."""
-
-from rpython.rtyper.lltypesystem import lltype
-from rpython.rtyper.error import TyperError
-
-
-class LowLevelTypeSystem(object):
-    name = "lltypesystem"
-
-    def deref(self, obj):
-        assert isinstance(lltype.typeOf(obj), lltype.Ptr)
-        return obj._obj
-
-    def check_null(self, repr, hop):
-        # None is a nullptr, which is false; everything else is true.
-        vlist = hop.inputargs(repr)
-        return hop.genop('ptr_nonzero', vlist, resulttype=lltype.Bool)
-
-    def null_callable(self, T):
-        return lltype.nullptr(T.TO)
-
-    def getexternalcallable(self, ll_args, ll_result, name, **kwds):
-        FT = lltype.FuncType(ll_args, ll_result)
-        return lltype.functionptr(FT, name, **kwds)
-
-    def generic_is(self, robj1, robj2, hop):
-        roriginal1 = robj1
-        roriginal2 = robj2
-        if robj1.lowleveltype is lltype.Void:
-            robj1 = robj2
-        elif robj2.lowleveltype is lltype.Void:
-            robj2 = robj1
-        if (not isinstance(robj1.lowleveltype, lltype.Ptr) or
-            not isinstance(robj2.lowleveltype, lltype.Ptr)):
-            raise TyperError('is of instances of the non-pointers: %r, %r' % (
-                roriginal1, roriginal2))
-        if robj1.lowleveltype != robj2.lowleveltype:
-            raise TyperError('is of instances of different pointer types: %r, %r' % (
-                roriginal1, roriginal2))
-
-        v_list = hop.inputargs(robj1, robj2)
-        return hop.genop('ptr_eq', v_list, resulttype=lltype.Bool)
-
-
-def _getconcretetype(v):
-    return v.concretetype
-
-
-def getfunctionptr(graph, getconcretetype=None):
-    """Return callable given a Python function."""
-    if getconcretetype is None:
-        getconcretetype = _getconcretetype
-    llinputs = [getconcretetype(v) for v in graph.getargs()]
-    lloutput = getconcretetype(graph.getreturnvar())
-
-    FT = lltype.FuncType(llinputs, lloutput)
-    name = graph.name
-    if hasattr(graph, 'func') and callable(graph.func):
-        # the Python function object can have _llfnobjattrs_, specifying
-        # attributes that are forced upon the functionptr().  The idea
-        # for not passing these extra attributes as arguments to
-        # getcallable() itself is that multiple calls to getcallable()
-        # for the same graph should return equal functionptr() objects.
-        if hasattr(graph.func, '_llfnobjattrs_'):
-            fnobjattrs = graph.func._llfnobjattrs_.copy()
-            # can specify a '_name', but use graph.name by default
-            name = fnobjattrs.pop('_name', name)
-        else:
-            fnobjattrs = {}
-        # _callable is normally graph.func, but can be overridden:
-        # see fakeimpl in extfunc.py
-        _callable = fnobjattrs.pop('_callable', graph.func)
-        return lltype.functionptr(FT, name, graph = graph,
-                                  _callable = _callable, **fnobjattrs)
-    else:
-        return lltype.functionptr(FT, name, graph = graph)
-
diff --git a/rpython/translator/backendopt/mallocv.py b/rpython/translator/backendopt/mallocv.py
--- a/rpython/translator/backendopt/mallocv.py
+++ b/rpython/translator/backendopt/mallocv.py
@@ -4,7 +4,7 @@
 from rpython.translator.backendopt.support import log
 from rpython.translator.simplify import join_blocks
 from rpython.translator.unsimplify import varoftype
-from rpython.rtyper.typesystem import getfunctionptr
+from rpython.rtyper.lltypesystem.lltype import getfunctionptr
 from rpython.rtyper.lltypesystem import lltype
 from rpython.rtyper.lltypesystem.lloperation import llop
 
diff --git a/rpython/translator/c/dlltool.py b/rpython/translator/c/dlltool.py
--- a/rpython/translator/c/dlltool.py
+++ b/rpython/translator/c/dlltool.py
@@ -1,6 +1,6 @@
 
 from rpython.translator.c.genc import CBuilder
-from rpython.rtyper.typesystem import getfunctionptr
+from rpython.rtyper.lltypesystem.lltype import getfunctionptr
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 
 
diff --git a/rpython/translator/c/genc.py b/rpython/translator/c/genc.py
--- a/rpython/translator/c/genc.py
+++ b/rpython/translator/c/genc.py
@@ -3,7 +3,7 @@
 import sys, os
 from rpython.rlib import exports
 from rpython.rlib.entrypoint import entrypoint
-from rpython.rtyper.typesystem import getfunctionptr
+from rpython.rtyper.lltypesystem.lltype import getfunctionptr
 from rpython.rtyper.lltypesystem import lltype, rffi
 from rpython.tool import runsubprocess
 from rpython.tool.nullpath import NullPyPathLocal
@@ -468,7 +468,7 @@
                 '$(CC) -o $*.o -c $*.vmprof.lbl.s',
                 'mv $*.gctmp $*.gcmap',
                 'rm $*.vmprof.lbl.s'])
-            
+
             # the rule to compute gcmaptable.s
             mk.rule('gcmaptable.s', '$(GCMAPFILES)',
                     [
@@ -759,7 +759,7 @@
         database, database.translator.rtyper)
     for line in preimplementationlines:
         print >> f, line
-    f.write('#endif /* _PY_PREIMPL_H */\n')    
+    f.write('#endif /* _PY_PREIMPL_H */\n')
 
 def gen_startupcode(f, database):
     # generate the start-up code and put it into a function
diff --git a/rpython/translator/c/test/test_database.py b/rpython/translator/c/test/test_database.py
--- a/rpython/translator/c/test/test_database.py
+++ b/rpython/translator/c/test/test_database.py
@@ -4,7 +4,7 @@
 from rpython.translator.c.database import LowLevelDatabase
 from rpython.flowspace.model import Constant, Variable, SpaceOperation
 from rpython.flowspace.model import Block, Link, FunctionGraph
-from rpython.rtyper.typesystem import getfunctionptr
+from rpython.rtyper.lltypesystem.lltype import getfunctionptr
 from rpython.rtyper.lltypesystem.rffi import VOIDP, INT_real, INT, CArrayPtr
 
 
@@ -43,7 +43,7 @@
 
 def test_inlined_struct():
     db = LowLevelDatabase()
-    pfx = db.namespace.global_prefix + 'g_'    
+    pfx = db.namespace.global_prefix + 'g_'
     S = GcStruct('test', ('x', Struct('subtest', ('y', Signed))))
     s = malloc(S)
     s.x.y = 42
@@ -56,7 +56,7 @@
 
 def test_complete():
     db = LowLevelDatabase()
-    pfx = db.namespace.global_prefix + 'g_'    
+    pfx = db.namespace.global_prefix + 'g_'
     T = GcStruct('subtest', ('y', Signed))
     S = GcStruct('test', ('x', Ptr(T)))
     s = malloc(S)
@@ -136,7 +136,7 @@
     block.closeblock(Link([result], graph.returnblock))
     graph.getreturnvar().concretetype = Signed
     # --------------------         end        --------------------
-    
+
     F = FuncType([Signed], Signed)
     f = functionptr(F, "f", graph=graph)
     db = LowLevelDatabase()
@@ -206,7 +206,7 @@
         s.ptr2 = ptr2
         return s.ptr1.x * s.ptr2.x
     t, graph = makegraph(ll_f, [int])
-    
+
     db = LowLevelDatabase(t)
     db.get(getfunctionptr(graph))
     db.complete()
diff --git a/rpython/translator/test/test_unsimplify.py b/rpython/translator/test/test_unsimplify.py
--- a/rpython/translator/test/test_unsimplify.py
+++ b/rpython/translator/test/test_unsimplify.py
@@ -7,7 +7,7 @@
 from rpython.rlib.objectmodel import we_are_translated
 from rpython.tool.udir import udir
 
-def translate(func, argtypes, type_system="lltype"):
+def translate(func, argtypes):
     t = TranslationContext()
     t.buildannotator().build_types(func, argtypes)
     t.entry_point_graph = graphof(t, func)
@@ -73,14 +73,13 @@
 
 def test_call_initial_function():
     tmpfile = str(udir.join('test_call_initial_function'))
-    type_system = 'lltype'
     def f(x):
         return x * 6
     def hello_world():
         if we_are_translated():
             fd = os.open(tmpfile, os.O_WRONLY | os.O_CREAT, 0644)
             os.close(fd)
-    graph, t = translate(f, [int], type_system)
+    graph, t = translate(f, [int])
     call_initial_function(t, hello_world)
     #
     if os.path.exists(tmpfile):
@@ -92,14 +91,13 @@
 
 def test_call_final_function():
     tmpfile = str(udir.join('test_call_final_function'))
-    type_system = 'lltype'
     def f(x):
         return x * 6
     def goodbye_world():
         if we_are_translated():
             fd = os.open(tmpfile, os.O_WRONLY | os.O_CREAT, 0644)
             os.close(fd)
-    graph, t = translate(f, [int], type_system)
+    graph, t = translate(f, [int])
     call_final_function(t, goodbye_world)
     #
     if os.path.exists(tmpfile):


More information about the pypy-commit mailing list