Skip to content

Commit

Permalink
fix(compiler): Fix disambiguation of record label access (#2072)
Browse files Browse the repository at this point in the history
  • Loading branch information
ospencer committed Mar 16, 2024
1 parent f3007b4 commit 1f8a20d
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/src/typed/typecore.re
Expand Up @@ -2592,7 +2592,7 @@ and type_label_access = (env, srecord, lid) => {
let opath =
try({
let (p0, p, _) = extract_concrete_record(env, ty_exp);
Some((p0, p, repr(ty_exp).level == generic_level));
Some((p0, p, true));
}) {
| Not_found => None
};
Expand Down
27 changes: 27 additions & 0 deletions compiler/test/suites/records.re
Expand Up @@ -13,6 +13,7 @@ describe("records", ({test, testSkip}) => {
let assertCompileError = makeCompileErrorRunner(test);
let assertRun = makeRunner(test_or_skip);
let assertWarning = makeWarningRunner(test);
let assertNoWarning = makeNoWarningRunner(test);

assertRun(
"record_1",
Expand Down Expand Up @@ -229,4 +230,30 @@ describe("records", ({test, testSkip}) => {
"record Rec {foo: Number, bar: Number}; let a = {foo: 1, bar: 2}; let b = {...a, foo: 2, bar: 3}",
Warnings.UselessRecordSpread,
);

assertWarning(
"disambiguation_1",
{|
record A { field: Number }
record B { field: Number }
x => x.field
|},
Warnings.AmbiguousName(["field"], ["B", "A"], false),
);
assertNoWarning(
"disambiguation_2",
{|
record A { field: Number }
record B { field: Number }
(x: A) => x.field
|},
);
assertNoWarning(
"disambiguation_3",
{|
record A { field: Number }
record B { field: Number }
(x: B) => x.field
|},
);
});

0 comments on commit 1f8a20d

Please sign in to comment.