fix set!' of define-for-syntax'ed varable in `let-syntax' RHS

This commit is contained in:
Matthew Flatt 2010-11-16 20:14:54 -07:00
parent b2edac3179
commit 1762a9a872
2 changed files with 22 additions and 2 deletions

View File

@ -1353,7 +1353,24 @@
(syntax-case stx ()
[(_ v) (datum->syntax stx (kw/f #:x #'v opt))]))
(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)

View File

@ -3112,7 +3112,10 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
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. */
return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id,
genv->module->insp,