contract Test { struct S { u32 x; u32 y; u256 z; } struct X { u32 x; S s; } fn test() -> (u256 a, u256 x, u256 y, u256 z) { X d = combine(1, 2, 3, 4); a = extract(d, 0); x = extract(d, 1); y = extract(d, 2); z = extract(d, 3); } fn extract(X s, u256 which) -> (u256 x) { if (which == 0) return s.x; else if (which == 1) return s.s.x; else if (which == 2) return s.s.y; else return s.s.z; } fn combine(u32 a, u32 x, u32 y, u256 z) -> (X s) { s.x = a; s.s.x = x; s.s.y = y; s.s.z = z; } } // ==== // compileToEwasm: also // compileViaYul: also // ---- // test() -> 1, 2, 3, 4