// Wrapping compound assignment: `+%=`, `-%=`, and `*%=` store the wrapping // result back into the target — the assignment form of the `+%`/`-%`/`*%` // binops. The shapes here are the ones systems code leans on: folding into // an accumulator array and advancing a monotone ring head that is allowed // to wrap. // // This example lives in examples/register/ (not examples/) because the // wrapping compound assigns are post-v0.5 grammar: the frozen stage0 // bootstrap compiler cannot parse them, so the file rides the fixpoint // corpus (stage1 vs stage2) instead of the stage0-facing suites. pub fn fold(state *mut [8]u32, a u32, b u32) { state[0] +%= a state[1] +%= b } pub const Ring = struct { head u64 = 0, tail u64 = 0, pub fn push(self *mut Ring, size u64) { self.head +%= 1 if self.head -% self.tail > size { self.tail = self.head -% size } } }