[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