From 030b79dc1c38dddd347fdaab2ca1f092aa92eefe Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Mon, 3 Jun 2024 17:24:26 +0000 Subject: [PATCH] analyzer: Report bare 'super' expression as ExpressionFunctionBody Fixes https://github.com/dart-lang/sdk/issues/55525 Change-Id: Id6e1321d093b4b77f0504748e931db8f460c1b45 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/369122 Auto-Submit: Samuel Rawlins Reviewed-by: Konstantin Shcheglov Commit-Queue: Konstantin Shcheglov --- pkg/analyzer/lib/src/fasta/ast_builder.dart | 1 + pkg/analyzer/test/generated/error_parser_test.dart | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart index 3a2d1db3eca..2bb2bfcaa26 100644 --- a/pkg/analyzer/lib/src/fasta/ast_builder.dart +++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart @@ -4196,6 +4196,7 @@ class AstBuilder extends StackListener { debugEvent("ExpressionFunctionBody"); var expression = pop() as ExpressionImpl; + reportErrorIfSuper(expression); var star = pop() as Token?; var asyncKeyword = pop() as Token?; if (parseFunctionBodies) { diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart index 1e143667379..f95e5cb2a55 100644 --- a/pkg/analyzer/test/generated/error_parser_test.dart +++ b/pkg/analyzer/test/generated/error_parser_test.dart @@ -1865,6 +1865,18 @@ class Wrong { parseExpression("x(y)(z).a++"); } + void test_missingAssignableSelector_superAsExpressionFunctionBody() { + CompilationUnit unit = parseCompilationUnit('main() => super;', errors: [ + error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 10, 5), + ]); + var declaration = unit.declarations.first as FunctionDeclaration; + var body = declaration.functionExpression.body as ExpressionFunctionBody; + var expression = body.expression; + expect(expression, isSuperExpression); + var superExpression = expression as SuperExpression; + expect(superExpression.superKeyword, isNotNull); + } + void test_missingAssignableSelector_superPrimaryExpression() { CompilationUnit unit = parseCompilationUnit('main() {super;}', errors: [ expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 8, 5)