parseUnit(void)
  skipErrorTokens(void)
  listener: beginCompilationUnit(void)
  syntheticPreviousToken(void)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(, null, , Instance of 'VoidType', null, good, false)
        listener: beginTopLevelMethod(, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(good, topLevelFunctionDeclaration)
        parseMethodTypeVar(good)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(good, good, false, MemberKind.TopLevelMethod)
          parseFormalParameters(good, 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(}, [)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclaration({, false)
                parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                  looksLikeLocalFunction([)
                  parseExpressionStatement({)
                    parseExpression({)
                      parsePrecedenceExpression({, 1, true)
                        parseUnaryExpression({, true)
                          parsePrimary({, expression)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix({, null)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true)
                                  parseUnaryExpression([, true)
                                    parsePrimary([, expression)
                                      parseParenthesizedExpressionOrFunctionLiteral([)
                                        parseParenthesizedExpression([)
                                          parseExpressionInParenthesis([)
                                            parseExpressionInParenthesisRest(()
                                              parseExpression(()
                                                parsePrecedenceExpression((, 1, true)
                                                  parseUnaryExpression((, true)
                                                    parsePrimary((, expression)
                                                      listener: handleNoTypeArguments([)
                                                      parseLiteralListSuffix((, null)
                                                        listener: handleLiteralList(0, [, null, ])
                                              ensureCloseParen(], ()
                                          listener: handleParenthesizedExpression(()
                              listener: handleLiteralList(1, [, null, ])
                    ensureSemicolon(])
                    listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, bad, false)
        listener: beginTopLevelMethod(}, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(bad, topLevelFunctionDeclaration)
        parseMethodTypeVar(bad)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(bad, bad, false, MemberKind.TopLevelMethod)
          parseFormalParameters(bad, 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(}, [)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclaration({, false)
                parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                  looksLikeLocalFunction([)
                  parseExpressionStatement({)
                    parseExpression({)
                      parsePrecedenceExpression({, 1, true)
                        parseUnaryExpression({, true)
                          parsePrimary({, expression)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix({, null)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true)
                                  parseUnaryExpression([, true)
                                    parsePrimary([, expression)
                                      parseParenthesizedExpressionOrFunctionLiteral([)
                                        parseParenthesizedExpression([)
                                          parseExpressionInParenthesis([)
                                            parseExpressionInParenthesisRest(()
                                              parseExpression(()
                                                parsePrecedenceExpression((, 1, true)
                                                  parseUnaryExpression((, true)
                                                    parsePrimary((, expression)
                                                      parseSend((, expression)
                                                        isNextIdentifier(()
                                                        ensureIdentifier((, expression)
                                                          reportRecoverableErrorWithToken(], Instance of 'Template<(Token) => Message>')
                                                            listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., Try inserting an identifier before ']'., {lexeme: ]}], ], ])
                                                          rewriter()
                                                          listener: handleIdentifier(, expression)
                                                        listener: handleNoTypeArguments(])
                                                        parseArgumentsOpt()
                                                          listener: handleNoArguments(])
                                                        listener: handleSend(, ])
                                              ensureCloseParen(, ()
                                                reportRecoverableError(], Message[ExpectedButGot, Expected ')' before this., null, {string: )}])
                                                  listener: handleRecoverableError(Message[ExpectedButGot, Expected ')' before this., null, {string: )}], ], ])
                                          listener: handleParenthesizedExpression(()
                              listener: handleLiteralList(1, [, null, ])
                    ensureSemicolon(])
                    listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(2, )
