[pypy-commit] pypy default: signatures: better check on return types (but still incomplete)
Greg Price
noreply at buildbot.pypy.org
Wed Dec 19 08:36:30 CET 2012
Author: Greg Price <price at mit.edu>
Branch:
Changeset: r59503:8b134bcb2276
Date: 2012-12-18 23:36 -0800
http://bitbucket.org/pypy/pypy/changeset/8b134bcb2276/
Log: signatures: better check on return types (but still incomplete)
The xfail test demonstrates a known limitation of this error check.
diff --git a/pypy/annotation/signature.py b/pypy/annotation/signature.py
--- a/pypy/annotation/signature.py
+++ b/pypy/annotation/signature.py
@@ -151,4 +151,9 @@
actualtypes[:] = params_s
def enforce_signature_return(funcdesc, sigtype, inferredtype):
- return finish_type(sigtype, funcdesc.bookkeeper, funcdesc.pyobj)
+ s_sigret = finish_type(sigtype, funcdesc.bookkeeper, funcdesc.pyobj)
+ if not s_sigret.contains(inferredtype):
+ raise Exception("%r return value:\n"
+ "expected %s,\n"
+ " got %s" % (funcdesc, s_sigret, inferredtype))
+ return s_sigret
diff --git a/pypy/rlib/test/test_signature.py b/pypy/rlib/test/test_signature.py
--- a/pypy/rlib/test/test_signature.py
+++ b/pypy/rlib/test/test_signature.py
@@ -73,11 +73,26 @@
@signature(returns=types.int())
def int_not_char():
return 'a'
+
@check_annotator_fails
@signature(types.str(), returns=types.int())
def str_to_int(s):
return s
+ @signature(returns=types.str())
+ def str_not_None():
+ return None
+ @check_annotator_fails
+ def caller_of_str_not_None():
+ return str_not_None()
+
+ at py.test.mark.xfail
+def test_return_errors_xfail():
+ @check_annotator_fails
+ @signature(returns=types.str())
+ def str_not_None():
+ return None
+
def test_none():
@signature(returns=types.none())
More information about the pypy-commit
mailing list