//ww:run-exit 53 package main; type capture = struct { content: str, start: size, end: size }; type t = struct { pc: size, cap: capture }; fn copycap(ts: *[]t, i: size, src: capture) void = { (*ts)[i].cap = src; }; fn derefcap(ts: *[]t, i: size, pc: *capture) void = { (*ts)[i].cap = *pc; }; export fn main() i32 = { let z: capture = capture { content = "", start = 0, end = 0 }; let ts: []t = []; append(ts, t { pc = 7, cap = z }); append(ts, t { pc = 8, cap = z }); let a: capture = capture { content = "ab", start = 1, end = 3 }; copycap(&ts, 1, a); if (ts[1].cap.content.len != 2) { return 1; }; if (ts[1].cap.start != 1) { return 2; }; if (ts[1].cap.end != 3) { return 3; }; let b: capture = capture { content = "wxyz", start = 5, end = 9 }; derefcap(&ts, 0, &b); if (ts[0].cap.content.len != 4) { return 4; }; if (ts[0].cap.start != 5) { return 5; }; if (ts[0].cap.end != 9) { return 6; }; if (ts[1].cap.start != 1) { return 7; }; return 53; };