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:
Matthew Flatt 2016-08-07 15:57:40 -06:00
parent c256e47e27
commit 9a9c7d3d91

View File

@ -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))