parseUnit(Future)
  skipErrorTokens(Future)
  listener: beginCompilationUnit(Future)
  syntheticPreviousToken(Future)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(Future)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(Future)
      parseTopLevelMethod(, null, , Instance of 'SimpleTypeWith1Argument', null, f)
        listener: beginTopLevelMethod(, null)
        listener: handleIdentifier(Future, typeReference)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        listener: handleType(Future, null)
        ensureIdentifier(>, topLevelFunctionDeclaration)
          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)
          parseExpressionFunctionBody(=>, false)
            parseExpression(=>)
              parsePrecedenceExpression(=>, 1, true)
                parseUnaryExpression(=>, true)
                  parsePrimary(=>, expression)
                    parseSendOrFunctionLiteral(=>, expression)
                      parseSend(=>, expression)
                        ensureIdentifier(=>, expression)
                          listener: handleIdentifier(Future, expression)
                        listener: handleNoTypeArguments(.)
                        parseArgumentsOpt(Future)
                          listener: handleNoArguments(.)
                        listener: handleSend(Future, .)
                parsePrimary(., expressionContinuation)
                  parseSendOrFunctionLiteral(., expressionContinuation)
                    looksLikeFunctionBody(;)
                    parseSend(., expressionContinuation)
                      ensureIdentifier(., expressionContinuation)
                        listener: handleIdentifier(value, expressionContinuation)
                      listener: handleNoTypeArguments(()
                      parseArgumentsOpt(value)
                        parseArguments(value)
                          parseArgumentsRest(()
                            listener: beginArguments(()
                            parseExpression(()
                              parsePrecedenceExpression((, 1, true)
                                parseUnaryExpression((, true)
                                  parsePrimary((, expression)
                                    parseLiteralInt(()
                                      listener: handleLiteralInt(7)
                            listener: endArguments(1, (, ))
                      listener: handleSend(value, ;)
                listener: endBinaryExpression(.)
            ensureSemicolon())
            listener: handleExpressionFunctionBody(=>, ;)
            inGenerator()
        listener: endTopLevelMethod(Future, null, ;)
  listener: endTopLevelDeclaration(List)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(List)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(List)
      parseTopLevelMethod(;, null, ;, Instance of 'SimpleTypeWith1Argument', null, g)
        listener: beginTopLevelMethod(;, null)
        listener: handleIdentifier(List, typeReference)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(int, null)
        listener: endTypeArguments(1, <, >)
        listener: handleType(List, null)
        ensureIdentifier(>, topLevelFunctionDeclaration)
          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)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, yield)
          parseStatement({)
            parseStatementX({)
              looksLikeYieldStatement({)
                looksLikeExpression(yield)
              parseYieldStatement({)
                listener: beginYieldStatement(yield)
                parseExpression(yield)
                  parsePrecedenceExpression(yield, 1, true)
                    parseUnaryExpression(yield, true)
                      parsePrimary(yield, expression)
                        parseSendOrFunctionLiteral(yield, expression)
                          looksLikeFunctionBody(;)
                          parseSend(yield, expression)
                            ensureIdentifier(yield, expression)
                              listener: handleIdentifier(f, expression)
                            listener: handleNoTypeArguments(()
                            parseArgumentsOpt(f)
                              parseArguments(f)
                                parseArgumentsRest(()
                                  listener: beginArguments(()
                                  listener: endArguments(0, (, ))
                            listener: handleSend(f, ;)
                ensureSemicolon())
                inPlainSync()
                reportRecoverableError(yield, YieldNotGenerator)
                  listener: handleRecoverableError(YieldNotGenerator, yield, yield)
                listener: endInvalidYieldStatement(yield, null, ;, YieldNotGenerator)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(List, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(Future)
  listener: endCompilationUnit(2, )
