From fbe0fadbb48582e1347b7024ac5dc990e94bb876 Mon Sep 17 00:00:00 2001 From: Aakash Prajapati Date: Sat, 9 May 2026 23:39:51 +0530 Subject: [PATCH] fix(parser): reject 'new super()' syntax with error TS2824 --- src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/parser.ts | 11 +++++++++++ tests/cases/compiler/newSuperError.ts | 16 ++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 tests/cases/compiler/newSuperError.ts diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 17586e927d0ac..fcbee94bb5ad2 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3830,6 +3830,10 @@ "category": "Error", "code": 2823 }, + "'super' cannot be used with 'new' keyword.": { + "category": "Error", + "code": 2824 + }, "Cannot find namespace '{0}'. Did you mean '{1}'?": { "category": "Error", "code": 2833 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 68133ac5f1e40..dc4f23d9d4a62 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6801,6 +6801,17 @@ namespace Parser { function parseNewExpressionOrNewDotTarget(): NewExpression | MetaProperty { const pos = getNodePos(); parseExpected(SyntaxKind.NewKeyword); + + // Validate that 'new' is not used with 'super' - this is not JavaScript syntax + if (token() === SyntaxKind.SuperKeyword) { + parseErrorAtCurrentToken(Diagnostics.super_cannot_be_used_with_new_keyword); + return finishNode(factoryCreateNewExpression( + createMissingNode(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ false), + /*typeArguments*/ undefined, + /*argumentsArray*/ undefined + ), pos); + } + if (parseOptional(SyntaxKind.DotToken)) { const name = parseIdentifierName(); return finishNode(factory.createMetaProperty(SyntaxKind.NewKeyword, name), pos); diff --git a/tests/cases/compiler/newSuperError.ts b/tests/cases/compiler/newSuperError.ts new file mode 100644 index 0000000000000..fef0264586dbf --- /dev/null +++ b/tests/cases/compiler/newSuperError.ts @@ -0,0 +1,16 @@ +// @strict: true +// @target: ES2020 + +// Repro for #63451 - 'new super()' should be a parse error + +class A extends class {} { + static { + new super(); // expect error TS2824 + } + + static f() { + new super(); // expect error TS2824 + } +} + +console.log("If you see this, the test failed (compilation should show error)");