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 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 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;
1005 /* pp_grepwhile() lives in pp_hot.c */
1010 const U8 gimme = GIMME_V;
1011 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
1017 /* first, move source pointer to the next item in the source list */
1018 ++PL_markstack_ptr[-1];
1020 /* if there are new items, push them into the destination list */
1021 if (items && gimme != G_VOID) {
1022 /* might need to make room back there first */
1023 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1024 /* XXX this implementation is very pessimal because the stack
1025 * is repeatedly extended for every set of items. Is possible
1026 * to do this without any stack extension or copying at all
1027 * by maintaining a separate list over which the map iterates
1028 * (like foreach does). --gsar */
1030 /* everything in the stack after the destination list moves
1031 * towards the end the stack by the amount of room needed */
1032 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1034 /* items to shift up (accounting for the moved source pointer) */
1035 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1037 /* This optimization is by Ben Tilly and it does
1038 * things differently from what Sarathy (gsar)
1039 * is describing. The downside of this optimization is
1040 * that leaves "holes" (uninitialized and hopefully unused areas)
1041 * to the Perl stack, but on the other hand this
1042 * shouldn't be a problem. If Sarathy's idea gets
1043 * implemented, this optimization should become
1044 * irrelevant. --jhi */
1046 shift = count; /* Avoid shifting too often --Ben Tilly */
1050 dst = (SP += shift);
1051 PL_markstack_ptr[-1] += shift;
1052 *PL_markstack_ptr += shift;
1056 /* copy the new items down to the destination list */
1057 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1058 if (gimme == G_LIST) {
1059 /* add returned items to the collection (making mortal copies
1060 * if necessary), then clear the current temps stack frame
1061 * *except* for those items. We do this splicing the items
1062 * into the start of the tmps frame (so some items may be on
1063 * the tmps stack twice), then moving PL_tmps_floor above
1064 * them, then freeing the frame. That way, the only tmps that
1065 * accumulate over iterations are the return values for map.
1066 * We have to do to this way so that everything gets correctly
1067 * freed if we die during the map.
1071 /* make space for the slice */
1072 EXTEND_MORTAL(items);
1073 tmpsbase = PL_tmps_floor + 1;
1074 Move(PL_tmps_stack + tmpsbase,
1075 PL_tmps_stack + tmpsbase + items,
1076 PL_tmps_ix - PL_tmps_floor,
1078 PL_tmps_ix += items;
1083 sv = sv_mortalcopy(sv);
1085 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1087 /* clear the stack frame except for the items */
1088 PL_tmps_floor += items;
1090 /* FREETMPS may have cleared the TEMP flag on some of the items */
1093 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1096 /* scalar context: we don't care about which values map returns
1097 * (we use undef here). And so we certainly don't want to do mortal
1098 * copies of meaningless values. */
1099 while (items-- > 0) {
1101 *dst-- = &PL_sv_undef;
1109 LEAVE_with_name("grep_item"); /* exit inner scope */
1112 if (PL_markstack_ptr[-1] > TOPMARK) {
1114 (void)POPMARK; /* pop top */
1115 LEAVE_with_name("grep"); /* exit outer scope */
1116 (void)POPMARK; /* pop src */
1117 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1118 (void)POPMARK; /* pop dst */
1119 SP = PL_stack_base + POPMARK; /* pop original mark */
1120 if (gimme == G_SCALAR) {
1124 else if (gimme == G_LIST)
1131 ENTER_with_name("grep_item"); /* enter inner scope */
1134 /* set $_ to the new source item */
1135 src = PL_stack_base[PL_markstack_ptr[-1]];
1136 if (SvPADTMP(src)) {
1137 src = sv_mortalcopy(src);
1142 RETURNOP(cLOGOP->op_other);
1151 if (GIMME_V == G_LIST)
1154 if (SvTRUE_NN(targ))
1155 return cLOGOP->op_other;
1164 if (GIMME_V == G_LIST) {
1165 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1169 SV * const targ = PAD_SV(PL_op->op_targ);
1172 if (PL_op->op_private & OPpFLIP_LINENUM) {
1173 if (GvIO(PL_last_in_gv)) {
1174 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1177 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1179 flip = SvIV(sv) == SvIV(GvSV(gv));
1182 flip = SvTRUE_NN(sv);
1185 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1186 if (PL_op->op_flags & OPf_SPECIAL) {
1194 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1203 /* This code tries to decide if "$left .. $right" should use the
1204 magical string increment, or if the range is numeric. Initially,
1205 an exception was made for *any* string beginning with "0" (see
1206 [#18165], AMS 20021031), but now that is only applied when the
1207 string's length is also >1 - see the rules now documented in
1210 #define RANGE_IS_NUMERIC(left,right) ( \
1211 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1212 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1213 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1214 looks_like_number(left)) && SvPOKp(left) \
1215 && !(*SvPVX_const(left) == '0' && SvCUR(left)>1 ) )) \
1216 && (!SvOK(right) || looks_like_number(right))))
1222 if (GIMME_V == G_LIST) {
1228 if (RANGE_IS_NUMERIC(left,right)) {
1230 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1231 (SvOK(right) && (SvIOK(right)
1232 ? SvIsUV(right) && SvUV(right) > IV_MAX
1233 : SvNV_nomg(right) > (NV) IV_MAX)))
1234 DIE(aTHX_ "Range iterator outside integer range");
1235 i = SvIV_nomg(left);
1236 j = SvIV_nomg(right);
1238 /* Dance carefully around signed max. */
1239 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1242 /* The wraparound of signed integers is undefined
1243 * behavior, but here we aim for count >=1, and
1244 * negative count is just wrong. */
1246 #if IVSIZE > Size_t_size
1253 Perl_croak(aTHX_ "Out of memory during list extend");
1260 SV * const sv = sv_2mortal(newSViv(i));
1262 if (n) /* avoid incrementing above IV_MAX */
1268 const char * const lpv = SvPV_nomg_const(left, llen);
1269 const char * const tmps = SvPV_nomg_const(right, len);
1271 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1272 if (DO_UTF8(right) && IN_UNI_8_BIT)
1273 len = sv_len_utf8_nomg(right);
1274 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1276 if (strEQ(SvPVX_const(sv),tmps))
1278 sv = sv_2mortal(newSVsv(sv));
1285 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1289 if (PL_op->op_private & OPpFLIP_LINENUM) {
1290 if (GvIO(PL_last_in_gv)) {
1291 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1294 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1295 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1299 flop = SvTRUE_NN(sv);
1303 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1304 sv_catpvs(targ, "E0");
1314 static const char * const context_name[] = {
1316 NULL, /* CXt_WHEN never actually needs "block" */
1317 NULL, /* CXt_BLOCK never actually needs "block" */
1318 NULL, /* CXt_GIVEN never actually needs "block" */
1319 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1320 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1321 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1322 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1323 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
1331 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1335 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1337 for (i = cxstack_ix; i >= 0; i--) {
1338 const PERL_CONTEXT * const cx = &cxstack[i];
1339 switch (CxTYPE(cx)) {
1348 /* diag_listed_as: Exiting subroutine via %s */
1349 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1350 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1351 if (CxTYPE(cx) == CXt_NULL) /* sort BLOCK */
1354 case CXt_LOOP_PLAIN:
1355 case CXt_LOOP_LAZYIV:
1356 case CXt_LOOP_LAZYSV:
1360 STRLEN cx_label_len = 0;
1361 U32 cx_label_flags = 0;
1362 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1364 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1367 (const U8*)cx_label, cx_label_len,
1368 (const U8*)label, len) == 0)
1370 (const U8*)label, len,
1371 (const U8*)cx_label, cx_label_len) == 0)
1372 : (len == cx_label_len && ((cx_label == label)
1373 || memEQ(cx_label, label, len))) )) {
1374 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1375 (long)i, cx_label));
1378 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1389 Perl_dowantarray(pTHX)
1391 const U8 gimme = block_gimme();
1392 return (gimme == G_VOID) ? G_SCALAR : gimme;
1395 /* note that this function has mostly been superseded by Perl_gimme_V */
1398 Perl_block_gimme(pTHX)
1400 const I32 cxix = dopopto_cursub();
1405 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1407 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1413 Perl_is_lvalue_sub(pTHX)
1415 const I32 cxix = dopopto_cursub();
1416 assert(cxix >= 0); /* We should only be called from inside subs */
1418 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1419 return CxLVAL(cxstack + cxix);
1424 /* only used by cx_pushsub() */
1426 Perl_was_lvalue_sub(pTHX)
1428 const I32 cxix = dopoptosub(cxstack_ix-1);
1429 assert(cxix >= 0); /* We should only be called from inside subs */
1431 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1432 return CxLVAL(cxstack + cxix);
1438 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1442 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1444 PERL_UNUSED_CONTEXT;
1447 for (i = startingblock; i >= 0; i--) {
1448 const PERL_CONTEXT * const cx = &cxstk[i];
1449 switch (CxTYPE(cx)) {
1453 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1454 * twice; the first for the normal foo() call, and the second
1455 * for a faked up re-entry into the sub to execute the
1456 * code block. Hide this faked entry from the world. */
1457 if (cx->cx_type & CXp_SUB_RE_FAKE)
1459 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1465 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1469 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1477 S_dopoptoeval(pTHX_ I32 startingblock)
1480 for (i = startingblock; i >= 0; i--) {
1481 const PERL_CONTEXT *cx = &cxstack[i];
1482 switch (CxTYPE(cx)) {
1486 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1494 S_dopoptoloop(pTHX_ I32 startingblock)
1497 for (i = startingblock; i >= 0; i--) {
1498 const PERL_CONTEXT * const cx = &cxstack[i];
1499 switch (CxTYPE(cx)) {
1508 /* diag_listed_as: Exiting subroutine via %s */
1509 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1510 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1511 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
1514 case CXt_LOOP_PLAIN:
1515 case CXt_LOOP_LAZYIV:
1516 case CXt_LOOP_LAZYSV:
1519 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1526 /* find the next GIVEN or FOR (with implicit $_) loop context block */
1529 S_dopoptogivenfor(pTHX_ I32 startingblock)
1532 for (i = startingblock; i >= 0; i--) {
1533 const PERL_CONTEXT *cx = &cxstack[i];
1534 switch (CxTYPE(cx)) {
1538 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found given at cx=%ld)\n", (long)i));
1540 case CXt_LOOP_PLAIN:
1541 assert(!(cx->cx_type & CXp_FOR_DEF));
1543 case CXt_LOOP_LAZYIV:
1544 case CXt_LOOP_LAZYSV:
1547 if (cx->cx_type & CXp_FOR_DEF) {
1548 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found foreach at cx=%ld)\n", (long)i));
1557 S_dopoptowhen(pTHX_ I32 startingblock)
1560 for (i = startingblock; i >= 0; i--) {
1561 const PERL_CONTEXT *cx = &cxstack[i];
1562 switch (CxTYPE(cx)) {
1566 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1573 /* dounwind(): pop all contexts above (but not including) cxix.
1574 * Note that it clears the savestack frame associated with each popped
1575 * context entry, but doesn't free any temps.
1576 * It does a cx_popblock() of the last frame that it pops, and leaves
1577 * cxstack_ix equal to cxix.
1581 Perl_dounwind(pTHX_ I32 cxix)
1583 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1586 while (cxstack_ix > cxix) {
1587 PERL_CONTEXT *cx = CX_CUR();
1589 CX_DEBUG(cx, "UNWIND");
1590 /* Note: we don't need to restore the base context info till the end. */
1594 switch (CxTYPE(cx)) {
1597 /* CXt_SUBST is not a block context type, so skip the
1598 * cx_popblock(cx) below */
1599 if (cxstack_ix == cxix + 1) {
1610 case CXt_LOOP_PLAIN:
1611 case CXt_LOOP_LAZYIV:
1612 case CXt_LOOP_LAZYSV:
1625 /* these two don't have a POPFOO() */
1631 if (cxstack_ix == cxix + 1) {
1640 Perl_qerror(pTHX_ SV *err)
1642 PERL_ARGS_ASSERT_QERROR;
1645 if (PL_in_eval & EVAL_KEEPERR) {
1646 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1650 sv_catsv(ERRSV, err);
1653 sv_catsv(PL_errors, err);
1655 Perl_warn(aTHX_ "%" SVf, SVfARG(err));
1657 ++PL_parser->error_count;
1662 /* pop a CXt_EVAL context and in addition, if it was a require then
1664 * 0: do nothing extra;
1665 * 1: undef $INC{$name}; croak "$name did not return a true value";
1666 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1670 S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
1672 SV *namesv = NULL; /* init to avoid dumb compiler warning */
1676 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
1678 /* keep namesv alive after cx_popeval() */
1679 namesv = cx->blk_eval.old_namesv;
1680 cx->blk_eval.old_namesv = NULL;
1689 HV *inc_hv = GvHVn(PL_incgv);
1690 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1691 const char *key = SvPVX_const(namesv);
1694 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1695 fmt = "%" SVf " did not return a true value";
1699 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1700 fmt = "%" SVf "Compilation failed in require";
1702 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1705 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1710 /* die_unwind(): this is the final destination for the various croak()
1711 * functions. If we're in an eval, unwind the context and other stacks
1712 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1713 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1714 * to is a require the exception will be rethrown, as requires don't
1715 * actually trap exceptions.
1719 Perl_die_unwind(pTHX_ SV *msv)
1722 U8 in_eval = PL_in_eval;
1723 PERL_ARGS_ASSERT_DIE_UNWIND;
1728 /* We need to keep this SV alive through all the stack unwinding
1729 * and FREETMPSing below, while ensuing that it doesn't leak
1730 * if we call out to something which then dies (e.g. sub STORE{die}
1731 * when unlocalising a tied var). So we do a dance with
1732 * mortalising and SAVEFREEing.
1734 if (PL_phase == PERL_PHASE_DESTRUCT) {
1735 exceptsv = sv_mortalcopy(exceptsv);
1737 exceptsv = sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1741 * Historically, perl used to set ERRSV ($@) early in the die
1742 * process and rely on it not getting clobbered during unwinding.
1743 * That sucked, because it was liable to get clobbered, so the
1744 * setting of ERRSV used to emit the exception from eval{} has
1745 * been moved to much later, after unwinding (see just before
1746 * JMPENV_JUMP below). However, some modules were relying on the
1747 * early setting, by examining $@ during unwinding to use it as
1748 * a flag indicating whether the current unwinding was caused by
1749 * an exception. It was never a reliable flag for that purpose,
1750 * being totally open to false positives even without actual
1751 * clobberage, but was useful enough for production code to
1752 * semantically rely on it.
1754 * We'd like to have a proper introspective interface that
1755 * explicitly describes the reason for whatever unwinding
1756 * operations are currently in progress, so that those modules
1757 * work reliably and $@ isn't further overloaded. But we don't
1758 * have one yet. In its absence, as a stopgap measure, ERRSV is
1759 * now *additionally* set here, before unwinding, to serve as the
1760 * (unreliable) flag that it used to.
1762 * This behaviour is temporary, and should be removed when a
1763 * proper way to detect exceptional unwinding has been developed.
1764 * As of 2010-12, the authors of modules relying on the hack
1765 * are aware of the issue, because the modules failed on
1766 * perls 5.13.{1..7} which had late setting of $@ without this
1767 * early-setting hack.
1769 if (!(in_eval & EVAL_KEEPERR)) {
1770 /* remove any read-only/magic from the SV, so we don't
1771 get infinite recursion when setting ERRSV */
1773 sv_setsv_flags(ERRSV, exceptsv,
1774 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
1777 if (in_eval & EVAL_KEEPERR) {
1778 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1782 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1783 && PL_curstackinfo->si_prev)
1793 JMPENV *restartjmpenv;
1796 if (cxix < cxstack_ix)
1800 assert(CxTYPE(cx) == CXt_EVAL);
1802 /* return false to the caller of eval */
1803 oldsp = PL_stack_base + cx->blk_oldsp;
1804 gimme = cx->blk_gimme;
1805 if (gimme == G_SCALAR)
1806 *++oldsp = &PL_sv_undef;
1807 PL_stack_sp = oldsp;
1809 restartjmpenv = cx->blk_eval.cur_top_env;
1810 restartop = cx->blk_eval.retop;
1812 /* We need a FREETMPS here to avoid late-called destructors
1813 * clobbering $@ *after* we set it below, e.g.
1814 * sub DESTROY { eval { die "X" } }
1815 * eval { my $x = bless []; die $x = 0, "Y" };
1817 * Here the clearing of the $x ref mortalises the anon array,
1818 * which needs to be freed *before* $& is set to "Y",
1819 * otherwise it gets overwritten with "X".
1821 * However, the FREETMPS will clobber exceptsv, so preserve it
1822 * on the savestack for now.
1824 SAVEFREESV(SvREFCNT_inc_simple_NN(exceptsv));
1826 /* now we're about to pop the savestack, so re-mortalise it */
1827 sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1829 /* Note that unlike pp_entereval, pp_require isn't supposed to
1830 * trap errors. So if we're a require, after we pop the
1831 * CXt_EVAL that pp_require pushed, rethrow the error with
1832 * croak(exceptsv). This is all handled by the call below when
1835 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
1837 if (!(in_eval & EVAL_KEEPERR)) {
1839 sv_setsv(ERRSV, exceptsv);
1841 PL_restartjmpenv = restartjmpenv;
1842 PL_restartop = restartop;
1844 NOT_REACHED; /* NOTREACHED */
1848 write_to_stderr(exceptsv);
1850 NOT_REACHED; /* NOTREACHED */
1856 if (SvTRUE_NN(left) != SvTRUE_NN(right))
1864 =for apidoc_section $CV
1866 =for apidoc caller_cx
1868 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1869 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1870 information returned to Perl by C<caller>. Note that XSUBs don't get a
1871 stack frame, so C<caller_cx(0, NULL)> will return information for the
1872 immediately-surrounding Perl code.
1874 This function skips over the automatic calls to C<&DB::sub> made on the
1875 behalf of the debugger. If the stack frame requested was a sub called by
1876 C<DB::sub>, the return value will be the frame for the call to
1877 C<DB::sub>, since that has the correct line number/etc. for the call
1878 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1879 frame for the sub call itself.
1884 const PERL_CONTEXT *
1885 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1887 I32 cxix = dopopto_cursub();
1888 const PERL_CONTEXT *cx;
1889 const PERL_CONTEXT *ccstack = cxstack;
1890 const PERL_SI *top_si = PL_curstackinfo;
1893 /* we may be in a higher stacklevel, so dig down deeper */
1894 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1895 top_si = top_si->si_prev;
1896 ccstack = top_si->si_cxstack;
1897 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1901 /* caller() should not report the automatic calls to &DB::sub */
1902 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1903 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1907 cxix = dopoptosub_at(ccstack, cxix - 1);
1910 cx = &ccstack[cxix];
1911 if (dbcxp) *dbcxp = cx;
1913 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1914 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1915 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1916 field below is defined for any cx. */
1917 /* caller() should not report the automatic calls to &DB::sub */
1918 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1919 cx = &ccstack[dbcxix];
1928 const PERL_CONTEXT *cx;
1929 const PERL_CONTEXT *dbcx;
1931 const HEK *stash_hek;
1933 bool has_arg = MAXARG && TOPs;
1942 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1944 if (gimme != G_LIST) {
1951 CX_DEBUG(cx, "CALLER");
1952 assert(CopSTASH(cx->blk_oldcop));
1953 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1954 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1956 if (gimme != G_LIST) {
1959 PUSHs(&PL_sv_undef);
1962 sv_sethek(TARG, stash_hek);
1971 PUSHs(&PL_sv_undef);
1974 sv_sethek(TARG, stash_hek);
1977 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1978 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1979 cx->blk_sub.retop, TRUE);
1981 lcop = cx->blk_oldcop;
1982 mPUSHu(CopLINE(lcop));
1985 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1986 /* So is ccstack[dbcxix]. */
1987 if (CvHASGV(dbcx->blk_sub.cv)) {
1988 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1989 PUSHs(boolSV(CxHASARGS(cx)));
1992 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1993 PUSHs(boolSV(CxHASARGS(cx)));
1997 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
2000 gimme = cx->blk_gimme;
2001 if (gimme == G_VOID)
2002 PUSHs(&PL_sv_undef);
2004 PUSHs(boolSV((gimme & G_WANT) == G_LIST));
2005 if (CxTYPE(cx) == CXt_EVAL) {
2007 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
2008 SV *cur_text = cx->blk_eval.cur_text;
2009 if (SvCUR(cur_text) >= 2) {
2010 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
2011 SvUTF8(cur_text)|SVs_TEMP));
2014 /* I think this is will always be "", but be sure */
2015 PUSHs(sv_2mortal(newSVsv(cur_text)));
2021 else if (cx->blk_eval.old_namesv) {
2022 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
2025 /* eval BLOCK (try blocks have old_namesv == 0) */
2027 PUSHs(&PL_sv_undef);
2028 PUSHs(&PL_sv_undef);
2032 PUSHs(&PL_sv_undef);
2033 PUSHs(&PL_sv_undef);
2035 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
2036 && CopSTASH_eq(PL_curcop, PL_debstash))
2038 /* slot 0 of the pad contains the original @_ */
2039 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
2040 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2041 cx->blk_sub.olddepth+1]))[0]);
2042 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
2044 Perl_init_dbargs(aTHX);
2046 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
2047 av_extend(PL_dbargs, AvFILLp(ary) + off);
2048 if (AvFILLp(ary) + 1 + off)
2049 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
2050 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
2052 mPUSHi(CopHINTS_get(cx->blk_oldcop));
2055 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
2057 if (old_warnings == pWARN_NONE)
2058 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
2059 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
2060 mask = &PL_sv_undef ;
2061 else if (old_warnings == pWARN_ALL ||
2062 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
2063 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
2066 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2070 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2071 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2081 if (MAXARG < 1 || (!TOPs && !POPs)) {
2083 tmps = NULL, len = 0;
2086 tmps = SvPVx_const(POPs, len);
2087 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
2092 /* like pp_nextstate, but used instead when the debugger is active */
2096 PL_curcop = (COP*)PL_op;
2097 TAINT_NOT; /* Each statement is presumed innocent */
2098 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
2103 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2104 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
2108 const U8 gimme = G_LIST;
2109 GV * const gv = PL_DBgv;
2112 if (gv && isGV_with_GP(gv))
2115 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
2116 DIE(aTHX_ "No DB::DB routine defined");
2118 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2119 /* don't do recursive DB::DB call */
2129 (void)(*CvXSUB(cv))(aTHX_ cv);
2135 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
2136 cx_pushsub(cx, cv, PL_op->op_next, 0);
2137 /* OP_DBSTATE's op_private holds hint bits rather than
2138 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2139 * any CxLVAL() flags that have now been mis-calculated */
2146 if (CvDEPTH(cv) >= 2)
2147 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2148 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2149 RETURNOP(CvSTART(cv));
2161 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2173 assert(CxTYPE(cx) == CXt_BLOCK);
2175 if (PL_op->op_flags & OPf_SPECIAL)
2176 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2177 cx->blk_oldpm = PL_curpm;
2179 oldsp = PL_stack_base + cx->blk_oldsp;
2180 gimme = cx->blk_gimme;
2182 if (gimme == G_VOID)
2183 PL_stack_sp = oldsp;
2185 leave_adjust_stacks(oldsp, oldsp, gimme,
2186 PL_op->op_private & OPpLVALUE ? 3 : 1);
2196 S_outside_integer(pTHX_ SV *sv)
2199 const NV nv = SvNV_nomg(sv);
2200 if (Perl_isinfnan(nv))
2202 #ifdef NV_PRESERVES_UV
2203 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2206 if (nv <= (NV)IV_MIN)
2209 ((nv > (NV)UV_MAX ||
2210 SvUV_nomg(sv) > (UV)IV_MAX)))
2221 const U8 gimme = GIMME_V;
2222 void *itervarp; /* GV or pad slot of the iteration variable */
2223 SV *itersave; /* the old var in the iterator var slot */
2226 if (PL_op->op_targ) { /* "my" variable */
2227 itervarp = &PAD_SVl(PL_op->op_targ);
2228 itersave = *(SV**)itervarp;
2230 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2231 /* the SV currently in the pad slot is never live during
2232 * iteration (the slot is always aliased to one of the items)
2233 * so it's always stale */
2234 SvPADSTALE_on(itersave);
2236 SvREFCNT_inc_simple_void_NN(itersave);
2237 cxflags = CXp_FOR_PAD;
2240 SV * const sv = POPs;
2241 itervarp = (void *)sv;
2242 if (LIKELY(isGV(sv))) { /* symbol table variable */
2243 itersave = GvSV(sv);
2244 SvREFCNT_inc_simple_void(itersave);
2245 cxflags = CXp_FOR_GV;
2246 if (PL_op->op_private & OPpITER_DEF)
2247 cxflags |= CXp_FOR_DEF;
2249 else { /* LV ref: for \$foo (...) */
2250 assert(SvTYPE(sv) == SVt_PVMG);
2251 assert(SvMAGIC(sv));
2252 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2254 cxflags = CXp_FOR_LVREF;
2257 /* OPpITER_DEF (implicit $_) should only occur with a GV iter var */
2258 assert((cxflags & CXp_FOR_GV) || !(PL_op->op_private & OPpITER_DEF));
2260 /* Note that this context is initially set as CXt_NULL. Further on
2261 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2262 * there mustn't be anything in the blk_loop substruct that requires
2263 * freeing or undoing, in case we die in the meantime. And vice-versa.
2265 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
2266 cx_pushloop_for(cx, itervarp, itersave);
2268 if (PL_op->op_flags & OPf_STACKED) {
2269 /* OPf_STACKED implies either a single array: for(@), with a
2270 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2272 SV *maybe_ary = POPs;
2273 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2276 SV * const right = maybe_ary;
2277 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
2278 DIE(aTHX_ "Assigned value is not a reference");
2281 if (RANGE_IS_NUMERIC(sv,right)) {
2282 cx->cx_type |= CXt_LOOP_LAZYIV;
2283 if (S_outside_integer(aTHX_ sv) ||
2284 S_outside_integer(aTHX_ right))
2285 DIE(aTHX_ "Range iterator outside integer range");
2286 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2287 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2290 cx->cx_type |= CXt_LOOP_LAZYSV;
2291 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2292 cx->blk_loop.state_u.lazysv.end = right;
2293 SvREFCNT_inc_simple_void_NN(right);
2294 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2295 /* This will do the upgrade to SVt_PV, and warn if the value
2296 is uninitialised. */
2297 (void) SvPV_nolen_const(right);
2298 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2299 to replace !SvOK() with a pointer to "". */
2301 SvREFCNT_dec(right);
2302 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2306 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2307 /* for (@array) {} */
2308 cx->cx_type |= CXt_LOOP_ARY;
2309 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2310 SvREFCNT_inc_simple_void_NN(maybe_ary);
2311 cx->blk_loop.state_u.ary.ix =
2312 (PL_op->op_private & OPpITER_REVERSED) ?
2313 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2316 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
2318 else { /* iterating over items on the stack */
2319 cx->cx_type |= CXt_LOOP_LIST;
2320 cx->blk_oldsp = SP - PL_stack_base;
2321 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2322 cx->blk_loop.state_u.stack.ix =
2323 (PL_op->op_private & OPpITER_REVERSED)
2325 : cx->blk_loop.state_u.stack.basesp;
2326 /* pre-extend stack so pp_iter doesn't have to check every time
2327 * it pushes yes/no */
2337 const U8 gimme = GIMME_V;
2339 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
2340 cx_pushloop_plain(cx);
2353 assert(CxTYPE_is_LOOP(cx));
2354 oldsp = PL_stack_base + cx->blk_oldsp;
2355 base = CxTYPE(cx) == CXt_LOOP_LIST
2356 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
2358 gimme = cx->blk_gimme;
2360 if (gimme == G_VOID)
2363 leave_adjust_stacks(oldsp, base, gimme,
2364 PL_op->op_private & OPpLVALUE ? 3 : 1);
2367 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
2375 /* This duplicates most of pp_leavesub, but with additional code to handle
2376 * return args in lvalue context. It was forked from pp_leavesub to
2377 * avoid slowing down that function any further.
2379 * Any changes made to this function may need to be copied to pp_leavesub
2382 * also tail-called by pp_return
2393 assert(CxTYPE(cx) == CXt_SUB);
2395 if (CxMULTICALL(cx)) {
2396 /* entry zero of a stack is always PL_sv_undef, which
2397 * simplifies converting a '()' return into undef in scalar context */
2398 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2402 gimme = cx->blk_gimme;
2403 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
2405 if (gimme == G_VOID)
2406 PL_stack_sp = oldsp;
2408 U8 lval = CxLVAL(cx);
2409 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2410 const char *what = NULL;
2412 if (gimme == G_SCALAR) {
2414 /* check for bad return arg */
2415 if (oldsp < PL_stack_sp) {
2416 SV *sv = *PL_stack_sp;
2417 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2419 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2420 : "a readonly value" : "a temporary";
2425 /* sub:lvalue{} will take us here. */
2430 "Can't return %s from lvalue subroutine", what);
2434 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2436 if (lval & OPpDEREF) {
2437 /* lval_sub()->{...} and similar */
2441 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2447 assert(gimme == G_LIST);
2448 assert (!(lval & OPpDEREF));
2451 /* scan for bad return args */
2453 for (p = PL_stack_sp; p > oldsp; p--) {
2455 /* the PL_sv_undef exception is to allow things like
2456 * this to work, where PL_sv_undef acts as 'skip'
2457 * placeholder on the LHS of list assigns:
2458 * sub foo :lvalue { undef }
2459 * ($a, undef, foo(), $b) = 1..4;
2461 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2463 /* Might be flattened array after $#array = */
2464 what = SvREADONLY(sv)
2465 ? "a readonly value" : "a temporary";
2471 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2476 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
2478 retop = cx->blk_sub.retop;
2489 I32 cxix = dopopto_cursub();
2491 assert(cxstack_ix >= 0);
2492 if (cxix < cxstack_ix) {
2494 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2495 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2496 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2499 DIE(aTHX_ "Can't return outside a subroutine");
2501 * a sort block, which is a CXt_NULL not a CXt_SUB;
2502 * or a /(?{...})/ block.
2503 * Handle specially. */
2504 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2505 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2506 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
2507 if (cxstack_ix > 0) {
2508 /* See comment below about context popping. Since we know
2509 * we're scalar and not lvalue, we can preserve the return
2510 * value in a simpler fashion than there. */
2512 assert(cxstack[0].blk_gimme == G_SCALAR);
2513 if ( (sp != PL_stack_base)
2514 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2516 *SP = sv_mortalcopy(sv);
2519 /* caller responsible for popping cxstack[0] */
2523 /* There are contexts that need popping. Doing this may free the
2524 * return value(s), so preserve them first: e.g. popping the plain
2525 * loop here would free $x:
2526 * sub f { { my $x = 1; return $x } }
2527 * We may also need to shift the args down; for example,
2528 * for (1,2) { return 3,4 }
2529 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2530 * leave_adjust_stacks(), along with freeing any temps. Note that
2531 * whoever we tail-call (e.g. pp_leaveeval) will also call
2532 * leave_adjust_stacks(); however, the second call is likely to
2533 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2534 * pass them through, rather than copying them again. So this
2535 * isn't as inefficient as it sounds.
2537 cx = &cxstack[cxix];
2539 if (cx->blk_gimme != G_VOID)
2540 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
2542 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2546 cx = &cxstack[cxix]; /* CX stack may have been realloced */
2549 /* Like in the branch above, we need to handle any extra junk on
2550 * the stack. But because we're not also popping extra contexts, we
2551 * don't have to worry about prematurely freeing args. So we just
2552 * need to do the bare minimum to handle junk, and leave the main
2553 * arg processing in the function we tail call, e.g. pp_leavesub.
2554 * In list context we have to splice out the junk; in scalar
2555 * context we can leave as-is (pp_leavesub will later return the
2556 * top stack element). But for an empty arg list, e.g.
2557 * for (1,2) { return }
2558 * we need to set sp = oldsp so that pp_leavesub knows to push
2559 * &PL_sv_undef onto the stack.
2562 cx = &cxstack[cxix];
2563 oldsp = PL_stack_base + cx->blk_oldsp;
2564 if (oldsp != MARK) {
2565 SSize_t nargs = SP - MARK;
2567 if (cx->blk_gimme == G_LIST) {
2568 /* shift return args to base of call stack frame */
2569 Move(MARK + 1, oldsp + 1, nargs, SV*);
2570 PL_stack_sp = oldsp + nargs;
2574 PL_stack_sp = oldsp;
2578 /* fall through to a normal exit */
2579 switch (CxTYPE(cx)) {
2581 return CxEVALBLOCK(cx)
2582 ? Perl_pp_leavetry(aTHX)
2583 : Perl_pp_leaveeval(aTHX);
2585 return CvLVALUE(cx->blk_sub.cv)
2586 ? Perl_pp_leavesublv(aTHX)
2587 : Perl_pp_leavesub(aTHX);
2589 return Perl_pp_leavewrite(aTHX);
2591 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2595 /* find the enclosing loop or labelled loop and dounwind() back to it. */
2597 static PERL_CONTEXT *
2601 if (PL_op->op_flags & OPf_SPECIAL) {
2602 cxix = dopoptoloop(cxstack_ix);
2604 /* diag_listed_as: Can't "last" outside a loop block */
2605 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2611 const char * const label =
2612 PL_op->op_flags & OPf_STACKED
2613 ? SvPV(TOPs,label_len)
2614 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2615 const U32 label_flags =
2616 PL_op->op_flags & OPf_STACKED
2618 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2620 cxix = dopoptolabel(label, label_len, label_flags);
2622 /* diag_listed_as: Label not found for "last %s" */
2623 Perl_croak(aTHX_ "Label not found for \"%s %" SVf "\"",
2625 SVfARG(PL_op->op_flags & OPf_STACKED
2626 && !SvGMAGICAL(TOPp1s)
2628 : newSVpvn_flags(label,
2630 label_flags | SVs_TEMP)));
2632 if (cxix < cxstack_ix)
2634 return &cxstack[cxix];
2643 cx = S_unwind_loop(aTHX);
2645 assert(CxTYPE_is_LOOP(cx));
2646 PL_stack_sp = PL_stack_base
2647 + (CxTYPE(cx) == CXt_LOOP_LIST
2648 ? cx->blk_loop.state_u.stack.basesp
2654 /* Stack values are safe: */
2656 cx_poploop(cx); /* release loop vars ... */
2658 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2668 /* if not a bare 'next' in the main scope, search for it */
2670 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2671 cx = S_unwind_loop(aTHX);
2674 PL_curcop = cx->blk_oldcop;
2676 return (cx)->blk_loop.my_op->op_nextop;
2681 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
2682 OP* redo_op = cx->blk_loop.my_op->op_redoop;
2684 if (redo_op->op_type == OP_ENTER) {
2685 /* pop one less context to avoid $x being freed in while (my $x..) */
2688 assert(CxTYPE(cx) == CXt_BLOCK);
2689 redo_op = redo_op->op_next;
2695 PL_curcop = cx->blk_oldcop;
2700 #define UNENTERABLE (OP *)1
2701 #define GOTO_DEPTH 64
2704 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2707 static const char* const too_deep = "Target of goto is too deeply nested";
2709 PERL_ARGS_ASSERT_DOFINDLABEL;
2712 Perl_croak(aTHX_ "%s", too_deep);
2713 if (o->op_type == OP_LEAVE ||
2714 o->op_type == OP_SCOPE ||
2715 o->op_type == OP_LEAVELOOP ||
2716 o->op_type == OP_LEAVESUB ||
2717 o->op_type == OP_LEAVETRY ||
2718 o->op_type == OP_LEAVEGIVEN)
2720 *ops++ = cUNOPo->op_first;
2722 else if (oplimit - opstack < GOTO_DEPTH) {
2723 if (o->op_flags & OPf_KIDS
2724 && cUNOPo->op_first->op_type == OP_PUSHMARK) {
2725 *ops++ = UNENTERABLE;
2727 else if (o->op_flags & OPf_KIDS && PL_opargs[o->op_type]
2728 && OP_CLASS(o) != OA_LOGOP
2729 && o->op_type != OP_LINESEQ
2730 && o->op_type != OP_SREFGEN
2731 && o->op_type != OP_ENTEREVAL
2732 && o->op_type != OP_GLOB
2733 && o->op_type != OP_RV2CV) {
2734 OP * const kid = cUNOPo->op_first;
2735 if (OP_GIMME(kid, 0) != G_SCALAR || OpHAS_SIBLING(kid))
2736 *ops++ = UNENTERABLE;
2740 Perl_croak(aTHX_ "%s", too_deep);
2742 if (o->op_flags & OPf_KIDS) {
2744 OP * const kid1 = cUNOPo->op_first;
2745 /* First try all the kids at this level, since that's likeliest. */
2746 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2747 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2748 STRLEN kid_label_len;
2749 U32 kid_label_flags;
2750 const char *kid_label = CopLABEL_len_flags(kCOP,
2751 &kid_label_len, &kid_label_flags);
2753 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2756 (const U8*)kid_label, kid_label_len,
2757 (const U8*)label, len) == 0)
2759 (const U8*)label, len,
2760 (const U8*)kid_label, kid_label_len) == 0)
2761 : ( len == kid_label_len && ((kid_label == label)
2762 || memEQ(kid_label, label, len)))))
2766 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2767 bool first_kid_of_binary = FALSE;
2768 if (kid == PL_lastgotoprobe)
2770 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2773 else if (ops[-1] != UNENTERABLE
2774 && (ops[-1]->op_type == OP_NEXTSTATE ||
2775 ops[-1]->op_type == OP_DBSTATE))
2780 if (kid == kid1 && ops != opstack && ops[-1] == UNENTERABLE) {
2781 first_kid_of_binary = TRUE;
2784 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2786 if (first_kid_of_binary)
2787 *ops++ = UNENTERABLE;
2796 S_check_op_type(pTHX_ OP * const o)
2798 /* Eventually we may want to stack the needed arguments
2799 * for each op. For now, we punt on the hard ones. */
2800 /* XXX This comment seems to me like wishful thinking. --sprout */
2801 if (o == UNENTERABLE)
2803 "Can't \"goto\" into a binary or list expression");
2804 if (o->op_type == OP_ENTERITER)
2806 "Can't \"goto\" into the middle of a foreach loop");
2807 if (o->op_type == OP_ENTERGIVEN)
2809 "Can't \"goto\" into a \"given\" block");
2812 /* also used for: pp_dump() */
2820 OP *enterops[GOTO_DEPTH];
2821 const char *label = NULL;
2822 STRLEN label_len = 0;
2823 U32 label_flags = 0;
2824 const bool do_dump = (PL_op->op_type == OP_DUMP);
2825 static const char* const must_have_label = "goto must have label";
2827 if (PL_op->op_flags & OPf_STACKED) {
2828 /* goto EXPR or goto &foo */
2830 SV * const sv = POPs;
2833 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2834 /* This egregious kludge implements goto &subroutine */
2837 CV *cv = MUTABLE_CV(SvRV(sv));
2838 AV *arg = GvAV(PL_defgv);
2840 while (!CvROOT(cv) && !CvXSUB(cv)) {
2841 const GV * const gv = CvGV(cv);
2845 /* autoloaded stub? */
2846 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2848 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2850 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2851 if (autogv && (cv = GvCV(autogv)))
2853 tmpstr = sv_newmortal();
2854 gv_efullname3(tmpstr, gv, NULL);
2855 DIE(aTHX_ "Goto undefined subroutine &%" SVf, SVfARG(tmpstr));
2857 DIE(aTHX_ "Goto undefined subroutine");
2860 cxix = dopopto_cursub();
2862 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2864 cx = &cxstack[cxix];
2865 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2866 if (CxTYPE(cx) == CXt_EVAL) {
2868 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2869 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2871 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2872 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2874 else if (CxMULTICALL(cx))
2875 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2877 /* First do some returnish stuff. */
2879 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2881 if (cxix < cxstack_ix) {
2888 /* protect @_ during save stack unwind. */
2890 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2892 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2895 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2896 /* this is part of cx_popsub_args() */
2897 AV* av = MUTABLE_AV(PAD_SVl(0));
2898 assert(AvARRAY(MUTABLE_AV(
2899 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2900 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2902 /* we are going to donate the current @_ from the old sub
2903 * to the new sub. This first part of the donation puts a
2904 * new empty AV in the pad[0] slot of the old sub,
2905 * unless pad[0] and @_ differ (e.g. if the old sub did
2906 * local *_ = []); in which case clear the old pad[0]
2907 * array in the usual way */
2908 if (av == arg || AvREAL(av))
2909 clear_defarray(av, av == arg);
2910 else CLEAR_ARGARRAY(av);
2913 /* don't restore PL_comppad here. It won't be needed if the
2914 * sub we're going to is non-XS, but restoring it early then
2915 * croaking (e.g. the "Goto undefined subroutine" below)
2916 * means the CX block gets processed again in dounwind,
2917 * but this time with the wrong PL_comppad */
2919 /* A destructor called during LEAVE_SCOPE could have undefined
2920 * our precious cv. See bug #99850. */
2921 if (!CvROOT(cv) && !CvXSUB(cv)) {
2922 const GV * const gv = CvGV(cv);
2924 SV * const tmpstr = sv_newmortal();
2925 gv_efullname3(tmpstr, gv, NULL);
2926 DIE(aTHX_ "Goto undefined subroutine &%" SVf,
2929 DIE(aTHX_ "Goto undefined subroutine");
2932 if (CxTYPE(cx) == CXt_SUB) {
2933 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2934 SvREFCNT_dec_NN(cx->blk_sub.cv);
2937 /* Now do some callish stuff. */
2939 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2940 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2945 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2947 /* put GvAV(defgv) back onto stack */
2949 EXTEND(SP, items+1); /* @_ could have been extended. */
2954 bool r = cBOOL(AvREAL(arg));
2955 for (index=0; index<items; index++)
2959 SV ** const svp = av_fetch(arg, index, 0);
2960 sv = svp ? *svp : NULL;
2962 else sv = AvARRAY(arg)[index];
2964 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2965 : sv_2mortal(newSVavdefelem(arg, index, 1));
2969 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2970 /* Restore old @_ */
2971 CX_POP_SAVEARRAY(cx);
2974 retop = cx->blk_sub.retop;
2975 PL_comppad = cx->blk_sub.prevcomppad;
2976 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2978 /* XS subs don't have a CXt_SUB, so pop it;
2979 * this is a cx_popblock(), less all the stuff we already did
2980 * for cx_topblock() earlier */
2981 PL_curcop = cx->blk_oldcop;
2982 /* this is cx_popsub, less all the stuff we already did */
2983 PL_curstackinfo->si_cxsubix = cx->blk_sub.old_cxsubix;
2987 /* Push a mark for the start of arglist */
2990 (void)(*CvXSUB(cv))(aTHX_ cv);
2995 PADLIST * const padlist = CvPADLIST(cv);
2997 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2999 /* partial unrolled cx_pushsub(): */
3001 cx->blk_sub.cv = cv;
3002 cx->blk_sub.olddepth = CvDEPTH(cv);
3005 SvREFCNT_inc_simple_void_NN(cv);
3006 if (CvDEPTH(cv) > 1) {
3007 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
3008 sub_crush_depth(cv);
3009 pad_push(padlist, CvDEPTH(cv));
3011 PL_curcop = cx->blk_oldcop;
3012 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
3015 /* second half of donating @_ from the old sub to the
3016 * new sub: abandon the original pad[0] AV in the
3017 * new sub, and replace it with the donated @_.
3018 * pad[0] takes ownership of the extra refcount
3019 * we gave arg earlier */
3021 SvREFCNT_dec(PAD_SVl(0));
3022 PAD_SVl(0) = (SV *)arg;
3023 SvREFCNT_inc_simple_void_NN(arg);
3026 /* GvAV(PL_defgv) might have been modified on scope
3027 exit, so point it at arg again. */
3028 if (arg != GvAV(PL_defgv)) {
3029 AV * const av = GvAV(PL_defgv);
3030 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
3035 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
3036 Perl_get_db_sub(aTHX_ NULL, cv);
3038 CV * const gotocv = get_cvs("DB::goto", 0);
3040 PUSHMARK( PL_stack_sp );
3041 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
3046 retop = CvSTART(cv);
3047 goto putback_return;
3052 label = SvPV_nomg_const(sv, label_len);
3053 label_flags = SvUTF8(sv);
3056 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
3057 /* goto LABEL or dump LABEL */
3058 label = cPVOP->op_pv;
3059 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
3060 label_len = strlen(label);
3062 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3067 OP *gotoprobe = NULL;
3068 bool leaving_eval = FALSE;
3069 bool in_block = FALSE;
3070 bool pseudo_block = FALSE;
3071 PERL_CONTEXT *last_eval_cx = NULL;
3075 PL_lastgotoprobe = NULL;
3077 for (ix = cxstack_ix; ix >= 0; ix--) {
3079 switch (CxTYPE(cx)) {
3081 leaving_eval = TRUE;
3082 if (!CxEVALBLOCK(cx)) {
3083 gotoprobe = (last_eval_cx ?
3084 last_eval_cx->blk_eval.old_eval_root :
3089 /* else fall through */
3090 case CXt_LOOP_PLAIN:
3091 case CXt_LOOP_LAZYIV:
3092 case CXt_LOOP_LAZYSV:
3097 gotoprobe = OpSIBLING(cx->blk_oldcop);
3103 gotoprobe = OpSIBLING(cx->blk_oldcop);
3106 gotoprobe = PL_main_root;
3109 gotoprobe = CvROOT(cx->blk_sub.cv);
3110 pseudo_block = cBOOL(CxMULTICALL(cx));
3114 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3117 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3118 CxTYPE(cx), (long) ix);
3119 gotoprobe = PL_main_root;
3125 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3126 enterops, enterops + GOTO_DEPTH);
3129 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
3130 sibl1->op_type == OP_UNSTACK &&
3131 (sibl2 = OpSIBLING(sibl1)))
3133 retop = dofindlabel(sibl2,
3134 label, label_len, label_flags, enterops,
3135 enterops + GOTO_DEPTH);
3141 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3142 PL_lastgotoprobe = gotoprobe;
3145 DIE(aTHX_ "Can't find label %" UTF8f,
3146 UTF8fARG(label_flags, label_len, label));
3148 /* if we're leaving an eval, check before we pop any frames
3149 that we're not going to punt, otherwise the error
3152 if (leaving_eval && *enterops && enterops[1]) {
3154 for (i = 1; enterops[i]; i++)
3155 S_check_op_type(aTHX_ enterops[i]);
3158 if (*enterops && enterops[1]) {
3159 I32 i = enterops[1] != UNENTERABLE
3160 && enterops[1]->op_type == OP_ENTER && in_block
3164 deprecate("\"goto\" to jump into a construct");
3167 /* pop unwanted frames */
3169 if (ix < cxstack_ix) {
3171 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3177 /* push wanted frames */
3179 if (*enterops && enterops[1]) {
3180 OP * const oldop = PL_op;
3181 ix = enterops[1] != UNENTERABLE
3182 && enterops[1]->op_type == OP_ENTER && in_block
3185 for (; enterops[ix]; ix++) {
3186 PL_op = enterops[ix];
3187 S_check_op_type(aTHX_ PL_op);
3188 DEBUG_l( Perl_deb(aTHX_ "pp_goto: Entering %s\n",
3190 PL_op->op_ppaddr(aTHX);
3198 if (!retop) retop = PL_main_start;
3200 PL_restartop = retop;
3201 PL_do_undump = TRUE;
3205 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3206 PL_do_undump = FALSE;
3224 anum = 0; (void)POPs;
3230 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3233 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3236 PL_exit_flags |= PERL_EXIT_EXPECTED;
3238 PUSHs(&PL_sv_undef);
3245 S_save_lines(pTHX_ AV *array, SV *sv)
3247 const char *s = SvPVX_const(sv);
3248 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3251 PERL_ARGS_ASSERT_SAVE_LINES;
3253 while (s && s < send) {
3255 SV * const tmpstr = newSV_type(SVt_PVMG);
3257 t = (const char *)memchr(s, '\n', send - s);
3263 sv_setpvn(tmpstr, s, t - s);
3264 av_store(array, line++, tmpstr);
3272 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3274 0 is used as continue inside eval,
3276 3 is used for a die caught by an inner eval - continue inner loop
3278 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3279 establish a local jmpenv to handle exception traps.
3284 S_docatch(pTHX_ Perl_ppaddr_t firstpp)
3287 OP * const oldop = PL_op;
3290 assert(CATCH_GET == TRUE);
3295 PL_op = firstpp(aTHX);
3300 /* die caught by an inner eval - continue inner loop */
3301 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3302 PL_restartjmpenv = NULL;
3303 PL_op = PL_restartop;
3312 NOT_REACHED; /* NOTREACHED */
3321 =for apidoc find_runcv
3323 Locate the CV corresponding to the currently executing sub or eval.
3324 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3325 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3326 entered. (This allows debuggers to eval in the scope of the breakpoint
3327 rather than in the scope of the debugger itself.)
3333 Perl_find_runcv(pTHX_ U32 *db_seqp)
3335 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3338 /* If this becomes part of the API, it might need a better name. */
3340 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3347 PL_curcop == &PL_compiling
3349 : PL_curcop->cop_seq;
3351 for (si = PL_curstackinfo; si; si = si->si_prev) {
3353 for (ix = si->si_cxix; ix >= 0; ix--) {
3354 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3356 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3357 cv = cx->blk_sub.cv;
3358 /* skip DB:: code */
3359 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3360 *db_seqp = cx->blk_oldcop->cop_seq;
3363 if (cx->cx_type & CXp_SUB_RE)
3366 else if (CxTYPE(cx) == CXt_EVAL && !CxEVALBLOCK(cx))
3367 cv = cx->blk_eval.cv;
3370 case FIND_RUNCV_padid_eq:
3372 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3375 case FIND_RUNCV_level_eq:
3376 if (level++ != arg) continue;
3384 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3388 /* Run yyparse() in a setjmp wrapper. Returns:
3389 * 0: yyparse() successful
3390 * 1: yyparse() failed
3394 S_try_yyparse(pTHX_ int gramtype)
3399 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3403 ret = yyparse(gramtype) ? 1 : 0;
3410 NOT_REACHED; /* NOTREACHED */
3417 /* Compile a require/do or an eval ''.
3419 * outside is the lexically enclosing CV (if any) that invoked us.
3420 * seq is the current COP scope value.
3421 * hh is the saved hints hash, if any.
3423 * Returns a bool indicating whether the compile was successful; if so,
3424 * PL_eval_start contains the first op of the compiled code; otherwise,
3427 * This function is called from two places: pp_require and pp_entereval.
3428 * These can be distinguished by whether PL_op is entereval.
3432 S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
3435 OP * const saveop = PL_op;
3436 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3437 COP * const oldcurcop = PL_curcop;
3438 bool in_require = (saveop->op_type == OP_REQUIRE);
3442 PL_in_eval = (in_require
3443 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3445 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3446 ? EVAL_RE_REPARSING : 0)));
3450 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3452 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3453 CX_CUR()->blk_eval.cv = evalcv;
3454 CX_CUR()->blk_gimme = gimme;
3456 CvOUTSIDE_SEQ(evalcv) = seq;
3457 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3459 /* set up a scratch pad */
3461 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3462 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3465 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3467 /* make sure we compile in the right package */
3469 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3470 SAVEGENERICSV(PL_curstash);
3471 PL_curstash = (HV *)CopSTASH(PL_curcop);
3472 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3474 SvREFCNT_inc_simple_void(PL_curstash);
3475 save_item(PL_curstname);
3476 sv_sethek(PL_curstname, HvNAME_HEK(PL_curstash));
3479 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3480 SAVESPTR(PL_beginav);
3481 PL_beginav = newAV();
3482 SAVEFREESV(PL_beginav);
3483 SAVESPTR(PL_unitcheckav);
3484 PL_unitcheckav = newAV();
3485 SAVEFREESV(PL_unitcheckav);
3488 ENTER_with_name("evalcomp");
3489 SAVESPTR(PL_compcv);
3492 /* try to compile it */
3494 PL_eval_root = NULL;
3495 PL_curcop = &PL_compiling;
3496 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3497 PL_in_eval |= EVAL_KEEPERR;
3503 PL_hints = HINTS_DEFAULT;
3504 hv_clear(GvHV(PL_hintgv));
3508 PL_hints = saveop->op_private & OPpEVAL_COPHH
3509 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
3511 /* making 'use re eval' not be in scope when compiling the
3512 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3513 * infinite recursion when S_has_runtime_code() gives a false
3514 * positive: the second time round, HINT_RE_EVAL isn't set so we
3515 * don't bother calling S_has_runtime_code() */
3516 if (PL_in_eval & EVAL_RE_REPARSING)
3517 PL_hints &= ~HINT_RE_EVAL;
3520 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3521 SvREFCNT_dec(GvHV(PL_hintgv));
3522 GvHV(PL_hintgv) = hh;
3523 FETCHFEATUREBITSHH(hh);
3526 SAVECOMPILEWARNINGS();
3528 if (PL_dowarn & G_WARN_ALL_ON)
3529 PL_compiling.cop_warnings = pWARN_ALL ;
3530 else if (PL_dowarn & G_WARN_ALL_OFF)
3531 PL_compiling.cop_warnings = pWARN_NONE ;
3533 PL_compiling.cop_warnings = pWARN_STD ;
3536 PL_compiling.cop_warnings =
3537 DUP_WARNINGS(oldcurcop->cop_warnings);
3538 cophh_free(CopHINTHASH_get(&PL_compiling));
3539 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3540 /* The label, if present, is the first entry on the chain. So rather
3541 than writing a blank label in front of it (which involves an
3542 allocation), just use the next entry in the chain. */
3543 PL_compiling.cop_hints_hash
3544 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3545 /* Check the assumption that this removed the label. */
3546 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3549 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3552 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3554 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3555 * so honour CATCH_GET and trap it here if necessary */
3558 /* compile the code */
3559 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3561 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3566 /* note that if yystatus == 3, then the require/eval died during
3567 * compilation, so the EVAL CX block has already been popped, and
3568 * various vars restored */
3569 if (yystatus != 3) {
3571 op_free(PL_eval_root);
3572 PL_eval_root = NULL;
3574 SP = PL_stack_base + POPMARK; /* pop original mark */
3576 assert(CxTYPE(cx) == CXt_EVAL);
3577 /* pop the CXt_EVAL, and if was a require, croak */
3578 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
3581 /* die_unwind() re-croaks when in require, having popped the
3582 * require EVAL context. So we should never catch a require
3584 assert(!in_require);
3587 if (!*(SvPV_nolen_const(errsv)))
3588 sv_setpvs(errsv, "Compilation error");
3590 if (gimme != G_LIST) PUSHs(&PL_sv_undef);
3595 /* Compilation successful. Now clean up */
3597 LEAVE_with_name("evalcomp");
3599 CopLINE_set(&PL_compiling, 0);
3600 SAVEFREEOP(PL_eval_root);
3601 cv_forget_slab(evalcv);
3603 DEBUG_x(dump_eval());
3605 /* Register with debugger: */
3606 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3607 CV * const cv = get_cvs("DB::postponed", 0);
3611 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3613 call_sv(MUTABLE_SV(cv), G_DISCARD);
3617 if (PL_unitcheckav) {
3618 OP *es = PL_eval_start;
3619 call_list(PL_scopestack_ix, PL_unitcheckav);
3623 CvDEPTH(evalcv) = 1;
3624 SP = PL_stack_base + POPMARK; /* pop original mark */
3625 PL_op = saveop; /* The caller may need it. */
3626 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3632 /* Return NULL if the file doesn't exist or isn't a file;
3633 * else return PerlIO_openn().
3637 S_check_type_and_open(pTHX_ SV *name)
3642 const char *p = SvPV_const(name, len);
3645 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3647 /* checking here captures a reasonable error message when
3648 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3649 * user gets a confusing message about looking for the .pmc file
3650 * rather than for the .pm file so do the check in S_doopen_pm when
3651 * PMC is on instead of here. S_doopen_pm calls this func.
3652 * This check prevents a \0 in @INC causing problems.
3654 #ifdef PERL_DISABLE_PMC
3655 if (!IS_SAFE_PATHNAME(p, len, "require"))
3659 /* on Win32 stat is expensive (it does an open() and close() twice and
3660 a couple other IO calls), the open will fail with a dir on its own with
3661 errno EACCES, so only do a stat to separate a dir from a real EACCES
3662 caused by user perms */
3664 st_rc = PerlLIO_stat(p, &st);
3670 if(S_ISBLK(st.st_mode)) {
3674 else if(S_ISDIR(st.st_mode)) {
3683 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3685 /* EACCES stops the INC search early in pp_require to implement
3686 feature RT #113422 */
3687 if(!retio && errno == EACCES) { /* exists but probably a directory */
3689 st_rc = PerlLIO_stat(p, &st);
3691 if(S_ISDIR(st.st_mode))
3693 else if(S_ISBLK(st.st_mode))
3704 /* doopen_pm(): return the equivalent of PerlIO_openn() on the given name,
3705 * but first check for bad names (\0) and non-files.
3706 * Also if the filename ends in .pm and unless PERL_DISABLE_PMC,
3707 * try loading Foo.pmc first.
3709 #ifndef PERL_DISABLE_PMC
3711 S_doopen_pm(pTHX_ SV *name)
3714 const char *p = SvPV_const(name, namelen);
3716 PERL_ARGS_ASSERT_DOOPEN_PM;
3718 /* check the name before trying for the .pmc name to avoid the
3719 * warning referring to the .pmc which the user probably doesn't
3720 * know or care about
3722 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3725 if (memENDPs(p, namelen, ".pm")) {
3726 SV *const pmcsv = sv_newmortal();
3729 SvSetSV_nosteal(pmcsv,name);
3730 sv_catpvs(pmcsv, "c");
3732 pmcio = check_type_and_open(pmcsv);
3736 return check_type_and_open(name);
3739 # define doopen_pm(name) check_type_and_open(name)
3740 #endif /* !PERL_DISABLE_PMC */
3742 /* require doesn't search in @INC for absolute names, or when the name is
3743 explicitly relative the current directory: i.e. ./, ../ */
3744 PERL_STATIC_INLINE bool
3745 S_path_is_searchable(const char *name)
3747 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3749 if (PERL_FILE_IS_ABSOLUTE(name)
3751 || (*name == '.' && ((name[1] == '/' ||
3752 (name[1] == '.' && name[2] == '/'))
3753 || (name[1] == '\\' ||
3754 ( name[1] == '.' && name[2] == '\\')))
3757 || (*name == '.' && (name[1] == '/' ||
3758 (name[1] == '.' && name[2] == '/')))
3769 /* implement 'require 5.010001' */
3772 S_require_version(pTHX_ SV *sv)
3776 sv = sv_2mortal(new_version(sv));
3777 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3778 upg_version(PL_patchlevel, TRUE);
3779 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3780 if ( vcmp(sv,PL_patchlevel) <= 0 )
3781 DIE(aTHX_ "Perls since %" SVf " too modern--this is %" SVf ", stopped",
3782 SVfARG(sv_2mortal(vnormal(sv))),
3783 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3787 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3790 SV * const req = SvRV(sv);
3791 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3793 /* get the left hand term */
3794 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3796 first = SvIV(*av_fetch(lav,0,0));
3797 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3798 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3799 || av_count(lav) > 2 /* FP with > 3 digits */
3800 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3802 DIE(aTHX_ "Perl %" SVf " required--this is only "
3803 "%" SVf ", stopped",
3804 SVfARG(sv_2mortal(vnormal(req))),
3805 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3808 else { /* probably 'use 5.10' or 'use 5.8' */
3812 if (av_count(lav) > 1)
3813 second = SvIV(*av_fetch(lav,1,0));
3815 second /= second >= 600 ? 100 : 10;
3816 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3817 (int)first, (int)second);
3818 upg_version(hintsv, TRUE);
3820 DIE(aTHX_ "Perl %" SVf " required (did you mean %" SVf "?)"
3821 "--this is only %" SVf ", stopped",
3822 SVfARG(sv_2mortal(vnormal(req))),
3823 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3824 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3833 /* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3834 * The first form will have already been converted at compile time to
3835 * the second form */
3838 S_require_file(pTHX_ SV *sv)
3848 int vms_unixname = 0;
3851 /* tryname is the actual pathname (with @INC prefix) which was loaded.
3852 * It's stored as a value in %INC, and used for error messages */
3853 const char *tryname = NULL;
3854 SV *namesv = NULL; /* SV equivalent of tryname */
3855 const U8 gimme = GIMME_V;
3856 int filter_has_file = 0;
3857 PerlIO *tryrsfp = NULL;
3858 SV *filter_cache = NULL;
3859 SV *filter_state = NULL;
3860 SV *filter_sub = NULL;
3864 bool path_searchable;
3865 I32 old_savestack_ix;
3866 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3867 const char *const op_name = op_is_require ? "require" : "do";
3868 SV ** svp_cached = NULL;
3870 assert(op_is_require || PL_op->op_type == OP_DOFILE);
3873 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3874 name = SvPV_nomg_const(sv, len);
3875 if (!(name && len > 0 && *name))
3876 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3879 /* try to return earlier (save the SAFE_PATHNAME check) if INC already got the name */
3880 if (op_is_require) {
3881 /* can optimize to only perform one single lookup */
3882 svp_cached = hv_fetch(GvHVn(PL_incgv), (char*) name, len, 0);
3883 if ( svp_cached && (SvGETMAGIC(*svp_cached), SvOK(*svp_cached)) ) RETPUSHYES;
3887 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3888 if (!op_is_require) {
3892 DIE(aTHX_ "Can't locate %s: %s",
3893 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3894 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3897 TAINT_PROPER(op_name);
3899 path_searchable = path_is_searchable(name);
3902 /* The key in the %ENV hash is in the syntax of file passed as the argument
3903 * usually this is in UNIX format, but sometimes in VMS format, which
3904 * can result in a module being pulled in more than once.
3905 * To prevent this, the key must be stored in UNIX format if the VMS
3906 * name can be translated to UNIX.
3910 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3912 unixlen = strlen(unixname);
3918 /* if not VMS or VMS name can not be translated to UNIX, pass it
3921 unixname = (char *) name;
3924 if (op_is_require) {
3925 /* reuse the previous hv_fetch result if possible */
3926 SV * const * const svp = svp_cached ? svp_cached : hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3928 /* we already did a get magic if this was cached */
3934 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3935 "Compilation failed in require", unixname);
3938 /*XXX OPf_KIDS should always be true? -dapm 4/2017 */
3939 if (PL_op->op_flags & OPf_KIDS) {
3940 SVOP * const kid = (SVOP*)cUNOP->op_first;
3942 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3943 /* Make sure that a bareword module name (e.g. ::Foo::Bar)
3944 * doesn't map to a naughty pathname like /Foo/Bar.pm.
3945 * Note that the parser will normally detect such errors
3946 * at compile time before we reach here, but
3947 * Perl_load_module() can fake up an identical optree
3948 * without going near the parser, and being able to put
3949 * anything as the bareword. So we include a duplicate set
3950 * of checks here at runtime.
3952 const STRLEN package_len = len - 3;
3953 const char slashdot[2] = {'/', '.'};
3955 const char backslashdot[2] = {'\\', '.'};
3958 /* Disallow *purported* barewords that map to absolute
3959 filenames, filenames relative to the current or parent
3960 directory, or (*nix) hidden filenames. Also sanity check
3961 that the generated filename ends .pm */
3962 if (!path_searchable || len < 3 || name[0] == '.'
3963 || !memEQs(name + package_len, len - package_len, ".pm"))
3964 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%" SVf "\"", sv);
3965 if (memchr(name, 0, package_len)) {
3966 /* diag_listed_as: Bareword in require contains "%s" */
3967 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3969 if (ninstr(name, name + package_len, slashdot,
3970 slashdot + sizeof(slashdot))) {
3971 /* diag_listed_as: Bareword in require contains "%s" */
3972 DIE(aTHX_ "Bareword in require contains \"/.\"");
3975 if (ninstr(name, name + package_len, backslashdot,
3976 backslashdot + sizeof(backslashdot))) {
3977 /* diag_listed_as: Bareword in require contains "%s" */
3978 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3985 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
3987 /* Try to locate and open a file, possibly using @INC */
3989 /* with "/foo/bar.pm", "./foo.pm" and "../foo/bar.pm", try to load
3990 * the file directly rather than via @INC ... */
3991 if (!path_searchable) {
3992 /* At this point, name is SvPVX(sv) */
3994 tryrsfp = doopen_pm(sv);
3997 /* ... but if we fail, still search @INC for code references;
3998 * these are applied even on non-searchable paths (except
3999 * if we got EACESS).
4001 * For searchable paths, just search @INC normally
4003 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
4004 AV * const ar = GvAVn(PL_incgv);
4011 namesv = newSV_type(SVt_PV);
4012 for (i = 0; i <= AvFILL(ar); i++) {
4013 SV * const dirsv = *av_fetch(ar, i, TRUE);
4021 if (SvTYPE(SvRV(loader)) == SVt_PVAV
4022 && !SvOBJECT(SvRV(loader)))
4024 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
4028 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%" UVxf "/%s",
4029 PTR2UV(SvRV(dirsv)), name);
4030 tryname = SvPVX_const(namesv);
4033 if (SvPADTMP(nsv)) {
4034 nsv = sv_newmortal();
4035 SvSetSV_nosteal(nsv,sv);
4038 ENTER_with_name("call_INC");
4046 if (SvGMAGICAL(loader)) {
4047 SV *l = sv_newmortal();
4048 sv_setsv_nomg(l, loader);
4051 if (sv_isobject(loader))
4052 count = call_method("INC", G_LIST);
4054 count = call_sv(loader, G_LIST);
4064 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
4065 && !isGV_with_GP(SvRV(arg))) {
4066 filter_cache = SvRV(arg);
4073 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
4077 if (isGV_with_GP(arg)) {
4078 IO * const io = GvIO((const GV *)arg);
4083 tryrsfp = IoIFP(io);
4084 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
4085 PerlIO_close(IoOFP(io));
4096 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
4098 SvREFCNT_inc_simple_void_NN(filter_sub);
4101 filter_state = SP[i];
4102 SvREFCNT_inc_simple_void(filter_state);
4106 if (!tryrsfp && (filter_cache || filter_sub)) {
4107 tryrsfp = PerlIO_open(BIT_BUCKET,
4113 /* FREETMPS may free our filter_cache */
4114 SvREFCNT_inc_simple_void(filter_cache);
4118 LEAVE_with_name("call_INC");
4120 /* Now re-mortalize it. */
4121 sv_2mortal(filter_cache);
4123 /* Adjust file name if the hook has set an %INC entry.
4124 This needs to happen after the FREETMPS above. */
4125 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
4127 tryname = SvPV_nolen_const(*svp);
4134 filter_has_file = 0;
4135 filter_cache = NULL;
4137 SvREFCNT_dec_NN(filter_state);
4138 filter_state = NULL;
4141 SvREFCNT_dec_NN(filter_sub);
4145 else if (path_searchable) {
4146 /* match against a plain @INC element (non-searchable
4147 * paths are only matched against refs in @INC) */
4152 dir = SvPV_nomg_const(dirsv, dirlen);
4158 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
4162 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
4165 sv_setpv(namesv, unixdir);
4166 sv_catpv(namesv, unixname);
4168 /* The equivalent of
4169 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4170 but without the need to parse the format string, or
4171 call strlen on either pointer, and with the correct
4172 allocation up front. */
4174 char *tmp = SvGROW(namesv, dirlen + len + 2);
4176 memcpy(tmp, dir, dirlen);
4179 /* Avoid '<dir>//<file>' */
4180 if (!dirlen || *(tmp-1) != '/') {
4183 /* So SvCUR_set reports the correct length below */
4187 /* name came from an SV, so it will have a '\0' at the
4188 end that we can copy as part of this memcpy(). */
4189 memcpy(tmp, name, len + 1);
4191 SvCUR_set(namesv, dirlen + len + 1);
4195 TAINT_PROPER(op_name);
4196 tryname = SvPVX_const(namesv);
4197 tryrsfp = doopen_pm(namesv);
4199 if (tryname[0] == '.' && tryname[1] == '/') {
4201 while (*++tryname == '/') {}
4205 else if (errno == EMFILE || errno == EACCES) {
4206 /* no point in trying other paths if out of handles;
4207 * on the other hand, if we couldn't open one of the
4208 * files, then going on with the search could lead to
4209 * unexpected results; see perl #113422
4218 /* at this point we've ether opened a file (tryrsfp) or set errno */
4220 saved_errno = errno; /* sv_2mortal can realloc things */
4223 /* we failed; croak if require() or return undef if do() */
4224 if (op_is_require) {
4225 if(saved_errno == EMFILE || saved_errno == EACCES) {
4226 /* diag_listed_as: Can't locate %s */
4227 DIE(aTHX_ "Can't locate %s: %s: %s",
4228 name, tryname, Strerror(saved_errno));
4230 if (path_searchable) { /* did we lookup @INC? */
4231 AV * const ar = GvAVn(PL_incgv);
4233 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4234 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4235 for (i = 0; i <= AvFILL(ar); i++) {
4236 sv_catpvs(inc, " ");
4237 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4239 if (memENDPs(name, len, ".pm")) {
4240 const char *e = name + len - (sizeof(".pm") - 1);
4242 bool utf8 = cBOOL(SvUTF8(sv));
4244 /* if the filename, when converted from "Foo/Bar.pm"
4245 * form back to Foo::Bar form, makes a valid
4246 * package name (i.e. parseable by C<require
4247 * Foo::Bar>), then emit a hint.
4249 * this loop is modelled after the one in
4253 if (utf8 && isIDFIRST_utf8_safe(c, e)) {
4255 while (c < e && isIDCONT_utf8_safe(
4256 (const U8*) c, (const U8*) e))
4259 else if (isWORDCHAR_A(*c)) {
4260 while (c < e && isWORDCHAR_A(*c))
4269 if (c == e && isIDFIRST_lazy_if_safe(name, e, utf8)) {
4270 sv_catpvs(msg, " (you may need to install the ");
4271 for (c = name; c < e; c++) {
4273 sv_catpvs(msg, "::");
4276 sv_catpvn(msg, c, 1);
4279 sv_catpvs(msg, " module)");
4282 else if (memENDs(name, len, ".h")) {
4283 sv_catpvs(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4285 else if (memENDs(name, len, ".ph")) {
4286 sv_catpvs(msg, " (did you run h2ph?)");
4289 /* diag_listed_as: Can't locate %s */
4291 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4295 DIE(aTHX_ "Can't locate %s", name);
4298 #ifdef DEFAULT_INC_EXCLUDES_DOT
4302 /* the complication is to match the logic from doopen_pm() so
4303 * we don't treat do "sda1" as a previously successful "do".
4305 bool do_warn = namesv && ckWARN_d(WARN_DEPRECATED)
4306 && PerlLIO_stat(name, &st) == 0 && !S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode)
4307 && (io = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &sv)) != NULL;
4313 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4314 "do \"%s\" failed, '.' is no longer in @INC; "
4315 "did you mean do \"./%s\"?",
4324 SETERRNO(0, SS_NORMAL);
4326 /* Update %INC. Assume success here to prevent recursive requirement. */
4327 /* name is never assigned to again, so len is still strlen(name) */
4328 /* Check whether a hook in @INC has already filled %INC */
4330 (void)hv_store(GvHVn(PL_incgv),
4331 unixname, unixlen, newSVpv(tryname,0),0);
4333 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4335 (void)hv_store(GvHVn(PL_incgv),
4336 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4339 /* Now parse the file */
4341 old_savestack_ix = PL_savestack_ix;
4342 SAVECOPFILE_FREE(&PL_compiling);
4343 CopFILE_set(&PL_compiling, tryname);
4344 lex_start(NULL, tryrsfp, 0);
4346 if (filter_sub || filter_cache) {
4347 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4348 than hanging another SV from it. In turn, filter_add() optionally
4349 takes the SV to use as the filter (or creates a new SV if passed
4350 NULL), so simply pass in whatever value filter_cache has. */
4351 SV * const fc = filter_cache ? newSV(0) : NULL;
4353 if (fc) sv_copypv(fc, filter_cache);
4354 datasv = filter_add(S_run_user_filter, fc);
4355 IoLINES(datasv) = filter_has_file;
4356 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4357 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4360 /* switch to eval mode */
4362 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
4363 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
4365 SAVECOPLINE(&PL_compiling);
4366 CopLINE_set(&PL_compiling, 0);
4370 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
4373 op = PL_op->op_next;
4375 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
4381 /* also used for: pp_dofile() */
4385 RUN_PP_CATCHABLY(Perl_pp_require);
4392 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4393 ? S_require_version(aTHX_ sv)
4394 : S_require_file(aTHX_ sv);
4399 /* This is a op added to hold the hints hash for
4400 pp_entereval. The hash can be modified by the code
4401 being eval'ed, so we return a copy instead. */
4406 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4418 char tbuf[TYPE_DIGITS(long) + 12];
4426 I32 old_savestack_ix;
4428 RUN_PP_CATCHABLY(Perl_pp_entereval);
4431 was = PL_breakable_sub_gen;
4432 saved_delete = FALSE;
4436 bytes = PL_op->op_private & OPpEVAL_BYTES;
4438 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4439 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4441 else if (PL_hints & HINT_LOCALIZE_HH || (
4442 PL_op->op_private & OPpEVAL_COPHH
4443 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4445 saved_hh = cop_hints_2hv(PL_curcop, 0);
4446 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4450 /* make sure we've got a plain PV (no overload etc) before testing
4451 * for taint. Making a copy here is probably overkill, but better
4452 * safe than sorry */
4454 const char * const p = SvPV_const(sv, len);
4456 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4457 lex_flags |= LEX_START_COPIED;
4459 if (bytes && SvUTF8(sv))
4460 SvPVbyte_force(sv, len);
4462 else if (bytes && SvUTF8(sv)) {
4463 /* Don't modify someone else's scalar */
4466 (void)sv_2mortal(sv);
4467 SvPVbyte_force(sv,len);
4468 lex_flags |= LEX_START_COPIED;
4471 TAINT_IF(SvTAINTED(sv));
4472 TAINT_PROPER("eval");
4474 old_savestack_ix = PL_savestack_ix;
4476 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4477 ? LEX_IGNORE_UTF8_HINTS
4478 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4482 /* switch to eval mode */
4484 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4485 SV * const temp_sv = sv_newmortal();
4486 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%" IVdf "]",
4487 (unsigned long)++PL_evalseq,
4488 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4489 tmpbuf = SvPVX(temp_sv);
4490 len = SvCUR(temp_sv);
4493 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4494 SAVECOPFILE_FREE(&PL_compiling);
4495 CopFILE_set(&PL_compiling, tmpbuf+2);
4496 SAVECOPLINE(&PL_compiling);
4497 CopLINE_set(&PL_compiling, 1);
4498 /* special case: an eval '' executed within the DB package gets lexically
4499 * placed in the first non-DB CV rather than the current CV - this
4500 * allows the debugger to execute code, find lexicals etc, in the
4501 * scope of the code being debugged. Passing &seq gets find_runcv
4502 * to do the dirty work for us */
4503 runcv = find_runcv(&seq);
4506 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
4507 cx_pusheval(cx, PL_op->op_next, NULL);
4509 /* prepare to compile string */
4511 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4512 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4514 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4515 deleting the eval's FILEGV from the stash before gv_check() runs
4516 (i.e. before run-time proper). To work around the coredump that
4517 ensues, we always turn GvMULTI_on for any globals that were
4518 introduced within evals. See force_ident(). GSAR 96-10-12 */
4519 char *const safestr = savepvn(tmpbuf, len);
4520 SAVEDELETE(PL_defstash, safestr, len);
4521 saved_delete = TRUE;
4526 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
4527 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4528 ? PERLDB_LINE_OR_SAVESRC
4529 : PERLDB_SAVESRC_NOSUBS) {
4530 /* Retain the filegv we created. */
4531 } else if (!saved_delete) {
4532 char *const safestr = savepvn(tmpbuf, len);
4533 SAVEDELETE(PL_defstash, safestr, len);
4535 return PL_eval_start;
4537 /* We have already left the scope set up earlier thanks to the LEAVE
4538 in doeval_compile(). */
4539 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4540 ? PERLDB_LINE_OR_SAVESRC
4541 : PERLDB_SAVESRC_INVALID) {
4542 /* Retain the filegv we created. */
4543 } else if (!saved_delete) {
4544 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4546 return PL_op->op_next;
4551 /* also tail-called by pp_return */
4566 assert(CxTYPE(cx) == CXt_EVAL);
4568 oldsp = PL_stack_base + cx->blk_oldsp;
4569 gimme = cx->blk_gimme;
4571 /* did require return a false value? */
4572 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4573 && !(gimme == G_SCALAR
4574 ? SvTRUE_NN(*PL_stack_sp)
4575 : PL_stack_sp > oldsp);
4577 if (gimme == G_VOID) {
4578 PL_stack_sp = oldsp;
4579 /* free now to avoid late-called destructors clobbering $@ */
4583 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
4585 /* the cx_popeval does a leavescope, which frees the optree associated
4586 * with eval, which if it frees the nextstate associated with
4587 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4588 * regex when running under 'use re Debug' because it needs PL_curcop
4589 * to get the current hints. So restore it early.
4591 PL_curcop = cx->blk_oldcop;
4593 /* grab this value before cx_popeval restores the old PL_in_eval */
4594 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4595 retop = cx->blk_eval.retop;
4596 evalcv = cx->blk_eval.cv;
4598 assert(CvDEPTH(evalcv) == 1);
4600 CvDEPTH(evalcv) = 0;
4602 /* pop the CXt_EVAL, and if a require failed, croak */
4603 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
4611 /* Ops that implement try/catch syntax
4612 * Note the asymmetry here:
4613 * pp_entertrycatch does two pushblocks
4614 * pp_leavetrycatch pops only the outer one; the inner one is popped by
4615 * pp_poptry or by stack-unwind of die within the try block
4618 PP(pp_entertrycatch)
4621 const U8 gimme = GIMME_V;
4623 RUN_PP_CATCHABLY(Perl_pp_entertrycatch);
4627 Perl_pp_enter(aTHX); /* performs cx_pushblock(CXt_BLOCK, ...) */
4629 save_scalar(PL_errgv);
4632 cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK|CXp_TRY), gimme,
4633 PL_stack_sp, PL_savestack_ix);
4634 cx_pushtry(cx, cLOGOP->op_other);
4636 PL_in_eval = EVAL_INEVAL;
4641 PP(pp_leavetrycatch)
4643 /* leavetrycatch is leave */
4644 return Perl_pp_leave(aTHX);
4649 /* poptry is leavetry */
4650 return Perl_pp_leavetry(aTHX);
4657 save_clearsv(&(PAD_SVl(PL_op->op_targ)));
4658 sv_setsv(TARG, ERRSV);
4661 return cLOGOP->op_other;
4664 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4665 close to the related Perl_create_eval_scope. */
4667 Perl_delete_eval_scope(pTHX)
4678 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4679 also needed by Perl_fold_constants. */
4681 Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
4684 const U8 gimme = GIMME_V;
4686 cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK), gimme,
4687 PL_stack_sp, PL_savestack_ix);
4688 cx_pusheval(cx, retop, NULL);
4690 PL_in_eval = EVAL_INEVAL;
4691 if (flags & G_KEEPERR)
4692 PL_in_eval |= EVAL_KEEPERR;
4695 if (flags & G_FAKINGEVAL) {
4696 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4702 OP *retop = cLOGOP->op_other->op_next;
4704 RUN_PP_CATCHABLY(Perl_pp_entertry);
4708 create_eval_scope(retop, 0);
4710 return PL_op->op_next;
4714 /* also tail-called by pp_return */
4726 assert(CxTYPE(cx) == CXt_EVAL);
4727 oldsp = PL_stack_base + cx->blk_oldsp;
4728 gimme = cx->blk_gimme;
4730 if (gimme == G_VOID) {
4731 PL_stack_sp = oldsp;
4732 /* free now to avoid late-called destructors clobbering $@ */
4736 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4740 retop = CxTRY(cx) ? PL_op->op_next : cx->blk_eval.retop;
4751 const U8 gimme = GIMME_V;
4755 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4756 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
4758 cx = cx_pushblock(CXt_GIVEN, gimme, SP, PL_savestack_ix);
4759 cx_pushgiven(cx, origsv);
4769 PERL_UNUSED_CONTEXT;
4772 assert(CxTYPE(cx) == CXt_GIVEN);
4773 oldsp = PL_stack_base + cx->blk_oldsp;
4774 gimme = cx->blk_gimme;
4776 if (gimme == G_VOID)
4777 PL_stack_sp = oldsp;
4779 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4789 /* Helper routines used by pp_smartmatch */
4791 S_make_matcher(pTHX_ REGEXP *re)
4793 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4795 PERL_ARGS_ASSERT_MAKE_MATCHER;
4797 PM_SETRE(matcher, ReREFCNT_inc(re));
4799 SAVEFREEOP((OP *) matcher);
4800 ENTER_with_name("matcher"); SAVETMPS;
4806 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4811 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4813 PL_op = (OP *) matcher;
4816 (void) Perl_pp_match(aTHX);
4818 result = SvTRUEx(POPs);
4825 S_destroy_matcher(pTHX_ PMOP *matcher)
4827 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4828 PERL_UNUSED_ARG(matcher);
4831 LEAVE_with_name("matcher");
4834 /* Do a smart match */
4837 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4838 return do_smartmatch(NULL, NULL, 0);
4841 /* This version of do_smartmatch() implements the
4842 * table of smart matches that is found in perlsyn.
4845 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4849 bool object_on_left = FALSE;
4850 SV *e = TOPs; /* e is for 'expression' */
4851 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4853 /* Take care only to invoke mg_get() once for each argument.
4854 * Currently we do this by copying the SV if it's magical. */
4856 if (!copied && SvGMAGICAL(d))
4857 d = sv_mortalcopy(d);
4864 e = sv_mortalcopy(e);
4866 /* First of all, handle overload magic of the rightmost argument */
4869 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4870 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4872 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4879 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4882 SP -= 2; /* Pop the values */
4887 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4894 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4895 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4896 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4898 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4899 object_on_left = TRUE;
4902 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4904 if (object_on_left) {
4905 goto sm_any_sub; /* Treat objects like scalars */
4907 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4908 /* Test sub truth for each key */
4910 bool andedresults = TRUE;
4911 HV *hv = (HV*) SvRV(d);
4912 I32 numkeys = hv_iterinit(hv);
4913 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4916 while ( (he = hv_iternext(hv)) ) {
4917 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4918 ENTER_with_name("smartmatch_hash_key_test");
4921 PUSHs(hv_iterkeysv(he));
4923 c = call_sv(e, G_SCALAR);
4926 andedresults = FALSE;
4928 andedresults = SvTRUEx(POPs) && andedresults;
4930 LEAVE_with_name("smartmatch_hash_key_test");
4937 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4938 /* Test sub truth for each element */
4940 bool andedresults = TRUE;
4941 AV *av = (AV*) SvRV(d);
4942 const Size_t len = av_count(av);
4943 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4946 for (i = 0; i < len; ++i) {
4947 SV * const * const svp = av_fetch(av, i, FALSE);
4948 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4949 ENTER_with_name("smartmatch_array_elem_test");
4955 c = call_sv(e, G_SCALAR);
4958 andedresults = FALSE;
4960 andedresults = SvTRUEx(POPs) && andedresults;
4962 LEAVE_with_name("smartmatch_array_elem_test");
4971 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4972 ENTER_with_name("smartmatch_coderef");
4977 c = call_sv(e, G_SCALAR);
4981 else if (SvTEMP(TOPs))
4982 SvREFCNT_inc_void(TOPs);
4984 LEAVE_with_name("smartmatch_coderef");
4989 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4990 if (object_on_left) {
4991 goto sm_any_hash; /* Treat objects like scalars */
4993 else if (!SvOK(d)) {
4994 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4997 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4998 /* Check that the key-sets are identical */
5000 HV *other_hv = MUTABLE_HV(SvRV(d));
5003 U32 this_key_count = 0,
5004 other_key_count = 0;
5005 HV *hv = MUTABLE_HV(SvRV(e));
5007 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
5008 /* Tied hashes don't know how many keys they have. */
5009 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
5010 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
5014 HV * const temp = other_hv;
5020 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
5024 /* The hashes have the same number of keys, so it suffices
5025 to check that one is a subset of the other. */
5026 (void) hv_iterinit(hv);
5027 while ( (he = hv_iternext(hv)) ) {
5028 SV *key = hv_iterkeysv(he);
5030 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
5033 if(!hv_exists_ent(other_hv, key, 0)) {
5034 (void) hv_iterinit(hv); /* reset iterator */
5040 (void) hv_iterinit(other_hv);
5041 while ( hv_iternext(other_hv) )
5045 other_key_count = HvUSEDKEYS(other_hv);
5047 if (this_key_count != other_key_count)
5052 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5053 AV * const other_av = MUTABLE_AV(SvRV(d));
5054 const Size_t other_len = av_count(other_av);
5056 HV *hv = MUTABLE_HV(SvRV(e));
5058 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
5059 for (i = 0; i < other_len; ++i) {
5060 SV ** const svp = av_fetch(other_av, i, FALSE);
5061 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
5062 if (svp) { /* ??? When can this not happen? */
5063 if (hv_exists_ent(hv, *svp, 0))
5069 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
5070 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
5073 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
5075 HV *hv = MUTABLE_HV(SvRV(e));
5077 (void) hv_iterinit(hv);
5078 while ( (he = hv_iternext(hv)) ) {
5079 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
5081 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
5083 (void) hv_iterinit(hv);
5084 destroy_matcher(matcher);
5089 destroy_matcher(matcher);
5095 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
5096 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
5103 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
5104 if (object_on_left) {
5105 goto sm_any_array; /* Treat objects like scalars */
5107 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5108 AV * const other_av = MUTABLE_AV(SvRV(e));
5109 const Size_t other_len = av_count(other_av);
5112 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
5113 for (i = 0; i < other_len; ++i) {
5114 SV ** const svp = av_fetch(other_av, i, FALSE);
5116 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
5117 if (svp) { /* ??? When can this not happen? */
5118 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
5124 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5125 AV *other_av = MUTABLE_AV(SvRV(d));
5126 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
5127 if (av_count(MUTABLE_AV(SvRV(e))) != av_count(other_av))
5131 const Size_t other_len = av_count(other_av);
5133 if (NULL == seen_this) {
5134 seen_this = newHV();
5135 (void) sv_2mortal(MUTABLE_SV(seen_this));
5137 if (NULL == seen_other) {
5138 seen_other = newHV();
5139 (void) sv_2mortal(MUTABLE_SV(seen_other));
5141 for(i = 0; i < other_len; ++i) {
5142 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5143 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
5145 if (!this_elem || !other_elem) {
5146 if ((this_elem && SvOK(*this_elem))
5147 || (other_elem && SvOK(*other_elem)))
5150 else if (hv_exists_ent(seen_this,
5151 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
5152 hv_exists_ent(seen_other,
5153 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
5155 if (*this_elem != *other_elem)
5159 (void)hv_store_ent(seen_this,
5160 sv_2mortal(newSViv(PTR2IV(*this_elem))),
5162 (void)hv_store_ent(seen_other,
5163 sv_2mortal(newSViv(PTR2IV(*other_elem))),
5169 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
5170 (void) do_smartmatch(seen_this, seen_other, 0);
5172 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5181 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
5182 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
5185 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
5186 const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
5189 for(i = 0; i < this_len; ++i) {
5190 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5191 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
5193 if (svp && matcher_matches_sv(matcher, *svp)) {
5195 destroy_matcher(matcher);
5200 destroy_matcher(matcher);
5204 else if (!SvOK(d)) {
5205 /* undef ~~ array */
5206 const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
5209 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
5210 for (i = 0; i < this_len; ++i) {
5211 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5212 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
5213 if (!svp || !SvOK(*svp))
5222 const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
5224 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
5225 for (i = 0; i < this_len; ++i) {
5226 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5233 /* infinite recursion isn't supposed to happen here */
5234 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
5235 (void) do_smartmatch(NULL, NULL, 1);
5237 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5246 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
5247 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5248 SV *t = d; d = e; e = t;
5249 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
5252 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5253 SV *t = d; d = e; e = t;
5254 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
5255 goto sm_regex_array;
5258 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
5261 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
5263 result = matcher_matches_sv(matcher, d);
5265 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
5266 destroy_matcher(matcher);
5271 /* See if there is overload magic on left */
5272 else if (object_on_left && SvAMAGIC(d)) {
5274 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
5275 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
5278 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
5286 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
5289 else if (!SvOK(d)) {
5290 /* undef ~~ scalar ; we already know that the scalar is SvOK */
5291 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
5296 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
5297 DEBUG_M(if (SvNIOK(e))
5298 Perl_deb(aTHX_ " applying rule Any-Num\n");
5300 Perl_deb(aTHX_ " applying rule Num-numish\n");
5302 /* numeric comparison */
5305 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
5306 (void) Perl_pp_i_eq(aTHX);
5308 (void) Perl_pp_eq(aTHX);
5316 /* As a last resort, use string comparison */
5317 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5320 return Perl_pp_seq(aTHX);
5327 const U8 gimme = GIMME_V;
5329 /* This is essentially an optimization: if the match
5330 fails, we don't want to push a context and then
5331 pop it again right away, so we skip straight
5332 to the op that follows the leavewhen.
5333 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5335 if (!(PL_op->op_flags & OPf_SPECIAL) && !SvTRUEx(POPs)) {
5336 if (gimme == G_SCALAR)
5337 PUSHs(&PL_sv_undef);
5338 RETURNOP(cLOGOP->op_other->op_next);
5341 cx = cx_pushblock(CXt_WHEN, gimme, SP, PL_savestack_ix);
5355 assert(CxTYPE(cx) == CXt_WHEN);
5356 gimme = cx->blk_gimme;
5358 cxix = dopoptogivenfor(cxstack_ix);
5360 /* diag_listed_as: Can't "when" outside a topicalizer */
5361 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5362 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5364 oldsp = PL_stack_base + cx->blk_oldsp;
5365 if (gimme == G_VOID)
5366 PL_stack_sp = oldsp;
5368 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
5370 /* pop the WHEN, BLOCK and anything else before the GIVEN/FOR */
5371 assert(cxix < cxstack_ix);
5374 cx = &cxstack[cxix];
5376 if (CxFOREACH(cx)) {
5377 /* emulate pp_next. Note that any stack(s) cleanup will be
5378 * done by the pp_unstack which op_nextop should point to */
5381 PL_curcop = cx->blk_oldcop;
5382 return cx->blk_loop.my_op->op_nextop;
5386 assert(cx->blk_givwhen.leave_op->op_type == OP_LEAVEGIVEN);
5387 return cx->blk_givwhen.leave_op;
5397 cxix = dopoptowhen(cxstack_ix);
5399 DIE(aTHX_ "Can't \"continue\" outside a when block");
5401 if (cxix < cxstack_ix)
5405 assert(CxTYPE(cx) == CXt_WHEN);
5406 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5410 nextop = cx->blk_givwhen.leave_op->op_next;
5421 cxix = dopoptogivenfor(cxstack_ix);
5423 DIE(aTHX_ "Can't \"break\" outside a given block");
5425 cx = &cxstack[cxix];
5427 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5429 if (cxix < cxstack_ix)
5432 /* Restore the sp at the time we entered the given block */
5434 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5436 return cx->blk_givwhen.leave_op;
5440 S_doparseform(pTHX_ SV *sv)
5443 char *s = SvPV(sv, len);
5445 char *base = NULL; /* start of current field */
5446 I32 skipspaces = 0; /* number of contiguous spaces seen */
5447 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5448 bool repeat = FALSE; /* ~~ seen on this line */
5449 bool postspace = FALSE; /* a text field may need right padding */
5452 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5454 bool ischop; /* it's a ^ rather than a @ */
5455 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5456 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5460 PERL_ARGS_ASSERT_DOPARSEFORM;
5463 Perl_croak(aTHX_ "Null picture in formline");
5465 if (SvTYPE(sv) >= SVt_PVMG) {
5466 /* This might, of course, still return NULL. */
5467 mg = mg_find(sv, PERL_MAGIC_fm);
5469 sv_upgrade(sv, SVt_PVMG);
5473 /* still the same as previously-compiled string? */
5474 SV *old = mg->mg_obj;
5475 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5476 && len == SvCUR(old)
5477 && strnEQ(SvPVX(old), s, len)
5479 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5483 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5484 Safefree(mg->mg_ptr);
5490 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5491 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5494 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5495 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5499 /* estimate the buffer size needed */
5500 for (base = s; s <= send; s++) {
5501 if (*s == '\n' || *s == '@' || *s == '^')
5507 Newx(fops, maxops, U32);
5512 *fpc++ = FF_LINEMARK;
5513 noblank = repeat = FALSE;
5531 case ' ': case '\t':
5547 *fpc++ = FF_LITERAL;
5555 *fpc++ = (U32)skipspaces;
5559 *fpc++ = FF_NEWLINE;
5563 arg = fpc - linepc + 1;
5570 *fpc++ = FF_LINEMARK;
5571 noblank = repeat = FALSE;
5580 ischop = s[-1] == '^';
5586 arg = (s - base) - 1;
5588 *fpc++ = FF_LITERAL;
5594 if (*s == '*') { /* @* or ^* */
5596 *fpc++ = 2; /* skip the @* or ^* */
5598 *fpc++ = FF_LINESNGL;
5601 *fpc++ = FF_LINEGLOB;
5603 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5604 arg = ischop ? FORM_NUM_BLANK : 0;
5609 const char * const f = ++s;
5612 arg |= FORM_NUM_POINT + (s - f);
5614 *fpc++ = s - base; /* fieldsize for FETCH */
5615 *fpc++ = FF_DECIMAL;
5617 unchopnum |= ! ischop;
5619 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5620 arg = ischop ? FORM_NUM_BLANK : 0;
5622 s++; /* skip the '0' first */
5626 const char * const f = ++s;
5629 arg |= FORM_NUM_POINT + (s - f);
5631 *fpc++ = s - base; /* fieldsize for FETCH */
5632 *fpc++ = FF_0DECIMAL;
5634 unchopnum |= ! ischop;
5636 else { /* text field */
5638 bool ismore = FALSE;
5641 while (*++s == '>') ;
5642 prespace = FF_SPACE;
5644 else if (*s == '|') {
5645 while (*++s == '|') ;
5646 prespace = FF_HALFSPACE;
5651 while (*++s == '<') ;
5654 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5658 *fpc++ = s - base; /* fieldsize for FETCH */
5660 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5663 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5677 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5680 mg->mg_ptr = (char *) fops;
5681 mg->mg_len = arg * sizeof(U32);
5682 mg->mg_obj = sv_copy;
5683 mg->mg_flags |= MGf_REFCOUNTED;
5685 if (unchopnum && repeat)
5686 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5693 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5695 /* Can value be printed in fldsize chars, using %*.*f ? */
5699 int intsize = fldsize - (value < 0 ? 1 : 0);
5701 if (frcsize & FORM_NUM_POINT)
5703 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5706 while (intsize--) pwr *= 10.0;
5707 while (frcsize--) eps /= 10.0;
5710 if (value + eps >= pwr)
5713 if (value - eps <= -pwr)
5720 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5722 SV * const datasv = FILTER_DATA(idx);
5723 const int filter_has_file = IoLINES(datasv);
5724 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5725 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5730 char *prune_from = NULL;
5731 bool read_from_cache = FALSE;
5735 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5737 assert(maxlen >= 0);
5740 /* I was having segfault trouble under Linux 2.2.5 after a
5741 parse error occurred. (Had to hack around it with a test
5742 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5743 not sure where the trouble is yet. XXX */
5746 SV *const cache = datasv;
5749 const char *cache_p = SvPV(cache, cache_len);
5753 /* Running in block mode and we have some cached data already.
5755 if (cache_len >= umaxlen) {
5756 /* In fact, so much data we don't even need to call
5761 const char *const first_nl =
5762 (const char *)memchr(cache_p, '\n', cache_len);
5764 take = first_nl + 1 - cache_p;
5768 sv_catpvn(buf_sv, cache_p, take);
5769 sv_chop(cache, cache_p + take);
5770 /* Definitely not EOF */
5774 sv_catsv(buf_sv, cache);
5776 umaxlen -= cache_len;
5779 read_from_cache = TRUE;
5783 /* Filter API says that the filter appends to the contents of the buffer.
5784 Usually the buffer is "", so the details don't matter. But if it's not,
5785 then clearly what it contains is already filtered by this filter, so we
5786 don't want to pass it in a second time.
5787 I'm going to use a mortal in case the upstream filter croaks. */
5788 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5789 ? sv_newmortal() : buf_sv;
5790 SvUPGRADE(upstream, SVt_PV);
5792 if (filter_has_file) {
5793 status = FILTER_READ(idx+1, upstream, 0);
5796 if (filter_sub && status >= 0) {
5800 ENTER_with_name("call_filter_sub");
5805 DEFSV_set(upstream);
5809 PUSHs(filter_state);
5812 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5822 SV * const errsv = ERRSV;
5823 if (SvTRUE_NN(errsv))
5824 err = newSVsv(errsv);
5830 LEAVE_with_name("call_filter_sub");
5833 if (SvGMAGICAL(upstream)) {
5835 if (upstream == buf_sv) mg_free(buf_sv);
5837 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5838 if(!err && SvOK(upstream)) {
5839 got_p = SvPV_nomg(upstream, got_len);
5841 if (got_len > umaxlen) {
5842 prune_from = got_p + umaxlen;
5845 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5846 if (first_nl && first_nl + 1 < got_p + got_len) {
5847 /* There's a second line here... */
5848 prune_from = first_nl + 1;
5852 if (!err && prune_from) {
5853 /* Oh. Too long. Stuff some in our cache. */
5854 STRLEN cached_len = got_p + got_len - prune_from;
5855 SV *const cache = datasv;
5858 /* Cache should be empty. */
5859 assert(!SvCUR(cache));
5862 sv_setpvn(cache, prune_from, cached_len);
5863 /* If you ask for block mode, you may well split UTF-8 characters.
5864 "If it breaks, you get to keep both parts"
5865 (Your code is broken if you don't put them back together again
5866 before something notices.) */
5867 if (SvUTF8(upstream)) {
5870 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5872 /* Cannot just use sv_setpvn, as that could free the buffer
5873 before we have a chance to assign it. */
5874 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5875 got_len - cached_len);
5877 /* Can't yet be EOF */
5882 /* If they are at EOF but buf_sv has something in it, then they may never
5883 have touched the SV upstream, so it may be undefined. If we naively
5884 concatenate it then we get a warning about use of uninitialised value.
5886 if (!err && upstream != buf_sv &&
5888 sv_catsv_nomg(buf_sv, upstream);
5890 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5893 IoLINES(datasv) = 0;
5895 SvREFCNT_dec(filter_state);
5896 IoTOP_GV(datasv) = NULL;
5899 SvREFCNT_dec(filter_sub);
5900 IoBOTTOM_GV(datasv) = NULL;
5902 filter_del(S_run_user_filter);
5908 if (status == 0 && read_from_cache) {
5909 /* If we read some data from the cache (and by getting here it implies
5910 that we emptied the cache) then we aren't yet at EOF, and mustn't
5911 report that to our caller. */
5918 * ex: set ts=8 sts=4 sw=4 et: