//! > Test tuples.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo() {
let a = (1, 2);
let (_x, _y) = immovable(a);
let (_x, _y) = immovable((1, 2));
}
//! > function_name
foo
//! > module_code
#[inline(never)]
fn immovable<T>(t: T) -> T {
t
}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters:
blk0 (root):
Statements:
(v0: core::felt252) <- 1
(v1: core::felt252) <- 2
(v2: (core::felt252, core::felt252)) <- struct_construct(v0, v1)
(v3: (core::felt252, core::felt252)) <- test::immovable::<(core::felt252, core::felt252)>(v2)
(v4: (core::felt252, core::felt252)) <- test::immovable::<(core::felt252, core::felt252)>(v2)
End:
Return()
//! > ==========================================================================
//! > Test tuple index access - read.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(t: (felt252, u8)) -> u8 {
t.1
}
//! > function_name
foo
//! > module_code
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: (core::felt252, core::integer::u8)
blk0 (root):
Statements:
(v1: core::felt252, v2: core::integer::u8) <- struct_destructure(v0)
End:
Return(v2)
//! > ==========================================================================
//! > Test tuple index access - nested read.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(t: (felt252, (u8, u16))) -> u16 {
t.1.1
}
//! > function_name
foo
//! > module_code
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: (core::felt252, (core::integer::u8, core::integer::u16))
blk0 (root):
Statements:
(v1: core::felt252, v2: (core::integer::u8, core::integer::u16)) <- struct_destructure(v0)
(v3: core::integer::u8, v4: core::integer::u16) <- struct_destructure(v2)
End:
Return(v4)
//! > ==========================================================================
//! > Test tuple index access - assignment to element.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(mut t: (felt252, u8)) -> (felt252, u8) {
t.0 = 5;
t
}
//! > function_name
foo
//! > module_code
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: (core::felt252, core::integer::u8)
blk0 (root):
Statements:
(v1: core::felt252) <- 5
(v2: core::felt252, v3: core::integer::u8) <- struct_destructure(v0)
(v4: (core::felt252, core::integer::u8)) <- struct_construct(v1, v3)
End:
Return(v4)
//! > ==========================================================================
//! > Test tuple index access - ref argument.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(mut t: (felt252, u8)) -> (felt252, u8) {
bar(ref t.0);
t
}
//! > function_name
foo
//! > module_code
fn bar(ref x: felt252) {
x = 7;
}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: (core::felt252, core::integer::u8)
blk0 (root):
Statements:
(v1: core::felt252, v2: core::integer::u8) <- struct_destructure(v0)
(v3: core::felt252) <- 7
(v4: (core::felt252, core::integer::u8)) <- struct_construct(v3, v2)
End:
Return(v4)
//! > ==========================================================================
//! > Test tuple index access - ref tuple argument.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(mut t: ((felt252, u8), u16)) -> ((felt252, u8), u16) {
bar(ref t.0);
t
}
//! > function_name
foo
//! > module_code
fn bar(ref x: (felt252, u8)) {
x.1 = 7;
}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: ((core::felt252, core::integer::u8), core::integer::u16)
blk0 (root):
Statements:
(v1: (core::felt252, core::integer::u8), v2: core::integer::u16) <- struct_destructure(v0)
(v3: core::integer::u8) <- 7
(v4: core::felt252, v5: core::integer::u8) <- struct_destructure(v1)
(v6: (core::felt252, core::integer::u8)) <- struct_construct(v4, v3)
(v7: ((core::felt252, core::integer::u8), core::integer::u16)) <- struct_construct(v6, v2)
End:
Return(v7)
//! > ==========================================================================
//! > Test tuple index access - through a snapshot.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(t: (felt252, u8)) -> @u8 {
let s = @t;
s.1
}
//! > function_name
foo
//! > module_code
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: (core::felt252, core::integer::u8)
blk0 (root):
Statements:
(v1: (core::felt252, core::integer::u8), v2: @(core::felt252, core::integer::u8)) <- snapshot(v0)
(v3: @core::felt252, v4: @core::integer::u8) <- struct_destructure(v2)
End:
Return(v4)
//! > ==========================================================================
//! > Test tuple index access - on a snapshot tuple held in a struct member.
//! > test_runner_name
test_function_lowering(expect_diagnostics: false)
//! > function_code
fn foo(w: Wrapper) -> @u8 {
w.inner.1
}
//! > function_name
foo
//! > module_code
#[derive(Drop, Copy)]
struct Wrapper {
inner: @(felt252, u8),
}
//! > semantic_diagnostics
//! > lowering_diagnostics
//! > lowering_flat
Parameters: v0: test::Wrapper
blk0 (root):
Statements:
(v1: @(core::felt252, core::integer::u8)) <- struct_destructure(v0)
(v2: @core::felt252, v3: @core::integer::u8) <- struct_destructure(v1)
End:
Return(v3)