selfhost/cmd: astrndup → strings.dup view (γ-2); drop wcc.astrndup
The final 2 astrndup callers in w6a (main.ww fname capture and the
dupstr wrapper in parse.ww) now use the uniform γ-1 shape:
let view: str;
view.ptr = src;
view.len = n: i32;
out = strings.dup(view);
With both call sites converted, wcc.astrndup is dead and removed
from selfhost/cmd/wcc/mem.ww. amalloc + arena bootstrap stay
(other callers; #7 Phase B/C territory).
The two `// astrndup until #11 (w6a types shadow) is fixed.`
WHY-pointers are obsolete (#11 landed in 6696e95) and dropped per
CLAUDE.md rule 8.
dupstr in parse.ww keeps its (*arena, *u8, u64) signature; the
vestigial *arena param is tracked by task #10.
Verified 132/132 incl. 991_w6a_ww + 995_self_rebuild byte-identity.
This commit is contained in:
@@ -833,24 +833,6 @@ export fn amalloc(a: *arena, n: u64) *void = {
|
||||
return p: *void;
|
||||
};
|
||||
|
||||
// astrndup — copy `n` bytes into the arena and produce a NUL-terminated
|
||||
// view. Returns a `str` whose ptr is arena-owned and whose len is `n`
|
||||
// (the trailing NUL is past `len`, so callers reading exactly n bytes
|
||||
// see no padding). Used by the lexer to capture token text.
|
||||
export fn astrndup(a: *arena, src: *u8, n: u64) str = {
|
||||
let p: *u8 = amalloc(a, n + 1u64): *u8;
|
||||
let i: u64 = 0u64;
|
||||
for (i < n) {
|
||||
p[i] = src[i];
|
||||
i += 1u64;
|
||||
};
|
||||
p[n] = 0u8;
|
||||
let r: str;
|
||||
r.ptr = p;
|
||||
r.len = n: i32;
|
||||
return r;
|
||||
};
|
||||
|
||||
export fn freearena(a: *arena) void = {
|
||||
for (a != nil) {
|
||||
let next: *arena = a.next;
|
||||
|
||||
Reference in New Issue
Block a user