// `for` over a `List(T)` (a `{ items: [*]T, len, cap }` struct): value capture, // by-ref capture (mutates in place), iterating a `*List`, and a by-ref capture // used as a value-receiver method call (auto-deref). #import "modules/std.sx"; Box :: struct { v: s64; boxed :: (self: Box) -> s64 { self.v } // value receiver } sum_ptr :: (xs: *List(s64)) -> s64 { total : s64 = 0; for xs (n) { total = total + n; } // iterate through a *List total } main :: () -> s32 { xs := List(s64).{}; xs.append(10); xs.append(20); xs.append(30); s : s64 = 0; for xs (n) { s = s + n; } // value capture print("sum {}\n", s); // 60 for xs (*n) { n.* = n + 100; } // by-ref: writes back s = 0; for xs (n) { s = s + n; } print("sum2 {}\n", s); // 360 print("via ptr {}\n", sum_ptr(@xs)); // 360 bs := List(Box).{}; bs.append(.{ v = 7 }); bt : s64 = 0; for bs (*b) { bt = bt + b.boxed(); } // *Box receiver, value-self method print("boxes {}\n", bt); // 7 0 }