Phase 7k: bytes(n) / words(n) allocators (retire mem_alloc)
Allocation reads as intent, not malloc: mem_alloc(64) -> bytes(64) (64 bytes -> a byte buffer) mem_alloc(w * h * 4) -> words(w * h) (w*h 32-bit words) bytes(n) mallocs n bytes and returns a plain pointer (byte-indexed); words(n) mallocs n*4 bytes and returns a `words` pointer (int-indexed). Since words(X) and mem_alloc(X*4) allocate the identical number of bytes, the migration cannot change any allocation size — the `* 4` factor just moves from the argument into the allocator name, pairing naturally with the Phase-7j `words` retyping (`var fb: words = words(w * h)`). Migrated 102 sites (mem_alloc(E*4) -> words(E), else bytes(E)); deleted the mem_alloc intrinsic. mem_realloc/free/copy/set stay as the low-level reallocation/free family. Reseeded (22565 lines); C-free fixpoint holds; goldens byte-identical; 18/18; vocab + doc-fences clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
5cab68ea2e
commit
86948d2b19
22 changed files with 3118 additions and 3069 deletions
|
|
@ -35,7 +35,7 @@ fn ptype() -> ptr {
|
|||
pi = pi + 1
|
||||
eat_op("]")
|
||||
let el = ptype()
|
||||
let out = mem_alloc(len(el) + 3)
|
||||
let out = bytes(len(el) + 3)
|
||||
out[0] = 91; out[1] = 93 # "[]"
|
||||
var i = 0
|
||||
while el[i] != 0 { out[2 + i] = el[i]; i = i + 1 }
|
||||
|
|
@ -75,7 +75,7 @@ fn parse_hole(inner: ptr) -> Node { # re-lex+parse an embedded exp
|
|||
fn parse_interp(raw: ptr) -> Node {
|
||||
let n = len(raw)
|
||||
var acc: Node = null
|
||||
let lit = mem_alloc(n + 1)
|
||||
let lit = bytes(n + 1)
|
||||
var lj = 0
|
||||
var i = 0
|
||||
while i < n {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue