diff --git a/pkgs/racket-test-core/tests/racket/namespac.rktl b/pkgs/racket-test-core/tests/racket/namespac.rktl index 4b73de4ea1..f3ed3618af 100644 --- a/pkgs/racket-test-core/tests/racket/namespac.rktl +++ b/pkgs/racket-test-core/tests/racket/namespac.rktl @@ -145,6 +145,17 @@ ;; ---------------------------------------- +(test #f + variable-reference->module-path-index (#%variable-reference test)) +(test (module-path-index-join ''#%kernel #f) + variable-reference->module-path-index (#%variable-reference +)) +(require (only-in racket/unsafe/ops + [unsafe-fx+ $$unsafe-fx+])) +(test (module-path-index-join ''#%unsafe #f) + variable-reference->module-path-index (#%variable-reference $$unsafe-fx+)) + +;; ---------------------------------------- + (module phaser scheme/base (define x (variable-reference->phase (#%variable-reference x))) diff --git a/racket/src/racket/src/env.c b/racket/src/racket/src/env.c index e3a02ff641..e3327ad8e0 100644 --- a/racket/src/racket/src/env.c +++ b/racket/src/racket/src/env.c @@ -2225,9 +2225,17 @@ static Scheme_Object *variable_modidx(int argc, Scheme_Object *argv[]) scheme_wrong_contract("variable-reference->module-path-index", "variable-reference?", 0, argc, argv); if (env->module) { - if (!env->link_midx) - return env->module->self_modidx; - else + if (!env->link_midx) { + if (env->module->self_modidx + && SCHEME_TRUEP(((Scheme_Modidx *)env->module->self_modidx)->path)) + return env->module->self_modidx; + else + return scheme_make_modidx(scheme_make_pair(scheme_intern_symbol("quote"), + scheme_make_pair(scheme_resolved_module_path_value(env->module->modname), + scheme_null)), + scheme_false, + scheme_false); + } else return env->link_midx; } else return scheme_false;