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>
16 lines
406 B
Text
16 lines
406 B
Text
program T {
|
|
fn classify(c: int) -> int {
|
|
match c { 65, 66 => { return 1 }; 67 => { return 2 }; _ => { return 9 } }
|
|
return 0
|
|
}
|
|
entry {
|
|
print(classify(65)) # 1
|
|
print(classify(67)) # 2
|
|
print(classify(90)) # 9
|
|
print((1 << 4)) # 16
|
|
print(((4 | 1) & 6)) # 4
|
|
let p = bytes(16)
|
|
p[1] = 9999
|
|
print(p[1]) # 9999
|
|
}
|
|
}
|