feat: trust pure renders in Strong mode (#866)
* feat: trust pure renders in Strong mode * fix: preserve Strong memoization semantics * fix(compiler): handle OptionalCallExpression in setup-hook detection The setup-hook veto in containsRenderCall, autoMemoBuiltinHookName, and the recursive walk in autoMemoCallExecutesSetupHook only matched CallExpression nodes. Since the enclosing branch already handles OptionalCallExpression, an optional hook call like useContext?.(Theme) bypassed the veto and was admitted by plainCalleeIsMemoizable as a pure projection under Strong mode. This could cause keyed rows and child caches to skip context, state, and effect setup. Extend the type checks in all three locations to also match OptionalCallExpression. For autoMemoBuiltinHookName, also accept OptionalCallExpression in the callee-name branch since these nodes lack the _octaneUnboundCallee annotation from hook-deps analysis. * fix(compiler): close Strong memoization edge cases * fix(compiler): scope SameValue memo guards * fix(compiler): fail closed for optional hook provenance * fix(compiler): preserve Strong list witnesses * chore: retrigger PR checks * fix(compiler): define Strong retained row purity * chore: sync binding parity gaps * Revert "chore: sync binding parity gaps" This reverts commit 7a8ab8329c59055f5b3a7cca15a1d0366ba126e5. * fix(compiler): retain const custom hook setup --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
D
Dominic Gannaway committed
42256eb9bf09d95fd43c6beb6d202227211d3570
Parent: cfa753b
Committed by GitHub <noreply@github.com>
on 8/27/2026, 7:14:23 AM