Skip to content

Commit fd2dbef

Browse files
authored
fix(compiler): Resolve Not_found for use statements with module aliases (#2285)
1 parent 9631e72 commit fd2dbef

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

compiler/src/typed/env.re

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1925,29 +1925,29 @@ let rec add_signature = (sg, env) =>
19251925

19261926
/* Open a signature path */
19271927

1928-
let add_components = (slot, root, env0, ~type_aliases=Tbl.empty, comps) => {
1928+
let add_components = (slot, root, env0, ~aliases=Tbl.empty, comps) => {
19291929
let add_l = (w, comps, env0) => TycompTbl.add_open(slot, w, comps, env0);
19301930

1931-
let add = (w, comps, ~aliases=Tbl.empty, env0) =>
1931+
let add = (w, comps, aliases, env0) =>
19321932
IdTbl.add_open(slot, w, root, comps, aliases, env0);
19331933

19341934
let constructors =
19351935
add_l(x => `Constructor(x), comps.comp_constrs, env0.constructors);
19361936

19371937
let labels = add_l(x => `Label(x), comps.comp_labels, env0.labels);
19381938

1939-
let values = add(x => `Value(x), comps.comp_values, env0.values);
1939+
let values = add(x => `Value(x), comps.comp_values, aliases, env0.values);
19401940

1941-
let types =
1942-
add(x => `Type(x), comps.comp_types, ~aliases=type_aliases, env0.types);
1941+
let types = add(x => `Type(x), comps.comp_types, aliases, env0.types);
19431942

19441943
let modtypes =
1945-
add(x => `Module_type(x), comps.comp_modtypes, env0.modtypes);
1944+
add(x => `Module_type(x), comps.comp_modtypes, aliases, env0.modtypes);
19461945

19471946
let components =
1948-
add(x => `Component(x), comps.comp_components, env0.components);
1947+
add(x => `Component(x), comps.comp_components, aliases, env0.components);
19491948

1950-
let modules = add(x => `Module(x), comps.comp_modules, env0.modules);
1949+
let modules =
1950+
add(x => `Module(x), comps.comp_modules, aliases, env0.modules);
19511951

19521952
{
19531953
summary: Env_open(env0.summary, root),
@@ -2040,7 +2040,7 @@ let use_partial_signature = (root, items, env0) => {
20402040
comp_modtypes: Tbl.empty,
20412041
};
20422042

2043-
let type_aliases = ref(Tbl.empty);
2043+
let aliases = ref(Tbl.empty);
20442044

20452045
let items =
20462046
List.map(
@@ -2085,6 +2085,7 @@ let use_partial_signature = (root, items, env0) => {
20852085
Tbl.find(old_name, comps.comp_components),
20862086
new_comps.comp_components,
20872087
);
2088+
aliases := Tbl.add(new_name, old_name, aliases^);
20882089
TUseModule({
20892090
name: new_name,
20902091
declaration: EnvLazy.force(subst_modtype_maker, descr),
@@ -2101,7 +2102,7 @@ let use_partial_signature = (root, items, env0) => {
21012102
| ((decl, (constructors, labels)), _) as descr =>
21022103
new_comps.comp_types =
21032104
Tbl.add(new_name, descr, new_comps.comp_types);
2104-
type_aliases := Tbl.add(new_name, old_name, type_aliases^);
2105+
aliases := Tbl.add(new_name, old_name, aliases^);
21052106
List.iter(
21062107
({cstr_name}) => {
21072108
new_comps.comp_constrs =
@@ -2162,10 +2163,7 @@ let use_partial_signature = (root, items, env0) => {
21622163
items,
21632164
);
21642165

2165-
(
2166-
add_components(None, root, env0, new_comps, ~type_aliases=type_aliases^),
2167-
items,
2168-
);
2166+
(add_components(None, root, env0, new_comps, ~aliases=aliases^), items);
21692167
};
21702168

21712169
let use_full_signature = (root, env0) => {

compiler/test/suites/provides.re

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,4 +255,20 @@ describe("provides", ({test, testSkip}) => {
255255
"reprovideTypeUnifyA",
256256
"true\n",
257257
);
258+
assertRun(
259+
"use_multilevel_alias",
260+
{|
261+
module A {
262+
provide module B {
263+
provide let b = 1
264+
}
265+
}
266+
267+
use A.{ module B as C }
268+
use C.{ b }
269+
270+
print(b)
271+
|},
272+
"1\n",
273+
);
258274
});

0 commit comments

Comments
 (0)