f906081c8c9bef1973493edcc4d06c7110a19ca9
Now that os.alloc/free ship (db2b05b), the heap-shape printf wrapper thatbb10ee7deferred is implementable. `asprintf(fmt: str, args: field...) str` — Hare wrappers.ha:29 shape. Body wires memio.dynamic, runs fprintf into it, takes a stringview, and shrink-to-fit-copies into a fresh os.alloc(view.len) before io.closing the dynamic stream (which frees the cap-sized internal buffer). The shrink-to-fit copy is forced by os.free's (p, n) shape: n must match the mmap length, so the caller can't free a cap-allocated body if cap > len. Caller contract documented inline: free with `os.free(r.ptr, r.len)` when r.len > 0; skip when r.len == 0 (no allocation happens). Mirrors strings.dup's shape; not a workaround. The fprintf io.closed arm is matched-and-ignored — memio.dynamicwrite only returns size, never io.closed (verified at memio.ww:163-175). Same shape as Hare's `case size => void;` in print.ha. Hare's nomem variant intentionally dropped; ww's os.alloc returns a poisonous pointer on OOM (per #14 contract) which faults on deref — no in-band error to model. Tests (signalled 27-30): basic (str + i64), growth (34B output through 8→16→32→64 grow), empty (no-alloc / skip-free), indexed_mods ({1:_05} through heap sink). errorf / error / errorln family deferred — drew's call to ship the whole error story in one commit when the error type lands.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%