cairo-lang-lowering 2.21.0

Cairo lowering phase.
Documentation
//! > Test lowering diagnostics propagation from item macro

//! > test_runner_name
test_function_lowering

//! > cairo_code
macro generate_unreachable {
    () => {
        fn unreachable_code() {
            return ();
            let _x = 5;
        }
    };
}
generate_unreachable!();
#[target_function]
fn foo() {}

//! > semantic_diagnostics

//! > lowering_diagnostics
warning[E3000]: Unreachable code
 --> lib.cairo:9:1
generate_unreachable!();
^^^^^^^^^^^^^^^^^^^^^^^^

//! > lowering_flat
Parameters:
blk0 (root):
Statements:
End:
  Return()

//! > lowering
fn unreachable_code() {
    return ();
    let x = 5;
}

//! > ==========================================================================

//! > Test loop inside an inline macro argument.

//! > test_runner_name
test_function_lowering(expect_diagnostics: false)

//! > cairo_code
#[target_function]
fn foo() -> Array<felt252> {
    array![{
        let mut i: felt252 = 0;
        while i != 2 {
            i = i + 1;
        }
        i
    }]
}

//! > semantic_diagnostics

//! > lowering_diagnostics

//! > lowering_flat
Parameters: v0: core::RangeCheck, v1: core::gas::GasBuiltin
blk0 (root):
Statements:
  (v2: core::RangeCheck, v3: core::gas::GasBuiltin, v4: core::panics::PanicResult::<(core::felt252, ())>) <- test::foo::{array_inline_macro@52}::{loop#0}{0, }(v0, v1)
End:
  Match(match_enum(v4) {
    PanicResult::Ok(v5) => blk1,
    PanicResult::Err(v6) => blk2,
  })

blk1:
Statements:
  (v7: core::gas::GasBuiltin) <- core::gas::redeposit_gas(v3)
  (v8: core::array::Array::<core::felt252>) <- core::array::array_new::<core::felt252>()
  (v9: core::felt252, v10: ()) <- struct_destructure(v5)
  (v11: core::array::Array::<core::felt252>) <- core::array::array_append::<core::felt252>(v8, v9)
  (v12: (core::array::Array::<core::felt252>,)) <- struct_construct(v11)
  (v13: core::panics::PanicResult::<(core::array::Array::<core::felt252>,)>) <- PanicResult::Ok(v12)
End:
  Return(v2, v7, v13)

blk2:
Statements:
  (v14: core::panics::PanicResult::<(core::array::Array::<core::felt252>,)>) <- PanicResult::Err(v6)
End:
  Return(v2, v3, v14)