parseUnit(augment)
  skipErrorTokens(augment)
  listener: beginCompilationUnit(augment)
  syntheticPreviousToken(augment)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(topLevelMethod)
      parseFields(, null, null, null, null, null, null, null, , Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
        reportRecoverableError(augment, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
        listener: handleNoType()
        ensureIdentifierPotentiallyRecovered(, topLevelVariableDeclaration, false)
          listener: handleIdentifier(augment, topLevelVariableDeclaration)
        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(void)
        ensureSemicolon(augment)
          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, topLevelMethod, false)
        listener: beginTopLevelMethod(;, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
        parseMethodTypeVar(topLevelMethod)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(topLevelMethod, topLevelMethod, false, MemberKind.TopLevelMethod)
          parseFormalParameters(topLevelMethod, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, augment)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                      listener: handleIdentifier(super, localVariableDeclaration)
                    listener: beginInitializedIdentifier(super)
                    parseVariableInitializerOpt(super)
                      listener: handleNoVariableInitializer(super)
                    listener: endInitializedIdentifier(super)
                  ensureSemicolon(super)
                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
                    rewriter()
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, ()
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclaration(;, 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(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(topLevelMethodError)
      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
        reportRecoverableError(augment, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
          listener: handleIdentifier(augment, topLevelVariableDeclaration)
        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(void)
        ensureSemicolon(augment)
          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, topLevelMethodError, false)
        listener: beginTopLevelMethod(;, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
        parseMethodTypeVar(topLevelMethodError)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(topLevelMethodError, topLevelMethodError, false, MemberKind.TopLevelMethod)
          parseFormalParameters(topLevelMethodError, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, augment)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(local, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(local)
                                listener: handleNoArguments(;)
                              listener: handleSend(local, ;)
                  ensureSemicolon(local)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                looksLikeLocalFunction(augment)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                      parseUnaryExpression(;, true, ConstantPatternContext.none)
                        parsePrimary(;, expression, ConstantPatternContext.none)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(augment, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(augment)
                                listener: handleNoArguments(;)
                              listener: handleSend(augment, ;)
                  ensureSemicolon(augment)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(3, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, List, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleIdentifier(augment, typeReference)
        listener: handleNoTypeArguments(List)
        listener: handleType(augment, null)
        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(List, topLevelFunctionDeclaration)
        parseMethodTypeVar(List)
          listener: beginTypeVariables(<)
          listener: beginMetadataStar(int)
          listener: endMetadataStar(0)
          listener: handleIdentifier(int, typeVariableDeclaration)
          listener: beginTypeVariable(int)
          listener: handleTypeVariablesDefined(int, 1)
          listener: handleNoType(int)
          listener: endTypeVariable(>, 0, null, null)
          listener: endTypeVariables(<, >)
        parseGetterOrFormalParameters(>, List, false, MemberKind.TopLevelMethod)
          missingParameterMessage(MemberKind.TopLevelMethod)
          reportRecoverableError(List, MissingFunctionParameters)
            listener: handleRecoverableError(MissingFunctionParameters, List, List)
          rewriter()
          parseFormalParametersRest((, MemberKind.TopLevelMethod)
            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
            reportRecoverableError(get, Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}])
              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
            insertBlock())
              rewriter()
              rewriter()
          listener: handleInvalidFunctionBody({)
        listener: endTopLevelMethod(augment, null, })
  listener: endTopLevelDeclaration(get)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(get)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(get)
      isReservedKeyword({)
      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', get, topLevelProperty, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables({)
        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(topLevelProperty)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(topLevelProperty, false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, return)
          parseStatement({)
            parseStatementX({)
              parseReturnStatement({)
                listener: beginReturnStatement(return)
                parseExpression(return)
                  parsePrecedenceExpression(return, 1, true, 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)
                                    parseSend(..., expression)
                                      isNextIdentifier(...)
                                      ensureIdentifier(..., expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(super)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(super)
                                      listener: handleSend(augment, super)
                          listener: handleSpreadExpression(...)
                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
                            rewriter()
                          parseExpression(,)
                            parsePrecedenceExpression(,, 1, true, 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)
                                    parseSend(,, expression)
                                      isNextIdentifier(,)
                                      ensureIdentifier(,, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(super)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(super)
                                      listener: handleSend(augment, super)
                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
                            rewriter()
                          parseExpression(,)
                            parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(,, true, ConstantPatternContext.none)
                                parsePrimary(,, expression, ConstantPatternContext.none)
                                  parseSuperExpression(,, expression)
                                    listener: handleSuperExpression(super, expression)
                              parseArgumentOrIndexStar(super, Instance of '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(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(set)
      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
        reportRecoverableError(augment, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
          listener: handleIdentifier(augment, topLevelVariableDeclaration)
        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(void)
        ensureSemicolon(augment)
          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', set, topLevelProperty, false)
        listener: beginTopLevelMethod(;, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(List)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(int, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifier(>, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, augment)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                      listener: handleIdentifier(super, localVariableDeclaration)
                    listener: beginInitializedIdentifier(super)
                    parseVariableInitializerOpt(super)
                      listener: handleNoVariableInitializer(super)
                    listener: endInitializedIdentifier(super)
                  ensureSemicolon(super)
                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
                    rewriter()
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, [)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclaration(;, 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)
                                parseSend(=, expression)
                                  isNextIdentifier(=)
                                  ensureIdentifier(=, expression)
                                    listener: handleIdentifier(value, expression)
                                  listener: handleNoTypeArguments([)
                                  parseArgumentsOpt(value)
                                    listener: handleNoArguments([)
                                  listener: handleSend(value, [)
                          parseArgumentOrIndexStar(value, Instance of 'NoTypeParamOrArg', false)
                            parseExpression([)
                              parsePrecedenceExpression([, 1, true, 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, Instance of 'Template<(Token) => Message>')
                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                      listener: handleIdentifier(super, localVariableDeclaration)
                    listener: beginInitializedIdentifier(super)
                    parseVariableInitializerOpt(super)
                      listener: beginVariableInitializer(=)
                      parseExpression(=)
                        parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                          parseUnaryExpression(=, true, ConstantPatternContext.none)
                            parsePrimary(=, expression, ConstantPatternContext.none)
                              parseSendOrFunctionLiteral(=, expression)
                                parseSend(=, expression)
                                  isNextIdentifier(=)
                                  ensureIdentifier(=, expression)
                                    listener: handleIdentifier(value, expression)
                                  listener: handleNoTypeArguments(;)
                                  parseArgumentsOpt(value)
                                    listener: handleNoArguments(;)
                                  listener: handleSend(value, ;)
                      listener: endVariableInitializer(=)
                    listener: endInitializedIdentifier(super)
                  ensureSemicolon(value)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(3, {, })
        listener: endTopLevelMethod(void, set, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, injectedTopLevelMethod, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
        parseMethodTypeVar(injectedTopLevelMethod)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
          parseFormalParameters(injectedTopLevelMethod, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, augment)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                      listener: handleIdentifier(super, localVariableDeclaration)
                    listener: beginInitializedIdentifier(super)
                    parseVariableInitializerOpt(super)
                      listener: handleNoVariableInitializer(super)
                    listener: endInitializedIdentifier(super)
                  ensureSemicolon(super)
                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
                    rewriter()
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, ()
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclaration(;, 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, Instance of 'Template<(Token) => Message>')
                        listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                      listener: handleIdentifier(super, localVariableDeclaration)
                    listener: beginInitializedIdentifier(super)
                    parseVariableInitializerOpt(super)
                      listener: handleNoVariableInitializer(super)
                    listener: endInitializedIdentifier(super)
                  ensureSemicolon(super)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, 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)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(local, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(local)
                                listener: handleNoArguments(;)
                              listener: handleSend(local, ;)
                  ensureSemicolon(local)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                looksLikeLocalFunction(augment)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                      parseUnaryExpression(;, true, ConstantPatternContext.none)
                        parsePrimary(;, expression, ConstantPatternContext.none)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(augment, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(augment)
                                listener: handleNoArguments(;)
                              listener: handleSend(augment, ;)
                  ensureSemicolon(augment)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(6, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(class)
      indicatesMethodOrField(Class)
      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
        reportRecoverableError(augment, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
          listener: handleIdentifier(augment, topLevelVariableDeclaration)
        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(class)
        ensureSemicolon(augment)
          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(class)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, class, null, null, null, null, null, Instance of 'DirectiveContext')
      parseClassOrNamedMixinApplication(null, 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, null, Class)
        parseClass(Class, class, class, Class)
          parseClassHeaderOpt(Class, class, class)
            parseClassExtendsOpt(Class)
              listener: handleNoType(Class)
              listener: handleClassExtends(null, 1)
            parseClassWithClauseOpt(Class)
              listener: handleClassNoWithClause()
            parseClassOrMixinOrEnumImplementsOpt(Class)
              listener: handleImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, augment)
            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
              parseMetadataStar({)
                listener: beginMetadataStar(augment)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(void)
              indicatesMethodOrField(instanceMethod)
              parseFields({, null, null, null, null, null, null, null, {, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                reportRecoverableError(augment, MissingConstFinalVarOrType)
                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
                listener: handleNoType({)
                ensureIdentifierPotentiallyRecovered({, fieldDeclaration, false)
                  listener: handleIdentifier(augment, fieldDeclaration)
                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
                  listener: handleNoFieldInitializer(void)
                ensureSemicolon(augment)
                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                  rewriter()
                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
              listener: endMember()
            notEofOrValue(}, void)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
              parseMetadataStar(;)
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, instanceMethod, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod)
                listener: handleVoidKeyword(void)
                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                  listener: handleIdentifier(instanceMethod, methodDeclaration)
                parseQualifiedRestOpt(instanceMethod, methodDeclarationContinuation)
                parseMethodTypeVar(instanceMethod)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(instanceMethod, instanceMethod, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(instanceMethod, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                              listener: handleIdentifier(super, localVariableDeclaration)
                            listener: beginInitializedIdentifier(super)
                            parseVariableInitializerOpt(super)
                              listener: handleNoVariableInitializer(super)
                            listener: endInitializedIdentifier(super)
                          ensureSemicolon(super)
                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
                            rewriter()
                          listener: endVariablesDeclaration(1, ;)
                  notEofOrValue(}, ()
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, 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, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                reportRecoverableError(augment, MissingConstFinalVarOrType)
                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
                  listener: handleIdentifier(augment, fieldDeclaration)
                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
                  listener: handleNoFieldInitializer(void)
                ensureSemicolon(augment)
                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                  rewriter()
                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
              listener: endMember()
            notEofOrValue(}, void)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
              parseMetadataStar(;)
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, instanceMethodErrors, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors)
                listener: handleVoidKeyword(void)
                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                  listener: handleIdentifier(instanceMethodErrors, methodDeclaration)
                parseQualifiedRestOpt(instanceMethodErrors, methodDeclarationContinuation)
                parseMethodTypeVar(instanceMethodErrors)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(instanceMethodErrors, instanceMethodErrors, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(instanceMethodErrors, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(local, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(local)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(local, ;)
                          ensureSemicolon(local)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        looksLikeLocalFunction(augment)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(;, true, ConstantPatternContext.none)
                                parsePrimary(;, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(;, expression)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(augment, ;)
                          ensureSemicolon(augment)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(3, {, })
                listener: endClassMethod(null, void, (, null, })
              listener: endMember()
            notEofOrValue(}, augment)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
              parseMetadataStar(})
                listener: beginMetadataStar(augment)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', int, DeclarationKind.Class, Class, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                listener: handleIdentifier(augment, typeReference)
                listener: handleNoTypeArguments(int)
                listener: handleType(augment, null)
                ensureIdentifierPotentiallyRecovered(augment, fieldDeclaration, false)
                  listener: handleIdentifier(int, fieldDeclaration)
                parseFieldInitializerOpt(int, int, null, null, null, null, null, DeclarationKind.Class, Class)
                  listener: handleNoFieldInitializer(get)
                ensureSemicolon(int)
                  reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
                  rewriter()
                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
              listener: endMember()
            notEofOrValue(}, get)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
              parseMetadataStar(;)
                listener: beginMetadataStar(get)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, instanceProperty, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty)
                listener: handleNoType(;)
                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                  listener: handleIdentifier(instanceProperty, methodDeclaration)
                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
                listener: handleNoTypeVariables({)
                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
                parseInitializersOpt(instanceProperty)
                  listener: handleNoInitializers()
                parseAsyncModifierOpt(instanceProperty)
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(instanceProperty, false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                              listener: handleIdentifier(super, localVariableDeclaration)
                            listener: beginInitializedIdentifier(super)
                            parseVariableInitializerOpt(super)
                              listener: handleNoVariableInitializer(super)
                            listener: endInitializedIdentifier(super)
                          ensureSemicolon(super)
                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
                            rewriter()
                          listener: endVariablesDeclaration(1, ;)
                  notEofOrValue(}, ++)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, 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)
                                          isNextIdentifier(++)
                                          ensureIdentifier(++, expression)
                                            reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
                                            rewriter()
                                            listener: handleIdentifier(, expression)
                                          listener: handleNoTypeArguments(;)
                                          parseArgumentsOpt()
                                            listener: handleNoArguments(;)
                                          listener: handleSend(, ;)
                                  listener: handleUnaryPrefixAssignmentExpression(++)
                            ensureSemicolon()
                            listener: handleExpressionStatement(;)
                  notEofOrValue(}, --)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, 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)
                                          parseSend(--, expression)
                                            isNextIdentifier(--)
                                            ensureIdentifier(--, expression)
                                              listener: handleIdentifier(augment, expression)
                                            listener: handleNoTypeArguments(super)
                                            parseArgumentsOpt(augment)
                                              listener: handleNoArguments(super)
                                            listener: handleSend(augment, super)
                                  listener: handleUnaryPrefixAssignmentExpression(--)
                            ensureSemicolon(augment)
                              reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                              rewriter()
                            listener: handleExpressionStatement(;)
                  notEofOrValue(}, super)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, 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(;)
                  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)
                                      parseSend(-, expression)
                                        isNextIdentifier(-)
                                        ensureIdentifier(-, expression)
                                          listener: handleIdentifier(augment, expression)
                                        listener: handleNoTypeArguments(super)
                                        parseArgumentsOpt(augment)
                                          listener: handleNoArguments(super)
                                        listener: handleSend(augment, super)
                              listener: handleUnaryPrefixExpression(-)
                        ensureSemicolon(augment)
                          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                          rewriter()
                        listener: endReturnStatement(true, return, ;)
                        inGenerator()
                  notEofOrValue(}, super)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, 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(;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(6, {, })
                listener: endClassMethod(get, get, {, null, })
              listener: endMember()
            notEofOrValue(}, augment)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
              parseMetadataStar(})
                listener: beginMetadataStar(augment)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(void)
              indicatesMethodOrField(set)
              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                reportRecoverableError(augment, MissingConstFinalVarOrType)
                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
                  listener: handleIdentifier(augment, fieldDeclaration)
                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
                  listener: handleNoFieldInitializer(void)
                ensureSemicolon(augment)
                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                  rewriter()
                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
              listener: endMember()
            notEofOrValue(}, void)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
              parseMetadataStar(;)
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', set, instanceProperty, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty)
                listener: handleVoidKeyword(void)
                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                  listener: handleIdentifier(instanceProperty, methodDeclaration)
                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
                listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                        parseMetadataStar(()
                          listener: beginMetadataStar(int)
                          listener: endMetadataStar(0)
                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
                        listener: handleIdentifier(int, typeReference)
                        listener: handleNoTypeArguments(value)
                        listener: handleType(int, null)
                        ensureIdentifier(int, formalParameterDeclaration)
                          listener: handleIdentifier(value, formalParameterDeclaration)
                        listener: handleFormalParameterWithoutValue())
                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                              listener: handleIdentifier(super, localVariableDeclaration)
                            listener: beginInitializedIdentifier(super)
                            parseVariableInitializerOpt(super)
                              listener: beginVariableInitializer(=)
                              parseExpression(=)
                                parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                  parseUnaryExpression(=, true, ConstantPatternContext.none)
                                    parsePrimary(=, expression, ConstantPatternContext.none)
                                      parseSendOrFunctionLiteral(=, expression)
                                        parseSend(=, expression)
                                          isNextIdentifier(=)
                                          ensureIdentifier(=, expression)
                                            listener: handleIdentifier(value, expression)
                                          listener: handleNoTypeArguments(;)
                                          parseArgumentsOpt(value)
                                            listener: handleNoArguments(;)
                                          listener: handleSend(value, ;)
                              listener: endVariableInitializer(=)
                            listener: endInitializedIdentifier(super)
                          ensureSemicolon(value)
                          listener: endVariablesDeclaration(1, ;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(1, {, })
                listener: endClassMethod(set, void, (, null, })
              listener: endMember()
            notEofOrValue(}, void)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
              parseMetadataStar(})
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
                listener: handleVoidKeyword(void)
                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
                parseMethodTypeVar(injectedInstanceMethod)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(injectedInstanceMethod, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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, Instance of 'Template<(Token) => Message>')
                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                              listener: handleIdentifier(super, localVariableDeclaration)
                            listener: beginInitializedIdentifier(super)
                            parseVariableInitializerOpt(super)
                              listener: handleNoVariableInitializer(super)
                            listener: endInitializedIdentifier(super)
                          ensureSemicolon(super)
                            reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
                            rewriter()
                          listener: endVariablesDeclaration(1, ;)
                  notEofOrValue(}, ()
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, 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, Instance of 'Template<(Token) => Message>')
                                listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                              listener: handleIdentifier(super, localVariableDeclaration)
                            listener: beginInitializedIdentifier(super)
                            parseVariableInitializerOpt(super)
                              listener: handleNoVariableInitializer(super)
                            listener: endInitializedIdentifier(super)
                          ensureSemicolon(super)
                          listener: endVariablesDeclaration(1, ;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, 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)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(local, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(local)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(local, ;)
                          ensureSemicolon(local)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        looksLikeLocalFunction(augment)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                              parseUnaryExpression(;, true, ConstantPatternContext.none)
                                parsePrimary(;, expression, ConstantPatternContext.none)
                                  parseSendOrFunctionLiteral(;, expression)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(augment, ;)
                          ensureSemicolon(augment)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(6, {, })
                listener: endClassMethod(null, void, (, null, })
              listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(augment)
  listener: endCompilationUnit(11, )
