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
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.
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.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
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.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
38 #define RUN_PP_CATCHABLY(thispp) \
39 STMT_START { if (CATCH_GET) return docatch(thispp); } STMT_END
41 #define dopopto_cursub() \
42 (PL_curstackinfo->si_cxsubix >= 0 \
43 ? PL_curstackinfo->si_cxsubix \
44 : dopoptosub_at(cxstack, cxstack_ix))
46 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
52 const PERL_CONTEXT *cx;
55 if (PL_op->op_private & OPpOFFBYONE) {
56 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
59 cxix = dopopto_cursub();
65 switch (cx->blk_gimme) {
84 PMOP *pm = (PMOP*)cLOGOP->op_other;
89 const regexp_engine *eng;
90 bool is_bare_re= FALSE;
92 if (PL_op->op_flags & OPf_STACKED) {
102 /* prevent recompiling under /o and ithreads. */
103 #if defined(USE_ITHREADS)
104 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
111 assert (re != (REGEXP*) &PL_sv_undef);
112 eng = re ? RX_ENGINE(re) : current_re_engine();
114 new_re = (eng->op_comp
116 : &Perl_re_op_compile
117 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
119 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
121 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
123 if (pm->op_pmflags & PMf_HAS_CV)
124 ReANY(new_re)->qr_anoncv
125 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
129 /* The match's LHS's get-magic might need to access this op's regexp
130 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
131 get-magic now before we replace the regexp. Hopefully this hack can
132 be replaced with the approach described at
133 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
135 if (pm->op_type == OP_MATCH) {
137 const bool was_tainted = TAINT_get;
138 if (pm->op_flags & OPf_STACKED)
140 else if (pm->op_targ)
141 lhs = PAD_SV(pm->op_targ);
144 /* Restore the previous value of PL_tainted (which may have been
145 modified by get-magic), to avoid incorrectly setting the
146 RXf_TAINTED flag with RX_TAINT_on further down. */
147 TAINT_set(was_tainted);
148 #ifdef NO_TAINT_SUPPORT
149 PERL_UNUSED_VAR(was_tainted);
152 tmp = reg_temp_copy(NULL, new_re);
153 ReREFCNT_dec(new_re);
159 PM_SETRE(pm, new_re);
163 assert(TAINTING_get || !TAINT_get);
165 SvTAINTED_on((SV*)new_re);
169 /* handle the empty pattern */
170 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm) {
171 if (PL_curpm == PL_reg_curpm) {
172 if (PL_curpm_under && PL_curpm_under == PL_reg_curpm) {
173 Perl_croak(aTHX_ "Infinite recursion via empty pattern");
178 #if !defined(USE_ITHREADS)
179 /* can't change the optree at runtime either */
180 /* PMf_KEEP is handled differently under threads to avoid these problems */
181 if (pm->op_pmflags & PMf_KEEP) {
182 cLOGOP->op_first->op_next = PL_op->op_next;
194 PERL_CONTEXT *cx = CX_CUR();
195 PMOP * const pm = (PMOP*) cLOGOP->op_other;
196 SV * const dstr = cx->sb_dstr;
199 char *orig = cx->sb_orig;
200 REGEXP * const rx = cx->sb_rx;
202 REGEXP *old = PM_GETRE(pm);
209 PM_SETRE(pm,ReREFCNT_inc(rx));
212 rxres_restore(&cx->sb_rxres, rx);
214 if (cx->sb_iters++) {
215 const SSize_t saviters = cx->sb_iters;
216 if (cx->sb_iters > cx->sb_maxiters)
217 DIE(aTHX_ "Substitution loop");
219 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
221 /* See "how taint works" above pp_subst() */
222 sv_catsv_nomg(dstr, POPs);
223 if (UNLIKELY(TAINT_get))
224 cx->sb_rxtainted |= SUBST_TAINT_REPL;
225 if (CxONCE(cx) || s < orig ||
226 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
227 (s == m), cx->sb_targ, NULL,
228 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
230 SV *targ = cx->sb_targ;
232 assert(cx->sb_strend >= s);
233 if(cx->sb_strend > s) {
234 if (DO_UTF8(dstr) && !SvUTF8(targ))
235 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
237 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
239 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
240 cx->sb_rxtainted |= SUBST_TAINT_PAT;
242 if (pm->op_pmflags & PMf_NONDESTRUCT) {
244 /* From here on down we're using the copy, and leaving the
245 original untouched. */
249 SV_CHECK_THINKFIRST_COW_DROP(targ);
250 if (isGV(targ)) Perl_croak_no_modify();
252 SvPV_set(targ, SvPVX(dstr));
253 SvCUR_set(targ, SvCUR(dstr));
254 SvLEN_set(targ, SvLEN(dstr));
257 SvPV_set(dstr, NULL);
260 mPUSHi(saviters - 1);
262 (void)SvPOK_only_UTF8(targ);
265 /* update the taint state of various various variables in
266 * preparation for final exit.
267 * See "how taint works" above pp_subst() */
269 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
270 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
271 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
275 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
276 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
278 SvTAINTED_on(TOPs); /* taint return value */
279 /* needed for mg_set below */
281 cBOOL(cx->sb_rxtainted &
282 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
285 /* sv_magic(), when adding magic (e.g.taint magic), also
286 * recalculates any pos() magic, converting any byte offset
287 * to utf8 offset. Make sure pos() is reset before this
288 * happens rather than using the now invalid value (since
289 * we've just replaced targ's pvx buffer with the
290 * potentially shorter dstr buffer). Normally (i.e. in
291 * non-taint cases), pos() gets removed a few lines later
292 * with the SvSETMAGIC().
296 mg = mg_find_mglob(targ);
298 MgBYTEPOS_set(mg, targ, SvPVX(targ), -1);
304 /* PL_tainted must be correctly set for this mg_set */
313 RETURNOP(pm->op_next);
314 NOT_REACHED; /* NOTREACHED */
316 cx->sb_iters = saviters;
318 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
321 assert(!RX_SUBOFFSET(rx));
322 cx->sb_orig = orig = RX_SUBBEG(rx);
324 cx->sb_strend = s + (cx->sb_strend - m);
326 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
328 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
329 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
331 sv_catpvn_nomg(dstr, s, m-s);
333 cx->sb_s = RX_OFFS(rx)[0].end + orig;
334 { /* Update the pos() information. */
336 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
339 /* the string being matched against may no longer be a string,
340 * e.g. $_=0; s/.../$_++/ge */
343 SvPV_force_nomg_nolen(sv);
345 if (!(mg = mg_find_mglob(sv))) {
346 mg = sv_magicext_mglob(sv);
348 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
351 (void)ReREFCNT_inc(rx);
352 /* update the taint state of various various variables in preparation
353 * for calling the code block.
354 * See "how taint works" above pp_subst() */
356 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
357 cx->sb_rxtainted |= SUBST_TAINT_PAT;
359 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
360 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
361 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
363 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
365 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
366 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
367 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
368 ? cx->sb_dstr : cx->sb_targ);
371 rxres_save(&cx->sb_rxres, rx);
373 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
377 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
382 PERL_ARGS_ASSERT_RXRES_SAVE;
385 if (!p || p[1] < RX_NPARENS(rx)) {
387 i = 7 + (RX_NPARENS(rx)+1) * 2;
389 i = 6 + (RX_NPARENS(rx)+1) * 2;
398 /* what (if anything) to free on croak */
399 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
400 RX_MATCH_COPIED_off(rx);
401 *p++ = RX_NPARENS(rx);
404 *p++ = PTR2UV(RX_SAVED_COPY(rx));
405 RX_SAVED_COPY(rx) = NULL;
408 *p++ = PTR2UV(RX_SUBBEG(rx));
409 *p++ = (UV)RX_SUBLEN(rx);
410 *p++ = (UV)RX_SUBOFFSET(rx);
411 *p++ = (UV)RX_SUBCOFFSET(rx);
412 for (i = 0; i <= RX_NPARENS(rx); ++i) {
413 *p++ = (UV)RX_OFFS(rx)[i].start;
414 *p++ = (UV)RX_OFFS(rx)[i].end;
419 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
424 PERL_ARGS_ASSERT_RXRES_RESTORE;
427 RX_MATCH_COPY_FREE(rx);
428 RX_MATCH_COPIED_set(rx, *p);
430 RX_NPARENS(rx) = *p++;
433 if (RX_SAVED_COPY(rx))
434 SvREFCNT_dec (RX_SAVED_COPY(rx));
435 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
439 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
440 RX_SUBLEN(rx) = (I32)(*p++);
441 RX_SUBOFFSET(rx) = (I32)*p++;
442 RX_SUBCOFFSET(rx) = (I32)*p++;
443 for (i = 0; i <= RX_NPARENS(rx); ++i) {
444 RX_OFFS(rx)[i].start = (I32)(*p++);
445 RX_OFFS(rx)[i].end = (I32)(*p++);
450 S_rxres_free(pTHX_ void **rsp)
452 UV * const p = (UV*)*rsp;
454 PERL_ARGS_ASSERT_RXRES_FREE;
458 void *tmp = INT2PTR(char*,*p);
461 U32 i = 9 + p[1] * 2;
463 U32 i = 8 + p[1] * 2;
468 SvREFCNT_dec (INT2PTR(SV*,p[2]));
471 PoisonFree(p, i, sizeof(UV));
480 #define FORM_NUM_BLANK (1<<30)
481 #define FORM_NUM_POINT (1<<29)
485 dSP; dMARK; dORIGMARK;
486 SV * const tmpForm = *++MARK;
487 SV *formsv; /* contains text of original format */
488 U32 *fpc; /* format ops program counter */
489 char *t; /* current append position in target string */
490 const char *f; /* current position in format string */
492 SV *sv = NULL; /* current item */
493 const char *item = NULL;/* string value of current item */
494 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
495 I32 itembytes = 0; /* as itemsize, but length in bytes */
496 I32 fieldsize = 0; /* width of current field */
497 I32 lines = 0; /* number of lines that have been output */
498 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
499 const char *chophere = NULL; /* where to chop current item */
500 STRLEN linemark = 0; /* pos of start of line in output */
502 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
503 STRLEN len; /* length of current sv */
504 STRLEN linemax; /* estimate of output size in bytes */
505 bool item_is_utf8 = FALSE;
506 bool targ_is_utf8 = FALSE;
509 U8 *source; /* source of bytes to append */
510 STRLEN to_copy; /* how may bytes to append */
511 char trans; /* what chars to translate */
512 bool copied_form = FALSE; /* have we duplicated the form? */
514 mg = doparseform(tmpForm);
516 fpc = (U32*)mg->mg_ptr;
517 /* the actual string the format was compiled from.
518 * with overload etc, this may not match tmpForm */
522 SvPV_force(PL_formtarget, len);
523 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
524 SvTAINTED_on(PL_formtarget);
525 if (DO_UTF8(PL_formtarget))
527 /* this is an initial estimate of how much output buffer space
528 * to allocate. It may be exceeded later */
529 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
530 t = SvGROW(PL_formtarget, len + linemax + 1);
531 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
533 f = SvPV_const(formsv, len);
537 const char *name = "???";
540 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
541 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
542 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
543 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
544 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
546 case FF_CHECKNL: name = "CHECKNL"; break;
547 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
548 case FF_SPACE: name = "SPACE"; break;
549 case FF_HALFSPACE: name = "HALFSPACE"; break;
550 case FF_ITEM: name = "ITEM"; break;
551 case FF_CHOP: name = "CHOP"; break;
552 case FF_LINEGLOB: name = "LINEGLOB"; break;
553 case FF_NEWLINE: name = "NEWLINE"; break;
554 case FF_MORE: name = "MORE"; break;
555 case FF_LINEMARK: name = "LINEMARK"; break;
556 case FF_END: name = "END"; break;
557 case FF_0DECIMAL: name = "0DECIMAL"; break;
558 case FF_LINESNGL: name = "LINESNGL"; break;
561 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
563 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
566 case FF_LINEMARK: /* start (or end) of a line */
567 linemark = t - SvPVX(PL_formtarget);
572 case FF_LITERAL: /* append <arg> literal chars */
577 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
580 case FF_SKIP: /* skip <arg> chars in format */
584 case FF_FETCH: /* get next item and set field size to <arg> */
593 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
596 SvTAINTED_on(PL_formtarget);
599 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
601 const char *s = item = SvPV_const(sv, len);
602 const char *send = s + len;
605 item_is_utf8 = DO_UTF8(sv);
617 if (itemsize == fieldsize)
620 itembytes = s - item;
625 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
627 const char *s = item = SvPV_const(sv, len);
628 const char *send = s + len;
632 item_is_utf8 = DO_UTF8(sv);
634 /* look for a legal split position */
642 /* provisional split point */
646 /* we delay testing fieldsize until after we've
647 * processed the possible split char directly
648 * following the last field char; so if fieldsize=3
649 * and item="a b cdef", we consume "a b", not "a".
650 * Ditto further down.
652 if (size == fieldsize)
656 if (strchr(PL_chopset, *s)) {
657 /* provisional split point */
658 /* for a non-space split char, we include
659 * the split char; hence the '+1' */
663 if (size == fieldsize)
675 if (!chophere || s == send) {
679 itembytes = chophere - item;
684 case FF_SPACE: /* append padding space (diff of field, item size) */
685 arg = fieldsize - itemsize;
693 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
694 arg = fieldsize - itemsize;
703 case FF_ITEM: /* append a text item, while blanking ctrl chars */
709 case FF_CHOP: /* (for ^*) chop the current item */
710 if (sv != &PL_sv_no) {
711 const char *s = chophere;
713 ((sv == tmpForm || SvSMAGICAL(sv))
714 || (SvGMAGICAL(tmpForm) && !sv_only_taint_gmagic(tmpForm))) ) {
715 /* sv and tmpForm are either the same SV, or magic might allow modification
716 of tmpForm when sv is modified, so copy */
717 SV *newformsv = sv_mortalcopy(formsv);
720 f = SvPV_nolen(newformsv) + (f - SvPV_nolen(formsv));
721 Newx(new_compiled, mg->mg_len / sizeof(U32), U32);
722 memcpy(new_compiled, mg->mg_ptr, mg->mg_len);
723 SAVEFREEPV(new_compiled);
724 fpc = new_compiled + (fpc - (U32*)mg->mg_ptr);
736 /* tied, overloaded or similar strangeness.
737 * Do it the hard way */
738 sv_setpvn(sv, s, len - (s-item));
744 case FF_LINESNGL: /* process ^* */
748 case FF_LINEGLOB: /* process @* */
750 const bool oneline = fpc[-1] == FF_LINESNGL;
751 const char *s = item = SvPV_const(sv, len);
752 const char *const send = s + len;
754 item_is_utf8 = DO_UTF8(sv);
765 to_copy = s - item - 1;
779 /* append to_copy bytes from source to PL_formstring.
780 * item_is_utf8 implies source is utf8.
781 * if trans, translate certain characters during the copy */
786 SvCUR_set(PL_formtarget,
787 t - SvPVX_const(PL_formtarget));
789 if (targ_is_utf8 && !item_is_utf8) {
790 source = tmp = bytes_to_utf8(source, &to_copy);
793 if (item_is_utf8 && !targ_is_utf8) {
795 /* Upgrade targ to UTF8, and then we reduce it to
796 a problem we have a simple solution for.
797 Don't need get magic. */
798 sv_utf8_upgrade_nomg(PL_formtarget);
800 /* re-calculate linemark */
801 s = (U8*)SvPVX(PL_formtarget);
802 /* the bytes we initially allocated to append the
803 * whole line may have been gobbled up during the
804 * upgrade, so allocate a whole new line's worth
808 s += UTF8_SAFE_SKIP(s,
809 (U8 *) SvEND(PL_formtarget));
810 linemark = s - (U8*)SvPVX(PL_formtarget);
812 /* Easy. They agree. */
813 assert (item_is_utf8 == targ_is_utf8);
816 /* @* and ^* are the only things that can exceed
817 * the linemax, so grow by the output size, plus
818 * a whole new form's worth in case of any further
820 grow = linemax + to_copy;
822 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
823 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
825 Copy(source, t, to_copy, char);
827 /* blank out ~ or control chars, depending on trans.
828 * works on bytes not chars, so relies on not
829 * matching utf8 continuation bytes */
831 U8 *send = s + to_copy;
834 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
841 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
847 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
850 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
853 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
856 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
858 /* If the field is marked with ^ and the value is undefined,
860 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
868 /* overflow evidence */
869 if (num_overflow(value, fieldsize, arg)) {
875 /* Formats aren't yet marked for locales, so assume "yes". */
877 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
879 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
880 STORE_LC_NUMERIC_SET_TO_NEEDED();
881 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
885 if (!quadmath_format_valid(fmt))
886 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
887 len = quadmath_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
889 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", fmt);
892 /* we generate fmt ourselves so it is safe */
893 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
894 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
895 GCC_DIAG_RESTORE_STMT;
897 PERL_MY_SNPRINTF_POST_GUARD(len, max);
898 RESTORE_LC_NUMERIC();
903 case FF_NEWLINE: /* delete trailing spaces, then append \n */
905 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
910 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
913 if (arg) { /* repeat until fields exhausted? */
919 t = SvPVX(PL_formtarget) + linemark;
924 case FF_MORE: /* replace long end of string with '...' */
926 const char *s = chophere;
927 const char *send = item + len;
929 while (isSPACE(*s) && (s < send))
934 arg = fieldsize - itemsize;
941 if (strBEGINs(s1," ")) {
942 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
952 case FF_END: /* tidy up, then return */
954 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
956 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
958 SvUTF8_on(PL_formtarget);
959 FmLINES(PL_formtarget) += lines;
961 if (fpc[-1] == FF_BLANK)
962 RETURNOP(cLISTOP->op_first);
969 /* also used for: pp_mapstart() */
975 if (PL_stack_base + TOPMARK == SP) {
977 if (GIMME_V == G_SCALAR)
979 RETURNOP(PL_op->op_next->op_next);
981 PL_stack_sp = PL_stack_base + TOPMARK + 1;
982 Perl_pp_pushmark(aTHX); /* push dst */
983 Perl_pp_pushmark(aTHX); /* push src */
984 ENTER_with_name("grep"); /* enter outer scope */
988 ENTER_with_name("grep_item"); /* enter inner scope */
991 src = PL_stack_base[TOPMARK];
993 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
1000 if (PL_op->op_type == OP_MAPSTART)
1001 Perl_pp_pushmark(aTHX); /* push top */
1002 return ((LOGOP*)PL_op->op_next)->op_other;
1008 const U8 gimme = GIMME_V;
1009 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
1015 /* first, move source pointer to the next item in the source list */
1016 ++PL_markstack_ptr[-1];
1018 /* if there are new items, push them into the destination list */
1019 if (items && gimme != G_VOID) {
1020 /* might need to make room back there first */
1021 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1022 /* XXX this implementation is very pessimal because the stack
1023 * is repeatedly extended for every set of items. Is possible
1024 * to do this without any stack extension or copying at all
1025 * by maintaining a separate list over which the map iterates
1026 * (like foreach does). --gsar */
1028 /* everything in the stack after the destination list moves
1029 * towards the end the stack by the amount of room needed */
1030 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1032 /* items to shift up (accounting for the moved source pointer) */
1033 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1035 /* This optimization is by Ben Tilly and it does
1036 * things differently from what Sarathy (gsar)
1037 * is describing. The downside of this optimization is
1038 * that leaves "holes" (uninitialized and hopefully unused areas)
1039 * to the Perl stack, but on the other hand this
1040 * shouldn't be a problem. If Sarathy's idea gets
1041 * implemented, this optimization should become
1042 * irrelevant. --jhi */
1044 shift = count; /* Avoid shifting too often --Ben Tilly */
1048 dst = (SP += shift);
1049 PL_markstack_ptr[-1] += shift;
1050 *PL_markstack_ptr += shift;
1054 /* copy the new items down to the destination list */
1055 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1056 if (gimme == G_ARRAY) {
1057 /* add returned items to the collection (making mortal copies
1058 * if necessary), then clear the current temps stack frame
1059 * *except* for those items. We do this splicing the items
1060 * into the start of the tmps frame (so some items may be on
1061 * the tmps stack twice), then moving PL_tmps_floor above
1062 * them, then freeing the frame. That way, the only tmps that
1063 * accumulate over iterations are the return values for map.
1064 * We have to do to this way so that everything gets correctly
1065 * freed if we die during the map.
1069 /* make space for the slice */
1070 EXTEND_MORTAL(items);
1071 tmpsbase = PL_tmps_floor + 1;
1072 Move(PL_tmps_stack + tmpsbase,
1073 PL_tmps_stack + tmpsbase + items,
1074 PL_tmps_ix - PL_tmps_floor,
1076 PL_tmps_ix += items;
1081 sv = sv_mortalcopy(sv);
1083 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1085 /* clear the stack frame except for the items */
1086 PL_tmps_floor += items;
1088 /* FREETMPS may have cleared the TEMP flag on some of the items */
1091 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1094 /* scalar context: we don't care about which values map returns
1095 * (we use undef here). And so we certainly don't want to do mortal
1096 * copies of meaningless values. */
1097 while (items-- > 0) {
1099 *dst-- = &PL_sv_undef;
1107 LEAVE_with_name("grep_item"); /* exit inner scope */
1110 if (PL_markstack_ptr[-1] > TOPMARK) {
1112 (void)POPMARK; /* pop top */
1113 LEAVE_with_name("grep"); /* exit outer scope */
1114 (void)POPMARK; /* pop src */
1115 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1116 (void)POPMARK; /* pop dst */
1117 SP = PL_stack_base + POPMARK; /* pop original mark */
1118 if (gimme == G_SCALAR) {
1122 else if (gimme == G_ARRAY)
1129 ENTER_with_name("grep_item"); /* enter inner scope */
1132 /* set $_ to the new source item */
1133 src = PL_stack_base[PL_markstack_ptr[-1]];
1134 if (SvPADTMP(src)) {
1135 src = sv_mortalcopy(src);
1140 RETURNOP(cLOGOP->op_other);
1149 if (GIMME_V == G_ARRAY)
1152 if (SvTRUE_NN(targ))
1153 return cLOGOP->op_other;
1162 if (GIMME_V == G_ARRAY) {
1163 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1167 SV * const targ = PAD_SV(PL_op->op_targ);
1170 if (PL_op->op_private & OPpFLIP_LINENUM) {
1171 if (GvIO(PL_last_in_gv)) {
1172 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1175 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1177 flip = SvIV(sv) == SvIV(GvSV(gv));
1180 flip = SvTRUE_NN(sv);
1183 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1184 if (PL_op->op_flags & OPf_SPECIAL) {
1192 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1201 /* This code tries to decide if "$left .. $right" should use the
1202 magical string increment, or if the range is numeric. Initially,
1203 an exception was made for *any* string beginning with "0" (see
1204 [#18165], AMS 20021031), but now that is only applied when the
1205 string's length is also >1 - see the rules now documented in
1208 #define RANGE_IS_NUMERIC(left,right) ( \
1209 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1210 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1211 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1212 looks_like_number(left)) && SvPOKp(left) \
1213 && !(*SvPVX_const(left) == '0' && SvCUR(left)>1 ) )) \
1214 && (!SvOK(right) || looks_like_number(right))))
1220 if (GIMME_V == G_ARRAY) {
1226 if (RANGE_IS_NUMERIC(left,right)) {
1228 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1229 (SvOK(right) && (SvIOK(right)
1230 ? SvIsUV(right) && SvUV(right) > IV_MAX
1231 : SvNV_nomg(right) > IV_MAX)))
1232 DIE(aTHX_ "Range iterator outside integer range");
1233 i = SvIV_nomg(left);
1234 j = SvIV_nomg(right);
1236 /* Dance carefully around signed max. */
1237 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1240 /* The wraparound of signed integers is undefined
1241 * behavior, but here we aim for count >=1, and
1242 * negative count is just wrong. */
1244 #if IVSIZE > Size_t_size
1251 Perl_croak(aTHX_ "Out of memory during list extend");
1258 SV * const sv = sv_2mortal(newSViv(i));
1260 if (n) /* avoid incrementing above IV_MAX */
1266 const char * const lpv = SvPV_nomg_const(left, llen);
1267 const char * const tmps = SvPV_nomg_const(right, len);
1269 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1270 if (DO_UTF8(right) && IN_UNI_8_BIT)
1271 len = sv_len_utf8_nomg(right);
1272 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1274 if (strEQ(SvPVX_const(sv),tmps))
1276 sv = sv_2mortal(newSVsv(sv));
1283 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1287 if (PL_op->op_private & OPpFLIP_LINENUM) {
1288 if (GvIO(PL_last_in_gv)) {
1289 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1292 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1293 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1297 flop = SvTRUE_NN(sv);
1301 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1302 sv_catpvs(targ, "E0");
1312 static const char * const context_name[] = {
1314 NULL, /* CXt_WHEN never actually needs "block" */
1315 NULL, /* CXt_BLOCK never actually needs "block" */
1316 NULL, /* CXt_GIVEN never actually needs "block" */
1317 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1318 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1319 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1320 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1321 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
1329 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1333 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1335 for (i = cxstack_ix; i >= 0; i--) {
1336 const PERL_CONTEXT * const cx = &cxstack[i];
1337 switch (CxTYPE(cx)) {
1343 /* diag_listed_as: Exiting subroutine via %s */
1344 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1345 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1346 if (CxTYPE(cx) == CXt_NULL) /* sort BLOCK */
1349 case CXt_LOOP_PLAIN:
1350 case CXt_LOOP_LAZYIV:
1351 case CXt_LOOP_LAZYSV:
1355 STRLEN cx_label_len = 0;
1356 U32 cx_label_flags = 0;
1357 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1359 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1362 (const U8*)cx_label, cx_label_len,
1363 (const U8*)label, len) == 0)
1365 (const U8*)label, len,
1366 (const U8*)cx_label, cx_label_len) == 0)
1367 : (len == cx_label_len && ((cx_label == label)
1368 || memEQ(cx_label, label, len))) )) {
1369 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1370 (long)i, cx_label));
1373 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1384 Perl_dowantarray(pTHX)
1386 const U8 gimme = block_gimme();
1387 return (gimme == G_VOID) ? G_SCALAR : gimme;
1390 /* note that this function has mostly been superseded by Perl_gimme_V */
1393 Perl_block_gimme(pTHX)
1395 const I32 cxix = dopopto_cursub();
1400 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1402 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1408 Perl_is_lvalue_sub(pTHX)
1410 const I32 cxix = dopopto_cursub();
1411 assert(cxix >= 0); /* We should only be called from inside subs */
1413 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1414 return CxLVAL(cxstack + cxix);
1419 /* only used by cx_pushsub() */
1421 Perl_was_lvalue_sub(pTHX)
1423 const I32 cxix = dopoptosub(cxstack_ix-1);
1424 assert(cxix >= 0); /* We should only be called from inside subs */
1426 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1427 return CxLVAL(cxstack + cxix);
1433 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1437 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1439 PERL_UNUSED_CONTEXT;
1442 for (i = startingblock; i >= 0; i--) {
1443 const PERL_CONTEXT * const cx = &cxstk[i];
1444 switch (CxTYPE(cx)) {
1448 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1449 * twice; the first for the normal foo() call, and the second
1450 * for a faked up re-entry into the sub to execute the
1451 * code block. Hide this faked entry from the world. */
1452 if (cx->cx_type & CXp_SUB_RE_FAKE)
1457 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1465 S_dopoptoeval(pTHX_ I32 startingblock)
1468 for (i = startingblock; i >= 0; i--) {
1469 const PERL_CONTEXT *cx = &cxstack[i];
1470 switch (CxTYPE(cx)) {
1474 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1482 S_dopoptoloop(pTHX_ I32 startingblock)
1485 for (i = startingblock; i >= 0; i--) {
1486 const PERL_CONTEXT * const cx = &cxstack[i];
1487 switch (CxTYPE(cx)) {
1493 /* diag_listed_as: Exiting subroutine via %s */
1494 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1495 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1496 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
1499 case CXt_LOOP_PLAIN:
1500 case CXt_LOOP_LAZYIV:
1501 case CXt_LOOP_LAZYSV:
1504 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1511 /* find the next GIVEN or FOR (with implicit $_) loop context block */
1514 S_dopoptogivenfor(pTHX_ I32 startingblock)
1517 for (i = startingblock; i >= 0; i--) {
1518 const PERL_CONTEXT *cx = &cxstack[i];
1519 switch (CxTYPE(cx)) {
1523 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found given at cx=%ld)\n", (long)i));
1525 case CXt_LOOP_PLAIN:
1526 assert(!(cx->cx_type & CXp_FOR_DEF));
1528 case CXt_LOOP_LAZYIV:
1529 case CXt_LOOP_LAZYSV:
1532 if (cx->cx_type & CXp_FOR_DEF) {
1533 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found foreach at cx=%ld)\n", (long)i));
1542 S_dopoptowhen(pTHX_ I32 startingblock)
1545 for (i = startingblock; i >= 0; i--) {
1546 const PERL_CONTEXT *cx = &cxstack[i];
1547 switch (CxTYPE(cx)) {
1551 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1558 /* dounwind(): pop all contexts above (but not including) cxix.
1559 * Note that it clears the savestack frame associated with each popped
1560 * context entry, but doesn't free any temps.
1561 * It does a cx_popblock() of the last frame that it pops, and leaves
1562 * cxstack_ix equal to cxix.
1566 Perl_dounwind(pTHX_ I32 cxix)
1568 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1571 while (cxstack_ix > cxix) {
1572 PERL_CONTEXT *cx = CX_CUR();
1574 CX_DEBUG(cx, "UNWIND");
1575 /* Note: we don't need to restore the base context info till the end. */
1579 switch (CxTYPE(cx)) {
1582 /* CXt_SUBST is not a block context type, so skip the
1583 * cx_popblock(cx) below */
1584 if (cxstack_ix == cxix + 1) {
1595 case CXt_LOOP_PLAIN:
1596 case CXt_LOOP_LAZYIV:
1597 case CXt_LOOP_LAZYSV:
1610 /* these two don't have a POPFOO() */
1616 if (cxstack_ix == cxix + 1) {
1625 Perl_qerror(pTHX_ SV *err)
1627 PERL_ARGS_ASSERT_QERROR;
1630 if (PL_in_eval & EVAL_KEEPERR) {
1631 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1635 sv_catsv(ERRSV, err);
1638 sv_catsv(PL_errors, err);
1640 Perl_warn(aTHX_ "%" SVf, SVfARG(err));
1642 ++PL_parser->error_count;
1647 /* pop a CXt_EVAL context and in addition, if it was a require then
1649 * 0: do nothing extra;
1650 * 1: undef $INC{$name}; croak "$name did not return a true value";
1651 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1655 S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
1657 SV *namesv = NULL; /* init to avoid dumb compiler warning */
1661 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
1663 /* keep namesv alive after cx_popeval() */
1664 namesv = cx->blk_eval.old_namesv;
1665 cx->blk_eval.old_namesv = NULL;
1674 HV *inc_hv = GvHVn(PL_incgv);
1675 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1676 const char *key = SvPVX_const(namesv);
1679 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1680 fmt = "%" SVf " did not return a true value";
1684 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1685 fmt = "%" SVf "Compilation failed in require";
1687 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1690 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1695 /* die_unwind(): this is the final destination for the various croak()
1696 * functions. If we're in an eval, unwind the context and other stacks
1697 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1698 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1699 * to is a require the exception will be rethrown, as requires don't
1700 * actually trap exceptions.
1704 Perl_die_unwind(pTHX_ SV *msv)
1707 U8 in_eval = PL_in_eval;
1708 PERL_ARGS_ASSERT_DIE_UNWIND;
1713 /* We need to keep this SV alive through all the stack unwinding
1714 * and FREETMPSing below, while ensuing that it doesn't leak
1715 * if we call out to something which then dies (e.g. sub STORE{die}
1716 * when unlocalising a tied var). So we do a dance with
1717 * mortalising and SAVEFREEing.
1719 sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1722 * Historically, perl used to set ERRSV ($@) early in the die
1723 * process and rely on it not getting clobbered during unwinding.
1724 * That sucked, because it was liable to get clobbered, so the
1725 * setting of ERRSV used to emit the exception from eval{} has
1726 * been moved to much later, after unwinding (see just before
1727 * JMPENV_JUMP below). However, some modules were relying on the
1728 * early setting, by examining $@ during unwinding to use it as
1729 * a flag indicating whether the current unwinding was caused by
1730 * an exception. It was never a reliable flag for that purpose,
1731 * being totally open to false positives even without actual
1732 * clobberage, but was useful enough for production code to
1733 * semantically rely on it.
1735 * We'd like to have a proper introspective interface that
1736 * explicitly describes the reason for whatever unwinding
1737 * operations are currently in progress, so that those modules
1738 * work reliably and $@ isn't further overloaded. But we don't
1739 * have one yet. In its absence, as a stopgap measure, ERRSV is
1740 * now *additionally* set here, before unwinding, to serve as the
1741 * (unreliable) flag that it used to.
1743 * This behaviour is temporary, and should be removed when a
1744 * proper way to detect exceptional unwinding has been developed.
1745 * As of 2010-12, the authors of modules relying on the hack
1746 * are aware of the issue, because the modules failed on
1747 * perls 5.13.{1..7} which had late setting of $@ without this
1748 * early-setting hack.
1750 if (!(in_eval & EVAL_KEEPERR)) {
1751 /* remove any read-only/magic from the SV, so we don't
1752 get infinite recursion when setting ERRSV */
1754 sv_setsv_flags(ERRSV, exceptsv,
1755 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
1758 if (in_eval & EVAL_KEEPERR) {
1759 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1763 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1764 && PL_curstackinfo->si_prev)
1774 JMPENV *restartjmpenv;
1777 if (cxix < cxstack_ix)
1781 assert(CxTYPE(cx) == CXt_EVAL);
1783 /* return false to the caller of eval */
1784 oldsp = PL_stack_base + cx->blk_oldsp;
1785 gimme = cx->blk_gimme;
1786 if (gimme == G_SCALAR)
1787 *++oldsp = &PL_sv_undef;
1788 PL_stack_sp = oldsp;
1790 restartjmpenv = cx->blk_eval.cur_top_env;
1791 restartop = cx->blk_eval.retop;
1793 /* We need a FREETMPS here to avoid late-called destructors
1794 * clobbering $@ *after* we set it below, e.g.
1795 * sub DESTROY { eval { die "X" } }
1796 * eval { my $x = bless []; die $x = 0, "Y" };
1798 * Here the clearing of the $x ref mortalises the anon array,
1799 * which needs to be freed *before* $& is set to "Y",
1800 * otherwise it gets overwritten with "X".
1802 * However, the FREETMPS will clobber exceptsv, so preserve it
1803 * on the savestack for now.
1805 SAVEFREESV(SvREFCNT_inc_simple_NN(exceptsv));
1807 /* now we're about to pop the savestack, so re-mortalise it */
1808 sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1810 /* Note that unlike pp_entereval, pp_require isn't supposed to
1811 * trap errors. So if we're a require, after we pop the
1812 * CXt_EVAL that pp_require pushed, rethrow the error with
1813 * croak(exceptsv). This is all handled by the call below when
1816 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
1818 if (!(in_eval & EVAL_KEEPERR)) {
1820 sv_setsv(ERRSV, exceptsv);
1822 PL_restartjmpenv = restartjmpenv;
1823 PL_restartop = restartop;
1825 NOT_REACHED; /* NOTREACHED */
1829 write_to_stderr(exceptsv);
1831 NOT_REACHED; /* NOTREACHED */
1837 if (SvTRUE_NN(left) != SvTRUE_NN(right))
1845 =head1 CV Manipulation Functions
1847 =for apidoc caller_cx
1849 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1850 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1851 information returned to Perl by C<caller>. Note that XSUBs don't get a
1852 stack frame, so C<caller_cx(0, NULL)> will return information for the
1853 immediately-surrounding Perl code.
1855 This function skips over the automatic calls to C<&DB::sub> made on the
1856 behalf of the debugger. If the stack frame requested was a sub called by
1857 C<DB::sub>, the return value will be the frame for the call to
1858 C<DB::sub>, since that has the correct line number/etc. for the call
1859 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1860 frame for the sub call itself.
1865 const PERL_CONTEXT *
1866 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1868 I32 cxix = dopopto_cursub();
1869 const PERL_CONTEXT *cx;
1870 const PERL_CONTEXT *ccstack = cxstack;
1871 const PERL_SI *top_si = PL_curstackinfo;
1874 /* we may be in a higher stacklevel, so dig down deeper */
1875 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1876 top_si = top_si->si_prev;
1877 ccstack = top_si->si_cxstack;
1878 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1882 /* caller() should not report the automatic calls to &DB::sub */
1883 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1884 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1888 cxix = dopoptosub_at(ccstack, cxix - 1);
1891 cx = &ccstack[cxix];
1892 if (dbcxp) *dbcxp = cx;
1894 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1895 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1896 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1897 field below is defined for any cx. */
1898 /* caller() should not report the automatic calls to &DB::sub */
1899 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1900 cx = &ccstack[dbcxix];
1909 const PERL_CONTEXT *cx;
1910 const PERL_CONTEXT *dbcx;
1912 const HEK *stash_hek;
1914 bool has_arg = MAXARG && TOPs;
1923 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1925 if (gimme != G_ARRAY) {
1932 CX_DEBUG(cx, "CALLER");
1933 assert(CopSTASH(cx->blk_oldcop));
1934 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1935 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1937 if (gimme != G_ARRAY) {
1940 PUSHs(&PL_sv_undef);
1943 sv_sethek(TARG, stash_hek);
1952 PUSHs(&PL_sv_undef);
1955 sv_sethek(TARG, stash_hek);
1958 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1959 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1960 cx->blk_sub.retop, TRUE);
1962 lcop = cx->blk_oldcop;
1963 mPUSHu(CopLINE(lcop));
1966 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1967 /* So is ccstack[dbcxix]. */
1968 if (CvHASGV(dbcx->blk_sub.cv)) {
1969 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1970 PUSHs(boolSV(CxHASARGS(cx)));
1973 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1974 PUSHs(boolSV(CxHASARGS(cx)));
1978 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1981 gimme = cx->blk_gimme;
1982 if (gimme == G_VOID)
1983 PUSHs(&PL_sv_undef);
1985 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1986 if (CxTYPE(cx) == CXt_EVAL) {
1988 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1989 SV *cur_text = cx->blk_eval.cur_text;
1990 if (SvCUR(cur_text) >= 2) {
1991 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1992 SvUTF8(cur_text)|SVs_TEMP));
1995 /* I think this is will always be "", but be sure */
1996 PUSHs(sv_2mortal(newSVsv(cur_text)));
2002 else if (cx->blk_eval.old_namesv) {
2003 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
2006 /* eval BLOCK (try blocks have old_namesv == 0) */
2008 PUSHs(&PL_sv_undef);
2009 PUSHs(&PL_sv_undef);
2013 PUSHs(&PL_sv_undef);
2014 PUSHs(&PL_sv_undef);
2016 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
2017 && CopSTASH_eq(PL_curcop, PL_debstash))
2019 /* slot 0 of the pad contains the original @_ */
2020 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
2021 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2022 cx->blk_sub.olddepth+1]))[0]);
2023 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
2025 Perl_init_dbargs(aTHX);
2027 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
2028 av_extend(PL_dbargs, AvFILLp(ary) + off);
2029 if (AvFILLp(ary) + 1 + off)
2030 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
2031 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
2033 mPUSHi(CopHINTS_get(cx->blk_oldcop));
2036 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
2038 if (old_warnings == pWARN_NONE)
2039 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
2040 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
2041 mask = &PL_sv_undef ;
2042 else if (old_warnings == pWARN_ALL ||
2043 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
2044 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
2047 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2051 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2052 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2062 if (MAXARG < 1 || (!TOPs && !POPs)) {
2064 tmps = NULL, len = 0;
2067 tmps = SvPVx_const(POPs, len);
2068 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
2073 /* like pp_nextstate, but used instead when the debugger is active */
2077 PL_curcop = (COP*)PL_op;
2078 TAINT_NOT; /* Each statement is presumed innocent */
2079 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
2084 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2085 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
2089 const U8 gimme = G_ARRAY;
2090 GV * const gv = PL_DBgv;
2093 if (gv && isGV_with_GP(gv))
2096 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
2097 DIE(aTHX_ "No DB::DB routine defined");
2099 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2100 /* don't do recursive DB::DB call */
2110 (void)(*CvXSUB(cv))(aTHX_ cv);
2116 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
2117 cx_pushsub(cx, cv, PL_op->op_next, 0);
2118 /* OP_DBSTATE's op_private holds hint bits rather than
2119 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2120 * any CxLVAL() flags that have now been mis-calculated */
2127 if (CvDEPTH(cv) >= 2)
2128 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2129 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2130 RETURNOP(CvSTART(cv));
2142 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2154 assert(CxTYPE(cx) == CXt_BLOCK);
2156 if (PL_op->op_flags & OPf_SPECIAL)
2157 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2158 cx->blk_oldpm = PL_curpm;
2160 oldsp = PL_stack_base + cx->blk_oldsp;
2161 gimme = cx->blk_gimme;
2163 if (gimme == G_VOID)
2164 PL_stack_sp = oldsp;
2166 leave_adjust_stacks(oldsp, oldsp, gimme,
2167 PL_op->op_private & OPpLVALUE ? 3 : 1);
2177 S_outside_integer(pTHX_ SV *sv)
2180 const NV nv = SvNV_nomg(sv);
2181 if (Perl_isinfnan(nv))
2183 #ifdef NV_PRESERVES_UV
2184 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2187 if (nv <= (NV)IV_MIN)
2190 ((nv > (NV)UV_MAX ||
2191 SvUV_nomg(sv) > (UV)IV_MAX)))
2202 const U8 gimme = GIMME_V;
2203 void *itervarp; /* GV or pad slot of the iteration variable */
2204 SV *itersave; /* the old var in the iterator var slot */
2207 if (PL_op->op_targ) { /* "my" variable */
2208 itervarp = &PAD_SVl(PL_op->op_targ);
2209 itersave = *(SV**)itervarp;
2211 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2212 /* the SV currently in the pad slot is never live during
2213 * iteration (the slot is always aliased to one of the items)
2214 * so it's always stale */
2215 SvPADSTALE_on(itersave);
2217 SvREFCNT_inc_simple_void_NN(itersave);
2218 cxflags = CXp_FOR_PAD;
2221 SV * const sv = POPs;
2222 itervarp = (void *)sv;
2223 if (LIKELY(isGV(sv))) { /* symbol table variable */
2224 itersave = GvSV(sv);
2225 SvREFCNT_inc_simple_void(itersave);
2226 cxflags = CXp_FOR_GV;
2227 if (PL_op->op_private & OPpITER_DEF)
2228 cxflags |= CXp_FOR_DEF;
2230 else { /* LV ref: for \$foo (...) */
2231 assert(SvTYPE(sv) == SVt_PVMG);
2232 assert(SvMAGIC(sv));
2233 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2235 cxflags = CXp_FOR_LVREF;
2238 /* OPpITER_DEF (implicit $_) should only occur with a GV iter var */
2239 assert((cxflags & CXp_FOR_GV) || !(PL_op->op_private & OPpITER_DEF));
2241 /* Note that this context is initially set as CXt_NULL. Further on
2242 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2243 * there mustn't be anything in the blk_loop substruct that requires
2244 * freeing or undoing, in case we die in the meantime. And vice-versa.
2246 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
2247 cx_pushloop_for(cx, itervarp, itersave);
2249 if (PL_op->op_flags & OPf_STACKED) {
2250 /* OPf_STACKED implies either a single array: for(@), with a
2251 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2253 SV *maybe_ary = POPs;
2254 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2257 SV * const right = maybe_ary;
2258 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
2259 DIE(aTHX_ "Assigned value is not a reference");
2262 if (RANGE_IS_NUMERIC(sv,right)) {
2263 cx->cx_type |= CXt_LOOP_LAZYIV;
2264 if (S_outside_integer(aTHX_ sv) ||
2265 S_outside_integer(aTHX_ right))
2266 DIE(aTHX_ "Range iterator outside integer range");
2267 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2268 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2271 cx->cx_type |= CXt_LOOP_LAZYSV;
2272 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2273 cx->blk_loop.state_u.lazysv.end = right;
2274 SvREFCNT_inc_simple_void_NN(right);
2275 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2276 /* This will do the upgrade to SVt_PV, and warn if the value
2277 is uninitialised. */
2278 (void) SvPV_nolen_const(right);
2279 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2280 to replace !SvOK() with a pointer to "". */
2282 SvREFCNT_dec(right);
2283 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2287 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2288 /* for (@array) {} */
2289 cx->cx_type |= CXt_LOOP_ARY;
2290 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2291 SvREFCNT_inc_simple_void_NN(maybe_ary);
2292 cx->blk_loop.state_u.ary.ix =
2293 (PL_op->op_private & OPpITER_REVERSED) ?
2294 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2297 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
2299 else { /* iterating over items on the stack */
2300 cx->cx_type |= CXt_LOOP_LIST;
2301 cx->blk_oldsp = SP - PL_stack_base;
2302 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2303 cx->blk_loop.state_u.stack.ix =
2304 (PL_op->op_private & OPpITER_REVERSED)
2306 : cx->blk_loop.state_u.stack.basesp;
2307 /* pre-extend stack so pp_iter doesn't have to check every time
2308 * it pushes yes/no */
2318 const U8 gimme = GIMME_V;
2320 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
2321 cx_pushloop_plain(cx);
2334 assert(CxTYPE_is_LOOP(cx));
2335 oldsp = PL_stack_base + cx->blk_oldsp;
2336 base = CxTYPE(cx) == CXt_LOOP_LIST
2337 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
2339 gimme = cx->blk_gimme;
2341 if (gimme == G_VOID)
2344 leave_adjust_stacks(oldsp, base, gimme,
2345 PL_op->op_private & OPpLVALUE ? 3 : 1);
2348 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
2356 /* This duplicates most of pp_leavesub, but with additional code to handle
2357 * return args in lvalue context. It was forked from pp_leavesub to
2358 * avoid slowing down that function any further.
2360 * Any changes made to this function may need to be copied to pp_leavesub
2363 * also tail-called by pp_return
2374 assert(CxTYPE(cx) == CXt_SUB);
2376 if (CxMULTICALL(cx)) {
2377 /* entry zero of a stack is always PL_sv_undef, which
2378 * simplifies converting a '()' return into undef in scalar context */
2379 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2383 gimme = cx->blk_gimme;
2384 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
2386 if (gimme == G_VOID)
2387 PL_stack_sp = oldsp;
2389 U8 lval = CxLVAL(cx);
2390 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2391 const char *what = NULL;
2393 if (gimme == G_SCALAR) {
2395 /* check for bad return arg */
2396 if (oldsp < PL_stack_sp) {
2397 SV *sv = *PL_stack_sp;
2398 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2400 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2401 : "a readonly value" : "a temporary";
2406 /* sub:lvalue{} will take us here. */
2411 "Can't return %s from lvalue subroutine", what);
2415 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2417 if (lval & OPpDEREF) {
2418 /* lval_sub()->{...} and similar */
2422 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2428 assert(gimme == G_ARRAY);
2429 assert (!(lval & OPpDEREF));
2432 /* scan for bad return args */
2434 for (p = PL_stack_sp; p > oldsp; p--) {
2436 /* the PL_sv_undef exception is to allow things like
2437 * this to work, where PL_sv_undef acts as 'skip'
2438 * placeholder on the LHS of list assigns:
2439 * sub foo :lvalue { undef }
2440 * ($a, undef, foo(), $b) = 1..4;
2442 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2444 /* Might be flattened array after $#array = */
2445 what = SvREADONLY(sv)
2446 ? "a readonly value" : "a temporary";
2452 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2457 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
2459 retop = cx->blk_sub.retop;
2470 const I32 cxix = dopopto_cursub();
2472 assert(cxstack_ix >= 0);
2473 if (cxix < cxstack_ix) {
2475 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2476 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2477 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2480 DIE(aTHX_ "Can't return outside a subroutine");
2482 * a sort block, which is a CXt_NULL not a CXt_SUB;
2483 * or a /(?{...})/ block.
2484 * Handle specially. */
2485 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2486 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2487 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
2488 if (cxstack_ix > 0) {
2489 /* See comment below about context popping. Since we know
2490 * we're scalar and not lvalue, we can preserve the return
2491 * value in a simpler fashion than there. */
2493 assert(cxstack[0].blk_gimme == G_SCALAR);
2494 if ( (sp != PL_stack_base)
2495 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2497 *SP = sv_mortalcopy(sv);
2500 /* caller responsible for popping cxstack[0] */
2504 /* There are contexts that need popping. Doing this may free the
2505 * return value(s), so preserve them first: e.g. popping the plain
2506 * loop here would free $x:
2507 * sub f { { my $x = 1; return $x } }
2508 * We may also need to shift the args down; for example,
2509 * for (1,2) { return 3,4 }
2510 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2511 * leave_adjust_stacks(), along with freeing any temps. Note that
2512 * whoever we tail-call (e.g. pp_leaveeval) will also call
2513 * leave_adjust_stacks(); however, the second call is likely to
2514 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2515 * pass them through, rather than copying them again. So this
2516 * isn't as inefficient as it sounds.
2518 cx = &cxstack[cxix];
2520 if (cx->blk_gimme != G_VOID)
2521 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
2523 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2527 cx = &cxstack[cxix]; /* CX stack may have been realloced */
2530 /* Like in the branch above, we need to handle any extra junk on
2531 * the stack. But because we're not also popping extra contexts, we
2532 * don't have to worry about prematurely freeing args. So we just
2533 * need to do the bare minimum to handle junk, and leave the main
2534 * arg processing in the function we tail call, e.g. pp_leavesub.
2535 * In list context we have to splice out the junk; in scalar
2536 * context we can leave as-is (pp_leavesub will later return the
2537 * top stack element). But for an empty arg list, e.g.
2538 * for (1,2) { return }
2539 * we need to set sp = oldsp so that pp_leavesub knows to push
2540 * &PL_sv_undef onto the stack.
2543 cx = &cxstack[cxix];
2544 oldsp = PL_stack_base + cx->blk_oldsp;
2545 if (oldsp != MARK) {
2546 SSize_t nargs = SP - MARK;
2548 if (cx->blk_gimme == G_ARRAY) {
2549 /* shift return args to base of call stack frame */
2550 Move(MARK + 1, oldsp + 1, nargs, SV*);
2551 PL_stack_sp = oldsp + nargs;
2555 PL_stack_sp = oldsp;
2559 /* fall through to a normal exit */
2560 switch (CxTYPE(cx)) {
2562 return CxTRYBLOCK(cx)
2563 ? Perl_pp_leavetry(aTHX)
2564 : Perl_pp_leaveeval(aTHX);
2566 return CvLVALUE(cx->blk_sub.cv)
2567 ? Perl_pp_leavesublv(aTHX)
2568 : Perl_pp_leavesub(aTHX);
2570 return Perl_pp_leavewrite(aTHX);
2572 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2576 /* find the enclosing loop or labelled loop and dounwind() back to it. */
2578 static PERL_CONTEXT *
2582 if (PL_op->op_flags & OPf_SPECIAL) {
2583 cxix = dopoptoloop(cxstack_ix);
2585 /* diag_listed_as: Can't "last" outside a loop block */
2586 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2592 const char * const label =
2593 PL_op->op_flags & OPf_STACKED
2594 ? SvPV(TOPs,label_len)
2595 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2596 const U32 label_flags =
2597 PL_op->op_flags & OPf_STACKED
2599 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2601 cxix = dopoptolabel(label, label_len, label_flags);
2603 /* diag_listed_as: Label not found for "last %s" */
2604 Perl_croak(aTHX_ "Label not found for \"%s %" SVf "\"",
2606 SVfARG(PL_op->op_flags & OPf_STACKED
2607 && !SvGMAGICAL(TOPp1s)
2609 : newSVpvn_flags(label,
2611 label_flags | SVs_TEMP)));
2613 if (cxix < cxstack_ix)
2615 return &cxstack[cxix];
2624 cx = S_unwind_loop(aTHX);
2626 assert(CxTYPE_is_LOOP(cx));
2627 PL_stack_sp = PL_stack_base
2628 + (CxTYPE(cx) == CXt_LOOP_LIST
2629 ? cx->blk_loop.state_u.stack.basesp
2635 /* Stack values are safe: */
2637 cx_poploop(cx); /* release loop vars ... */
2639 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2649 /* if not a bare 'next' in the main scope, search for it */
2651 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2652 cx = S_unwind_loop(aTHX);
2655 PL_curcop = cx->blk_oldcop;
2657 return (cx)->blk_loop.my_op->op_nextop;
2662 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
2663 OP* redo_op = cx->blk_loop.my_op->op_redoop;
2665 if (redo_op->op_type == OP_ENTER) {
2666 /* pop one less context to avoid $x being freed in while (my $x..) */
2669 assert(CxTYPE(cx) == CXt_BLOCK);
2670 redo_op = redo_op->op_next;
2676 PL_curcop = cx->blk_oldcop;
2681 #define UNENTERABLE (OP *)1
2682 #define GOTO_DEPTH 64
2685 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2688 static const char* const too_deep = "Target of goto is too deeply nested";
2690 PERL_ARGS_ASSERT_DOFINDLABEL;
2693 Perl_croak(aTHX_ "%s", too_deep);
2694 if (o->op_type == OP_LEAVE ||
2695 o->op_type == OP_SCOPE ||
2696 o->op_type == OP_LEAVELOOP ||
2697 o->op_type == OP_LEAVESUB ||
2698 o->op_type == OP_LEAVETRY ||
2699 o->op_type == OP_LEAVEGIVEN)
2701 *ops++ = cUNOPo->op_first;
2703 else if (oplimit - opstack < GOTO_DEPTH) {
2704 if (o->op_flags & OPf_KIDS
2705 && cUNOPo->op_first->op_type == OP_PUSHMARK) {
2706 *ops++ = UNENTERABLE;
2708 else if (o->op_flags & OPf_KIDS && PL_opargs[o->op_type]
2709 && OP_CLASS(o) != OA_LOGOP
2710 && o->op_type != OP_LINESEQ
2711 && o->op_type != OP_SREFGEN
2712 && o->op_type != OP_ENTEREVAL
2713 && o->op_type != OP_GLOB
2714 && o->op_type != OP_RV2CV) {
2715 OP * const kid = cUNOPo->op_first;
2716 if (OP_GIMME(kid, 0) != G_SCALAR || OpHAS_SIBLING(kid))
2717 *ops++ = UNENTERABLE;
2721 Perl_croak(aTHX_ "%s", too_deep);
2723 if (o->op_flags & OPf_KIDS) {
2725 OP * const kid1 = cUNOPo->op_first;
2726 /* First try all the kids at this level, since that's likeliest. */
2727 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2728 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2729 STRLEN kid_label_len;
2730 U32 kid_label_flags;
2731 const char *kid_label = CopLABEL_len_flags(kCOP,
2732 &kid_label_len, &kid_label_flags);
2734 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2737 (const U8*)kid_label, kid_label_len,
2738 (const U8*)label, len) == 0)
2740 (const U8*)label, len,
2741 (const U8*)kid_label, kid_label_len) == 0)
2742 : ( len == kid_label_len && ((kid_label == label)
2743 || memEQ(kid_label, label, len)))))
2747 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2748 bool first_kid_of_binary = FALSE;
2749 if (kid == PL_lastgotoprobe)
2751 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2754 else if (ops[-1] != UNENTERABLE
2755 && (ops[-1]->op_type == OP_NEXTSTATE ||
2756 ops[-1]->op_type == OP_DBSTATE))
2761 if (kid == kid1 && ops != opstack && ops[-1] == UNENTERABLE) {
2762 first_kid_of_binary = TRUE;
2765 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2767 if (first_kid_of_binary)
2768 *ops++ = UNENTERABLE;
2777 S_check_op_type(pTHX_ OP * const o)
2779 /* Eventually we may want to stack the needed arguments
2780 * for each op. For now, we punt on the hard ones. */
2781 /* XXX This comment seems to me like wishful thinking. --sprout */
2782 if (o == UNENTERABLE)
2784 "Can't \"goto\" into a binary or list expression");
2785 if (o->op_type == OP_ENTERITER)
2787 "Can't \"goto\" into the middle of a foreach loop");
2788 if (o->op_type == OP_ENTERGIVEN)
2790 "Can't \"goto\" into a \"given\" block");
2793 /* also used for: pp_dump() */
2801 OP *enterops[GOTO_DEPTH];
2802 const char *label = NULL;
2803 STRLEN label_len = 0;
2804 U32 label_flags = 0;
2805 const bool do_dump = (PL_op->op_type == OP_DUMP);
2806 static const char* const must_have_label = "goto must have label";
2808 if (PL_op->op_flags & OPf_STACKED) {
2809 /* goto EXPR or goto &foo */
2811 SV * const sv = POPs;
2814 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2815 /* This egregious kludge implements goto &subroutine */
2818 CV *cv = MUTABLE_CV(SvRV(sv));
2819 AV *arg = GvAV(PL_defgv);
2821 while (!CvROOT(cv) && !CvXSUB(cv)) {
2822 const GV * const gv = CvGV(cv);
2826 /* autoloaded stub? */
2827 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2829 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2831 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2832 if (autogv && (cv = GvCV(autogv)))
2834 tmpstr = sv_newmortal();
2835 gv_efullname3(tmpstr, gv, NULL);
2836 DIE(aTHX_ "Goto undefined subroutine &%" SVf, SVfARG(tmpstr));
2838 DIE(aTHX_ "Goto undefined subroutine");
2841 cxix = dopopto_cursub();
2843 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2845 cx = &cxstack[cxix];
2846 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2847 if (CxTYPE(cx) == CXt_EVAL) {
2849 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2850 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2852 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2853 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2855 else if (CxMULTICALL(cx))
2856 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2858 /* First do some returnish stuff. */
2860 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2862 if (cxix < cxstack_ix) {
2869 /* protect @_ during save stack unwind. */
2871 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2873 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2876 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2877 /* this is part of cx_popsub_args() */
2878 AV* av = MUTABLE_AV(PAD_SVl(0));
2879 assert(AvARRAY(MUTABLE_AV(
2880 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2881 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2883 /* we are going to donate the current @_ from the old sub
2884 * to the new sub. This first part of the donation puts a
2885 * new empty AV in the pad[0] slot of the old sub,
2886 * unless pad[0] and @_ differ (e.g. if the old sub did
2887 * local *_ = []); in which case clear the old pad[0]
2888 * array in the usual way */
2889 if (av == arg || AvREAL(av))
2890 clear_defarray(av, av == arg);
2891 else CLEAR_ARGARRAY(av);
2894 /* don't restore PL_comppad here. It won't be needed if the
2895 * sub we're going to is non-XS, but restoring it early then
2896 * croaking (e.g. the "Goto undefined subroutine" below)
2897 * means the CX block gets processed again in dounwind,
2898 * but this time with the wrong PL_comppad */
2900 /* A destructor called during LEAVE_SCOPE could have undefined
2901 * our precious cv. See bug #99850. */
2902 if (!CvROOT(cv) && !CvXSUB(cv)) {
2903 const GV * const gv = CvGV(cv);
2905 SV * const tmpstr = sv_newmortal();
2906 gv_efullname3(tmpstr, gv, NULL);
2907 DIE(aTHX_ "Goto undefined subroutine &%" SVf,
2910 DIE(aTHX_ "Goto undefined subroutine");
2913 if (CxTYPE(cx) == CXt_SUB) {
2914 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2915 SvREFCNT_dec_NN(cx->blk_sub.cv);
2918 /* Now do some callish stuff. */
2920 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2921 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2926 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2928 /* put GvAV(defgv) back onto stack */
2930 EXTEND(SP, items+1); /* @_ could have been extended. */
2935 bool r = cBOOL(AvREAL(arg));
2936 for (index=0; index<items; index++)
2940 SV ** const svp = av_fetch(arg, index, 0);
2941 sv = svp ? *svp : NULL;
2943 else sv = AvARRAY(arg)[index];
2945 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2946 : sv_2mortal(newSVavdefelem(arg, index, 1));
2950 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2951 /* Restore old @_ */
2952 CX_POP_SAVEARRAY(cx);
2955 retop = cx->blk_sub.retop;
2956 PL_comppad = cx->blk_sub.prevcomppad;
2957 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2959 /* XS subs don't have a CXt_SUB, so pop it;
2960 * this is a cx_popblock(), less all the stuff we already did
2961 * for cx_topblock() earlier */
2962 PL_curcop = cx->blk_oldcop;
2963 /* this is cx_popsub, less all the stuff we already did */
2964 PL_curstackinfo->si_cxsubix = cx->blk_sub.old_cxsubix;
2968 /* Push a mark for the start of arglist */
2971 (void)(*CvXSUB(cv))(aTHX_ cv);
2976 PADLIST * const padlist = CvPADLIST(cv);
2978 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2980 /* partial unrolled cx_pushsub(): */
2982 cx->blk_sub.cv = cv;
2983 cx->blk_sub.olddepth = CvDEPTH(cv);
2986 SvREFCNT_inc_simple_void_NN(cv);
2987 if (CvDEPTH(cv) > 1) {
2988 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2989 sub_crush_depth(cv);
2990 pad_push(padlist, CvDEPTH(cv));
2992 PL_curcop = cx->blk_oldcop;
2993 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2996 /* second half of donating @_ from the old sub to the
2997 * new sub: abandon the original pad[0] AV in the
2998 * new sub, and replace it with the donated @_.
2999 * pad[0] takes ownership of the extra refcount
3000 * we gave arg earlier */
3002 SvREFCNT_dec(PAD_SVl(0));
3003 PAD_SVl(0) = (SV *)arg;
3004 SvREFCNT_inc_simple_void_NN(arg);
3007 /* GvAV(PL_defgv) might have been modified on scope
3008 exit, so point it at arg again. */
3009 if (arg != GvAV(PL_defgv)) {
3010 AV * const av = GvAV(PL_defgv);
3011 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
3016 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
3017 Perl_get_db_sub(aTHX_ NULL, cv);
3019 CV * const gotocv = get_cvs("DB::goto", 0);
3021 PUSHMARK( PL_stack_sp );
3022 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
3027 retop = CvSTART(cv);
3028 goto putback_return;
3033 label = SvPV_nomg_const(sv, label_len);
3034 label_flags = SvUTF8(sv);
3037 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
3038 /* goto LABEL or dump LABEL */
3039 label = cPVOP->op_pv;
3040 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
3041 label_len = strlen(label);
3043 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3048 OP *gotoprobe = NULL;
3049 bool leaving_eval = FALSE;
3050 bool in_block = FALSE;
3051 bool pseudo_block = FALSE;
3052 PERL_CONTEXT *last_eval_cx = NULL;
3056 PL_lastgotoprobe = NULL;
3058 for (ix = cxstack_ix; ix >= 0; ix--) {
3060 switch (CxTYPE(cx)) {
3062 leaving_eval = TRUE;
3063 if (!CxTRYBLOCK(cx)) {
3064 gotoprobe = (last_eval_cx ?
3065 last_eval_cx->blk_eval.old_eval_root :
3070 /* else fall through */
3071 case CXt_LOOP_PLAIN:
3072 case CXt_LOOP_LAZYIV:
3073 case CXt_LOOP_LAZYSV:
3078 gotoprobe = OpSIBLING(cx->blk_oldcop);
3084 gotoprobe = OpSIBLING(cx->blk_oldcop);
3087 gotoprobe = PL_main_root;
3090 gotoprobe = CvROOT(cx->blk_sub.cv);
3091 pseudo_block = cBOOL(CxMULTICALL(cx));
3095 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3098 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3099 CxTYPE(cx), (long) ix);
3100 gotoprobe = PL_main_root;
3106 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3107 enterops, enterops + GOTO_DEPTH);
3110 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
3111 sibl1->op_type == OP_UNSTACK &&
3112 (sibl2 = OpSIBLING(sibl1)))
3114 retop = dofindlabel(sibl2,
3115 label, label_len, label_flags, enterops,
3116 enterops + GOTO_DEPTH);
3122 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3123 PL_lastgotoprobe = gotoprobe;
3126 DIE(aTHX_ "Can't find label %" UTF8f,
3127 UTF8fARG(label_flags, label_len, label));
3129 /* if we're leaving an eval, check before we pop any frames
3130 that we're not going to punt, otherwise the error
3133 if (leaving_eval && *enterops && enterops[1]) {
3135 for (i = 1; enterops[i]; i++)
3136 S_check_op_type(aTHX_ enterops[i]);
3139 if (*enterops && enterops[1]) {
3140 I32 i = enterops[1] != UNENTERABLE
3141 && enterops[1]->op_type == OP_ENTER && in_block
3145 deprecate("\"goto\" to jump into a construct");
3148 /* pop unwanted frames */
3150 if (ix < cxstack_ix) {
3152 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3158 /* push wanted frames */
3160 if (*enterops && enterops[1]) {
3161 OP * const oldop = PL_op;
3162 ix = enterops[1] != UNENTERABLE
3163 && enterops[1]->op_type == OP_ENTER && in_block
3166 for (; enterops[ix]; ix++) {
3167 PL_op = enterops[ix];
3168 S_check_op_type(aTHX_ PL_op);
3169 DEBUG_l( Perl_deb(aTHX_ "pp_goto: Entering %s\n",
3171 PL_op->op_ppaddr(aTHX);
3179 if (!retop) retop = PL_main_start;
3181 PL_restartop = retop;
3182 PL_do_undump = TRUE;
3186 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3187 PL_do_undump = FALSE;
3205 anum = 0; (void)POPs;
3211 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3214 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3217 PL_exit_flags |= PERL_EXIT_EXPECTED;
3219 PUSHs(&PL_sv_undef);
3226 S_save_lines(pTHX_ AV *array, SV *sv)
3228 const char *s = SvPVX_const(sv);
3229 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3232 PERL_ARGS_ASSERT_SAVE_LINES;
3234 while (s && s < send) {
3236 SV * const tmpstr = newSV_type(SVt_PVMG);
3238 t = (const char *)memchr(s, '\n', send - s);
3244 sv_setpvn(tmpstr, s, t - s);
3245 av_store(array, line++, tmpstr);
3253 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3255 0 is used as continue inside eval,
3257 3 is used for a die caught by an inner eval - continue inner loop
3259 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3260 establish a local jmpenv to handle exception traps.
3265 S_docatch(pTHX_ Perl_ppaddr_t firstpp)
3268 OP * const oldop = PL_op;
3271 assert(CATCH_GET == TRUE);
3276 PL_op = firstpp(aTHX);
3281 /* die caught by an inner eval - continue inner loop */
3282 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3283 PL_restartjmpenv = NULL;
3284 PL_op = PL_restartop;
3293 NOT_REACHED; /* NOTREACHED */
3302 =for apidoc find_runcv
3304 Locate the CV corresponding to the currently executing sub or eval.
3305 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3306 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3307 entered. (This allows debuggers to eval in the scope of the breakpoint
3308 rather than in the scope of the debugger itself.)
3314 Perl_find_runcv(pTHX_ U32 *db_seqp)
3316 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3319 /* If this becomes part of the API, it might need a better name. */
3321 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3328 PL_curcop == &PL_compiling
3330 : PL_curcop->cop_seq;
3332 for (si = PL_curstackinfo; si; si = si->si_prev) {
3334 for (ix = si->si_cxix; ix >= 0; ix--) {
3335 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3337 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3338 cv = cx->blk_sub.cv;
3339 /* skip DB:: code */
3340 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3341 *db_seqp = cx->blk_oldcop->cop_seq;
3344 if (cx->cx_type & CXp_SUB_RE)
3347 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3348 cv = cx->blk_eval.cv;
3351 case FIND_RUNCV_padid_eq:
3353 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3356 case FIND_RUNCV_level_eq:
3357 if (level++ != arg) continue;
3365 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3369 /* Run yyparse() in a setjmp wrapper. Returns:
3370 * 0: yyparse() successful
3371 * 1: yyparse() failed
3375 S_try_yyparse(pTHX_ int gramtype)
3380 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3384 ret = yyparse(gramtype) ? 1 : 0;
3391 NOT_REACHED; /* NOTREACHED */
3398 /* Compile a require/do or an eval ''.
3400 * outside is the lexically enclosing CV (if any) that invoked us.
3401 * seq is the current COP scope value.
3402 * hh is the saved hints hash, if any.
3404 * Returns a bool indicating whether the compile was successful; if so,
3405 * PL_eval_start contains the first op of the compiled code; otherwise,
3408 * This function is called from two places: pp_require and pp_entereval.
3409 * These can be distinguished by whether PL_op is entereval.
3413 S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
3416 OP * const saveop = PL_op;
3417 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3418 COP * const oldcurcop = PL_curcop;
3419 bool in_require = (saveop->op_type == OP_REQUIRE);
3423 PL_in_eval = (in_require
3424 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3426 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3427 ? EVAL_RE_REPARSING : 0)));
3431 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3433 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3434 CX_CUR()->blk_eval.cv = evalcv;
3435 CX_CUR()->blk_gimme = gimme;
3437 CvOUTSIDE_SEQ(evalcv) = seq;
3438 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3440 /* set up a scratch pad */
3442 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3443 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3446 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3448 /* make sure we compile in the right package */
3450 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3451 SAVEGENERICSV(PL_curstash);
3452 PL_curstash = (HV *)CopSTASH(PL_curcop);
3453 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3455 SvREFCNT_inc_simple_void(PL_curstash);
3456 save_item(PL_curstname);
3457 sv_sethek(PL_curstname, HvNAME_HEK(PL_curstash));
3460 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3461 SAVESPTR(PL_beginav);
3462 PL_beginav = newAV();
3463 SAVEFREESV(PL_beginav);
3464 SAVESPTR(PL_unitcheckav);
3465 PL_unitcheckav = newAV();
3466 SAVEFREESV(PL_unitcheckav);
3469 ENTER_with_name("evalcomp");
3470 SAVESPTR(PL_compcv);
3473 /* try to compile it */
3475 PL_eval_root = NULL;
3476 PL_curcop = &PL_compiling;
3477 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3478 PL_in_eval |= EVAL_KEEPERR;
3485 hv_clear(GvHV(PL_hintgv));
3489 PL_hints = saveop->op_private & OPpEVAL_COPHH
3490 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
3492 /* making 'use re eval' not be in scope when compiling the
3493 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3494 * infinite recursion when S_has_runtime_code() gives a false
3495 * positive: the second time round, HINT_RE_EVAL isn't set so we
3496 * don't bother calling S_has_runtime_code() */
3497 if (PL_in_eval & EVAL_RE_REPARSING)
3498 PL_hints &= ~HINT_RE_EVAL;
3501 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3502 SvREFCNT_dec(GvHV(PL_hintgv));
3503 GvHV(PL_hintgv) = hh;
3504 FETCHFEATUREBITSHH(hh);
3507 SAVECOMPILEWARNINGS();
3509 if (PL_dowarn & G_WARN_ALL_ON)
3510 PL_compiling.cop_warnings = pWARN_ALL ;
3511 else if (PL_dowarn & G_WARN_ALL_OFF)
3512 PL_compiling.cop_warnings = pWARN_NONE ;
3514 PL_compiling.cop_warnings = pWARN_STD ;
3517 PL_compiling.cop_warnings =
3518 DUP_WARNINGS(oldcurcop->cop_warnings);
3519 cophh_free(CopHINTHASH_get(&PL_compiling));
3520 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3521 /* The label, if present, is the first entry on the chain. So rather
3522 than writing a blank label in front of it (which involves an
3523 allocation), just use the next entry in the chain. */
3524 PL_compiling.cop_hints_hash
3525 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3526 /* Check the assumption that this removed the label. */
3527 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3530 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3533 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3535 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3536 * so honour CATCH_GET and trap it here if necessary */
3539 /* compile the code */
3540 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3542 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3547 /* note that if yystatus == 3, then the require/eval died during
3548 * compilation, so the EVAL CX block has already been popped, and
3549 * various vars restored */
3550 if (yystatus != 3) {
3552 op_free(PL_eval_root);
3553 PL_eval_root = NULL;
3555 SP = PL_stack_base + POPMARK; /* pop original mark */
3557 assert(CxTYPE(cx) == CXt_EVAL);
3558 /* pop the CXt_EVAL, and if was a require, croak */
3559 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
3562 /* die_unwind() re-croaks when in require, having popped the
3563 * require EVAL context. So we should never catch a require
3565 assert(!in_require);
3568 if (!*(SvPV_nolen_const(errsv)))
3569 sv_setpvs(errsv, "Compilation error");
3571 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3576 /* Compilation successful. Now clean up */
3578 LEAVE_with_name("evalcomp");
3580 CopLINE_set(&PL_compiling, 0);
3581 SAVEFREEOP(PL_eval_root);
3582 cv_forget_slab(evalcv);
3584 DEBUG_x(dump_eval());
3586 /* Register with debugger: */
3587 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3588 CV * const cv = get_cvs("DB::postponed", 0);
3592 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3594 call_sv(MUTABLE_SV(cv), G_DISCARD);
3598 if (PL_unitcheckav) {
3599 OP *es = PL_eval_start;
3600 call_list(PL_scopestack_ix, PL_unitcheckav);
3604 CvDEPTH(evalcv) = 1;
3605 SP = PL_stack_base + POPMARK; /* pop original mark */
3606 PL_op = saveop; /* The caller may need it. */
3607 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3613 /* Return NULL if the file doesn't exist or isn't a file;
3614 * else return PerlIO_openn().
3618 S_check_type_and_open(pTHX_ SV *name)
3623 const char *p = SvPV_const(name, len);
3626 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3628 /* checking here captures a reasonable error message when
3629 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3630 * user gets a confusing message about looking for the .pmc file
3631 * rather than for the .pm file so do the check in S_doopen_pm when
3632 * PMC is on instead of here. S_doopen_pm calls this func.
3633 * This check prevents a \0 in @INC causing problems.
3635 #ifdef PERL_DISABLE_PMC
3636 if (!IS_SAFE_PATHNAME(p, len, "require"))
3640 /* on Win32 stat is expensive (it does an open() and close() twice and
3641 a couple other IO calls), the open will fail with a dir on its own with
3642 errno EACCES, so only do a stat to separate a dir from a real EACCES
3643 caused by user perms */
3645 st_rc = PerlLIO_stat(p, &st);
3651 if(S_ISBLK(st.st_mode)) {
3655 else if(S_ISDIR(st.st_mode)) {
3664 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3666 /* EACCES stops the INC search early in pp_require to implement
3667 feature RT #113422 */
3668 if(!retio && errno == EACCES) { /* exists but probably a directory */
3670 st_rc = PerlLIO_stat(p, &st);
3672 if(S_ISDIR(st.st_mode))
3674 else if(S_ISBLK(st.st_mode))
3685 /* doopen_pm(): return the equivalent of PerlIO_openn() on the given name,
3686 * but first check for bad names (\0) and non-files.
3687 * Also if the filename ends in .pm and unless PERL_DISABLE_PMC,
3688 * try loading Foo.pmc first.
3690 #ifndef PERL_DISABLE_PMC
3692 S_doopen_pm(pTHX_ SV *name)
3695 const char *p = SvPV_const(name, namelen);
3697 PERL_ARGS_ASSERT_DOOPEN_PM;
3699 /* check the name before trying for the .pmc name to avoid the
3700 * warning referring to the .pmc which the user probably doesn't
3701 * know or care about
3703 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3706 if (memENDPs(p, namelen, ".pm")) {
3707 SV *const pmcsv = sv_newmortal();
3710 SvSetSV_nosteal(pmcsv,name);
3711 sv_catpvs(pmcsv, "c");
3713 pmcio = check_type_and_open(pmcsv);
3717 return check_type_and_open(name);
3720 # define doopen_pm(name) check_type_and_open(name)
3721 #endif /* !PERL_DISABLE_PMC */
3723 /* require doesn't search in @INC for absolute names, or when the name is
3724 explicitly relative the current directory: i.e. ./, ../ */
3725 PERL_STATIC_INLINE bool
3726 S_path_is_searchable(const char *name)
3728 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3730 if (PERL_FILE_IS_ABSOLUTE(name)
3732 || (*name == '.' && ((name[1] == '/' ||
3733 (name[1] == '.' && name[2] == '/'))
3734 || (name[1] == '\\' ||
3735 ( name[1] == '.' && name[2] == '\\')))
3738 || (*name == '.' && (name[1] == '/' ||
3739 (name[1] == '.' && name[2] == '/')))
3750 /* implement 'require 5.010001' */
3753 S_require_version(pTHX_ SV *sv)
3757 sv = sv_2mortal(new_version(sv));
3758 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3759 upg_version(PL_patchlevel, TRUE);
3760 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3761 if ( vcmp(sv,PL_patchlevel) <= 0 )
3762 DIE(aTHX_ "Perls since %" SVf " too modern--this is %" SVf ", stopped",
3763 SVfARG(sv_2mortal(vnormal(sv))),
3764 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3768 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3771 SV * const req = SvRV(sv);
3772 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3774 /* get the left hand term */
3775 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3777 first = SvIV(*av_fetch(lav,0,0));
3778 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3779 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3780 || av_tindex(lav) > 1 /* FP with > 3 digits */
3781 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3783 DIE(aTHX_ "Perl %" SVf " required--this is only "
3784 "%" SVf ", stopped",
3785 SVfARG(sv_2mortal(vnormal(req))),
3786 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3789 else { /* probably 'use 5.10' or 'use 5.8' */
3793 if (av_tindex(lav)>=1)
3794 second = SvIV(*av_fetch(lav,1,0));
3796 second /= second >= 600 ? 100 : 10;
3797 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3798 (int)first, (int)second);
3799 upg_version(hintsv, TRUE);
3801 DIE(aTHX_ "Perl %" SVf " required (did you mean %" SVf "?)"
3802 "--this is only %" SVf ", stopped",
3803 SVfARG(sv_2mortal(vnormal(req))),
3804 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3805 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3814 /* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3815 * The first form will have already been converted at compile time to
3816 * the second form */
3819 S_require_file(pTHX_ SV *sv)
3829 int vms_unixname = 0;
3832 /* tryname is the actual pathname (with @INC prefix) which was loaded.
3833 * It's stored as a value in %INC, and used for error messages */
3834 const char *tryname = NULL;
3835 SV *namesv = NULL; /* SV equivalent of tryname */
3836 const U8 gimme = GIMME_V;
3837 int filter_has_file = 0;
3838 PerlIO *tryrsfp = NULL;
3839 SV *filter_cache = NULL;
3840 SV *filter_state = NULL;
3841 SV *filter_sub = NULL;
3845 bool path_searchable;
3846 I32 old_savestack_ix;
3847 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3848 const char *const op_name = op_is_require ? "require" : "do";
3849 SV ** svp_cached = NULL;
3851 assert(op_is_require || PL_op->op_type == OP_DOFILE);
3854 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3855 name = SvPV_nomg_const(sv, len);
3856 if (!(name && len > 0 && *name))
3857 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3860 /* try to return earlier (save the SAFE_PATHNAME check) if INC already got the name */
3861 if (op_is_require) {
3862 /* can optimize to only perform one single lookup */
3863 svp_cached = hv_fetch(GvHVn(PL_incgv), (char*) name, len, 0);
3864 if ( svp_cached && *svp_cached != &PL_sv_undef ) RETPUSHYES;
3868 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3869 if (!op_is_require) {
3873 DIE(aTHX_ "Can't locate %s: %s",
3874 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3875 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3878 TAINT_PROPER(op_name);
3880 path_searchable = path_is_searchable(name);
3883 /* The key in the %ENV hash is in the syntax of file passed as the argument
3884 * usually this is in UNIX format, but sometimes in VMS format, which
3885 * can result in a module being pulled in more than once.
3886 * To prevent this, the key must be stored in UNIX format if the VMS
3887 * name can be translated to UNIX.
3891 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3893 unixlen = strlen(unixname);
3899 /* if not VMS or VMS name can not be translated to UNIX, pass it
3902 unixname = (char *) name;
3905 if (op_is_require) {
3906 /* reuse the previous hv_fetch result if possible */
3907 SV * const * const svp = svp_cached ? svp_cached : hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3909 if (*svp != &PL_sv_undef)
3912 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3913 "Compilation failed in require", unixname);
3916 /*XXX OPf_KIDS should always be true? -dapm 4/2017 */
3917 if (PL_op->op_flags & OPf_KIDS) {
3918 SVOP * const kid = (SVOP*)cUNOP->op_first;
3920 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3921 /* Make sure that a bareword module name (e.g. ::Foo::Bar)
3922 * doesn't map to a naughty pathname like /Foo/Bar.pm.
3923 * Note that the parser will normally detect such errors
3924 * at compile time before we reach here, but
3925 * Perl_load_module() can fake up an identical optree
3926 * without going near the parser, and being able to put
3927 * anything as the bareword. So we include a duplicate set
3928 * of checks here at runtime.
3930 const STRLEN package_len = len - 3;
3931 const char slashdot[2] = {'/', '.'};
3933 const char backslashdot[2] = {'\\', '.'};
3936 /* Disallow *purported* barewords that map to absolute
3937 filenames, filenames relative to the current or parent
3938 directory, or (*nix) hidden filenames. Also sanity check
3939 that the generated filename ends .pm */
3940 if (!path_searchable || len < 3 || name[0] == '.'
3941 || !memEQs(name + package_len, len - package_len, ".pm"))
3942 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%" SVf "\"", sv);
3943 if (memchr(name, 0, package_len)) {
3944 /* diag_listed_as: Bareword in require contains "%s" */
3945 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3947 if (ninstr(name, name + package_len, slashdot,
3948 slashdot + sizeof(slashdot))) {
3949 /* diag_listed_as: Bareword in require contains "%s" */
3950 DIE(aTHX_ "Bareword in require contains \"/.\"");
3953 if (ninstr(name, name + package_len, backslashdot,
3954 backslashdot + sizeof(backslashdot))) {
3955 /* diag_listed_as: Bareword in require contains "%s" */
3956 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3963 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
3965 /* Try to locate and open a file, possibly using @INC */
3967 /* with "/foo/bar.pm", "./foo.pm" and "../foo/bar.pm", try to load
3968 * the file directly rather than via @INC ... */
3969 if (!path_searchable) {
3970 /* At this point, name is SvPVX(sv) */
3972 tryrsfp = doopen_pm(sv);
3975 /* ... but if we fail, still search @INC for code references;
3976 * these are applied even on on-searchable paths (except
3977 * if we got EACESS).
3979 * For searchable paths, just search @INC normally
3981 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3982 AV * const ar = GvAVn(PL_incgv);
3989 namesv = newSV_type(SVt_PV);
3990 for (i = 0; i <= AvFILL(ar); i++) {
3991 SV * const dirsv = *av_fetch(ar, i, TRUE);
3999 if (SvTYPE(SvRV(loader)) == SVt_PVAV
4000 && !SvOBJECT(SvRV(loader)))
4002 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
4006 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%" UVxf "/%s",
4007 PTR2UV(SvRV(dirsv)), name);
4008 tryname = SvPVX_const(namesv);
4011 if (SvPADTMP(nsv)) {
4012 nsv = sv_newmortal();
4013 SvSetSV_nosteal(nsv,sv);
4016 ENTER_with_name("call_INC");
4024 if (SvGMAGICAL(loader)) {
4025 SV *l = sv_newmortal();
4026 sv_setsv_nomg(l, loader);
4029 if (sv_isobject(loader))
4030 count = call_method("INC", G_ARRAY);
4032 count = call_sv(loader, G_ARRAY);
4042 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
4043 && !isGV_with_GP(SvRV(arg))) {
4044 filter_cache = SvRV(arg);
4051 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
4055 if (isGV_with_GP(arg)) {
4056 IO * const io = GvIO((const GV *)arg);
4061 tryrsfp = IoIFP(io);
4062 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
4063 PerlIO_close(IoOFP(io));
4074 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
4076 SvREFCNT_inc_simple_void_NN(filter_sub);
4079 filter_state = SP[i];
4080 SvREFCNT_inc_simple_void(filter_state);
4084 if (!tryrsfp && (filter_cache || filter_sub)) {
4085 tryrsfp = PerlIO_open(BIT_BUCKET,
4091 /* FREETMPS may free our filter_cache */
4092 SvREFCNT_inc_simple_void(filter_cache);
4096 LEAVE_with_name("call_INC");
4098 /* Now re-mortalize it. */
4099 sv_2mortal(filter_cache);
4101 /* Adjust file name if the hook has set an %INC entry.
4102 This needs to happen after the FREETMPS above. */
4103 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
4105 tryname = SvPV_nolen_const(*svp);
4112 filter_has_file = 0;
4113 filter_cache = NULL;
4115 SvREFCNT_dec_NN(filter_state);
4116 filter_state = NULL;
4119 SvREFCNT_dec_NN(filter_sub);
4123 else if (path_searchable) {
4124 /* match against a plain @INC element (non-searchable
4125 * paths are only matched against refs in @INC) */
4130 dir = SvPV_nomg_const(dirsv, dirlen);
4136 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
4140 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
4143 sv_setpv(namesv, unixdir);
4144 sv_catpv(namesv, unixname);
4145 #elif defined(__SYMBIAN32__)
4146 if (PL_origfilename[0] &&
4147 PL_origfilename[1] == ':' &&
4148 !(dir[0] && dir[1] == ':'))
4149 Perl_sv_setpvf(aTHX_ namesv,
4154 Perl_sv_setpvf(aTHX_ namesv,
4158 /* The equivalent of
4159 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4160 but without the need to parse the format string, or
4161 call strlen on either pointer, and with the correct
4162 allocation up front. */
4164 char *tmp = SvGROW(namesv, dirlen + len + 2);
4166 memcpy(tmp, dir, dirlen);
4169 /* Avoid '<dir>//<file>' */
4170 if (!dirlen || *(tmp-1) != '/') {
4173 /* So SvCUR_set reports the correct length below */
4177 /* name came from an SV, so it will have a '\0' at the
4178 end that we can copy as part of this memcpy(). */
4179 memcpy(tmp, name, len + 1);
4181 SvCUR_set(namesv, dirlen + len + 1);
4185 TAINT_PROPER(op_name);
4186 tryname = SvPVX_const(namesv);
4187 tryrsfp = doopen_pm(namesv);
4189 if (tryname[0] == '.' && tryname[1] == '/') {
4191 while (*++tryname == '/') {}
4195 else if (errno == EMFILE || errno == EACCES) {
4196 /* no point in trying other paths if out of handles;
4197 * on the other hand, if we couldn't open one of the
4198 * files, then going on with the search could lead to
4199 * unexpected results; see perl #113422
4208 /* at this point we've ether opened a file (tryrsfp) or set errno */
4210 saved_errno = errno; /* sv_2mortal can realloc things */
4213 /* we failed; croak if require() or return undef if do() */
4214 if (op_is_require) {
4215 if(saved_errno == EMFILE || saved_errno == EACCES) {
4216 /* diag_listed_as: Can't locate %s */
4217 DIE(aTHX_ "Can't locate %s: %s: %s",
4218 name, tryname, Strerror(saved_errno));
4220 if (path_searchable) { /* did we lookup @INC? */
4221 AV * const ar = GvAVn(PL_incgv);
4223 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4224 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4225 for (i = 0; i <= AvFILL(ar); i++) {
4226 sv_catpvs(inc, " ");
4227 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4229 if (memENDPs(name, len, ".pm")) {
4230 const char *e = name + len - (sizeof(".pm") - 1);
4232 bool utf8 = cBOOL(SvUTF8(sv));
4234 /* if the filename, when converted from "Foo/Bar.pm"
4235 * form back to Foo::Bar form, makes a valid
4236 * package name (i.e. parseable by C<require
4237 * Foo::Bar>), then emit a hint.
4239 * this loop is modelled after the one in
4243 if (utf8 && isIDFIRST_utf8_safe(c, e)) {
4245 while (c < e && isIDCONT_utf8_safe(
4246 (const U8*) c, (const U8*) e))
4249 else if (isWORDCHAR_A(*c)) {
4250 while (c < e && isWORDCHAR_A(*c))
4259 if (c == e && isIDFIRST_lazy_if_safe(name, e, utf8)) {
4260 sv_catpvs(msg, " (you may need to install the ");
4261 for (c = name; c < e; c++) {
4263 sv_catpvs(msg, "::");
4266 sv_catpvn(msg, c, 1);
4269 sv_catpvs(msg, " module)");
4272 else if (memENDs(name, len, ".h")) {
4273 sv_catpvs(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4275 else if (memENDs(name, len, ".ph")) {
4276 sv_catpvs(msg, " (did you run h2ph?)");
4279 /* diag_listed_as: Can't locate %s */
4281 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4285 DIE(aTHX_ "Can't locate %s", name);
4288 #ifdef DEFAULT_INC_EXCLUDES_DOT
4292 /* the complication is to match the logic from doopen_pm() so
4293 * we don't treat do "sda1" as a previously successful "do".
4295 bool do_warn = namesv && ckWARN_d(WARN_DEPRECATED)
4296 && PerlLIO_stat(name, &st) == 0 && !S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode)
4297 && (io = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &sv)) != NULL;
4303 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4304 "do \"%s\" failed, '.' is no longer in @INC; "
4305 "did you mean do \"./%s\"?",
4314 SETERRNO(0, SS_NORMAL);
4316 /* Update %INC. Assume success here to prevent recursive requirement. */
4317 /* name is never assigned to again, so len is still strlen(name) */
4318 /* Check whether a hook in @INC has already filled %INC */
4320 (void)hv_store(GvHVn(PL_incgv),
4321 unixname, unixlen, newSVpv(tryname,0),0);
4323 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4325 (void)hv_store(GvHVn(PL_incgv),
4326 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4329 /* Now parse the file */
4331 old_savestack_ix = PL_savestack_ix;
4332 SAVECOPFILE_FREE(&PL_compiling);
4333 CopFILE_set(&PL_compiling, tryname);
4334 lex_start(NULL, tryrsfp, 0);
4336 if (filter_sub || filter_cache) {
4337 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4338 than hanging another SV from it. In turn, filter_add() optionally
4339 takes the SV to use as the filter (or creates a new SV if passed
4340 NULL), so simply pass in whatever value filter_cache has. */
4341 SV * const fc = filter_cache ? newSV(0) : NULL;
4343 if (fc) sv_copypv(fc, filter_cache);
4344 datasv = filter_add(S_run_user_filter, fc);
4345 IoLINES(datasv) = filter_has_file;
4346 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4347 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4350 /* switch to eval mode */
4352 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
4353 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
4355 SAVECOPLINE(&PL_compiling);
4356 CopLINE_set(&PL_compiling, 0);
4360 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
4363 op = PL_op->op_next;
4365 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
4371 /* also used for: pp_dofile() */
4375 RUN_PP_CATCHABLY(Perl_pp_require);
4382 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4383 ? S_require_version(aTHX_ sv)
4384 : S_require_file(aTHX_ sv);
4389 /* This is a op added to hold the hints hash for
4390 pp_entereval. The hash can be modified by the code
4391 being eval'ed, so we return a copy instead. */
4396 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4408 char tbuf[TYPE_DIGITS(long) + 12];
4416 I32 old_savestack_ix;
4418 RUN_PP_CATCHABLY(Perl_pp_entereval);
4421 was = PL_breakable_sub_gen;
4422 saved_delete = FALSE;
4426 bytes = PL_op->op_private & OPpEVAL_BYTES;
4428 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4429 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4431 else if (PL_hints & HINT_LOCALIZE_HH || (
4432 PL_op->op_private & OPpEVAL_COPHH
4433 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4435 saved_hh = cop_hints_2hv(PL_curcop, 0);
4436 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4440 /* make sure we've got a plain PV (no overload etc) before testing
4441 * for taint. Making a copy here is probably overkill, but better
4442 * safe than sorry */
4444 const char * const p = SvPV_const(sv, len);
4446 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4447 lex_flags |= LEX_START_COPIED;
4449 if (bytes && SvUTF8(sv))
4450 SvPVbyte_force(sv, len);
4452 else if (bytes && SvUTF8(sv)) {
4453 /* Don't modify someone else's scalar */
4456 (void)sv_2mortal(sv);
4457 SvPVbyte_force(sv,len);
4458 lex_flags |= LEX_START_COPIED;
4461 TAINT_IF(SvTAINTED(sv));
4462 TAINT_PROPER("eval");
4464 old_savestack_ix = PL_savestack_ix;
4466 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4467 ? LEX_IGNORE_UTF8_HINTS
4468 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4472 /* switch to eval mode */
4474 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4475 SV * const temp_sv = sv_newmortal();
4476 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%" IVdf "]",
4477 (unsigned long)++PL_evalseq,
4478 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4479 tmpbuf = SvPVX(temp_sv);
4480 len = SvCUR(temp_sv);
4483 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4484 SAVECOPFILE_FREE(&PL_compiling);
4485 CopFILE_set(&PL_compiling, tmpbuf+2);
4486 SAVECOPLINE(&PL_compiling);
4487 CopLINE_set(&PL_compiling, 1);
4488 /* special case: an eval '' executed within the DB package gets lexically
4489 * placed in the first non-DB CV rather than the current CV - this
4490 * allows the debugger to execute code, find lexicals etc, in the
4491 * scope of the code being debugged. Passing &seq gets find_runcv
4492 * to do the dirty work for us */
4493 runcv = find_runcv(&seq);
4496 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
4497 cx_pusheval(cx, PL_op->op_next, NULL);
4499 /* prepare to compile string */
4501 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4502 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4504 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4505 deleting the eval's FILEGV from the stash before gv_check() runs
4506 (i.e. before run-time proper). To work around the coredump that
4507 ensues, we always turn GvMULTI_on for any globals that were
4508 introduced within evals. See force_ident(). GSAR 96-10-12 */
4509 char *const safestr = savepvn(tmpbuf, len);
4510 SAVEDELETE(PL_defstash, safestr, len);
4511 saved_delete = TRUE;
4516 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
4517 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4518 ? PERLDB_LINE_OR_SAVESRC
4519 : PERLDB_SAVESRC_NOSUBS) {
4520 /* Retain the filegv we created. */
4521 } else if (!saved_delete) {
4522 char *const safestr = savepvn(tmpbuf, len);
4523 SAVEDELETE(PL_defstash, safestr, len);
4525 return PL_eval_start;
4527 /* We have already left the scope set up earlier thanks to the LEAVE
4528 in doeval_compile(). */
4529 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4530 ? PERLDB_LINE_OR_SAVESRC
4531 : PERLDB_SAVESRC_INVALID) {
4532 /* Retain the filegv we created. */
4533 } else if (!saved_delete) {
4534 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4536 return PL_op->op_next;
4541 /* also tail-called by pp_return */
4556 assert(CxTYPE(cx) == CXt_EVAL);
4558 oldsp = PL_stack_base + cx->blk_oldsp;
4559 gimme = cx->blk_gimme;
4561 /* did require return a false value? */
4562 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4563 && !(gimme == G_SCALAR
4564 ? SvTRUE_NN(*PL_stack_sp)
4565 : PL_stack_sp > oldsp);
4567 if (gimme == G_VOID) {
4568 PL_stack_sp = oldsp;
4569 /* free now to avoid late-called destructors clobbering $@ */
4573 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
4575 /* the cx_popeval does a leavescope, which frees the optree associated
4576 * with eval, which if it frees the nextstate associated with
4577 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4578 * regex when running under 'use re Debug' because it needs PL_curcop
4579 * to get the current hints. So restore it early.
4581 PL_curcop = cx->blk_oldcop;
4583 /* grab this value before cx_popeval restores the old PL_in_eval */
4584 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4585 retop = cx->blk_eval.retop;
4586 evalcv = cx->blk_eval.cv;
4588 assert(CvDEPTH(evalcv) == 1);
4590 CvDEPTH(evalcv) = 0;
4592 /* pop the CXt_EVAL, and if a require failed, croak */
4593 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
4601 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4602 close to the related Perl_create_eval_scope. */
4604 Perl_delete_eval_scope(pTHX)
4615 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4616 also needed by Perl_fold_constants. */
4618 Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
4621 const U8 gimme = GIMME_V;
4623 cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
4624 PL_stack_sp, PL_savestack_ix);
4625 cx_pusheval(cx, retop, NULL);
4627 PL_in_eval = EVAL_INEVAL;
4628 if (flags & G_KEEPERR)
4629 PL_in_eval |= EVAL_KEEPERR;
4632 if (flags & G_FAKINGEVAL) {
4633 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4639 RUN_PP_CATCHABLY(Perl_pp_entertry);
4642 create_eval_scope(cLOGOP->op_other->op_next, 0);
4643 return PL_op->op_next;
4647 /* also tail-called by pp_return */
4659 assert(CxTYPE(cx) == CXt_EVAL);
4660 oldsp = PL_stack_base + cx->blk_oldsp;
4661 gimme = cx->blk_gimme;
4663 if (gimme == G_VOID) {
4664 PL_stack_sp = oldsp;
4665 /* free now to avoid late-called destructors clobbering $@ */
4669 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4673 retop = cx->blk_eval.retop;
4684 const U8 gimme = GIMME_V;
4688 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4689 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
4691 cx = cx_pushblock(CXt_GIVEN, gimme, SP, PL_savestack_ix);
4692 cx_pushgiven(cx, origsv);
4702 PERL_UNUSED_CONTEXT;
4705 assert(CxTYPE(cx) == CXt_GIVEN);
4706 oldsp = PL_stack_base + cx->blk_oldsp;
4707 gimme = cx->blk_gimme;
4709 if (gimme == G_VOID)
4710 PL_stack_sp = oldsp;
4712 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4722 /* Helper routines used by pp_smartmatch */
4724 S_make_matcher(pTHX_ REGEXP *re)
4726 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4728 PERL_ARGS_ASSERT_MAKE_MATCHER;
4730 PM_SETRE(matcher, ReREFCNT_inc(re));
4732 SAVEFREEOP((OP *) matcher);
4733 ENTER_with_name("matcher"); SAVETMPS;
4739 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4744 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4746 PL_op = (OP *) matcher;
4749 (void) Perl_pp_match(aTHX);
4751 result = SvTRUEx(POPs);
4758 S_destroy_matcher(pTHX_ PMOP *matcher)
4760 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4761 PERL_UNUSED_ARG(matcher);
4764 LEAVE_with_name("matcher");
4767 /* Do a smart match */
4770 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4771 return do_smartmatch(NULL, NULL, 0);
4774 /* This version of do_smartmatch() implements the
4775 * table of smart matches that is found in perlsyn.
4778 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4782 bool object_on_left = FALSE;
4783 SV *e = TOPs; /* e is for 'expression' */
4784 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4786 /* Take care only to invoke mg_get() once for each argument.
4787 * Currently we do this by copying the SV if it's magical. */
4789 if (!copied && SvGMAGICAL(d))
4790 d = sv_mortalcopy(d);
4797 e = sv_mortalcopy(e);
4799 /* First of all, handle overload magic of the rightmost argument */
4802 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4803 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4805 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4812 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4815 SP -= 2; /* Pop the values */
4820 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4827 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4828 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4829 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4831 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4832 object_on_left = TRUE;
4835 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4837 if (object_on_left) {
4838 goto sm_any_sub; /* Treat objects like scalars */
4840 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4841 /* Test sub truth for each key */
4843 bool andedresults = TRUE;
4844 HV *hv = (HV*) SvRV(d);
4845 I32 numkeys = hv_iterinit(hv);
4846 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4849 while ( (he = hv_iternext(hv)) ) {
4850 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4851 ENTER_with_name("smartmatch_hash_key_test");
4854 PUSHs(hv_iterkeysv(he));
4856 c = call_sv(e, G_SCALAR);
4859 andedresults = FALSE;
4861 andedresults = SvTRUEx(POPs) && andedresults;
4863 LEAVE_with_name("smartmatch_hash_key_test");
4870 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4871 /* Test sub truth for each element */
4873 bool andedresults = TRUE;
4874 AV *av = (AV*) SvRV(d);
4875 const I32 len = av_tindex(av);
4876 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4879 for (i = 0; i <= len; ++i) {
4880 SV * const * const svp = av_fetch(av, i, FALSE);
4881 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4882 ENTER_with_name("smartmatch_array_elem_test");
4888 c = call_sv(e, G_SCALAR);
4891 andedresults = FALSE;
4893 andedresults = SvTRUEx(POPs) && andedresults;
4895 LEAVE_with_name("smartmatch_array_elem_test");
4904 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4905 ENTER_with_name("smartmatch_coderef");
4910 c = call_sv(e, G_SCALAR);
4914 else if (SvTEMP(TOPs))
4915 SvREFCNT_inc_void(TOPs);
4917 LEAVE_with_name("smartmatch_coderef");
4922 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4923 if (object_on_left) {
4924 goto sm_any_hash; /* Treat objects like scalars */
4926 else if (!SvOK(d)) {
4927 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4930 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4931 /* Check that the key-sets are identical */
4933 HV *other_hv = MUTABLE_HV(SvRV(d));
4936 U32 this_key_count = 0,
4937 other_key_count = 0;
4938 HV *hv = MUTABLE_HV(SvRV(e));
4940 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4941 /* Tied hashes don't know how many keys they have. */
4942 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4943 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4947 HV * const temp = other_hv;
4953 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4957 /* The hashes have the same number of keys, so it suffices
4958 to check that one is a subset of the other. */
4959 (void) hv_iterinit(hv);
4960 while ( (he = hv_iternext(hv)) ) {
4961 SV *key = hv_iterkeysv(he);
4963 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4966 if(!hv_exists_ent(other_hv, key, 0)) {
4967 (void) hv_iterinit(hv); /* reset iterator */
4973 (void) hv_iterinit(other_hv);
4974 while ( hv_iternext(other_hv) )
4978 other_key_count = HvUSEDKEYS(other_hv);
4980 if (this_key_count != other_key_count)
4985 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4986 AV * const other_av = MUTABLE_AV(SvRV(d));
4987 const SSize_t other_len = av_tindex(other_av) + 1;
4989 HV *hv = MUTABLE_HV(SvRV(e));
4991 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4992 for (i = 0; i < other_len; ++i) {
4993 SV ** const svp = av_fetch(other_av, i, FALSE);
4994 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4995 if (svp) { /* ??? When can this not happen? */
4996 if (hv_exists_ent(hv, *svp, 0))
5002 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
5003 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
5006 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
5008 HV *hv = MUTABLE_HV(SvRV(e));
5010 (void) hv_iterinit(hv);
5011 while ( (he = hv_iternext(hv)) ) {
5012 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
5014 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
5016 (void) hv_iterinit(hv);
5017 destroy_matcher(matcher);
5022 destroy_matcher(matcher);
5028 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
5029 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
5036 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
5037 if (object_on_left) {
5038 goto sm_any_array; /* Treat objects like scalars */
5040 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5041 AV * const other_av = MUTABLE_AV(SvRV(e));
5042 const SSize_t other_len = av_tindex(other_av) + 1;
5045 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
5046 for (i = 0; i < other_len; ++i) {
5047 SV ** const svp = av_fetch(other_av, i, FALSE);
5049 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
5050 if (svp) { /* ??? When can this not happen? */
5051 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
5057 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5058 AV *other_av = MUTABLE_AV(SvRV(d));
5059 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
5060 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
5064 const SSize_t other_len = av_tindex(other_av);
5066 if (NULL == seen_this) {
5067 seen_this = newHV();
5068 (void) sv_2mortal(MUTABLE_SV(seen_this));
5070 if (NULL == seen_other) {
5071 seen_other = newHV();
5072 (void) sv_2mortal(MUTABLE_SV(seen_other));
5074 for(i = 0; i <= other_len; ++i) {
5075 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5076 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
5078 if (!this_elem || !other_elem) {
5079 if ((this_elem && SvOK(*this_elem))
5080 || (other_elem && SvOK(*other_elem)))
5083 else if (hv_exists_ent(seen_this,
5084 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
5085 hv_exists_ent(seen_other,
5086 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
5088 if (*this_elem != *other_elem)
5092 (void)hv_store_ent(seen_this,
5093 sv_2mortal(newSViv(PTR2IV(*this_elem))),
5095 (void)hv_store_ent(seen_other,
5096 sv_2mortal(newSViv(PTR2IV(*other_elem))),
5102 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
5103 (void) do_smartmatch(seen_this, seen_other, 0);
5105 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5114 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
5115 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
5118 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
5119 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
5122 for(i = 0; i <= this_len; ++i) {
5123 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5124 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
5126 if (svp && matcher_matches_sv(matcher, *svp)) {
5128 destroy_matcher(matcher);
5133 destroy_matcher(matcher);
5137 else if (!SvOK(d)) {
5138 /* undef ~~ array */
5139 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
5142 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
5143 for (i = 0; i <= this_len; ++i) {
5144 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5145 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
5146 if (!svp || !SvOK(*svp))
5155 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
5157 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
5158 for (i = 0; i <= this_len; ++i) {
5159 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5166 /* infinite recursion isn't supposed to happen here */
5167 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
5168 (void) do_smartmatch(NULL, NULL, 1);
5170 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5179 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
5180 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5181 SV *t = d; d = e; e = t;
5182 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
5185 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5186 SV *t = d; d = e; e = t;
5187 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
5188 goto sm_regex_array;
5191 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
5194 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
5196 result = matcher_matches_sv(matcher, d);
5198 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
5199 destroy_matcher(matcher);
5204 /* See if there is overload magic on left */
5205 else if (object_on_left && SvAMAGIC(d)) {
5207 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
5208 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
5211 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
5219 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
5222 else if (!SvOK(d)) {
5223 /* undef ~~ scalar ; we already know that the scalar is SvOK */
5224 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
5229 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
5230 DEBUG_M(if (SvNIOK(e))
5231 Perl_deb(aTHX_ " applying rule Any-Num\n");
5233 Perl_deb(aTHX_ " applying rule Num-numish\n");
5235 /* numeric comparison */
5238 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
5239 (void) Perl_pp_i_eq(aTHX);
5241 (void) Perl_pp_eq(aTHX);
5249 /* As a last resort, use string comparison */
5250 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5253 return Perl_pp_seq(aTHX);
5260 const U8 gimme = GIMME_V;
5262 /* This is essentially an optimization: if the match
5263 fails, we don't want to push a context and then
5264 pop it again right away, so we skip straight
5265 to the op that follows the leavewhen.
5266 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5268 if (!(PL_op->op_flags & OPf_SPECIAL) && !SvTRUEx(POPs)) {
5269 if (gimme == G_SCALAR)
5270 PUSHs(&PL_sv_undef);
5271 RETURNOP(cLOGOP->op_other->op_next);
5274 cx = cx_pushblock(CXt_WHEN, gimme, SP, PL_savestack_ix);
5288 assert(CxTYPE(cx) == CXt_WHEN);
5289 gimme = cx->blk_gimme;
5291 cxix = dopoptogivenfor(cxstack_ix);
5293 /* diag_listed_as: Can't "when" outside a topicalizer */
5294 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5295 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5297 oldsp = PL_stack_base + cx->blk_oldsp;
5298 if (gimme == G_VOID)
5299 PL_stack_sp = oldsp;
5301 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
5303 /* pop the WHEN, BLOCK and anything else before the GIVEN/FOR */
5304 assert(cxix < cxstack_ix);
5307 cx = &cxstack[cxix];
5309 if (CxFOREACH(cx)) {
5310 /* emulate pp_next. Note that any stack(s) cleanup will be
5311 * done by the pp_unstack which op_nextop should point to */
5314 PL_curcop = cx->blk_oldcop;
5315 return cx->blk_loop.my_op->op_nextop;
5319 assert(cx->blk_givwhen.leave_op->op_type == OP_LEAVEGIVEN);
5320 return cx->blk_givwhen.leave_op;
5330 cxix = dopoptowhen(cxstack_ix);
5332 DIE(aTHX_ "Can't \"continue\" outside a when block");
5334 if (cxix < cxstack_ix)
5338 assert(CxTYPE(cx) == CXt_WHEN);
5339 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5343 nextop = cx->blk_givwhen.leave_op->op_next;
5354 cxix = dopoptogivenfor(cxstack_ix);
5356 DIE(aTHX_ "Can't \"break\" outside a given block");
5358 cx = &cxstack[cxix];
5360 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5362 if (cxix < cxstack_ix)
5365 /* Restore the sp at the time we entered the given block */
5367 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5369 return cx->blk_givwhen.leave_op;
5373 S_doparseform(pTHX_ SV *sv)
5376 char *s = SvPV(sv, len);
5378 char *base = NULL; /* start of current field */
5379 I32 skipspaces = 0; /* number of contiguous spaces seen */
5380 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5381 bool repeat = FALSE; /* ~~ seen on this line */
5382 bool postspace = FALSE; /* a text field may need right padding */
5385 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5387 bool ischop; /* it's a ^ rather than a @ */
5388 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5389 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5393 PERL_ARGS_ASSERT_DOPARSEFORM;
5396 Perl_croak(aTHX_ "Null picture in formline");
5398 if (SvTYPE(sv) >= SVt_PVMG) {
5399 /* This might, of course, still return NULL. */
5400 mg = mg_find(sv, PERL_MAGIC_fm);
5402 sv_upgrade(sv, SVt_PVMG);
5406 /* still the same as previously-compiled string? */
5407 SV *old = mg->mg_obj;
5408 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5409 && len == SvCUR(old)
5410 && strnEQ(SvPVX(old), s, len)
5412 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5416 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5417 Safefree(mg->mg_ptr);
5423 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5424 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5427 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5428 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5432 /* estimate the buffer size needed */
5433 for (base = s; s <= send; s++) {
5434 if (*s == '\n' || *s == '@' || *s == '^')
5440 Newx(fops, maxops, U32);
5445 *fpc++ = FF_LINEMARK;
5446 noblank = repeat = FALSE;
5464 case ' ': case '\t':
5480 *fpc++ = FF_LITERAL;
5488 *fpc++ = (U32)skipspaces;
5492 *fpc++ = FF_NEWLINE;
5496 arg = fpc - linepc + 1;
5503 *fpc++ = FF_LINEMARK;
5504 noblank = repeat = FALSE;
5513 ischop = s[-1] == '^';
5519 arg = (s - base) - 1;
5521 *fpc++ = FF_LITERAL;
5527 if (*s == '*') { /* @* or ^* */
5529 *fpc++ = 2; /* skip the @* or ^* */
5531 *fpc++ = FF_LINESNGL;
5534 *fpc++ = FF_LINEGLOB;
5536 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5537 arg = ischop ? FORM_NUM_BLANK : 0;
5542 const char * const f = ++s;
5545 arg |= FORM_NUM_POINT + (s - f);
5547 *fpc++ = s - base; /* fieldsize for FETCH */
5548 *fpc++ = FF_DECIMAL;
5550 unchopnum |= ! ischop;
5552 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5553 arg = ischop ? FORM_NUM_BLANK : 0;
5555 s++; /* skip the '0' first */
5559 const char * const f = ++s;
5562 arg |= FORM_NUM_POINT + (s - f);
5564 *fpc++ = s - base; /* fieldsize for FETCH */
5565 *fpc++ = FF_0DECIMAL;
5567 unchopnum |= ! ischop;
5569 else { /* text field */
5571 bool ismore = FALSE;
5574 while (*++s == '>') ;
5575 prespace = FF_SPACE;
5577 else if (*s == '|') {
5578 while (*++s == '|') ;
5579 prespace = FF_HALFSPACE;
5584 while (*++s == '<') ;
5587 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5591 *fpc++ = s - base; /* fieldsize for FETCH */
5593 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5596 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5610 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5613 mg->mg_ptr = (char *) fops;
5614 mg->mg_len = arg * sizeof(U32);
5615 mg->mg_obj = sv_copy;
5616 mg->mg_flags |= MGf_REFCOUNTED;
5618 if (unchopnum && repeat)
5619 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5626 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5628 /* Can value be printed in fldsize chars, using %*.*f ? */
5632 int intsize = fldsize - (value < 0 ? 1 : 0);
5634 if (frcsize & FORM_NUM_POINT)
5636 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5639 while (intsize--) pwr *= 10.0;
5640 while (frcsize--) eps /= 10.0;
5643 if (value + eps >= pwr)
5646 if (value - eps <= -pwr)
5653 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5655 SV * const datasv = FILTER_DATA(idx);
5656 const int filter_has_file = IoLINES(datasv);
5657 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5658 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5663 char *prune_from = NULL;
5664 bool read_from_cache = FALSE;
5668 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5670 assert(maxlen >= 0);
5673 /* I was having segfault trouble under Linux 2.2.5 after a
5674 parse error occurred. (Had to hack around it with a test
5675 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5676 not sure where the trouble is yet. XXX */
5679 SV *const cache = datasv;
5682 const char *cache_p = SvPV(cache, cache_len);
5686 /* Running in block mode and we have some cached data already.
5688 if (cache_len >= umaxlen) {
5689 /* In fact, so much data we don't even need to call
5694 const char *const first_nl =
5695 (const char *)memchr(cache_p, '\n', cache_len);
5697 take = first_nl + 1 - cache_p;
5701 sv_catpvn(buf_sv, cache_p, take);
5702 sv_chop(cache, cache_p + take);
5703 /* Definitely not EOF */
5707 sv_catsv(buf_sv, cache);
5709 umaxlen -= cache_len;
5712 read_from_cache = TRUE;
5716 /* Filter API says that the filter appends to the contents of the buffer.
5717 Usually the buffer is "", so the details don't matter. But if it's not,
5718 then clearly what it contains is already filtered by this filter, so we
5719 don't want to pass it in a second time.
5720 I'm going to use a mortal in case the upstream filter croaks. */
5721 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5722 ? sv_newmortal() : buf_sv;
5723 SvUPGRADE(upstream, SVt_PV);
5725 if (filter_has_file) {
5726 status = FILTER_READ(idx+1, upstream, 0);
5729 if (filter_sub && status >= 0) {
5733 ENTER_with_name("call_filter_sub");
5738 DEFSV_set(upstream);
5742 PUSHs(filter_state);
5745 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5755 SV * const errsv = ERRSV;
5756 if (SvTRUE_NN(errsv))
5757 err = newSVsv(errsv);
5763 LEAVE_with_name("call_filter_sub");
5766 if (SvGMAGICAL(upstream)) {
5768 if (upstream == buf_sv) mg_free(buf_sv);
5770 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5771 if(!err && SvOK(upstream)) {
5772 got_p = SvPV_nomg(upstream, got_len);
5774 if (got_len > umaxlen) {
5775 prune_from = got_p + umaxlen;
5778 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5779 if (first_nl && first_nl + 1 < got_p + got_len) {
5780 /* There's a second line here... */
5781 prune_from = first_nl + 1;
5785 if (!err && prune_from) {
5786 /* Oh. Too long. Stuff some in our cache. */
5787 STRLEN cached_len = got_p + got_len - prune_from;
5788 SV *const cache = datasv;
5791 /* Cache should be empty. */
5792 assert(!SvCUR(cache));
5795 sv_setpvn(cache, prune_from, cached_len);
5796 /* If you ask for block mode, you may well split UTF-8 characters.
5797 "If it breaks, you get to keep both parts"
5798 (Your code is broken if you don't put them back together again
5799 before something notices.) */
5800 if (SvUTF8(upstream)) {
5803 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5805 /* Cannot just use sv_setpvn, as that could free the buffer
5806 before we have a chance to assign it. */
5807 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5808 got_len - cached_len);
5810 /* Can't yet be EOF */
5815 /* If they are at EOF but buf_sv has something in it, then they may never
5816 have touched the SV upstream, so it may be undefined. If we naively
5817 concatenate it then we get a warning about use of uninitialised value.
5819 if (!err && upstream != buf_sv &&
5821 sv_catsv_nomg(buf_sv, upstream);
5823 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5826 IoLINES(datasv) = 0;
5828 SvREFCNT_dec(filter_state);
5829 IoTOP_GV(datasv) = NULL;
5832 SvREFCNT_dec(filter_sub);
5833 IoBOTTOM_GV(datasv) = NULL;
5835 filter_del(S_run_user_filter);
5841 if (status == 0 && read_from_cache) {
5842 /* If we read some data from the cache (and by getting here it implies
5843 that we emptied the cache) then we aren't yet at EOF, and mustn't
5844 report that to our caller. */
5851 * ex: set ts=8 sts=4 sw=4 et: