Don't assume that the user sexpr is a list.

Fixes PR 11718
This commit is contained in:
Eli Barzilay 2011-02-10 14:20:15 -05:00
parent 160a5bd5eb
commit 4b1960e1f0

View File

@ -22,10 +22,17 @@
(lambda (user-stx) (lambda (user-stx)
(syntax-case** dr #t user-stx () free-identifier=? (syntax-case** dr #t user-stx () free-identifier=?
[(_ . pattern) (syntax/loc user-stx template)] [(_ . pattern) (syntax/loc user-stx template)]
[_ (let*-values ([(sexpr) (syntax->datum user-stx)] [_ (let*-values
[(msg) (format ([(sexpr) (syntax->datum user-stx)]
"~.s did not match pattern ~.s" [(msg)
sexpr (cons (car sexpr) 'pattern))]) (if (pair? sexpr)
(format "~.s did not match pattern ~.s"
sexpr (cons (car sexpr) 'pattern))
(if (symbol? sexpr)
(format "must be used in a pattern ~.s"
(cons sexpr 'pattern))
(error 'internal-error
"something bad happened")))])
(raise-syntax-error #f msg user-stx))]))))] (raise-syntax-error #f msg user-stx))]))))]
[(_ (name . ptrn) tmpl) (err "expected an identifier" #'name)] [(_ (name . ptrn) tmpl) (err "expected an identifier" #'name)]
[(_ (name . ptrn)) (err "missing template")] [(_ (name . ptrn)) (err "missing template")]