program main fn make_values(base: i32) -> (array i32 3) array : (array i32 3) var base : i32 binary + : i32 var base : i32 int 1 : i32 binary + : i32 var base : i32 int 2 : i32 fn first(values: (array i32 3)) -> i32 index : i32 var values : (array i32 3) int 0 : i32 fn at(values: (array i32 3), i: i32) -> i32 index : i32 var values : (array i32 3) var i : i32 fn echo(values: (array i32 3)) -> (array i32 3) var values : (array i32 3) fn call_return_index(i: i32) -> i32 index : i32 call make_values : (array i32 3) int 10 : i32 var i : i32 fn local_array_flow(i: i32) -> i32 local let values : unit call make_values : (array i32 3) int 20 : i32 call at : i32 var values : (array i32 3) var i : i32 fn parameter_local_copy(values: (array i32 3), i: i32) -> i32 local let copy : unit var values : (array i32 3) index : i32 var copy : (array i32 3) var i : i32 fn main() -> i32 call call_return_index : i32 int 1 : i32 test "array parameter value flow" binary = : bool call first : i32 call make_values : (array i32 3) int 7 : i32 int 7 : i32 test "array dynamic index" binary = : bool call at : i32 call make_values : (array i32 3) int 4 : i32 int 2 : i32 int 6 : i32 test "array local call value flow" binary = : bool call local_array_flow : i32 int 1 : i32 int 21 : i32 test "array parameter local copy" binary = : bool call parameter_local_copy : i32 call make_values : (array i32 3) int 40 : i32 int 2 : i32 int 42 : i32 test "array return call value flow" binary = : bool index : i32 call echo : (array i32 3) call make_values : (array i32 3) int 30 : i32 int 2 : i32 int 32 : i32