From 0a0508d6a59ddb631300cd8e9d10206f6d0bf6e2 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Fri, 20 Jan 2017 12:37:44 +0100 Subject: [PATCH] allow whenever blocks to use `redo` --- src/core/Supply.pm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/core/Supply.pm b/src/core/Supply.pm index 424ffe893db..e4245e6ecc1 100644 --- a/src/core/Supply.pm +++ b/src/core/Supply.pm @@ -1683,9 +1683,20 @@ sub SUPPLY(&block) { $state.run-operation({ my &*ADD-WHENEVER = sub ($supply, &whenever-block) { $state.increment-active(); + my $redoable = -> \value { + loop { + nqp::handle( + nqp::stmts(whenever-block(value), last), + 'REDO', 0) + } + } my $tap = $supply.tap( -> \value { - self!run-supply-code({ whenever-block(value) }, $state) + self!run-supply-code({ + nqp::handle( + whenever-block(value), + 'REDO', $redoable(value)) + }, $state) }, done => { $state.delete-active-tap($tap) if $tap.DEFINITE;