Parents: #465, #498 Related: #726, #730, #735
Implemented by e2ba5ac3.
Problem
Plain ordinary functions whose formal list contains an array/object binding pattern are still rejected as plain_rejected_parameter_prologue, even when the pattern has no parameter/default/computed expression and therefore needs no distinct parameter Environment. #726/#730 already provide exact activation-owned BindingInitialization bytecode, iterator closing, object-rest copying, precise temporary roots, and frame/upvalue stores; the remaining barrier is formal binding metadata and entry ordering.
Scope
- Admit array/object formal patterns only when the whole formal list has no top-level default, nested pattern default, computed property key, or named rest formal.
- Allocate one hidden activation input slot per pattern formal, collect every nested binding name into ordinary parameter bindings, and run native BindingInitialization left-to-right before the function body.
- Preserve missing/undefined/null behavior, iterator acquisition/step/value/close ordering, proxy/getter order, elisions, nested array/object patterns, array rest, object rest, abrupt completion, recursion, reentrancy, closures, activation reuse, moving GC, and no-GIL shared-chunk execution.
- Treat the entire list as non-simple: sloppy
argumentsremains unmapped with poisoncallee, and a pattern that bindsargumentssuppresses the implicit arguments object exactly. - Cover ordinary functions, arrows, methods, eligible base constructors, and on-demand automatic admission.
Top-level defaults, nested pattern defaults, computed pattern keys, a named rest formal mixed with patterns, direct eval, derived-constructor field ordering, and Annex B block functions remain separate explicit #465 barriers because they require observable parameter-expression/environment or entry-order work.
No-workaround rules
- No Environment allocation presented as a frame fast path, tree-walker callback from admitted bytecode,
bind_pattern, source rewriting, eager iterable materialization, duplicate iterator/property evaluation, guessed binding slots, swallowed abrupt completion/OOM, or widened admission beyond the proven initializer-free grammar. - No stacks, queues, jobs, Promise, microtask, Worker lifecycle, or Map/Set iterator changes.
Acceptance
- Compiler metadata/admission tests prove exact input and binding slots and no
bind_patternfor nested array/object/rest patterns. - Forced tree-walker and required bytecode agree on success, missing/null failures, iterator/proxy order, IteratorClose, closures/reentrancy, arguments semantics, methods/constructors/arrows, recursion, activation reuse, and moving GC.
- Deterministic OOM and shared-chunk no-GIL/TSan witnesses preserve caller state and immutable metadata.
- Full units, focused compiler/frontend/VM, threadfuzz, and exact nonzero Test262 parameter/destructuring accounting pass with zero regressions.
- Conventional commits land directly on main and cross-link #465, #498, #726, #730, and #735.