Skip to content

Commit e9b93d8

Browse files
Code Cleanup in lowering matching code (#7715)
1 parent bdbae3b commit e9b93d8

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
@@ -685,10 +685,10 @@ fn lower_tuple_match_arm(
685685
inner_pattern: Some(inner_pattern),
686686
..
687687
}) => {
688-
let inner_pattern =
689-
ctx.function_body.arenas.patterns[*inner_pattern].clone();
690-
let pattern_location =
691-
ctx.get_location(inner_pattern.stable_ptr().untyped());
688+
let inner_pattern = *inner_pattern;
689+
let pattern_location = ctx.get_location(
690+
ctx.function_body.arenas.patterns[inner_pattern].stable_ptr().untyped(),
691+
);
692692

693693
let variant_expr = LoweredExpr::AtVariable(VarUsage {
694694
var_id: match_tuple_ctx.current_var_ids[index],
@@ -1031,8 +1031,10 @@ pub(crate) fn lower_concrete_enum_match(
10311031
inner_pattern: Some(inner_pattern),
10321032
..
10331033
})) => {
1034-
let inner_pattern = ctx.function_body.arenas.patterns[*inner_pattern].clone();
1035-
let pattern_location = ctx.get_location(inner_pattern.stable_ptr().untyped());
1034+
let inner_pattern = *inner_pattern;
1035+
let pattern_location = ctx.get_location(
1036+
ctx.function_body.arenas.patterns[inner_pattern].stable_ptr().untyped(),
1037+
);
10361038

10371039
let var_id = ctx.new_var(VarRequest {
10381040
ty: wrap_in_snapshots(ctx.db, concrete_variant.ty, n_snapshots),
@@ -1178,12 +1180,7 @@ pub(crate) fn lower_optimized_extern_match(
11781180
Some(Pattern::EnumVariant(PatternEnumVariant {
11791181
inner_pattern: Some(inner_pattern),
11801182
..
1181-
})) => lower_single_pattern(
1182-
ctx,
1183-
&mut subscope,
1184-
ctx.function_body.arenas.patterns[*inner_pattern].clone(),
1185-
variant_expr,
1186-
),
1183+
})) => lower_single_pattern(ctx, &mut subscope, *inner_pattern, variant_expr),
11871184
Some(
11881185
Pattern::EnumVariant(PatternEnumVariant { inner_pattern: None, .. })
11891186
| 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)