Skip to content

Add tests for escaped contextual keywords as class field names - #5134

Open
magic-akari wants to merge 4 commits into
tc39:mainfrom
magic-akari:test/escaped-keyword-fields
Open

magic-akari wants to merge 4 commits into
tc39:mainfrom
magic-akari:test/escaped-keyword-fields

Conversation

@magic-akari

@magic-akari magic-akari commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Escaped spellings of get, set, static, and async are valid class field names. This adds coverage for instance and static fields, explicit semicolons, initializers, and ASI before subsequent class elements and the closing brace.

Each ASI case isolates one boundary. Existing templates generate both class declarations and class expressions, with assertions checking field placement and relevant runtime behavior.

Specification:

Related implementation fix:

@github-actions

github-actions Bot commented Sep 13, 2026

Copy link
Copy Markdown

104 new or modified tests were run on 7 engines.

View workflow run

Test results
Test Engine262 GraalJS JavaScriptCore QuickJS SpiderMonkey V8 XS
language/expressions/class/elements/escaped-accessor-field-asi-before-comment.js
language/expressions/class/elements/escaped-accessor-field-asi-before-computed-field.js
language/expressions/class/elements/escaped-accessor-field-asi-before-field.js
language/expressions/class/elements/escaped-accessor-field-asi-before-generator.js
language/expressions/class/elements/escaped-accessor-field-asi-before-method.js
language/expressions/class/elements/escaped-accessor-field-asi-before-private-field.js
language/expressions/class/elements/escaped-accessor-field-asi-end.js
language/expressions/class/elements/escaped-accessor-static-field-asi-end.js
language/expressions/class/elements/escaped-async-field-asi-before-comment.js
language/expressions/class/elements/escaped-async-field-asi-before-computed-field.js
language/expressions/class/elements/escaped-async-field-asi-before-field.js
language/expressions/class/elements/escaped-async-field-asi-before-generator.js
language/expressions/class/elements/escaped-async-field-asi-before-method.js
language/expressions/class/elements/escaped-async-field-asi-before-private-field.js
language/expressions/class/elements/escaped-async-field-asi-end.js
language/expressions/class/elements/escaped-async-field-no-asi-before-method.js
language/expressions/class/elements/escaped-async-static-field-asi-end.js
language/expressions/class/elements/escaped-async-static-field-no-asi-before-method.js
language/expressions/class/elements/escaped-get-field-asi-before-comment.js
language/expressions/class/elements/escaped-get-field-asi-before-computed-field.js
language/expressions/class/elements/escaped-get-field-asi-before-field.js
language/expressions/class/elements/escaped-get-field-asi-before-generator.js
language/expressions/class/elements/escaped-get-field-asi-before-method.js
language/expressions/class/elements/escaped-get-field-asi-before-private-field.js
language/expressions/class/elements/escaped-get-field-asi-end.js
language/expressions/class/elements/escaped-get-field-no-asi-before-method.js
language/expressions/class/elements/escaped-get-static-field-asi-end.js
language/expressions/class/elements/escaped-get-static-field-no-asi-before-method.js
language/expressions/class/elements/escaped-keyword-fields-initializer.js
language/expressions/class/elements/escaped-keyword-fields.js
language/expressions/class/elements/escaped-set-field-asi-before-comment.js
language/expressions/class/elements/escaped-set-field-asi-before-computed-field.js
language/expressions/class/elements/escaped-set-field-asi-before-field.js
language/expressions/class/elements/escaped-set-field-asi-before-generator.js
language/expressions/class/elements/escaped-set-field-asi-before-method.js
language/expressions/class/elements/escaped-set-field-asi-before-private-field.js
language/expressions/class/elements/escaped-set-field-asi-end.js
language/expressions/class/elements/escaped-set-field-no-asi-before-method.js
language/expressions/class/elements/escaped-set-static-field-asi-end.js
language/expressions/class/elements/escaped-set-static-field-no-asi-before-method.js
language/expressions/class/elements/escaped-static-field-asi-before-comment.js
language/expressions/class/elements/escaped-static-field-asi-before-computed-field.js
language/expressions/class/elements/escaped-static-field-asi-before-field.js
language/expressions/class/elements/escaped-static-field-asi-before-generator.js
language/expressions/class/elements/escaped-static-field-asi-before-method.js
language/expressions/class/elements/escaped-static-field-asi-before-private-field.js
language/expressions/class/elements/escaped-static-field-asi-end.js
language/expressions/class/elements/escaped-static-field-no-asi-before-method.js
language/expressions/class/elements/escaped-static-static-field-asi-end.js
language/expressions/class/elements/escaped-static-static-field-no-asi-before-method.js
language/statements/class/elements/escaped-accessor-field-asi-before-comment.js
language/statements/class/elements/escaped-accessor-field-asi-before-computed-field.js
language/statements/class/elements/escaped-accessor-field-asi-before-field.js
language/statements/class/elements/escaped-accessor-field-asi-before-generator.js
language/statements/class/elements/escaped-accessor-field-asi-before-method.js
language/statements/class/elements/escaped-accessor-field-asi-before-private-field.js
language/statements/class/elements/escaped-accessor-field-asi-end.js
language/statements/class/elements/escaped-accessor-static-field-asi-end.js
language/statements/class/elements/escaped-async-field-asi-before-comment.js
language/statements/class/elements/escaped-async-field-asi-before-computed-field.js
language/statements/class/elements/escaped-async-field-asi-before-field.js
language/statements/class/elements/escaped-async-field-asi-before-generator.js
language/statements/class/elements/escaped-async-field-asi-before-method.js
language/statements/class/elements/escaped-async-field-asi-before-private-field.js
language/statements/class/elements/escaped-async-field-asi-end.js
language/statements/class/elements/escaped-async-field-no-asi-before-method.js
language/statements/class/elements/escaped-async-static-field-asi-end.js
language/statements/class/elements/escaped-async-static-field-no-asi-before-method.js
language/statements/class/elements/escaped-get-field-asi-before-comment.js
language/statements/class/elements/escaped-get-field-asi-before-computed-field.js
language/statements/class/elements/escaped-get-field-asi-before-field.js
language/statements/class/elements/escaped-get-field-asi-before-generator.js
language/statements/class/elements/escaped-get-field-asi-before-method.js
language/statements/class/elements/escaped-get-field-asi-before-private-field.js
language/statements/class/elements/escaped-get-field-asi-end.js
language/statements/class/elements/escaped-get-field-no-asi-before-method.js
language/statements/class/elements/escaped-get-static-field-asi-end.js
language/statements/class/elements/escaped-get-static-field-no-asi-before-method.js
language/statements/class/elements/escaped-keyword-fields-initializer.js
language/statements/class/elements/escaped-keyword-fields.js
language/statements/class/elements/escaped-set-field-asi-before-comment.js
language/statements/class/elements/escaped-set-field-asi-before-computed-field.js
language/statements/class/elements/escaped-set-field-asi-before-field.js
language/statements/class/elements/escaped-set-field-asi-before-generator.js
language/statements/class/elements/escaped-set-field-asi-before-method.js
language/statements/class/elements/escaped-set-field-asi-before-private-field.js
language/statements/class/elements/escaped-set-field-asi-end.js
language/statements/class/elements/escaped-set-field-no-asi-before-method.js
language/statements/class/elements/escaped-set-static-field-asi-end.js
language/statements/class/elements/escaped-set-static-field-no-asi-before-method.js
language/statements/class/elements/escaped-static-field-asi-before-comment.js
language/statements/class/elements/escaped-static-field-asi-before-computed-field.js
language/statements/class/elements/escaped-static-field-asi-before-field.js
language/statements/class/elements/escaped-static-field-asi-before-generator.js
language/statements/class/elements/escaped-static-field-asi-before-method.js
language/statements/class/elements/escaped-static-field-asi-before-private-field.js
language/statements/class/elements/escaped-static-field-asi-end.js
language/statements/class/elements/escaped-static-field-no-asi-before-method.js
language/statements/class/elements/escaped-static-static-field-asi-end.js
language/statements/class/elements/escaped-static-static-field-no-asi-before-method.js
staging/decorators/class-decl-escaped-accessor.js
staging/decorators/class-decl-escaped-static-accessor.js
staging/decorators/class-expr-escaped-accessor.js
staging/decorators/class-expr-escaped-static-accessor.js

@magic-akari
magic-akari marked this pull request as ready for review September 13, 2026 16:07
@magic-akari
magic-akari requested a review from a team as a code owner September 13, 2026 16:07
Extend the escaped class field tests to cover accessor with explicit semicolons, initializers, and ASI before subsequent class elements and the closing brace.

Cover instance and static fields in both class declarations and class expressions. These tests exercise ordinary field names and do not require decorators support.
Verify that escaped get, set, static, and async field names cannot be followed by a method on the same line without a semicolon. Cover instance and static fields in both class declarations and class expressions.

Add decorators tests rejecting escaped accessor modifiers for instance and static auto-accessors.
@magic-akari
magic-akari requested a review from a team as a code owner September 14, 2026 02:20
hubot pushed a commit to v8/v8 that referenced this pull request Sep 16, 2026
Treat escaped `get`/`set` spellings as property names instead of rejecting
them as escaped accessor keywords. This allows automatic semicolon
insertion when another class member follows on a new line.

Add a regression test covering both instance and static fields.

Related tests: tc39/test262#5134

Change-Id: I7551557758383a5100def79f3041efbb26f7cd59
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/8403169
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/main@{#109877}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant