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);
1360 assert(0); /* NOTREACHED */
1366 Perl_is_lvalue_sub(pTHX)
1369 const I32 cxix = dopoptosub(cxstack_ix);
1370 assert(cxix >= 0); /* We should only be called from inside subs */
1372 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1373 return CxLVAL(cxstack + cxix);
1378 /* only used by PUSHSUB */
1380 Perl_was_lvalue_sub(pTHX)
1383 const I32 cxix = dopoptosub(cxstack_ix-1);
1384 assert(cxix >= 0); /* We should only be called from inside subs */
1386 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1387 return CxLVAL(cxstack + cxix);
1393 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1398 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1400 for (i = startingblock; i >= 0; i--) {
1401 const PERL_CONTEXT * const cx = &cxstk[i];
1402 switch (CxTYPE(cx)) {
1406 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1407 * twice; the first for the normal foo() call, and the second
1408 * for a faked up re-entry into the sub to execute the
1409 * code block. Hide this faked entry from the world. */
1410 if (cx->cx_type & CXp_SUB_RE_FAKE)
1415 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1423 S_dopoptoeval(pTHX_ I32 startingblock)
1427 for (i = startingblock; i >= 0; i--) {
1428 const PERL_CONTEXT *cx = &cxstack[i];
1429 switch (CxTYPE(cx)) {
1433 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1441 S_dopoptoloop(pTHX_ I32 startingblock)
1445 for (i = startingblock; i >= 0; i--) {
1446 const PERL_CONTEXT * const cx = &cxstack[i];
1447 switch (CxTYPE(cx)) {
1453 /* diag_listed_as: Exiting subroutine via %s */
1454 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1455 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1456 if ((CxTYPE(cx)) == CXt_NULL)
1459 case CXt_LOOP_LAZYIV:
1460 case CXt_LOOP_LAZYSV:
1462 case CXt_LOOP_PLAIN:
1463 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1471 S_dopoptogiven(pTHX_ I32 startingblock)
1475 for (i = startingblock; i >= 0; i--) {
1476 const PERL_CONTEXT *cx = &cxstack[i];
1477 switch (CxTYPE(cx)) {
1481 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1483 case CXt_LOOP_PLAIN:
1484 assert(!CxFOREACHDEF(cx));
1486 case CXt_LOOP_LAZYIV:
1487 case CXt_LOOP_LAZYSV:
1489 if (CxFOREACHDEF(cx)) {
1490 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1499 S_dopoptowhen(pTHX_ I32 startingblock)
1503 for (i = startingblock; i >= 0; i--) {
1504 const PERL_CONTEXT *cx = &cxstack[i];
1505 switch (CxTYPE(cx)) {
1509 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1517 Perl_dounwind(pTHX_ I32 cxix)
1522 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1525 while (cxstack_ix > cxix) {
1527 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1528 DEBUG_CX("UNWIND"); \
1529 /* Note: we don't need to restore the base context info till the end. */
1530 switch (CxTYPE(cx)) {
1533 continue; /* not break */
1541 case CXt_LOOP_LAZYIV:
1542 case CXt_LOOP_LAZYSV:
1544 case CXt_LOOP_PLAIN:
1555 PERL_UNUSED_VAR(optype);
1559 Perl_qerror(pTHX_ SV *err)
1563 PERL_ARGS_ASSERT_QERROR;
1566 if (PL_in_eval & EVAL_KEEPERR) {
1567 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1571 sv_catsv(ERRSV, err);
1574 sv_catsv(PL_errors, err);
1576 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1578 ++PL_parser->error_count;
1582 Perl_die_unwind(pTHX_ SV *msv)
1585 SV *exceptsv = sv_mortalcopy(msv);
1586 U8 in_eval = PL_in_eval;
1587 PERL_ARGS_ASSERT_DIE_UNWIND;
1594 * Historically, perl used to set ERRSV ($@) early in the die
1595 * process and rely on it not getting clobbered during unwinding.
1596 * That sucked, because it was liable to get clobbered, so the
1597 * setting of ERRSV used to emit the exception from eval{} has
1598 * been moved to much later, after unwinding (see just before
1599 * JMPENV_JUMP below). However, some modules were relying on the
1600 * early setting, by examining $@ during unwinding to use it as
1601 * a flag indicating whether the current unwinding was caused by
1602 * an exception. It was never a reliable flag for that purpose,
1603 * being totally open to false positives even without actual
1604 * clobberage, but was useful enough for production code to
1605 * semantically rely on it.
1607 * We'd like to have a proper introspective interface that
1608 * explicitly describes the reason for whatever unwinding
1609 * operations are currently in progress, so that those modules
1610 * work reliably and $@ isn't further overloaded. But we don't
1611 * have one yet. In its absence, as a stopgap measure, ERRSV is
1612 * now *additionally* set here, before unwinding, to serve as the
1613 * (unreliable) flag that it used to.
1615 * This behaviour is temporary, and should be removed when a
1616 * proper way to detect exceptional unwinding has been developed.
1617 * As of 2010-12, the authors of modules relying on the hack
1618 * are aware of the issue, because the modules failed on
1619 * perls 5.13.{1..7} which had late setting of $@ without this
1620 * early-setting hack.
1622 if (!(in_eval & EVAL_KEEPERR)) {
1623 SvTEMP_off(exceptsv);
1624 sv_setsv(ERRSV, exceptsv);
1627 if (in_eval & EVAL_KEEPERR) {
1628 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1632 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1633 && PL_curstackinfo->si_prev)
1645 JMPENV *restartjmpenv;
1648 if (cxix < cxstack_ix)
1651 POPBLOCK(cx,PL_curpm);
1652 if (CxTYPE(cx) != CXt_EVAL) {
1654 const char* message = SvPVx_const(exceptsv, msglen);
1655 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1656 PerlIO_write(Perl_error_log, message, msglen);
1660 namesv = cx->blk_eval.old_namesv;
1661 oldcop = cx->blk_oldcop;
1662 restartjmpenv = cx->blk_eval.cur_top_env;
1663 restartop = cx->blk_eval.retop;
1665 if (gimme == G_SCALAR)
1666 *++newsp = &PL_sv_undef;
1667 PL_stack_sp = newsp;
1671 /* LEAVE could clobber PL_curcop (see save_re_context())
1672 * XXX it might be better to find a way to avoid messing with
1673 * PL_curcop in save_re_context() instead, but this is a more
1674 * minimal fix --GSAR */
1677 if (optype == OP_REQUIRE) {
1678 (void)hv_store(GvHVn(PL_incgv),
1679 SvPVX_const(namesv),
1680 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1682 /* note that unlike pp_entereval, pp_require isn't
1683 * supposed to trap errors. So now that we've popped the
1684 * EVAL that pp_require pushed, and processed the error
1685 * message, rethrow the error */
1686 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1687 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1690 if (!(in_eval & EVAL_KEEPERR))
1691 sv_setsv(ERRSV, exceptsv);
1692 PL_restartjmpenv = restartjmpenv;
1693 PL_restartop = restartop;
1695 assert(0); /* NOTREACHED */
1699 write_to_stderr(exceptsv);
1701 assert(0); /* NOTREACHED */
1706 dVAR; dSP; dPOPTOPssrl;
1707 if (SvTRUE(left) != SvTRUE(right))
1715 =head1 CV Manipulation Functions
1717 =for apidoc caller_cx
1719 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1720 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1721 information returned to Perl by C<caller>. Note that XSUBs don't get a
1722 stack frame, so C<caller_cx(0, NULL)> will return information for the
1723 immediately-surrounding Perl code.
1725 This function skips over the automatic calls to C<&DB::sub> made on the
1726 behalf of the debugger. If the stack frame requested was a sub called by
1727 C<DB::sub>, the return value will be the frame for the call to
1728 C<DB::sub>, since that has the correct line number/etc. for the call
1729 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1730 frame for the sub call itself.
1735 const PERL_CONTEXT *
1736 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1738 I32 cxix = dopoptosub(cxstack_ix);
1739 const PERL_CONTEXT *cx;
1740 const PERL_CONTEXT *ccstack = cxstack;
1741 const PERL_SI *top_si = PL_curstackinfo;
1744 /* we may be in a higher stacklevel, so dig down deeper */
1745 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1746 top_si = top_si->si_prev;
1747 ccstack = top_si->si_cxstack;
1748 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1752 /* caller() should not report the automatic calls to &DB::sub */
1753 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1754 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1758 cxix = dopoptosub_at(ccstack, cxix - 1);
1761 cx = &ccstack[cxix];
1762 if (dbcxp) *dbcxp = cx;
1764 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1765 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1766 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1767 field below is defined for any cx. */
1768 /* caller() should not report the automatic calls to &DB::sub */
1769 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1770 cx = &ccstack[dbcxix];
1780 const PERL_CONTEXT *cx;
1781 const PERL_CONTEXT *dbcx;
1783 const HEK *stash_hek;
1785 bool has_arg = MAXARG && TOPs;
1794 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1796 if (GIMME != G_ARRAY) {
1804 assert(CopSTASH(cx->blk_oldcop));
1805 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1806 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1808 if (GIMME != G_ARRAY) {
1811 PUSHs(&PL_sv_undef);
1814 sv_sethek(TARG, stash_hek);
1823 PUSHs(&PL_sv_undef);
1826 sv_sethek(TARG, stash_hek);
1829 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1830 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1831 cx->blk_sub.retop, TRUE);
1833 lcop = cx->blk_oldcop;
1834 mPUSHi((I32)CopLINE(lcop));
1837 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1838 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1839 /* So is ccstack[dbcxix]. */
1840 if (cvgv && isGV(cvgv)) {
1841 SV * const sv = newSV(0);
1842 gv_efullname3(sv, cvgv, NULL);
1844 PUSHs(boolSV(CxHASARGS(cx)));
1847 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1848 PUSHs(boolSV(CxHASARGS(cx)));
1852 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1855 gimme = (I32)cx->blk_gimme;
1856 if (gimme == G_VOID)
1857 PUSHs(&PL_sv_undef);
1859 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1860 if (CxTYPE(cx) == CXt_EVAL) {
1862 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1863 SV *cur_text = cx->blk_eval.cur_text;
1864 if (SvCUR(cur_text) >= 2) {
1865 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1866 SvUTF8(cur_text)|SVs_TEMP));
1869 /* I think this is will always be "", but be sure */
1870 PUSHs(sv_2mortal(newSVsv(cur_text)));
1876 else if (cx->blk_eval.old_namesv) {
1877 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1880 /* eval BLOCK (try blocks have old_namesv == 0) */
1882 PUSHs(&PL_sv_undef);
1883 PUSHs(&PL_sv_undef);
1887 PUSHs(&PL_sv_undef);
1888 PUSHs(&PL_sv_undef);
1890 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1891 && CopSTASH_eq(PL_curcop, PL_debstash))
1893 AV * const ary = cx->blk_sub.argarray;
1894 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1896 Perl_init_dbargs(aTHX);
1898 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1899 av_extend(PL_dbargs, AvFILLp(ary) + off);
1900 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1901 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1903 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1906 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1908 if (old_warnings == pWARN_NONE)
1909 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1910 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1911 mask = &PL_sv_undef ;
1912 else if (old_warnings == pWARN_ALL ||
1913 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1914 /* Get the bit mask for $warnings::Bits{all}, because
1915 * it could have been extended by warnings::register */
1917 HV * const bits = get_hv("warnings::Bits", 0);
1918 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1919 mask = newSVsv(*bits_all);
1922 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1926 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1930 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1931 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1942 if (MAXARG < 1 || (!TOPs && !POPs))
1943 tmps = NULL, len = 0;
1945 tmps = SvPVx_const(POPs, len);
1946 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1951 /* like pp_nextstate, but used instead when the debugger is active */
1956 PL_curcop = (COP*)PL_op;
1957 TAINT_NOT; /* Each statement is presumed innocent */
1958 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1963 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1964 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1968 const I32 gimme = G_ARRAY;
1970 GV * const gv = PL_DBgv;
1973 if (gv && isGV_with_GP(gv))
1976 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1977 DIE(aTHX_ "No DB::DB routine defined");
1979 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1980 /* don't do recursive DB::DB call */
1994 (void)(*CvXSUB(cv))(aTHX_ cv);
2000 PUSHBLOCK(cx, CXt_SUB, SP);
2002 cx->blk_sub.retop = PL_op->op_next;
2004 if (CvDEPTH(cv) >= 2) {
2005 PERL_STACK_OVERFLOW_CHECK();
2006 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2009 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2010 RETURNOP(CvSTART(cv));
2017 /* SVs on the stack that have any of the flags passed in are left as is.
2018 Other SVs are protected via the mortals stack if lvalue is true, and
2019 copied otherwise. */
2022 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2023 U32 flags, bool lvalue)
2026 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2028 if (flags & SVs_PADTMP) {
2029 flags &= ~SVs_PADTMP;
2032 if (gimme == G_SCALAR) {
2034 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2037 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2038 : sv_mortalcopy(*SP);
2040 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2043 *++MARK = &PL_sv_undef;
2047 else if (gimme == G_ARRAY) {
2048 /* in case LEAVE wipes old return values */
2049 while (++MARK <= SP) {
2050 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2054 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2055 : sv_mortalcopy(*MARK);
2056 TAINT_NOT; /* Each item is independent */
2059 /* When this function was called with MARK == newsp, we reach this
2060 * point with SP == newsp. */
2070 I32 gimme = GIMME_V;
2072 ENTER_with_name("block");
2075 PUSHBLOCK(cx, CXt_BLOCK, SP);
2088 if (PL_op->op_flags & OPf_SPECIAL) {
2089 cx = &cxstack[cxstack_ix];
2090 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2095 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2098 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2099 PL_op->op_private & OPpLVALUE);
2100 PL_curpm = newpm; /* Don't pop $1 et al till now */
2102 LEAVE_with_name("block");
2111 const I32 gimme = GIMME_V;
2112 void *itervar; /* location of the iteration variable */
2113 U8 cxtype = CXt_LOOP_FOR;
2115 ENTER_with_name("loop1");
2118 if (PL_op->op_targ) { /* "my" variable */
2119 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2120 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2121 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2122 SVs_PADSTALE, SVs_PADSTALE);
2124 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2126 itervar = PL_comppad;
2128 itervar = &PAD_SVl(PL_op->op_targ);
2131 else { /* symbol table variable */
2132 GV * const gv = MUTABLE_GV(POPs);
2133 SV** svp = &GvSV(gv);
2134 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2136 itervar = (void *)gv;
2139 if (PL_op->op_private & OPpITER_DEF)
2140 cxtype |= CXp_FOR_DEF;
2142 ENTER_with_name("loop2");
2144 PUSHBLOCK(cx, cxtype, SP);
2145 PUSHLOOP_FOR(cx, itervar, MARK);
2146 if (PL_op->op_flags & OPf_STACKED) {
2147 SV *maybe_ary = POPs;
2148 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2150 SV * const right = maybe_ary;
2153 if (RANGE_IS_NUMERIC(sv,right)) {
2154 cx->cx_type &= ~CXTYPEMASK;
2155 cx->cx_type |= CXt_LOOP_LAZYIV;
2156 /* Make sure that no-one re-orders cop.h and breaks our
2158 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2159 #ifdef NV_PRESERVES_UV
2160 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2161 (SvNV_nomg(sv) > (NV)IV_MAX)))
2163 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2164 (SvNV_nomg(right) < (NV)IV_MIN))))
2166 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2168 ((SvNV_nomg(sv) > 0) &&
2169 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2170 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2172 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2174 ((SvNV_nomg(right) > 0) &&
2175 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2176 (SvNV_nomg(right) > (NV)UV_MAX))
2179 DIE(aTHX_ "Range iterator outside integer range");
2180 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2181 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2183 /* for correct -Dstv display */
2184 cx->blk_oldsp = sp - PL_stack_base;
2188 cx->cx_type &= ~CXTYPEMASK;
2189 cx->cx_type |= CXt_LOOP_LAZYSV;
2190 /* Make sure that no-one re-orders cop.h and breaks our
2192 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2193 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2194 cx->blk_loop.state_u.lazysv.end = right;
2195 SvREFCNT_inc(right);
2196 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2197 /* This will do the upgrade to SVt_PV, and warn if the value
2198 is uninitialised. */
2199 (void) SvPV_nolen_const(right);
2200 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2201 to replace !SvOK() with a pointer to "". */
2203 SvREFCNT_dec(right);
2204 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2208 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2209 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2210 SvREFCNT_inc(maybe_ary);
2211 cx->blk_loop.state_u.ary.ix =
2212 (PL_op->op_private & OPpITER_REVERSED) ?
2213 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2217 else { /* iterating over items on the stack */
2218 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2219 if (PL_op->op_private & OPpITER_REVERSED) {
2220 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2223 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2234 const I32 gimme = GIMME_V;
2236 ENTER_with_name("loop1");
2238 ENTER_with_name("loop2");
2240 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2241 PUSHLOOP_PLAIN(cx, SP);
2256 assert(CxTYPE_is_LOOP(cx));
2258 newsp = PL_stack_base + cx->blk_loop.resetsp;
2261 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2262 PL_op->op_private & OPpLVALUE);
2265 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2266 PL_curpm = newpm; /* ... and pop $1 et al */
2268 LEAVE_with_name("loop2");
2269 LEAVE_with_name("loop1");
2275 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2276 PERL_CONTEXT *cx, PMOP *newpm)
2278 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2279 if (gimme == G_SCALAR) {
2280 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2282 const char *what = NULL;
2284 assert(MARK+1 == SP);
2285 if ((SvPADTMP(TOPs) ||
2286 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2289 !SvSMAGICAL(TOPs)) {
2291 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2292 : "a readonly value" : "a temporary";
2297 /* sub:lvalue{} will take us here. */
2306 "Can't return %s from lvalue subroutine", what
2311 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2312 if (!SvPADTMP(*SP)) {
2313 *++newsp = SvREFCNT_inc(*SP);
2318 /* FREETMPS could clobber it */
2319 SV *sv = SvREFCNT_inc(*SP);
2321 *++newsp = sv_mortalcopy(sv);
2328 ? sv_mortalcopy(*SP)
2330 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2335 *++newsp = &PL_sv_undef;
2337 if (CxLVAL(cx) & OPpDEREF) {
2340 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2344 else if (gimme == G_ARRAY) {
2345 assert (!(CxLVAL(cx) & OPpDEREF));
2346 if (ref || !CxLVAL(cx))
2347 while (++MARK <= SP)
2349 SvFLAGS(*MARK) & SVs_PADTMP
2350 ? sv_mortalcopy(*MARK)
2353 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2354 else while (++MARK <= SP) {
2355 if (*MARK != &PL_sv_undef
2357 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2362 /* Might be flattened array after $#array = */
2369 /* diag_listed_as: Can't return %s from lvalue subroutine */
2371 "Can't return a %s from lvalue subroutine",
2372 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2378 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2381 PL_stack_sp = newsp;
2388 bool popsub2 = FALSE;
2389 bool clear_errsv = FALSE;
2399 const I32 cxix = dopoptosub(cxstack_ix);
2402 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2403 * sort block, which is a CXt_NULL
2406 PL_stack_base[1] = *PL_stack_sp;
2407 PL_stack_sp = PL_stack_base + 1;
2411 DIE(aTHX_ "Can't return outside a subroutine");
2413 if (cxix < cxstack_ix)
2416 if (CxMULTICALL(&cxstack[cxix])) {
2417 gimme = cxstack[cxix].blk_gimme;
2418 if (gimme == G_VOID)
2419 PL_stack_sp = PL_stack_base;
2420 else if (gimme == G_SCALAR) {
2421 PL_stack_base[1] = *PL_stack_sp;
2422 PL_stack_sp = PL_stack_base + 1;
2428 switch (CxTYPE(cx)) {
2431 lval = !!CvLVALUE(cx->blk_sub.cv);
2432 retop = cx->blk_sub.retop;
2433 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2436 if (!(PL_in_eval & EVAL_KEEPERR))
2439 namesv = cx->blk_eval.old_namesv;
2440 retop = cx->blk_eval.retop;
2443 if (optype == OP_REQUIRE &&
2444 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2446 /* Unassume the success we assumed earlier. */
2447 (void)hv_delete(GvHVn(PL_incgv),
2448 SvPVX_const(namesv),
2449 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2451 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2455 retop = cx->blk_sub.retop;
2459 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2463 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2465 if (gimme == G_SCALAR) {
2468 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2469 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2470 && !SvMAGICAL(TOPs)) {
2471 *++newsp = SvREFCNT_inc(*SP);
2476 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2478 *++newsp = sv_mortalcopy(sv);
2482 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2483 && !SvMAGICAL(*SP)) {
2487 *++newsp = sv_mortalcopy(*SP);
2490 *++newsp = sv_mortalcopy(*SP);
2493 *++newsp = &PL_sv_undef;
2495 else if (gimme == G_ARRAY) {
2496 while (++MARK <= SP) {
2497 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2498 && !SvGMAGICAL(*MARK)
2499 ? *MARK : sv_mortalcopy(*MARK);
2500 TAINT_NOT; /* Each item is independent */
2503 PL_stack_sp = newsp;
2507 /* Stack values are safe: */
2510 POPSUB(cx,sv); /* release CV and @_ ... */
2514 PL_curpm = newpm; /* ... and pop $1 et al */
2523 /* This duplicates parts of pp_leavesub, so that it can share code with
2534 if (CxMULTICALL(&cxstack[cxstack_ix]))
2538 cxstack_ix++; /* temporarily protect top context */
2542 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2545 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2547 PL_curpm = newpm; /* ... and pop $1 et al */
2550 return cx->blk_sub.retop;
2554 S_unwind_loop(pTHX_ const char * const opname)
2558 if (PL_op->op_flags & OPf_SPECIAL) {
2559 cxix = dopoptoloop(cxstack_ix);
2561 /* diag_listed_as: Can't "last" outside a loop block */
2562 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2567 const char * const label =
2568 PL_op->op_flags & OPf_STACKED
2569 ? SvPV(TOPs,label_len)
2570 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2571 const U32 label_flags =
2572 PL_op->op_flags & OPf_STACKED
2574 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2576 cxix = dopoptolabel(label, label_len, label_flags);
2578 /* diag_listed_as: Label not found for "last %s" */
2579 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2581 SVfARG(PL_op->op_flags & OPf_STACKED
2582 && !SvGMAGICAL(TOPp1s)
2584 : newSVpvn_flags(label,
2586 label_flags | SVs_TEMP)));
2588 if (cxix < cxstack_ix)
2605 S_unwind_loop(aTHX_ "last");
2608 cxstack_ix++; /* temporarily protect top context */
2609 switch (CxTYPE(cx)) {
2610 case CXt_LOOP_LAZYIV:
2611 case CXt_LOOP_LAZYSV:
2613 case CXt_LOOP_PLAIN:
2615 newsp = PL_stack_base + cx->blk_loop.resetsp;
2616 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2620 nextop = cx->blk_sub.retop;
2624 nextop = cx->blk_eval.retop;
2628 nextop = cx->blk_sub.retop;
2631 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2635 PL_stack_sp = newsp;
2639 /* Stack values are safe: */
2641 case CXt_LOOP_LAZYIV:
2642 case CXt_LOOP_PLAIN:
2643 case CXt_LOOP_LAZYSV:
2645 POPLOOP(cx); /* release loop vars ... */
2649 POPSUB(cx,sv); /* release CV and @_ ... */
2652 PL_curpm = newpm; /* ... and pop $1 et al */
2655 PERL_UNUSED_VAR(optype);
2656 PERL_UNUSED_VAR(gimme);
2664 const I32 inner = PL_scopestack_ix;
2666 S_unwind_loop(aTHX_ "next");
2668 /* clear off anything above the scope we're re-entering, but
2669 * save the rest until after a possible continue block */
2671 if (PL_scopestack_ix < inner)
2672 leave_scope(PL_scopestack[PL_scopestack_ix]);
2673 PL_curcop = cx->blk_oldcop;
2675 return (cx)->blk_loop.my_op->op_nextop;
2681 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2684 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2686 if (redo_op->op_type == OP_ENTER) {
2687 /* pop one less context to avoid $x being freed in while (my $x..) */
2689 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2690 redo_op = redo_op->op_next;
2694 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2695 LEAVE_SCOPE(oldsave);
2697 PL_curcop = cx->blk_oldcop;
2703 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2707 static const char* const too_deep = "Target of goto is too deeply nested";
2709 PERL_ARGS_ASSERT_DOFINDLABEL;
2712 Perl_croak(aTHX_ "%s", too_deep);
2713 if (o->op_type == OP_LEAVE ||
2714 o->op_type == OP_SCOPE ||
2715 o->op_type == OP_LEAVELOOP ||
2716 o->op_type == OP_LEAVESUB ||
2717 o->op_type == OP_LEAVETRY)
2719 *ops++ = cUNOPo->op_first;
2721 Perl_croak(aTHX_ "%s", too_deep);
2724 if (o->op_flags & OPf_KIDS) {
2726 /* First try all the kids at this level, since that's likeliest. */
2727 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2728 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2729 STRLEN kid_label_len;
2730 U32 kid_label_flags;
2731 const char *kid_label = CopLABEL_len_flags(kCOP,
2732 &kid_label_len, &kid_label_flags);
2734 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2737 (const U8*)kid_label, kid_label_len,
2738 (const U8*)label, len) == 0)
2740 (const U8*)label, len,
2741 (const U8*)kid_label, kid_label_len) == 0)
2742 : ( len == kid_label_len && ((kid_label == label)
2743 || memEQ(kid_label, label, len)))))
2747 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2748 if (kid == PL_lastgotoprobe)
2750 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2753 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2754 ops[-1]->op_type == OP_DBSTATE)
2759 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2767 PP(pp_goto) /* also pp_dump */
2773 #define GOTO_DEPTH 64
2774 OP *enterops[GOTO_DEPTH];
2775 const char *label = NULL;
2776 STRLEN label_len = 0;
2777 U32 label_flags = 0;
2778 const bool do_dump = (PL_op->op_type == OP_DUMP);
2779 static const char* const must_have_label = "goto must have label";
2781 if (PL_op->op_flags & OPf_STACKED) {
2782 /* goto EXPR or goto &foo */
2784 SV * const sv = POPs;
2787 /* This egregious kludge implements goto &subroutine */
2788 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2791 CV *cv = MUTABLE_CV(SvRV(sv));
2792 AV *arg = GvAV(PL_defgv);
2796 if (!CvROOT(cv) && !CvXSUB(cv)) {
2797 const GV * const gv = CvGV(cv);
2801 /* autoloaded stub? */
2802 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2804 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2806 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2807 if (autogv && (cv = GvCV(autogv)))
2809 tmpstr = sv_newmortal();
2810 gv_efullname3(tmpstr, gv, NULL);
2811 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2813 DIE(aTHX_ "Goto undefined subroutine");
2816 /* First do some returnish stuff. */
2817 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2819 cxix = dopoptosub(cxstack_ix);
2820 if (cxix < cxstack_ix) {
2823 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2829 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2830 if (CxTYPE(cx) == CXt_EVAL) {
2833 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2834 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2836 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2837 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2839 else if (CxMULTICALL(cx))
2842 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2844 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2845 AV* av = cx->blk_sub.argarray;
2847 /* abandon the original @_ if it got reified or if it is
2848 the same as the current @_ */
2849 if (AvREAL(av) || av == arg) {
2853 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2855 else CLEAR_ARGARRAY(av);
2857 /* We donate this refcount later to the callee’s pad. */
2858 SvREFCNT_inc_simple_void(arg);
2859 if (CxTYPE(cx) == CXt_SUB &&
2860 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2861 SvREFCNT_dec(cx->blk_sub.cv);
2862 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2863 LEAVE_SCOPE(oldsave);
2865 /* A destructor called during LEAVE_SCOPE could have undefined
2866 * our precious cv. See bug #99850. */
2867 if (!CvROOT(cv) && !CvXSUB(cv)) {
2868 const GV * const gv = CvGV(cv);
2871 SV * const tmpstr = sv_newmortal();
2872 gv_efullname3(tmpstr, gv, NULL);
2873 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2876 DIE(aTHX_ "Goto undefined subroutine");
2879 /* Now do some callish stuff. */
2881 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2883 OP* const retop = cx->blk_sub.retop;
2886 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2887 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2890 PERL_UNUSED_VAR(newsp);
2891 PERL_UNUSED_VAR(gimme);
2893 /* put GvAV(defgv) back onto stack */
2895 EXTEND(SP, items+1); /* @_ could have been extended. */
2900 bool r = cBOOL(AvREAL(arg));
2901 for (index=0; index<items; index++)
2905 SV ** const svp = av_fetch(arg, index, 0);
2906 sv = svp ? *svp : NULL;
2908 else sv = AvARRAY(arg)[index];
2910 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2911 : sv_2mortal(newSVavdefelem(arg, index, 1));
2916 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2917 /* Restore old @_ */
2918 arg = GvAV(PL_defgv);
2919 GvAV(PL_defgv) = cx->blk_sub.savearray;
2923 /* XS subs don't have a CxSUB, so pop it */
2924 POPBLOCK(cx, PL_curpm);
2925 /* Push a mark for the start of arglist */
2928 (void)(*CvXSUB(cv))(aTHX_ cv);
2934 PADLIST * const padlist = CvPADLIST(cv);
2935 cx->blk_sub.cv = cv;
2936 cx->blk_sub.olddepth = CvDEPTH(cv);
2939 if (CvDEPTH(cv) < 2)
2940 SvREFCNT_inc_simple_void_NN(cv);
2942 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2943 sub_crush_depth(cv);
2944 pad_push(padlist, CvDEPTH(cv));
2946 PL_curcop = cx->blk_oldcop;
2948 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2951 CX_CURPAD_SAVE(cx->blk_sub);
2953 /* cx->blk_sub.argarray has no reference count, so we
2954 need something to hang on to our argument array so
2955 that cx->blk_sub.argarray does not end up pointing
2956 to freed memory as the result of undef *_. So put
2957 it in the callee’s pad, donating our refer-
2960 SvREFCNT_dec(PAD_SVl(0));
2961 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2964 /* GvAV(PL_defgv) might have been modified on scope
2965 exit, so restore it. */
2966 if (arg != GvAV(PL_defgv)) {
2967 AV * const av = GvAV(PL_defgv);
2968 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2972 else SvREFCNT_dec(arg);
2973 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2974 Perl_get_db_sub(aTHX_ NULL, cv);
2976 CV * const gotocv = get_cvs("DB::goto", 0);
2978 PUSHMARK( PL_stack_sp );
2979 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2985 RETURNOP(CvSTART(cv));
2990 label = SvPV_nomg_const(sv, label_len);
2991 label_flags = SvUTF8(sv);
2994 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2995 /* goto LABEL or dump LABEL */
2996 label = cPVOP->op_pv;
2997 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2998 label_len = strlen(label);
3000 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3005 OP *gotoprobe = NULL;
3006 bool leaving_eval = FALSE;
3007 bool in_block = FALSE;
3008 PERL_CONTEXT *last_eval_cx = NULL;
3012 PL_lastgotoprobe = NULL;
3014 for (ix = cxstack_ix; ix >= 0; ix--) {
3016 switch (CxTYPE(cx)) {
3018 leaving_eval = TRUE;
3019 if (!CxTRYBLOCK(cx)) {
3020 gotoprobe = (last_eval_cx ?
3021 last_eval_cx->blk_eval.old_eval_root :
3026 /* else fall through */
3027 case CXt_LOOP_LAZYIV:
3028 case CXt_LOOP_LAZYSV:
3030 case CXt_LOOP_PLAIN:
3033 gotoprobe = cx->blk_oldcop->op_sibling;
3039 gotoprobe = cx->blk_oldcop->op_sibling;
3042 gotoprobe = PL_main_root;
3045 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3046 gotoprobe = CvROOT(cx->blk_sub.cv);
3052 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3055 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3056 CxTYPE(cx), (long) ix);
3057 gotoprobe = PL_main_root;
3061 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3062 enterops, enterops + GOTO_DEPTH);
3065 if (gotoprobe->op_sibling &&
3066 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3067 gotoprobe->op_sibling->op_sibling) {
3068 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3069 label, label_len, label_flags, enterops,
3070 enterops + GOTO_DEPTH);
3075 PL_lastgotoprobe = gotoprobe;
3078 DIE(aTHX_ "Can't find label %"UTF8f,
3079 UTF8fARG(label_flags, label_len, label));
3081 /* if we're leaving an eval, check before we pop any frames
3082 that we're not going to punt, otherwise the error
3085 if (leaving_eval && *enterops && enterops[1]) {
3087 for (i = 1; enterops[i]; i++)
3088 if (enterops[i]->op_type == OP_ENTERITER)
3089 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3092 if (*enterops && enterops[1]) {
3093 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3095 deprecate("\"goto\" to jump into a construct");
3098 /* pop unwanted frames */
3100 if (ix < cxstack_ix) {
3104 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3107 oldsave = PL_scopestack[PL_scopestack_ix];
3108 LEAVE_SCOPE(oldsave);
3111 /* push wanted frames */
3113 if (*enterops && enterops[1]) {
3114 OP * const oldop = PL_op;
3115 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3116 for (; enterops[ix]; ix++) {
3117 PL_op = enterops[ix];
3118 /* Eventually we may want to stack the needed arguments
3119 * for each op. For now, we punt on the hard ones. */
3120 if (PL_op->op_type == OP_ENTERITER)
3121 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3122 PL_op->op_ppaddr(aTHX);
3130 if (!retop) retop = PL_main_start;
3132 PL_restartop = retop;
3133 PL_do_undump = TRUE;
3137 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3138 PL_do_undump = FALSE;
3154 anum = 0; (void)POPs;
3160 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3163 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3166 PL_exit_flags |= PERL_EXIT_EXPECTED;
3168 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3169 if (anum || !(PL_minus_c && PL_madskills))
3174 PUSHs(&PL_sv_undef);
3181 S_save_lines(pTHX_ AV *array, SV *sv)
3183 const char *s = SvPVX_const(sv);
3184 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3187 PERL_ARGS_ASSERT_SAVE_LINES;
3189 while (s && s < send) {
3191 SV * const tmpstr = newSV_type(SVt_PVMG);
3193 t = (const char *)memchr(s, '\n', send - s);
3199 sv_setpvn(tmpstr, s, t - s);
3200 av_store(array, line++, tmpstr);
3208 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3210 0 is used as continue inside eval,
3212 3 is used for a die caught by an inner eval - continue inner loop
3214 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3215 establish a local jmpenv to handle exception traps.
3220 S_docatch(pTHX_ OP *o)
3224 OP * const oldop = PL_op;
3228 assert(CATCH_GET == TRUE);
3235 assert(cxstack_ix >= 0);
3236 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3237 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3242 /* die caught by an inner eval - continue inner loop */
3243 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3244 PL_restartjmpenv = NULL;
3245 PL_op = PL_restartop;
3254 assert(0); /* NOTREACHED */
3263 =for apidoc find_runcv
3265 Locate the CV corresponding to the currently executing sub or eval.
3266 If db_seqp is non_null, skip CVs that are in the DB package and populate
3267 *db_seqp with the cop sequence number at the point that the DB:: code was
3268 entered. (This allows debuggers to eval in the scope of the breakpoint
3269 rather than in the scope of the debugger itself.)
3275 Perl_find_runcv(pTHX_ U32 *db_seqp)
3277 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3280 /* If this becomes part of the API, it might need a better name. */
3282 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3290 PL_curcop == &PL_compiling
3292 : PL_curcop->cop_seq;
3294 for (si = PL_curstackinfo; si; si = si->si_prev) {
3296 for (ix = si->si_cxix; ix >= 0; ix--) {
3297 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3299 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3300 cv = cx->blk_sub.cv;
3301 /* skip DB:: code */
3302 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3303 *db_seqp = cx->blk_oldcop->cop_seq;
3306 if (cx->cx_type & CXp_SUB_RE)
3309 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3310 cv = cx->blk_eval.cv;
3313 case FIND_RUNCV_padid_eq:
3315 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3318 case FIND_RUNCV_level_eq:
3319 if (level++ != arg) continue;
3327 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3331 /* Run yyparse() in a setjmp wrapper. Returns:
3332 * 0: yyparse() successful
3333 * 1: yyparse() failed
3337 S_try_yyparse(pTHX_ int gramtype)
3342 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3346 ret = yyparse(gramtype) ? 1 : 0;
3353 assert(0); /* NOTREACHED */
3360 /* Compile a require/do or an eval ''.
3362 * outside is the lexically enclosing CV (if any) that invoked us.
3363 * seq is the current COP scope value.
3364 * hh is the saved hints hash, if any.
3366 * Returns a bool indicating whether the compile was successful; if so,
3367 * PL_eval_start contains the first op of the compiled code; otherwise,
3370 * This function is called from two places: pp_require and pp_entereval.
3371 * These can be distinguished by whether PL_op is entereval.
3375 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3378 OP * const saveop = PL_op;
3379 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3380 COP * const oldcurcop = PL_curcop;
3381 bool in_require = (saveop->op_type == OP_REQUIRE);
3385 PL_in_eval = (in_require
3386 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3388 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3389 ? EVAL_RE_REPARSING : 0)));
3393 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3395 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3396 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3397 cxstack[cxstack_ix].blk_gimme = gimme;
3399 CvOUTSIDE_SEQ(evalcv) = seq;
3400 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3402 /* set up a scratch pad */
3404 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3405 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3409 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3411 /* make sure we compile in the right package */
3413 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3414 SAVEGENERICSV(PL_curstash);
3415 PL_curstash = (HV *)CopSTASH(PL_curcop);
3416 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3417 else SvREFCNT_inc_simple_void(PL_curstash);
3419 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3420 SAVESPTR(PL_beginav);
3421 PL_beginav = newAV();
3422 SAVEFREESV(PL_beginav);
3423 SAVESPTR(PL_unitcheckav);
3424 PL_unitcheckav = newAV();
3425 SAVEFREESV(PL_unitcheckav);
3428 SAVEBOOL(PL_madskills);
3432 ENTER_with_name("evalcomp");
3433 SAVESPTR(PL_compcv);
3436 /* try to compile it */
3438 PL_eval_root = NULL;
3439 PL_curcop = &PL_compiling;
3440 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3441 PL_in_eval |= EVAL_KEEPERR;
3448 hv_clear(GvHV(PL_hintgv));
3451 PL_hints = saveop->op_private & OPpEVAL_COPHH
3452 ? oldcurcop->cop_hints : saveop->op_targ;
3454 /* making 'use re eval' not be in scope when compiling the
3455 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3456 * infinite recursion when S_has_runtime_code() gives a false
3457 * positive: the second time round, HINT_RE_EVAL isn't set so we
3458 * don't bother calling S_has_runtime_code() */
3459 if (PL_in_eval & EVAL_RE_REPARSING)
3460 PL_hints &= ~HINT_RE_EVAL;
3463 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3464 SvREFCNT_dec(GvHV(PL_hintgv));
3465 GvHV(PL_hintgv) = hh;
3468 SAVECOMPILEWARNINGS();
3470 if (PL_dowarn & G_WARN_ALL_ON)
3471 PL_compiling.cop_warnings = pWARN_ALL ;
3472 else if (PL_dowarn & G_WARN_ALL_OFF)
3473 PL_compiling.cop_warnings = pWARN_NONE ;
3475 PL_compiling.cop_warnings = pWARN_STD ;
3478 PL_compiling.cop_warnings =
3479 DUP_WARNINGS(oldcurcop->cop_warnings);
3480 cophh_free(CopHINTHASH_get(&PL_compiling));
3481 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3482 /* The label, if present, is the first entry on the chain. So rather
3483 than writing a blank label in front of it (which involves an
3484 allocation), just use the next entry in the chain. */
3485 PL_compiling.cop_hints_hash
3486 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3487 /* Check the assumption that this removed the label. */
3488 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3491 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3494 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3496 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3497 * so honour CATCH_GET and trap it here if necessary */
3499 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3501 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3502 SV **newsp; /* Used by POPBLOCK. */
3504 I32 optype; /* Used by POPEVAL. */
3510 PERL_UNUSED_VAR(newsp);
3511 PERL_UNUSED_VAR(optype);
3513 /* note that if yystatus == 3, then the EVAL CX block has already
3514 * been popped, and various vars restored */
3516 if (yystatus != 3) {
3518 op_free(PL_eval_root);
3519 PL_eval_root = NULL;
3521 SP = PL_stack_base + POPMARK; /* pop original mark */
3522 POPBLOCK(cx,PL_curpm);
3524 namesv = cx->blk_eval.old_namesv;
3525 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3526 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3532 /* If cx is still NULL, it means that we didn't go in the
3533 * POPEVAL branch. */
3534 cx = &cxstack[cxstack_ix];
3535 assert(CxTYPE(cx) == CXt_EVAL);
3536 namesv = cx->blk_eval.old_namesv;
3538 (void)hv_store(GvHVn(PL_incgv),
3539 SvPVX_const(namesv),
3540 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3542 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3545 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3548 if (!*(SvPV_nolen_const(errsv))) {
3549 sv_setpvs(errsv, "Compilation error");
3552 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3557 LEAVE_with_name("evalcomp");
3559 CopLINE_set(&PL_compiling, 0);
3560 SAVEFREEOP(PL_eval_root);
3561 cv_forget_slab(evalcv);
3563 DEBUG_x(dump_eval());
3565 /* Register with debugger: */
3566 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3567 CV * const cv = get_cvs("DB::postponed", 0);
3571 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3573 call_sv(MUTABLE_SV(cv), G_DISCARD);
3577 if (PL_unitcheckav) {
3578 OP *es = PL_eval_start;
3579 call_list(PL_scopestack_ix, PL_unitcheckav);
3583 /* compiled okay, so do it */
3585 CvDEPTH(evalcv) = 1;
3586 SP = PL_stack_base + POPMARK; /* pop original mark */
3587 PL_op = saveop; /* The caller may need it. */
3588 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3595 S_check_type_and_open(pTHX_ SV *name)
3599 const char *p = SvPV_const(name, len);
3602 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3604 /* checking here captures a reasonable error message when
3605 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3606 * user gets a confusing message about looking for the .pmc file
3607 * rather than for the .pm file.
3608 * This check prevents a \0 in @INC causing problems.
3610 if (!IS_SAFE_PATHNAME(p, len, "require"))
3613 /* we use the value of errno later to see how stat() or open() failed.
3614 * We don't want it set if the stat succeeded but we still failed,
3615 * such as if the name exists, but is a directory */
3618 st_rc = PerlLIO_stat(p, &st);
3620 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3624 #if !defined(PERLIO_IS_STDIO)
3625 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3627 return PerlIO_open(p, PERL_SCRIPT_MODE);
3631 #ifndef PERL_DISABLE_PMC
3633 S_doopen_pm(pTHX_ SV *name)
3636 const char *p = SvPV_const(name, namelen);
3638 PERL_ARGS_ASSERT_DOOPEN_PM;
3640 /* check the name before trying for the .pmc name to avoid the
3641 * warning referring to the .pmc which the user probably doesn't
3642 * know or care about
3644 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3647 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3648 SV *const pmcsv = sv_newmortal();
3651 SvSetSV_nosteal(pmcsv,name);
3652 sv_catpvn(pmcsv, "c", 1);
3654 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3655 return check_type_and_open(pmcsv);
3657 return check_type_and_open(name);
3660 # define doopen_pm(name) check_type_and_open(name)
3661 #endif /* !PERL_DISABLE_PMC */
3663 /* require doesn't search for absolute names, or when the name is
3664 explicity relative the current directory */
3665 PERL_STATIC_INLINE bool
3666 S_path_is_searchable(const char *name)
3668 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3670 if (PERL_FILE_IS_ABSOLUTE(name)
3672 || (*name == '.' && ((name[1] == '/' ||
3673 (name[1] == '.' && name[2] == '/'))
3674 || (name[1] == '\\' ||
3675 ( name[1] == '.' && name[2] == '\\')))
3678 || (*name == '.' && (name[1] == '/' ||
3679 (name[1] == '.' && name[2] == '/')))
3699 int vms_unixname = 0;
3702 const char *tryname = NULL;
3704 const I32 gimme = GIMME_V;
3705 int filter_has_file = 0;
3706 PerlIO *tryrsfp = NULL;
3707 SV *filter_cache = NULL;
3708 SV *filter_state = NULL;
3709 SV *filter_sub = NULL;
3714 bool path_searchable;
3717 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3718 sv = sv_2mortal(new_version(sv));
3719 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3720 upg_version(PL_patchlevel, TRUE);
3721 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3722 if ( vcmp(sv,PL_patchlevel) <= 0 )
3723 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3724 SVfARG(sv_2mortal(vnormal(sv))),
3725 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3729 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3732 SV * const req = SvRV(sv);
3733 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3735 /* get the left hand term */
3736 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3738 first = SvIV(*av_fetch(lav,0,0));
3739 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3740 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3741 || av_tindex(lav) > 1 /* FP with > 3 digits */
3742 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3744 DIE(aTHX_ "Perl %"SVf" required--this is only "
3746 SVfARG(sv_2mortal(vnormal(req))),
3747 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3750 else { /* probably 'use 5.10' or 'use 5.8' */
3754 if (av_tindex(lav)>=1)
3755 second = SvIV(*av_fetch(lav,1,0));
3757 second /= second >= 600 ? 100 : 10;
3758 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3759 (int)first, (int)second);
3760 upg_version(hintsv, TRUE);
3762 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3763 "--this is only %"SVf", stopped",
3764 SVfARG(sv_2mortal(vnormal(req))),
3765 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3766 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3774 name = SvPV_const(sv, len);
3775 if (!(name && len > 0 && *name))
3776 DIE(aTHX_ "Null filename used");
3777 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3778 DIE(aTHX_ "Can't locate %s: %s",
3779 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3780 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3783 TAINT_PROPER("require");
3785 path_searchable = path_is_searchable(name);
3788 /* The key in the %ENV hash is in the syntax of file passed as the argument
3789 * usually this is in UNIX format, but sometimes in VMS format, which
3790 * can result in a module being pulled in more than once.
3791 * To prevent this, the key must be stored in UNIX format if the VMS
3792 * name can be translated to UNIX.
3796 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3798 unixlen = strlen(unixname);
3804 /* if not VMS or VMS name can not be translated to UNIX, pass it
3807 unixname = (char *) name;
3810 if (PL_op->op_type == OP_REQUIRE) {
3811 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3812 unixname, unixlen, 0);
3814 if (*svp != &PL_sv_undef)
3817 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3818 "Compilation failed in require", unixname);
3822 LOADING_FILE_PROBE(unixname);
3824 /* prepare to compile file */
3826 if (!path_searchable) {
3827 /* At this point, name is SvPVX(sv) */
3829 tryrsfp = doopen_pm(sv);
3831 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3832 AV * const ar = GvAVn(PL_incgv);
3839 namesv = newSV_type(SVt_PV);
3840 for (i = 0; i <= AvFILL(ar); i++) {
3841 SV * const dirsv = *av_fetch(ar, i, TRUE);
3849 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3850 && !SvOBJECT(SvRV(loader)))
3852 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3856 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3857 PTR2UV(SvRV(dirsv)), name);
3858 tryname = SvPVX_const(namesv);
3861 if (SvPADTMP(nsv)) {
3862 nsv = sv_newmortal();
3863 SvSetSV_nosteal(nsv,sv);
3866 ENTER_with_name("call_INC");
3874 if (SvGMAGICAL(loader)) {
3875 SV *l = sv_newmortal();
3876 sv_setsv_nomg(l, loader);
3879 if (sv_isobject(loader))
3880 count = call_method("INC", G_ARRAY);
3882 count = call_sv(loader, G_ARRAY);
3892 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3893 && !isGV_with_GP(SvRV(arg))) {
3894 filter_cache = SvRV(arg);
3901 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3905 if (isGV_with_GP(arg)) {
3906 IO * const io = GvIO((const GV *)arg);
3911 tryrsfp = IoIFP(io);
3912 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3913 PerlIO_close(IoOFP(io));
3924 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3926 SvREFCNT_inc_simple_void_NN(filter_sub);
3929 filter_state = SP[i];
3930 SvREFCNT_inc_simple_void(filter_state);
3934 if (!tryrsfp && (filter_cache || filter_sub)) {
3935 tryrsfp = PerlIO_open(BIT_BUCKET,
3941 /* FREETMPS may free our filter_cache */
3942 SvREFCNT_inc_simple_void(filter_cache);
3946 LEAVE_with_name("call_INC");
3948 /* Now re-mortalize it. */
3949 sv_2mortal(filter_cache);
3951 /* Adjust file name if the hook has set an %INC entry.
3952 This needs to happen after the FREETMPS above. */
3953 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3955 tryname = SvPV_nolen_const(*svp);
3962 filter_has_file = 0;
3963 filter_cache = NULL;
3965 SvREFCNT_dec(filter_state);
3966 filter_state = NULL;
3969 SvREFCNT_dec(filter_sub);
3974 if (path_searchable) {
3979 dir = SvPV_nomg_const(dirsv, dirlen);
3985 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3989 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3992 sv_setpv(namesv, unixdir);
3993 sv_catpv(namesv, unixname);
3995 # ifdef __SYMBIAN32__
3996 if (PL_origfilename[0] &&
3997 PL_origfilename[1] == ':' &&
3998 !(dir[0] && dir[1] == ':'))
3999 Perl_sv_setpvf(aTHX_ namesv,
4004 Perl_sv_setpvf(aTHX_ namesv,
4008 /* The equivalent of
4009 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4010 but without the need to parse the format string, or
4011 call strlen on either pointer, and with the correct
4012 allocation up front. */
4014 char *tmp = SvGROW(namesv, dirlen + len + 2);
4016 memcpy(tmp, dir, dirlen);
4019 /* Avoid '<dir>//<file>' */
4020 if (!dirlen || *(tmp-1) != '/') {
4023 /* So SvCUR_set reports the correct length below */
4027 /* name came from an SV, so it will have a '\0' at the
4028 end that we can copy as part of this memcpy(). */
4029 memcpy(tmp, name, len + 1);
4031 SvCUR_set(namesv, dirlen + len + 1);
4036 TAINT_PROPER("require");
4037 tryname = SvPVX_const(namesv);
4038 tryrsfp = doopen_pm(namesv);
4040 if (tryname[0] == '.' && tryname[1] == '/') {
4042 while (*++tryname == '/') {}
4046 else if (errno == EMFILE || errno == EACCES) {
4047 /* no point in trying other paths if out of handles;
4048 * on the other hand, if we couldn't open one of the
4049 * files, then going on with the search could lead to
4050 * unexpected results; see perl #113422
4059 saved_errno = errno; /* sv_2mortal can realloc things */
4062 if (PL_op->op_type == OP_REQUIRE) {
4063 if(saved_errno == EMFILE || saved_errno == EACCES) {
4064 /* diag_listed_as: Can't locate %s */
4065 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4067 if (namesv) { /* did we lookup @INC? */
4068 AV * const ar = GvAVn(PL_incgv);
4070 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4071 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4072 for (i = 0; i <= AvFILL(ar); i++) {
4073 sv_catpvs(inc, " ");
4074 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4076 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4077 const char *c, *e = name + len - 3;
4078 sv_catpv(msg, " (you may need to install the ");
4079 for (c = name; c < e; c++) {
4081 sv_catpvn(msg, "::", 2);
4084 sv_catpvn(msg, c, 1);
4087 sv_catpv(msg, " module)");
4089 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4090 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4092 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4093 sv_catpv(msg, " (did you run h2ph?)");
4096 /* diag_listed_as: Can't locate %s */
4098 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4102 DIE(aTHX_ "Can't locate %s", name);
4109 SETERRNO(0, SS_NORMAL);
4111 /* Assume success here to prevent recursive requirement. */
4112 /* name is never assigned to again, so len is still strlen(name) */
4113 /* Check whether a hook in @INC has already filled %INC */
4115 (void)hv_store(GvHVn(PL_incgv),
4116 unixname, unixlen, newSVpv(tryname,0),0);
4118 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4120 (void)hv_store(GvHVn(PL_incgv),
4121 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4124 ENTER_with_name("eval");
4126 SAVECOPFILE_FREE(&PL_compiling);
4127 CopFILE_set(&PL_compiling, tryname);
4128 lex_start(NULL, tryrsfp, 0);
4130 if (filter_sub || filter_cache) {
4131 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4132 than hanging another SV from it. In turn, filter_add() optionally
4133 takes the SV to use as the filter (or creates a new SV if passed
4134 NULL), so simply pass in whatever value filter_cache has. */
4135 SV * const fc = filter_cache ? newSV(0) : NULL;
4137 if (fc) sv_copypv(fc, filter_cache);
4138 datasv = filter_add(S_run_user_filter, fc);
4139 IoLINES(datasv) = filter_has_file;
4140 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4141 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4144 /* switch to eval mode */
4145 PUSHBLOCK(cx, CXt_EVAL, SP);
4147 cx->blk_eval.retop = PL_op->op_next;
4149 SAVECOPLINE(&PL_compiling);
4150 CopLINE_set(&PL_compiling, 0);
4154 /* Store and reset encoding. */
4155 encoding = PL_encoding;
4158 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4159 op = DOCATCH(PL_eval_start);
4161 op = PL_op->op_next;
4163 /* Restore encoding. */
4164 PL_encoding = encoding;
4166 LOADED_FILE_PROBE(unixname);
4171 /* This is a op added to hold the hints hash for
4172 pp_entereval. The hash can be modified by the code
4173 being eval'ed, so we return a copy instead. */
4179 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4189 const I32 gimme = GIMME_V;
4190 const U32 was = PL_breakable_sub_gen;
4191 char tbuf[TYPE_DIGITS(long) + 12];
4192 bool saved_delete = FALSE;
4193 char *tmpbuf = tbuf;
4196 U32 seq, lex_flags = 0;
4197 HV *saved_hh = NULL;
4198 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4200 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4201 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4203 else if (PL_hints & HINT_LOCALIZE_HH || (
4204 PL_op->op_private & OPpEVAL_COPHH
4205 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4207 saved_hh = cop_hints_2hv(PL_curcop, 0);
4208 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4212 /* make sure we've got a plain PV (no overload etc) before testing
4213 * for taint. Making a copy here is probably overkill, but better
4214 * safe than sorry */
4216 const char * const p = SvPV_const(sv, len);
4218 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4219 lex_flags |= LEX_START_COPIED;
4221 if (bytes && SvUTF8(sv))
4222 SvPVbyte_force(sv, len);
4224 else if (bytes && SvUTF8(sv)) {
4225 /* Don't modify someone else's scalar */
4228 (void)sv_2mortal(sv);
4229 SvPVbyte_force(sv,len);
4230 lex_flags |= LEX_START_COPIED;
4233 TAINT_IF(SvTAINTED(sv));
4234 TAINT_PROPER("eval");
4236 ENTER_with_name("eval");
4237 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4238 ? LEX_IGNORE_UTF8_HINTS
4239 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4244 /* switch to eval mode */
4246 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4247 SV * const temp_sv = sv_newmortal();
4248 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4249 (unsigned long)++PL_evalseq,
4250 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4251 tmpbuf = SvPVX(temp_sv);
4252 len = SvCUR(temp_sv);
4255 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4256 SAVECOPFILE_FREE(&PL_compiling);
4257 CopFILE_set(&PL_compiling, tmpbuf+2);
4258 SAVECOPLINE(&PL_compiling);
4259 CopLINE_set(&PL_compiling, 1);
4260 /* special case: an eval '' executed within the DB package gets lexically
4261 * placed in the first non-DB CV rather than the current CV - this
4262 * allows the debugger to execute code, find lexicals etc, in the
4263 * scope of the code being debugged. Passing &seq gets find_runcv
4264 * to do the dirty work for us */
4265 runcv = find_runcv(&seq);
4267 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4269 cx->blk_eval.retop = PL_op->op_next;
4271 /* prepare to compile string */
4273 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4274 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4276 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4277 deleting the eval's FILEGV from the stash before gv_check() runs
4278 (i.e. before run-time proper). To work around the coredump that
4279 ensues, we always turn GvMULTI_on for any globals that were
4280 introduced within evals. See force_ident(). GSAR 96-10-12 */
4281 char *const safestr = savepvn(tmpbuf, len);
4282 SAVEDELETE(PL_defstash, safestr, len);
4283 saved_delete = TRUE;
4288 if (doeval(gimme, runcv, seq, saved_hh)) {
4289 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4290 ? (PERLDB_LINE || PERLDB_SAVESRC)
4291 : PERLDB_SAVESRC_NOSUBS) {
4292 /* Retain the filegv we created. */
4293 } else if (!saved_delete) {
4294 char *const safestr = savepvn(tmpbuf, len);
4295 SAVEDELETE(PL_defstash, safestr, len);
4297 return DOCATCH(PL_eval_start);
4299 /* We have already left the scope set up earlier thanks to the LEAVE
4301 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4302 ? (PERLDB_LINE || PERLDB_SAVESRC)
4303 : PERLDB_SAVESRC_INVALID) {
4304 /* Retain the filegv we created. */
4305 } else if (!saved_delete) {
4306 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4308 return PL_op->op_next;
4320 const U8 save_flags = PL_op -> op_flags;
4328 namesv = cx->blk_eval.old_namesv;
4329 retop = cx->blk_eval.retop;
4330 evalcv = cx->blk_eval.cv;
4333 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4334 gimme, SVs_TEMP, FALSE);
4335 PL_curpm = newpm; /* Don't pop $1 et al till now */
4338 assert(CvDEPTH(evalcv) == 1);
4340 CvDEPTH(evalcv) = 0;
4342 if (optype == OP_REQUIRE &&
4343 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4345 /* Unassume the success we assumed earlier. */
4346 (void)hv_delete(GvHVn(PL_incgv),
4347 SvPVX_const(namesv),
4348 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4350 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4352 /* die_unwind() did LEAVE, or we won't be here */
4355 LEAVE_with_name("eval");
4356 if (!(save_flags & OPf_SPECIAL)) {
4364 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4365 close to the related Perl_create_eval_scope. */
4367 Perl_delete_eval_scope(pTHX)
4378 LEAVE_with_name("eval_scope");
4379 PERL_UNUSED_VAR(newsp);
4380 PERL_UNUSED_VAR(gimme);
4381 PERL_UNUSED_VAR(optype);
4384 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4385 also needed by Perl_fold_constants. */
4387 Perl_create_eval_scope(pTHX_ U32 flags)
4390 const I32 gimme = GIMME_V;
4392 ENTER_with_name("eval_scope");
4395 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4398 PL_in_eval = EVAL_INEVAL;
4399 if (flags & G_KEEPERR)
4400 PL_in_eval |= EVAL_KEEPERR;
4403 if (flags & G_FAKINGEVAL) {
4404 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4412 PERL_CONTEXT * const cx = create_eval_scope(0);
4413 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4414 return DOCATCH(PL_op->op_next);
4429 PERL_UNUSED_VAR(optype);
4432 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4433 SVs_PADTMP|SVs_TEMP, FALSE);
4434 PL_curpm = newpm; /* Don't pop $1 et al till now */
4436 LEAVE_with_name("eval_scope");
4445 const I32 gimme = GIMME_V;
4447 ENTER_with_name("given");
4450 if (PL_op->op_targ) {
4451 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4452 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4453 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4460 PUSHBLOCK(cx, CXt_GIVEN, SP);
4473 PERL_UNUSED_CONTEXT;