[llvm-dev] RFC: LLVM Coroutine Representation, Round 2
    Antoine Pitrou via llvm-dev 
    llvm-dev at lists.llvm.org
       
    Wed Jul 20 14:44:53 PDT 2016
    
    
  
On Wed, 20 Jul 2016 14:23:29 -0700
Gor Nishanov via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> If you have a coroutine that looks like this:
> 
>    genenerator<int> g(int n) {
>       <initial-suspend>
>       for (int i = 0;;) yield ++i;
>       <final-suspend> // marked as final suspend
>   }
> 
> It will never reach the final suspend and thus coro.done will never evaluate
> to true. Thus, coroutine will produce an infinite sequence of values.
I don't think this answers my question.  Say I have (Python notation):
def coroutine(n):
    for i in range(n):
        yield i
def consumer(n):
    for val in coroutine(n):
        # do something with val
How does consumer() know the coroutine has exited after the n'th
iteration?  It can't call @coro.done() as there is a single suspend
point...
Regards
Antoine.
    
    
More information about the llvm-dev
mailing list