[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