// sort — sorting helpers. The data is reached through a vtable so the // algorithm stays generic without language-level generics. type slice = struct { ctx: *void, len: i32, less: fn(s: *slice, i: i32, j: i32) bool, swap: fn(s: *slice, i: i32, j: i32) void, }; // Insertion sort, fine for small inputs and stable. We'll grow into // quicksort later when we have heavier tests. export fn sort(s: *slice) void = { let i: i32 = 1; for (i < s.len) { let j: i32 = i; for (j > 0) { if (s.less(s, j, j - 1)) { s.swap(s, j, j - 1); j -= 1; } else { j = 0; }; }; i += 1; }; };