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