ludic/selfhost/backend
Orkuncakilkaya de6d78bef5 escape (fix): kept memory is HEAP, so what is pushed through an alias of it is kept
render3d's stream_new holds its pool through a local (`let live = s.chunks; push(live, new
Chunk)`): the flow edge from s.chunks to live carried ESC to nothing, the Chunk records were
LOCAL, and the arena reset them under the stream - the row and horse scenarios' crash at
0xdddd... in fn_stream_update. An ESC class is now HEAP too, so every alias of kept memory is,
and a value stored through it is kept. Bidirectional alias edges were tried first and over-kept
through returns (el_place, rim).

- examples/lang/arena_alias.ludic: the stream_new shape; poisoned it read 3 3000, now 3 1518
- examples/modules/alloc_ok_private.ludic: @alloc_ok on a module's private function and on a
  statement in its private generic, declared at run time (it already passes: a guard)
- the game: frame_allocs, frame_keeps, owned_leaks 0; the lab builds under `arena strict`; the row
  scenario poisoned (R3D_ARENA_CHECK=1, 2400 frames) runs clean, bad 0 kept 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 21:15:32 +03:00
..
game fence (25.1): every allocation goes through the fence - sites, frame judging, census, callers 2026-09-28 15:35:29 +03:00
stdlib arena (25.3b): LOCAL sites allocate from the frame's scratch; dispatch is not an allocation; @frame by property 2026-09-28 16:25:32 +03:00
emit_addr.ludic feat(lang): L11 views and templates - the UI is markup, not code 2026-09-24 15:58:47 +03:00
emit_call.ludic region rule (25.3c): keep() and intern(), frame_keeps, and --arena-strict 2026-09-28 16:33:53 +03:00
emit_core.ludic Os.heap_bytes: the heap without the renderer; string_temps reads it 2026-09-28 12:31:42 +03:00
emit_decl.ludic frame allocs (25.2): @frame on a step list's field, @alloc_ok on a statement, and on an exported function 2026-09-28 15:56:32 +03:00
emit_deps.ludic frame allocs: a local shadowing a function is no edge, the drain's calls are no edges, HEAP keeps only a growth off the arena, and the arena starts at its first use 2026-09-28 20:23:28 +03:00
emit_escape.ludic escape (fix): kept memory is HEAP, so what is pushed through an alias of it is kept 2026-09-28 21:15:32 +03:00
emit_expr.ludic fence (25.1): every allocation goes through the fence - sites, frame judging, census, callers 2026-09-28 15:35:29 +03:00
emit_fence.ludic fence: declared bytes are never judged nor listed; the scan's sites sorted by bytes, as many as asked, and all to a file 2026-09-28 18:03:00 +03:00
emit_fence_ir.ludic frame allocs: a local shadowing a function is no edge, the drain's calls are no edges, HEAP keeps only a growth off the arena, and the arena starts at its first use 2026-09-28 20:23:28 +03:00
emit_float.ludic fence (25.1): every allocation goes through the fence - sites, frame judging, census, callers 2026-09-28 15:35:29 +03:00
emit_fnval.ludic feat(compiler): a Job.parallel_for worker may read a state but not change one 2026-09-27 22:04:59 +03:00
emit_frame.ludic frame allocs: a local shadowing a function is no edge, the drain's calls are no edges, HEAP keeps only a growth off the arena, and the arena starts at its first use 2026-09-28 20:23:28 +03:00
emit_head.ludic globals initialized in the order their initializers need each other 2026-09-28 20:35:09 +03:00
emit_intrin.ludic arena (25.3b): LOCAL sites allocate from the frame's scratch; dispatch is not an allocation; @frame by property 2026-09-28 16:25:32 +03:00
emit_intrin2.ludic fence (25.1): every allocation goes through the fence - sites, frame judging, census, callers 2026-09-28 15:35:29 +03:00
emit_mem.ludic fence (25.1): every allocation goes through the fence - sites, frame judging, census, callers 2026-09-28 15:35:29 +03:00
emit_new.ludic capacities (25.5a): @max(n) on a list field, and a full table is a failure 2026-09-28 16:43:02 +03:00
emit_resource.ludic owned fields (25.5e): @owns(Kind) on a record's field, and owned_leaks 2026-09-28 17:01:28 +03:00
emit_stmt.ludic frame allocs (25.2): @frame on a step list's field, @alloc_ok on a statement, and on an exported function 2026-09-28 15:56:32 +03:00
emit_vis.ludic fix(lang): the action drain is the program's; --check runs every check a build makes; a registry key named count is refused; name lookups are tables 2026-09-25 23:34:43 +03:00