Fix syntax-local-value[/immediate]
rename transformer context
fixes #2815
This commit is contained in:
parent
866c5d41e0
commit
415f030212
|
@ -2415,6 +2415,33 @@
|
|||
|
||||
(test 11 dynamic-require ''syntax-local-bind-syntaxes-free-id-context 'result)
|
||||
|
||||
;; ----------------------------------------
|
||||
;; Related to the above, make sure `syntax-local-value/immediate` resolves rename
|
||||
;; transformers in a context with first-class definition context bindings
|
||||
|
||||
(module syntax-local-value-free-id-context racket/base
|
||||
(require (for-syntax racket/base))
|
||||
(provide result)
|
||||
(begin-for-syntax
|
||||
(struct indirect-rename-transformer (target-holder)
|
||||
#:property prop:rename-transformer
|
||||
(lambda (self) (syntax-local-value (indirect-rename-transformer-target-holder self)))))
|
||||
(define-syntax (m stx)
|
||||
(define intdef (syntax-local-make-definition-context))
|
||||
(syntax-local-bind-syntaxes (list (syntax-local-introduce #'holder)) #'#'add1 intdef)
|
||||
(syntax-local-bind-syntaxes (list (syntax-local-introduce #'add1-indirect))
|
||||
(syntax-local-introduce #'(indirect-rename-transformer #'holder))
|
||||
intdef)
|
||||
(define-values [value target]
|
||||
(syntax-local-value/immediate
|
||||
(internal-definition-context-introduce intdef #'add1-indirect 'add)
|
||||
#f
|
||||
(list intdef)))
|
||||
#`'#,(indirect-rename-transformer? value))
|
||||
(define result (m)))
|
||||
|
||||
(test #t dynamic-require ''syntax-local-value-free-id-context 'result)
|
||||
|
||||
;; ----------------------------------------
|
||||
|
||||
(report-errs)
|
||||
|
|
|
@ -199,8 +199,8 @@
|
|||
(cond
|
||||
[(rename-transformer? v)
|
||||
(if immediate?
|
||||
(values v (rename-transformer-target v))
|
||||
(loop (rename-transformer-target v)))]
|
||||
(values v (rename-transformer-target-in-context v ctx))
|
||||
(loop (rename-transformer-target-in-context v ctx)))]
|
||||
[immediate? (values v #f)]
|
||||
[else v])])])))
|
||||
|
||||
|
|
|
@ -46152,8 +46152,13 @@ static const char *startup_source =
|
|||
"(if immediate?_0"
|
||||
"(values"
|
||||
" v_0"
|
||||
"(1/rename-transformer-target v_0))"
|
||||
"(loop_0(1/rename-transformer-target v_0))))"
|
||||
"(rename-transformer-target-in-context"
|
||||
" v_0"
|
||||
" ctx_0))"
|
||||
"(loop_0"
|
||||
"(rename-transformer-target-in-context"
|
||||
" v_0"
|
||||
" ctx_0))))"
|
||||
"(if immediate?_0"
|
||||
"(let-values()(values v_0 #f))"
|
||||
"(let-values() v_0)))))))))))))))"
|
||||
|
@ -59741,7 +59746,7 @@ static const char *startup_source =
|
|||
"(let-values(((in_1) in_0)((source_0)(read-config-source config_0)))"
|
||||
"(read-char-or-special in_1 special1.1 source_0))))"
|
||||
"(begin"
|
||||
"(if(char=? c_0 '#\\space)"
|
||||
"(if(eqv? c_0 '#\\space)"
|
||||
"(void)"
|
||||
"(let-values()"
|
||||
"(let-values(((in70_0) in_0)"
|
||||
|
@ -59788,7 +59793,7 @@ static const char *startup_source =
|
|||
"(let-values(((in_1) in_0)((source_0)(read-config-source config_0)))"
|
||||
"(read-char-or-special in_1 special1.1 source_0))))"
|
||||
"(begin"
|
||||
"(if(char-lang-nonsep? c_0)"
|
||||
"(if(if(char? c_0)(char-lang-nonsep? c_0) #f)"
|
||||
"(void)"
|
||||
"(let-values()"
|
||||
"(let-values(((in81_0) in_0)"
|
||||
|
|
Loading…
Reference in New Issue
Block a user