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