Author: Ronan Lamy <ronan.l...@gmail.com> Branch: Changeset: r71626:48e079c6da38 Date: 2014-05-21 04:07 +0100 http://bitbucket.org/pypy/pypy/changeset/48e079c6da38/
Log: don't require a bookkeeper to create an ArgumentsForTranslation object diff --git a/rpython/annotator/annrpython.py b/rpython/annotator/annrpython.py --- a/rpython/annotator/annrpython.py +++ b/rpython/annotator/annrpython.py @@ -10,6 +10,7 @@ c_last_exception, checkgraph) from rpython.translator import simplify, transform from rpython.annotator import model as annmodel, signature +from rpython.annotator.argument import simple_args from rpython.annotator.bookkeeper import Bookkeeper import py @@ -91,7 +92,7 @@ def get_call_parameters(self, function, args_s, policy): desc = self.bookkeeper.getdesc(function) - args = self.bookkeeper.build_args("simple_call", args_s[:]) + args = simple_args(args_s) result = [] def schedule(graph, inputcells): result.append((graph, inputcells)) diff --git a/rpython/annotator/argument.py b/rpython/annotator/argument.py --- a/rpython/annotator/argument.py +++ b/rpython/annotator/argument.py @@ -171,6 +171,12 @@ def rawshape(args): return args._rawshape() +def simple_args(args_s): + return ArgumentsForTranslation(list(args_s)) + +def complex_args(args_s): + return ArgumentsForTranslation.fromshape(args_s[0].const, + list(args_s[1:])) # # ArgErr family of exceptions raised in case of argument mismatch. diff --git a/rpython/annotator/bookkeeper.py b/rpython/annotator/bookkeeper.py --- a/rpython/annotator/bookkeeper.py +++ b/rpython/annotator/bookkeeper.py @@ -18,7 +18,7 @@ from rpython.annotator.dictdef import DictDef from rpython.annotator import description from rpython.annotator.signature import annotationoftype -from rpython.annotator.argument import ArgumentsForTranslation +from rpython.annotator.argument import simple_args, complex_args from rpython.rlib.objectmodel import r_dict, Symbolic from rpython.tool.algo.unionfind import UnionFind from rpython.rtyper import extregistry @@ -538,7 +538,7 @@ del emulated_pbc_calls[other_key] emulated_pbc_calls[unique_key] = pbc, args_s - args = self.build_args("simple_call", args_s) + args = simple_args(args_s) if callback is None: emulated = True else: @@ -564,11 +564,9 @@ def build_args(self, op, args_s): if op == "simple_call": - return ArgumentsForTranslation(list(args_s)) + return simple_args(args_s) elif op == "call_args": - return ArgumentsForTranslation.fromshape( - args_s[0].const, # shape - list(args_s[1:])) + return complex_args(args_s) def ondegenerated(self, what, s_value, where=None, called_from_graph=None): self.annotator.ondegenerated(what, s_value, where=where, diff --git a/rpython/annotator/unaryop.py b/rpython/annotator/unaryop.py --- a/rpython/annotator/unaryop.py +++ b/rpython/annotator/unaryop.py @@ -15,6 +15,7 @@ from rpython.annotator import builtin from rpython.annotator.binaryop import _clone ## XXX where to put this? from rpython.annotator.model import AnnotatorError +from rpython.annotator.argument import simple_args, complex_args UNARY_OPERATIONS = set([oper.opname for oper in op.__dict__.values() if oper.dispatch == 1]) @@ -133,10 +134,10 @@ return self # default unbound __get__ implementation def simple_call(self, *args_s): - return self.call(getbookkeeper().build_args("simple_call", args_s)) + return self.call(simple_args(args_s)) def call_args(self, *args_s): - return self.call(getbookkeeper().build_args("call_args", args_s)) + return self.call(complex_args(args_s)) def call(self, args, implicit_init=False): raise AnnotatorError("Cannot prove that the object is callable") @@ -687,14 +688,14 @@ bk = getbookkeeper() # record for calltables bk.emulate_pbc_call(bk.position_key, s_iterable, []) - return s_iterable.call(bk.build_args("simple_call", [])) + return s_iterable.call(simple_args([])) def next(self): s_next = self._true_getattr('next') bk = getbookkeeper() # record for calltables bk.emulate_pbc_call(bk.position_key, s_next, []) - return s_next.call(bk.build_args("simple_call", [])) + return s_next.call(simple_args([])) class __extend__(SomeBuiltin): def simple_call(self, *args): diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py --- a/rpython/rtyper/rpbc.py +++ b/rpython/rtyper/rpbc.py @@ -2,6 +2,7 @@ from rpython.annotator import model as annmodel, description from rpython.flowspace.model import Constant +from rpython.annotator.argument import simple_args from rpython.rtyper import rclass, callparse from rpython.rtyper.annlowlevel import llstr from rpython.rtyper.error import TyperError @@ -290,7 +291,7 @@ bk = self.rtyper.annotator.bookkeeper descs = list(s_pbc.descriptions) vfcs = description.FunctionDesc.variant_for_call_site - args = bk.build_args("simple_call", args_s) + args = simple_args(args_s) shape, index = vfcs(bk, self.callfamily, descs, args, op) funcdesc, = descs row_of_one_graph = self.callfamily.calltables[shape][index] _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit