From 81eac261dc9bda0283c2f1dcb12139c234a74370 Mon Sep 17 00:00:00 2001 From: Jon Rafkind Date: Tue, 9 Nov 2010 17:23:25 -0700 Subject: [PATCH] better error message for define-syntax-rule --- collects/racket/private/misc.rkt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/collects/racket/private/misc.rkt b/collects/racket/private/misc.rkt index 2f65562266..680990e490 100644 --- a/collects/racket/private/misc.rkt +++ b/collects/racket/private/misc.rkt @@ -12,18 +12,20 @@ (define-syntax define-syntax-rule (lambda (stx) (syntax-case stx () - [(dr (foo . pattern) template) - (identifier? #'foo) + [(dr (name . pattern) template) + (identifier? #'name) (syntax/loc stx - (define-syntax foo - (lambda (x) - (syntax-case** dr #t x () free-identifier=? - [(_ . pattern) (syntax/loc x template)]))))] - [(dr (foo . pattern) template) - (raise-syntax-error 'define-syntax-rule "expected an identifier" stx #'foo)] - [(dr (foo . pattern)) + (define-syntax name + (lambda (user) + (syntax-case** dr #t user () free-identifier=? + [(_ . pattern) (syntax/loc user template)] + [else (raise-syntax-error 'name (format "~a did not match pattern ~a" (syntax->datum user) '(name . pattern)))] + ))))] + [(dr (name . pattern) template) + (raise-syntax-error 'define-syntax-rule "expected an identifier" stx #'name)] + [(dr (name . pattern)) (raise-syntax-error 'define-syntax-rule "no template provided" stx)] - [(dr (foo . pattern) template . etc) + [(dr (name . pattern) template . etc) (raise-syntax-error 'define-syntax-rule "too many templates" stx #'etc)] [(dr head . template) (raise-syntax-error 'define-syntax-rule "invalid pattern" stx #'head)])))