[pypy-commit] pypy reflowing: create check_signature_return()

rlamy pypy.commits at gmail.com
Fri Nov 25 08:31:06 EST 2016


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: reflowing
Changeset: r88665:f8f7fa84fee7
Date: 2016-11-25 11:08 +0000
http://bitbucket.org/pypy/pypy/changeset/f8f7fa84fee7/

Log:	create check_signature_return()

diff --git a/rpython/annotator/signature.py b/rpython/annotator/signature.py
--- a/rpython/annotator/signature.py
+++ b/rpython/annotator/signature.py
@@ -166,8 +166,20 @@
 
 def enforce_signature_return(funcdesc, sigtype, inferredtype):
     s_sigret = finish_type(sigtype, funcdesc.bookkeeper, funcdesc.pyobj)
-    if s_sigret is not None and not s_sigret.contains(inferredtype):
+    if s_sigret is not None:
+        check_signature_return(funcdesc, s_sigret, inferredtype)
+    return s_sigret
+
+def check_signature_return(funcdesc, s_sigret, s_inferred):
+    if not s_sigret.contains(s_inferred):
         raise SignatureError("%r return value:\n"
                         "expected %s,\n"
-                        "     got %s" % (funcdesc, s_sigret, inferredtype))
-    return s_sigret
+                        "     got %s" % (funcdesc, s_sigret, s_inferred))
+
+class SignatureReturn(object):
+    def __init__(self, funcdesc, s_sig):
+        self.funcdesc = funcdesc
+        self.s_sig = s_sig
+
+    def require_update(self, annotator, s_new):
+        check_signature_return(self.funcdesc, self.s_sig, s_new)
diff --git a/rpython/rlib/test/test_signature.py b/rpython/rlib/test/test_signature.py
--- a/rpython/rlib/test/test_signature.py
+++ b/rpython/rlib/test/test_signature.py
@@ -26,8 +26,9 @@
     return sigof(a, f)
 
 def check_annotator_fails(caller):
-    exc = py.test.raises(model.AnnotatorError, annotate_at, caller).value
-    assert caller.func_name in str(exc)
+    with py.test.raises(model.AnnotatorError) as excinfo:
+        annotate_at(caller)
+    assert caller.func_name in str(excinfo.value)
 
 
 def test_bookkeeping():


More information about the pypy-commit mailing list