Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[parser] Disallow static fields named constructor #10461

Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 6 additions & 3 deletions packages/babel-parser/src/parser/statement.js
Expand Up @@ -1498,13 +1498,16 @@ export default class StatementParser extends ExpressionParser {
}

pushClassProperty(classBody: N.ClassBody, prop: N.ClassProperty) {
// This only affects properties, not methods.
if (this.isNonstaticConstructor(prop)) {
if (
!prop.computed &
guywaldman marked this conversation as resolved.
Show resolved Hide resolved
(prop.key.name === "constructor" || prop.key.value === "constructor")
guywaldman marked this conversation as resolved.
Show resolved Hide resolved
) {
this.raise(
prop.key.start,
"Classes may not have a non-static field named 'constructor'",
"Classes may not have a field named 'constructor'",
);
}

classBody.body.push(this.parseClassProperty(prop));
}

Expand Down
@@ -1,4 +1,4 @@
{
"throws": "Classes may not have a non-static field named 'constructor' (2:2)",
"throws": "Classes may not have a field named 'constructor' (2:2)",
"plugins": ["classProperties"]
}
@@ -1,4 +1,4 @@
{
"throws": "Classes may not have a non-static field named 'constructor' (2:2)",
"throws": "Classes may not have a field named 'constructor' (2:2)",
"plugins": ["classProperties"]
}
@@ -0,0 +1,3 @@
class Foo {
static constructor;
}
@@ -0,0 +1,4 @@
{
"throws": "Classes may not have a field named 'constructor' (2:11)",
"plugins": ["classProperties"]
}
@@ -1,3 +1,4 @@
{
"throws": "Classes may not have a field named 'constructor' (2:2)",
guywaldman marked this conversation as resolved.
Show resolved Hide resolved
"plugins": ["jsx", "flow", "classProperties"]
}

This file was deleted.

8 changes: 0 additions & 8 deletions scripts/tests/test262/test262_whitelist.txt
Expand Up @@ -398,10 +398,6 @@ language/expressions/async-arrow-function/early-errors-arrow-await-in-formals.js
language/expressions/async-arrow-function/early-errors-arrow-await-in-formals.js(strict mode)
language/expressions/class/elements/fields-duplicate-privatenames.js(default)
language/expressions/class/elements/fields-duplicate-privatenames.js(strict mode)
language/expressions/class/elements/fields-literal-name-static-propname-constructor.js(default)
language/expressions/class/elements/fields-literal-name-static-propname-constructor.js(strict mode)
language/expressions/class/elements/fields-string-name-static-propname-constructor.js(default)
language/expressions/class/elements/fields-string-name-static-propname-constructor.js(strict mode)
language/expressions/class/elements/private-methods/prod-private-method-initialize-order.js(default)
language/expressions/class/elements/private-methods/prod-private-method-initialize-order.js(strict mode)
language/expressions/class/elements/syntax/early-errors/grammar-private-environment-on-class-heritage-chained-usage.js(default)
Expand Down Expand Up @@ -1016,10 +1012,6 @@ language/module-code/top-level-await/syntax/try-await-expr.js(default)
language/module-code/top-level-await/syntax/try-await-expr.js(strict mode)
language/statements/class/elements/fields-duplicate-privatenames.js(default)
language/statements/class/elements/fields-duplicate-privatenames.js(strict mode)
language/statements/class/elements/fields-literal-name-static-propname-constructor.js(default)
language/statements/class/elements/fields-literal-name-static-propname-constructor.js(strict mode)
language/statements/class/elements/fields-string-name-static-propname-constructor.js(default)
language/statements/class/elements/fields-string-name-static-propname-constructor.js(strict mode)
language/statements/class/elements/private-field-is-visible-in-computed-properties.js(default)
language/statements/class/elements/private-field-is-visible-in-computed-properties.js(strict mode)
language/statements/class/elements/private-field-with-initialized-id-is-visible-in-computed-properties.js(default)
Expand Down