From 2ef8d60cc6d65e6dbc11194f65856ad5aa43c27e Mon Sep 17 00:00:00 2001 From: Ben Greenman Date: Sun, 5 Aug 2018 23:53:49 -0400 Subject: [PATCH] improve `hash-ref` error message for non-thunk failure procedure (#2204) Improve the `hash-ref` error message when the failure result does not accept zero arguments. (This only changes what the error messages says.) Example: ```(hash-ref #hash() 'a add1)``` Old message: ``` ; add1: arity mismatch; ; the expected number of arguments does not match the given number ; expected: 1 ; given: 0 ``` New message: ``` ; hash-ref: contract violation ; expected: (-> any) ; given: # ; argument position: 3rd ``` --- pkgs/racket-test-core/tests/racket/basic.rktl | 2 +- racket/src/racket/src/list.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/basic.rktl b/pkgs/racket-test-core/tests/racket/basic.rktl index 5dc3955473..070de07506 100644 --- a/pkgs/racket-test-core/tests/racket/basic.rktl +++ b/pkgs/racket-test-core/tests/racket/basic.rktl @@ -2191,7 +2191,7 @@ (test #t eq? (equal-hash-code l) (equal-hash-code (list 1 2 3))) (hash-set! h1 l 'ok) (test 'ok hash-ref h1 l) - (err/rt-test (hash-ref h1 'nonesuch (lambda (x) 'bad-proc)) exn:fail:contract:arity?) + (err/rt-test (hash-ref h1 'nonesuch (lambda (x) 'bad-proc)) exn:fail:contract? "hash-ref") (test #t hash-has-key? h1 l) (test #f hash-has-key? h1 (cdr l)) (when hash-ref! diff --git a/racket/src/racket/src/list.c b/racket/src/racket/src/list.c index 4355e3c250..77f5206b2e 100644 --- a/racket/src/racket/src/list.c +++ b/racket/src/racket/src/list.c @@ -2603,9 +2603,10 @@ static Scheme_Object *hash_failed(int argc, Scheme_Object *argv[]) if (argc == 3) { v = argv[2]; - if (SCHEME_PROCP(v)) + if (SCHEME_PROCP(v)) { + scheme_check_proc_arity("hash-ref", 0, 2, argc, argv); return _scheme_tail_apply(v, 0, NULL); - else + } else return v; } else { scheme_contract_error("hash-ref",