Parents: #465, #498 Depends on: #740 Related: #736, #738, #739
Implemented by: 1be84900
Problem
The ordered VM parameter prologue already completes each formal before moving to the next, but a later default that is exactly a bare reference to an earlier parameter binding still falls back. function f(first, second = first) {} needs neither general parameter-environment lookup nor expression coercion: the earlier frame binding is initialized before the later raw-undefined selection runs.
Scope
- Admit a complete default expression that is one IdentifierReference bound by a strictly earlier formal, including names introduced by initializer-free array/object patterns.
- Preserve left-to-right initialization, earlier defaults, object identity, undefined values, unmapped arguments, recursion/reentrancy, methods/arrows/base constructors, moving GC, and shared-chunk no-GIL execution.
- Reject self references, later-parameter references, unresolvable/outer/body identifiers, and every embedded unary/binary/logical/conditional/sequence/member/call/new/assignment/update expression.
- Reuse the existing frame slots, exact default/destructuring index metadata, ordered BindingInitialization bytecode, activation roots, malformed-layout validation, and native guards.
No-workaround rules
- No source-text recognizer, pre-evaluation, copied value cache, TDZ weakening, global/outer lookup guess, permissive identifier admission, tree-walker callback, or alternate metadata path.
- No stacks, queues, jobs, Promise, microtask, Worker lifecycle, or Map/Set iterator changes.
Acceptance
- Compiler admission proves simple, defaulted, and destructured earlier bindings and rejects self/later/outer/embedded references.
- Forced tree-walker and required bytecode agree on values, object identity, missing/provided bypass, recursion/reentrancy, methods/arrows/base constructors, and moving GC.
- Shared no-GIL/TSan, OOM/malformed metadata, debugger, and native activation guards remain exact.
- Full units, focused compiler/frontend/VM, threadfuzz, and exact nonzero Test262 accounting pass with zero regressions.
- A conventional commit lands directly on main and cross-links #465, #498, #740, #736, #738, and #739.