Due to the bad interaction between procedure-rename and getting the
contract info from the proxy/chaperone, this will cause a failure in
the contract test cases. I'm submitting a bug report for that issue.
closes PR 11220
Altho, this does not fix the case where a function is being passed thru
another contracted function. Eg, when you give the identity function
this contract: (-> (-> integer? integer?) (-> integer? integer?))
if you pass some function with a name in there, it won't come
back with a name anymore (indeed, it won't even have the name
anymore in the body of the function).
For that, the fix would have to be put into each of the function
contract combinators.
[It will not bother me if we revert this commit. I liked SK's idea and found it easy to implement. I wonder if others will be worried that it is easy to unintentionally leave off the second argument to check-error. I also wonder if it is problematic to add new string constants, like I've done.]
Here is an example:
(check-error (/ 1 0) "/: division by zero")
(check-error (/ 1 0) "divide by zero")
(check-error (/ 1 0))
(check-error 1)
Here is the output:
Ran 4 tests.
2 of the 4 tests failed.
No signature violations.
Check failures:
check-error encountered the following error instead of the expected divide by zero
:: /: division by zero
in ex.rkt, line 2, column 0
check-error expected an error, but instead received the value 1.
in ex.rkt, line 4, column 0
Create a mzlib/contract compatible version of the old box/c and use that
for mzlib/contract. Change the docs so that the docs for mzlib/contract
contain the right information.
Fix the typed-scheme implementation to only force flat box (or hash)
contracts when it already is required to be flat. Otherwise, allow
non-flat contracts for the element contract (or domain/range contracts).
* Domain contracts must be either flat or chaperone contracts.
* When the domain is a chaperone contract, hash/c must check
that the hash is equal?-based.
* Flat contracts are chaperone contracts, and chaperone contracts
are (proxy) contracts.
* Check in chaperone contracts that a chaperone (or chaperone-friendly
value) is indeed returned.