[parser] Support 'augment super' as its own expression

This adds support for parsing `argument super` as its own expression
in augmentation libraries. This is not handled (correctly) by the
ast builders of analyzer and cfe yet.

Change-Id: Ibe67ad9daf56c82e8ec94f16d468e6b0d8f84d22
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/244922
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index fc99416..35444e1 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -6333,6 +6333,15 @@
     problemMessage: r"""Can't use string interpolation in a URI.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidAugmentSuper = messageInvalidAugmentSuper;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidAugmentSuper = const MessageCode(
+    "InvalidAugmentSuper",
+    problemMessage:
+        r"""'augment super' is only allowed in member augmentations.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidAwaitFor = messageInvalidAwaitFor;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
index 437ae8a..a10e793 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -1748,6 +1748,12 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    listener?.handleAugmentSuperExpression(augmentToken, superToken, context);
+  }
+
+  @override
   void handleSymbolVoid(Token token) {
     listener?.handleSymbolVoid(token);
   }
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index f72d10b..107f7da 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -1770,6 +1770,11 @@
     logEvent("SuperExpression");
   }
 
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    logEvent("AugmentSuperExpression");
+  }
+
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {}
 
   void endSwitchCase(
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
index 99e4582..3946e24 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
@@ -227,6 +227,7 @@
     reportExtraneousModifier(externalToken);
     reportExtraneousModifier(requiredToken);
     reportExtraneousModifier(staticToken);
+    reportExtraneousModifier(augmentToken);
     return token;
   }
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 89a8755..0fd1cc0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -5826,6 +5826,9 @@
         return parseThisExpression(token, context);
       } else if (identical(value, "super")) {
         return parseSuperExpression(token, context);
+      } else if (identical(value, "augment") &&
+          optional('super', token.next!.next!)) {
+        return parseAugmentSuperExpression(token, context);
       } else if (identical(value, "new")) {
         return parseNewExpression(token);
       } else if (identical(value, "const")) {
@@ -5965,6 +5968,21 @@
     return token;
   }
 
+  Token parseAugmentSuperExpression(Token token, IdentifierContext context) {
+    Token augmentToken = token = token.next!;
+    assert(optional('augment', token));
+    Token superToken = token = token.next!;
+    assert(optional('super', token));
+    listener.handleAugmentSuperExpression(augmentToken, superToken, context);
+    Token next = token.next!;
+    if (optional('(', next)) {
+      listener.handleNoTypeArguments(next);
+      token = parseArguments(token);
+      listener.handleSend(augmentToken, token.next!);
+    }
+    return token;
+  }
+
   /// This method parses the portion of a list literal starting with the left
   /// square bracket.
   ///
