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 DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #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) {
80 PMOP *pm = (PMOP*)cLOGOP->op_other;
85 const regexp_engine *eng;
86 bool is_bare_re= FALSE;
88 if (PL_op->op_flags & OPf_STACKED) {
98 /* prevent recompiling under /o and ithreads. */
99 #if defined(USE_ITHREADS)
100 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
107 assert (re != (REGEXP*) &PL_sv_undef);
108 eng = re ? RX_ENGINE(re) : current_re_engine();
111 In the below logic: these are basically the same - check if this regcomp is part of a split.
113 (PL_op->op_pmflags & PMf_split )
114 (PL_op->op_next->op_type == OP_PUSHRE)
116 We could add a new mask for this and copy the PMf_split, if we did
117 some bit definition fiddling first.
119 For now we leave this
122 new_re = (eng->op_comp
124 : &Perl_re_op_compile
125 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
127 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
129 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
131 if (pm->op_pmflags & PMf_HAS_CV)
132 ReANY(new_re)->qr_anoncv
133 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
137 /* The match's LHS's get-magic might need to access this op's regexp
138 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
139 get-magic now before we replace the regexp. Hopefully this hack can
140 be replaced with the approach described at
141 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
143 if (pm->op_type == OP_MATCH) {
145 const bool was_tainted = TAINT_get;
146 if (pm->op_flags & OPf_STACKED)
148 else if (pm->op_private & OPpTARGET_MY)
149 lhs = PAD_SV(pm->op_targ);
152 /* Restore the previous value of PL_tainted (which may have been
153 modified by get-magic), to avoid incorrectly setting the
154 RXf_TAINTED flag with RX_TAINT_on further down. */
155 TAINT_set(was_tainted);
156 #ifdef NO_TAINT_SUPPORT
157 PERL_UNUSED_VAR(was_tainted);
160 tmp = reg_temp_copy(NULL, new_re);
161 ReREFCNT_dec(new_re);
167 PM_SETRE(pm, new_re);
171 if (TAINTING_get && TAINT_get) {
172 SvTAINTED_on((SV*)new_re);
176 #if !defined(USE_ITHREADS)
177 /* can't change the optree at runtime either */
178 /* PMf_KEEP is handled differently under threads to avoid these problems */
179 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
181 if (pm->op_pmflags & PMf_KEEP) {
182 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
183 cLOGOP->op_first->op_next = PL_op->op_next;
196 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
197 PMOP * const pm = (PMOP*) cLOGOP->op_other;
198 SV * const dstr = cx->sb_dstr;
201 char *orig = cx->sb_orig;
202 REGEXP * const rx = cx->sb_rx;
204 REGEXP *old = PM_GETRE(pm);
211 PM_SETRE(pm,ReREFCNT_inc(rx));
214 rxres_restore(&cx->sb_rxres, rx);
216 if (cx->sb_iters++) {
217 const I32 saviters = cx->sb_iters;
218 if (cx->sb_iters > cx->sb_maxiters)
219 DIE(aTHX_ "Substitution loop");
221 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
223 /* See "how taint works" above pp_subst() */
225 cx->sb_rxtainted |= SUBST_TAINT_REPL;
226 sv_catsv_nomg(dstr, POPs);
227 if (CxONCE(cx) || s < orig ||
228 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
229 (s == m), cx->sb_targ, NULL,
230 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
232 SV *targ = cx->sb_targ;
234 assert(cx->sb_strend >= s);
235 if(cx->sb_strend > s) {
236 if (DO_UTF8(dstr) && !SvUTF8(targ))
237 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
239 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
241 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
242 cx->sb_rxtainted |= SUBST_TAINT_PAT;
244 if (pm->op_pmflags & PMf_NONDESTRUCT) {
246 /* From here on down we're using the copy, and leaving the
247 original untouched. */
251 SV_CHECK_THINKFIRST_COW_DROP(targ);
252 if (isGV(targ)) Perl_croak_no_modify();
254 SvPV_set(targ, SvPVX(dstr));
255 SvCUR_set(targ, SvCUR(dstr));
256 SvLEN_set(targ, SvLEN(dstr));
259 SvPV_set(dstr, NULL);
262 mPUSHi(saviters - 1);
264 (void)SvPOK_only_UTF8(targ);
267 /* update the taint state of various various variables in
268 * preparation for final exit.
269 * See "how taint works" above pp_subst() */
271 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
272 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
275 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
277 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
278 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
280 SvTAINTED_on(TOPs); /* taint return value */
281 /* needed for mg_set below */
283 cBOOL(cx->sb_rxtainted &
284 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
288 /* PL_tainted must be correctly set for this mg_set */
291 LEAVE_SCOPE(cx->sb_oldsave);
294 RETURNOP(pm->op_next);
295 assert(0); /* NOTREACHED */
297 cx->sb_iters = saviters;
299 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
302 assert(!RX_SUBOFFSET(rx));
303 cx->sb_orig = orig = RX_SUBBEG(rx);
305 cx->sb_strend = s + (cx->sb_strend - m);
307 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
309 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
310 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
312 sv_catpvn_nomg(dstr, s, m-s);
314 cx->sb_s = RX_OFFS(rx)[0].end + orig;
315 { /* Update the pos() information. */
317 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
319 if (!(mg = mg_find_mglob(sv))) {
320 mg = sv_magicext_mglob(sv);
323 MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
326 (void)ReREFCNT_inc(rx);
327 /* update the taint state of various various variables in preparation
328 * for calling the code block.
329 * See "how taint works" above pp_subst() */
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
335 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
336 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
340 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
341 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
342 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
343 ? cx->sb_dstr : cx->sb_targ);
346 rxres_save(&cx->sb_rxres, rx);
348 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
352 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
357 PERL_ARGS_ASSERT_RXRES_SAVE;
360 if (!p || p[1] < RX_NPARENS(rx)) {
362 i = 7 + (RX_NPARENS(rx)+1) * 2;
364 i = 6 + (RX_NPARENS(rx)+1) * 2;
373 /* what (if anything) to free on croak */
374 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
375 RX_MATCH_COPIED_off(rx);
376 *p++ = RX_NPARENS(rx);
379 *p++ = PTR2UV(RX_SAVED_COPY(rx));
380 RX_SAVED_COPY(rx) = NULL;
383 *p++ = PTR2UV(RX_SUBBEG(rx));
384 *p++ = (UV)RX_SUBLEN(rx);
385 *p++ = (UV)RX_SUBOFFSET(rx);
386 *p++ = (UV)RX_SUBCOFFSET(rx);
387 for (i = 0; i <= RX_NPARENS(rx); ++i) {
388 *p++ = (UV)RX_OFFS(rx)[i].start;
389 *p++ = (UV)RX_OFFS(rx)[i].end;
394 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
399 PERL_ARGS_ASSERT_RXRES_RESTORE;
402 RX_MATCH_COPY_FREE(rx);
403 RX_MATCH_COPIED_set(rx, *p);
405 RX_NPARENS(rx) = *p++;
408 if (RX_SAVED_COPY(rx))
409 SvREFCNT_dec (RX_SAVED_COPY(rx));
410 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
414 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
415 RX_SUBLEN(rx) = (I32)(*p++);
416 RX_SUBOFFSET(rx) = (I32)*p++;
417 RX_SUBCOFFSET(rx) = (I32)*p++;
418 for (i = 0; i <= RX_NPARENS(rx); ++i) {
419 RX_OFFS(rx)[i].start = (I32)(*p++);
420 RX_OFFS(rx)[i].end = (I32)(*p++);
425 S_rxres_free(pTHX_ void **rsp)
427 UV * const p = (UV*)*rsp;
429 PERL_ARGS_ASSERT_RXRES_FREE;
433 void *tmp = INT2PTR(char*,*p);
436 U32 i = 9 + p[1] * 2;
438 U32 i = 8 + p[1] * 2;
443 SvREFCNT_dec (INT2PTR(SV*,p[2]));
446 PoisonFree(p, i, sizeof(UV));
455 #define FORM_NUM_BLANK (1<<30)
456 #define FORM_NUM_POINT (1<<29)
460 dVAR; dSP; dMARK; dORIGMARK;
461 SV * const tmpForm = *++MARK;
462 SV *formsv; /* contains text of original format */
463 U32 *fpc; /* format ops program counter */
464 char *t; /* current append position in target string */
465 const char *f; /* current position in format string */
467 SV *sv = NULL; /* current item */
468 const char *item = NULL;/* string value of current item */
469 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
470 I32 itembytes = 0; /* as itemsize, but length in bytes */
471 I32 fieldsize = 0; /* width of current field */
472 I32 lines = 0; /* number of lines that have been output */
473 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
474 const char *chophere = NULL; /* where to chop current item */
475 STRLEN linemark = 0; /* pos of start of line in output */
477 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
478 STRLEN len; /* length of current sv */
479 STRLEN linemax; /* estimate of output size in bytes */
480 bool item_is_utf8 = FALSE;
481 bool targ_is_utf8 = FALSE;
484 U8 *source; /* source of bytes to append */
485 STRLEN to_copy; /* how may bytes to append */
486 char trans; /* what chars to translate */
488 mg = doparseform(tmpForm);
490 fpc = (U32*)mg->mg_ptr;
491 /* the actual string the format was compiled from.
492 * with overload etc, this may not match tmpForm */
496 SvPV_force(PL_formtarget, len);
497 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
498 SvTAINTED_on(PL_formtarget);
499 if (DO_UTF8(PL_formtarget))
501 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
502 t = SvGROW(PL_formtarget, len + linemax + 1);
503 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
505 f = SvPV_const(formsv, len);
509 const char *name = "???";
512 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
513 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
514 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
515 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
516 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
518 case FF_CHECKNL: name = "CHECKNL"; break;
519 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
520 case FF_SPACE: name = "SPACE"; break;
521 case FF_HALFSPACE: name = "HALFSPACE"; break;
522 case FF_ITEM: name = "ITEM"; break;
523 case FF_CHOP: name = "CHOP"; break;
524 case FF_LINEGLOB: name = "LINEGLOB"; break;
525 case FF_NEWLINE: name = "NEWLINE"; break;
526 case FF_MORE: name = "MORE"; break;
527 case FF_LINEMARK: name = "LINEMARK"; break;
528 case FF_END: name = "END"; break;
529 case FF_0DECIMAL: name = "0DECIMAL"; break;
530 case FF_LINESNGL: name = "LINESNGL"; break;
533 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
535 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
538 case FF_LINEMARK: /* start (or end) of a line */
539 linemark = t - SvPVX(PL_formtarget);
544 case FF_LITERAL: /* append <arg> literal chars */
549 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
552 case FF_SKIP: /* skip <arg> chars in format */
556 case FF_FETCH: /* get next item and set field size to <arg> */
565 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
568 SvTAINTED_on(PL_formtarget);
571 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
573 const char *s = item = SvPV_const(sv, len);
574 const char *send = s + len;
577 item_is_utf8 = DO_UTF8(sv);
589 if (itemsize == fieldsize)
592 itembytes = s - item;
596 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
598 const char *s = item = SvPV_const(sv, len);
599 const char *send = s + len;
603 item_is_utf8 = DO_UTF8(sv);
605 /* look for a legal split position */
613 /* provisional split point */
617 /* we delay testing fieldsize until after we've
618 * processed the possible split char directly
619 * following the last field char; so if fieldsize=3
620 * and item="a b cdef", we consume "a b", not "a".
621 * Ditto further down.
623 if (size == fieldsize)
627 if (strchr(PL_chopset, *s)) {
628 /* provisional split point */
629 /* for a non-space split char, we include
630 * the split char; hence the '+1' */
634 if (size == fieldsize)
646 if (!chophere || s == send) {
650 itembytes = chophere - item;
655 case FF_SPACE: /* append padding space (diff of field, item size) */
656 arg = fieldsize - itemsize;
664 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
665 arg = fieldsize - itemsize;
674 case FF_ITEM: /* append a text item, while blanking ctrl chars */
680 case FF_CHOP: /* (for ^*) chop the current item */
682 const char *s = chophere;
690 /* tied, overloaded or similar strangeness.
691 * Do it the hard way */
692 sv_setpvn(sv, s, len - (s-item));
697 case FF_LINESNGL: /* process ^* */
700 case FF_LINEGLOB: /* process @* */
702 const bool oneline = fpc[-1] == FF_LINESNGL;
703 const char *s = item = SvPV_const(sv, len);
704 const char *const send = s + len;
706 item_is_utf8 = DO_UTF8(sv);
717 to_copy = s - item - 1;
731 /* append to_copy bytes from source to PL_formstring.
732 * item_is_utf8 implies source is utf8.
733 * if trans, translate certain characters during the copy */
738 SvCUR_set(PL_formtarget,
739 t - SvPVX_const(PL_formtarget));
741 if (targ_is_utf8 && !item_is_utf8) {
742 source = tmp = bytes_to_utf8(source, &to_copy);
744 if (item_is_utf8 && !targ_is_utf8) {
746 /* Upgrade targ to UTF8, and then we reduce it to
747 a problem we have a simple solution for.
748 Don't need get magic. */
749 sv_utf8_upgrade_nomg(PL_formtarget);
751 /* re-calculate linemark */
752 s = (U8*)SvPVX(PL_formtarget);
753 /* the bytes we initially allocated to append the
754 * whole line may have been gobbled up during the
755 * upgrade, so allocate a whole new line's worth
760 linemark = s - (U8*)SvPVX(PL_formtarget);
762 /* Easy. They agree. */
763 assert (item_is_utf8 == targ_is_utf8);
766 /* @* and ^* are the only things that can exceed
767 * the linemax, so grow by the output size, plus
768 * a whole new form's worth in case of any further
770 grow = linemax + to_copy;
772 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
773 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
775 Copy(source, t, to_copy, char);
777 /* blank out ~ or control chars, depending on trans.
778 * works on bytes not chars, so relies on not
779 * matching utf8 continuation bytes */
781 U8 *send = s + to_copy;
784 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
791 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
797 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
799 #if defined(USE_LONG_DOUBLE)
801 ((arg & FORM_NUM_POINT) ?
802 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
805 ((arg & FORM_NUM_POINT) ?
806 "%#0*.*f" : "%0*.*f");
810 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
812 #if defined(USE_LONG_DOUBLE)
814 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
817 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
820 /* If the field is marked with ^ and the value is undefined,
822 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
830 /* overflow evidence */
831 if (num_overflow(value, fieldsize, arg)) {
837 /* Formats aren't yet marked for locales, so assume "yes". */
839 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
840 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
841 /* we generate fmt ourselves so it is safe */
842 GCC_DIAG_IGNORE(-Wformat-nonliteral);
843 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
845 RESTORE_LC_NUMERIC();
850 case FF_NEWLINE: /* delete trailing spaces, then append \n */
852 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
857 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
860 if (arg) { /* repeat until fields exhausted? */
866 t = SvPVX(PL_formtarget) + linemark;
871 case FF_MORE: /* replace long end of string with '...' */
873 const char *s = chophere;
874 const char *send = item + len;
876 while (isSPACE(*s) && (s < send))
881 arg = fieldsize - itemsize;
888 if (strnEQ(s1," ",3)) {
889 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
899 case FF_END: /* tidy up, then return */
901 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
903 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
905 SvUTF8_on(PL_formtarget);
906 FmLINES(PL_formtarget) += lines;
908 if (fpc[-1] == FF_BLANK)
909 RETURNOP(cLISTOP->op_first);
921 if (PL_stack_base + *PL_markstack_ptr == SP) {
923 if (GIMME_V == G_SCALAR)
925 RETURNOP(PL_op->op_next->op_next);
927 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
928 Perl_pp_pushmark(aTHX); /* push dst */
929 Perl_pp_pushmark(aTHX); /* push src */
930 ENTER_with_name("grep"); /* enter outer scope */
933 if (PL_op->op_private & OPpGREP_LEX)
934 SAVESPTR(PAD_SVl(PL_op->op_targ));
937 ENTER_with_name("grep_item"); /* enter inner scope */
940 src = PL_stack_base[*PL_markstack_ptr];
941 if (SvPADTMP(src) && !IS_PADGV(src)) {
942 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
946 if (PL_op->op_private & OPpGREP_LEX)
947 PAD_SVl(PL_op->op_targ) = src;
952 if (PL_op->op_type == OP_MAPSTART)
953 Perl_pp_pushmark(aTHX); /* push top */
954 return ((LOGOP*)PL_op->op_next)->op_other;
960 const I32 gimme = GIMME_V;
961 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
967 /* first, move source pointer to the next item in the source list */
968 ++PL_markstack_ptr[-1];
970 /* if there are new items, push them into the destination list */
971 if (items && gimme != G_VOID) {
972 /* might need to make room back there first */
973 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
974 /* XXX this implementation is very pessimal because the stack
975 * is repeatedly extended for every set of items. Is possible
976 * to do this without any stack extension or copying at all
977 * by maintaining a separate list over which the map iterates
978 * (like foreach does). --gsar */
980 /* everything in the stack after the destination list moves
981 * towards the end the stack by the amount of room needed */
982 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
984 /* items to shift up (accounting for the moved source pointer) */
985 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
987 /* This optimization is by Ben Tilly and it does
988 * things differently from what Sarathy (gsar)
989 * is describing. The downside of this optimization is
990 * that leaves "holes" (uninitialized and hopefully unused areas)
991 * to the Perl stack, but on the other hand this
992 * shouldn't be a problem. If Sarathy's idea gets
993 * implemented, this optimization should become
994 * irrelevant. --jhi */
996 shift = count; /* Avoid shifting too often --Ben Tilly */
1000 dst = (SP += shift);
1001 PL_markstack_ptr[-1] += shift;
1002 *PL_markstack_ptr += shift;
1006 /* copy the new items down to the destination list */
1007 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1008 if (gimme == G_ARRAY) {
1009 /* add returned items to the collection (making mortal copies
1010 * if necessary), then clear the current temps stack frame
1011 * *except* for those items. We do this splicing the items
1012 * into the start of the tmps frame (so some items may be on
1013 * the tmps stack twice), then moving PL_tmps_floor above
1014 * them, then freeing the frame. That way, the only tmps that
1015 * accumulate over iterations are the return values for map.
1016 * We have to do to this way so that everything gets correctly
1017 * freed if we die during the map.
1021 /* make space for the slice */
1022 EXTEND_MORTAL(items);
1023 tmpsbase = PL_tmps_floor + 1;
1024 Move(PL_tmps_stack + tmpsbase,
1025 PL_tmps_stack + tmpsbase + items,
1026 PL_tmps_ix - PL_tmps_floor,
1028 PL_tmps_ix += items;
1033 sv = sv_mortalcopy(sv);
1035 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1037 /* clear the stack frame except for the items */
1038 PL_tmps_floor += items;
1040 /* FREETMPS may have cleared the TEMP flag on some of the items */
1043 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1046 /* scalar context: we don't care about which values map returns
1047 * (we use undef here). And so we certainly don't want to do mortal
1048 * copies of meaningless values. */
1049 while (items-- > 0) {
1051 *dst-- = &PL_sv_undef;
1059 LEAVE_with_name("grep_item"); /* exit inner scope */
1062 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1064 (void)POPMARK; /* pop top */
1065 LEAVE_with_name("grep"); /* exit outer scope */
1066 (void)POPMARK; /* pop src */
1067 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1068 (void)POPMARK; /* pop dst */
1069 SP = PL_stack_base + POPMARK; /* pop original mark */
1070 if (gimme == G_SCALAR) {
1071 if (PL_op->op_private & OPpGREP_LEX) {
1072 SV* sv = sv_newmortal();
1073 sv_setiv(sv, items);
1081 else if (gimme == G_ARRAY)
1088 ENTER_with_name("grep_item"); /* enter inner scope */
1091 /* set $_ to the new source item */
1092 src = PL_stack_base[PL_markstack_ptr[-1]];
1093 if (SvPADTMP(src) && !IS_PADGV(src)) src = sv_mortalcopy(src);
1095 if (PL_op->op_private & OPpGREP_LEX)
1096 PAD_SVl(PL_op->op_targ) = src;
1100 RETURNOP(cLOGOP->op_other);
1109 if (GIMME == G_ARRAY)
1111 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1112 return cLOGOP->op_other;
1122 if (GIMME == G_ARRAY) {
1123 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1127 SV * const targ = PAD_SV(PL_op->op_targ);
1130 if (PL_op->op_private & OPpFLIP_LINENUM) {
1131 if (GvIO(PL_last_in_gv)) {
1132 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1135 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1137 flip = SvIV(sv) == SvIV(GvSV(gv));
1143 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1144 if (PL_op->op_flags & OPf_SPECIAL) {
1152 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1155 sv_setpvs(TARG, "");
1161 /* This code tries to decide if "$left .. $right" should use the
1162 magical string increment, or if the range is numeric (we make
1163 an exception for .."0" [#18165]). AMS 20021031. */
1165 #define RANGE_IS_NUMERIC(left,right) ( \
1166 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1167 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1168 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1169 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1170 && (!SvOK(right) || looks_like_number(right))))
1176 if (GIMME == G_ARRAY) {
1182 if (RANGE_IS_NUMERIC(left,right)) {
1185 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1186 (SvOK(right) && (SvIOK(right)
1187 ? SvIsUV(right) && SvUV(right) > IV_MAX
1188 : SvNV_nomg(right) > IV_MAX)))
1189 DIE(aTHX_ "Range iterator outside integer range");
1190 i = SvIV_nomg(left);
1191 max = SvIV_nomg(right);
1194 if (j > SSize_t_MAX)
1195 Perl_croak(aTHX_ "Out of memory during list extend");
1202 SV * const sv = sv_2mortal(newSViv(i++));
1208 const char * const lpv = SvPV_nomg_const(left, llen);
1209 const char * const tmps = SvPV_nomg_const(right, len);
1211 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1212 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1214 if (strEQ(SvPVX_const(sv),tmps))
1216 sv = sv_2mortal(newSVsv(sv));
1223 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1227 if (PL_op->op_private & OPpFLIP_LINENUM) {
1228 if (GvIO(PL_last_in_gv)) {
1229 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1232 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1233 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1241 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1242 sv_catpvs(targ, "E0");
1252 static const char * const context_name[] = {
1254 NULL, /* CXt_WHEN never actually needs "block" */
1255 NULL, /* CXt_BLOCK never actually needs "block" */
1256 NULL, /* CXt_GIVEN never actually needs "block" */
1257 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1258 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1259 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1260 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1268 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1273 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1275 for (i = cxstack_ix; i >= 0; i--) {
1276 const PERL_CONTEXT * const cx = &cxstack[i];
1277 switch (CxTYPE(cx)) {
1283 /* diag_listed_as: Exiting subroutine via %s */
1284 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1285 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1286 if (CxTYPE(cx) == CXt_NULL)
1289 case CXt_LOOP_LAZYIV:
1290 case CXt_LOOP_LAZYSV:
1292 case CXt_LOOP_PLAIN:
1294 STRLEN cx_label_len = 0;
1295 U32 cx_label_flags = 0;
1296 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1298 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1301 (const U8*)cx_label, cx_label_len,
1302 (const U8*)label, len) == 0)
1304 (const U8*)label, len,
1305 (const U8*)cx_label, cx_label_len) == 0)
1306 : (len == cx_label_len && ((cx_label == label)
1307 || memEQ(cx_label, label, len))) )) {
1308 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1309 (long)i, cx_label));
1312 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1323 Perl_dowantarray(pTHX)
1326 const I32 gimme = block_gimme();
1327 return (gimme == G_VOID) ? G_SCALAR : gimme;
1331 Perl_block_gimme(pTHX)
1334 const I32 cxix = dopoptosub(cxstack_ix);
1338 switch (cxstack[cxix].blk_gimme) {
1346 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1347 assert(0); /* NOTREACHED */
1353 Perl_is_lvalue_sub(pTHX)
1356 const I32 cxix = dopoptosub(cxstack_ix);
1357 assert(cxix >= 0); /* We should only be called from inside subs */
1359 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1360 return CxLVAL(cxstack + cxix);
1365 /* only used by PUSHSUB */
1367 Perl_was_lvalue_sub(pTHX)
1370 const I32 cxix = dopoptosub(cxstack_ix-1);
1371 assert(cxix >= 0); /* We should only be called from inside subs */
1373 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1374 return CxLVAL(cxstack + cxix);
1380 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1385 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1387 for (i = startingblock; i >= 0; i--) {
1388 const PERL_CONTEXT * const cx = &cxstk[i];
1389 switch (CxTYPE(cx)) {
1393 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1394 * twice; the first for the normal foo() call, and the second
1395 * for a faked up re-entry into the sub to execute the
1396 * code block. Hide this faked entry from the world. */
1397 if (cx->cx_type & CXp_SUB_RE_FAKE)
1401 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1409 S_dopoptoeval(pTHX_ I32 startingblock)
1413 for (i = startingblock; i >= 0; i--) {
1414 const PERL_CONTEXT *cx = &cxstack[i];
1415 switch (CxTYPE(cx)) {
1419 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1427 S_dopoptoloop(pTHX_ I32 startingblock)
1431 for (i = startingblock; i >= 0; i--) {
1432 const PERL_CONTEXT * const cx = &cxstack[i];
1433 switch (CxTYPE(cx)) {
1439 /* diag_listed_as: Exiting subroutine via %s */
1440 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1441 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1442 if ((CxTYPE(cx)) == CXt_NULL)
1445 case CXt_LOOP_LAZYIV:
1446 case CXt_LOOP_LAZYSV:
1448 case CXt_LOOP_PLAIN:
1449 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1457 S_dopoptogiven(pTHX_ I32 startingblock)
1461 for (i = startingblock; i >= 0; i--) {
1462 const PERL_CONTEXT *cx = &cxstack[i];
1463 switch (CxTYPE(cx)) {
1467 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1469 case CXt_LOOP_PLAIN:
1470 assert(!CxFOREACHDEF(cx));
1472 case CXt_LOOP_LAZYIV:
1473 case CXt_LOOP_LAZYSV:
1475 if (CxFOREACHDEF(cx)) {
1476 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1485 S_dopoptowhen(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_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1503 Perl_dounwind(pTHX_ I32 cxix)
1508 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1511 while (cxstack_ix > cxix) {
1513 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1514 DEBUG_CX("UNWIND"); \
1515 /* Note: we don't need to restore the base context info till the end. */
1516 switch (CxTYPE(cx)) {
1519 continue; /* not break */
1527 case CXt_LOOP_LAZYIV:
1528 case CXt_LOOP_LAZYSV:
1530 case CXt_LOOP_PLAIN:
1541 PERL_UNUSED_VAR(optype);
1545 Perl_qerror(pTHX_ SV *err)
1549 PERL_ARGS_ASSERT_QERROR;
1552 if (PL_in_eval & EVAL_KEEPERR) {
1553 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1557 sv_catsv(ERRSV, err);
1560 sv_catsv(PL_errors, err);
1562 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1564 ++PL_parser->error_count;
1568 Perl_die_unwind(pTHX_ SV *msv)
1571 SV *exceptsv = sv_mortalcopy(msv);
1572 U8 in_eval = PL_in_eval;
1573 PERL_ARGS_ASSERT_DIE_UNWIND;
1580 * Historically, perl used to set ERRSV ($@) early in the die
1581 * process and rely on it not getting clobbered during unwinding.
1582 * That sucked, because it was liable to get clobbered, so the
1583 * setting of ERRSV used to emit the exception from eval{} has
1584 * been moved to much later, after unwinding (see just before
1585 * JMPENV_JUMP below). However, some modules were relying on the
1586 * early setting, by examining $@ during unwinding to use it as
1587 * a flag indicating whether the current unwinding was caused by
1588 * an exception. It was never a reliable flag for that purpose,
1589 * being totally open to false positives even without actual
1590 * clobberage, but was useful enough for production code to
1591 * semantically rely on it.
1593 * We'd like to have a proper introspective interface that
1594 * explicitly describes the reason for whatever unwinding
1595 * operations are currently in progress, so that those modules
1596 * work reliably and $@ isn't further overloaded. But we don't
1597 * have one yet. In its absence, as a stopgap measure, ERRSV is
1598 * now *additionally* set here, before unwinding, to serve as the
1599 * (unreliable) flag that it used to.
1601 * This behaviour is temporary, and should be removed when a
1602 * proper way to detect exceptional unwinding has been developed.
1603 * As of 2010-12, the authors of modules relying on the hack
1604 * are aware of the issue, because the modules failed on
1605 * perls 5.13.{1..7} which had late setting of $@ without this
1606 * early-setting hack.
1608 if (!(in_eval & EVAL_KEEPERR)) {
1609 SvTEMP_off(exceptsv);
1610 sv_setsv(ERRSV, exceptsv);
1613 if (in_eval & EVAL_KEEPERR) {
1614 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1618 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1619 && PL_curstackinfo->si_prev)
1631 JMPENV *restartjmpenv;
1634 if (cxix < cxstack_ix)
1637 POPBLOCK(cx,PL_curpm);
1638 if (CxTYPE(cx) != CXt_EVAL) {
1640 const char* message = SvPVx_const(exceptsv, msglen);
1641 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1642 PerlIO_write(Perl_error_log, message, msglen);
1646 namesv = cx->blk_eval.old_namesv;
1647 oldcop = cx->blk_oldcop;
1648 restartjmpenv = cx->blk_eval.cur_top_env;
1649 restartop = cx->blk_eval.retop;
1651 if (gimme == G_SCALAR)
1652 *++newsp = &PL_sv_undef;
1653 PL_stack_sp = newsp;
1657 /* LEAVE could clobber PL_curcop (see save_re_context())
1658 * XXX it might be better to find a way to avoid messing with
1659 * PL_curcop in save_re_context() instead, but this is a more
1660 * minimal fix --GSAR */
1663 if (optype == OP_REQUIRE) {
1664 (void)hv_store(GvHVn(PL_incgv),
1665 SvPVX_const(namesv),
1666 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1668 /* note that unlike pp_entereval, pp_require isn't
1669 * supposed to trap errors. So now that we've popped the
1670 * EVAL that pp_require pushed, and processed the error
1671 * message, rethrow the error */
1672 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1673 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1676 if (!(in_eval & EVAL_KEEPERR))
1677 sv_setsv(ERRSV, exceptsv);
1678 PL_restartjmpenv = restartjmpenv;
1679 PL_restartop = restartop;
1681 assert(0); /* NOTREACHED */
1685 write_to_stderr(exceptsv);
1687 assert(0); /* NOTREACHED */
1692 dVAR; dSP; dPOPTOPssrl;
1693 if (SvTRUE(left) != SvTRUE(right))
1700 =for apidoc caller_cx
1702 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1703 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1704 information returned to Perl by C<caller>. Note that XSUBs don't get a
1705 stack frame, so C<caller_cx(0, NULL)> will return information for the
1706 immediately-surrounding Perl code.
1708 This function skips over the automatic calls to C<&DB::sub> made on the
1709 behalf of the debugger. If the stack frame requested was a sub called by
1710 C<DB::sub>, the return value will be the frame for the call to
1711 C<DB::sub>, since that has the correct line number/etc. for the call
1712 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1713 frame for the sub call itself.
1718 const PERL_CONTEXT *
1719 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1721 I32 cxix = dopoptosub(cxstack_ix);
1722 const PERL_CONTEXT *cx;
1723 const PERL_CONTEXT *ccstack = cxstack;
1724 const PERL_SI *top_si = PL_curstackinfo;
1727 /* we may be in a higher stacklevel, so dig down deeper */
1728 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1729 top_si = top_si->si_prev;
1730 ccstack = top_si->si_cxstack;
1731 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1735 /* caller() should not report the automatic calls to &DB::sub */
1736 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1737 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1741 cxix = dopoptosub_at(ccstack, cxix - 1);
1744 cx = &ccstack[cxix];
1745 if (dbcxp) *dbcxp = cx;
1747 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1748 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1749 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1750 field below is defined for any cx. */
1751 /* caller() should not report the automatic calls to &DB::sub */
1752 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1753 cx = &ccstack[dbcxix];
1763 const PERL_CONTEXT *cx;
1764 const PERL_CONTEXT *dbcx;
1766 const HEK *stash_hek;
1768 bool has_arg = MAXARG && TOPs;
1777 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1779 if (GIMME != G_ARRAY) {
1787 assert(CopSTASH(cx->blk_oldcop));
1788 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1789 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1791 if (GIMME != G_ARRAY) {
1794 PUSHs(&PL_sv_undef);
1797 sv_sethek(TARG, stash_hek);
1806 PUSHs(&PL_sv_undef);
1809 sv_sethek(TARG, stash_hek);
1812 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1813 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1814 cx->blk_sub.retop, TRUE);
1816 lcop = cx->blk_oldcop;
1817 mPUSHi((I32)CopLINE(lcop));
1820 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1821 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1822 /* So is ccstack[dbcxix]. */
1823 if (cvgv && isGV(cvgv)) {
1824 SV * const sv = newSV(0);
1825 gv_efullname3(sv, cvgv, NULL);
1827 PUSHs(boolSV(CxHASARGS(cx)));
1830 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1831 PUSHs(boolSV(CxHASARGS(cx)));
1835 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1838 gimme = (I32)cx->blk_gimme;
1839 if (gimme == G_VOID)
1840 PUSHs(&PL_sv_undef);
1842 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1843 if (CxTYPE(cx) == CXt_EVAL) {
1845 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1846 PUSHs(newSVpvn_flags(SvPVX(cx->blk_eval.cur_text),
1847 SvCUR(cx->blk_eval.cur_text)-2,
1848 SvUTF8(cx->blk_eval.cur_text)|SVs_TEMP));
1852 else if (cx->blk_eval.old_namesv) {
1853 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1856 /* eval BLOCK (try blocks have old_namesv == 0) */
1858 PUSHs(&PL_sv_undef);
1859 PUSHs(&PL_sv_undef);
1863 PUSHs(&PL_sv_undef);
1864 PUSHs(&PL_sv_undef);
1866 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1867 && CopSTASH_eq(PL_curcop, PL_debstash))
1869 AV * const ary = cx->blk_sub.argarray;
1870 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1872 Perl_init_dbargs(aTHX);
1874 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1875 av_extend(PL_dbargs, AvFILLp(ary) + off);
1876 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1877 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1879 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1882 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1884 if (old_warnings == pWARN_NONE)
1885 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1886 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1887 mask = &PL_sv_undef ;
1888 else if (old_warnings == pWARN_ALL ||
1889 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1890 /* Get the bit mask for $warnings::Bits{all}, because
1891 * it could have been extended by warnings::register */
1893 HV * const bits = get_hv("warnings::Bits", 0);
1894 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1895 mask = newSVsv(*bits_all);
1898 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1902 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1906 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1907 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1918 if (MAXARG < 1 || (!TOPs && !POPs))
1919 tmps = NULL, len = 0;
1921 tmps = SvPVx_const(POPs, len);
1922 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1927 /* like pp_nextstate, but used instead when the debugger is active */
1932 PL_curcop = (COP*)PL_op;
1933 TAINT_NOT; /* Each statement is presumed innocent */
1934 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1939 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1940 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1944 const I32 gimme = G_ARRAY;
1946 GV * const gv = PL_DBgv;
1949 if (gv && isGV_with_GP(gv))
1952 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1953 DIE(aTHX_ "No DB::DB routine defined");
1955 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1956 /* don't do recursive DB::DB call */
1970 (void)(*CvXSUB(cv))(aTHX_ cv);
1976 PUSHBLOCK(cx, CXt_SUB, SP);
1978 cx->blk_sub.retop = PL_op->op_next;
1980 if (CvDEPTH(cv) >= 2) {
1981 PERL_STACK_OVERFLOW_CHECK();
1982 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1985 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1986 RETURNOP(CvSTART(cv));
1993 /* SVs on the stack that have any of the flags passed in are left as is.
1994 Other SVs are protected via the mortals stack if lvalue is true, and
1995 copied otherwise. */
1998 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
1999 U32 flags, bool lvalue)
2002 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2004 if (flags & SVs_PADTMP) {
2005 flags &= ~SVs_PADTMP;
2008 if (gimme == G_SCALAR) {
2010 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2013 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2014 : sv_mortalcopy(*SP);
2016 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2019 *++MARK = &PL_sv_undef;
2023 else if (gimme == G_ARRAY) {
2024 /* in case LEAVE wipes old return values */
2025 while (++MARK <= SP) {
2026 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2030 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2031 : sv_mortalcopy(*MARK);
2032 TAINT_NOT; /* Each item is independent */
2035 /* When this function was called with MARK == newsp, we reach this
2036 * point with SP == newsp. */
2046 I32 gimme = GIMME_V;
2048 ENTER_with_name("block");
2051 PUSHBLOCK(cx, CXt_BLOCK, SP);
2064 if (PL_op->op_flags & OPf_SPECIAL) {
2065 cx = &cxstack[cxstack_ix];
2066 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2071 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2074 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2075 PL_op->op_private & OPpLVALUE);
2076 PL_curpm = newpm; /* Don't pop $1 et al till now */
2078 LEAVE_with_name("block");
2087 const I32 gimme = GIMME_V;
2088 void *itervar; /* location of the iteration variable */
2089 U8 cxtype = CXt_LOOP_FOR;
2091 ENTER_with_name("loop1");
2094 if (PL_op->op_targ) { /* "my" variable */
2095 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2096 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2097 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2098 SVs_PADSTALE, SVs_PADSTALE);
2100 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2102 itervar = PL_comppad;
2104 itervar = &PAD_SVl(PL_op->op_targ);
2107 else { /* symbol table variable */
2108 GV * const gv = MUTABLE_GV(POPs);
2109 SV** svp = &GvSV(gv);
2110 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2112 itervar = (void *)gv;
2115 if (PL_op->op_private & OPpITER_DEF)
2116 cxtype |= CXp_FOR_DEF;
2118 ENTER_with_name("loop2");
2120 PUSHBLOCK(cx, cxtype, SP);
2121 PUSHLOOP_FOR(cx, itervar, MARK);
2122 if (PL_op->op_flags & OPf_STACKED) {
2123 SV *maybe_ary = POPs;
2124 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2126 SV * const right = maybe_ary;
2129 if (RANGE_IS_NUMERIC(sv,right)) {
2130 cx->cx_type &= ~CXTYPEMASK;
2131 cx->cx_type |= CXt_LOOP_LAZYIV;
2132 /* Make sure that no-one re-orders cop.h and breaks our
2134 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2135 #ifdef NV_PRESERVES_UV
2136 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2137 (SvNV_nomg(sv) > (NV)IV_MAX)))
2139 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2140 (SvNV_nomg(right) < (NV)IV_MIN))))
2142 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2144 ((SvNV_nomg(sv) > 0) &&
2145 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2146 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2148 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2150 ((SvNV_nomg(right) > 0) &&
2151 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2152 (SvNV_nomg(right) > (NV)UV_MAX))
2155 DIE(aTHX_ "Range iterator outside integer range");
2156 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2157 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2159 /* for correct -Dstv display */
2160 cx->blk_oldsp = sp - PL_stack_base;
2164 cx->cx_type &= ~CXTYPEMASK;
2165 cx->cx_type |= CXt_LOOP_LAZYSV;
2166 /* Make sure that no-one re-orders cop.h and breaks our
2168 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2169 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2170 cx->blk_loop.state_u.lazysv.end = right;
2171 SvREFCNT_inc(right);
2172 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2173 /* This will do the upgrade to SVt_PV, and warn if the value
2174 is uninitialised. */
2175 (void) SvPV_nolen_const(right);
2176 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2177 to replace !SvOK() with a pointer to "". */
2179 SvREFCNT_dec(right);
2180 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2184 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2185 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2186 SvREFCNT_inc(maybe_ary);
2187 cx->blk_loop.state_u.ary.ix =
2188 (PL_op->op_private & OPpITER_REVERSED) ?
2189 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2193 else { /* iterating over items on the stack */
2194 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2195 if (PL_op->op_private & OPpITER_REVERSED) {
2196 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2199 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2210 const I32 gimme = GIMME_V;
2212 ENTER_with_name("loop1");
2214 ENTER_with_name("loop2");
2216 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2217 PUSHLOOP_PLAIN(cx, SP);
2232 assert(CxTYPE_is_LOOP(cx));
2234 newsp = PL_stack_base + cx->blk_loop.resetsp;
2237 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2238 PL_op->op_private & OPpLVALUE);
2241 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2242 PL_curpm = newpm; /* ... and pop $1 et al */
2244 LEAVE_with_name("loop2");
2245 LEAVE_with_name("loop1");
2251 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2252 PERL_CONTEXT *cx, PMOP *newpm)
2254 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2255 if (gimme == G_SCALAR) {
2256 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2258 const char *what = NULL;
2260 assert(MARK+1 == SP);
2261 if ((SvPADTMP(TOPs) ||
2262 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2265 !SvSMAGICAL(TOPs)) {
2267 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2268 : "a readonly value" : "a temporary";
2273 /* sub:lvalue{} will take us here. */
2282 "Can't return %s from lvalue subroutine", what
2287 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2288 if (!SvPADTMP(*SP)) {
2289 *++newsp = SvREFCNT_inc(*SP);
2294 /* FREETMPS could clobber it */
2295 SV *sv = SvREFCNT_inc(*SP);
2297 *++newsp = sv_mortalcopy(sv);
2304 ? sv_mortalcopy(*SP)
2306 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2311 *++newsp = &PL_sv_undef;
2313 if (CxLVAL(cx) & OPpDEREF) {
2316 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2320 else if (gimme == G_ARRAY) {
2321 assert (!(CxLVAL(cx) & OPpDEREF));
2322 if (ref || !CxLVAL(cx))
2323 while (++MARK <= SP)
2325 SvFLAGS(*MARK) & SVs_PADTMP
2326 ? sv_mortalcopy(*MARK)
2329 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2330 else while (++MARK <= SP) {
2331 if (*MARK != &PL_sv_undef
2333 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2338 /* Might be flattened array after $#array = */
2345 /* diag_listed_as: Can't return %s from lvalue subroutine */
2347 "Can't return a %s from lvalue subroutine",
2348 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2354 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2357 PL_stack_sp = newsp;
2364 bool popsub2 = FALSE;
2365 bool clear_errsv = FALSE;
2375 const I32 cxix = dopoptosub(cxstack_ix);
2378 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2379 * sort block, which is a CXt_NULL
2382 PL_stack_base[1] = *PL_stack_sp;
2383 PL_stack_sp = PL_stack_base + 1;
2387 DIE(aTHX_ "Can't return outside a subroutine");
2389 if (cxix < cxstack_ix)
2392 if (CxMULTICALL(&cxstack[cxix])) {
2393 gimme = cxstack[cxix].blk_gimme;
2394 if (gimme == G_VOID)
2395 PL_stack_sp = PL_stack_base;
2396 else if (gimme == G_SCALAR) {
2397 PL_stack_base[1] = *PL_stack_sp;
2398 PL_stack_sp = PL_stack_base + 1;
2404 switch (CxTYPE(cx)) {
2407 lval = !!CvLVALUE(cx->blk_sub.cv);
2408 retop = cx->blk_sub.retop;
2409 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2412 if (!(PL_in_eval & EVAL_KEEPERR))
2415 namesv = cx->blk_eval.old_namesv;
2416 retop = cx->blk_eval.retop;
2419 if (optype == OP_REQUIRE &&
2420 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2422 /* Unassume the success we assumed earlier. */
2423 (void)hv_delete(GvHVn(PL_incgv),
2424 SvPVX_const(namesv),
2425 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2427 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2431 retop = cx->blk_sub.retop;
2435 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2439 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2441 if (gimme == G_SCALAR) {
2444 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2445 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2446 && !SvMAGICAL(TOPs)) {
2447 *++newsp = SvREFCNT_inc(*SP);
2452 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2454 *++newsp = sv_mortalcopy(sv);
2458 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2459 && !SvMAGICAL(*SP)) {
2463 *++newsp = sv_mortalcopy(*SP);
2466 *++newsp = sv_mortalcopy(*SP);
2469 *++newsp = &PL_sv_undef;
2471 else if (gimme == G_ARRAY) {
2472 while (++MARK <= SP) {
2473 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2474 && !SvGMAGICAL(*MARK)
2475 ? *MARK : sv_mortalcopy(*MARK);
2476 TAINT_NOT; /* Each item is independent */
2479 PL_stack_sp = newsp;
2483 /* Stack values are safe: */
2486 POPSUB(cx,sv); /* release CV and @_ ... */
2490 PL_curpm = newpm; /* ... and pop $1 et al */
2499 /* This duplicates parts of pp_leavesub, so that it can share code with
2510 if (CxMULTICALL(&cxstack[cxstack_ix]))
2514 cxstack_ix++; /* temporarily protect top context */
2518 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2521 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2523 PL_curpm = newpm; /* ... and pop $1 et al */
2526 return cx->blk_sub.retop;
2530 S_unwind_loop(pTHX_ const char * const opname)
2534 if (PL_op->op_flags & OPf_SPECIAL) {
2535 cxix = dopoptoloop(cxstack_ix);
2537 /* diag_listed_as: Can't "last" outside a loop block */
2538 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2543 const char * const label =
2544 PL_op->op_flags & OPf_STACKED
2545 ? SvPV(TOPs,label_len)
2546 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2547 const U32 label_flags =
2548 PL_op->op_flags & OPf_STACKED
2550 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2552 cxix = dopoptolabel(label, label_len, label_flags);
2554 /* diag_listed_as: Label not found for "last %s" */
2555 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2557 SVfARG(PL_op->op_flags & OPf_STACKED
2558 && !SvGMAGICAL(TOPp1s)
2560 : newSVpvn_flags(label,
2562 label_flags | SVs_TEMP)));
2564 if (cxix < cxstack_ix)
2581 S_unwind_loop(aTHX_ "last");
2584 cxstack_ix++; /* temporarily protect top context */
2585 switch (CxTYPE(cx)) {
2586 case CXt_LOOP_LAZYIV:
2587 case CXt_LOOP_LAZYSV:
2589 case CXt_LOOP_PLAIN:
2591 newsp = PL_stack_base + cx->blk_loop.resetsp;
2592 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2596 nextop = cx->blk_sub.retop;
2600 nextop = cx->blk_eval.retop;
2604 nextop = cx->blk_sub.retop;
2607 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2611 PL_stack_sp = newsp;
2615 /* Stack values are safe: */
2617 case CXt_LOOP_LAZYIV:
2618 case CXt_LOOP_PLAIN:
2619 case CXt_LOOP_LAZYSV:
2621 POPLOOP(cx); /* release loop vars ... */
2625 POPSUB(cx,sv); /* release CV and @_ ... */
2628 PL_curpm = newpm; /* ... and pop $1 et al */
2631 PERL_UNUSED_VAR(optype);
2632 PERL_UNUSED_VAR(gimme);
2640 const I32 inner = PL_scopestack_ix;
2642 S_unwind_loop(aTHX_ "next");
2644 /* clear off anything above the scope we're re-entering, but
2645 * save the rest until after a possible continue block */
2647 if (PL_scopestack_ix < inner)
2648 leave_scope(PL_scopestack[PL_scopestack_ix]);
2649 PL_curcop = cx->blk_oldcop;
2651 return (cx)->blk_loop.my_op->op_nextop;
2657 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2660 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2662 if (redo_op->op_type == OP_ENTER) {
2663 /* pop one less context to avoid $x being freed in while (my $x..) */
2665 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2666 redo_op = redo_op->op_next;
2670 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2671 LEAVE_SCOPE(oldsave);
2673 PL_curcop = cx->blk_oldcop;
2679 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2683 static const char* const too_deep = "Target of goto is too deeply nested";
2685 PERL_ARGS_ASSERT_DOFINDLABEL;
2688 Perl_croak(aTHX_ "%s", too_deep);
2689 if (o->op_type == OP_LEAVE ||
2690 o->op_type == OP_SCOPE ||
2691 o->op_type == OP_LEAVELOOP ||
2692 o->op_type == OP_LEAVESUB ||
2693 o->op_type == OP_LEAVETRY)
2695 *ops++ = cUNOPo->op_first;
2697 Perl_croak(aTHX_ "%s", too_deep);
2700 if (o->op_flags & OPf_KIDS) {
2702 /* First try all the kids at this level, since that's likeliest. */
2703 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2704 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2705 STRLEN kid_label_len;
2706 U32 kid_label_flags;
2707 const char *kid_label = CopLABEL_len_flags(kCOP,
2708 &kid_label_len, &kid_label_flags);
2710 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2713 (const U8*)kid_label, kid_label_len,
2714 (const U8*)label, len) == 0)
2716 (const U8*)label, len,
2717 (const U8*)kid_label, kid_label_len) == 0)
2718 : ( len == kid_label_len && ((kid_label == label)
2719 || memEQ(kid_label, label, len)))))
2723 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2724 if (kid == PL_lastgotoprobe)
2726 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2729 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2730 ops[-1]->op_type == OP_DBSTATE)
2735 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2743 PP(pp_goto) /* also pp_dump */
2749 #define GOTO_DEPTH 64
2750 OP *enterops[GOTO_DEPTH];
2751 const char *label = NULL;
2752 STRLEN label_len = 0;
2753 U32 label_flags = 0;
2754 const bool do_dump = (PL_op->op_type == OP_DUMP);
2755 static const char* const must_have_label = "goto must have label";
2757 if (PL_op->op_flags & OPf_STACKED) {
2758 /* goto EXPR or goto &foo */
2760 SV * const sv = POPs;
2763 /* This egregious kludge implements goto &subroutine */
2764 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2767 CV *cv = MUTABLE_CV(SvRV(sv));
2768 AV *arg = GvAV(PL_defgv);
2772 if (!CvROOT(cv) && !CvXSUB(cv)) {
2773 const GV * const gv = CvGV(cv);
2777 /* autoloaded stub? */
2778 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2780 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2782 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2783 if (autogv && (cv = GvCV(autogv)))
2785 tmpstr = sv_newmortal();
2786 gv_efullname3(tmpstr, gv, NULL);
2787 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2789 DIE(aTHX_ "Goto undefined subroutine");
2792 /* First do some returnish stuff. */
2793 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2795 cxix = dopoptosub(cxstack_ix);
2796 if (cxix < cxstack_ix) {
2799 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2805 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2806 if (CxTYPE(cx) == CXt_EVAL) {
2809 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2810 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2812 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2813 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2815 else if (CxMULTICALL(cx))
2818 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2820 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2821 AV* av = cx->blk_sub.argarray;
2823 /* abandon the original @_ if it got reified or if it is
2824 the same as the current @_ */
2825 if (AvREAL(av) || av == arg) {
2829 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2831 else CLEAR_ARGARRAY(av);
2833 /* We donate this refcount later to the callee’s pad. */
2834 SvREFCNT_inc_simple_void(arg);
2835 if (CxTYPE(cx) == CXt_SUB &&
2836 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2837 SvREFCNT_dec(cx->blk_sub.cv);
2838 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2839 LEAVE_SCOPE(oldsave);
2841 /* A destructor called during LEAVE_SCOPE could have undefined
2842 * our precious cv. See bug #99850. */
2843 if (!CvROOT(cv) && !CvXSUB(cv)) {
2844 const GV * const gv = CvGV(cv);
2847 SV * const tmpstr = sv_newmortal();
2848 gv_efullname3(tmpstr, gv, NULL);
2849 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2852 DIE(aTHX_ "Goto undefined subroutine");
2855 /* Now do some callish stuff. */
2857 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2859 OP* const retop = cx->blk_sub.retop;
2862 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2863 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2866 PERL_UNUSED_VAR(newsp);
2867 PERL_UNUSED_VAR(gimme);
2869 /* put GvAV(defgv) back onto stack */
2871 EXTEND(SP, items+1); /* @_ could have been extended. */
2876 bool r = cBOOL(AvREAL(arg));
2877 for (index=0; index<items; index++)
2881 SV ** const svp = av_fetch(arg, index, 0);
2882 sv = svp ? *svp : NULL;
2884 else sv = AvARRAY(arg)[index];
2886 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2887 : sv_2mortal(newSVavdefelem(arg, index, 1));
2892 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2893 /* Restore old @_ */
2894 arg = GvAV(PL_defgv);
2895 GvAV(PL_defgv) = cx->blk_sub.savearray;
2899 /* XS subs don't have a CxSUB, so pop it */
2900 POPBLOCK(cx, PL_curpm);
2901 /* Push a mark for the start of arglist */
2904 (void)(*CvXSUB(cv))(aTHX_ cv);
2910 PADLIST * const padlist = CvPADLIST(cv);
2911 cx->blk_sub.cv = cv;
2912 cx->blk_sub.olddepth = CvDEPTH(cv);
2915 if (CvDEPTH(cv) < 2)
2916 SvREFCNT_inc_simple_void_NN(cv);
2918 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2919 sub_crush_depth(cv);
2920 pad_push(padlist, CvDEPTH(cv));
2922 PL_curcop = cx->blk_oldcop;
2924 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2927 CX_CURPAD_SAVE(cx->blk_sub);
2929 /* cx->blk_sub.argarray has no reference count, so we
2930 need something to hang on to our argument array so
2931 that cx->blk_sub.argarray does not end up pointing
2932 to freed memory as the result of undef *_. So put
2933 it in the callee’s pad, donating our refer-
2936 SvREFCNT_dec(PAD_SVl(0));
2937 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2940 /* GvAV(PL_defgv) might have been modified on scope
2941 exit, so restore it. */
2942 if (arg != GvAV(PL_defgv)) {
2943 AV * const av = GvAV(PL_defgv);
2944 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2948 else SvREFCNT_dec(arg);
2949 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2950 Perl_get_db_sub(aTHX_ NULL, cv);
2952 CV * const gotocv = get_cvs("DB::goto", 0);
2954 PUSHMARK( PL_stack_sp );
2955 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2961 RETURNOP(CvSTART(cv));
2966 label = SvPV_nomg_const(sv, label_len);
2967 label_flags = SvUTF8(sv);
2970 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2971 /* goto LABEL or dump LABEL */
2972 label = cPVOP->op_pv;
2973 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2974 label_len = strlen(label);
2976 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2981 OP *gotoprobe = NULL;
2982 bool leaving_eval = FALSE;
2983 bool in_block = FALSE;
2984 PERL_CONTEXT *last_eval_cx = NULL;
2988 PL_lastgotoprobe = NULL;
2990 for (ix = cxstack_ix; ix >= 0; ix--) {
2992 switch (CxTYPE(cx)) {
2994 leaving_eval = TRUE;
2995 if (!CxTRYBLOCK(cx)) {
2996 gotoprobe = (last_eval_cx ?
2997 last_eval_cx->blk_eval.old_eval_root :
3002 /* else fall through */
3003 case CXt_LOOP_LAZYIV:
3004 case CXt_LOOP_LAZYSV:
3006 case CXt_LOOP_PLAIN:
3009 gotoprobe = cx->blk_oldcop->op_sibling;
3015 gotoprobe = cx->blk_oldcop->op_sibling;
3018 gotoprobe = PL_main_root;
3021 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3022 gotoprobe = CvROOT(cx->blk_sub.cv);
3028 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3031 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3032 CxTYPE(cx), (long) ix);
3033 gotoprobe = PL_main_root;
3037 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3038 enterops, enterops + GOTO_DEPTH);
3041 if (gotoprobe->op_sibling &&
3042 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3043 gotoprobe->op_sibling->op_sibling) {
3044 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3045 label, label_len, label_flags, enterops,
3046 enterops + GOTO_DEPTH);
3051 PL_lastgotoprobe = gotoprobe;
3054 DIE(aTHX_ "Can't find label %"UTF8f,
3055 UTF8fARG(label_flags, label_len, label));
3057 /* if we're leaving an eval, check before we pop any frames
3058 that we're not going to punt, otherwise the error
3061 if (leaving_eval && *enterops && enterops[1]) {
3063 for (i = 1; enterops[i]; i++)
3064 if (enterops[i]->op_type == OP_ENTERITER)
3065 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3068 if (*enterops && enterops[1]) {
3069 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3071 deprecate("\"goto\" to jump into a construct");
3074 /* pop unwanted frames */
3076 if (ix < cxstack_ix) {
3083 oldsave = PL_scopestack[PL_scopestack_ix];
3084 LEAVE_SCOPE(oldsave);
3087 /* push wanted frames */
3089 if (*enterops && enterops[1]) {
3090 OP * const oldop = PL_op;
3091 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3092 for (; enterops[ix]; ix++) {
3093 PL_op = enterops[ix];
3094 /* Eventually we may want to stack the needed arguments
3095 * for each op. For now, we punt on the hard ones. */
3096 if (PL_op->op_type == OP_ENTERITER)
3097 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3098 PL_op->op_ppaddr(aTHX);
3106 if (!retop) retop = PL_main_start;
3108 PL_restartop = retop;
3109 PL_do_undump = TRUE;
3113 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3114 PL_do_undump = FALSE;
3130 anum = 0; (void)POPs;
3136 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3139 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3142 PL_exit_flags |= PERL_EXIT_EXPECTED;
3144 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3145 if (anum || !(PL_minus_c && PL_madskills))
3150 PUSHs(&PL_sv_undef);
3157 S_save_lines(pTHX_ AV *array, SV *sv)
3159 const char *s = SvPVX_const(sv);
3160 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3163 PERL_ARGS_ASSERT_SAVE_LINES;
3165 while (s && s < send) {
3167 SV * const tmpstr = newSV_type(SVt_PVMG);
3169 t = (const char *)memchr(s, '\n', send - s);
3175 sv_setpvn(tmpstr, s, t - s);
3176 av_store(array, line++, tmpstr);
3184 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3186 0 is used as continue inside eval,
3188 3 is used for a die caught by an inner eval - continue inner loop
3190 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3191 establish a local jmpenv to handle exception traps.
3196 S_docatch(pTHX_ OP *o)
3200 OP * const oldop = PL_op;
3204 assert(CATCH_GET == TRUE);
3211 assert(cxstack_ix >= 0);
3212 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3213 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3218 /* die caught by an inner eval - continue inner loop */
3219 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3220 PL_restartjmpenv = NULL;
3221 PL_op = PL_restartop;
3230 assert(0); /* NOTREACHED */
3239 =for apidoc find_runcv
3241 Locate the CV corresponding to the currently executing sub or eval.
3242 If db_seqp is non_null, skip CVs that are in the DB package and populate
3243 *db_seqp with the cop sequence number at the point that the DB:: code was
3244 entered. (This allows debuggers to eval in the scope of the breakpoint
3245 rather than in the scope of the debugger itself.)
3251 Perl_find_runcv(pTHX_ U32 *db_seqp)
3253 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3256 /* If this becomes part of the API, it might need a better name. */
3258 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3266 PL_curcop == &PL_compiling
3268 : PL_curcop->cop_seq;
3270 for (si = PL_curstackinfo; si; si = si->si_prev) {
3272 for (ix = si->si_cxix; ix >= 0; ix--) {
3273 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3275 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3276 cv = cx->blk_sub.cv;
3277 /* skip DB:: code */
3278 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3279 *db_seqp = cx->blk_oldcop->cop_seq;
3282 if (cx->cx_type & CXp_SUB_RE)
3285 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3286 cv = cx->blk_eval.cv;
3289 case FIND_RUNCV_padid_eq:
3291 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3294 case FIND_RUNCV_level_eq:
3295 if (level++ != arg) continue;
3303 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3307 /* Run yyparse() in a setjmp wrapper. Returns:
3308 * 0: yyparse() successful
3309 * 1: yyparse() failed
3313 S_try_yyparse(pTHX_ int gramtype)
3318 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3322 ret = yyparse(gramtype) ? 1 : 0;
3329 assert(0); /* NOTREACHED */
3336 /* Compile a require/do or an eval ''.
3338 * outside is the lexically enclosing CV (if any) that invoked us.
3339 * seq is the current COP scope value.
3340 * hh is the saved hints hash, if any.
3342 * Returns a bool indicating whether the compile was successful; if so,
3343 * PL_eval_start contains the first op of the compiled code; otherwise,
3346 * This function is called from two places: pp_require and pp_entereval.
3347 * These can be distinguished by whether PL_op is entereval.
3351 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3354 OP * const saveop = PL_op;
3355 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3356 COP * const oldcurcop = PL_curcop;
3357 bool in_require = (saveop->op_type == OP_REQUIRE);
3361 PL_in_eval = (in_require
3362 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3364 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3365 ? EVAL_RE_REPARSING : 0)));
3369 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3371 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3372 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3373 cxstack[cxstack_ix].blk_gimme = gimme;
3375 CvOUTSIDE_SEQ(evalcv) = seq;
3376 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3378 /* set up a scratch pad */
3380 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3381 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3385 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3387 /* make sure we compile in the right package */
3389 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3390 SAVEGENERICSV(PL_curstash);
3391 PL_curstash = (HV *)CopSTASH(PL_curcop);
3392 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3393 else SvREFCNT_inc_simple_void(PL_curstash);
3395 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3396 SAVESPTR(PL_beginav);
3397 PL_beginav = newAV();
3398 SAVEFREESV(PL_beginav);
3399 SAVESPTR(PL_unitcheckav);
3400 PL_unitcheckav = newAV();
3401 SAVEFREESV(PL_unitcheckav);
3404 SAVEBOOL(PL_madskills);
3408 ENTER_with_name("evalcomp");
3409 SAVESPTR(PL_compcv);
3412 /* try to compile it */
3414 PL_eval_root = NULL;
3415 PL_curcop = &PL_compiling;
3416 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3417 PL_in_eval |= EVAL_KEEPERR;
3424 hv_clear(GvHV(PL_hintgv));
3427 PL_hints = saveop->op_private & OPpEVAL_COPHH
3428 ? oldcurcop->cop_hints : saveop->op_targ;
3430 /* making 'use re eval' not be in scope when compiling the
3431 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3432 * infinite recursion when S_has_runtime_code() gives a false
3433 * positive: the second time round, HINT_RE_EVAL isn't set so we
3434 * don't bother calling S_has_runtime_code() */
3435 if (PL_in_eval & EVAL_RE_REPARSING)
3436 PL_hints &= ~HINT_RE_EVAL;
3439 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3440 SvREFCNT_dec(GvHV(PL_hintgv));
3441 GvHV(PL_hintgv) = hh;
3444 SAVECOMPILEWARNINGS();
3446 if (PL_dowarn & G_WARN_ALL_ON)
3447 PL_compiling.cop_warnings = pWARN_ALL ;
3448 else if (PL_dowarn & G_WARN_ALL_OFF)
3449 PL_compiling.cop_warnings = pWARN_NONE ;
3451 PL_compiling.cop_warnings = pWARN_STD ;
3454 PL_compiling.cop_warnings =
3455 DUP_WARNINGS(oldcurcop->cop_warnings);
3456 cophh_free(CopHINTHASH_get(&PL_compiling));
3457 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3458 /* The label, if present, is the first entry on the chain. So rather
3459 than writing a blank label in front of it (which involves an
3460 allocation), just use the next entry in the chain. */
3461 PL_compiling.cop_hints_hash
3462 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3463 /* Check the assumption that this removed the label. */
3464 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3467 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3470 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3472 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3473 * so honour CATCH_GET and trap it here if necessary */
3475 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3477 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3478 SV **newsp; /* Used by POPBLOCK. */
3480 I32 optype; /* Used by POPEVAL. */
3486 PERL_UNUSED_VAR(newsp);
3487 PERL_UNUSED_VAR(optype);
3489 /* note that if yystatus == 3, then the EVAL CX block has already
3490 * been popped, and various vars restored */
3492 if (yystatus != 3) {
3494 op_free(PL_eval_root);
3495 PL_eval_root = NULL;
3497 SP = PL_stack_base + POPMARK; /* pop original mark */
3498 POPBLOCK(cx,PL_curpm);
3500 namesv = cx->blk_eval.old_namesv;
3501 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3502 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3508 /* If cx is still NULL, it means that we didn't go in the
3509 * POPEVAL branch. */
3510 cx = &cxstack[cxstack_ix];
3511 assert(CxTYPE(cx) == CXt_EVAL);
3512 namesv = cx->blk_eval.old_namesv;
3514 (void)hv_store(GvHVn(PL_incgv),
3515 SvPVX_const(namesv),
3516 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3518 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3521 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3524 if (!*(SvPV_nolen_const(errsv))) {
3525 sv_setpvs(errsv, "Compilation error");
3528 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3533 LEAVE_with_name("evalcomp");
3535 CopLINE_set(&PL_compiling, 0);
3536 SAVEFREEOP(PL_eval_root);
3537 cv_forget_slab(evalcv);
3539 DEBUG_x(dump_eval());
3541 /* Register with debugger: */
3542 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3543 CV * const cv = get_cvs("DB::postponed", 0);
3547 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3549 call_sv(MUTABLE_SV(cv), G_DISCARD);
3553 if (PL_unitcheckav) {
3554 OP *es = PL_eval_start;
3555 call_list(PL_scopestack_ix, PL_unitcheckav);
3559 /* compiled okay, so do it */
3561 CvDEPTH(evalcv) = 1;
3562 SP = PL_stack_base + POPMARK; /* pop original mark */
3563 PL_op = saveop; /* The caller may need it. */
3564 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3571 S_check_type_and_open(pTHX_ SV *name)
3575 const char *p = SvPV_const(name, len);
3578 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3580 /* checking here captures a reasonable error message when
3581 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3582 * user gets a confusing message about looking for the .pmc file
3583 * rather than for the .pm file.
3584 * This check prevents a \0 in @INC causing problems.
3586 if (!IS_SAFE_PATHNAME(p, len, "require"))
3589 /* we use the value of errno later to see how stat() or open() failed.
3590 * We don't want it set if the stat succeeded but we still failed,
3591 * such as if the name exists, but is a directory */
3594 st_rc = PerlLIO_stat(p, &st);
3596 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3600 #if !defined(PERLIO_IS_STDIO)
3601 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3603 return PerlIO_open(p, PERL_SCRIPT_MODE);
3607 #ifndef PERL_DISABLE_PMC
3609 S_doopen_pm(pTHX_ SV *name)
3612 const char *p = SvPV_const(name, namelen);
3614 PERL_ARGS_ASSERT_DOOPEN_PM;
3616 /* check the name before trying for the .pmc name to avoid the
3617 * warning referring to the .pmc which the user probably doesn't
3618 * know or care about
3620 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3623 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3624 SV *const pmcsv = sv_newmortal();
3627 SvSetSV_nosteal(pmcsv,name);
3628 sv_catpvn(pmcsv, "c", 1);
3630 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3631 return check_type_and_open(pmcsv);
3633 return check_type_and_open(name);
3636 # define doopen_pm(name) check_type_and_open(name)
3637 #endif /* !PERL_DISABLE_PMC */
3639 /* require doesn't search for absolute names, or when the name is
3640 explicity relative the current directory */
3641 PERL_STATIC_INLINE bool
3642 S_path_is_searchable(const char *name)
3644 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3646 if (PERL_FILE_IS_ABSOLUTE(name)
3648 || (*name == '.' && ((name[1] == '/' ||
3649 (name[1] == '.' && name[2] == '/'))
3650 || (name[1] == '\\' ||
3651 ( name[1] == '.' && name[2] == '\\')))
3654 || (*name == '.' && (name[1] == '/' ||
3655 (name[1] == '.' && name[2] == '/')))
3675 int vms_unixname = 0;
3678 const char *tryname = NULL;
3680 const I32 gimme = GIMME_V;
3681 int filter_has_file = 0;
3682 PerlIO *tryrsfp = NULL;
3683 SV *filter_cache = NULL;
3684 SV *filter_state = NULL;
3685 SV *filter_sub = NULL;
3690 bool path_searchable;
3693 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3694 sv = sv_2mortal(new_version(sv));
3695 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3696 upg_version(PL_patchlevel, TRUE);
3697 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3698 if ( vcmp(sv,PL_patchlevel) <= 0 )
3699 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3700 SVfARG(sv_2mortal(vnormal(sv))),
3701 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3705 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3708 SV * const req = SvRV(sv);
3709 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3711 /* get the left hand term */
3712 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3714 first = SvIV(*av_fetch(lav,0,0));
3715 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3716 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3717 || av_tindex(lav) > 1 /* FP with > 3 digits */
3718 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3720 DIE(aTHX_ "Perl %"SVf" required--this is only "
3722 SVfARG(sv_2mortal(vnormal(req))),
3723 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3726 else { /* probably 'use 5.10' or 'use 5.8' */
3730 if (av_tindex(lav)>=1)
3731 second = SvIV(*av_fetch(lav,1,0));
3733 second /= second >= 600 ? 100 : 10;
3734 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3735 (int)first, (int)second);
3736 upg_version(hintsv, TRUE);
3738 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3739 "--this is only %"SVf", stopped",
3740 SVfARG(sv_2mortal(vnormal(req))),
3741 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3742 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3750 name = SvPV_const(sv, len);
3751 if (!(name && len > 0 && *name))
3752 DIE(aTHX_ "Null filename used");
3753 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3754 DIE(aTHX_ "Can't locate %s: %s",
3755 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3756 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3759 TAINT_PROPER("require");
3761 path_searchable = path_is_searchable(name);
3764 /* The key in the %ENV hash is in the syntax of file passed as the argument
3765 * usually this is in UNIX format, but sometimes in VMS format, which
3766 * can result in a module being pulled in more than once.
3767 * To prevent this, the key must be stored in UNIX format if the VMS
3768 * name can be translated to UNIX.
3772 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3774 unixlen = strlen(unixname);
3780 /* if not VMS or VMS name can not be translated to UNIX, pass it
3783 unixname = (char *) name;
3786 if (PL_op->op_type == OP_REQUIRE) {
3787 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3788 unixname, unixlen, 0);
3790 if (*svp != &PL_sv_undef)
3793 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3794 "Compilation failed in require", unixname);
3798 LOADING_FILE_PROBE(unixname);
3800 /* prepare to compile file */
3802 if (!path_searchable) {
3803 /* At this point, name is SvPVX(sv) */
3805 tryrsfp = doopen_pm(sv);
3807 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3808 AV * const ar = GvAVn(PL_incgv);
3815 namesv = newSV_type(SVt_PV);
3816 for (i = 0; i <= AvFILL(ar); i++) {
3817 SV * const dirsv = *av_fetch(ar, i, TRUE);
3825 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3826 && !SvOBJECT(SvRV(loader)))
3828 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3832 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3833 PTR2UV(SvRV(dirsv)), name);
3834 tryname = SvPVX_const(namesv);
3837 if (SvPADTMP(nsv)) {
3838 nsv = sv_newmortal();
3839 SvSetSV_nosteal(nsv,sv);
3842 ENTER_with_name("call_INC");
3850 if (SvGMAGICAL(loader)) {
3851 SV *l = sv_newmortal();
3852 sv_setsv_nomg(l, loader);
3855 if (sv_isobject(loader))
3856 count = call_method("INC", G_ARRAY);
3858 count = call_sv(loader, G_ARRAY);
3868 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3869 && !isGV_with_GP(SvRV(arg))) {
3870 filter_cache = SvRV(arg);
3877 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3881 if (isGV_with_GP(arg)) {
3882 IO * const io = GvIO((const GV *)arg);
3887 tryrsfp = IoIFP(io);
3888 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3889 PerlIO_close(IoOFP(io));
3900 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3902 SvREFCNT_inc_simple_void_NN(filter_sub);
3905 filter_state = SP[i];
3906 SvREFCNT_inc_simple_void(filter_state);
3910 if (!tryrsfp && (filter_cache || filter_sub)) {
3911 tryrsfp = PerlIO_open(BIT_BUCKET,
3917 /* FREETMPS may free our filter_cache */
3918 SvREFCNT_inc_simple_void(filter_cache);
3922 LEAVE_with_name("call_INC");
3924 /* Now re-mortalize it. */
3925 sv_2mortal(filter_cache);
3927 /* Adjust file name if the hook has set an %INC entry.
3928 This needs to happen after the FREETMPS above. */
3929 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3931 tryname = SvPV_nolen_const(*svp);
3938 filter_has_file = 0;
3939 filter_cache = NULL;
3941 SvREFCNT_dec(filter_state);
3942 filter_state = NULL;
3945 SvREFCNT_dec(filter_sub);
3950 if (path_searchable) {
3955 dir = SvPV_nomg_const(dirsv, dirlen);
3961 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3965 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3968 sv_setpv(namesv, unixdir);
3969 sv_catpv(namesv, unixname);
3971 # ifdef __SYMBIAN32__
3972 if (PL_origfilename[0] &&
3973 PL_origfilename[1] == ':' &&
3974 !(dir[0] && dir[1] == ':'))
3975 Perl_sv_setpvf(aTHX_ namesv,
3980 Perl_sv_setpvf(aTHX_ namesv,
3984 /* The equivalent of
3985 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3986 but without the need to parse the format string, or
3987 call strlen on either pointer, and with the correct
3988 allocation up front. */
3990 char *tmp = SvGROW(namesv, dirlen + len + 2);
3992 memcpy(tmp, dir, dirlen);
3995 /* Avoid '<dir>//<file>' */
3996 if (!dirlen || *(tmp-1) != '/') {
4000 /* name came from an SV, so it will have a '\0' at the
4001 end that we can copy as part of this memcpy(). */
4002 memcpy(tmp, name, len + 1);
4004 SvCUR_set(namesv, dirlen + len + 1);
4009 TAINT_PROPER("require");
4010 tryname = SvPVX_const(namesv);
4011 tryrsfp = doopen_pm(namesv);
4013 if (tryname[0] == '.' && tryname[1] == '/') {
4015 while (*++tryname == '/') {}
4019 else if (errno == EMFILE || errno == EACCES) {
4020 /* no point in trying other paths if out of handles;
4021 * on the other hand, if we couldn't open one of the
4022 * files, then going on with the search could lead to
4023 * unexpected results; see perl #113422
4032 saved_errno = errno; /* sv_2mortal can realloc things */
4035 if (PL_op->op_type == OP_REQUIRE) {
4036 if(saved_errno == EMFILE || saved_errno == EACCES) {
4037 /* diag_listed_as: Can't locate %s */
4038 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4040 if (namesv) { /* did we lookup @INC? */
4041 AV * const ar = GvAVn(PL_incgv);
4043 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4044 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4045 for (i = 0; i <= AvFILL(ar); i++) {
4046 sv_catpvs(inc, " ");
4047 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4049 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4050 const char *c, *e = name + len - 3;
4051 sv_catpv(msg, " (you may need to install the ");
4052 for (c = name; c < e; c++) {
4054 sv_catpvn(msg, "::", 2);
4057 sv_catpvn(msg, c, 1);
4060 sv_catpv(msg, " module)");
4062 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4063 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4065 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4066 sv_catpv(msg, " (did you run h2ph?)");
4069 /* diag_listed_as: Can't locate %s */
4071 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4075 DIE(aTHX_ "Can't locate %s", name);
4082 SETERRNO(0, SS_NORMAL);
4084 /* Assume success here to prevent recursive requirement. */
4085 /* name is never assigned to again, so len is still strlen(name) */
4086 /* Check whether a hook in @INC has already filled %INC */
4088 (void)hv_store(GvHVn(PL_incgv),
4089 unixname, unixlen, newSVpv(tryname,0),0);
4091 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4093 (void)hv_store(GvHVn(PL_incgv),
4094 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4097 ENTER_with_name("eval");
4099 SAVECOPFILE_FREE(&PL_compiling);
4100 CopFILE_set(&PL_compiling, tryname);
4101 lex_start(NULL, tryrsfp, 0);
4103 if (filter_sub || filter_cache) {
4104 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4105 than hanging another SV from it. In turn, filter_add() optionally
4106 takes the SV to use as the filter (or creates a new SV if passed
4107 NULL), so simply pass in whatever value filter_cache has. */
4108 SV * const fc = filter_cache ? newSV(0) : NULL;
4110 if (fc) sv_copypv(fc, filter_cache);
4111 datasv = filter_add(S_run_user_filter, fc);
4112 IoLINES(datasv) = filter_has_file;
4113 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4114 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4117 /* switch to eval mode */
4118 PUSHBLOCK(cx, CXt_EVAL, SP);
4120 cx->blk_eval.retop = PL_op->op_next;
4122 SAVECOPLINE(&PL_compiling);
4123 CopLINE_set(&PL_compiling, 0);
4127 /* Store and reset encoding. */
4128 encoding = PL_encoding;
4131 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4132 op = DOCATCH(PL_eval_start);
4134 op = PL_op->op_next;
4136 /* Restore encoding. */
4137 PL_encoding = encoding;
4139 LOADED_FILE_PROBE(unixname);
4144 /* This is a op added to hold the hints hash for
4145 pp_entereval. The hash can be modified by the code
4146 being eval'ed, so we return a copy instead. */
4152 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4162 const I32 gimme = GIMME_V;
4163 const U32 was = PL_breakable_sub_gen;
4164 char tbuf[TYPE_DIGITS(long) + 12];
4165 bool saved_delete = FALSE;
4166 char *tmpbuf = tbuf;
4169 U32 seq, lex_flags = 0;
4170 HV *saved_hh = NULL;
4171 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4173 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4174 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4176 else if (PL_hints & HINT_LOCALIZE_HH || (
4177 PL_op->op_private & OPpEVAL_COPHH
4178 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4180 saved_hh = cop_hints_2hv(PL_curcop, 0);
4181 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4185 /* make sure we've got a plain PV (no overload etc) before testing
4186 * for taint. Making a copy here is probably overkill, but better
4187 * safe than sorry */
4189 const char * const p = SvPV_const(sv, len);
4191 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4192 lex_flags |= LEX_START_COPIED;
4194 if (bytes && SvUTF8(sv))
4195 SvPVbyte_force(sv, len);
4197 else if (bytes && SvUTF8(sv)) {
4198 /* Don't modify someone else's scalar */
4201 (void)sv_2mortal(sv);
4202 SvPVbyte_force(sv,len);
4203 lex_flags |= LEX_START_COPIED;
4206 TAINT_IF(SvTAINTED(sv));
4207 TAINT_PROPER("eval");
4209 ENTER_with_name("eval");
4210 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4211 ? LEX_IGNORE_UTF8_HINTS
4212 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4217 /* switch to eval mode */
4219 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4220 SV * const temp_sv = sv_newmortal();
4221 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4222 (unsigned long)++PL_evalseq,
4223 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4224 tmpbuf = SvPVX(temp_sv);
4225 len = SvCUR(temp_sv);
4228 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4229 SAVECOPFILE_FREE(&PL_compiling);
4230 CopFILE_set(&PL_compiling, tmpbuf+2);
4231 SAVECOPLINE(&PL_compiling);
4232 CopLINE_set(&PL_compiling, 1);
4233 /* special case: an eval '' executed within the DB package gets lexically
4234 * placed in the first non-DB CV rather than the current CV - this
4235 * allows the debugger to execute code, find lexicals etc, in the
4236 * scope of the code being debugged. Passing &seq gets find_runcv
4237 * to do the dirty work for us */
4238 runcv = find_runcv(&seq);
4240 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4242 cx->blk_eval.retop = PL_op->op_next;
4244 /* prepare to compile string */
4246 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4247 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4249 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4250 deleting the eval's FILEGV from the stash before gv_check() runs
4251 (i.e. before run-time proper). To work around the coredump that
4252 ensues, we always turn GvMULTI_on for any globals that were
4253 introduced within evals. See force_ident(). GSAR 96-10-12 */
4254 char *const safestr = savepvn(tmpbuf, len);
4255 SAVEDELETE(PL_defstash, safestr, len);
4256 saved_delete = TRUE;
4261 if (doeval(gimme, runcv, seq, saved_hh)) {
4262 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4263 ? (PERLDB_LINE || PERLDB_SAVESRC)
4264 : PERLDB_SAVESRC_NOSUBS) {
4265 /* Retain the filegv we created. */
4266 } else if (!saved_delete) {
4267 char *const safestr = savepvn(tmpbuf, len);
4268 SAVEDELETE(PL_defstash, safestr, len);
4270 return DOCATCH(PL_eval_start);
4272 /* We have already left the scope set up earlier thanks to the LEAVE
4274 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4275 ? (PERLDB_LINE || PERLDB_SAVESRC)
4276 : PERLDB_SAVESRC_INVALID) {
4277 /* Retain the filegv we created. */
4278 } else if (!saved_delete) {
4279 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4281 return PL_op->op_next;
4293 const U8 save_flags = PL_op -> op_flags;
4301 namesv = cx->blk_eval.old_namesv;
4302 retop = cx->blk_eval.retop;
4303 evalcv = cx->blk_eval.cv;
4306 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4307 gimme, SVs_TEMP, FALSE);
4308 PL_curpm = newpm; /* Don't pop $1 et al till now */
4311 assert(CvDEPTH(evalcv) == 1);
4313 CvDEPTH(evalcv) = 0;
4315 if (optype == OP_REQUIRE &&
4316 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4318 /* Unassume the success we assumed earlier. */
4319 (void)hv_delete(GvHVn(PL_incgv),
4320 SvPVX_const(namesv),
4321 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4323 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4325 /* die_unwind() did LEAVE, or we won't be here */
4328 LEAVE_with_name("eval");
4329 if (!(save_flags & OPf_SPECIAL)) {
4337 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4338 close to the related Perl_create_eval_scope. */
4340 Perl_delete_eval_scope(pTHX)
4351 LEAVE_with_name("eval_scope");
4352 PERL_UNUSED_VAR(newsp);
4353 PERL_UNUSED_VAR(gimme);
4354 PERL_UNUSED_VAR(optype);
4357 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4358 also needed by Perl_fold_constants. */
4360 Perl_create_eval_scope(pTHX_ U32 flags)
4363 const I32 gimme = GIMME_V;
4365 ENTER_with_name("eval_scope");
4368 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4371 PL_in_eval = EVAL_INEVAL;
4372 if (flags & G_KEEPERR)
4373 PL_in_eval |= EVAL_KEEPERR;
4376 if (flags & G_FAKINGEVAL) {
4377 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4385 PERL_CONTEXT * const cx = create_eval_scope(0);
4386 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4387 return DOCATCH(PL_op->op_next);
4402 PERL_UNUSED_VAR(optype);
4405 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4406 SVs_PADTMP|SVs_TEMP, FALSE);
4407 PL_curpm = newpm; /* Don't pop $1 et al till now */
4409 LEAVE_with_name("eval_scope");
4418 const I32 gimme = GIMME_V;
4420 ENTER_with_name("given");
4423 if (PL_op->op_targ) {
4424 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4425 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4426 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4433 PUSHBLOCK(cx, CXt_GIVEN, SP);
4446 PERL_UNUSED_CONTEXT;
4449 assert(CxTYPE(cx) == CXt_GIVEN);
4452 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4453 SVs_PADTMP|SVs_TEMP, FALSE);
4454 PL_curpm = newpm; /* Don't pop $1 et al till now */
4456 LEAVE_with_name("given");
4460 /* Helper routines used by pp_smartmatch */
4462 S_make_matcher(pTHX_ REGEXP *re)
4465 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4467 PERL_ARGS_ASSERT_MAKE_MATCHER;
4469 PM_SETRE(matcher, ReREFCNT_inc(re));
4471 SAVEFREEOP((OP *) matcher);
4472 ENTER_with_name("matcher"); SAVETMPS;
4478 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4483 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4485 PL_op = (OP *) matcher;