diff --git a/collects/racket/contract/private/arrow.rkt b/collects/racket/contract/private/arrow.rkt index cae221cbf3..d0ad9a3fe6 100644 --- a/collects/racket/contract/private/arrow.rkt +++ b/collects/racket/contract/private/arrow.rkt @@ -235,7 +235,7 @@ v4 todo: post ... rng-results] [args - (bad-number-of-results blame val rng-len (length args))])))) + (bad-number-of-results blame val rng-len args)])))) null)]) (let* ([min-method-arity (length doms)] [max-method-arity (+ min-method-arity (length opt-doms))] @@ -1863,7 +1863,8 @@ v4 todo: [else passes?])) -(define (bad-number-of-results blame val rng-len num-values) +(define (bad-number-of-results blame val rng-len args) + (define num-values (length args)) (raise-blame-error blame val "expected ~a value~a, returned ~a value~a" rng-len (if (= rng-len 1) "" "s") diff --git a/collects/tests/racket/contract-test.rktl b/collects/tests/racket/contract-test.rktl index e446abc844..89a806b60b 100644 --- a/collects/tests/racket/contract-test.rktl +++ b/collects/tests/racket/contract-test.rktl @@ -886,6 +886,15 @@ 'neg) 1)) + (test/pos-blame + 'contract-arrow-values5 + '((contract (-> integer? (values integer? integer?)) + (lambda (x) x) + 'pos + 'neg) + 1)) + + (test/pos-blame 'contract-arrow-keyword1 '(contract (-> integer? any)