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
37 #define RUN_PP_CATCHABLY(thispp) \
38 STMT_START { if (CATCH_GET) return docatch(thispp); } STMT_END
40 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
78 PMOP *pm = (PMOP*)cLOGOP->op_other;
83 const regexp_engine *eng;
84 bool is_bare_re= FALSE;
86 if (PL_op->op_flags & OPf_STACKED) {
96 /* prevent recompiling under /o and ithreads. */
97 #if defined(USE_ITHREADS)
98 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
105 assert (re != (REGEXP*) &PL_sv_undef);
106 eng = re ? RX_ENGINE(re) : current_re_engine();
108 new_re = (eng->op_comp
110 : &Perl_re_op_compile
111 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
113 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
115 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
117 if (pm->op_pmflags & PMf_HAS_CV)
118 ReANY(new_re)->qr_anoncv
119 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
123 /* The match's LHS's get-magic might need to access this op's regexp
124 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
125 get-magic now before we replace the regexp. Hopefully this hack can
126 be replaced with the approach described at
127 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
129 if (pm->op_type == OP_MATCH) {
131 const bool was_tainted = TAINT_get;
132 if (pm->op_flags & OPf_STACKED)
134 else if (pm->op_targ)
135 lhs = PAD_SV(pm->op_targ);
138 /* Restore the previous value of PL_tainted (which may have been
139 modified by get-magic), to avoid incorrectly setting the
140 RXf_TAINTED flag with RX_TAINT_on further down. */
141 TAINT_set(was_tainted);
142 #ifdef NO_TAINT_SUPPORT
143 PERL_UNUSED_VAR(was_tainted);
146 tmp = reg_temp_copy(NULL, new_re);
147 ReREFCNT_dec(new_re);
153 PM_SETRE(pm, new_re);
157 assert(TAINTING_get || !TAINT_get);
159 SvTAINTED_on((SV*)new_re);
163 /* handle the empty pattern */
164 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm) {
165 if (PL_curpm == PL_reg_curpm) {
166 if (PL_curpm_under && PL_curpm_under == PL_reg_curpm) {
167 Perl_croak(aTHX_ "Infinite recursion via empty pattern");
172 #if !defined(USE_ITHREADS)
173 /* can't change the optree at runtime either */
174 /* PMf_KEEP is handled differently under threads to avoid these problems */
175 if (pm->op_pmflags & PMf_KEEP) {
176 cLOGOP->op_first->op_next = PL_op->op_next;
188 PERL_CONTEXT *cx = CX_CUR();
189 PMOP * const pm = (PMOP*) cLOGOP->op_other;
190 SV * const dstr = cx->sb_dstr;
193 char *orig = cx->sb_orig;
194 REGEXP * const rx = cx->sb_rx;
196 REGEXP *old = PM_GETRE(pm);
203 PM_SETRE(pm,ReREFCNT_inc(rx));
206 rxres_restore(&cx->sb_rxres, rx);
208 if (cx->sb_iters++) {
209 const SSize_t saviters = cx->sb_iters;
210 if (cx->sb_iters > cx->sb_maxiters)
211 DIE(aTHX_ "Substitution loop");
213 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
215 /* See "how taint works" above pp_subst() */
216 sv_catsv_nomg(dstr, POPs);
217 if (UNLIKELY(TAINT_get))
218 cx->sb_rxtainted |= SUBST_TAINT_REPL;
219 if (CxONCE(cx) || s < orig ||
220 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
221 (s == m), cx->sb_targ, NULL,
222 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
224 SV *targ = cx->sb_targ;
226 assert(cx->sb_strend >= s);
227 if(cx->sb_strend > s) {
228 if (DO_UTF8(dstr) && !SvUTF8(targ))
229 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
231 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
233 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
234 cx->sb_rxtainted |= SUBST_TAINT_PAT;
236 if (pm->op_pmflags & PMf_NONDESTRUCT) {
238 /* From here on down we're using the copy, and leaving the
239 original untouched. */
243 SV_CHECK_THINKFIRST_COW_DROP(targ);
244 if (isGV(targ)) Perl_croak_no_modify();
246 SvPV_set(targ, SvPVX(dstr));
247 SvCUR_set(targ, SvCUR(dstr));
248 SvLEN_set(targ, SvLEN(dstr));
251 SvPV_set(dstr, NULL);
254 mPUSHi(saviters - 1);
256 (void)SvPOK_only_UTF8(targ);
259 /* update the taint state of various various variables in
260 * preparation for final exit.
261 * See "how taint works" above pp_subst() */
263 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
264 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
265 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
267 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
269 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
270 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
272 SvTAINTED_on(TOPs); /* taint return value */
273 /* needed for mg_set below */
275 cBOOL(cx->sb_rxtainted &
276 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
280 /* PL_tainted must be correctly set for this mg_set */
289 RETURNOP(pm->op_next);
290 NOT_REACHED; /* NOTREACHED */
292 cx->sb_iters = saviters;
294 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
297 assert(!RX_SUBOFFSET(rx));
298 cx->sb_orig = orig = RX_SUBBEG(rx);
300 cx->sb_strend = s + (cx->sb_strend - m);
302 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
304 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
305 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
307 sv_catpvn_nomg(dstr, s, m-s);
309 cx->sb_s = RX_OFFS(rx)[0].end + orig;
310 { /* Update the pos() information. */
312 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
315 /* the string being matched against may no longer be a string,
316 * e.g. $_=0; s/.../$_++/ge */
319 SvPV_force_nomg_nolen(sv);
321 if (!(mg = mg_find_mglob(sv))) {
322 mg = sv_magicext_mglob(sv);
324 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
327 (void)ReREFCNT_inc(rx);
328 /* update the taint state of various various variables in preparation
329 * for calling the code block.
330 * See "how taint works" above pp_subst() */
332 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
333 cx->sb_rxtainted |= SUBST_TAINT_PAT;
335 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
336 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
337 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
339 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
341 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
342 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
343 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
344 ? cx->sb_dstr : cx->sb_targ);
347 rxres_save(&cx->sb_rxres, rx);
349 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
353 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
358 PERL_ARGS_ASSERT_RXRES_SAVE;
361 if (!p || p[1] < RX_NPARENS(rx)) {
363 i = 7 + (RX_NPARENS(rx)+1) * 2;
365 i = 6 + (RX_NPARENS(rx)+1) * 2;
374 /* what (if anything) to free on croak */
375 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
376 RX_MATCH_COPIED_off(rx);
377 *p++ = RX_NPARENS(rx);
380 *p++ = PTR2UV(RX_SAVED_COPY(rx));
381 RX_SAVED_COPY(rx) = NULL;
384 *p++ = PTR2UV(RX_SUBBEG(rx));
385 *p++ = (UV)RX_SUBLEN(rx);
386 *p++ = (UV)RX_SUBOFFSET(rx);
387 *p++ = (UV)RX_SUBCOFFSET(rx);
388 for (i = 0; i <= RX_NPARENS(rx); ++i) {
389 *p++ = (UV)RX_OFFS(rx)[i].start;
390 *p++ = (UV)RX_OFFS(rx)[i].end;
395 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
400 PERL_ARGS_ASSERT_RXRES_RESTORE;
403 RX_MATCH_COPY_FREE(rx);
404 RX_MATCH_COPIED_set(rx, *p);
406 RX_NPARENS(rx) = *p++;
409 if (RX_SAVED_COPY(rx))
410 SvREFCNT_dec (RX_SAVED_COPY(rx));
411 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
415 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
416 RX_SUBLEN(rx) = (I32)(*p++);
417 RX_SUBOFFSET(rx) = (I32)*p++;
418 RX_SUBCOFFSET(rx) = (I32)*p++;
419 for (i = 0; i <= RX_NPARENS(rx); ++i) {
420 RX_OFFS(rx)[i].start = (I32)(*p++);
421 RX_OFFS(rx)[i].end = (I32)(*p++);
426 S_rxres_free(pTHX_ void **rsp)
428 UV * const p = (UV*)*rsp;
430 PERL_ARGS_ASSERT_RXRES_FREE;
434 void *tmp = INT2PTR(char*,*p);
437 U32 i = 9 + p[1] * 2;
439 U32 i = 8 + p[1] * 2;
444 SvREFCNT_dec (INT2PTR(SV*,p[2]));
447 PoisonFree(p, i, sizeof(UV));
456 #define FORM_NUM_BLANK (1<<30)
457 #define FORM_NUM_POINT (1<<29)
461 dSP; dMARK; dORIGMARK;
462 SV * const tmpForm = *++MARK;
463 SV *formsv; /* contains text of original format */
464 U32 *fpc; /* format ops program counter */
465 char *t; /* current append position in target string */
466 const char *f; /* current position in format string */
468 SV *sv = NULL; /* current item */
469 const char *item = NULL;/* string value of current item */
470 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
471 I32 itembytes = 0; /* as itemsize, but length in bytes */
472 I32 fieldsize = 0; /* width of current field */
473 I32 lines = 0; /* number of lines that have been output */
474 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
475 const char *chophere = NULL; /* where to chop current item */
476 STRLEN linemark = 0; /* pos of start of line in output */
478 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
479 STRLEN len; /* length of current sv */
480 STRLEN linemax; /* estimate of output size in bytes */
481 bool item_is_utf8 = FALSE;
482 bool targ_is_utf8 = FALSE;
485 U8 *source; /* source of bytes to append */
486 STRLEN to_copy; /* how may bytes to append */
487 char trans; /* what chars to translate */
488 bool copied_form = FALSE; /* have we duplicated the form? */
490 mg = doparseform(tmpForm);
492 fpc = (U32*)mg->mg_ptr;
493 /* the actual string the format was compiled from.
494 * with overload etc, this may not match tmpForm */
498 SvPV_force(PL_formtarget, len);
499 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
500 SvTAINTED_on(PL_formtarget);
501 if (DO_UTF8(PL_formtarget))
503 /* this is an initial estimate of how much output buffer space
504 * to allocate. It may be exceeded later */
505 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
506 t = SvGROW(PL_formtarget, len + linemax + 1);
507 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
509 f = SvPV_const(formsv, len);
513 const char *name = "???";
516 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
517 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
518 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
519 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
520 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
522 case FF_CHECKNL: name = "CHECKNL"; break;
523 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
524 case FF_SPACE: name = "SPACE"; break;
525 case FF_HALFSPACE: name = "HALFSPACE"; break;
526 case FF_ITEM: name = "ITEM"; break;
527 case FF_CHOP: name = "CHOP"; break;
528 case FF_LINEGLOB: name = "LINEGLOB"; break;
529 case FF_NEWLINE: name = "NEWLINE"; break;
530 case FF_MORE: name = "MORE"; break;
531 case FF_LINEMARK: name = "LINEMARK"; break;
532 case FF_END: name = "END"; break;
533 case FF_0DECIMAL: name = "0DECIMAL"; break;
534 case FF_LINESNGL: name = "LINESNGL"; break;
537 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
539 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
542 case FF_LINEMARK: /* start (or end) of a line */
543 linemark = t - SvPVX(PL_formtarget);
548 case FF_LITERAL: /* append <arg> literal chars */
553 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
556 case FF_SKIP: /* skip <arg> chars in format */
560 case FF_FETCH: /* get next item and set field size to <arg> */
569 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
572 SvTAINTED_on(PL_formtarget);
575 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
577 const char *s = item = SvPV_const(sv, len);
578 const char *send = s + len;
581 item_is_utf8 = DO_UTF8(sv);
593 if (itemsize == fieldsize)
596 itembytes = s - item;
601 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
603 const char *s = item = SvPV_const(sv, len);
604 const char *send = s + len;
608 item_is_utf8 = DO_UTF8(sv);
610 /* look for a legal split position */
618 /* provisional split point */
622 /* we delay testing fieldsize until after we've
623 * processed the possible split char directly
624 * following the last field char; so if fieldsize=3
625 * and item="a b cdef", we consume "a b", not "a".
626 * Ditto further down.
628 if (size == fieldsize)
632 if (strchr(PL_chopset, *s)) {
633 /* provisional split point */
634 /* for a non-space split char, we include
635 * the split char; hence the '+1' */
639 if (size == fieldsize)
651 if (!chophere || s == send) {
655 itembytes = chophere - item;
660 case FF_SPACE: /* append padding space (diff of field, item size) */
661 arg = fieldsize - itemsize;
669 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
670 arg = fieldsize - itemsize;
679 case FF_ITEM: /* append a text item, while blanking ctrl chars */
685 case FF_CHOP: /* (for ^*) chop the current item */
686 if (sv != &PL_sv_no) {
687 const char *s = chophere;
689 ((sv == tmpForm || SvSMAGICAL(sv))
690 || (SvGMAGICAL(tmpForm) && !sv_only_taint_gmagic(tmpForm))) ) {
691 /* sv and tmpForm are either the same SV, or magic might allow modification
692 of tmpForm when sv is modified, so copy */
693 SV *newformsv = sv_mortalcopy(formsv);
696 f = SvPV_nolen(newformsv) + (f - SvPV_nolen(formsv));
697 Newx(new_compiled, mg->mg_len / sizeof(U32), U32);
698 memcpy(new_compiled, mg->mg_ptr, mg->mg_len);
699 SAVEFREEPV(new_compiled);
700 fpc = new_compiled + (fpc - (U32*)mg->mg_ptr);
712 /* tied, overloaded or similar strangeness.
713 * Do it the hard way */
714 sv_setpvn(sv, s, len - (s-item));
720 case FF_LINESNGL: /* process ^* */
724 case FF_LINEGLOB: /* process @* */
726 const bool oneline = fpc[-1] == FF_LINESNGL;
727 const char *s = item = SvPV_const(sv, len);
728 const char *const send = s + len;
730 item_is_utf8 = DO_UTF8(sv);
741 to_copy = s - item - 1;
755 /* append to_copy bytes from source to PL_formstring.
756 * item_is_utf8 implies source is utf8.
757 * if trans, translate certain characters during the copy */
762 SvCUR_set(PL_formtarget,
763 t - SvPVX_const(PL_formtarget));
765 if (targ_is_utf8 && !item_is_utf8) {
766 source = tmp = bytes_to_utf8(source, &to_copy);
769 if (item_is_utf8 && !targ_is_utf8) {
771 /* Upgrade targ to UTF8, and then we reduce it to
772 a problem we have a simple solution for.
773 Don't need get magic. */
774 sv_utf8_upgrade_nomg(PL_formtarget);
776 /* re-calculate linemark */
777 s = (U8*)SvPVX(PL_formtarget);
778 /* the bytes we initially allocated to append the
779 * whole line may have been gobbled up during the
780 * upgrade, so allocate a whole new line's worth
785 linemark = s - (U8*)SvPVX(PL_formtarget);
787 /* Easy. They agree. */
788 assert (item_is_utf8 == targ_is_utf8);
791 /* @* and ^* are the only things that can exceed
792 * the linemax, so grow by the output size, plus
793 * a whole new form's worth in case of any further
795 grow = linemax + to_copy;
797 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
798 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
800 Copy(source, t, to_copy, char);
802 /* blank out ~ or control chars, depending on trans.
803 * works on bytes not chars, so relies on not
804 * matching utf8 continuation bytes */
806 U8 *send = s + to_copy;
809 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
816 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
822 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
825 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
828 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
831 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
833 /* If the field is marked with ^ and the value is undefined,
835 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
843 /* overflow evidence */
844 if (num_overflow(value, fieldsize, arg)) {
850 /* Formats aren't yet marked for locales, so assume "yes". */
852 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
854 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
855 STORE_LC_NUMERIC_SET_TO_NEEDED();
856 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
859 const char* qfmt = quadmath_format_single(fmt);
862 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
863 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
865 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
870 /* we generate fmt ourselves so it is safe */
871 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
872 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
873 GCC_DIAG_RESTORE_STMT;
875 PERL_MY_SNPRINTF_POST_GUARD(len, max);
876 RESTORE_LC_NUMERIC();
881 case FF_NEWLINE: /* delete trailing spaces, then append \n */
883 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
888 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
891 if (arg) { /* repeat until fields exhausted? */
897 t = SvPVX(PL_formtarget) + linemark;
902 case FF_MORE: /* replace long end of string with '...' */
904 const char *s = chophere;
905 const char *send = item + len;
907 while (isSPACE(*s) && (s < send))
912 arg = fieldsize - itemsize;
919 if (strBEGINs(s1," ")) {
920 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
930 case FF_END: /* tidy up, then return */
932 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
934 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
936 SvUTF8_on(PL_formtarget);
937 FmLINES(PL_formtarget) += lines;
939 if (fpc[-1] == FF_BLANK)
940 RETURNOP(cLISTOP->op_first);
947 /* also used for: pp_mapstart() */
953 if (PL_stack_base + TOPMARK == SP) {
955 if (GIMME_V == G_SCALAR)
957 RETURNOP(PL_op->op_next->op_next);
959 PL_stack_sp = PL_stack_base + TOPMARK + 1;
960 Perl_pp_pushmark(aTHX); /* push dst */
961 Perl_pp_pushmark(aTHX); /* push src */
962 ENTER_with_name("grep"); /* enter outer scope */
966 ENTER_with_name("grep_item"); /* enter inner scope */
969 src = PL_stack_base[TOPMARK];
971 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
978 if (PL_op->op_type == OP_MAPSTART)
979 Perl_pp_pushmark(aTHX); /* push top */
980 return ((LOGOP*)PL_op->op_next)->op_other;
986 const U8 gimme = GIMME_V;
987 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
993 /* first, move source pointer to the next item in the source list */
994 ++PL_markstack_ptr[-1];
996 /* if there are new items, push them into the destination list */
997 if (items && gimme != G_VOID) {
998 /* might need to make room back there first */
999 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1000 /* XXX this implementation is very pessimal because the stack
1001 * is repeatedly extended for every set of items. Is possible
1002 * to do this without any stack extension or copying at all
1003 * by maintaining a separate list over which the map iterates
1004 * (like foreach does). --gsar */
1006 /* everything in the stack after the destination list moves
1007 * towards the end the stack by the amount of room needed */
1008 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1010 /* items to shift up (accounting for the moved source pointer) */
1011 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1013 /* This optimization is by Ben Tilly and it does
1014 * things differently from what Sarathy (gsar)
1015 * is describing. The downside of this optimization is
1016 * that leaves "holes" (uninitialized and hopefully unused areas)
1017 * to the Perl stack, but on the other hand this
1018 * shouldn't be a problem. If Sarathy's idea gets
1019 * implemented, this optimization should become
1020 * irrelevant. --jhi */
1022 shift = count; /* Avoid shifting too often --Ben Tilly */
1026 dst = (SP += shift);
1027 PL_markstack_ptr[-1] += shift;
1028 *PL_markstack_ptr += shift;
1032 /* copy the new items down to the destination list */
1033 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1034 if (gimme == G_ARRAY) {
1035 /* add returned items to the collection (making mortal copies
1036 * if necessary), then clear the current temps stack frame
1037 * *except* for those items. We do this splicing the items
1038 * into the start of the tmps frame (so some items may be on
1039 * the tmps stack twice), then moving PL_tmps_floor above
1040 * them, then freeing the frame. That way, the only tmps that
1041 * accumulate over iterations are the return values for map.
1042 * We have to do to this way so that everything gets correctly
1043 * freed if we die during the map.
1047 /* make space for the slice */
1048 EXTEND_MORTAL(items);
1049 tmpsbase = PL_tmps_floor + 1;
1050 Move(PL_tmps_stack + tmpsbase,
1051 PL_tmps_stack + tmpsbase + items,
1052 PL_tmps_ix - PL_tmps_floor,
1054 PL_tmps_ix += items;
1059 sv = sv_mortalcopy(sv);
1061 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1063 /* clear the stack frame except for the items */
1064 PL_tmps_floor += items;
1066 /* FREETMPS may have cleared the TEMP flag on some of the items */
1069 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1072 /* scalar context: we don't care about which values map returns
1073 * (we use undef here). And so we certainly don't want to do mortal
1074 * copies of meaningless values. */
1075 while (items-- > 0) {
1077 *dst-- = &PL_sv_undef;
1085 LEAVE_with_name("grep_item"); /* exit inner scope */
1088 if (PL_markstack_ptr[-1] > TOPMARK) {
1090 (void)POPMARK; /* pop top */
1091 LEAVE_with_name("grep"); /* exit outer scope */
1092 (void)POPMARK; /* pop src */
1093 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1094 (void)POPMARK; /* pop dst */
1095 SP = PL_stack_base + POPMARK; /* pop original mark */
1096 if (gimme == G_SCALAR) {
1100 else if (gimme == G_ARRAY)
1107 ENTER_with_name("grep_item"); /* enter inner scope */
1110 /* set $_ to the new source item */
1111 src = PL_stack_base[PL_markstack_ptr[-1]];
1112 if (SvPADTMP(src)) {
1113 src = sv_mortalcopy(src);
1118 RETURNOP(cLOGOP->op_other);
1127 if (GIMME_V == G_ARRAY)
1130 if (SvTRUE_NN(targ))
1131 return cLOGOP->op_other;
1140 if (GIMME_V == G_ARRAY) {
1141 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1145 SV * const targ = PAD_SV(PL_op->op_targ);
1148 if (PL_op->op_private & OPpFLIP_LINENUM) {
1149 if (GvIO(PL_last_in_gv)) {
1150 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1153 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1155 flip = SvIV(sv) == SvIV(GvSV(gv));
1158 flip = SvTRUE_NN(sv);
1161 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1162 if (PL_op->op_flags & OPf_SPECIAL) {
1170 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1179 /* This code tries to decide if "$left .. $right" should use the
1180 magical string increment, or if the range is numeric (we make
1181 an exception for .."0" [#18165]). AMS 20021031. */
1183 #define RANGE_IS_NUMERIC(left,right) ( \
1184 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1185 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1186 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1187 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1188 && (!SvOK(right) || looks_like_number(right))))
1194 if (GIMME_V == G_ARRAY) {
1200 if (RANGE_IS_NUMERIC(left,right)) {
1202 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1203 (SvOK(right) && (SvIOK(right)
1204 ? SvIsUV(right) && SvUV(right) > IV_MAX
1205 : SvNV_nomg(right) > IV_MAX)))
1206 DIE(aTHX_ "Range iterator outside integer range");
1207 i = SvIV_nomg(left);
1208 j = SvIV_nomg(right);
1210 /* Dance carefully around signed max. */
1211 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1214 /* The wraparound of signed integers is undefined
1215 * behavior, but here we aim for count >=1, and
1216 * negative count is just wrong. */
1218 #if IVSIZE > Size_t_size
1225 Perl_croak(aTHX_ "Out of memory during list extend");
1232 SV * const sv = sv_2mortal(newSViv(i));
1234 if (n) /* avoid incrementing above IV_MAX */
1240 const char * const lpv = SvPV_nomg_const(left, llen);
1241 const char * const tmps = SvPV_nomg_const(right, len);
1243 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1244 if (DO_UTF8(right) && IN_UNI_8_BIT)
1245 len = sv_len_utf8_nomg(right);
1246 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1248 if (strEQ(SvPVX_const(sv),tmps))
1250 sv = sv_2mortal(newSVsv(sv));
1257 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1261 if (PL_op->op_private & OPpFLIP_LINENUM) {
1262 if (GvIO(PL_last_in_gv)) {
1263 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1266 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1267 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1271 flop = SvTRUE_NN(sv);
1275 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1276 sv_catpvs(targ, "E0");
1286 static const char * const context_name[] = {
1288 NULL, /* CXt_WHERESO never actually needs "block" */
1289 NULL, /* CXt_BLOCK never actually needs "block" */
1290 NULL, /* CXt_LOOP_GIVEN never actually needs "block" */
1291 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1292 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1293 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1294 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1295 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
1303 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1307 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1309 for (i = cxstack_ix; i >= 0; i--) {
1310 const PERL_CONTEXT * const cx = &cxstack[i];
1311 switch (CxTYPE(cx)) {
1317 /* diag_listed_as: Exiting subroutine via %s */
1318 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1319 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1320 if (CxTYPE(cx) == CXt_NULL) /* sort BLOCK */
1323 case CXt_LOOP_GIVEN:
1324 case CXt_LOOP_PLAIN:
1325 case CXt_LOOP_LAZYIV:
1326 case CXt_LOOP_LAZYSV:
1330 STRLEN cx_label_len = 0;
1331 U32 cx_label_flags = 0;
1332 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1334 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1337 (const U8*)cx_label, cx_label_len,
1338 (const U8*)label, len) == 0)
1340 (const U8*)label, len,
1341 (const U8*)cx_label, cx_label_len) == 0)
1342 : (len == cx_label_len && ((cx_label == label)
1343 || memEQ(cx_label, label, len))) )) {
1344 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1345 (long)i, cx_label));
1348 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1359 Perl_dowantarray(pTHX)
1361 const U8 gimme = block_gimme();
1362 return (gimme == G_VOID) ? G_SCALAR : gimme;
1366 Perl_block_gimme(pTHX)
1368 const I32 cxix = dopoptosub(cxstack_ix);
1373 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1375 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1381 Perl_is_lvalue_sub(pTHX)
1383 const I32 cxix = dopoptosub(cxstack_ix);
1384 assert(cxix >= 0); /* We should only be called from inside subs */
1386 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1387 return CxLVAL(cxstack + cxix);
1392 /* only used by cx_pushsub() */
1394 Perl_was_lvalue_sub(pTHX)
1396 const I32 cxix = dopoptosub(cxstack_ix-1);
1397 assert(cxix >= 0); /* We should only be called from inside subs */
1399 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1400 return CxLVAL(cxstack + cxix);
1406 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1410 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1412 PERL_UNUSED_CONTEXT;
1415 for (i = startingblock; i >= 0; i--) {
1416 const PERL_CONTEXT * const cx = &cxstk[i];
1417 switch (CxTYPE(cx)) {
1421 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1422 * twice; the first for the normal foo() call, and the second
1423 * for a faked up re-entry into the sub to execute the
1424 * code block. Hide this faked entry from the world. */
1425 if (cx->cx_type & CXp_SUB_RE_FAKE)
1430 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1438 S_dopoptoeval(pTHX_ I32 startingblock)
1441 for (i = startingblock; i >= 0; i--) {
1442 const PERL_CONTEXT *cx = &cxstack[i];
1443 switch (CxTYPE(cx)) {
1447 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1455 S_dopoptoloop(pTHX_ I32 startingblock)
1458 for (i = startingblock; i >= 0; i--) {
1459 const PERL_CONTEXT * const cx = &cxstack[i];
1460 switch (CxTYPE(cx)) {
1466 /* diag_listed_as: Exiting subroutine via %s */
1467 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1468 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1469 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
1472 case CXt_LOOP_GIVEN:
1473 case CXt_LOOP_PLAIN:
1474 case CXt_LOOP_LAZYIV:
1475 case CXt_LOOP_LAZYSV:
1478 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1486 S_dopoptowhereso(pTHX_ I32 startingblock)
1489 for (i = startingblock; i >= 0; i--) {
1490 const PERL_CONTEXT *cx = &cxstack[i];
1491 switch (CxTYPE(cx)) {
1495 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhereso(): found whereso at cx=%ld)\n", (long)i));
1502 /* dounwind(): pop all contexts above (but not including) cxix.
1503 * Note that it clears the savestack frame associated with each popped
1504 * context entry, but doesn't free any temps.
1505 * It does a cx_popblock() of the last frame that it pops, and leaves
1506 * cxstack_ix equal to cxix.
1510 Perl_dounwind(pTHX_ I32 cxix)
1512 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1515 while (cxstack_ix > cxix) {
1516 PERL_CONTEXT *cx = CX_CUR();
1518 CX_DEBUG(cx, "UNWIND");
1519 /* Note: we don't need to restore the base context info till the end. */
1523 switch (CxTYPE(cx)) {
1526 /* CXt_SUBST is not a block context type, so skip the
1527 * cx_popblock(cx) below */
1528 if (cxstack_ix == cxix + 1) {
1539 case CXt_LOOP_GIVEN:
1540 case CXt_LOOP_PLAIN:
1541 case CXt_LOOP_LAZYIV:
1542 case CXt_LOOP_LAZYSV:
1552 /* these two don't have a POPFOO() */
1558 if (cxstack_ix == cxix + 1) {
1567 Perl_qerror(pTHX_ SV *err)
1569 PERL_ARGS_ASSERT_QERROR;
1572 if (PL_in_eval & EVAL_KEEPERR) {
1573 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1577 sv_catsv(ERRSV, err);
1580 sv_catsv(PL_errors, err);
1582 Perl_warn(aTHX_ "%" SVf, SVfARG(err));
1584 ++PL_parser->error_count;
1589 /* pop a CXt_EVAL context and in addition, if it was a require then
1591 * 0: do nothing extra;
1592 * 1: undef $INC{$name}; croak "$name did not return a true value";
1593 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1597 S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
1599 SV *namesv = NULL; /* init to avoid dumb compiler warning */
1603 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
1605 /* keep namesv alive after cx_popeval() */
1606 namesv = cx->blk_eval.old_namesv;
1607 cx->blk_eval.old_namesv = NULL;
1616 HV *inc_hv = GvHVn(PL_incgv);
1617 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1618 const char *key = SvPVX_const(namesv);
1621 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1622 fmt = "%" SVf " did not return a true value";
1626 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1627 fmt = "%" SVf "Compilation failed in require";
1629 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1632 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1637 /* die_unwind(): this is the final destination for the various croak()
1638 * functions. If we're in an eval, unwind the context and other stacks
1639 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1640 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1641 * to is a require the exception will be rethrown, as requires don't
1642 * actually trap exceptions.
1646 Perl_die_unwind(pTHX_ SV *msv)
1649 U8 in_eval = PL_in_eval;
1650 PERL_ARGS_ASSERT_DIE_UNWIND;
1655 /* We need to keep this SV alive through all the stack unwinding
1656 * and FREETMPSing below, while ensuing that it doesn't leak
1657 * if we call out to something which then dies (e.g. sub STORE{die}
1658 * when unlocalising a tied var). So we do a dance with
1659 * mortalising and SAVEFREEing.
1661 sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1664 * Historically, perl used to set ERRSV ($@) early in the die
1665 * process and rely on it not getting clobbered during unwinding.
1666 * That sucked, because it was liable to get clobbered, so the
1667 * setting of ERRSV used to emit the exception from eval{} has
1668 * been moved to much later, after unwinding (see just before
1669 * JMPENV_JUMP below). However, some modules were relying on the
1670 * early setting, by examining $@ during unwinding to use it as
1671 * a flag indicating whether the current unwinding was caused by
1672 * an exception. It was never a reliable flag for that purpose,
1673 * being totally open to false positives even without actual
1674 * clobberage, but was useful enough for production code to
1675 * semantically rely on it.
1677 * We'd like to have a proper introspective interface that
1678 * explicitly describes the reason for whatever unwinding
1679 * operations are currently in progress, so that those modules
1680 * work reliably and $@ isn't further overloaded. But we don't
1681 * have one yet. In its absence, as a stopgap measure, ERRSV is
1682 * now *additionally* set here, before unwinding, to serve as the
1683 * (unreliable) flag that it used to.
1685 * This behaviour is temporary, and should be removed when a
1686 * proper way to detect exceptional unwinding has been developed.
1687 * As of 2010-12, the authors of modules relying on the hack
1688 * are aware of the issue, because the modules failed on
1689 * perls 5.13.{1..7} which had late setting of $@ without this
1690 * early-setting hack.
1692 if (!(in_eval & EVAL_KEEPERR))
1693 sv_setsv_flags(ERRSV, exceptsv,
1694 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
1696 if (in_eval & EVAL_KEEPERR) {
1697 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1701 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1702 && PL_curstackinfo->si_prev)
1712 JMPENV *restartjmpenv;
1715 if (cxix < cxstack_ix)
1719 assert(CxTYPE(cx) == CXt_EVAL);
1721 /* return false to the caller of eval */
1722 oldsp = PL_stack_base + cx->blk_oldsp;
1723 gimme = cx->blk_gimme;
1724 if (gimme == G_SCALAR)
1725 *++oldsp = &PL_sv_undef;
1726 PL_stack_sp = oldsp;
1728 restartjmpenv = cx->blk_eval.cur_top_env;
1729 restartop = cx->blk_eval.retop;
1731 /* We need a FREETMPS here to avoid late-called destructors
1732 * clobbering $@ *after* we set it below, e.g.
1733 * sub DESTROY { eval { die "X" } }
1734 * eval { my $x = bless []; die $x = 0, "Y" };
1736 * Here the clearing of the $x ref mortalises the anon array,
1737 * which needs to be freed *before* $& is set to "Y",
1738 * otherwise it gets overwritten with "X".
1740 * However, the FREETMPS will clobber exceptsv, so preserve it
1741 * on the savestack for now.
1743 SAVEFREESV(SvREFCNT_inc_simple_NN(exceptsv));
1745 /* now we're about to pop the savestack, so re-mortalise it */
1746 sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1748 /* Note that unlike pp_entereval, pp_require isn't supposed to
1749 * trap errors. So if we're a require, after we pop the
1750 * CXt_EVAL that pp_require pushed, rethrow the error with
1751 * croak(exceptsv). This is all handled by the call below when
1754 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
1756 if (!(in_eval & EVAL_KEEPERR))
1757 sv_setsv(ERRSV, exceptsv);
1758 PL_restartjmpenv = restartjmpenv;
1759 PL_restartop = restartop;
1761 NOT_REACHED; /* NOTREACHED */
1765 write_to_stderr(exceptsv);
1767 NOT_REACHED; /* NOTREACHED */
1773 if (SvTRUE_NN(left) != SvTRUE_NN(right))
1781 =head1 CV Manipulation Functions
1783 =for apidoc caller_cx
1785 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1786 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1787 information returned to Perl by C<caller>. Note that XSUBs don't get a
1788 stack frame, so C<caller_cx(0, NULL)> will return information for the
1789 immediately-surrounding Perl code.
1791 This function skips over the automatic calls to C<&DB::sub> made on the
1792 behalf of the debugger. If the stack frame requested was a sub called by
1793 C<DB::sub>, the return value will be the frame for the call to
1794 C<DB::sub>, since that has the correct line number/etc. for the call
1795 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1796 frame for the sub call itself.
1801 const PERL_CONTEXT *
1802 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1804 I32 cxix = dopoptosub(cxstack_ix);
1805 const PERL_CONTEXT *cx;
1806 const PERL_CONTEXT *ccstack = cxstack;
1807 const PERL_SI *top_si = PL_curstackinfo;
1810 /* we may be in a higher stacklevel, so dig down deeper */
1811 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1812 top_si = top_si->si_prev;
1813 ccstack = top_si->si_cxstack;
1814 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1818 /* caller() should not report the automatic calls to &DB::sub */
1819 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1820 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1824 cxix = dopoptosub_at(ccstack, cxix - 1);
1827 cx = &ccstack[cxix];
1828 if (dbcxp) *dbcxp = cx;
1830 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1831 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1832 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1833 field below is defined for any cx. */
1834 /* caller() should not report the automatic calls to &DB::sub */
1835 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1836 cx = &ccstack[dbcxix];
1845 const PERL_CONTEXT *cx;
1846 const PERL_CONTEXT *dbcx;
1848 const HEK *stash_hek;
1850 bool has_arg = MAXARG && TOPs;
1859 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1861 if (gimme != G_ARRAY) {
1868 CX_DEBUG(cx, "CALLER");
1869 assert(CopSTASH(cx->blk_oldcop));
1870 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1871 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1873 if (gimme != G_ARRAY) {
1876 PUSHs(&PL_sv_undef);
1879 sv_sethek(TARG, stash_hek);
1888 PUSHs(&PL_sv_undef);
1891 sv_sethek(TARG, stash_hek);
1894 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1895 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1896 cx->blk_sub.retop, TRUE);
1898 lcop = cx->blk_oldcop;
1899 mPUSHu(CopLINE(lcop));
1902 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1903 /* So is ccstack[dbcxix]. */
1904 if (CvHASGV(dbcx->blk_sub.cv)) {
1905 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1906 PUSHs(boolSV(CxHASARGS(cx)));
1909 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1910 PUSHs(boolSV(CxHASARGS(cx)));
1914 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1917 gimme = cx->blk_gimme;
1918 if (gimme == G_VOID)
1919 PUSHs(&PL_sv_undef);
1921 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1922 if (CxTYPE(cx) == CXt_EVAL) {
1924 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1925 SV *cur_text = cx->blk_eval.cur_text;
1926 if (SvCUR(cur_text) >= 2) {
1927 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1928 SvUTF8(cur_text)|SVs_TEMP));
1931 /* I think this is will always be "", but be sure */
1932 PUSHs(sv_2mortal(newSVsv(cur_text)));
1938 else if (cx->blk_eval.old_namesv) {
1939 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1942 /* eval BLOCK (try blocks have old_namesv == 0) */
1944 PUSHs(&PL_sv_undef);
1945 PUSHs(&PL_sv_undef);
1949 PUSHs(&PL_sv_undef);
1950 PUSHs(&PL_sv_undef);
1952 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1953 && CopSTASH_eq(PL_curcop, PL_debstash))
1955 /* slot 0 of the pad contains the original @_ */
1956 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
1957 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
1958 cx->blk_sub.olddepth+1]))[0]);
1959 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1961 Perl_init_dbargs(aTHX);
1963 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1964 av_extend(PL_dbargs, AvFILLp(ary) + off);
1965 if (AvFILLp(ary) + 1 + off)
1966 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1967 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1969 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1972 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1974 if (old_warnings == pWARN_NONE)
1975 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1976 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1977 mask = &PL_sv_undef ;
1978 else if (old_warnings == pWARN_ALL ||
1979 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1980 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1983 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1987 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1988 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1998 if (MAXARG < 1 || (!TOPs && !POPs)) {
2000 tmps = NULL, len = 0;
2003 tmps = SvPVx_const(POPs, len);
2004 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
2009 /* like pp_nextstate, but used instead when the debugger is active */
2013 PL_curcop = (COP*)PL_op;
2014 TAINT_NOT; /* Each statement is presumed innocent */
2015 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
2020 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2021 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
2025 const U8 gimme = G_ARRAY;
2026 GV * const gv = PL_DBgv;
2029 if (gv && isGV_with_GP(gv))
2032 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
2033 DIE(aTHX_ "No DB::DB routine defined");
2035 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2036 /* don't do recursive DB::DB call */
2046 (void)(*CvXSUB(cv))(aTHX_ cv);
2052 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
2053 cx_pushsub(cx, cv, PL_op->op_next, 0);
2054 /* OP_DBSTATE's op_private holds hint bits rather than
2055 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2056 * any CxLVAL() flags that have now been mis-calculated */
2063 if (CvDEPTH(cv) >= 2)
2064 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2065 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2066 RETURNOP(CvSTART(cv));
2078 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2090 assert(CxTYPE(cx) == CXt_BLOCK);
2092 if (PL_op->op_flags & OPf_SPECIAL)
2093 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2094 cx->blk_oldpm = PL_curpm;
2096 oldsp = PL_stack_base + cx->blk_oldsp;
2097 gimme = cx->blk_gimme;
2099 if (gimme == G_VOID)
2100 PL_stack_sp = oldsp;
2102 leave_adjust_stacks(oldsp, oldsp, gimme,
2103 PL_op->op_private & OPpLVALUE ? 3 : 1);
2113 S_outside_integer(pTHX_ SV *sv)
2116 const NV nv = SvNV_nomg(sv);
2117 if (Perl_isinfnan(nv))
2119 #ifdef NV_PRESERVES_UV
2120 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2123 if (nv <= (NV)IV_MIN)
2126 ((nv > (NV)UV_MAX ||
2127 SvUV_nomg(sv) > (UV)IV_MAX)))
2138 const U8 gimme = GIMME_V;
2139 void *itervarp; /* GV or pad slot of the iteration variable */
2140 SV *itersave; /* the old var in the iterator var slot */
2143 if (PL_op->op_targ) { /* "my" variable */
2144 itervarp = &PAD_SVl(PL_op->op_targ);
2145 itersave = *(SV**)itervarp;
2147 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2148 /* the SV currently in the pad slot is never live during
2149 * iteration (the slot is always aliased to one of the items)
2150 * so it's always stale */
2151 SvPADSTALE_on(itersave);
2153 SvREFCNT_inc_simple_void_NN(itersave);
2154 cxflags = CXp_FOR_PAD;
2157 SV * const sv = POPs;
2158 itervarp = (void *)sv;
2159 if (LIKELY(isGV(sv))) { /* symbol table variable */
2160 itersave = GvSV(sv);
2161 SvREFCNT_inc_simple_void(itersave);
2162 cxflags = CXp_FOR_GV;
2164 else { /* LV ref: for \$foo (...) */
2165 assert(SvTYPE(sv) == SVt_PVMG);
2166 assert(SvMAGIC(sv));
2167 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2169 cxflags = CXp_FOR_LVREF;
2173 /* Note that this context is initially set as CXt_NULL. Further on
2174 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2175 * there mustn't be anything in the blk_loop substruct that requires
2176 * freeing or undoing, in case we die in the meantime. And vice-versa.
2178 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
2179 cx_pushloop_for(cx, itervarp, itersave);
2181 if (PL_op->op_flags & OPf_STACKED) {
2182 /* OPf_STACKED implies either a single array: for(@), with a
2183 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2185 SV *maybe_ary = POPs;
2186 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2189 SV * const right = maybe_ary;
2190 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
2191 DIE(aTHX_ "Assigned value is not a reference");
2194 if (RANGE_IS_NUMERIC(sv,right)) {
2195 cx->cx_type |= CXt_LOOP_LAZYIV;
2196 if (S_outside_integer(aTHX_ sv) ||
2197 S_outside_integer(aTHX_ right))
2198 DIE(aTHX_ "Range iterator outside integer range");
2199 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2200 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2203 cx->cx_type |= CXt_LOOP_LAZYSV;
2204 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2205 cx->blk_loop.state_u.lazysv.end = right;
2206 SvREFCNT_inc_simple_void_NN(right);
2207 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2208 /* This will do the upgrade to SVt_PV, and warn if the value
2209 is uninitialised. */
2210 (void) SvPV_nolen_const(right);
2211 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2212 to replace !SvOK() with a pointer to "". */
2214 SvREFCNT_dec(right);
2215 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2219 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2220 /* for (@array) {} */
2221 cx->cx_type |= CXt_LOOP_ARY;
2222 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2223 SvREFCNT_inc_simple_void_NN(maybe_ary);
2224 cx->blk_loop.state_u.ary.ix =
2225 (PL_op->op_private & OPpITER_REVERSED) ?
2226 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2229 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
2231 else { /* iterating over items on the stack */
2232 cx->cx_type |= CXt_LOOP_LIST;
2233 cx->blk_oldsp = SP - PL_stack_base;
2234 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2235 cx->blk_loop.state_u.stack.ix =
2236 (PL_op->op_private & OPpITER_REVERSED)
2238 : cx->blk_loop.state_u.stack.basesp;
2239 /* pre-extend stack so pp_iter doesn't have to check every time
2240 * it pushes yes/no */
2250 const U8 gimme = GIMME_V;
2252 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
2253 cx_pushloop_plain(cx);
2266 assert(CxTYPE_is_LOOP(cx));
2267 oldsp = PL_stack_base + cx->blk_oldsp;
2268 base = CxTYPE(cx) == CXt_LOOP_LIST
2269 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
2271 gimme = cx->blk_gimme;
2273 if (gimme == G_VOID)
2276 leave_adjust_stacks(oldsp, base, gimme,
2277 PL_op->op_private & OPpLVALUE ? 3 : 1);
2280 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
2288 /* This duplicates most of pp_leavesub, but with additional code to handle
2289 * return args in lvalue context. It was forked from pp_leavesub to
2290 * avoid slowing down that function any further.
2292 * Any changes made to this function may need to be copied to pp_leavesub
2295 * also tail-called by pp_return
2306 assert(CxTYPE(cx) == CXt_SUB);
2308 if (CxMULTICALL(cx)) {
2309 /* entry zero of a stack is always PL_sv_undef, which
2310 * simplifies converting a '()' return into undef in scalar context */
2311 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2315 gimme = cx->blk_gimme;
2316 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
2318 if (gimme == G_VOID)
2319 PL_stack_sp = oldsp;
2321 U8 lval = CxLVAL(cx);
2322 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2323 const char *what = NULL;
2325 if (gimme == G_SCALAR) {
2327 /* check for bad return arg */
2328 if (oldsp < PL_stack_sp) {
2329 SV *sv = *PL_stack_sp;
2330 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2332 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2333 : "a readonly value" : "a temporary";
2338 /* sub:lvalue{} will take us here. */
2343 "Can't return %s from lvalue subroutine", what);
2347 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2349 if (lval & OPpDEREF) {
2350 /* lval_sub()->{...} and similar */
2354 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2360 assert(gimme == G_ARRAY);
2361 assert (!(lval & OPpDEREF));
2364 /* scan for bad return args */
2366 for (p = PL_stack_sp; p > oldsp; p--) {
2368 /* the PL_sv_undef exception is to allow things like
2369 * this to work, where PL_sv_undef acts as 'skip'
2370 * placeholder on the LHS of list assigns:
2371 * sub foo :lvalue { undef }
2372 * ($a, undef, foo(), $b) = 1..4;
2374 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2376 /* Might be flattened array after $#array = */
2377 what = SvREADONLY(sv)
2378 ? "a readonly value" : "a temporary";
2384 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2389 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
2391 retop = cx->blk_sub.retop;
2402 const I32 cxix = dopoptosub(cxstack_ix);
2404 assert(cxstack_ix >= 0);
2405 if (cxix < cxstack_ix) {
2407 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2408 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2409 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2412 DIE(aTHX_ "Can't return outside a subroutine");
2414 * a sort block, which is a CXt_NULL not a CXt_SUB;
2415 * or a /(?{...})/ block.
2416 * Handle specially. */
2417 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2418 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2419 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
2420 if (cxstack_ix > 0) {
2421 /* See comment below about context popping. Since we know
2422 * we're scalar and not lvalue, we can preserve the return
2423 * value in a simpler fashion than there. */
2425 assert(cxstack[0].blk_gimme == G_SCALAR);
2426 if ( (sp != PL_stack_base)
2427 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2429 *SP = sv_mortalcopy(sv);
2432 /* caller responsible for popping cxstack[0] */
2436 /* There are contexts that need popping. Doing this may free the
2437 * return value(s), so preserve them first: e.g. popping the plain
2438 * loop here would free $x:
2439 * sub f { { my $x = 1; return $x } }
2440 * We may also need to shift the args down; for example,
2441 * for (1,2) { return 3,4 }
2442 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2443 * leave_adjust_stacks(), along with freeing any temps. Note that
2444 * whoever we tail-call (e.g. pp_leaveeval) will also call
2445 * leave_adjust_stacks(); however, the second call is likely to
2446 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2447 * pass them through, rather than copying them again. So this
2448 * isn't as inefficient as it sounds.
2450 cx = &cxstack[cxix];
2452 if (cx->blk_gimme != G_VOID)
2453 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
2455 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2459 cx = &cxstack[cxix]; /* CX stack may have been realloced */
2462 /* Like in the branch above, we need to handle any extra junk on
2463 * the stack. But because we're not also popping extra contexts, we
2464 * don't have to worry about prematurely freeing args. So we just
2465 * need to do the bare minimum to handle junk, and leave the main
2466 * arg processing in the function we tail call, e.g. pp_leavesub.
2467 * In list context we have to splice out the junk; in scalar
2468 * context we can leave as-is (pp_leavesub will later return the
2469 * top stack element). But for an empty arg list, e.g.
2470 * for (1,2) { return }
2471 * we need to set sp = oldsp so that pp_leavesub knows to push
2472 * &PL_sv_undef onto the stack.
2475 cx = &cxstack[cxix];
2476 oldsp = PL_stack_base + cx->blk_oldsp;
2477 if (oldsp != MARK) {
2478 SSize_t nargs = SP - MARK;
2480 if (cx->blk_gimme == G_ARRAY) {
2481 /* shift return args to base of call stack frame */
2482 Move(MARK + 1, oldsp + 1, nargs, SV*);
2483 PL_stack_sp = oldsp + nargs;
2487 PL_stack_sp = oldsp;
2491 /* fall through to a normal exit */
2492 switch (CxTYPE(cx)) {
2494 return CxTRYBLOCK(cx)
2495 ? Perl_pp_leavetry(aTHX)
2496 : Perl_pp_leaveeval(aTHX);
2498 return CvLVALUE(cx->blk_sub.cv)
2499 ? Perl_pp_leavesublv(aTHX)
2500 : Perl_pp_leavesub(aTHX);
2502 return Perl_pp_leavewrite(aTHX);
2504 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2508 /* find the enclosing loop or labelled loop and dounwind() back to it. */
2510 static PERL_CONTEXT *
2514 if (PL_op->op_flags & OPf_SPECIAL) {
2515 cxix = dopoptoloop(cxstack_ix);
2517 /* diag_listed_as: Can't "last" outside a loop block */
2518 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2524 const char * const label =
2525 PL_op->op_flags & OPf_STACKED
2526 ? SvPV(TOPs,label_len)
2527 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2528 const U32 label_flags =
2529 PL_op->op_flags & OPf_STACKED
2531 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2533 cxix = dopoptolabel(label, label_len, label_flags);
2535 /* diag_listed_as: Label not found for "last %s" */
2536 Perl_croak(aTHX_ "Label not found for \"%s %" SVf "\"",
2538 SVfARG(PL_op->op_flags & OPf_STACKED
2539 && !SvGMAGICAL(TOPp1s)
2541 : newSVpvn_flags(label,
2543 label_flags | SVs_TEMP)));
2545 if (cxix < cxstack_ix)
2547 return &cxstack[cxix];
2556 cx = S_unwind_loop(aTHX);
2558 assert(CxTYPE_is_LOOP(cx));
2559 PL_stack_sp = PL_stack_base
2560 + (CxTYPE(cx) == CXt_LOOP_LIST
2561 ? cx->blk_loop.state_u.stack.basesp
2567 /* Stack values are safe: */
2569 cx_poploop(cx); /* release loop vars ... */
2571 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2581 /* if not a bare 'next' in the main scope, search for it */
2583 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2584 cx = S_unwind_loop(aTHX);
2587 PL_curcop = cx->blk_oldcop;
2589 return (cx)->blk_loop.my_op->op_nextop;
2594 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
2595 OP* redo_op = cx->blk_loop.my_op->op_redoop;
2597 if (redo_op->op_type == OP_ENTER) {
2598 /* pop one less context to avoid $x being freed in while (my $x..) */
2601 assert(CxTYPE(cx) == CXt_BLOCK);
2602 redo_op = redo_op->op_next;
2608 PL_curcop = cx->blk_oldcop;
2614 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2617 static const char* const too_deep = "Target of goto is too deeply nested";
2619 PERL_ARGS_ASSERT_DOFINDLABEL;
2622 Perl_croak(aTHX_ "%s", too_deep);
2623 if (o->op_type == OP_LEAVE ||
2624 o->op_type == OP_SCOPE ||
2625 o->op_type == OP_LEAVELOOP ||
2626 o->op_type == OP_LEAVESUB ||
2627 o->op_type == OP_LEAVETRY)
2629 *ops++ = cUNOPo->op_first;
2631 Perl_croak(aTHX_ "%s", too_deep);
2634 if (o->op_flags & OPf_KIDS) {
2636 /* First try all the kids at this level, since that's likeliest. */
2637 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2638 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2639 STRLEN kid_label_len;
2640 U32 kid_label_flags;
2641 const char *kid_label = CopLABEL_len_flags(kCOP,
2642 &kid_label_len, &kid_label_flags);
2644 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2647 (const U8*)kid_label, kid_label_len,
2648 (const U8*)label, len) == 0)
2650 (const U8*)label, len,
2651 (const U8*)kid_label, kid_label_len) == 0)
2652 : ( len == kid_label_len && ((kid_label == label)
2653 || memEQ(kid_label, label, len)))))
2657 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2658 if (kid == PL_lastgotoprobe)
2660 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2663 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2664 ops[-1]->op_type == OP_DBSTATE)
2669 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2679 S_check_op_type(pTHX_ OP * const o)
2681 /* Eventually we may want to stack the needed arguments
2682 * for each op. For now, we punt on the hard ones. */
2683 /* XXX This comment seems to me like wishful thinking. --sprout */
2684 if (o->op_type == OP_ENTERITER)
2686 "Can't \"goto\" into the middle of a foreach loop");
2687 if (o->op_type == OP_ENTERGIVEN)
2689 "Can't \"goto\" into a \"given\" block");
2692 /* also used for: pp_dump() */
2700 #define GOTO_DEPTH 64
2701 OP *enterops[GOTO_DEPTH];
2702 const char *label = NULL;
2703 STRLEN label_len = 0;
2704 U32 label_flags = 0;
2705 const bool do_dump = (PL_op->op_type == OP_DUMP);
2706 static const char* const must_have_label = "goto must have label";
2708 if (PL_op->op_flags & OPf_STACKED) {
2709 /* goto EXPR or goto &foo */
2711 SV * const sv = POPs;
2714 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2715 /* This egregious kludge implements goto &subroutine */
2718 CV *cv = MUTABLE_CV(SvRV(sv));
2719 AV *arg = GvAV(PL_defgv);
2721 while (!CvROOT(cv) && !CvXSUB(cv)) {
2722 const GV * const gv = CvGV(cv);
2726 /* autoloaded stub? */
2727 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2729 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2731 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2732 if (autogv && (cv = GvCV(autogv)))
2734 tmpstr = sv_newmortal();
2735 gv_efullname3(tmpstr, gv, NULL);
2736 DIE(aTHX_ "Goto undefined subroutine &%" SVf, SVfARG(tmpstr));
2738 DIE(aTHX_ "Goto undefined subroutine");
2741 cxix = dopoptosub(cxstack_ix);
2743 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2745 cx = &cxstack[cxix];
2746 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2747 if (CxTYPE(cx) == CXt_EVAL) {
2749 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2750 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2752 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2753 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2755 else if (CxMULTICALL(cx))
2756 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2758 /* First do some returnish stuff. */
2760 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2762 if (cxix < cxstack_ix) {
2769 /* protect @_ during save stack unwind. */
2771 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2773 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2776 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2777 /* this is part of cx_popsub_args() */
2778 AV* av = MUTABLE_AV(PAD_SVl(0));
2779 assert(AvARRAY(MUTABLE_AV(
2780 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2781 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2783 /* we are going to donate the current @_ from the old sub
2784 * to the new sub. This first part of the donation puts a
2785 * new empty AV in the pad[0] slot of the old sub,
2786 * unless pad[0] and @_ differ (e.g. if the old sub did
2787 * local *_ = []); in which case clear the old pad[0]
2788 * array in the usual way */
2789 if (av == arg || AvREAL(av))
2790 clear_defarray(av, av == arg);
2791 else CLEAR_ARGARRAY(av);
2794 /* don't restore PL_comppad here. It won't be needed if the
2795 * sub we're going to is non-XS, but restoring it early then
2796 * croaking (e.g. the "Goto undefined subroutine" below)
2797 * means the CX block gets processed again in dounwind,
2798 * but this time with the wrong PL_comppad */
2800 /* A destructor called during LEAVE_SCOPE could have undefined
2801 * our precious cv. See bug #99850. */
2802 if (!CvROOT(cv) && !CvXSUB(cv)) {
2803 const GV * const gv = CvGV(cv);
2805 SV * const tmpstr = sv_newmortal();
2806 gv_efullname3(tmpstr, gv, NULL);
2807 DIE(aTHX_ "Goto undefined subroutine &%" SVf,
2810 DIE(aTHX_ "Goto undefined subroutine");
2813 if (CxTYPE(cx) == CXt_SUB) {
2814 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2815 SvREFCNT_dec_NN(cx->blk_sub.cv);
2818 /* Now do some callish stuff. */
2820 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2821 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2826 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2828 /* put GvAV(defgv) back onto stack */
2830 EXTEND(SP, items+1); /* @_ could have been extended. */
2835 bool r = cBOOL(AvREAL(arg));
2836 for (index=0; index<items; index++)
2840 SV ** const svp = av_fetch(arg, index, 0);
2841 sv = svp ? *svp : NULL;
2843 else sv = AvARRAY(arg)[index];
2845 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2846 : sv_2mortal(newSVavdefelem(arg, index, 1));
2850 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2851 /* Restore old @_ */
2852 CX_POP_SAVEARRAY(cx);
2855 retop = cx->blk_sub.retop;
2856 PL_comppad = cx->blk_sub.prevcomppad;
2857 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2859 /* XS subs don't have a CXt_SUB, so pop it;
2860 * this is a cx_popblock(), less all the stuff we already did
2861 * for cx_topblock() earlier */
2862 PL_curcop = cx->blk_oldcop;
2865 /* Push a mark for the start of arglist */
2868 (void)(*CvXSUB(cv))(aTHX_ cv);
2873 PADLIST * const padlist = CvPADLIST(cv);
2875 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2877 /* partial unrolled cx_pushsub(): */
2879 cx->blk_sub.cv = cv;
2880 cx->blk_sub.olddepth = CvDEPTH(cv);
2883 SvREFCNT_inc_simple_void_NN(cv);
2884 if (CvDEPTH(cv) > 1) {
2885 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2886 sub_crush_depth(cv);
2887 pad_push(padlist, CvDEPTH(cv));
2889 PL_curcop = cx->blk_oldcop;
2890 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2893 /* second half of donating @_ from the old sub to the
2894 * new sub: abandon the original pad[0] AV in the
2895 * new sub, and replace it with the donated @_.
2896 * pad[0] takes ownership of the extra refcount
2897 * we gave arg earlier */
2899 SvREFCNT_dec(PAD_SVl(0));
2900 PAD_SVl(0) = (SV *)arg;
2901 SvREFCNT_inc_simple_void_NN(arg);
2904 /* GvAV(PL_defgv) might have been modified on scope
2905 exit, so point it at arg again. */
2906 if (arg != GvAV(PL_defgv)) {
2907 AV * const av = GvAV(PL_defgv);
2908 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2913 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2914 Perl_get_db_sub(aTHX_ NULL, cv);
2916 CV * const gotocv = get_cvs("DB::goto", 0);
2918 PUSHMARK( PL_stack_sp );
2919 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2924 retop = CvSTART(cv);
2925 goto putback_return;
2930 label = SvPV_nomg_const(sv, label_len);
2931 label_flags = SvUTF8(sv);
2934 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2935 /* goto LABEL or dump LABEL */
2936 label = cPVOP->op_pv;
2937 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2938 label_len = strlen(label);
2940 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2945 OP *gotoprobe = NULL;
2946 bool leaving_eval = FALSE;
2947 bool in_block = FALSE;
2948 bool pseudo_block = FALSE;
2949 PERL_CONTEXT *last_eval_cx = NULL;
2953 PL_lastgotoprobe = NULL;
2955 for (ix = cxstack_ix; ix >= 0; ix--) {
2957 switch (CxTYPE(cx)) {
2959 leaving_eval = TRUE;
2960 if (!CxTRYBLOCK(cx)) {
2961 gotoprobe = (last_eval_cx ?
2962 last_eval_cx->blk_eval.old_eval_root :
2967 /* else fall through */
2968 case CXt_LOOP_PLAIN:
2969 case CXt_LOOP_LAZYIV:
2970 case CXt_LOOP_LAZYSV:
2973 case CXt_LOOP_GIVEN:
2975 gotoprobe = OpSIBLING(cx->blk_oldcop);
2981 gotoprobe = OpSIBLING(cx->blk_oldcop);
2984 gotoprobe = PL_main_root;
2987 gotoprobe = CvROOT(cx->blk_sub.cv);
2988 pseudo_block = cBOOL(CxMULTICALL(cx));
2992 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2995 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
2996 CxTYPE(cx), (long) ix);
2997 gotoprobe = PL_main_root;
3003 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3004 enterops, enterops + GOTO_DEPTH);
3007 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
3008 sibl1->op_type == OP_UNSTACK &&
3009 (sibl2 = OpSIBLING(sibl1)))
3011 retop = dofindlabel(sibl2,
3012 label, label_len, label_flags, enterops,
3013 enterops + GOTO_DEPTH);
3019 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3020 PL_lastgotoprobe = gotoprobe;
3023 DIE(aTHX_ "Can't find label %" UTF8f,
3024 UTF8fARG(label_flags, label_len, label));
3026 /* if we're leaving an eval, check before we pop any frames
3027 that we're not going to punt, otherwise the error
3030 if (leaving_eval && *enterops && enterops[1]) {
3032 for (i = 1; enterops[i]; i++)
3033 S_check_op_type(aTHX_ enterops[i]);
3036 if (*enterops && enterops[1]) {
3037 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3039 deprecate("\"goto\" to jump into a construct");
3042 /* pop unwanted frames */
3044 if (ix < cxstack_ix) {
3046 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3052 /* push wanted frames */
3054 if (*enterops && enterops[1]) {
3055 OP * const oldop = PL_op;
3056 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3057 for (; enterops[ix]; ix++) {
3058 PL_op = enterops[ix];
3059 S_check_op_type(aTHX_ PL_op);
3060 DEBUG_l( Perl_deb(aTHX_ "pp_goto: Entering %s\n",
3062 PL_op->op_ppaddr(aTHX);
3070 if (!retop) retop = PL_main_start;
3072 PL_restartop = retop;
3073 PL_do_undump = TRUE;
3077 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3078 PL_do_undump = FALSE;
3096 anum = 0; (void)POPs;
3102 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3105 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3108 PL_exit_flags |= PERL_EXIT_EXPECTED;
3110 PUSHs(&PL_sv_undef);
3117 S_save_lines(pTHX_ AV *array, SV *sv)
3119 const char *s = SvPVX_const(sv);
3120 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3123 PERL_ARGS_ASSERT_SAVE_LINES;
3125 while (s && s < send) {
3127 SV * const tmpstr = newSV_type(SVt_PVMG);
3129 t = (const char *)memchr(s, '\n', send - s);
3135 sv_setpvn(tmpstr, s, t - s);
3136 av_store(array, line++, tmpstr);
3144 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3146 0 is used as continue inside eval,
3148 3 is used for a die caught by an inner eval - continue inner loop
3150 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3151 establish a local jmpenv to handle exception traps.
3156 S_docatch(pTHX_ Perl_ppaddr_t firstpp)
3159 OP * const oldop = PL_op;
3162 assert(CATCH_GET == TRUE);
3167 PL_op = firstpp(aTHX);
3172 /* die caught by an inner eval - continue inner loop */
3173 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3174 PL_restartjmpenv = NULL;
3175 PL_op = PL_restartop;
3184 NOT_REACHED; /* NOTREACHED */
3193 =for apidoc find_runcv
3195 Locate the CV corresponding to the currently executing sub or eval.
3196 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3197 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3198 entered. (This allows debuggers to eval in the scope of the breakpoint
3199 rather than in the scope of the debugger itself.)
3205 Perl_find_runcv(pTHX_ U32 *db_seqp)
3207 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3210 /* If this becomes part of the API, it might need a better name. */
3212 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3219 PL_curcop == &PL_compiling
3221 : PL_curcop->cop_seq;
3223 for (si = PL_curstackinfo; si; si = si->si_prev) {
3225 for (ix = si->si_cxix; ix >= 0; ix--) {
3226 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3228 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3229 cv = cx->blk_sub.cv;
3230 /* skip DB:: code */
3231 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3232 *db_seqp = cx->blk_oldcop->cop_seq;
3235 if (cx->cx_type & CXp_SUB_RE)
3238 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3239 cv = cx->blk_eval.cv;
3242 case FIND_RUNCV_padid_eq:
3244 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3247 case FIND_RUNCV_level_eq:
3248 if (level++ != arg) continue;
3256 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3260 /* Run yyparse() in a setjmp wrapper. Returns:
3261 * 0: yyparse() successful
3262 * 1: yyparse() failed
3266 S_try_yyparse(pTHX_ int gramtype)
3271 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3275 ret = yyparse(gramtype) ? 1 : 0;
3282 NOT_REACHED; /* NOTREACHED */
3289 /* Compile a require/do or an eval ''.
3291 * outside is the lexically enclosing CV (if any) that invoked us.
3292 * seq is the current COP scope value.
3293 * hh is the saved hints hash, if any.
3295 * Returns a bool indicating whether the compile was successful; if so,
3296 * PL_eval_start contains the first op of the compiled code; otherwise,
3299 * This function is called from two places: pp_require and pp_entereval.
3300 * These can be distinguished by whether PL_op is entereval.
3304 S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
3307 OP * const saveop = PL_op;
3308 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3309 COP * const oldcurcop = PL_curcop;
3310 bool in_require = (saveop->op_type == OP_REQUIRE);
3314 PL_in_eval = (in_require
3315 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3317 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3318 ? EVAL_RE_REPARSING : 0)));
3322 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3324 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3325 CX_CUR()->blk_eval.cv = evalcv;
3326 CX_CUR()->blk_gimme = gimme;
3328 CvOUTSIDE_SEQ(evalcv) = seq;
3329 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3331 /* set up a scratch pad */
3333 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3334 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3337 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3339 /* make sure we compile in the right package */
3341 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3342 SAVEGENERICSV(PL_curstash);
3343 PL_curstash = (HV *)CopSTASH(PL_curcop);
3344 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3346 SvREFCNT_inc_simple_void(PL_curstash);
3347 save_item(PL_curstname);
3348 sv_sethek(PL_curstname, HvNAME_HEK(PL_curstash));
3351 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3352 SAVESPTR(PL_beginav);
3353 PL_beginav = newAV();
3354 SAVEFREESV(PL_beginav);
3355 SAVESPTR(PL_unitcheckav);
3356 PL_unitcheckav = newAV();
3357 SAVEFREESV(PL_unitcheckav);
3360 ENTER_with_name("evalcomp");
3361 SAVESPTR(PL_compcv);
3364 /* try to compile it */
3366 PL_eval_root = NULL;
3367 PL_curcop = &PL_compiling;
3368 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3369 PL_in_eval |= EVAL_KEEPERR;
3376 hv_clear(GvHV(PL_hintgv));
3379 PL_hints = saveop->op_private & OPpEVAL_COPHH
3380 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
3382 /* making 'use re eval' not be in scope when compiling the
3383 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3384 * infinite recursion when S_has_runtime_code() gives a false
3385 * positive: the second time round, HINT_RE_EVAL isn't set so we
3386 * don't bother calling S_has_runtime_code() */
3387 if (PL_in_eval & EVAL_RE_REPARSING)
3388 PL_hints &= ~HINT_RE_EVAL;
3391 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3392 SvREFCNT_dec(GvHV(PL_hintgv));
3393 GvHV(PL_hintgv) = hh;
3396 SAVECOMPILEWARNINGS();
3398 if (PL_dowarn & G_WARN_ALL_ON)
3399 PL_compiling.cop_warnings = pWARN_ALL ;
3400 else if (PL_dowarn & G_WARN_ALL_OFF)
3401 PL_compiling.cop_warnings = pWARN_NONE ;
3403 PL_compiling.cop_warnings = pWARN_STD ;
3406 PL_compiling.cop_warnings =
3407 DUP_WARNINGS(oldcurcop->cop_warnings);
3408 cophh_free(CopHINTHASH_get(&PL_compiling));
3409 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3410 /* The label, if present, is the first entry on the chain. So rather
3411 than writing a blank label in front of it (which involves an
3412 allocation), just use the next entry in the chain. */
3413 PL_compiling.cop_hints_hash
3414 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3415 /* Check the assumption that this removed the label. */
3416 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3419 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3422 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3424 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3425 * so honour CATCH_GET and trap it here if necessary */
3428 /* compile the code */
3429 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3431 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3436 /* note that if yystatus == 3, then the require/eval died during
3437 * compilation, so the EVAL CX block has already been popped, and
3438 * various vars restored */
3439 if (yystatus != 3) {
3441 op_free(PL_eval_root);
3442 PL_eval_root = NULL;
3444 SP = PL_stack_base + POPMARK; /* pop original mark */
3446 assert(CxTYPE(cx) == CXt_EVAL);
3447 /* pop the CXt_EVAL, and if was a require, croak */
3448 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
3451 /* die_unwind() re-croaks when in require, having popped the
3452 * require EVAL context. So we should never catch a require
3454 assert(!in_require);
3457 if (!*(SvPV_nolen_const(errsv)))
3458 sv_setpvs(errsv, "Compilation error");
3460 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3465 /* Compilation successful. Now clean up */
3467 LEAVE_with_name("evalcomp");
3469 CopLINE_set(&PL_compiling, 0);
3470 SAVEFREEOP(PL_eval_root);
3471 cv_forget_slab(evalcv);
3473 DEBUG_x(dump_eval());
3475 /* Register with debugger: */
3476 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3477 CV * const cv = get_cvs("DB::postponed", 0);
3481 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3483 call_sv(MUTABLE_SV(cv), G_DISCARD);
3487 if (PL_unitcheckav) {
3488 OP *es = PL_eval_start;
3489 call_list(PL_scopestack_ix, PL_unitcheckav);
3493 CvDEPTH(evalcv) = 1;
3494 SP = PL_stack_base + POPMARK; /* pop original mark */
3495 PL_op = saveop; /* The caller may need it. */
3496 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3502 /* Return NULL if the file doesn't exist or isn't a file;
3503 * else return PerlIO_openn().
3507 S_check_type_and_open(pTHX_ SV *name)
3512 const char *p = SvPV_const(name, len);
3515 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3517 /* checking here captures a reasonable error message when
3518 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3519 * user gets a confusing message about looking for the .pmc file
3520 * rather than for the .pm file so do the check in S_doopen_pm when
3521 * PMC is on instead of here. S_doopen_pm calls this func.
3522 * This check prevents a \0 in @INC causing problems.
3524 #ifdef PERL_DISABLE_PMC
3525 if (!IS_SAFE_PATHNAME(p, len, "require"))
3529 /* on Win32 stat is expensive (it does an open() and close() twice and
3530 a couple other IO calls), the open will fail with a dir on its own with
3531 errno EACCES, so only do a stat to separate a dir from a real EACCES
3532 caused by user perms */
3534 st_rc = PerlLIO_stat(p, &st);
3540 if(S_ISBLK(st.st_mode)) {
3544 else if(S_ISDIR(st.st_mode)) {
3553 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3555 /* EACCES stops the INC search early in pp_require to implement
3556 feature RT #113422 */
3557 if(!retio && errno == EACCES) { /* exists but probably a directory */
3559 st_rc = PerlLIO_stat(p, &st);
3561 if(S_ISDIR(st.st_mode))
3563 else if(S_ISBLK(st.st_mode))
3574 /* doopen_pm(): return the equivalent of PerlIO_openn() on the given name,
3575 * but first check for bad names (\0) and non-files.
3576 * Also if the filename ends in .pm and unless PERL_DISABLE_PMC,
3577 * try loading Foo.pmc first.
3579 #ifndef PERL_DISABLE_PMC
3581 S_doopen_pm(pTHX_ SV *name)
3584 const char *p = SvPV_const(name, namelen);
3586 PERL_ARGS_ASSERT_DOOPEN_PM;
3588 /* check the name before trying for the .pmc name to avoid the
3589 * warning referring to the .pmc which the user probably doesn't
3590 * know or care about
3592 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3595 if (memENDPs(p, namelen, ".pm")) {
3596 SV *const pmcsv = sv_newmortal();
3599 SvSetSV_nosteal(pmcsv,name);
3600 sv_catpvs(pmcsv, "c");
3602 pmcio = check_type_and_open(pmcsv);
3606 return check_type_and_open(name);
3609 # define doopen_pm(name) check_type_and_open(name)
3610 #endif /* !PERL_DISABLE_PMC */
3612 /* require doesn't search in @INC for absolute names, or when the name is
3613 explicitly relative the current directory: i.e. ./, ../ */
3614 PERL_STATIC_INLINE bool
3615 S_path_is_searchable(const char *name)
3617 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3619 if (PERL_FILE_IS_ABSOLUTE(name)
3621 || (*name == '.' && ((name[1] == '/' ||
3622 (name[1] == '.' && name[2] == '/'))
3623 || (name[1] == '\\' ||
3624 ( name[1] == '.' && name[2] == '\\')))
3627 || (*name == '.' && (name[1] == '/' ||
3628 (name[1] == '.' && name[2] == '/')))
3639 /* implement 'require 5.010001' */
3642 S_require_version(pTHX_ SV *sv)
3646 sv = sv_2mortal(new_version(sv));
3647 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3648 upg_version(PL_patchlevel, TRUE);
3649 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3650 if ( vcmp(sv,PL_patchlevel) <= 0 )
3651 DIE(aTHX_ "Perls since %" SVf " too modern--this is %" SVf ", stopped",
3652 SVfARG(sv_2mortal(vnormal(sv))),
3653 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3657 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3660 SV * const req = SvRV(sv);
3661 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3663 /* get the left hand term */
3664 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3666 first = SvIV(*av_fetch(lav,0,0));
3667 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3668 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3669 || av_tindex(lav) > 1 /* FP with > 3 digits */
3670 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3672 DIE(aTHX_ "Perl %" SVf " required--this is only "
3673 "%" SVf ", stopped",
3674 SVfARG(sv_2mortal(vnormal(req))),
3675 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3678 else { /* probably 'use 5.10' or 'use 5.8' */
3682 if (av_tindex(lav)>=1)
3683 second = SvIV(*av_fetch(lav,1,0));
3685 second /= second >= 600 ? 100 : 10;
3686 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3687 (int)first, (int)second);
3688 upg_version(hintsv, TRUE);
3690 DIE(aTHX_ "Perl %" SVf " required (did you mean %" SVf "?)"
3691 "--this is only %" SVf ", stopped",
3692 SVfARG(sv_2mortal(vnormal(req))),
3693 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3694 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3703 /* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3704 * The first form will have already been converted at compile time to
3705 * the second form */
3708 S_require_file(pTHX_ SV *sv)
3718 int vms_unixname = 0;
3721 /* tryname is the actual pathname (with @INC prefix) which was loaded.
3722 * It's stored as a value in %INC, and used for error messages */
3723 const char *tryname = NULL;
3724 SV *namesv = NULL; /* SV equivalent of tryname */
3725 const U8 gimme = GIMME_V;
3726 int filter_has_file = 0;
3727 PerlIO *tryrsfp = NULL;
3728 SV *filter_cache = NULL;
3729 SV *filter_state = NULL;
3730 SV *filter_sub = NULL;
3734 bool path_searchable;
3735 I32 old_savestack_ix;
3736 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3737 const char *const op_name = op_is_require ? "require" : "do";
3738 SV ** svp_cached = NULL;
3740 assert(op_is_require || PL_op->op_type == OP_DOFILE);
3743 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3744 name = SvPV_nomg_const(sv, len);
3745 if (!(name && len > 0 && *name))
3746 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3749 /* try to return earlier (save the SAFE_PATHNAME check) if INC already got the name */
3750 if (op_is_require) {
3751 /* can optimize to only perform one single lookup */
3752 svp_cached = hv_fetch(GvHVn(PL_incgv), (char*) name, len, 0);
3753 if ( svp_cached && *svp_cached != &PL_sv_undef ) RETPUSHYES;
3757 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3758 if (!op_is_require) {
3762 DIE(aTHX_ "Can't locate %s: %s",
3763 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3764 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3767 TAINT_PROPER(op_name);
3769 path_searchable = path_is_searchable(name);
3772 /* The key in the %ENV hash is in the syntax of file passed as the argument
3773 * usually this is in UNIX format, but sometimes in VMS format, which
3774 * can result in a module being pulled in more than once.
3775 * To prevent this, the key must be stored in UNIX format if the VMS
3776 * name can be translated to UNIX.
3780 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3782 unixlen = strlen(unixname);
3788 /* if not VMS or VMS name can not be translated to UNIX, pass it
3791 unixname = (char *) name;
3794 if (op_is_require) {
3795 /* reuse the previous hv_fetch result if possible */
3796 SV * const * const svp = svp_cached ? svp_cached : hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3798 if (*svp != &PL_sv_undef)
3801 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3802 "Compilation failed in require", unixname);
3805 /*XXX OPf_KIDS should always be true? -dapm 4/2017 */
3806 if (PL_op->op_flags & OPf_KIDS) {
3807 SVOP * const kid = (SVOP*)cUNOP->op_first;
3809 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3810 /* Make sure that a bareword module name (e.g. ::Foo::Bar)
3811 * doesn't map to a naughty pathname like /Foo/Bar.pm.
3812 * Note that the parser will normally detect such errors
3813 * at compile time before we reach here, but
3814 * Perl_load_module() can fake up an identical optree
3815 * without going near the parser, and being able to put
3816 * anything as the bareword. So we include a duplicate set
3817 * of checks here at runtime.
3819 const STRLEN package_len = len - 3;
3820 const char slashdot[2] = {'/', '.'};
3822 const char backslashdot[2] = {'\\', '.'};
3825 /* Disallow *purported* barewords that map to absolute
3826 filenames, filenames relative to the current or parent
3827 directory, or (*nix) hidden filenames. Also sanity check
3828 that the generated filename ends .pm */
3829 if (!path_searchable || len < 3 || name[0] == '.'
3830 || !memEQs(name + package_len, len - package_len, ".pm"))
3831 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%" SVf "\"", sv);
3832 if (memchr(name, 0, package_len)) {
3833 /* diag_listed_as: Bareword in require contains "%s" */
3834 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3836 if (ninstr(name, name + package_len, slashdot,
3837 slashdot + sizeof(slashdot))) {
3838 /* diag_listed_as: Bareword in require contains "%s" */
3839 DIE(aTHX_ "Bareword in require contains \"/.\"");
3842 if (ninstr(name, name + package_len, backslashdot,
3843 backslashdot + sizeof(backslashdot))) {
3844 /* diag_listed_as: Bareword in require contains "%s" */
3845 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3852 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
3854 /* Try to locate and open a file, possibly using @INC */
3856 /* with "/foo/bar.pm", "./foo.pm" and "../foo/bar.pm", try to load
3857 * the file directly rather than via @INC ... */
3858 if (!path_searchable) {
3859 /* At this point, name is SvPVX(sv) */
3861 tryrsfp = doopen_pm(sv);
3864 /* ... but if we fail, still search @INC for code references;
3865 * these are applied even on on-searchable paths (except
3866 * if we got EACESS).
3868 * For searchable paths, just search @INC normally
3870 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3871 AV * const ar = GvAVn(PL_incgv);
3878 namesv = newSV_type(SVt_PV);
3879 for (i = 0; i <= AvFILL(ar); i++) {
3880 SV * const dirsv = *av_fetch(ar, i, TRUE);
3888 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3889 && !SvOBJECT(SvRV(loader)))
3891 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3895 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%" UVxf "/%s",
3896 PTR2UV(SvRV(dirsv)), name);
3897 tryname = SvPVX_const(namesv);
3900 if (SvPADTMP(nsv)) {
3901 nsv = sv_newmortal();
3902 SvSetSV_nosteal(nsv,sv);
3905 ENTER_with_name("call_INC");
3913 if (SvGMAGICAL(loader)) {
3914 SV *l = sv_newmortal();
3915 sv_setsv_nomg(l, loader);
3918 if (sv_isobject(loader))
3919 count = call_method("INC", G_ARRAY);
3921 count = call_sv(loader, G_ARRAY);
3931 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3932 && !isGV_with_GP(SvRV(arg))) {
3933 filter_cache = SvRV(arg);
3940 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3944 if (isGV_with_GP(arg)) {
3945 IO * const io = GvIO((const GV *)arg);
3950 tryrsfp = IoIFP(io);
3951 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3952 PerlIO_close(IoOFP(io));
3963 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3965 SvREFCNT_inc_simple_void_NN(filter_sub);
3968 filter_state = SP[i];
3969 SvREFCNT_inc_simple_void(filter_state);
3973 if (!tryrsfp && (filter_cache || filter_sub)) {
3974 tryrsfp = PerlIO_open(BIT_BUCKET,
3980 /* FREETMPS may free our filter_cache */
3981 SvREFCNT_inc_simple_void(filter_cache);
3985 LEAVE_with_name("call_INC");
3987 /* Now re-mortalize it. */
3988 sv_2mortal(filter_cache);
3990 /* Adjust file name if the hook has set an %INC entry.
3991 This needs to happen after the FREETMPS above. */
3992 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3994 tryname = SvPV_nolen_const(*svp);
4001 filter_has_file = 0;
4002 filter_cache = NULL;
4004 SvREFCNT_dec_NN(filter_state);
4005 filter_state = NULL;
4008 SvREFCNT_dec_NN(filter_sub);
4012 else if (path_searchable) {
4013 /* match against a plain @INC element (non-searchable
4014 * paths are only matched against refs in @INC) */
4019 dir = SvPV_nomg_const(dirsv, dirlen);
4025 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
4029 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
4032 sv_setpv(namesv, unixdir);
4033 sv_catpv(namesv, unixname);
4034 #elif defined(__SYMBIAN32__)
4035 if (PL_origfilename[0] &&
4036 PL_origfilename[1] == ':' &&
4037 !(dir[0] && dir[1] == ':'))
4038 Perl_sv_setpvf(aTHX_ namesv,
4043 Perl_sv_setpvf(aTHX_ namesv,
4047 /* The equivalent of
4048 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4049 but without the need to parse the format string, or
4050 call strlen on either pointer, and with the correct
4051 allocation up front. */
4053 char *tmp = SvGROW(namesv, dirlen + len + 2);
4055 memcpy(tmp, dir, dirlen);
4058 /* Avoid '<dir>//<file>' */
4059 if (!dirlen || *(tmp-1) != '/') {
4062 /* So SvCUR_set reports the correct length below */
4066 /* name came from an SV, so it will have a '\0' at the
4067 end that we can copy as part of this memcpy(). */
4068 memcpy(tmp, name, len + 1);
4070 SvCUR_set(namesv, dirlen + len + 1);
4074 TAINT_PROPER(op_name);
4075 tryname = SvPVX_const(namesv);
4076 tryrsfp = doopen_pm(namesv);
4078 if (tryname[0] == '.' && tryname[1] == '/') {
4080 while (*++tryname == '/') {}
4084 else if (errno == EMFILE || errno == EACCES) {
4085 /* no point in trying other paths if out of handles;
4086 * on the other hand, if we couldn't open one of the
4087 * files, then going on with the search could lead to
4088 * unexpected results; see perl #113422
4097 /* at this point we've ether opened a file (tryrsfp) or set errno */
4099 saved_errno = errno; /* sv_2mortal can realloc things */
4102 /* we failed; croak if require() or return undef if do() */
4103 if (op_is_require) {
4104 if(saved_errno == EMFILE || saved_errno == EACCES) {
4105 /* diag_listed_as: Can't locate %s */
4106 DIE(aTHX_ "Can't locate %s: %s: %s",
4107 name, tryname, Strerror(saved_errno));
4109 if (path_searchable) { /* did we lookup @INC? */
4110 AV * const ar = GvAVn(PL_incgv);
4112 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4113 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4114 for (i = 0; i <= AvFILL(ar); i++) {
4115 sv_catpvs(inc, " ");
4116 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4118 if (memENDPs(name, len, ".pm")) {
4119 const char *e = name + len - (sizeof(".pm") - 1);
4121 bool utf8 = cBOOL(SvUTF8(sv));
4123 /* if the filename, when converted from "Foo/Bar.pm"
4124 * form back to Foo::Bar form, makes a valid
4125 * package name (i.e. parseable by C<require
4126 * Foo::Bar>), then emit a hint.
4128 * this loop is modelled after the one in
4132 if (utf8 && isIDFIRST_utf8_safe(c, e)) {
4134 while (c < e && isIDCONT_utf8_safe(
4135 (const U8*) c, (const U8*) e))
4138 else if (isWORDCHAR_A(*c)) {
4139 while (c < e && isWORDCHAR_A(*c))
4148 if (c == e && isIDFIRST_lazy_if_safe(name, e, utf8)) {
4149 sv_catpv(msg, " (you may need to install the ");
4150 for (c = name; c < e; c++) {
4152 sv_catpvs(msg, "::");
4155 sv_catpvn(msg, c, 1);
4158 sv_catpv(msg, " module)");
4161 else if (memENDs(name, len, ".h")) {
4162 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4164 else if (memENDs(name, len, ".ph")) {
4165 sv_catpv(msg, " (did you run h2ph?)");
4168 /* diag_listed_as: Can't locate %s */
4170 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4174 DIE(aTHX_ "Can't locate %s", name);
4177 #ifdef DEFAULT_INC_EXCLUDES_DOT
4181 /* the complication is to match the logic from doopen_pm() so
4182 * we don't treat do "sda1" as a previously successful "do".
4184 bool do_warn = namesv && ckWARN_d(WARN_DEPRECATED)
4185 && PerlLIO_stat(name, &st) == 0 && !S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode)
4186 && (io = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &sv)) != NULL;
4192 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4193 "do \"%s\" failed, '.' is no longer in @INC; "
4194 "did you mean do \"./%s\"?",
4203 SETERRNO(0, SS_NORMAL);
4205 /* Update %INC. Assume success here to prevent recursive requirement. */
4206 /* name is never assigned to again, so len is still strlen(name) */
4207 /* Check whether a hook in @INC has already filled %INC */
4209 (void)hv_store(GvHVn(PL_incgv),
4210 unixname, unixlen, newSVpv(tryname,0),0);
4212 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4214 (void)hv_store(GvHVn(PL_incgv),
4215 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4218 /* Now parse the file */
4220 old_savestack_ix = PL_savestack_ix;
4221 SAVECOPFILE_FREE(&PL_compiling);
4222 CopFILE_set(&PL_compiling, tryname);
4223 lex_start(NULL, tryrsfp, 0);
4225 if (filter_sub || filter_cache) {
4226 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4227 than hanging another SV from it. In turn, filter_add() optionally
4228 takes the SV to use as the filter (or creates a new SV if passed
4229 NULL), so simply pass in whatever value filter_cache has. */
4230 SV * const fc = filter_cache ? newSV(0) : NULL;
4232 if (fc) sv_copypv(fc, filter_cache);
4233 datasv = filter_add(S_run_user_filter, fc);
4234 IoLINES(datasv) = filter_has_file;
4235 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4236 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4239 /* switch to eval mode */
4241 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
4242 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
4244 SAVECOPLINE(&PL_compiling);
4245 CopLINE_set(&PL_compiling, 0);
4249 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
4252 op = PL_op->op_next;
4254 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
4260 /* also used for: pp_dofile() */
4264 RUN_PP_CATCHABLY(Perl_pp_require);
4271 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4272 ? S_require_version(aTHX_ sv)
4273 : S_require_file(aTHX_ sv);
4278 /* This is a op added to hold the hints hash for
4279 pp_entereval. The hash can be modified by the code
4280 being eval'ed, so we return a copy instead. */
4285 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4297 char tbuf[TYPE_DIGITS(long) + 12];
4305 I32 old_savestack_ix;
4307 RUN_PP_CATCHABLY(Perl_pp_entereval);
4310 was = PL_breakable_sub_gen;
4311 saved_delete = FALSE;
4315 bytes = PL_op->op_private & OPpEVAL_BYTES;
4317 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4318 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4320 else if (PL_hints & HINT_LOCALIZE_HH || (
4321 PL_op->op_private & OPpEVAL_COPHH
4322 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4324 saved_hh = cop_hints_2hv(PL_curcop, 0);
4325 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4329 /* make sure we've got a plain PV (no overload etc) before testing
4330 * for taint. Making a copy here is probably overkill, but better
4331 * safe than sorry */
4333 const char * const p = SvPV_const(sv, len);
4335 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4336 lex_flags |= LEX_START_COPIED;
4338 if (bytes && SvUTF8(sv))
4339 SvPVbyte_force(sv, len);
4341 else if (bytes && SvUTF8(sv)) {
4342 /* Don't modify someone else's scalar */
4345 (void)sv_2mortal(sv);
4346 SvPVbyte_force(sv,len);
4347 lex_flags |= LEX_START_COPIED;
4350 TAINT_IF(SvTAINTED(sv));
4351 TAINT_PROPER("eval");
4353 old_savestack_ix = PL_savestack_ix;
4355 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4356 ? LEX_IGNORE_UTF8_HINTS
4357 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4361 /* switch to eval mode */
4363 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4364 SV * const temp_sv = sv_newmortal();
4365 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%" IVdf "]",
4366 (unsigned long)++PL_evalseq,
4367 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4368 tmpbuf = SvPVX(temp_sv);
4369 len = SvCUR(temp_sv);
4372 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4373 SAVECOPFILE_FREE(&PL_compiling);
4374 CopFILE_set(&PL_compiling, tmpbuf+2);
4375 SAVECOPLINE(&PL_compiling);
4376 CopLINE_set(&PL_compiling, 1);
4377 /* special case: an eval '' executed within the DB package gets lexically
4378 * placed in the first non-DB CV rather than the current CV - this
4379 * allows the debugger to execute code, find lexicals etc, in the
4380 * scope of the code being debugged. Passing &seq gets find_runcv
4381 * to do the dirty work for us */
4382 runcv = find_runcv(&seq);
4385 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
4386 cx_pusheval(cx, PL_op->op_next, NULL);
4388 /* prepare to compile string */
4390 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4391 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4393 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4394 deleting the eval's FILEGV from the stash before gv_check() runs
4395 (i.e. before run-time proper). To work around the coredump that
4396 ensues, we always turn GvMULTI_on for any globals that were
4397 introduced within evals. See force_ident(). GSAR 96-10-12 */
4398 char *const safestr = savepvn(tmpbuf, len);
4399 SAVEDELETE(PL_defstash, safestr, len);
4400 saved_delete = TRUE;
4405 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
4406 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4407 ? PERLDB_LINE_OR_SAVESRC
4408 : PERLDB_SAVESRC_NOSUBS) {
4409 /* Retain the filegv we created. */
4410 } else if (!saved_delete) {
4411 char *const safestr = savepvn(tmpbuf, len);
4412 SAVEDELETE(PL_defstash, safestr, len);
4414 return PL_eval_start;
4416 /* We have already left the scope set up earlier thanks to the LEAVE
4417 in doeval_compile(). */
4418 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4419 ? PERLDB_LINE_OR_SAVESRC
4420 : PERLDB_SAVESRC_INVALID) {
4421 /* Retain the filegv we created. */
4422 } else if (!saved_delete) {
4423 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4425 return PL_op->op_next;
4430 /* also tail-called by pp_return */
4445 assert(CxTYPE(cx) == CXt_EVAL);
4447 oldsp = PL_stack_base + cx->blk_oldsp;
4448 gimme = cx->blk_gimme;
4450 /* did require return a false value? */
4451 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4452 && !(gimme == G_SCALAR
4453 ? SvTRUE_NN(*PL_stack_sp)
4454 : PL_stack_sp > oldsp);
4456 if (gimme == G_VOID) {
4457 PL_stack_sp = oldsp;
4458 /* free now to avoid late-called destructors clobbering $@ */
4462 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
4464 /* the cx_popeval does a leavescope, which frees the optree associated
4465 * with eval, which if it frees the nextstate associated with
4466 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4467 * regex when running under 'use re Debug' because it needs PL_curcop
4468 * to get the current hints. So restore it early.
4470 PL_curcop = cx->blk_oldcop;
4472 /* grab this value before cx_popeval restores the old PL_in_eval */
4473 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4474 retop = cx->blk_eval.retop;
4475 evalcv = cx->blk_eval.cv;
4477 assert(CvDEPTH(evalcv) == 1);
4479 CvDEPTH(evalcv) = 0;
4481 /* pop the CXt_EVAL, and if a require failed, croak */
4482 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
4490 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4491 close to the related Perl_create_eval_scope. */
4493 Perl_delete_eval_scope(pTHX)
4504 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4505 also needed by Perl_fold_constants. */
4507 Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
4510 const U8 gimme = GIMME_V;
4512 cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
4513 PL_stack_sp, PL_savestack_ix);
4514 cx_pusheval(cx, retop, NULL);
4516 PL_in_eval = EVAL_INEVAL;
4517 if (flags & G_KEEPERR)
4518 PL_in_eval |= EVAL_KEEPERR;
4521 if (flags & G_FAKINGEVAL) {
4522 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4528 RUN_PP_CATCHABLY(Perl_pp_entertry);
4531 create_eval_scope(cLOGOP->op_other->op_next, 0);
4532 return PL_op->op_next;
4536 /* also tail-called by pp_return */
4548 assert(CxTYPE(cx) == CXt_EVAL);
4549 oldsp = PL_stack_base + cx->blk_oldsp;
4550 gimme = cx->blk_gimme;
4552 if (gimme == G_VOID) {
4553 PL_stack_sp = oldsp;
4554 /* free now to avoid late-called destructors clobbering $@ */
4558 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4562 retop = cx->blk_eval.retop;
4573 const U8 gimme = GIMME_V;
4577 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4578 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
4580 cx = cx_pushblock(CXt_LOOP_GIVEN|CXp_FOR_GV, gimme, SP, PL_savestack_ix);
4581 cx_pushloop_given(cx, origsv);
4594 if (SvGMAGICAL(left))
4595 left = sv_mortalcopy(left);
4596 if (SvGMAGICAL(right))
4597 right = sv_mortalcopy(right);
4598 if (SvAMAGIC(right) &&
4599 (result = amagic_call(left, right, smart_amg, AMGf_noleft))) {
4601 SETs(boolSV(SvTRUE_NN(result)));
4604 Perl_croak(aTHX_ "Cannot smart match without a matcher object");
4611 const U8 gimme = GIMME_V;
4613 /* This is essentially an optimization: if the match
4614 fails, we don't want to push a context and then
4615 pop it again right away, so we skip straight
4616 to the op that follows the leavewhereso.
4617 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4619 if (!SvTRUEx(POPs)) {
4620 if (gimme == G_SCALAR)
4621 PUSHs(&PL_sv_undef);
4622 RETURNOP(cLOGOP->op_other->op_next);
4625 cx = cx_pushblock(CXt_WHERESO, gimme, SP, PL_savestack_ix);
4639 assert(CxTYPE(cx) == CXt_WHERESO);
4640 gimme = cx->blk_gimme;
4642 cxix = dopoptoloop(cxstack_ix);
4644 DIE(aTHX_ "Can't leave \"whereso\" outside a loop block");
4646 oldsp = PL_stack_base + cx->blk_oldsp;
4647 if (gimme == G_VOID)
4648 PL_stack_sp = oldsp;
4650 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4652 /* pop the WHERESO, BLOCK and anything else before the loop */
4653 assert(cxix < cxstack_ix);
4656 cx = &cxstack[cxix];
4658 if (CxTYPE(cx) != CXt_LOOP_GIVEN) {
4659 /* emulate pp_next. Note that any stack(s) cleanup will be
4660 * done by the pp_unstack which op_nextop should point to */
4663 PL_curcop = cx->blk_oldcop;
4665 return cx->blk_loop.my_op->op_nextop;
4669 assert(cx->blk_loop.my_op->op_nextop->op_type == OP_LEAVELOOP);
4670 return cx->blk_loop.my_op->op_nextop;
4680 cxix = dopoptowhereso(cxstack_ix);
4682 DIE(aTHX_ "Can't \"continue\" outside a whereso block");
4684 if (cxix < cxstack_ix)
4688 assert(CxTYPE(cx) == CXt_WHERESO);
4689 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
4693 nextop = cx->blk_whereso.leave_op->op_next;
4700 S_doparseform(pTHX_ SV *sv)
4703 char *s = SvPV(sv, len);
4705 char *base = NULL; /* start of current field */
4706 I32 skipspaces = 0; /* number of contiguous spaces seen */
4707 bool noblank = FALSE; /* ~ or ~~ seen on this line */
4708 bool repeat = FALSE; /* ~~ seen on this line */
4709 bool postspace = FALSE; /* a text field may need right padding */
4712 U32 *linepc = NULL; /* position of last FF_LINEMARK */
4714 bool ischop; /* it's a ^ rather than a @ */
4715 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
4716 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4720 PERL_ARGS_ASSERT_DOPARSEFORM;
4723 Perl_croak(aTHX_ "Null picture in formline");
4725 if (SvTYPE(sv) >= SVt_PVMG) {
4726 /* This might, of course, still return NULL. */
4727 mg = mg_find(sv, PERL_MAGIC_fm);
4729 sv_upgrade(sv, SVt_PVMG);
4733 /* still the same as previously-compiled string? */
4734 SV *old = mg->mg_obj;
4735 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
4736 && len == SvCUR(old)
4737 && strnEQ(SvPVX(old), s, len)
4739 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
4743 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
4744 Safefree(mg->mg_ptr);
4750 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
4751 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
4754 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
4755 s = SvPV(sv_copy, len); /* work on the copy, not the original */
4759 /* estimate the buffer size needed */
4760 for (base = s; s <= send; s++) {
4761 if (*s == '\n' || *s == '@' || *s == '^')
4767 Newx(fops, maxops, U32);
4772 *fpc++ = FF_LINEMARK;
4773 noblank = repeat = FALSE;
4791 case ' ': case '\t':
4807 *fpc++ = FF_LITERAL;
4815 *fpc++ = (U32)skipspaces;
4819 *fpc++ = FF_NEWLINE;
4823 arg = fpc - linepc + 1;
4830 *fpc++ = FF_LINEMARK;
4831 noblank = repeat = FALSE;
4840 ischop = s[-1] == '^';
4846 arg = (s - base) - 1;
4848 *fpc++ = FF_LITERAL;
4854 if (*s == '*') { /* @* or ^* */
4856 *fpc++ = 2; /* skip the @* or ^* */
4858 *fpc++ = FF_LINESNGL;
4861 *fpc++ = FF_LINEGLOB;
4863 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
4864 arg = ischop ? FORM_NUM_BLANK : 0;
4869 const char * const f = ++s;
4872 arg |= FORM_NUM_POINT + (s - f);
4874 *fpc++ = s - base; /* fieldsize for FETCH */
4875 *fpc++ = FF_DECIMAL;
4877 unchopnum |= ! ischop;
4879 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4880 arg = ischop ? FORM_NUM_BLANK : 0;
4882 s++; /* skip the '0' first */
4886 const char * const f = ++s;
4889 arg |= FORM_NUM_POINT + (s - f);
4891 *fpc++ = s - base; /* fieldsize for FETCH */
4892 *fpc++ = FF_0DECIMAL;
4894 unchopnum |= ! ischop;
4896 else { /* text field */
4898 bool ismore = FALSE;
4901 while (*++s == '>') ;
4902 prespace = FF_SPACE;
4904 else if (*s == '|') {
4905 while (*++s == '|') ;
4906 prespace = FF_HALFSPACE;
4911 while (*++s == '<') ;
4914 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4918 *fpc++ = s - base; /* fieldsize for FETCH */
4920 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4923 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
4937 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4940 mg->mg_ptr = (char *) fops;
4941 mg->mg_len = arg * sizeof(U32);
4942 mg->mg_obj = sv_copy;
4943 mg->mg_flags |= MGf_REFCOUNTED;
4945 if (unchopnum && repeat)
4946 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4953 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4955 /* Can value be printed in fldsize chars, using %*.*f ? */
4959 int intsize = fldsize - (value < 0 ? 1 : 0);
4961 if (frcsize & FORM_NUM_POINT)
4963 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
4966 while (intsize--) pwr *= 10.0;
4967 while (frcsize--) eps /= 10.0;
4970 if (value + eps >= pwr)
4973 if (value - eps <= -pwr)
4980 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4982 SV * const datasv = FILTER_DATA(idx);
4983 const int filter_has_file = IoLINES(datasv);
4984 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
4985 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
4990 char *prune_from = NULL;
4991 bool read_from_cache = FALSE;
4995 PERL_ARGS_ASSERT_RUN_USER_FILTER;
4997 assert(maxlen >= 0);
5000 /* I was having segfault trouble under Linux 2.2.5 after a
5001 parse error occurred. (Had to hack around it with a test
5002 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5003 not sure where the trouble is yet. XXX */
5006 SV *const cache = datasv;
5009 const char *cache_p = SvPV(cache, cache_len);
5013 /* Running in block mode and we have some cached data already.
5015 if (cache_len >= umaxlen) {
5016 /* In fact, so much data we don't even need to call
5021 const char *const first_nl =
5022 (const char *)memchr(cache_p, '\n', cache_len);
5024 take = first_nl + 1 - cache_p;
5028 sv_catpvn(buf_sv, cache_p, take);
5029 sv_chop(cache, cache_p + take);
5030 /* Definitely not EOF */
5034 sv_catsv(buf_sv, cache);
5036 umaxlen -= cache_len;
5039 read_from_cache = TRUE;
5043 /* Filter API says that the filter appends to the contents of the buffer.
5044 Usually the buffer is "", so the details don't matter. But if it's not,
5045 then clearly what it contains is already filtered by this filter, so we
5046 don't want to pass it in a second time.
5047 I'm going to use a mortal in case the upstream filter croaks. */
5048 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5049 ? sv_newmortal() : buf_sv;
5050 SvUPGRADE(upstream, SVt_PV);
5052 if (filter_has_file) {
5053 status = FILTER_READ(idx+1, upstream, 0);
5056 if (filter_sub && status >= 0) {
5060 ENTER_with_name("call_filter_sub");
5065 DEFSV_set(upstream);
5069 PUSHs(filter_state);
5072 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5082 SV * const errsv = ERRSV;
5083 if (SvTRUE_NN(errsv))
5084 err = newSVsv(errsv);
5090 LEAVE_with_name("call_filter_sub");
5093 if (SvGMAGICAL(upstream)) {
5095 if (upstream == buf_sv) mg_free(buf_sv);
5097 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5098 if(!err && SvOK(upstream)) {
5099 got_p = SvPV_nomg(upstream, got_len);
5101 if (got_len > umaxlen) {
5102 prune_from = got_p + umaxlen;
5105 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5106 if (first_nl && first_nl + 1 < got_p + got_len) {
5107 /* There's a second line here... */
5108 prune_from = first_nl + 1;
5112 if (!err && prune_from) {
5113 /* Oh. Too long. Stuff some in our cache. */
5114 STRLEN cached_len = got_p + got_len - prune_from;
5115 SV *const cache = datasv;
5118 /* Cache should be empty. */
5119 assert(!SvCUR(cache));
5122 sv_setpvn(cache, prune_from, cached_len);
5123 /* If you ask for block mode, you may well split UTF-8 characters.
5124 "If it breaks, you get to keep both parts"
5125 (Your code is broken if you don't put them back together again
5126 before something notices.) */
5127 if (SvUTF8(upstream)) {
5130 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5132 /* Cannot just use sv_setpvn, as that could free the buffer
5133 before we have a chance to assign it. */
5134 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5135 got_len - cached_len);
5137 /* Can't yet be EOF */
5142 /* If they are at EOF but buf_sv has something in it, then they may never
5143 have touched the SV upstream, so it may be undefined. If we naively
5144 concatenate it then we get a warning about use of uninitialised value.
5146 if (!err && upstream != buf_sv &&
5148 sv_catsv_nomg(buf_sv, upstream);
5150 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5153 IoLINES(datasv) = 0;
5155 SvREFCNT_dec(filter_state);
5156 IoTOP_GV(datasv) = NULL;
5159 SvREFCNT_dec(filter_sub);
5160 IoBOTTOM_GV(datasv) = NULL;
5162 filter_del(S_run_user_filter);
5168 if (status == 0 && read_from_cache) {
5169 /* If we read some data from the cache (and by getting here it implies
5170 that we emptied the cache) then we aren't yet at EOF, and mustn't
5171 report that to our caller. */
5178 * ex: set ts=8 sts=4 sw=4 et: