[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