Skip to content

Commit a70f3d6

Browse files
Code Cleanup in lowering matching code
Removed unneeded `clone` calls on patterns. commit-id:4d872b2d
1 parent 8b9901b commit a70f3d6

File tree

2 files changed

+29
-33
lines changed

2 files changed

+29
-33
lines changed

crates/cairo-lang-lowering/src/lower/lower_match.rs

+9-12
Original file line numberDiff line numberDiff line change
@@ -638,10 +638,10 @@ fn lower_tuple_match_arm(
638638
inner_pattern: Some(inner_pattern),
639639
..
640640
}) => {
641-
let inner_pattern =
642-
ctx.function_body.arenas.patterns[*inner_pattern].clone();
643-
let pattern_location =
644-
ctx.get_location(inner_pattern.stable_ptr().untyped());
641+
let inner_pattern = *inner_pattern;
642+
let pattern_location = ctx.get_location(
643+
ctx.function_body.arenas.patterns[inner_pattern].stable_ptr().untyped(),
644+
);
645645

646646
let variant_expr = LoweredExpr::AtVariable(VarUsage {
647647
var_id: match_tuple_ctx.current_var_ids[index],
@@ -984,8 +984,10 @@ pub(crate) fn lower_concrete_enum_match(
984984
inner_pattern: Some(inner_pattern),
985985
..
986986
})) => {
987-
let inner_pattern = ctx.function_body.arenas.patterns[*inner_pattern].clone();
988-
let pattern_location = ctx.get_location(inner_pattern.stable_ptr().untyped());
987+
let inner_pattern = *inner_pattern;
988+
let pattern_location = ctx.get_location(
989+
ctx.function_body.arenas.patterns[inner_pattern].stable_ptr().untyped(),
990+
);
989991

990992
let var_id = ctx.new_var(VarRequest {
991993
ty: wrap_in_snapshots(ctx.db, concrete_variant.ty, n_snapshots),
@@ -1131,12 +1133,7 @@ pub(crate) fn lower_optimized_extern_match(
11311133
Some(Pattern::EnumVariant(PatternEnumVariant {
11321134
inner_pattern: Some(inner_pattern),
11331135
..
1134-
})) => lower_single_pattern(
1135-
ctx,
1136-
&mut subscope,
1137-
ctx.function_body.arenas.patterns[*inner_pattern].clone(),
1138-
variant_expr,
1139-
),
1136+
})) => lower_single_pattern(ctx, &mut subscope, *inner_pattern, variant_expr),
11401137
Some(
11411138
Pattern::EnumVariant(PatternEnumVariant { inner_pattern: None, .. })
11421139
| Pattern::Otherwise(_),

crates/cairo-lang-lowering/src/lower/mod.rs

+20-21
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,6 @@ pub fn lower_for_loop(
200200
};
201201
let next_value_type = some_variant.ty;
202202
builder.update_ref(ctx, &loop_expr.into_iter_member_path, next_iterator.var_id);
203-
let pattern = ctx.function_body.arenas.patterns[loop_expr.pattern].clone();
204203
let unit_ty = corelib::unit_ty(db);
205204
let some_block: cairo_lang_semantic::ExprBlock =
206205
extract_matches!(&ctx.function_body.arenas.exprs[loop_expr.body], semantic::Expr::Block)
@@ -215,7 +214,8 @@ pub fn lower_for_loop(
215214
var_id: some_var_id,
216215
location: ctx.get_location(some_block.stable_ptr.untyped()),
217216
});
218-
let lowered_pattern = lower_single_pattern(ctx, &mut some_subscope, pattern, variant_expr);
217+
let lowered_pattern =
218+
lower_single_pattern(ctx, &mut some_subscope, loop_expr.pattern, variant_expr);
219219
let sealed_some = match lowered_pattern {
220220
Ok(_) => {
221221
let block_expr = (|| {
@@ -651,8 +651,7 @@ pub fn lower_statement(
651651
semantic::Statement::Let(semantic::StatementLet { pattern, expr, stable_ptr: _ }) => {
652652
log::trace!("Lowering a let statement.");
653653
let lowered_expr = lower_expr(ctx, builder, *expr)?;
654-
let pattern = ctx.function_body.arenas.patterns[*pattern].clone();
655-
lower_single_pattern(ctx, builder, pattern, lowered_expr)?
654+
lower_single_pattern(ctx, builder, *pattern, lowered_expr)?
656655
}
657656
semantic::Statement::Continue(semantic::StatementContinue { stable_ptr }) => {
658657
log::trace!("Lowering a continue statement.");
@@ -698,24 +697,26 @@ pub fn lower_statement(
698697
fn lower_single_pattern(
699698
ctx: &mut LoweringContext<'_, '_>,
700699
builder: &mut BlockBuilder,
701-
pattern: semantic::Pattern,
700+
pattern_id: semantic::PatternId,
702701
lowered_expr: LoweredExpr,
703702
) -> Result<(), LoweringFlowError> {
704703
log::trace!("Lowering a single pattern.");
704+
let pattern = &ctx.function_body.arenas.patterns[pattern_id];
705705
match pattern {
706706
semantic::Pattern::Literal(_)
707707
| semantic::Pattern::StringLiteral(_)
708708
| semantic::Pattern::EnumVariant(_) => {
709709
return Err(LoweringFlowError::Failed(
710-
ctx.diagnostics.report(&pattern, UnsupportedPattern),
710+
ctx.diagnostics.report(pattern.stable_ptr(), UnsupportedPattern),
711711
));
712712
}
713713
semantic::Pattern::Variable(semantic::PatternVariable {
714714
name: _,
715715
var: sem_var,
716716
stable_ptr,
717717
}) => {
718-
let sem_var = semantic::Binding::LocalVar(sem_var);
718+
let sem_var = semantic::Binding::LocalVar(sem_var.clone());
719+
let stable_ptr = *stable_ptr;
719720
// Deposit the owned variable in the semantic variables store.
720721
let var = lowered_expr.as_var_usage(ctx, builder)?.var_id;
721722
// Override variable location.
@@ -730,23 +731,25 @@ fn lower_single_pattern(
730731
.concrete_struct_members(structure.concrete_struct_id)
731732
.map_err(LoweringFlowError::Failed)?;
732733
let mut required_members = UnorderedHashMap::<_, _>::from_iter(
733-
structure.field_patterns.iter().map(|(member, pattern)| (member.id, pattern)),
734+
structure.field_patterns.iter().map(|(member, pattern)| (member.id, *pattern)),
734735
);
736+
let n_snapshots = structure.n_snapshots;
737+
let stable_ptr = structure.stable_ptr.untyped();
735738
let generator = generators::StructDestructure {
736739
input: lowered_expr.as_var_usage(ctx, builder)?,
737740
var_reqs: members
738741
.iter()
739742
.map(|(_, member)| VarRequest {
740-
ty: wrap_in_snapshots(ctx.db, member.ty, structure.n_snapshots),
743+
ty: wrap_in_snapshots(ctx.db, member.ty, n_snapshots),
741744
location: ctx.get_location(
742745
required_members
743746
.get(&member.id)
744747
.map(|pattern| {
745-
ctx.function_body.arenas.patterns[**pattern]
748+
ctx.function_body.arenas.patterns[*pattern]
746749
.stable_ptr()
747750
.untyped()
748751
})
749-
.unwrap_or_else(|| structure.stable_ptr.untyped()),
752+
.unwrap_or_else(|| stable_ptr),
750753
),
751754
})
752755
.collect(),
@@ -755,8 +758,7 @@ fn lower_single_pattern(
755758
izip!(generator.add(ctx, &mut builder.statements), members.iter())
756759
{
757760
if let Some(member_pattern) = required_members.remove(&member.id) {
758-
let member_pattern = ctx.function_body.arenas.patterns[*member_pattern].clone();
759-
let stable_ptr = member_pattern.stable_ptr();
761+
let stable_ptr = ctx.function_body.arenas.patterns[member_pattern].stable_ptr();
760762
lower_single_pattern(
761763
ctx,
762764
builder,
@@ -777,11 +779,13 @@ fn lower_single_pattern(
777779
ty,
778780
..
779781
}) => {
780-
lower_tuple_like_pattern_helper(ctx, builder, lowered_expr, &patterns, ty)?;
782+
let patterns = patterns.clone();
783+
lower_tuple_like_pattern_helper(ctx, builder, lowered_expr, &patterns, *ty)?;
781784
}
782785
semantic::Pattern::Otherwise(pattern) => {
786+
let stable_ptr = pattern.stable_ptr.untyped();
783787
let var = lowered_expr.as_var_usage(ctx, builder)?.var_id;
784-
ctx.variables.variables[var].location = ctx.get_location(pattern.stable_ptr.untyped());
788+
ctx.variables.variables[var].location = ctx.get_location(stable_ptr);
785789
}
786790
semantic::Pattern::Missing(_) => unreachable!("Missing pattern in semantic model."),
787791
}
@@ -840,12 +844,7 @@ fn lower_tuple_like_pattern_helper(
840844
}
841845
};
842846
for (var, pattern) in zip_eq(outputs, patterns) {
843-
lower_single_pattern(
844-
ctx,
845-
builder,
846-
ctx.function_body.arenas.patterns[*pattern].clone(),
847-
var,
848-
)?;
847+
lower_single_pattern(ctx, builder, *pattern, var)?;
849848
}
850849
Ok(())
851850
}

0 commit comments

Comments
 (0)