Problems reported:

parser/error_recovery/yield_not_in_generator:4:3: 'yield' can only be used in 'sync*' or 'async*' methods.
  yield f();
  ^^^^^

beginCompilationUnit(Future)
  beginMetadataStar(Future)
  endMetadataStar(0)
  beginTopLevelMember(Future)
    beginTopLevelMethod(, null)
      handleIdentifier(Future, typeReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleType(Future, null)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleIdentifier(Future, expression)
      handleNoTypeArguments(.)
      handleNoArguments(.)
      handleSend(Future, .)
      handleIdentifier(value, expressionContinuation)
      handleNoTypeArguments(()
      beginArguments(()
        handleLiteralInt(7)
      endArguments(1, (, ))
      handleSend(value, ;)
      handleEndingBinaryExpression(.)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(Future, null, ;)
  endTopLevelDeclaration(List)
  beginMetadataStar(List)
  endMetadataStar(0)
  beginTopLevelMember(List)
    beginTopLevelMethod(;, null)
      handleIdentifier(List, typeReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleType(List, null)
      handleIdentifier(g, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginYieldStatement(yield)
          handleIdentifier(f, expression)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(f, ;)
          handleRecoverableError(YieldNotGenerator, yield, yield)
        endInvalidYieldStatement(yield, null, ;, YieldNotGenerator)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(List, null, })
  endTopLevelDeclaration()
endCompilationUnit(2, )
