Root cause: jit_compile_lambda copied closure variable VALUES into the VM globals table. GLOBAL_GET found these stale snapshots instead of falling through to vm_closure_env which has live bindings. When set! mutated a variable (like parser's pos), the JIT code read the old snapshot value. Fix: don't inject closure bindings into globals at all. GLOBAL_GET already has a fallback path that walks vm_closure_env — this sees live env bindings that are updated by set!. No new opcodes needed. This should fix JIT for parse-loop, skip-ws, read-expr and other closure functions that use mutable variables. 1166 passed, 0 failed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
41 KiB
41 KiB