work with macros that use syntax-local-lift-values-expression
Using `syntax-local-lift-values-expression` creates a lifted `define-values` form with multiple binding variables.
This commit is contained in:
parent
c256e47e27
commit
9a9c7d3d91
|
@ -16,12 +16,12 @@
|
|||
(define stx* (local-expand/capture-lifts stx ctx stop-ids))
|
||||
(syntax-parse stx*
|
||||
#:literal-sets (kernel-literals)
|
||||
[(begin (define-values (n) e) ... e*)
|
||||
[(begin (define-values (n ...) e) ... e*)
|
||||
(define-values (sub-defss defs)
|
||||
(for/lists (_1 _2) ([e (in-list (syntax->list #'(e ...)))]
|
||||
[n (in-list (syntax->list #'(n ...)))])
|
||||
[ns (in-list (syntax->list #'((n ...) ...)))])
|
||||
;; lifted expressions may re-lift, so recur
|
||||
(define-values (sub-defs e-expanded) (loop e))
|
||||
(values sub-defs #`(define-values (#,n) #,e-expanded))))
|
||||
(values sub-defs #`(define-values #,ns #,e-expanded))))
|
||||
(values (append (apply append sub-defss) defs) #'e*)])))
|
||||
#`(begin #,@defs #,expr))
|
||||
|
|
Loading…
Reference in New Issue
Block a user