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:
parent
8228597ade
commit
d483c9283c
9 changed files with 62846 additions and 61736 deletions
|
|
@ -325,7 +325,7 @@ function deps_births(f: pointer, seen: []bool) -> void {
|
|||
let inframe = k >= 0 and seen[k]
|
||||
# a scratch site is the arena's whenever the game's frames are running - a frame's code, a click
|
||||
# handler, a reducer - and the heap's only before the first frame: boot's code
|
||||
let scratch = g_arena and site.uns == ES_SCRATCH and not (k >= 0 and boot[k])
|
||||
let scratch = g_arena and site.uns == ES_SCRATCH # boot's too: the arena starts at its first use
|
||||
if not scratch and d.file != null and not is_runtime_file(d.file) and not fr_alloc_ok(d.s) and not fr_consumed(site) {
|
||||
var kind = fr_alloc_kind(site, false)
|
||||
if kind == null { kind = "text" }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue