Parents: #465, #498 Depends on: #743 Related: #739, #740, #741, #742
Problem
#743 permits exact public property reads rooted in invocation context or strictly earlier formals, including getters that can already reenter JavaScript. Calling a proven earlier callable, or a public method read from a proven receiver, still rejects the enclosing plain function even though the VM already owns canonical callability checks, receiver binding, argument order, Proxy [[Call]], abrupt completion, activation nesting, and GC roots.
Scope
- Admit non-optional, non-spread calls when the callee and every argument recursively satisfy the parameter-safe grammar.
- Preserve
this = undefinedfor value calls and the exact base receiver for named/computed member calls. - Preserve callee/property lookup before arguments, left-to-right arguments, one call, Proxy apply behavior, non-callable errors, provided-value bypass, recursion/reentrancy, moving GC, and OOM propagation.
- Permit nested safe calls and composition through existing value/property expression nodes while retaining immutable metadata, debugger/step/watchdog accounting, shared-chunk no-GIL execution, and exact activation restoration.
Syntactically direct eval, optional calls/chains, spread arguments, private or super calls, tagged templates, construction, writes/assignment/update/delete, unresolved outer/body bindings, import/suspension, literal allocation, nested-pattern expressions, and rest mixtures remain barriers.
No-workaround rules
- No eager invocation, cached result, duplicated callee/getter/argument effect, receiver substitution, skipped callability check, source rewriting, permissive call arm, tree-walker callback, hidden native tier, or benchmark-only path.
- No stacks, queues, jobs, Promise, microtask, Worker lifecycle, or Map/Set iterator changes.
Acceptance
- Exhaustive admission tests accept only recursively safe value/member calls and reject direct-eval/optional/spread/private/super/new/outer forms.
- Forced tree-walker and required bytecode agree on value and named/computed method calls, receiver identity, callee-before-arguments order, Proxy apply, non-callable/throwing calls, provided bypass, methods/arrows/base constructors, and recursion/reentrancy.
- Moving-GC, allocation-failure restoration, shared no-GIL, and TSan witnesses preserve one-shot effects and activation state.
- Full units, focused compiler/frontend/VM, threadfuzz, and exact nonzero relevant Test262 accounting pass with zero regressions.
- A conventional commit lands directly on main and cross-links #465, #498, #743, #742, #739, #740, and #741.
Landed
402e805a — feat(compiler): lower parameter call defaults (#744)