Parents: #465, #498 Related: #491
Problem
The bytecode compiler already has and executes representation-independent jump_if_not_nullish_peek support, and strict tail-position ?? already emits it. General expression lowering nevertheless rejects every nullish-coalescing expression, forcing ordinary programs, generators, async functions, and nested plain-function expressions away from an otherwise complete VM path.
Scope
- Lower
left ?? rightthrough the existing peek/pop short-circuit structure. - Preserve left-to-right evaluation, exactly-once operands, abrupt completion, and the distinction between nullish and merely falsy values.
- Cover program, plain-function, generator suspend/resume, and async-function admission.
- Keep optimizer branch accounting and interpreter fallback exact.
No-workaround rules
- No eager RHS evaluation, truthiness substitution, AST rewriting, syntax exclusion, or special-casing constant operands.
- No weakening of the tree-walker/VM differential or admission inventory.
Acceptance
- Unit fixtures prove null/undefined take the RHS while false, zero, NaN, and empty string short-circuit with exact side-effect and throw ordering.
- Program, plain-function, generator, and async admission compile the same general expression path.
- Forced tree-walker and required-bytecode results match, including generator resume and async settlement.
- Focused compiler/frontend, full units, applicable sanitizer gates, and exact relevant Test262 before → after accounting pass with no regressions.
- Parent issues are cross-linked and the commit quantifies the affected corpus.