c56498aca7
First iter of the heap-Str ABI milestone. Pure codegen refactor; every existing program produces byte-identical stdout.
Static-Str LLVM globals migrate from `[N x i8] c"…\00"` to `<{ i64, i64, [N x i8] }> <{ i64 -1, i64 N-1, [N x i8] c"…\00" }>`, carrying the UINT64_MAX sentinel rc-header (slot exploited in hs.2 via runtime short-circuit) and an explicit byte length. Two parallel intern paths (`intern_string` for raw format scaffolding, new `intern_str_literal` for language Str values) keep format strings untouched in `[N x i8]` shape.
IR-Str pointers now uniformly land on the len-field (offset +8 from rc-header, -8 from bytes). Four codegen sites that hand a Str pointer to a NUL-terminated-bytes C-API consumer now emit a +8 GEP first: `@puts` (io/print_str), `@ail_str_eq` (eq__Str intercept), `@ail_str_compare` (compare__Str intercept), and `@strcmp` (lower_eq Str arm — the 4th site was not in the plan; surfaced by Task-5 e2e regression and fixed inline).
6 new IR-shape pinning tests; `hello.ll` snapshot regenerated; cross_lang.py + compile_check.py + full `cargo test --workspace` green.
20 lines
740 B
JSON
20 lines
740 B
JSON
{
|
|
"iter_id": "hs.1",
|
|
"date": "2026-05-12",
|
|
"mode": "standard",
|
|
"outcome": "DONE",
|
|
"tasks_total": 5,
|
|
"tasks_completed": 5,
|
|
"reloops_per_task": {
|
|
"1": 0,
|
|
"2": 0,
|
|
"3": 0,
|
|
"4": 0,
|
|
"5": 1
|
|
},
|
|
"review_loops_spec": 0,
|
|
"review_loops_quality": 0,
|
|
"blocked_reason": null,
|
|
"notes": "Task 5 incurred one extra inline implementer-phase loop after the e2e regression suite surfaced a fourth codegen site (lower_eq Str arm, line 2520-2529 calling @strcmp directly) the plan did not enumerate. Fix shape was identical to Tasks 2-4 (+8 GEP on operands), added one pinning test, and discharged the iter's stated acceptance criterion (byte-identical stdout). Logged in journal Concerns as a plan-enumeration gap."
|
|
}
|