/* loop context */
struct block_loop {
- char * label;
I32 resetsp;
LOOP * my_op; /* My op, that contains redo, next and last ops. */
/* (except for non_ithreads we need to modify next_op in pp_ctl.c, hence
else \
cx->blk_loop.itersave = NULL;
#endif
-#define CxLABEL(c) (0 + (c)->blk_loop.label)
+#define CxLABEL(c) (0 + (c)->blk_oldcop->cop_label)
#ifdef USE_ITHREADS
# define PUSHLOOP_OP_NEXT /* No need to do anything. */
#endif
#define PUSHLOOP(cx, dat, s) \
- cx->blk_loop.label = PL_curcop->cop_label; \
cx->blk_loop.resetsp = s - PL_stack_base; \
cx->blk_loop.my_op = cLOOP; \
PUSHLOOP_OP_NEXT; \
return -1;
break;
case CXt_LOOP:
- if ( !cx->blk_loop.label || strNE(label, cx->blk_loop.label) ) {
+ if ( !CxLABEL(cx) || strNE(label, CxLABEL(cx)) ) {
DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
- (long)i, cx->blk_loop.label));
+ (long)i, CxLABEL(cx)));
continue;
}
DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));