Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: fast-slowpath
Changeset: r65592:36e01240d91f
Date: 2013-07-24 10:46 +0200
http://bitbucket.org/pypy/pypy/changeset/36e01240d91f/

Log:    cargo-cult until the rtyping passes - I have no clue what I'm doing

diff --git a/rpython/annotator/specialize.py b/rpython/annotator/specialize.py
--- a/rpython/annotator/specialize.py
+++ b/rpython/annotator/specialize.py
@@ -332,7 +332,7 @@
         key = key + key1
     return funcdesc.cachedgraph(key, builder=builder)
 
-def _get_key(args_s, argindices):
+def specialize_argvalue(funcdesc, args_s, *argindices):
     from rpython.annotator.model import SomePBC
     key = []
     for i in argindices:
@@ -347,9 +347,6 @@
             raise Exception("specialize:arg(%d): argument not constant: %r"
                             % (i, s))
     key = tuple(key)
-
-def specialize_argvalue(funcdesc, args_s, *argindices):
-    key = _get_key(args_s, argindices)
     return maybe_star_args(funcdesc, key, args_s)
 
 def specialize_arg_or_var(funcdesc, args_s, *argindices):
diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py
--- a/rpython/rlib/jit.py
+++ b/rpython/rlib/jit.py
@@ -1022,7 +1022,8 @@
         from rpython.rtyper.lltypesystem import lltype
 
         args_v = hop.inputargs(lltype.Bool, lltype.Void, *hop.args_r[2:])
-        args_v[1] = hop.args_r[1].get_unique_llfn()
+        args_v[1] = hop.args_r[1].get_concrete_llfn(hop.args_s[1],
+                                                    hop.args_s[2:], 
hop.spaceop)
         hop.exception_is_here()
         return hop.genop('jit_conditional_call', args_v)
 
diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py
--- a/rpython/rtyper/rpbc.py
+++ b/rpython/rtyper/rpbc.py
@@ -302,6 +302,18 @@
         llfn = self.rtyper.getcallable(graph)
         return inputconst(typeOf(llfn), llfn)
 
+    def get_concrete_llfn(self, s_pbc, args_s, op):
+        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)
+        shape, index = vfcs(bk, self.callfamily, descs, args, op)
+        funcdesc, = descs
+        row_of_one_graph = self.callfamily.calltables[shape][index]
+        graph = row_of_one_graph[funcdesc]
+        llfn = self.rtyper.getcallable(graph)
+        return inputconst(typeOf(llfn), llfn)
+
     def rtype_simple_call(self, hop):
         return self.call('simple_call', hop)
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to