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 ^* */
701 case FF_LINEGLOB: /* process @* */
703 const bool oneline = fpc[-1] == FF_LINESNGL;
704 const char *s = item = SvPV_const(sv, len);
705 const char *const send = s + len;
707 item_is_utf8 = DO_UTF8(sv);
718 to_copy = s - item - 1;
732 /* append to_copy bytes from source to PL_formstring.
733 * item_is_utf8 implies source is utf8.
734 * if trans, translate certain characters during the copy */
739 SvCUR_set(PL_formtarget,
740 t - SvPVX_const(PL_formtarget));
742 if (targ_is_utf8 && !item_is_utf8) {
743 source = tmp = bytes_to_utf8(source, &to_copy);
745 if (item_is_utf8 && !targ_is_utf8) {
747 /* Upgrade targ to UTF8, and then we reduce it to
748 a problem we have a simple solution for.
749 Don't need get magic. */
750 sv_utf8_upgrade_nomg(PL_formtarget);
752 /* re-calculate linemark */
753 s = (U8*)SvPVX(PL_formtarget);
754 /* the bytes we initially allocated to append the
755 * whole line may have been gobbled up during the
756 * upgrade, so allocate a whole new line's worth
761 linemark = s - (U8*)SvPVX(PL_formtarget);
763 /* Easy. They agree. */
764 assert (item_is_utf8 == targ_is_utf8);
767 /* @* and ^* are the only things that can exceed
768 * the linemax, so grow by the output size, plus
769 * a whole new form's worth in case of any further
771 grow = linemax + to_copy;
773 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
774 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
776 Copy(source, t, to_copy, char);
778 /* blank out ~ or control chars, depending on trans.
779 * works on bytes not chars, so relies on not
780 * matching utf8 continuation bytes */
782 U8 *send = s + to_copy;
785 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
792 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
798 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
800 #if defined(USE_LONG_DOUBLE)
802 ((arg & FORM_NUM_POINT) ?
803 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
806 ((arg & FORM_NUM_POINT) ?
807 "%#0*.*f" : "%0*.*f");
811 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
813 #if defined(USE_LONG_DOUBLE)
815 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
818 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
821 /* If the field is marked with ^ and the value is undefined,
823 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
831 /* overflow evidence */
832 if (num_overflow(value, fieldsize, arg)) {
838 /* Formats aren't yet marked for locales, so assume "yes". */
840 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
841 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
842 /* we generate fmt ourselves so it is safe */
843 GCC_DIAG_IGNORE(-Wformat-nonliteral);
844 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
846 RESTORE_LC_NUMERIC();
851 case FF_NEWLINE: /* delete trailing spaces, then append \n */
853 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
858 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
861 if (arg) { /* repeat until fields exhausted? */
867 t = SvPVX(PL_formtarget) + linemark;
872 case FF_MORE: /* replace long end of string with '...' */
874 const char *s = chophere;
875 const char *send = item + len;
877 while (isSPACE(*s) && (s < send))
882 arg = fieldsize - itemsize;
889 if (strnEQ(s1," ",3)) {
890 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
900 case FF_END: /* tidy up, then return */
902 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
904 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
906 SvUTF8_on(PL_formtarget);
907 FmLINES(PL_formtarget) += lines;
909 if (fpc[-1] == FF_BLANK)
910 RETURNOP(cLISTOP->op_first);
922 if (PL_stack_base + *PL_markstack_ptr == SP) {
924 if (GIMME_V == G_SCALAR)
926 RETURNOP(PL_op->op_next->op_next);
928 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
929 Perl_pp_pushmark(aTHX); /* push dst */
930 Perl_pp_pushmark(aTHX); /* push src */
931 ENTER_with_name("grep"); /* enter outer scope */
934 if (PL_op->op_private & OPpGREP_LEX)
935 SAVESPTR(PAD_SVl(PL_op->op_targ));
938 ENTER_with_name("grep_item"); /* enter inner scope */
941 src = PL_stack_base[*PL_markstack_ptr];
943 assert(!IS_PADGV(src));
944 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
948 if (PL_op->op_private & OPpGREP_LEX)
949 PAD_SVl(PL_op->op_targ) = src;
954 if (PL_op->op_type == OP_MAPSTART)
955 Perl_pp_pushmark(aTHX); /* push top */
956 return ((LOGOP*)PL_op->op_next)->op_other;
962 const I32 gimme = GIMME_V;
963 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
969 /* first, move source pointer to the next item in the source list */
970 ++PL_markstack_ptr[-1];
972 /* if there are new items, push them into the destination list */
973 if (items && gimme != G_VOID) {
974 /* might need to make room back there first */
975 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
976 /* XXX this implementation is very pessimal because the stack
977 * is repeatedly extended for every set of items. Is possible
978 * to do this without any stack extension or copying at all
979 * by maintaining a separate list over which the map iterates
980 * (like foreach does). --gsar */
982 /* everything in the stack after the destination list moves
983 * towards the end the stack by the amount of room needed */
984 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
986 /* items to shift up (accounting for the moved source pointer) */
987 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
989 /* This optimization is by Ben Tilly and it does
990 * things differently from what Sarathy (gsar)
991 * is describing. The downside of this optimization is
992 * that leaves "holes" (uninitialized and hopefully unused areas)
993 * to the Perl stack, but on the other hand this
994 * shouldn't be a problem. If Sarathy's idea gets
995 * implemented, this optimization should become
996 * irrelevant. --jhi */
998 shift = count; /* Avoid shifting too often --Ben Tilly */
1002 dst = (SP += shift);
1003 PL_markstack_ptr[-1] += shift;
1004 *PL_markstack_ptr += shift;
1008 /* copy the new items down to the destination list */
1009 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1010 if (gimme == G_ARRAY) {
1011 /* add returned items to the collection (making mortal copies
1012 * if necessary), then clear the current temps stack frame
1013 * *except* for those items. We do this splicing the items
1014 * into the start of the tmps frame (so some items may be on
1015 * the tmps stack twice), then moving PL_tmps_floor above
1016 * them, then freeing the frame. That way, the only tmps that
1017 * accumulate over iterations are the return values for map.
1018 * We have to do to this way so that everything gets correctly
1019 * freed if we die during the map.
1023 /* make space for the slice */
1024 EXTEND_MORTAL(items);
1025 tmpsbase = PL_tmps_floor + 1;
1026 Move(PL_tmps_stack + tmpsbase,
1027 PL_tmps_stack + tmpsbase + items,
1028 PL_tmps_ix - PL_tmps_floor,
1030 PL_tmps_ix += items;
1035 sv = sv_mortalcopy(sv);
1037 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1039 /* clear the stack frame except for the items */
1040 PL_tmps_floor += items;
1042 /* FREETMPS may have cleared the TEMP flag on some of the items */
1045 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1048 /* scalar context: we don't care about which values map returns
1049 * (we use undef here). And so we certainly don't want to do mortal
1050 * copies of meaningless values. */
1051 while (items-- > 0) {
1053 *dst-- = &PL_sv_undef;
1061 LEAVE_with_name("grep_item"); /* exit inner scope */
1064 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1066 (void)POPMARK; /* pop top */
1067 LEAVE_with_name("grep"); /* exit outer scope */
1068 (void)POPMARK; /* pop src */
1069 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1070 (void)POPMARK; /* pop dst */
1071 SP = PL_stack_base + POPMARK; /* pop original mark */
1072 if (gimme == G_SCALAR) {
1073 if (PL_op->op_private & OPpGREP_LEX) {
1074 SV* sv = sv_newmortal();
1075 sv_setiv(sv, items);
1083 else if (gimme == G_ARRAY)
1090 ENTER_with_name("grep_item"); /* enter inner scope */
1093 /* set $_ to the new source item */
1094 src = PL_stack_base[PL_markstack_ptr[-1]];
1095 if (SvPADTMP(src)) {
1096 assert(!IS_PADGV(src));
1097 src = sv_mortalcopy(src);
1100 if (PL_op->op_private & OPpGREP_LEX)
1101 PAD_SVl(PL_op->op_targ) = src;
1105 RETURNOP(cLOGOP->op_other);
1114 if (GIMME == G_ARRAY)
1116 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1117 return cLOGOP->op_other;
1127 if (GIMME == G_ARRAY) {
1128 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1132 SV * const targ = PAD_SV(PL_op->op_targ);
1135 if (PL_op->op_private & OPpFLIP_LINENUM) {
1136 if (GvIO(PL_last_in_gv)) {
1137 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1140 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1142 flip = SvIV(sv) == SvIV(GvSV(gv));
1148 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1149 if (PL_op->op_flags & OPf_SPECIAL) {
1157 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1160 sv_setpvs(TARG, "");
1166 /* This code tries to decide if "$left .. $right" should use the
1167 magical string increment, or if the range is numeric (we make
1168 an exception for .."0" [#18165]). AMS 20021031. */
1170 #define RANGE_IS_NUMERIC(left,right) ( \
1171 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1172 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1173 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1174 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1175 && (!SvOK(right) || looks_like_number(right))))
1181 if (GIMME == G_ARRAY) {
1187 if (RANGE_IS_NUMERIC(left,right)) {
1189 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1190 (SvOK(right) && (SvIOK(right)
1191 ? SvIsUV(right) && SvUV(right) > IV_MAX
1192 : SvNV_nomg(right) > IV_MAX)))
1193 DIE(aTHX_ "Range iterator outside integer range");
1194 i = SvIV_nomg(left);
1195 j = SvIV_nomg(right);
1197 /* Dance carefully around signed max. */
1198 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1201 /* The wraparound of signed integers is undefined
1202 * behavior, but here we aim for count >=1, and
1203 * negative count is just wrong. */
1208 Perl_croak(aTHX_ "Out of memory during list extend");
1215 SV * const sv = sv_2mortal(newSViv(i++));
1221 const char * const lpv = SvPV_nomg_const(left, llen);
1222 const char * const tmps = SvPV_nomg_const(right, len);
1224 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1225 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1227 if (strEQ(SvPVX_const(sv),tmps))
1229 sv = sv_2mortal(newSVsv(sv));
1236 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1240 if (PL_op->op_private & OPpFLIP_LINENUM) {
1241 if (GvIO(PL_last_in_gv)) {
1242 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1245 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1246 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1254 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1255 sv_catpvs(targ, "E0");
1265 static const char * const context_name[] = {
1267 NULL, /* CXt_WHEN never actually needs "block" */
1268 NULL, /* CXt_BLOCK never actually needs "block" */
1269 NULL, /* CXt_GIVEN never actually needs "block" */
1270 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1271 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1272 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1273 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1281 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1286 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1288 for (i = cxstack_ix; i >= 0; i--) {
1289 const PERL_CONTEXT * const cx = &cxstack[i];
1290 switch (CxTYPE(cx)) {
1296 /* diag_listed_as: Exiting subroutine via %s */
1297 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1298 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1299 if (CxTYPE(cx) == CXt_NULL)
1302 case CXt_LOOP_LAZYIV:
1303 case CXt_LOOP_LAZYSV:
1305 case CXt_LOOP_PLAIN:
1307 STRLEN cx_label_len = 0;
1308 U32 cx_label_flags = 0;
1309 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1311 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1314 (const U8*)cx_label, cx_label_len,
1315 (const U8*)label, len) == 0)
1317 (const U8*)label, len,
1318 (const U8*)cx_label, cx_label_len) == 0)
1319 : (len == cx_label_len && ((cx_label == label)
1320 || memEQ(cx_label, label, len))) )) {
1321 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1322 (long)i, cx_label));
1325 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1336 Perl_dowantarray(pTHX)
1339 const I32 gimme = block_gimme();
1340 return (gimme == G_VOID) ? G_SCALAR : gimme;
1344 Perl_block_gimme(pTHX)
1347 const I32 cxix = dopoptosub(cxstack_ix);
1351 switch (cxstack[cxix].blk_gimme) {
1359 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1361 NOT_REACHED; /* NOTREACHED */
1365 Perl_is_lvalue_sub(pTHX)
1368 const I32 cxix = dopoptosub(cxstack_ix);
1369 assert(cxix >= 0); /* We should only be called from inside subs */
1371 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1372 return CxLVAL(cxstack + cxix);
1377 /* only used by PUSHSUB */
1379 Perl_was_lvalue_sub(pTHX)
1382 const I32 cxix = dopoptosub(cxstack_ix-1);
1383 assert(cxix >= 0); /* We should only be called from inside subs */
1385 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1386 return CxLVAL(cxstack + cxix);
1392 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1397 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1399 PERL_UNUSED_CONTEXT;
1402 for (i = startingblock; i >= 0; i--) {
1403 const PERL_CONTEXT * const cx = &cxstk[i];
1404 switch (CxTYPE(cx)) {
1408 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1409 * twice; the first for the normal foo() call, and the second
1410 * for a faked up re-entry into the sub to execute the
1411 * code block. Hide this faked entry from the world. */
1412 if (cx->cx_type & CXp_SUB_RE_FAKE)
1417 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1425 S_dopoptoeval(pTHX_ I32 startingblock)
1429 for (i = startingblock; i >= 0; i--) {
1430 const PERL_CONTEXT *cx = &cxstack[i];
1431 switch (CxTYPE(cx)) {
1435 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1443 S_dopoptoloop(pTHX_ I32 startingblock)
1447 for (i = startingblock; i >= 0; i--) {
1448 const PERL_CONTEXT * const cx = &cxstack[i];
1449 switch (CxTYPE(cx)) {
1455 /* diag_listed_as: Exiting subroutine via %s */
1456 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1457 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1458 if ((CxTYPE(cx)) == CXt_NULL)
1461 case CXt_LOOP_LAZYIV:
1462 case CXt_LOOP_LAZYSV:
1464 case CXt_LOOP_PLAIN:
1465 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1473 S_dopoptogiven(pTHX_ I32 startingblock)
1477 for (i = startingblock; i >= 0; i--) {
1478 const PERL_CONTEXT *cx = &cxstack[i];
1479 switch (CxTYPE(cx)) {
1483 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1485 case CXt_LOOP_PLAIN:
1486 assert(!CxFOREACHDEF(cx));
1488 case CXt_LOOP_LAZYIV:
1489 case CXt_LOOP_LAZYSV:
1491 if (CxFOREACHDEF(cx)) {
1492 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1501 S_dopoptowhen(pTHX_ I32 startingblock)
1505 for (i = startingblock; i >= 0; i--) {
1506 const PERL_CONTEXT *cx = &cxstack[i];
1507 switch (CxTYPE(cx)) {
1511 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1519 Perl_dounwind(pTHX_ I32 cxix)
1524 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1527 while (cxstack_ix > cxix) {
1529 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1530 DEBUG_CX("UNWIND"); \
1531 /* Note: we don't need to restore the base context info till the end. */
1532 switch (CxTYPE(cx)) {
1535 continue; /* not break */
1543 case CXt_LOOP_LAZYIV:
1544 case CXt_LOOP_LAZYSV:
1546 case CXt_LOOP_PLAIN:
1557 PERL_UNUSED_VAR(optype);
1561 Perl_qerror(pTHX_ SV *err)
1565 PERL_ARGS_ASSERT_QERROR;
1568 if (PL_in_eval & EVAL_KEEPERR) {
1569 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1573 sv_catsv(ERRSV, err);
1576 sv_catsv(PL_errors, err);
1578 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1580 ++PL_parser->error_count;
1584 Perl_die_unwind(pTHX_ SV *msv)
1587 SV *exceptsv = sv_mortalcopy(msv);
1588 U8 in_eval = PL_in_eval;
1589 PERL_ARGS_ASSERT_DIE_UNWIND;
1596 * Historically, perl used to set ERRSV ($@) early in the die
1597 * process and rely on it not getting clobbered during unwinding.
1598 * That sucked, because it was liable to get clobbered, so the
1599 * setting of ERRSV used to emit the exception from eval{} has
1600 * been moved to much later, after unwinding (see just before
1601 * JMPENV_JUMP below). However, some modules were relying on the
1602 * early setting, by examining $@ during unwinding to use it as
1603 * a flag indicating whether the current unwinding was caused by
1604 * an exception. It was never a reliable flag for that purpose,
1605 * being totally open to false positives even without actual
1606 * clobberage, but was useful enough for production code to
1607 * semantically rely on it.
1609 * We'd like to have a proper introspective interface that
1610 * explicitly describes the reason for whatever unwinding
1611 * operations are currently in progress, so that those modules
1612 * work reliably and $@ isn't further overloaded. But we don't
1613 * have one yet. In its absence, as a stopgap measure, ERRSV is
1614 * now *additionally* set here, before unwinding, to serve as the
1615 * (unreliable) flag that it used to.
1617 * This behaviour is temporary, and should be removed when a
1618 * proper way to detect exceptional unwinding has been developed.
1619 * As of 2010-12, the authors of modules relying on the hack
1620 * are aware of the issue, because the modules failed on
1621 * perls 5.13.{1..7} which had late setting of $@ without this
1622 * early-setting hack.
1624 if (!(in_eval & EVAL_KEEPERR)) {
1625 SvTEMP_off(exceptsv);
1626 sv_setsv(ERRSV, exceptsv);
1629 if (in_eval & EVAL_KEEPERR) {
1630 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1634 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1635 && PL_curstackinfo->si_prev)
1647 JMPENV *restartjmpenv;
1650 if (cxix < cxstack_ix)
1653 POPBLOCK(cx,PL_curpm);
1654 if (CxTYPE(cx) != CXt_EVAL) {
1656 const char* message = SvPVx_const(exceptsv, msglen);
1657 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1658 PerlIO_write(Perl_error_log, message, msglen);
1662 namesv = cx->blk_eval.old_namesv;
1663 oldcop = cx->blk_oldcop;
1664 restartjmpenv = cx->blk_eval.cur_top_env;
1665 restartop = cx->blk_eval.retop;
1667 if (gimme == G_SCALAR)
1668 *++newsp = &PL_sv_undef;
1669 PL_stack_sp = newsp;
1673 /* LEAVE could clobber PL_curcop (see save_re_context())
1674 * XXX it might be better to find a way to avoid messing with
1675 * PL_curcop in save_re_context() instead, but this is a more
1676 * minimal fix --GSAR */
1679 if (optype == OP_REQUIRE) {
1680 (void)hv_store(GvHVn(PL_incgv),
1681 SvPVX_const(namesv),
1682 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1684 /* note that unlike pp_entereval, pp_require isn't
1685 * supposed to trap errors. So now that we've popped the
1686 * EVAL that pp_require pushed, and processed the error
1687 * message, rethrow the error */
1688 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1689 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1692 if (!(in_eval & EVAL_KEEPERR))
1693 sv_setsv(ERRSV, exceptsv);
1694 PL_restartjmpenv = restartjmpenv;
1695 PL_restartop = restartop;
1697 assert(0); /* NOTREACHED */
1701 write_to_stderr(exceptsv);
1703 assert(0); /* NOTREACHED */
1708 dVAR; dSP; dPOPTOPssrl;
1709 if (SvTRUE(left) != SvTRUE(right))
1717 =head1 CV Manipulation Functions
1719 =for apidoc caller_cx
1721 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1722 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1723 information returned to Perl by C<caller>. Note that XSUBs don't get a
1724 stack frame, so C<caller_cx(0, NULL)> will return information for the
1725 immediately-surrounding Perl code.
1727 This function skips over the automatic calls to C<&DB::sub> made on the
1728 behalf of the debugger. If the stack frame requested was a sub called by
1729 C<DB::sub>, the return value will be the frame for the call to
1730 C<DB::sub>, since that has the correct line number/etc. for the call
1731 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1732 frame for the sub call itself.
1737 const PERL_CONTEXT *
1738 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1740 I32 cxix = dopoptosub(cxstack_ix);
1741 const PERL_CONTEXT *cx;
1742 const PERL_CONTEXT *ccstack = cxstack;
1743 const PERL_SI *top_si = PL_curstackinfo;
1746 /* we may be in a higher stacklevel, so dig down deeper */
1747 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1748 top_si = top_si->si_prev;
1749 ccstack = top_si->si_cxstack;
1750 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1754 /* caller() should not report the automatic calls to &DB::sub */
1755 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1756 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1760 cxix = dopoptosub_at(ccstack, cxix - 1);
1763 cx = &ccstack[cxix];
1764 if (dbcxp) *dbcxp = cx;
1766 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1767 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1768 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1769 field below is defined for any cx. */
1770 /* caller() should not report the automatic calls to &DB::sub */
1771 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1772 cx = &ccstack[dbcxix];
1782 const PERL_CONTEXT *cx;
1783 const PERL_CONTEXT *dbcx;
1785 const HEK *stash_hek;
1787 bool has_arg = MAXARG && TOPs;
1796 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1798 if (GIMME != G_ARRAY) {
1806 assert(CopSTASH(cx->blk_oldcop));
1807 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1808 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1810 if (GIMME != G_ARRAY) {
1813 PUSHs(&PL_sv_undef);
1816 sv_sethek(TARG, stash_hek);
1825 PUSHs(&PL_sv_undef);
1828 sv_sethek(TARG, stash_hek);
1831 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1832 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1833 cx->blk_sub.retop, TRUE);
1835 lcop = cx->blk_oldcop;
1836 mPUSHi((I32)CopLINE(lcop));
1839 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1840 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1841 /* So is ccstack[dbcxix]. */
1842 if (cvgv && isGV(cvgv)) {
1843 SV * const sv = newSV(0);
1844 gv_efullname3(sv, cvgv, NULL);
1846 PUSHs(boolSV(CxHASARGS(cx)));
1849 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1850 PUSHs(boolSV(CxHASARGS(cx)));
1854 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1857 gimme = (I32)cx->blk_gimme;
1858 if (gimme == G_VOID)
1859 PUSHs(&PL_sv_undef);
1861 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1862 if (CxTYPE(cx) == CXt_EVAL) {
1864 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1865 SV *cur_text = cx->blk_eval.cur_text;
1866 if (SvCUR(cur_text) >= 2) {
1867 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1868 SvUTF8(cur_text)|SVs_TEMP));
1871 /* I think this is will always be "", but be sure */
1872 PUSHs(sv_2mortal(newSVsv(cur_text)));
1878 else if (cx->blk_eval.old_namesv) {
1879 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1882 /* eval BLOCK (try blocks have old_namesv == 0) */
1884 PUSHs(&PL_sv_undef);
1885 PUSHs(&PL_sv_undef);
1889 PUSHs(&PL_sv_undef);
1890 PUSHs(&PL_sv_undef);
1892 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1893 && CopSTASH_eq(PL_curcop, PL_debstash))
1895 AV * const ary = cx->blk_sub.argarray;
1896 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1898 Perl_init_dbargs(aTHX);
1900 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1901 av_extend(PL_dbargs, AvFILLp(ary) + off);
1902 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1903 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1905 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1908 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1910 if (old_warnings == pWARN_NONE)
1911 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1912 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1913 mask = &PL_sv_undef ;
1914 else if (old_warnings == pWARN_ALL ||
1915 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1916 /* Get the bit mask for $warnings::Bits{all}, because
1917 * it could have been extended by warnings::register */
1919 HV * const bits = get_hv("warnings::Bits", 0);
1920 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1921 mask = newSVsv(*bits_all);
1924 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1928 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1932 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1933 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1944 if (MAXARG < 1 || (!TOPs && !POPs))
1945 tmps = NULL, len = 0;
1947 tmps = SvPVx_const(POPs, len);
1948 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1953 /* like pp_nextstate, but used instead when the debugger is active */
1958 PL_curcop = (COP*)PL_op;
1959 TAINT_NOT; /* Each statement is presumed innocent */
1960 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1965 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1966 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1970 const I32 gimme = G_ARRAY;
1972 GV * const gv = PL_DBgv;
1975 if (gv && isGV_with_GP(gv))
1978 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1979 DIE(aTHX_ "No DB::DB routine defined");
1981 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1982 /* don't do recursive DB::DB call */
1996 (void)(*CvXSUB(cv))(aTHX_ cv);
2002 PUSHBLOCK(cx, CXt_SUB, SP);
2004 cx->blk_sub.retop = PL_op->op_next;
2006 if (CvDEPTH(cv) >= 2) {
2007 PERL_STACK_OVERFLOW_CHECK();
2008 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2011 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2012 RETURNOP(CvSTART(cv));
2019 /* SVs on the stack that have any of the flags passed in are left as is.
2020 Other SVs are protected via the mortals stack if lvalue is true, and
2021 copied otherwise. */
2024 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2025 U32 flags, bool lvalue)
2028 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2030 if (flags & SVs_PADTMP) {
2031 flags &= ~SVs_PADTMP;
2034 if (gimme == G_SCALAR) {
2036 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2039 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2040 : sv_mortalcopy(*SP);
2042 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2045 *++MARK = &PL_sv_undef;
2049 else if (gimme == G_ARRAY) {
2050 /* in case LEAVE wipes old return values */
2051 while (++MARK <= SP) {
2052 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2056 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2057 : sv_mortalcopy(*MARK);
2058 TAINT_NOT; /* Each item is independent */
2061 /* When this function was called with MARK == newsp, we reach this
2062 * point with SP == newsp. */
2072 I32 gimme = GIMME_V;
2074 ENTER_with_name("block");
2077 PUSHBLOCK(cx, CXt_BLOCK, SP);
2090 if (PL_op->op_flags & OPf_SPECIAL) {
2091 cx = &cxstack[cxstack_ix];
2092 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2097 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2100 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2101 PL_op->op_private & OPpLVALUE);
2102 PL_curpm = newpm; /* Don't pop $1 et al till now */
2104 LEAVE_with_name("block");
2113 const I32 gimme = GIMME_V;
2114 void *itervar; /* location of the iteration variable */
2115 U8 cxtype = CXt_LOOP_FOR;
2117 ENTER_with_name("loop1");
2120 if (PL_op->op_targ) { /* "my" variable */
2121 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2122 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2123 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2124 SVs_PADSTALE, SVs_PADSTALE);
2126 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2128 itervar = PL_comppad;
2130 itervar = &PAD_SVl(PL_op->op_targ);
2133 else { /* symbol table variable */
2134 GV * const gv = MUTABLE_GV(POPs);
2135 SV** svp = &GvSV(gv);
2136 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2138 itervar = (void *)gv;
2141 if (PL_op->op_private & OPpITER_DEF)
2142 cxtype |= CXp_FOR_DEF;
2144 ENTER_with_name("loop2");
2146 PUSHBLOCK(cx, cxtype, SP);
2147 PUSHLOOP_FOR(cx, itervar, MARK);
2148 if (PL_op->op_flags & OPf_STACKED) {
2149 SV *maybe_ary = POPs;
2150 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2152 SV * const right = maybe_ary;
2155 if (RANGE_IS_NUMERIC(sv,right)) {
2156 cx->cx_type &= ~CXTYPEMASK;
2157 cx->cx_type |= CXt_LOOP_LAZYIV;
2158 /* Make sure that no-one re-orders cop.h and breaks our
2160 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2161 #ifdef NV_PRESERVES_UV
2162 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2163 (SvNV_nomg(sv) > (NV)IV_MAX)))
2165 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2166 (SvNV_nomg(right) < (NV)IV_MIN))))
2168 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2170 ((SvNV_nomg(sv) > 0) &&
2171 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2172 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2174 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2176 ((SvNV_nomg(right) > 0) &&
2177 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2178 (SvNV_nomg(right) > (NV)UV_MAX))
2181 DIE(aTHX_ "Range iterator outside integer range");
2182 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2183 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2185 /* for correct -Dstv display */
2186 cx->blk_oldsp = sp - PL_stack_base;
2190 cx->cx_type &= ~CXTYPEMASK;
2191 cx->cx_type |= CXt_LOOP_LAZYSV;
2192 /* Make sure that no-one re-orders cop.h and breaks our
2194 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2195 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2196 cx->blk_loop.state_u.lazysv.end = right;
2197 SvREFCNT_inc(right);
2198 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2199 /* This will do the upgrade to SVt_PV, and warn if the value
2200 is uninitialised. */
2201 (void) SvPV_nolen_const(right);
2202 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2203 to replace !SvOK() with a pointer to "". */
2205 SvREFCNT_dec(right);
2206 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2210 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2211 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2212 SvREFCNT_inc(maybe_ary);
2213 cx->blk_loop.state_u.ary.ix =
2214 (PL_op->op_private & OPpITER_REVERSED) ?
2215 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2219 else { /* iterating over items on the stack */
2220 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2221 if (PL_op->op_private & OPpITER_REVERSED) {
2222 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2225 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2236 const I32 gimme = GIMME_V;
2238 ENTER_with_name("loop1");
2240 ENTER_with_name("loop2");
2242 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2243 PUSHLOOP_PLAIN(cx, SP);
2258 assert(CxTYPE_is_LOOP(cx));
2260 newsp = PL_stack_base + cx->blk_loop.resetsp;
2263 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2264 PL_op->op_private & OPpLVALUE);
2267 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2268 PL_curpm = newpm; /* ... and pop $1 et al */
2270 LEAVE_with_name("loop2");
2271 LEAVE_with_name("loop1");
2277 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2278 PERL_CONTEXT *cx, PMOP *newpm)
2280 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2281 if (gimme == G_SCALAR) {
2282 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2284 const char *what = NULL;
2286 assert(MARK+1 == SP);
2287 if ((SvPADTMP(TOPs) ||
2288 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2291 !SvSMAGICAL(TOPs)) {
2293 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2294 : "a readonly value" : "a temporary";
2299 /* sub:lvalue{} will take us here. */
2308 "Can't return %s from lvalue subroutine", what
2313 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2314 if (!SvPADTMP(*SP)) {
2315 *++newsp = SvREFCNT_inc(*SP);
2320 /* FREETMPS could clobber it */
2321 SV *sv = SvREFCNT_inc(*SP);
2323 *++newsp = sv_mortalcopy(sv);
2330 ? sv_mortalcopy(*SP)
2332 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2337 *++newsp = &PL_sv_undef;
2339 if (CxLVAL(cx) & OPpDEREF) {
2342 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2346 else if (gimme == G_ARRAY) {
2347 assert (!(CxLVAL(cx) & OPpDEREF));
2348 if (ref || !CxLVAL(cx))
2349 while (++MARK <= SP)
2351 SvFLAGS(*MARK) & SVs_PADTMP
2352 ? sv_mortalcopy(*MARK)
2355 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2356 else while (++MARK <= SP) {
2357 if (*MARK != &PL_sv_undef
2359 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2364 /* Might be flattened array after $#array = */
2371 /* diag_listed_as: Can't return %s from lvalue subroutine */
2373 "Can't return a %s from lvalue subroutine",
2374 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2380 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2383 PL_stack_sp = newsp;
2390 bool popsub2 = FALSE;
2391 bool clear_errsv = FALSE;
2401 const I32 cxix = dopoptosub(cxstack_ix);
2404 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2405 * sort block, which is a CXt_NULL
2408 PL_stack_base[1] = *PL_stack_sp;
2409 PL_stack_sp = PL_stack_base + 1;
2413 DIE(aTHX_ "Can't return outside a subroutine");
2415 if (cxix < cxstack_ix)
2418 if (CxMULTICALL(&cxstack[cxix])) {
2419 gimme = cxstack[cxix].blk_gimme;
2420 if (gimme == G_VOID)
2421 PL_stack_sp = PL_stack_base;
2422 else if (gimme == G_SCALAR) {
2423 PL_stack_base[1] = *PL_stack_sp;
2424 PL_stack_sp = PL_stack_base + 1;
2430 switch (CxTYPE(cx)) {
2433 lval = !!CvLVALUE(cx->blk_sub.cv);
2434 retop = cx->blk_sub.retop;
2435 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2438 if (!(PL_in_eval & EVAL_KEEPERR))
2441 namesv = cx->blk_eval.old_namesv;
2442 retop = cx->blk_eval.retop;
2445 if (optype == OP_REQUIRE &&
2446 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2448 /* Unassume the success we assumed earlier. */
2449 (void)hv_delete(GvHVn(PL_incgv),
2450 SvPVX_const(namesv),
2451 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2453 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2457 retop = cx->blk_sub.retop;
2461 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2465 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2467 if (gimme == G_SCALAR) {
2470 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2471 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2472 && !SvMAGICAL(TOPs)) {
2473 *++newsp = SvREFCNT_inc(*SP);
2478 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2480 *++newsp = sv_mortalcopy(sv);
2484 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2485 && !SvMAGICAL(*SP)) {
2489 *++newsp = sv_mortalcopy(*SP);
2492 *++newsp = sv_mortalcopy(*SP);
2495 *++newsp = &PL_sv_undef;
2497 else if (gimme == G_ARRAY) {
2498 while (++MARK <= SP) {
2499 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2500 && !SvGMAGICAL(*MARK)
2501 ? *MARK : sv_mortalcopy(*MARK);
2502 TAINT_NOT; /* Each item is independent */
2505 PL_stack_sp = newsp;
2509 /* Stack values are safe: */
2512 POPSUB(cx,sv); /* release CV and @_ ... */
2516 PL_curpm = newpm; /* ... and pop $1 et al */
2525 /* This duplicates parts of pp_leavesub, so that it can share code with
2536 if (CxMULTICALL(&cxstack[cxstack_ix]))
2540 cxstack_ix++; /* temporarily protect top context */
2544 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2547 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2549 PL_curpm = newpm; /* ... and pop $1 et al */
2552 return cx->blk_sub.retop;
2556 S_unwind_loop(pTHX_ const char * const opname)
2560 if (PL_op->op_flags & OPf_SPECIAL) {
2561 cxix = dopoptoloop(cxstack_ix);
2563 /* diag_listed_as: Can't "last" outside a loop block */
2564 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2569 const char * const label =
2570 PL_op->op_flags & OPf_STACKED
2571 ? SvPV(TOPs,label_len)
2572 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2573 const U32 label_flags =
2574 PL_op->op_flags & OPf_STACKED
2576 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2578 cxix = dopoptolabel(label, label_len, label_flags);
2580 /* diag_listed_as: Label not found for "last %s" */
2581 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2583 SVfARG(PL_op->op_flags & OPf_STACKED
2584 && !SvGMAGICAL(TOPp1s)
2586 : newSVpvn_flags(label,
2588 label_flags | SVs_TEMP)));
2590 if (cxix < cxstack_ix)
2607 S_unwind_loop(aTHX_ "last");
2610 cxstack_ix++; /* temporarily protect top context */
2611 switch (CxTYPE(cx)) {
2612 case CXt_LOOP_LAZYIV:
2613 case CXt_LOOP_LAZYSV:
2615 case CXt_LOOP_PLAIN:
2617 newsp = PL_stack_base + cx->blk_loop.resetsp;
2618 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2622 nextop = cx->blk_sub.retop;
2626 nextop = cx->blk_eval.retop;
2630 nextop = cx->blk_sub.retop;
2633 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2637 PL_stack_sp = newsp;
2641 /* Stack values are safe: */
2643 case CXt_LOOP_LAZYIV:
2644 case CXt_LOOP_PLAIN:
2645 case CXt_LOOP_LAZYSV:
2647 POPLOOP(cx); /* release loop vars ... */
2651 POPSUB(cx,sv); /* release CV and @_ ... */
2654 PL_curpm = newpm; /* ... and pop $1 et al */
2657 PERL_UNUSED_VAR(optype);
2658 PERL_UNUSED_VAR(gimme);
2666 const I32 inner = PL_scopestack_ix;
2668 S_unwind_loop(aTHX_ "next");
2670 /* clear off anything above the scope we're re-entering, but
2671 * save the rest until after a possible continue block */
2673 if (PL_scopestack_ix < inner)
2674 leave_scope(PL_scopestack[PL_scopestack_ix]);
2675 PL_curcop = cx->blk_oldcop;
2677 return (cx)->blk_loop.my_op->op_nextop;
2683 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2686 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2688 if (redo_op->op_type == OP_ENTER) {
2689 /* pop one less context to avoid $x being freed in while (my $x..) */
2691 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2692 redo_op = redo_op->op_next;
2696 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2697 LEAVE_SCOPE(oldsave);
2699 PL_curcop = cx->blk_oldcop;
2705 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2709 static const char* const too_deep = "Target of goto is too deeply nested";
2711 PERL_ARGS_ASSERT_DOFINDLABEL;
2714 Perl_croak(aTHX_ "%s", too_deep);
2715 if (o->op_type == OP_LEAVE ||
2716 o->op_type == OP_SCOPE ||
2717 o->op_type == OP_LEAVELOOP ||
2718 o->op_type == OP_LEAVESUB ||
2719 o->op_type == OP_LEAVETRY)
2721 *ops++ = cUNOPo->op_first;
2723 Perl_croak(aTHX_ "%s", too_deep);
2726 if (o->op_flags & OPf_KIDS) {
2728 /* First try all the kids at this level, since that's likeliest. */
2729 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2730 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2731 STRLEN kid_label_len;
2732 U32 kid_label_flags;
2733 const char *kid_label = CopLABEL_len_flags(kCOP,
2734 &kid_label_len, &kid_label_flags);
2736 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2739 (const U8*)kid_label, kid_label_len,
2740 (const U8*)label, len) == 0)
2742 (const U8*)label, len,
2743 (const U8*)kid_label, kid_label_len) == 0)
2744 : ( len == kid_label_len && ((kid_label == label)
2745 || memEQ(kid_label, label, len)))))
2749 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2750 if (kid == PL_lastgotoprobe)
2752 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2755 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2756 ops[-1]->op_type == OP_DBSTATE)
2761 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2769 PP(pp_goto) /* also pp_dump */
2775 #define GOTO_DEPTH 64
2776 OP *enterops[GOTO_DEPTH];
2777 const char *label = NULL;
2778 STRLEN label_len = 0;
2779 U32 label_flags = 0;
2780 const bool do_dump = (PL_op->op_type == OP_DUMP);
2781 static const char* const must_have_label = "goto must have label";
2783 if (PL_op->op_flags & OPf_STACKED) {
2784 /* goto EXPR or goto &foo */
2786 SV * const sv = POPs;
2789 /* This egregious kludge implements goto &subroutine */
2790 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2793 CV *cv = MUTABLE_CV(SvRV(sv));
2794 AV *arg = GvAV(PL_defgv);
2798 if (!CvROOT(cv) && !CvXSUB(cv)) {
2799 const GV * const gv = CvGV(cv);
2803 /* autoloaded stub? */
2804 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2806 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2808 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2809 if (autogv && (cv = GvCV(autogv)))
2811 tmpstr = sv_newmortal();
2812 gv_efullname3(tmpstr, gv, NULL);
2813 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2815 DIE(aTHX_ "Goto undefined subroutine");
2818 /* First do some returnish stuff. */
2819 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2821 cxix = dopoptosub(cxstack_ix);
2822 if (cxix < cxstack_ix) {
2825 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2831 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2832 if (CxTYPE(cx) == CXt_EVAL) {
2835 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2836 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2838 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2839 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2841 else if (CxMULTICALL(cx))
2844 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2846 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2847 AV* av = cx->blk_sub.argarray;
2849 /* abandon the original @_ if it got reified or if it is
2850 the same as the current @_ */
2851 if (AvREAL(av) || av == arg) {
2855 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2857 else CLEAR_ARGARRAY(av);
2859 /* We donate this refcount later to the callee’s pad. */
2860 SvREFCNT_inc_simple_void(arg);
2861 if (CxTYPE(cx) == CXt_SUB &&
2862 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2863 SvREFCNT_dec(cx->blk_sub.cv);
2864 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2865 LEAVE_SCOPE(oldsave);
2867 /* A destructor called during LEAVE_SCOPE could have undefined
2868 * our precious cv. See bug #99850. */
2869 if (!CvROOT(cv) && !CvXSUB(cv)) {
2870 const GV * const gv = CvGV(cv);
2873 SV * const tmpstr = sv_newmortal();
2874 gv_efullname3(tmpstr, gv, NULL);
2875 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2878 DIE(aTHX_ "Goto undefined subroutine");
2881 /* Now do some callish stuff. */
2883 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2885 OP* const retop = cx->blk_sub.retop;
2888 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2889 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2892 PERL_UNUSED_VAR(newsp);
2893 PERL_UNUSED_VAR(gimme);
2895 /* put GvAV(defgv) back onto stack */
2897 EXTEND(SP, items+1); /* @_ could have been extended. */
2902 bool r = cBOOL(AvREAL(arg));
2903 for (index=0; index<items; index++)
2907 SV ** const svp = av_fetch(arg, index, 0);
2908 sv = svp ? *svp : NULL;
2910 else sv = AvARRAY(arg)[index];
2912 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2913 : sv_2mortal(newSVavdefelem(arg, index, 1));
2918 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2919 /* Restore old @_ */
2920 arg = GvAV(PL_defgv);
2921 GvAV(PL_defgv) = cx->blk_sub.savearray;
2925 /* XS subs don't have a CxSUB, so pop it */
2926 POPBLOCK(cx, PL_curpm);
2927 /* Push a mark for the start of arglist */
2930 (void)(*CvXSUB(cv))(aTHX_ cv);
2936 PADLIST * const padlist = CvPADLIST(cv);
2937 cx->blk_sub.cv = cv;
2938 cx->blk_sub.olddepth = CvDEPTH(cv);
2941 if (CvDEPTH(cv) < 2)
2942 SvREFCNT_inc_simple_void_NN(cv);
2944 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2945 sub_crush_depth(cv);
2946 pad_push(padlist, CvDEPTH(cv));
2948 PL_curcop = cx->blk_oldcop;
2950 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2953 CX_CURPAD_SAVE(cx->blk_sub);
2955 /* cx->blk_sub.argarray has no reference count, so we
2956 need something to hang on to our argument array so
2957 that cx->blk_sub.argarray does not end up pointing
2958 to freed memory as the result of undef *_. So put
2959 it in the callee’s pad, donating our refer-
2962 SvREFCNT_dec(PAD_SVl(0));
2963 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2966 /* GvAV(PL_defgv) might have been modified on scope
2967 exit, so restore it. */
2968 if (arg != GvAV(PL_defgv)) {
2969 AV * const av = GvAV(PL_defgv);
2970 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2974 else SvREFCNT_dec(arg);
2975 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2976 Perl_get_db_sub(aTHX_ NULL, cv);
2978 CV * const gotocv = get_cvs("DB::goto", 0);
2980 PUSHMARK( PL_stack_sp );
2981 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2987 RETURNOP(CvSTART(cv));
2992 label = SvPV_nomg_const(sv, label_len);
2993 label_flags = SvUTF8(sv);
2996 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2997 /* goto LABEL or dump LABEL */
2998 label = cPVOP->op_pv;
2999 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
3000 label_len = strlen(label);
3002 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3007 OP *gotoprobe = NULL;
3008 bool leaving_eval = FALSE;
3009 bool in_block = FALSE;
3010 PERL_CONTEXT *last_eval_cx = NULL;
3014 PL_lastgotoprobe = NULL;
3016 for (ix = cxstack_ix; ix >= 0; ix--) {
3018 switch (CxTYPE(cx)) {
3020 leaving_eval = TRUE;
3021 if (!CxTRYBLOCK(cx)) {
3022 gotoprobe = (last_eval_cx ?
3023 last_eval_cx->blk_eval.old_eval_root :
3028 /* else fall through */
3029 case CXt_LOOP_LAZYIV:
3030 case CXt_LOOP_LAZYSV:
3032 case CXt_LOOP_PLAIN:
3035 gotoprobe = cx->blk_oldcop->op_sibling;
3041 gotoprobe = cx->blk_oldcop->op_sibling;
3044 gotoprobe = PL_main_root;
3047 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3048 gotoprobe = CvROOT(cx->blk_sub.cv);
3054 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3057 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3058 CxTYPE(cx), (long) ix);
3059 gotoprobe = PL_main_root;
3063 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3064 enterops, enterops + GOTO_DEPTH);
3067 if (gotoprobe->op_sibling &&
3068 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3069 gotoprobe->op_sibling->op_sibling) {
3070 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3071 label, label_len, label_flags, enterops,
3072 enterops + GOTO_DEPTH);
3077 PL_lastgotoprobe = gotoprobe;
3080 DIE(aTHX_ "Can't find label %"UTF8f,
3081 UTF8fARG(label_flags, label_len, label));
3083 /* if we're leaving an eval, check before we pop any frames
3084 that we're not going to punt, otherwise the error
3087 if (leaving_eval && *enterops && enterops[1]) {
3089 for (i = 1; enterops[i]; i++)
3090 if (enterops[i]->op_type == OP_ENTERITER)
3091 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3094 if (*enterops && enterops[1]) {
3095 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3097 deprecate("\"goto\" to jump into a construct");
3100 /* pop unwanted frames */
3102 if (ix < cxstack_ix) {
3106 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3109 oldsave = PL_scopestack[PL_scopestack_ix];
3110 LEAVE_SCOPE(oldsave);
3113 /* push wanted frames */
3115 if (*enterops && enterops[1]) {
3116 OP * const oldop = PL_op;
3117 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3118 for (; enterops[ix]; ix++) {
3119 PL_op = enterops[ix];
3120 /* Eventually we may want to stack the needed arguments
3121 * for each op. For now, we punt on the hard ones. */
3122 if (PL_op->op_type == OP_ENTERITER)
3123 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3124 PL_op->op_ppaddr(aTHX);
3132 if (!retop) retop = PL_main_start;
3134 PL_restartop = retop;
3135 PL_do_undump = TRUE;
3139 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3140 PL_do_undump = FALSE;
3156 anum = 0; (void)POPs;
3162 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3165 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3168 PL_exit_flags |= PERL_EXIT_EXPECTED;
3170 PUSHs(&PL_sv_undef);
3177 S_save_lines(pTHX_ AV *array, SV *sv)
3179 const char *s = SvPVX_const(sv);
3180 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3183 PERL_ARGS_ASSERT_SAVE_LINES;
3185 while (s && s < send) {
3187 SV * const tmpstr = newSV_type(SVt_PVMG);
3189 t = (const char *)memchr(s, '\n', send - s);
3195 sv_setpvn(tmpstr, s, t - s);
3196 av_store(array, line++, tmpstr);
3204 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3206 0 is used as continue inside eval,
3208 3 is used for a die caught by an inner eval - continue inner loop
3210 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3211 establish a local jmpenv to handle exception traps.
3216 S_docatch(pTHX_ OP *o)
3220 OP * const oldop = PL_op;
3224 assert(CATCH_GET == TRUE);
3231 assert(cxstack_ix >= 0);
3232 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3233 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3238 /* die caught by an inner eval - continue inner loop */
3239 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3240 PL_restartjmpenv = NULL;
3241 PL_op = PL_restartop;
3250 assert(0); /* NOTREACHED */
3259 =for apidoc find_runcv
3261 Locate the CV corresponding to the currently executing sub or eval.
3262 If db_seqp is non_null, skip CVs that are in the DB package and populate
3263 *db_seqp with the cop sequence number at the point that the DB:: code was
3264 entered. (This allows debuggers to eval in the scope of the breakpoint
3265 rather than in the scope of the debugger itself.)
3271 Perl_find_runcv(pTHX_ U32 *db_seqp)
3273 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3276 /* If this becomes part of the API, it might need a better name. */
3278 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3286 PL_curcop == &PL_compiling
3288 : PL_curcop->cop_seq;
3290 for (si = PL_curstackinfo; si; si = si->si_prev) {
3292 for (ix = si->si_cxix; ix >= 0; ix--) {
3293 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3295 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3296 cv = cx->blk_sub.cv;
3297 /* skip DB:: code */
3298 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3299 *db_seqp = cx->blk_oldcop->cop_seq;
3302 if (cx->cx_type & CXp_SUB_RE)
3305 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3306 cv = cx->blk_eval.cv;
3309 case FIND_RUNCV_padid_eq:
3311 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3314 case FIND_RUNCV_level_eq:
3315 if (level++ != arg) continue;
3323 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3327 /* Run yyparse() in a setjmp wrapper. Returns:
3328 * 0: yyparse() successful
3329 * 1: yyparse() failed
3333 S_try_yyparse(pTHX_ int gramtype)
3338 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3342 ret = yyparse(gramtype) ? 1 : 0;
3349 assert(0); /* NOTREACHED */
3356 /* Compile a require/do or an eval ''.
3358 * outside is the lexically enclosing CV (if any) that invoked us.
3359 * seq is the current COP scope value.
3360 * hh is the saved hints hash, if any.
3362 * Returns a bool indicating whether the compile was successful; if so,
3363 * PL_eval_start contains the first op of the compiled code; otherwise,
3366 * This function is called from two places: pp_require and pp_entereval.
3367 * These can be distinguished by whether PL_op is entereval.
3371 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3374 OP * const saveop = PL_op;
3375 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3376 COP * const oldcurcop = PL_curcop;
3377 bool in_require = (saveop->op_type == OP_REQUIRE);
3381 PL_in_eval = (in_require
3382 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3384 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3385 ? EVAL_RE_REPARSING : 0)));
3389 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3391 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3392 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3393 cxstack[cxstack_ix].blk_gimme = gimme;
3395 CvOUTSIDE_SEQ(evalcv) = seq;
3396 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3398 /* set up a scratch pad */
3400 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3401 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3404 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3406 /* make sure we compile in the right package */
3408 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3409 SAVEGENERICSV(PL_curstash);
3410 PL_curstash = (HV *)CopSTASH(PL_curcop);
3411 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3412 else SvREFCNT_inc_simple_void(PL_curstash);
3414 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3415 SAVESPTR(PL_beginav);
3416 PL_beginav = newAV();
3417 SAVEFREESV(PL_beginav);
3418 SAVESPTR(PL_unitcheckav);
3419 PL_unitcheckav = newAV();
3420 SAVEFREESV(PL_unitcheckav);
3423 ENTER_with_name("evalcomp");
3424 SAVESPTR(PL_compcv);
3427 /* try to compile it */
3429 PL_eval_root = NULL;
3430 PL_curcop = &PL_compiling;
3431 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3432 PL_in_eval |= EVAL_KEEPERR;
3439 hv_clear(GvHV(PL_hintgv));
3442 PL_hints = saveop->op_private & OPpEVAL_COPHH
3443 ? oldcurcop->cop_hints : saveop->op_targ;
3445 /* making 'use re eval' not be in scope when compiling the
3446 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3447 * infinite recursion when S_has_runtime_code() gives a false
3448 * positive: the second time round, HINT_RE_EVAL isn't set so we
3449 * don't bother calling S_has_runtime_code() */
3450 if (PL_in_eval & EVAL_RE_REPARSING)
3451 PL_hints &= ~HINT_RE_EVAL;
3454 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3455 SvREFCNT_dec(GvHV(PL_hintgv));
3456 GvHV(PL_hintgv) = hh;
3459 SAVECOMPILEWARNINGS();
3461 if (PL_dowarn & G_WARN_ALL_ON)
3462 PL_compiling.cop_warnings = pWARN_ALL ;
3463 else if (PL_dowarn & G_WARN_ALL_OFF)
3464 PL_compiling.cop_warnings = pWARN_NONE ;
3466 PL_compiling.cop_warnings = pWARN_STD ;
3469 PL_compiling.cop_warnings =
3470 DUP_WARNINGS(oldcurcop->cop_warnings);
3471 cophh_free(CopHINTHASH_get(&PL_compiling));
3472 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3473 /* The label, if present, is the first entry on the chain. So rather
3474 than writing a blank label in front of it (which involves an
3475 allocation), just use the next entry in the chain. */
3476 PL_compiling.cop_hints_hash
3477 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3478 /* Check the assumption that this removed the label. */
3479 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3482 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3485 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3487 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3488 * so honour CATCH_GET and trap it here if necessary */
3490 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3492 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3493 SV **newsp; /* Used by POPBLOCK. */
3495 I32 optype; /* Used by POPEVAL. */
3501 PERL_UNUSED_VAR(newsp);
3502 PERL_UNUSED_VAR(optype);
3504 /* note that if yystatus == 3, then the EVAL CX block has already
3505 * been popped, and various vars restored */
3507 if (yystatus != 3) {
3509 op_free(PL_eval_root);
3510 PL_eval_root = NULL;
3512 SP = PL_stack_base + POPMARK; /* pop original mark */
3513 POPBLOCK(cx,PL_curpm);
3515 namesv = cx->blk_eval.old_namesv;
3516 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3517 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3523 /* If cx is still NULL, it means that we didn't go in the
3524 * POPEVAL branch. */
3525 cx = &cxstack[cxstack_ix];
3526 assert(CxTYPE(cx) == CXt_EVAL);
3527 namesv = cx->blk_eval.old_namesv;
3529 (void)hv_store(GvHVn(PL_incgv),
3530 SvPVX_const(namesv),
3531 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3533 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3536 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3539 if (!*(SvPV_nolen_const(errsv))) {
3540 sv_setpvs(errsv, "Compilation error");
3543 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3548 LEAVE_with_name("evalcomp");
3550 CopLINE_set(&PL_compiling, 0);
3551 SAVEFREEOP(PL_eval_root);
3552 cv_forget_slab(evalcv);
3554 DEBUG_x(dump_eval());
3556 /* Register with debugger: */
3557 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3558 CV * const cv = get_cvs("DB::postponed", 0);
3562 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3564 call_sv(MUTABLE_SV(cv), G_DISCARD);
3568 if (PL_unitcheckav) {
3569 OP *es = PL_eval_start;
3570 call_list(PL_scopestack_ix, PL_unitcheckav);
3574 /* compiled okay, so do it */
3576 CvDEPTH(evalcv) = 1;
3577 SP = PL_stack_base + POPMARK; /* pop original mark */
3578 PL_op = saveop; /* The caller may need it. */
3579 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3586 S_check_type_and_open(pTHX_ SV *name)
3590 const char *p = SvPV_const(name, len);
3593 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3595 /* checking here captures a reasonable error message when
3596 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3597 * user gets a confusing message about looking for the .pmc file
3598 * rather than for the .pm file.
3599 * This check prevents a \0 in @INC causing problems.
3601 if (!IS_SAFE_PATHNAME(p, len, "require"))
3604 /* we use the value of errno later to see how stat() or open() failed.
3605 * We don't want it set if the stat succeeded but we still failed,
3606 * such as if the name exists, but is a directory */
3609 st_rc = PerlLIO_stat(p, &st);
3611 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3615 #if !defined(PERLIO_IS_STDIO)
3616 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3618 return PerlIO_open(p, PERL_SCRIPT_MODE);
3622 #ifndef PERL_DISABLE_PMC
3624 S_doopen_pm(pTHX_ SV *name)
3627 const char *p = SvPV_const(name, namelen);
3629 PERL_ARGS_ASSERT_DOOPEN_PM;
3631 /* check the name before trying for the .pmc name to avoid the
3632 * warning referring to the .pmc which the user probably doesn't
3633 * know or care about
3635 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3638 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3639 SV *const pmcsv = sv_newmortal();
3642 SvSetSV_nosteal(pmcsv,name);
3643 sv_catpvs(pmcsv, "c");
3645 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3646 return check_type_and_open(pmcsv);
3648 return check_type_and_open(name);
3651 # define doopen_pm(name) check_type_and_open(name)
3652 #endif /* !PERL_DISABLE_PMC */
3654 /* require doesn't search for absolute names, or when the name is
3655 explicity relative the current directory */
3656 PERL_STATIC_INLINE bool
3657 S_path_is_searchable(const char *name)
3659 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3661 if (PERL_FILE_IS_ABSOLUTE(name)
3663 || (*name == '.' && ((name[1] == '/' ||
3664 (name[1] == '.' && name[2] == '/'))
3665 || (name[1] == '\\' ||
3666 ( name[1] == '.' && name[2] == '\\')))
3669 || (*name == '.' && (name[1] == '/' ||
3670 (name[1] == '.' && name[2] == '/')))
3690 int vms_unixname = 0;
3693 const char *tryname = NULL;
3695 const I32 gimme = GIMME_V;
3696 int filter_has_file = 0;
3697 PerlIO *tryrsfp = NULL;
3698 SV *filter_cache = NULL;
3699 SV *filter_state = NULL;
3700 SV *filter_sub = NULL;
3705 bool path_searchable;
3708 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3709 sv = sv_2mortal(new_version(sv));
3710 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3711 upg_version(PL_patchlevel, TRUE);
3712 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3713 if ( vcmp(sv,PL_patchlevel) <= 0 )
3714 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3715 SVfARG(sv_2mortal(vnormal(sv))),
3716 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3720 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3723 SV * const req = SvRV(sv);
3724 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3726 /* get the left hand term */
3727 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3729 first = SvIV(*av_fetch(lav,0,0));
3730 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3731 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3732 || av_tindex(lav) > 1 /* FP with > 3 digits */
3733 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3735 DIE(aTHX_ "Perl %"SVf" required--this is only "
3737 SVfARG(sv_2mortal(vnormal(req))),
3738 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3741 else { /* probably 'use 5.10' or 'use 5.8' */
3745 if (av_tindex(lav)>=1)
3746 second = SvIV(*av_fetch(lav,1,0));
3748 second /= second >= 600 ? 100 : 10;
3749 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3750 (int)first, (int)second);
3751 upg_version(hintsv, TRUE);
3753 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3754 "--this is only %"SVf", stopped",
3755 SVfARG(sv_2mortal(vnormal(req))),
3756 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3757 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3765 name = SvPV_const(sv, len);
3766 if (!(name && len > 0 && *name))
3767 DIE(aTHX_ "Null filename used");
3768 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3769 DIE(aTHX_ "Can't locate %s: %s",
3770 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3771 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3774 TAINT_PROPER("require");
3776 path_searchable = path_is_searchable(name);
3779 /* The key in the %ENV hash is in the syntax of file passed as the argument
3780 * usually this is in UNIX format, but sometimes in VMS format, which
3781 * can result in a module being pulled in more than once.
3782 * To prevent this, the key must be stored in UNIX format if the VMS
3783 * name can be translated to UNIX.
3787 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3789 unixlen = strlen(unixname);
3795 /* if not VMS or VMS name can not be translated to UNIX, pass it
3798 unixname = (char *) name;
3801 if (PL_op->op_type == OP_REQUIRE) {
3802 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3803 unixname, unixlen, 0);
3805 if (*svp != &PL_sv_undef)
3808 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3809 "Compilation failed in require", unixname);
3813 LOADING_FILE_PROBE(unixname);
3815 /* prepare to compile file */
3817 if (!path_searchable) {
3818 /* At this point, name is SvPVX(sv) */
3820 tryrsfp = doopen_pm(sv);
3822 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3823 AV * const ar = GvAVn(PL_incgv);
3830 namesv = newSV_type(SVt_PV);
3831 for (i = 0; i <= AvFILL(ar); i++) {
3832 SV * const dirsv = *av_fetch(ar, i, TRUE);
3840 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3841 && !SvOBJECT(SvRV(loader)))
3843 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3847 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3848 PTR2UV(SvRV(dirsv)), name);
3849 tryname = SvPVX_const(namesv);
3852 if (SvPADTMP(nsv)) {
3853 nsv = sv_newmortal();
3854 SvSetSV_nosteal(nsv,sv);
3857 ENTER_with_name("call_INC");
3865 if (SvGMAGICAL(loader)) {
3866 SV *l = sv_newmortal();
3867 sv_setsv_nomg(l, loader);
3870 if (sv_isobject(loader))
3871 count = call_method("INC", G_ARRAY);
3873 count = call_sv(loader, G_ARRAY);
3883 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3884 && !isGV_with_GP(SvRV(arg))) {
3885 filter_cache = SvRV(arg);
3892 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3896 if (isGV_with_GP(arg)) {
3897 IO * const io = GvIO((const GV *)arg);
3902 tryrsfp = IoIFP(io);
3903 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3904 PerlIO_close(IoOFP(io));
3915 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3917 SvREFCNT_inc_simple_void_NN(filter_sub);
3920 filter_state = SP[i];
3921 SvREFCNT_inc_simple_void(filter_state);
3925 if (!tryrsfp && (filter_cache || filter_sub)) {
3926 tryrsfp = PerlIO_open(BIT_BUCKET,
3932 /* FREETMPS may free our filter_cache */
3933 SvREFCNT_inc_simple_void(filter_cache);
3937 LEAVE_with_name("call_INC");
3939 /* Now re-mortalize it. */
3940 sv_2mortal(filter_cache);
3942 /* Adjust file name if the hook has set an %INC entry.
3943 This needs to happen after the FREETMPS above. */
3944 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3946 tryname = SvPV_nolen_const(*svp);
3953 filter_has_file = 0;
3954 filter_cache = NULL;
3956 SvREFCNT_dec_NN(filter_state);
3957 filter_state = NULL;
3960 SvREFCNT_dec_NN(filter_sub);
3965 if (path_searchable) {
3970 dir = SvPV_nomg_const(dirsv, dirlen);
3976 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3980 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3983 sv_setpv(namesv, unixdir);
3984 sv_catpv(namesv, unixname);
3986 # ifdef __SYMBIAN32__
3987 if (PL_origfilename[0] &&
3988 PL_origfilename[1] == ':' &&
3989 !(dir[0] && dir[1] == ':'))
3990 Perl_sv_setpvf(aTHX_ namesv,
3995 Perl_sv_setpvf(aTHX_ namesv,
3999 /* The equivalent of
4000 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4001 but without the need to parse the format string, or
4002 call strlen on either pointer, and with the correct
4003 allocation up front. */
4005 char *tmp = SvGROW(namesv, dirlen + len + 2);
4007 memcpy(tmp, dir, dirlen);
4010 /* Avoid '<dir>//<file>' */
4011 if (!dirlen || *(tmp-1) != '/') {
4014 /* So SvCUR_set reports the correct length below */
4018 /* name came from an SV, so it will have a '\0' at the
4019 end that we can copy as part of this memcpy(). */
4020 memcpy(tmp, name, len + 1);
4022 SvCUR_set(namesv, dirlen + len + 1);
4027 TAINT_PROPER("require");
4028 tryname = SvPVX_const(namesv);
4029 tryrsfp = doopen_pm(namesv);
4031 if (tryname[0] == '.' && tryname[1] == '/') {
4033 while (*++tryname == '/') {}
4037 else if (errno == EMFILE || errno == EACCES) {
4038 /* no point in trying other paths if out of handles;
4039 * on the other hand, if we couldn't open one of the
4040 * files, then going on with the search could lead to
4041 * unexpected results; see perl #113422
4050 saved_errno = errno; /* sv_2mortal can realloc things */
4053 if (PL_op->op_type == OP_REQUIRE) {
4054 if(saved_errno == EMFILE || saved_errno == EACCES) {
4055 /* diag_listed_as: Can't locate %s */
4056 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4058 if (namesv) { /* did we lookup @INC? */
4059 AV * const ar = GvAVn(PL_incgv);
4061 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4062 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4063 for (i = 0; i <= AvFILL(ar); i++) {
4064 sv_catpvs(inc, " ");
4065 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4067 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4068 const char *c, *e = name + len - 3;
4069 sv_catpv(msg, " (you may need to install the ");
4070 for (c = name; c < e; c++) {
4072 sv_catpvs(msg, "::");
4075 sv_catpvn(msg, c, 1);
4078 sv_catpv(msg, " module)");
4080 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4081 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4083 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4084 sv_catpv(msg, " (did you run h2ph?)");
4087 /* diag_listed_as: Can't locate %s */
4089 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4093 DIE(aTHX_ "Can't locate %s", name);
4100 SETERRNO(0, SS_NORMAL);
4102 /* Assume success here to prevent recursive requirement. */
4103 /* name is never assigned to again, so len is still strlen(name) */
4104 /* Check whether a hook in @INC has already filled %INC */
4106 (void)hv_store(GvHVn(PL_incgv),
4107 unixname, unixlen, newSVpv(tryname,0),0);
4109 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4111 (void)hv_store(GvHVn(PL_incgv),
4112 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4115 ENTER_with_name("eval");
4117 SAVECOPFILE_FREE(&PL_compiling);
4118 CopFILE_set(&PL_compiling, tryname);
4119 lex_start(NULL, tryrsfp, 0);
4121 if (filter_sub || filter_cache) {
4122 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4123 than hanging another SV from it. In turn, filter_add() optionally
4124 takes the SV to use as the filter (or creates a new SV if passed
4125 NULL), so simply pass in whatever value filter_cache has. */
4126 SV * const fc = filter_cache ? newSV(0) : NULL;
4128 if (fc) sv_copypv(fc, filter_cache);
4129 datasv = filter_add(S_run_user_filter, fc);
4130 IoLINES(datasv) = filter_has_file;
4131 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4132 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4135 /* switch to eval mode */
4136 PUSHBLOCK(cx, CXt_EVAL, SP);
4138 cx->blk_eval.retop = PL_op->op_next;
4140 SAVECOPLINE(&PL_compiling);
4141 CopLINE_set(&PL_compiling, 0);
4145 /* Store and reset encoding. */
4146 encoding = PL_encoding;
4149 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4150 op = DOCATCH(PL_eval_start);
4152 op = PL_op->op_next;
4154 /* Restore encoding. */
4155 PL_encoding = encoding;
4157 LOADED_FILE_PROBE(unixname);
4162 /* This is a op added to hold the hints hash for
4163 pp_entereval. The hash can be modified by the code
4164 being eval'ed, so we return a copy instead. */
4170 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4180 const I32 gimme = GIMME_V;
4181 const U32 was = PL_breakable_sub_gen;
4182 char tbuf[TYPE_DIGITS(long) + 12];
4183 bool saved_delete = FALSE;
4184 char *tmpbuf = tbuf;
4187 U32 seq, lex_flags = 0;
4188 HV *saved_hh = NULL;
4189 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4191 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4192 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4194 else if (PL_hints & HINT_LOCALIZE_HH || (
4195 PL_op->op_private & OPpEVAL_COPHH
4196 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4198 saved_hh = cop_hints_2hv(PL_curcop, 0);
4199 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4203 /* make sure we've got a plain PV (no overload etc) before testing
4204 * for taint. Making a copy here is probably overkill, but better
4205 * safe than sorry */
4207 const char * const p = SvPV_const(sv, len);
4209 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4210 lex_flags |= LEX_START_COPIED;
4212 if (bytes && SvUTF8(sv))
4213 SvPVbyte_force(sv, len);
4215 else if (bytes && SvUTF8(sv)) {
4216 /* Don't modify someone else's scalar */
4219 (void)sv_2mortal(sv);
4220 SvPVbyte_force(sv,len);
4221 lex_flags |= LEX_START_COPIED;
4224 TAINT_IF(SvTAINTED(sv));
4225 TAINT_PROPER("eval");
4227 ENTER_with_name("eval");
4228 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4229 ? LEX_IGNORE_UTF8_HINTS
4230 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4235 /* switch to eval mode */
4237 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4238 SV * const temp_sv = sv_newmortal();
4239 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4240 (unsigned long)++PL_evalseq,
4241 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4242 tmpbuf = SvPVX(temp_sv);
4243 len = SvCUR(temp_sv);
4246 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4247 SAVECOPFILE_FREE(&PL_compiling);
4248 CopFILE_set(&PL_compiling, tmpbuf+2);
4249 SAVECOPLINE(&PL_compiling);
4250 CopLINE_set(&PL_compiling, 1);
4251 /* special case: an eval '' executed within the DB package gets lexically
4252 * placed in the first non-DB CV rather than the current CV - this
4253 * allows the debugger to execute code, find lexicals etc, in the
4254 * scope of the code being debugged. Passing &seq gets find_runcv
4255 * to do the dirty work for us */
4256 runcv = find_runcv(&seq);
4258 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4260 cx->blk_eval.retop = PL_op->op_next;
4262 /* prepare to compile string */
4264 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4265 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4267 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4268 deleting the eval's FILEGV from the stash before gv_check() runs
4269 (i.e. before run-time proper). To work around the coredump that
4270 ensues, we always turn GvMULTI_on for any globals that were
4271 introduced within evals. See force_ident(). GSAR 96-10-12 */
4272 char *const safestr = savepvn(tmpbuf, len);
4273 SAVEDELETE(PL_defstash, safestr, len);
4274 saved_delete = TRUE;
4279 if (doeval(gimme, runcv, seq, saved_hh)) {
4280 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4281 ? (PERLDB_LINE || PERLDB_SAVESRC)
4282 : PERLDB_SAVESRC_NOSUBS) {
4283 /* Retain the filegv we created. */
4284 } else if (!saved_delete) {
4285 char *const safestr = savepvn(tmpbuf, len);
4286 SAVEDELETE(PL_defstash, safestr, len);
4288 return DOCATCH(PL_eval_start);
4290 /* We have already left the scope set up earlier thanks to the LEAVE
4292 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4293 ? (PERLDB_LINE || PERLDB_SAVESRC)
4294 : PERLDB_SAVESRC_INVALID) {
4295 /* Retain the filegv we created. */
4296 } else if (!saved_delete) {
4297 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4299 return PL_op->op_next;
4311 const U8 save_flags = PL_op -> op_flags;
4319 namesv = cx->blk_eval.old_namesv;
4320 retop = cx->blk_eval.retop;
4321 evalcv = cx->blk_eval.cv;
4324 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4325 gimme, SVs_TEMP, FALSE);
4326 PL_curpm = newpm; /* Don't pop $1 et al till now */
4329 assert(CvDEPTH(evalcv) == 1);
4331 CvDEPTH(evalcv) = 0;
4333 if (optype == OP_REQUIRE &&
4334 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4336 /* Unassume the success we assumed earlier. */
4337 (void)hv_delete(GvHVn(PL_incgv),
4338 SvPVX_const(namesv),
4339 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4341 Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
4342 NOT_REACHED; /* NOTREACHED */
4343 /* die_unwind() did LEAVE, or we won't be here */
4346 LEAVE_with_name("eval");
4347 if (!(save_flags & OPf_SPECIAL)) {
4355 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4356 close to the related Perl_create_eval_scope. */
4358 Perl_delete_eval_scope(pTHX)
4369 LEAVE_with_name("eval_scope");
4370 PERL_UNUSED_VAR(newsp);
4371 PERL_UNUSED_VAR(gimme);
4372 PERL_UNUSED_VAR(optype);
4375 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4376 also needed by Perl_fold_constants. */
4378 Perl_create_eval_scope(pTHX_ U32 flags)
4381 const I32 gimme = GIMME_V;
4383 ENTER_with_name("eval_scope");
4386 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4389 PL_in_eval = EVAL_INEVAL;
4390 if (flags & G_KEEPERR)
4391 PL_in_eval |= EVAL_KEEPERR;
4394 if (flags & G_FAKINGEVAL) {
4395 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4403 PERL_CONTEXT * const cx = create_eval_scope(0);
4404 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4405 return DOCATCH(PL_op->op_next);
4420 PERL_UNUSED_VAR(optype);
4423 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4424 SVs_PADTMP|SVs_TEMP, FALSE);
4425 PL_curpm = newpm; /* Don't pop $1 et al till now */
4427 LEAVE_with_name("eval_scope");
4436 const I32 gimme = GIMME_V;
4438 ENTER_with_name("given");
4441 if (PL_op->op_targ) {
4442 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4443 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4444 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4451 PUSHBLOCK(cx, CXt_GIVEN, SP);