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