parseUnit(augment)
  skipErrorTokens(augment)
  listener: beginCompilationUnit(augment)
  syntheticPreviousToken(augment)
  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
    parseMetadataStar()
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(topLevelMethod)
      parseFields(, null, null, null, null, null, null, null, , 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, null, 1, augment, ;)
  listener: endTopLevelDeclaration(;)
  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, 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, null)
                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, Template(ExpectedIdentifierButGotKeyword))
                        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(;, null)
                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                  looksLikeLocalFunction(()
                  parseExpressionStatement(;)
                    parseExpression(;)
                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                        parseUnaryExpression(;, true, ConstantPatternContext.none)
                          parsePrimary(;, expression, ConstantPatternContext.none)
                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
                              parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                listener: beginParenthesizedExpressionOrRecordLiteral(()
                                ensureCloseParen((, ()
                                listener: endRecordLiteral((, 0, null)
                    ensureSemicolon())
                    listener: handleExpressionStatement((, ;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(2, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(})
  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(topLevelMethodError)
      parseFields(}, null, null, null, null, null, null, null, }, 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, null, 1, augment, ;)
  listener: endTopLevelDeclaration(;)
  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, 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, null)
                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, null)
                looksLikeLocalFunction(local)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                      parseUnaryExpression(;, true, ConstantPatternContext.none)
                        parsePrimary(;, expression, ConstantPatternContext.none)
                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                            parseSend(;, expression, ConstantPatternContext.none)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(local, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(local)
                                listener: handleNoArguments(;)
                              listener: handleSend(local, ;)
                  ensureSemicolon(local)
                  listener: handleExpressionStatement(local, ;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                looksLikeLocalFunction(augment)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                      parseUnaryExpression(;, true, ConstantPatternContext.none)
                        parsePrimary(;, expression, ConstantPatternContext.none)
                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                            parseSend(;, expression, ConstantPatternContext.none)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(augment, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(augment)
                                listener: handleNoArguments(;)
                              listener: handleSend(augment, ;)
                  ensureSemicolon(augment)
                  listener: handleExpressionStatement(augment, ;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(3, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(})
  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      parseTopLevelMethod(}, null, null, }, 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(), BlockKind(function body))
            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(})
  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(})
      listener: beginMetadataStar(get)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(get)
      isReservedKeyword({)
      parseTopLevelMethod(}, null, null, }, 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, ConstantPatternContext.none)
                    parseUnaryExpression(return, true, ConstantPatternContext.none)
                      parsePrimary(return, expression, ConstantPatternContext.none)
                        listener: handleNoTypeArguments([)
                        parseLiteralListSuffix(return, null)
                          parseExpression(...)
                            parsePrecedenceExpression(..., 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(..., true, ConstantPatternContext.none)
                                parsePrimary(..., expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(..., expression, ConstantPatternContext.none)
                                    parseSend(..., expression, ConstantPatternContext.none)
                                      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, ConstantPatternContext.none)
                              parseUnaryExpression(,, true, ConstantPatternContext.none)
                                parsePrimary(,, expression, ConstantPatternContext.none)
                                  parseSuperExpression(,, expression)
                                    listener: handleSuperExpression(super, expression)
                          parseExpression(,)
                            parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(,, true, ConstantPatternContext.none)
                                parsePrimary(,, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(,, expression, ConstantPatternContext.none)
                                    parseSend(,, expression, ConstantPatternContext.none)
                                      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, ConstantPatternContext.none)
                              parseUnaryExpression(,, true, ConstantPatternContext.none)
                                parsePrimary(,, expression, ConstantPatternContext.none)
                                  parseSuperExpression(,, expression)
                                    listener: handleSuperExpression(super, expression)
                              parseArgumentOrIndexStar(super, NoTypeParamOrArg(), false)
                                parseExpression([)
                                  parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                    parseUnaryExpression([, true, ConstantPatternContext.none)
                                      parsePrimary([, expression, ConstantPatternContext.none)
                                        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(})
  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(set)
      parseFields(}, null, null, null, null, null, null, null, }, 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, null, 1, augment, ;)
  listener: endTopLevelDeclaration(;)
  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, 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, null)
                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, Template(ExpectedIdentifierButGotKeyword))
                        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(;, null)
                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                  looksLikeLocalFunction([)
                  parseExpressionStatement(;)
                    parseExpression(;)
                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                        parseUnaryExpression(;, true, ConstantPatternContext.none)
                          parsePrimary(;, expression, ConstantPatternContext.none)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix(;, null)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                  parseUnaryExpression([, true, ConstantPatternContext.none)
                                    parsePrimary([, expression, ConstantPatternContext.none)
                                      parseLiteralInt([)
                                        listener: handleLiteralInt(0)
                              listener: handleLiteralList(1, [, null, ])
                        parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                          parseUnaryExpression(=, true, ConstantPatternContext.none)
                            parsePrimary(=, expression, ConstantPatternContext.none)
                              parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
                                parseSend(=, expression, ConstantPatternContext.none)
                                  isNextIdentifier(=)
                                  ensureIdentifier(=, expression)
                                    listener: handleIdentifier(value, expression)
                                  listener: handleNoTypeArguments([)
                                  parseArgumentsOpt(value)
                                    listener: handleNoArguments([)
                                  listener: handleSend(value, [)
                          parseArgumentOrIndexStar(value, NoTypeParamOrArg(), false)
                            parseExpression([)
                              parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression([, true, ConstantPatternContext.none)
                                  parsePrimary([, expression, ConstantPatternContext.none)
                                    parseLiteralInt([)
                                      listener: handleLiteralInt(1)
                            listener: handleIndexedExpression(null, [, ])
                        listener: handleAssignmentExpression(=, ])
                    ensureSemicolon(])
                    listener: handleExpressionStatement([, ;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                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, Template(ExpectedIdentifierButGotKeyword))
                        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, ConstantPatternContext.none)
                          parseUnaryExpression(=, true, ConstantPatternContext.none)
                            parsePrimary(=, expression, ConstantPatternContext.none)
                              parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
                                parseSend(=, expression, ConstantPatternContext.none)
                                  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(})
  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, null, }, 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, null)
                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, Template(ExpectedIdentifierButGotKeyword))
                        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(;, null)
                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                  looksLikeLocalFunction(()
                  parseExpressionStatement(;)
                    parseExpression(;)
                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                        parseUnaryExpression(;, true, ConstantPatternContext.none)
                          parsePrimary(;, expression, ConstantPatternContext.none)
                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
                              parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                listener: beginParenthesizedExpressionOrRecordLiteral(()
                                ensureCloseParen((, ()
                                listener: endRecordLiteral((, 0, null)
                    ensureSemicolon())
                    listener: handleExpressionStatement((, ;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                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, Template(ExpectedIdentifierButGotKeyword))
                        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, null)
                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, null)
                looksLikeLocalFunction(local)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                      parseUnaryExpression(;, true, ConstantPatternContext.none)
                        parsePrimary(;, expression, ConstantPatternContext.none)
                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                            parseSend(;, expression, ConstantPatternContext.none)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(local, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(local)
                                listener: handleNoArguments(;)
                              listener: handleSend(local, ;)
                  ensureSemicolon(local)
                  listener: handleExpressionStatement(local, ;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                looksLikeLocalFunction(augment)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                      parseUnaryExpression(;, true, ConstantPatternContext.none)
                        parsePrimary(;, expression, ConstantPatternContext.none)
                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                            parseSend(;, expression, ConstantPatternContext.none)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(augment, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(augment)
                                listener: handleNoArguments(;)
                              listener: handleSend(augment, ;)
                  ensureSemicolon(augment)
                  listener: handleExpressionStatement(augment, ;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(6, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(})
  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(class)
      indicatesMethodOrField(Class)
      parseFields(}, null, null, null, null, null, null, null, }, 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, null, 1, augment, ;)
  listener: endTopLevelDeclaration(;)
  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
    parseMetadataStar(;)
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Class, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, Class)
        parseClass(Class, class, class, Class)
          parseClassHeaderOpt(Class, class, class)
            parseClassExtendsOpt(Class, DeclarationHeaderKind.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, {, 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, ;, VoidType(), null, instanceMethod, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod, Class)
                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, null)
                        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, Template(ExpectedIdentifierButGotKeyword))
                                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(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(()
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression(;, true, ConstantPatternContext.none)
                                  parsePrimary(;, expression, ConstantPatternContext.none)
                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
                                      parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
                                        ensureCloseParen((, ()
                                        listener: endRecordLiteral((, 0, null)
                            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, }, 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, ;, VoidType(), null, instanceMethodErrors, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors, Class)
                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, null)
                        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, null)
                        looksLikeLocalFunction(local)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(;, true, ConstantPatternContext.none)
                                parsePrimary(;, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                                    parseSend(;, expression, ConstantPatternContext.none)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(local, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(local)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(local, ;)
                          ensureSemicolon(local)
                          listener: handleExpressionStatement(local, ;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        looksLikeLocalFunction(augment)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(;, true, ConstantPatternContext.none)
                                parsePrimary(;, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                                    parseSend(;, expression, ConstantPatternContext.none)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(augment, ;)
                          ensureSemicolon(augment)
                          listener: handleExpressionStatement(augment, ;)
                  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, }, 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, ;, NoType(), get, instanceProperty, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty, Class)
                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, null)
                        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, Template(ExpectedIdentifierButGotKeyword))
                                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(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(++)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression(;, true, ConstantPatternContext.none)
                                  parsePrecedenceExpression(++, 16, true, ConstantPatternContext.none)
                                    parseUnaryExpression(++, true, ConstantPatternContext.none)
                                      parsePrimary(++, expression, ConstantPatternContext.none)
                                        parseSend(++, expression, ConstantPatternContext.none)
                                          isNextIdentifier(++)
                                          ensureIdentifier(++, expression)
                                            reportRecoverableErrorWithToken(;, Template(ExpectedIdentifier))
                                              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(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(--)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression(;, true, ConstantPatternContext.none)
                                  parsePrecedenceExpression(--, 16, true, ConstantPatternContext.none)
                                    parseUnaryExpression(--, true, ConstantPatternContext.none)
                                      parsePrimary(--, expression, ConstantPatternContext.none)
                                        parseSendOrFunctionLiteral(--, expression, ConstantPatternContext.none)
                                          parseSend(--, expression, ConstantPatternContext.none)
                                            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(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(super)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression(;, true, ConstantPatternContext.none)
                                  parsePrimary(;, expression, ConstantPatternContext.none)
                                    parseSuperExpression(;, expression)
                                      listener: handleSuperExpression(super, expression)
                            ensureSemicolon(super)
                            listener: handleExpressionStatement(super, ;)
                  notEofOrValue(}, return)
                  parseStatement(;)
                    parseStatementX(;)
                      parseReturnStatement(;)
                        listener: beginReturnStatement(return)
                        parseExpression(return)
                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                            parseUnaryExpression(return, true, ConstantPatternContext.none)
                              parsePrecedenceExpression(-, 16, true, ConstantPatternContext.none)
                                parseUnaryExpression(-, true, ConstantPatternContext.none)
                                  parsePrimary(-, expression, ConstantPatternContext.none)
                                    parseSendOrFunctionLiteral(-, expression, ConstantPatternContext.none)
                                      parseSend(-, expression, ConstantPatternContext.none)
                                        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(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(super)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression(;, true, ConstantPatternContext.none)
                                  parsePrimary(;, expression, ConstantPatternContext.none)
                                    parseSuperExpression(;, expression)
                                      listener: handleSuperExpression(super, expression)
                            ensureSemicolon(super)
                            listener: handleExpressionStatement(super, ;)
                  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, }, 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, ;, VoidType(), set, instanceProperty, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty, Class)
                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, null)
                        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, Template(ExpectedIdentifierButGotKeyword))
                                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, ConstantPatternContext.none)
                                  parseUnaryExpression(=, true, ConstantPatternContext.none)
                                    parsePrimary(=, expression, ConstantPatternContext.none)
                                      parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
                                        parseSend(=, expression, ConstantPatternContext.none)
                                          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, }, VoidType(), null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod, Class)
                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, null)
                        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, Template(ExpectedIdentifierButGotKeyword))
                                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(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(()
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                parseUnaryExpression(;, true, ConstantPatternContext.none)
                                  parsePrimary(;, expression, ConstantPatternContext.none)
                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
                                      parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
                                        ensureCloseParen((, ()
                                        listener: endRecordLiteral((, 0, null)
                            ensureSemicolon())
                            listener: handleExpressionStatement((, ;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        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, Template(ExpectedIdentifierButGotKeyword))
                                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, null)
                        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, null)
                        looksLikeLocalFunction(local)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(;, true, ConstantPatternContext.none)
                                parsePrimary(;, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                                    parseSend(;, expression, ConstantPatternContext.none)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(local, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(local)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(local, ;)
                          ensureSemicolon(local)
                          listener: handleExpressionStatement(local, ;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        looksLikeLocalFunction(augment)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(;, true, ConstantPatternContext.none)
                                parsePrimary(;, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
                                    parseSend(;, expression, ConstantPatternContext.none)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(augment, ;)
                          ensureSemicolon(augment)
                          listener: handleExpressionStatement(augment, ;)
                  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, )
