Groups B and C of the leftover-primitive cleanup — renames, not new machinery,
and deliberately NO unsafe_ prefix (a __-prefix is itself a C convention, and an
`unsafe` marker carries no signal in a fully-manual-memory language with no safe
subset to contrast against).
memory: mem_free -> free mem_realloc -> resize mem_set -> fill
ptr_add -> offset
process: os_argc -> arg_count os_arg -> arg os_exit -> exit
os_system -> run os_getenv -> getenv read_byte -> read_char
dead: mem_copy, os_time, write_byte (0 uses) — deleted
Two reseeds: accept both old and new names in the intrinsic dispatch, then
migrate every call site and drop the old names. file_open/read/write/seek/tell/
close are left as-is — they're the domain-prefixed syscall layer wrapped by
read_file, not the argc/argv-style C-ness the audit targeted; a `File` type is a
separate, larger design if wanted.
test.sh's CLI smoke updated (os_exit -> exit); check-vocabulary's grammar marker
moved off the deleted names. Reseeded (22243 lines); C-free fixpoint holds;
goldens identical; 18/18; vocab + doc-fences clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
889 B
Text
29 lines
889 B
Text
# buf.ludic — a growable byte buffer for building IR text. The emitter writes
|
|
# module-level material (types, globals, string constants) into one buffer and
|
|
# function bodies into another, then prints them in order.
|
|
|
|
property Buf { data: ptr = null, len: int = 0, cap: int = 0 }
|
|
|
|
fn buf_new() -> Buf {
|
|
let b = new Buf
|
|
b.cap = 256
|
|
b.data = bytes(b.cap)
|
|
b.len = 0
|
|
return b
|
|
}
|
|
fn buf_ensure(b: Buf, extra: int) -> void {
|
|
if b.len + extra + 1 <= b.cap { return }
|
|
while b.len + extra + 1 > b.cap { b.cap = b.cap * 2 }
|
|
b.data = resize(b.data, b.cap)
|
|
}
|
|
fn buf_putc(b: Buf, c: int) -> void {
|
|
buf_ensure(b, 1)
|
|
b.data[b.len] = c
|
|
b.len = b.len + 1
|
|
}
|
|
fn buf_puts(b: Buf, s: ptr) -> void {
|
|
var i = 0
|
|
while s[i] != 0 { buf_putc(b, s[i]); i = i + 1 }
|
|
}
|
|
fn buf_puti(b: Buf, n: int) -> void { buf_puts(b, itoa(n)) }
|
|
fn buf_str(b: Buf) -> ptr { b.data[b.len] = 0; return b.data }
|