Skip to content

Commit 3c926fd

Browse files
authored
performance(semantic): Removed Arc from function body. (#8438)
1 parent ba383b4 commit 3c926fd

File tree

6 files changed

+22
-21
lines changed

6 files changed

+22
-21
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use std::ops::{Deref, DerefMut, Index};
2-
use std::sync::Arc;
32

43
use cairo_lang_defs::ids::LanguageElementId;
54
use cairo_lang_diagnostics::{DiagnosticAdded, Maybe};
@@ -87,7 +86,7 @@ pub struct EncapsulatingLoweringContext<'db> {
8786
/// Id for the current function being lowered.
8887
pub semantic_function_id: defs::ids::FunctionWithBodyId<'db>,
8988
/// Semantic model for current function body.
90-
pub function_body: Arc<semantic::FunctionBody<'db>>,
89+
pub function_body: &'db semantic::FunctionBody<'db>,
9190
/// Definitions encountered for semantic bindings. Since Constants are not lowered, this is
9291
/// only used for variables.
9392
// TODO(spapini): consider moving to semantic model.
@@ -105,7 +104,7 @@ impl<'db> EncapsulatingLoweringContext<'db> {
105104
semantic_function_id: defs::ids::FunctionWithBodyId<'db>,
106105
) -> Maybe<Self> {
107106
let function_body = db.function_body(semantic_function_id)?;
108-
let usages = Usages::from_function_body(&function_body);
107+
let usages = Usages::from_function_body(function_body);
109108
Ok(Self {
110109
db,
111110
semantic_function_id,

crates/cairo-lang-semantic/src/items/free_function.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ fn priv_free_function_body_data<'db>(
172172
expr_lookup,
173173
pattern_lookup,
174174
resolver_data,
175-
body: Arc::new(FunctionBody { arenas, body_expr }),
175+
body: FunctionBody { arenas, body_expr },
176176
})
177177
}
178178

@@ -249,6 +249,10 @@ pub trait FreeFunctionSemantic<'db>: Database {
249249
.map(|data| data.diagnostics.clone())
250250
.unwrap_or_default()
251251
}
252+
/// Returns the definition of a free function.
253+
fn free_function_body(&'db self, id: FreeFunctionId<'db>) -> Maybe<&'db FunctionBody<'db>> {
254+
Ok(&self.priv_free_function_body_data(id)?.body)
255+
}
252256
/// Returns the resolution resolved_items of a free function's body.
253257
fn free_function_body_resolver_data(
254258
&'db self,

crates/cairo-lang-semantic/src/items/function_with_body.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pub struct FunctionBodyData<'db> {
5656
pub expr_lookup: UnorderedHashMap<ast::ExprPtr<'db>, ExprId>,
5757
pub pattern_lookup: UnorderedHashMap<ast::PatternPtr<'db>, PatternId>,
5858
pub resolver_data: Arc<ResolverData<'db>>,
59-
pub body: Arc<FunctionBody<'db>>,
59+
pub body: FunctionBody<'db>,
6060
}
6161

6262
unsafe impl<'db> salsa::Update for FunctionBodyData<'db> {
@@ -68,7 +68,7 @@ unsafe impl<'db> salsa::Update for FunctionBodyData<'db> {
6868
let res = unsafe {
6969
Diagnostics::maybe_update(&mut old_value.diagnostics, new_value.diagnostics)
7070
| Arc::maybe_update(&mut old_value.resolver_data, new_value.resolver_data)
71-
| Arc::maybe_update(&mut old_value.body, new_value.body)
71+
| FunctionBody::maybe_update(&mut old_value.body, new_value.body)
7272
};
7373
if res {
7474
old_value.expr_lookup = new_value.expr_lookup;
@@ -331,14 +331,12 @@ pub trait FunctionWithBodySemantic<'db>: Database {
331331
fn function_body(
332332
&'db self,
333333
function_id: FunctionWithBodyId<'db>,
334-
) -> Maybe<Arc<FunctionBody<'db>>> {
335-
Ok(match function_id {
336-
FunctionWithBodyId::Free(id) => self.priv_free_function_body_data(id)?.body.clone(),
337-
FunctionWithBodyId::Impl(id) => self.priv_impl_function_body_data(id)?.body.clone(),
338-
FunctionWithBodyId::Trait(id) => {
339-
self.priv_trait_function_body_data(id)?.ok_or(DiagnosticAdded)?.body.clone()
340-
}
341-
})
334+
) -> Maybe<&'db FunctionBody<'db>> {
335+
match function_id {
336+
FunctionWithBodyId::Free(id) => self.free_function_body(id),
337+
FunctionWithBodyId::Impl(id) => self.impl_function_body(id),
338+
FunctionWithBodyId::Trait(id) => self.trait_function_body(id)?.ok_or(DiagnosticAdded),
339+
}
342340
}
343341
/// Returns the body expr of a function (with a body).
344342
fn function_body_expr(

crates/cairo-lang-semantic/src/items/imp.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3648,7 +3648,7 @@ fn priv_impl_function_body_data<'db>(
36483648
expr_lookup,
36493649
pattern_lookup,
36503650
resolver_data,
3651-
body: Arc::new(FunctionBody { arenas, body_expr }),
3651+
body: FunctionBody { arenas, body_expr },
36523652
})
36533653
}
36543654

@@ -4378,8 +4378,8 @@ pub trait ImplSemantic<'db>: Database {
43784378
fn impl_function_body(
43794379
&'db self,
43804380
impl_function_id: ImplFunctionId<'db>,
4381-
) -> Maybe<Arc<FunctionBody<'db>>> {
4382-
Ok(self.priv_impl_function_body_data(impl_function_id)?.body.clone())
4381+
) -> Maybe<&'db FunctionBody<'db>> {
4382+
Ok(&self.priv_impl_function_body_data(impl_function_id)?.body)
43834383
}
43844384
/// Returns the resolution resolved_items of an impl function's definition.
43854385
fn impl_function_body_resolver_data(

crates/cairo-lang-semantic/src/items/trt.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,7 @@ fn priv_trait_function_body_data<'db>(
11681168
expr_lookup,
11691169
pattern_lookup,
11701170
resolver_data,
1171-
body: Arc::new(FunctionBody { arenas, body_expr }),
1171+
body: FunctionBody { arenas, body_expr },
11721172
}))
11731173
}
11741174

@@ -1442,8 +1442,8 @@ pub trait TraitSemantic<'db>: Database {
14421442
fn trait_function_body(
14431443
&'db self,
14441444
trait_function_id: TraitFunctionId<'db>,
1445-
) -> Maybe<Option<Arc<FunctionBody<'db>>>> {
1446-
Ok(self.priv_trait_function_body_data(trait_function_id)?.map(|data| data.body.clone()))
1445+
) -> Maybe<Option<&'db FunctionBody<'db>>> {
1446+
Ok(self.priv_trait_function_body_data(trait_function_id)?.map(|data| &data.body))
14471447
}
14481448
/// Returns the resolution resolved_items of a trait function.
14491449
fn trait_function_body_resolver_data(

crates/cairo-lang-semantic/src/usage/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ fn test_function_usage(
4040
let expr_formatter = ExprFormatter { db, function_id: test_function.function_id };
4141
let function_def =
4242
db.function_body(test_function.concrete_function_id.function_with_body_id(db)).unwrap();
43-
let usages = Usages::from_function_body(&function_def);
43+
let usages = Usages::from_function_body(function_def);
4444

4545
let mut usages_str = String::new();
4646
for (expr_id, usage) in usages.usages.iter() {

0 commit comments

Comments
 (0)