From 3760de1fa9679272b7c3732743a160c1d1fcc29b Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 1 Nov 2016 17:50:31 -0500 Subject: [PATCH] improve the error message in ->* --- pkgs/racket-test/tests/racket/contract/arrow-star.rkt | 5 +++++ .../collects/racket/contract/private/arrow-val-first.rkt | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/pkgs/racket-test/tests/racket/contract/arrow-star.rkt b/pkgs/racket-test/tests/racket/contract/arrow-star.rkt index df2af00775..0ac04e332a 100644 --- a/pkgs/racket-test/tests/racket/contract/arrow-star.rkt +++ b/pkgs/racket-test/tests/racket/contract/arrow-star.rkt @@ -748,4 +748,9 @@ y) 'pos 'neg)) + + (contract-syntax-error-test + '->*-too-much-stuff + #'(->* () #:rest (listof procedure?) () any) + #rx"expected the #:rest keyword to be followed only by the range") ) diff --git a/racket/collects/racket/contract/private/arrow-val-first.rkt b/racket/collects/racket/contract/private/arrow-val-first.rkt index bfe78e2333..f8d08311fc 100644 --- a/racket/collects/racket/contract/private/arrow-val-first.rkt +++ b/racket/collects/racket/contract/private/arrow-val-first.rkt @@ -775,6 +775,13 @@ (values #'() leftover)])] [(rst leftover) (syntax-case leftover () + [(#:rest rest-expr one-thing another-thing) + (and (not (keyword? #'one-thing)) + (not (keyword? #'another-thing))) + (raise-syntax-error + #f + "expected the #:rest keyword to be followed only by the range (possibly with pre- and post-conditions)" + stx #'another-thing)] [(#:rest rest-expr . leftover) (values #'rest-expr #'leftover)] [_ (values #f leftover)])]