su_ud_reap *ud = (su_ud_reap *) ud_;
#if SU_HAS_PERL(5, 9, 5)
PERL_CONTEXT saved_cx;
- I32 dieing = PL_op->op_type == OP_DIE;
I32 cxix;
#endif
* the sub scope from call_sv, although it's still needed in our caller. */
#if SU_HAS_PERL(5, 9, 5)
- if (dieing) {
- if (cxstack_ix < cxstack_max)
- cxix = cxstack_ix + 1;
- else
- cxix = Perl_cxinc(aTHX);
- saved_cx = cxstack[cxix];
- }
+ if (cxstack_ix < cxstack_max)
+ cxix = cxstack_ix + 1;
+ else
+ cxix = Perl_cxinc(aTHX);
+ saved_cx = cxstack[cxix];
#endif
call_sv(ud->cb, G_VOID);
#if SU_HAS_PERL(5, 9, 5)
- if (dieing)
- cxstack[cxix] = saved_cx;
+ cxstack[cxix] = saved_cx;
#endif
PUTBACK;
use strict;
use warnings;
-use Test::More tests => 38 + 30 + 4 * 7;
+use Test::More tests => 41 + 30 + 4 * 7;
use Scope::Upper qw/reap UP HERE/;
is $y, 1, 'die - reap inside eval [ok - y]';
}
+{
+ my $z = 0;
+ my $reaped = 0;
+ eval {
+ reap { $reaped = 1 };
+ is $reaped, 0, 'died of natural death - not reaped yet';
+ my $res = 1 / $z;
+ };
+ my $err = $@;
+ is $reaped, 1, 'died of natural death - reaped';
+ like $err, qr/division by zero/, 'died of natural death - divided by zero';
+}
+
SKIP:
{
skip 'Perl 5.10 required to test given/when' => 30 if $] < 5.010;