[pypy-svn] r20198 - in pypy/branch/somepbc-refactoring/pypy/rpython: . test
arigo at codespeak.net
arigo at codespeak.net
Wed Nov 23 20:18:34 CET 2005
Author: arigo
Date: Wed Nov 23 20:18:33 2005
New Revision: 20198
Modified:
pypy/branch/somepbc-refactoring/pypy/rpython/normalizecalls.py
pypy/branch/somepbc-refactoring/pypy/rpython/rpbc.py
pypy/branch/somepbc-refactoring/pypy/rpython/test/test_normalizecalls.py
Log:
(pedronis, arigo)
three more passing tests! yay!
Modified: pypy/branch/somepbc-refactoring/pypy/rpython/normalizecalls.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/rpython/normalizecalls.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/rpython/normalizecalls.py Wed Nov 23 20:18:33 2005
@@ -131,7 +131,8 @@
oldblock = graph.startblock
inlist = []
defaults = graph.defaults or ()
- defaults = [NODEFAULT]*(len(inputargs_s) - len(defaults)) + list(defaults)
+ num_nondefaults = len(inputargs_s) - len(defaults)
+ defaults = [NODEFAULT] * num_nondefaults + list(defaults)
newdefaults = []
for j in argorder:
v = Variable(graph.getargs()[j])
@@ -148,13 +149,12 @@
i = argorder.index(j)
v = inlist[i]
except ValueError:
- default = newdefaults[i]
+ default = defaults[j]
if default is NODEFAULT:
raise TyperError(
"call pattern has %d positional arguments, "
"but %r takes at least %d arguments" % (
- shape_cnt, graph.name,
- len(inputargs_s) - len(defaults)))
+ shape_cnt, graph.name, num_nondefaults))
v = Constant(default)
outlist.append(v)
newblock.closeblock(Link(outlist, oldblock))
Modified: pypy/branch/somepbc-refactoring/pypy/rpython/rpbc.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/rpython/rpbc.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/rpython/rpbc.py Wed Nov 23 20:18:33 2005
@@ -243,8 +243,14 @@
XXX_later
def rtype_simple_call(self, hop):
+ return self.call('simple_call', hop)
+
+ def rtype_call_args(self, hop):
+ return self.call('call_args', hop)
+
+ def call(self, opname, hop):
bk = self.rtyper.annotator.bookkeeper
- args = bk.build_args("simple_call", hop.args_s[1:])
+ args = bk.build_args(opname, hop.args_s[1:])
descs = self.s_pbc.descriptions.keys()
row = description.FunctionDesc.row_to_consider(descs, args)
index = self.callfamily.calltable_lookup_row(args.rawshape(), row)
@@ -253,56 +259,12 @@
vfn = hop.inputarg(self, arg=0)
vlist = [self.convert_to_concrete_llfn(vfn, index, args.rawshape(),
hop.llops)]
- vlist += callparse.callparse(self.rtyper, anygraph,
- hop, 'simple_call')
+ vlist += callparse.callparse(self.rtyper, anygraph, hop, opname)
rresult = callparse.getrresult(self.rtyper, anygraph)
hop.exception_is_here()
v = hop.genop('direct_call', vlist, resulttype = rresult)
return hop.llops.convertvar(v, rresult, hop.r_result)
-## f, rinputs, rresult = self.function_signatures().itervalues().next()
-
-## if getattr(self.rtyper.type_system_deref(f).graph, 'normalized_for_calls', False):
-## # should not have an argument count mismatch
-## assert len(rinputs) == hop.nb_args-1, "normalization bug"
-## vlist = hop.inputargs(self, *rinputs)
-## else:
-## # if not normalized, should be a call to a known function
-## # or to functions all with same signature
-## funcs = self.function_signatures().keys()
-## assert samesig(funcs), "normalization bug"
-## func = funcs[0]
-## vlist = [hop.inputarg(self, arg=0)]
-## vlist += callparse.callparse('simple_call', func, rinputs, hop)
-
-## return self.call(hop, f, vlist, rresult)
-
- def call(self, hop, f, vlist, rresult):
- if self.lowleveltype is Void:
- assert len(self.function_signatures()) == 1
- vlist[0] = hop.inputconst(typeOf(f), f)
- hop.exception_is_here()
- v = hop.genop('direct_call', vlist, resulttype = rresult)
- return hop.llops.convertvar(v, rresult, hop.r_result)
-
- def rtype_call_args(self, hop):
- f, rinputs, rresult = self.function_signatures().itervalues().next()
- # the function arguments may have been normalized by normalizecalls()
- # already
- if getattr(self.rtyper.type_system_deref(f).graph, 'normalized_for_calls', False):
- vlist = hop.inputargs(self, Void, *rinputs)
- vlist = vlist[:1] + vlist[2:]
- else:
- # if not normalized, should be a call to a known function
- # or to functions all with same signature
- funcs = self.function_signatures().keys()
- assert samesig(funcs), "normalization bug"
- func = funcs[0]
- vlist = [hop.inputarg(self, arg=0)]
- vlist += callparse.callparse('call_args', func, rinputs, hop)
-
- return self.call(hop, f, vlist, rresult)
-
class __extend__(pairtype(FunctionsPBCRepr, FunctionsPBCRepr)):
def convert_from_to((r_fpbc1, r_fpbc2), v, llops):
# this check makes sense because both source and dest repr are FunctionsPBCRepr
Modified: pypy/branch/somepbc-refactoring/pypy/rpython/test/test_normalizecalls.py
==============================================================================
--- pypy/branch/somepbc-refactoring/pypy/rpython/test/test_normalizecalls.py (original)
+++ pypy/branch/somepbc-refactoring/pypy/rpython/test/test_normalizecalls.py Wed Nov 23 20:18:33 2005
@@ -14,6 +14,14 @@
t.checkgraphs()
return t
+def graphof(translator, func):
+ result = []
+ for graph in translator.graphs:
+ if getattr(graph, 'func', None) is func:
+ result.append(graph)
+ assert len(result) == 1
+ return result[0]
+
# ____________________________________________________________
def test_normalize_f2_as_taking_string_argument():
@@ -41,12 +49,8 @@
# But all lines get compressed to a single line.
translator = rtype(g, [int])
- for g in translator.graphs:
- if g.func is f1:
- f1graph = g
- elif g.func is f2:
- f2graph = g
-
+ f1graph = graphof(translator, f1)
+ f2graph = graphof(translator, f2)
s_l1 = translator.annotator.binding(f1graph.getargs()[0])
s_l2 = translator.annotator.binding(f2graph.getargs()[0])
assert s_l1.__class__ == annmodel.SomeString # and not SomeChar
@@ -66,8 +70,8 @@
f(a=5, b=6)
translator = rtype(g, [int])
- f1graph = translator.getflowgraph(f1)
- f2graph = translator.getflowgraph(f2)
+ f1graph = graphof(translator, f1)
+ f2graph = graphof(translator, f2)
assert len(f1graph.getargs()) == 2
assert len(f2graph.getargs()) == 2 # normalized to the common call pattern
#translator.view()
@@ -105,8 +109,8 @@
return -1
translator = rtype(dummyfn, [int, int])
- add_one_graph = translator.getflowgraph(add_one)
- oups_graph = translator.getflowgraph(oups)
+ add_one_graph = graphof(translator, add_one)
+ oups_graph = graphof(translator, oups)
assert add_one_graph.getreturnvar().concretetype == lltype.Signed
assert oups_graph .getreturnvar().concretetype == lltype.Signed
#translator.view()
@@ -129,9 +133,9 @@
return x.fn()
translator = rtype(dummyfn, [int])
- base_graph = translator.getflowgraph(Base.fn.im_func)
- sub1_graph = translator.getflowgraph(Sub1.fn.im_func)
- sub2_graph = translator.getflowgraph(Sub2.fn.im_func)
+ base_graph = graphof(translator, Base.fn.im_func)
+ sub1_graph = graphof(translator, Sub1.fn.im_func)
+ sub2_graph = graphof(translator, Sub2.fn.im_func)
assert base_graph.getreturnvar().concretetype == lltype.Signed
assert sub1_graph.getreturnvar().concretetype == lltype.Signed
assert sub2_graph.getreturnvar().concretetype == lltype.Signed
More information about the Pypy-commit
mailing list