Surface rename of the signed integer family: s1..s64 become i1..i64
(u1..u64, usize, isize unchanged). 'string' keeps the s-prefix arm in
name classification; width parsing moves to the i-prefix arm next to
isize.
Internal TypeId tags follow the surface (.s8/.s16/.s32/.s64 ->
.i8/.i16/.i32/.i64), as do mono-key mangle fragments (ptr_i64,
tu_i64_bool) and all display/diagnostic formatting (i{d}).
Migrated in the same sweep: stdlib + examples + issue repros + FFI C
companions (shared symbol names like ffi_id_i64), expected
stdout/stderr/ir snapshots, specs.md, readme.md, CLAUDE.md/AGENTS.md,
implementation_plan.md, docs/, issue writeups. Vendored stb_image and
historical flow state left untouched.
zig build test: 426/426; examples suite: 595/595.
64 lines
2.0 KiB
Plaintext
64 lines
2.0 KiB
Plaintext
// `inline for` element form over a pack — multi-iterable parity with the
|
|
// runtime for-loop. Position 0 drives the unroll count (a pack's arity or a
|
|
// bounded range's span); trailing iterables pair with it. A pack capture is
|
|
// the concrete per-position element viewed through the constraint protocol
|
|
// (same semantics as `xs[i]`); a range capture is a comptime cursor.
|
|
//
|
|
// inline for xs (x) — element form
|
|
// inline for xs, 0.. (x, i) — element + paired index
|
|
// inline for 0..xs.len, xs (i, x) — range driver, trailing pack
|
|
// inline for xs { } — captureless; N=0 unrolls nothing
|
|
|
|
#import "modules/std.sx";
|
|
|
|
Show :: protocol { show :: () -> string; }
|
|
IntBox :: struct { v: i64; }
|
|
StrBox :: struct { s: string; }
|
|
impl Show for IntBox { show :: (self: *IntBox) -> string { int_to_string(self.v) } }
|
|
impl Show for StrBox { show :: (self: *StrBox) -> string { self.s } }
|
|
|
|
bare :: (..xs: Show) {
|
|
inline for xs (x) {
|
|
print("bare: {}\n", x.show());
|
|
}
|
|
}
|
|
elem_and_index :: (..xs: Show) {
|
|
inline for xs, 0.. (x, i) {
|
|
print("{}: {}\n", i, x.show());
|
|
}
|
|
}
|
|
range_driver :: (..xs: Show) {
|
|
inline for 0..xs.len, xs (i, x) {
|
|
print("r{}: {}\n", i, x.show());
|
|
}
|
|
}
|
|
offset_index :: (..xs: Show) {
|
|
inline for xs, 10.. (x, i) {
|
|
print("{} -> {}\n", i, x.show());
|
|
}
|
|
}
|
|
captureless :: (..xs: Show) {
|
|
n := 0;
|
|
inline for xs { n += 1; }
|
|
print("ran {}\n", n);
|
|
}
|
|
value_pos :: (..xs: Show) {
|
|
inline for xs (x) {
|
|
print("val: {}\n", x);
|
|
}
|
|
}
|
|
empty :: (..xs: Show) {
|
|
inline for xs (x) { print("never\n"); }
|
|
print("empty ok\n");
|
|
}
|
|
|
|
main :: () {
|
|
bare(IntBox.{ v = 7 }, StrBox.{ s = "hi" });
|
|
elem_and_index(IntBox.{ v = 7 }, StrBox.{ s = "hi" });
|
|
range_driver(IntBox.{ v = 1 }, StrBox.{ s = "two" });
|
|
offset_index(StrBox.{ s = "x" }, StrBox.{ s = "y" });
|
|
captureless(IntBox.{ v = 0 }, IntBox.{ v = 0 }, IntBox.{ v = 0 });
|
|
value_pos(IntBox.{ v = 42 });
|
|
empty();
|
|
}
|