ludic/packages/ludic.hints/rail_into.ludic
Orkuncakilkaya d483c9283c 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
- the call graph is by name, and a local or a parameter named as a function (a float bd, part, bx)
  linked to that function: a name the function binds itself is never an edge now.
- drain_actions, generated, calls every reducer; a reducer is reached from its action's dispatch,
  so the drain's calls are not edges.
- a fresh value flowing into a local that also holds kept memory is still the frame's (storing it
  anywhere kept would have made it ESC): HEAP now keeps only a push's growth off the arena.
- the arena starts at its first use rather than at the first frame mark, so boot's temporaries are
  scratch too - dead once the Start handlers return - and a scratch site is never a birth.
Plus ludic.hints' rail and three of ludic.update's one-off lines declared. The arena goldens pass
poisoned. Maroon Lake (d79d189f): 39/11/66 -> 30/9/0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:23:28 +03:00

8 lines
401 B
Text

# rail_into.ludic - the rail into a list the caller keeps: a HUD asks every frame, and a list made
# each time is never given back
export function hints_rail_into(hints_st: HintsState, out: []int) -> void {
List.clear(out)
if not HintsWorld.showing() { return }
@alloc_ok("into the caller's kept list, at most the rail's hints")
for k in 0 .. hints_st.hn_n { push(out, hints_st.hn_top[k]) }
}