diff --git a/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl b/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl index ff8e6f3b6e..6bb8a592b0 100644 --- a/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl +++ b/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl @@ -20,7 +20,7 @@ Defines a macro named @racket[macro-id]; equivalent to the following: @racketblock[ (define-syntax (macro-id stx) (syntax-parse stx - [(macro-id . pattern) pattern-directive ... (syntax template)])) + [((~var macro-id id) . pattern) pattern-directive ... (syntax template)])) ] @(the-eval '(require syntax/parse/define)) @@ -38,6 +38,10 @@ Defines a macro named @racket[macro-id]; equivalent to the following: (fn2 a #:b 'c) ] +@history[#:changed "6.12.0.3" @elem{Changed pattern head to @racket[(~var macro-id id)] from + @racket[macro-id], allowing tilde-prefixed identifiers or + identifiers containing colons to be used as @racket[macro-id] + without producing a syntax error.}] } @defform[(define-syntax-parser macro-id parse-option ... clause ...+)]{ diff --git a/pkgs/racket-test/tests/stxparse/test.rkt b/pkgs/racket-test/tests/stxparse/test.rkt index 10315f7a2b..4035815604 100644 --- a/pkgs/racket-test/tests/stxparse/test.rkt +++ b/pkgs/racket-test/tests/stxparse/test.rkt @@ -807,6 +807,10 @@ #:with stx (syntax/loc this-syntax (void)) stx) (check-eq? (x) (void)) + (define-simple-macro (~or . _) + #:with stx (syntax/loc this-syntax (void)) + stx) + (check-eq? (~or) (void)) )) ;; from Jay McCarthy (4/2016) diff --git a/racket/collects/syntax/parse/define.rkt b/racket/collects/syntax/parse/define.rkt index 97c201000b..80af669b22 100644 --- a/racket/collects/syntax/parse/define.rkt +++ b/racket/collects/syntax/parse/define.rkt @@ -8,11 +8,11 @@ (define-syntax (define-simple-macro stx) (syntax-parse stx - [(define-simple-macro (~and (macro:id . _) pattern) . body) + [(define-simple-macro (macro:id . pattern) . body) #`(define-syntax macro (syntax-parser/template #,((make-syntax-introducer) stx) - [pattern . body]))])) + [((~var macro id) . pattern) . body]))])) (define-simple-macro (define-syntax-parser macro:id option-or-clause ...) (define-syntax macro