parseUnit(class)
  skipErrorTokens(class)
  listener: beginCompilationUnit(class)
  syntheticPreviousToken(class)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(class)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
      parseClassOrNamedMixinApplication(null, null, null, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(C, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, null, null, C)
        parseClass(C, class, class, C)
          parseClassHeaderOpt(C, class, class)
            parseClassExtendsOpt(C)
              listener: handleNoType(C)
              listener: handleClassExtends(null, 1)
            parseClassWithClauseOpt(C)
              listener: handleClassNoWithClause()
            parseClassOrMixinOrEnumImplementsOpt(C)
              listener: handleImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, C)
            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
              parseMetadataStar({)
                listener: beginMetadataStar(C)
                listener: endMetadataStar(0)
              listener: beginMember()
              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, C)
                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, C, false)
                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                  ensureIdentifier({, typeReference)
                    listener: handleIdentifier(C, typeReference)
                  listener: beginTypeArguments(<)
                  reportRecoverableErrorWithToken(}, Instance of 'Template<(Token) => Message>')
                    listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '}'., null, {lexeme: }}], }, })
                  rewriter()
                  listener: handleIdentifier(, typeReference)
                  listener: handleNoTypeArguments(})
                  listener: handleType(, null)
                  listener: endTypeArguments(1, <, >)
                  listener: handleType(C, null)
                  ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                    insertSyntheticIdentifier(>, fieldDeclaration, message: null, messageOnToken: null)
                      reportRecoverableError(}, Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}])
                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                      rewriter()
                    listener: handleIdentifier(, fieldDeclaration)
                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, C)
                    listener: handleNoFieldInitializer(})
                  ensureSemicolon()
                    reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
                    rewriter()
                  listener: endClassFields(null, null, null, null, null, null, null, 1, C, ;)
                listener: endMember()
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration(main)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(main)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(main)
      isReservedKeyword(()
      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
        listener: beginTopLevelMethod(}, null, null)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(main, topLevelFunctionDeclaration)
        parseMethodTypeVar(main)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
          parseFormalParameters(main, 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(}, C)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                looksLikeLocalFunction(C)
                parseExpressionStatement({)
                  parseExpression({)
                    parsePrecedenceExpression({, 1, true)
                      parseUnaryExpression({, true)
                        parsePrimary({, expression)
                          parseSendOrFunctionLiteral({, expression)
                            parseSend({, expression)
                              isNextIdentifier({)
                              ensureIdentifier({, expression)
                                listener: handleIdentifier(C, expression)
                              listener: handleNoTypeArguments(<)
                              parseArgumentsOpt(C)
                                listener: handleNoArguments(<)
                              listener: handleSend(C, <)
                      listener: beginBinaryExpression(<)
                      parsePrecedenceExpression(<, 9, 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: endBinaryExpression(<)
                  ensureSemicolon()
                    reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
                    rewriter()
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(class)
  listener: endCompilationUnit(2, )
