diff --git a/src/parser.ts b/src/parser.ts index 67cace22..d859ca52 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -3742,7 +3742,7 @@ export function parseSuperExpression( case Token.LeftParen: { // The super property has to be within a class constructor if ((context & Context.SuperCall) < 1) report(parser, Errors.SuperNoConstructor); - if (context & Context.InClass) report(parser, Errors.UnexpectedPrivateField); + if (context & Context.InClass) report(parser, Errors.InvalidSuperProperty); parser.assignable = AssignmentKind.CannotAssign; break; } @@ -3751,7 +3751,7 @@ export function parseSuperExpression( // new super() is never allowed. // super() is only allowed in derived constructor if ((context & Context.SuperProperty) < 1) report(parser, Errors.InvalidSuperProperty); - if (context & Context.InClass) report(parser, Errors.UnexpectedPrivateField); + if (context & Context.InClass) report(parser, Errors.InvalidSuperProperty); parser.assignable = AssignmentKind.Assignable; break; } @@ -8299,11 +8299,9 @@ function parseClassElementList( nextToken(parser, context); // skip: '*' } else if (context & Context.OptionsNext && parser.token === Token.PrivateField) { kind |= PropertyKind.PrivateField; - key = parsePrivateIdentifier(parser, context, tokenPos, linePos, colPos); - context = context | Context.InClass; + key = parsePrivateIdentifier(parser, context | Context.InClass, tokenPos, linePos, colPos); } else if (context & Context.OptionsNext && (parser.token & Token.IsClassField) === Token.IsClassField) { kind |= PropertyKind.ClassField; - context = context | Context.InClass; } else if (token === Token.EscapedFutureReserved) { key = parseIdentifier(parser, context, 0); if (parser.token !== Token.LeftParen) diff --git a/test/parser/next/private_methods.ts b/test/parser/next/private_methods.ts index b132b476..23515148 100644 --- a/test/parser/next/private_methods.ts +++ b/test/parser/next/private_methods.ts @@ -192,7 +192,9 @@ describe('Next - Private methods', () => { 'foo() { this.#m, (() => this)().#m }', 'foo() { this.#m, (() => this)().#m }', 'foo() { this.#m, (() => this)().#m }', - 'method() { super.#x(); }' + 'method() { super.#x(); }', + '#method() { super.x(); }', + '#method() { super.#x(); }' ]) { it(`class C { ${arg} }`, () => { t.doesNotThrow(() => {