lib/ww/lex + w6a/parse: amalloc β grow → alloc([], n)! (β-1)

Phase 0 first β-batch. 4 amalloc sites across 2 β grow loops:
 - lib/ww/lex/lex.ww:570,592 lexstr string-literal escape buf
 - selfhost/cmd/w6a/parse.ww:513,548 DATA "..." escape-payload buf

Both follow the established α-per-alloc shape with loop logic left
manual: `*u8 = amalloc(_, cap): *u8` → `[]u8 = alloc([], cap)!`,
inner copy `nb[i] = old[i]` unchanged (slice indexing emits identical
asm to *u8 indexing — no .len bounds compare), `.ptr` extracted at
the *u8 consumer (s.ptr, pr.bytes). Bear-trap N/A — byte count tracked
in locals (nb, blen), slice .len = 0 never read.

Verified 132/132 + 995_self_rebuild byte-identity.
This commit is contained in:
2026-05-21 09:14:39 +09:00
parent f2ea7fccec
commit d9f097250b
5 changed files with 15 additions and 15 deletions

View File

@@ -567,7 +567,7 @@ fn lexident(l: *lex, start: *pos, out: *tok) void = {
fn lexstr(l: *lex, start: *pos, out: *tok) void = { fn lexstr(l: *lex, start: *pos, out: *tok) void = {
let cap: u64 = 32u64; let cap: u64 = 32u64;
let nb: u64 = 0u64; let nb: u64 = 0u64;
let buf: *u8 = amalloc(l.a, cap): *u8; let buf: []u8 = alloc([], cap)!;
for (true) { for (true) {
let c: i32 = lpeek(l, 0u64); let c: i32 = lpeek(l, 0u64);
if (c < 0) { if (c < 0) {
@@ -589,7 +589,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
}; };
if (nb + 1u64 >= cap) { if (nb + 1u64 >= cap) {
let ncap: u64 = cap * 2u64; let ncap: u64 = cap * 2u64;
let nb2: *u8 = amalloc(l.a, ncap): *u8; let nb2: []u8 = alloc([], ncap)!;
let i: u64 = 0u64; let i: u64 = 0u64;
for (i < nb) { for (i < nb) {
let ix: i32 = i: i32; let ix: i32 = i: i32;
@@ -608,7 +608,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
out.line = start.line; out.line = start.line;
out.col = start.col; out.col = start.col;
let s: str; let s: str;
s.ptr = buf; s.ptr = buf.ptr;
s.len = nb: i32; s.len = nb: i32;
out.text = s; out.text = s;
}; };

View File

@@ -1662,7 +1662,7 @@ export fn parse(a: *asm_) i32 = {
// Parse escape sequence into a fresh growable buffer. // Parse escape sequence into a fresh growable buffer.
let cap: u64 = 32u64; let cap: u64 = 32u64;
let blen: u64 = 0u64; let blen: u64 = 0u64;
let dbuf: *u8 = amalloc(a.a, cap): *u8; let dbuf: []u8 = alloc([], cap)!;
for (p2 < n) { for (p2 < n) {
if (line[p2] == 34u8) { p2 = p2; p2 += 0u64; p2 = n + 1u64; } if (line[p2] == 34u8) { p2 = p2; p2 += 0u64; p2 = n + 1u64; }
else { else {
@@ -1697,7 +1697,7 @@ export fn parse(a: *asm_) i32 = {
}; };
if (blen + 1u64 > cap) { if (blen + 1u64 > cap) {
let ncap: u64 = cap * 2u64; let ncap: u64 = cap * 2u64;
let nb: *u8 = amalloc(a.a, ncap): *u8; let nb: []u8 = alloc([], ncap)!;
let bi: u64 = 0u64; let bi: u64 = 0u64;
for (bi < blen) { nb[bi] = dbuf[bi]; bi += 1u64; }; for (bi < blen) { nb[bi] = dbuf[bi]; bi += 1u64; };
dbuf = nb; dbuf = nb;
@@ -1707,7 +1707,7 @@ export fn parse(a: *asm_) i32 = {
blen += 1u64; blen += 1u64;
}; };
}; };
pr.bytes = dbuf; pr.bytes = dbuf.ptr;
pr.nbytes = blen; pr.nbytes = blen;
a.line += 1; continue; a.line += 1; continue;
}; };

View File

@@ -510,7 +510,7 @@ export fn parse(a: *asm_) i32 = {
// Parse escape sequence into a fresh growable buffer. // Parse escape sequence into a fresh growable buffer.
let cap: u64 = 32u64; let cap: u64 = 32u64;
let blen: u64 = 0u64; let blen: u64 = 0u64;
let dbuf: *u8 = amalloc(a.a, cap): *u8; let dbuf: []u8 = alloc([], cap)!;
for (p2 < n) { for (p2 < n) {
if (line[p2] == 34u8) { p2 = p2; p2 += 0u64; p2 = n + 1u64; } if (line[p2] == 34u8) { p2 = p2; p2 += 0u64; p2 = n + 1u64; }
else { else {
@@ -545,7 +545,7 @@ export fn parse(a: *asm_) i32 = {
}; };
if (blen + 1u64 > cap) { if (blen + 1u64 > cap) {
let ncap: u64 = cap * 2u64; let ncap: u64 = cap * 2u64;
let nb: *u8 = amalloc(a.a, ncap): *u8; let nb: []u8 = alloc([], ncap)!;
let bi: u64 = 0u64; let bi: u64 = 0u64;
for (bi < blen) { nb[bi] = dbuf[bi]; bi += 1u64; }; for (bi < blen) { nb[bi] = dbuf[bi]; bi += 1u64; };
dbuf = nb; dbuf = nb;
@@ -555,7 +555,7 @@ export fn parse(a: *asm_) i32 = {
blen += 1u64; blen += 1u64;
}; };
}; };
pr.bytes = dbuf; pr.bytes = dbuf.ptr;
pr.nbytes = blen; pr.nbytes = blen;
a.line += 1; continue; a.line += 1; continue;
}; };

View File

@@ -4279,7 +4279,7 @@ fn lexident(l: *lex, start: *pos, out: *tok) void = {
fn lexstr(l: *lex, start: *pos, out: *tok) void = { fn lexstr(l: *lex, start: *pos, out: *tok) void = {
let cap: u64 = 32u64; let cap: u64 = 32u64;
let nb: u64 = 0u64; let nb: u64 = 0u64;
let buf: *u8 = amalloc(l.a, cap): *u8; let buf: []u8 = alloc([], cap)!;
for (true) { for (true) {
let c: i32 = lpeek(l, 0u64); let c: i32 = lpeek(l, 0u64);
if (c < 0) { if (c < 0) {
@@ -4301,7 +4301,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
}; };
if (nb + 1u64 >= cap) { if (nb + 1u64 >= cap) {
let ncap: u64 = cap * 2u64; let ncap: u64 = cap * 2u64;
let nb2: *u8 = amalloc(l.a, ncap): *u8; let nb2: []u8 = alloc([], ncap)!;
let i: u64 = 0u64; let i: u64 = 0u64;
for (i < nb) { for (i < nb) {
let ix: i32 = i: i32; let ix: i32 = i: i32;
@@ -4320,7 +4320,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
out.line = start.line; out.line = start.line;
out.col = start.col; out.col = start.col;
let s: str; let s: str;
s.ptr = buf; s.ptr = buf.ptr;
s.len = nb: i32; s.len = nb: i32;
out.text = s; out.text = s;
}; };

View File

@@ -4279,7 +4279,7 @@ fn lexident(l: *lex, start: *pos, out: *tok) void = {
fn lexstr(l: *lex, start: *pos, out: *tok) void = { fn lexstr(l: *lex, start: *pos, out: *tok) void = {
let cap: u64 = 32u64; let cap: u64 = 32u64;
let nb: u64 = 0u64; let nb: u64 = 0u64;
let buf: *u8 = amalloc(l.a, cap): *u8; let buf: []u8 = alloc([], cap)!;
for (true) { for (true) {
let c: i32 = lpeek(l, 0u64); let c: i32 = lpeek(l, 0u64);
if (c < 0) { if (c < 0) {
@@ -4301,7 +4301,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
}; };
if (nb + 1u64 >= cap) { if (nb + 1u64 >= cap) {
let ncap: u64 = cap * 2u64; let ncap: u64 = cap * 2u64;
let nb2: *u8 = amalloc(l.a, ncap): *u8; let nb2: []u8 = alloc([], ncap)!;
let i: u64 = 0u64; let i: u64 = 0u64;
for (i < nb) { for (i < nb) {
let ix: i32 = i: i32; let ix: i32 = i: i32;
@@ -4320,7 +4320,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
out.line = start.line; out.line = start.line;
out.col = start.col; out.col = start.col;
let s: str; let s: str;
s.ptr = buf; s.ptr = buf.ptr;
s.len = nb: i32; s.len = nb: i32;
out.text = s; out.text = s;
}; };