#define dMULTICALL \
OP *multicall_cop; \
- bool multicall_oldcatch; \
- I32 multicall_saveix_floor
+ bool multicall_oldcatch
#define PUSH_MULTICALL(the_cv) \
PUSH_MULTICALL_FLAGS(the_cv, 0)
PL_stack_sp, PL_savestack_ix); \
cx_pushsub(cx, cv, NULL, 0); \
SAVEOP(); \
- multicall_saveix_floor = PL_savestack_ix; \
if (!(flags & CXp_SUB_RE_FAKE)) \
CvDEPTH(cv)++; \
if (CvDEPTH(cv) >= 2) \
STMT_START { \
PL_op = multicall_cop; \
CALLRUNOPS(aTHX); \
- LEAVE_SCOPE(multicall_saveix_floor); \
} STMT_END
#define POP_MULTICALL \
@a = multicall_return \&f9, $gimme;
gimme_check($gimme, \@a, ["one", "two"], "for-return two args lval");
}
-}
-
-# RT #116577: MULTICALL should clear scope after each call
-
-{
- my @r;
- my $s = sub { my $x; push @r, \$x; 1 };
+ # MULTICALL *shouldn't* clear savestack after each call
- XS::APItest::multicall_each \&$s, 1,2;
- isnt($r[0], $r[1], "#116577");
+ sub f10 { my $x = 1; $x };
+ my @a = XS::APItest::multicall_return \&f10, G_SCALAR;
+ ::is($a[0], 1, "leave scope");
}
before = (IV)(SP-PL_stack_base);
PL_op = nop;
CALLRUNOPS(aTHX); /* Scalar context. */
- PERL_UNUSED_VAR(multicall_saveix_floor); /* used by MULTICALL */
SPAGAIN;
if ((IV)(SP-PL_stack_base) == before)
ret = &PL_sv_undef; /* protect against empty (?{}) blocks. */