Support unsyntax-splicing in vector quasisyntax
If the sub-template inside #(...) is unsyntax-splicing instead of list, produce the template #((~@! . ????)) instead of calling (datum->syntax o list->vector o syntax->list). Fixes #2402.
This commit is contained in:
parent
5454b7d809
commit
8043768b4c
|
@ -2289,8 +2289,9 @@
|
||||||
(test '#(1 2 3 4 5) syntax->datum (quasisyntax #(a (unsyntax b) c ...)))
|
(test '#(1 2 3 4 5) syntax->datum (quasisyntax #(a (unsyntax b) c ...)))
|
||||||
(test '#s(PS 1 2) syntax->datum (quasisyntax #s(PS a (unsyntax b))))
|
(test '#s(PS 1 2) syntax->datum (quasisyntax #s(PS a (unsyntax b))))
|
||||||
(test '#s(PS 1 2 3 4 5) syntax->datum (quasisyntax #s(PS a (unsyntax b) c ...)))
|
(test '#s(PS 1 2 3 4 5) syntax->datum (quasisyntax #s(PS a (unsyntax b) c ...)))
|
||||||
#|
|
|
||||||
(test '#(1 2 3 4 5) syntax->datum (quasisyntax #(a (unsyntax b) (unsyntax-splicing ds))))
|
(test '#(1 2 3 4 5) syntax->datum (quasisyntax #(a (unsyntax b) (unsyntax-splicing ds))))
|
||||||
|
(test '#(3 4 5) syntax->datum (quasisyntax #((unsyntax-splicing ds))))
|
||||||
|
#|
|
||||||
(test '#s(PS 1 2 3 4 5) syntax->datum
|
(test '#s(PS 1 2 3 4 5) syntax->datum
|
||||||
(quasisyntax #s(PS a (unsyntax b) (unsyntax-splicing ds))))
|
(quasisyntax #s(PS a (unsyntax b) (unsyntax-splicing ds))))
|
||||||
|#))
|
|#))
|
||||||
|
|
|
@ -241,12 +241,15 @@
|
||||||
depth
|
depth
|
||||||
same-k
|
same-k
|
||||||
(lambda (v bindings)
|
(lambda (v bindings)
|
||||||
|
(let ([stx-lst/#f (syntax->list v)])
|
||||||
(convert-k (datum->syntax
|
(convert-k (datum->syntax
|
||||||
stx
|
stx
|
||||||
(list->vector (syntax->list v))
|
(if stx-lst/#f
|
||||||
|
(list->vector stx-lst/#f)
|
||||||
|
(vector-immutable (cons #'~@! v)))
|
||||||
stx
|
stx
|
||||||
stx)
|
stx)
|
||||||
bindings)))]
|
bindings))))]
|
||||||
[(prefab-struct-key (syntax-e stx))
|
[(prefab-struct-key (syntax-e stx))
|
||||||
(let* ([d (syntax-e stx)]
|
(let* ([d (syntax-e stx)]
|
||||||
[key (prefab-struct-key d)]
|
[key (prefab-struct-key d)]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user