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)
                        parseUnaryExpression(;, true)
                          parsePrimary(;, expression)
                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;)
                              parseParenthesizedExpressionOrRecordLiteral(;, null)
                                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)
                      parseUnaryExpression(;, true)
                        parsePrimary(;, expression)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(local, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(local)
                                listener: handleNoArguments(;)
                              listener: handleSend(local, ;)
                  ensureSemicolon(local)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                looksLikeLocalFunction(augment)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true)
                      parseUnaryExpression(;, true)
                        parsePrimary(;, expression)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(augment, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(augment)
                                listener: handleNoArguments(;)
                              listener: handleSend(augment, ;)
                  ensureSemicolon(augment)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(3, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, List, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleIdentifier(augment, typeReference)
        listener: handleNoTypeArguments(List)
        listener: handleType(augment, null)
        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(List, topLevelFunctionDeclaration)
        parseMethodTypeVar(List)
          listener: beginTypeVariables(<)
          listener: beginMetadataStar(int)
          listener: endMetadataStar(0)
          listener: handleIdentifier(int, typeVariableDeclaration)
          listener: beginTypeVariable(int)
          listener: handleTypeVariablesDefined(int, 1)
          listener: handleNoType(int)
          listener: endTypeVariable(>, 0, null, null)
          listener: endTypeVariables(<, >)
        parseGetterOrFormalParameters(>, List, false, MemberKind.TopLevelMethod)
          missingParameterMessage(MemberKind.TopLevelMethod)
          reportRecoverableError(List, MissingFunctionParameters)
            listener: handleRecoverableError(MissingFunctionParameters, List, List)
          rewriter()
          parseFormalParametersRest((, MemberKind.TopLevelMethod)
            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
            reportRecoverableError(get, Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}])
              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
            insertBlock())
              rewriter()
              rewriter()
          listener: handleInvalidFunctionBody({)
        listener: endTopLevelMethod(augment, null, })
  listener: endTopLevelDeclaration(get)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(get)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(get)
      isReservedKeyword({)
      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', get, topLevelProperty, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables({)
        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(topLevelProperty)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(topLevelProperty, false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, return)
          parseStatement({)
            parseStatementX({)
              parseReturnStatement({)
                listener: beginReturnStatement(return)
                parseExpression(return)
                  parsePrecedenceExpression(return, 1, true)
                    parseUnaryExpression(return, true)
                      parsePrimary(return, expression)
                        listener: handleNoTypeArguments([)
                        parseLiteralListSuffix(return, null)
                          parseExpression(...)
                            parsePrecedenceExpression(..., 1, true)
                              parseUnaryExpression(..., true)
                                parsePrimary(..., expression)
                                  parseSendOrFunctionLiteral(..., expression)
                                    parseSend(..., expression)
                                      isNextIdentifier(...)
                                      ensureIdentifier(..., expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(super)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(super)
                                      listener: handleSend(augment, super)
                          listener: handleSpreadExpression(...)
                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
                            rewriter()
                          parseExpression(,)
                            parsePrecedenceExpression(,, 1, true)
                              parseUnaryExpression(,, true)
                                parsePrimary(,, expression)
                                  parseSuperExpression(,, expression)
                                    listener: handleSuperExpression(super, expression)
                          parseExpression(,)
                            parsePrecedenceExpression(,, 1, true)
                              parseUnaryExpression(,, true)
                                parsePrimary(,, expression)
                                  parseSendOrFunctionLiteral(,, expression)
                                    parseSend(,, expression)
                                      isNextIdentifier(,)
                                      ensureIdentifier(,, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(super)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(super)
                                      listener: handleSend(augment, super)
                          rewriteAndRecover(augment, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
                            reportRecoverableError(super, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
                              listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], super, super)
                            rewriter()
                          parseExpression(,)
                            parsePrecedenceExpression(,, 1, true)
                              parseUnaryExpression(,, true)
                                parsePrimary(,, expression)
                                  parseSuperExpression(,, expression)
                                    listener: handleSuperExpression(super, expression)
                              parseArgumentOrIndexStar(super, Instance of 'NoTypeParamOrArg', false)
                                parseExpression([)
                                  parsePrecedenceExpression([, 1, true)
                                    parseUnaryExpression([, true)
                                      parsePrimary([, expression)
                                        parseLiteralInt([)
                                          listener: handleLiteralInt(0)
                                listener: handleIndexedExpression(null, [, ])
                          listener: handleLiteralList(4, [, null, ])
                ensureSemicolon(])
                listener: endReturnStatement(true, return, ;)
                inGenerator()
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(get, get, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(void)
      indicatesMethodOrField(set)
      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
        reportRecoverableError(augment, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
          listener: handleIdentifier(augment, topLevelVariableDeclaration)
        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(void)
        ensureSemicolon(augment)
          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', set, topLevelProperty, false)
        listener: beginTopLevelMethod(;, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(List)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(List, typeReference)
                listener: beginTypeArguments(<)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(>)
                listener: handleType(int, null)
                listener: endTypeArguments(1, <, >)
                listener: handleType(List, null)
                ensureIdentifier(>, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, augment)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                        parseUnaryExpression(;, true)
                          parsePrimary(;, expression)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix(;, null)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true)
                                  parseUnaryExpression([, true)
                                    parsePrimary([, expression)
                                      parseLiteralInt([)
                                        listener: handleLiteralInt(0)
                              listener: handleLiteralList(1, [, null, ])
                        parsePrecedenceExpression(=, 1, true)
                          parseUnaryExpression(=, true)
                            parsePrimary(=, expression)
                              parseSendOrFunctionLiteral(=, expression)
                                parseSend(=, expression)
                                  isNextIdentifier(=)
                                  ensureIdentifier(=, expression)
                                    listener: handleIdentifier(value, expression)
                                  listener: handleNoTypeArguments([)
                                  parseArgumentsOpt(value)
                                    listener: handleNoArguments([)
                                  listener: handleSend(value, [)
                          parseArgumentOrIndexStar(value, Instance of 'NoTypeParamOrArg', false)
                            parseExpression([)
                              parsePrecedenceExpression([, 1, true)
                                parseUnaryExpression([, true)
                                  parsePrimary([, expression)
                                    parseLiteralInt([)
                                      listener: handleLiteralInt(1)
                            listener: handleIndexedExpression(null, [, ])
                        listener: handleAssignmentExpression(=)
                    ensureSemicolon(])
                    listener: handleExpressionStatement(;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, 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)
                          parseUnaryExpression(=, true)
                            parsePrimary(=, expression)
                              parseSendOrFunctionLiteral(=, expression)
                                parseSend(=, expression)
                                  isNextIdentifier(=)
                                  ensureIdentifier(=, expression)
                                    listener: handleIdentifier(value, expression)
                                  listener: handleNoTypeArguments(;)
                                  parseArgumentsOpt(value)
                                    listener: handleNoArguments(;)
                                  listener: handleSend(value, ;)
                      listener: endVariableInitializer(=)
                    listener: endInitializedIdentifier(super)
                  ensureSemicolon(value)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(3, {, })
        listener: endTopLevelMethod(void, set, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, injectedTopLevelMethod, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
        parseMethodTypeVar(injectedTopLevelMethod)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
          parseFormalParameters(injectedTopLevelMethod, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, augment)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                        parseUnaryExpression(;, true)
                          parsePrimary(;, expression)
                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;)
                              parseParenthesizedExpressionOrRecordLiteral(;, null)
                                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)
                      parseUnaryExpression(;, true)
                        parsePrimary(;, expression)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(local, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(local)
                                listener: handleNoArguments(;)
                              listener: handleSend(local, ;)
                  ensureSemicolon(local)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, augment)
          parseStatement(;)
            parseStatementX(;)
              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                looksLikeLocalFunction(augment)
                parseExpressionStatement(;)
                  parseExpression(;)
                    parsePrecedenceExpression(;, 1, true)
                      parseUnaryExpression(;, true)
                        parsePrimary(;, expression)
                          parseSendOrFunctionLiteral(;, expression)
                            parseSend(;, expression)
                              isNextIdentifier(;)
                              ensureIdentifier(;, expression)
                                listener: handleIdentifier(augment, expression)
                              listener: handleNoTypeArguments(;)
                              parseArgumentsOpt(augment)
                                listener: handleNoArguments(;)
                              listener: handleSend(augment, ;)
                  ensureSemicolon(augment)
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(6, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      isReservedKeyword(class)
      indicatesMethodOrField(Class)
      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
        reportRecoverableError(augment, MissingConstFinalVarOrType)
          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
          listener: handleIdentifier(augment, topLevelVariableDeclaration)
        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(class)
        ensureSemicolon(augment)
          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(class)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, class, null, 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)
                                parseUnaryExpression(;, true)
                                  parsePrimary(;, expression)
                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;)
                                      parseParenthesizedExpressionOrRecordLiteral(;, null)
                                        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)
                              parseUnaryExpression(;, true)
                                parsePrimary(;, expression)
                                  parseSendOrFunctionLiteral(;, expression)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(local, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(local)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(local, ;)
                          ensureSemicolon(local)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        looksLikeLocalFunction(augment)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true)
                              parseUnaryExpression(;, true)
                                parsePrimary(;, expression)
                                  parseSendOrFunctionLiteral(;, expression)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(augment, ;)
                          ensureSemicolon(augment)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(3, {, })
                listener: endClassMethod(null, void, (, null, })
              listener: endMember()
            notEofOrValue(}, augment)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
              parseMetadataStar(})
                listener: beginMetadataStar(augment)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', int, DeclarationKind.Class, Class, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                listener: handleIdentifier(augment, typeReference)
                listener: handleNoTypeArguments(int)
                listener: handleType(augment, null)
                ensureIdentifierPotentiallyRecovered(augment, fieldDeclaration, false)
                  listener: handleIdentifier(int, fieldDeclaration)
                parseFieldInitializerOpt(int, int, null, null, null, null, null, DeclarationKind.Class, Class)
                  listener: handleNoFieldInitializer(get)
                ensureSemicolon(int)
                  reportRecoverableError(int, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], int, int)
                  rewriter()
                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
              listener: endMember()
            notEofOrValue(}, get)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
              parseMetadataStar(;)
                listener: beginMetadataStar(get)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, instanceProperty, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty)
                listener: handleNoType(;)
                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                  listener: handleIdentifier(instanceProperty, methodDeclaration)
                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
                listener: handleNoTypeVariables({)
                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
                parseInitializersOpt(instanceProperty)
                  listener: handleNoInitializers()
                parseAsyncModifierOpt(instanceProperty)
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(instanceProperty, false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                                parseUnaryExpression(;, true)
                                  parsePrecedenceExpression(++, 16, true)
                                    parseUnaryExpression(++, true)
                                      parsePrimary(++, expression)
                                        parseSend(++, expression)
                                          isNextIdentifier(++)
                                          ensureIdentifier(++, expression)
                                            reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                                              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
                                            rewriter()
                                            listener: handleIdentifier(, expression)
                                          listener: handleNoTypeArguments(;)
                                          parseArgumentsOpt()
                                            listener: handleNoArguments(;)
                                          listener: handleSend(, ;)
                                  listener: handleUnaryPrefixAssignmentExpression(++)
                            ensureSemicolon()
                            listener: handleExpressionStatement(;)
                  notEofOrValue(}, --)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(--)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true)
                                parseUnaryExpression(;, true)
                                  parsePrecedenceExpression(--, 16, true)
                                    parseUnaryExpression(--, true)
                                      parsePrimary(--, expression)
                                        parseSendOrFunctionLiteral(--, expression)
                                          parseSend(--, expression)
                                            isNextIdentifier(--)
                                            ensureIdentifier(--, expression)
                                              listener: handleIdentifier(augment, expression)
                                            listener: handleNoTypeArguments(super)
                                            parseArgumentsOpt(augment)
                                              listener: handleNoArguments(super)
                                            listener: handleSend(augment, super)
                                  listener: handleUnaryPrefixAssignmentExpression(--)
                            ensureSemicolon(augment)
                              reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                              rewriter()
                            listener: handleExpressionStatement(;)
                  notEofOrValue(}, super)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(super)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true)
                                parseUnaryExpression(;, true)
                                  parsePrimary(;, expression)
                                    parseSuperExpression(;, expression)
                                      listener: handleSuperExpression(super, expression)
                            ensureSemicolon(super)
                            listener: handleExpressionStatement(;)
                  notEofOrValue(}, return)
                  parseStatement(;)
                    parseStatementX(;)
                      parseReturnStatement(;)
                        listener: beginReturnStatement(return)
                        parseExpression(return)
                          parsePrecedenceExpression(return, 1, true)
                            parseUnaryExpression(return, true)
                              parsePrecedenceExpression(-, 16, true)
                                parseUnaryExpression(-, true)
                                  parsePrimary(-, expression)
                                    parseSendOrFunctionLiteral(-, expression)
                                      parseSend(-, expression)
                                        isNextIdentifier(-)
                                        ensureIdentifier(-, expression)
                                          listener: handleIdentifier(augment, expression)
                                        listener: handleNoTypeArguments(super)
                                        parseArgumentsOpt(augment)
                                          listener: handleNoArguments(super)
                                        listener: handleSend(augment, super)
                              listener: handleUnaryPrefixExpression(-)
                        ensureSemicolon(augment)
                          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                          rewriter()
                        listener: endReturnStatement(true, return, ;)
                        inGenerator()
                  notEofOrValue(}, super)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclaration(;, null)
                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                          looksLikeLocalFunction(super)
                          parseExpressionStatement(;)
                            parseExpression(;)
                              parsePrecedenceExpression(;, 1, true)
                                parseUnaryExpression(;, true)
                                  parsePrimary(;, expression)
                                    parseSuperExpression(;, expression)
                                      listener: handleSuperExpression(super, expression)
                            ensureSemicolon(super)
                            listener: handleExpressionStatement(;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(6, {, })
                listener: endClassMethod(get, get, {, null, })
              listener: endMember()
            notEofOrValue(}, augment)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
              parseMetadataStar(})
                listener: beginMetadataStar(augment)
                listener: endMetadataStar(0)
              listener: beginMember()
              isReservedKeyword(void)
              indicatesMethodOrField(set)
              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.Class, Class, false)
                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                reportRecoverableError(augment, MissingConstFinalVarOrType)
                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
                listener: handleNoType(})
                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
                  listener: handleIdentifier(augment, fieldDeclaration)
                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
                  listener: handleNoFieldInitializer(void)
                ensureSemicolon(augment)
                  reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
                  rewriter()
                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
              listener: endMember()
            notEofOrValue(}, void)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
              parseMetadataStar(;)
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', set, instanceProperty, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty)
                listener: handleVoidKeyword(void)
                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                  listener: handleIdentifier(instanceProperty, methodDeclaration)
                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
                listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                        parseMetadataStar(()
                          listener: beginMetadataStar(int)
                          listener: endMetadataStar(0)
                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
                        listener: handleIdentifier(int, typeReference)
                        listener: handleNoTypeArguments(value)
                        listener: handleType(int, null)
                        ensureIdentifier(int, formalParameterDeclaration)
                          listener: handleIdentifier(value, formalParameterDeclaration)
                        listener: handleFormalParameterWithoutValue())
                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                                  parseUnaryExpression(=, true)
                                    parsePrimary(=, expression)
                                      parseSendOrFunctionLiteral(=, expression)
                                        parseSend(=, expression)
                                          isNextIdentifier(=)
                                          ensureIdentifier(=, expression)
                                            listener: handleIdentifier(value, expression)
                                          listener: handleNoTypeArguments(;)
                                          parseArgumentsOpt(value)
                                            listener: handleNoArguments(;)
                                          listener: handleSend(value, ;)
                              listener: endVariableInitializer(=)
                            listener: endInitializedIdentifier(super)
                          ensureSemicolon(value)
                          listener: endVariablesDeclaration(1, ;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(1, {, })
                listener: endClassMethod(set, void, (, null, })
              listener: endMember()
            notEofOrValue(}, void)
            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
              parseMetadataStar(})
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginMember()
              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod)
                listener: handleVoidKeyword(void)
                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
                parseMethodTypeVar(injectedInstanceMethod)
                  listener: handleNoTypeVariables(()
                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
                  parseFormalParameters(injectedInstanceMethod, MemberKind.NonStaticMethod)
                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
                parseInitializersOpt())
                  listener: handleNoInitializers()
                parseAsyncModifierOpt())
                  listener: handleAsyncModifier(null, null)
                  inPlainSync()
                inPlainSync()
                parseFunctionBody(), false, true)
                  listener: beginBlockFunctionBody({)
                  notEofOrValue(}, augment)
                  parseStatement({)
                    parseStatementX({)
                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, 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)
                                parseUnaryExpression(;, true)
                                  parsePrimary(;, expression)
                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;)
                                      parseParenthesizedExpressionOrRecordLiteral(;, null)
                                        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)
                              parseUnaryExpression(;, true)
                                parsePrimary(;, expression)
                                  parseSendOrFunctionLiteral(;, expression)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(local, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(local)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(local, ;)
                          ensureSemicolon(local)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, augment)
                  parseStatement(;)
                    parseStatementX(;)
                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
                        looksLikeLocalFunction(augment)
                        parseExpressionStatement(;)
                          parseExpression(;)
                            parsePrecedenceExpression(;, 1, true)
                              parseUnaryExpression(;, true)
                                parsePrimary(;, expression)
                                  parseSendOrFunctionLiteral(;, expression)
                                    parseSend(;, expression)
                                      isNextIdentifier(;)
                                      ensureIdentifier(;, expression)
                                        listener: handleIdentifier(augment, expression)
                                      listener: handleNoTypeArguments(;)
                                      parseArgumentsOpt(augment)
                                        listener: handleNoArguments(;)
                                      listener: handleSend(augment, ;)
                          ensureSemicolon(augment)
                          listener: handleExpressionStatement(;)
                  notEofOrValue(}, })
                  listener: endBlockFunctionBody(6, {, })
                listener: endClassMethod(null, void, (, null, })
              listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(augment)
  listener: endCompilationUnit(11, )
