define-simple-macro now works with an ~or macro. (#1949)
The previous definition of define-simple-macro would fail (with a very poor error message) if the user made a simple macro like: (define-simple-macro (~or a b) (let ([tmp a]) (if tmp tmp b))) While the define-simple-macro form does allow syntax-parse patterns, this should not be enabled for the initial head pattern, as described in the define-simple-macro documentation.
This commit is contained in:
parent
82d3dba913
commit
dd2a0dceb3
|
@ -20,7 +20,7 @@ Defines a macro named @racket[macro-id]; equivalent to the following:
|
||||||
@racketblock[
|
@racketblock[
|
||||||
(define-syntax (macro-id stx)
|
(define-syntax (macro-id stx)
|
||||||
(syntax-parse 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))
|
@(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)
|
(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 ...+)]{
|
@defform[(define-syntax-parser macro-id parse-option ... clause ...+)]{
|
||||||
|
|
|
@ -807,6 +807,10 @@
|
||||||
#:with stx (syntax/loc this-syntax (void))
|
#:with stx (syntax/loc this-syntax (void))
|
||||||
stx)
|
stx)
|
||||||
(check-eq? (x) (void))
|
(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)
|
;; from Jay McCarthy (4/2016)
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
|
|
||||||
(define-syntax (define-simple-macro stx)
|
(define-syntax (define-simple-macro stx)
|
||||||
(syntax-parse stx
|
(syntax-parse stx
|
||||||
[(define-simple-macro (~and (macro:id . _) pattern) . body)
|
[(define-simple-macro (macro:id . pattern) . body)
|
||||||
#`(define-syntax macro
|
#`(define-syntax macro
|
||||||
(syntax-parser/template
|
(syntax-parser/template
|
||||||
#,((make-syntax-introducer) stx)
|
#,((make-syntax-introducer) stx)
|
||||||
[pattern . body]))]))
|
[((~var macro id) . pattern) . body]))]))
|
||||||
|
|
||||||
(define-simple-macro (define-syntax-parser macro:id option-or-clause ...)
|
(define-simple-macro (define-syntax-parser macro:id option-or-clause ...)
|
||||||
(define-syntax macro
|
(define-syntax macro
|
||||||
|
|
Loading…
Reference in New Issue
Block a user