parse,check,type,wwi: @packed struct attribute, both stages (#51)

Hare/harec @packed struct layout: no inter-field or trailing padding, align =
max field align (NOT forced to 1) — matches harec type_store.c + types.c:621
(packed{u8,u64}=size 9/align 8). Parser consumes inline @packed (loud-rejects
unknown struct attrs, both stages); layout gates padding on !packed; cstage
type_eq enforces packed type-distinctness; the .wwi producer round-trips
"struct @packed {". wwstage sets slotsize=size for packed so its composite-ABI
copy matches cstage byte-for-byte. cstage identity is faithful; wwstage identity
rides the deferred #224 nominal-resolvealias arc (#108). Both stages byte-id;
447 tests pass.
This commit is contained in:
2026-06-19 00:17:49 +09:00
parent 0197dfb9e6
commit 027f90c572
12 changed files with 563 additions and 16 deletions

View File

@@ -361,7 +361,13 @@ fn wwitype(fd: i32, t: *syntax.node) void = {
wputs(fd, ") ");
wwitype(fd, t.lhs);
} else { if (t.kind == syntax.nkind.N_TSTRUCT) {
wputs(fd, "struct { ");
// re-emit `@packed` so the flag round-trips through
// sep-compile (harec unparse/type.ha:122-126).
if (t.packed != 0) {
wputs(fd, "struct @packed { ");
} else {
wputs(fd, "struct { ");
};
let f: *syntax.node = t.list;
for (f != nil) {
if (f != t.list) { wputs(fd, ", "); };