From 7c2403cc4cb442fb12903f8f5a5ea935cfe86b53 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Thu, 21 May 2026 02:17:50 +0900 Subject: [PATCH] =?UTF-8?q?cmd:=20=CE=B1/=CE=B3-5=20rt.malloc/amalloc=20?= =?UTF-8?q?=E2=86=92=20alloc([],=20N)!=20(w6l=20stack-promotes=20+=20cgenu?= =?UTF-8?q?til=20mkvarargname)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 0 #8/#11 small batch. 4 sites: w6l/main.ww δ stack-promotes (3): - :67 appenddec — 16B → [16]u8 - :106 islinkable — 8B → [8]u8, &mp[0] to os.read - :176 isso — 20B → [20]u8, &mp[0] to os.read wcc/cgenutil.ww:108 mkvarargname α (1): - amalloc → alloc([], n)!. Standard slice indexing (`p[k]` not `p.ptr[k]`) — ww's slice subscript has no bounds check (cgenexpr.ww:816-856 in cgindex), same shape as the dup pilot (4c07ef0). Closes #11 (arenau64tos was re-routed via #8 separately; the δ-shape was the genuinely trivial case). Advances #46. Verified 132/132 + 995_self_rebuild byte-identity. --- selfhost/cmd/w6c/main.combined.ww | 4 ++-- selfhost/cmd/w6l/main.combined.ww | 10 +++++----- selfhost/cmd/w6l/main.ww | 10 +++++----- selfhost/cmd/wcc/cgenutil.ww | 4 ++-- selfhost/cmd/wwdump/main.combined.ww | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/selfhost/cmd/w6c/main.combined.ww b/selfhost/cmd/w6c/main.combined.ww index 5ae540dd..cbb77b19 100644 --- a/selfhost/cmd/w6c/main.combined.ww +++ b/selfhost/cmd/w6c/main.combined.ww @@ -9283,12 +9283,12 @@ fn mkvarargname(c: *cgen, prefix: str, seq: i32) str = { let dk: i32 = 0; for (dk < n) { buf[i + dk] = ns.ptr[dk]; dk += 1; }; let total: i32 = i + n; - let p: *u8 = amalloc(c.a, (total: u64) + 1u64): *u8; + let p: []u8 = alloc([], (total: u64) + 1u64)!; let k: i32 = 0; for (k < total) { p[k] = buf[k]; k += 1; }; p[total] = 0u8; let r: str; - r.ptr = p; + r.ptr = p.ptr; r.len = total; return r; }; diff --git a/selfhost/cmd/w6l/main.combined.ww b/selfhost/cmd/w6l/main.combined.ww index fba89b13..c2625725 100644 --- a/selfhost/cmd/w6l/main.combined.ww +++ b/selfhost/cmd/w6l/main.combined.ww @@ -3128,7 +3128,7 @@ fn appenddec(dst: *u8, i: u64, n: u64) u64 = { dst[i] = 48u8; return i + 1u64; }; - let buf: *u8 = rt.malloc(16u64): *u8; + let buf: [16]u8; let k: u64 = 0u64; let v: u64 = n; for (v > 0u64) { @@ -3167,8 +3167,8 @@ fn buildpathv(dst: *u8, dir: *u8, name: *u8, v: u64) u64 = { fn islinkable(path: *u8) bool = { let fd: i32 = os.open(pathstr(path), os.flag.RDONLY, 0i32); if (fd < 0) { return false; }; - let mp: *u8 = rt.malloc(8u64): *u8; - let n: i64 = os.read(fd, mp, 8u64); + let mp: [8]u8; + let n: i64 = os.read(fd, &mp[0], 8u64); os.close(fd); if (n < 4i64) { return false; }; // archive: "!\n" @@ -3237,8 +3237,8 @@ fn resolvelib(a: *arena, name: *u8, libdirs: **u8, nlibdirs: i32) *u8 = { fn isso(path: *u8) i32 = { let fd: i32 = os.open(pathstr(path), os.flag.RDONLY, 0i32); if (fd < 0) { return 0; }; - let mp: *u8 = rt.malloc(20u64): *u8; - let n: i64 = os.read(fd, mp, 20u64); + let mp: [20]u8; + let n: i64 = os.read(fd, &mp[0], 20u64); os.close(fd); if (n < 20i64) { return 0; }; if (mp[0u64] != 127u8) { return 0; }; diff --git a/selfhost/cmd/w6l/main.ww b/selfhost/cmd/w6l/main.ww index c47d7798..efbe0978 100644 --- a/selfhost/cmd/w6l/main.ww +++ b/selfhost/cmd/w6l/main.ww @@ -64,7 +64,7 @@ fn appenddec(dst: *u8, i: u64, n: u64) u64 = { dst[i] = 48u8; return i + 1u64; }; - let buf: *u8 = rt.malloc(16u64): *u8; + let buf: [16]u8; let k: u64 = 0u64; let v: u64 = n; for (v > 0u64) { @@ -103,8 +103,8 @@ fn buildpathv(dst: *u8, dir: *u8, name: *u8, v: u64) u64 = { fn islinkable(path: *u8) bool = { let fd: i32 = os.open(pathstr(path), os.flag.RDONLY, 0i32); if (fd < 0) { return false; }; - let mp: *u8 = rt.malloc(8u64): *u8; - let n: i64 = os.read(fd, mp, 8u64); + let mp: [8]u8; + let n: i64 = os.read(fd, &mp[0], 8u64); os.close(fd); if (n < 4i64) { return false; }; // archive: "!\n" @@ -173,8 +173,8 @@ fn resolvelib(a: *arena, name: *u8, libdirs: **u8, nlibdirs: i32) *u8 = { fn isso(path: *u8) i32 = { let fd: i32 = os.open(pathstr(path), os.flag.RDONLY, 0i32); if (fd < 0) { return 0; }; - let mp: *u8 = rt.malloc(20u64): *u8; - let n: i64 = os.read(fd, mp, 20u64); + let mp: [20]u8; + let n: i64 = os.read(fd, &mp[0], 20u64); os.close(fd); if (n < 20i64) { return 0; }; if (mp[0u64] != 127u8) { return 0; }; diff --git a/selfhost/cmd/wcc/cgenutil.ww b/selfhost/cmd/wcc/cgenutil.ww index 05de8e0a..1a304f2b 100644 --- a/selfhost/cmd/wcc/cgenutil.ww +++ b/selfhost/cmd/wcc/cgenutil.ww @@ -105,12 +105,12 @@ fn mkvarargname(c: *cgen, prefix: str, seq: i32) str = { let dk: i32 = 0; for (dk < n) { buf[i + dk] = ns.ptr[dk]; dk += 1; }; let total: i32 = i + n; - let p: *u8 = amalloc(c.a, (total: u64) + 1u64): *u8; + let p: []u8 = alloc([], (total: u64) + 1u64)!; let k: i32 = 0; for (k < total) { p[k] = buf[k]; k += 1; }; p[total] = 0u8; let r: str; - r.ptr = p; + r.ptr = p.ptr; r.len = total; return r; }; diff --git a/selfhost/cmd/wwdump/main.combined.ww b/selfhost/cmd/wwdump/main.combined.ww index b8d9c86d..d76e3f2f 100644 --- a/selfhost/cmd/wwdump/main.combined.ww +++ b/selfhost/cmd/wwdump/main.combined.ww @@ -9283,12 +9283,12 @@ fn mkvarargname(c: *cgen, prefix: str, seq: i32) str = { let dk: i32 = 0; for (dk < n) { buf[i + dk] = ns.ptr[dk]; dk += 1; }; let total: i32 = i + n; - let p: *u8 = amalloc(c.a, (total: u64) + 1u64): *u8; + let p: []u8 = alloc([], (total: u64) + 1u64)!; let k: i32 = 0; for (k < total) { p[k] = buf[k]; k += 1; }; p[total] = 0u8; let r: str; - r.ptr = p; + r.ptr = p.ptr; r.len = total; return r; };