mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
record, tag, alias errors
- duplicate fields and tags are reported - circular aliases are reported
This commit is contained in:
parent
0372b34e86
commit
f6af66f342
13 changed files with 679 additions and 55 deletions
|
@ -32,24 +32,32 @@ impl Constraint {
|
|||
match self {
|
||||
True | SaveTheEnvironment => {}
|
||||
|
||||
Eq(typ, expected, _, _) => {
|
||||
expected
|
||||
.get_type_mut_ref()
|
||||
.instantiate_aliases(aliases, var_store, introduced);
|
||||
typ.instantiate_aliases(aliases, var_store, introduced);
|
||||
Eq(typ, expected, _, region) => {
|
||||
let expected_region = expected.get_annotation_region().unwrap_or(*region);
|
||||
expected.get_type_mut_ref().instantiate_aliases(
|
||||
expected_region,
|
||||
aliases,
|
||||
var_store,
|
||||
introduced,
|
||||
);
|
||||
typ.instantiate_aliases(*region, aliases, var_store, introduced);
|
||||
}
|
||||
|
||||
Lookup(_, expected, _) => {
|
||||
expected
|
||||
.get_type_mut_ref()
|
||||
.instantiate_aliases(aliases, var_store, introduced);
|
||||
Lookup(_, expected, region) => {
|
||||
let expected_region = expected.get_annotation_region().unwrap_or(*region);
|
||||
expected.get_type_mut_ref().instantiate_aliases(
|
||||
expected_region,
|
||||
aliases,
|
||||
var_store,
|
||||
introduced,
|
||||
);
|
||||
}
|
||||
|
||||
Pattern(_, _, typ, pexpected) => {
|
||||
Pattern(region, _, typ, pexpected) => {
|
||||
pexpected
|
||||
.get_type_mut_ref()
|
||||
.instantiate_aliases(aliases, var_store, introduced);
|
||||
typ.instantiate_aliases(aliases, var_store, introduced);
|
||||
.instantiate_aliases(*region, aliases, var_store, introduced);
|
||||
typ.instantiate_aliases(*region, aliases, var_store, introduced);
|
||||
}
|
||||
|
||||
And(nested) => {
|
||||
|
@ -65,8 +73,8 @@ impl Constraint {
|
|||
}
|
||||
|
||||
let mut introduced = ImSet::default();
|
||||
for Located { value: typ, .. } in letcon.def_types.iter_mut() {
|
||||
typ.instantiate_aliases(&new_aliases, var_store, &mut introduced);
|
||||
for Located { region, value: typ } in letcon.def_types.iter_mut() {
|
||||
typ.instantiate_aliases(*region, &new_aliases, var_store, &mut introduced);
|
||||
}
|
||||
|
||||
letcon.defs_constraint.instantiate_aliases_help(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue