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, null, , Instance of 'NoType', null, f, false)
        listener: beginTopLevelMethod(, null, 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(}, var)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
                looksLikeLocalFunction(a)
                listener: beginMetadataStar(var)
                listener: endMetadataStar(0)
                listener: handleNoType(var)
                listener: beginVariablesDeclaration(a, null, var)
                parseVariablesDeclarationRest(var, true)
                  parseOptionallyInitializedIdentifier(var)
                    ensureIdentifier(var, localVariableDeclaration)
                      listener: handleIdentifier(a, localVariableDeclaration)
                    listener: beginInitializedIdentifier(a)
                    parseVariableInitializerOpt(a)
                      listener: handleNoVariableInitializer(a)
                    listener: endInitializedIdentifier(a)
                  ensureSemicolon(a)
                  listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, return)
          parseStatement(;)
            parseStatementX(;)
              parseReturnStatement(;)
                listener: beginReturnStatement(return)
                parseExpression(return)
                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                    parseUnaryExpression(return, true, ConstantPatternContext.none)
                      parsePrimary(return, expression, ConstantPatternContext.none)
                        parseSendOrFunctionLiteral(return, expression)
                          parseSend(return, expression)
                            isNextIdentifier(return)
                            ensureIdentifier(return, expression)
                              listener: handleIdentifier(a, expression)
                            listener: handleNoTypeArguments(!=)
                            parseArgumentsOpt(a)
                              listener: handleNoArguments(!=)
                            listener: handleSend(a, !=)
                    listener: beginBinaryExpression(!=)
                    parsePrecedenceExpression(!=, 8, true, ConstantPatternContext.none)
                      parseUnaryExpression(!=, true, ConstantPatternContext.none)
                        parsePrimary(!=, expression, ConstantPatternContext.none)
                          parseLiteralNull(!=)
                            listener: handleLiteralNull(null)
                      canParseAsConditional(?)
                        parseExpressionWithoutCascade(?)
                          parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
                            parseUnaryExpression(?, false, ConstantPatternContext.none)
                              parsePrimary(?, expression, ConstantPatternContext.none)
                                parseLiteralListSuffix(?, null)
                                  parseExpression([)
                                    parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                      parseUnaryExpression([, true, ConstantPatternContext.none)
                                        parsePrimary([, expression, ConstantPatternContext.none)
                                          parseSendOrFunctionLiteral([, expression)
                                            parseSend([, expression)
                                              isNextIdentifier([)
                                              ensureIdentifier([, expression)
                                              parseArgumentsOpt(a)
                        parseExpressionWithoutCascade(:)
                          parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
                            parseUnaryExpression(:, false, ConstantPatternContext.none)
                              parsePrimary(:, expression, ConstantPatternContext.none)
                                parseConstExpression(:)
                                  parseLiteralListSuffix(const, const)
                                    rewriteSquareBrackets(const)
                                      link([, ])
                                      rewriter()
                    listener: endBinaryExpression(!=)
                    canParseAsConditional(?)
                      parseExpressionWithoutCascade(?)
                        parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
                          parseUnaryExpression(?, false, ConstantPatternContext.none)
                            parsePrimary(?, expression, ConstantPatternContext.none)
                              parseLiteralListSuffix(?, null)
                                parseExpression([)
                                  parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                    parseUnaryExpression([, true, ConstantPatternContext.none)
                                      parsePrimary([, expression, ConstantPatternContext.none)
                                        parseSendOrFunctionLiteral([, expression)
                                          parseSend([, expression)
                                            isNextIdentifier([)
                                            ensureIdentifier([, expression)
                                            parseArgumentsOpt(a)
                      parseExpressionWithoutCascade(:)
                        parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
                          parseUnaryExpression(:, false, ConstantPatternContext.none)
                            parsePrimary(:, expression, ConstantPatternContext.none)
                              parseConstExpression(:)
                                parseLiteralListSuffix(const, const)
                                  rewriteSquareBrackets(const)
                                    link([, ])
                                    rewriter()
                    parseConditionalExpressionRest(null)
                      listener: beginConditionalExpression(?)
                      parseExpressionWithoutCascade(?)
                        parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
                          parseUnaryExpression(?, false, ConstantPatternContext.none)
                            parsePrimary(?, expression, ConstantPatternContext.none)
                              listener: handleNoTypeArguments([)
                              parseLiteralListSuffix(?, null)
                                parseExpression([)
                                  parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                    parseUnaryExpression([, true, ConstantPatternContext.none)
                                      parsePrimary([, expression, ConstantPatternContext.none)
                                        parseSendOrFunctionLiteral([, expression)
                                          parseSend([, expression)
                                            isNextIdentifier([)
                                            ensureIdentifier([, expression)
                                              listener: handleIdentifier(a, expression)
                                            listener: handleNoTypeArguments(])
                                            parseArgumentsOpt(a)
                                              listener: handleNoArguments(])
                                            listener: handleSend(a, ])
                                listener: handleLiteralList(1, [, null, ])
                      ensureColon(])
                      listener: handleConditionalExpressionColon()
                      parseExpressionWithoutCascade(:)
                        parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
                          parseUnaryExpression(:, false, ConstantPatternContext.none)
                            parsePrimary(:, expression, ConstantPatternContext.none)
                              parseConstExpression(:)
                                listener: beginConstLiteral([])
                                listener: handleNoTypeArguments([])
                                parseLiteralListSuffix(const, const)
                                  rewriteSquareBrackets(const)
                                    link([, ])
                                    rewriter()
                                  listener: handleLiteralList(0, [, const, ])
                                listener: endConstLiteral(;)
                      listener: endConditionalExpression(?, :)
                ensureSemicolon(])
                listener: endReturnStatement(true, return, ;)
                inGenerator()
          notEofOrValue(}, })
          listener: endBlockFunctionBody(2, {, })
        listener: endTopLevelMethod(f, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(f)
  listener: endCompilationUnit(1, )
