mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-03 19:58:18 +00:00
Extract record destructure desugaring into its own fn
This commit is contained in:
parent
3eadc03e28
commit
3f9e957c9c
1 changed files with 18 additions and 11 deletions
|
@ -1226,17 +1226,7 @@ fn desugar_pattern<'a>(env: &mut Env<'a>, scope: &mut Scope, pattern: Pattern<'a
|
|||
Apply(tag, desugared_arg_patterns.into_bump_slice())
|
||||
}
|
||||
RecordDestructure(field_patterns) => {
|
||||
let mut allocated = Vec::with_capacity_in(field_patterns.len(), env.arena);
|
||||
for field_pattern in field_patterns.iter() {
|
||||
let value = desugar_pattern(env, scope, field_pattern.value);
|
||||
allocated.push(Loc {
|
||||
value,
|
||||
region: field_pattern.region,
|
||||
});
|
||||
}
|
||||
let field_patterns = field_patterns.replace_items(allocated.into_bump_slice());
|
||||
|
||||
RecordDestructure(field_patterns)
|
||||
RecordDestructure(desugar_record_destructures(env, scope, field_patterns))
|
||||
}
|
||||
RequiredField(name, field_pattern) => {
|
||||
RequiredField(name, desugar_loc_pattern(env, scope, field_pattern))
|
||||
|
@ -1274,6 +1264,23 @@ fn desugar_pattern<'a>(env: &mut Env<'a>, scope: &mut Scope, pattern: Pattern<'a
|
|||
}
|
||||
}
|
||||
|
||||
pub fn desugar_record_destructures<'a>(
|
||||
env: &mut Env<'a>,
|
||||
scope: &mut Scope,
|
||||
field_patterns: Collection<'a, Loc<Pattern<'a>>>,
|
||||
) -> Collection<'a, Loc<Pattern<'a>>> {
|
||||
let mut allocated = Vec::with_capacity_in(field_patterns.len(), env.arena);
|
||||
for field_pattern in field_patterns.iter() {
|
||||
let value = desugar_pattern(env, scope, field_pattern.value);
|
||||
allocated.push(Loc {
|
||||
value,
|
||||
region: field_pattern.region,
|
||||
});
|
||||
}
|
||||
|
||||
field_patterns.replace_items(allocated.into_bump_slice())
|
||||
}
|
||||
|
||||
/// Desugars a `dbg expr` expression into a statement block that prints and returns the
|
||||
/// value produced by `expr`. Essentially:
|
||||
/// (
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue