parseUnit(f)
  skipErrorTokens(f)
  listener: beginCompilationUnit(f)
  syntheticPreviousToken(f)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(f)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(f)
      isReservedKeyword(()
      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
        listener: beginTopLevelMethod(, null)
        listener: handleNoType()
        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(f, topLevelFunctionDeclaration)
        parseMethodTypeVar(f)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
          parseFormalParameters(f, 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)
                            parseParenthesizedExpressionOrFunctionLiteral({)
                              parseParenthesizedExpression({)
                                parseExpressionInParenthesis({)
                                  parseExpressionInParenthesisRest(()
                                    parseExpression(()
                                      parsePrecedenceExpression((, 1, true)
                                        parseUnaryExpression((, true)
                                          parsePrimary((, expression)
                                            parseSendOrFunctionLiteral((, expression)
                                              parseSend((, expression)
                                                isNextIdentifier(()
                                                ensureIdentifier((, expression)
                                                  listener: handleIdentifier(obj, expression)
                                                listener: handleNoTypeArguments(!)
                                                parseArgumentsOpt(obj)
                                                  listener: handleNoArguments(!)
                                                listener: handleSend(obj, !)
                                        listener: handleNonNullAssertExpression(!)
                                    ensureCloseParen(!, ()
                                listener: handleParenthesizedExpression(()
                        parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                          parseExpression([)
                            parsePrecedenceExpression([, 1, true)
                              parseUnaryExpression([, true)
                                parsePrimary([, expression)
                                  parseSendOrFunctionLiteral([, expression)
                                    parseSend([, expression)
                                      isNextIdentifier([)
                                      ensureIdentifier([, expression)
                                        listener: handleIdentifier(arg, expression)
                                      listener: handleNoTypeArguments(])
                                      parseArgumentsOpt(arg)
                                        listener: handleNoArguments(])
                                      listener: handleSend(arg, ])
                          listener: handleIndexedExpression(null, [, ])
                    ensureSemicolon(])
                    listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(f, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(f)
  listener: endCompilationUnit(1, )
