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:
@@ -1662,7 +1662,7 @@ export fn parse(a: *asm_) i32 = {
|
||||
// Parse escape sequence into a fresh growable buffer.
|
||||
let cap: u64 = 32u64;
|
||||
let blen: u64 = 0u64;
|
||||
let dbuf: *u8 = amalloc(a.a, cap): *u8;
|
||||
let dbuf: []u8 = alloc([], cap)!;
|
||||
for (p2 < n) {
|
||||
if (line[p2] == 34u8) { p2 = p2; p2 += 0u64; p2 = n + 1u64; }
|
||||
else {
|
||||
@@ -1697,7 +1697,7 @@ export fn parse(a: *asm_) i32 = {
|
||||
};
|
||||
if (blen + 1u64 > cap) {
|
||||
let ncap: u64 = cap * 2u64;
|
||||
let nb: *u8 = amalloc(a.a, ncap): *u8;
|
||||
let nb: []u8 = alloc([], ncap)!;
|
||||
let bi: u64 = 0u64;
|
||||
for (bi < blen) { nb[bi] = dbuf[bi]; bi += 1u64; };
|
||||
dbuf = nb;
|
||||
@@ -1707,7 +1707,7 @@ export fn parse(a: *asm_) i32 = {
|
||||
blen += 1u64;
|
||||
};
|
||||
};
|
||||
pr.bytes = dbuf;
|
||||
pr.bytes = dbuf.ptr;
|
||||
pr.nbytes = blen;
|
||||
a.line += 1; continue;
|
||||
};
|
||||
|
||||
@@ -510,7 +510,7 @@ export fn parse(a: *asm_) i32 = {
|
||||
// Parse escape sequence into a fresh growable buffer.
|
||||
let cap: u64 = 32u64;
|
||||
let blen: u64 = 0u64;
|
||||
let dbuf: *u8 = amalloc(a.a, cap): *u8;
|
||||
let dbuf: []u8 = alloc([], cap)!;
|
||||
for (p2 < n) {
|
||||
if (line[p2] == 34u8) { p2 = p2; p2 += 0u64; p2 = n + 1u64; }
|
||||
else {
|
||||
@@ -545,7 +545,7 @@ export fn parse(a: *asm_) i32 = {
|
||||
};
|
||||
if (blen + 1u64 > cap) {
|
||||
let ncap: u64 = cap * 2u64;
|
||||
let nb: *u8 = amalloc(a.a, ncap): *u8;
|
||||
let nb: []u8 = alloc([], ncap)!;
|
||||
let bi: u64 = 0u64;
|
||||
for (bi < blen) { nb[bi] = dbuf[bi]; bi += 1u64; };
|
||||
dbuf = nb;
|
||||
@@ -555,7 +555,7 @@ export fn parse(a: *asm_) i32 = {
|
||||
blen += 1u64;
|
||||
};
|
||||
};
|
||||
pr.bytes = dbuf;
|
||||
pr.bytes = dbuf.ptr;
|
||||
pr.nbytes = blen;
|
||||
a.line += 1; continue;
|
||||
};
|
||||
|
||||
@@ -4279,7 +4279,7 @@ fn lexident(l: *lex, start: *pos, out: *tok) void = {
|
||||
fn lexstr(l: *lex, start: *pos, out: *tok) void = {
|
||||
let cap: u64 = 32u64;
|
||||
let nb: u64 = 0u64;
|
||||
let buf: *u8 = amalloc(l.a, cap): *u8;
|
||||
let buf: []u8 = alloc([], cap)!;
|
||||
for (true) {
|
||||
let c: i32 = lpeek(l, 0u64);
|
||||
if (c < 0) {
|
||||
@@ -4301,7 +4301,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
|
||||
};
|
||||
if (nb + 1u64 >= cap) {
|
||||
let ncap: u64 = cap * 2u64;
|
||||
let nb2: *u8 = amalloc(l.a, ncap): *u8;
|
||||
let nb2: []u8 = alloc([], ncap)!;
|
||||
let i: u64 = 0u64;
|
||||
for (i < nb) {
|
||||
let ix: i32 = i: i32;
|
||||
@@ -4320,7 +4320,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
|
||||
out.line = start.line;
|
||||
out.col = start.col;
|
||||
let s: str;
|
||||
s.ptr = buf;
|
||||
s.ptr = buf.ptr;
|
||||
s.len = nb: i32;
|
||||
out.text = s;
|
||||
};
|
||||
|
||||
@@ -4279,7 +4279,7 @@ fn lexident(l: *lex, start: *pos, out: *tok) void = {
|
||||
fn lexstr(l: *lex, start: *pos, out: *tok) void = {
|
||||
let cap: u64 = 32u64;
|
||||
let nb: u64 = 0u64;
|
||||
let buf: *u8 = amalloc(l.a, cap): *u8;
|
||||
let buf: []u8 = alloc([], cap)!;
|
||||
for (true) {
|
||||
let c: i32 = lpeek(l, 0u64);
|
||||
if (c < 0) {
|
||||
@@ -4301,7 +4301,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
|
||||
};
|
||||
if (nb + 1u64 >= cap) {
|
||||
let ncap: u64 = cap * 2u64;
|
||||
let nb2: *u8 = amalloc(l.a, ncap): *u8;
|
||||
let nb2: []u8 = alloc([], ncap)!;
|
||||
let i: u64 = 0u64;
|
||||
for (i < nb) {
|
||||
let ix: i32 = i: i32;
|
||||
@@ -4320,7 +4320,7 @@ fn lexstr(l: *lex, start: *pos, out: *tok) void = {
|
||||
out.line = start.line;
|
||||
out.col = start.col;
|
||||
let s: str;
|
||||
s.ptr = buf;
|
||||
s.ptr = buf.ptr;
|
||||
s.len = nb: i32;
|
||||
out.text = s;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user