#version 2.0 declare { record Rec1 { u32 a; u32 b; } } declare { record Rec2 { Rec1 x; Rec1 y; } } function f(mutable Rec2 r) { r.x.a, r.x.b, r.y.a, r.y.b = 111u, 222u, 333u, 444u; } function "+"(Rec1 a, Rec1 b) : u32 { return a.a + a.b + b.a + b.b; } function test1() { Rec2 r2; f(r2); write(tos(r2.x + r2.y) + "\n"); } export { record Rec3 { seq sb; seq sul; } } function f3(mutable Rec3 r, u64 x) { r.sb, r.sul = hiext(r.sb, (x%2ul)==0ul), hiext(r.sul, x); } function tos(Rec3 r) : string { string s; foreach(i in 0u to seqlen(r.sul) exclusive) { s = s + tos(r.sul[i]) + " (" + tos(r.sb[i]) + ")\n"; } return s; } function test2() { Rec3 r; f3(r, 1ul); f3(r, 2ul); f3(r, 3ul); f3(r, 4ul); write(tos(r) + "\n"); } main { test1(); test2(); }