Fix syntax-local-value[/immediate] rename transformer context

fixes #2815
This commit is contained in:
Alexis King 2019-09-08 14:53:32 -05:00
parent 866c5d41e0
commit 415f030212
3 changed files with 38 additions and 6 deletions

View File

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

View File

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

View File

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