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 <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 3a2d1db..2bb2bfc 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -4196,6 +4196,7 @@
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 1e14366..f95e5cb 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -1865,6 +1865,18 @@
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)