@@ -6948,7 +6966,9 @@
     Token? varFinalOrConst;
 
     if (isModifier(next)) {
-      if (optional('var', next) ||
+      if (optional('augment', next) && optional('super', next.next!)) {
+        return parseExpressionStatement(start);
+      } else if (optional('var', next) ||
           optional('final', next) ||
           optional('const', next)) {
         varFinalOrConst = token = token.next!;
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 878abf5..75532ee 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -2675,6 +2675,15 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentKeyword, Token superKeyword, IdentifierContext context) {
+    assert(optional('augment', augmentKeyword));
+    assert(optional('super', superKeyword));
+    debugEvent("AugmentSuperExpression");
+    throw UnimplementedError('AstBuilder.handleAugmentSuperExpression');
+  }
+
+  @override
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token semicolon) {
     assert(optional('break', breakKeyword));
@@ -3937,7 +3946,6 @@
   void handleSuperExpression(Token superKeyword, IdentifierContext context) {
     assert(optional('super', superKeyword));
     debugEvent("SuperExpression");
-
     push(ast.superExpression(superKeyword));
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 61927d1..392e727 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -86,6 +86,7 @@
 import '../source/source_field_builder.dart';
 import '../source/source_function_builder.dart';
 import '../source/source_library_builder.dart';
+import '../source/source_member_builder.dart';
 import '../source/source_procedure_builder.dart';
 import '../source/stack_listener_impl.dart'
     show StackListenerImpl, offsetForToken;
@@ -5769,6 +5770,25 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    debugEvent("AugmentSuperExpression");
+    if (member is SourceMemberBuilder) {
+      SourceMemberBuilder sourceMemberBuilder = member as SourceMemberBuilder;
+      if (sourceMemberBuilder.isAugmentation) {
+        // TODO(johnniwinther): Implement augment super handling.
+        int fileOffset = augmentToken.charOffset;
+        push(forest.createAsExpression(fileOffset,
+            forest.createNullLiteral(fileOffset), const DynamicType(),
+            forNonNullableByDefault: libraryBuilder.isNonNullableByDefault));
+        return;
+      }
+    }
+    push(new IncompleteErrorGenerator(
+        this, augmentToken, fasta.messageInvalidAugmentSuper));
+  }
+
+  @override
   void handleNamedArgument(Token colon) {
     debugEvent("NamedArgument");
     assert(checkState(colon, [
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
index d75672e..4984f92 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -1968,6 +1968,12 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    _unsupported();
+  }
+
+  @override
   void handleSymbolVoid(Token token) {
     _unhandled();
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index 082584c..fa2a828 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -119,7 +119,7 @@
 
   void becomeNative(SourceLoader loader);
 
-  bool checkPatch(FunctionBuilder patch);
+  bool checkPatch(SourceFunctionBuilder patch);
 
   void reportPatchMismatch(Builder patch);
 }
@@ -492,8 +492,8 @@
   }
 
   @override
-  bool checkPatch(FunctionBuilder patch) {
-    if (!isExternal) {
+  bool checkPatch(SourceFunctionBuilder patch) {
+    if (!isExternal && !patch.libraryBuilder.isAugmentation) {
       patch.libraryBuilder.addProblem(
           messagePatchNonExternal, patch.charOffset, noLength, patch.fileUri!,
           context: [
diff --git a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
index 5137b17..7006708 100644
--- a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
@@ -2411,6 +2411,17 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    AugmentSuperExpressionHandle data = new AugmentSuperExpressionHandle(
+        ParserAstType.HANDLE,
+        augmentToken: augmentToken,
+        superToken: superToken,
+        context: context);
+    seen(data);
+  }
+
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     SwitchCaseBegin data = new SwitchCaseBegin(ParserAstType.BEGIN,
         labelCount: labelCount,
@@ -6926,6 +6937,25 @@
       };
 }
 
+class AugmentSuperExpressionHandle extends ParserAstNode {
+  final Token augmentToken;
+  final Token superToken;
+  final IdentifierContext context;
+
+  AugmentSuperExpressionHandle(ParserAstType type,
+      {required this.augmentToken,
+      required this.superToken,
+      required this.context})
+      : super("AugmentSuperExpression", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+        "augmentToken": augmentToken,
+        "superToken": superToken,
+        "context": context,
+      };
+}
+
 class SwitchCaseBegin extends ParserAstNode {
   final int labelCount;
   final int expressionCount;
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 125a09d..d7c85b5 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -490,6 +490,8 @@
 InterpolationInUri/example: Fail
 InvalidAssignmentWarning/analyzerCode: Fail
 InvalidAssignmentWarning/example: Fail
+InvalidAugmentSuper/analyzerCode: Fail
+InvalidAugmentSuper/example: Fail
 InvalidBreakTarget/analyzerCode: Fail
 InvalidBreakTarget/example: Fail
 InvalidCastFunctionExpr/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 745eead..7691707 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -3309,6 +3309,9 @@
   problemMessage: "Expected identifier, but got 'super'."
   analyzerCode: SUPER_AS_EXPRESSION
 
+InvalidAugmentSuper:
+  problemMessage: "'augment super' is only allowed in member augmentations."
+
 SuperAsExpression:
   problemMessage: "Can't use 'super' as an expression."
   correctionMessage: "To delegate a constructor to a super constructor, put the super call as an initializer."
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart b/pkg/front_end/parser_testcases/augmentation/augment_super.dart
new file mode 100644
index 0000000..ef21ddf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart
@@ -0,0 +1,53 @@
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local;
+  augment;
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super();
+  augment super;
+  augment int local;
+  augment;
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local;
+    augment;
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super();
+    augment super;
+    augment int local;
+    augment;
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
new file mode 100644
index 0000000..19a8a3c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
@@ -0,0 +1,348 @@
+Problems reported:
+
+parser/augmentation/augment_super:6:3: Can't have modifier 'augment' here.
+  augment int local;
+  ^^^^^^^
+
+parser/augmentation/augment_super:23:3: Can't have modifier 'augment' here.
+  augment int local;
+  ^^^^^^^
+
+parser/augmentation/augment_super:33:5: Can't have modifier 'augment' here.
+    augment int local;
+    ^^^^^^^
+
+parser/augmentation/augment_super:50:5: Can't have modifier 'augment' here.
+    augment int local;
+    ^^^^^^^
+
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(local)
+        handleType(int, null)
+        beginVariablesDeclaration(local, null, null)
+          handleIdentifier(local, localVariableDeclaration)
+          beginInitializedIdentifier(local)
+            handleNoVariableInitializer(local)
+          endInitializedIdentifier(local)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleIdentifier(List, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(>)
+        handleType(int, null)
+      endTypeArguments(1, <, >)
+      handleType(List, null)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables({)
+      handleNoFormalParameters({, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments([)
+          handleAugmentSuperExpression(augment, super, expression)
+          handleSpreadExpression(...)
+          handleAugmentSuperExpression(augment, super, expression)
+          handleLiteralInt(0)
+          handleIndexedExpression(null, [, ])
+          handleLiteralList(2, [, null, ])
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(augment, get, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleLiteralInt(0)
+        handleIndexedExpression(null, [, ])
+        handleIdentifier(value, expression)
+        handleNoTypeArguments([)
+        handleNoArguments([)
+        handleSend(value, [)
+        handleLiteralInt(1)
+        handleIndexedExpression(null, [, ])
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleIdentifier(value, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(value, ;)
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(augment, set, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+        handleAugmentSuperExpression(augment, super, expression)
+        handleExpressionStatement(;)
+        handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(local)
+        handleType(int, null)
+        beginVariablesDeclaration(local, null, null)
+          handleIdentifier(local, localVariableDeclaration)
+          beginInitializedIdentifier(local)
+            handleNoVariableInitializer(local)
+          endInitializedIdentifier(local)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethodErrors)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethodErrors, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments(local)
+              handleType(int, null)
+              beginVariablesDeclaration(local, null, null)
+                handleIdentifier(local, localVariableDeclaration)
+                beginInitializedIdentifier(local)
+                  handleNoVariableInitializer(local)
+                endInitializedIdentifier(local)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, instanceProperty)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables({)
+            handleNoFormalParameters({, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleUnaryPostfixAssignmentExpression(++)
+              handleExpressionStatement(;)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleUnaryPrefixAssignmentExpression(--)
+              handleExpressionStatement(;)
+              beginReturnStatement(return)
+                handleAugmentSuperExpression(augment, super, expression)
+                handleUnaryPrefixExpression(-)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(get, augment, {, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, instanceProperty)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(value)
+                handleType(int, null)
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleIdentifier(value, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(value, ;)
+              handleAssignmentExpression(=)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(injectedInstanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+              endArguments(0, (, ))
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+              handleAugmentSuperExpression(augment, super, expression)
+              handleExpressionStatement(;)
+              handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments(local)
+              handleType(int, null)
+              beginVariablesDeclaration(local, null, null)
+                handleIdentifier(local, localVariableDeclaration)
+                beginInitializedIdentifier(local)
+                  handleNoVariableInitializer(local)
+                endInitializedIdentifier(local)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(4, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
new file mode 100644
index 0000000..eb29931
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
@@ -0,0 +1,826 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(, augment, null, augment, Instance of 'VoidType', null, topLevelMethod, false)
+        listener: beginTopLevelMethod(, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethod, topLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseAugmentSuperExpression({, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArguments(super)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                listener: endArguments(0, (, ))
+                            listener: handleSend(augment, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'VoidType', null, topLevelMethodError, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethodError)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethodError, topLevelMethodError, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethodError, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                parseExpressionStatementOrDeclarationAfterModifiers(augment, {, null, null, null, false)
+                  looksLikeLocalFunction(local)
+                  listener: beginMetadataStar(augment)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(local)
+                  listener: handleType(int, null)
+                  listener: beginVariablesDeclaration(local, null, null)
+                  parseVariablesDeclarationRest(int, true)
+                    parseOptionallyInitializedIdentifier(int)
+                      ensureIdentifier(int, localVariableDeclaration)
+                        listener: handleIdentifier(local, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(local)
+                      parseVariableInitializerOpt(local)
+                        listener: handleNoVariableInitializer(local)
+                      listener: endInitializedIdentifier(local)
+                    ensureSemicolon(local)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(augment)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(;, expression)
+                              parseSend(;, expression)
+                                isNextIdentifier(;)
+                                ensureIdentifier(;, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(augment, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(augment)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(augment, ;)
+                    ensureSemicolon(augment)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'SimpleTypeWith1Argument', get, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleIdentifier(List, typeReference)
+        listener: beginTypeArguments(<)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(>)
+        listener: handleType(int, null)
+        listener: endTypeArguments(1, <, >)
+        listener: handleType(List, null)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables({)
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(topLevelProperty)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(topLevelProperty, false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        listener: handleNoTypeArguments([)
+                        parseLiteralListSuffix(return, null)
+                          parseExpression(...)
+                            parsePrecedenceExpression(..., 1, true)
+                              parseUnaryExpression(..., true)
+                                parsePrimary(..., expression)
+                                  parseAugmentSuperExpression(..., expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                          listener: handleSpreadExpression(...)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseAugmentSuperExpression(,, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                              parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
+                                parseExpression([)
+                                  parsePrecedenceExpression([, 1, true)
+                                    parseUnaryExpression([, true)
+                                      parsePrimary([, expression)
+                                        parseLiteralInt([)
+                                          listener: handleLiteralInt(0)
+                                listener: handleIndexedExpression(null, [, ])
+                          listener: handleLiteralList(2, [, null, ])
+                ensureSemicolon(])
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(augment, get, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'VoidType', set, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseAugmentSuperExpression({, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                      parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
+                        parseExpression([)
+                          parsePrecedenceExpression([, 1, true)
+                            parseUnaryExpression([, true)
+                              parsePrimary([, expression)
+                                parseLiteralInt([)
+                                  listener: handleLiteralInt(0)
+                        listener: handleIndexedExpression(null, [, ])
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseSendOrFunctionLiteral(=, expression)
+                              parseSend(=, expression)
+                                isNextIdentifier(=)
+                                ensureIdentifier(=, expression)
+                                  listener: handleIdentifier(value, expression)
+                                listener: handleNoTypeArguments([)
+                                parseArgumentsOpt(value)
+                                  listener: handleNoArguments([)
+                                listener: handleSend(value, [)
+                        parseArgumentOrIndexStar(value, Instance of 'NoTypeParamOrArg', false)
+                          parseExpression([)
+                            parsePrecedenceExpression([, 1, true)
+                              parseUnaryExpression([, true)
+                                parsePrimary([, expression)
+                                  parseLiteralInt([)
+                                    listener: handleLiteralInt(1)
+                          listener: handleIndexedExpression(null, [, ])
+                      listener: handleAssignmentExpression(=)
+                  ensureSemicolon(])
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseAugmentSuperExpression(;, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseSendOrFunctionLiteral(=, expression)
+                              parseSend(=, expression)
+                                isNextIdentifier(=)
+                                ensureIdentifier(=, expression)
+                                  listener: handleIdentifier(value, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(value)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(value, ;)
+                      listener: handleAssignmentExpression(=)
+                  ensureSemicolon(value)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(augment, set, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, injectedTopLevelMethod, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(injectedTopLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(injectedTopLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseAugmentSuperExpression({, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArguments(super)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                listener: endArguments(0, (, ))
+                            listener: handleSend(augment, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseAugmentSuperExpression(;, expression)
+                            listener: handleAugmentSuperExpression(augment, super, expression)
+                  ensureSemicolon(super)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                parseExpressionStatementOrDeclarationAfterModifiers(augment, ;, null, null, null, false)
+                  looksLikeLocalFunction(local)
+                  listener: beginMetadataStar(augment)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(local)
+                  listener: handleType(int, null)
+                  listener: beginVariablesDeclaration(local, null, null)
+                  parseVariablesDeclarationRest(int, true)
+                    parseOptionallyInitializedIdentifier(int)
+                      ensureIdentifier(int, localVariableDeclaration)
+                        listener: handleIdentifier(local, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(local)
+                      parseVariableInitializerOpt(local)
+                        listener: handleNoVariableInitializer(local)
+                      listener: endInitializedIdentifier(local)
+                    ensureSemicolon(local)
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(augment)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(;, expression)
+                              parseSend(;, expression)
+                                isNextIdentifier(;)
+                                ensureIdentifier(;, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(augment, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(augment)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(augment, ;)
+                    ensureSemicolon(augment)
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, augment, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, instanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethod, instanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                    listener: handleSend(augment, ;)
+                          ensureSemicolon())
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethodErrors)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethodErrors, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethodErrors, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethodErrors)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethodErrors, instanceMethodErrors, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethodErrors, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                        parseExpressionStatementOrDeclarationAfterModifiers(augment, {, null, null, null, false)
+                          looksLikeLocalFunction(local)
+                          listener: beginMetadataStar(augment)
+                          listener: endMetadataStar(0)
+                          listener: handleIdentifier(int, typeReference)
+                          listener: handleNoTypeArguments(local)
+                          listener: handleType(int, null)
+                          listener: beginVariablesDeclaration(local, null, null)
+                          parseVariablesDeclarationRest(int, true)
+                            parseOptionallyInitializedIdentifier(int)
+                              ensureIdentifier(int, localVariableDeclaration)
+                                listener: handleIdentifier(local, localVariableDeclaration)
+                              listener: beginInitializedIdentifier(local)
+                              parseVariableInitializerOpt(local)
+                                listener: handleNoVariableInitializer(local)
+                              listener: endInitializedIdentifier(local)
+                            ensureSemicolon(local)
+                            listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(augment)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    inPlainSync()
+                                    parseSendOrFunctionLiteral(;, expression)
+                                      parseSend(;, expression)
+                                        isNextIdentifier(;)
+                                        ensureIdentifier(;, expression)
+                                          inPlainSync()
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(;)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(;)
+                                        listener: handleSend(augment, ;)
+                            ensureSemicolon(augment)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', get, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, instanceProperty)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables({)
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
+                parseInitializersOpt(instanceProperty)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(instanceProperty)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(instanceProperty, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                              listener: handleUnaryPostfixAssignmentExpression(++)
+                          ensureSemicolon(++)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, --)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(--)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrecedenceExpression(--, 16, true)
+                                    parseUnaryExpression(--, true)
+                                      parsePrimary(--, expression)
+                                        parseAugmentSuperExpression(--, expression)
+                                          listener: handleAugmentSuperExpression(augment, super, expression)
+                                  listener: handleUnaryPrefixAssignmentExpression(--)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrecedenceExpression(-, 16, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseAugmentSuperExpression(-, expression)
+                                      listener: handleAugmentSuperExpression(augment, super, expression)
+                              listener: handleUnaryPrefixExpression(-)
+                        ensureSemicolon(super)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(get, augment, {, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', set, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, instanceProperty)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(value)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                              parsePrecedenceExpression(=, 1, true)
+                                parseUnaryExpression(=, true)
+                                  parsePrimary(=, expression)
+                                    parseSendOrFunctionLiteral(=, expression)
+                                      parseSend(=, expression)
+                                        isNextIdentifier(=)
+                                        ensureIdentifier(=, expression)
+                                          listener: handleIdentifier(value, expression)
+                                        listener: handleNoTypeArguments(;)
+                                        parseArgumentsOpt(value)
+                                          listener: handleNoArguments(;)
+                                        listener: handleSend(value, ;)
+                              listener: handleAssignmentExpression(=)
+                          ensureSemicolon(value)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(injectedInstanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(injectedInstanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclaration({, false)
+                        parseExpressionStatement({)
+                          parseExpression({)
+                            parsePrecedenceExpression({, 1, true)
+                              parseUnaryExpression({, true)
+                                parsePrimary({, expression)
+                                  parseAugmentSuperExpression({, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        listener: endArguments(0, (, ))
+                                    listener: handleSend(augment, ;)
+                          ensureSemicolon())
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseAugmentSuperExpression(;, expression)
+                                    listener: handleAugmentSuperExpression(augment, super, expression)
+                          ensureSemicolon(super)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                          listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'augment' here., Try removing 'augment'., {lexeme: augment}], augment, augment)
+                        parseExpressionStatementOrDeclarationAfterModifiers(augment, ;, null, null, null, false)
+                          looksLikeLocalFunction(local)
+                          listener: beginMetadataStar(augment)
+                          listener: endMetadataStar(0)
+                          listener: handleIdentifier(int, typeReference)
+                          listener: handleNoTypeArguments(local)
+                          listener: handleType(int, null)
+                          listener: beginVariablesDeclaration(local, null, null)
+                          parseVariablesDeclarationRest(int, true)
+                            parseOptionallyInitializedIdentifier(int)
+                              ensureIdentifier(int, localVariableDeclaration)
+                                listener: handleIdentifier(local, localVariableDeclaration)
+                              listener: beginInitializedIdentifier(local)
+                              parseVariableInitializerOpt(local)
+                                listener: handleNoVariableInitializer(local)
+                              listener: endInitializedIdentifier(local)
+                            ensureSemicolon(local)
+                            listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(augment)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    inPlainSync()
+                                    parseSendOrFunctionLiteral(;, expression)
+                                      parseSend(;, expression)
+                                        isNextIdentifier(;)
+                                        ensureIdentifier(;, expression)
+                                          inPlainSync()
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(;)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(;)
+                                        listener: handleSend(augment, ;)
+                            ensureSemicolon(augment)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.parser.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.parser.expect
new file mode 100644
index 0000000..a85b796
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.parser.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[KeywordToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[KeywordToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[KeywordToken] super[KeywordToken],[SimpleToken] augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.scanner.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.scanner.expect
new file mode 100644
index 0000000..a85b796
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.scanner.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[KeywordToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[KeywordToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[KeywordToken] super[KeywordToken],[SimpleToken] augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[KeywordToken] super[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[KeywordToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart b/pkg/front_end/parser_testcases/general/augment_super.dart
new file mode 100644
index 0000000..ef21ddf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart
@@ -0,0 +1,53 @@
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local;
+  augment;
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super();
+  augment super;
+  augment int local;
+  augment;
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local;
+    augment;
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super();
+    augment super;
+    augment int local;
+    augment;
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.expect
new file mode 100644
index 0000000..6eeeb58
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.expect
@@ -0,0 +1,790 @@
+Problems reported:
+
+parser/general/augment_super:1:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void topLevelMethod() {
+^^^^^^^
+
+parser/general/augment_super:1:1: Expected ';' after this.
+augment void topLevelMethod() {
+^^^^^^^
+
+parser/general/augment_super:2:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:2:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:2:17: Expected an identifier, but got ')'.
+  augment super();
+                ^
+
+parser/general/augment_super:5:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void topLevelMethodError() {
+^^^^^^^
+
+parser/general/augment_super:5:1: Expected ';' after this.
+augment void topLevelMethodError() {
+^^^^^^^
+
+parser/general/augment_super:6:11: Expected ';' after this.
+  augment int local;
+          ^^^
+
+parser/general/augment_super:11:9: A function declaration needs an explicit list of parameters.
+augment List<int> get topLevelProperty {
+        ^^^^
+
+parser/general/augment_super:11:19: Expected a function body, but got 'get'.
+augment List<int> get topLevelProperty {
+                  ^^^
+
+parser/general/augment_super:12:23: Expected ',' before this.
+  return [... augment super, augment super[0]];
+                      ^^^^^
+
+parser/general/augment_super:12:38: Expected ',' before this.
+  return [... augment super, augment super[0]];
+                                     ^^^^^
+
+parser/general/augment_super:15:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void set topLevelProperty(List<int> value) {
+^^^^^^^
+
+parser/general/augment_super:15:1: Expected ';' after this.
+augment void set topLevelProperty(List<int> value) {
+^^^^^^^
+
+parser/general/augment_super:16:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super:16:11: Expected ';' after this.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super:17:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super = value;
+          ^^^^^
+
+parser/general/augment_super:21:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:21:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:21:17: Expected an identifier, but got ')'.
+  augment super();
+                ^
+
+parser/general/augment_super:22:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super;
+          ^^^^^
+
+parser/general/augment_super:23:11: Expected ';' after this.
+  augment int local;
+          ^^^
+
+parser/general/augment_super:27:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment class Class {
+^^^^^^^
+
+parser/general/augment_super:27:1: Expected ';' after this.
+augment class Class {
+^^^^^^^
+
+parser/general/augment_super:28:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void instanceMethod() {
+  ^^^^^^^
+
+parser/general/augment_super:28:3: Expected ';' after this.
+  augment void instanceMethod() {
+  ^^^^^^^
+
+parser/general/augment_super:29:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:29:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:29:19: Expected an identifier, but got ')'.
+    augment super();
+                  ^
+
+parser/general/augment_super:32:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void instanceMethodErrors() {
+  ^^^^^^^
+
+parser/general/augment_super:32:3: Expected ';' after this.
+  augment void instanceMethodErrors() {
+  ^^^^^^^
+
+parser/general/augment_super:33:13: Expected ';' after this.
+    augment int local;
+            ^^^
+
+parser/general/augment_super:37:11: Expected ';' after this.
+  augment int get instanceProperty {
+          ^^^
+
+parser/general/augment_super:38:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super++;
+            ^^^^^
+
+parser/general/augment_super:38:13: Expected ';' after this.
+    augment super++;
+            ^^^^^
+
+parser/general/augment_super:38:20: Expected an identifier, but got ';'.
+    augment super++;
+                   ^
+
+parser/general/augment_super:39:7: Expected ';' after this.
+    --augment super;
+      ^^^^^^^
+
+parser/general/augment_super:40:13: Expected ';' after this.
+    return -augment super;
+            ^^^^^^^
+
+parser/general/augment_super:43:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void set instanceProperty(int value) {
+  ^^^^^^^
+
+parser/general/augment_super:43:3: Expected ';' after this.
+  augment void set instanceProperty(int value) {
+  ^^^^^^^
+
+parser/general/augment_super:44:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super = value;
+            ^^^^^
+
+parser/general/augment_super:48:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:48:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:48:19: Expected an identifier, but got ')'.
+    augment super();
+                  ^
+
+parser/general/augment_super:49:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super;
+            ^^^^^
+
+parser/general/augment_super:50:13: Expected ';' after this.
+    augment int local;
+            ^^^
+
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType()
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(void)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleParenthesizedExpression(()
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(void)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(int)
+        handleType(augment, null)
+        beginVariablesDeclaration(int, null, null)
+          handleIdentifier(int, localVariableDeclaration)
+          beginInitializedIdentifier(int)
+            handleNoVariableInitializer(int)
+          endInitializedIdentifier(int)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(local, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(local, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(augment, typeReference)
+      handleNoTypeArguments(List)
+      handleType(augment, null)
+      handleIdentifier(List, topLevelFunctionDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        handleIdentifier(int, typeVariableDeclaration)
+        beginTypeVariable(int)
+          handleTypeVariablesDefined(int, 1)
+          handleNoType(int)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleRecoverableError(MissingFunctionParameters, List, List)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
+      handleInvalidFunctionBody({)
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(get)
+  beginMetadataStar(get)
+  endMetadataStar(0)
+  beginTopLevelMember(get)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables({)
+      handleNoFormalParameters({, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments([)
+          handleIdentifier(augment, expression)
+          handleNoTypeArguments(super)
+          handleNoArguments(super)
+          handleSend(augment, super)
+          handleSpreadExpression(...)
+          handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+          handleSuperExpression(super, expression)
+          handleIdentifier(augment, expression)
+          handleNoTypeArguments(super)
+          handleNoArguments(super)
+          handleSend(augment, super)
+          handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+          handleSuperExpression(super, expression)
+          handleLiteralInt(0)
+          handleIndexedExpression(null, [, ])
+          handleLiteralList(4, [, null, ])
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(get, get, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(void)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        handleNoTypeArguments([)
+        handleLiteralInt(0)
+        handleLiteralList(1, [, null, ])
+        handleIdentifier(value, expression)
+        handleNoTypeArguments([)
+        handleNoArguments([)
+        handleSend(value, [)
+        handleLiteralInt(1)
+        handleIndexedExpression(null, [, ])
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            beginVariableInitializer(=)
+              handleIdentifier(value, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(value, ;)
+            endVariableInitializer(=)
+          endInitializedIdentifier(super)
+        endVariablesDeclaration(1, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, set, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, ))
+        handleParenthesizedExpression(()
+        handleExpressionStatement(;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+          handleIdentifier(super, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+        endVariablesDeclaration(1, ;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(int)
+        handleType(augment, null)
+        beginVariablesDeclaration(int, null, null)
+          handleIdentifier(int, localVariableDeclaration)
+          beginInitializedIdentifier(int)
+            handleNoVariableInitializer(int)
+          endInitializedIdentifier(int)
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(local, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(local, ;)
+        handleExpressionStatement(;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType({)
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleParenthesizedExpression(()
+              handleExpressionStatement(;)
+            endBlockFunctionBody(2, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType(})
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethodErrors, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(int)
+              handleType(augment, null)
+              beginVariablesDeclaration(int, null, null)
+                handleIdentifier(int, localVariableDeclaration)
+                beginInitializedIdentifier(int)
+                  handleNoVariableInitializer(int)
+                endInitializedIdentifier(int)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(local, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(local, ;)
+              handleExpressionStatement(;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(3, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleIdentifier(augment, typeReference)
+            handleNoTypeArguments(int)
+            handleType(augment, null)
+            handleIdentifier(int, fieldDeclaration)
+            handleNoFieldInitializer(get)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(get)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty)
+            handleNoType(;)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables({)
+            handleNoFormalParameters({, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(, ;)
+              handleUnaryPrefixAssignmentExpression(++)
+              handleExpressionStatement(;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(super)
+              handleNoArguments(super)
+              handleSend(augment, super)
+              handleUnaryPrefixAssignmentExpression(--)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+              handleExpressionStatement(;)
+              handleSuperExpression(super, expression)
+              handleExpressionStatement(;)
+              beginReturnStatement(return)
+                handleIdentifier(augment, expression)
+                handleNoTypeArguments(super)
+                handleNoArguments(super)
+                handleSend(augment, super)
+                handleUnaryPrefixExpression(-)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+              endReturnStatement(true, return, ;)
+              handleSuperExpression(super, expression)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(get, get, {, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType(})
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(value)
+                handleType(int, null)
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  beginVariableInitializer(=)
+                    handleIdentifier(value, expression)
+                    handleNoTypeArguments(;)
+                    handleNoArguments(;)
+                    handleSend(value, ;)
+                  endVariableInitializer(=)
+                endInitializedIdentifier(super)
+              endVariablesDeclaration(1, ;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(set, void, (, null, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+            handleVoidKeyword(void)
+            handleIdentifier(injectedInstanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, ))
+              handleParenthesizedExpression(()
+              handleExpressionStatement(;)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                handleIdentifier(super, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+              endVariablesDeclaration(1, ;)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(int)
+              handleType(augment, null)
+              beginVariablesDeclaration(int, null, null)
+                handleIdentifier(int, localVariableDeclaration)
+                beginInitializedIdentifier(int)
+                  handleNoVariableInitializer(int)
+                endInitializedIdentifier(int)
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(local, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(local, ;)
+              handleExpressionStatement(;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(6, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
new file mode 100644
index 0000000..4cb40bd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
@@ -0,0 +1,1473 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(topLevelMethod)
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, topLevelMethod, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethod, topLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(;)
+                              parseParenthesizedExpression(;)
+                                parseExpressionInParenthesis(;)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSend((, expression)
+                                              isNextIdentifier(()
+                                              ensureIdentifier((, expression)
+                                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                rewriter()
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments())
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments())
+                                              listener: handleSend(, ))
+                                    ensureCloseParen(, ()
+                                listener: handleParenthesizedExpression(()
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(topLevelMethodError)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, topLevelMethodError, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethodError)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethodError, topLevelMethodError, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethodError, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(int)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(int, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      listener: handleIdentifier(int, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(int)
+                    parseVariableInitializerOpt(int)
+                      listener: handleNoVariableInitializer(int)
+                    listener: endInitializedIdentifier(int)
+                  ensureSemicolon(int)
+                    reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, local)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(local)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(local, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(local)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(local, ;)
+                  ensureSemicolon(local)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(augment)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(augment, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(augment)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(augment, ;)
+                  ensureSemicolon(augment)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, List, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(augment, typeReference)
+        listener: handleNoTypeArguments(List)
+        listener: handleType(augment, null)
+        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(List, topLevelFunctionDeclaration)
+        parseMethodTypeVar(List)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(int)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(int, typeVariableDeclaration)
+          listener: beginTypeVariable(int)
+          listener: handleTypeVariablesDefined(int, 1)
+          listener: handleNoType(int)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+        parseGetterOrFormalParameters(>, List, false, MemberKind.TopLevelMethod)
+          missingParameterMessage(MemberKind.TopLevelMethod)
+          reportRecoverableError(List, MissingFunctionParameters)
+            listener: handleRecoverableError(MissingFunctionParameters, List, List)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.TopLevelMethod)
+            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
+            reportRecoverableError(get, Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}])
+              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
+            insertBlock())
+              rewriter()
+              rewriter()
+          listener: handleInvalidFunctionBody({)
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(get)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(get)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(get)
+      isReservedKeyword({)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', get, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables({)
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(topLevelProperty)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(topLevelProperty, false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true)
+                    parseUnaryExpression(return, true)
+                      parsePrimary(return, expression)
+                        listener: handleNoTypeArguments([)
+                        parseLiteralListSuffix(return, null)
+                          parseExpression(...)
+                            parsePrecedenceExpression(..., 1, true)
+                              parseUnaryExpression(..., true)
+                                parsePrimary(..., expression)
+                                  parseSendOrFunctionLiteral(..., expression)
+                                    parseSend(..., expression)
+                                      isNextIdentifier(...)
+                                      ensureIdentifier(..., expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(super)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(super)
+                                      listener: handleSend(augment, super)
+                          listener: handleSpreadExpression(...)
+                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
+                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
+                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+                            rewriter()
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSendOrFunctionLiteral(,, expression)
+                                    parseSend(,, expression)
+                                      isNextIdentifier(,)
+                                      ensureIdentifier(,, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(super)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(super)
+                                      listener: handleSend(augment, super)
+                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
+                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
+                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
+                            rewriter()
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                              parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
+                                parseExpression([)
+                                  parsePrecedenceExpression([, 1, true)
+                                    parseUnaryExpression([, true)
+                                      parsePrimary([, expression)
+                                        parseLiteralInt([)
+                                          listener: handleLiteralInt(0)
+                                listener: handleIndexedExpression(null, [, ])
+                          listener: handleLiteralList(4, [, null, ])
+                ensureSemicolon(])
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(get, get, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(set)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', set, topLevelProperty, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, [)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction([)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            listener: handleNoTypeArguments([)
+                            parseLiteralListSuffix(;, null)
+                              parseExpression([)
+                                parsePrecedenceExpression([, 1, true)
+                                  parseUnaryExpression([, true)
+                                    parsePrimary([, expression)
+                                      parseLiteralInt([)
+                                        listener: handleLiteralInt(0)
+                              listener: handleLiteralList(1, [, null, ])
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseSendOrFunctionLiteral(=, expression)
+                                parseSend(=, expression)
+                                  isNextIdentifier(=)
+                                  ensureIdentifier(=, expression)
+                                    listener: handleIdentifier(value, expression)
+                                  listener: handleNoTypeArguments([)
+                                  parseArgumentsOpt(value)
+                                    listener: handleNoArguments([)
+                                  listener: handleSend(value, [)
+                          parseArgumentOrIndexStar(value, Instance of 'NoTypeParamOrArg', false)
+                            parseExpression([)
+                              parsePrecedenceExpression([, 1, true)
+                                parseUnaryExpression([, true)
+                                  parsePrimary([, expression)
+                                    parseLiteralInt([)
+                                      listener: handleLiteralInt(1)
+                            listener: handleIndexedExpression(null, [, ])
+                        listener: handleAssignmentExpression(=)
+                    ensureSemicolon(])
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseSendOrFunctionLiteral(=, expression)
+                                parseSend(=, expression)
+                                  isNextIdentifier(=)
+                                  ensureIdentifier(=, expression)
+                                    listener: handleIdentifier(value, expression)
+                                  listener: handleNoTypeArguments(;)
+                                  parseArgumentsOpt(value)
+                                    listener: handleNoArguments(;)
+                                  listener: handleSend(value, ;)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(value)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, set, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, injectedTopLevelMethod, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(injectedTopLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(injectedTopLevelMethod, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      parsePrecedenceExpression(;, 1, true)
+                        parseUnaryExpression(;, true)
+                          parsePrimary(;, expression)
+                            parseParenthesizedExpressionOrFunctionLiteral(;)
+                              parseParenthesizedExpression(;)
+                                parseExpressionInParenthesis(;)
+                                  parseExpressionInParenthesisRest(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSend((, expression)
+                                              isNextIdentifier(()
+                                              ensureIdentifier((, expression)
+                                                reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                  listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                rewriter()
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments())
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments())
+                                              listener: handleSend(, ))
+                                    ensureCloseParen(, ()
+                                listener: handleParenthesizedExpression(()
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                      listener: handleIdentifier(super, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(int)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(int, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      listener: handleIdentifier(int, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(int)
+                    parseVariableInitializerOpt(int)
+                      listener: handleNoVariableInitializer(int)
+                    listener: endInitializedIdentifier(int)
+                  ensureSemicolon(int)
+                    reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, local)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(local)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(local, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(local)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(local, ;)
+                  ensureSemicolon(local)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(augment)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(augment, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(augment)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(augment, ;)
+                  ensureSemicolon(augment)
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(class)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(instanceMethod)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, instanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethod, instanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseParenthesizedExpressionOrFunctionLiteral(;)
+                                      parseParenthesizedExpression(;)
+                                        parseExpressionInParenthesis(;)
+                                          parseExpressionInParenthesisRest(()
+                                            parseExpression(()
+                                              parsePrecedenceExpression((, 1, true)
+                                                parseUnaryExpression((, true)
+                                                  parsePrimary((, expression)
+                                                    parseSend((, expression)
+                                                      isNextIdentifier(()
+                                                      ensureIdentifier((, expression)
+                                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                        rewriter()
+                                                        listener: handleIdentifier(, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt()
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(, ))
+                                            ensureCloseParen(, ()
+                                        listener: handleParenthesizedExpression(()
+                            ensureSemicolon())
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(instanceMethodErrors)
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethodErrors, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethodErrors, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethodErrors)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethodErrors, instanceMethodErrors, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethodErrors, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(int)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(int)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(int, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              listener: handleIdentifier(int, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(int)
+                            parseVariableInitializerOpt(int)
+                              listener: handleNoVariableInitializer(int)
+                            listener: endInitializedIdentifier(int)
+                          ensureSemicolon(int)
+                            reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, local)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(local)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(local, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(local)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(local, ;)
+                          ensureSemicolon(local)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(augment)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(augment, ;)
+                          ensureSemicolon(augment)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', int, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                ensureIdentifierPotentiallyRecovered(augment, fieldDeclaration, false)
+                  listener: handleIdentifier(int, fieldDeclaration)
+                parseFieldInitializerOpt(int, int, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(get)
+                ensureSemicolon(int)
+                  reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, get)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(get)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables({)
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
+                parseInitializersOpt(instanceProperty)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(instanceProperty)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(instanceProperty, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, ++)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(++)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrecedenceExpression(++, 16, true)
+                                    parseUnaryExpression(++, true)
+                                      parsePrimary(++, expression)
+                                        parseSend(++, expression)
+                                          isNextIdentifier(++)
+                                          ensureIdentifier(++, expression)
+                                            reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
+                                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+                                            rewriter()
+                                            listener: handleIdentifier(, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt()
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(, ;)
+                                  listener: handleUnaryPrefixAssignmentExpression(++)
+                            ensureSemicolon()
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, --)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(--)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrecedenceExpression(--, 16, true)
+                                    parseUnaryExpression(--, true)
+                                      parsePrimary(--, expression)
+                                        parseSendOrFunctionLiteral(--, expression)
+                                          parseSend(--, expression)
+                                            isNextIdentifier(--)
+                                            ensureIdentifier(--, expression)
+                                              listener: handleIdentifier(augment, expression)
+                                            listener: handleNoTypeArguments(super)
+                                            parseArgumentsOpt(augment)
+                                              listener: handleNoArguments(super)
+                                            listener: handleSend(augment, super)
+                                  listener: handleUnaryPrefixAssignmentExpression(--)
+                            ensureSemicolon(augment)
+                              reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                              rewriter()
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, super)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(super)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSuperExpression(;, expression)
+                                      listener: handleSuperExpression(super, expression)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true)
+                            parseUnaryExpression(return, true)
+                              parsePrecedenceExpression(-, 16, true)
+                                parseUnaryExpression(-, true)
+                                  parsePrimary(-, expression)
+                                    parseSendOrFunctionLiteral(-, expression)
+                                      parseSend(-, expression)
+                                        isNextIdentifier(-)
+                                        ensureIdentifier(-, expression)
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(super)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(super)
+                                        listener: handleSend(augment, super)
+                              listener: handleUnaryPrefixExpression(-)
+                        ensureSemicolon(augment)
+                          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrValue(}, super)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(super)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseSuperExpression(;, expression)
+                                      listener: handleSuperExpression(super, expression)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(get, get, {, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(set)
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', set, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(value)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: beginVariableInitializer(=)
+                              parseExpression(=)
+                                parsePrecedenceExpression(=, 1, true)
+                                  parseUnaryExpression(=, true)
+                                    parsePrimary(=, expression)
+                                      parseSendOrFunctionLiteral(=, expression)
+                                        parseSend(=, expression)
+                                          isNextIdentifier(=)
+                                          ensureIdentifier(=, expression)
+                                            listener: handleIdentifier(value, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt(value)
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(value, ;)
+                              listener: endVariableInitializer(=)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(value)
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(set, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(injectedInstanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(injectedInstanceMethod, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, false)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              parsePrecedenceExpression(;, 1, true)
+                                parseUnaryExpression(;, true)
+                                  parsePrimary(;, expression)
+                                    parseParenthesizedExpressionOrFunctionLiteral(;)
+                                      parseParenthesizedExpression(;)
+                                        parseExpressionInParenthesis(;)
+                                          parseExpressionInParenthesisRest(()
+                                            parseExpression(()
+                                              parsePrecedenceExpression((, 1, true)
+                                                parseUnaryExpression((, true)
+                                                  parsePrimary((, expression)
+                                                    parseSend((, expression)
+                                                      isNextIdentifier(()
+                                                      ensureIdentifier((, expression)
+                                                        reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
+                                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                                        rewriter()
+                                                        listener: handleIdentifier(, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt()
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(, ))
+                                            ensureCloseParen(, ()
+                                        listener: handleParenthesizedExpression(()
+                            ensureSemicolon())
+                            listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                              listener: handleIdentifier(super, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(int)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(int)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(int, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              listener: handleIdentifier(int, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(int)
+                            parseVariableInitializerOpt(int)
+                              listener: handleNoVariableInitializer(int)
+                            listener: endInitializedIdentifier(int)
+                          ensureSemicolon(int)
+                            reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrValue(}, local)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(local)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(local, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(local)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(local, ;)
+                          ensureSemicolon(local)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                        looksLikeLocalFunction(augment)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            parsePrecedenceExpression(;, 1, true)
+                              parseUnaryExpression(;, true)
+                                parsePrimary(;, expression)
+                                  parseSendOrFunctionLiteral(;, expression)
+                                    parseSend(;, expression)
+                                      isNextIdentifier(;)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(augment, ;)
+                          ensureSemicolon(augment)
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.parser.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.parser.expect
new file mode 100644
index 0000000..0e2e061
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.parser.expect
@@ -0,0 +1,109 @@
+NOTICE: Stream was rewritten by parser!
+
+augment ;void topLevelMethod() {
+augment super;(*synthetic*);
+}
+
+augment ;void topLevelMethodError() {
+augment int ;local;
+augment;
+}
+
+
+augment List<int> (){}get topLevelProperty {
+return [... augment ,super, augment ,super[0]];
+}
+
+augment ;void set topLevelProperty(List<int> value) {
+augment super;[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super;(*synthetic*);
+augment super;
+augment int ;local;
+augment;
+}
+
+augment ;class Class {
+augment ;void instanceMethod() {
+augment super;(*synthetic*);
+}
+
+augment ;void instanceMethodErrors() {
+augment int ;local;
+augment;
+}
+
+augment int ;get instanceProperty {
+augment super;++*synthetic*;
+--augment ;super;
+return -augment ;super;
+}
+
+augment ;void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super;(*synthetic*);
+augment super;
+augment int ;local;
+augment;
+}
+}
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[StringToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[StringToken] ,[SyntheticToken]super[KeywordToken],[SimpleToken] augment[StringToken] ,[SyntheticToken]super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] int[StringToken] ;[SyntheticToken]get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]++[SimpleToken][SyntheticStringToken];[SimpleToken]
+--[SimpleToken]augment[StringToken] ;[SyntheticToken]super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[StringToken] ;[SyntheticToken]super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken][SyntheticStringToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.scanner.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.scanner.expect
new file mode 100644
index 0000000..b6d4e43
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.scanner.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[StringToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[StringToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[StringToken] super[KeywordToken],[SimpleToken] augment[StringToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[StringToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[StringToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[StringToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 0e1788a..70eba07 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -2553,6 +2553,17 @@
   }
 
   @override
+  void handleAugmentSuperExpression(
+      Token augmentToken, Token superToken, IdentifierContext context) {
+    seen(augmentToken);
+    seen(superToken);
+    doPrint('handleAugmentSuperExpression('
+        '$augmentToken, '
+        '$superToken, '
+        '$context)');
+  }
+
+  @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     seen(firstToken);
     doPrint(
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index c270e56..d29de47 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -1619,6 +1619,15 @@
   }
 
   @override
+  Token parseAugmentSuperExpression(Token token, IdentifierContext context) {
+    doPrint('parseAugmentSuperExpression(' '$token, ' '$context)');
+    indent++;
+    var result = super.parseAugmentSuperExpression(token, context);
+    indent--;
+    return result;
+  }
+
+  @override
   Token parseLiteralListSuffix(Token token, Token? constKeyword) {
     doPrint('parseLiteralListSuffix(' '$token, ' '$constKeyword)');
     indent++;
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 00b69d3..bfbafd0 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -18,6 +18,7 @@
 assigning
 augment
 augmentation
+augmentations
 augmented
 b
 c
diff --git a/pkg/front_end/testcases/macros/augment_super.dart b/pkg/front_end/testcases/macros/augment_super.dart
new file mode 100644
index 0000000..ff7d4a8
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import augment 'augment_super_lib.dart';
+
+void topLevelMethod() {}
+void topLevelMethodErrors() {}
+List<int> get topLevelProperty => [42];
+void set topLevelProperty(List<int> value) {}
+
+class Class {
+  void instanceMethod() {}
+  void instanceMethodErrors() {}
+  int get instanceProperty => 42;
+  void set instanceProperty(int value) {}
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.strong.expect b/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
new file mode 100644
index 0000000..d309789
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final has-declared-initializer dynamic #t2 in (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
new file mode 100644
index 0000000..e1236aa
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
@@ -0,0 +1,180 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<dynamic> :sync-for-iterator = ((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+          #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+        }
+      }
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+
+
+Extra constant evaluation status:
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:33:5 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:44:13 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:6:3 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:15 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:30 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:20:3 -> NullConstant(null)
+Extra constant evaluation: evaluated: 31, effectively constant: 6
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.textual_outline.expect b/pkg/front_end/testcases/macros/augment_super.dart.textual_outline.expect
new file mode 100644
index 0000000..ba14962
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+import augment 'augment_super_lib.dart';
+void topLevelMethod() {}
+void topLevelMethodErrors() {}
+List<int> get topLevelProperty => [42];
+void set topLevelProperty(List<int> value) {}
+class Class {
+  void instanceMethod() {}
+  void instanceMethodErrors() {}
+  int get instanceProperty => 42;
+  void set instanceProperty(int value) {}
+}
+main() {}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
new file mode 100644
index 0000000..d309789
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final has-declared-initializer dynamic #t2 in (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
new file mode 100644
index 0000000..d309789
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final has-declared-initializer dynamic #t2 in (null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.outline.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.outline.expect
new file mode 100644
index 0000000..ac6c7af
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.outline.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  method instanceMethod() → void
+    ;
+  method instanceMethodErrors() → void
+    ;
+  get instanceProperty() → core::int
+    ;
+  set instanceProperty(core::int value) → void
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void
+    ;
+}
+static method topLevelMethod() → void
+  ;
+static method topLevelMethodErrors() → void
+  ;
+static get topLevelProperty() → core::List<core::int>
+  ;
+static set topLevelProperty(core::List<core::int> value) → void
+  ;
+static method main() → dynamic
+  ;
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void
+  ;
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void
+  ;
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
new file mode 100644
index 0000000..6d9c5f8
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
@@ -0,0 +1,180 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:10:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+//   augment super = value;
+//                 ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super(); // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+//   augment super; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:27:3: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//   augment int local; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+//   augment; // Error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:37:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+//     augment super++;
+//     ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+//     --augment super;
+//       ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+//     augment super = value;
+//                   ^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+//     augment super; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:54:5: Error: Can't have modifier 'augment' here.
+// Try removing 'augment'.
+//     augment int local; // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+//     augment; // Error
+//     ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_super.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethod() → void {
+    (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceMethodErrors() → void {
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:38:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+  get /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty() → core::int {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:42:5: Error: Can't assign to this.
+    augment super++;
+    ^" in null as{ForNonNullableByDefault} dynamic;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:43:7: Error: Can't assign to this.
+    --augment super;
+      ^" in null as{ForNonNullableByDefault} dynamic;
+    return (null as{ForNonNullableByDefault} dynamic){dynamic}.unary-() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  }
+  set /* from org-dartlang-testcase:///augment_super_lib.dart */ instanceProperty(core::int value) → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:48:19: Error: Can't assign to this.
+    augment super = value;
+                  ^";
+  }
+  method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedInstanceMethod() → void {
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:52:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super(); // Error
+    ^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:53:5: Error: 'augment super' is only allowed in member augmentations.
+    augment super; // Error
+    ^^^^^^^";
+    core::int local;
+    invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:55:5: Error: The getter 'augment' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/augment_super.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'augment'.
+    augment; // Error
+    ^^^^^^^" in this{<unresolved>}.augment;
+  }
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
+}
+static method topLevelMethodErrors() → void {}
+static get /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty() → core::List<core::int> {
+  return block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<dynamic> :sync-for-iterator = ((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+          #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+        }
+      }
+    }
+    #t1.{core::List::add}{Invariant}((null as{ForNonNullableByDefault} dynamic){dynamic}.[](0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t1;
+}
+static set /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelProperty(core::List<core::int> value) → void {
+  (null as{ForNonNullableByDefault} dynamic){dynamic}.[]=(0, value.{core::List::[]}(1){(core::int) → core::int});
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:21:17: Error: Can't assign to this.
+  augment super = value;
+                ^";
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethodError() → void {
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:11:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+static method /* from org-dartlang-testcase:///augment_super_lib.dart */ injectedTopLevelMethod() → void {
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:25:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super(); // Error
+  ^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:26:3: Error: 'augment super' is only allowed in member augmentations.
+  augment super; // Error
+  ^^^^^^^";
+  core::int local;
+  invalid-expression "pkg/front_end/testcases/macros/augment_super_lib.dart:28:3: Error: Undefined name 'augment'.
+  augment; // Error
+  ^^^^^^^";
+}
+
+
+Extra constant evaluation status:
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:33:5 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:44:13 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:6:3 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:15 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:30 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:20:3 -> NullConstant(null)
+Extra constant evaluation: evaluated: 30, effectively constant: 6
diff --git a/pkg/front_end/testcases/macros/augment_super_lib.dart b/pkg/front_end/testcases/macros/augment_super_lib.dart
new file mode 100644
index 0000000..4922d49
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_super_lib.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local; // Error
+  augment; // Error
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super(); // Error
+  augment super; // Error
+  augment int local; // Error
+  augment; // Error
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local; // Error
+    augment; // Error
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super(); // Error
+    augment super; // Error
+    augment int local; // Error
+    augment; // Error
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 7f8673a..24f427a 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -153,6 +153,7 @@
 late_lowering/skip_late_final_uninitialized_instance_fields/main: FormatterCrash
 late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
 macros/augment_class: FormatterCrash
+macros/augment_super: FormatterCrash
 macros/class_members: FormatterCrash
 macros/inject_constructor: FormatterCrash
 macros/macro_class: FormatterCrash