Continuity-Widget

 view release on metacpan or  search on metacpan

lib/Continuity/Coro/Continuation.pm  view on Meta::CPAN

use Coro;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(continuation yield);

our @yieldstack;

sub continuation (&) {
  my $code = shift;
  my $prev = new Coro::State;
  my $coro = Coro::State->new(sub {
    yield();
    $code->();
  });
  push @yieldstack, [$coro, $prev];
  $prev->transfer($coro);
  return sub {
    push @yieldstack, [$coro, $prev, @_];
    $prev->transfer($coro);
  };
}

sub yield {
  my ($coro, $prev) = @{pop @yieldstack};
  $coro->transfer($prev);
}

1;



( run in 0.297 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )