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, f, false)
        listener: beginTopLevelMethod(, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, 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)
              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(bool)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(bool, typeReference)
                listener: handleNoTypeArguments(b)
                listener: handleType(bool, null)
                ensureIdentifier(bool, formalParameterDeclaration)
                  listener: handleIdentifier(b, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(,)
                listener: endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(,)
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(i)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  listener: handleIdentifier(i, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, print)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                looksLikeLocalFunction(print)
                parseExpressionStatement({)
                  parseExpression({)
                    parsePrecedenceExpression({, 1, true)
                      parseUnaryExpression({, true)
                        parsePrimary({, expression)
                          parseSendOrFunctionLiteral({, expression)
                            looksLikeFunctionBody(;)
                            parseSend({, expression)
                              ensureIdentifier({, expression)
                                listener: handleIdentifier(print, expression)
                              listener: handleNoTypeArguments(()
                              parseArgumentsOpt(print)
                                parseArguments(print)
                                  parseArgumentsRest(()
                                    listener: beginArguments(()
                                    parseExpression(()
                                      parsePrecedenceExpression((, 1, true)
                                        parseUnaryExpression((, true)
                                          parsePrimary((, expression)
                                            parseLiteralString(()
                                              parseSingleLiteralString(()
                                                listener: beginLiteralString('b=)
                                                parseIdentifierExpression($)
                                                  parseSend($, expression)
                                                    ensureIdentifier($, expression)
                                                      listener: handleIdentifier(b, expression)
                                                    listener: handleNoTypeArguments(, i=)
                                                    parseArgumentsOpt(b)
                                                      listener: handleNoArguments(, i=)
                                                    listener: handleSend(b, , i=)
                                                listener: handleInterpolationExpression($, null)
                                                parseStringPart(b)
                                                  listener: handleStringPart(, i=)
                                                parseIdentifierExpression($)
                                                  parseSend($, expression)
                                                    ensureIdentifier($, expression)
                                                      listener: handleIdentifier(i, expression)
                                                    listener: handleNoTypeArguments(')
                                                    parseArgumentsOpt(i)
                                                      listener: handleNoArguments(')
                                                    listener: handleSend(i, ')
                                                listener: handleInterpolationExpression($, null)
                                                parseStringPart(i)
                                                  listener: handleStringPart(')
                                                listener: endLiteralString(2, ))
                                    listener: endArguments(1, (, ))
                              listener: handleSend(print, ;)
                  ensureSemicolon())
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(g)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(g)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(g)
      isReservedKeyword(()
      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
        listener: beginTopLevelMethod(}, null)
        listener: handleNoType(})
        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(g, topLevelFunctionDeclaration)
        parseMethodTypeVar(g)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
          parseFormalParameters(g, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(x)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  listener: handleIdentifier(x, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(,)
                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(,)
                  listener: beginMetadataStar(int)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(int, typeReference)
                listener: handleNoTypeArguments(y)
                listener: handleType(int, null)
                ensureIdentifier(int, formalParameterDeclaration)
                  listener: handleIdentifier(y, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue(,)
                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
                parseMetadataStar(,)
                  listener: beginMetadataStar(Object)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
                listener: handleIdentifier(Object, typeReference)
                listener: handleNoTypeArguments(o)
                listener: handleType(Object, null)
                ensureIdentifier(Object, formalParameterDeclaration)
                  listener: handleIdentifier(o, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, f)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                looksLikeLocalFunction(f)
                parseExpressionStatement({)
                  parseExpression({)
                    parsePrecedenceExpression({, 1, true)
                      parseUnaryExpression({, true)
                        parsePrimary({, expression)
                          parseSendOrFunctionLiteral({, expression)
                            looksLikeFunctionBody(;)
                            parseSend({, expression)
                              ensureIdentifier({, expression)
                                listener: handleIdentifier(f, expression)
                              listener: handleNoTypeArguments(()
                              parseArgumentsOpt(f)
                                parseArguments(f)
                                  parseArgumentsRest(()
                                    listener: beginArguments(()
                                    parseExpression(()
                                      parsePrecedenceExpression((, 1, true)
                                        parseUnaryExpression((, true)
                                          parsePrimary((, expression)
                                            parseSendOrFunctionLiteral((, expression)
                                              looksLikeFunctionBody())
                                              parseSend((, expression)
                                                ensureIdentifier((, expression)
                                                  listener: handleIdentifier(x, expression)
                                                listener: handleNoTypeArguments(<)
                                                parseArgumentsOpt(x)
                                                  listener: handleNoArguments(<)
                                                listener: handleSend(x, <)
                                        listener: beginBinaryExpression(<)
                                        parsePrecedenceExpression(<, 9, true)
                                          parseUnaryExpression(<, true)
                                            parsePrimary(<, expression)
                                              parseSendOrFunctionLiteral(<, expression)
                                                parseSend(<, expression)
                                                  ensureIdentifier(<, expression)
                                                    listener: handleIdentifier(y, expression)
                                                  listener: handleNoTypeArguments(,)
                                                  parseArgumentsOpt(y)
                                                    listener: handleNoArguments(,)
                                                  listener: handleSend(y, ,)
                                        listener: endBinaryExpression(<)
                                    parseExpression(,)
                                      parsePrecedenceExpression(,, 1, true)
                                        parseUnaryExpression(,, true)
                                          parsePrimary(,, expression)
                                            parseParenthesizedExpressionOrFunctionLiteral(,)
                                              parseParenthesizedExpression(,)
                                                parseExpressionInParenthesis(,)
                                                  parseExpressionInParenthesisRest(()
                                                    parseExpression(()
                                                      parsePrecedenceExpression((, 1, true)
                                                        parseUnaryExpression((, true)
                                                          parsePrimary((, expression)
                                                            parseSendOrFunctionLiteral((, expression)
                                                              parseSend((, expression)
                                                                ensureIdentifier((, expression)
                                                                  listener: handleIdentifier(o, expression)
                                                                listener: handleNoTypeArguments(as)
                                                                parseArgumentsOpt(o)
                                                                  listener: handleNoArguments(as)
                                                                listener: handleSend(o, as)
                                                        parseAsOperatorRest(o)
                                                          listener: beginAsOperatorType(as)
                                                          computeTypeAfterIsOrAs(as)
                                                          listener: handleIdentifier(Function, typeReference)
                                                          listener: handleNoTypeArguments())
                                                          listener: handleType(Function, null)
                                                          listener: endAsOperatorType(as)
                                                          listener: handleAsOperator(as)
                                                          skipChainedAsIsOperators(Function)
                                                    ensureCloseParen(Function, ()
                                                listener: handleParenthesizedExpression(()
                                        parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
                                          listener: handleNoTypeArguments(()
                                          parseArguments())
                                            parseArgumentsRest(()
                                              listener: beginArguments(()
                                              listener: endArguments(0, (, ))
                                          listener: handleSend((, ))
                                    listener: endArguments(2, (, ))
                              listener: handleSend(f, ;)
                  ensureSemicolon())
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(g, null, })
  listener: endTopLevelDeclaration(main)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(main)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(main)
      isReservedKeyword(()
      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
        listener: beginTopLevelMethod(}, 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(}, g)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                looksLikeLocalFunction(g)
                parseExpressionStatement({)
                  parseExpression({)
                    parsePrecedenceExpression({, 1, true)
                      parseUnaryExpression({, true)
                        parsePrimary({, expression)
                          parseSendOrFunctionLiteral({, expression)
                            looksLikeFunctionBody(;)
                            parseSend({, expression)
                              ensureIdentifier({, expression)
                                listener: handleIdentifier(g, expression)
                              listener: handleNoTypeArguments(()
                              parseArgumentsOpt(g)
                                parseArguments(g)
                                  parseArgumentsRest(()
                                    listener: beginArguments(()
                                    parseExpression(()
                                      parsePrecedenceExpression((, 1, true)
                                        parseUnaryExpression((, true)
                                          parsePrimary((, expression)
                                            parseLiteralInt(()
                                              listener: handleLiteralInt(0)
                                    parseExpression(,)
                                      parsePrecedenceExpression(,, 1, true)
                                        parseUnaryExpression(,, true)
                                          parsePrimary(,, expression)
                                            parseLiteralInt(,)
                                              listener: handleLiteralInt(1)
                                    parseExpression(,)
                                      parsePrecedenceExpression(,, 1, true)
                                        parseUnaryExpression(,, true)
                                          parsePrimary(,, expression)
                                            parseParenthesizedExpressionOrFunctionLiteral(,)
                                              listener: handleNoTypeVariables(()
                                              parseFunctionExpression(,)
                                                listener: beginFunctionExpression(()
                                                parseFormalParametersRequiredOpt(,, MemberKind.Local)
                                                  parseFormalParametersRest((, MemberKind.Local)
                                                    listener: beginFormalParameters((, MemberKind.Local)
                                                    listener: endFormalParameters(0, (, ), MemberKind.Local)
                                                parseAsyncOptBody(), true, false)
                                                  parseAsyncModifierOpt())
                                                    listener: handleAsyncModifier(null, null)
                                                    inPlainSync()
                                                  parseFunctionBody(), true, false)
                                                    parseExpressionFunctionBody(=>, true)
                                                      parseExpression(=>)
                                                        parsePrecedenceExpression(=>, 1, true)
                                                          parseUnaryExpression(=>, true)
                                                            parsePrimary(=>, expression)
                                                              parseLiteralInt(=>)
                                                                listener: handleLiteralInt(2)
                                                      listener: handleExpressionFunctionBody(=>, null)
                                                      inGenerator()
                                                listener: endFunctionExpression((, ))
                                    listener: endArguments(3, (, ))
                              listener: handleSend(g, ;)
                  ensureSemicolon())
                  listener: handleExpressionStatement(;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(3, )
