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;
1008 const U8 gimme = GIMME_V;
1009 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
1015 /* first, move source pointer to the next item in the source list */
1016 ++PL_markstack_ptr[-1];
1018 /* if there are new items, push them into the destination list */
1019 if (items && gimme != G_VOID) {
1020 /* might need to make room back there first */
1021 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1022 /* XXX this implementation is very pessimal because the stack
1023 * is repeatedly extended for every set of items. Is possible
1024 * to do this without any stack extension or copying at all
1025 * by maintaining a separate list over which the map iterates
1026 * (like foreach does). --gsar */
1028 /* everything in the stack after the destination list moves
1029 * towards the end the stack by the amount of room needed */
1030 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1032 /* items to shift up (accounting for the moved source pointer) */
1033 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1035 /* This optimization is by Ben Tilly and it does
1036 * things differently from what Sarathy (gsar)
1037 * is describing. The downside of this optimization is
1038 * that leaves "holes" (uninitialized and hopefully unused areas)
1039 * to the Perl stack, but on the other hand this
1040 * shouldn't be a problem. If Sarathy's idea gets
1041 * implemented, this optimization should become
1042 * irrelevant. --jhi */
1044 shift = count; /* Avoid shifting too often --Ben Tilly */
1048 dst = (SP += shift);
1049 PL_markstack_ptr[-1] += shift;
1050 *PL_markstack_ptr += shift;
1054 /* copy the new items down to the destination list */
1055 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1056 if (gimme == G_ARRAY) {
1057 /* add returned items to the collection (making mortal copies
1058 * if necessary), then clear the current temps stack frame
1059 * *except* for those items. We do this splicing the items
1060 * into the start of the tmps frame (so some items may be on
1061 * the tmps stack twice), then moving PL_tmps_floor above
1062 * them, then freeing the frame. That way, the only tmps that
1063 * accumulate over iterations are the return values for map.
1064 * We have to do to this way so that everything gets correctly
1065 * freed if we die during the map.
1069 /* make space for the slice */
1070 EXTEND_MORTAL(items);
1071 tmpsbase = PL_tmps_floor + 1;
1072 Move(PL_tmps_stack + tmpsbase,
1073 PL_tmps_stack + tmpsbase + items,
1074 PL_tmps_ix - PL_tmps_floor,
1076 PL_tmps_ix += items;
1081 sv = sv_mortalcopy(sv);
1083 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1085 /* clear the stack frame except for the items */
1086 PL_tmps_floor += items;
1088 /* FREETMPS may have cleared the TEMP flag on some of the items */
1091 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1094 /* scalar context: we don't care about which values map returns
1095 * (we use undef here). And so we certainly don't want to do mortal
1096 * copies of meaningless values. */
1097 while (items-- > 0) {
1099 *dst-- = &PL_sv_undef;
1107 LEAVE_with_name("grep_item"); /* exit inner scope */
1110 if (PL_markstack_ptr[-1] > TOPMARK) {
1112 (void)POPMARK; /* pop top */
1113 LEAVE_with_name("grep"); /* exit outer scope */
1114 (void)POPMARK; /* pop src */
1115 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1116 (void)POPMARK; /* pop dst */
1117 SP = PL_stack_base + POPMARK; /* pop original mark */
1118 if (gimme == G_SCALAR) {
1122 else if (gimme == G_ARRAY)
1129 ENTER_with_name("grep_item"); /* enter inner scope */
1132 /* set $_ to the new source item */
1133 src = PL_stack_base[PL_markstack_ptr[-1]];
1134 if (SvPADTMP(src)) {
1135 src = sv_mortalcopy(src);
1140 RETURNOP(cLOGOP->op_other);
1149 if (GIMME_V == G_ARRAY)
1152 if (SvTRUE_NN(targ))
1153 return cLOGOP->op_other;
1162 if (GIMME_V == G_ARRAY) {
1163 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1167 SV * const targ = PAD_SV(PL_op->op_targ);
1170 if (PL_op->op_private & OPpFLIP_LINENUM) {
1171 if (GvIO(PL_last_in_gv)) {
1172 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1175 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1177 flip = SvIV(sv) == SvIV(GvSV(gv));
1180 flip = SvTRUE_NN(sv);
1183 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1184 if (PL_op->op_flags & OPf_SPECIAL) {
1192 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1201 /* This code tries to decide if "$left .. $right" should use the
1202 magical string increment, or if the range is numeric. Initially,
1203 an exception was made for *any* string beginning with "0" (see
1204 [#18165], AMS 20021031), but now that is only applied when the
1205 string's length is also >1 - see the rules now documented in
1208 #define RANGE_IS_NUMERIC(left,right) ( \
1209 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1210 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1211 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1212 looks_like_number(left)) && SvPOKp(left) \
1213 && !(*SvPVX_const(left) == '0' && SvCUR(left)>1 ) )) \
1214 && (!SvOK(right) || looks_like_number(right))))
1220 if (GIMME_V == G_ARRAY) {
1226 if (RANGE_IS_NUMERIC(left,right)) {
1228 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1229 (SvOK(right) && (SvIOK(right)
1230 ? SvIsUV(right) && SvUV(right) > IV_MAX
1231 : SvNV_nomg(right) > (NV) IV_MAX)))
1232 DIE(aTHX_ "Range iterator outside integer range");
1233 i = SvIV_nomg(left);
1234 j = SvIV_nomg(right);
1236 /* Dance carefully around signed max. */
1237 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1240 /* The wraparound of signed integers is undefined
1241 * behavior, but here we aim for count >=1, and
1242 * negative count is just wrong. */
1244 #if IVSIZE > Size_t_size
1251 Perl_croak(aTHX_ "Out of memory during list extend");
1258 SV * const sv = sv_2mortal(newSViv(i));
1260 if (n) /* avoid incrementing above IV_MAX */
1266 const char * const lpv = SvPV_nomg_const(left, llen);
1267 const char * const tmps = SvPV_nomg_const(right, len);
1269 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1270 if (DO_UTF8(right) && IN_UNI_8_BIT)
1271 len = sv_len_utf8_nomg(right);
1272 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1274 if (strEQ(SvPVX_const(sv),tmps))
1276 sv = sv_2mortal(newSVsv(sv));
1283 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1287 if (PL_op->op_private & OPpFLIP_LINENUM) {
1288 if (GvIO(PL_last_in_gv)) {
1289 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1292 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1293 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1297 flop = SvTRUE_NN(sv);
1301 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1302 sv_catpvs(targ, "E0");
1312 static const char * const context_name[] = {
1314 NULL, /* CXt_WHEN never actually needs "block" */
1315 NULL, /* CXt_BLOCK never actually needs "block" */
1316 NULL, /* CXt_GIVEN never actually needs "block" */
1317 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1318 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1319 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1320 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1321 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
1329 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1333 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1335 for (i = cxstack_ix; i >= 0; i--) {
1336 const PERL_CONTEXT * const cx = &cxstack[i];
1337 switch (CxTYPE(cx)) {
1346 /* diag_listed_as: Exiting subroutine via %s */
1347 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1348 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1349 if (CxTYPE(cx) == CXt_NULL) /* sort BLOCK */
1352 case CXt_LOOP_PLAIN:
1353 case CXt_LOOP_LAZYIV:
1354 case CXt_LOOP_LAZYSV:
1358 STRLEN cx_label_len = 0;
1359 U32 cx_label_flags = 0;
1360 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1362 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1365 (const U8*)cx_label, cx_label_len,
1366 (const U8*)label, len) == 0)
1368 (const U8*)label, len,
1369 (const U8*)cx_label, cx_label_len) == 0)
1370 : (len == cx_label_len && ((cx_label == label)
1371 || memEQ(cx_label, label, len))) )) {
1372 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1373 (long)i, cx_label));
1376 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1387 Perl_dowantarray(pTHX)
1389 const U8 gimme = block_gimme();
1390 return (gimme == G_VOID) ? G_SCALAR : gimme;
1393 /* note that this function has mostly been superseded by Perl_gimme_V */
1396 Perl_block_gimme(pTHX)
1398 const I32 cxix = dopopto_cursub();
1403 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1405 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1411 Perl_is_lvalue_sub(pTHX)
1413 const I32 cxix = dopopto_cursub();
1414 assert(cxix >= 0); /* We should only be called from inside subs */
1416 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1417 return CxLVAL(cxstack + cxix);
1422 /* only used by cx_pushsub() */
1424 Perl_was_lvalue_sub(pTHX)
1426 const I32 cxix = dopoptosub(cxstack_ix-1);
1427 assert(cxix >= 0); /* We should only be called from inside subs */
1429 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1430 return CxLVAL(cxstack + cxix);
1436 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1440 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1442 PERL_UNUSED_CONTEXT;
1445 for (i = startingblock; i >= 0; i--) {
1446 const PERL_CONTEXT * const cx = &cxstk[i];
1447 switch (CxTYPE(cx)) {
1451 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1452 * twice; the first for the normal foo() call, and the second
1453 * for a faked up re-entry into the sub to execute the
1454 * code block. Hide this faked entry from the world. */
1455 if (cx->cx_type & CXp_SUB_RE_FAKE)
1457 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1463 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1467 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1475 S_dopoptoeval(pTHX_ I32 startingblock)
1478 for (i = startingblock; i >= 0; i--) {
1479 const PERL_CONTEXT *cx = &cxstack[i];
1480 switch (CxTYPE(cx)) {
1484 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1492 S_dopoptoloop(pTHX_ I32 startingblock)
1495 for (i = startingblock; i >= 0; i--) {
1496 const PERL_CONTEXT * const cx = &cxstack[i];
1497 switch (CxTYPE(cx)) {
1506 /* diag_listed_as: Exiting subroutine via %s */
1507 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1508 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1509 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
1512 case CXt_LOOP_PLAIN:
1513 case CXt_LOOP_LAZYIV:
1514 case CXt_LOOP_LAZYSV:
1517 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1524 /* find the next GIVEN or FOR (with implicit $_) loop context block */
1527 S_dopoptogivenfor(pTHX_ I32 startingblock)
1530 for (i = startingblock; i >= 0; i--) {
1531 const PERL_CONTEXT *cx = &cxstack[i];
1532 switch (CxTYPE(cx)) {
1536 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found given at cx=%ld)\n", (long)i));
1538 case CXt_LOOP_PLAIN:
1539 assert(!(cx->cx_type & CXp_FOR_DEF));
1541 case CXt_LOOP_LAZYIV:
1542 case CXt_LOOP_LAZYSV:
1545 if (cx->cx_type & CXp_FOR_DEF) {
1546 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found foreach at cx=%ld)\n", (long)i));
1555 S_dopoptowhen(pTHX_ I32 startingblock)
1558 for (i = startingblock; i >= 0; i--) {
1559 const PERL_CONTEXT *cx = &cxstack[i];
1560 switch (CxTYPE(cx)) {
1564 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1571 /* dounwind(): pop all contexts above (but not including) cxix.
1572 * Note that it clears the savestack frame associated with each popped
1573 * context entry, but doesn't free any temps.
1574 * It does a cx_popblock() of the last frame that it pops, and leaves
1575 * cxstack_ix equal to cxix.
1579 Perl_dounwind(pTHX_ I32 cxix)
1581 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1584 while (cxstack_ix > cxix) {
1585 PERL_CONTEXT *cx = CX_CUR();
1587 CX_DEBUG(cx, "UNWIND");
1588 /* Note: we don't need to restore the base context info till the end. */
1592 switch (CxTYPE(cx)) {
1595 /* CXt_SUBST is not a block context type, so skip the
1596 * cx_popblock(cx) below */
1597 if (cxstack_ix == cxix + 1) {
1608 case CXt_LOOP_PLAIN:
1609 case CXt_LOOP_LAZYIV:
1610 case CXt_LOOP_LAZYSV:
1623 /* these two don't have a POPFOO() */
1629 if (cxstack_ix == cxix + 1) {
1638 Perl_qerror(pTHX_ SV *err)
1640 PERL_ARGS_ASSERT_QERROR;
1643 if (PL_in_eval & EVAL_KEEPERR) {
1644 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1648 sv_catsv(ERRSV, err);
1651 sv_catsv(PL_errors, err);
1653 Perl_warn(aTHX_ "%" SVf, SVfARG(err));
1655 ++PL_parser->error_count;
1660 /* pop a CXt_EVAL context and in addition, if it was a require then
1662 * 0: do nothing extra;
1663 * 1: undef $INC{$name}; croak "$name did not return a true value";
1664 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1668 S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
1670 SV *namesv = NULL; /* init to avoid dumb compiler warning */
1674 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
1676 /* keep namesv alive after cx_popeval() */
1677 namesv = cx->blk_eval.old_namesv;
1678 cx->blk_eval.old_namesv = NULL;
1687 HV *inc_hv = GvHVn(PL_incgv);
1688 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1689 const char *key = SvPVX_const(namesv);
1692 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1693 fmt = "%" SVf " did not return a true value";
1697 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1698 fmt = "%" SVf "Compilation failed in require";
1700 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1703 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1708 /* die_unwind(): this is the final destination for the various croak()
1709 * functions. If we're in an eval, unwind the context and other stacks
1710 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1711 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1712 * to is a require the exception will be rethrown, as requires don't
1713 * actually trap exceptions.
1717 Perl_die_unwind(pTHX_ SV *msv)
1720 U8 in_eval = PL_in_eval;
1721 PERL_ARGS_ASSERT_DIE_UNWIND;
1726 /* We need to keep this SV alive through all the stack unwinding
1727 * and FREETMPSing below, while ensuing that it doesn't leak
1728 * if we call out to something which then dies (e.g. sub STORE{die}
1729 * when unlocalising a tied var). So we do a dance with
1730 * mortalising and SAVEFREEing.
1732 if (PL_phase == PERL_PHASE_DESTRUCT) {
1733 exceptsv = sv_mortalcopy(exceptsv);
1735 exceptsv = sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1739 * Historically, perl used to set ERRSV ($@) early in the die
1740 * process and rely on it not getting clobbered during unwinding.
1741 * That sucked, because it was liable to get clobbered, so the
1742 * setting of ERRSV used to emit the exception from eval{} has
1743 * been moved to much later, after unwinding (see just before
1744 * JMPENV_JUMP below). However, some modules were relying on the
1745 * early setting, by examining $@ during unwinding to use it as
1746 * a flag indicating whether the current unwinding was caused by
1747 * an exception. It was never a reliable flag for that purpose,
1748 * being totally open to false positives even without actual
1749 * clobberage, but was useful enough for production code to
1750 * semantically rely on it.
1752 * We'd like to have a proper introspective interface that
1753 * explicitly describes the reason for whatever unwinding
1754 * operations are currently in progress, so that those modules
1755 * work reliably and $@ isn't further overloaded. But we don't
1756 * have one yet. In its absence, as a stopgap measure, ERRSV is
1757 * now *additionally* set here, before unwinding, to serve as the
1758 * (unreliable) flag that it used to.
1760 * This behaviour is temporary, and should be removed when a
1761 * proper way to detect exceptional unwinding has been developed.
1762 * As of 2010-12, the authors of modules relying on the hack
1763 * are aware of the issue, because the modules failed on
1764 * perls 5.13.{1..7} which had late setting of $@ without this
1765 * early-setting hack.
1767 if (!(in_eval & EVAL_KEEPERR)) {
1768 /* remove any read-only/magic from the SV, so we don't
1769 get infinite recursion when setting ERRSV */
1771 sv_setsv_flags(ERRSV, exceptsv,
1772 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
1775 if (in_eval & EVAL_KEEPERR) {
1776 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1780 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1781 && PL_curstackinfo->si_prev)
1791 JMPENV *restartjmpenv;
1794 if (cxix < cxstack_ix)
1798 assert(CxTYPE(cx) == CXt_EVAL);
1800 /* return false to the caller of eval */
1801 oldsp = PL_stack_base + cx->blk_oldsp;
1802 gimme = cx->blk_gimme;
1803 if (gimme == G_SCALAR)
1804 *++oldsp = &PL_sv_undef;
1805 PL_stack_sp = oldsp;
1807 restartjmpenv = cx->blk_eval.cur_top_env;
1808 restartop = cx->blk_eval.retop;
1810 /* We need a FREETMPS here to avoid late-called destructors
1811 * clobbering $@ *after* we set it below, e.g.
1812 * sub DESTROY { eval { die "X" } }
1813 * eval { my $x = bless []; die $x = 0, "Y" };
1815 * Here the clearing of the $x ref mortalises the anon array,
1816 * which needs to be freed *before* $& is set to "Y",
1817 * otherwise it gets overwritten with "X".
1819 * However, the FREETMPS will clobber exceptsv, so preserve it
1820 * on the savestack for now.
1822 SAVEFREESV(SvREFCNT_inc_simple_NN(exceptsv));
1824 /* now we're about to pop the savestack, so re-mortalise it */
1825 sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1827 /* Note that unlike pp_entereval, pp_require isn't supposed to
1828 * trap errors. So if we're a require, after we pop the
1829 * CXt_EVAL that pp_require pushed, rethrow the error with
1830 * croak(exceptsv). This is all handled by the call below when
1833 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
1835 if (!(in_eval & EVAL_KEEPERR)) {
1837 sv_setsv(ERRSV, exceptsv);
1839 PL_restartjmpenv = restartjmpenv;
1840 PL_restartop = restartop;
1842 NOT_REACHED; /* NOTREACHED */
1846 write_to_stderr(exceptsv);
1848 NOT_REACHED; /* NOTREACHED */
1854 if (SvTRUE_NN(left) != SvTRUE_NN(right))
1862 =for apidoc_section $CV
1864 =for apidoc caller_cx
1866 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1867 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1868 information returned to Perl by C<caller>. Note that XSUBs don't get a
1869 stack frame, so C<caller_cx(0, NULL)> will return information for the
1870 immediately-surrounding Perl code.
1872 This function skips over the automatic calls to C<&DB::sub> made on the
1873 behalf of the debugger. If the stack frame requested was a sub called by
1874 C<DB::sub>, the return value will be the frame for the call to
1875 C<DB::sub>, since that has the correct line number/etc. for the call
1876 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1877 frame for the sub call itself.
1882 const PERL_CONTEXT *
1883 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1885 I32 cxix = dopopto_cursub();
1886 const PERL_CONTEXT *cx;
1887 const PERL_CONTEXT *ccstack = cxstack;
1888 const PERL_SI *top_si = PL_curstackinfo;
1891 /* we may be in a higher stacklevel, so dig down deeper */
1892 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1893 top_si = top_si->si_prev;
1894 ccstack = top_si->si_cxstack;
1895 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1899 /* caller() should not report the automatic calls to &DB::sub */
1900 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1901 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1905 cxix = dopoptosub_at(ccstack, cxix - 1);
1908 cx = &ccstack[cxix];
1909 if (dbcxp) *dbcxp = cx;
1911 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1912 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1913 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1914 field below is defined for any cx. */
1915 /* caller() should not report the automatic calls to &DB::sub */
1916 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1917 cx = &ccstack[dbcxix];
1926 const PERL_CONTEXT *cx;
1927 const PERL_CONTEXT *dbcx;
1929 const HEK *stash_hek;
1931 bool has_arg = MAXARG && TOPs;
1940 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1942 if (gimme != G_ARRAY) {
1949 CX_DEBUG(cx, "CALLER");
1950 assert(CopSTASH(cx->blk_oldcop));
1951 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1952 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1954 if (gimme != G_ARRAY) {
1957 PUSHs(&PL_sv_undef);
1960 sv_sethek(TARG, stash_hek);
1969 PUSHs(&PL_sv_undef);
1972 sv_sethek(TARG, stash_hek);
1975 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1976 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1977 cx->blk_sub.retop, TRUE);
1979 lcop = cx->blk_oldcop;
1980 mPUSHu(CopLINE(lcop));
1983 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1984 /* So is ccstack[dbcxix]. */
1985 if (CvHASGV(dbcx->blk_sub.cv)) {
1986 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1987 PUSHs(boolSV(CxHASARGS(cx)));
1990 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1991 PUSHs(boolSV(CxHASARGS(cx)));
1995 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1998 gimme = cx->blk_gimme;
1999 if (gimme == G_VOID)
2000 PUSHs(&PL_sv_undef);
2002 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
2003 if (CxTYPE(cx) == CXt_EVAL) {
2005 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
2006 SV *cur_text = cx->blk_eval.cur_text;
2007 if (SvCUR(cur_text) >= 2) {
2008 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
2009 SvUTF8(cur_text)|SVs_TEMP));
2012 /* I think this is will always be "", but be sure */
2013 PUSHs(sv_2mortal(newSVsv(cur_text)));
2019 else if (cx->blk_eval.old_namesv) {
2020 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
2023 /* eval BLOCK (try blocks have old_namesv == 0) */
2025 PUSHs(&PL_sv_undef);
2026 PUSHs(&PL_sv_undef);
2030 PUSHs(&PL_sv_undef);
2031 PUSHs(&PL_sv_undef);
2033 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
2034 && CopSTASH_eq(PL_curcop, PL_debstash))
2036 /* slot 0 of the pad contains the original @_ */
2037 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
2038 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2039 cx->blk_sub.olddepth+1]))[0]);
2040 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
2042 Perl_init_dbargs(aTHX);
2044 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
2045 av_extend(PL_dbargs, AvFILLp(ary) + off);
2046 if (AvFILLp(ary) + 1 + off)
2047 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
2048 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
2050 mPUSHi(CopHINTS_get(cx->blk_oldcop));
2053 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
2055 if (old_warnings == pWARN_NONE)
2056 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
2057 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
2058 mask = &PL_sv_undef ;
2059 else if (old_warnings == pWARN_ALL ||
2060 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
2061 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
2064 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2068 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2069 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2079 if (MAXARG < 1 || (!TOPs && !POPs)) {
2081 tmps = NULL, len = 0;
2084 tmps = SvPVx_const(POPs, len);
2085 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
2090 /* like pp_nextstate, but used instead when the debugger is active */
2094 PL_curcop = (COP*)PL_op;
2095 TAINT_NOT; /* Each statement is presumed innocent */
2096 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
2101 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2102 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
2106 const U8 gimme = G_ARRAY;
2107 GV * const gv = PL_DBgv;
2110 if (gv && isGV_with_GP(gv))
2113 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
2114 DIE(aTHX_ "No DB::DB routine defined");
2116 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2117 /* don't do recursive DB::DB call */
2127 (void)(*CvXSUB(cv))(aTHX_ cv);
2133 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
2134 cx_pushsub(cx, cv, PL_op->op_next, 0);
2135 /* OP_DBSTATE's op_private holds hint bits rather than
2136 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2137 * any CxLVAL() flags that have now been mis-calculated */
2144 if (CvDEPTH(cv) >= 2)
2145 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2146 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2147 RETURNOP(CvSTART(cv));
2159 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2171 assert(CxTYPE(cx) == CXt_BLOCK);
2173 if (PL_op->op_flags & OPf_SPECIAL)
2174 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2175 cx->blk_oldpm = PL_curpm;
2177 oldsp = PL_stack_base + cx->blk_oldsp;
2178 gimme = cx->blk_gimme;
2180 if (gimme == G_VOID)
2181 PL_stack_sp = oldsp;
2183 leave_adjust_stacks(oldsp, oldsp, gimme,
2184 PL_op->op_private & OPpLVALUE ? 3 : 1);
2194 S_outside_integer(pTHX_ SV *sv)
2197 const NV nv = SvNV_nomg(sv);
2198 if (Perl_isinfnan(nv))
2200 #ifdef NV_PRESERVES_UV
2201 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2204 if (nv <= (NV)IV_MIN)
2207 ((nv > (NV)UV_MAX ||
2208 SvUV_nomg(sv) > (UV)IV_MAX)))
2219 const U8 gimme = GIMME_V;
2220 void *itervarp; /* GV or pad slot of the iteration variable */
2221 SV *itersave; /* the old var in the iterator var slot */
2224 if (PL_op->op_targ) { /* "my" variable */
2225 itervarp = &PAD_SVl(PL_op->op_targ);
2226 itersave = *(SV**)itervarp;
2228 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2229 /* the SV currently in the pad slot is never live during
2230 * iteration (the slot is always aliased to one of the items)
2231 * so it's always stale */
2232 SvPADSTALE_on(itersave);
2234 SvREFCNT_inc_simple_void_NN(itersave);
2235 cxflags = CXp_FOR_PAD;
2238 SV * const sv = POPs;
2239 itervarp = (void *)sv;
2240 if (LIKELY(isGV(sv))) { /* symbol table variable */
2241 itersave = GvSV(sv);
2242 SvREFCNT_inc_simple_void(itersave);
2243 cxflags = CXp_FOR_GV;
2244 if (PL_op->op_private & OPpITER_DEF)
2245 cxflags |= CXp_FOR_DEF;
2247 else { /* LV ref: for \$foo (...) */
2248 assert(SvTYPE(sv) == SVt_PVMG);
2249 assert(SvMAGIC(sv));
2250 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2252 cxflags = CXp_FOR_LVREF;
2255 /* OPpITER_DEF (implicit $_) should only occur with a GV iter var */
2256 assert((cxflags & CXp_FOR_GV) || !(PL_op->op_private & OPpITER_DEF));
2258 /* Note that this context is initially set as CXt_NULL. Further on
2259 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2260 * there mustn't be anything in the blk_loop substruct that requires
2261 * freeing or undoing, in case we die in the meantime. And vice-versa.
2263 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
2264 cx_pushloop_for(cx, itervarp, itersave);
2266 if (PL_op->op_flags & OPf_STACKED) {
2267 /* OPf_STACKED implies either a single array: for(@), with a
2268 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2270 SV *maybe_ary = POPs;
2271 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2274 SV * const right = maybe_ary;
2275 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
2276 DIE(aTHX_ "Assigned value is not a reference");
2279 if (RANGE_IS_NUMERIC(sv,right)) {
2280 cx->cx_type |= CXt_LOOP_LAZYIV;
2281 if (S_outside_integer(aTHX_ sv) ||
2282 S_outside_integer(aTHX_ right))
2283 DIE(aTHX_ "Range iterator outside integer range");
2284 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2285 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2288 cx->cx_type |= CXt_LOOP_LAZYSV;
2289 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2290 cx->blk_loop.state_u.lazysv.end = right;
2291 SvREFCNT_inc_simple_void_NN(right);
2292 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2293 /* This will do the upgrade to SVt_PV, and warn if the value
2294 is uninitialised. */
2295 (void) SvPV_nolen_const(right);
2296 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2297 to replace !SvOK() with a pointer to "". */
2299 SvREFCNT_dec(right);
2300 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2304 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2305 /* for (@array) {} */
2306 cx->cx_type |= CXt_LOOP_ARY;
2307 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2308 SvREFCNT_inc_simple_void_NN(maybe_ary);
2309 cx->blk_loop.state_u.ary.ix =
2310 (PL_op->op_private & OPpITER_REVERSED) ?
2311 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2314 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
2316 else { /* iterating over items on the stack */
2317 cx->cx_type |= CXt_LOOP_LIST;
2318 cx->blk_oldsp = SP - PL_stack_base;
2319 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2320 cx->blk_loop.state_u.stack.ix =
2321 (PL_op->op_private & OPpITER_REVERSED)
2323 : cx->blk_loop.state_u.stack.basesp;
2324 /* pre-extend stack so pp_iter doesn't have to check every time
2325 * it pushes yes/no */
2335 const U8 gimme = GIMME_V;
2337 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
2338 cx_pushloop_plain(cx);
2351 assert(CxTYPE_is_LOOP(cx));
2352 oldsp = PL_stack_base + cx->blk_oldsp;
2353 base = CxTYPE(cx) == CXt_LOOP_LIST
2354 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
2356 gimme = cx->blk_gimme;
2358 if (gimme == G_VOID)
2361 leave_adjust_stacks(oldsp, base, gimme,
2362 PL_op->op_private & OPpLVALUE ? 3 : 1);
2365 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
2373 /* This duplicates most of pp_leavesub, but with additional code to handle
2374 * return args in lvalue context. It was forked from pp_leavesub to
2375 * avoid slowing down that function any further.
2377 * Any changes made to this function may need to be copied to pp_leavesub
2380 * also tail-called by pp_return
2391 assert(CxTYPE(cx) == CXt_SUB);
2393 if (CxMULTICALL(cx)) {
2394 /* entry zero of a stack is always PL_sv_undef, which
2395 * simplifies converting a '()' return into undef in scalar context */
2396 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2400 gimme = cx->blk_gimme;
2401 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
2403 if (gimme == G_VOID)
2404 PL_stack_sp = oldsp;
2406 U8 lval = CxLVAL(cx);
2407 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2408 const char *what = NULL;
2410 if (gimme == G_SCALAR) {
2412 /* check for bad return arg */
2413 if (oldsp < PL_stack_sp) {
2414 SV *sv = *PL_stack_sp;
2415 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2417 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2418 : "a readonly value" : "a temporary";
2423 /* sub:lvalue{} will take us here. */
2428 "Can't return %s from lvalue subroutine", what);
2432 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2434 if (lval & OPpDEREF) {
2435 /* lval_sub()->{...} and similar */
2439 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2445 assert(gimme == G_ARRAY);
2446 assert (!(lval & OPpDEREF));
2449 /* scan for bad return args */
2451 for (p = PL_stack_sp; p > oldsp; p--) {
2453 /* the PL_sv_undef exception is to allow things like
2454 * this to work, where PL_sv_undef acts as 'skip'
2455 * placeholder on the LHS of list assigns:
2456 * sub foo :lvalue { undef }
2457 * ($a, undef, foo(), $b) = 1..4;
2459 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2461 /* Might be flattened array after $#array = */
2462 what = SvREADONLY(sv)
2463 ? "a readonly value" : "a temporary";
2469 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2474 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
2476 retop = cx->blk_sub.retop;
2487 I32 cxix = dopopto_cursub();
2489 assert(cxstack_ix >= 0);
2490 if (cxix < cxstack_ix) {
2492 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2493 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2494 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2497 DIE(aTHX_ "Can't return outside a subroutine");
2499 * a sort block, which is a CXt_NULL not a CXt_SUB;
2500 * or a /(?{...})/ block.
2501 * Handle specially. */
2502 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2503 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2504 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
2505 if (cxstack_ix > 0) {
2506 /* See comment below about context popping. Since we know
2507 * we're scalar and not lvalue, we can preserve the return
2508 * value in a simpler fashion than there. */
2510 assert(cxstack[0].blk_gimme == G_SCALAR);
2511 if ( (sp != PL_stack_base)
2512 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2514 *SP = sv_mortalcopy(sv);
2517 /* caller responsible for popping cxstack[0] */
2521 /* There are contexts that need popping. Doing this may free the
2522 * return value(s), so preserve them first: e.g. popping the plain
2523 * loop here would free $x:
2524 * sub f { { my $x = 1; return $x } }
2525 * We may also need to shift the args down; for example,
2526 * for (1,2) { return 3,4 }
2527 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2528 * leave_adjust_stacks(), along with freeing any temps. Note that
2529 * whoever we tail-call (e.g. pp_leaveeval) will also call
2530 * leave_adjust_stacks(); however, the second call is likely to
2531 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2532 * pass them through, rather than copying them again. So this
2533 * isn't as inefficient as it sounds.
2535 cx = &cxstack[cxix];
2537 if (cx->blk_gimme != G_VOID)
2538 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
2540 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2544 cx = &cxstack[cxix]; /* CX stack may have been realloced */
2547 /* Like in the branch above, we need to handle any extra junk on
2548 * the stack. But because we're not also popping extra contexts, we
2549 * don't have to worry about prematurely freeing args. So we just
2550 * need to do the bare minimum to handle junk, and leave the main
2551 * arg processing in the function we tail call, e.g. pp_leavesub.
2552 * In list context we have to splice out the junk; in scalar
2553 * context we can leave as-is (pp_leavesub will later return the
2554 * top stack element). But for an empty arg list, e.g.
2555 * for (1,2) { return }
2556 * we need to set sp = oldsp so that pp_leavesub knows to push
2557 * &PL_sv_undef onto the stack.
2560 cx = &cxstack[cxix];
2561 oldsp = PL_stack_base + cx->blk_oldsp;
2562 if (oldsp != MARK) {
2563 SSize_t nargs = SP - MARK;
2565 if (cx->blk_gimme == G_ARRAY) {
2566 /* shift return args to base of call stack frame */
2567 Move(MARK + 1, oldsp + 1, nargs, SV*);
2568 PL_stack_sp = oldsp + nargs;
2572 PL_stack_sp = oldsp;
2576 /* fall through to a normal exit */
2577 switch (CxTYPE(cx)) {
2579 return CxEVALBLOCK(cx)
2580 ? Perl_pp_leavetry(aTHX)
2581 : Perl_pp_leaveeval(aTHX);
2583 return CvLVALUE(cx->blk_sub.cv)
2584 ? Perl_pp_leavesublv(aTHX)
2585 : Perl_pp_leavesub(aTHX);
2587 return Perl_pp_leavewrite(aTHX);
2589 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2593 /* find the enclosing loop or labelled loop and dounwind() back to it. */
2595 static PERL_CONTEXT *
2599 if (PL_op->op_flags & OPf_SPECIAL) {
2600 cxix = dopoptoloop(cxstack_ix);
2602 /* diag_listed_as: Can't "last" outside a loop block */
2603 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2609 const char * const label =
2610 PL_op->op_flags & OPf_STACKED
2611 ? SvPV(TOPs,label_len)
2612 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2613 const U32 label_flags =
2614 PL_op->op_flags & OPf_STACKED
2616 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2618 cxix = dopoptolabel(label, label_len, label_flags);
2620 /* diag_listed_as: Label not found for "last %s" */
2621 Perl_croak(aTHX_ "Label not found for \"%s %" SVf "\"",
2623 SVfARG(PL_op->op_flags & OPf_STACKED
2624 && !SvGMAGICAL(TOPp1s)
2626 : newSVpvn_flags(label,
2628 label_flags | SVs_TEMP)));
2630 if (cxix < cxstack_ix)
2632 return &cxstack[cxix];
2641 cx = S_unwind_loop(aTHX);
2643 assert(CxTYPE_is_LOOP(cx));
2644 PL_stack_sp = PL_stack_base
2645 + (CxTYPE(cx) == CXt_LOOP_LIST
2646 ? cx->blk_loop.state_u.stack.basesp
2652 /* Stack values are safe: */
2654 cx_poploop(cx); /* release loop vars ... */
2656 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2666 /* if not a bare 'next' in the main scope, search for it */
2668 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2669 cx = S_unwind_loop(aTHX);
2672 PL_curcop = cx->blk_oldcop;
2674 return (cx)->blk_loop.my_op->op_nextop;
2679 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
2680 OP* redo_op = cx->blk_loop.my_op->op_redoop;
2682 if (redo_op->op_type == OP_ENTER) {
2683 /* pop one less context to avoid $x being freed in while (my $x..) */
2686 assert(CxTYPE(cx) == CXt_BLOCK);
2687 redo_op = redo_op->op_next;
2693 PL_curcop = cx->blk_oldcop;
2698 #define UNENTERABLE (OP *)1
2699 #define GOTO_DEPTH 64
2702 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2705 static const char* const too_deep = "Target of goto is too deeply nested";
2707 PERL_ARGS_ASSERT_DOFINDLABEL;
2710 Perl_croak(aTHX_ "%s", too_deep);
2711 if (o->op_type == OP_LEAVE ||
2712 o->op_type == OP_SCOPE ||
2713 o->op_type == OP_LEAVELOOP ||
2714 o->op_type == OP_LEAVESUB ||
2715 o->op_type == OP_LEAVETRY ||
2716 o->op_type == OP_LEAVEGIVEN)
2718 *ops++ = cUNOPo->op_first;
2720 else if (oplimit - opstack < GOTO_DEPTH) {
2721 if (o->op_flags & OPf_KIDS
2722 && cUNOPo->op_first->op_type == OP_PUSHMARK) {
2723 *ops++ = UNENTERABLE;
2725 else if (o->op_flags & OPf_KIDS && PL_opargs[o->op_type]
2726 && OP_CLASS(o) != OA_LOGOP
2727 && o->op_type != OP_LINESEQ
2728 && o->op_type != OP_SREFGEN
2729 && o->op_type != OP_ENTEREVAL
2730 && o->op_type != OP_GLOB
2731 && o->op_type != OP_RV2CV) {
2732 OP * const kid = cUNOPo->op_first;
2733 if (OP_GIMME(kid, 0) != G_SCALAR || OpHAS_SIBLING(kid))
2734 *ops++ = UNENTERABLE;
2738 Perl_croak(aTHX_ "%s", too_deep);
2740 if (o->op_flags & OPf_KIDS) {
2742 OP * const kid1 = cUNOPo->op_first;
2743 /* First try all the kids at this level, since that's likeliest. */
2744 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2745 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2746 STRLEN kid_label_len;
2747 U32 kid_label_flags;
2748 const char *kid_label = CopLABEL_len_flags(kCOP,
2749 &kid_label_len, &kid_label_flags);
2751 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2754 (const U8*)kid_label, kid_label_len,
2755 (const U8*)label, len) == 0)
2757 (const U8*)label, len,
2758 (const U8*)kid_label, kid_label_len) == 0)
2759 : ( len == kid_label_len && ((kid_label == label)
2760 || memEQ(kid_label, label, len)))))
2764 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2765 bool first_kid_of_binary = FALSE;
2766 if (kid == PL_lastgotoprobe)
2768 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2771 else if (ops[-1] != UNENTERABLE
2772 && (ops[-1]->op_type == OP_NEXTSTATE ||
2773 ops[-1]->op_type == OP_DBSTATE))
2778 if (kid == kid1 && ops != opstack && ops[-1] == UNENTERABLE) {
2779 first_kid_of_binary = TRUE;
2782 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2784 if (first_kid_of_binary)
2785 *ops++ = UNENTERABLE;
2794 S_check_op_type(pTHX_ OP * const o)
2796 /* Eventually we may want to stack the needed arguments
2797 * for each op. For now, we punt on the hard ones. */
2798 /* XXX This comment seems to me like wishful thinking. --sprout */
2799 if (o == UNENTERABLE)
2801 "Can't \"goto\" into a binary or list expression");
2802 if (o->op_type == OP_ENTERITER)
2804 "Can't \"goto\" into the middle of a foreach loop");
2805 if (o->op_type == OP_ENTERGIVEN)
2807 "Can't \"goto\" into a \"given\" block");
2810 /* also used for: pp_dump() */
2818 OP *enterops[GOTO_DEPTH];
2819 const char *label = NULL;
2820 STRLEN label_len = 0;
2821 U32 label_flags = 0;
2822 const bool do_dump = (PL_op->op_type == OP_DUMP);
2823 static const char* const must_have_label = "goto must have label";
2825 if (PL_op->op_flags & OPf_STACKED) {
2826 /* goto EXPR or goto &foo */
2828 SV * const sv = POPs;
2831 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2832 /* This egregious kludge implements goto &subroutine */
2835 CV *cv = MUTABLE_CV(SvRV(sv));
2836 AV *arg = GvAV(PL_defgv);
2838 while (!CvROOT(cv) && !CvXSUB(cv)) {
2839 const GV * const gv = CvGV(cv);
2843 /* autoloaded stub? */
2844 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2846 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2848 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2849 if (autogv && (cv = GvCV(autogv)))
2851 tmpstr = sv_newmortal();
2852 gv_efullname3(tmpstr, gv, NULL);
2853 DIE(aTHX_ "Goto undefined subroutine &%" SVf, SVfARG(tmpstr));
2855 DIE(aTHX_ "Goto undefined subroutine");
2858 cxix = dopopto_cursub();
2860 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2862 cx = &cxstack[cxix];
2863 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2864 if (CxTYPE(cx) == CXt_EVAL) {
2866 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2867 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2869 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2870 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2872 else if (CxMULTICALL(cx))
2873 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2875 /* First do some returnish stuff. */
2877 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2879 if (cxix < cxstack_ix) {
2886 /* protect @_ during save stack unwind. */
2888 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2890 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2893 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2894 /* this is part of cx_popsub_args() */
2895 AV* av = MUTABLE_AV(PAD_SVl(0));
2896 assert(AvARRAY(MUTABLE_AV(
2897 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2898 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2900 /* we are going to donate the current @_ from the old sub
2901 * to the new sub. This first part of the donation puts a
2902 * new empty AV in the pad[0] slot of the old sub,
2903 * unless pad[0] and @_ differ (e.g. if the old sub did
2904 * local *_ = []); in which case clear the old pad[0]
2905 * array in the usual way */
2906 if (av == arg || AvREAL(av))
2907 clear_defarray(av, av == arg);
2908 else CLEAR_ARGARRAY(av);
2911 /* don't restore PL_comppad here. It won't be needed if the
2912 * sub we're going to is non-XS, but restoring it early then
2913 * croaking (e.g. the "Goto undefined subroutine" below)
2914 * means the CX block gets processed again in dounwind,
2915 * but this time with the wrong PL_comppad */
2917 /* A destructor called during LEAVE_SCOPE could have undefined
2918 * our precious cv. See bug #99850. */
2919 if (!CvROOT(cv) && !CvXSUB(cv)) {
2920 const GV * const gv = CvGV(cv);
2922 SV * const tmpstr = sv_newmortal();
2923 gv_efullname3(tmpstr, gv, NULL);
2924 DIE(aTHX_ "Goto undefined subroutine &%" SVf,
2927 DIE(aTHX_ "Goto undefined subroutine");
2930 if (CxTYPE(cx) == CXt_SUB) {
2931 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2932 SvREFCNT_dec_NN(cx->blk_sub.cv);
2935 /* Now do some callish stuff. */
2937 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2938 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2943 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2945 /* put GvAV(defgv) back onto stack */
2947 EXTEND(SP, items+1); /* @_ could have been extended. */
2952 bool r = cBOOL(AvREAL(arg));
2953 for (index=0; index<items; index++)
2957 SV ** const svp = av_fetch(arg, index, 0);
2958 sv = svp ? *svp : NULL;
2960 else sv = AvARRAY(arg)[index];
2962 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2963 : sv_2mortal(newSVavdefelem(arg, index, 1));
2967 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2968 /* Restore old @_ */
2969 CX_POP_SAVEARRAY(cx);
2972 retop = cx->blk_sub.retop;
2973 PL_comppad = cx->blk_sub.prevcomppad;
2974 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2976 /* XS subs don't have a CXt_SUB, so pop it;
2977 * this is a cx_popblock(), less all the stuff we already did
2978 * for cx_topblock() earlier */
2979 PL_curcop = cx->blk_oldcop;
2980 /* this is cx_popsub, less all the stuff we already did */
2981 PL_curstackinfo->si_cxsubix = cx->blk_sub.old_cxsubix;
2985 /* Push a mark for the start of arglist */
2988 (void)(*CvXSUB(cv))(aTHX_ cv);
2993 PADLIST * const padlist = CvPADLIST(cv);
2995 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2997 /* partial unrolled cx_pushsub(): */
2999 cx->blk_sub.cv = cv;
3000 cx->blk_sub.olddepth = CvDEPTH(cv);
3003 SvREFCNT_inc_simple_void_NN(cv);
3004 if (CvDEPTH(cv) > 1) {
3005 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
3006 sub_crush_depth(cv);
3007 pad_push(padlist, CvDEPTH(cv));
3009 PL_curcop = cx->blk_oldcop;
3010 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
3013 /* second half of donating @_ from the old sub to the
3014 * new sub: abandon the original pad[0] AV in the
3015 * new sub, and replace it with the donated @_.
3016 * pad[0] takes ownership of the extra refcount
3017 * we gave arg earlier */
3019 SvREFCNT_dec(PAD_SVl(0));
3020 PAD_SVl(0) = (SV *)arg;
3021 SvREFCNT_inc_simple_void_NN(arg);
3024 /* GvAV(PL_defgv) might have been modified on scope
3025 exit, so point it at arg again. */
3026 if (arg != GvAV(PL_defgv)) {
3027 AV * const av = GvAV(PL_defgv);
3028 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
3033 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
3034 Perl_get_db_sub(aTHX_ NULL, cv);
3036 CV * const gotocv = get_cvs("DB::goto", 0);
3038 PUSHMARK( PL_stack_sp );
3039 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
3044 retop = CvSTART(cv);
3045 goto putback_return;
3050 label = SvPV_nomg_const(sv, label_len);
3051 label_flags = SvUTF8(sv);
3054 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
3055 /* goto LABEL or dump LABEL */
3056 label = cPVOP->op_pv;
3057 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
3058 label_len = strlen(label);
3060 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3065 OP *gotoprobe = NULL;
3066 bool leaving_eval = FALSE;
3067 bool in_block = FALSE;
3068 bool pseudo_block = FALSE;
3069 PERL_CONTEXT *last_eval_cx = NULL;
3073 PL_lastgotoprobe = NULL;
3075 for (ix = cxstack_ix; ix >= 0; ix--) {
3077 switch (CxTYPE(cx)) {
3079 leaving_eval = TRUE;
3080 if (!CxEVALBLOCK(cx)) {
3081 gotoprobe = (last_eval_cx ?
3082 last_eval_cx->blk_eval.old_eval_root :
3087 /* else fall through */
3088 case CXt_LOOP_PLAIN:
3089 case CXt_LOOP_LAZYIV:
3090 case CXt_LOOP_LAZYSV:
3095 gotoprobe = OpSIBLING(cx->blk_oldcop);
3101 gotoprobe = OpSIBLING(cx->blk_oldcop);
3104 gotoprobe = PL_main_root;
3107 gotoprobe = CvROOT(cx->blk_sub.cv);
3108 pseudo_block = cBOOL(CxMULTICALL(cx));
3112 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3115 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3116 CxTYPE(cx), (long) ix);
3117 gotoprobe = PL_main_root;
3123 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3124 enterops, enterops + GOTO_DEPTH);
3127 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
3128 sibl1->op_type == OP_UNSTACK &&
3129 (sibl2 = OpSIBLING(sibl1)))
3131 retop = dofindlabel(sibl2,
3132 label, label_len, label_flags, enterops,
3133 enterops + GOTO_DEPTH);
3139 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3140 PL_lastgotoprobe = gotoprobe;
3143 DIE(aTHX_ "Can't find label %" UTF8f,
3144 UTF8fARG(label_flags, label_len, label));
3146 /* if we're leaving an eval, check before we pop any frames
3147 that we're not going to punt, otherwise the error
3150 if (leaving_eval && *enterops && enterops[1]) {
3152 for (i = 1; enterops[i]; i++)
3153 S_check_op_type(aTHX_ enterops[i]);
3156 if (*enterops && enterops[1]) {
3157 I32 i = enterops[1] != UNENTERABLE
3158 && enterops[1]->op_type == OP_ENTER && in_block
3162 deprecate("\"goto\" to jump into a construct");
3165 /* pop unwanted frames */
3167 if (ix < cxstack_ix) {
3169 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3175 /* push wanted frames */
3177 if (*enterops && enterops[1]) {
3178 OP * const oldop = PL_op;
3179 ix = enterops[1] != UNENTERABLE
3180 && enterops[1]->op_type == OP_ENTER && in_block
3183 for (; enterops[ix]; ix++) {
3184 PL_op = enterops[ix];
3185 S_check_op_type(aTHX_ PL_op);
3186 DEBUG_l( Perl_deb(aTHX_ "pp_goto: Entering %s\n",
3188 PL_op->op_ppaddr(aTHX);
3196 if (!retop) retop = PL_main_start;
3198 PL_restartop = retop;
3199 PL_do_undump = TRUE;
3203 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3204 PL_do_undump = FALSE;
3222 anum = 0; (void)POPs;
3228 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3231 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3234 PL_exit_flags |= PERL_EXIT_EXPECTED;
3236 PUSHs(&PL_sv_undef);
3243 S_save_lines(pTHX_ AV *array, SV *sv)
3245 const char *s = SvPVX_const(sv);
3246 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3249 PERL_ARGS_ASSERT_SAVE_LINES;
3251 while (s && s < send) {
3253 SV * const tmpstr = newSV_type(SVt_PVMG);
3255 t = (const char *)memchr(s, '\n', send - s);
3261 sv_setpvn(tmpstr, s, t - s);
3262 av_store(array, line++, tmpstr);
3270 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3272 0 is used as continue inside eval,
3274 3 is used for a die caught by an inner eval - continue inner loop
3276 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3277 establish a local jmpenv to handle exception traps.
3282 S_docatch(pTHX_ Perl_ppaddr_t firstpp)
3285 OP * const oldop = PL_op;
3288 assert(CATCH_GET == TRUE);
3293 PL_op = firstpp(aTHX);
3298 /* die caught by an inner eval - continue inner loop */
3299 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3300 PL_restartjmpenv = NULL;
3301 PL_op = PL_restartop;
3310 NOT_REACHED; /* NOTREACHED */
3319 =for apidoc find_runcv
3321 Locate the CV corresponding to the currently executing sub or eval.
3322 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3323 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3324 entered. (This allows debuggers to eval in the scope of the breakpoint
3325 rather than in the scope of the debugger itself.)
3331 Perl_find_runcv(pTHX_ U32 *db_seqp)
3333 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3336 /* If this becomes part of the API, it might need a better name. */
3338 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3345 PL_curcop == &PL_compiling
3347 : PL_curcop->cop_seq;
3349 for (si = PL_curstackinfo; si; si = si->si_prev) {
3351 for (ix = si->si_cxix; ix >= 0; ix--) {
3352 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3354 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3355 cv = cx->blk_sub.cv;
3356 /* skip DB:: code */
3357 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3358 *db_seqp = cx->blk_oldcop->cop_seq;
3361 if (cx->cx_type & CXp_SUB_RE)
3364 else if (CxTYPE(cx) == CXt_EVAL && !CxEVALBLOCK(cx))
3365 cv = cx->blk_eval.cv;
3368 case FIND_RUNCV_padid_eq:
3370 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3373 case FIND_RUNCV_level_eq:
3374 if (level++ != arg) continue;
3382 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3386 /* Run yyparse() in a setjmp wrapper. Returns:
3387 * 0: yyparse() successful
3388 * 1: yyparse() failed
3392 S_try_yyparse(pTHX_ int gramtype)
3397 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3401 ret = yyparse(gramtype) ? 1 : 0;
3408 NOT_REACHED; /* NOTREACHED */
3415 /* Compile a require/do or an eval ''.
3417 * outside is the lexically enclosing CV (if any) that invoked us.
3418 * seq is the current COP scope value.
3419 * hh is the saved hints hash, if any.
3421 * Returns a bool indicating whether the compile was successful; if so,
3422 * PL_eval_start contains the first op of the compiled code; otherwise,
3425 * This function is called from two places: pp_require and pp_entereval.
3426 * These can be distinguished by whether PL_op is entereval.
3430 S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
3433 OP * const saveop = PL_op;
3434 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3435 COP * const oldcurcop = PL_curcop;
3436 bool in_require = (saveop->op_type == OP_REQUIRE);
3440 PL_in_eval = (in_require
3441 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3443 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3444 ? EVAL_RE_REPARSING : 0)));
3448 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3450 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3451 CX_CUR()->blk_eval.cv = evalcv;
3452 CX_CUR()->blk_gimme = gimme;
3454 CvOUTSIDE_SEQ(evalcv) = seq;
3455 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3457 /* set up a scratch pad */
3459 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3460 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3463 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3465 /* make sure we compile in the right package */
3467 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3468 SAVEGENERICSV(PL_curstash);
3469 PL_curstash = (HV *)CopSTASH(PL_curcop);
3470 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3472 SvREFCNT_inc_simple_void(PL_curstash);
3473 save_item(PL_curstname);
3474 sv_sethek(PL_curstname, HvNAME_HEK(PL_curstash));
3477 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3478 SAVESPTR(PL_beginav);
3479 PL_beginav = newAV();
3480 SAVEFREESV(PL_beginav);
3481 SAVESPTR(PL_unitcheckav);
3482 PL_unitcheckav = newAV();
3483 SAVEFREESV(PL_unitcheckav);
3486 ENTER_with_name("evalcomp");
3487 SAVESPTR(PL_compcv);
3490 /* try to compile it */
3492 PL_eval_root = NULL;
3493 PL_curcop = &PL_compiling;
3494 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3495 PL_in_eval |= EVAL_KEEPERR;
3501 PL_hints = HINTS_DEFAULT;
3502 hv_clear(GvHV(PL_hintgv));
3506 PL_hints = saveop->op_private & OPpEVAL_COPHH
3507 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
3509 /* making 'use re eval' not be in scope when compiling the
3510 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3511 * infinite recursion when S_has_runtime_code() gives a false
3512 * positive: the second time round, HINT_RE_EVAL isn't set so we
3513 * don't bother calling S_has_runtime_code() */
3514 if (PL_in_eval & EVAL_RE_REPARSING)
3515 PL_hints &= ~HINT_RE_EVAL;
3518 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3519 SvREFCNT_dec(GvHV(PL_hintgv));
3520 GvHV(PL_hintgv) = hh;
3521 FETCHFEATUREBITSHH(hh);
3524 SAVECOMPILEWARNINGS();
3526 if (PL_dowarn & G_WARN_ALL_ON)
3527 PL_compiling.cop_warnings = pWARN_ALL ;
3528 else if (PL_dowarn & G_WARN_ALL_OFF)
3529 PL_compiling.cop_warnings = pWARN_NONE ;
3531 PL_compiling.cop_warnings = pWARN_STD ;
3534 PL_compiling.cop_warnings =
3535 DUP_WARNINGS(oldcurcop->cop_warnings);
3536 cophh_free(CopHINTHASH_get(&PL_compiling));
3537 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3538 /* The label, if present, is the first entry on the chain. So rather
3539 than writing a blank label in front of it (which involves an
3540 allocation), just use the next entry in the chain. */
3541 PL_compiling.cop_hints_hash
3542 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3543 /* Check the assumption that this removed the label. */
3544 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3547 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3550 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3552 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3553 * so honour CATCH_GET and trap it here if necessary */
3556 /* compile the code */
3557 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3559 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3564 /* note that if yystatus == 3, then the require/eval died during
3565 * compilation, so the EVAL CX block has already been popped, and
3566 * various vars restored */
3567 if (yystatus != 3) {
3569 op_free(PL_eval_root);
3570 PL_eval_root = NULL;
3572 SP = PL_stack_base + POPMARK; /* pop original mark */
3574 assert(CxTYPE(cx) == CXt_EVAL);
3575 /* pop the CXt_EVAL, and if was a require, croak */
3576 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
3579 /* die_unwind() re-croaks when in require, having popped the
3580 * require EVAL context. So we should never catch a require
3582 assert(!in_require);
3585 if (!*(SvPV_nolen_const(errsv)))
3586 sv_setpvs(errsv, "Compilation error");
3588 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3593 /* Compilation successful. Now clean up */
3595 LEAVE_with_name("evalcomp");
3597 CopLINE_set(&PL_compiling, 0);
3598 SAVEFREEOP(PL_eval_root);
3599 cv_forget_slab(evalcv);
3601 DEBUG_x(dump_eval());
3603 /* Register with debugger: */
3604 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3605 CV * const cv = get_cvs("DB::postponed", 0);
3609 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3611 call_sv(MUTABLE_SV(cv), G_DISCARD);
3615 if (PL_unitcheckav) {
3616 OP *es = PL_eval_start;
3617 call_list(PL_scopestack_ix, PL_unitcheckav);
3621 CvDEPTH(evalcv) = 1;
3622 SP = PL_stack_base + POPMARK; /* pop original mark */
3623 PL_op = saveop; /* The caller may need it. */
3624 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3630 /* Return NULL if the file doesn't exist or isn't a file;
3631 * else return PerlIO_openn().
3635 S_check_type_and_open(pTHX_ SV *name)
3640 const char *p = SvPV_const(name, len);
3643 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3645 /* checking here captures a reasonable error message when
3646 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3647 * user gets a confusing message about looking for the .pmc file
3648 * rather than for the .pm file so do the check in S_doopen_pm when
3649 * PMC is on instead of here. S_doopen_pm calls this func.
3650 * This check prevents a \0 in @INC causing problems.
3652 #ifdef PERL_DISABLE_PMC
3653 if (!IS_SAFE_PATHNAME(p, len, "require"))
3657 /* on Win32 stat is expensive (it does an open() and close() twice and
3658 a couple other IO calls), the open will fail with a dir on its own with
3659 errno EACCES, so only do a stat to separate a dir from a real EACCES
3660 caused by user perms */
3662 st_rc = PerlLIO_stat(p, &st);
3668 if(S_ISBLK(st.st_mode)) {
3672 else if(S_ISDIR(st.st_mode)) {
3681 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3683 /* EACCES stops the INC search early in pp_require to implement
3684 feature RT #113422 */
3685 if(!retio && errno == EACCES) { /* exists but probably a directory */
3687 st_rc = PerlLIO_stat(p, &st);
3689 if(S_ISDIR(st.st_mode))
3691 else if(S_ISBLK(st.st_mode))
3702 /* doopen_pm(): return the equivalent of PerlIO_openn() on the given name,
3703 * but first check for bad names (\0) and non-files.
3704 * Also if the filename ends in .pm and unless PERL_DISABLE_PMC,
3705 * try loading Foo.pmc first.
3707 #ifndef PERL_DISABLE_PMC
3709 S_doopen_pm(pTHX_ SV *name)
3712 const char *p = SvPV_const(name, namelen);
3714 PERL_ARGS_ASSERT_DOOPEN_PM;
3716 /* check the name before trying for the .pmc name to avoid the
3717 * warning referring to the .pmc which the user probably doesn't
3718 * know or care about
3720 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3723 if (memENDPs(p, namelen, ".pm")) {
3724 SV *const pmcsv = sv_newmortal();
3727 SvSetSV_nosteal(pmcsv,name);
3728 sv_catpvs(pmcsv, "c");
3730 pmcio = check_type_and_open(pmcsv);
3734 return check_type_and_open(name);
3737 # define doopen_pm(name) check_type_and_open(name)
3738 #endif /* !PERL_DISABLE_PMC */
3740 /* require doesn't search in @INC for absolute names, or when the name is
3741 explicitly relative the current directory: i.e. ./, ../ */
3742 PERL_STATIC_INLINE bool
3743 S_path_is_searchable(const char *name)
3745 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3747 if (PERL_FILE_IS_ABSOLUTE(name)
3749 || (*name == '.' && ((name[1] == '/' ||
3750 (name[1] == '.' && name[2] == '/'))
3751 || (name[1] == '\\' ||
3752 ( name[1] == '.' && name[2] == '\\')))
3755 || (*name == '.' && (name[1] == '/' ||
3756 (name[1] == '.' && name[2] == '/')))
3767 /* implement 'require 5.010001' */
3770 S_require_version(pTHX_ SV *sv)
3774 sv = sv_2mortal(new_version(sv));
3775 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3776 upg_version(PL_patchlevel, TRUE);
3777 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3778 if ( vcmp(sv,PL_patchlevel) <= 0 )
3779 DIE(aTHX_ "Perls since %" SVf " too modern--this is %" SVf ", stopped",
3780 SVfARG(sv_2mortal(vnormal(sv))),
3781 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3785 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3788 SV * const req = SvRV(sv);
3789 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3791 /* get the left hand term */
3792 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3794 first = SvIV(*av_fetch(lav,0,0));
3795 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3796 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3797 || av_count(lav) > 2 /* FP with > 3 digits */
3798 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3800 DIE(aTHX_ "Perl %" SVf " required--this is only "
3801 "%" SVf ", stopped",
3802 SVfARG(sv_2mortal(vnormal(req))),
3803 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3806 else { /* probably 'use 5.10' or 'use 5.8' */
3810 if (av_count(lav) > 1)
3811 second = SvIV(*av_fetch(lav,1,0));
3813 second /= second >= 600 ? 100 : 10;
3814 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3815 (int)first, (int)second);
3816 upg_version(hintsv, TRUE);
3818 DIE(aTHX_ "Perl %" SVf " required (did you mean %" SVf "?)"
3819 "--this is only %" SVf ", stopped",
3820 SVfARG(sv_2mortal(vnormal(req))),
3821 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3822 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3831 /* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3832 * The first form will have already been converted at compile time to
3833 * the second form */
3836 S_require_file(pTHX_ SV *sv)
3846 int vms_unixname = 0;
3849 /* tryname is the actual pathname (with @INC prefix) which was loaded.
3850 * It's stored as a value in %INC, and used for error messages */
3851 const char *tryname = NULL;
3852 SV *namesv = NULL; /* SV equivalent of tryname */
3853 const U8 gimme = GIMME_V;
3854 int filter_has_file = 0;
3855 PerlIO *tryrsfp = NULL;
3856 SV *filter_cache = NULL;
3857 SV *filter_state = NULL;
3858 SV *filter_sub = NULL;
3862 bool path_searchable;
3863 I32 old_savestack_ix;
3864 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3865 const char *const op_name = op_is_require ? "require" : "do";
3866 SV ** svp_cached = NULL;
3868 assert(op_is_require || PL_op->op_type == OP_DOFILE);
3871 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3872 name = SvPV_nomg_const(sv, len);
3873 if (!(name && len > 0 && *name))
3874 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3877 /* try to return earlier (save the SAFE_PATHNAME check) if INC already got the name */
3878 if (op_is_require) {
3879 /* can optimize to only perform one single lookup */
3880 svp_cached = hv_fetch(GvHVn(PL_incgv), (char*) name, len, 0);
3881 if ( svp_cached && (SvGETMAGIC(*svp_cached), SvOK(*svp_cached)) ) RETPUSHYES;
3885 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3886 if (!op_is_require) {
3890 DIE(aTHX_ "Can't locate %s: %s",
3891 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3892 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3895 TAINT_PROPER(op_name);
3897 path_searchable = path_is_searchable(name);
3900 /* The key in the %ENV hash is in the syntax of file passed as the argument
3901 * usually this is in UNIX format, but sometimes in VMS format, which
3902 * can result in a module being pulled in more than once.
3903 * To prevent this, the key must be stored in UNIX format if the VMS
3904 * name can be translated to UNIX.
3908 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3910 unixlen = strlen(unixname);
3916 /* if not VMS or VMS name can not be translated to UNIX, pass it
3919 unixname = (char *) name;
3922 if (op_is_require) {
3923 /* reuse the previous hv_fetch result if possible */
3924 SV * const * const svp = svp_cached ? svp_cached : hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3926 /* we already did a get magic if this was cached */
3932 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3933 "Compilation failed in require", unixname);
3936 /*XXX OPf_KIDS should always be true? -dapm 4/2017 */
3937 if (PL_op->op_flags & OPf_KIDS) {
3938 SVOP * const kid = (SVOP*)cUNOP->op_first;
3940 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3941 /* Make sure that a bareword module name (e.g. ::Foo::Bar)
3942 * doesn't map to a naughty pathname like /Foo/Bar.pm.
3943 * Note that the parser will normally detect such errors
3944 * at compile time before we reach here, but
3945 * Perl_load_module() can fake up an identical optree
3946 * without going near the parser, and being able to put
3947 * anything as the bareword. So we include a duplicate set
3948 * of checks here at runtime.
3950 const STRLEN package_len = len - 3;
3951 const char slashdot[2] = {'/', '.'};
3953 const char backslashdot[2] = {'\\', '.'};
3956 /* Disallow *purported* barewords that map to absolute
3957 filenames, filenames relative to the current or parent
3958 directory, or (*nix) hidden filenames. Also sanity check
3959 that the generated filename ends .pm */
3960 if (!path_searchable || len < 3 || name[0] == '.'
3961 || !memEQs(name + package_len, len - package_len, ".pm"))
3962 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%" SVf "\"", sv);
3963 if (memchr(name, 0, package_len)) {
3964 /* diag_listed_as: Bareword in require contains "%s" */
3965 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3967 if (ninstr(name, name + package_len, slashdot,
3968 slashdot + sizeof(slashdot))) {
3969 /* diag_listed_as: Bareword in require contains "%s" */
3970 DIE(aTHX_ "Bareword in require contains \"/.\"");
3973 if (ninstr(name, name + package_len, backslashdot,
3974 backslashdot + sizeof(backslashdot))) {
3975 /* diag_listed_as: Bareword in require contains "%s" */
3976 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3983 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
3985 /* Try to locate and open a file, possibly using @INC */
3987 /* with "/foo/bar.pm", "./foo.pm" and "../foo/bar.pm", try to load
3988 * the file directly rather than via @INC ... */
3989 if (!path_searchable) {
3990 /* At this point, name is SvPVX(sv) */
3992 tryrsfp = doopen_pm(sv);
3995 /* ... but if we fail, still search @INC for code references;
3996 * these are applied even on non-searchable paths (except
3997 * if we got EACESS).
3999 * For searchable paths, just search @INC normally
4001 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
4002 AV * const ar = GvAVn(PL_incgv);
4009 namesv = newSV_type(SVt_PV);
4010 for (i = 0; i <= AvFILL(ar); i++) {
4011 SV * const dirsv = *av_fetch(ar, i, TRUE);
4019 if (SvTYPE(SvRV(loader)) == SVt_PVAV
4020 && !SvOBJECT(SvRV(loader)))
4022 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
4026 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%" UVxf "/%s",
4027 PTR2UV(SvRV(dirsv)), name);
4028 tryname = SvPVX_const(namesv);
4031 if (SvPADTMP(nsv)) {
4032 nsv = sv_newmortal();
4033 SvSetSV_nosteal(nsv,sv);
4036 ENTER_with_name("call_INC");
4044 if (SvGMAGICAL(loader)) {
4045 SV *l = sv_newmortal();
4046 sv_setsv_nomg(l, loader);
4049 if (sv_isobject(loader))
4050 count = call_method("INC", G_ARRAY);
4052 count = call_sv(loader, G_ARRAY);
4062 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
4063 && !isGV_with_GP(SvRV(arg))) {
4064 filter_cache = SvRV(arg);
4071 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
4075 if (isGV_with_GP(arg)) {
4076 IO * const io = GvIO((const GV *)arg);
4081 tryrsfp = IoIFP(io);
4082 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
4083 PerlIO_close(IoOFP(io));
4094 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
4096 SvREFCNT_inc_simple_void_NN(filter_sub);
4099 filter_state = SP[i];
4100 SvREFCNT_inc_simple_void(filter_state);
4104 if (!tryrsfp && (filter_cache || filter_sub)) {
4105 tryrsfp = PerlIO_open(BIT_BUCKET,
4111 /* FREETMPS may free our filter_cache */
4112 SvREFCNT_inc_simple_void(filter_cache);
4116 LEAVE_with_name("call_INC");
4118 /* Now re-mortalize it. */
4119 sv_2mortal(filter_cache);
4121 /* Adjust file name if the hook has set an %INC entry.
4122 This needs to happen after the FREETMPS above. */
4123 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
4125 tryname = SvPV_nolen_const(*svp);
4132 filter_has_file = 0;
4133 filter_cache = NULL;
4135 SvREFCNT_dec_NN(filter_state);
4136 filter_state = NULL;
4139 SvREFCNT_dec_NN(filter_sub);
4143 else if (path_searchable) {
4144 /* match against a plain @INC element (non-searchable
4145 * paths are only matched against refs in @INC) */
4150 dir = SvPV_nomg_const(dirsv, dirlen);
4156 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
4160 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
4163 sv_setpv(namesv, unixdir);
4164 sv_catpv(namesv, unixname);
4166 /* The equivalent of
4167 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4168 but without the need to parse the format string, or
4169 call strlen on either pointer, and with the correct
4170 allocation up front. */
4172 char *tmp = SvGROW(namesv, dirlen + len + 2);
4174 memcpy(tmp, dir, dirlen);
4177 /* Avoid '<dir>//<file>' */
4178 if (!dirlen || *(tmp-1) != '/') {
4181 /* So SvCUR_set reports the correct length below */
4185 /* name came from an SV, so it will have a '\0' at the
4186 end that we can copy as part of this memcpy(). */
4187 memcpy(tmp, name, len + 1);
4189 SvCUR_set(namesv, dirlen + len + 1);
4193 TAINT_PROPER(op_name);
4194 tryname = SvPVX_const(namesv);
4195 tryrsfp = doopen_pm(namesv);
4197 if (tryname[0] == '.' && tryname[1] == '/') {
4199 while (*++tryname == '/') {}
4203 else if (errno == EMFILE || errno == EACCES) {
4204 /* no point in trying other paths if out of handles;
4205 * on the other hand, if we couldn't open one of the
4206 * files, then going on with the search could lead to
4207 * unexpected results; see perl #113422
4216 /* at this point we've ether opened a file (tryrsfp) or set errno */
4218 saved_errno = errno; /* sv_2mortal can realloc things */
4221 /* we failed; croak if require() or return undef if do() */
4222 if (op_is_require) {
4223 if(saved_errno == EMFILE || saved_errno == EACCES) {
4224 /* diag_listed_as: Can't locate %s */
4225 DIE(aTHX_ "Can't locate %s: %s: %s",
4226 name, tryname, Strerror(saved_errno));
4228 if (path_searchable) { /* did we lookup @INC? */
4229 AV * const ar = GvAVn(PL_incgv);
4231 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4232 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4233 for (i = 0; i <= AvFILL(ar); i++) {
4234 sv_catpvs(inc, " ");
4235 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4237 if (memENDPs(name, len, ".pm")) {
4238 const char *e = name + len - (sizeof(".pm") - 1);
4240 bool utf8 = cBOOL(SvUTF8(sv));
4242 /* if the filename, when converted from "Foo/Bar.pm"
4243 * form back to Foo::Bar form, makes a valid
4244 * package name (i.e. parseable by C<require
4245 * Foo::Bar>), then emit a hint.
4247 * this loop is modelled after the one in
4251 if (utf8 && isIDFIRST_utf8_safe(c, e)) {
4253 while (c < e && isIDCONT_utf8_safe(
4254 (const U8*) c, (const U8*) e))
4257 else if (isWORDCHAR_A(*c)) {
4258 while (c < e && isWORDCHAR_A(*c))
4267 if (c == e && isIDFIRST_lazy_if_safe(name, e, utf8)) {
4268 sv_catpvs(msg, " (you may need to install the ");
4269 for (c = name; c < e; c++) {
4271 sv_catpvs(msg, "::");
4274 sv_catpvn(msg, c, 1);
4277 sv_catpvs(msg, " module)");
4280 else if (memENDs(name, len, ".h")) {
4281 sv_catpvs(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4283 else if (memENDs(name, len, ".ph")) {
4284 sv_catpvs(msg, " (did you run h2ph?)");
4287 /* diag_listed_as: Can't locate %s */
4289 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4293 DIE(aTHX_ "Can't locate %s", name);
4296 #ifdef DEFAULT_INC_EXCLUDES_DOT
4300 /* the complication is to match the logic from doopen_pm() so
4301 * we don't treat do "sda1" as a previously successful "do".
4303 bool do_warn = namesv && ckWARN_d(WARN_DEPRECATED)
4304 && PerlLIO_stat(name, &st) == 0 && !S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode)
4305 && (io = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &sv)) != NULL;
4311 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4312 "do \"%s\" failed, '.' is no longer in @INC; "
4313 "did you mean do \"./%s\"?",
4322 SETERRNO(0, SS_NORMAL);
4324 /* Update %INC. Assume success here to prevent recursive requirement. */
4325 /* name is never assigned to again, so len is still strlen(name) */
4326 /* Check whether a hook in @INC has already filled %INC */
4328 (void)hv_store(GvHVn(PL_incgv),
4329 unixname, unixlen, newSVpv(tryname,0),0);
4331 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4333 (void)hv_store(GvHVn(PL_incgv),
4334 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4337 /* Now parse the file */
4339 old_savestack_ix = PL_savestack_ix;
4340 SAVECOPFILE_FREE(&PL_compiling);
4341 CopFILE_set(&PL_compiling, tryname);
4342 lex_start(NULL, tryrsfp, 0);
4344 if (filter_sub || filter_cache) {
4345 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4346 than hanging another SV from it. In turn, filter_add() optionally
4347 takes the SV to use as the filter (or creates a new SV if passed
4348 NULL), so simply pass in whatever value filter_cache has. */
4349 SV * const fc = filter_cache ? newSV(0) : NULL;
4351 if (fc) sv_copypv(fc, filter_cache);
4352 datasv = filter_add(S_run_user_filter, fc);
4353 IoLINES(datasv) = filter_has_file;
4354 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4355 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4358 /* switch to eval mode */
4360 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
4361 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
4363 SAVECOPLINE(&PL_compiling);
4364 CopLINE_set(&PL_compiling, 0);
4368 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
4371 op = PL_op->op_next;
4373 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
4379 /* also used for: pp_dofile() */
4383 RUN_PP_CATCHABLY(Perl_pp_require);
4390 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4391 ? S_require_version(aTHX_ sv)
4392 : S_require_file(aTHX_ sv);
4397 /* This is a op added to hold the hints hash for
4398 pp_entereval. The hash can be modified by the code
4399 being eval'ed, so we return a copy instead. */
4404 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4416 char tbuf[TYPE_DIGITS(long) + 12];
4424 I32 old_savestack_ix;
4426 RUN_PP_CATCHABLY(Perl_pp_entereval);
4429 was = PL_breakable_sub_gen;
4430 saved_delete = FALSE;
4434 bytes = PL_op->op_private & OPpEVAL_BYTES;
4436 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4437 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4439 else if (PL_hints & HINT_LOCALIZE_HH || (
4440 PL_op->op_private & OPpEVAL_COPHH
4441 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4443 saved_hh = cop_hints_2hv(PL_curcop, 0);
4444 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4448 /* make sure we've got a plain PV (no overload etc) before testing
4449 * for taint. Making a copy here is probably overkill, but better
4450 * safe than sorry */
4452 const char * const p = SvPV_const(sv, len);
4454 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4455 lex_flags |= LEX_START_COPIED;
4457 if (bytes && SvUTF8(sv))
4458 SvPVbyte_force(sv, len);
4460 else if (bytes && SvUTF8(sv)) {
4461 /* Don't modify someone else's scalar */
4464 (void)sv_2mortal(sv);
4465 SvPVbyte_force(sv,len);
4466 lex_flags |= LEX_START_COPIED;
4469 TAINT_IF(SvTAINTED(sv));
4470 TAINT_PROPER("eval");
4472 old_savestack_ix = PL_savestack_ix;
4474 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4475 ? LEX_IGNORE_UTF8_HINTS
4476 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4480 /* switch to eval mode */
4482 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4483 SV * const temp_sv = sv_newmortal();
4484 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%" IVdf "]",
4485 (unsigned long)++PL_evalseq,
4486 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4487 tmpbuf = SvPVX(temp_sv);
4488 len = SvCUR(temp_sv);
4491 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4492 SAVECOPFILE_FREE(&PL_compiling);
4493 CopFILE_set(&PL_compiling, tmpbuf+2);
4494 SAVECOPLINE(&PL_compiling);
4495 CopLINE_set(&PL_compiling, 1);
4496 /* special case: an eval '' executed within the DB package gets lexically
4497 * placed in the first non-DB CV rather than the current CV - this
4498 * allows the debugger to execute code, find lexicals etc, in the
4499 * scope of the code being debugged. Passing &seq gets find_runcv
4500 * to do the dirty work for us */
4501 runcv = find_runcv(&seq);
4504 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
4505 cx_pusheval(cx, PL_op->op_next, NULL);
4507 /* prepare to compile string */
4509 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4510 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4512 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4513 deleting the eval's FILEGV from the stash before gv_check() runs
4514 (i.e. before run-time proper). To work around the coredump that
4515 ensues, we always turn GvMULTI_on for any globals that were
4516 introduced within evals. See force_ident(). GSAR 96-10-12 */
4517 char *const safestr = savepvn(tmpbuf, len);
4518 SAVEDELETE(PL_defstash, safestr, len);
4519 saved_delete = TRUE;
4524 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
4525 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4526 ? PERLDB_LINE_OR_SAVESRC
4527 : PERLDB_SAVESRC_NOSUBS) {
4528 /* Retain the filegv we created. */
4529 } else if (!saved_delete) {
4530 char *const safestr = savepvn(tmpbuf, len);
4531 SAVEDELETE(PL_defstash, safestr, len);
4533 return PL_eval_start;
4535 /* We have already left the scope set up earlier thanks to the LEAVE
4536 in doeval_compile(). */
4537 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4538 ? PERLDB_LINE_OR_SAVESRC
4539 : PERLDB_SAVESRC_INVALID) {
4540 /* Retain the filegv we created. */
4541 } else if (!saved_delete) {
4542 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4544 return PL_op->op_next;
4549 /* also tail-called by pp_return */
4564 assert(CxTYPE(cx) == CXt_EVAL);
4566 oldsp = PL_stack_base + cx->blk_oldsp;
4567 gimme = cx->blk_gimme;
4569 /* did require return a false value? */
4570 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4571 && !(gimme == G_SCALAR
4572 ? SvTRUE_NN(*PL_stack_sp)
4573 : PL_stack_sp > oldsp);
4575 if (gimme == G_VOID) {
4576 PL_stack_sp = oldsp;
4577 /* free now to avoid late-called destructors clobbering $@ */
4581 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
4583 /* the cx_popeval does a leavescope, which frees the optree associated
4584 * with eval, which if it frees the nextstate associated with
4585 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4586 * regex when running under 'use re Debug' because it needs PL_curcop
4587 * to get the current hints. So restore it early.
4589 PL_curcop = cx->blk_oldcop;
4591 /* grab this value before cx_popeval restores the old PL_in_eval */
4592 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4593 retop = cx->blk_eval.retop;
4594 evalcv = cx->blk_eval.cv;
4596 assert(CvDEPTH(evalcv) == 1);
4598 CvDEPTH(evalcv) = 0;
4600 /* pop the CXt_EVAL, and if a require failed, croak */
4601 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
4609 /* Ops that implement try/catch syntax
4610 * Note the asymmetry here:
4611 * pp_entertrycatch does two pushblocks
4612 * pp_leavetrycatch pops only the outer one; the inner one is popped by
4613 * pp_poptry or by stack-unwind of die within the try block
4616 PP(pp_entertrycatch)
4619 const U8 gimme = GIMME_V;
4621 RUN_PP_CATCHABLY(Perl_pp_entertrycatch);
4625 Perl_pp_enter(aTHX); /* performs cx_pushblock(CXt_BLOCK, ...) */
4627 save_scalar(PL_errgv);
4630 cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK|CXp_TRY), gimme,
4631 PL_stack_sp, PL_savestack_ix);
4632 cx_pushtry(cx, cLOGOP->op_other);
4634 PL_in_eval = EVAL_INEVAL;
4639 PP(pp_leavetrycatch)
4641 /* leavetrycatch is leave */
4642 return Perl_pp_leave(aTHX);
4647 /* poptry is leavetry */
4648 return Perl_pp_leavetry(aTHX);
4655 save_clearsv(&(PAD_SVl(PL_op->op_targ)));
4656 sv_setsv(TARG, ERRSV);
4659 return cLOGOP->op_other;
4662 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4663 close to the related Perl_create_eval_scope. */
4665 Perl_delete_eval_scope(pTHX)
4676 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4677 also needed by Perl_fold_constants. */
4679 Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
4682 const U8 gimme = GIMME_V;
4684 cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK), gimme,
4685 PL_stack_sp, PL_savestack_ix);
4686 cx_pusheval(cx, retop, NULL);
4688 PL_in_eval = EVAL_INEVAL;
4689 if (flags & G_KEEPERR)
4690 PL_in_eval |= EVAL_KEEPERR;
4693 if (flags & G_FAKINGEVAL) {
4694 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4700 OP *retop = cLOGOP->op_other->op_next;
4702 RUN_PP_CATCHABLY(Perl_pp_entertry);
4706 create_eval_scope(retop, 0);
4708 return PL_op->op_next;
4712 /* also tail-called by pp_return */
4724 assert(CxTYPE(cx) == CXt_EVAL);
4725 oldsp = PL_stack_base + cx->blk_oldsp;
4726 gimme = cx->blk_gimme;
4728 if (gimme == G_VOID) {
4729 PL_stack_sp = oldsp;
4730 /* free now to avoid late-called destructors clobbering $@ */
4734 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4738 retop = CxTRY(cx) ? PL_op->op_next : cx->blk_eval.retop;
4749 const U8 gimme = GIMME_V;
4753 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4754 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
4756 cx = cx_pushblock(CXt_GIVEN, gimme, SP, PL_savestack_ix);
4757 cx_pushgiven(cx, origsv);
4767 PERL_UNUSED_CONTEXT;
4770 assert(CxTYPE(cx) == CXt_GIVEN);
4771 oldsp = PL_stack_base + cx->blk_oldsp;
4772 gimme = cx->blk_gimme;
4774 if (gimme == G_VOID)
4775 PL_stack_sp = oldsp;
4777 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4787 /* Helper routines used by pp_smartmatch */
4789 S_make_matcher(pTHX_ REGEXP *re)
4791 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4793 PERL_ARGS_ASSERT_MAKE_MATCHER;
4795 PM_SETRE(matcher, ReREFCNT_inc(re));
4797 SAVEFREEOP((OP *) matcher);
4798 ENTER_with_name("matcher"); SAVETMPS;
4804 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4809 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4811 PL_op = (OP *) matcher;
4814 (void) Perl_pp_match(aTHX);
4816 result = SvTRUEx(POPs);
4823 S_destroy_matcher(pTHX_ PMOP *matcher)
4825 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4826 PERL_UNUSED_ARG(matcher);
4829 LEAVE_with_name("matcher");
4832 /* Do a smart match */
4835 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4836 return do_smartmatch(NULL, NULL, 0);
4839 /* This version of do_smartmatch() implements the
4840 * table of smart matches that is found in perlsyn.
4843 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4847 bool object_on_left = FALSE;
4848 SV *e = TOPs; /* e is for 'expression' */
4849 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4851 /* Take care only to invoke mg_get() once for each argument.
4852 * Currently we do this by copying the SV if it's magical. */
4854 if (!copied && SvGMAGICAL(d))
4855 d = sv_mortalcopy(d);
4862 e = sv_mortalcopy(e);
4864 /* First of all, handle overload magic of the rightmost argument */
4867 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4868 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4870 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4877 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4880 SP -= 2; /* Pop the values */
4885 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4892 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4893 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4894 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4896 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4897 object_on_left = TRUE;
4900 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4902 if (object_on_left) {
4903 goto sm_any_sub; /* Treat objects like scalars */
4905 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4906 /* Test sub truth for each key */
4908 bool andedresults = TRUE;
4909 HV *hv = (HV*) SvRV(d);
4910 I32 numkeys = hv_iterinit(hv);
4911 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4914 while ( (he = hv_iternext(hv)) ) {
4915 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4916 ENTER_with_name("smartmatch_hash_key_test");
4919 PUSHs(hv_iterkeysv(he));
4921 c = call_sv(e, G_SCALAR);
4924 andedresults = FALSE;
4926 andedresults = SvTRUEx(POPs) && andedresults;
4928 LEAVE_with_name("smartmatch_hash_key_test");
4935 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4936 /* Test sub truth for each element */
4938 bool andedresults = TRUE;
4939 AV *av = (AV*) SvRV(d);
4940 const Size_t len = av_count(av);
4941 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4944 for (i = 0; i < len; ++i) {
4945 SV * const * const svp = av_fetch(av, i, FALSE);
4946 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4947 ENTER_with_name("smartmatch_array_elem_test");
4953 c = call_sv(e, G_SCALAR);
4956 andedresults = FALSE;
4958 andedresults = SvTRUEx(POPs) && andedresults;
4960 LEAVE_with_name("smartmatch_array_elem_test");
4969 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4970 ENTER_with_name("smartmatch_coderef");
4975 c = call_sv(e, G_SCALAR);
4979 else if (SvTEMP(TOPs))
4980 SvREFCNT_inc_void(TOPs);
4982 LEAVE_with_name("smartmatch_coderef");
4987 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4988 if (object_on_left) {
4989 goto sm_any_hash; /* Treat objects like scalars */
4991 else if (!SvOK(d)) {
4992 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4995 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4996 /* Check that the key-sets are identical */
4998 HV *other_hv = MUTABLE_HV(SvRV(d));
5001 U32 this_key_count = 0,
5002 other_key_count = 0;
5003 HV *hv = MUTABLE_HV(SvRV(e));
5005 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
5006 /* Tied hashes don't know how many keys they have. */
5007 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
5008 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
5012 HV * const temp = other_hv;
5018 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
5022 /* The hashes have the same number of keys, so it suffices
5023 to check that one is a subset of the other. */
5024 (void) hv_iterinit(hv);
5025 while ( (he = hv_iternext(hv)) ) {
5026 SV *key = hv_iterkeysv(he);
5028 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
5031 if(!hv_exists_ent(other_hv, key, 0)) {
5032 (void) hv_iterinit(hv); /* reset iterator */
5038 (void) hv_iterinit(other_hv);
5039 while ( hv_iternext(other_hv) )
5043 other_key_count = HvUSEDKEYS(other_hv);
5045 if (this_key_count != other_key_count)
5050 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5051 AV * const other_av = MUTABLE_AV(SvRV(d));
5052 const Size_t other_len = av_count(other_av);
5054 HV *hv = MUTABLE_HV(SvRV(e));
5056 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
5057 for (i = 0; i < other_len; ++i) {
5058 SV ** const svp = av_fetch(other_av, i, FALSE);
5059 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
5060 if (svp) { /* ??? When can this not happen? */
5061 if (hv_exists_ent(hv, *svp, 0))
5067 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
5068 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
5071 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
5073 HV *hv = MUTABLE_HV(SvRV(e));
5075 (void) hv_iterinit(hv);
5076 while ( (he = hv_iternext(hv)) ) {
5077 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
5079 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
5081 (void) hv_iterinit(hv);
5082 destroy_matcher(matcher);
5087 destroy_matcher(matcher);
5093 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
5094 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
5101 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
5102 if (object_on_left) {
5103 goto sm_any_array; /* Treat objects like scalars */
5105 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5106 AV * const other_av = MUTABLE_AV(SvRV(e));
5107 const Size_t other_len = av_count(other_av);
5110 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
5111 for (i = 0; i < other_len; ++i) {
5112 SV ** const svp = av_fetch(other_av, i, FALSE);
5114 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
5115 if (svp) { /* ??? When can this not happen? */
5116 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
5122 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5123 AV *other_av = MUTABLE_AV(SvRV(d));
5124 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
5125 if (av_count(MUTABLE_AV(SvRV(e))) != av_count(other_av))
5129 const Size_t other_len = av_count(other_av);
5131 if (NULL == seen_this) {
5132 seen_this = newHV();
5133 (void) sv_2mortal(MUTABLE_SV(seen_this));
5135 if (NULL == seen_other) {
5136 seen_other = newHV();
5137 (void) sv_2mortal(MUTABLE_SV(seen_other));
5139 for(i = 0; i < other_len; ++i) {
5140 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5141 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
5143 if (!this_elem || !other_elem) {
5144 if ((this_elem && SvOK(*this_elem))
5145 || (other_elem && SvOK(*other_elem)))
5148 else if (hv_exists_ent(seen_this,
5149 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
5150 hv_exists_ent(seen_other,
5151 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
5153 if (*this_elem != *other_elem)
5157 (void)hv_store_ent(seen_this,
5158 sv_2mortal(newSViv(PTR2IV(*this_elem))),
5160 (void)hv_store_ent(seen_other,
5161 sv_2mortal(newSViv(PTR2IV(*other_elem))),
5167 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
5168 (void) do_smartmatch(seen_this, seen_other, 0);
5170 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5179 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
5180 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
5183 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
5184 const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
5187 for(i = 0; i < this_len; ++i) {
5188 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5189 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
5191 if (svp && matcher_matches_sv(matcher, *svp)) {
5193 destroy_matcher(matcher);
5198 destroy_matcher(matcher);
5202 else if (!SvOK(d)) {
5203 /* undef ~~ array */
5204 const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
5207 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
5208 for (i = 0; i < this_len; ++i) {
5209 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5210 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
5211 if (!svp || !SvOK(*svp))
5220 const Size_t this_len = av_count(MUTABLE_AV(SvRV(e)));
5222 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
5223 for (i = 0; i < this_len; ++i) {
5224 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5231 /* infinite recursion isn't supposed to happen here */
5232 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
5233 (void) do_smartmatch(NULL, NULL, 1);
5235 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5244 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
5245 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5246 SV *t = d; d = e; e = t;
5247 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
5250 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5251 SV *t = d; d = e; e = t;
5252 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
5253 goto sm_regex_array;
5256 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
5259 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
5261 result = matcher_matches_sv(matcher, d);
5263 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
5264 destroy_matcher(matcher);
5269 /* See if there is overload magic on left */
5270 else if (object_on_left && SvAMAGIC(d)) {
5272 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
5273 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
5276 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
5284 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
5287 else if (!SvOK(d)) {
5288 /* undef ~~ scalar ; we already know that the scalar is SvOK */
5289 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
5294 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
5295 DEBUG_M(if (SvNIOK(e))
5296 Perl_deb(aTHX_ " applying rule Any-Num\n");
5298 Perl_deb(aTHX_ " applying rule Num-numish\n");
5300 /* numeric comparison */
5303 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
5304 (void) Perl_pp_i_eq(aTHX);
5306 (void) Perl_pp_eq(aTHX);
5314 /* As a last resort, use string comparison */
5315 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5318 return Perl_pp_seq(aTHX);
5325 const U8 gimme = GIMME_V;
5327 /* This is essentially an optimization: if the match
5328 fails, we don't want to push a context and then
5329 pop it again right away, so we skip straight
5330 to the op that follows the leavewhen.
5331 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5333 if (!(PL_op->op_flags & OPf_SPECIAL) && !SvTRUEx(POPs)) {
5334 if (gimme == G_SCALAR)
5335 PUSHs(&PL_sv_undef);
5336 RETURNOP(cLOGOP->op_other->op_next);
5339 cx = cx_pushblock(CXt_WHEN, gimme, SP, PL_savestack_ix);
5353 assert(CxTYPE(cx) == CXt_WHEN);
5354 gimme = cx->blk_gimme;
5356 cxix = dopoptogivenfor(cxstack_ix);
5358 /* diag_listed_as: Can't "when" outside a topicalizer */
5359 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5360 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5362 oldsp = PL_stack_base + cx->blk_oldsp;
5363 if (gimme == G_VOID)
5364 PL_stack_sp = oldsp;
5366 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
5368 /* pop the WHEN, BLOCK and anything else before the GIVEN/FOR */
5369 assert(cxix < cxstack_ix);
5372 cx = &cxstack[cxix];
5374 if (CxFOREACH(cx)) {
5375 /* emulate pp_next. Note that any stack(s) cleanup will be
5376 * done by the pp_unstack which op_nextop should point to */
5379 PL_curcop = cx->blk_oldcop;
5380 return cx->blk_loop.my_op->op_nextop;
5384 assert(cx->blk_givwhen.leave_op->op_type == OP_LEAVEGIVEN);
5385 return cx->blk_givwhen.leave_op;
5395 cxix = dopoptowhen(cxstack_ix);
5397 DIE(aTHX_ "Can't \"continue\" outside a when block");
5399 if (cxix < cxstack_ix)
5403 assert(CxTYPE(cx) == CXt_WHEN);
5404 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5408 nextop = cx->blk_givwhen.leave_op->op_next;
5419 cxix = dopoptogivenfor(cxstack_ix);
5421 DIE(aTHX_ "Can't \"break\" outside a given block");
5423 cx = &cxstack[cxix];
5425 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5427 if (cxix < cxstack_ix)
5430 /* Restore the sp at the time we entered the given block */
5432 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5434 return cx->blk_givwhen.leave_op;
5438 S_doparseform(pTHX_ SV *sv)
5441 char *s = SvPV(sv, len);
5443 char *base = NULL; /* start of current field */
5444 I32 skipspaces = 0; /* number of contiguous spaces seen */
5445 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5446 bool repeat = FALSE; /* ~~ seen on this line */
5447 bool postspace = FALSE; /* a text field may need right padding */
5450 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5452 bool ischop; /* it's a ^ rather than a @ */
5453 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5454 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5458 PERL_ARGS_ASSERT_DOPARSEFORM;
5461 Perl_croak(aTHX_ "Null picture in formline");
5463 if (SvTYPE(sv) >= SVt_PVMG) {
5464 /* This might, of course, still return NULL. */
5465 mg = mg_find(sv, PERL_MAGIC_fm);
5467 sv_upgrade(sv, SVt_PVMG);
5471 /* still the same as previously-compiled string? */
5472 SV *old = mg->mg_obj;
5473 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5474 && len == SvCUR(old)
5475 && strnEQ(SvPVX(old), s, len)
5477 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5481 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5482 Safefree(mg->mg_ptr);
5488 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5489 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5492 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5493 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5497 /* estimate the buffer size needed */
5498 for (base = s; s <= send; s++) {
5499 if (*s == '\n' || *s == '@' || *s == '^')
5505 Newx(fops, maxops, U32);
5510 *fpc++ = FF_LINEMARK;
5511 noblank = repeat = FALSE;
5529 case ' ': case '\t':
5545 *fpc++ = FF_LITERAL;
5553 *fpc++ = (U32)skipspaces;
5557 *fpc++ = FF_NEWLINE;
5561 arg = fpc - linepc + 1;
5568 *fpc++ = FF_LINEMARK;
5569 noblank = repeat = FALSE;
5578 ischop = s[-1] == '^';
5584 arg = (s - base) - 1;
5586 *fpc++ = FF_LITERAL;
5592 if (*s == '*') { /* @* or ^* */
5594 *fpc++ = 2; /* skip the @* or ^* */
5596 *fpc++ = FF_LINESNGL;
5599 *fpc++ = FF_LINEGLOB;
5601 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5602 arg = ischop ? FORM_NUM_BLANK : 0;
5607 const char * const f = ++s;
5610 arg |= FORM_NUM_POINT + (s - f);
5612 *fpc++ = s - base; /* fieldsize for FETCH */
5613 *fpc++ = FF_DECIMAL;
5615 unchopnum |= ! ischop;
5617 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5618 arg = ischop ? FORM_NUM_BLANK : 0;
5620 s++; /* skip the '0' first */
5624 const char * const f = ++s;
5627 arg |= FORM_NUM_POINT + (s - f);
5629 *fpc++ = s - base; /* fieldsize for FETCH */
5630 *fpc++ = FF_0DECIMAL;
5632 unchopnum |= ! ischop;
5634 else { /* text field */
5636 bool ismore = FALSE;
5639 while (*++s == '>') ;
5640 prespace = FF_SPACE;
5642 else if (*s == '|') {
5643 while (*++s == '|') ;
5644 prespace = FF_HALFSPACE;
5649 while (*++s == '<') ;
5652 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5656 *fpc++ = s - base; /* fieldsize for FETCH */
5658 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5661 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5675 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5678 mg->mg_ptr = (char *) fops;
5679 mg->mg_len = arg * sizeof(U32);
5680 mg->mg_obj = sv_copy;
5681 mg->mg_flags |= MGf_REFCOUNTED;
5683 if (unchopnum && repeat)
5684 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5691 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5693 /* Can value be printed in fldsize chars, using %*.*f ? */
5697 int intsize = fldsize - (value < 0 ? 1 : 0);
5699 if (frcsize & FORM_NUM_POINT)
5701 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5704 while (intsize--) pwr *= 10.0;
5705 while (frcsize--) eps /= 10.0;
5708 if (value + eps >= pwr)
5711 if (value - eps <= -pwr)
5718 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5720 SV * const datasv = FILTER_DATA(idx);
5721 const int filter_has_file = IoLINES(datasv);
5722 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5723 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5728 char *prune_from = NULL;
5729 bool read_from_cache = FALSE;
5733 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5735 assert(maxlen >= 0);
5738 /* I was having segfault trouble under Linux 2.2.5 after a
5739 parse error occurred. (Had to hack around it with a test
5740 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5741 not sure where the trouble is yet. XXX */
5744 SV *const cache = datasv;
5747 const char *cache_p = SvPV(cache, cache_len);
5751 /* Running in block mode and we have some cached data already.
5753 if (cache_len >= umaxlen) {
5754 /* In fact, so much data we don't even need to call
5759 const char *const first_nl =
5760 (const char *)memchr(cache_p, '\n', cache_len);
5762 take = first_nl + 1 - cache_p;
5766 sv_catpvn(buf_sv, cache_p, take);
5767 sv_chop(cache, cache_p + take);
5768 /* Definitely not EOF */
5772 sv_catsv(buf_sv, cache);
5774 umaxlen -= cache_len;
5777 read_from_cache = TRUE;
5781 /* Filter API says that the filter appends to the contents of the buffer.
5782 Usually the buffer is "", so the details don't matter. But if it's not,
5783 then clearly what it contains is already filtered by this filter, so we
5784 don't want to pass it in a second time.
5785 I'm going to use a mortal in case the upstream filter croaks. */
5786 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5787 ? sv_newmortal() : buf_sv;
5788 SvUPGRADE(upstream, SVt_PV);
5790 if (filter_has_file) {
5791 status = FILTER_READ(idx+1, upstream, 0);
5794 if (filter_sub && status >= 0) {
5798 ENTER_with_name("call_filter_sub");
5803 DEFSV_set(upstream);
5807 PUSHs(filter_state);
5810 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5820 SV * const errsv = ERRSV;
5821 if (SvTRUE_NN(errsv))
5822 err = newSVsv(errsv);
5828 LEAVE_with_name("call_filter_sub");
5831 if (SvGMAGICAL(upstream)) {
5833 if (upstream == buf_sv) mg_free(buf_sv);
5835 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5836 if(!err && SvOK(upstream)) {
5837 got_p = SvPV_nomg(upstream, got_len);
5839 if (got_len > umaxlen) {
5840 prune_from = got_p + umaxlen;
5843 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5844 if (first_nl && first_nl + 1 < got_p + got_len) {
5845 /* There's a second line here... */
5846 prune_from = first_nl + 1;
5850 if (!err && prune_from) {
5851 /* Oh. Too long. Stuff some in our cache. */
5852 STRLEN cached_len = got_p + got_len - prune_from;
5853 SV *const cache = datasv;
5856 /* Cache should be empty. */
5857 assert(!SvCUR(cache));
5860 sv_setpvn(cache, prune_from, cached_len);
5861 /* If you ask for block mode, you may well split UTF-8 characters.
5862 "If it breaks, you get to keep both parts"
5863 (Your code is broken if you don't put them back together again
5864 before something notices.) */
5865 if (SvUTF8(upstream)) {
5868 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5870 /* Cannot just use sv_setpvn, as that could free the buffer
5871 before we have a chance to assign it. */
5872 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5873 got_len - cached_len);
5875 /* Can't yet be EOF */
5880 /* If they are at EOF but buf_sv has something in it, then they may never
5881 have touched the SV upstream, so it may be undefined. If we naively
5882 concatenate it then we get a warning about use of uninitialised value.
5884 if (!err && upstream != buf_sv &&
5886 sv_catsv_nomg(buf_sv, upstream);
5888 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5891 IoLINES(datasv) = 0;
5893 SvREFCNT_dec(filter_state);
5894 IoTOP_GV(datasv) = NULL;
5897 SvREFCNT_dec(filter_sub);
5898 IoBOTTOM_GV(datasv) = NULL;
5900 filter_del(S_run_user_filter);
5906 if (status == 0 && read_from_cache) {
5907 /* If we read some data from the cache (and by getting here it implies
5908 that we emptied the cache) then we aren't yet at EOF, and mustn't
5909 report that to our caller. */
5916 * ex: set ts=8 sts=4 sw=4 et: