fix set!' of
define-for-syntax'ed varable in `let-syntax' RHS
This commit is contained in:
parent
b2edac3179
commit
1762a9a872
|
@ -1354,6 +1354,23 @@
|
||||||
[(_ v) (datum->syntax stx (kw/f #:x #'v opt))]))
|
[(_ v) (datum->syntax stx (kw/f #:x #'v opt))]))
|
||||||
(kw/g 7))))
|
(kw/g 7))))
|
||||||
|
|
||||||
|
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Check mutation of local define-for-syntax in let-syntax:
|
||||||
|
|
||||||
|
(module set-local-dfs racket/base
|
||||||
|
(require (for-syntax racket/base))
|
||||||
|
(provide ten)
|
||||||
|
|
||||||
|
(define-for-syntax tl-var 9)
|
||||||
|
|
||||||
|
(define ten
|
||||||
|
(let-syntax ([x1 (lambda (stx)
|
||||||
|
(set! tl-var (add1 tl-var))
|
||||||
|
(datum->syntax stx tl-var))])
|
||||||
|
(x1))))
|
||||||
|
|
||||||
|
(test 10 dynamic-require ''set-local-dfs 'ten)
|
||||||
|
|
||||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(report-errs)
|
(report-errs)
|
||||||
|
|
|
@ -3112,7 +3112,10 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
|
||||||
modpos, SCHEME_INT_VAL(mod_defn_phase));
|
modpos, SCHEME_INT_VAL(mod_defn_phase));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!modname && (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) && genv->module) {
|
if (!modname
|
||||||
|
&& (flags & (SCHEME_SETTING | SCHEME_REFERENCING))
|
||||||
|
&& genv->module
|
||||||
|
&& !(flags & SCHEME_RESOLVE_MODIDS)) {
|
||||||
/* Need to return a variable reference in this case, too. */
|
/* Need to return a variable reference in this case, too. */
|
||||||
return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id,
|
return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id,
|
||||||
genv->module->insp,
|
genv->module->insp,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user