Skip to content

Support optional chaining assignment #1024

Description

@frostney

Summary

Implement the Stage 1 TC39 proposal: https://github.com/tc39/proposal-optional-chaining-assignment

Implement all current proposal assignment forms with nullish short-circuiting, single base/key/RHS evaluation, and correct result semantics.

Why

This proposal fits GocciaScript's modern ECMAScript surface and the 0.13.0 proposal roadmap. It should extend the engine's existing architecture rather than arrive as a userland shim.

Current behavior

Optional chaining works for reads and calls but is rejected as an assignment target.

Expected behavior

Implement all current proposal assignment forms with nullish short-circuiting, single base/key/RHS evaluation, and correct result semantics.

Scope notes

Extend assignment-target validation and bytecode reference lowering without duplicating getters, keys, proxies, or side effects. Preserve strict-mode/private-field rules and early errors. Previously-invalid additive syntax: no flag.

Related bytecode roadmap: #871 and #875. Update relevant documentation and the Goccia proposal inventory. Use the current proposal specification at implementation time; add focused project tests and matching pinned Test262/proposal coverage without regressions.

Acceptance criteria

  • Parser/API surface, descriptors, evaluation order, errors, and protocol behavior match the current proposal.
  • Implementation uses the identified shared engine seam without a duplicate compatibility shim.
  • Focused positive, negative, abrupt-completion, and edge-case tests cover the proposal.
  • Relevant project suites, pinned Test262 cases, formatting, and documentation checks pass.

Metadata

Metadata

Assignees

No one assigned

    Labels

    engineTGocciaEngine: language semantics, ECMAScript built-ins, parser, interpreter, bytecode VMnew featureNew feature or requestspec complianceMismatch against official JavaScript/TypeScript specification

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions