mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-03 03:42:17 +00:00
Remove more push_new and extend_new usages
This commit is contained in:
parent
b2ea0b842c
commit
49d1786f6c
10 changed files with 517 additions and 269 deletions
|
@ -1787,7 +1787,11 @@ fn unify_unspecialized_lambdas<M: MetaCollector>(
|
|||
);
|
||||
|
||||
Ok((
|
||||
SubsSlice::extend_new(&mut env.unspecialized_lambda_sets, merged_uls),
|
||||
{
|
||||
let start = env.unspecialized_lambda_sets.len() as u32;
|
||||
env.unspecialized_lambda_sets.extend(merged_uls);
|
||||
SubsSlice::new(start, env.unspecialized_lambda_sets.len() as u16)
|
||||
},
|
||||
whole_outcome,
|
||||
))
|
||||
}
|
||||
|
@ -3325,19 +3329,23 @@ fn unify_flat_type<M: MetaCollector>(
|
|||
*ext2,
|
||||
),
|
||||
(TagUnion(tags1, ext1), FunctionOrTagUnion(tag_names, _, ext2)) => {
|
||||
let empty_tag_var_slices = SubsSlice::extend_new(
|
||||
&mut env.variable_slices,
|
||||
std::iter::repeat(Default::default()).take(tag_names.len()),
|
||||
);
|
||||
let empty_tag_var_slices = {
|
||||
let start = env.variable_slices.len() as u32;
|
||||
env.variable_slices
|
||||
.extend(std::iter::repeat(SubsSlice::empty()).take(tag_names.len()));
|
||||
SubsSlice::new(start, env.variable_slices.len() as u16)
|
||||
};
|
||||
let tags2 = UnionTags::from_slices(*tag_names, empty_tag_var_slices);
|
||||
|
||||
unify_tag_unions(env, pool, ctx, *tags1, *ext1, tags2, *ext2)
|
||||
}
|
||||
(FunctionOrTagUnion(tag_names, _, ext1), TagUnion(tags2, ext2)) => {
|
||||
let empty_tag_var_slices = SubsSlice::extend_new(
|
||||
&mut env.variable_slices,
|
||||
std::iter::repeat(Default::default()).take(tag_names.len()),
|
||||
);
|
||||
let empty_tag_var_slices = {
|
||||
let start = env.variable_slices.len() as u32;
|
||||
env.variable_slices
|
||||
.extend(std::iter::repeat(SubsSlice::empty()).take(tag_names.len()));
|
||||
SubsSlice::new(start, env.variable_slices.len() as u16)
|
||||
};
|
||||
let tags1 = UnionTags::from_slices(*tag_names, empty_tag_var_slices);
|
||||
|
||||
unify_tag_unions(env, pool, ctx, tags1, *ext1, *tags2, *ext2)
|
||||
|
@ -3347,10 +3355,12 @@ fn unify_flat_type<M: MetaCollector>(
|
|||
// this never happens in type-correct programs, but may happen if there is a type error
|
||||
debug_assert!(is_recursion_var(env, *recursion_var));
|
||||
|
||||
let empty_tag_var_slices = SubsSlice::extend_new(
|
||||
&mut env.variable_slices,
|
||||
std::iter::repeat(Default::default()).take(tag_names.len()),
|
||||
);
|
||||
let empty_tag_var_slices = {
|
||||
let start = env.variable_slices.len() as u32;
|
||||
env.variable_slices
|
||||
.extend(std::iter::repeat(SubsSlice::empty()).take(tag_names.len()));
|
||||
SubsSlice::new(start, env.variable_slices.len() as u16)
|
||||
};
|
||||
let tags2 = UnionTags::from_slices(*tag_names, empty_tag_var_slices);
|
||||
|
||||
unify_tag_unions(env, pool, ctx, *tags1, *ext1, tags2, *ext2)
|
||||
|
@ -3359,10 +3369,12 @@ fn unify_flat_type<M: MetaCollector>(
|
|||
(FunctionOrTagUnion(tag_names, _, ext1), RecursiveTagUnion(recursion_var, tags2, ext2)) => {
|
||||
debug_assert!(is_recursion_var(env, *recursion_var));
|
||||
|
||||
let empty_tag_var_slices = SubsSlice::extend_new(
|
||||
&mut env.variable_slices,
|
||||
std::iter::repeat(Default::default()).take(tag_names.len()),
|
||||
);
|
||||
let empty_tag_var_slices = {
|
||||
let start = env.variable_slices.len() as u32;
|
||||
env.variable_slices
|
||||
.extend(std::iter::repeat(SubsSlice::empty()).take(tag_names.len()));
|
||||
SubsSlice::new(start, env.variable_slices.len() as u16)
|
||||
};
|
||||
let tags1 = UnionTags::from_slices(*tag_names, empty_tag_var_slices);
|
||||
|
||||
unify_tag_unions(env, pool, ctx, tags1, *ext1, *tags2, *ext2)
|
||||
|
@ -3587,7 +3599,7 @@ pub fn merged_ability_slices(
|
|||
let merged = merge_sorted_keys(left.iter().copied(), right.iter().copied());
|
||||
|
||||
// TODO: check if there's an existing run in subs rather than re-inserting
|
||||
SubsSlice::extend_new(&mut subs.symbol_names, merged)
|
||||
subs.extend_symbol_names(merged)
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
|
@ -3888,11 +3900,13 @@ fn unify_function_or_tag_union_and_func<M: MetaCollector>(
|
|||
|
||||
{
|
||||
let lambda_names = env.get_subs_slice(tag_fn_lambdas).to_vec();
|
||||
let new_lambda_names = SubsSlice::extend_new(&mut env.symbol_names, lambda_names);
|
||||
let empty_captures_slices = SubsSlice::extend_new(
|
||||
&mut env.variable_slices,
|
||||
std::iter::repeat(Default::default()).take(new_lambda_names.len()),
|
||||
);
|
||||
let new_lambda_names = env.extend_symbol_names(lambda_names);
|
||||
let empty_captures_slices = {
|
||||
let start = env.variable_slices.len() as u32;
|
||||
env.variable_slices
|
||||
.extend(std::iter::repeat(SubsSlice::empty()).take(new_lambda_names.len()));
|
||||
SubsSlice::new(start, env.variable_slices.len() as u16)
|
||||
};
|
||||
let union_tags = UnionLambdas::from_slices(new_lambda_names, empty_captures_slices);
|
||||
|
||||
let ambient_function_var = if left { ctx.first } else { ctx.second };
|
||||
|
@ -3955,7 +3969,7 @@ fn unify_two_function_or_tag_unions<M: MetaCollector>(
|
|||
.collect();
|
||||
all_tags.sort();
|
||||
all_tags.dedup();
|
||||
SubsSlice::extend_new(&mut env.tag_names, all_tags)
|
||||
env.extend_tag_names(all_tags)
|
||||
};
|
||||
let merged_lambdas = {
|
||||
let mut all_lambdas: Vec<_> = (env.get_subs_slice(tag_symbols_1).iter())
|
||||
|
@ -3964,7 +3978,7 @@ fn unify_two_function_or_tag_unions<M: MetaCollector>(
|
|||
.collect();
|
||||
all_lambdas.sort();
|
||||
all_lambdas.dedup();
|
||||
SubsSlice::extend_new(&mut env.symbol_names, all_lambdas)
|
||||
env.extend_symbol_names(all_lambdas)
|
||||
};
|
||||
|
||||
let mut outcome = unify_pool(env, pool, ext1.var(), ext2.var(), ctx.mode);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue