diff --git a/collects/racket/private/qq-and-or.rkt b/collects/racket/private/qq-and-or.rkt index 452ea4f3aa..296467d52d 100644 --- a/collects/racket/private/qq-and-or.rkt +++ b/collects/racket/private/qq-and-or.rkt @@ -29,12 +29,18 @@ #t (let-values ([(tail1) (stx-cdr stx)]) (if (stx-null? tail1) - #t + (if named? + (raise-syntax-error #f "bad syntax (missing name or binding pairs)") + (raise-syntax-error #f "bad syntax (missing binding pairs)" stx)) (if (stx-null? (stx-cdr tail1)) - #t + (if named? + (raise-syntax-error #f "bad syntax (missing binding pairs or body)" stx) + (raise-syntax-error #f "bad syntax (missing body)" stx)) (if named? (if (symbol? (syntax-e (stx-car tail1))) - (stx-null? (stx-cdr (stx-cdr tail1))) + (if (stx-null? (stx-cdr (stx-cdr tail1))) + (raise-syntax-error #f "bad syntax (missing body)" stx) + #f) #f) #f))))) (raise-syntax-error #f "bad syntax" stx) diff --git a/collects/tests/racket/syntax.rktl b/collects/tests/racket/syntax.rktl index 708af4b946..929e0a8c05 100644 --- a/collects/tests/racket/syntax.rktl +++ b/collects/tests/racket/syntax.rktl @@ -1740,6 +1740,18 @@ (test #t dynamic-require ''use-rename-checker 'v) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check `let` error messages + +(syntax-test #'(let*) #rx"missing binding") +(syntax-test #'(let* ([x 10])) #rx"missing body") +(syntax-test #'(let) #rx"missing name or") +(syntax-test #'(let x) #rx"missing binding pairs or") +(syntax-test #'(let ([10 10])) #rx"missing binding pairs or") +(syntax-test #'(let x ([10 10])) #rx"missing body") +(syntax-test #'(letrec) #rx"missing binding") +(syntax-test #'(letrec ([x 3])) #rx"missing body") + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs)