This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
S_leave_common(): simplify SVs_PADTMP handling
[perl5.git] / pp_ctl.c
CommitLineData
a0d0e21e
LW
1/* pp_ctl.c
2 *
1129b882
NC
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
a0d0e21e
LW
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
9 */
10
11/*
4ac71550
TC
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
18 *
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
a0d0e21e
LW
20 */
21
166f8a29
DM
22/* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
27 *
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
30 */
31
32
a0d0e21e 33#include "EXTERN.h"
864dbfa3 34#define PERL_IN_PP_CTL_C
a0d0e21e
LW
35#include "perl.h"
36
54310121 37#define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
1e422769 38
94fcd414
NC
39#define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
40
a0d0e21e
LW
41PP(pp_wantarray)
42{
39644a26 43 dSP;
a0d0e21e 44 I32 cxix;
93f0bc49 45 const PERL_CONTEXT *cx;
a0d0e21e
LW
46 EXTEND(SP, 1);
47
93f0bc49
FC
48 if (PL_op->op_private & OPpOFFBYONE) {
49 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
50 }
51 else {
52 cxix = dopoptosub(cxstack_ix);
53 if (cxix < 0)
a0d0e21e 54 RETPUSHUNDEF;
93f0bc49
FC
55 cx = &cxstack[cxix];
56 }
a0d0e21e 57
93f0bc49 58 switch (cx->blk_gimme) {
54310121 59 case G_ARRAY:
a0d0e21e 60 RETPUSHYES;
54310121 61 case G_SCALAR:
a0d0e21e 62 RETPUSHNO;
54310121 63 default:
64 RETPUSHUNDEF;
65 }
a0d0e21e
LW
66}
67
2cd61cdb
IZ
68PP(pp_regcreset)
69{
0b4182de 70 TAINT_NOT;
2cd61cdb
IZ
71 return NORMAL;
72}
73
b3eb6a9b
GS
74PP(pp_regcomp)
75{
39644a26 76 dSP;
eb578fdb 77 PMOP *pm = (PMOP*)cLOGOP->op_other;
9f141731 78 SV **args;
df787a7b 79 int nargs;
84679df5 80 REGEXP *re = NULL;
9f141731
DM
81 REGEXP *new_re;
82 const regexp_engine *eng;
dbc200c5 83 bool is_bare_re= FALSE;
bfed75c6 84
df787a7b
DM
85 if (PL_op->op_flags & OPf_STACKED) {
86 dMARK;
87 nargs = SP - MARK;
88 args = ++MARK;
89 }
90 else {
91 nargs = 1;
92 args = SP;
93 }
94
4b5a0d1c 95 /* prevent recompiling under /o and ithreads. */
3db8f154 96#if defined(USE_ITHREADS)
131b3ad0 97 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
df787a7b 98 SP = args-1;
131b3ad0
DM
99 RETURN;
100 }
513629ba 101#endif
d4b87e75 102
9f141731
DM
103 re = PM_GETRE(pm);
104 assert (re != (REGEXP*) &PL_sv_undef);
105 eng = re ? RX_ENGINE(re) : current_re_engine();
106
dbc200c5
YO
107 /*
108 In the below logic: these are basically the same - check if this regcomp is part of a split.
109
110 (PL_op->op_pmflags & PMf_split )
111 (PL_op->op_next->op_type == OP_PUSHRE)
112
113 We could add a new mask for this and copy the PMf_split, if we did
114 some bit definition fiddling first.
115
116 For now we leave this
117 */
118
3c13cae6
DM
119 new_re = (eng->op_comp
120 ? eng->op_comp
121 : &Perl_re_op_compile
122 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
346d3070 123 &is_bare_re,
dbc200c5 124 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
a5ae69f0
DM
125 pm->op_pmflags |
126 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
dbc200c5 127
346d3070 128 if (pm->op_pmflags & PMf_HAS_CV)
8d919b0a 129 ReANY(new_re)->qr_anoncv
9fe3265f 130 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
9f141731
DM
131
132 if (is_bare_re) {
133 REGEXP *tmp;
134 /* The match's LHS's get-magic might need to access this op's regexp
135 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
136 get-magic now before we replace the regexp. Hopefully this hack can
137 be replaced with the approach described at
138 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
139 some day. */
140 if (pm->op_type == OP_MATCH) {
141 SV *lhs;
284167a5 142 const bool was_tainted = TAINT_get;
9f141731
DM
143 if (pm->op_flags & OPf_STACKED)
144 lhs = args[-1];
6ffceeb7 145 else if (pm->op_targ)
9f141731
DM
146 lhs = PAD_SV(pm->op_targ);
147 else lhs = DEFSV;
148 SvGETMAGIC(lhs);
149 /* Restore the previous value of PL_tainted (which may have been
150 modified by get-magic), to avoid incorrectly setting the
284167a5
S
151 RXf_TAINTED flag with RX_TAINT_on further down. */
152 TAINT_set(was_tainted);
dc6d7f5c 153#ifdef NO_TAINT_SUPPORT
9a9b5ec9
DM
154 PERL_UNUSED_VAR(was_tainted);
155#endif
df787a7b 156 }
9f141731
DM
157 tmp = reg_temp_copy(NULL, new_re);
158 ReREFCNT_dec(new_re);
159 new_re = tmp;
df787a7b 160 }
dbc200c5 161
9f141731
DM
162 if (re != new_re) {
163 ReREFCNT_dec(re);
164 PM_SETRE(pm, new_re);
c277df42 165 }
d4b87e75 166
dbc200c5 167
d48c660d
DM
168 assert(TAINTING_get || !TAINT_get);
169 if (TAINT_get) {
9f141731 170 SvTAINTED_on((SV*)new_re);
284167a5 171 RX_TAINT_on(new_re);
72311751 172 }
72311751 173
c737faaf
YO
174#if !defined(USE_ITHREADS)
175 /* can't change the optree at runtime either */
176 /* PMf_KEEP is handled differently under threads to avoid these problems */
9f141731
DM
177 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
178 pm = PL_curpm;
a0d0e21e 179 if (pm->op_pmflags & PMf_KEEP) {
c90c0ff4 180 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
533c011a 181 cLOGOP->op_first->op_next = PL_op->op_next;
a0d0e21e 182 }
c737faaf 183#endif
9f141731 184
df787a7b 185 SP = args-1;
a0d0e21e
LW
186 RETURN;
187}
188
9f141731 189
a0d0e21e
LW
190PP(pp_substcont)
191{
39644a26 192 dSP;
eb578fdb
KW
193 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
194 PMOP * const pm = (PMOP*) cLOGOP->op_other;
195 SV * const dstr = cx->sb_dstr;
196 char *s = cx->sb_s;
197 char *m = cx->sb_m;
a0d0e21e 198 char *orig = cx->sb_orig;
eb578fdb 199 REGEXP * const rx = cx->sb_rx;
c445ea15 200 SV *nsv = NULL;
988e6e7e 201 REGEXP *old = PM_GETRE(pm);
f410a211
NC
202
203 PERL_ASYNC_CHECK();
204
988e6e7e 205 if(old != rx) {
bfed75c6 206 if(old)
988e6e7e 207 ReREFCNT_dec(old);
d6106309 208 PM_SETRE(pm,ReREFCNT_inc(rx));
d8f2cf8a
AB
209 }
210
d9f97599 211 rxres_restore(&cx->sb_rxres, rx);
c90c0ff4 212
a0d0e21e 213 if (cx->sb_iters++) {
3c6ef0a5 214 const SSize_t saviters = cx->sb_iters;
a0d0e21e 215 if (cx->sb_iters > cx->sb_maxiters)
cea2e8a9 216 DIE(aTHX_ "Substitution loop");
a0d0e21e 217
447ee134
DM
218 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
219
ef07e810 220 /* See "how taint works" above pp_subst() */
20be6587
DM
221 if (SvTAINTED(TOPs))
222 cx->sb_rxtainted |= SUBST_TAINT_REPL;
447ee134 223 sv_catsv_nomg(dstr, POPs);
2c296965 224 if (CxONCE(cx) || s < orig ||
03c83e26
DM
225 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
226 (s == m), cx->sb_targ, NULL,
d5e7783a 227 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
a0d0e21e 228 {
8ca8a454 229 SV *targ = cx->sb_targ;
748a9306 230
078c425b
JH
231 assert(cx->sb_strend >= s);
232 if(cx->sb_strend > s) {
233 if (DO_UTF8(dstr) && !SvUTF8(targ))
4bac9ae4 234 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
078c425b 235 else
4bac9ae4 236 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
078c425b 237 }
20be6587
DM
238 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
239 cx->sb_rxtainted |= SUBST_TAINT_PAT;
9212bbba 240
8ca8a454
NC
241 if (pm->op_pmflags & PMf_NONDESTRUCT) {
242 PUSHs(dstr);
243 /* From here on down we're using the copy, and leaving the
244 original untouched. */
245 targ = dstr;
246 }
247 else {
9e0ea7f3
FC
248 SV_CHECK_THINKFIRST_COW_DROP(targ);
249 if (isGV(targ)) Perl_croak_no_modify();
250 SvPV_free(targ);
8ca8a454
NC
251 SvPV_set(targ, SvPVX(dstr));
252 SvCUR_set(targ, SvCUR(dstr));
253 SvLEN_set(targ, SvLEN(dstr));
254 if (DO_UTF8(dstr))
255 SvUTF8_on(targ);
256 SvPV_set(dstr, NULL);
257
52c47e16 258 PL_tainted = 0;
4f4d7508 259 mPUSHi(saviters - 1);
48c036b1 260
8ca8a454
NC
261 (void)SvPOK_only_UTF8(targ);
262 }
5cd24f17 263
20be6587 264 /* update the taint state of various various variables in
ef07e810
DM
265 * preparation for final exit.
266 * See "how taint works" above pp_subst() */
284167a5 267 if (TAINTING_get) {
20be6587
DM
268 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
269 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
270 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
271 )
272 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
273
274 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
275 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
276 )
277 SvTAINTED_on(TOPs); /* taint return value */
278 /* needed for mg_set below */
284167a5
S
279 TAINT_set(
280 cBOOL(cx->sb_rxtainted &
281 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
282 );
20be6587
DM
283 SvTAINT(TARG);
284 }
285 /* PL_tainted must be correctly set for this mg_set */
286 SvSETMAGIC(TARG);
287 TAINT_NOT;
4633a7c4 288 LEAVE_SCOPE(cx->sb_oldsave);
a0d0e21e 289 POPSUBST(cx);
47c9d59f 290 PERL_ASYNC_CHECK();
a0d0e21e 291 RETURNOP(pm->op_next);
e5964223 292 NOT_REACHED; /* NOTREACHED */
a0d0e21e 293 }
8e5e9ebe 294 cx->sb_iters = saviters;
a0d0e21e 295 }
07bc277f 296 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
a0d0e21e
LW
297 m = s;
298 s = orig;
6502e081 299 assert(!RX_SUBOFFSET(rx));
07bc277f 300 cx->sb_orig = orig = RX_SUBBEG(rx);
a0d0e21e
LW
301 s = orig + (m - s);
302 cx->sb_strend = s + (cx->sb_strend - m);
303 }
07bc277f 304 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
db79b45b 305 if (m > s) {
bfed75c6 306 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
4bac9ae4 307 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
db79b45b 308 else
4bac9ae4 309 sv_catpvn_nomg(dstr, s, m-s);
db79b45b 310 }
07bc277f 311 cx->sb_s = RX_OFFS(rx)[0].end + orig;
084916e3 312 { /* Update the pos() information. */
8ca8a454
NC
313 SV * const sv
314 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
084916e3 315 MAGIC *mg;
a911bb25
DM
316
317 /* the string being matched against may no longer be a string,
318 * e.g. $_=0; s/.../$_++/ge */
319
320 if (!SvPOK(sv))
321 SvPV_force_nomg_nolen(sv);
322
96c2a8ff
FC
323 if (!(mg = mg_find_mglob(sv))) {
324 mg = sv_magicext_mglob(sv);
084916e3 325 }
cda67c99 326 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
084916e3 327 }
988e6e7e 328 if (old != rx)
d6106309 329 (void)ReREFCNT_inc(rx);
20be6587 330 /* update the taint state of various various variables in preparation
ef07e810
DM
331 * for calling the code block.
332 * See "how taint works" above pp_subst() */
284167a5 333 if (TAINTING_get) {
20be6587
DM
334 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
335 cx->sb_rxtainted |= SUBST_TAINT_PAT;
336
337 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
338 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
339 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
340 )
341 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
342
343 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
344 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
8ca8a454
NC
345 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
346 ? cx->sb_dstr : cx->sb_targ);
20be6587
DM
347 TAINT_NOT;
348 }
d9f97599 349 rxres_save(&cx->sb_rxres, rx);
af9838cc 350 PL_curpm = pm;
29f2e912 351 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
a0d0e21e
LW
352}
353
c90c0ff4 354void
864dbfa3 355Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
c90c0ff4 356{
357 UV *p = (UV*)*rsp;
358 U32 i;
7918f24d
NC
359
360 PERL_ARGS_ASSERT_RXRES_SAVE;
96a5add6 361 PERL_UNUSED_CONTEXT;
c90c0ff4 362
07bc277f 363 if (!p || p[1] < RX_NPARENS(rx)) {
db2c6cb3 364#ifdef PERL_ANY_COW
6502e081 365 i = 7 + (RX_NPARENS(rx)+1) * 2;
ed252734 366#else
6502e081 367 i = 6 + (RX_NPARENS(rx)+1) * 2;
ed252734 368#endif
c90c0ff4 369 if (!p)
a02a5408 370 Newx(p, i, UV);
c90c0ff4 371 else
372 Renew(p, i, UV);
373 *rsp = (void*)p;
374 }
375
5eabab15
DM
376 /* what (if anything) to free on croak */
377 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
cf93c79d 378 RX_MATCH_COPIED_off(rx);
6c31ff74 379 *p++ = RX_NPARENS(rx);
c90c0ff4 380
db2c6cb3 381#ifdef PERL_ANY_COW
bdd9a1b1
NC
382 *p++ = PTR2UV(RX_SAVED_COPY(rx));
383 RX_SAVED_COPY(rx) = NULL;
ed252734
NC
384#endif
385
07bc277f
NC
386 *p++ = PTR2UV(RX_SUBBEG(rx));
387 *p++ = (UV)RX_SUBLEN(rx);
6502e081
DM
388 *p++ = (UV)RX_SUBOFFSET(rx);
389 *p++ = (UV)RX_SUBCOFFSET(rx);
07bc277f
NC
390 for (i = 0; i <= RX_NPARENS(rx); ++i) {
391 *p++ = (UV)RX_OFFS(rx)[i].start;
392 *p++ = (UV)RX_OFFS(rx)[i].end;
c90c0ff4 393 }
394}
395
9c105995
NC
396static void
397S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
c90c0ff4 398{
399 UV *p = (UV*)*rsp;
400 U32 i;
7918f24d
NC
401
402 PERL_ARGS_ASSERT_RXRES_RESTORE;
96a5add6 403 PERL_UNUSED_CONTEXT;
c90c0ff4 404
ed252734 405 RX_MATCH_COPY_FREE(rx);
cf93c79d 406 RX_MATCH_COPIED_set(rx, *p);
c90c0ff4 407 *p++ = 0;
6c31ff74 408 RX_NPARENS(rx) = *p++;
c90c0ff4 409
db2c6cb3 410#ifdef PERL_ANY_COW
bdd9a1b1
NC
411 if (RX_SAVED_COPY(rx))
412 SvREFCNT_dec (RX_SAVED_COPY(rx));
413 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
ed252734
NC
414 *p++ = 0;
415#endif
416
07bc277f
NC
417 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
418 RX_SUBLEN(rx) = (I32)(*p++);
6502e081
DM
419 RX_SUBOFFSET(rx) = (I32)*p++;
420 RX_SUBCOFFSET(rx) = (I32)*p++;
07bc277f
NC
421 for (i = 0; i <= RX_NPARENS(rx); ++i) {
422 RX_OFFS(rx)[i].start = (I32)(*p++);
423 RX_OFFS(rx)[i].end = (I32)(*p++);
c90c0ff4 424 }
425}
426
9c105995
NC
427static void
428S_rxres_free(pTHX_ void **rsp)
c90c0ff4 429{
44f8325f 430 UV * const p = (UV*)*rsp;
7918f24d
NC
431
432 PERL_ARGS_ASSERT_RXRES_FREE;
96a5add6 433 PERL_UNUSED_CONTEXT;
c90c0ff4 434
435 if (p) {
94010e71 436 void *tmp = INT2PTR(char*,*p);
6c31ff74 437#ifdef PERL_POISON
db2c6cb3 438#ifdef PERL_ANY_COW
6c31ff74 439 U32 i = 9 + p[1] * 2;
94010e71 440#else
6c31ff74 441 U32 i = 8 + p[1] * 2;
94010e71 442#endif
6c31ff74
NC
443#endif
444
db2c6cb3 445#ifdef PERL_ANY_COW
6c31ff74 446 SvREFCNT_dec (INT2PTR(SV*,p[2]));
ed252734 447#endif
6c31ff74
NC
448#ifdef PERL_POISON
449 PoisonFree(p, i, sizeof(UV));
450#endif
451
452 Safefree(tmp);
c90c0ff4 453 Safefree(p);
4608196e 454 *rsp = NULL;
c90c0ff4 455 }
456}
457
a701009a
DM
458#define FORM_NUM_BLANK (1<<30)
459#define FORM_NUM_POINT (1<<29)
460
a0d0e21e
LW
461PP(pp_formline)
462{
20b7effb 463 dSP; dMARK; dORIGMARK;
eb578fdb 464 SV * const tmpForm = *++MARK;
086b26f3 465 SV *formsv; /* contains text of original format */
eb578fdb
KW
466 U32 *fpc; /* format ops program counter */
467 char *t; /* current append position in target string */
086b26f3 468 const char *f; /* current position in format string */
eb578fdb
KW
469 I32 arg;
470 SV *sv = NULL; /* current item */
086b26f3 471 const char *item = NULL;/* string value of current item */
9b4bdfd4
DM
472 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
473 I32 itembytes = 0; /* as itemsize, but length in bytes */
086b26f3
DM
474 I32 fieldsize = 0; /* width of current field */
475 I32 lines = 0; /* number of lines that have been output */
476 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
477 const char *chophere = NULL; /* where to chop current item */
f5ada144 478 STRLEN linemark = 0; /* pos of start of line in output */
65202027 479 NV value;
086b26f3 480 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
9b4bdfd4 481 STRLEN len; /* length of current sv */
26e935cf 482 STRLEN linemax; /* estimate of output size in bytes */
1bd51a4c
IH
483 bool item_is_utf8 = FALSE;
484 bool targ_is_utf8 = FALSE;
bd7084a6 485 const char *fmt;
74e0ddf7 486 MAGIC *mg = NULL;
4ff700b9
DM
487 U8 *source; /* source of bytes to append */
488 STRLEN to_copy; /* how may bytes to append */
ea60cfe8 489 char trans; /* what chars to translate */
74e0ddf7 490
3808a683 491 mg = doparseform(tmpForm);
a0d0e21e 492
74e0ddf7 493 fpc = (U32*)mg->mg_ptr;
3808a683
DM
494 /* the actual string the format was compiled from.
495 * with overload etc, this may not match tmpForm */
496 formsv = mg->mg_obj;
497
74e0ddf7 498
3280af22 499 SvPV_force(PL_formtarget, len);
3808a683 500 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
125b9982 501 SvTAINTED_on(PL_formtarget);
1bd51a4c
IH
502 if (DO_UTF8(PL_formtarget))
503 targ_is_utf8 = TRUE;
26e935cf
DM
504 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
505 t = SvGROW(PL_formtarget, len + linemax + 1);
506 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
a0d0e21e 507 t += len;
3808a683 508 f = SvPV_const(formsv, len);
a0d0e21e
LW
509
510 for (;;) {
511 DEBUG_f( {
bfed75c6 512 const char *name = "???";
a0d0e21e
LW
513 arg = -1;
514 switch (*fpc) {
515 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
516 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
517 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
518 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
519 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
520
521 case FF_CHECKNL: name = "CHECKNL"; break;
522 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
523 case FF_SPACE: name = "SPACE"; break;
524 case FF_HALFSPACE: name = "HALFSPACE"; break;
525 case FF_ITEM: name = "ITEM"; break;
526 case FF_CHOP: name = "CHOP"; break;
527 case FF_LINEGLOB: name = "LINEGLOB"; break;
528 case FF_NEWLINE: name = "NEWLINE"; break;
529 case FF_MORE: name = "MORE"; break;
530 case FF_LINEMARK: name = "LINEMARK"; break;
531 case FF_END: name = "END"; break;
bfed75c6 532 case FF_0DECIMAL: name = "0DECIMAL"; break;
a1b95068 533 case FF_LINESNGL: name = "LINESNGL"; break;
a0d0e21e
LW
534 }
535 if (arg >= 0)
bf49b057 536 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
a0d0e21e 537 else
bf49b057 538 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
5f80b19c 539 } );
a0d0e21e 540 switch (*fpc++) {
4a73dc0b 541 case FF_LINEMARK: /* start (or end) of a line */
f5ada144 542 linemark = t - SvPVX(PL_formtarget);
a0d0e21e
LW
543 lines++;
544 gotsome = FALSE;
545 break;
546
4a73dc0b 547 case FF_LITERAL: /* append <arg> literal chars */
ea60cfe8
DM
548 to_copy = *fpc++;
549 source = (U8 *)f;
550 f += to_copy;
551 trans = '~';
75645721 552 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
ea60cfe8 553 goto append;
a0d0e21e 554
4a73dc0b 555 case FF_SKIP: /* skip <arg> chars in format */
a0d0e21e
LW
556 f += *fpc++;
557 break;
558
4a73dc0b 559 case FF_FETCH: /* get next item and set field size to <arg> */
a0d0e21e
LW
560 arg = *fpc++;
561 f += arg;
562 fieldsize = arg;
563
564 if (MARK < SP)
565 sv = *++MARK;
566 else {
3280af22 567 sv = &PL_sv_no;
a2a5de95 568 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
a0d0e21e 569 }
125b9982
NT
570 if (SvTAINTED(sv))
571 SvTAINTED_on(PL_formtarget);
a0d0e21e
LW
572 break;
573
4a73dc0b 574 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
5a34cab7 575 {
5a34cab7 576 const char *s = item = SvPV_const(sv, len);
9b4bdfd4
DM
577 const char *send = s + len;
578
579 itemsize = 0;
580 item_is_utf8 = DO_UTF8(sv);
581 while (s < send) {
582 if (!isCNTRL(*s))
583 gotsome = TRUE;
584 else if (*s == '\n')
585 break;
586
587 if (item_is_utf8)
588 s += UTF8SKIP(s);
589 else
590 s++;
591 itemsize++;
592 if (itemsize == fieldsize)
593 break;
594 }
595 itembytes = s - item;
62db6ea5 596 chophere = s;
5a34cab7 597 break;
a0ed51b3 598 }
a0d0e21e 599
4a73dc0b 600 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
5a34cab7
NC
601 {
602 const char *s = item = SvPV_const(sv, len);
9b4bdfd4
DM
603 const char *send = s + len;
604 I32 size = 0;
605
606 chophere = NULL;
607 item_is_utf8 = DO_UTF8(sv);
608 while (s < send) {
609 /* look for a legal split position */
610 if (isSPACE(*s)) {
611 if (*s == '\r') {
612 chophere = s;
613 itemsize = size;
614 break;
615 }
616 if (chopspace) {
617 /* provisional split point */
618 chophere = s;
619 itemsize = size;
620 }
621 /* we delay testing fieldsize until after we've
622 * processed the possible split char directly
623 * following the last field char; so if fieldsize=3
624 * and item="a b cdef", we consume "a b", not "a".
625 * Ditto further down.
626 */
627 if (size == fieldsize)
628 break;
629 }
630 else {
631 if (strchr(PL_chopset, *s)) {
632 /* provisional split point */
633 /* for a non-space split char, we include
634 * the split char; hence the '+1' */
635 chophere = s + 1;
636 itemsize = size;
637 }
638 if (size == fieldsize)
639 break;
640 if (!isCNTRL(*s))
641 gotsome = TRUE;
642 }
643
644 if (item_is_utf8)
645 s += UTF8SKIP(s);
646 else
077dbbf3 647 s++;
9b4bdfd4
DM
648 size++;
649 }
650 if (!chophere || s == send) {
651 chophere = s;
652 itemsize = size;
653 }
654 itembytes = chophere - item;
655
5a34cab7 656 break;
a0d0e21e 657 }
a0d0e21e 658
4a73dc0b 659 case FF_SPACE: /* append padding space (diff of field, item size) */
a0d0e21e
LW
660 arg = fieldsize - itemsize;
661 if (arg) {
662 fieldsize -= arg;
663 while (arg-- > 0)
664 *t++ = ' ';
665 }
666 break;
667
4a73dc0b 668 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
a0d0e21e
LW
669 arg = fieldsize - itemsize;
670 if (arg) {
671 arg /= 2;
672 fieldsize -= arg;
673 while (arg-- > 0)
674 *t++ = ' ';
675 }
676 break;
677
4a73dc0b 678 case FF_ITEM: /* append a text item, while blanking ctrl chars */
9b4bdfd4 679 to_copy = itembytes;
8aa7beb6
DM
680 source = (U8 *)item;
681 trans = 1;
8aa7beb6 682 goto append;
a0d0e21e 683
4a73dc0b 684 case FF_CHOP: /* (for ^*) chop the current item */
fb9282c3 685 if (sv != &PL_sv_no) {
5a34cab7
NC
686 const char *s = chophere;
687 if (chopspace) {
af68e756 688 while (isSPACE(*s))
5a34cab7
NC
689 s++;
690 }
9b4bdfd4
DM
691 if (SvPOKp(sv))
692 sv_chop(sv,s);
693 else
694 /* tied, overloaded or similar strangeness.
695 * Do it the hard way */
696 sv_setpvn(sv, s, len - (s-item));
5a34cab7
NC
697 SvSETMAGIC(sv);
698 break;
a0d0e21e 699 }
a0d0e21e 700
4a73dc0b 701 case FF_LINESNGL: /* process ^* */
a1b95068 702 chopspace = 0;
c67159e1 703 /* FALLTHROUGH */
4a73dc0b
DM
704
705 case FF_LINEGLOB: /* process @* */
5a34cab7 706 {
e32383e2 707 const bool oneline = fpc[-1] == FF_LINESNGL;
5a34cab7 708 const char *s = item = SvPV_const(sv, len);
7440a75b 709 const char *const send = s + len;
7440a75b 710
f3f2f1a3 711 item_is_utf8 = DO_UTF8(sv);
fb9282c3 712 chophere = s + len;
a1137ee5 713 if (!len)
7440a75b 714 break;
ea60cfe8 715 trans = 0;
0d21cefe 716 gotsome = TRUE;
4ff700b9
DM
717 source = (U8 *) s;
718 to_copy = len;
0d21cefe
DM
719 while (s < send) {
720 if (*s++ == '\n') {
721 if (oneline) {
9b4bdfd4 722 to_copy = s - item - 1;
0d21cefe
DM
723 chophere = s;
724 break;
725 } else {
726 if (s == send) {
0d21cefe
DM
727 to_copy--;
728 } else
729 lines++;
1bd51a4c 730 }
a0d0e21e 731 }
0d21cefe 732 }
a2c0032b
DM
733 }
734
ea60cfe8
DM
735 append:
736 /* append to_copy bytes from source to PL_formstring.
737 * item_is_utf8 implies source is utf8.
738 * if trans, translate certain characters during the copy */
a2c0032b
DM
739 {
740 U8 *tmp = NULL;
26e935cf 741 STRLEN grow = 0;
0325ce87
DM
742
743 SvCUR_set(PL_formtarget,
744 t - SvPVX_const(PL_formtarget));
745
0d21cefe
DM
746 if (targ_is_utf8 && !item_is_utf8) {
747 source = tmp = bytes_to_utf8(source, &to_copy);
0d21cefe
DM
748 } else {
749 if (item_is_utf8 && !targ_is_utf8) {
f5ada144 750 U8 *s;
0d21cefe 751 /* Upgrade targ to UTF8, and then we reduce it to
0325ce87
DM
752 a problem we have a simple solution for.
753 Don't need get magic. */
0d21cefe 754 sv_utf8_upgrade_nomg(PL_formtarget);
0325ce87 755 targ_is_utf8 = TRUE;
f5ada144
DM
756 /* re-calculate linemark */
757 s = (U8*)SvPVX(PL_formtarget);
26e935cf
DM
758 /* the bytes we initially allocated to append the
759 * whole line may have been gobbled up during the
760 * upgrade, so allocate a whole new line's worth
761 * for safety */
762 grow = linemax;
f5ada144
DM
763 while (linemark--)
764 s += UTF8SKIP(s);
765 linemark = s - (U8*)SvPVX(PL_formtarget);
e8e72d41 766 }
0d21cefe
DM
767 /* Easy. They agree. */
768 assert (item_is_utf8 == targ_is_utf8);
769 }
26e935cf
DM
770 if (!trans)
771 /* @* and ^* are the only things that can exceed
772 * the linemax, so grow by the output size, plus
773 * a whole new form's worth in case of any further
774 * output */
775 grow = linemax + to_copy;
776 if (grow)
777 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
0d21cefe
DM
778 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
779
780 Copy(source, t, to_copy, char);
ea60cfe8 781 if (trans) {
8aa7beb6
DM
782 /* blank out ~ or control chars, depending on trans.
783 * works on bytes not chars, so relies on not
784 * matching utf8 continuation bytes */
ea60cfe8
DM
785 U8 *s = (U8*)t;
786 U8 *send = s + to_copy;
787 while (s < send) {
8aa7beb6 788 const int ch = *s;
077dbbf3 789 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
ea60cfe8
DM
790 *s = ' ';
791 s++;
792 }
793 }
794
0d21cefe
DM
795 t += to_copy;
796 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
a1137ee5 797 if (tmp)
0d21cefe 798 Safefree(tmp);
5a34cab7 799 break;
a0d0e21e 800 }
a0d0e21e 801
4a73dc0b 802 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
a0d0e21e 803 arg = *fpc++;
bd7084a6 804 fmt = (const char *)
a029fa42 805 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
bd7084a6 806 goto ff_dec;
5d37acd6 807
bd7084a6
DM
808 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
809 arg = *fpc++;
bd7084a6 810 fmt = (const char *)
a029fa42 811 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
bd7084a6 812 ff_dec:
784707d5
JP
813 /* If the field is marked with ^ and the value is undefined,
814 blank it out. */
a701009a 815 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
784707d5
JP
816 arg = fieldsize;
817 while (arg--)
818 *t++ = ' ';
819 break;
820 }
821 gotsome = TRUE;
822 value = SvNV(sv);
a1b95068 823 /* overflow evidence */
bfed75c6 824 if (num_overflow(value, fieldsize, arg)) {
a1b95068
WL
825 arg = fieldsize;
826 while (arg--)
827 *t++ = '#';
828 break;
829 }
784707d5
JP
830 /* Formats aren't yet marked for locales, so assume "yes". */
831 {
e8549682
JH
832 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
833 int len;
67d796ae
KW
834 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
835 STORE_LC_NUMERIC_SET_TO_NEEDED();
51f14a05 836 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
a4eca1d4
JH
837#ifdef USE_QUADMATH
838 {
839 const char* qfmt = quadmath_format_single(fmt);
840 int len;
841 if (!qfmt)
842 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
843 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
844 if (len == -1)
845 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
846 if (qfmt != fmt)
847 Safefree(fmt);
848 }
849#else
b587c0e8
DM
850 /* we generate fmt ourselves so it is safe */
851 GCC_DIAG_IGNORE(-Wformat-nonliteral);
e8549682 852 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
b587c0e8 853 GCC_DIAG_RESTORE;
a4eca1d4
JH
854#endif
855 PERL_MY_SNPRINTF_POST_GUARD(len, max);
a2287a13 856 RESTORE_LC_NUMERIC();
784707d5
JP
857 }
858 t += fieldsize;
859 break;
a1b95068 860
4a73dc0b 861 case FF_NEWLINE: /* delete trailing spaces, then append \n */
a0d0e21e 862 f++;
f5ada144 863 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
a0d0e21e
LW
864 t++;
865 *t++ = '\n';
866 break;
867
4a73dc0b 868 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
a0d0e21e
LW
869 arg = *fpc++;
870 if (gotsome) {
871 if (arg) { /* repeat until fields exhausted? */
11f9eeaf
DM
872 fpc--;
873 goto end;
a0d0e21e
LW
874 }
875 }
876 else {
f5ada144 877 t = SvPVX(PL_formtarget) + linemark;
a0d0e21e
LW
878 lines--;
879 }
880 break;
881
4a73dc0b 882 case FF_MORE: /* replace long end of string with '...' */
5a34cab7
NC
883 {
884 const char *s = chophere;
885 const char *send = item + len;
886 if (chopspace) {
af68e756 887 while (isSPACE(*s) && (s < send))
5a34cab7 888 s++;
a0d0e21e 889 }
5a34cab7
NC
890 if (s < send) {
891 char *s1;
892 arg = fieldsize - itemsize;
893 if (arg) {
894 fieldsize -= arg;
895 while (arg-- > 0)
896 *t++ = ' ';
897 }
898 s1 = t - 3;
899 if (strnEQ(s1," ",3)) {
900 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
901 s1--;
902 }
903 *s1++ = '.';
904 *s1++ = '.';
905 *s1++ = '.';
a0d0e21e 906 }
5a34cab7 907 break;
a0d0e21e 908 }
4a73dc0b
DM
909
910 case FF_END: /* tidy up, then return */
11f9eeaf 911 end:
bf2bec63 912 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
a0d0e21e 913 *t = '\0';
b15aece3 914 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1bd51a4c
IH
915 if (targ_is_utf8)
916 SvUTF8_on(PL_formtarget);
3280af22 917 FmLINES(PL_formtarget) += lines;
a0d0e21e 918 SP = ORIGMARK;
11f9eeaf
DM
919 if (fpc[-1] == FF_BLANK)
920 RETURNOP(cLISTOP->op_first);
921 else
922 RETPUSHYES;
a0d0e21e
LW
923 }
924 }
925}
926
927PP(pp_grepstart)
928{
20b7effb 929 dSP;
a0d0e21e
LW
930 SV *src;
931
6cae08a8 932 if (PL_stack_base + TOPMARK == SP) {
a0d0e21e 933 (void)POPMARK;
54310121 934 if (GIMME_V == G_SCALAR)
6e449a3a 935 mXPUSHi(0);
533c011a 936 RETURNOP(PL_op->op_next->op_next);
a0d0e21e 937 }
6cae08a8 938 PL_stack_sp = PL_stack_base + TOPMARK + 1;
897d3989
NC
939 Perl_pp_pushmark(aTHX); /* push dst */
940 Perl_pp_pushmark(aTHX); /* push src */
d343c3ef 941 ENTER_with_name("grep"); /* enter outer scope */
a0d0e21e
LW
942
943 SAVETMPS;
ffd49c98 944 SAVE_DEFSV;
d343c3ef 945 ENTER_with_name("grep_item"); /* enter inner scope */
7766f137 946 SAVEVPTR(PL_curpm);
a0d0e21e 947
6cae08a8 948 src = PL_stack_base[TOPMARK];
60779a30 949 if (SvPADTMP(src)) {
6cae08a8 950 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
a0ed822e
FC
951 PL_tmps_floor++;
952 }
a0d0e21e 953 SvTEMP_off(src);
ffd49c98 954 DEFSV_set(src);
a0d0e21e
LW
955
956 PUTBACK;
533c011a 957 if (PL_op->op_type == OP_MAPSTART)
897d3989 958 Perl_pp_pushmark(aTHX); /* push top */
533c011a 959 return ((LOGOP*)PL_op->op_next)->op_other;
a0d0e21e
LW
960}
961
a0d0e21e
LW
962PP(pp_mapwhile)
963{
20b7effb 964 dSP;
f54cb97a 965 const I32 gimme = GIMME_V;
6cae08a8 966 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
a0d0e21e
LW
967 I32 count;
968 I32 shift;
969 SV** src;
ac27b0f5 970 SV** dst;
a0d0e21e 971
544f3153 972 /* first, move source pointer to the next item in the source list */
3280af22 973 ++PL_markstack_ptr[-1];
544f3153
GS
974
975 /* if there are new items, push them into the destination list */
4c90a460 976 if (items && gimme != G_VOID) {
544f3153
GS
977 /* might need to make room back there first */
978 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
979 /* XXX this implementation is very pessimal because the stack
980 * is repeatedly extended for every set of items. Is possible
981 * to do this without any stack extension or copying at all
982 * by maintaining a separate list over which the map iterates
18ef8bea 983 * (like foreach does). --gsar */
544f3153
GS
984
985 /* everything in the stack after the destination list moves
986 * towards the end the stack by the amount of room needed */
987 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
988
989 /* items to shift up (accounting for the moved source pointer) */
990 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
18ef8bea
BT
991
992 /* This optimization is by Ben Tilly and it does
993 * things differently from what Sarathy (gsar)
994 * is describing. The downside of this optimization is
995 * that leaves "holes" (uninitialized and hopefully unused areas)
996 * to the Perl stack, but on the other hand this
997 * shouldn't be a problem. If Sarathy's idea gets
998 * implemented, this optimization should become
999 * irrelevant. --jhi */
1000 if (shift < count)
1001 shift = count; /* Avoid shifting too often --Ben Tilly */
bfed75c6 1002
924508f0
GS
1003 EXTEND(SP,shift);
1004 src = SP;
1005 dst = (SP += shift);
3280af22
NIS
1006 PL_markstack_ptr[-1] += shift;
1007 *PL_markstack_ptr += shift;
544f3153 1008 while (count--)
a0d0e21e
LW
1009 *dst-- = *src--;
1010 }
544f3153 1011 /* copy the new items down to the destination list */
ac27b0f5 1012 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
22023b26 1013 if (gimme == G_ARRAY) {
b2a2a901
DM
1014 /* add returned items to the collection (making mortal copies
1015 * if necessary), then clear the current temps stack frame
1016 * *except* for those items. We do this splicing the items
1017 * into the start of the tmps frame (so some items may be on
59d53fd6 1018 * the tmps stack twice), then moving PL_tmps_floor above
b2a2a901
DM
1019 * them, then freeing the frame. That way, the only tmps that
1020 * accumulate over iterations are the return values for map.
1021 * We have to do to this way so that everything gets correctly
1022 * freed if we die during the map.
1023 */
1024 I32 tmpsbase;
1025 I32 i = items;
1026 /* make space for the slice */
1027 EXTEND_MORTAL(items);
1028 tmpsbase = PL_tmps_floor + 1;
1029 Move(PL_tmps_stack + tmpsbase,
1030 PL_tmps_stack + tmpsbase + items,
1031 PL_tmps_ix - PL_tmps_floor,
1032 SV*);
1033 PL_tmps_ix += items;
1034
1035 while (i-- > 0) {
1036 SV *sv = POPs;
1037 if (!SvTEMP(sv))
1038 sv = sv_mortalcopy(sv);
1039 *dst-- = sv;
1040 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1041 }
1042 /* clear the stack frame except for the items */
1043 PL_tmps_floor += items;
1044 FREETMPS;
1045 /* FREETMPS may have cleared the TEMP flag on some of the items */
1046 i = items;
1047 while (i-- > 0)
1048 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
22023b26 1049 }
bfed75c6 1050 else {
22023b26
TP
1051 /* scalar context: we don't care about which values map returns
1052 * (we use undef here). And so we certainly don't want to do mortal
1053 * copies of meaningless values. */
1054 while (items-- > 0) {
b988aa42 1055 (void)POPs;
22023b26
TP
1056 *dst-- = &PL_sv_undef;
1057 }
b2a2a901 1058 FREETMPS;
22023b26 1059 }
a0d0e21e 1060 }
b2a2a901
DM
1061 else {
1062 FREETMPS;
1063 }
d343c3ef 1064 LEAVE_with_name("grep_item"); /* exit inner scope */
a0d0e21e
LW
1065
1066 /* All done yet? */
6cae08a8 1067 if (PL_markstack_ptr[-1] > TOPMARK) {
a0d0e21e
LW
1068
1069 (void)POPMARK; /* pop top */
d343c3ef 1070 LEAVE_with_name("grep"); /* exit outer scope */
a0d0e21e 1071 (void)POPMARK; /* pop src */
3280af22 1072 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
a0d0e21e 1073 (void)POPMARK; /* pop dst */
3280af22 1074 SP = PL_stack_base + POPMARK; /* pop original mark */
54310121 1075 if (gimme == G_SCALAR) {
7cc47870
RGS
1076 dTARGET;
1077 XPUSHi(items);
a0d0e21e 1078 }
54310121 1079 else if (gimme == G_ARRAY)
1080 SP += items;
a0d0e21e
LW
1081 RETURN;
1082 }
1083 else {
1084 SV *src;
1085
d343c3ef 1086 ENTER_with_name("grep_item"); /* enter inner scope */
7766f137 1087 SAVEVPTR(PL_curpm);
a0d0e21e 1088
544f3153 1089 /* set $_ to the new source item */
3280af22 1090 src = PL_stack_base[PL_markstack_ptr[-1]];
60779a30 1091 if (SvPADTMP(src)) {
60779a30
DM
1092 src = sv_mortalcopy(src);
1093 }
a0d0e21e 1094 SvTEMP_off(src);
ffd49c98 1095 DEFSV_set(src);
a0d0e21e
LW
1096
1097 RETURNOP(cLOGOP->op_other);
1098 }
1099}
1100
a0d0e21e
LW
1101/* Range stuff. */
1102
1103PP(pp_range)
1104{
82334630 1105 if (GIMME_V == G_ARRAY)
1a67a97c 1106 return NORMAL;
538573f7 1107 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1a67a97c 1108 return cLOGOP->op_other;
538573f7 1109 else
1a67a97c 1110 return NORMAL;
a0d0e21e
LW
1111}
1112
1113PP(pp_flip)
1114{
39644a26 1115 dSP;
a0d0e21e 1116
82334630 1117 if (GIMME_V == G_ARRAY) {
1a67a97c 1118 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
a0d0e21e
LW
1119 }
1120 else {
1121 dTOPss;
44f8325f 1122 SV * const targ = PAD_SV(PL_op->op_targ);
bfed75c6 1123 int flip = 0;
790090df 1124
bfed75c6 1125 if (PL_op->op_private & OPpFLIP_LINENUM) {
4e3399f9
YST
1126 if (GvIO(PL_last_in_gv)) {
1127 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1128 }
1129 else {
fafc274c 1130 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
44f8325f
AL
1131 if (gv && GvSV(gv))
1132 flip = SvIV(sv) == SvIV(GvSV(gv));
4e3399f9 1133 }
bfed75c6
AL
1134 } else {
1135 flip = SvTRUE(sv);
1136 }
1137 if (flip) {
a0d0e21e 1138 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
533c011a 1139 if (PL_op->op_flags & OPf_SPECIAL) {
a0d0e21e 1140 sv_setiv(targ, 1);
3e3baf6d 1141 SETs(targ);
a0d0e21e
LW
1142 RETURN;
1143 }
1144 else {
1145 sv_setiv(targ, 0);
924508f0 1146 SP--;
1a67a97c 1147 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
a0d0e21e
LW
1148 }
1149 }
76f68e9b 1150 sv_setpvs(TARG, "");
a0d0e21e
LW
1151 SETs(targ);
1152 RETURN;
1153 }
1154}
1155
8e9bbdb9
RGS
1156/* This code tries to decide if "$left .. $right" should use the
1157 magical string increment, or if the range is numeric (we make
1158 an exception for .."0" [#18165]). AMS 20021031. */
1159
1160#define RANGE_IS_NUMERIC(left,right) ( \
b0e74086
RGS
1161 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1162 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
e0ab1c0e 1163 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
b15aece3 1164 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
e0ab1c0e 1165 && (!SvOK(right) || looks_like_number(right))))
8e9bbdb9 1166
a0d0e21e
LW
1167PP(pp_flop)
1168{
20b7effb 1169 dSP;
a0d0e21e 1170
82334630 1171 if (GIMME_V == G_ARRAY) {
a0d0e21e 1172 dPOPPOPssrl;
86cb7173 1173
5b295bef
RD
1174 SvGETMAGIC(left);
1175 SvGETMAGIC(right);
a0d0e21e 1176
8e9bbdb9 1177 if (RANGE_IS_NUMERIC(left,right)) {
b262c4c9 1178 IV i, j, n;
4d91eccc
FC
1179 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1180 (SvOK(right) && (SvIOK(right)
1181 ? SvIsUV(right) && SvUV(right) > IV_MAX
1182 : SvNV_nomg(right) > IV_MAX)))
d470f89e 1183 DIE(aTHX_ "Range iterator outside integer range");
f52e41ad 1184 i = SvIV_nomg(left);
b262c4c9
JH
1185 j = SvIV_nomg(right);
1186 if (j >= i) {
1187 /* Dance carefully around signed max. */
1188 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1189 if (!overflow) {
1190 n = j - i + 1;
1191 /* The wraparound of signed integers is undefined
1192 * behavior, but here we aim for count >=1, and
1193 * negative count is just wrong. */
a1e27170
TC
1194 if (n < 1
1195#if IVSIZE > Size_t_size
1196 || n > SSize_t_MAX
1197#endif
1198 )
b262c4c9
JH
1199 overflow = TRUE;
1200 }
1201 if (overflow)
1202 Perl_croak(aTHX_ "Out of memory during list extend");
1203 EXTEND_MORTAL(n);
1204 EXTEND(SP, n);
bbce6d69 1205 }
c1ab3db2 1206 else
b262c4c9
JH
1207 n = 0;
1208 while (n--) {
fc01cab4 1209 SV * const sv = sv_2mortal(newSViv(i));
a0d0e21e 1210 PUSHs(sv);
fc01cab4
DM
1211 if (n) /* avoid incrementing above IV_MAX */
1212 i++;
a0d0e21e
LW
1213 }
1214 }
1215 else {
3c323193
FC
1216 STRLEN len, llen;
1217 const char * const lpv = SvPV_nomg_const(left, llen);
f52e41ad 1218 const char * const tmps = SvPV_nomg_const(right, len);
a0d0e21e 1219
3c323193 1220 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
89ea2908 1221 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
a0d0e21e 1222 XPUSHs(sv);
b15aece3 1223 if (strEQ(SvPVX_const(sv),tmps))
89ea2908 1224 break;
a0d0e21e
LW
1225 sv = sv_2mortal(newSVsv(sv));
1226 sv_inc(sv);
1227 }
a0d0e21e
LW
1228 }
1229 }
1230 else {
1231 dTOPss;
901017d6 1232 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
4e3399f9 1233 int flop = 0;
a0d0e21e 1234 sv_inc(targ);
4e3399f9
YST
1235
1236 if (PL_op->op_private & OPpFLIP_LINENUM) {
1237 if (GvIO(PL_last_in_gv)) {
1238 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1239 }
1240 else {
fafc274c 1241 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
4e3399f9
YST
1242 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1243 }
1244 }
1245 else {
1246 flop = SvTRUE(sv);
1247 }
1248
1249 if (flop) {
a0d0e21e 1250 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
396482e1 1251 sv_catpvs(targ, "E0");
a0d0e21e
LW
1252 }
1253 SETs(targ);
1254 }
1255
1256 RETURN;
1257}
1258
1259/* Control. */
1260
27da23d5 1261static const char * const context_name[] = {
515afda2 1262 "pseudo-block",
f31522f3 1263 NULL, /* CXt_WHEN never actually needs "block" */
76753e7f 1264 NULL, /* CXt_BLOCK never actually needs "block" */
f31522f3 1265 NULL, /* CXt_GIVEN never actually needs "block" */
76753e7f
NC
1266 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1267 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1268 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1269 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
515afda2 1270 "subroutine",
76753e7f 1271 "format",
515afda2 1272 "eval",
515afda2 1273 "substitution",
515afda2
NC
1274};
1275
76e3520e 1276STATIC I32
5db1eb8d 1277S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
a0d0e21e 1278{
eb578fdb 1279 I32 i;
a0d0e21e 1280
7918f24d
NC
1281 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1282
a0d0e21e 1283 for (i = cxstack_ix; i >= 0; i--) {
eb578fdb 1284 const PERL_CONTEXT * const cx = &cxstack[i];
6b35e009 1285 switch (CxTYPE(cx)) {
a0d0e21e 1286 case CXt_SUBST:
a0d0e21e 1287 case CXt_SUB:
7766f137 1288 case CXt_FORMAT:
a0d0e21e 1289 case CXt_EVAL:
0a753a76 1290 case CXt_NULL:
dcbac5bb 1291 /* diag_listed_as: Exiting subroutine via %s */
a2a5de95
NC
1292 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1293 context_name[CxTYPE(cx)], OP_NAME(PL_op));
515afda2
NC
1294 if (CxTYPE(cx) == CXt_NULL)
1295 return -1;
1296 break;
c6fdafd0 1297 case CXt_LOOP_LAZYIV:
d01136d6 1298 case CXt_LOOP_LAZYSV:
3b719c58
NC
1299 case CXt_LOOP_FOR:
1300 case CXt_LOOP_PLAIN:
7e8f1eac 1301 {
5db1eb8d
BF
1302 STRLEN cx_label_len = 0;
1303 U32 cx_label_flags = 0;
1304 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1305 if (!cx_label || !(
1306 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1307 (flags & SVf_UTF8)
1308 ? (bytes_cmp_utf8(
1309 (const U8*)cx_label, cx_label_len,
1310 (const U8*)label, len) == 0)
1311 : (bytes_cmp_utf8(
1312 (const U8*)label, len,
1313 (const U8*)cx_label, cx_label_len) == 0)
eade7155
BF
1314 : (len == cx_label_len && ((cx_label == label)
1315 || memEQ(cx_label, label, len))) )) {
1c98cc53 1316 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
7e8f1eac 1317 (long)i, cx_label));
a0d0e21e
LW
1318 continue;
1319 }
1c98cc53 1320 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
a0d0e21e 1321 return i;
7e8f1eac 1322 }
a0d0e21e
LW
1323 }
1324 }
1325 return i;
1326}
1327
0d863452
RH
1328
1329
e50aee73 1330I32
864dbfa3 1331Perl_dowantarray(pTHX)
e50aee73 1332{
f54cb97a 1333 const I32 gimme = block_gimme();
54310121 1334 return (gimme == G_VOID) ? G_SCALAR : gimme;
1335}
1336
1337I32
864dbfa3 1338Perl_block_gimme(pTHX)
54310121 1339{
06b5626a 1340 const I32 cxix = dopoptosub(cxstack_ix);
a05700a8 1341 U8 gimme;
e50aee73 1342 if (cxix < 0)
46fc3d4c 1343 return G_VOID;
e50aee73 1344
a05700a8
DM
1345 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1346 if (!gimme)
1347 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1348 return gimme;
e50aee73
AD
1349}
1350
a05700a8 1351
78f9721b
SM
1352I32
1353Perl_is_lvalue_sub(pTHX)
1354{
06b5626a 1355 const I32 cxix = dopoptosub(cxstack_ix);
78f9721b
SM
1356 assert(cxix >= 0); /* We should only be called from inside subs */
1357
bafb2adc
NC
1358 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1359 return CxLVAL(cxstack + cxix);
78f9721b
SM
1360 else
1361 return 0;
1362}
1363
777d9014
FC
1364/* only used by PUSHSUB */
1365I32
1366Perl_was_lvalue_sub(pTHX)
1367{
777d9014
FC
1368 const I32 cxix = dopoptosub(cxstack_ix-1);
1369 assert(cxix >= 0); /* We should only be called from inside subs */
1370
1371 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1372 return CxLVAL(cxstack + cxix);
1373 else
1374 return 0;
1375}
1376
76e3520e 1377STATIC I32
901017d6 1378S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
2c375eb9 1379{
a0d0e21e 1380 I32 i;
7918f24d
NC
1381
1382 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
81611534
JH
1383#ifndef DEBUGGING
1384 PERL_UNUSED_CONTEXT;
1385#endif
7918f24d 1386
a0d0e21e 1387 for (i = startingblock; i >= 0; i--) {
eb578fdb 1388 const PERL_CONTEXT * const cx = &cxstk[i];
6b35e009 1389 switch (CxTYPE(cx)) {
a0d0e21e
LW
1390 default:
1391 continue;
a0d0e21e 1392 case CXt_SUB:
5fbe8311
DM
1393 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1394 * twice; the first for the normal foo() call, and the second
1395 * for a faked up re-entry into the sub to execute the
1396 * code block. Hide this faked entry from the world. */
1397 if (cx->cx_type & CXp_SUB_RE_FAKE)
1398 continue;
c67159e1 1399 /* FALLTHROUGH */
5fbe8311 1400 case CXt_EVAL:
7766f137 1401 case CXt_FORMAT:
1c98cc53 1402 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
a0d0e21e
LW
1403 return i;
1404 }
1405 }
1406 return i;
1407}
1408
76e3520e 1409STATIC I32
cea2e8a9 1410S_dopoptoeval(pTHX_ I32 startingblock)
a0d0e21e
LW
1411{
1412 I32 i;
a0d0e21e 1413 for (i = startingblock; i >= 0; i--) {
eb578fdb 1414 const PERL_CONTEXT *cx = &cxstack[i];
6b35e009 1415 switch (CxTYPE(cx)) {
a0d0e21e
LW
1416 default:
1417 continue;
1418 case CXt_EVAL:
1c98cc53 1419 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
a0d0e21e
LW
1420 return i;
1421 }
1422 }
1423 return i;
1424}
1425
76e3520e 1426STATIC I32
cea2e8a9 1427S_dopoptoloop(pTHX_ I32 startingblock)
a0d0e21e
LW
1428{
1429 I32 i;
a0d0e21e 1430 for (i = startingblock; i >= 0; i--) {
eb578fdb 1431 const PERL_CONTEXT * const cx = &cxstack[i];
6b35e009 1432 switch (CxTYPE(cx)) {
a0d0e21e 1433 case CXt_SUBST:
a0d0e21e 1434 case CXt_SUB:
7766f137 1435 case CXt_FORMAT:
a0d0e21e 1436 case CXt_EVAL:
0a753a76 1437 case CXt_NULL:
dcbac5bb 1438 /* diag_listed_as: Exiting subroutine via %s */
a2a5de95
NC
1439 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1440 context_name[CxTYPE(cx)], OP_NAME(PL_op));
515afda2
NC
1441 if ((CxTYPE(cx)) == CXt_NULL)
1442 return -1;
1443 break;
c6fdafd0 1444 case CXt_LOOP_LAZYIV:
d01136d6 1445 case CXt_LOOP_LAZYSV:
3b719c58
NC
1446 case CXt_LOOP_FOR:
1447 case CXt_LOOP_PLAIN:
1c98cc53 1448 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
a0d0e21e
LW
1449 return i;
1450 }
1451 }
1452 return i;
1453}
1454
0d863452
RH
1455STATIC I32
1456S_dopoptogiven(pTHX_ I32 startingblock)
1457{
1458 I32 i;
1459 for (i = startingblock; i >= 0; i--) {
eb578fdb 1460 const PERL_CONTEXT *cx = &cxstack[i];
0d863452
RH
1461 switch (CxTYPE(cx)) {
1462 default:
1463 continue;
1464 case CXt_GIVEN:
1c98cc53 1465 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
0d863452 1466 return i;
3b719c58
NC
1467 case CXt_LOOP_PLAIN:
1468 assert(!CxFOREACHDEF(cx));
1469 break;
c6fdafd0 1470 case CXt_LOOP_LAZYIV:
d01136d6 1471 case CXt_LOOP_LAZYSV:
3b719c58 1472 case CXt_LOOP_FOR:
0d863452 1473 if (CxFOREACHDEF(cx)) {
1c98cc53 1474 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
0d863452
RH
1475 return i;
1476 }
1477 }
1478 }
1479 return i;
1480}
1481
1482STATIC I32
1483S_dopoptowhen(pTHX_ I32 startingblock)
1484{
1485 I32 i;
1486 for (i = startingblock; i >= 0; i--) {
eb578fdb 1487 const PERL_CONTEXT *cx = &cxstack[i];
0d863452
RH
1488 switch (CxTYPE(cx)) {
1489 default:
1490 continue;
1491 case CXt_WHEN:
1c98cc53 1492 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
0d863452
RH
1493 return i;
1494 }
1495 }
1496 return i;
1497}
1498
a0d0e21e 1499void
864dbfa3 1500Perl_dounwind(pTHX_ I32 cxix)
a0d0e21e 1501{
a0d0e21e
LW
1502 I32 optype;
1503
f144f1e3
DM
1504 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1505 return;
1506
a0d0e21e 1507 while (cxstack_ix > cxix) {
b0d9ce38 1508 SV *sv;
eb578fdb 1509 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1c98cc53 1510 DEBUG_CX("UNWIND"); \
a0d0e21e 1511 /* Note: we don't need to restore the base context info till the end. */
6b35e009 1512 switch (CxTYPE(cx)) {
c90c0ff4 1513 case CXt_SUBST:
1514 POPSUBST(cx);
1515 continue; /* not break */
a0d0e21e 1516 case CXt_SUB:
b0d9ce38
GS
1517 POPSUB(cx,sv);
1518 LEAVESUB(sv);
a0d0e21e
LW
1519 break;
1520 case CXt_EVAL:
1521 POPEVAL(cx);
adcbf118
DM
1522 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
1523 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
a0d0e21e 1524 break;
c6fdafd0 1525 case CXt_LOOP_LAZYIV:
d01136d6 1526 case CXt_LOOP_LAZYSV:
3b719c58
NC
1527 case CXt_LOOP_FOR:
1528 case CXt_LOOP_PLAIN:
a0d0e21e
LW
1529 POPLOOP(cx);
1530 break;
0a753a76 1531 case CXt_NULL:
a0d0e21e 1532 break;
7766f137
GS
1533 case CXt_FORMAT:
1534 POPFORMAT(cx);
1535 break;
a0d0e21e 1536 }
c90c0ff4 1537 cxstack_ix--;
a0d0e21e 1538 }
1b6737cc 1539 PERL_UNUSED_VAR(optype);
a0d0e21e
LW
1540}
1541
5a844595
GS
1542void
1543Perl_qerror(pTHX_ SV *err)
1544{
7918f24d
NC
1545 PERL_ARGS_ASSERT_QERROR;
1546
6b2fb389
DM
1547 if (PL_in_eval) {
1548 if (PL_in_eval & EVAL_KEEPERR) {
ecad31f0
BF
1549 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1550 SVfARG(err));
6b2fb389
DM
1551 }
1552 else
1553 sv_catsv(ERRSV, err);
1554 }
5a844595
GS
1555 else if (PL_errors)
1556 sv_catsv(PL_errors, err);
1557 else
be2597df 1558 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
13765c85
DM
1559 if (PL_parser)
1560 ++PL_parser->error_count;
5a844595
GS
1561}
1562
bb4c52e0 1563void
c5df3096 1564Perl_die_unwind(pTHX_ SV *msv)
a0d0e21e 1565{
c5df3096 1566 SV *exceptsv = sv_mortalcopy(msv);
96d9b9cd 1567 U8 in_eval = PL_in_eval;
c5df3096 1568 PERL_ARGS_ASSERT_DIE_UNWIND;
87582a92 1569
96d9b9cd 1570 if (in_eval) {
a0d0e21e 1571 I32 cxix;
a0d0e21e 1572 I32 gimme;
a0d0e21e 1573
22a30693
Z
1574 /*
1575 * Historically, perl used to set ERRSV ($@) early in the die
1576 * process and rely on it not getting clobbered during unwinding.
1577 * That sucked, because it was liable to get clobbered, so the
1578 * setting of ERRSV used to emit the exception from eval{} has
1579 * been moved to much later, after unwinding (see just before
1580 * JMPENV_JUMP below). However, some modules were relying on the
1581 * early setting, by examining $@ during unwinding to use it as
1582 * a flag indicating whether the current unwinding was caused by
1583 * an exception. It was never a reliable flag for that purpose,
1584 * being totally open to false positives even without actual
1585 * clobberage, but was useful enough for production code to
1586 * semantically rely on it.
1587 *
1588 * We'd like to have a proper introspective interface that
1589 * explicitly describes the reason for whatever unwinding
1590 * operations are currently in progress, so that those modules
1591 * work reliably and $@ isn't further overloaded. But we don't
1592 * have one yet. In its absence, as a stopgap measure, ERRSV is
1593 * now *additionally* set here, before unwinding, to serve as the
1594 * (unreliable) flag that it used to.
1595 *
1596 * This behaviour is temporary, and should be removed when a
1597 * proper way to detect exceptional unwinding has been developed.
1598 * As of 2010-12, the authors of modules relying on the hack
1599 * are aware of the issue, because the modules failed on
1600 * perls 5.13.{1..7} which had late setting of $@ without this
1601 * early-setting hack.
1602 */
1603 if (!(in_eval & EVAL_KEEPERR)) {
1604 SvTEMP_off(exceptsv);
1605 sv_setsv(ERRSV, exceptsv);
1606 }
1607
fc941f37
Z
1608 if (in_eval & EVAL_KEEPERR) {
1609 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1610 SVfARG(exceptsv));
1611 }
1612
5a844595
GS
1613 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1614 && PL_curstackinfo->si_prev)
1615 {
bac4b2ad 1616 dounwind(-1);
d3acc0f7 1617 POPSTACK;
bac4b2ad 1618 }
e336de0d 1619
a0d0e21e
LW
1620 if (cxix >= 0) {
1621 I32 optype;
b6494f15 1622 SV *namesv;
eb578fdb 1623 PERL_CONTEXT *cx;
901017d6 1624 SV **newsp;
e32ff4e1 1625#ifdef DEBUGGING
8f89e5a9 1626 COP *oldcop;
20189068 1627#endif
8f89e5a9
Z
1628 JMPENV *restartjmpenv;
1629 OP *restartop;
a0d0e21e
LW
1630
1631 if (cxix < cxstack_ix)
1632 dounwind(cxix);
1633
3280af22 1634 POPBLOCK(cx,PL_curpm);
6b35e009 1635 if (CxTYPE(cx) != CXt_EVAL) {
7d0994e0 1636 STRLEN msglen;
96d9b9cd 1637 const char* message = SvPVx_const(exceptsv, msglen);
10edeb5d 1638 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
bf49b057 1639 PerlIO_write(Perl_error_log, message, msglen);
a0d0e21e
LW
1640 my_exit(1);
1641 }
1642 POPEVAL(cx);
b6494f15 1643 namesv = cx->blk_eval.old_namesv;
e32ff4e1 1644#ifdef DEBUGGING
8f89e5a9 1645 oldcop = cx->blk_oldcop;
20189068 1646#endif
8f89e5a9
Z
1647 restartjmpenv = cx->blk_eval.cur_top_env;
1648 restartop = cx->blk_eval.retop;
a0d0e21e
LW
1649
1650 if (gimme == G_SCALAR)
3280af22
NIS
1651 *++newsp = &PL_sv_undef;
1652 PL_stack_sp = newsp;
a0d0e21e 1653
adcbf118
DM
1654 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
1655 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
748a9306 1656
7a2e2cd6 1657 if (optype == OP_REQUIRE) {
e32ff4e1 1658 assert (PL_curcop == oldcop);
b6494f15 1659 (void)hv_store(GvHVn(PL_incgv),
ecad31f0 1660 SvPVX_const(namesv),
c60dbbc3 1661 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
27bcc0a7 1662 &PL_sv_undef, 0);
27e90453
DM
1663 /* note that unlike pp_entereval, pp_require isn't
1664 * supposed to trap errors. So now that we've popped the
1665 * EVAL that pp_require pushed, and processed the error
1666 * message, rethrow the error */
ecad31f0
BF
1667 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1668 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1669 SVs_TEMP)));
7a2e2cd6 1670 }
fc941f37 1671 if (!(in_eval & EVAL_KEEPERR))
96d9b9cd 1672 sv_setsv(ERRSV, exceptsv);
8f89e5a9
Z
1673 PL_restartjmpenv = restartjmpenv;
1674 PL_restartop = restartop;
bb4c52e0 1675 JMPENV_JUMP(3);
e5964223 1676 NOT_REACHED; /* NOTREACHED */
a0d0e21e
LW
1677 }
1678 }
87582a92 1679
96d9b9cd 1680 write_to_stderr(exceptsv);
f86702cc 1681 my_failure_exit();
e5964223 1682 NOT_REACHED; /* NOTREACHED */
a0d0e21e
LW
1683}
1684
1685PP(pp_xor)
1686{
20b7effb 1687 dSP; dPOPTOPssrl;
a0d0e21e
LW
1688 if (SvTRUE(left) != SvTRUE(right))
1689 RETSETYES;
1690 else
1691 RETSETNO;
1692}
1693
8dff4fc5 1694/*
dcccc8ff
KW
1695
1696=head1 CV Manipulation Functions
1697
8dff4fc5
BM
1698=for apidoc caller_cx
1699
72d33970 1700The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
8dff4fc5 1701returned C<PERL_CONTEXT> structure can be interrogated to find all the
72d33970 1702information returned to Perl by C<caller>. Note that XSUBs don't get a
8dff4fc5
BM
1703stack frame, so C<caller_cx(0, NULL)> will return information for the
1704immediately-surrounding Perl code.
1705
1706This function skips over the automatic calls to C<&DB::sub> made on the
72d33970 1707behalf of the debugger. If the stack frame requested was a sub called by
8dff4fc5
BM
1708C<DB::sub>, the return value will be the frame for the call to
1709C<DB::sub>, since that has the correct line number/etc. for the call
72d33970 1710site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
8dff4fc5
BM
1711frame for the sub call itself.
1712
1713=cut
1714*/
1715
1716const PERL_CONTEXT *
1717Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
a0d0e21e 1718{
eb578fdb
KW
1719 I32 cxix = dopoptosub(cxstack_ix);
1720 const PERL_CONTEXT *cx;
1721 const PERL_CONTEXT *ccstack = cxstack;
901017d6 1722 const PERL_SI *top_si = PL_curstackinfo;
27d41816 1723
a0d0e21e 1724 for (;;) {
2c375eb9
GS
1725 /* we may be in a higher stacklevel, so dig down deeper */
1726 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1727 top_si = top_si->si_prev;
1728 ccstack = top_si->si_cxstack;
1729 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1730 }
8dff4fc5
BM
1731 if (cxix < 0)
1732 return NULL;
f2a7f298
DG
1733 /* caller() should not report the automatic calls to &DB::sub */
1734 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
3280af22 1735 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
a0d0e21e
LW
1736 count++;
1737 if (!count--)
1738 break;
2c375eb9 1739 cxix = dopoptosub_at(ccstack, cxix - 1);
a0d0e21e 1740 }
2c375eb9
GS
1741
1742 cx = &ccstack[cxix];
8dff4fc5
BM
1743 if (dbcxp) *dbcxp = cx;
1744
7766f137 1745 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
f54cb97a 1746 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
2c375eb9 1747 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
06a5b730 1748 field below is defined for any cx. */
f2a7f298
DG
1749 /* caller() should not report the automatic calls to &DB::sub */
1750 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
2c375eb9 1751 cx = &ccstack[dbcxix];
06a5b730 1752 }
1753
8dff4fc5
BM
1754 return cx;
1755}
1756
1757PP(pp_caller)
1758{
8dff4fc5 1759 dSP;
eb578fdb 1760 const PERL_CONTEXT *cx;
8dff4fc5 1761 const PERL_CONTEXT *dbcx;
48ebc325 1762 I32 gimme = GIMME_V;
d527ce7c 1763 const HEK *stash_hek;
8dff4fc5 1764 I32 count = 0;
ce0b554b 1765 bool has_arg = MAXARG && TOPs;
25502127 1766 const COP *lcop;
8dff4fc5 1767
ce0b554b
FC
1768 if (MAXARG) {
1769 if (has_arg)
8dff4fc5 1770 count = POPi;
ce0b554b
FC
1771 else (void)POPs;
1772 }
8dff4fc5 1773
ce0b554b 1774 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
8dff4fc5 1775 if (!cx) {
48ebc325 1776 if (gimme != G_ARRAY) {
8dff4fc5
BM
1777 EXTEND(SP, 1);
1778 RETPUSHUNDEF;
1779 }
1780 RETURN;
1781 }
1782
fb55feef 1783 DEBUG_CX("CALLER");
d0279c7c 1784 assert(CopSTASH(cx->blk_oldcop));
e7886211
FC
1785 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1786 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1787 : NULL;
48ebc325 1788 if (gimme != G_ARRAY) {
27d41816 1789 EXTEND(SP, 1);
d527ce7c 1790 if (!stash_hek)
3280af22 1791 PUSHs(&PL_sv_undef);
49d8d3a1
MB
1792 else {
1793 dTARGET;
d527ce7c 1794 sv_sethek(TARG, stash_hek);
49d8d3a1
MB
1795 PUSHs(TARG);
1796 }
a0d0e21e
LW
1797 RETURN;
1798 }
a0d0e21e 1799
b3ca2e83 1800 EXTEND(SP, 11);
27d41816 1801
d527ce7c 1802 if (!stash_hek)
3280af22 1803 PUSHs(&PL_sv_undef);
d527ce7c
BF
1804 else {
1805 dTARGET;
1806 sv_sethek(TARG, stash_hek);
1807 PUSHTARG;
1808 }
6e449a3a 1809 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
e6dae479 1810 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
25502127
FC
1811 cx->blk_sub.retop, TRUE);
1812 if (!lcop)
1813 lcop = cx->blk_oldcop;
e9e9e546 1814 mPUSHu(CopLINE(lcop));
ce0b554b 1815 if (!has_arg)
a0d0e21e 1816 RETURN;
7766f137
GS
1817 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1818 /* So is ccstack[dbcxix]. */
a5f47741 1819 if (CvHASGV(dbcx->blk_sub.cv)) {
ecf05a58 1820 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
bf38a478 1821 PUSHs(boolSV(CxHASARGS(cx)));
07b8c804
RGS
1822 }
1823 else {
84bafc02 1824 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
bf38a478 1825 PUSHs(boolSV(CxHASARGS(cx)));
07b8c804 1826 }
a0d0e21e
LW
1827 }
1828 else {
84bafc02 1829 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
6e449a3a 1830 mPUSHi(0);
a0d0e21e 1831 }
54310121 1832 gimme = (I32)cx->blk_gimme;
1833 if (gimme == G_VOID)
3280af22 1834 PUSHs(&PL_sv_undef);
54310121 1835 else
98625aca 1836 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
6b35e009 1837 if (CxTYPE(cx) == CXt_EVAL) {
811a4de9 1838 /* eval STRING */
85a64632 1839 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
78beb4ca
TC
1840 SV *cur_text = cx->blk_eval.cur_text;
1841 if (SvCUR(cur_text) >= 2) {
1842 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1843 SvUTF8(cur_text)|SVs_TEMP));
1844 }
1845 else {
1846 /* I think this is will always be "", but be sure */
1847 PUSHs(sv_2mortal(newSVsv(cur_text)));
1848 }
1849
3280af22 1850 PUSHs(&PL_sv_no);
0f79a09d 1851 }
811a4de9 1852 /* require */
0f79a09d 1853 else if (cx->blk_eval.old_namesv) {
6e449a3a 1854 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
3280af22 1855 PUSHs(&PL_sv_yes);
06a5b730 1856 }
811a4de9
GS
1857 /* eval BLOCK (try blocks have old_namesv == 0) */
1858 else {
1859 PUSHs(&PL_sv_undef);
1860 PUSHs(&PL_sv_undef);
1861 }
4633a7c4 1862 }
a682de96
GS
1863 else {
1864 PUSHs(&PL_sv_undef);
1865 PUSHs(&PL_sv_undef);
1866 }
bafb2adc 1867 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
ed094faf 1868 && CopSTASH_eq(PL_curcop, PL_debstash))
4633a7c4 1869 {
9513529b
DM
1870 /* slot 0 of the pad contains the original @_ */
1871 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
1872 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
1873 cx->blk_sub.olddepth+1]))[0]);
c70927a6 1874 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
a0d0e21e 1875
e1a80902 1876 Perl_init_dbargs(aTHX);
a0d0e21e 1877
3280af22
NIS
1878 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1879 av_extend(PL_dbargs, AvFILLp(ary) + off);
1880 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1881 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
a0d0e21e 1882 }
6e449a3a 1883 mPUSHi(CopHINTS_get(cx->blk_oldcop));
e476b1b5
GS
1884 {
1885 SV * mask ;
72dc9ed5 1886 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
114bafba 1887
f07626ad 1888 if (old_warnings == pWARN_NONE)
e476b1b5 1889 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
f07626ad
FC
1890 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1891 mask = &PL_sv_undef ;
ac27b0f5 1892 else if (old_warnings == pWARN_ALL ||
75b6c4ca
RGS
1893 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1894 /* Get the bit mask for $warnings::Bits{all}, because
1895 * it could have been extended by warnings::register */
1896 SV **bits_all;
6673a63c 1897 HV * const bits = get_hv("warnings::Bits", 0);
017a3ce5 1898 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
75b6c4ca
RGS
1899 mask = newSVsv(*bits_all);
1900 }
1901 else {
1902 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1903 }
1904 }
e476b1b5 1905 else
72dc9ed5 1906 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
6e449a3a 1907 mPUSHs(mask);
e476b1b5 1908 }
b3ca2e83 1909
c28fe1ec 1910 PUSHs(cx->blk_oldcop->cop_hints_hash ?
20439bc7 1911 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
b3ca2e83 1912 : &PL_sv_undef);
a0d0e21e
LW
1913 RETURN;
1914}
1915
a0d0e21e
LW
1916PP(pp_reset)
1917{
39644a26 1918 dSP;
ca826051
FC
1919 const char * tmps;
1920 STRLEN len = 0;
1921 if (MAXARG < 1 || (!TOPs && !POPs))
1922 tmps = NULL, len = 0;
1923 else
1924 tmps = SvPVx_const(POPs, len);
1925 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
3280af22 1926 PUSHs(&PL_sv_yes);
a0d0e21e
LW
1927 RETURN;
1928}
1929
dd2155a4
DM
1930/* like pp_nextstate, but used instead when the debugger is active */
1931
a0d0e21e
LW
1932PP(pp_dbstate)
1933{
533c011a 1934 PL_curcop = (COP*)PL_op;
a0d0e21e 1935 TAINT_NOT; /* Each statement is presumed innocent */
3280af22 1936 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
a0d0e21e
LW
1937 FREETMPS;
1938
f410a211
NC
1939 PERL_ASYNC_CHECK();
1940
88df5f01 1941 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
a6d69523 1942 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
a0d0e21e 1943 {
39644a26 1944 dSP;
eb578fdb 1945 PERL_CONTEXT *cx;
f54cb97a 1946 const I32 gimme = G_ARRAY;
0bd48802 1947 GV * const gv = PL_DBgv;
432d4561
JL
1948 CV * cv = NULL;
1949
1950 if (gv && isGV_with_GP(gv))
1951 cv = GvCV(gv);
a0d0e21e 1952
c2cb6f77 1953 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
cea2e8a9 1954 DIE(aTHX_ "No DB::DB routine defined");
a0d0e21e 1955
aea4f609
DM
1956 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1957 /* don't do recursive DB::DB call */
a0d0e21e 1958 return NORMAL;
748a9306 1959
aed2304a 1960 if (CvISXSUB(cv)) {
8ae997c5
DM
1961 ENTER;
1962 SAVEI32(PL_debug);
1963 PL_debug = 0;
1964 SAVESTACK_POS();
8a44b450 1965 SAVETMPS;
c127bd3a
SF
1966 PUSHMARK(SP);
1967 (void)(*CvXSUB(cv))(aTHX_ cv);
c127bd3a 1968 FREETMPS;
a57c6685 1969 LEAVE;
c127bd3a
SF
1970 return NORMAL;
1971 }
1972 else {
8ae997c5 1973 U8 hasargs = 0;
c127bd3a
SF
1974 PUSHBLOCK(cx, CXt_SUB, SP);
1975 PUSHSUB_DB(cx);
1976 cx->blk_sub.retop = PL_op->op_next;
8ae997c5
DM
1977 cx->blk_sub.old_savestack_ix = PL_savestack_ix;
1978
1979 SAVEI32(PL_debug);
1980 PL_debug = 0;
1981 SAVESTACK_POS();
c127bd3a 1982 CvDEPTH(cv)++;
9d976ff5
FC
1983 if (CvDEPTH(cv) >= 2) {
1984 PERL_STACK_OVERFLOW_CHECK();
1985 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1986 }
9d976ff5 1987 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
c127bd3a
SF
1988 RETURNOP(CvSTART(cv));
1989 }
a0d0e21e
LW
1990 }
1991 else
1992 return NORMAL;
1993}
1994
2fc507dc 1995/* S_leave_common: Common code that many functions in this file use on
e5ce4d8a 1996 scope exit.
2fc507dc 1997
e5ce4d8a
DM
1998 Process the return args on the stack in the range (mark..sp) based on
1999 context, with any final args starting at newsp.
2000 Args are mortal copied (or mortalied if lvalue) unless its safe to use
2001 as-is, based on whether it the specified flags
2fc507dc
FC
2002
2003 Also, taintedness is cleared.
2004*/
2ec7f6f2 2005
b9d76716 2006STATIC SV **
2fc507dc 2007S_leave_common(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2ec7f6f2 2008 U32 flags, bool lvalue)
b9d76716 2009{
2fc507dc 2010 PERL_ARGS_ASSERT_LEAVE_COMMON;
b9d76716 2011
80dd201b 2012 TAINT_NOT;
b9d76716
VP
2013 if (gimme == G_SCALAR) {
2014 if (MARK < SP)
e5ce4d8a 2015 *++newsp = (SvFLAGS(*SP) & flags)
2ec7f6f2
FC
2016 ? *SP
2017 : lvalue
2018 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2019 : sv_mortalcopy(*SP);
b9d76716
VP
2020 else {
2021 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2022 MARK = newsp;
2023 MEXTEND(MARK, 1);
2024 *++MARK = &PL_sv_undef;
2025 return MARK;
2026 }
2027 }
2028 else if (gimme == G_ARRAY) {
2029 /* in case LEAVE wipes old return values */
2030 while (++MARK <= SP) {
e5ce4d8a 2031 if (SvFLAGS(*MARK) & flags)
b9d76716
VP
2032 *++newsp = *MARK;
2033 else {
2ec7f6f2
FC
2034 *++newsp = lvalue
2035 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2036 : sv_mortalcopy(*MARK);
b9d76716
VP
2037 TAINT_NOT; /* Each item is independent */
2038 }
2039 }
2040 /* When this function was called with MARK == newsp, we reach this
2041 * point with SP == newsp. */
2042 }
2043
2044 return newsp;
2045}
2046
2b9a6457
VP
2047PP(pp_enter)
2048{
20b7effb 2049 dSP;
eb578fdb 2050 PERL_CONTEXT *cx;
7c2d9d03 2051 I32 gimme = GIMME_V;
2b9a6457
VP
2052
2053 ENTER_with_name("block");
2054
2055 SAVETMPS;
2056 PUSHBLOCK(cx, CXt_BLOCK, SP);
2057
2058 RETURN;
2059}
2060
2061PP(pp_leave)
2062{
20b7effb 2063 dSP;
eb578fdb 2064 PERL_CONTEXT *cx;
2b9a6457
VP
2065 SV **newsp;
2066 PMOP *newpm;
2067 I32 gimme;
2068
2069 if (PL_op->op_flags & OPf_SPECIAL) {
2070 cx = &cxstack[cxstack_ix];
2071 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2072 }
2073
2074 POPBLOCK(cx,newpm);
2075
2076 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2077
d37a3c64
DM
2078 SP = (gimme == G_VOID)
2079 ? newsp
2080 : leave_common(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2081 PL_op->op_private & OPpLVALUE);
2b9a6457
VP
2082 PL_curpm = newpm; /* Don't pop $1 et al till now */
2083
2084 LEAVE_with_name("block");
2085
2086 RETURN;
2087}
2088
eaa9f768
JH
2089static bool
2090S_outside_integer(pTHX_ SV *sv)
2091{
2092 if (SvOK(sv)) {
2093 const NV nv = SvNV_nomg(sv);
415b66b2
JH
2094 if (Perl_isinfnan(nv))
2095 return TRUE;
eaa9f768
JH
2096#ifdef NV_PRESERVES_UV
2097 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2098 return TRUE;
2099#else
2100 if (nv <= (NV)IV_MIN)
2101 return TRUE;
2102 if ((nv > 0) &&
2103 ((nv > (NV)UV_MAX ||
2104 SvUV_nomg(sv) > (UV)IV_MAX)))
2105 return TRUE;
2106#endif
2107 }
2108 return FALSE;
2109}
2110
a0d0e21e
LW
2111PP(pp_enteriter)
2112{
20b7effb 2113 dSP; dMARK;
eb578fdb 2114 PERL_CONTEXT *cx;
f54cb97a 2115 const I32 gimme = GIMME_V;
df530c37 2116 void *itervar; /* location of the iteration variable */
840fe433 2117 U8 cxtype = CXt_LOOP_FOR;
a0d0e21e 2118
d343c3ef 2119 ENTER_with_name("loop1");
4633a7c4
LW
2120 SAVETMPS;
2121
aafca525
DM
2122 if (PL_op->op_targ) { /* "my" variable */
2123 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
fdb8b82b
DM
2124 /* the SV currently in the pad slot is never live during
2125 * iteration (the slot is always aliased to one of the items)
2126 * so it's always stale */
2127 SvPADSTALE_on(PAD_SVl(PL_op->op_targ));
14f338dc 2128 }
09edbca0 2129 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
aafca525 2130 itervar = &PAD_SVl(PL_op->op_targ);
54b9620d 2131 }
d39c26a6 2132 else if (LIKELY(isGV(TOPs))) { /* symbol table variable */
159b6efe 2133 GV * const gv = MUTABLE_GV(POPs);
f83b46a0
DM
2134 SV** svp = &GvSV(gv);
2135 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
561b68a9 2136 *svp = newSV(0);
df530c37 2137 itervar = (void *)gv;
54b9620d 2138 }
d39c26a6
FC
2139 else {
2140 SV * const sv = POPs;
2141 assert(SvTYPE(sv) == SVt_PVMG);
2142 assert(SvMAGIC(sv));
2143 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2144 itervar = (void *)sv;
2145 cxtype |= CXp_FOR_LVREF;
2146 }
4633a7c4 2147
0d863452
RH
2148 if (PL_op->op_private & OPpITER_DEF)
2149 cxtype |= CXp_FOR_DEF;
2150
d343c3ef 2151 ENTER_with_name("loop2");
a0d0e21e 2152
7766f137 2153 PUSHBLOCK(cx, cxtype, SP);
df530c37 2154 PUSHLOOP_FOR(cx, itervar, MARK);
533c011a 2155 if (PL_op->op_flags & OPf_STACKED) {
d01136d6
BS
2156 SV *maybe_ary = POPs;
2157 if (SvTYPE(maybe_ary) != SVt_PVAV) {
89ea2908 2158 dPOPss;
d01136d6 2159 SV * const right = maybe_ary;
d39c26a6
FC
2160 if (UNLIKELY(cxtype & CXp_FOR_LVREF))
2161 DIE(aTHX_ "Assigned value is not a reference");
984a4bea
RD
2162 SvGETMAGIC(sv);
2163 SvGETMAGIC(right);
4fe3f0fa 2164 if (RANGE_IS_NUMERIC(sv,right)) {
d01136d6 2165 cx->cx_type &= ~CXTYPEMASK;
c6fdafd0
NC
2166 cx->cx_type |= CXt_LOOP_LAZYIV;
2167 /* Make sure that no-one re-orders cop.h and breaks our
2168 assumptions */
2169 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
eaa9f768
JH
2170 if (S_outside_integer(aTHX_ sv) ||
2171 S_outside_integer(aTHX_ right))
076d9a11 2172 DIE(aTHX_ "Range iterator outside integer range");
f52e41ad
FC
2173 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2174 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
d4665a05
DM
2175#ifdef DEBUGGING
2176 /* for correct -Dstv display */
2177 cx->blk_oldsp = sp - PL_stack_base;
2178#endif
89ea2908 2179 }
3f63a782 2180 else {
d01136d6
BS
2181 cx->cx_type &= ~CXTYPEMASK;
2182 cx->cx_type |= CXt_LOOP_LAZYSV;
2183 /* Make sure that no-one re-orders cop.h and breaks our
2184 assumptions */
2185 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2186 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2187 cx->blk_loop.state_u.lazysv.end = right;
2188 SvREFCNT_inc(right);
2189 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
267cc4a8
NC
2190 /* This will do the upgrade to SVt_PV, and warn if the value
2191 is uninitialised. */
10516c54 2192 (void) SvPV_nolen_const(right);
267cc4a8
NC
2193 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2194 to replace !SvOK() with a pointer to "". */
2195 if (!SvOK(right)) {
2196 SvREFCNT_dec(right);
d01136d6 2197 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
267cc4a8 2198 }
3f63a782 2199 }
89ea2908 2200 }
d01136d6 2201 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
502c6561 2202 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
d01136d6
BS
2203 SvREFCNT_inc(maybe_ary);
2204 cx->blk_loop.state_u.ary.ix =
2205 (PL_op->op_private & OPpITER_REVERSED) ?
2206 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2207 -1;
ef3e5ea9 2208 }
89ea2908 2209 }
d01136d6
BS
2210 else { /* iterating over items on the stack */
2211 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
ef3e5ea9 2212 if (PL_op->op_private & OPpITER_REVERSED) {
d01136d6 2213 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
ef3e5ea9
NC
2214 }
2215 else {
d01136d6 2216 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
ef3e5ea9 2217 }
4633a7c4 2218 }
a0d0e21e
LW
2219
2220 RETURN;
2221}
2222
2223PP(pp_enterloop)
2224{
20b7effb 2225 dSP;
eb578fdb 2226 PERL_CONTEXT *cx;
f54cb97a 2227 const I32 gimme = GIMME_V;
a0d0e21e 2228
d343c3ef 2229 ENTER_with_name("loop1");
a0d0e21e 2230 SAVETMPS;
d343c3ef 2231 ENTER_with_name("loop2");
a0d0e21e 2232
3b719c58
NC
2233 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2234 PUSHLOOP_PLAIN(cx, SP);
a0d0e21e
LW
2235
2236 RETURN;
2237}
2238
2239PP(pp_leaveloop)
2240{
20b7effb 2241 dSP;
eb578fdb 2242 PERL_CONTEXT *cx;
a0d0e21e
LW
2243 I32 gimme;
2244 SV **newsp;
2245 PMOP *newpm;
2246 SV **mark;
2247
2248 POPBLOCK(cx,newpm);
3b719c58 2249 assert(CxTYPE_is_LOOP(cx));
4fdae800 2250 mark = newsp;
a8bba7fa 2251 newsp = PL_stack_base + cx->blk_loop.resetsp;
f86702cc 2252
d37a3c64
DM
2253 SP = (gimme == G_VOID)
2254 ? newsp
2255 : leave_common(newsp, SP, MARK, gimme, 0,
a373464f 2256 PL_op->op_private & OPpLVALUE);
f86702cc 2257 PUTBACK;
2258
a8bba7fa 2259 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
3280af22 2260 PL_curpm = newpm; /* ... and pop $1 et al */
f86702cc 2261
d343c3ef
GG
2262 LEAVE_with_name("loop2");
2263 LEAVE_with_name("loop1");
a0d0e21e 2264
f86702cc 2265 return NORMAL;
a0d0e21e
LW
2266}
2267
31ccb4f5
DM
2268
2269/* This duplicates most of pp_leavesub, but with additional code to handle
2270 * return args in lvalue context. It was forked from pp_leavesub to
2271 * avoid slowing down that function any further.
2272 *
2273 * Any changes made to this function may need to be copied to pp_leavesub
2274 * and vice-versa.
57486a97
DM
2275 */
2276
31ccb4f5 2277PP(pp_leavesublv)
3bdf583b 2278{
57486a97
DM
2279 dSP;
2280 SV **newsp;
2281 SV **mark;
2282 PMOP *newpm;
2283 I32 gimme;
2284 PERL_CONTEXT *cx;
2285 SV *sv;
2286 bool ref;
a8fc6464 2287 const char *what = NULL;
57486a97 2288
1f0ba93b
DM
2289 if (CxMULTICALL(&cxstack[cxstack_ix])) {
2290 /* entry zero of a stack is always PL_sv_undef, which
2291 * simplifies converting a '()' return into undef in scalar context */
2292 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
85ecf147 2293 return 0;
1f0ba93b 2294 }
85ecf147 2295
57486a97
DM
2296 POPBLOCK(cx,newpm);
2297 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2298 TAINT_NOT;
2299
e80c4acf 2300 mark = newsp + 1;
57486a97
DM
2301
2302 ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
3bdf583b 2303 if (gimme == G_SCALAR) {
d25b0d7b
FC
2304 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2305 SV *sv;
e80c4acf
DM
2306 if (MARK <= SP) {
2307 assert(MARK == SP);
3885a45a 2308 if ((SvPADTMP(TOPs) || SvREADONLY(TOPs)) &&
d25b0d7b 2309 !SvSMAGICAL(TOPs)) {
001de122 2310 what =
d25b0d7b 2311 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
001de122 2312 : "a readonly value" : "a temporary";
d25b0d7b 2313 }
001de122 2314 else goto copy_sv;
d25b0d7b
FC
2315 }
2316 else {
2317 /* sub:lvalue{} will take us here. */
001de122 2318 what = "undef";
d25b0d7b 2319 }
a8fc6464 2320 croak:
001de122 2321 POPSUB(cx,sv);
716436dc 2322 cxstack_ix--;
001de122
FC
2323 PL_curpm = newpm;
2324 LEAVESUB(sv);
2325 Perl_croak(aTHX_
2326 "Can't return %s from lvalue subroutine", what
2327 );
d25b0d7b 2328 }
e80c4acf 2329 if (MARK <= SP) {
a5ad7a5a 2330 copy_sv:
3bdf583b 2331 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
5811c07e 2332 if (!SvPADTMP(*SP)) {
e80c4acf 2333 *MARK = SvREFCNT_inc(*SP);
3bdf583b 2334 FREETMPS;
e80c4acf 2335 sv_2mortal(*MARK);
5811c07e
FC
2336 }
2337 else {
2338 /* FREETMPS could clobber it */
2339 SV *sv = SvREFCNT_inc(*SP);
2340 FREETMPS;
e80c4acf 2341 *MARK = sv_mortalcopy(sv);
5811c07e
FC
2342 SvREFCNT_dec(sv);
2343 }
3bdf583b
FC
2344 }
2345 else
e80c4acf 2346 *MARK =
5811c07e
FC
2347 SvPADTMP(*SP)
2348 ? sv_mortalcopy(*SP)
2349 : !SvTEMP(*SP)
e08be60b
FC
2350 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2351 : *SP;
3bdf583b 2352 }
0d235c77 2353 else {
e80c4acf
DM
2354 MEXTEND(MARK, 0);
2355 *MARK = &PL_sv_undef;
0d235c77 2356 }
e80c4acf
DM
2357 SP = MARK;
2358
0e9700df 2359 if (CxLVAL(cx) & OPpDEREF) {
767eda44
FC
2360 SvGETMAGIC(TOPs);
2361 if (!SvOK(TOPs)) {
0e9700df 2362 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
767eda44
FC
2363 }
2364 }
3bdf583b
FC
2365 }
2366 else if (gimme == G_ARRAY) {
0e9700df 2367 assert (!(CxLVAL(cx) & OPpDEREF));
80422e24 2368 if (ref || !CxLVAL(cx))
e80c4acf
DM
2369 for (; MARK <= SP; MARK++)
2370 *MARK =
5811c07e 2371 SvFLAGS(*MARK) & SVs_PADTMP
80422e24 2372 ? sv_mortalcopy(*MARK)
5811c07e
FC
2373 : SvTEMP(*MARK)
2374 ? *MARK
80422e24 2375 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
e80c4acf 2376 else for (; MARK <= SP; MARK++) {
d25b0d7b 2377 if (*MARK != &PL_sv_undef
3885a45a 2378 && (SvPADTMP(*MARK) || SvREADONLY(*MARK))
d25b0d7b 2379 ) {
d25b0d7b 2380 /* Might be flattened array after $#array = */
a8fc6464
DM
2381 what = SvREADONLY(*MARK)
2382 ? "a readonly value" : "a temporary";
2383 goto croak;
d25b0d7b 2384 }
e80c4acf
DM
2385 else if (!SvTEMP(*MARK))
2386 *MARK = sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
3bdf583b
FC
2387 }
2388 }
e80c4acf 2389 PUTBACK;
57486a97 2390
716436dc
DM
2391 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2392 cxstack_ix--;
57486a97
DM
2393 PL_curpm = newpm; /* ... and pop $1 et al */
2394 LEAVESUB(sv);
2395
2396 return cx->blk_sub.retop;
3bdf583b
FC
2397}
2398
57486a97 2399
a0d0e21e
LW
2400PP(pp_return)
2401{
20b7effb 2402 dSP; dMARK;
eb578fdb 2403 PERL_CONTEXT *cx;
617a4f41 2404 SV **oldsp;
0bd48802
AL
2405 const I32 cxix = dopoptosub(cxstack_ix);
2406
d40dc6b1
DM
2407 assert(cxstack_ix >= 0);
2408 if (cxix < cxstack_ix) {
2409 if (cxix < 0) {
2410 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2411 * sort block, which is a CXt_NULL
2412 * not a CXt_SUB */
2413 dounwind(0);
2414 /* if we were in list context, we would have to splice out
2415 * any junk before the return args, like we do in the general
2416 * pp_return case, e.g.
2417 * sub f { for (junk1, junk2) { return arg1, arg2 }}
2418 */
2419 assert(cxstack[0].blk_gimme == G_SCALAR);
2420 return 0;
2421 }
2422 else
2423 DIE(aTHX_ "Can't return outside a subroutine");
2424 }
a0d0e21e 2425 dounwind(cxix);
d40dc6b1 2426 }
a0d0e21e 2427
6228a1e1 2428 cx = &cxstack[cxix];
9850bf21 2429
a375ceca
DM
2430 oldsp = PL_stack_base + cx->blk_oldsp;
2431 if (oldsp != MARK) {
2432 /* Handle extra junk on the stack. For example,
2433 * for (1,2) { return 3,4 }
2434 * leaves 1,2,3,4 on the stack. In list context we
2435 * have to splice out the 1,2; In scalar context for
2436 * for (1,2) { return }
2437 * we need to set sp = oldsp so that pp_leavesub knows
2438 * to push &PL_sv_undef onto the stack.
2439 * Note that in pp_return we only do the extra processing
2440 * required to handle junk; everything else we leave to
2441 * pp_leavesub.
2442 */
2443 SSize_t nargs = SP - MARK;
2444 if (nargs) {
2445 if (cx->blk_gimme == G_ARRAY) {
2446 /* shift return args to base of call stack frame */
48344877 2447 Move(MARK + 1, oldsp + 1, nargs, SV*);
a375ceca 2448 PL_stack_sp = oldsp + nargs;
6228a1e1 2449 }
13929c4c 2450 }
a375ceca
DM
2451 else
2452 PL_stack_sp = oldsp;
2453 }
617a4f41
DM
2454
2455 /* fall through to a normal exit */
2456 switch (CxTYPE(cx)) {
2457 case CXt_EVAL:
2458 return CxTRYBLOCK(cx)
2459 ? Perl_pp_leavetry(aTHX)
2460 : Perl_pp_leaveeval(aTHX);
2461 case CXt_SUB:
13929c4c 2462 return CvLVALUE(cx->blk_sub.cv)
31ccb4f5 2463 ? Perl_pp_leavesublv(aTHX)
13929c4c 2464 : Perl_pp_leavesub(aTHX);
7766f137 2465 case CXt_FORMAT:
617a4f41 2466 return Perl_pp_leavewrite(aTHX);
a0d0e21e 2467 default:
5637ef5b 2468 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
a0d0e21e 2469 }
a0d0e21e
LW
2470}
2471
4f443c3d 2472
1f039d60
FC
2473static I32
2474S_unwind_loop(pTHX_ const char * const opname)
a0d0e21e 2475{
a0d0e21e 2476 I32 cxix;
1f039d60
FC
2477 if (PL_op->op_flags & OPf_SPECIAL) {
2478 cxix = dopoptoloop(cxstack_ix);
2479 if (cxix < 0)
2480 /* diag_listed_as: Can't "last" outside a loop block */
2481 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2482 }
2483 else {
2484 dSP;
2485 STRLEN label_len;
2486 const char * const label =
2487 PL_op->op_flags & OPf_STACKED
2488 ? SvPV(TOPs,label_len)
2489 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2490 const U32 label_flags =
2491 PL_op->op_flags & OPf_STACKED
2492 ? SvUTF8(POPs)
2493 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2494 PUTBACK;
2495 cxix = dopoptolabel(label, label_len, label_flags);
2496 if (cxix < 0)
2497 /* diag_listed_as: Label not found for "last %s" */
2498 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2499 opname,
2500 SVfARG(PL_op->op_flags & OPf_STACKED
2501 && !SvGMAGICAL(TOPp1s)
2502 ? TOPp1s
2503 : newSVpvn_flags(label,
2504 label_len,
2505 label_flags | SVs_TEMP)));
2506 }
2507 if (cxix < cxstack_ix)
2508 dounwind(cxix);
2509 return cxix;
2510}
2511
2512PP(pp_last)
2513{
eb578fdb 2514 PERL_CONTEXT *cx;
a0d0e21e 2515 I32 gimme;
b263a1ad 2516 OP *nextop = NULL;
a0d0e21e
LW
2517 SV **newsp;
2518 PMOP *newpm;
9d4ba2ae 2519
1f039d60 2520 S_unwind_loop(aTHX_ "last");
a0d0e21e
LW
2521
2522 POPBLOCK(cx,newpm);
5dd42e15 2523 cxstack_ix++; /* temporarily protect top context */
d3e5e568
DM
2524 assert(
2525 CxTYPE(cx) == CXt_LOOP_LAZYIV
2526 || CxTYPE(cx) == CXt_LOOP_LAZYSV
2527 || CxTYPE(cx) == CXt_LOOP_FOR
2528 || CxTYPE(cx) == CXt_LOOP_PLAIN
2529 );
2530 newsp = PL_stack_base + cx->blk_loop.resetsp;
2531 nextop = cx->blk_loop.my_op->op_lastop->op_next;
a0d0e21e 2532
a1f49e72 2533 TAINT_NOT;
0c0c317c 2534 PL_stack_sp = newsp;
f86702cc 2535
8bf51796 2536 LEAVE_with_name("loop2");
5dd42e15 2537 cxstack_ix--;
f86702cc 2538 /* Stack values are safe: */
d3e5e568 2539 POPLOOP(cx); /* release loop vars ... */
8bf51796 2540 LEAVE_with_name("loop1");
3280af22 2541 PL_curpm = newpm; /* ... and pop $1 et al */
a0d0e21e 2542
9d4ba2ae 2543 PERL_UNUSED_VAR(gimme);
f86702cc 2544 return nextop;
a0d0e21e
LW
2545}
2546
2547PP(pp_next)
2548{
eb578fdb 2549 PERL_CONTEXT *cx;
1f039d60 2550 const I32 inner = PL_scopestack_ix;
a0d0e21e 2551
1f039d60 2552 S_unwind_loop(aTHX_ "next");
a0d0e21e 2553
85538317
GS
2554 /* clear off anything above the scope we're re-entering, but
2555 * save the rest until after a possible continue block */
1ba6ee2b 2556 TOPBLOCK(cx);
85538317
GS
2557 if (PL_scopestack_ix < inner)
2558 leave_scope(PL_scopestack[PL_scopestack_ix]);
3a1b2b9e 2559 PL_curcop = cx->blk_oldcop;
47c9d59f 2560 PERL_ASYNC_CHECK();
d57ce4df 2561 return (cx)->blk_loop.my_op->op_nextop;
a0d0e21e
LW
2562}
2563
2564PP(pp_redo)
2565{
1f039d60 2566 const I32 cxix = S_unwind_loop(aTHX_ "redo");
eb578fdb 2567 PERL_CONTEXT *cx;
a0d0e21e 2568 I32 oldsave;
1f039d60 2569 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
a0d0e21e 2570
a034e688
DM
2571 if (redo_op->op_type == OP_ENTER) {
2572 /* pop one less context to avoid $x being freed in while (my $x..) */
2573 cxstack_ix++;
2574 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2575 redo_op = redo_op->op_next;
2576 }
2577
a0d0e21e 2578 TOPBLOCK(cx);
3280af22 2579 oldsave = PL_scopestack[PL_scopestack_ix - 1];
a0d0e21e 2580 LEAVE_SCOPE(oldsave);
936c78b5 2581 FREETMPS;
3a1b2b9e 2582 PL_curcop = cx->blk_oldcop;
47c9d59f 2583 PERL_ASYNC_CHECK();
a034e688 2584 return redo_op;
a0d0e21e
LW
2585}
2586
0824fdcb 2587STATIC OP *
5db1eb8d 2588S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
a0d0e21e 2589{
a0d0e21e 2590 OP **ops = opstack;
a1894d81 2591 static const char* const too_deep = "Target of goto is too deeply nested";
a0d0e21e 2592
7918f24d
NC
2593 PERL_ARGS_ASSERT_DOFINDLABEL;
2594
fc36a67e 2595 if (ops >= oplimit)
0157ef98 2596 Perl_croak(aTHX_ "%s", too_deep);
11343788
MB
2597 if (o->op_type == OP_LEAVE ||
2598 o->op_type == OP_SCOPE ||
2599 o->op_type == OP_LEAVELOOP ||
33d34e4c 2600 o->op_type == OP_LEAVESUB ||
11343788 2601 o->op_type == OP_LEAVETRY)
fc36a67e 2602 {
5dc0d613 2603 *ops++ = cUNOPo->op_first;
fc36a67e 2604 if (ops >= oplimit)
0157ef98 2605 Perl_croak(aTHX_ "%s", too_deep);
fc36a67e 2606 }
c4aa4e48 2607 *ops = 0;
11343788 2608 if (o->op_flags & OPf_KIDS) {
aec46f14 2609 OP *kid;
a0d0e21e 2610 /* First try all the kids at this level, since that's likeliest. */
e6dae479 2611 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
7e8f1eac 2612 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
5db1eb8d
BF
2613 STRLEN kid_label_len;
2614 U32 kid_label_flags;
2615 const char *kid_label = CopLABEL_len_flags(kCOP,
2616 &kid_label_len, &kid_label_flags);
2617 if (kid_label && (
2618 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2619 (flags & SVf_UTF8)
2620 ? (bytes_cmp_utf8(
2621 (const U8*)kid_label, kid_label_len,
2622 (const U8*)label, len) == 0)
2623 : (bytes_cmp_utf8(
2624 (const U8*)label, len,
2625 (const U8*)kid_label, kid_label_len) == 0)
eade7155
BF
2626 : ( len == kid_label_len && ((kid_label == label)
2627 || memEQ(kid_label, label, len)))))
7e8f1eac
AD
2628 return kid;
2629 }
a0d0e21e 2630 }
e6dae479 2631 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3280af22 2632 if (kid == PL_lastgotoprobe)
a0d0e21e 2633 continue;
ed8d0fe2
SM
2634 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2635 if (ops == opstack)
2636 *ops++ = kid;
2637 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2638 ops[-1]->op_type == OP_DBSTATE)
2639 ops[-1] = kid;
2640 else
2641 *ops++ = kid;
2642 }
5db1eb8d 2643 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
11343788 2644 return o;
a0d0e21e
LW
2645 }
2646 }
c4aa4e48 2647 *ops = 0;
a0d0e21e
LW
2648 return 0;
2649}
2650
b1c05ba5
DM
2651
2652/* also used for: pp_dump() */
2653
2654PP(pp_goto)
a0d0e21e 2655{
27da23d5 2656 dVAR; dSP;
cbbf8932 2657 OP *retop = NULL;
a0d0e21e 2658 I32 ix;
eb578fdb 2659 PERL_CONTEXT *cx;
fc36a67e 2660#define GOTO_DEPTH 64
2661 OP *enterops[GOTO_DEPTH];
cbbf8932 2662 const char *label = NULL;
5db1eb8d
BF
2663 STRLEN label_len = 0;
2664 U32 label_flags = 0;
bfed75c6 2665 const bool do_dump = (PL_op->op_type == OP_DUMP);
a1894d81 2666 static const char* const must_have_label = "goto must have label";
a0d0e21e 2667
533c011a 2668 if (PL_op->op_flags & OPf_STACKED) {
7d1d69cb
DM
2669 /* goto EXPR or goto &foo */
2670
9d4ba2ae 2671 SV * const sv = POPs;
55b37f1c 2672 SvGETMAGIC(sv);
a0d0e21e 2673
a0d0e21e 2674 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
0fa3d31d 2675 /* This egregious kludge implements goto &subroutine */
a0d0e21e 2676 I32 cxix;
eb578fdb 2677 PERL_CONTEXT *cx;
ea726b52 2678 CV *cv = MUTABLE_CV(SvRV(sv));
049bd5ff 2679 AV *arg = GvAV(PL_defgv);
a0d0e21e 2680
5d52e310 2681 while (!CvROOT(cv) && !CvXSUB(cv)) {
7fc63493 2682 const GV * const gv = CvGV(cv);
e8f7dd13 2683 if (gv) {
7fc63493 2684 GV *autogv;
e8f7dd13
GS
2685 SV *tmpstr;
2686 /* autoloaded stub? */
2687 if (cv != GvCV(gv) && (cv = GvCV(gv)))
5d52e310 2688 continue;
c271df94
BF
2689 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2690 GvNAMELEN(gv),
2691 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
e8f7dd13 2692 if (autogv && (cv = GvCV(autogv)))
5d52e310 2693 continue;
e8f7dd13 2694 tmpstr = sv_newmortal();
c445ea15 2695 gv_efullname3(tmpstr, gv, NULL);
be2597df 2696 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
4aa0a1f7 2697 }
cea2e8a9 2698 DIE(aTHX_ "Goto undefined subroutine");
4aa0a1f7
AD
2699 }
2700
a0d0e21e 2701 cxix = dopoptosub(cxstack_ix);
d338c0c2
DM
2702 if (cxix < 0) {
2703 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
8da3792e 2704 }
d338c0c2 2705 cx = &cxstack[cxix];
564abe23 2706 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2d43a17f 2707 if (CxTYPE(cx) == CXt_EVAL) {
c74ace89 2708 if (CxREALEVAL(cx))
00455a92 2709 /* diag_listed_as: Can't goto subroutine from an eval-%s */
c74ace89
DM
2710 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2711 else
00455a92 2712 /* diag_listed_as: Can't goto subroutine from an eval-%s */
c74ace89 2713 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2d43a17f 2714 }
9850bf21
RH
2715 else if (CxMULTICALL(cx))
2716 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
d338c0c2
DM
2717
2718 /* First do some returnish stuff. */
2719
2720 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2721 FREETMPS;
2722 if (cxix < cxstack_ix) {
2723 dounwind(cxix);
2724 }
2725 TOPBLOCK(cx);
2726 SPAGAIN;
39de75fd
DM
2727
2728 /* partial unrolled POPSUB(): */
2729
8ae997c5
DM
2730 /* protect @_ during save stack unwind. */
2731 if (arg)
2732 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2733
2734 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2735 LEAVE_SCOPE(cx->blk_sub.old_savestack_ix);
2736
bafb2adc 2737 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
9513529b 2738 AV* av = MUTABLE_AV(PAD_SVl(0));
e2657e18
DM
2739 assert(AvARRAY(MUTABLE_AV(
2740 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2741 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2742
f72bdec3
DM
2743 /* we are going to donate the current @_ from the old sub
2744 * to the new sub. This first part of the donation puts a
2745 * new empty AV in the pad[0] slot of the old sub,
2746 * unless pad[0] and @_ differ (e.g. if the old sub did
2747 * local *_ = []); in which case clear the old pad[0]
2748 * array in the usual way */
95b2f486
DM
2749 if (av == arg || AvREAL(av))
2750 clear_defarray(av, av == arg);
049bd5ff 2751 else CLEAR_ARGARRAY(av);
a0d0e21e 2752 }
88c11d84 2753
b1e25d05
DM
2754 /* don't restore PL_comppad here. It won't be needed if the
2755 * sub we're going to is non-XS, but restoring it early then
2756 * croaking (e.g. the "Goto undefined subroutine" below)
2757 * means the CX block gets processed again in dounwind,
2758 * but this time with the wrong PL_comppad */
88c11d84 2759
1d59c038
FC
2760 /* A destructor called during LEAVE_SCOPE could have undefined
2761 * our precious cv. See bug #99850. */
2762 if (!CvROOT(cv) && !CvXSUB(cv)) {
2763 const GV * const gv = CvGV(cv);
2764 if (gv) {
2765 SV * const tmpstr = sv_newmortal();
2766 gv_efullname3(tmpstr, gv, NULL);
2767 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2768 SVfARG(tmpstr));
2769 }
2770 DIE(aTHX_ "Goto undefined subroutine");
2771 }
2772
cd17cc2e
DM
2773 if (CxTYPE(cx) == CXt_SUB) {
2774 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2775 SvREFCNT_dec_NN(cx->blk_sub.cv);
2776 }
2777
a0d0e21e 2778 /* Now do some callish stuff. */
aed2304a 2779 if (CvISXSUB(cv)) {
cb65b687
DM
2780 SV **newsp;
2781 I32 gimme;
ad39f3a2 2782 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
cd313eb4 2783 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
049bd5ff
FC
2784 SV** mark;
2785
cb65b687
DM
2786 PERL_UNUSED_VAR(newsp);
2787 PERL_UNUSED_VAR(gimme);
2788
8ae997c5 2789 ENTER;
80774f05
DM
2790 SAVETMPS;
2791 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2792
049bd5ff 2793 /* put GvAV(defgv) back onto stack */
8c9d3376
FC
2794 if (items) {
2795 EXTEND(SP, items+1); /* @_ could have been extended. */
8c9d3376 2796 }
049bd5ff 2797 mark = SP;
ad39f3a2 2798 if (items) {
de935cc9 2799 SSize_t index;
ad39f3a2 2800 bool r = cBOOL(AvREAL(arg));
b1464ded 2801 for (index=0; index<items; index++)
ad39f3a2
FC
2802 {
2803 SV *sv;
2804 if (m) {
2805 SV ** const svp = av_fetch(arg, index, 0);
2806 sv = svp ? *svp : NULL;
dd2a7f90 2807 }
ad39f3a2
FC
2808 else sv = AvARRAY(arg)[index];
2809 SP[index+1] = sv
2810 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2811 : sv_2mortal(newSVavdefelem(arg, index, 1));
2812 }
049bd5ff 2813 }
ad39f3a2 2814 SP += items;
049bd5ff
FC
2815 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2816 /* Restore old @_ */
fad386cb 2817 POP_SAVEARRAY();
b1464ded 2818 }
1fa4e549 2819
51eb35b5 2820 retop = cx->blk_sub.retop;
b1e25d05
DM
2821 PL_comppad = cx->blk_sub.prevcomppad;
2822 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
8ae997c5
DM
2823
2824 /* XS subs don't have a CXt_SUB, so pop it;
2825 * this is a POPBLOCK(), less all the stuff we already did
2826 * for TOPBLOCK() earlier */
2827 PL_curcop = cx->blk_oldcop;
2828 cxstack_ix--;
2829
b37c2d43
AL
2830 /* Push a mark for the start of arglist */
2831 PUSHMARK(mark);
2832 PUTBACK;
2833 (void)(*CvXSUB(cv))(aTHX_ cv);
a57c6685 2834 LEAVE;
51eb35b5 2835 goto _return;
a0d0e21e
LW
2836 }
2837 else {
b70d5558 2838 PADLIST * const padlist = CvPADLIST(cv);
39de75fd 2839
80774f05
DM
2840 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2841
39de75fd
DM
2842 /* partial unrolled PUSHSUB(): */
2843
a0d0e21e 2844 cx->blk_sub.cv = cv;
1a5b3db4 2845 cx->blk_sub.olddepth = CvDEPTH(cv);
dd2155a4 2846
a0d0e21e 2847 CvDEPTH(cv)++;
2c50b7ed
DM
2848 SvREFCNT_inc_simple_void_NN(cv);
2849 if (CvDEPTH(cv) > 1) {
2b9dff67 2850 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
44a8e56a 2851 sub_crush_depth(cv);
26019298 2852 pad_push(padlist, CvDEPTH(cv));
a0d0e21e 2853 }
426a09cd 2854 PL_curcop = cx->blk_oldcop;
fd617465 2855 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
bafb2adc 2856 if (CxHASARGS(cx))
6d4ff0d2 2857 {
f72bdec3
DM
2858 /* second half of donating @_ from the old sub to the
2859 * new sub: abandon the original pad[0] AV in the
2860 * new sub, and replace it with the donated @_.
2861 * pad[0] takes ownership of the extra refcount
2862 * we gave arg earlier */
bfa371b6
FC
2863 if (arg) {
2864 SvREFCNT_dec(PAD_SVl(0));
fed4514a 2865 PAD_SVl(0) = (SV *)arg;
13122036 2866 SvREFCNT_inc_simple_void_NN(arg);
bfa371b6 2867 }
049bd5ff
FC
2868
2869 /* GvAV(PL_defgv) might have been modified on scope
f72bdec3 2870 exit, so point it at arg again. */
049bd5ff
FC
2871 if (arg != GvAV(PL_defgv)) {
2872 AV * const av = GvAV(PL_defgv);
2873 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2874 SvREFCNT_dec(av);
a0d0e21e
LW
2875 }
2876 }
13122036 2877
491527d0 2878 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
005a8a35 2879 Perl_get_db_sub(aTHX_ NULL, cv);
b37c2d43 2880 if (PERLDB_GOTO) {
b96d8cd9 2881 CV * const gotocv = get_cvs("DB::goto", 0);
b37c2d43
AL
2882 if (gotocv) {
2883 PUSHMARK( PL_stack_sp );
ad64d0ec 2884 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
b37c2d43
AL
2885 PL_stack_sp--;
2886 }
491527d0 2887 }
1ce6579f 2888 }
51eb35b5
DD
2889 retop = CvSTART(cv);
2890 goto putback_return;
a0d0e21e
LW
2891 }
2892 }
1614b0e3 2893 else {
7d1d69cb 2894 /* goto EXPR */
55b37f1c 2895 label = SvPV_nomg_const(sv, label_len);
5db1eb8d 2896 label_flags = SvUTF8(sv);
1614b0e3 2897 }
a0d0e21e 2898 }
2fc690dc 2899 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
7d1d69cb 2900 /* goto LABEL or dump LABEL */
5db1eb8d
BF
2901 label = cPVOP->op_pv;
2902 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2903 label_len = strlen(label);
2904 }
0157ef98 2905 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
a0d0e21e 2906
f410a211
NC
2907 PERL_ASYNC_CHECK();
2908
3532f34a 2909 if (label_len) {
cbbf8932 2910 OP *gotoprobe = NULL;
3b2447bc 2911 bool leaving_eval = FALSE;
33d34e4c 2912 bool in_block = FALSE;
cbbf8932 2913 PERL_CONTEXT *last_eval_cx = NULL;
a0d0e21e
LW
2914
2915 /* find label */
2916
d4c19fe8 2917 PL_lastgotoprobe = NULL;
a0d0e21e
LW
2918 *enterops = 0;
2919 for (ix = cxstack_ix; ix >= 0; ix--) {
2920 cx = &cxstack[ix];
6b35e009 2921 switch (CxTYPE(cx)) {
a0d0e21e 2922 case CXt_EVAL:
3b2447bc 2923 leaving_eval = TRUE;
971ecbe6 2924 if (!CxTRYBLOCK(cx)) {
a4f3a277
RH
2925 gotoprobe = (last_eval_cx ?
2926 last_eval_cx->blk_eval.old_eval_root :
2927 PL_eval_root);
2928 last_eval_cx = cx;
9c5794fe
RH
2929 break;
2930 }
2931 /* else fall through */
c6fdafd0 2932 case CXt_LOOP_LAZYIV:
d01136d6 2933 case CXt_LOOP_LAZYSV:
3b719c58
NC
2934 case CXt_LOOP_FOR:
2935 case CXt_LOOP_PLAIN:
bb5aedc1
VP
2936 case CXt_GIVEN:
2937 case CXt_WHEN:
e6dae479 2938 gotoprobe = OpSIBLING(cx->blk_oldcop);
a0d0e21e
LW
2939 break;
2940 case CXt_SUBST:
2941 continue;
2942 case CXt_BLOCK:
33d34e4c 2943 if (ix) {
e6dae479 2944 gotoprobe = OpSIBLING(cx->blk_oldcop);
33d34e4c
AE
2945 in_block = TRUE;
2946 } else
3280af22 2947 gotoprobe = PL_main_root;
a0d0e21e 2948 break;
b3933176 2949 case CXt_SUB:
9850bf21 2950 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
b3933176
CS
2951 gotoprobe = CvROOT(cx->blk_sub.cv);
2952 break;
2953 }
924ba076 2954 /* FALLTHROUGH */
7766f137 2955 case CXt_FORMAT:
0a753a76 2956 case CXt_NULL:
a651a37d 2957 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
a0d0e21e
LW
2958 default:
2959 if (ix)
5637ef5b
NC
2960 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
2961 CxTYPE(cx), (long) ix);
3280af22 2962 gotoprobe = PL_main_root;
a0d0e21e
LW
2963 break;
2964 }
2b597662 2965 if (gotoprobe) {
29e61fd9
DM
2966 OP *sibl1, *sibl2;
2967
5db1eb8d 2968 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
2b597662
GS
2969 enterops, enterops + GOTO_DEPTH);
2970 if (retop)
2971 break;
e6dae479 2972 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
29e61fd9 2973 sibl1->op_type == OP_UNSTACK &&
e6dae479 2974 (sibl2 = OpSIBLING(sibl1)))
29e61fd9
DM
2975 {
2976 retop = dofindlabel(sibl2,
5db1eb8d
BF
2977 label, label_len, label_flags, enterops,
2978 enterops + GOTO_DEPTH);
eae48c89
Z
2979 if (retop)
2980 break;
2981 }
2b597662 2982 }
3280af22 2983 PL_lastgotoprobe = gotoprobe;
a0d0e21e
LW
2984 }
2985 if (!retop)
b17a0679
FC
2986 DIE(aTHX_ "Can't find label %"UTF8f,
2987 UTF8fARG(label_flags, label_len, label));
a0d0e21e 2988
3b2447bc
RH
2989 /* if we're leaving an eval, check before we pop any frames
2990 that we're not going to punt, otherwise the error
2991 won't be caught */
2992
2993 if (leaving_eval && *enterops && enterops[1]) {
2994 I32 i;
2995 for (i = 1; enterops[i]; i++)
2996 if (enterops[i]->op_type == OP_ENTERITER)
2997 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2998 }
2999
b500e03b
GG
3000 if (*enterops && enterops[1]) {
3001 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3002 if (enterops[i])
3003 deprecate("\"goto\" to jump into a construct");
3004 }
3005
a0d0e21e
LW
3006 /* pop unwanted frames */
3007
3008 if (ix < cxstack_ix) {
3009 I32 oldsave;
3010
3011 if (ix < 0)
5edb7975 3012 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
a0d0e21e
LW
3013 dounwind(ix);
3014 TOPBLOCK(cx);
3280af22 3015 oldsave = PL_scopestack[PL_scopestack_ix];
a0d0e21e
LW
3016 LEAVE_SCOPE(oldsave);
3017 }
3018
3019 /* push wanted frames */
3020
748a9306 3021 if (*enterops && enterops[1]) {
0bd48802 3022 OP * const oldop = PL_op;
33d34e4c
AE
3023 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3024 for (; enterops[ix]; ix++) {
533c011a 3025 PL_op = enterops[ix];
84902520
TB
3026 /* Eventually we may want to stack the needed arguments
3027 * for each op. For now, we punt on the hard ones. */
533c011a 3028 if (PL_op->op_type == OP_ENTERITER)
894356b3 3029 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
16c91539 3030 PL_op->op_ppaddr(aTHX);
a0d0e21e 3031 }
533c011a 3032 PL_op = oldop;
a0d0e21e
LW
3033 }
3034 }
3035
2631bbca 3036 if (do_dump) {
a5f75d66 3037#ifdef VMS
6b88bc9c 3038 if (!retop) retop = PL_main_start;
a5f75d66 3039#endif
3280af22
NIS
3040 PL_restartop = retop;
3041 PL_do_undump = TRUE;
a0d0e21e
LW
3042
3043 my_unexec();
3044
3280af22
NIS
3045 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3046 PL_do_undump = FALSE;
a0d0e21e
LW
3047 }
3048
51eb35b5
DD
3049 putback_return:
3050 PL_stack_sp = sp;
3051 _return:
47c9d59f 3052 PERL_ASYNC_CHECK();
51eb35b5 3053 return retop;
a0d0e21e
LW
3054}
3055
3056PP(pp_exit)
3057{
39644a26 3058 dSP;
a0d0e21e
LW
3059 I32 anum;
3060
3061 if (MAXARG < 1)
3062 anum = 0;
9d3c658e
FC
3063 else if (!TOPs) {
3064 anum = 0; (void)POPs;
3065 }
ff0cee69 3066 else {
a0d0e21e 3067 anum = SvIVx(POPs);
d98f61e7 3068#ifdef VMS
5450b4d8
FC
3069 if (anum == 1
3070 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
ff0cee69 3071 anum = 0;
97124ef6
FC
3072 VMSISH_HUSHED =
3073 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
ff0cee69 3074#endif
3075 }
cc3604b1 3076 PL_exit_flags |= PERL_EXIT_EXPECTED;
a0d0e21e 3077 my_exit(anum);
3280af22 3078 PUSHs(&PL_sv_undef);
a0d0e21e
LW
3079 RETURN;
3080}
3081
a0d0e21e
LW
3082/* Eval. */
3083
0824fdcb 3084STATIC void
cea2e8a9 3085S_save_lines(pTHX_ AV *array, SV *sv)
a0d0e21e 3086{
504618e9 3087 const char *s = SvPVX_const(sv);
890ce7af 3088 const char * const send = SvPVX_const(sv) + SvCUR(sv);
504618e9 3089 I32 line = 1;
a0d0e21e 3090
7918f24d
NC
3091 PERL_ARGS_ASSERT_SAVE_LINES;
3092
a0d0e21e 3093 while (s && s < send) {
f54cb97a 3094 const char *t;
b9f83d2f 3095 SV * const tmpstr = newSV_type(SVt_PVMG);
a0d0e21e 3096
1d963ff3 3097 t = (const char *)memchr(s, '\n', send - s);
a0d0e21e
LW
3098 if (t)
3099 t++;
3100 else
3101 t = send;
3102
3103 sv_setpvn(tmpstr, s, t - s);
3104 av_store(array, line++, tmpstr);
3105 s = t;
3106 }
3107}
3108
22f16304
RU
3109/*
3110=for apidoc docatch
3111
3112Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3113
31140 is used as continue inside eval,
3115
31163 is used for a die caught by an inner eval - continue inner loop
3117
75af9d73 3118See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
22f16304
RU
3119establish a local jmpenv to handle exception traps.
3120
3121=cut
3122*/
0824fdcb 3123STATIC OP *
cea2e8a9 3124S_docatch(pTHX_ OP *o)
1e422769 3125{
6224f72b 3126 int ret;
06b5626a 3127 OP * const oldop = PL_op;
db36c5a1 3128 dJMPENV;
1e422769 3129
1e422769 3130#ifdef DEBUGGING
54310121 3131 assert(CATCH_GET == TRUE);
1e422769 3132#endif
312caa8e 3133 PL_op = o;
8bffa5f8 3134
14dd3ad8 3135 JMPENV_PUSH(ret);
6224f72b 3136 switch (ret) {
312caa8e 3137 case 0:
abd70938
DM
3138 assert(cxstack_ix >= 0);
3139 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3140 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
14dd3ad8 3141 redo_body:
85aaa934 3142 CALLRUNOPS(aTHX);
312caa8e
CS
3143 break;
3144 case 3:
8bffa5f8 3145 /* die caught by an inner eval - continue inner loop */
febb3a6d
Z
3146 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3147 PL_restartjmpenv = NULL;
312caa8e
CS
3148 PL_op = PL_restartop;
3149 PL_restartop = 0;
3150 goto redo_body;
3151 }
924ba076 3152 /* FALLTHROUGH */
312caa8e 3153 default:
14dd3ad8 3154 JMPENV_POP;
533c011a 3155 PL_op = oldop;
6224f72b 3156 JMPENV_JUMP(ret);
e5964223 3157 NOT_REACHED; /* NOTREACHED */
1e422769 3158 }
14dd3ad8 3159 JMPENV_POP;
533c011a 3160 PL_op = oldop;
5f66b61c 3161 return NULL;
1e422769 3162}
3163
a3985cdc
DM
3164
3165/*
3166=for apidoc find_runcv
3167
3168Locate the CV corresponding to the currently executing sub or eval.
796b6530
KW
3169If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3170C<*db_seqp> with the cop sequence number at the point that the DB:: code was
72d33970
FC
3171entered. (This allows debuggers to eval in the scope of the breakpoint
3172rather than in the scope of the debugger itself.)
a3985cdc
DM
3173
3174=cut
3175*/
3176
3177CV*
d819b83a 3178Perl_find_runcv(pTHX_ U32 *db_seqp)
a3985cdc 3179{
db4cf31d 3180 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
70794f7b
FC
3181}
3182
3183/* If this becomes part of the API, it might need a better name. */
3184CV *
db4cf31d 3185Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
70794f7b 3186{
a3985cdc 3187 PERL_SI *si;
b4b0692a 3188 int level = 0;
a3985cdc 3189
d819b83a 3190 if (db_seqp)
c3923c33
DM
3191 *db_seqp =
3192 PL_curcop == &PL_compiling
3193 ? PL_cop_seqmax
3194 : PL_curcop->cop_seq;
3195
a3985cdc 3196 for (si = PL_curstackinfo; si; si = si->si_prev) {
06b5626a 3197 I32 ix;
a3985cdc 3198 for (ix = si->si_cxix; ix >= 0; ix--) {
06b5626a 3199 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
70794f7b 3200 CV *cv = NULL;
d819b83a 3201 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
70794f7b 3202 cv = cx->blk_sub.cv;
d819b83a
DM
3203 /* skip DB:: code */
3204 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3205 *db_seqp = cx->blk_oldcop->cop_seq;
3206 continue;
3207 }
a453e28a
DM
3208 if (cx->cx_type & CXp_SUB_RE)
3209 continue;
d819b83a 3210 }
a3985cdc 3211 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
70794f7b
FC
3212 cv = cx->blk_eval.cv;
3213 if (cv) {
3214 switch (cond) {
db4cf31d
FC
3215 case FIND_RUNCV_padid_eq:
3216 if (!CvPADLIST(cv)
b4db5868 3217 || CvPADLIST(cv)->xpadl_id != (U32)arg)
8771da69 3218 continue;
b4b0692a
FC
3219 return cv;
3220 case FIND_RUNCV_level_eq:
db4cf31d 3221 if (level++ != arg) continue;
70794f7b
FC
3222 /* GERONIMO! */
3223 default:
3224 return cv;
3225 }
3226 }
a3985cdc
DM
3227 }
3228 }
db4cf31d 3229 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
a3985cdc
DM
3230}
3231
3232
27e90453
DM
3233/* Run yyparse() in a setjmp wrapper. Returns:
3234 * 0: yyparse() successful
3235 * 1: yyparse() failed
3236 * 3: yyparse() died
3237 */
3238STATIC int
28ac2b49 3239S_try_yyparse(pTHX_ int gramtype)
27e90453
DM
3240{
3241 int ret;
3242 dJMPENV;
3243
3244 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3245 JMPENV_PUSH(ret);
3246 switch (ret) {
3247 case 0:
28ac2b49 3248 ret = yyparse(gramtype) ? 1 : 0;
27e90453
DM
3249 break;
3250 case 3:
3251 break;
3252 default:
3253 JMPENV_POP;
3254 JMPENV_JUMP(ret);
e5964223 3255 NOT_REACHED; /* NOTREACHED */
27e90453
DM
3256 }
3257 JMPENV_POP;
3258 return ret;
3259}
3260
3261
104a8185
DM
3262/* Compile a require/do or an eval ''.
3263 *
a3985cdc 3264 * outside is the lexically enclosing CV (if any) that invoked us.
104a8185
DM
3265 * seq is the current COP scope value.
3266 * hh is the saved hints hash, if any.
3267 *
410be5db 3268 * Returns a bool indicating whether the compile was successful; if so,
104a8185
DM
3269 * PL_eval_start contains the first op of the compiled code; otherwise,
3270 * pushes undef.
3271 *
3272 * This function is called from two places: pp_require and pp_entereval.
3273 * These can be distinguished by whether PL_op is entereval.
7d116edc
FC
3274 */
3275
410be5db 3276STATIC bool
104a8185 3277S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
a0d0e21e 3278{
20b7effb 3279 dSP;
46c461b5 3280 OP * const saveop = PL_op;
104a8185 3281 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
f45b078d 3282 COP * const oldcurcop = PL_curcop;
26c9400e 3283 bool in_require = (saveop->op_type == OP_REQUIRE);
27e90453 3284 int yystatus;
676a678a 3285 CV *evalcv;
a0d0e21e 3286
27e90453 3287 PL_in_eval = (in_require
6dc8a9e4 3288 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
a1941760
DM
3289 : (EVAL_INEVAL |
3290 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3291 ? EVAL_RE_REPARSING : 0)));
a0d0e21e 3292
1ce6579f 3293 PUSHMARK(SP);
3294
676a678a
Z
3295 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3296 CvEVAL_on(evalcv);
2090ab20 3297 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
676a678a 3298 cxstack[cxstack_ix].blk_eval.cv = evalcv;
86a64801 3299 cxstack[cxstack_ix].blk_gimme = gimme;
2090ab20 3300
676a678a
Z
3301 CvOUTSIDE_SEQ(evalcv) = seq;
3302 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
a3985cdc 3303
dd2155a4 3304 /* set up a scratch pad */
a0d0e21e 3305
eacbb379 3306 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
cecbe010 3307 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
2c05e328 3308
07055b4c 3309
b5bbe64a 3310 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
748a9306 3311
a0d0e21e
LW
3312 /* make sure we compile in the right package */
3313
ed094faf 3314 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
03d9f026 3315 SAVEGENERICSV(PL_curstash);
cb1ad50e
FC
3316 PL_curstash = (HV *)CopSTASH(PL_curcop);
3317 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3318 else SvREFCNT_inc_simple_void(PL_curstash);
a0d0e21e 3319 }
3c10abe3 3320 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3280af22
NIS
3321 SAVESPTR(PL_beginav);
3322 PL_beginav = newAV();
3323 SAVEFREESV(PL_beginav);
3c10abe3
AG
3324 SAVESPTR(PL_unitcheckav);
3325 PL_unitcheckav = newAV();
3326 SAVEFREESV(PL_unitcheckav);
a0d0e21e 3327
81d86705 3328
104a8185 3329 ENTER_with_name("evalcomp");
676a678a
Z
3330 SAVESPTR(PL_compcv);
3331 PL_compcv = evalcv;
3332
a0d0e21e
LW
3333 /* try to compile it */
3334
5f66b61c 3335 PL_eval_root = NULL;
3280af22 3336 PL_curcop = &PL_compiling;
26c9400e 3337 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
faef0170 3338 PL_in_eval |= EVAL_KEEPERR;
ab69dbc2
RGS
3339 else
3340 CLEAR_ERRSV();
27e90453 3341
377b5421
DM
3342 SAVEHINTS();
3343 if (clear_hints) {
3344 PL_hints = 0;
3345 hv_clear(GvHV(PL_hintgv));
3346 }
3347 else {
3348 PL_hints = saveop->op_private & OPpEVAL_COPHH
3349 ? oldcurcop->cop_hints : saveop->op_targ;
4f3e2518
DM
3350
3351 /* making 'use re eval' not be in scope when compiling the
3352 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3353 * infinite recursion when S_has_runtime_code() gives a false
3354 * positive: the second time round, HINT_RE_EVAL isn't set so we
3355 * don't bother calling S_has_runtime_code() */
3356 if (PL_in_eval & EVAL_RE_REPARSING)
3357 PL_hints &= ~HINT_RE_EVAL;
3358
377b5421
DM
3359 if (hh) {
3360 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3361 SvREFCNT_dec(GvHV(PL_hintgv));
3362 GvHV(PL_hintgv) = hh;
3363 }
3364 }
3365 SAVECOMPILEWARNINGS();
3366 if (clear_hints) {
3367 if (PL_dowarn & G_WARN_ALL_ON)
3368 PL_compiling.cop_warnings = pWARN_ALL ;
3369 else if (PL_dowarn & G_WARN_ALL_OFF)
3370 PL_compiling.cop_warnings = pWARN_NONE ;
3371 else
3372 PL_compiling.cop_warnings = pWARN_STD ;
3373 }
3374 else {
3375 PL_compiling.cop_warnings =
3376 DUP_WARNINGS(oldcurcop->cop_warnings);
3377 cophh_free(CopHINTHASH_get(&PL_compiling));
3378 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3379 /* The label, if present, is the first entry on the chain. So rather
3380 than writing a blank label in front of it (which involves an
3381 allocation), just use the next entry in the chain. */
3382 PL_compiling.cop_hints_hash
3383 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3384 /* Check the assumption that this removed the label. */
3385 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
f45b078d 3386 }
377b5421
DM
3387 else
3388 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3389 }
f45b078d 3390
a88d97bf 3391 CALL_BLOCK_HOOKS(bhk_eval, saveop);
52db365a 3392
27e90453
DM
3393 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3394 * so honour CATCH_GET and trap it here if necessary */
3395
28ac2b49 3396 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
27e90453
DM
3397
3398 if (yystatus || PL_parser->error_count || !PL_eval_root) {
0c58d367 3399 SV **newsp; /* Used by POPBLOCK. */
d164302a 3400 PERL_CONTEXT *cx;
27e90453 3401 I32 optype; /* Used by POPEVAL. */
d164302a 3402 SV *namesv;
eed484f9 3403 SV *errsv = NULL;
bfed75c6 3404
d164302a
GG
3405 cx = NULL;
3406 namesv = NULL;
27e90453
DM
3407 PERL_UNUSED_VAR(newsp);
3408 PERL_UNUSED_VAR(optype);
3409
c86ffc32
DM
3410 /* note that if yystatus == 3, then the EVAL CX block has already
3411 * been popped, and various vars restored */
533c011a 3412 PL_op = saveop;
27e90453 3413 if (yystatus != 3) {
c86ffc32
DM
3414 if (PL_eval_root) {
3415 op_free(PL_eval_root);
3416 PL_eval_root = NULL;
3417 }
27e90453 3418 SP = PL_stack_base + POPMARK; /* pop original mark */
377b5421
DM
3419 POPBLOCK(cx,PL_curpm);
3420 POPEVAL(cx);
3421 namesv = cx->blk_eval.old_namesv;
adcbf118
DM
3422 /* POPBLOCK has rendered LEAVE_with_name("evalcomp") unnecessary */
3423 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
3424 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
cd6472fc