More precise syntax errors for let and friends

This commit is contained in:
Asumu Takikawa 2012-12-24 15:55:57 -05:00
parent 6a69da76e2
commit f3fa5d1669
2 changed files with 21 additions and 3 deletions

View File

@ -29,12 +29,18 @@
#t #t
(let-values ([(tail1) (stx-cdr stx)]) (let-values ([(tail1) (stx-cdr stx)])
(if (stx-null? tail1) (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)) (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 named?
(if (symbol? (syntax-e (stx-car tail1))) (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)
#f))))) #f)))))
(raise-syntax-error #f "bad syntax" stx) (raise-syntax-error #f "bad syntax" stx)

View File

@ -1740,6 +1740,18 @@
(test #t dynamic-require ''use-rename-checker 'v) (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) (report-errs)