fix module->namespace
problem resoring bindings
If a module has any sort of complex bindings, such as a definition of a macor-introduced identifiers, then `module->namespace` and variants (like `variable-reference->namespace`) need to recreate suitable bindings. Make sure that the module-path index for recreated bindings is the run-time one, not the compile-time one. Closes #1584
This commit is contained in:
parent
0a5c510b72
commit
03f2deeea9
|
@ -2017,6 +2017,37 @@ case of module-leve bindings; it doesn't cover local bindings.
|
||||||
(parameterize ([read-accept-compiled #t])
|
(parameterize ([read-accept-compiled #t])
|
||||||
(read (open-input-bytes (get-output-bytes o)))))
|
(read (open-input-bytes (get-output-bytes o)))))
|
||||||
|
|
||||||
|
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Make sure that when `variable-reference->namespace`
|
||||||
|
;; reconstitutes variable mappings, that it uses the
|
||||||
|
;; run-time module path index of the module instead
|
||||||
|
;; of it's compile-time module path index
|
||||||
|
|
||||||
|
(parameterize ([current-module-declare-name
|
||||||
|
(make-resolved-module-path 'uses-own-namespace-for-eval-from-submodule)])
|
||||||
|
(eval
|
||||||
|
'(module m racket/base
|
||||||
|
(require (for-syntax racket/base))
|
||||||
|
|
||||||
|
(define (x) 1)
|
||||||
|
|
||||||
|
(define-syntax-rule (def) (define y 0))
|
||||||
|
(def)
|
||||||
|
|
||||||
|
(void
|
||||||
|
(variable-reference->namespace (#%variable-reference)))
|
||||||
|
|
||||||
|
(define (get-x)
|
||||||
|
(eval '(x) (variable-reference->namespace (#%variable-reference))))
|
||||||
|
|
||||||
|
(module* main #f
|
||||||
|
(provide v)
|
||||||
|
(define v
|
||||||
|
(parameterize ([current-namespace (variable-reference->namespace (#%variable-reference))])
|
||||||
|
(eval '(get-x))))))))
|
||||||
|
|
||||||
|
(test 1 dynamic-require '(submod 'uses-own-namespace-for-eval-from-submodule main) 'v)
|
||||||
|
|
||||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(report-errs)
|
(report-errs)
|
||||||
|
|
|
@ -1613,7 +1613,9 @@ void scheme_shadow(Scheme_Env *env, Scheme_Object *n, Scheme_Object *val, int as
|
||||||
|
|
||||||
scheme_add_module_binding(id, scheme_env_phase(env),
|
scheme_add_module_binding(id, scheme_env_phase(env),
|
||||||
(env->module
|
(env->module
|
||||||
? env->module->self_modidx
|
? (env->link_midx
|
||||||
|
? env->link_midx
|
||||||
|
: env->module->self_modidx)
|
||||||
: scheme_false),
|
: scheme_false),
|
||||||
((env->module && env->module->prefix)
|
((env->module && env->module->prefix)
|
||||||
? env->module->prefix->src_insp_desc
|
? env->module->prefix->src_insp_desc
|
||||||
|
|
Loading…
Reference in New Issue
Block a user