[pypy-commit] pypy better-enforceargs: check that we actually translates

antocuni noreply at buildbot.pypy.org
Tue Jul 17 18:29:08 CEST 2012


Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: better-enforceargs
Changeset: r56112:1bcb07f2fad5
Date: 2012-07-17 18:28 +0200
http://bitbucket.org/pypy/pypy/changeset/1bcb07f2fad5/

Log:	check that we actually translates

diff --git a/pypy/rlib/objectmodel.py b/pypy/rlib/objectmodel.py
--- a/pypy/rlib/objectmodel.py
+++ b/pypy/rlib/objectmodel.py
@@ -154,12 +154,14 @@
         arglist = ', '.join(argspec.args)
         src = py.code.Source("""
             def {name}({arglist}):
-                typecheck({arglist})
+                if not we_are_translated():
+                    typecheck({arglist})
                 return {name}_original({arglist})
         """.format(name=f.func_name, arglist=arglist))
         #
         mydict = {f.func_name + '_original': f,
-                  'typecheck': typecheck}
+                  'typecheck': typecheck,
+                  'we_are_translated': we_are_translated}
         exec src.compile() in mydict
         result = mydict[f.func_name]
         result.func_defaults = f.func_defaults
diff --git a/pypy/rlib/test/test_objectmodel.py b/pypy/rlib/test/test_objectmodel.py
--- a/pypy/rlib/test/test_objectmodel.py
+++ b/pypy/rlib/test/test_objectmodel.py
@@ -448,6 +448,14 @@
     assert f._annenforceargs_ == (int, str, None)
     assert f(1, 2, 3) == (1, 2, 3) # no typecheck
 
+def test_enforceargs_translates():
+    from pypy.rpython.lltypesystem import lltype
+    @enforceargs(int, float)
+    def f(a, b):
+        return a, b
+    graph = getgraph(f, [int, int])
+    TYPES = [v.concretetype for v in graph.getargs()]
+    assert TYPES == [lltype.Signed, lltype.Float]
 
 def getgraph(f, argtypes):
     from pypy.translator.translator import TranslationContext, graphof


More information about the pypy-commit mailing list