//! > Test function call.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(ref a: felt252) -> felt252 {
let b = true;
if true {
bar(ref a, b);
} else {}
if false {
return 6;
} else {}
5
}
//! > function_name
foo
//! > module_code
#[inline(never)]
fn bar(ref a: felt252, b: bool) {}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: core::felt252
blk0 (root):
Statements:
(v1: ()) <- struct_construct()
(v2: core::bool) <- bool::True(v1)
(v3: core::felt252) <- test::bar(v0, v2)
(v4: core::felt252) <- 5
End:
Return(v3, v4)
//! > ==========================================================================
//! > Test method call.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo() -> Option<felt252> {
let x = None;
let _ = x.is_some();
x
}
//! > function_name
foo
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters:
blk0 (root):
Statements:
(v0: ()) <- struct_construct()
(v1: core::option::Option::<core::felt252>) <- Option::None(v0)
End:
Return(v1)
//! > ==========================================================================
//! > Test ref self method call on expression receiver.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo() -> u32 {
// ref self method called on expression (not a variable) should work
make_counter().increment()
}
//! > function_name
foo
//! > module_code
#[derive(Drop)]
struct Counter {
value: u32,
}
trait CounterTrait {
fn increment(ref self: Counter) -> u32;
}
impl CounterImpl of CounterTrait {
#[inline(never)]
fn increment(ref self: Counter) -> u32 {
self.value += 1;
self.value
}
}
#[inline(never)]
fn make_counter() -> Counter {
Counter { value: 0 }
}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters:
blk0 (root):
Statements:
(v0: test::Counter) <- test::make_counter()
(v1: core::panics::PanicResult::<(test::Counter, core::integer::u32)>) <- test::CounterImpl::increment(v0)
End:
Match(match_enum(v1) {
PanicResult::Ok(v2) => blk1,
PanicResult::Err(v3) => blk2,
})
blk1:
Statements:
(v4: test::Counter, v5: core::integer::u32) <- struct_destructure(v2)
(v6: (core::integer::u32,)) <- struct_construct(v5)
(v7: core::panics::PanicResult::<(core::integer::u32,)>) <- PanicResult::Ok(v6)
End:
Return(v7)
blk2:
Statements:
(v8: core::panics::PanicResult::<(core::integer::u32,)>) <- PanicResult::Err(v3)
End:
Return(v8)