summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pad.h7
-rw-r--r--pp_ctl.c6
-rw-r--r--pp_sort.c3
-rw-r--r--pp_sys.c3
4 files changed, 14 insertions, 5 deletions
diff --git a/pad.h b/pad.h
index b331ceab34..ce53b3b263 100644
--- a/pad.h
+++ b/pad.h
@@ -103,7 +103,12 @@ Get the value from slot C<po> in the base (DEPTH=1) pad of a padlist
=for apidoc m|void|PAD_SET_CUR |PADLIST padlist|I32 n
Set the current pad to be pad C<n> in the padlist, saving
-the previous current pad.
+the previous current pad. NB currently this macro expands to a string too
+long for some compilers, so it's best to replace it with
+
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(padlist,n);
+
=for apidoc m|void|PAD_SET_CUR_NOSAVE |PADLIST padlist|I32 n
like PAD_SET_CUR, but without the save
diff --git a/pp_ctl.c b/pp_ctl.c
index 13a943c071..40cf312ecc 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1778,7 +1778,8 @@ PP(pp_dbstate)
PUSHSUB_DB(cx);
cx->blk_sub.retop = PL_op->op_next;
CvDEPTH(cv)++;
- PAD_SET_CUR(CvPADLIST(cv),1);
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
RETURNOP(CvSTART(cv));
}
else
@@ -2417,7 +2418,8 @@ PP(pp_goto)
sub_crush_depth(cv);
pad_push(padlist, CvDEPTH(cv));
}
- PAD_SET_CUR(padlist, CvDEPTH(cv));
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
if (cx->blk_sub.hasargs)
{
AV* av = (AV*)PAD_SVl(0);
diff --git a/pp_sort.c b/pp_sort.c
index 59f975e689..b605b02a08 100644
--- a/pp_sort.c
+++ b/pp_sort.c
@@ -1544,7 +1544,8 @@ PP(pp_sort)
SAVEVPTR(CvROOT(cv)->op_ppaddr);
CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
- PAD_SET_CUR(CvPADLIST(cv), 1);
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
}
}
}
diff --git a/pp_sys.c b/pp_sys.c
index 4f4be10a44..8cffb1418c 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -1270,7 +1270,8 @@ S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
PUSHBLOCK(cx, CXt_FORMAT, PL_stack_sp);
PUSHFORMAT(cx);
cx->blk_sub.retop = retop;
- PAD_SET_CUR(CvPADLIST(cv), 1);
+ SAVECOMPPAD();
+ PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
setdefout(gv); /* locally select filehandle so $% et al work */
return CvSTART(cv);