lib/rt: rename rt_alloc → rt_malloc; rt.alloc → rt.malloc
Hare's canonical runtime allocator is rt::malloc with linker symbol
rt.malloc (ref/hare/rt/malloc.ha:27,78). ww kept the dot→underscore
Plan 9 convention (CLAUDE.md rule 4) so the linker symbol becomes
rt_malloc; the lib/rt exported function name becomes malloc; ww
callers say rt.malloc(...).
The language builtin keyword stays `alloc(T)!` — unchanged from Hare
(ref/hare/hare/lex/token.ha:21 ltok::ALLOC, parse/expr.ha:398
builtin()). The rename only touches the lowered linker symbol and the
exported function name behind it; the user-facing syntax for
heap-allocation is identical to Hare.
Surface:
- rt/alloc.s: TEXT rt_alloc → TEXT rt_malloc, labels updated
- lib/rt/malloc.ww: @symbol("rt_malloc") fn malloc(...) (was rt_alloc/alloc)
- rt/ensure.ww: local FFI decl + call site updated to malloc; `!` dropped
on the direct FFI call (rt_malloc returns *void, not a tagged union)
- 18 .ww callers: rt.alloc(...) → rt.malloc(...)
- cstage cmd/wcc/check.c + wwstage selfhost/cmd/wcc/check.ww
alloc-builtin suppression gate routes through ffi_resolve("malloc")
for the lowering; the user-shadow check still keys on the BUILTIN
KEYWORD "alloc" since that is what `alloc(...)` parses as. Adding
"malloc" to the user-shadow check was unnecessary and was reverted
during pre-commit review.
- cstage cmd/w6c/cgen.c: 2× ffi_resolve("alloc") → ffi_resolve("malloc")
- wwstage cgenexpr/cgenstmt: 2× ffiresolve(c, "alloc") → ffiresolve(c, "malloc")
- Test fixtures (700_e2e, 758_cgalloc_str_field, 990_selfhost, 992_w6l_ww,
selfhost/test/tagged_ptr_ret.ww): updated inline ww sources to the new
decl + call form
This is commit 2 of 3 in the lib/rt extraction (#38). Commit 3 closes
the OOM contract — return type becomes nullable *void and the builtin
lowering null-checks + propagates nomem.
Verified 132/132 + 995_self_rebuild byte-identity (5 wwstage tools
round-trip identical) + make clean cold rebuild.
This commit is contained in:
@@ -87,7 +87,7 @@ fn slurp(path: *u8) (*u8, u64) = {
|
||||
case let v: i64 => n = v;
|
||||
case let e: os.oserror => { os.close(fd); return nil, 0u64; };
|
||||
};
|
||||
let buf: *u8 = rt.alloc(n: u64): *u8;
|
||||
let buf: *u8 = rt.malloc(n: u64): *u8;
|
||||
let rr: (i64 | os.oserror) = os.readall(fd, buf, n: u64);
|
||||
os.close(fd);
|
||||
let got: i64 = 0i64;
|
||||
@@ -109,7 +109,7 @@ fn emittext(l: *lnk, src: *u8, n: u64) void = {
|
||||
// Grow by mmap'ing a fresh region and copying. The old buffer
|
||||
// is leaked into the page allocator; for a linker run this is
|
||||
// trivial waste.
|
||||
let nb: *u8 = rt.alloc(nc): *u8;
|
||||
let nb: *u8 = rt.malloc(nc): *u8;
|
||||
let i: u64 = 0u64;
|
||||
for (i < l.textlen) {
|
||||
nb[i] = l.text[i];
|
||||
@@ -131,7 +131,7 @@ fn emitdata(l: *lnk, src: *u8, n: u64) void = {
|
||||
let nc: u64 = l.datacap;
|
||||
if (nc == 0u64) { nc = 256u64; };
|
||||
for (nc < l.datalen + n) { nc = nc * 2u64; };
|
||||
let nb: *u8 = rt.alloc(nc): *u8;
|
||||
let nb: *u8 = rt.malloc(nc): *u8;
|
||||
let i: u64 = 0u64;
|
||||
for (i < l.datalen) {
|
||||
nb[i] = l.data[i];
|
||||
|
||||
Reference in New Issue
Block a user