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:
@@ -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, ", "); };
|
||||
|
||||
Reference in New Issue
Block a user