fix variable-reference->module-path-index on primitive refs

This commit is contained in:
Matthew Flatt 2017-05-09 20:28:25 -06:00
parent 26c4dd6909
commit e6793c4598
2 changed files with 22 additions and 3 deletions

View File

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

View File

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