diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 5fd5c402efc9..f7e75bfe5ea3 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -655,6 +655,12 @@ export default class ExpressionParser extends LValParser { node.object = base; node.property = this.parseMaybePrivateName(); node.computed = false; + if ( + node.property.type === "PrivateName" && + node.object.type === "Super" + ) { + this.raise(startPos, "Private fields can't be accessed on super"); + } if (state.optionalChainMember) { node.optional = false; return this.finishNode(node, "OptionalMemberExpression"); diff --git a/packages/babel-parser/test/fixtures/experimental/class-private-properties/super-private-member-access/input.js b/packages/babel-parser/test/fixtures/experimental/class-private-properties/super-private-member-access/input.js new file mode 100644 index 000000000000..5cd2ffd252f7 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/class-private-properties/super-private-member-access/input.js @@ -0,0 +1,7 @@ +class A extends B { + #x; + + method() { + super.#x; + } +} diff --git a/packages/babel-parser/test/fixtures/experimental/class-private-properties/super-private-member-access/options.json b/packages/babel-parser/test/fixtures/experimental/class-private-properties/super-private-member-access/options.json new file mode 100644 index 000000000000..162c282e64a2 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/class-private-properties/super-private-member-access/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "classPrivateProperties" + ], + "throws": "Private fields can't be accessed on super (5:4)" +} diff --git a/scripts/tests/flow/flow_tests_whitelist.txt b/scripts/tests/flow/flow_tests_whitelist.txt index 43f45ad565ad..f3704b19d867 100644 --- a/scripts/tests/flow/flow_tests_whitelist.txt +++ b/scripts/tests/flow/flow_tests_whitelist.txt @@ -19,7 +19,6 @@ class_properties/migrated_0021.js class_properties/migrated_0026.js decorators/migrated_0003.js private_class_properties/multiple.js -private_class_properties/super.js private_class_properties/getter_and_field.js private_class_properties/getter_duplicate.js private_class_properties/setter_and_field.js diff --git a/scripts/tests/test262/test262_whitelist.txt b/scripts/tests/test262/test262_whitelist.txt index 01c45f11a59d..851b2ddb9f5e 100644 --- a/scripts/tests/test262/test262_whitelist.txt +++ b/scripts/tests/test262/test262_whitelist.txt @@ -98,8 +98,6 @@ language/expressions/class/elements/syntax/early-errors/invalid-names/method-out language/expressions/class/elements/syntax/early-errors/invalid-names/method-outter-member-expression-bad-reference.js(strict mode) language/expressions/class/elements/syntax/early-errors/invalid-names/method-outter-member-expression-this.js(default) language/expressions/class/elements/syntax/early-errors/invalid-names/method-outter-member-expression-this.js(strict mode) -language/expressions/class/elements/syntax/early-errors/super-private-access-invalid.js(default) -language/expressions/class/elements/syntax/early-errors/super-private-access-invalid.js(strict mode) language/expressions/object/method-definition/private-name-early-error-async-gen-inside-class.js(default) language/expressions/object/method-definition/private-name-early-error-async-gen-inside-class.js(strict mode) language/expressions/object/method-definition/private-name-early-error-gen-inside-class.js(default) @@ -282,8 +280,6 @@ language/statements/class/elements/syntax/early-errors/invalid-names/method-outt language/statements/class/elements/syntax/early-errors/invalid-names/method-outter-member-expression-bad-reference.js(strict mode) language/statements/class/elements/syntax/early-errors/invalid-names/method-outter-member-expression-this.js(default) language/statements/class/elements/syntax/early-errors/invalid-names/method-outter-member-expression-this.js(strict mode) -language/statements/class/elements/syntax/early-errors/super-private-access-invalid.js(default) -language/statements/class/elements/syntax/early-errors/super-private-access-invalid.js(strict mode) language/statements/for-in/dstr/array-rest-before-elision.js(default) language/statements/for-in/dstr/array-rest-before-elision.js(strict mode) language/statements/for-in/dstr/array-rest-elision-invalid.js(default)