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>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-28 20:23:28 +03:00
parent 8228597ade
commit d483c9283c
9 changed files with 62846 additions and 61736 deletions

View file

@ -87,11 +87,13 @@ function update__installed_now(update_st: UpdateState) -> bool {
}
# a page in the player's browser (the site, the changelog)
@alloc_ok("a click: the page opened in the browser")
export function update_open(url: string) -> void {
if update__mac() { System.run(`open "{url}"`) } else { System.run(`cmd /c start "" "{url}"`) }
}
# a path inside a PowerShell single-quoted string: a quote is written twice
@alloc_ok("a PowerShell line: once per update started")
function update__psq(p: string) -> string { return "'" + Text.replace(p, "'", "''") + "'" }
function update__powershell() -> string {

View file

@ -50,6 +50,7 @@ function update__fetch(update_st: mut UpdateState, i: int) -> void {
update_st.update__state = UPDATE_FETCH
}
@alloc_ok("once per package downloaded and checked")
function update__hash_file(update_st: UpdateState) -> string {
if len(update__conf(update_st).scratch) > 0 { return update__conf(update_st).scratch }
return Os.temp_dir() + "/ludic-update-hash.txt"