[honu] dont confuse identifiers with $. use = in with-syntax
This commit is contained in:
parent
bb57412242
commit
79b6e5611e
|
@ -121,12 +121,17 @@
|
|||
(provide compress-dollars)
|
||||
(define (compress-dollars stx)
|
||||
(define-literal-set local-literals (honu-$ repeat$))
|
||||
(define-splicing-syntax-class not-dollar
|
||||
#:literal-sets (local-literals)
|
||||
[pattern x #:when (and (identifier? #'x)
|
||||
(not (free-identifier=? #'honu-$ #'x)))
|
||||
#:with out #'x])
|
||||
(syntax-parse stx #:literal-sets (local-literals)
|
||||
[(honu-$ x ... honu-$ rest ...)
|
||||
[(honu-$ x:not-dollar ... honu-$ rest ...)
|
||||
(with-syntax ([(rest* ...) (compress-dollars #'(rest ...))])
|
||||
(datum->syntax stx (syntax->list #'((repeat$ x ...) rest* ...))
|
||||
(datum->syntax stx (syntax->list #'((repeat$ x.out ...) rest* ...))
|
||||
stx stx))]
|
||||
[(x rest ...)
|
||||
[(x:not-dollar rest ...)
|
||||
(with-syntax ([x* (compress-dollars #'x)]
|
||||
[(rest* ...) (compress-dollars #'(rest ...))])
|
||||
(datum->syntax stx
|
||||
|
|
|
@ -341,12 +341,20 @@
|
|||
(provide (rename-out [honu-with-syntax withSyntax]))
|
||||
(define-honu-syntax honu-with-syntax
|
||||
(lambda (code context)
|
||||
(define-splicing-syntax-class clause
|
||||
#:literal-sets (cruft)
|
||||
#:literals [(ellipses ...) honu-equal]
|
||||
[pattern (~seq name:id honu-equal data:honu-expression)
|
||||
#:with out #'(name data.result)]
|
||||
[pattern (~seq (#%parens name:id ellipses) honu-equal data:honu-expression)
|
||||
#:with out #'((name ellipses) data.result)])
|
||||
(syntax-parse code #:literal-sets (cruft)
|
||||
#:literals (honu-->)
|
||||
[(_ (~seq name:id honu--> data:honu-expression (~optional honu-comma)) ...
|
||||
#:literals (honu-equal)
|
||||
[(_ (~seq all:clause (~optional honu-comma)) ...
|
||||
(#%braces code ...) . rest)
|
||||
(define out (racket-syntax (with-syntax ([name data.result] ...)
|
||||
(parse-body code ...))))
|
||||
(define out (racket-syntax
|
||||
(with-syntax (all.out ...)
|
||||
(parse-body code ...))))
|
||||
(values out #'rest #t)])))
|
||||
|
||||
(provide true false)
|
||||
|
|
Loading…
Reference in New Issue
Block a user