mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-01 07:41:12 +00:00
use interner in Scope + fix shadowing being reported incorrectly
This commit is contained in:
parent
09fbd4a505
commit
08c8968236
3 changed files with 26 additions and 44 deletions
|
@ -107,7 +107,7 @@ enum PendingTypeDef<'a> {
|
|||
},
|
||||
|
||||
/// An invalid alias, that is ignored in the rest of the pipeline
|
||||
/// e.g. a shadowed alias, or a definition like `MyAlias 1 : Int`
|
||||
/// e.g. a definition like `MyAlias 1 : Int`
|
||||
/// with an incorrect pattern
|
||||
InvalidAlias {
|
||||
#[allow(dead_code)]
|
||||
|
@ -116,6 +116,9 @@ enum PendingTypeDef<'a> {
|
|||
region: Region,
|
||||
},
|
||||
|
||||
/// An alias with a name that shadows another symbol
|
||||
ShadowedAlias,
|
||||
|
||||
/// An invalid ability, that is ignored in the rest of the pipeline.
|
||||
/// E.g. a shadowed ability, or with a bad definition.
|
||||
InvalidAbility {
|
||||
|
@ -137,6 +140,7 @@ impl PendingTypeDef<'_> {
|
|||
}
|
||||
PendingTypeDef::Ability { name, .. } => Some((name.value, name.region)),
|
||||
PendingTypeDef::InvalidAlias { symbol, region, .. } => Some((*symbol, *region)),
|
||||
PendingTypeDef::ShadowedAlias { .. } => None,
|
||||
PendingTypeDef::InvalidAbility { symbol, region } => Some((*symbol, *region)),
|
||||
PendingTypeDef::AbilityNotOnToplevel => None,
|
||||
PendingTypeDef::AbilityShadows => None,
|
||||
|
@ -302,6 +306,7 @@ pub(crate) fn canonicalize_defs<'a>(
|
|||
PendingTypeDef::InvalidAlias { .. }
|
||||
| PendingTypeDef::InvalidAbility { .. }
|
||||
| PendingTypeDef::AbilityShadows
|
||||
| PendingTypeDef::ShadowedAlias { .. }
|
||||
| PendingTypeDef::AbilityNotOnToplevel => { /* ignore */ }
|
||||
}
|
||||
}
|
||||
|
@ -1365,7 +1370,7 @@ fn to_pending_type_def<'a>(
|
|||
|
||||
let region = Region::span_across(&name.region, &ann.region);
|
||||
|
||||
match scope.introduce(
|
||||
match scope.introduce_without_shadow_symbol(
|
||||
name.value.into(),
|
||||
&env.exposed_ident_ids,
|
||||
&mut env.ident_ids,
|
||||
|
@ -1415,18 +1420,14 @@ fn to_pending_type_def<'a>(
|
|||
}
|
||||
}
|
||||
|
||||
Err((original_region, loc_shadowed_symbol, new_symbol)) => {
|
||||
Err((original_region, loc_shadowed_symbol)) => {
|
||||
env.problem(Problem::Shadowing {
|
||||
original_region,
|
||||
shadow: loc_shadowed_symbol,
|
||||
kind: shadow_kind,
|
||||
});
|
||||
|
||||
PendingTypeDef::InvalidAlias {
|
||||
kind,
|
||||
symbol: new_symbol,
|
||||
region,
|
||||
}
|
||||
PendingTypeDef::ShadowedAlias
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue