This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix up includes in Time-HiRes Makefile.PL checks
[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
3c13cae6
DM
107 new_re = (eng->op_comp
108 ? eng->op_comp
109 : &Perl_re_op_compile
110 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
346d3070 111 &is_bare_re,
dbc200c5 112 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
a5ae69f0
DM
113 pm->op_pmflags |
114 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
dbc200c5 115
346d3070 116 if (pm->op_pmflags & PMf_HAS_CV)
8d919b0a 117 ReANY(new_re)->qr_anoncv
9fe3265f 118 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
9f141731
DM
119
120 if (is_bare_re) {
121 REGEXP *tmp;
122 /* The match's LHS's get-magic might need to access this op's regexp
123 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
124 get-magic now before we replace the regexp. Hopefully this hack can
125 be replaced with the approach described at
126 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
127 some day. */
128 if (pm->op_type == OP_MATCH) {
129 SV *lhs;
284167a5 130 const bool was_tainted = TAINT_get;
9f141731
DM
131 if (pm->op_flags & OPf_STACKED)
132 lhs = args[-1];
6ffceeb7 133 else if (pm->op_targ)
9f141731
DM
134 lhs = PAD_SV(pm->op_targ);
135 else lhs = DEFSV;
136 SvGETMAGIC(lhs);
137 /* Restore the previous value of PL_tainted (which may have been
138 modified by get-magic), to avoid incorrectly setting the
284167a5
S
139 RXf_TAINTED flag with RX_TAINT_on further down. */
140 TAINT_set(was_tainted);
dc6d7f5c 141#ifdef NO_TAINT_SUPPORT
9a9b5ec9
DM
142 PERL_UNUSED_VAR(was_tainted);
143#endif
df787a7b 144 }
9f141731
DM
145 tmp = reg_temp_copy(NULL, new_re);
146 ReREFCNT_dec(new_re);
147 new_re = tmp;
df787a7b 148 }
dbc200c5 149
9f141731
DM
150 if (re != new_re) {
151 ReREFCNT_dec(re);
152 PM_SETRE(pm, new_re);
c277df42 153 }
d4b87e75 154
dbc200c5 155
d48c660d
DM
156 assert(TAINTING_get || !TAINT_get);
157 if (TAINT_get) {
9f141731 158 SvTAINTED_on((SV*)new_re);
284167a5 159 RX_TAINT_on(new_re);
72311751 160 }
72311751 161
5585e758
YO
162 /* handle the empty pattern */
163 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm) {
164 if (PL_curpm == PL_reg_curpm) {
165 if (PL_curpm_under) {
166 if (PL_curpm_under == PL_reg_curpm) {
167 Perl_croak(aTHX_ "Infinite recursion via empty pattern");
168 } else {
169 pm = PL_curpm_under;
170 }
171 }
172 } else {
173 pm = PL_curpm;
174 }
175 }
176
c737faaf
YO
177#if !defined(USE_ITHREADS)
178 /* can't change the optree at runtime either */
179 /* PMf_KEEP is handled differently under threads to avoid these problems */
a0d0e21e 180 if (pm->op_pmflags & PMf_KEEP) {
c90c0ff4 181 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
533c011a 182 cLOGOP->op_first->op_next = PL_op->op_next;
a0d0e21e 183 }
c737faaf 184#endif
9f141731 185
df787a7b 186 SP = args-1;
a0d0e21e
LW
187 RETURN;
188}
189
9f141731 190
a0d0e21e
LW
191PP(pp_substcont)
192{
39644a26 193 dSP;
4ebe6e95 194 PERL_CONTEXT *cx = CX_CUR();
eb578fdb
KW
195 PMOP * const pm = (PMOP*) cLOGOP->op_other;
196 SV * const dstr = cx->sb_dstr;
197 char *s = cx->sb_s;
198 char *m = cx->sb_m;
a0d0e21e 199 char *orig = cx->sb_orig;
eb578fdb 200 REGEXP * const rx = cx->sb_rx;
c445ea15 201 SV *nsv = NULL;
988e6e7e 202 REGEXP *old = PM_GETRE(pm);
f410a211
NC
203
204 PERL_ASYNC_CHECK();
205
988e6e7e 206 if(old != rx) {
bfed75c6 207 if(old)
988e6e7e 208 ReREFCNT_dec(old);
d6106309 209 PM_SETRE(pm,ReREFCNT_inc(rx));
d8f2cf8a
AB
210 }
211
d9f97599 212 rxres_restore(&cx->sb_rxres, rx);
c90c0ff4 213
a0d0e21e 214 if (cx->sb_iters++) {
3c6ef0a5 215 const SSize_t saviters = cx->sb_iters;
a0d0e21e 216 if (cx->sb_iters > cx->sb_maxiters)
cea2e8a9 217 DIE(aTHX_ "Substitution loop");
a0d0e21e 218
447ee134
DM
219 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
220
ef07e810 221 /* See "how taint works" above pp_subst() */
20be6587
DM
222 if (SvTAINTED(TOPs))
223 cx->sb_rxtainted |= SUBST_TAINT_REPL;
447ee134 224 sv_catsv_nomg(dstr, POPs);
2c296965 225 if (CxONCE(cx) || s < orig ||
03c83e26
DM
226 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
227 (s == m), cx->sb_targ, NULL,
d5e7783a 228 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
a0d0e21e 229 {
8ca8a454 230 SV *targ = cx->sb_targ;
748a9306 231
078c425b
JH
232 assert(cx->sb_strend >= s);
233 if(cx->sb_strend > s) {
234 if (DO_UTF8(dstr) && !SvUTF8(targ))
4bac9ae4 235 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
078c425b 236 else
4bac9ae4 237 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
078c425b 238 }
20be6587
DM
239 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
240 cx->sb_rxtainted |= SUBST_TAINT_PAT;
9212bbba 241
8ca8a454
NC
242 if (pm->op_pmflags & PMf_NONDESTRUCT) {
243 PUSHs(dstr);
244 /* From here on down we're using the copy, and leaving the
245 original untouched. */
246 targ = dstr;
247 }
248 else {
9e0ea7f3
FC
249 SV_CHECK_THINKFIRST_COW_DROP(targ);
250 if (isGV(targ)) Perl_croak_no_modify();
251 SvPV_free(targ);
8ca8a454
NC
252 SvPV_set(targ, SvPVX(dstr));
253 SvCUR_set(targ, SvCUR(dstr));
254 SvLEN_set(targ, SvLEN(dstr));
255 if (DO_UTF8(dstr))
256 SvUTF8_on(targ);
257 SvPV_set(dstr, NULL);
258
52c47e16 259 PL_tainted = 0;
4f4d7508 260 mPUSHi(saviters - 1);
48c036b1 261
8ca8a454
NC
262 (void)SvPOK_only_UTF8(targ);
263 }
5cd24f17 264
20be6587 265 /* update the taint state of various various variables in
ef07e810
DM
266 * preparation for final exit.
267 * See "how taint works" above pp_subst() */
284167a5 268 if (TAINTING_get) {
20be6587
DM
269 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
270 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
271 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
272 )
273 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
274
275 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
276 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
277 )
278 SvTAINTED_on(TOPs); /* taint return value */
279 /* needed for mg_set below */
284167a5
S
280 TAINT_set(
281 cBOOL(cx->sb_rxtainted &
282 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
283 );
20be6587
DM
284 SvTAINT(TARG);
285 }
286 /* PL_tainted must be correctly set for this mg_set */
287 SvSETMAGIC(TARG);
288 TAINT_NOT;
80d88db0 289
8e7e33ef 290 CX_LEAVE_SCOPE(cx);
b405d38b 291 CX_POPSUBST(cx);
5da525e9 292 CX_POP(cx);
80d88db0 293
47c9d59f 294 PERL_ASYNC_CHECK();
a0d0e21e 295 RETURNOP(pm->op_next);
e5964223 296 NOT_REACHED; /* NOTREACHED */
a0d0e21e 297 }
8e5e9ebe 298 cx->sb_iters = saviters;
a0d0e21e 299 }
07bc277f 300 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
a0d0e21e
LW
301 m = s;
302 s = orig;
6502e081 303 assert(!RX_SUBOFFSET(rx));
07bc277f 304 cx->sb_orig = orig = RX_SUBBEG(rx);
a0d0e21e
LW
305 s = orig + (m - s);
306 cx->sb_strend = s + (cx->sb_strend - m);
307 }
07bc277f 308 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
db79b45b 309 if (m > s) {
bfed75c6 310 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
4bac9ae4 311 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
db79b45b 312 else
4bac9ae4 313 sv_catpvn_nomg(dstr, s, m-s);
db79b45b 314 }
07bc277f 315 cx->sb_s = RX_OFFS(rx)[0].end + orig;
084916e3 316 { /* Update the pos() information. */
8ca8a454
NC
317 SV * const sv
318 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
084916e3 319 MAGIC *mg;
a911bb25
DM
320
321 /* the string being matched against may no longer be a string,
322 * e.g. $_=0; s/.../$_++/ge */
323
324 if (!SvPOK(sv))
325 SvPV_force_nomg_nolen(sv);
326
96c2a8ff
FC
327 if (!(mg = mg_find_mglob(sv))) {
328 mg = sv_magicext_mglob(sv);
084916e3 329 }
cda67c99 330 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
084916e3 331 }
988e6e7e 332 if (old != rx)
d6106309 333 (void)ReREFCNT_inc(rx);
20be6587 334 /* update the taint state of various various variables in preparation
ef07e810
DM
335 * for calling the code block.
336 * See "how taint works" above pp_subst() */
284167a5 337 if (TAINTING_get) {
20be6587
DM
338 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
339 cx->sb_rxtainted |= SUBST_TAINT_PAT;
340
341 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
342 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
343 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
344 )
345 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
346
347 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
348 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
8ca8a454
NC
349 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
350 ? cx->sb_dstr : cx->sb_targ);
20be6587
DM
351 TAINT_NOT;
352 }
d9f97599 353 rxres_save(&cx->sb_rxres, rx);
af9838cc 354 PL_curpm = pm;
29f2e912 355 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
a0d0e21e
LW
356}
357
c90c0ff4 358void
864dbfa3 359Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
c90c0ff4 360{
361 UV *p = (UV*)*rsp;
362 U32 i;
7918f24d
NC
363
364 PERL_ARGS_ASSERT_RXRES_SAVE;
96a5add6 365 PERL_UNUSED_CONTEXT;
c90c0ff4 366
07bc277f 367 if (!p || p[1] < RX_NPARENS(rx)) {
db2c6cb3 368#ifdef PERL_ANY_COW
6502e081 369 i = 7 + (RX_NPARENS(rx)+1) * 2;
ed252734 370#else
6502e081 371 i = 6 + (RX_NPARENS(rx)+1) * 2;
ed252734 372#endif
c90c0ff4 373 if (!p)
a02a5408 374 Newx(p, i, UV);
c90c0ff4 375 else
376 Renew(p, i, UV);
377 *rsp = (void*)p;
378 }
379
5eabab15
DM
380 /* what (if anything) to free on croak */
381 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
cf93c79d 382 RX_MATCH_COPIED_off(rx);
6c31ff74 383 *p++ = RX_NPARENS(rx);
c90c0ff4 384
db2c6cb3 385#ifdef PERL_ANY_COW
bdd9a1b1
NC
386 *p++ = PTR2UV(RX_SAVED_COPY(rx));
387 RX_SAVED_COPY(rx) = NULL;
ed252734
NC
388#endif
389
07bc277f
NC
390 *p++ = PTR2UV(RX_SUBBEG(rx));
391 *p++ = (UV)RX_SUBLEN(rx);
6502e081
DM
392 *p++ = (UV)RX_SUBOFFSET(rx);
393 *p++ = (UV)RX_SUBCOFFSET(rx);
07bc277f
NC
394 for (i = 0; i <= RX_NPARENS(rx); ++i) {
395 *p++ = (UV)RX_OFFS(rx)[i].start;
396 *p++ = (UV)RX_OFFS(rx)[i].end;
c90c0ff4 397 }
398}
399
9c105995
NC
400static void
401S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
c90c0ff4 402{
403 UV *p = (UV*)*rsp;
404 U32 i;
7918f24d
NC
405
406 PERL_ARGS_ASSERT_RXRES_RESTORE;
96a5add6 407 PERL_UNUSED_CONTEXT;
c90c0ff4 408
ed252734 409 RX_MATCH_COPY_FREE(rx);
cf93c79d 410 RX_MATCH_COPIED_set(rx, *p);
c90c0ff4 411 *p++ = 0;
6c31ff74 412 RX_NPARENS(rx) = *p++;
c90c0ff4 413
db2c6cb3 414#ifdef PERL_ANY_COW
bdd9a1b1
NC
415 if (RX_SAVED_COPY(rx))
416 SvREFCNT_dec (RX_SAVED_COPY(rx));
417 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
ed252734
NC
418 *p++ = 0;
419#endif
420
07bc277f
NC
421 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
422 RX_SUBLEN(rx) = (I32)(*p++);
6502e081
DM
423 RX_SUBOFFSET(rx) = (I32)*p++;
424 RX_SUBCOFFSET(rx) = (I32)*p++;
07bc277f
NC
425 for (i = 0; i <= RX_NPARENS(rx); ++i) {
426 RX_OFFS(rx)[i].start = (I32)(*p++);
427 RX_OFFS(rx)[i].end = (I32)(*p++);
c90c0ff4 428 }
429}
430
9c105995
NC
431static void
432S_rxres_free(pTHX_ void **rsp)
c90c0ff4 433{
44f8325f 434 UV * const p = (UV*)*rsp;
7918f24d
NC
435
436 PERL_ARGS_ASSERT_RXRES_FREE;
96a5add6 437 PERL_UNUSED_CONTEXT;
c90c0ff4 438
439 if (p) {
94010e71 440 void *tmp = INT2PTR(char*,*p);
6c31ff74 441#ifdef PERL_POISON
db2c6cb3 442#ifdef PERL_ANY_COW
6c31ff74 443 U32 i = 9 + p[1] * 2;
94010e71 444#else
6c31ff74 445 U32 i = 8 + p[1] * 2;
94010e71 446#endif
6c31ff74
NC
447#endif
448
db2c6cb3 449#ifdef PERL_ANY_COW
6c31ff74 450 SvREFCNT_dec (INT2PTR(SV*,p[2]));
ed252734 451#endif
6c31ff74
NC
452#ifdef PERL_POISON
453 PoisonFree(p, i, sizeof(UV));
454#endif
455
456 Safefree(tmp);
c90c0ff4 457 Safefree(p);
4608196e 458 *rsp = NULL;
c90c0ff4 459 }
460}
461
a701009a
DM
462#define FORM_NUM_BLANK (1<<30)
463#define FORM_NUM_POINT (1<<29)
464
a0d0e21e
LW
465PP(pp_formline)
466{
20b7effb 467 dSP; dMARK; dORIGMARK;
eb578fdb 468 SV * const tmpForm = *++MARK;
086b26f3 469 SV *formsv; /* contains text of original format */
eb578fdb
KW
470 U32 *fpc; /* format ops program counter */
471 char *t; /* current append position in target string */
086b26f3 472 const char *f; /* current position in format string */
eb578fdb
KW
473 I32 arg;
474 SV *sv = NULL; /* current item */
086b26f3 475 const char *item = NULL;/* string value of current item */
9b4bdfd4
DM
476 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
477 I32 itembytes = 0; /* as itemsize, but length in bytes */
086b26f3
DM
478 I32 fieldsize = 0; /* width of current field */
479 I32 lines = 0; /* number of lines that have been output */
480 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
481 const char *chophere = NULL; /* where to chop current item */
f5ada144 482 STRLEN linemark = 0; /* pos of start of line in output */
65202027 483 NV value;
086b26f3 484 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
9b4bdfd4 485 STRLEN len; /* length of current sv */
26e935cf 486 STRLEN linemax; /* estimate of output size in bytes */
1bd51a4c
IH
487 bool item_is_utf8 = FALSE;
488 bool targ_is_utf8 = FALSE;
bd7084a6 489 const char *fmt;
74e0ddf7 490 MAGIC *mg = NULL;
4ff700b9
DM
491 U8 *source; /* source of bytes to append */
492 STRLEN to_copy; /* how may bytes to append */
ea60cfe8 493 char trans; /* what chars to translate */
74e0ddf7 494
3808a683 495 mg = doparseform(tmpForm);
a0d0e21e 496
74e0ddf7 497 fpc = (U32*)mg->mg_ptr;
3808a683
DM
498 /* the actual string the format was compiled from.
499 * with overload etc, this may not match tmpForm */
500 formsv = mg->mg_obj;
501
74e0ddf7 502
3280af22 503 SvPV_force(PL_formtarget, len);
3808a683 504 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
125b9982 505 SvTAINTED_on(PL_formtarget);
1bd51a4c
IH
506 if (DO_UTF8(PL_formtarget))
507 targ_is_utf8 = TRUE;
26e935cf
DM
508 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
509 t = SvGROW(PL_formtarget, len + linemax + 1);
510 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
a0d0e21e 511 t += len;
3808a683 512 f = SvPV_const(formsv, len);
a0d0e21e
LW
513
514 for (;;) {
515 DEBUG_f( {
bfed75c6 516 const char *name = "???";
a0d0e21e
LW
517 arg = -1;
518 switch (*fpc) {
519 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
520 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
521 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
522 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
523 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
524
525 case FF_CHECKNL: name = "CHECKNL"; break;
526 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
527 case FF_SPACE: name = "SPACE"; break;
528 case FF_HALFSPACE: name = "HALFSPACE"; break;
529 case FF_ITEM: name = "ITEM"; break;
530 case FF_CHOP: name = "CHOP"; break;
531 case FF_LINEGLOB: name = "LINEGLOB"; break;
532 case FF_NEWLINE: name = "NEWLINE"; break;
533 case FF_MORE: name = "MORE"; break;
534 case FF_LINEMARK: name = "LINEMARK"; break;
535 case FF_END: name = "END"; break;
bfed75c6 536 case FF_0DECIMAL: name = "0DECIMAL"; break;
a1b95068 537 case FF_LINESNGL: name = "LINESNGL"; break;
a0d0e21e
LW
538 }
539 if (arg >= 0)
bf49b057 540 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
a0d0e21e 541 else
bf49b057 542 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
5f80b19c 543 } );
a0d0e21e 544 switch (*fpc++) {
4a73dc0b 545 case FF_LINEMARK: /* start (or end) of a line */
f5ada144 546 linemark = t - SvPVX(PL_formtarget);
a0d0e21e
LW
547 lines++;
548 gotsome = FALSE;
549 break;
550
4a73dc0b 551 case FF_LITERAL: /* append <arg> literal chars */
ea60cfe8
DM
552 to_copy = *fpc++;
553 source = (U8 *)f;
554 f += to_copy;
555 trans = '~';
75645721 556 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
ea60cfe8 557 goto append;
a0d0e21e 558
4a73dc0b 559 case FF_SKIP: /* skip <arg> chars in format */
a0d0e21e
LW
560 f += *fpc++;
561 break;
562
4a73dc0b 563 case FF_FETCH: /* get next item and set field size to <arg> */
a0d0e21e
LW
564 arg = *fpc++;
565 f += arg;
566 fieldsize = arg;
567
568 if (MARK < SP)
569 sv = *++MARK;
570 else {
3280af22 571 sv = &PL_sv_no;
a2a5de95 572 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
a0d0e21e 573 }
125b9982
NT
574 if (SvTAINTED(sv))
575 SvTAINTED_on(PL_formtarget);
a0d0e21e
LW
576 break;
577
4a73dc0b 578 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
5a34cab7 579 {
5a34cab7 580 const char *s = item = SvPV_const(sv, len);
9b4bdfd4
DM
581 const char *send = s + len;
582
583 itemsize = 0;
584 item_is_utf8 = DO_UTF8(sv);
585 while (s < send) {
586 if (!isCNTRL(*s))
587 gotsome = TRUE;
588 else if (*s == '\n')
589 break;
590
591 if (item_is_utf8)
592 s += UTF8SKIP(s);
593 else
594 s++;
595 itemsize++;
596 if (itemsize == fieldsize)
597 break;
598 }
599 itembytes = s - item;
62db6ea5 600 chophere = s;
5a34cab7 601 break;
a0ed51b3 602 }
a0d0e21e 603
4a73dc0b 604 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
5a34cab7
NC
605 {
606 const char *s = item = SvPV_const(sv, len);
9b4bdfd4
DM
607 const char *send = s + len;
608 I32 size = 0;
609
610 chophere = NULL;
611 item_is_utf8 = DO_UTF8(sv);
612 while (s < send) {
613 /* look for a legal split position */
614 if (isSPACE(*s)) {
615 if (*s == '\r') {
616 chophere = s;
617 itemsize = size;
618 break;
619 }
620 if (chopspace) {
621 /* provisional split point */
622 chophere = s;
623 itemsize = size;
624 }
625 /* we delay testing fieldsize until after we've
626 * processed the possible split char directly
627 * following the last field char; so if fieldsize=3
628 * and item="a b cdef", we consume "a b", not "a".
629 * Ditto further down.
630 */
631 if (size == fieldsize)
632 break;
633 }
634 else {
635 if (strchr(PL_chopset, *s)) {
636 /* provisional split point */
637 /* for a non-space split char, we include
638 * the split char; hence the '+1' */
639 chophere = s + 1;
640 itemsize = size;
641 }
642 if (size == fieldsize)
643 break;
644 if (!isCNTRL(*s))
645 gotsome = TRUE;
646 }
647
648 if (item_is_utf8)
649 s += UTF8SKIP(s);
650 else
077dbbf3 651 s++;
9b4bdfd4
DM
652 size++;
653 }
654 if (!chophere || s == send) {
655 chophere = s;
656 itemsize = size;
657 }
658 itembytes = chophere - item;
659
5a34cab7 660 break;
a0d0e21e 661 }
a0d0e21e 662
4a73dc0b 663 case FF_SPACE: /* append padding space (diff of field, item size) */
a0d0e21e
LW
664 arg = fieldsize - itemsize;
665 if (arg) {
666 fieldsize -= arg;
667 while (arg-- > 0)
668 *t++ = ' ';
669 }
670 break;
671
4a73dc0b 672 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
a0d0e21e
LW
673 arg = fieldsize - itemsize;
674 if (arg) {
675 arg /= 2;
676 fieldsize -= arg;
677 while (arg-- > 0)
678 *t++ = ' ';
679 }
680 break;
681
4a73dc0b 682 case FF_ITEM: /* append a text item, while blanking ctrl chars */
9b4bdfd4 683 to_copy = itembytes;
8aa7beb6
DM
684 source = (U8 *)item;
685 trans = 1;
8aa7beb6 686 goto append;
a0d0e21e 687
4a73dc0b 688 case FF_CHOP: /* (for ^*) chop the current item */
fb9282c3 689 if (sv != &PL_sv_no) {
5a34cab7
NC
690 const char *s = chophere;
691 if (chopspace) {
af68e756 692 while (isSPACE(*s))
5a34cab7
NC
693 s++;
694 }
9b4bdfd4
DM
695 if (SvPOKp(sv))
696 sv_chop(sv,s);
697 else
698 /* tied, overloaded or similar strangeness.
699 * Do it the hard way */
700 sv_setpvn(sv, s, len - (s-item));
5a34cab7
NC
701 SvSETMAGIC(sv);
702 break;
a0d0e21e 703 }
a0d0e21e 704
4a73dc0b 705 case FF_LINESNGL: /* process ^* */
a1b95068 706 chopspace = 0;
c67159e1 707 /* FALLTHROUGH */
4a73dc0b
DM
708
709 case FF_LINEGLOB: /* process @* */
5a34cab7 710 {
e32383e2 711 const bool oneline = fpc[-1] == FF_LINESNGL;
5a34cab7 712 const char *s = item = SvPV_const(sv, len);
7440a75b 713 const char *const send = s + len;
7440a75b 714
f3f2f1a3 715 item_is_utf8 = DO_UTF8(sv);
fb9282c3 716 chophere = s + len;
a1137ee5 717 if (!len)
7440a75b 718 break;
ea60cfe8 719 trans = 0;
0d21cefe 720 gotsome = TRUE;
4ff700b9
DM
721 source = (U8 *) s;
722 to_copy = len;
0d21cefe
DM
723 while (s < send) {
724 if (*s++ == '\n') {
725 if (oneline) {
9b4bdfd4 726 to_copy = s - item - 1;
0d21cefe
DM
727 chophere = s;
728 break;
729 } else {
730 if (s == send) {
0d21cefe
DM
731 to_copy--;
732 } else
733 lines++;
1bd51a4c 734 }
a0d0e21e 735 }
0d21cefe 736 }
a2c0032b
DM
737 }
738
ea60cfe8
DM
739 append:
740 /* append to_copy bytes from source to PL_formstring.
741 * item_is_utf8 implies source is utf8.
742 * if trans, translate certain characters during the copy */
a2c0032b
DM
743 {
744 U8 *tmp = NULL;
26e935cf 745 STRLEN grow = 0;
0325ce87
DM
746
747 SvCUR_set(PL_formtarget,
748 t - SvPVX_const(PL_formtarget));
749
0d21cefe
DM
750 if (targ_is_utf8 && !item_is_utf8) {
751 source = tmp = bytes_to_utf8(source, &to_copy);
0d21cefe
DM
752 } else {
753 if (item_is_utf8 && !targ_is_utf8) {
f5ada144 754 U8 *s;
0d21cefe 755 /* Upgrade targ to UTF8, and then we reduce it to
0325ce87
DM
756 a problem we have a simple solution for.
757 Don't need get magic. */
0d21cefe 758 sv_utf8_upgrade_nomg(PL_formtarget);
0325ce87 759 targ_is_utf8 = TRUE;
f5ada144
DM
760 /* re-calculate linemark */
761 s = (U8*)SvPVX(PL_formtarget);
26e935cf
DM
762 /* the bytes we initially allocated to append the
763 * whole line may have been gobbled up during the
764 * upgrade, so allocate a whole new line's worth
765 * for safety */
766 grow = linemax;
f5ada144
DM
767 while (linemark--)
768 s += UTF8SKIP(s);
769 linemark = s - (U8*)SvPVX(PL_formtarget);
e8e72d41 770 }
0d21cefe
DM
771 /* Easy. They agree. */
772 assert (item_is_utf8 == targ_is_utf8);
773 }
26e935cf
DM
774 if (!trans)
775 /* @* and ^* are the only things that can exceed
776 * the linemax, so grow by the output size, plus
777 * a whole new form's worth in case of any further
778 * output */
779 grow = linemax + to_copy;
780 if (grow)
781 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
0d21cefe
DM
782 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
783
784 Copy(source, t, to_copy, char);
ea60cfe8 785 if (trans) {
8aa7beb6
DM
786 /* blank out ~ or control chars, depending on trans.
787 * works on bytes not chars, so relies on not
788 * matching utf8 continuation bytes */
ea60cfe8
DM
789 U8 *s = (U8*)t;
790 U8 *send = s + to_copy;
791 while (s < send) {
8aa7beb6 792 const int ch = *s;
077dbbf3 793 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
ea60cfe8
DM
794 *s = ' ';
795 s++;
796 }
797 }
798
0d21cefe
DM
799 t += to_copy;
800 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
a1137ee5 801 if (tmp)
0d21cefe 802 Safefree(tmp);
5a34cab7 803 break;
a0d0e21e 804 }
a0d0e21e 805
4a73dc0b 806 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
a0d0e21e 807 arg = *fpc++;
bd7084a6 808 fmt = (const char *)
a029fa42 809 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
bd7084a6 810 goto ff_dec;
5d37acd6 811
bd7084a6
DM
812 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
813 arg = *fpc++;
bd7084a6 814 fmt = (const char *)
a029fa42 815 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
bd7084a6 816 ff_dec:
784707d5
JP
817 /* If the field is marked with ^ and the value is undefined,
818 blank it out. */
a701009a 819 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
784707d5
JP
820 arg = fieldsize;
821 while (arg--)
822 *t++ = ' ';
823 break;
824 }
825 gotsome = TRUE;
826 value = SvNV(sv);
a1b95068 827 /* overflow evidence */
bfed75c6 828 if (num_overflow(value, fieldsize, arg)) {
a1b95068
WL
829 arg = fieldsize;
830 while (arg--)
831 *t++ = '#';
832 break;
833 }
784707d5
JP
834 /* Formats aren't yet marked for locales, so assume "yes". */
835 {
e8549682
JH
836 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
837 int len;
67d796ae
KW
838 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
839 STORE_LC_NUMERIC_SET_TO_NEEDED();
51f14a05 840 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
a4eca1d4
JH
841#ifdef USE_QUADMATH
842 {
843 const char* qfmt = quadmath_format_single(fmt);
844 int len;
845 if (!qfmt)
846 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
847 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
848 if (len == -1)
849 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
850 if (qfmt != fmt)
851 Safefree(fmt);
852 }
853#else
b587c0e8
DM
854 /* we generate fmt ourselves so it is safe */
855 GCC_DIAG_IGNORE(-Wformat-nonliteral);
e8549682 856 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
b587c0e8 857 GCC_DIAG_RESTORE;
a4eca1d4
JH
858#endif
859 PERL_MY_SNPRINTF_POST_GUARD(len, max);
a2287a13 860 RESTORE_LC_NUMERIC();
784707d5
JP
861 }
862 t += fieldsize;
863 break;
a1b95068 864
4a73dc0b 865 case FF_NEWLINE: /* delete trailing spaces, then append \n */
a0d0e21e 866 f++;
f5ada144 867 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
a0d0e21e
LW
868 t++;
869 *t++ = '\n';
870 break;
871
4a73dc0b 872 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
a0d0e21e
LW
873 arg = *fpc++;
874 if (gotsome) {
875 if (arg) { /* repeat until fields exhausted? */
11f9eeaf
DM
876 fpc--;
877 goto end;
a0d0e21e
LW
878 }
879 }
880 else {
f5ada144 881 t = SvPVX(PL_formtarget) + linemark;
a0d0e21e
LW
882 lines--;
883 }
884 break;
885
4a73dc0b 886 case FF_MORE: /* replace long end of string with '...' */
5a34cab7
NC
887 {
888 const char *s = chophere;
889 const char *send = item + len;
890 if (chopspace) {
af68e756 891 while (isSPACE(*s) && (s < send))
5a34cab7 892 s++;
a0d0e21e 893 }
5a34cab7
NC
894 if (s < send) {
895 char *s1;
896 arg = fieldsize - itemsize;
897 if (arg) {
898 fieldsize -= arg;
899 while (arg-- > 0)
900 *t++ = ' ';
901 }
902 s1 = t - 3;
903 if (strnEQ(s1," ",3)) {
904 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
905 s1--;
906 }
907 *s1++ = '.';
908 *s1++ = '.';
909 *s1++ = '.';
a0d0e21e 910 }
5a34cab7 911 break;
a0d0e21e 912 }
4a73dc0b
DM
913
914 case FF_END: /* tidy up, then return */
11f9eeaf 915 end:
bf2bec63 916 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
a0d0e21e 917 *t = '\0';
b15aece3 918 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1bd51a4c
IH
919 if (targ_is_utf8)
920 SvUTF8_on(PL_formtarget);
3280af22 921 FmLINES(PL_formtarget) += lines;
a0d0e21e 922 SP = ORIGMARK;
11f9eeaf
DM
923 if (fpc[-1] == FF_BLANK)
924 RETURNOP(cLISTOP->op_first);
925 else
926 RETPUSHYES;
a0d0e21e
LW
927 }
928 }
929}
930
10088f56 931/* also used for: pp_mapstart() */
a0d0e21e
LW
932PP(pp_grepstart)
933{
20b7effb 934 dSP;
a0d0e21e
LW
935 SV *src;
936
6cae08a8 937 if (PL_stack_base + TOPMARK == SP) {
a0d0e21e 938 (void)POPMARK;
54310121 939 if (GIMME_V == G_SCALAR)
6e449a3a 940 mXPUSHi(0);
533c011a 941 RETURNOP(PL_op->op_next->op_next);
a0d0e21e 942 }
6cae08a8 943 PL_stack_sp = PL_stack_base + TOPMARK + 1;
897d3989
NC
944 Perl_pp_pushmark(aTHX); /* push dst */
945 Perl_pp_pushmark(aTHX); /* push src */
d343c3ef 946 ENTER_with_name("grep"); /* enter outer scope */
a0d0e21e
LW
947
948 SAVETMPS;
ffd49c98 949 SAVE_DEFSV;
d343c3ef 950 ENTER_with_name("grep_item"); /* enter inner scope */
7766f137 951 SAVEVPTR(PL_curpm);
a0d0e21e 952
6cae08a8 953 src = PL_stack_base[TOPMARK];
60779a30 954 if (SvPADTMP(src)) {
6cae08a8 955 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
a0ed822e
FC
956 PL_tmps_floor++;
957 }
a0d0e21e 958 SvTEMP_off(src);
ffd49c98 959 DEFSV_set(src);
a0d0e21e
LW
960
961 PUTBACK;
533c011a 962 if (PL_op->op_type == OP_MAPSTART)
897d3989 963 Perl_pp_pushmark(aTHX); /* push top */
533c011a 964 return ((LOGOP*)PL_op->op_next)->op_other;
a0d0e21e
LW
965}
966
a0d0e21e
LW
967PP(pp_mapwhile)
968{
20b7effb 969 dSP;
1c23e2bd 970 const U8 gimme = GIMME_V;
6cae08a8 971 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
a0d0e21e
LW
972 I32 count;
973 I32 shift;
974 SV** src;
ac27b0f5 975 SV** dst;
a0d0e21e 976
544f3153 977 /* first, move source pointer to the next item in the source list */
3280af22 978 ++PL_markstack_ptr[-1];
544f3153
GS
979
980 /* if there are new items, push them into the destination list */
4c90a460 981 if (items && gimme != G_VOID) {
544f3153
GS
982 /* might need to make room back there first */
983 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
984 /* XXX this implementation is very pessimal because the stack
985 * is repeatedly extended for every set of items. Is possible
986 * to do this without any stack extension or copying at all
987 * by maintaining a separate list over which the map iterates
18ef8bea 988 * (like foreach does). --gsar */
544f3153
GS
989
990 /* everything in the stack after the destination list moves
991 * towards the end the stack by the amount of room needed */
992 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
993
994 /* items to shift up (accounting for the moved source pointer) */
995 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
18ef8bea
BT
996
997 /* This optimization is by Ben Tilly and it does
998 * things differently from what Sarathy (gsar)
999 * is describing. The downside of this optimization is
1000 * that leaves "holes" (uninitialized and hopefully unused areas)
1001 * to the Perl stack, but on the other hand this
1002 * shouldn't be a problem. If Sarathy's idea gets
1003 * implemented, this optimization should become
1004 * irrelevant. --jhi */
1005 if (shift < count)
1006 shift = count; /* Avoid shifting too often --Ben Tilly */
bfed75c6 1007
924508f0
GS
1008 EXTEND(SP,shift);
1009 src = SP;
1010 dst = (SP += shift);
3280af22
NIS
1011 PL_markstack_ptr[-1] += shift;
1012 *PL_markstack_ptr += shift;
544f3153 1013 while (count--)
a0d0e21e
LW
1014 *dst-- = *src--;
1015 }
544f3153 1016 /* copy the new items down to the destination list */
ac27b0f5 1017 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
22023b26 1018 if (gimme == G_ARRAY) {
b2a2a901
DM
1019 /* add returned items to the collection (making mortal copies
1020 * if necessary), then clear the current temps stack frame
1021 * *except* for those items. We do this splicing the items
1022 * into the start of the tmps frame (so some items may be on
59d53fd6 1023 * the tmps stack twice), then moving PL_tmps_floor above
b2a2a901
DM
1024 * them, then freeing the frame. That way, the only tmps that
1025 * accumulate over iterations are the return values for map.
1026 * We have to do to this way so that everything gets correctly
1027 * freed if we die during the map.
1028 */
1029 I32 tmpsbase;
1030 I32 i = items;
1031 /* make space for the slice */
1032 EXTEND_MORTAL(items);
1033 tmpsbase = PL_tmps_floor + 1;
1034 Move(PL_tmps_stack + tmpsbase,
1035 PL_tmps_stack + tmpsbase + items,
1036 PL_tmps_ix - PL_tmps_floor,
1037 SV*);
1038 PL_tmps_ix += items;
1039
1040 while (i-- > 0) {
1041 SV *sv = POPs;
1042 if (!SvTEMP(sv))
1043 sv = sv_mortalcopy(sv);
1044 *dst-- = sv;
1045 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1046 }
1047 /* clear the stack frame except for the items */
1048 PL_tmps_floor += items;
1049 FREETMPS;
1050 /* FREETMPS may have cleared the TEMP flag on some of the items */
1051 i = items;
1052 while (i-- > 0)
1053 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
22023b26 1054 }
bfed75c6 1055 else {
22023b26
TP
1056 /* scalar context: we don't care about which values map returns
1057 * (we use undef here). And so we certainly don't want to do mortal
1058 * copies of meaningless values. */
1059 while (items-- > 0) {
b988aa42 1060 (void)POPs;
22023b26
TP
1061 *dst-- = &PL_sv_undef;
1062 }
b2a2a901 1063 FREETMPS;
22023b26 1064 }
a0d0e21e 1065 }
b2a2a901
DM
1066 else {
1067 FREETMPS;
1068 }
d343c3ef 1069 LEAVE_with_name("grep_item"); /* exit inner scope */
a0d0e21e
LW
1070
1071 /* All done yet? */
6cae08a8 1072 if (PL_markstack_ptr[-1] > TOPMARK) {
a0d0e21e
LW
1073
1074 (void)POPMARK; /* pop top */
d343c3ef 1075 LEAVE_with_name("grep"); /* exit outer scope */
a0d0e21e 1076 (void)POPMARK; /* pop src */
3280af22 1077 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
a0d0e21e 1078 (void)POPMARK; /* pop dst */
3280af22 1079 SP = PL_stack_base + POPMARK; /* pop original mark */
54310121 1080 if (gimme == G_SCALAR) {
7cc47870
RGS
1081 dTARGET;
1082 XPUSHi(items);
a0d0e21e 1083 }
54310121 1084 else if (gimme == G_ARRAY)
1085 SP += items;
a0d0e21e
LW
1086 RETURN;
1087 }
1088 else {
1089 SV *src;
1090
d343c3ef 1091 ENTER_with_name("grep_item"); /* enter inner scope */
7766f137 1092 SAVEVPTR(PL_curpm);
a0d0e21e 1093
544f3153 1094 /* set $_ to the new source item */
3280af22 1095 src = PL_stack_base[PL_markstack_ptr[-1]];
60779a30 1096 if (SvPADTMP(src)) {
60779a30
DM
1097 src = sv_mortalcopy(src);
1098 }
a0d0e21e 1099 SvTEMP_off(src);
ffd49c98 1100 DEFSV_set(src);
a0d0e21e
LW
1101
1102 RETURNOP(cLOGOP->op_other);
1103 }
1104}
1105
a0d0e21e
LW
1106/* Range stuff. */
1107
1108PP(pp_range)
1109{
82334630 1110 if (GIMME_V == G_ARRAY)
1a67a97c 1111 return NORMAL;
538573f7 1112 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1a67a97c 1113 return cLOGOP->op_other;
538573f7 1114 else
1a67a97c 1115 return NORMAL;
a0d0e21e
LW
1116}
1117
1118PP(pp_flip)
1119{
39644a26 1120 dSP;
a0d0e21e 1121
82334630 1122 if (GIMME_V == G_ARRAY) {
1a67a97c 1123 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
a0d0e21e
LW
1124 }
1125 else {
1126 dTOPss;
44f8325f 1127 SV * const targ = PAD_SV(PL_op->op_targ);
bfed75c6 1128 int flip = 0;
790090df 1129
bfed75c6 1130 if (PL_op->op_private & OPpFLIP_LINENUM) {
4e3399f9
YST
1131 if (GvIO(PL_last_in_gv)) {
1132 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1133 }
1134 else {
fafc274c 1135 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
44f8325f
AL
1136 if (gv && GvSV(gv))
1137 flip = SvIV(sv) == SvIV(GvSV(gv));
4e3399f9 1138 }
bfed75c6
AL
1139 } else {
1140 flip = SvTRUE(sv);
1141 }
1142 if (flip) {
a0d0e21e 1143 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
533c011a 1144 if (PL_op->op_flags & OPf_SPECIAL) {
a0d0e21e 1145 sv_setiv(targ, 1);
3e3baf6d 1146 SETs(targ);
a0d0e21e
LW
1147 RETURN;
1148 }
1149 else {
1150 sv_setiv(targ, 0);
924508f0 1151 SP--;
1a67a97c 1152 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
a0d0e21e
LW
1153 }
1154 }
9aa3b533 1155 SvPVCLEAR(TARG);
a0d0e21e
LW
1156 SETs(targ);
1157 RETURN;
1158 }
1159}
1160
8e9bbdb9
RGS
1161/* This code tries to decide if "$left .. $right" should use the
1162 magical string increment, or if the range is numeric (we make
1163 an exception for .."0" [#18165]). AMS 20021031. */
1164
1165#define RANGE_IS_NUMERIC(left,right) ( \
b0e74086
RGS
1166 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1167 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
e0ab1c0e 1168 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
b15aece3 1169 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
e0ab1c0e 1170 && (!SvOK(right) || looks_like_number(right))))
8e9bbdb9 1171
a0d0e21e
LW
1172PP(pp_flop)
1173{
20b7effb 1174 dSP;
a0d0e21e 1175
82334630 1176 if (GIMME_V == G_ARRAY) {
a0d0e21e 1177 dPOPPOPssrl;
86cb7173 1178
5b295bef
RD
1179 SvGETMAGIC(left);
1180 SvGETMAGIC(right);
a0d0e21e 1181
8e9bbdb9 1182 if (RANGE_IS_NUMERIC(left,right)) {
b262c4c9 1183 IV i, j, n;
4d91eccc
FC
1184 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1185 (SvOK(right) && (SvIOK(right)
1186 ? SvIsUV(right) && SvUV(right) > IV_MAX
1187 : SvNV_nomg(right) > IV_MAX)))
d470f89e 1188 DIE(aTHX_ "Range iterator outside integer range");
f52e41ad 1189 i = SvIV_nomg(left);
b262c4c9
JH
1190 j = SvIV_nomg(right);
1191 if (j >= i) {
1192 /* Dance carefully around signed max. */
1193 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1194 if (!overflow) {
1195 n = j - i + 1;
1196 /* The wraparound of signed integers is undefined
1197 * behavior, but here we aim for count >=1, and
1198 * negative count is just wrong. */
a1e27170
TC
1199 if (n < 1
1200#if IVSIZE > Size_t_size
1201 || n > SSize_t_MAX
1202#endif
1203 )
b262c4c9
JH
1204 overflow = TRUE;
1205 }
1206 if (overflow)
1207 Perl_croak(aTHX_ "Out of memory during list extend");
1208 EXTEND_MORTAL(n);
1209 EXTEND(SP, n);
bbce6d69 1210 }
c1ab3db2 1211 else
b262c4c9
JH
1212 n = 0;
1213 while (n--) {
fc01cab4 1214 SV * const sv = sv_2mortal(newSViv(i));
a0d0e21e 1215 PUSHs(sv);
fc01cab4
DM
1216 if (n) /* avoid incrementing above IV_MAX */
1217 i++;
a0d0e21e
LW
1218 }
1219 }
1220 else {
3c323193
FC
1221 STRLEN len, llen;
1222 const char * const lpv = SvPV_nomg_const(left, llen);
f52e41ad 1223 const char * const tmps = SvPV_nomg_const(right, len);
a0d0e21e 1224
3c323193 1225 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
89ea2908 1226 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
a0d0e21e 1227 XPUSHs(sv);
b15aece3 1228 if (strEQ(SvPVX_const(sv),tmps))
89ea2908 1229 break;
a0d0e21e
LW
1230 sv = sv_2mortal(newSVsv(sv));
1231 sv_inc(sv);
1232 }
a0d0e21e
LW
1233 }
1234 }
1235 else {
1236 dTOPss;
901017d6 1237 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
4e3399f9 1238 int flop = 0;
a0d0e21e 1239 sv_inc(targ);
4e3399f9
YST
1240
1241 if (PL_op->op_private & OPpFLIP_LINENUM) {
1242 if (GvIO(PL_last_in_gv)) {
1243 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1244 }
1245 else {
fafc274c 1246 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
4e3399f9
YST
1247 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1248 }
1249 }
1250 else {
1251 flop = SvTRUE(sv);
1252 }
1253
1254 if (flop) {
a0d0e21e 1255 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
396482e1 1256 sv_catpvs(targ, "E0");
a0d0e21e
LW
1257 }
1258 SETs(targ);
1259 }
1260
1261 RETURN;
1262}
1263
1264/* Control. */
1265
27da23d5 1266static const char * const context_name[] = {
515afda2 1267 "pseudo-block",
f31522f3 1268 NULL, /* CXt_WHEN never actually needs "block" */
76753e7f 1269 NULL, /* CXt_BLOCK never actually needs "block" */
f31522f3 1270 NULL, /* CXt_GIVEN never actually needs "block" */
76753e7f 1271 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
76753e7f 1272 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
93661e56
DM
1273 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1274 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1275 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
515afda2 1276 "subroutine",
76753e7f 1277 "format",
515afda2 1278 "eval",
515afda2 1279 "substitution",
515afda2
NC
1280};
1281
76e3520e 1282STATIC I32
5db1eb8d 1283S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
a0d0e21e 1284{
eb578fdb 1285 I32 i;
a0d0e21e 1286
7918f24d
NC
1287 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1288
a0d0e21e 1289 for (i = cxstack_ix; i >= 0; i--) {
eb578fdb 1290 const PERL_CONTEXT * const cx = &cxstack[i];
6b35e009 1291 switch (CxTYPE(cx)) {
a0d0e21e 1292 case CXt_SUBST:
a0d0e21e 1293 case CXt_SUB:
7766f137 1294 case CXt_FORMAT:
a0d0e21e 1295 case CXt_EVAL:
0a753a76 1296 case CXt_NULL:
dcbac5bb 1297 /* diag_listed_as: Exiting subroutine via %s */
a2a5de95
NC
1298 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1299 context_name[CxTYPE(cx)], OP_NAME(PL_op));
79646418 1300 if (CxTYPE(cx) == CXt_NULL) /* sort BLOCK */
515afda2
NC
1301 return -1;
1302 break;
93661e56 1303 case CXt_LOOP_PLAIN:
c6fdafd0 1304 case CXt_LOOP_LAZYIV:
d01136d6 1305 case CXt_LOOP_LAZYSV:
93661e56
DM
1306 case CXt_LOOP_LIST:
1307 case CXt_LOOP_ARY:
7e8f1eac 1308 {
5db1eb8d
BF
1309 STRLEN cx_label_len = 0;
1310 U32 cx_label_flags = 0;
1311 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1312 if (!cx_label || !(
1313 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1314 (flags & SVf_UTF8)
1315 ? (bytes_cmp_utf8(
1316 (const U8*)cx_label, cx_label_len,
1317 (const U8*)label, len) == 0)
1318 : (bytes_cmp_utf8(
1319 (const U8*)label, len,
1320 (const U8*)cx_label, cx_label_len) == 0)
eade7155
BF
1321 : (len == cx_label_len && ((cx_label == label)
1322 || memEQ(cx_label, label, len))) )) {
1c98cc53 1323 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
7e8f1eac 1324 (long)i, cx_label));
a0d0e21e
LW
1325 continue;
1326 }
1c98cc53 1327 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
a0d0e21e 1328 return i;
7e8f1eac 1329 }
a0d0e21e
LW
1330 }
1331 }
1332 return i;
1333}
1334
0d863452
RH
1335
1336
1c23e2bd 1337U8
864dbfa3 1338Perl_dowantarray(pTHX)
e50aee73 1339{
1c23e2bd 1340 const U8 gimme = block_gimme();
54310121 1341 return (gimme == G_VOID) ? G_SCALAR : gimme;
1342}
1343
1c23e2bd 1344U8
864dbfa3 1345Perl_block_gimme(pTHX)
54310121 1346{
06b5626a 1347 const I32 cxix = dopoptosub(cxstack_ix);
a05700a8 1348 U8 gimme;
e50aee73 1349 if (cxix < 0)
46fc3d4c 1350 return G_VOID;
e50aee73 1351
a05700a8
DM
1352 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1353 if (!gimme)
1354 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1355 return gimme;
e50aee73
AD
1356}
1357
a05700a8 1358
78f9721b
SM
1359I32
1360Perl_is_lvalue_sub(pTHX)
1361{
06b5626a 1362 const I32 cxix = dopoptosub(cxstack_ix);
78f9721b
SM
1363 assert(cxix >= 0); /* We should only be called from inside subs */
1364
bafb2adc
NC
1365 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1366 return CxLVAL(cxstack + cxix);
78f9721b
SM
1367 else
1368 return 0;
1369}
1370
a73d8813 1371/* only used by cx_pushsub() */
777d9014
FC
1372I32
1373Perl_was_lvalue_sub(pTHX)
1374{
777d9014
FC
1375 const I32 cxix = dopoptosub(cxstack_ix-1);
1376 assert(cxix >= 0); /* We should only be called from inside subs */
1377
1378 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1379 return CxLVAL(cxstack + cxix);
1380 else
1381 return 0;
1382}
1383
76e3520e 1384STATIC I32
901017d6 1385S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
2c375eb9 1386{
a0d0e21e 1387 I32 i;
7918f24d
NC
1388
1389 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
81611534
JH
1390#ifndef DEBUGGING
1391 PERL_UNUSED_CONTEXT;
1392#endif
7918f24d 1393
a0d0e21e 1394 for (i = startingblock; i >= 0; i--) {
eb578fdb 1395 const PERL_CONTEXT * const cx = &cxstk[i];
6b35e009 1396 switch (CxTYPE(cx)) {
a0d0e21e
LW
1397 default:
1398 continue;
a0d0e21e 1399 case CXt_SUB:
5fbe8311
DM
1400 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1401 * twice; the first for the normal foo() call, and the second
1402 * for a faked up re-entry into the sub to execute the
1403 * code block. Hide this faked entry from the world. */
1404 if (cx->cx_type & CXp_SUB_RE_FAKE)
1405 continue;
c67159e1 1406 /* FALLTHROUGH */
5fbe8311 1407 case CXt_EVAL:
7766f137 1408 case CXt_FORMAT:
1c98cc53 1409 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
a0d0e21e
LW
1410 return i;
1411 }
1412 }
1413 return i;
1414}
1415
76e3520e 1416STATIC I32
cea2e8a9 1417S_dopoptoeval(pTHX_ I32 startingblock)
a0d0e21e
LW
1418{
1419 I32 i;
a0d0e21e 1420 for (i = startingblock; i >= 0; i--) {
eb578fdb 1421 const PERL_CONTEXT *cx = &cxstack[i];
6b35e009 1422 switch (CxTYPE(cx)) {
a0d0e21e
LW
1423 default:
1424 continue;
1425 case CXt_EVAL:
1c98cc53 1426 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
a0d0e21e
LW
1427 return i;
1428 }
1429 }
1430 return i;
1431}
1432
76e3520e 1433STATIC I32
cea2e8a9 1434S_dopoptoloop(pTHX_ I32 startingblock)
a0d0e21e
LW
1435{
1436 I32 i;
a0d0e21e 1437 for (i = startingblock; i >= 0; i--) {
eb578fdb 1438 const PERL_CONTEXT * const cx = &cxstack[i];
6b35e009 1439 switch (CxTYPE(cx)) {
a0d0e21e 1440 case CXt_SUBST:
a0d0e21e 1441 case CXt_SUB:
7766f137 1442 case CXt_FORMAT:
a0d0e21e 1443 case CXt_EVAL:
0a753a76 1444 case CXt_NULL:
dcbac5bb 1445 /* diag_listed_as: Exiting subroutine via %s */
a2a5de95
NC
1446 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1447 context_name[CxTYPE(cx)], OP_NAME(PL_op));
79646418 1448 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
515afda2
NC
1449 return -1;
1450 break;
93661e56 1451 case CXt_LOOP_PLAIN:
c6fdafd0 1452 case CXt_LOOP_LAZYIV:
d01136d6 1453 case CXt_LOOP_LAZYSV:
93661e56
DM
1454 case CXt_LOOP_LIST:
1455 case CXt_LOOP_ARY:
1c98cc53 1456 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
a0d0e21e
LW
1457 return i;
1458 }
1459 }
1460 return i;
1461}
1462
28e0cf42 1463/* find the next GIVEN or FOR (with implicit $_) loop context block */
97f2561e 1464
0d863452 1465STATIC I32
97f2561e 1466S_dopoptogivenfor(pTHX_ I32 startingblock)
0d863452
RH
1467{
1468 I32 i;
1469 for (i = startingblock; i >= 0; i--) {
eb578fdb 1470 const PERL_CONTEXT *cx = &cxstack[i];
0d863452
RH
1471 switch (CxTYPE(cx)) {
1472 default:
1473 continue;
1474 case CXt_GIVEN:
97f2561e 1475 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found given at cx=%ld)\n", (long)i));
0d863452 1476 return i;
3b719c58 1477 case CXt_LOOP_PLAIN:
93661e56 1478 assert(!(cx->cx_type & CXp_FOR_DEF));
3b719c58 1479 break;
c6fdafd0 1480 case CXt_LOOP_LAZYIV:
d01136d6 1481 case CXt_LOOP_LAZYSV:
93661e56
DM
1482 case CXt_LOOP_LIST:
1483 case CXt_LOOP_ARY:
1484 if (cx->cx_type & CXp_FOR_DEF) {
97f2561e 1485 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found foreach at cx=%ld)\n", (long)i));
0d863452
RH
1486 return i;
1487 }
1488 }
1489 }
1490 return i;
1491}
1492
1493STATIC I32
1494S_dopoptowhen(pTHX_ I32 startingblock)
1495{
1496 I32 i;
1497 for (i = startingblock; i >= 0; i--) {
eb578fdb 1498 const PERL_CONTEXT *cx = &cxstack[i];
0d863452
RH
1499 switch (CxTYPE(cx)) {
1500 default:
1501 continue;
1502 case CXt_WHEN:
1c98cc53 1503 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
0d863452
RH
1504 return i;
1505 }
1506 }
1507 return i;
1508}
1509
abaf5d5a 1510/* dounwind(): pop all contexts above (but not including) cxix.
fc6e609e
DM
1511 * Note that it clears the savestack frame associated with each popped
1512 * context entry, but doesn't free any temps.
ed8ff0f3 1513 * It does a cx_popblock() of the last frame that it pops, and leaves
fc6e609e 1514 * cxstack_ix equal to cxix.
abaf5d5a
DM
1515 */
1516
a0d0e21e 1517void
864dbfa3 1518Perl_dounwind(pTHX_ I32 cxix)
a0d0e21e 1519{
f144f1e3
DM
1520 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1521 return;
1522
a0d0e21e 1523 while (cxstack_ix > cxix) {
4ebe6e95 1524 PERL_CONTEXT *cx = CX_CUR();
5e691bc6
DM
1525
1526 CX_DEBUG(cx, "UNWIND");
a0d0e21e 1527 /* Note: we don't need to restore the base context info till the end. */
76d10131
DM
1528
1529 CX_LEAVE_SCOPE(cx);
1530
6b35e009 1531 switch (CxTYPE(cx)) {
c90c0ff4 1532 case CXt_SUBST:
b405d38b 1533 CX_POPSUBST(cx);
80d88db0 1534 break;
a0d0e21e 1535 case CXt_SUB:
a73d8813 1536 cx_popsub(cx);
a0d0e21e
LW
1537 break;
1538 case CXt_EVAL:
13febba5 1539 cx_popeval(cx);
03e489bc 1540 break;
93661e56 1541 case CXt_LOOP_PLAIN:
c6fdafd0 1542 case CXt_LOOP_LAZYIV:
d01136d6 1543 case CXt_LOOP_LAZYSV:
93661e56
DM
1544 case CXt_LOOP_LIST:
1545 case CXt_LOOP_ARY:
d1b6bf72 1546 cx_poploop(cx);
a0d0e21e 1547 break;
b95eccd3 1548 case CXt_WHEN:
2a7b7c61 1549 cx_popwhen(cx);
b95eccd3
DM
1550 break;
1551 case CXt_GIVEN:
2a7b7c61 1552 cx_popgiven(cx);
b95eccd3 1553 break;
f217cb3d 1554 case CXt_BLOCK:
0a753a76 1555 case CXt_NULL:
f217cb3d 1556 /* these two don't have a POPFOO() */
a0d0e21e 1557 break;
7766f137 1558 case CXt_FORMAT:
6a7d52cc 1559 cx_popformat(cx);
7766f137 1560 break;
a0d0e21e 1561 }
fc6e609e 1562 if (cxstack_ix == cxix + 1) {
ed8ff0f3 1563 cx_popblock(cx);
fc6e609e 1564 }
c90c0ff4 1565 cxstack_ix--;
a0d0e21e 1566 }
fc6e609e 1567
a0d0e21e
LW
1568}
1569
5a844595
GS
1570void
1571Perl_qerror(pTHX_ SV *err)
1572{
7918f24d
NC
1573 PERL_ARGS_ASSERT_QERROR;
1574
6b2fb389
DM
1575 if (PL_in_eval) {
1576 if (PL_in_eval & EVAL_KEEPERR) {
ecad31f0
BF
1577 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1578 SVfARG(err));
6b2fb389
DM
1579 }
1580 else
1581 sv_catsv(ERRSV, err);
1582 }
5a844595
GS
1583 else if (PL_errors)
1584 sv_catsv(PL_errors, err);
1585 else
be2597df 1586 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
13765c85
DM
1587 if (PL_parser)
1588 ++PL_parser->error_count;
5a844595
GS
1589}
1590
d308a779
DM
1591
1592
06a7bc17
DM
1593/* pop a CXt_EVAL context and in addition, if it was a require then
1594 * based on action:
1595 * 0: do nothing extra;
1596 * 1: undef $INC{$name}; croak "$name did not return a true value";
1597 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1598 */
d308a779 1599
8a1fd305 1600static void
06a7bc17 1601S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
d308a779 1602{
51787acf 1603 SV *namesv = NULL; /* init to avoid dumb compiler warning */
06a7bc17
DM
1604 bool do_croak;
1605
1606 CX_LEAVE_SCOPE(cx);
1607 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
2a1e0dfe
DM
1608 if (do_croak) {
1609 /* keep namesv alive after cx_popeval() */
1610 namesv = cx->blk_eval.old_namesv;
1611 cx->blk_eval.old_namesv = NULL;
1612 sv_2mortal(namesv);
1613 }
06a7bc17
DM
1614 cx_popeval(cx);
1615 cx_popblock(cx);
1616 CX_POP(cx);
1617
1618 if (do_croak) {
1619 const char *fmt;
1620 HV *inc_hv = GvHVn(PL_incgv);
1621 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1622 const char *key = SvPVX_const(namesv);
d308a779 1623
06a7bc17
DM
1624 if (action == 1) {
1625 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1626 fmt = "%"SVf" did not return a true value";
1627 errsv = namesv;
1628 }
1629 else {
1630 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1631 fmt = "%"SVf"Compilation failed in require";
1632 if (!errsv)
1633 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1634 }
1635
1636 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1637 }
d308a779
DM
1638}
1639
1640
8c86f023
DM
1641/* die_unwind(): this is the final destination for the various croak()
1642 * functions. If we're in an eval, unwind the context and other stacks
1643 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1644 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1645 * to is a require the exception will be rethrown, as requires don't
1646 * actually trap exceptions.
1647 */
06a7bc17 1648
bb4c52e0 1649void
c5df3096 1650Perl_die_unwind(pTHX_ SV *msv)
a0d0e21e 1651{
8c86f023 1652 SV *exceptsv = msv;
96d9b9cd 1653 U8 in_eval = PL_in_eval;
c5df3096 1654 PERL_ARGS_ASSERT_DIE_UNWIND;
87582a92 1655
96d9b9cd 1656 if (in_eval) {
a0d0e21e 1657 I32 cxix;
a0d0e21e 1658
cc040a9b 1659 exceptsv = sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
8c86f023 1660
22a30693
Z
1661 /*
1662 * Historically, perl used to set ERRSV ($@) early in the die
1663 * process and rely on it not getting clobbered during unwinding.
1664 * That sucked, because it was liable to get clobbered, so the
1665 * setting of ERRSV used to emit the exception from eval{} has
1666 * been moved to much later, after unwinding (see just before
1667 * JMPENV_JUMP below). However, some modules were relying on the
1668 * early setting, by examining $@ during unwinding to use it as
1669 * a flag indicating whether the current unwinding was caused by
1670 * an exception. It was never a reliable flag for that purpose,
1671 * being totally open to false positives even without actual
1672 * clobberage, but was useful enough for production code to
1673 * semantically rely on it.
1674 *
1675 * We'd like to have a proper introspective interface that
1676 * explicitly describes the reason for whatever unwinding
1677 * operations are currently in progress, so that those modules
1678 * work reliably and $@ isn't further overloaded. But we don't
1679 * have one yet. In its absence, as a stopgap measure, ERRSV is
1680 * now *additionally* set here, before unwinding, to serve as the
1681 * (unreliable) flag that it used to.
1682 *
1683 * This behaviour is temporary, and should be removed when a
1684 * proper way to detect exceptional unwinding has been developed.
1685 * As of 2010-12, the authors of modules relying on the hack
1686 * are aware of the issue, because the modules failed on
1687 * perls 5.13.{1..7} which had late setting of $@ without this
1688 * early-setting hack.
1689 */
8c86f023
DM
1690 if (!(in_eval & EVAL_KEEPERR))
1691 sv_setsv_flags(ERRSV, exceptsv,
1692 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
22a30693 1693
fc941f37
Z
1694 if (in_eval & EVAL_KEEPERR) {
1695 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1696 SVfARG(exceptsv));
1697 }
1698
5a844595
GS
1699 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1700 && PL_curstackinfo->si_prev)
1701 {
bac4b2ad 1702 dounwind(-1);
d3acc0f7 1703 POPSTACK;
bac4b2ad 1704 }
e336de0d 1705
a0d0e21e 1706 if (cxix >= 0) {
eb578fdb 1707 PERL_CONTEXT *cx;
f5ddd604 1708 SV **oldsp;
1c23e2bd 1709 U8 gimme;
8f89e5a9
Z
1710 JMPENV *restartjmpenv;
1711 OP *restartop;
a0d0e21e
LW
1712
1713 if (cxix < cxstack_ix)
1714 dounwind(cxix);
1715
4ebe6e95 1716 cx = CX_CUR();
f7d0774b 1717 assert(CxTYPE(cx) == CXt_EVAL);
e17c1e7c
DM
1718
1719 /* return false to the caller of eval */
f5ddd604 1720 oldsp = PL_stack_base + cx->blk_oldsp;
f7d0774b 1721 gimme = cx->blk_gimme;
f7d0774b 1722 if (gimme == G_SCALAR)
f5ddd604
DM
1723 *++oldsp = &PL_sv_undef;
1724 PL_stack_sp = oldsp;
f7d0774b 1725
7d140242
DM
1726 restartjmpenv = cx->blk_eval.cur_top_env;
1727 restartop = cx->blk_eval.retop;
06a7bc17
DM
1728 /* Note that unlike pp_entereval, pp_require isn't supposed to
1729 * trap errors. So if we're a require, after we pop the
1730 * CXt_EVAL that pp_require pushed, rethrow the error with
1731 * croak(exceptsv). This is all handled by the call below when
1732 * action == 2.
1733 */
1734 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
a0d0e21e 1735
fc941f37 1736 if (!(in_eval & EVAL_KEEPERR))
96d9b9cd 1737 sv_setsv(ERRSV, exceptsv);
8f89e5a9
Z
1738 PL_restartjmpenv = restartjmpenv;
1739 PL_restartop = restartop;
bb4c52e0 1740 JMPENV_JUMP(3);
e5964223 1741 NOT_REACHED; /* NOTREACHED */
a0d0e21e
LW
1742 }
1743 }
87582a92 1744
96d9b9cd 1745 write_to_stderr(exceptsv);
f86702cc 1746 my_failure_exit();
e5964223 1747 NOT_REACHED; /* NOTREACHED */
a0d0e21e
LW
1748}
1749
1750PP(pp_xor)
1751{
20b7effb 1752 dSP; dPOPTOPssrl;
a0d0e21e
LW
1753 if (SvTRUE(left) != SvTRUE(right))
1754 RETSETYES;
1755 else
1756 RETSETNO;
1757}
1758
8dff4fc5 1759/*
dcccc8ff
KW
1760
1761=head1 CV Manipulation Functions
1762
8dff4fc5
BM
1763=for apidoc caller_cx
1764
72d33970 1765The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
8dff4fc5 1766returned C<PERL_CONTEXT> structure can be interrogated to find all the
72d33970 1767information returned to Perl by C<caller>. Note that XSUBs don't get a
8dff4fc5
BM
1768stack frame, so C<caller_cx(0, NULL)> will return information for the
1769immediately-surrounding Perl code.
1770
1771This function skips over the automatic calls to C<&DB::sub> made on the
72d33970 1772behalf of the debugger. If the stack frame requested was a sub called by
8dff4fc5
BM
1773C<DB::sub>, the return value will be the frame for the call to
1774C<DB::sub>, since that has the correct line number/etc. for the call
72d33970 1775site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
8dff4fc5
BM
1776frame for the sub call itself.
1777
1778=cut
1779*/
1780
1781const PERL_CONTEXT *
1782Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
a0d0e21e 1783{
eb578fdb
KW
1784 I32 cxix = dopoptosub(cxstack_ix);
1785 const PERL_CONTEXT *cx;
1786 const PERL_CONTEXT *ccstack = cxstack;
901017d6 1787 const PERL_SI *top_si = PL_curstackinfo;
27d41816 1788
a0d0e21e 1789 for (;;) {
2c375eb9
GS
1790 /* we may be in a higher stacklevel, so dig down deeper */
1791 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1792 top_si = top_si->si_prev;
1793 ccstack = top_si->si_cxstack;
1794 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1795 }
8dff4fc5
BM
1796 if (cxix < 0)
1797 return NULL;
f2a7f298
DG
1798 /* caller() should not report the automatic calls to &DB::sub */
1799 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
3280af22 1800 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
a0d0e21e
LW
1801 count++;
1802 if (!count--)
1803 break;
2c375eb9 1804 cxix = dopoptosub_at(ccstack, cxix - 1);
a0d0e21e 1805 }
2c375eb9
GS
1806
1807 cx = &ccstack[cxix];
8dff4fc5
BM
1808 if (dbcxp) *dbcxp = cx;
1809
7766f137 1810 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
f54cb97a 1811 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
2c375eb9 1812 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
06a5b730 1813 field below is defined for any cx. */
f2a7f298
DG
1814 /* caller() should not report the automatic calls to &DB::sub */
1815 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
2c375eb9 1816 cx = &ccstack[dbcxix];
06a5b730 1817 }
1818
8dff4fc5
BM
1819 return cx;
1820}
1821
1822PP(pp_caller)
1823{
8dff4fc5 1824 dSP;
eb578fdb 1825 const PERL_CONTEXT *cx;
8dff4fc5 1826 const PERL_CONTEXT *dbcx;
1c23e2bd 1827 U8 gimme = GIMME_V;
d527ce7c 1828 const HEK *stash_hek;
8dff4fc5 1829 I32 count = 0;
ce0b554b 1830 bool has_arg = MAXARG && TOPs;
25502127 1831 const COP *lcop;
8dff4fc5 1832
ce0b554b
FC
1833 if (MAXARG) {
1834 if (has_arg)
8dff4fc5 1835 count = POPi;
ce0b554b
FC
1836 else (void)POPs;
1837 }
8dff4fc5 1838
ce0b554b 1839 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
8dff4fc5 1840 if (!cx) {
48ebc325 1841 if (gimme != G_ARRAY) {
8dff4fc5
BM
1842 EXTEND(SP, 1);
1843 RETPUSHUNDEF;
1844 }
1845 RETURN;
1846 }
1847
5e691bc6 1848 CX_DEBUG(cx, "CALLER");
d0279c7c 1849 assert(CopSTASH(cx->blk_oldcop));
e7886211
FC
1850 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1851 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1852 : NULL;
48ebc325 1853 if (gimme != G_ARRAY) {
27d41816 1854 EXTEND(SP, 1);
d527ce7c 1855 if (!stash_hek)
3280af22 1856 PUSHs(&PL_sv_undef);
49d8d3a1
MB
1857 else {
1858 dTARGET;
d527ce7c 1859 sv_sethek(TARG, stash_hek);
49d8d3a1
MB
1860 PUSHs(TARG);
1861 }
a0d0e21e
LW
1862 RETURN;
1863 }
a0d0e21e 1864
b3ca2e83 1865 EXTEND(SP, 11);
27d41816 1866
d527ce7c 1867 if (!stash_hek)
3280af22 1868 PUSHs(&PL_sv_undef);
d527ce7c
BF
1869 else {
1870 dTARGET;
1871 sv_sethek(TARG, stash_hek);
1872 PUSHTARG;
1873 }
6e449a3a 1874 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
e6dae479 1875 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
25502127
FC
1876 cx->blk_sub.retop, TRUE);
1877 if (!lcop)
1878 lcop = cx->blk_oldcop;
e9e9e546 1879 mPUSHu(CopLINE(lcop));
ce0b554b 1880 if (!has_arg)
a0d0e21e 1881 RETURN;
7766f137
GS
1882 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1883 /* So is ccstack[dbcxix]. */
a5f47741 1884 if (CvHASGV(dbcx->blk_sub.cv)) {
ecf05a58 1885 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
bf38a478 1886 PUSHs(boolSV(CxHASARGS(cx)));
07b8c804
RGS
1887 }
1888 else {
84bafc02 1889 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
bf38a478 1890 PUSHs(boolSV(CxHASARGS(cx)));
07b8c804 1891 }
a0d0e21e
LW
1892 }
1893 else {
84bafc02 1894 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
6e449a3a 1895 mPUSHi(0);
a0d0e21e 1896 }
1c23e2bd 1897 gimme = cx->blk_gimme;
54310121 1898 if (gimme == G_VOID)
3280af22 1899 PUSHs(&PL_sv_undef);
54310121 1900 else
98625aca 1901 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
6b35e009 1902 if (CxTYPE(cx) == CXt_EVAL) {
811a4de9 1903 /* eval STRING */
85a64632 1904 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
78beb4ca
TC
1905 SV *cur_text = cx->blk_eval.cur_text;
1906 if (SvCUR(cur_text) >= 2) {
1907 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1908 SvUTF8(cur_text)|SVs_TEMP));
1909 }
1910 else {
1911 /* I think this is will always be "", but be sure */
1912 PUSHs(sv_2mortal(newSVsv(cur_text)));
1913 }
1914
3280af22 1915 PUSHs(&PL_sv_no);
0f79a09d 1916 }
811a4de9 1917 /* require */
0f79a09d 1918 else if (cx->blk_eval.old_namesv) {
6e449a3a 1919 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
3280af22 1920 PUSHs(&PL_sv_yes);
06a5b730 1921 }
811a4de9
GS
1922 /* eval BLOCK (try blocks have old_namesv == 0) */
1923 else {
1924 PUSHs(&PL_sv_undef);
1925 PUSHs(&PL_sv_undef);
1926 }
4633a7c4 1927 }
a682de96
GS
1928 else {
1929 PUSHs(&PL_sv_undef);
1930 PUSHs(&PL_sv_undef);
1931 }
bafb2adc 1932 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
ed094faf 1933 && CopSTASH_eq(PL_curcop, PL_debstash))
4633a7c4 1934 {
9513529b
DM
1935 /* slot 0 of the pad contains the original @_ */
1936 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
1937 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
1938 cx->blk_sub.olddepth+1]))[0]);
c70927a6 1939 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
a0d0e21e 1940
e1a80902 1941 Perl_init_dbargs(aTHX);
a0d0e21e 1942
3280af22
NIS
1943 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1944 av_extend(PL_dbargs, AvFILLp(ary) + off);
1945 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1946 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
a0d0e21e 1947 }
6e449a3a 1948 mPUSHi(CopHINTS_get(cx->blk_oldcop));
e476b1b5
GS
1949 {
1950 SV * mask ;
72dc9ed5 1951 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
114bafba 1952
f07626ad 1953 if (old_warnings == pWARN_NONE)
e476b1b5 1954 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
f07626ad
FC
1955 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1956 mask = &PL_sv_undef ;
ac27b0f5 1957 else if (old_warnings == pWARN_ALL ||
75b6c4ca
RGS
1958 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1959 /* Get the bit mask for $warnings::Bits{all}, because
1960 * it could have been extended by warnings::register */
1961 SV **bits_all;
6673a63c 1962 HV * const bits = get_hv("warnings::Bits", 0);
017a3ce5 1963 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
75b6c4ca
RGS
1964 mask = newSVsv(*bits_all);
1965 }
1966 else {
1967 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1968 }
1969 }
e476b1b5 1970 else
72dc9ed5 1971 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
6e449a3a 1972 mPUSHs(mask);
e476b1b5 1973 }
b3ca2e83 1974
c28fe1ec 1975 PUSHs(cx->blk_oldcop->cop_hints_hash ?
20439bc7 1976 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
b3ca2e83 1977 : &PL_sv_undef);
a0d0e21e
LW
1978 RETURN;
1979}
1980
a0d0e21e
LW
1981PP(pp_reset)
1982{
39644a26 1983 dSP;
ca826051
FC
1984 const char * tmps;
1985 STRLEN len = 0;
1986 if (MAXARG < 1 || (!TOPs && !POPs))
1987 tmps = NULL, len = 0;
1988 else
1989 tmps = SvPVx_const(POPs, len);
1990 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
3280af22 1991 PUSHs(&PL_sv_yes);
a0d0e21e
LW
1992 RETURN;
1993}
1994
dd2155a4
DM
1995/* like pp_nextstate, but used instead when the debugger is active */
1996
a0d0e21e
LW
1997PP(pp_dbstate)
1998{
533c011a 1999 PL_curcop = (COP*)PL_op;
a0d0e21e 2000 TAINT_NOT; /* Each statement is presumed innocent */
4ebe6e95 2001 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
a0d0e21e
LW
2002 FREETMPS;
2003
f410a211
NC
2004 PERL_ASYNC_CHECK();
2005
88df5f01 2006 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
a6d69523 2007 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
a0d0e21e 2008 {
39644a26 2009 dSP;
eb578fdb 2010 PERL_CONTEXT *cx;
1c23e2bd 2011 const U8 gimme = G_ARRAY;
0bd48802 2012 GV * const gv = PL_DBgv;
432d4561
JL
2013 CV * cv = NULL;
2014
2015 if (gv && isGV_with_GP(gv))
2016 cv = GvCV(gv);
a0d0e21e 2017
c2cb6f77 2018 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
cea2e8a9 2019 DIE(aTHX_ "No DB::DB routine defined");
a0d0e21e 2020
aea4f609
DM
2021 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2022 /* don't do recursive DB::DB call */
a0d0e21e 2023 return NORMAL;
748a9306 2024
aed2304a 2025 if (CvISXSUB(cv)) {
8ae997c5
DM
2026 ENTER;
2027 SAVEI32(PL_debug);
2028 PL_debug = 0;
2029 SAVESTACK_POS();
8a44b450 2030 SAVETMPS;
c127bd3a
SF
2031 PUSHMARK(SP);
2032 (void)(*CvXSUB(cv))(aTHX_ cv);
c127bd3a 2033 FREETMPS;
a57c6685 2034 LEAVE;
c127bd3a
SF
2035 return NORMAL;
2036 }
2037 else {
ed8ff0f3 2038 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
a73d8813
DM
2039 cx_pushsub(cx, cv, PL_op->op_next, 0);
2040 /* OP_DBSTATE's op_private holds hint bits rather than
2041 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2042 * any CxLVAL() flags that have now been mis-calculated */
2043 cx->blk_u16 = 0;
8ae997c5
DM
2044
2045 SAVEI32(PL_debug);
2046 PL_debug = 0;
2047 SAVESTACK_POS();
c127bd3a 2048 CvDEPTH(cv)++;
d2af2719 2049 if (CvDEPTH(cv) >= 2)
9d976ff5 2050 pad_push(CvPADLIST(cv), CvDEPTH(cv));
9d976ff5 2051 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
c127bd3a
SF
2052 RETURNOP(CvSTART(cv));
2053 }
a0d0e21e
LW
2054 }
2055 else
2056 return NORMAL;
2057}
2058
0663a8f8 2059
2b9a6457
VP
2060PP(pp_enter)
2061{
1c23e2bd 2062 U8 gimme = GIMME_V;
2b9a6457 2063
d4ce7588
DM
2064 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2065 return NORMAL;
2b9a6457
VP
2066}
2067
d4ce7588 2068
2b9a6457
VP
2069PP(pp_leave)
2070{
eb578fdb 2071 PERL_CONTEXT *cx;
f5ddd604 2072 SV **oldsp;
1c23e2bd 2073 U8 gimme;
2b9a6457 2074
4ebe6e95 2075 cx = CX_CUR();
61d3b95a 2076 assert(CxTYPE(cx) == CXt_BLOCK);
4df352a8
DM
2077
2078 if (PL_op->op_flags & OPf_SPECIAL)
c349b9a0
DM
2079 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2080 cx->blk_oldpm = PL_curpm;
4df352a8 2081
f5ddd604 2082 oldsp = PL_stack_base + cx->blk_oldsp;
61d3b95a 2083 gimme = cx->blk_gimme;
2b9a6457 2084
0663a8f8 2085 if (gimme == G_VOID)
f5ddd604 2086 PL_stack_sp = oldsp;
0663a8f8 2087 else
f5ddd604 2088 leave_adjust_stacks(oldsp, oldsp, gimme,
75bc488d 2089 PL_op->op_private & OPpLVALUE ? 3 : 1);
67f63db7 2090
2f450c1b 2091 CX_LEAVE_SCOPE(cx);
ed8ff0f3 2092 cx_popblock(cx);
5da525e9 2093 CX_POP(cx);
2b9a6457 2094
0663a8f8 2095 return NORMAL;
2b9a6457
VP
2096}
2097
eaa9f768
JH
2098static bool
2099S_outside_integer(pTHX_ SV *sv)
2100{
2101 if (SvOK(sv)) {
2102 const NV nv = SvNV_nomg(sv);
415b66b2
JH
2103 if (Perl_isinfnan(nv))
2104 return TRUE;
eaa9f768
JH
2105#ifdef NV_PRESERVES_UV
2106 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2107 return TRUE;
2108#else
2109 if (nv <= (NV)IV_MIN)
2110 return TRUE;
2111 if ((nv > 0) &&
2112 ((nv > (NV)UV_MAX ||
2113 SvUV_nomg(sv) > (UV)IV_MAX)))
2114 return TRUE;
2115#endif
2116 }
2117 return FALSE;
2118}
2119
a0d0e21e
LW
2120PP(pp_enteriter)
2121{
20b7effb 2122 dSP; dMARK;
eb578fdb 2123 PERL_CONTEXT *cx;
1c23e2bd 2124 const U8 gimme = GIMME_V;
4ad63d70 2125 void *itervarp; /* GV or pad slot of the iteration variable */
f0bb9bf7 2126 SV *itersave; /* the old var in the iterator var slot */
93661e56 2127 U8 cxflags = 0;
a0d0e21e 2128
aafca525 2129 if (PL_op->op_targ) { /* "my" variable */
4ad63d70
DM
2130 itervarp = &PAD_SVl(PL_op->op_targ);
2131 itersave = *(SV**)itervarp;
2132 assert(itersave);
aafca525 2133 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
fdb8b82b
DM
2134 /* the SV currently in the pad slot is never live during
2135 * iteration (the slot is always aliased to one of the items)
2136 * so it's always stale */
4ad63d70 2137 SvPADSTALE_on(itersave);
14f338dc 2138 }
4ad63d70 2139 SvREFCNT_inc_simple_void_NN(itersave);
93661e56 2140 cxflags = CXp_FOR_PAD;
54b9620d 2141 }
d39c26a6
FC
2142 else {
2143 SV * const sv = POPs;
4ad63d70 2144 itervarp = (void *)sv;
d4e2b4d6 2145 if (LIKELY(isGV(sv))) { /* symbol table variable */
6d3ca00e
DM
2146 itersave = GvSV(sv);
2147 SvREFCNT_inc_simple_void(itersave);
93661e56 2148 cxflags = CXp_FOR_GV;
28e0cf42
DM
2149 if (PL_op->op_private & OPpITER_DEF)
2150 cxflags |= CXp_FOR_DEF;
d4e2b4d6
DM
2151 }
2152 else { /* LV ref: for \$foo (...) */
2153 assert(SvTYPE(sv) == SVt_PVMG);
2154 assert(SvMAGIC(sv));
2155 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2156 itersave = NULL;
93661e56 2157 cxflags = CXp_FOR_LVREF;
d4e2b4d6 2158 }
d39c26a6 2159 }
28e0cf42
DM
2160 /* OPpITER_DEF (implicit $_) should only occur with a GV iter var */
2161 assert((cxflags & CXp_FOR_GV) || !(PL_op->op_private & OPpITER_DEF));
0d863452 2162
75fbe096
DM
2163 /* Note that this context is initially set as CXt_NULL. Further on
2164 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2165 * there mustn't be anything in the blk_loop substruct that requires
2166 * freeing or undoing, in case we die in the meantime. And vice-versa.
2167 */
ed8ff0f3 2168 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
d1b6bf72 2169 cx_pushloop_for(cx, itervarp, itersave);
2c49879e 2170
533c011a 2171 if (PL_op->op_flags & OPf_STACKED) {
2c49879e
DM
2172 /* OPf_STACKED implies either a single array: for(@), with a
2173 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2174 * the stack */
d01136d6
BS
2175 SV *maybe_ary = POPs;
2176 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2c49879e 2177 /* range */
89ea2908 2178 dPOPss;
d01136d6 2179 SV * const right = maybe_ary;
93661e56 2180 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
d39c26a6 2181 DIE(aTHX_ "Assigned value is not a reference");
984a4bea
RD
2182 SvGETMAGIC(sv);
2183 SvGETMAGIC(right);
4fe3f0fa 2184 if (RANGE_IS_NUMERIC(sv,right)) {
c6fdafd0 2185 cx->cx_type |= CXt_LOOP_LAZYIV;
eaa9f768
JH
2186 if (S_outside_integer(aTHX_ sv) ||
2187 S_outside_integer(aTHX_ right))
076d9a11 2188 DIE(aTHX_ "Range iterator outside integer range");
f52e41ad
FC
2189 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2190 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
89ea2908 2191 }
3f63a782 2192 else {
d01136d6 2193 cx->cx_type |= CXt_LOOP_LAZYSV;
d01136d6
BS
2194 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2195 cx->blk_loop.state_u.lazysv.end = right;
2c49879e 2196 SvREFCNT_inc_simple_void_NN(right);
d01136d6 2197 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
267cc4a8
NC
2198 /* This will do the upgrade to SVt_PV, and warn if the value
2199 is uninitialised. */
10516c54 2200 (void) SvPV_nolen_const(right);
267cc4a8
NC
2201 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2202 to replace !SvOK() with a pointer to "". */
2203 if (!SvOK(right)) {
2204 SvREFCNT_dec(right);
d01136d6 2205 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
267cc4a8 2206 }
3f63a782 2207 }
89ea2908 2208 }
d01136d6 2209 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2c49879e 2210 /* for (@array) {} */
93661e56 2211 cx->cx_type |= CXt_LOOP_ARY;
502c6561 2212 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2c49879e 2213 SvREFCNT_inc_simple_void_NN(maybe_ary);
d01136d6
BS
2214 cx->blk_loop.state_u.ary.ix =
2215 (PL_op->op_private & OPpITER_REVERSED) ?
2216 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2217 -1;
ef3e5ea9 2218 }
8a1f10dd 2219 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
89ea2908 2220 }
d01136d6 2221 else { /* iterating over items on the stack */
93661e56 2222 cx->cx_type |= CXt_LOOP_LIST;
1bef65a2 2223 cx->blk_oldsp = SP - PL_stack_base;
93661e56
DM
2224 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2225 cx->blk_loop.state_u.stack.ix =
2226 (PL_op->op_private & OPpITER_REVERSED)
2227 ? cx->blk_oldsp + 1
2228 : cx->blk_loop.state_u.stack.basesp;
8a1f10dd
DM
2229 /* pre-extend stack so pp_iter doesn't have to check every time
2230 * it pushes yes/no */
2231 EXTEND(SP, 1);
4633a7c4 2232 }
a0d0e21e
LW
2233
2234 RETURN;
2235}
2236
2237PP(pp_enterloop)
2238{
eb578fdb 2239 PERL_CONTEXT *cx;
1c23e2bd 2240 const U8 gimme = GIMME_V;
a0d0e21e 2241
d4ce7588 2242 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
d1b6bf72 2243 cx_pushloop_plain(cx);
d4ce7588 2244 return NORMAL;
a0d0e21e
LW
2245}
2246
d4ce7588 2247
a0d0e21e
LW
2248PP(pp_leaveloop)
2249{
eb578fdb 2250 PERL_CONTEXT *cx;
1c23e2bd 2251 U8 gimme;
032736ab 2252 SV **base;
f5ddd604 2253 SV **oldsp;
a0d0e21e 2254
4ebe6e95 2255 cx = CX_CUR();
3b719c58 2256 assert(CxTYPE_is_LOOP(cx));
032736ab
DM
2257 oldsp = PL_stack_base + cx->blk_oldsp;
2258 base = CxTYPE(cx) == CXt_LOOP_LIST
1bef65a2 2259 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
032736ab 2260 : oldsp;
61d3b95a 2261 gimme = cx->blk_gimme;
f86702cc 2262
0663a8f8 2263 if (gimme == G_VOID)
032736ab 2264 PL_stack_sp = base;
0663a8f8 2265 else
032736ab 2266 leave_adjust_stacks(oldsp, base, gimme,
75bc488d 2267 PL_op->op_private & OPpLVALUE ? 3 : 1);
f86702cc 2268
2f450c1b 2269 CX_LEAVE_SCOPE(cx);
d1b6bf72 2270 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
ed8ff0f3 2271 cx_popblock(cx);
5da525e9 2272 CX_POP(cx);
f86702cc 2273
f86702cc 2274 return NORMAL;
a0d0e21e
LW
2275}
2276
31ccb4f5
DM
2277
2278/* This duplicates most of pp_leavesub, but with additional code to handle
2279 * return args in lvalue context. It was forked from pp_leavesub to
2280 * avoid slowing down that function any further.
2281 *
2282 * Any changes made to this function may need to be copied to pp_leavesub
2283 * and vice-versa.
c349b9a0
DM
2284 *
2285 * also tail-called by pp_return
57486a97
DM
2286 */
2287
31ccb4f5 2288PP(pp_leavesublv)
3bdf583b 2289{
1c23e2bd 2290 U8 gimme;
57486a97 2291 PERL_CONTEXT *cx;
799da9d7 2292 SV **oldsp;
5da525e9 2293 OP *retop;
57486a97 2294
4ebe6e95 2295 cx = CX_CUR();
61d3b95a
DM
2296 assert(CxTYPE(cx) == CXt_SUB);
2297
2298 if (CxMULTICALL(cx)) {
1f0ba93b
DM
2299 /* entry zero of a stack is always PL_sv_undef, which
2300 * simplifies converting a '()' return into undef in scalar context */
2301 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
85ecf147 2302 return 0;
1f0ba93b 2303 }
85ecf147 2304
61d3b95a 2305 gimme = cx->blk_gimme;
799da9d7 2306 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
57486a97 2307
799da9d7
DM
2308 if (gimme == G_VOID)
2309 PL_stack_sp = oldsp;
2310 else {
2311 U8 lval = CxLVAL(cx);
2312 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2313 const char *what = NULL;
2314
2315 if (gimme == G_SCALAR) {
2316 if (is_lval) {
2317 /* check for bad return arg */
2318 if (oldsp < PL_stack_sp) {
2319 SV *sv = *PL_stack_sp;
2320 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2321 what =
2322 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2323 : "a readonly value" : "a temporary";
2324 }
2325 else goto ok;
2326 }
2327 else {
2328 /* sub:lvalue{} will take us here. */
2329 what = "undef";
2330 }
2331 croak:
2332 Perl_croak(aTHX_
2333 "Can't return %s from lvalue subroutine", what);
2334 }
57486a97 2335
799da9d7 2336 ok:
e02ce34b 2337 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
e80c4acf 2338
799da9d7
DM
2339 if (lval & OPpDEREF) {
2340 /* lval_sub()->{...} and similar */
2341 dSP;
2342 SvGETMAGIC(TOPs);
2343 if (!SvOK(TOPs)) {
2344 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2345 }
2346 PUTBACK;
2347 }
2348 }
2349 else {
2350 assert(gimme == G_ARRAY);
2351 assert (!(lval & OPpDEREF));
2352
2353 if (is_lval) {
2354 /* scan for bad return args */
2355 SV **p;
2356 for (p = PL_stack_sp; p > oldsp; p--) {
2357 SV *sv = *p;
2358 /* the PL_sv_undef exception is to allow things like
2359 * this to work, where PL_sv_undef acts as 'skip'
2360 * placeholder on the LHS of list assigns:
2361 * sub foo :lvalue { undef }
2362 * ($a, undef, foo(), $b) = 1..4;
2363 */
2364 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2365 {
2366 /* Might be flattened array after $#array = */
2367 what = SvREADONLY(sv)
2368 ? "a readonly value" : "a temporary";
2369 goto croak;
2370 }
2371 }
2372 }
2373
e02ce34b 2374 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
799da9d7 2375 }
3bdf583b 2376 }
57486a97 2377
2f450c1b 2378 CX_LEAVE_SCOPE(cx);
a73d8813 2379 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
ed8ff0f3 2380 cx_popblock(cx);
5da525e9
DM
2381 retop = cx->blk_sub.retop;
2382 CX_POP(cx);
57486a97 2383
5da525e9 2384 return retop;
3bdf583b
FC
2385}
2386
57486a97 2387
a0d0e21e
LW
2388PP(pp_return)
2389{
20b7effb 2390 dSP; dMARK;
eb578fdb 2391 PERL_CONTEXT *cx;
0bd48802
AL
2392 const I32 cxix = dopoptosub(cxstack_ix);
2393
d40dc6b1
DM
2394 assert(cxstack_ix >= 0);
2395 if (cxix < cxstack_ix) {
2396 if (cxix < 0) {
79646418
DM
2397 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2398 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2399 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2400 )
2401 )
3089a108 2402 DIE(aTHX_ "Can't return outside a subroutine");
79646418
DM
2403 /* We must be in:
2404 * a sort block, which is a CXt_NULL not a CXt_SUB;
2405 * or a /(?{...})/ block.
2406 * Handle specially. */
2407 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2408 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2409 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
3089a108
DM
2410 if (cxstack_ix > 0) {
2411 /* See comment below about context popping. Since we know
2412 * we're scalar and not lvalue, we can preserve the return
2413 * value in a simpler fashion than there. */
2414 SV *sv = *SP;
d40dc6b1 2415 assert(cxstack[0].blk_gimme == G_SCALAR);
3089a108
DM
2416 if ( (sp != PL_stack_base)
2417 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2418 )
2419 *SP = sv_mortalcopy(sv);
2420 dounwind(0);
d40dc6b1 2421 }
3089a108
DM
2422 /* caller responsible for popping cxstack[0] */
2423 return 0;
d40dc6b1 2424 }
3089a108
DM
2425
2426 /* There are contexts that need popping. Doing this may free the
c349b9a0 2427 * return value(s), so preserve them first: e.g. popping the plain
3089a108
DM
2428 * loop here would free $x:
2429 * sub f { { my $x = 1; return $x } }
2430 * We may also need to shift the args down; for example,
2431 * for (1,2) { return 3,4 }
c349b9a0
DM
2432 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2433 * leave_adjust_stacks(), along with freeing any temps. Note that
2434 * whoever we tail-call (e.g. pp_leaveeval) will also call
2435 * leave_adjust_stacks(); however, the second call is likely to
2436 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2437 * pass them through, rather than copying them again. So this
2438 * isn't as inefficient as it sounds.
3089a108
DM
2439 */
2440 cx = &cxstack[cxix];
3089a108 2441 PUTBACK;
e02ce34b
DM
2442 if (cx->blk_gimme != G_VOID)
2443 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
fc6e609e
DM
2444 cx->blk_gimme,
2445 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2446 ? 3 : 0);
0663a8f8 2447 SPAGAIN;
a0d0e21e 2448 dounwind(cxix);
42831ce4 2449 cx = &cxstack[cxix]; /* CX stack may have been realloced */
d40dc6b1 2450 }
3089a108
DM
2451 else {
2452 /* Like in the branch above, we need to handle any extra junk on
2453 * the stack. But because we're not also popping extra contexts, we
2454 * don't have to worry about prematurely freeing args. So we just
2455 * need to do the bare minimum to handle junk, and leave the main
2456 * arg processing in the function we tail call, e.g. pp_leavesub.
2457 * In list context we have to splice out the junk; in scalar
2458 * context we can leave as-is (pp_leavesub will later return the
2459 * top stack element). But for an empty arg list, e.g.
2460 * for (1,2) { return }
2461 * we need to set sp = oldsp so that pp_leavesub knows to push
2462 * &PL_sv_undef onto the stack.
2463 */
3ebe7c5a
DM
2464 SV **oldsp;
2465 cx = &cxstack[cxix];
2466 oldsp = PL_stack_base + cx->blk_oldsp;
2467 if (oldsp != MARK) {
2468 SSize_t nargs = SP - MARK;
2469 if (nargs) {
2470 if (cx->blk_gimme == G_ARRAY) {
2471 /* shift return args to base of call stack frame */
2472 Move(MARK + 1, oldsp + 1, nargs, SV*);
2473 PL_stack_sp = oldsp + nargs;
2474 }
6228a1e1 2475 }
3ebe7c5a
DM
2476 else
2477 PL_stack_sp = oldsp;
13929c4c 2478 }
3089a108 2479 }
617a4f41
DM
2480
2481 /* fall through to a normal exit */
2482 switch (CxTYPE(cx)) {
2483 case CXt_EVAL:
2484 return CxTRYBLOCK(cx)
2485 ? Perl_pp_leavetry(aTHX)
2486 : Perl_pp_leaveeval(aTHX);
2487 case CXt_SUB:
13929c4c 2488 return CvLVALUE(cx->blk_sub.cv)
31ccb4f5 2489 ? Perl_pp_leavesublv(aTHX)
13929c4c 2490 : Perl_pp_leavesub(aTHX);
7766f137 2491 case CXt_FORMAT:
617a4f41 2492 return Perl_pp_leavewrite(aTHX);
a0d0e21e 2493 default:
5637ef5b 2494 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
a0d0e21e 2495 }
a0d0e21e
LW
2496}
2497
42b5eca0 2498/* find the enclosing loop or labelled loop and dounwind() back to it. */
4f443c3d 2499
31705cda 2500static PERL_CONTEXT *
42b5eca0 2501S_unwind_loop(pTHX)
a0d0e21e 2502{
a0d0e21e 2503 I32 cxix;
1f039d60
FC
2504 if (PL_op->op_flags & OPf_SPECIAL) {
2505 cxix = dopoptoloop(cxstack_ix);
2506 if (cxix < 0)
2507 /* diag_listed_as: Can't "last" outside a loop block */
42b5eca0
DM
2508 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2509 OP_NAME(PL_op));
1f039d60
FC
2510 }
2511 else {
2512 dSP;
2513 STRLEN label_len;
2514 const char * const label =
2515 PL_op->op_flags & OPf_STACKED
2516 ? SvPV(TOPs,label_len)
2517 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2518 const U32 label_flags =
2519 PL_op->op_flags & OPf_STACKED
2520 ? SvUTF8(POPs)
2521 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2522 PUTBACK;
2523 cxix = dopoptolabel(label, label_len, label_flags);
2524 if (cxix < 0)
2525 /* diag_listed_as: Label not found for "last %s" */
2526 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
42b5eca0 2527 OP_NAME(PL_op),
1f039d60
FC
2528 SVfARG(PL_op->op_flags & OPf_STACKED
2529 && !SvGMAGICAL(TOPp1s)
2530 ? TOPp1s
2531 : newSVpvn_flags(label,
2532 label_len,
2533 label_flags | SVs_TEMP)));
2534 }
2535 if (cxix < cxstack_ix)
2536 dounwind(cxix);
dc7f00ca 2537 return &cxstack[cxix];
1f039d60
FC
2538}
2539
dc7f00ca 2540
1f039d60
FC
2541PP(pp_last)
2542{
eb578fdb 2543 PERL_CONTEXT *cx;
5da525e9 2544 OP* nextop;
9d4ba2ae 2545
42b5eca0 2546 cx = S_unwind_loop(aTHX);
4df352a8 2547
93661e56 2548 assert(CxTYPE_is_LOOP(cx));
1bef65a2
DM
2549 PL_stack_sp = PL_stack_base
2550 + (CxTYPE(cx) == CXt_LOOP_LIST
2551 ? cx->blk_loop.state_u.stack.basesp
2552 : cx->blk_oldsp
2553 );
a0d0e21e 2554
a1f49e72 2555 TAINT_NOT;
f86702cc 2556
2557 /* Stack values are safe: */
2f450c1b 2558 CX_LEAVE_SCOPE(cx);
d1b6bf72 2559 cx_poploop(cx); /* release loop vars ... */
ed8ff0f3 2560 cx_popblock(cx);
5da525e9
DM
2561 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2562 CX_POP(cx);
a0d0e21e 2563
5da525e9 2564 return nextop;
a0d0e21e
LW
2565}
2566
2567PP(pp_next)
2568{
eb578fdb 2569 PERL_CONTEXT *cx;
a0d0e21e 2570
cd97dc8d
DM
2571 /* if not a bare 'next' in the main scope, search for it */
2572 cx = CX_CUR();
2573 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2574 cx = S_unwind_loop(aTHX);
a0d0e21e 2575
ed8ff0f3 2576 cx_topblock(cx);
3a1b2b9e 2577 PL_curcop = cx->blk_oldcop;
47c9d59f 2578 PERL_ASYNC_CHECK();
d57ce4df 2579 return (cx)->blk_loop.my_op->op_nextop;
a0d0e21e
LW
2580}
2581
2582PP(pp_redo)
2583{
42b5eca0 2584 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
dc7f00ca 2585 OP* redo_op = cx->blk_loop.my_op->op_redoop;
a0d0e21e 2586
a034e688
DM
2587 if (redo_op->op_type == OP_ENTER) {
2588 /* pop one less context to avoid $x being freed in while (my $x..) */
2589 cxstack_ix++;
dc7f00ca
DM
2590 cx = CX_CUR();
2591 assert(CxTYPE(cx) == CXt_BLOCK);
a034e688
DM
2592 redo_op = redo_op->op_next;
2593 }
2594
936c78b5 2595 FREETMPS;
ef588991 2596 CX_LEAVE_SCOPE(cx);
ed8ff0f3 2597 cx_topblock(cx);
3a1b2b9e 2598 PL_curcop = cx->blk_oldcop;
47c9d59f 2599 PERL_ASYNC_CHECK();
a034e688 2600 return redo_op;
a0d0e21e
LW
2601}
2602
0824fdcb 2603STATIC OP *
5db1eb8d 2604S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
a0d0e21e 2605{
a0d0e21e 2606 OP **ops = opstack;
a1894d81 2607 static const char* const too_deep = "Target of goto is too deeply nested";
a0d0e21e 2608
7918f24d
NC
2609 PERL_ARGS_ASSERT_DOFINDLABEL;
2610
fc36a67e 2611 if (ops >= oplimit)
0157ef98 2612 Perl_croak(aTHX_ "%s", too_deep);
11343788
MB
2613 if (o->op_type == OP_LEAVE ||
2614 o->op_type == OP_SCOPE ||
2615 o->op_type == OP_LEAVELOOP ||
33d34e4c 2616 o->op_type == OP_LEAVESUB ||
11343788 2617 o->op_type == OP_LEAVETRY)
fc36a67e 2618 {
5dc0d613 2619 *ops++ = cUNOPo->op_first;
fc36a67e 2620 if (ops >= oplimit)
0157ef98 2621 Perl_croak(aTHX_ "%s", too_deep);
fc36a67e 2622 }
c4aa4e48 2623 *ops = 0;
11343788 2624 if (o->op_flags & OPf_KIDS) {
aec46f14 2625 OP *kid;
a0d0e21e 2626 /* First try all the kids at this level, since that's likeliest. */
e6dae479 2627 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
7e8f1eac 2628 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
5db1eb8d
BF
2629 STRLEN kid_label_len;
2630 U32 kid_label_flags;
2631 const char *kid_label = CopLABEL_len_flags(kCOP,
2632 &kid_label_len, &kid_label_flags);
2633 if (kid_label && (
2634 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2635 (flags & SVf_UTF8)
2636 ? (bytes_cmp_utf8(
2637 (const U8*)kid_label, kid_label_len,
2638 (const U8*)label, len) == 0)
2639 : (bytes_cmp_utf8(
2640 (const U8*)label, len,
2641 (const U8*)kid_label, kid_label_len) == 0)
eade7155
BF
2642 : ( len == kid_label_len && ((kid_label == label)
2643 || memEQ(kid_label, label, len)))))
7e8f1eac
AD
2644 return kid;
2645 }
a0d0e21e 2646 }
e6dae479 2647 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3280af22 2648 if (kid == PL_lastgotoprobe)
a0d0e21e 2649 continue;
ed8d0fe2
SM
2650 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2651 if (ops == opstack)
2652 *ops++ = kid;
2653 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2654 ops[-1]->op_type == OP_DBSTATE)
2655 ops[-1] = kid;
2656 else
2657 *ops++ = kid;
2658 }
5db1eb8d 2659 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
11343788 2660 return o;
a0d0e21e
LW
2661 }
2662 }
c4aa4e48 2663 *ops = 0;
a0d0e21e
LW
2664 return 0;
2665}
2666
b1c05ba5
DM
2667
2668/* also used for: pp_dump() */
2669
2670PP(pp_goto)
a0d0e21e 2671{
27da23d5 2672 dVAR; dSP;
cbbf8932 2673 OP *retop = NULL;
a0d0e21e 2674 I32 ix;
eb578fdb 2675 PERL_CONTEXT *cx;
fc36a67e 2676#define GOTO_DEPTH 64
2677 OP *enterops[GOTO_DEPTH];
cbbf8932 2678 const char *label = NULL;
5db1eb8d
BF
2679 STRLEN label_len = 0;
2680 U32 label_flags = 0;
bfed75c6 2681 const bool do_dump = (PL_op->op_type == OP_DUMP);
a1894d81 2682 static const char* const must_have_label = "goto must have label";
a0d0e21e 2683
533c011a 2684 if (PL_op->op_flags & OPf_STACKED) {
7d1d69cb
DM
2685 /* goto EXPR or goto &foo */
2686
9d4ba2ae 2687 SV * const sv = POPs;
55b37f1c 2688 SvGETMAGIC(sv);
a0d0e21e 2689
a0d0e21e 2690 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
0fa3d31d 2691 /* This egregious kludge implements goto &subroutine */
a0d0e21e 2692 I32 cxix;
eb578fdb 2693 PERL_CONTEXT *cx;
ea726b52 2694 CV *cv = MUTABLE_CV(SvRV(sv));
049bd5ff 2695 AV *arg = GvAV(PL_defgv);
a0d0e21e 2696
5d52e310 2697 while (!CvROOT(cv) && !CvXSUB(cv)) {
7fc63493 2698 const GV * const gv = CvGV(cv);
e8f7dd13 2699 if (gv) {
7fc63493 2700 GV *autogv;
e8f7dd13
GS
2701 SV *tmpstr;
2702 /* autoloaded stub? */
2703 if (cv != GvCV(gv) && (cv = GvCV(gv)))
5d52e310 2704 continue;
c271df94
BF
2705 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2706 GvNAMELEN(gv),
2707 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
e8f7dd13 2708 if (autogv && (cv = GvCV(autogv)))
5d52e310 2709 continue;
e8f7dd13 2710 tmpstr = sv_newmortal();
c445ea15 2711 gv_efullname3(tmpstr, gv, NULL);
be2597df 2712 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
4aa0a1f7 2713 }
cea2e8a9 2714 DIE(aTHX_ "Goto undefined subroutine");
4aa0a1f7
AD
2715 }
2716
a0d0e21e 2717 cxix = dopoptosub(cxstack_ix);
d338c0c2
DM
2718 if (cxix < 0) {
2719 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
8da3792e 2720 }
d338c0c2 2721 cx = &cxstack[cxix];
564abe23 2722 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2d43a17f 2723 if (CxTYPE(cx) == CXt_EVAL) {
c74ace89 2724 if (CxREALEVAL(cx))
00455a92 2725 /* diag_listed_as: Can't goto subroutine from an eval-%s */
c74ace89
DM
2726 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2727 else
00455a92 2728 /* diag_listed_as: Can't goto subroutine from an eval-%s */
c74ace89 2729 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2d43a17f 2730 }
9850bf21
RH
2731 else if (CxMULTICALL(cx))
2732 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
d338c0c2
DM
2733
2734 /* First do some returnish stuff. */
2735
2736 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2737 FREETMPS;
2738 if (cxix < cxstack_ix) {
2739 dounwind(cxix);
2740 }
7e637ba4 2741 cx = CX_CUR();
ed8ff0f3 2742 cx_topblock(cx);
d338c0c2 2743 SPAGAIN;
39de75fd 2744
8ae997c5
DM
2745 /* protect @_ during save stack unwind. */
2746 if (arg)
2747 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2748
2749 assert(PL_scopestack_ix == cx->blk_oldscopesp);
dfe0f39b 2750 CX_LEAVE_SCOPE(cx);
8ae997c5 2751
bafb2adc 2752 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
a73d8813 2753 /* this is part of cx_popsub_args() */
9513529b 2754 AV* av = MUTABLE_AV(PAD_SVl(0));
e2657e18
DM
2755 assert(AvARRAY(MUTABLE_AV(
2756 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2757 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2758
f72bdec3
DM
2759 /* we are going to donate the current @_ from the old sub
2760 * to the new sub. This first part of the donation puts a
2761 * new empty AV in the pad[0] slot of the old sub,
2762 * unless pad[0] and @_ differ (e.g. if the old sub did
2763 * local *_ = []); in which case clear the old pad[0]
2764 * array in the usual way */
95b2f486
DM
2765 if (av == arg || AvREAL(av))
2766 clear_defarray(av, av == arg);
049bd5ff 2767 else CLEAR_ARGARRAY(av);
a0d0e21e 2768 }
88c11d84 2769
b1e25d05
DM
2770 /* don't restore PL_comppad here. It won't be needed if the
2771 * sub we're going to is non-XS, but restoring it early then
2772 * croaking (e.g. the "Goto undefined subroutine" below)
2773 * means the CX block gets processed again in dounwind,
2774 * but this time with the wrong PL_comppad */
88c11d84 2775
1d59c038
FC
2776 /* A destructor called during LEAVE_SCOPE could have undefined
2777 * our precious cv. See bug #99850. */
2778 if (!CvROOT(cv) && !CvXSUB(cv)) {
2779 const GV * const gv = CvGV(cv);
2780 if (gv) {
2781 SV * const tmpstr = sv_newmortal();
2782 gv_efullname3(tmpstr, gv, NULL);
2783 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2784 SVfARG(tmpstr));
2785 }
2786 DIE(aTHX_ "Goto undefined subroutine");
2787 }
2788
cd17cc2e
DM
2789 if (CxTYPE(cx) == CXt_SUB) {
2790 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2791 SvREFCNT_dec_NN(cx->blk_sub.cv);
2792 }
2793
a0d0e21e 2794 /* Now do some callish stuff. */
aed2304a 2795 if (CvISXSUB(cv)) {
ad39f3a2 2796 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
cd313eb4 2797 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
049bd5ff
FC
2798 SV** mark;
2799
8ae997c5 2800 ENTER;
80774f05
DM
2801 SAVETMPS;
2802 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2803
049bd5ff 2804 /* put GvAV(defgv) back onto stack */
8c9d3376
FC
2805 if (items) {
2806 EXTEND(SP, items+1); /* @_ could have been extended. */
8c9d3376 2807 }
049bd5ff 2808 mark = SP;
ad39f3a2 2809 if (items) {
de935cc9 2810 SSize_t index;
ad39f3a2 2811 bool r = cBOOL(AvREAL(arg));
b1464ded 2812 for (index=0; index<items; index++)
ad39f3a2
FC
2813 {
2814 SV *sv;
2815 if (m) {
2816 SV ** const svp = av_fetch(arg, index, 0);
2817 sv = svp ? *svp : NULL;
dd2a7f90 2818 }
ad39f3a2
FC
2819 else sv = AvARRAY(arg)[index];
2820 SP[index+1] = sv
2821 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2822 : sv_2mortal(newSVavdefelem(arg, index, 1));
2823 }
049bd5ff 2824 }
ad39f3a2 2825 SP += items;
049bd5ff
FC
2826 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2827 /* Restore old @_ */
b405d38b 2828 CX_POP_SAVEARRAY(cx);
b1464ded 2829 }
1fa4e549 2830
51eb35b5 2831 retop = cx->blk_sub.retop;
b1e25d05
DM
2832 PL_comppad = cx->blk_sub.prevcomppad;
2833 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
8ae997c5
DM
2834
2835 /* XS subs don't have a CXt_SUB, so pop it;
ed8ff0f3
DM
2836 * this is a cx_popblock(), less all the stuff we already did
2837 * for cx_topblock() earlier */
8ae997c5 2838 PL_curcop = cx->blk_oldcop;
5da525e9 2839 CX_POP(cx);
8ae997c5 2840
b37c2d43
AL
2841 /* Push a mark for the start of arglist */
2842 PUSHMARK(mark);
2843 PUTBACK;
2844 (void)(*CvXSUB(cv))(aTHX_ cv);
a57c6685 2845 LEAVE;
51eb35b5 2846 goto _return;
a0d0e21e
LW
2847 }
2848 else {
b70d5558 2849 PADLIST * const padlist = CvPADLIST(cv);
39de75fd 2850
80774f05
DM
2851 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2852
a73d8813 2853 /* partial unrolled cx_pushsub(): */
39de75fd 2854
a0d0e21e 2855 cx->blk_sub.cv = cv;
1a5b3db4 2856 cx->blk_sub.olddepth = CvDEPTH(cv);
dd2155a4 2857
a0d0e21e 2858 CvDEPTH(cv)++;
2c50b7ed
DM
2859 SvREFCNT_inc_simple_void_NN(cv);
2860 if (CvDEPTH(cv) > 1) {
2b9dff67 2861 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
44a8e56a 2862 sub_crush_depth(cv);
26019298 2863 pad_push(padlist, CvDEPTH(cv));
a0d0e21e 2864 }
426a09cd 2865 PL_curcop = cx->blk_oldcop;
fd617465 2866 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
bafb2adc 2867 if (CxHASARGS(cx))
6d4ff0d2 2868 {
f72bdec3
DM
2869 /* second half of donating @_ from the old sub to the
2870 * new sub: abandon the original pad[0] AV in the
2871 * new sub, and replace it with the donated @_.
2872 * pad[0] takes ownership of the extra refcount
2873 * we gave arg earlier */
bfa371b6
FC
2874 if (arg) {
2875 SvREFCNT_dec(PAD_SVl(0));
fed4514a 2876 PAD_SVl(0) = (SV *)arg;
13122036 2877 SvREFCNT_inc_simple_void_NN(arg);
bfa371b6 2878 }
049bd5ff
FC
2879
2880 /* GvAV(PL_defgv) might have been modified on scope
f72bdec3 2881 exit, so point it at arg again. */
049bd5ff
FC
2882 if (arg != GvAV(PL_defgv)) {
2883 AV * const av = GvAV(PL_defgv);
2884 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2885 SvREFCNT_dec(av);
a0d0e21e
LW
2886 }
2887 }
13122036 2888
491527d0 2889 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
005a8a35 2890 Perl_get_db_sub(aTHX_ NULL, cv);
b37c2d43 2891 if (PERLDB_GOTO) {
b96d8cd9 2892 CV * const gotocv = get_cvs("DB::goto", 0);
b37c2d43
AL
2893 if (gotocv) {
2894 PUSHMARK( PL_stack_sp );
ad64d0ec 2895 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
b37c2d43
AL
2896 PL_stack_sp--;
2897 }
491527d0 2898 }
1ce6579f 2899 }
51eb35b5
DD
2900 retop = CvSTART(cv);
2901 goto putback_return;
a0d0e21e
LW
2902 }
2903 }
1614b0e3 2904 else {
7d1d69cb 2905 /* goto EXPR */
55b37f1c 2906 label = SvPV_nomg_const(sv, label_len);
5db1eb8d 2907 label_flags = SvUTF8(sv);
1614b0e3 2908 }
a0d0e21e 2909 }
2fc690dc 2910 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
7d1d69cb 2911 /* goto LABEL or dump LABEL */
5db1eb8d
BF
2912 label = cPVOP->op_pv;
2913 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2914 label_len = strlen(label);
2915 }
0157ef98 2916 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
a0d0e21e 2917
f410a211
NC
2918 PERL_ASYNC_CHECK();
2919
3532f34a 2920 if (label_len) {
cbbf8932 2921 OP *gotoprobe = NULL;
3b2447bc 2922 bool leaving_eval = FALSE;
33d34e4c 2923 bool in_block = FALSE;
cbbf8932 2924 PERL_CONTEXT *last_eval_cx = NULL;
a0d0e21e
LW
2925
2926 /* find label */
2927
d4c19fe8 2928 PL_lastgotoprobe = NULL;
a0d0e21e
LW
2929 *enterops = 0;
2930 for (ix = cxstack_ix; ix >= 0; ix--) {
2931 cx = &cxstack[ix];
6b35e009 2932 switch (CxTYPE(cx)) {
a0d0e21e 2933 case CXt_EVAL:
3b2447bc 2934 leaving_eval = TRUE;
971ecbe6 2935 if (!CxTRYBLOCK(cx)) {
a4f3a277
RH
2936 gotoprobe = (last_eval_cx ?
2937 last_eval_cx->blk_eval.old_eval_root :
2938 PL_eval_root);
2939 last_eval_cx = cx;
9c5794fe
RH
2940 break;
2941 }
2942 /* else fall through */
93661e56
DM
2943 case CXt_LOOP_PLAIN:
2944 case CXt_LOOP_LAZYIV:
2945 case CXt_LOOP_LAZYSV:
2946 case CXt_LOOP_LIST:
2947 case CXt_LOOP_ARY:
bb5aedc1
VP
2948 case CXt_GIVEN:
2949 case CXt_WHEN:
e6dae479 2950 gotoprobe = OpSIBLING(cx->blk_oldcop);
a0d0e21e
LW
2951 break;
2952 case CXt_SUBST:
2953 continue;
2954 case CXt_BLOCK:
33d34e4c 2955 if (ix) {
e6dae479 2956 gotoprobe = OpSIBLING(cx->blk_oldcop);
33d34e4c
AE
2957 in_block = TRUE;
2958 } else
3280af22 2959 gotoprobe = PL_main_root;
a0d0e21e 2960 break;
b3933176 2961 case CXt_SUB:
9850bf21 2962 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
b3933176
CS
2963 gotoprobe = CvROOT(cx->blk_sub.cv);
2964 break;
2965 }
924ba076 2966 /* FALLTHROUGH */
7766f137 2967 case CXt_FORMAT:
0a753a76 2968 case CXt_NULL:
a651a37d 2969 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
a0d0e21e
LW
2970 default:
2971 if (ix)
5637ef5b
NC
2972 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
2973 CxTYPE(cx), (long) ix);
3280af22 2974 gotoprobe = PL_main_root;
a0d0e21e
LW
2975 break;
2976 }
2b597662 2977 if (gotoprobe) {
29e61fd9
DM
2978 OP *sibl1, *sibl2;
2979
5db1eb8d 2980 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
2b597662
GS
2981 enterops, enterops + GOTO_DEPTH);
2982 if (retop)
2983 break;
e6dae479 2984 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
29e61fd9 2985 sibl1->op_type == OP_UNSTACK &&
e6dae479 2986 (sibl2 = OpSIBLING(sibl1)))
29e61fd9
DM
2987 {
2988 retop = dofindlabel(sibl2,
5db1eb8d
BF
2989 label, label_len, label_flags, enterops,
2990 enterops + GOTO_DEPTH);
eae48c89
Z
2991 if (retop)
2992 break;
2993 }
2b597662 2994 }
3280af22 2995 PL_lastgotoprobe = gotoprobe;
a0d0e21e
LW
2996 }
2997 if (!retop)
b17a0679
FC
2998 DIE(aTHX_ "Can't find label %"UTF8f,
2999 UTF8fARG(label_flags, label_len, label));
a0d0e21e 3000
3b2447bc
RH
3001 /* if we're leaving an eval, check before we pop any frames
3002 that we're not going to punt, otherwise the error
3003 won't be caught */
3004
3005 if (leaving_eval && *enterops && enterops[1]) {
3006 I32 i;
3007 for (i = 1; enterops[i]; i++)
3008 if (enterops[i]->op_type == OP_ENTERITER)
3009 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3010 }
3011
b500e03b
GG
3012 if (*enterops && enterops[1]) {
3013 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3014 if (enterops[i])
3015 deprecate("\"goto\" to jump into a construct");
3016 }
3017
a0d0e21e
LW
3018 /* pop unwanted frames */
3019
3020 if (ix < cxstack_ix) {
a0d0e21e 3021 if (ix < 0)
5edb7975 3022 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
a0d0e21e 3023 dounwind(ix);
7e637ba4 3024 cx = CX_CUR();
ed8ff0f3 3025 cx_topblock(cx);
a0d0e21e
LW
3026 }
3027
3028 /* push wanted frames */
3029
748a9306 3030 if (*enterops && enterops[1]) {
0bd48802 3031 OP * const oldop = PL_op;
33d34e4c
AE
3032 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3033 for (; enterops[ix]; ix++) {
533c011a 3034 PL_op = enterops[ix];
84902520
TB
3035 /* Eventually we may want to stack the needed arguments
3036 * for each op. For now, we punt on the hard ones. */
533c011a 3037 if (PL_op->op_type == OP_ENTERITER)
894356b3 3038 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
16c91539 3039 PL_op->op_ppaddr(aTHX);
a0d0e21e 3040 }
533c011a 3041 PL_op = oldop;
a0d0e21e
LW
3042 }
3043 }
3044
2631bbca 3045 if (do_dump) {
a5f75d66 3046#ifdef VMS
6b88bc9c 3047 if (!retop) retop = PL_main_start;
a5f75d66 3048#endif
3280af22
NIS
3049 PL_restartop = retop;
3050 PL_do_undump = TRUE;
a0d0e21e
LW
3051
3052 my_unexec();
3053
3280af22
NIS
3054 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3055 PL_do_undump = FALSE;
a0d0e21e
LW
3056 }
3057
51eb35b5
DD
3058 putback_return:
3059 PL_stack_sp = sp;
3060 _return:
47c9d59f 3061 PERL_ASYNC_CHECK();
51eb35b5 3062 return retop;
a0d0e21e
LW
3063}
3064
3065PP(pp_exit)
3066{
39644a26 3067 dSP;
a0d0e21e
LW
3068 I32 anum;
3069
3070 if (MAXARG < 1)
3071 anum = 0;
9d3c658e
FC
3072 else if (!TOPs) {
3073 anum = 0; (void)POPs;
3074 }
ff0cee69 3075 else {
a0d0e21e 3076 anum = SvIVx(POPs);
d98f61e7 3077#ifdef VMS
5450b4d8
FC
3078 if (anum == 1
3079 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
ff0cee69 3080 anum = 0;
97124ef6
FC
3081 VMSISH_HUSHED =
3082 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
ff0cee69 3083#endif
3084 }
cc3604b1 3085 PL_exit_flags |= PERL_EXIT_EXPECTED;
a0d0e21e 3086 my_exit(anum);
3280af22 3087 PUSHs(&PL_sv_undef);
a0d0e21e
LW
3088 RETURN;
3089}
3090
a0d0e21e
LW
3091/* Eval. */
3092
0824fdcb 3093STATIC void
cea2e8a9 3094S_save_lines(pTHX_ AV *array, SV *sv)
a0d0e21e 3095{
504618e9 3096 const char *s = SvPVX_const(sv);
890ce7af 3097 const char * const send = SvPVX_const(sv) + SvCUR(sv);
504618e9 3098 I32 line = 1;
a0d0e21e 3099
7918f24d
NC
3100 PERL_ARGS_ASSERT_SAVE_LINES;
3101
a0d0e21e 3102 while (s && s < send) {
f54cb97a 3103 const char *t;
b9f83d2f 3104 SV * const tmpstr = newSV_type(SVt_PVMG);
a0d0e21e 3105
1d963ff3 3106 t = (const char *)memchr(s, '\n', send - s);
a0d0e21e
LW
3107 if (t)
3108 t++;
3109 else
3110 t = send;
3111
3112 sv_setpvn(tmpstr, s, t - s);
3113 av_store(array, line++, tmpstr);
3114 s = t;
3115 }
3116}
3117
22f16304
RU
3118/*
3119=for apidoc docatch
3120
3121Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3122
31230 is used as continue inside eval,
3124
31253 is used for a die caught by an inner eval - continue inner loop
3126
75af9d73 3127See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
22f16304
RU
3128establish a local jmpenv to handle exception traps.
3129
3130=cut
3131*/
0824fdcb 3132STATIC OP *
cea2e8a9 3133S_docatch(pTHX_ OP *o)
1e422769 3134{
6224f72b 3135 int ret;
06b5626a 3136 OP * const oldop = PL_op;
db36c5a1 3137 dJMPENV;
1e422769 3138
1e422769 3139#ifdef DEBUGGING
54310121 3140 assert(CATCH_GET == TRUE);
1e422769 3141#endif
312caa8e 3142 PL_op = o;
8bffa5f8 3143
14dd3ad8 3144 JMPENV_PUSH(ret);
6224f72b 3145 switch (ret) {
312caa8e 3146 case 0:
abd70938 3147 assert(cxstack_ix >= 0);
4ebe6e95
DM
3148 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3149 CX_CUR()->blk_eval.cur_top_env = PL_top_env;
14dd3ad8 3150 redo_body:
85aaa934 3151 CALLRUNOPS(aTHX);
312caa8e
CS
3152 break;
3153 case 3:
8bffa5f8 3154 /* die caught by an inner eval - continue inner loop */
febb3a6d
Z
3155 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3156 PL_restartjmpenv = NULL;
312caa8e
CS
3157 PL_op = PL_restartop;
3158 PL_restartop = 0;
3159 goto redo_body;
3160 }
924ba076 3161 /* FALLTHROUGH */
312caa8e 3162 default:
14dd3ad8 3163 JMPENV_POP;
533c011a 3164 PL_op = oldop;
6224f72b 3165 JMPENV_JUMP(ret);
e5964223 3166 NOT_REACHED; /* NOTREACHED */
1e422769 3167 }
14dd3ad8 3168 JMPENV_POP;
533c011a 3169 PL_op = oldop;
5f66b61c 3170 return NULL;
1e422769 3171}
3172
a3985cdc
DM
3173
3174/*
3175=for apidoc find_runcv
3176
3177Locate the CV corresponding to the currently executing sub or eval.
796b6530
KW
3178If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3179C<*db_seqp> with the cop sequence number at the point that the DB:: code was
72d33970
FC
3180entered. (This allows debuggers to eval in the scope of the breakpoint
3181rather than in the scope of the debugger itself.)
a3985cdc
DM
3182
3183=cut
3184*/
3185
3186CV*
d819b83a 3187Perl_find_runcv(pTHX_ U32 *db_seqp)
a3985cdc 3188{
db4cf31d 3189 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
70794f7b
FC
3190}
3191
3192/* If this becomes part of the API, it might need a better name. */
3193CV *
db4cf31d 3194Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
70794f7b 3195{
a3985cdc 3196 PERL_SI *si;
b4b0692a 3197 int level = 0;
a3985cdc 3198
d819b83a 3199 if (db_seqp)
c3923c33
DM
3200 *db_seqp =
3201 PL_curcop == &PL_compiling
3202 ? PL_cop_seqmax
3203 : PL_curcop->cop_seq;
3204
a3985cdc 3205 for (si = PL_curstackinfo; si; si = si->si_prev) {
06b5626a 3206 I32 ix;
a3985cdc 3207 for (ix = si->si_cxix; ix >= 0; ix--) {
06b5626a 3208 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
70794f7b 3209 CV *cv = NULL;
d819b83a 3210 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
70794f7b 3211 cv = cx->blk_sub.cv;
d819b83a
DM
3212 /* skip DB:: code */
3213 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3214 *db_seqp = cx->blk_oldcop->cop_seq;
3215 continue;
3216 }
a453e28a
DM
3217 if (cx->cx_type & CXp_SUB_RE)
3218 continue;
d819b83a 3219 }
a3985cdc 3220 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
70794f7b
FC
3221 cv = cx->blk_eval.cv;
3222 if (cv) {
3223 switch (cond) {
db4cf31d
FC
3224 case FIND_RUNCV_padid_eq:
3225 if (!CvPADLIST(cv)
b4db5868 3226 || CvPADLIST(cv)->xpadl_id != (U32)arg)
8771da69 3227 continue;
b4b0692a
FC
3228 return cv;
3229 case FIND_RUNCV_level_eq:
db4cf31d 3230 if (level++ != arg) continue;
70794f7b
FC
3231 /* GERONIMO! */
3232 default:
3233 return cv;
3234 }
3235 }
a3985cdc
DM
3236 }
3237 }
db4cf31d 3238 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
a3985cdc
DM
3239}
3240
3241
27e90453
DM
3242/* Run yyparse() in a setjmp wrapper. Returns:
3243 * 0: yyparse() successful
3244 * 1: yyparse() failed
3245 * 3: yyparse() died
3246 */
3247STATIC int
28ac2b49 3248S_try_yyparse(pTHX_ int gramtype)
27e90453
DM
3249{
3250 int ret;
3251 dJMPENV;
3252
4ebe6e95 3253 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
27e90453
DM
3254 JMPENV_PUSH(ret);
3255 switch (ret) {
3256 case 0:
28ac2b49 3257 ret = yyparse(gramtype) ? 1 : 0;
27e90453
DM
3258 break;
3259 case 3:
3260 break;
3261 default:
3262 JMPENV_POP;
3263 JMPENV_JUMP(ret);
e5964223 3264 NOT_REACHED; /* NOTREACHED */
27e90453
DM
3265 }
3266 JMPENV_POP;
3267 return ret;
3268}
3269
3270
104a8185
DM
3271/* Compile a require/do or an eval ''.
3272 *
a3985cdc 3273 * outside is the lexically enclosing CV (if any) that invoked us.
104a8185
DM
3274 * seq is the current COP scope value.
3275 * hh is the saved hints hash, if any.
3276 *
410be5db 3277 * Returns a bool indicating whether the compile was successful; if so,
104a8185
DM
3278 * PL_eval_start contains the first op of the compiled code; otherwise,
3279 * pushes undef.
3280 *
3281 * This function is called from two places: pp_require and pp_entereval.
3282 * These can be distinguished by whether PL_op is entereval.
7d116edc
FC
3283 */
3284
410be5db 3285STATIC bool
1c23e2bd 3286S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
a0d0e21e 3287{
20b7effb 3288 dSP;
46c461b5 3289 OP * const saveop = PL_op;
104a8185 3290 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
f45b078d 3291 COP * const oldcurcop = PL_curcop;
26c9400e 3292 bool in_require = (saveop->op_type == OP_REQUIRE);
27e90453 3293 int yystatus;
676a678a 3294 CV *evalcv;
a0d0e21e 3295
27e90453 3296 PL_in_eval = (in_require
6dc8a9e4 3297 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
a1941760
DM
3298 : (EVAL_INEVAL |
3299 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3300 ? EVAL_RE_REPARSING : 0)));
a0d0e21e 3301
1ce6579f 3302 PUSHMARK(SP);
3303
676a678a
Z
3304 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3305 CvEVAL_on(evalcv);
4ebe6e95
DM
3306 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3307 CX_CUR()->blk_eval.cv = evalcv;
3308 CX_CUR()->blk_gimme = gimme;
2090ab20 3309
676a678a
Z
3310 CvOUTSIDE_SEQ(evalcv) = seq;
3311 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
a3985cdc 3312
dd2155a4 3313 /* set up a scratch pad */
a0d0e21e 3314
eacbb379 3315 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
cecbe010 3316 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
2c05e328 3317
07055b4c 3318
b5bbe64a 3319 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
748a9306 3320
a0d0e21e
LW
3321 /* make sure we compile in the right package */
3322
ed094faf 3323 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
03d9f026 3324 SAVEGENERICSV(PL_curstash);
cb1ad50e
FC
3325 PL_curstash = (HV *)CopSTASH(PL_curcop);
3326 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3327 else SvREFCNT_inc_simple_void(PL_curstash);
a0d0e21e 3328 }
3c10abe3 3329 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3280af22
NIS
3330 SAVESPTR(PL_beginav);
3331 PL_beginav = newAV();
3332 SAVEFREESV(PL_beginav);
3c10abe3
AG
3333 SAVESPTR(PL_unitcheckav);
3334 PL_unitcheckav = newAV();
3335 SAVEFREESV(PL_unitcheckav);
a0d0e21e 3336
81d86705 3337
104a8185 3338 ENTER_with_name("evalcomp");
676a678a
Z
3339 SAVESPTR(PL_compcv);
3340 PL_compcv = evalcv;
3341
a0d0e21e
LW
3342 /* try to compile it */
3343
5f66b61c 3344 PL_eval_root = NULL;
3280af22 3345 PL_curcop = &PL_compiling;
26c9400e 3346 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
faef0170 3347 PL_in_eval |= EVAL_KEEPERR;
ab69dbc2
RGS
3348 else
3349 CLEAR_ERRSV();
27e90453 3350
377b5421
DM
3351 SAVEHINTS();
3352 if (clear_hints) {
3353 PL_hints = 0;
3354 hv_clear(GvHV(PL_hintgv));
3355 }
3356 else {
3357 PL_hints = saveop->op_private & OPpEVAL_COPHH
f734918a 3358 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
4f3e2518
DM
3359
3360 /* making 'use re eval' not be in scope when compiling the
3361 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3362 * infinite recursion when S_has_runtime_code() gives a false
3363 * positive: the second time round, HINT_RE_EVAL isn't set so we
3364 * don't bother calling S_has_runtime_code() */
3365 if (PL_in_eval & EVAL_RE_REPARSING)
3366 PL_hints &= ~HINT_RE_EVAL;
3367
377b5421
DM
3368 if (hh) {
3369 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3370 SvREFCNT_dec(GvHV(PL_hintgv));
3371 GvHV(PL_hintgv) = hh;
3372 }
3373 }
3374 SAVECOMPILEWARNINGS();
3375 if (clear_hints) {
3376 if (PL_dowarn & G_WARN_ALL_ON)
3377 PL_compiling.cop_warnings = pWARN_ALL ;
3378 else if (PL_dowarn & G_WARN_ALL_OFF)
3379 PL_compiling.cop_warnings = pWARN_NONE ;
3380 else
3381 PL_compiling.cop_warnings = pWARN_STD ;
3382 }
3383 else {
3384 PL_compiling.cop_warnings =
3385 DUP_WARNINGS(oldcurcop->cop_warnings);
3386 cophh_free(CopHINTHASH_get(&PL_compiling));
3387 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3388 /* The label, if present, is the first entry on the chain. So rather
3389 than writing a blank label in front of it (which involves an
3390 allocation), just use the next entry in the chain. */
3391 PL_compiling.cop_hints_hash
3392 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3393 /* Check the assumption that this removed the label. */
3394 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
f45b078d 3395 }
377b5421
DM
3396 else
3397 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3398 }
f45b078d 3399
a88d97bf 3400 CALL_BLOCK_HOOKS(bhk_eval, saveop);
52db365a 3401
27e90453
DM
3402 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3403 * so honour CATCH_GET and trap it here if necessary */
3404
fc69996c
DM
3405
3406 /* compile the code */
28ac2b49 3407 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
27e90453
DM
3408
3409 if (yystatus || PL_parser->error_count || !PL_eval_root) {
d164302a 3410 PERL_CONTEXT *cx;
d308a779 3411 SV *errsv;
bfed75c6 3412
d308a779 3413 PL_op = saveop;
fc69996c
DM
3414 /* note that if yystatus == 3, then the require/eval died during
3415 * compilation, so the EVAL CX block has already been popped, and
3416 * various vars restored */
27e90453 3417 if (yystatus != 3) {
c86ffc32
DM
3418 if (PL_eval_root) {
3419 op_free(PL_eval_root);
3420 PL_eval_root = NULL;
3421 }
27e90453 3422 SP = PL_stack_base + POPMARK; /* pop original mark */
4ebe6e95 3423 cx = CX_CUR();
06a7bc17
DM
3424 assert(CxTYPE(cx) == CXt_EVAL);
3425 /* pop the CXt_EVAL, and if was a require, croak */
3426 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
9d7f88dd 3427 }
d308a779 3428
03e81cd3
DM
3429 /* die_unwind() re-croaks when in require, having popped the
3430 * require EVAL context. So we should never catch a require
3431 * exception here */
3432 assert(!in_require);
3433
3434 errsv = ERRSV;
d308a779
DM
3435 if (!*(SvPV_nolen_const(errsv)))
3436 sv_setpvs(errsv, "Compilation error");
3437
2bf54cc6 3438 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
410be5db
DM
3439 PUTBACK;
3440 return FALSE;
a0d0e21e 3441 }
fc69996c
DM
3442
3443 /* Compilation successful. Now clean up */
3444
3445 LEAVE_with_name("evalcomp");
104a8185 3446
57843af0 3447 CopLINE_set(&PL_compiling, 0);
104a8185 3448 SAVEFREEOP(PL_eval_root);
8be227ab 3449 cv_forget_slab(evalcv);
0c58d367 3450
a0d0e21e
LW
3451 DEBUG_x(dump_eval());
3452
55497cff 3453 /* Register with debugger: */
26c9400e 3454 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
b96d8cd9 3455 CV * const cv = get_cvs("DB::postponed", 0);
55497cff 3456 if (cv) {
3457 dSP;
924508f0 3458 PUSHMARK(SP);
ad64d0ec 3459 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
55497cff 3460 PUTBACK;
ad64d0ec 3461 call_sv(MUTABLE_SV(cv), G_DISCARD);
55497cff 3462 }
3463 }
3464
8ed49485
FC
3465 if (PL_unitcheckav) {
3466 OP *es = PL_eval_start;
3c10abe3 3467 call_list(PL_scopestack_ix, PL_unitcheckav);
8ed49485
FC
3468 PL_eval_start = es;
3469 }
3c10abe3 3470
676a678a 3471 CvDEPTH(evalcv) = 1;
3280af22 3472 SP = PL_stack_base + POPMARK; /* pop original mark */
533c011a 3473 PL_op = saveop; /* The caller may need it. */
bc177e6b 3474 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
5dc0d613 3475
410be5db
DM
3476 PUTBACK;
3477 return TRUE;
a0d0e21e
LW
3478}
3479
fc69996c 3480
a6c40364 3481STATIC PerlIO *
282b29ee 3482S_check_type_and_open(pTHX_ SV *name)
ce8abf5f
SP
3483{
3484 Stat_t st;
41188aa0 3485 STRLEN len;
d345f487 3486 PerlIO * retio;
41188aa0 3487 const char *p = SvPV_const(name, len);
c8028aa6 3488 int st_rc;
df528165 3489
7918f24d
NC
3490 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3491
c8028aa6
TC
3492 /* checking here captures a reasonable error message when
3493 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3494 * user gets a confusing message about looking for the .pmc file
1e777496
DD
3495 * rather than for the .pm file so do the check in S_doopen_pm when
3496 * PMC is on instead of here. S_doopen_pm calls this func.
c8028aa6
TC
3497 * This check prevents a \0 in @INC causing problems.
3498 */
1e777496 3499#ifdef PERL_DISABLE_PMC
41188aa0 3500 if (!IS_SAFE_PATHNAME(p, len, "require"))
c8028aa6 3501 return NULL;
1e777496 3502#endif
c8028aa6 3503
d345f487
DD
3504 /* on Win32 stat is expensive (it does an open() and close() twice and
3505 a couple other IO calls), the open will fail with a dir on its own with
3506 errno EACCES, so only do a stat to separate a dir from a real EACCES
3507 caused by user perms */
3508#ifndef WIN32
b2da7ead
DM
3509 /* we use the value of errno later to see how stat() or open() failed.
3510 * We don't want it set if the stat succeeded but we still failed,
3511 * such as if the name exists, but is a directory */
3512 errno = 0;
3513
c8028aa6
TC
3514 st_rc = PerlLIO_stat(p, &st);
3515
6b845e56 3516 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
4608196e 3517 return NULL;
ce8abf5f 3518 }
d345f487 3519#endif
ce8abf5f 3520
d345f487 3521 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
d345f487
DD
3522#ifdef WIN32
3523 /* EACCES stops the INC search early in pp_require to implement
3524 feature RT #113422 */
3525 if(!retio && errno == EACCES) { /* exists but probably a directory */
3526 int eno;
3527 st_rc = PerlLIO_stat(p, &st);
3528 if (st_rc >= 0) {
3529 if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
3530 eno = 0;
3531 else
3532 eno = EACCES;
3533 errno = eno;
3534 }
3535 }
ccb84406 3536#endif
d345f487 3537 return retio;
ce8abf5f
SP
3538}
3539
75c20bac 3540#ifndef PERL_DISABLE_PMC
ce8abf5f 3541STATIC PerlIO *
282b29ee 3542S_doopen_pm(pTHX_ SV *name)
b295d113 3543{
282b29ee
NC
3544 STRLEN namelen;
3545 const char *p = SvPV_const(name, namelen);
b295d113 3546
7918f24d
NC
3547 PERL_ARGS_ASSERT_DOOPEN_PM;
3548
c8028aa6
TC
3549 /* check the name before trying for the .pmc name to avoid the
3550 * warning referring to the .pmc which the user probably doesn't
3551 * know or care about
3552 */
41188aa0 3553 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
c8028aa6
TC
3554 return NULL;
3555
282b29ee 3556 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
eb70bb4a 3557 SV *const pmcsv = sv_newmortal();
1e777496 3558 PerlIO * pmcio;
50b8ed39 3559
eb70bb4a 3560 SvSetSV_nosteal(pmcsv,name);
46e2868e 3561 sv_catpvs(pmcsv, "c");
50b8ed39 3562
1e777496
DD
3563 pmcio = check_type_and_open(pmcsv);
3564 if (pmcio)
3565 return pmcio;
a6c40364 3566 }
282b29ee 3567 return check_type_and_open(name);
75c20bac 3568}
7925835c 3569#else
282b29ee 3570# define doopen_pm(name) check_type_and_open(name)
7925835c 3571#endif /* !PERL_DISABLE_PMC */
b295d113 3572
511712dc 3573/* require doesn't search for absolute names, or when the name is
f6bab5f6 3574 explicitly relative the current directory */
511712dc
TC
3575PERL_STATIC_INLINE bool
3576S_path_is_searchable(const char *name)
3577{
3578 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3579
3580 if (PERL_FILE_IS_ABSOLUTE(name)
3581#ifdef WIN32
3582 || (*name == '.' && ((name[1] == '/' ||
3583 (name[1] == '.' && name[2] == '/'))
3584 || (name[1] == '\\' ||
3585 ( name[1] == '.' && name[2] == '\\')))
3586 )
3587#else
3588 || (*name == '.' && (name[1] == '/' ||
3589 (name[1] == '.' && name[2] == '/')))
3590#endif
3591 )
3592 {
3593 return FALSE;
3594 }
3595 else
3596 return TRUE;
3597}
3598
b1c05ba5 3599
5fb41388 3600/* implement 'require 5.010001' */
b1c05ba5 3601
5fb41388
DM
3602static OP *
3603S_require_version(pTHX_ SV *sv)
a0d0e21e 3604{
5fb41388 3605 dVAR; dSP;
a0d0e21e 3606
9cdec136
DM
3607 sv = sv_2mortal(new_version(sv));
3608 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3609 upg_version(PL_patchlevel, TRUE);
3610 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3611 if ( vcmp(sv,PL_patchlevel) <= 0 )
3612 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3613 SVfARG(sv_2mortal(vnormal(sv))),
3614 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3615 );
3616 }
3617 else {
3618 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3619 I32 first = 0;
3620 AV *lav;
3621 SV * const req = SvRV(sv);
3622 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3623
3624 /* get the left hand term */
3625 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3626
3627 first = SvIV(*av_fetch(lav,0,0));
3628 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3629 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3630 || av_tindex(lav) > 1 /* FP with > 3 digits */
3631 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3632 ) {
3633 DIE(aTHX_ "Perl %"SVf" required--this is only "
3634 "%"SVf", stopped",
3635 SVfARG(sv_2mortal(vnormal(req))),
3636 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3637 );
3638 }
3639 else { /* probably 'use 5.10' or 'use 5.8' */
3640 SV *hintsv;
3641 I32 second = 0;
3642
3643 if (av_tindex(lav)>=1)
3644 second = SvIV(*av_fetch(lav,1,0));
3645
3646 second /= second >= 600 ? 100 : 10;
3647 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3648 (int)first, (int)second);
3649 upg_version(hintsv, TRUE);
3650
3651 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3652 "--this is only %"SVf", stopped",
3653 SVfARG(sv_2mortal(vnormal(req))),
3654 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3655 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3656 );
3657 }
3658 }
3659 }
d7aa5382 3660
9cdec136 3661 RETPUSHYES;
5fb41388
DM
3662}
3663
3664/* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3665 * The first form will have already been converted at compile time to
3666 * the second form */
3667
3668static OP *
3669S_require_file(pTHX_ SV *const sv)
3670{
3671 dVAR; dSP;
3672
3673 PERL_CONTEXT *cx;
3674 const char *name;
3675 STRLEN len;
3676 char * unixname;
3677 STRLEN unixlen;
3678#ifdef VMS
3679 int vms_unixname = 0;
3680 char *unixdir;
3681#endif
3682 const char *tryname = NULL;
3683 SV *namesv = NULL;
3684 const U8 gimme = GIMME_V;
3685 int filter_has_file = 0;
3686 PerlIO *tryrsfp = NULL;
3687 SV *filter_cache = NULL;
3688 SV *filter_state = NULL;
3689 SV *filter_sub = NULL;
3690 SV *hook_sv = NULL;
3691 OP *op;
3692 int saved_errno;
3693 bool path_searchable;
3694 I32 old_savestack_ix;
33fe1955
LM
3695 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3696 const char *const op_name = op_is_require ? "require" : "do";
3697
3698 assert(op_is_require || PL_op->op_type == OP_DOFILE);
5fb41388 3699
f04d2c34 3700 if (!SvOK(sv))
33fe1955 3701 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
672794ca 3702 name = SvPV_nomg_const(sv, len);
6132ea6c 3703 if (!(name && len > 0 && *name))
33fe1955 3704 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
f04d2c34 3705
33fe1955
LM
3706 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3707 if (!op_is_require) {
a1b60c8d
LM
3708 CLEAR_ERRSV();
3709 RETPUSHUNDEF;
3710 }
c8028aa6 3711 DIE(aTHX_ "Can't locate %s: %s",
08f800f8
FC
3712 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3713 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
c8028aa6
TC
3714 Strerror(ENOENT));
3715 }
33fe1955 3716 TAINT_PROPER(op_name);
4492be7a 3717
511712dc 3718 path_searchable = path_is_searchable(name);
4492be7a
JM
3719
3720#ifdef VMS
3721 /* The key in the %ENV hash is in the syntax of file passed as the argument
3722 * usually this is in UNIX format, but sometimes in VMS format, which
3723 * can result in a module being pulled in more than once.
3724 * To prevent this, the key must be stored in UNIX format if the VMS
3725 * name can be translated to UNIX.
3726 */
155f4c25 3727
8de90695
FC
3728 if ((unixname =
3729 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3730 != NULL) {
4492be7a
JM
3731 unixlen = strlen(unixname);
3732 vms_unixname = 1;
3733 }
3734 else
3735#endif
3736 {
3737 /* if not VMS or VMS name can not be translated to UNIX, pass it
3738 * through.
3739 */
3740 unixname = (char *) name;
3741 unixlen = len;
3742 }
33fe1955 3743 if (op_is_require) {
4492be7a
JM
3744 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3745 unixname, unixlen, 0);
44f8325f
AL
3746 if ( svp ) {
3747 if (*svp != &PL_sv_undef)
3748 RETPUSHYES;
3749 else
087b5369
RD
3750 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3751 "Compilation failed in require", unixname);
44f8325f 3752 }
a52f2cce
NC
3753
3754 if (PL_op->op_flags & OPf_KIDS) {
3755 SVOP * const kid = (SVOP*)cUNOP->op_first;
3756
3757 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3758 /* require foo (or use foo) with a bareword.
3759 Perl_load_module fakes up the identical optree, but its
3760 arguments aren't restricted by the parser to real barewords.
3761 */
3762 const STRLEN package_len = len - 3;
3763 const char slashdot[2] = {'/', '.'};
3764#ifdef DOSISH
3765 const char backslashdot[2] = {'\\', '.'};
3766#endif
3767
3768 /* Disallow *purported* barewords that map to absolute
3769 filenames, filenames relative to the current or parent
3770 directory, or (*nix) hidden filenames. Also sanity check
3771 that the generated filename ends .pm */
3772 if (!path_searchable || len < 3 || name[0] == '.'
3773 || !memEQ(name + package_len, ".pm", 3))
3774 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%"SVf"\"", sv);
3775 if (memchr(name, 0, package_len)) {
3776 /* diag_listed_as: Bareword in require contains "%s" */
3777 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3778 }
3779 if (ninstr(name, name + package_len, slashdot,
3780 slashdot + sizeof(slashdot))) {
3781 /* diag_listed_as: Bareword in require contains "%s" */
3782 DIE(aTHX_ "Bareword in require contains \"/.\"");
3783 }
3784#ifdef DOSISH
3785 if (ninstr(name, name + package_len, backslashdot,
3786 backslashdot + sizeof(backslashdot))) {
3787 /* diag_listed_as: Bareword in require contains "%s" */
3788 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3789 }
3790#endif
3791 }
3792 }
4d8b06f1 3793 }
a0d0e21e 3794
3f6bd23a 3795 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
32aeab29 3796
a0d0e21e
LW
3797 /* prepare to compile file */
3798
511712dc 3799 if (!path_searchable) {
282b29ee 3800 /* At this point, name is SvPVX(sv) */
46fc3d4c 3801 tryname = name;
282b29ee 3802 tryrsfp = doopen_pm(sv);
bf4acbe4 3803 }
511712dc 3804 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
44f8325f 3805 AV * const ar = GvAVn(PL_incgv);
c70927a6 3806 SSize_t i;
748a9306 3807#ifdef VMS
4492be7a 3808 if (vms_unixname)
46fc3d4c 3809#endif
3810 {
9ffd39ab 3811 SV *nsv = sv;
d0328fd7 3812 namesv = newSV_type(SVt_PV);
46fc3d4c 3813 for (i = 0; i <= AvFILL(ar); i++) {
df528165 3814 SV * const dirsv = *av_fetch(ar, i, TRUE);
bbed91b5 3815
6567ce24 3816 SvGETMAGIC(dirsv);
bbed91b5
KF
3817 if (SvROK(dirsv)) {
3818 int count;
a3b58a99 3819 SV **svp;
bbed91b5
KF
3820 SV *loader = dirsv;
3821
e14e2dc8 3822 if (SvTYPE(SvRV(loader)) == SVt_PVAV
6567ce24 3823 && !SvOBJECT(SvRV(loader)))
e14e2dc8 3824 {
502c6561 3825 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
6567ce24 3826 SvGETMAGIC(loader);
bbed91b5
KF
3827 }
3828
b900a521 3829 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
44f0be63 3830 PTR2UV(SvRV(dirsv)), name);
349d4f2f 3831 tryname = SvPVX_const(namesv);
c445ea15 3832 tryrsfp = NULL;
bbed91b5 3833
9ffd39ab
FC
3834 if (SvPADTMP(nsv)) {
3835 nsv = sv_newmortal();
3836 SvSetSV_nosteal(nsv,sv);
3837 }
901ee108
FC
3838
3839 ENTER_with_name("call_INC");
3840 SAVETMPS;
bbed91b5
KF
3841 EXTEND(SP, 2);
3842
3843 PUSHMARK(SP);
3844 PUSHs(dirsv);
9ffd39ab 3845 PUSHs(nsv);
bbed91b5 3846 PUTBACK;
6567ce24
FC
3847 if (SvGMAGICAL(loader)) {
3848 SV *l = sv_newmortal();
3849 sv_setsv_nomg(l, loader);
3850 loader = l;
3851 }
e982885c
NC
3852 if (sv_isobject(loader))
3853 count = call_method("INC", G_ARRAY);
3854 else
3855 count = call_sv(loader, G_ARRAY);
bbed91b5
KF
3856 SPAGAIN;
3857
3858 if (count > 0) {
3859 int i = 0;
3860 SV *arg;
3861
3862 SP -= count - 1;
3863 arg = SP[i++];
3864
34113e50
NC
3865 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3866 && !isGV_with_GP(SvRV(arg))) {
3867 filter_cache = SvRV(arg);
34113e50
NC
3868
3869 if (i < count) {
3870 arg = SP[i++];
3871 }
3872 }
3873
6e592b3a 3874 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
bbed91b5
KF
3875 arg = SvRV(arg);
3876 }
3877
6e592b3a 3878 if (isGV_with_GP(arg)) {
159b6efe 3879 IO * const io = GvIO((const GV *)arg);
bbed91b5
KF
3880
3881 ++filter_has_file;
3882
3883 if (io) {
3884 tryrsfp = IoIFP(io);
0f7de14d
NC
3885 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3886 PerlIO_close(IoOFP(io));
bbed91b5 3887 }
0f7de14d
NC
3888 IoIFP(io) = NULL;
3889 IoOFP(io) = NULL;
bbed91b5
KF
3890 }
3891
3892 if (i < count) {
3893 arg = SP[i++];
3894 }
3895 }
3896
3897 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3898 filter_sub = arg;
74c765eb 3899 SvREFCNT_inc_simple_void_NN(filter_sub);
bbed91b5
KF
3900
3901 if (i < count) {
3902 filter_state = SP[i];
b37c2d43 3903 SvREFCNT_inc_simple_void(filter_state);
bbed91b5 3904 }
34113e50 3905 }
bbed91b5 3906
34113e50
NC
3907 if (!tryrsfp && (filter_cache || filter_sub)) {
3908 tryrsfp = PerlIO_open(BIT_BUCKET,
3909 PERL_SCRIPT_MODE);
bbed91b5 3910 }
1d06aecd 3911 SP--;
bbed91b5
KF
3912 }
3913
c39fcc09
FC
3914 /* FREETMPS may free our filter_cache */
3915 SvREFCNT_inc_simple_void(filter_cache);
3916
bbed91b5
KF
3917 PUTBACK;
3918 FREETMPS;
d343c3ef 3919 LEAVE_with_name("call_INC");
bbed91b5 3920
c39fcc09
FC
3921 /* Now re-mortalize it. */
3922 sv_2mortal(filter_cache);
3923
c5f55552
NC
3924 /* Adjust file name if the hook has set an %INC entry.
3925 This needs to happen after the FREETMPS above. */
3926 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3927 if (svp)
3928 tryname = SvPV_nolen_const(*svp);
3929
bbed91b5 3930 if (tryrsfp) {
89ccab8c 3931 hook_sv = dirsv;
bbed91b5
KF
3932 break;
3933 }
3934
3935 filter_has_file = 0;
9b7d7782 3936 filter_cache = NULL;
bbed91b5 3937 if (filter_state) {
762333d9 3938 SvREFCNT_dec_NN(filter_state);
c445ea15 3939 filter_state = NULL;
bbed91b5
KF
3940 }
3941 if (filter_sub) {
762333d9 3942 SvREFCNT_dec_NN(filter_sub);
c445ea15 3943 filter_sub = NULL;
bbed91b5
KF
3944 }
3945 }
3946 else {
511712dc 3947 if (path_searchable) {
b640a14a
NC
3948 const char *dir;
3949 STRLEN dirlen;
3950
3951 if (SvOK(dirsv)) {
6567ce24 3952 dir = SvPV_nomg_const(dirsv, dirlen);
b640a14a
NC
3953 } else {
3954 dir = "";
3955 dirlen = 0;
3956 }
3957
33fe1955 3958 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
ddc65b67 3959 continue;
e37778c2 3960#ifdef VMS
8de90695
FC
3961 if ((unixdir =
3962 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3963 == NULL)
bbed91b5
KF
3964 continue;
3965 sv_setpv(namesv, unixdir);
3966 sv_catpv(namesv, unixname);
e37778c2
NC
3967#else
3968# ifdef __SYMBIAN32__
27da23d5
JH
3969 if (PL_origfilename[0] &&
3970 PL_origfilename[1] == ':' &&
3971 !(dir[0] && dir[1] == ':'))
3972 Perl_sv_setpvf(aTHX_ namesv,
3973 "%c:%s\\%s",
3974 PL_origfilename[0],
3975 dir, name);
3976 else
3977 Perl_sv_setpvf(aTHX_ namesv,
3978 "%s\\%s",
3979 dir, name);
e37778c2 3980# else
b640a14a
NC
3981 /* The equivalent of
3982 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3983 but without the need to parse the format string, or
3984 call strlen on either pointer, and with the correct
3985 allocation up front. */
3986 {
3987 char *tmp = SvGROW(namesv, dirlen + len + 2);
3988
3989 memcpy(tmp, dir, dirlen);
3990 tmp +=dirlen;
6b0bdd7f
MH
3991
3992 /* Avoid '<dir>//<file>' */
3993 if (!dirlen || *(tmp-1) != '/') {
3994 *tmp++ = '/';
9fdd5a7a
MH
3995 } else {
3996 /* So SvCUR_set reports the correct length below */
3997 dirlen--;
6b0bdd7f
MH
3998 }
3999
b640a14a
NC
4000 /* name came from an SV, so it will have a '\0' at the
4001 end that we can copy as part of this memcpy(). */
4002 memcpy(tmp, name, len + 1);
4003
4004 SvCUR_set(namesv, dirlen + len + 1);
282b29ee 4005 SvPOK_on(namesv);
b640a14a 4006 }
27da23d5 4007# endif
bf4acbe4 4008#endif
33fe1955 4009 TAINT_PROPER(op_name);
349d4f2f 4010 tryname = SvPVX_const(namesv);
282b29ee 4011 tryrsfp = doopen_pm(namesv);
bbed91b5 4012 if (tryrsfp) {
e63be746
RGS
4013 if (tryname[0] == '.' && tryname[1] == '/') {
4014 ++tryname;
4910606a 4015 while (*++tryname == '/') {}
e63be746 4016 }
bbed91b5
KF
4017 break;
4018 }
2433d39e
BF
4019 else if (errno == EMFILE || errno == EACCES) {
4020 /* no point in trying other paths if out of handles;
4021 * on the other hand, if we couldn't open one of the
4022 * files, then going on with the search could lead to
4023 * unexpected results; see perl #113422
4024 */
4025 break;
4026 }
be4b629d 4027 }
46fc3d4c 4028 }
a0d0e21e
LW
4029 }
4030 }
4031 }
83b195e4 4032 saved_errno = errno; /* sv_2mortal can realloc things */
b2ef6d44 4033 sv_2mortal(namesv);
a0d0e21e 4034 if (!tryrsfp) {
33fe1955 4035 if (op_is_require) {
83b195e4 4036 if(saved_errno == EMFILE || saved_errno == EACCES) {
c9d5e35e 4037 /* diag_listed_as: Can't locate %s */
e2ce0950
P
4038 DIE(aTHX_ "Can't locate %s: %s: %s",
4039 name, tryname, Strerror(saved_errno));
e31de809
SP
4040 } else {
4041 if (namesv) { /* did we lookup @INC? */
44f8325f 4042 AV * const ar = GvAVn(PL_incgv);
c70927a6 4043 SSize_t i;
1e5f02b3 4044 SV *const msg = newSVpvs_flags("", SVs_TEMP);
c9d5e35e
NC
4045 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4046 for (i = 0; i <= AvFILL(ar); i++) {
4047 sv_catpvs(inc, " ");
4048 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4049 }
f7ee53b5
PJ
4050 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4051 const char *c, *e = name + len - 3;
4052 sv_catpv(msg, " (you may need to install the ");
4053 for (c = name; c < e; c++) {
4054 if (*c == '/') {
46e2868e 4055 sv_catpvs(msg, "::");
f7ee53b5
PJ
4056 }
4057 else {
4058 sv_catpvn(msg, c, 1);
4059 }
4060 }
4061 sv_catpv(msg, " module)");
4062 }
4063 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4064 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4065 }
4066 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4067 sv_catpv(msg, " (did you run h2ph?)");
4068 }
c9d5e35e
NC
4069
4070 /* diag_listed_as: Can't locate %s */
4071 DIE(aTHX_
f7ee53b5
PJ
4072 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4073 name, msg, inc);
c9d5e35e 4074 }
2683423c 4075 }
c9d5e35e 4076 DIE(aTHX_ "Can't locate %s", name);
a0d0e21e
LW
4077 }
4078
a3ff80c1 4079 CLEAR_ERRSV();
a0d0e21e
LW
4080 RETPUSHUNDEF;
4081 }
d8bfb8bd 4082 else
93189314 4083 SETERRNO(0, SS_NORMAL);
a0d0e21e
LW
4084
4085 /* Assume success here to prevent recursive requirement. */
238d24b4 4086 /* name is never assigned to again, so len is still strlen(name) */
d3a4e64e 4087 /* Check whether a hook in @INC has already filled %INC */
44f8325f 4088 if (!hook_sv) {
4492be7a 4089 (void)hv_store(GvHVn(PL_incgv),
b2ef6d44 4090 unixname, unixlen, newSVpv(tryname,0),0);
44f8325f 4091 } else {
4492be7a 4092 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
44f8325f 4093 if (!svp)
4492be7a
JM
4094 (void)hv_store(GvHVn(PL_incgv),
4095 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
d3a4e64e 4096 }
a0d0e21e 4097
adcbf118 4098 old_savestack_ix = PL_savestack_ix;
b2ef6d44
FC
4099 SAVECOPFILE_FREE(&PL_compiling);
4100 CopFILE_set(&PL_compiling, tryname);
8eaa0acf 4101 lex_start(NULL, tryrsfp, 0);
e50aee73 4102
34113e50 4103 if (filter_sub || filter_cache) {
4464f08e
NC
4104 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4105 than hanging another SV from it. In turn, filter_add() optionally
4106 takes the SV to use as the filter (or creates a new SV if passed
4107 NULL), so simply pass in whatever value filter_cache has. */
9b7d7782
FC
4108 SV * const fc = filter_cache ? newSV(0) : NULL;
4109 SV *datasv;
4110 if (fc) sv_copypv(fc, filter_cache);
4111 datasv = filter_add(S_run_user_filter, fc);
bbed91b5 4112 IoLINES(datasv) = filter_has_file;
159b6efe
NC
4113 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4114 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
bbed91b5
KF
4115 }
4116
4117 /* switch to eval mode */
ed8ff0f3 4118 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
13febba5 4119 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
a0d0e21e 4120
57843af0
GS
4121 SAVECOPLINE(&PL_compiling);
4122 CopLINE_set(&PL_compiling, 0);
a0d0e21e
LW
4123
4124 PUTBACK;
6ec9efec 4125
9aba0c93 4126 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
410be5db
DM
4127 op = DOCATCH(PL_eval_start);
4128 else
4129 op = PL_op->op_next;
bfed75c6 4130
3f6bd23a 4131 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
32aeab29 4132
6ec9efec 4133 return op;
a0d0e21e
LW
4134}
4135
5fb41388
DM
4136
4137/* also used for: pp_dofile() */
4138
4139PP(pp_require)
4140{
4141 dSP;
4142 SV *sv = POPs;
4143 SvGETMAGIC(sv);
4144 PUTBACK;
4145 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4146 ? S_require_version(aTHX_ sv)
4147 : S_require_file(aTHX_ sv);
4148}
4149
4150
996c9baa
VP
4151/* This is a op added to hold the hints hash for
4152 pp_entereval. The hash can be modified by the code
4153 being eval'ed, so we return a copy instead. */
4154
4155PP(pp_hintseval)
4156{
996c9baa 4157 dSP;
defdfed5 4158 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
996c9baa
VP
4159 RETURN;
4160}
4161
4162
a0d0e21e
LW
4163PP(pp_entereval)
4164{
20b7effb 4165 dSP;
eb578fdb 4166 PERL_CONTEXT *cx;
0d863452 4167 SV *sv;
1c23e2bd 4168 const U8 gimme = GIMME_V;
fd06b02c 4169 const U32 was = PL_breakable_sub_gen;
83ee9e09 4170 char tbuf[TYPE_DIGITS(long) + 12];
78da7625 4171 bool saved_delete = FALSE;
83ee9e09 4172 char *tmpbuf = tbuf;
a0d0e21e 4173 STRLEN len;
a3985cdc 4174 CV* runcv;
0abcdfa4 4175 U32 seq, lex_flags = 0;
c445ea15 4176 HV *saved_hh = NULL;
60d63348 4177 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
adcbf118 4178 I32 old_savestack_ix;
e389bba9 4179
0d863452 4180 if (PL_op->op_private & OPpEVAL_HAS_HH) {
85fbaab2 4181 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
0d863452 4182 }
bc344123
FC
4183 else if (PL_hints & HINT_LOCALIZE_HH || (
4184 PL_op->op_private & OPpEVAL_COPHH
4185 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4186 )) {
7d789282
FC
4187 saved_hh = cop_hints_2hv(PL_curcop, 0);
4188 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4189 }
0d863452 4190 sv = POPs;
895b760f
DM
4191 if (!SvPOK(sv)) {
4192 /* make sure we've got a plain PV (no overload etc) before testing
4193 * for taint. Making a copy here is probably overkill, but better
4194 * safe than sorry */
0479a84a
NC
4195 STRLEN len;
4196 const char * const p = SvPV_const(sv, len);
4197
4198 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
0abcdfa4 4199 lex_flags |= LEX_START_COPIED;
7d789282 4200
60d63348 4201 if (bytes && SvUTF8(sv))
7d789282
FC
4202 SvPVbyte_force(sv, len);
4203 }
60d63348 4204 else if (bytes && SvUTF8(sv)) {
e1fa07e3 4205 /* Don't modify someone else's scalar */
7d789282
FC
4206 STRLEN len;
4207 sv = newSVsv(sv);
5cefc8c1 4208 (void)sv_2mortal(sv);
7d789282 4209 SvPVbyte_force(sv,len);
0abcdfa4 4210 lex_flags |= LEX_START_COPIED;
895b760f 4211 }
a0d0e21e 4212
af2d3def 4213 TAINT_IF(SvTAINTED(sv));
748a9306 4214 TAINT_PROPER("eval");
a0d0e21e 4215
adcbf118
DM
4216 old_savestack_ix = PL_savestack_ix;
4217
0abcdfa4 4218 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
60d63348
FC
4219 ? LEX_IGNORE_UTF8_HINTS
4220 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
0abcdfa4 4221 )
60d63348 4222 );
ac27b0f5 4223
a0d0e21e
LW
4224 /* switch to eval mode */
4225
83ee9e09 4226 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
8b38226b
AL
4227 SV * const temp_sv = sv_newmortal();
4228 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
83ee9e09
GS
4229 (unsigned long)++PL_evalseq,
4230 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
8b38226b
AL
4231 tmpbuf = SvPVX(temp_sv);
4232 len = SvCUR(temp_sv);
83ee9e09
GS
4233 }
4234 else
d9fad198 4235 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
f4dd75d9 4236 SAVECOPFILE_FREE(&PL_compiling);
57843af0 4237 CopFILE_set(&PL_compiling, tmpbuf+2);
f4dd75d9 4238 SAVECOPLINE(&PL_compiling);
57843af0 4239 CopLINE_set(&PL_compiling, 1);
d819b83a
DM
4240 /* special case: an eval '' executed within the DB package gets lexically
4241 * placed in the first non-DB CV rather than the current CV - this
4242 * allows the debugger to execute code, find lexicals etc, in the
4243 * scope of the code being debugged. Passing &seq gets find_runcv
4244 * to do the dirty work for us */
4245 runcv = find_runcv(&seq);
a0d0e21e 4246
ed8ff0f3 4247 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
13febba5 4248 cx_pusheval(cx, PL_op->op_next, NULL);
a0d0e21e
LW
4249
4250 /* prepare to compile string */
4251
c7a622b3 4252 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
bdc0bf6f 4253 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
78da7625 4254 else {
c8cb8d55
FC
4255 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4256 deleting the eval's FILEGV from the stash before gv_check() runs
4257 (i.e. before run-time proper). To work around the coredump that
4258 ensues, we always turn GvMULTI_on for any globals that were
4259 introduced within evals. See force_ident(). GSAR 96-10-12 */
78da7625
FC
4260 char *const safestr = savepvn(tmpbuf, len);
4261 SAVEDELETE(PL_defstash, safestr, len);
4262 saved_delete = TRUE;
4263 }
4264
a0d0e21e 4265 PUTBACK;
f9bddea7 4266
9aba0c93 4267 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
f9bddea7 4268 if (was != PL_breakable_sub_gen /* Some subs defined here. */
c7a622b3 4269 ? PERLDB_LINE_OR_SAVESRC
f9bddea7
NC
4270 : PERLDB_SAVESRC_NOSUBS) {
4271 /* Retain the filegv we created. */
78da7625 4272 } else if (!saved_delete) {
f9bddea7
NC
4273 char *const safestr = savepvn(tmpbuf, len);
4274 SAVEDELETE(PL_defstash, safestr, len);
4275 }
4276 return DOCATCH(PL_eval_start);
4277 } else {
486ec47a 4278 /* We have already left the scope set up earlier thanks to the LEAVE
9aba0c93 4279 in doeval_compile(). */
eb044b10 4280 if (was != PL_breakable_sub_gen /* Some subs defined here. */
c7a622b3 4281 ? PERLDB_LINE_OR_SAVESRC
eb044b10 4282 : PERLDB_SAVESRC_INVALID) {
f9bddea7 4283 /* Retain the filegv we created. */
7857f360 4284 } else if (!saved_delete) {
f9bddea7
NC
4285 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4286 }
4287 return PL_op->op_next;
4288 }
a0d0e21e
LW
4289}
4290
c349b9a0
DM
4291
4292/* also tail-called by pp_return */
4293
a0d0e21e
LW
4294PP(pp_leaveeval)
4295{
f5ddd604 4296 SV **oldsp;
1c23e2bd 4297 U8 gimme;
eb578fdb 4298 PERL_CONTEXT *cx;
a0d0e21e 4299 OP *retop;
06a7bc17 4300 int failed;
676a678a 4301 CV *evalcv;
06a7bc17 4302 bool keep;
a0d0e21e 4303
011c3814 4304 PERL_ASYNC_CHECK();
61d3b95a 4305
4ebe6e95 4306 cx = CX_CUR();
61d3b95a 4307 assert(CxTYPE(cx) == CXt_EVAL);
2aabfe8a 4308
f5ddd604 4309 oldsp = PL_stack_base + cx->blk_oldsp;
61d3b95a
DM
4310 gimme = cx->blk_gimme;
4311
2aabfe8a 4312 /* did require return a false value? */
06a7bc17
DM
4313 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4314 && !(gimme == G_SCALAR
2aabfe8a 4315 ? SvTRUE(*PL_stack_sp)
06a7bc17 4316 : PL_stack_sp > oldsp);
2aabfe8a 4317
cc040a9b 4318 if (gimme == G_VOID)
f5ddd604 4319 PL_stack_sp = oldsp;
2aabfe8a 4320 else
f5ddd604 4321 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
2aabfe8a 4322
13febba5 4323 /* the cx_popeval does a leavescope, which frees the optree associated
4df352a8
DM
4324 * with eval, which if it frees the nextstate associated with
4325 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4326 * regex when running under 'use re Debug' because it needs PL_curcop
4327 * to get the current hints. So restore it early.
4328 */
4329 PL_curcop = cx->blk_oldcop;
2aabfe8a 4330
06a7bc17
DM
4331 /* grab this value before cx_popeval restores the old PL_in_eval */
4332 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
f39bc417 4333 retop = cx->blk_eval.retop;
676a678a 4334 evalcv = cx->blk_eval.cv;
4fdae800 4335#ifdef DEBUGGING
676a678a 4336 assert(CvDEPTH(evalcv) == 1);
4fdae800 4337#endif
676a678a 4338 CvDEPTH(evalcv) = 0;
4fdae800 4339
06a7bc17
DM
4340 /* pop the CXt_EVAL, and if a require failed, croak */
4341 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
a0d0e21e 4342
d308a779
DM
4343 if (!keep)
4344 CLEAR_ERRSV();
4345
2aabfe8a 4346 return retop;
a0d0e21e
LW
4347}
4348
edb2152a
NC
4349/* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4350 close to the related Perl_create_eval_scope. */
4351void
4352Perl_delete_eval_scope(pTHX)
a0d0e21e 4353{
eb578fdb 4354 PERL_CONTEXT *cx;
edb2152a 4355
4ebe6e95 4356 cx = CX_CUR();
2f450c1b 4357 CX_LEAVE_SCOPE(cx);
13febba5 4358 cx_popeval(cx);
ed8ff0f3 4359 cx_popblock(cx);
5da525e9 4360 CX_POP(cx);
edb2152a 4361}
a0d0e21e 4362
edb2152a
NC
4363/* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4364 also needed by Perl_fold_constants. */
274ed8ae
DM
4365void
4366Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
edb2152a
NC
4367{
4368 PERL_CONTEXT *cx;
1c23e2bd 4369 const U8 gimme = GIMME_V;
edb2152a 4370
ed8ff0f3 4371 cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
490576d1 4372 PL_stack_sp, PL_savestack_ix);
13febba5 4373 cx_pusheval(cx, retop, NULL);
a0d0e21e 4374
faef0170 4375 PL_in_eval = EVAL_INEVAL;
edb2152a
NC
4376 if (flags & G_KEEPERR)
4377 PL_in_eval |= EVAL_KEEPERR;
ab69dbc2
RGS
4378 else
4379 CLEAR_ERRSV();
edb2152a
NC
4380 if (flags & G_FAKINGEVAL) {
4381 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4382 }
edb2152a
NC
4383}
4384
4385PP(pp_entertry)
4386{
274ed8ae 4387 create_eval_scope(cLOGOP->op_other->op_next, 0);
533c011a 4388 return DOCATCH(PL_op->op_next);
a0d0e21e
LW
4389}
4390
c349b9a0
DM
4391
4392/* also tail-called by pp_return */
4393
a0d0e21e
LW
4394PP(pp_leavetry)
4395{
f5ddd604 4396 SV **oldsp;
1c23e2bd 4397 U8 gimme;
eb578fdb 4398 PERL_CONTEXT *cx;
334ea179 4399 OP *retop;
a0d0e21e 4400
011c3814 4401 PERL_ASYNC_CHECK();
61d3b95a 4402
4ebe6e95 4403 cx = CX_CUR();
61d3b95a 4404 assert(CxTYPE(cx) == CXt_EVAL);
f5ddd604 4405 oldsp = PL_stack_base + cx->blk_oldsp;
61d3b95a
DM
4406 gimme = cx->blk_gimme;
4407
cc040a9b 4408 if (gimme == G_VOID)
f5ddd604 4409 PL_stack_sp = oldsp;
0663a8f8 4410 else
f5ddd604 4411 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
2f450c1b 4412 CX_LEAVE_SCOPE(cx);
13febba5 4413 cx_popeval(cx);
ed8ff0f3 4414 cx_popblock(cx);
61d3b95a 4415 retop = cx->blk_eval.retop;
5da525e9 4416 CX_POP(cx);
67f63db7 4417
ab69dbc2 4418 CLEAR_ERRSV();
0663a8f8 4419 return retop;
a0d0e21e
LW
4420}
4421
0d863452
RH
4422PP(pp_entergiven)
4423{
20b7effb 4424 dSP;
eb578fdb 4425 PERL_CONTEXT *cx;
1c23e2bd 4426 const U8 gimme = GIMME_V;
b95eccd3
DM
4427 SV *origsv = DEFSV;
4428 SV *newsv = POPs;
0d863452 4429
5d051ee0 4430 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
b95eccd3 4431 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
0d863452 4432
ed8ff0f3 4433 cx = cx_pushblock(CXt_GIVEN, gimme, SP, PL_savestack_ix);
2a7b7c61 4434 cx_pushgiven(cx, origsv);
0d863452
RH
4435
4436 RETURN;
4437}
4438
4439PP(pp_leavegiven)
4440{
eb578fdb 4441 PERL_CONTEXT *cx;
1c23e2bd 4442 U8 gimme;
f5ddd604 4443 SV **oldsp;
96a5add6 4444 PERL_UNUSED_CONTEXT;
0d863452 4445
4ebe6e95 4446 cx = CX_CUR();
61d3b95a 4447 assert(CxTYPE(cx) == CXt_GIVEN);
f5ddd604 4448 oldsp = PL_stack_base + cx->blk_oldsp;
61d3b95a
DM
4449 gimme = cx->blk_gimme;
4450
0663a8f8 4451 if (gimme == G_VOID)
f5ddd604 4452 PL_stack_sp = oldsp;
0663a8f8 4453 else
f5ddd604 4454 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
2f450c1b
DM
4455
4456 CX_LEAVE_SCOPE(cx);
2a7b7c61 4457 cx_popgiven(cx);
ed8ff0f3 4458 cx_popblock(cx);
5da525e9 4459 CX_POP(cx);
0d863452 4460
0663a8f8 4461 return NORMAL;
0d863452
RH
4462}
4463
4464/* Helper routines used by pp_smartmatch */
4136a0f7 4465STATIC PMOP *
84679df5 4466S_make_matcher(pTHX_ REGEXP *re)
0d863452
RH
4467{
4468 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
7918f24d
NC
4469
4470 PERL_ARGS_ASSERT_MAKE_MATCHER;
4471
d6106309 4472 PM_SETRE(matcher, ReREFCNT_inc(re));
7918f24d 4473
0d863452 4474 SAVEFREEOP((OP *) matcher);
d343c3ef 4475 ENTER_with_name("matcher"); SAVETMPS;
0d863452
RH
4476 SAVEOP();
4477 return matcher;
4478}
4479
4136a0f7 4480STATIC bool
0d863452
RH
4481S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4482{
4483 dSP;
72e5fb63 4484 bool result;
7918f24d
NC
4485
4486 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
0d863452
RH
4487
4488 PL_op = (OP *) matcher;
4489 XPUSHs(sv);
4490 PUTBACK;
897d3989 4491 (void) Perl_pp_match(aTHX);
0d863452 4492 SPAGAIN;
72e5fb63
TC
4493 result = SvTRUEx(POPs);
4494 PUTBACK;
4495
4496 return result;
0d863452
RH
4497}
4498
4136a0f7 4499STATIC void
0d863452
RH
4500S_destroy_matcher(pTHX_ PMOP *matcher)
4501{
7918f24d 4502 PERL_ARGS_ASSERT_DESTROY_MATCHER;
0d863452 4503 PERL_UNUSED_ARG(matcher);
7918f24d 4504
0d863452 4505 FREETMPS;
d343c3ef 4506 LEAVE_with_name("matcher");
0d863452
RH
4507}
4508
4509/* Do a smart match */
4510PP(pp_smartmatch)
4511{
d7c0d282 4512 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
be88a5c3 4513 return do_smartmatch(NULL, NULL, 0);
0d863452
RH
4514}
4515
4b021f5f
RGS
4516/* This version of do_smartmatch() implements the
4517 * table of smart matches that is found in perlsyn.
0d863452 4518 */
4136a0f7 4519STATIC OP *
be88a5c3 4520S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
0d863452
RH
4521{
4522 dSP;
4523
41e726ac 4524 bool object_on_left = FALSE;
0d863452
RH
4525 SV *e = TOPs; /* e is for 'expression' */
4526 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
a566f585 4527
6f1401dc
DM
4528 /* Take care only to invoke mg_get() once for each argument.
4529 * Currently we do this by copying the SV if it's magical. */
4530 if (d) {
be88a5c3 4531 if (!copied && SvGMAGICAL(d))
6f1401dc
DM
4532 d = sv_mortalcopy(d);
4533 }
4534 else
4535 d = &PL_sv_undef;
4536
4537 assert(e);
4538 if (SvGMAGICAL(e))
4539 e = sv_mortalcopy(e);
4540
2c9d2554 4541 /* First of all, handle overload magic of the rightmost argument */
6d743019 4542 if (SvAMAGIC(e)) {
d7c0d282
DM
4543 SV * tmpsv;
4544 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4545 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4546
b900a653 4547 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
7c41e62e
RGS
4548 if (tmpsv) {
4549 SPAGAIN;
4550 (void)POPs;
4551 SETs(tmpsv);
4552 RETURN;
4553 }
d7c0d282 4554 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
7c41e62e 4555 }
62ec5f58 4556
0d863452 4557 SP -= 2; /* Pop the values */
e8fe1b7c 4558 PUTBACK;
0d863452 4559
b0138e99 4560 /* ~~ undef */
62ec5f58 4561 if (!SvOK(e)) {
d7c0d282 4562 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
62ec5f58 4563 if (SvOK(d))
33570f8b
RGS
4564 RETPUSHNO;
4565 else
62ec5f58 4566 RETPUSHYES;
33570f8b 4567 }
e67b97bd 4568
4b523e79 4569 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
d7c0d282 4570 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
62ec5f58 4571 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
d7c0d282 4572 }
4b523e79 4573 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
41e726ac 4574 object_on_left = TRUE;
62ec5f58 4575
b0138e99 4576 /* ~~ sub */
a4a197da 4577 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
0d863452 4578 I32 c;
41e726ac
RGS
4579 if (object_on_left) {
4580 goto sm_any_sub; /* Treat objects like scalars */
4581 }
4582 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
a4a197da
RGS
4583 /* Test sub truth for each key */
4584 HE *he;
4585 bool andedresults = TRUE;
4586 HV *hv = (HV*) SvRV(d);
168ff818 4587 I32 numkeys = hv_iterinit(hv);
d7c0d282 4588 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
168ff818 4589 if (numkeys == 0)
07edf497 4590 RETPUSHYES;
a4a197da 4591 while ( (he = hv_iternext(hv)) ) {
d7c0d282 4592 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
d343c3ef 4593 ENTER_with_name("smartmatch_hash_key_test");
a4a197da
RGS
4594 SAVETMPS;
4595 PUSHMARK(SP);
4596 PUSHs(hv_iterkeysv(he));
4597 PUTBACK;
4598 c = call_sv(e, G_SCALAR);
4599 SPAGAIN;
4600 if (c == 0)
4601 andedresults = FALSE;
4602 else
4603 andedresults = SvTRUEx(POPs) && andedresults;
4604 FREETMPS;
d343c3ef 4605 LEAVE_with_name("smartmatch_hash_key_test");
a4a197da
RGS
4606 }
4607 if (andedresults)
4608 RETPUSHYES;
4609 else
4610 RETPUSHNO;
4611 }
4612 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4613 /* Test sub truth for each element */
c70927a6 4614 SSize_t i;
a4a197da
RGS
4615 bool andedresults = TRUE;
4616 AV *av = (AV*) SvRV(d);
b9f2b683 4617 const I32 len = av_tindex(av);
d7c0d282 4618 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
168ff818 4619 if (len == -1)
07edf497 4620 RETPUSHYES;
a4a197da
RGS
4621 for (i = 0; i <= len; ++i) {
4622 SV * const * const svp = av_fetch(av, i, FALSE);
d7c0d282 4623 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
d343c3ef 4624 ENTER_with_name("smartmatch_array_elem_test");
a4a197da
RGS
4625 SAVETMPS;
4626 PUSHMARK(SP);
4627 if (svp)
4628 PUSHs(*svp);
4629 PUTBACK;
4630 c = call_sv(e, G_SCALAR);
4631 SPAGAIN;
4632 if (c == 0)
4633 andedresults = FALSE;
4634 else
4635 andedresults = SvTRUEx(POPs) && andedresults;
4636 FREETMPS;
d343c3ef 4637 LEAVE_with_name("smartmatch_array_elem_test");
a4a197da
RGS
4638 }
4639 if (andedresults)
4640 RETPUSHYES;
4641 else
4642 RETPUSHNO;
4643 }
4644 else {
41e726ac 4645 sm_any_sub:
d7c0d282 4646 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
d343c3ef 4647 ENTER_with_name("smartmatch_coderef");
a4a197da
RGS
4648 SAVETMPS;
4649 PUSHMARK(SP);
4650 PUSHs(d);
4651 PUTBACK;
4652 c = call_sv(e, G_SCALAR);
4653 SPAGAIN;
4654 if (c == 0)
4655 PUSHs(&PL_sv_no);
4656 else if (SvTEMP(TOPs))
4657 SvREFCNT_inc_void(TOPs);
4658 FREETMPS;
d343c3ef 4659 LEAVE_with_name("smartmatch_coderef");
a4a197da
RGS
4660 RETURN;
4661 }
0d863452 4662 }
b0138e99 4663 /* ~~ %hash */
61a621c6 4664 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
41e726ac
RGS
4665 if (object_on_left) {
4666 goto sm_any_hash; /* Treat objects like scalars */
4667 }
4668 else if (!SvOK(d)) {
d7c0d282 4669 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
61a621c6
RGS
4670 RETPUSHNO;
4671 }
4672 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
0d863452
RH
4673 /* Check that the key-sets are identical */
4674 HE *he;
61a621c6 4675 HV *other_hv = MUTABLE_HV(SvRV(d));
6bb3f245
DD
4676 bool tied;
4677 bool other_tied;
0d863452
RH
4678 U32 this_key_count = 0,
4679 other_key_count = 0;
33ed63a2 4680 HV *hv = MUTABLE_HV(SvRV(e));
d7c0d282
DM
4681
4682 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
0d863452 4683 /* Tied hashes don't know how many keys they have. */
6bb3f245
DD
4684 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4685 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4686 if (!tied ) {
4687 if(other_tied) {
4688 /* swap HV sides */
4689 HV * const temp = other_hv;
4690 other_hv = hv;
4691 hv = temp;
4692 tied = TRUE;
4693 other_tied = FALSE;
4694 }
4695 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4696 RETPUSHNO;
0d863452 4697 }
0d863452
RH
4698
4699 /* The hashes have the same number of keys, so it suffices
4700 to check that one is a subset of the other. */
33ed63a2
RGS
4701 (void) hv_iterinit(hv);
4702 while ( (he = hv_iternext(hv)) ) {
b15feb55 4703 SV *key = hv_iterkeysv(he);
d7c0d282
DM
4704
4705 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
0d863452
RH
4706 ++ this_key_count;
4707
b15feb55 4708 if(!hv_exists_ent(other_hv, key, 0)) {
33ed63a2 4709 (void) hv_iterinit(hv); /* reset iterator */
0d863452
RH
4710 RETPUSHNO;
4711 }
4712 }
4713
4714 if (other_tied) {
4715 (void) hv_iterinit(other_hv);
4716 while ( hv_iternext(other_hv) )
4717 ++other_key_count;
4718 }
4719 else
4720 other_key_count = HvUSEDKEYS(other_hv);
4721
4722 if (this_key_count != other_key_count)
4723 RETPUSHNO;
4724 else
4725 RETPUSHYES;
4726 }
61a621c6
RGS
4727 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4728 AV * const other_av = MUTABLE_AV(SvRV(d));
b9f2b683 4729 const SSize_t other_len = av_tindex(other_av) + 1;
c70927a6 4730 SSize_t i;
33ed63a2 4731 HV *hv = MUTABLE_HV(SvRV(e));
71b0fb34 4732
d7c0d282 4733 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
71b0fb34 4734 for (i = 0; i < other_len; ++i) {
c445ea15 4735 SV ** const svp = av_fetch(other_av, i, FALSE);
d7c0d282 4736 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
71b0fb34 4737 if (svp) { /* ??? When can this not happen? */
b15feb55 4738 if (hv_exists_ent(hv, *svp, 0))
71b0fb34
DK
4739 RETPUSHYES;
4740 }
0d863452 4741 }
71b0fb34 4742 RETPUSHNO;
0d863452 4743 }
a566f585 4744 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
d7c0d282 4745 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
ea0c2dbd
RGS
4746 sm_regex_hash:
4747 {
4748 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4749 HE *he;
4750 HV *hv = MUTABLE_HV(SvRV(e));
4751
4752 (void) hv_iterinit(hv);
4753 while ( (he = hv_iternext(hv)) ) {
d7c0d282 4754 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
e8fe1b7c 4755 PUTBACK;
ea0c2dbd 4756 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
e8fe1b7c 4757 SPAGAIN;
ea0c2dbd
RGS
4758 (void) hv_iterinit(hv);
4759 destroy_matcher(matcher);
4760 RETPUSHYES;
4761 }
e8fe1b7c 4762 SPAGAIN;
0d863452 4763 }
ea0c2dbd
RGS
4764 destroy_matcher(matcher);
4765 RETPUSHNO;
0d863452 4766 }
0d863452
RH
4767 }
4768 else {
41e726ac 4769 sm_any_hash:
d7c0d282 4770 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
61a621c6 4771 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
0d863452
RH
4772 RETPUSHYES;
4773 else
4774 RETPUSHNO;
4775 }
4776 }
b0138e99
RGS
4777 /* ~~ @array */
4778 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
41e726ac
RGS
4779 if (object_on_left) {
4780 goto sm_any_array; /* Treat objects like scalars */
4781 }
4782 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
b0138e99 4783 AV * const other_av = MUTABLE_AV(SvRV(e));
b9f2b683 4784 const SSize_t other_len = av_tindex(other_av) + 1;
c70927a6 4785 SSize_t i;
b0138e99 4786
d7c0d282 4787 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
b0138e99
RGS
4788 for (i = 0; i < other_len; ++i) {
4789 SV ** const svp = av_fetch(other_av, i, FALSE);
d7c0d282
DM
4790
4791 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
b0138e99 4792 if (svp) { /* ??? When can this not happen? */
b15feb55 4793 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
b0138e99
RGS
4794 RETPUSHYES;
4795 }
4796 }
4797 RETPUSHNO;
4798 }
4799 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4800 AV *other_av = MUTABLE_AV(SvRV(d));
d7c0d282 4801 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
b9f2b683 4802 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
0d863452
RH
4803 RETPUSHNO;
4804 else {
c70927a6 4805 SSize_t i;
b9f2b683 4806 const SSize_t other_len = av_tindex(other_av);
0d863452 4807
a0714e2c 4808 if (NULL == seen_this) {
0d863452 4809 seen_this = newHV();
ad64d0ec 4810 (void) sv_2mortal(MUTABLE_SV(seen_this));
0d863452 4811 }
a0714e2c 4812 if (NULL == seen_other) {
6bc991bf 4813 seen_other = newHV();
ad64d0ec 4814 (void) sv_2mortal(MUTABLE_SV(seen_other));
0d863452
RH
4815 }
4816 for(i = 0; i <= other_len; ++i) {
b0138e99 4817 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
c445ea15
AL
4818 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4819
0d863452 4820 if (!this_elem || !other_elem) {
69c3dccf
RGS
4821 if ((this_elem && SvOK(*this_elem))
4822 || (other_elem && SvOK(*other_elem)))
0d863452
RH
4823 RETPUSHNO;
4824 }
365c4e3d
RGS
4825 else if (hv_exists_ent(seen_this,
4826 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4827 hv_exists_ent(seen_other,
4828 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
0d863452
RH
4829 {
4830 if (*this_elem != *other_elem)
4831 RETPUSHNO;
4832 }
4833 else {
04fe65b0
RGS
4834 (void)hv_store_ent(seen_this,
4835 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4836 &PL_sv_undef, 0);
4837 (void)hv_store_ent(seen_other,
4838 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4839 &PL_sv_undef, 0);
0d863452 4840 PUSHs(*other_elem);
a566f585 4841 PUSHs(*this_elem);
0d863452
RH
4842
4843 PUTBACK;
d7c0d282 4844 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
be88a5c3 4845 (void) do_smartmatch(seen_this, seen_other, 0);
0d863452 4846 SPAGAIN;
d7c0d282 4847 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
0d863452
RH
4848
4849 if (!SvTRUEx(POPs))
4850 RETPUSHNO;
4851 }
4852 }
4853 RETPUSHYES;
4854 }
4855 }
a566f585 4856 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
d7c0d282 4857 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
ea0c2dbd
RGS
4858 sm_regex_array:
4859 {
4860 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
b9f2b683 4861 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
c70927a6 4862 SSize_t i;
0d863452 4863
ea0c2dbd
RGS
4864 for(i = 0; i <= this_len; ++i) {
4865 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
d7c0d282 4866 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
e8fe1b7c 4867 PUTBACK;
ea0c2dbd 4868 if (svp && matcher_matches_sv(matcher, *svp)) {
e8fe1b7c 4869 SPAGAIN;
ea0c2dbd
RGS
4870 destroy_matcher(matcher);
4871 RETPUSHYES;
4872 }
e8fe1b7c 4873 SPAGAIN;
0d863452 4874 }
ea0c2dbd
RGS
4875 destroy_matcher(matcher);
4876 RETPUSHNO;
0d863452 4877 }
0d863452 4878 }
015eb7b9
RGS
4879 else if (!SvOK(d)) {
4880 /* undef ~~ array */
b9f2b683 4881 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
c70927a6 4882 SSize_t i;
0d863452 4883
d7c0d282 4884 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
015eb7b9 4885 for (i = 0; i <= this_len; ++i) {
b0138e99 4886 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
d7c0d282 4887 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
015eb7b9 4888 if (!svp || !SvOK(*svp))
0d863452
RH
4889 RETPUSHYES;
4890 }
4891 RETPUSHNO;
4892 }
015eb7b9 4893 else {
41e726ac
RGS
4894 sm_any_array:
4895 {
c70927a6 4896 SSize_t i;
b9f2b683 4897 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
0d863452 4898
d7c0d282 4899 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
41e726ac
RGS
4900 for (i = 0; i <= this_len; ++i) {
4901 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4902 if (!svp)
4903 continue;
015eb7b9 4904
41e726ac
RGS
4905 PUSHs(d);
4906 PUSHs(*svp);
4907 PUTBACK;
4908 /* infinite recursion isn't supposed to happen here */
d7c0d282 4909 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
be88a5c3 4910 (void) do_smartmatch(NULL, NULL, 1);
41e726ac 4911 SPAGAIN;
d7c0d282 4912 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
41e726ac
RGS
4913 if (SvTRUEx(POPs))
4914 RETPUSHYES;
4915 }
4916 RETPUSHNO;
0d863452 4917 }
0d863452
RH
4918 }
4919 }
b0138e99 4920 /* ~~ qr// */
a566f585 4921 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
ea0c2dbd
RGS
4922 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4923 SV *t = d; d = e; e = t;
d7c0d282 4924 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
ea0c2dbd
RGS
4925 goto sm_regex_hash;
4926 }
4927 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4928 SV *t = d; d = e; e = t;
d7c0d282 4929 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
ea0c2dbd
RGS
4930 goto sm_regex_array;
4931 }
4932 else {
4933 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
e8fe1b7c 4934 bool result;
0d863452 4935
d7c0d282 4936 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
ea0c2dbd 4937 PUTBACK;
e8fe1b7c
DM
4938 result = matcher_matches_sv(matcher, d);
4939 SPAGAIN;
4940 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
ea0c2dbd
RGS
4941 destroy_matcher(matcher);
4942 RETURN;
4943 }
0d863452 4944 }
b0138e99 4945 /* ~~ scalar */
2c9d2554
RGS
4946 /* See if there is overload magic on left */
4947 else if (object_on_left && SvAMAGIC(d)) {
4948 SV *tmpsv;
d7c0d282
DM
4949 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4950 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
2c9d2554
RGS
4951 PUSHs(d); PUSHs(e);
4952 PUTBACK;
4953 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4954 if (tmpsv) {
4955 SPAGAIN;
4956 (void)POPs;
4957 SETs(tmpsv);
4958 RETURN;
4959 }
4960 SP -= 2;
d7c0d282 4961 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
2c9d2554
RGS
4962 goto sm_any_scalar;
4963 }
fb51372e
RGS
4964 else if (!SvOK(d)) {
4965 /* undef ~~ scalar ; we already know that the scalar is SvOK */
d7c0d282 4966 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
fb51372e
RGS
4967 RETPUSHNO;
4968 }
2c9d2554
RGS
4969 else
4970 sm_any_scalar:
4971 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
d7c0d282
DM
4972 DEBUG_M(if (SvNIOK(e))
4973 Perl_deb(aTHX_ " applying rule Any-Num\n");
4974 else
4975 Perl_deb(aTHX_ " applying rule Num-numish\n");
4976 );
33ed63a2 4977 /* numeric comparison */
0d863452
RH
4978 PUSHs(d); PUSHs(e);
4979 PUTBACK;
a98fe34d 4980 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
897d3989 4981 (void) Perl_pp_i_eq(aTHX);
0d863452 4982 else
897d3989 4983 (void) Perl_pp_eq(aTHX);
0d863452
RH
4984 SPAGAIN;
4985 if (SvTRUEx(POPs))
4986 RETPUSHYES;
4987 else
4988 RETPUSHNO;
4989 }
4990
4991 /* As a last resort, use string comparison */
d7c0d282 4992 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
0d863452
RH
4993 PUSHs(d); PUSHs(e);
4994 PUTBACK;
897d3989 4995 return Perl_pp_seq(aTHX);
0d863452
RH
4996}
4997
4998PP(pp_enterwhen)
4999{
20b7effb 5000 dSP;
eb578fdb 5001 PERL_CONTEXT *cx;
1c23e2bd 5002 const U8 gimme = GIMME_V;
0d863452
RH
5003
5004 /* This is essentially an optimization: if the match
5005 fails, we don't want to push a context and then
5006 pop it again right away, so we skip straight
5007 to the op that follows the leavewhen.
25b991bf 5008 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
0d863452 5009 */
d4ce7588 5010 if (!(PL_op->op_flags & OPf_SPECIAL) && !SvTRUEx(POPs))
25b991bf 5011 RETURNOP(cLOGOP->op_other->op_next);
0d863452 5012
ed8ff0f3 5013 cx = cx_pushblock(CXt_WHEN, gimme, SP, PL_savestack_ix);
2a7b7c61 5014 cx_pushwhen(cx);
0d863452
RH
5015
5016 RETURN;
5017}
5018
5019PP(pp_leavewhen)
5020{
c08f093b 5021 I32 cxix;
eb578fdb 5022 PERL_CONTEXT *cx;
1c23e2bd 5023 U8 gimme;
f5ddd604 5024 SV **oldsp;
8aef2117 5025
4ebe6e95 5026 cx = CX_CUR();
8aef2117
DM
5027 assert(CxTYPE(cx) == CXt_WHEN);
5028 gimme = cx->blk_gimme;
0d863452 5029
97f2561e 5030 cxix = dopoptogivenfor(cxstack_ix);
c08f093b 5031 if (cxix < 0)
fc7debfb
FC
5032 /* diag_listed_as: Can't "when" outside a topicalizer */
5033 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5034 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
c08f093b 5035
f5ddd604 5036 oldsp = PL_stack_base + cx->blk_oldsp;
0663a8f8 5037 if (gimme == G_VOID)
f5ddd604 5038 PL_stack_sp = oldsp;
0663a8f8 5039 else
f5ddd604 5040 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
75bc488d 5041
8aef2117
DM
5042 /* pop the WHEN, BLOCK and anything else before the GIVEN/FOR */
5043 assert(cxix < cxstack_ix);
5044 dounwind(cxix);
c08f093b
VP
5045
5046 cx = &cxstack[cxix];
5047
5048 if (CxFOREACH(cx)) {
590529d8
DM
5049 /* emulate pp_next. Note that any stack(s) cleanup will be
5050 * done by the pp_unstack which op_nextop should point to */
7e637ba4 5051 cx = CX_CUR();
ed8ff0f3 5052 cx_topblock(cx);
c08f093b 5053 PL_curcop = cx->blk_oldcop;
c08f093b
VP
5054 return cx->blk_loop.my_op->op_nextop;
5055 }
47c9d59f
NC
5056 else {
5057 PERL_ASYNC_CHECK();
8aef2117 5058 assert(cx->blk_givwhen.leave_op->op_type == OP_LEAVEGIVEN);
0663a8f8 5059 return cx->blk_givwhen.leave_op;
47c9d59f 5060 }
0d863452
RH
5061}
5062
5063PP(pp_continue)
5064{
0d863452 5065 I32 cxix;
eb578fdb 5066 PERL_CONTEXT *cx;
5da525e9 5067 OP *nextop;
0d863452
RH
5068
5069 cxix = dopoptowhen(cxstack_ix);
5070 if (cxix < 0)
5071 DIE(aTHX_ "Can't \"continue\" outside a when block");
c08f093b 5072
0d863452
RH
5073 if (cxix < cxstack_ix)
5074 dounwind(cxix);
5075
4ebe6e95 5076 cx = CX_CUR();
c08f093b 5077 assert(CxTYPE(cx) == CXt_WHEN);
4df352a8 5078 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
2f450c1b 5079 CX_LEAVE_SCOPE(cx);
2a7b7c61 5080 cx_popwhen(cx);
ed8ff0f3 5081 cx_popblock(cx);
5da525e9
DM
5082 nextop = cx->blk_givwhen.leave_op->op_next;
5083 CX_POP(cx);
c08f093b 5084
5da525e9 5085 return nextop;
0d863452
RH
5086}
5087
5088PP(pp_break)
5089{
0d863452 5090 I32 cxix;
eb578fdb 5091 PERL_CONTEXT *cx;
25b991bf 5092
97f2561e 5093 cxix = dopoptogivenfor(cxstack_ix);
c08f093b
VP
5094 if (cxix < 0)
5095 DIE(aTHX_ "Can't \"break\" outside a given block");
5096
5097 cx = &cxstack[cxix];
5098 if (CxFOREACH(cx))
0d863452
RH
5099 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5100
5101 if (cxix < cxstack_ix)
5102 dounwind(cxix);
0d863452 5103
0787ea8a 5104 /* Restore the sp at the time we entered the given block */
7e637ba4 5105 cx = CX_CUR();
7e09e582 5106 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
0787ea8a 5107
c08f093b 5108 return cx->blk_givwhen.leave_op;
0d863452
RH
5109}
5110
74e0ddf7 5111static MAGIC *
cea2e8a9 5112S_doparseform(pTHX_ SV *sv)
a0d0e21e
LW
5113{
5114 STRLEN len;
eb578fdb
KW
5115 char *s = SvPV(sv, len);
5116 char *send;
5117 char *base = NULL; /* start of current field */
5118 I32 skipspaces = 0; /* number of contiguous spaces seen */
086b26f3
DM
5119 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5120 bool repeat = FALSE; /* ~~ seen on this line */
5121 bool postspace = FALSE; /* a text field may need right padding */
dea28490 5122 U32 *fops;
eb578fdb 5123 U32 *fpc;
086b26f3 5124 U32 *linepc = NULL; /* position of last FF_LINEMARK */
eb578fdb 5125 I32 arg;
086b26f3
DM
5126 bool ischop; /* it's a ^ rather than a @ */
5127 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
a1b95068 5128 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3808a683
DM
5129 MAGIC *mg = NULL;
5130 SV *sv_copy;
a0d0e21e 5131
7918f24d
NC
5132 PERL_ARGS_ASSERT_DOPARSEFORM;
5133
55497cff 5134 if (len == 0)
cea2e8a9 5135 Perl_croak(aTHX_ "Null picture in formline");
ac27b0f5 5136
3808a683
DM
5137 if (SvTYPE(sv) >= SVt_PVMG) {
5138 /* This might, of course, still return NULL. */
5139 mg = mg_find(sv, PERL_MAGIC_fm);
5140 } else {
5141 sv_upgrade(sv, SVt_PVMG);
5142 }
5143
5144 if (mg) {
5145 /* still the same as previously-compiled string? */
5146 SV *old = mg->mg_obj;
5147 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5148 && len == SvCUR(old)
5149 && strnEQ(SvPVX(old), SvPVX(sv), len)
b57b1734
DM
5150 ) {
5151 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
3808a683 5152 return mg;
b57b1734 5153 }
3808a683 5154
b57b1734 5155 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
3808a683
DM
5156 Safefree(mg->mg_ptr);
5157 mg->mg_ptr = NULL;
5158 SvREFCNT_dec(old);
5159 mg->mg_obj = NULL;
5160 }
b57b1734
DM
5161 else {
5162 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
3808a683 5163 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
b57b1734 5164 }
3808a683
DM
5165
5166 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5167 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5168 send = s + len;
5169
5170
815f25c6
DM
5171 /* estimate the buffer size needed */
5172 for (base = s; s <= send; s++) {
a1b95068 5173 if (*s == '\n' || *s == '@' || *s == '^')
815f25c6
DM
5174 maxops += 10;
5175 }
5176 s = base;
c445ea15 5177 base = NULL;
815f25c6 5178
a02a5408 5179 Newx(fops, maxops, U32);
a0d0e21e
LW
5180 fpc = fops;
5181
5182 if (s < send) {
5183 linepc = fpc;
5184 *fpc++ = FF_LINEMARK;
5185 noblank = repeat = FALSE;
5186 base = s;
5187 }
5188
5189 while (s <= send) {
5190 switch (*s++) {
5191 default:
5192 skipspaces = 0;
5193 continue;
5194
5195 case '~':
5196 if (*s == '~') {
5197 repeat = TRUE;
b57b1734
DM
5198 skipspaces++;
5199 s++;
a0d0e21e
LW
5200 }
5201 noblank = TRUE;
924ba076 5202 /* FALLTHROUGH */
a0d0e21e
LW
5203 case ' ': case '\t':
5204 skipspaces++;
5205 continue;
a1b95068
WL
5206 case 0:
5207 if (s < send) {
5208 skipspaces = 0;
5209 continue;
5210 } /* else FALL THROUGH */
5211 case '\n':
a0d0e21e
LW
5212 arg = s - base;
5213 skipspaces++;
5214 arg -= skipspaces;
5215 if (arg) {
5f05dabc 5216 if (postspace)
a0d0e21e 5217 *fpc++ = FF_SPACE;
a0d0e21e 5218 *fpc++ = FF_LITERAL;
76912796 5219 *fpc++ = (U32)arg;
a0d0e21e 5220 }
5f05dabc 5221 postspace = FALSE;
a0d0e21e
LW
5222 if (s <= send)
5223 skipspaces--;
5224 if (skipspaces) {
5225 *fpc++ = FF_SKIP;
76912796 5226 *fpc++ = (U32)skipspaces;
a0d0e21e
LW
5227 }
5228 skipspaces = 0;
5229 if (s <= send)
5230 *fpc++ = FF_NEWLINE;
5231 if (noblank) {
5232 *fpc++ = FF_BLANK;
5233 if (repeat)
5234 arg = fpc - linepc + 1;
5235 else
5236 arg = 0;
76912796 5237 *fpc++ = (U32)arg;
a0d0e21e
LW
5238 }
5239 if (s < send) {
5240 linepc = fpc;
5241 *fpc++ = FF_LINEMARK;
5242 noblank = repeat = FALSE;
5243 base = s;
5244 }
5245 else
5246 s++;
5247 continue;
5248
5249 case '@':
5250 case '^':
5251 ischop = s[-1] == '^';
5252
5253 if (postspace) {
5254 *fpc++ = FF_SPACE;
5255 postspace = FALSE;
5256 }
5257 arg = (s - base) - 1;
5258 if (arg) {
5259 *fpc++ = FF_LITERAL;
76912796 5260 *fpc++ = (U32)arg;
a0d0e21e
LW
5261 }
5262
5263 base = s - 1;
5264 *fpc++ = FF_FETCH;
086b26f3 5265 if (*s == '*') { /* @* or ^* */
a0d0e21e 5266 s++;
a1b95068
WL
5267 *fpc++ = 2; /* skip the @* or ^* */
5268 if (ischop) {
5269 *fpc++ = FF_LINESNGL;
5270 *fpc++ = FF_CHOP;
5271 } else
5272 *fpc++ = FF_LINEGLOB;
a0d0e21e 5273 }
086b26f3 5274 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
a701009a 5275 arg = ischop ? FORM_NUM_BLANK : 0;
a0d0e21e
LW
5276 base = s - 1;
5277 while (*s == '#')
5278 s++;
5279 if (*s == '.') {
06b5626a 5280 const char * const f = ++s;
a0d0e21e
LW
5281 while (*s == '#')
5282 s++;
a701009a 5283 arg |= FORM_NUM_POINT + (s - f);
a0d0e21e
LW
5284 }
5285 *fpc++ = s - base; /* fieldsize for FETCH */
5286 *fpc++ = FF_DECIMAL;
76912796 5287 *fpc++ = (U32)arg;
a1b95068 5288 unchopnum |= ! ischop;
784707d5
JP
5289 }
5290 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
a701009a 5291 arg = ischop ? FORM_NUM_BLANK : 0;
784707d5
JP
5292 base = s - 1;
5293 s++; /* skip the '0' first */
5294 while (*s == '#')
5295 s++;
5296 if (*s == '.') {
06b5626a 5297 const char * const f = ++s;
784707d5
JP
5298 while (*s == '#')
5299 s++;
a701009a 5300 arg |= FORM_NUM_POINT + (s - f);
784707d5
JP
5301 }
5302 *fpc++ = s - base; /* fieldsize for FETCH */
5303 *fpc++ = FF_0DECIMAL;
76912796 5304 *fpc++ = (U32)arg;
a1b95068 5305 unchopnum |= ! ischop;
a0d0e21e 5306 }
086b26f3 5307 else { /* text field */
a0d0e21e
LW
5308 I32 prespace = 0;
5309 bool ismore = FALSE;
5310
5311 if (*s == '>') {
5312 while (*++s == '>') ;
5313 prespace = FF_SPACE;
5314 }
5315 else if (*s == '|') {
5316 while (*++s == '|') ;
5317 prespace = FF_HALFSPACE;
5318 postspace = TRUE;
5319 }
5320 else {
5321 if (*s == '<')
5322 while (*++s == '<') ;
5323 postspace = TRUE;
5324 }
5325 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5326 s += 3;
5327 ismore = TRUE;
5328 }
5329 *fpc++ = s - base; /* fieldsize for FETCH */
5330
5331 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5332
5333 if (prespace)
76912796 5334 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
a0d0e21e
LW
5335 *fpc++ = FF_ITEM;
5336 if (ismore)
5337 *fpc++ = FF_MORE;
5338 if (ischop)
5339 *fpc++ = FF_CHOP;
5340 }
5341 base = s;
5342 skipspaces = 0;
5343 continue;
5344 }
5345 }
5346 *fpc++ = FF_END;
5347
815f25c6 5348 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
a0d0e21e 5349 arg = fpc - fops;
74e0ddf7 5350
3808a683 5351 mg->mg_ptr = (char *) fops;
74e0ddf7 5352 mg->mg_len = arg * sizeof(U32);
3808a683
DM
5353 mg->mg_obj = sv_copy;
5354 mg->mg_flags |= MGf_REFCOUNTED;
a1b95068 5355
bfed75c6 5356 if (unchopnum && repeat)
75f63940 5357 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
74e0ddf7
NC
5358
5359 return mg;
a1b95068
WL
5360}
5361
5362
5363STATIC bool
5364S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5365{
5366 /* Can value be printed in fldsize chars, using %*.*f ? */
5367 NV pwr = 1;
5368 NV eps = 0.5;
5369 bool res = FALSE;
5370 int intsize = fldsize - (value < 0 ? 1 : 0);
5371
a701009a 5372 if (frcsize & FORM_NUM_POINT)
a1b95068 5373 intsize--;
a701009a 5374 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
a1b95068
WL
5375 intsize -= frcsize;
5376
5377 while (intsize--) pwr *= 10.0;
5378 while (frcsize--) eps /= 10.0;
5379
5380 if( value >= 0 ){
5381 if (value + eps >= pwr)
5382 res = TRUE;
5383 } else {
5384 if (value - eps <= -pwr)
5385 res = TRUE;
5386 }
5387 return res;
a0d0e21e 5388}
4e35701f 5389
bbed91b5 5390static I32
0bd48802 5391S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
bbed91b5 5392{
0bd48802 5393 SV * const datasv = FILTER_DATA(idx);
504618e9 5394 const int filter_has_file = IoLINES(datasv);
ad64d0ec
NC
5395 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5396 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
941a98a0 5397 int status = 0;
ec0b63d7 5398 SV *upstream;
941a98a0 5399 STRLEN got_len;
162177c1
Z
5400 char *got_p = NULL;
5401 char *prune_from = NULL;
34113e50 5402 bool read_from_cache = FALSE;
bb7a0f54 5403 STRLEN umaxlen;
d60d2019 5404 SV *err = NULL;
bb7a0f54 5405
7918f24d
NC
5406 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5407
bb7a0f54
MHM
5408 assert(maxlen >= 0);
5409 umaxlen = maxlen;
5675696b 5410
bbed91b5 5411 /* I was having segfault trouble under Linux 2.2.5 after a
f6bab5f6 5412 parse error occurred. (Had to hack around it with a test
13765c85 5413 for PL_parser->error_count == 0.) Solaris doesn't segfault --
bbed91b5
KF
5414 not sure where the trouble is yet. XXX */
5415
4464f08e
NC
5416 {
5417 SV *const cache = datasv;
937b367d
NC
5418 if (SvOK(cache)) {
5419 STRLEN cache_len;
5420 const char *cache_p = SvPV(cache, cache_len);
941a98a0
NC
5421 STRLEN take = 0;
5422
bb7a0f54 5423 if (umaxlen) {
941a98a0
NC
5424 /* Running in block mode and we have some cached data already.
5425 */
bb7a0f54 5426 if (cache_len >= umaxlen) {
941a98a0
NC
5427 /* In fact, so much data we don't even need to call
5428 filter_read. */
bb7a0f54 5429 take = umaxlen;
941a98a0
NC
5430 }
5431 } else {
10edeb5d
JH
5432 const char *const first_nl =
5433 (const char *)memchr(cache_p, '\n', cache_len);
941a98a0
NC
5434 if (first_nl) {
5435 take = first_nl + 1 - cache_p;
5436 }
5437 }
5438 if (take) {
5439 sv_catpvn(buf_sv, cache_p, take);
5440 sv_chop(cache, cache_p + take);
486ec47a 5441 /* Definitely not EOF */
937b367d
NC
5442 return 1;
5443 }
941a98a0 5444
937b367d 5445 sv_catsv(buf_sv, cache);
bb7a0f54
MHM
5446 if (umaxlen) {
5447 umaxlen -= cache_len;
941a98a0 5448 }
937b367d 5449 SvOK_off(cache);
34113e50 5450 read_from_cache = TRUE;
937b367d
NC
5451 }
5452 }
ec0b63d7 5453
34113e50
NC
5454 /* Filter API says that the filter appends to the contents of the buffer.
5455 Usually the buffer is "", so the details don't matter. But if it's not,
5456 then clearly what it contains is already filtered by this filter, so we
5457 don't want to pass it in a second time.
5458 I'm going to use a mortal in case the upstream filter croaks. */
ec0b63d7
NC
5459 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5460 ? sv_newmortal() : buf_sv;
5461 SvUPGRADE(upstream, SVt_PV);
937b367d 5462
bbed91b5 5463 if (filter_has_file) {
67e70b33 5464 status = FILTER_READ(idx+1, upstream, 0);
bbed91b5
KF
5465 }
5466
34113e50 5467 if (filter_sub && status >= 0) {
39644a26 5468 dSP;
bbed91b5
KF
5469 int count;
5470
d343c3ef 5471 ENTER_with_name("call_filter_sub");
55b5114f 5472 SAVE_DEFSV;
bbed91b5
KF
5473 SAVETMPS;
5474 EXTEND(SP, 2);
5475
414bf5ae 5476 DEFSV_set(upstream);
bbed91b5 5477 PUSHMARK(SP);
6e449a3a 5478 mPUSHi(0);
bbed91b5
KF
5479 if (filter_state) {
5480 PUSHs(filter_state);
5481 }
5482 PUTBACK;
d60d2019 5483 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
bbed91b5
KF
5484 SPAGAIN;
5485
5486 if (count > 0) {
5487 SV *out = POPs;
2e8409ad 5488 SvGETMAGIC(out);
bbed91b5 5489 if (SvOK(out)) {
941a98a0 5490 status = SvIV(out);
bbed91b5 5491 }
eed484f9
DD
5492 else {
5493 SV * const errsv = ERRSV;
5494 if (SvTRUE_NN(errsv))
5495 err = newSVsv(errsv);
d60d2019 5496 }
bbed91b5
KF
5497 }
5498
5499 PUTBACK;
5500 FREETMPS;
d343c3ef 5501 LEAVE_with_name("call_filter_sub");
bbed91b5
KF
5502 }
5503
536ac391
FC
5504 if (SvGMAGICAL(upstream)) {
5505 mg_get(upstream);
5506 if (upstream == buf_sv) mg_free(buf_sv);
5507 }
b68108d9 5508 if (SvIsCOW(upstream)) sv_force_normal(upstream);
d60d2019 5509 if(!err && SvOK(upstream)) {
536ac391 5510 got_p = SvPV_nomg(upstream, got_len);
bb7a0f54
MHM
5511 if (umaxlen) {
5512 if (got_len > umaxlen) {
5513 prune_from = got_p + umaxlen;
937b367d 5514 }
941a98a0 5515 } else {
162177c1 5516 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
941a98a0
NC
5517 if (first_nl && first_nl + 1 < got_p + got_len) {
5518 /* There's a second line here... */
5519 prune_from = first_nl + 1;
937b367d 5520 }
937b367d
NC
5521 }
5522 }
d60d2019 5523 if (!err && prune_from) {
941a98a0
NC
5524 /* Oh. Too long. Stuff some in our cache. */
5525 STRLEN cached_len = got_p + got_len - prune_from;
4464f08e 5526 SV *const cache = datasv;
941a98a0 5527
4464f08e 5528 if (SvOK(cache)) {
941a98a0
NC
5529 /* Cache should be empty. */
5530 assert(!SvCUR(cache));
5531 }
5532
5533 sv_setpvn(cache, prune_from, cached_len);
5534 /* If you ask for block mode, you may well split UTF-8 characters.
5535 "If it breaks, you get to keep both parts"
5536 (Your code is broken if you don't put them back together again
5537 before something notices.) */
5538 if (SvUTF8(upstream)) {
5539 SvUTF8_on(cache);
5540 }
00752fe1
FC
5541 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5542 else
5543 /* Cannot just use sv_setpvn, as that could free the buffer
5544 before we have a chance to assign it. */
5545 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5546 got_len - cached_len);
162177c1 5547 *prune_from = 0;
941a98a0
NC
5548 /* Can't yet be EOF */
5549 if (status == 0)
5550 status = 1;
5551 }
937b367d 5552
34113e50
NC
5553 /* If they are at EOF but buf_sv has something in it, then they may never
5554 have touched the SV upstream, so it may be undefined. If we naively
5555 concatenate it then we get a warning about use of uninitialised value.
5556 */
d60d2019 5557 if (!err && upstream != buf_sv &&
dc423e96 5558 SvOK(upstream)) {
536ac391 5559 sv_catsv_nomg(buf_sv, upstream);
937b367d 5560 }
ae2c96ed 5561 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
937b367d 5562
941a98a0 5563 if (status <= 0) {
bbed91b5 5564 IoLINES(datasv) = 0;
bbed91b5
KF
5565 if (filter_state) {
5566 SvREFCNT_dec(filter_state);
a0714e2c 5567 IoTOP_GV(datasv) = NULL;
bbed91b5
KF
5568 }
5569 if (filter_sub) {
5570 SvREFCNT_dec(filter_sub);
a0714e2c 5571 IoBOTTOM_GV(datasv) = NULL;
bbed91b5 5572 }
0bd48802 5573 filter_del(S_run_user_filter);
bbed91b5 5574 }
d60d2019
JL
5575
5576 if (err)
5577 croak_sv(err);
5578
34113e50
NC
5579 if (status == 0 && read_from_cache) {
5580 /* If we read some data from the cache (and by getting here it implies
5581 that we emptied the cache) then we aren't yet at EOF, and mustn't
5582 report that to our caller. */
5583 return 1;
5584 }
941a98a0 5585 return status;
bbed91b5 5586}
84d4ea48 5587
241d1a3b 5588/*
14d04a33 5589 * ex: set ts=8 sts=4 sw=4 et:
37442d52 5590 */