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))
45 const PERL_CONTEXT *cx;
48 if (PL_op->op_private & OPpOFFBYONE) {
49 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
52 cxix = dopoptosub(cxstack_ix);
58 switch (cx->blk_gimme) {
77 PMOP *pm = (PMOP*)cLOGOP->op_other;
82 const regexp_engine *eng;
83 bool is_bare_re= FALSE;
85 if (PL_op->op_flags & OPf_STACKED) {
95 /* prevent recompiling under /o and ithreads. */
96 #if defined(USE_ITHREADS)
97 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
104 assert (re != (REGEXP*) &PL_sv_undef);
105 eng = re ? RX_ENGINE(re) : current_re_engine();
107 new_re = (eng->op_comp
109 : &Perl_re_op_compile
110 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
112 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
114 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
116 if (pm->op_pmflags & PMf_HAS_CV)
117 ReANY(new_re)->qr_anoncv
118 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
122 /* The match's LHS's get-magic might need to access this op's regexp
123 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
124 get-magic now before we replace the regexp. Hopefully this hack can
125 be replaced with the approach described at
126 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
128 if (pm->op_type == OP_MATCH) {
130 const bool was_tainted = TAINT_get;
131 if (pm->op_flags & OPf_STACKED)
133 else if (pm->op_targ)
134 lhs = PAD_SV(pm->op_targ);
137 /* Restore the previous value of PL_tainted (which may have been
138 modified by get-magic), to avoid incorrectly setting the
139 RXf_TAINTED flag with RX_TAINT_on further down. */
140 TAINT_set(was_tainted);
141 #ifdef NO_TAINT_SUPPORT
142 PERL_UNUSED_VAR(was_tainted);
145 tmp = reg_temp_copy(NULL, new_re);
146 ReREFCNT_dec(new_re);
152 PM_SETRE(pm, new_re);
156 assert(TAINTING_get || !TAINT_get);
158 SvTAINTED_on((SV*)new_re);
162 /* handle the empty pattern */
163 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm) {
164 if (PL_curpm == PL_reg_curpm) {
165 if (PL_curpm_under) {
166 if (PL_curpm_under == PL_reg_curpm) {
167 Perl_croak(aTHX_ "Infinite recursion via empty pattern");
177 #if !defined(USE_ITHREADS)
178 /* can't change the optree at runtime either */
179 /* PMf_KEEP is handled differently under threads to avoid these problems */
180 if (pm->op_pmflags & PMf_KEEP) {
181 cLOGOP->op_first->op_next = PL_op->op_next;
193 PERL_CONTEXT *cx = CX_CUR();
194 PMOP * const pm = (PMOP*) cLOGOP->op_other;
195 SV * const dstr = cx->sb_dstr;
198 char *orig = cx->sb_orig;
199 REGEXP * const rx = cx->sb_rx;
201 REGEXP *old = PM_GETRE(pm);
208 PM_SETRE(pm,ReREFCNT_inc(rx));
211 rxres_restore(&cx->sb_rxres, rx);
213 if (cx->sb_iters++) {
214 const SSize_t saviters = cx->sb_iters;
215 if (cx->sb_iters > cx->sb_maxiters)
216 DIE(aTHX_ "Substitution loop");
218 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
220 /* See "how taint works" above pp_subst() */
222 cx->sb_rxtainted |= SUBST_TAINT_REPL;
223 sv_catsv_nomg(dstr, POPs);
224 if (CxONCE(cx) || s < orig ||
225 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
226 (s == m), cx->sb_targ, NULL,
227 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
229 SV *targ = cx->sb_targ;
231 assert(cx->sb_strend >= s);
232 if(cx->sb_strend > s) {
233 if (DO_UTF8(dstr) && !SvUTF8(targ))
234 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
236 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
238 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
239 cx->sb_rxtainted |= SUBST_TAINT_PAT;
241 if (pm->op_pmflags & PMf_NONDESTRUCT) {
243 /* From here on down we're using the copy, and leaving the
244 original untouched. */
248 SV_CHECK_THINKFIRST_COW_DROP(targ);
249 if (isGV(targ)) Perl_croak_no_modify();
251 SvPV_set(targ, SvPVX(dstr));
252 SvCUR_set(targ, SvCUR(dstr));
253 SvLEN_set(targ, SvLEN(dstr));
256 SvPV_set(dstr, NULL);
259 mPUSHi(saviters - 1);
261 (void)SvPOK_only_UTF8(targ);
264 /* update the taint state of various various variables in
265 * preparation for final exit.
266 * See "how taint works" above pp_subst() */
268 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
269 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
270 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
272 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
274 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
275 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
277 SvTAINTED_on(TOPs); /* taint return value */
278 /* needed for mg_set below */
280 cBOOL(cx->sb_rxtainted &
281 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
285 /* PL_tainted must be correctly set for this mg_set */
294 RETURNOP(pm->op_next);
295 NOT_REACHED; /* 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;
320 /* the string being matched against may no longer be a string,
321 * e.g. $_=0; s/.../$_++/ge */
324 SvPV_force_nomg_nolen(sv);
326 if (!(mg = mg_find_mglob(sv))) {
327 mg = sv_magicext_mglob(sv);
329 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
332 (void)ReREFCNT_inc(rx);
333 /* update the taint state of various various variables in preparation
334 * for calling the code block.
335 * See "how taint works" above pp_subst() */
337 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
338 cx->sb_rxtainted |= SUBST_TAINT_PAT;
340 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
341 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
342 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
344 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
346 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
347 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
348 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
349 ? cx->sb_dstr : cx->sb_targ);
352 rxres_save(&cx->sb_rxres, rx);
354 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
358 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
363 PERL_ARGS_ASSERT_RXRES_SAVE;
366 if (!p || p[1] < RX_NPARENS(rx)) {
368 i = 7 + (RX_NPARENS(rx)+1) * 2;
370 i = 6 + (RX_NPARENS(rx)+1) * 2;
379 /* what (if anything) to free on croak */
380 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
381 RX_MATCH_COPIED_off(rx);
382 *p++ = RX_NPARENS(rx);
385 *p++ = PTR2UV(RX_SAVED_COPY(rx));
386 RX_SAVED_COPY(rx) = NULL;
389 *p++ = PTR2UV(RX_SUBBEG(rx));
390 *p++ = (UV)RX_SUBLEN(rx);
391 *p++ = (UV)RX_SUBOFFSET(rx);
392 *p++ = (UV)RX_SUBCOFFSET(rx);
393 for (i = 0; i <= RX_NPARENS(rx); ++i) {
394 *p++ = (UV)RX_OFFS(rx)[i].start;
395 *p++ = (UV)RX_OFFS(rx)[i].end;
400 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
405 PERL_ARGS_ASSERT_RXRES_RESTORE;
408 RX_MATCH_COPY_FREE(rx);
409 RX_MATCH_COPIED_set(rx, *p);
411 RX_NPARENS(rx) = *p++;
414 if (RX_SAVED_COPY(rx))
415 SvREFCNT_dec (RX_SAVED_COPY(rx));
416 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
420 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
421 RX_SUBLEN(rx) = (I32)(*p++);
422 RX_SUBOFFSET(rx) = (I32)*p++;
423 RX_SUBCOFFSET(rx) = (I32)*p++;
424 for (i = 0; i <= RX_NPARENS(rx); ++i) {
425 RX_OFFS(rx)[i].start = (I32)(*p++);
426 RX_OFFS(rx)[i].end = (I32)(*p++);
431 S_rxres_free(pTHX_ void **rsp)
433 UV * const p = (UV*)*rsp;
435 PERL_ARGS_ASSERT_RXRES_FREE;
439 void *tmp = INT2PTR(char*,*p);
442 U32 i = 9 + p[1] * 2;
444 U32 i = 8 + p[1] * 2;
449 SvREFCNT_dec (INT2PTR(SV*,p[2]));
452 PoisonFree(p, i, sizeof(UV));
461 #define FORM_NUM_BLANK (1<<30)
462 #define FORM_NUM_POINT (1<<29)
466 dSP; dMARK; dORIGMARK;
467 SV * const tmpForm = *++MARK;
468 SV *formsv; /* contains text of original format */
469 U32 *fpc; /* format ops program counter */
470 char *t; /* current append position in target string */
471 const char *f; /* current position in format string */
473 SV *sv = NULL; /* current item */
474 const char *item = NULL;/* string value of current item */
475 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
476 I32 itembytes = 0; /* as itemsize, but length in bytes */
477 I32 fieldsize = 0; /* width of current field */
478 I32 lines = 0; /* number of lines that have been output */
479 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
480 const char *chophere = NULL; /* where to chop current item */
481 STRLEN linemark = 0; /* pos of start of line in output */
483 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
484 STRLEN len; /* length of current sv */
485 STRLEN linemax; /* estimate of output size in bytes */
486 bool item_is_utf8 = FALSE;
487 bool targ_is_utf8 = FALSE;
490 U8 *source; /* source of bytes to append */
491 STRLEN to_copy; /* how may bytes to append */
492 char trans; /* what chars to translate */
494 mg = doparseform(tmpForm);
496 fpc = (U32*)mg->mg_ptr;
497 /* the actual string the format was compiled from.
498 * with overload etc, this may not match tmpForm */
502 SvPV_force(PL_formtarget, len);
503 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
504 SvTAINTED_on(PL_formtarget);
505 if (DO_UTF8(PL_formtarget))
507 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
508 t = SvGROW(PL_formtarget, len + linemax + 1);
509 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
511 f = SvPV_const(formsv, len);
515 const char *name = "???";
518 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
519 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
520 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
521 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
522 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
524 case FF_CHECKNL: name = "CHECKNL"; break;
525 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
526 case FF_SPACE: name = "SPACE"; break;
527 case FF_HALFSPACE: name = "HALFSPACE"; break;
528 case FF_ITEM: name = "ITEM"; break;
529 case FF_CHOP: name = "CHOP"; break;
530 case FF_LINEGLOB: name = "LINEGLOB"; break;
531 case FF_NEWLINE: name = "NEWLINE"; break;
532 case FF_MORE: name = "MORE"; break;
533 case FF_LINEMARK: name = "LINEMARK"; break;
534 case FF_END: name = "END"; break;
535 case FF_0DECIMAL: name = "0DECIMAL"; break;
536 case FF_LINESNGL: name = "LINESNGL"; break;
539 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
541 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
544 case FF_LINEMARK: /* start (or end) of a line */
545 linemark = t - SvPVX(PL_formtarget);
550 case FF_LITERAL: /* append <arg> literal chars */
555 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
558 case FF_SKIP: /* skip <arg> chars in format */
562 case FF_FETCH: /* get next item and set field size to <arg> */
571 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
574 SvTAINTED_on(PL_formtarget);
577 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
579 const char *s = item = SvPV_const(sv, len);
580 const char *send = s + len;
583 item_is_utf8 = DO_UTF8(sv);
595 if (itemsize == fieldsize)
598 itembytes = s - item;
603 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
605 const char *s = item = SvPV_const(sv, len);
606 const char *send = s + len;
610 item_is_utf8 = DO_UTF8(sv);
612 /* look for a legal split position */
620 /* provisional split point */
624 /* we delay testing fieldsize until after we've
625 * processed the possible split char directly
626 * following the last field char; so if fieldsize=3
627 * and item="a b cdef", we consume "a b", not "a".
628 * Ditto further down.
630 if (size == fieldsize)
634 if (strchr(PL_chopset, *s)) {
635 /* provisional split point */
636 /* for a non-space split char, we include
637 * the split char; hence the '+1' */
641 if (size == fieldsize)
653 if (!chophere || s == send) {
657 itembytes = chophere - item;
662 case FF_SPACE: /* append padding space (diff of field, item size) */
663 arg = fieldsize - itemsize;
671 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
672 arg = fieldsize - itemsize;
681 case FF_ITEM: /* append a text item, while blanking ctrl chars */
687 case FF_CHOP: /* (for ^*) chop the current item */
688 if (sv != &PL_sv_no) {
689 const char *s = chophere;
697 /* tied, overloaded or similar strangeness.
698 * Do it the hard way */
699 sv_setpvn(sv, s, len - (s-item));
704 case FF_LINESNGL: /* process ^* */
708 case FF_LINEGLOB: /* process @* */
710 const bool oneline = fpc[-1] == FF_LINESNGL;
711 const char *s = item = SvPV_const(sv, len);
712 const char *const send = s + len;
714 item_is_utf8 = DO_UTF8(sv);
725 to_copy = s - item - 1;
739 /* append to_copy bytes from source to PL_formstring.
740 * item_is_utf8 implies source is utf8.
741 * if trans, translate certain characters during the copy */
746 SvCUR_set(PL_formtarget,
747 t - SvPVX_const(PL_formtarget));
749 if (targ_is_utf8 && !item_is_utf8) {
750 source = tmp = bytes_to_utf8(source, &to_copy);
752 if (item_is_utf8 && !targ_is_utf8) {
754 /* Upgrade targ to UTF8, and then we reduce it to
755 a problem we have a simple solution for.
756 Don't need get magic. */
757 sv_utf8_upgrade_nomg(PL_formtarget);
759 /* re-calculate linemark */
760 s = (U8*)SvPVX(PL_formtarget);
761 /* the bytes we initially allocated to append the
762 * whole line may have been gobbled up during the
763 * upgrade, so allocate a whole new line's worth
768 linemark = s - (U8*)SvPVX(PL_formtarget);
770 /* Easy. They agree. */
771 assert (item_is_utf8 == targ_is_utf8);
774 /* @* and ^* are the only things that can exceed
775 * the linemax, so grow by the output size, plus
776 * a whole new form's worth in case of any further
778 grow = linemax + to_copy;
780 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
781 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
783 Copy(source, t, to_copy, char);
785 /* blank out ~ or control chars, depending on trans.
786 * works on bytes not chars, so relies on not
787 * matching utf8 continuation bytes */
789 U8 *send = s + to_copy;
792 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
799 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
805 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
808 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
811 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
814 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
816 /* If the field is marked with ^ and the value is undefined,
818 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
826 /* overflow evidence */
827 if (num_overflow(value, fieldsize, arg)) {
833 /* Formats aren't yet marked for locales, so assume "yes". */
835 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
837 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
838 STORE_LC_NUMERIC_SET_TO_NEEDED();
839 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
842 const char* qfmt = quadmath_format_single(fmt);
845 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
846 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
848 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
853 /* we generate fmt ourselves so it is safe */
854 GCC_DIAG_IGNORE(-Wformat-nonliteral);
855 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
858 PERL_MY_SNPRINTF_POST_GUARD(len, max);
859 RESTORE_LC_NUMERIC();
864 case FF_NEWLINE: /* delete trailing spaces, then append \n */
866 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
871 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
874 if (arg) { /* repeat until fields exhausted? */
880 t = SvPVX(PL_formtarget) + linemark;
885 case FF_MORE: /* replace long end of string with '...' */
887 const char *s = chophere;
888 const char *send = item + len;
890 while (isSPACE(*s) && (s < send))
895 arg = fieldsize - itemsize;
902 if (strnEQ(s1," ",3)) {
903 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
913 case FF_END: /* tidy up, then return */
915 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
917 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
919 SvUTF8_on(PL_formtarget);
920 FmLINES(PL_formtarget) += lines;
922 if (fpc[-1] == FF_BLANK)
923 RETURNOP(cLISTOP->op_first);
930 /* also used for: pp_mapstart() */
936 if (PL_stack_base + TOPMARK == SP) {
938 if (GIMME_V == G_SCALAR)
940 RETURNOP(PL_op->op_next->op_next);
942 PL_stack_sp = PL_stack_base + TOPMARK + 1;
943 Perl_pp_pushmark(aTHX); /* push dst */
944 Perl_pp_pushmark(aTHX); /* push src */
945 ENTER_with_name("grep"); /* enter outer scope */
949 ENTER_with_name("grep_item"); /* enter inner scope */
952 src = PL_stack_base[TOPMARK];
954 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
961 if (PL_op->op_type == OP_MAPSTART)
962 Perl_pp_pushmark(aTHX); /* push top */
963 return ((LOGOP*)PL_op->op_next)->op_other;
969 const U8 gimme = GIMME_V;
970 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
976 /* first, move source pointer to the next item in the source list */
977 ++PL_markstack_ptr[-1];
979 /* if there are new items, push them into the destination list */
980 if (items && gimme != G_VOID) {
981 /* might need to make room back there first */
982 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
983 /* XXX this implementation is very pessimal because the stack
984 * is repeatedly extended for every set of items. Is possible
985 * to do this without any stack extension or copying at all
986 * by maintaining a separate list over which the map iterates
987 * (like foreach does). --gsar */
989 /* everything in the stack after the destination list moves
990 * towards the end the stack by the amount of room needed */
991 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
993 /* items to shift up (accounting for the moved source pointer) */
994 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
996 /* This optimization is by Ben Tilly and it does
997 * things differently from what Sarathy (gsar)
998 * is describing. The downside of this optimization is
999 * that leaves "holes" (uninitialized and hopefully unused areas)
1000 * to the Perl stack, but on the other hand this
1001 * shouldn't be a problem. If Sarathy's idea gets
1002 * implemented, this optimization should become
1003 * irrelevant. --jhi */
1005 shift = count; /* Avoid shifting too often --Ben Tilly */
1009 dst = (SP += shift);
1010 PL_markstack_ptr[-1] += shift;
1011 *PL_markstack_ptr += shift;
1015 /* copy the new items down to the destination list */
1016 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1017 if (gimme == G_ARRAY) {
1018 /* add returned items to the collection (making mortal copies
1019 * if necessary), then clear the current temps stack frame
1020 * *except* for those items. We do this splicing the items
1021 * into the start of the tmps frame (so some items may be on
1022 * the tmps stack twice), then moving PL_tmps_floor above
1023 * them, then freeing the frame. That way, the only tmps that
1024 * accumulate over iterations are the return values for map.
1025 * We have to do to this way so that everything gets correctly
1026 * freed if we die during the map.
1030 /* make space for the slice */
1031 EXTEND_MORTAL(items);
1032 tmpsbase = PL_tmps_floor + 1;
1033 Move(PL_tmps_stack + tmpsbase,
1034 PL_tmps_stack + tmpsbase + items,
1035 PL_tmps_ix - PL_tmps_floor,
1037 PL_tmps_ix += items;
1042 sv = sv_mortalcopy(sv);
1044 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1046 /* clear the stack frame except for the items */
1047 PL_tmps_floor += items;
1049 /* FREETMPS may have cleared the TEMP flag on some of the items */
1052 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1055 /* scalar context: we don't care about which values map returns
1056 * (we use undef here). And so we certainly don't want to do mortal
1057 * copies of meaningless values. */
1058 while (items-- > 0) {
1060 *dst-- = &PL_sv_undef;
1068 LEAVE_with_name("grep_item"); /* exit inner scope */
1071 if (PL_markstack_ptr[-1] > TOPMARK) {
1073 (void)POPMARK; /* pop top */
1074 LEAVE_with_name("grep"); /* exit outer scope */
1075 (void)POPMARK; /* pop src */
1076 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1077 (void)POPMARK; /* pop dst */
1078 SP = PL_stack_base + POPMARK; /* pop original mark */
1079 if (gimme == G_SCALAR) {
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 src = sv_mortalcopy(src);
1101 RETURNOP(cLOGOP->op_other);
1109 if (GIMME_V == G_ARRAY)
1111 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1112 return cLOGOP->op_other;
1121 if (GIMME_V == G_ARRAY) {
1122 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1126 SV * const targ = PAD_SV(PL_op->op_targ);
1129 if (PL_op->op_private & OPpFLIP_LINENUM) {
1130 if (GvIO(PL_last_in_gv)) {
1131 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1134 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1136 flip = SvIV(sv) == SvIV(GvSV(gv));
1142 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1143 if (PL_op->op_flags & OPf_SPECIAL) {
1151 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1160 /* This code tries to decide if "$left .. $right" should use the
1161 magical string increment, or if the range is numeric (we make
1162 an exception for .."0" [#18165]). AMS 20021031. */
1164 #define RANGE_IS_NUMERIC(left,right) ( \
1165 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1166 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1167 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1168 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1169 && (!SvOK(right) || looks_like_number(right))))
1175 if (GIMME_V == G_ARRAY) {
1181 if (RANGE_IS_NUMERIC(left,right)) {
1183 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1184 (SvOK(right) && (SvIOK(right)
1185 ? SvIsUV(right) && SvUV(right) > IV_MAX
1186 : SvNV_nomg(right) > IV_MAX)))
1187 DIE(aTHX_ "Range iterator outside integer range");
1188 i = SvIV_nomg(left);
1189 j = SvIV_nomg(right);
1191 /* Dance carefully around signed max. */
1192 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1195 /* The wraparound of signed integers is undefined
1196 * behavior, but here we aim for count >=1, and
1197 * negative count is just wrong. */
1199 #if IVSIZE > Size_t_size
1206 Perl_croak(aTHX_ "Out of memory during list extend");
1213 SV * const sv = sv_2mortal(newSViv(i));
1215 if (n) /* avoid incrementing above IV_MAX */
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_PLAIN never actually needs "loop" */
1271 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1272 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1273 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1274 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
1282 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) /* sort BLOCK */
1302 case CXt_LOOP_PLAIN:
1303 case CXt_LOOP_LAZYIV:
1304 case CXt_LOOP_LAZYSV:
1308 STRLEN cx_label_len = 0;
1309 U32 cx_label_flags = 0;
1310 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1312 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1315 (const U8*)cx_label, cx_label_len,
1316 (const U8*)label, len) == 0)
1318 (const U8*)label, len,
1319 (const U8*)cx_label, cx_label_len) == 0)
1320 : (len == cx_label_len && ((cx_label == label)
1321 || memEQ(cx_label, label, len))) )) {
1322 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1323 (long)i, cx_label));
1326 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1337 Perl_dowantarray(pTHX)
1339 const U8 gimme = block_gimme();
1340 return (gimme == G_VOID) ? G_SCALAR : gimme;
1344 Perl_block_gimme(pTHX)
1346 const I32 cxix = dopoptosub(cxstack_ix);
1351 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1353 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1359 Perl_is_lvalue_sub(pTHX)
1361 const I32 cxix = dopoptosub(cxstack_ix);
1362 assert(cxix >= 0); /* We should only be called from inside subs */
1364 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1365 return CxLVAL(cxstack + cxix);
1370 /* only used by cx_pushsub() */
1372 Perl_was_lvalue_sub(pTHX)
1374 const I32 cxix = dopoptosub(cxstack_ix-1);
1375 assert(cxix >= 0); /* We should only be called from inside subs */
1377 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1378 return CxLVAL(cxstack + cxix);
1384 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1388 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1390 PERL_UNUSED_CONTEXT;
1393 for (i = startingblock; i >= 0; i--) {
1394 const PERL_CONTEXT * const cx = &cxstk[i];
1395 switch (CxTYPE(cx)) {
1399 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1400 * twice; the first for the normal foo() call, and the second
1401 * for a faked up re-entry into the sub to execute the
1402 * code block. Hide this faked entry from the world. */
1403 if (cx->cx_type & CXp_SUB_RE_FAKE)
1408 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1416 S_dopoptoeval(pTHX_ I32 startingblock)
1419 for (i = startingblock; i >= 0; i--) {
1420 const PERL_CONTEXT *cx = &cxstack[i];
1421 switch (CxTYPE(cx)) {
1425 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1433 S_dopoptoloop(pTHX_ I32 startingblock)
1436 for (i = startingblock; i >= 0; i--) {
1437 const PERL_CONTEXT * const cx = &cxstack[i];
1438 switch (CxTYPE(cx)) {
1444 /* diag_listed_as: Exiting subroutine via %s */
1445 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1446 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1447 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
1450 case CXt_LOOP_PLAIN:
1451 case CXt_LOOP_LAZYIV:
1452 case CXt_LOOP_LAZYSV:
1455 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1462 /* find the next GIVEN or FOR (with implicit $_) loop context block */
1465 S_dopoptogivenfor(pTHX_ I32 startingblock)
1468 for (i = startingblock; i >= 0; i--) {
1469 const PERL_CONTEXT *cx = &cxstack[i];
1470 switch (CxTYPE(cx)) {
1474 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found given at cx=%ld)\n", (long)i));
1476 case CXt_LOOP_PLAIN:
1477 assert(!(cx->cx_type & CXp_FOR_DEF));
1479 case CXt_LOOP_LAZYIV:
1480 case CXt_LOOP_LAZYSV:
1483 if (cx->cx_type & CXp_FOR_DEF) {
1484 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found foreach at cx=%ld)\n", (long)i));
1493 S_dopoptowhen(pTHX_ I32 startingblock)
1496 for (i = startingblock; i >= 0; i--) {
1497 const PERL_CONTEXT *cx = &cxstack[i];
1498 switch (CxTYPE(cx)) {
1502 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1509 /* dounwind(): pop all contexts above (but not including) cxix.
1510 * Note that it clears the savestack frame associated with each popped
1511 * context entry, but doesn't free any temps.
1512 * It does a cx_popblock() of the last frame that it pops, and leaves
1513 * cxstack_ix equal to cxix.
1517 Perl_dounwind(pTHX_ I32 cxix)
1519 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1522 while (cxstack_ix > cxix) {
1523 PERL_CONTEXT *cx = CX_CUR();
1525 CX_DEBUG(cx, "UNWIND");
1526 /* Note: we don't need to restore the base context info till the end. */
1530 switch (CxTYPE(cx)) {
1533 /* CXt_SUBST is not a block context type, so skip the
1534 * cx_popblock(cx) below */
1535 if (cxstack_ix == cxix + 1) {
1546 case CXt_LOOP_PLAIN:
1547 case CXt_LOOP_LAZYIV:
1548 case CXt_LOOP_LAZYSV:
1561 /* these two don't have a POPFOO() */
1567 if (cxstack_ix == cxix + 1) {
1576 Perl_qerror(pTHX_ SV *err)
1578 PERL_ARGS_ASSERT_QERROR;
1581 if (PL_in_eval & EVAL_KEEPERR) {
1582 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1586 sv_catsv(ERRSV, err);
1589 sv_catsv(PL_errors, err);
1591 Perl_warn(aTHX_ "%" SVf, SVfARG(err));
1593 ++PL_parser->error_count;
1598 /* pop a CXt_EVAL context and in addition, if it was a require then
1600 * 0: do nothing extra;
1601 * 1: undef $INC{$name}; croak "$name did not return a true value";
1602 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1606 S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
1608 SV *namesv = NULL; /* init to avoid dumb compiler warning */
1612 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
1614 /* keep namesv alive after cx_popeval() */
1615 namesv = cx->blk_eval.old_namesv;
1616 cx->blk_eval.old_namesv = NULL;
1625 HV *inc_hv = GvHVn(PL_incgv);
1626 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1627 const char *key = SvPVX_const(namesv);
1630 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1631 fmt = "%" SVf " did not return a true value";
1635 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1636 fmt = "%" SVf "Compilation failed in require";
1638 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1641 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1646 /* die_unwind(): this is the final destination for the various croak()
1647 * functions. If we're in an eval, unwind the context and other stacks
1648 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1649 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1650 * to is a require the exception will be rethrown, as requires don't
1651 * actually trap exceptions.
1655 Perl_die_unwind(pTHX_ SV *msv)
1658 U8 in_eval = PL_in_eval;
1659 PERL_ARGS_ASSERT_DIE_UNWIND;
1664 exceptsv = sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1667 * Historically, perl used to set ERRSV ($@) early in the die
1668 * process and rely on it not getting clobbered during unwinding.
1669 * That sucked, because it was liable to get clobbered, so the
1670 * setting of ERRSV used to emit the exception from eval{} has
1671 * been moved to much later, after unwinding (see just before
1672 * JMPENV_JUMP below). However, some modules were relying on the
1673 * early setting, by examining $@ during unwinding to use it as
1674 * a flag indicating whether the current unwinding was caused by
1675 * an exception. It was never a reliable flag for that purpose,
1676 * being totally open to false positives even without actual
1677 * clobberage, but was useful enough for production code to
1678 * semantically rely on it.
1680 * We'd like to have a proper introspective interface that
1681 * explicitly describes the reason for whatever unwinding
1682 * operations are currently in progress, so that those modules
1683 * work reliably and $@ isn't further overloaded. But we don't
1684 * have one yet. In its absence, as a stopgap measure, ERRSV is
1685 * now *additionally* set here, before unwinding, to serve as the
1686 * (unreliable) flag that it used to.
1688 * This behaviour is temporary, and should be removed when a
1689 * proper way to detect exceptional unwinding has been developed.
1690 * As of 2010-12, the authors of modules relying on the hack
1691 * are aware of the issue, because the modules failed on
1692 * perls 5.13.{1..7} which had late setting of $@ without this
1693 * early-setting hack.
1695 if (!(in_eval & EVAL_KEEPERR))
1696 sv_setsv_flags(ERRSV, exceptsv,
1697 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
1699 if (in_eval & EVAL_KEEPERR) {
1700 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1704 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1705 && PL_curstackinfo->si_prev)
1715 JMPENV *restartjmpenv;
1718 if (cxix < cxstack_ix)
1722 assert(CxTYPE(cx) == CXt_EVAL);
1724 /* return false to the caller of eval */
1725 oldsp = PL_stack_base + cx->blk_oldsp;
1726 gimme = cx->blk_gimme;
1727 if (gimme == G_SCALAR)
1728 *++oldsp = &PL_sv_undef;
1729 PL_stack_sp = oldsp;
1731 restartjmpenv = cx->blk_eval.cur_top_env;
1732 restartop = cx->blk_eval.retop;
1733 /* Note that unlike pp_entereval, pp_require isn't supposed to
1734 * trap errors. So if we're a require, after we pop the
1735 * CXt_EVAL that pp_require pushed, rethrow the error with
1736 * croak(exceptsv). This is all handled by the call below when
1739 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
1741 if (!(in_eval & EVAL_KEEPERR))
1742 sv_setsv(ERRSV, exceptsv);
1743 PL_restartjmpenv = restartjmpenv;
1744 PL_restartop = restartop;
1746 NOT_REACHED; /* NOTREACHED */
1750 write_to_stderr(exceptsv);
1752 NOT_REACHED; /* NOTREACHED */
1758 if (SvTRUE(left) != SvTRUE(right))
1766 =head1 CV Manipulation Functions
1768 =for apidoc caller_cx
1770 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1771 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1772 information returned to Perl by C<caller>. Note that XSUBs don't get a
1773 stack frame, so C<caller_cx(0, NULL)> will return information for the
1774 immediately-surrounding Perl code.
1776 This function skips over the automatic calls to C<&DB::sub> made on the
1777 behalf of the debugger. If the stack frame requested was a sub called by
1778 C<DB::sub>, the return value will be the frame for the call to
1779 C<DB::sub>, since that has the correct line number/etc. for the call
1780 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1781 frame for the sub call itself.
1786 const PERL_CONTEXT *
1787 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1789 I32 cxix = dopoptosub(cxstack_ix);
1790 const PERL_CONTEXT *cx;
1791 const PERL_CONTEXT *ccstack = cxstack;
1792 const PERL_SI *top_si = PL_curstackinfo;
1795 /* we may be in a higher stacklevel, so dig down deeper */
1796 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1797 top_si = top_si->si_prev;
1798 ccstack = top_si->si_cxstack;
1799 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1803 /* caller() should not report the automatic calls to &DB::sub */
1804 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1805 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1809 cxix = dopoptosub_at(ccstack, cxix - 1);
1812 cx = &ccstack[cxix];
1813 if (dbcxp) *dbcxp = cx;
1815 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1816 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1817 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1818 field below is defined for any cx. */
1819 /* caller() should not report the automatic calls to &DB::sub */
1820 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1821 cx = &ccstack[dbcxix];
1830 const PERL_CONTEXT *cx;
1831 const PERL_CONTEXT *dbcx;
1833 const HEK *stash_hek;
1835 bool has_arg = MAXARG && TOPs;
1844 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1846 if (gimme != G_ARRAY) {
1853 CX_DEBUG(cx, "CALLER");
1854 assert(CopSTASH(cx->blk_oldcop));
1855 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1856 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1858 if (gimme != G_ARRAY) {
1861 PUSHs(&PL_sv_undef);
1864 sv_sethek(TARG, stash_hek);
1873 PUSHs(&PL_sv_undef);
1876 sv_sethek(TARG, stash_hek);
1879 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1880 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1881 cx->blk_sub.retop, TRUE);
1883 lcop = cx->blk_oldcop;
1884 mPUSHu(CopLINE(lcop));
1887 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1888 /* So is ccstack[dbcxix]. */
1889 if (CvHASGV(dbcx->blk_sub.cv)) {
1890 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1891 PUSHs(boolSV(CxHASARGS(cx)));
1894 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1895 PUSHs(boolSV(CxHASARGS(cx)));
1899 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1902 gimme = cx->blk_gimme;
1903 if (gimme == G_VOID)
1904 PUSHs(&PL_sv_undef);
1906 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1907 if (CxTYPE(cx) == CXt_EVAL) {
1909 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1910 SV *cur_text = cx->blk_eval.cur_text;
1911 if (SvCUR(cur_text) >= 2) {
1912 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1913 SvUTF8(cur_text)|SVs_TEMP));
1916 /* I think this is will always be "", but be sure */
1917 PUSHs(sv_2mortal(newSVsv(cur_text)));
1923 else if (cx->blk_eval.old_namesv) {
1924 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1927 /* eval BLOCK (try blocks have old_namesv == 0) */
1929 PUSHs(&PL_sv_undef);
1930 PUSHs(&PL_sv_undef);
1934 PUSHs(&PL_sv_undef);
1935 PUSHs(&PL_sv_undef);
1937 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1938 && CopSTASH_eq(PL_curcop, PL_debstash))
1940 /* slot 0 of the pad contains the original @_ */
1941 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
1942 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
1943 cx->blk_sub.olddepth+1]))[0]);
1944 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1946 Perl_init_dbargs(aTHX);
1948 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1949 av_extend(PL_dbargs, AvFILLp(ary) + off);
1950 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1951 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1953 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1956 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1958 if (old_warnings == pWARN_NONE)
1959 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1960 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1961 mask = &PL_sv_undef ;
1962 else if (old_warnings == pWARN_ALL ||
1963 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1964 /* Get the bit mask for $warnings::Bits{all}, because
1965 * it could have been extended by warnings::register */
1967 HV * const bits = get_hv("warnings::Bits", 0);
1968 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1969 mask = newSVsv(*bits_all);
1972 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1976 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1980 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1981 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1991 if (MAXARG < 1 || (!TOPs && !POPs))
1992 tmps = NULL, len = 0;
1994 tmps = SvPVx_const(POPs, len);
1995 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
2000 /* like pp_nextstate, but used instead when the debugger is active */
2004 PL_curcop = (COP*)PL_op;
2005 TAINT_NOT; /* Each statement is presumed innocent */
2006 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
2011 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2012 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
2016 const U8 gimme = G_ARRAY;
2017 GV * const gv = PL_DBgv;
2020 if (gv && isGV_with_GP(gv))
2023 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
2024 DIE(aTHX_ "No DB::DB routine defined");
2026 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2027 /* don't do recursive DB::DB call */
2037 (void)(*CvXSUB(cv))(aTHX_ cv);
2043 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
2044 cx_pushsub(cx, cv, PL_op->op_next, 0);
2045 /* OP_DBSTATE's op_private holds hint bits rather than
2046 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2047 * any CxLVAL() flags that have now been mis-calculated */
2054 if (CvDEPTH(cv) >= 2)
2055 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2056 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2057 RETURNOP(CvSTART(cv));
2069 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2081 assert(CxTYPE(cx) == CXt_BLOCK);
2083 if (PL_op->op_flags & OPf_SPECIAL)
2084 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2085 cx->blk_oldpm = PL_curpm;
2087 oldsp = PL_stack_base + cx->blk_oldsp;
2088 gimme = cx->blk_gimme;
2090 if (gimme == G_VOID)
2091 PL_stack_sp = oldsp;
2093 leave_adjust_stacks(oldsp, oldsp, gimme,
2094 PL_op->op_private & OPpLVALUE ? 3 : 1);
2104 S_outside_integer(pTHX_ SV *sv)
2107 const NV nv = SvNV_nomg(sv);
2108 if (Perl_isinfnan(nv))
2110 #ifdef NV_PRESERVES_UV
2111 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2114 if (nv <= (NV)IV_MIN)
2117 ((nv > (NV)UV_MAX ||
2118 SvUV_nomg(sv) > (UV)IV_MAX)))
2129 const U8 gimme = GIMME_V;
2130 void *itervarp; /* GV or pad slot of the iteration variable */
2131 SV *itersave; /* the old var in the iterator var slot */
2134 if (PL_op->op_targ) { /* "my" variable */
2135 itervarp = &PAD_SVl(PL_op->op_targ);
2136 itersave = *(SV**)itervarp;
2138 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2139 /* the SV currently in the pad slot is never live during
2140 * iteration (the slot is always aliased to one of the items)
2141 * so it's always stale */
2142 SvPADSTALE_on(itersave);
2144 SvREFCNT_inc_simple_void_NN(itersave);
2145 cxflags = CXp_FOR_PAD;
2148 SV * const sv = POPs;
2149 itervarp = (void *)sv;
2150 if (LIKELY(isGV(sv))) { /* symbol table variable */
2151 itersave = GvSV(sv);
2152 SvREFCNT_inc_simple_void(itersave);
2153 cxflags = CXp_FOR_GV;
2154 if (PL_op->op_private & OPpITER_DEF)
2155 cxflags |= CXp_FOR_DEF;
2157 else { /* LV ref: for \$foo (...) */
2158 assert(SvTYPE(sv) == SVt_PVMG);
2159 assert(SvMAGIC(sv));
2160 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2162 cxflags = CXp_FOR_LVREF;
2165 /* OPpITER_DEF (implicit $_) should only occur with a GV iter var */
2166 assert((cxflags & CXp_FOR_GV) || !(PL_op->op_private & OPpITER_DEF));
2168 /* Note that this context is initially set as CXt_NULL. Further on
2169 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2170 * there mustn't be anything in the blk_loop substruct that requires
2171 * freeing or undoing, in case we die in the meantime. And vice-versa.
2173 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
2174 cx_pushloop_for(cx, itervarp, itersave);
2176 if (PL_op->op_flags & OPf_STACKED) {
2177 /* OPf_STACKED implies either a single array: for(@), with a
2178 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2180 SV *maybe_ary = POPs;
2181 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2184 SV * const right = maybe_ary;
2185 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
2186 DIE(aTHX_ "Assigned value is not a reference");
2189 if (RANGE_IS_NUMERIC(sv,right)) {
2190 cx->cx_type |= CXt_LOOP_LAZYIV;
2191 if (S_outside_integer(aTHX_ sv) ||
2192 S_outside_integer(aTHX_ right))
2193 DIE(aTHX_ "Range iterator outside integer range");
2194 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2195 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2198 cx->cx_type |= CXt_LOOP_LAZYSV;
2199 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2200 cx->blk_loop.state_u.lazysv.end = right;
2201 SvREFCNT_inc_simple_void_NN(right);
2202 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2203 /* This will do the upgrade to SVt_PV, and warn if the value
2204 is uninitialised. */
2205 (void) SvPV_nolen_const(right);
2206 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2207 to replace !SvOK() with a pointer to "". */
2209 SvREFCNT_dec(right);
2210 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2214 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2215 /* for (@array) {} */
2216 cx->cx_type |= CXt_LOOP_ARY;
2217 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2218 SvREFCNT_inc_simple_void_NN(maybe_ary);
2219 cx->blk_loop.state_u.ary.ix =
2220 (PL_op->op_private & OPpITER_REVERSED) ?
2221 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2224 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
2226 else { /* iterating over items on the stack */
2227 cx->cx_type |= CXt_LOOP_LIST;
2228 cx->blk_oldsp = SP - PL_stack_base;
2229 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2230 cx->blk_loop.state_u.stack.ix =
2231 (PL_op->op_private & OPpITER_REVERSED)
2233 : cx->blk_loop.state_u.stack.basesp;
2234 /* pre-extend stack so pp_iter doesn't have to check every time
2235 * it pushes yes/no */
2245 const U8 gimme = GIMME_V;
2247 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
2248 cx_pushloop_plain(cx);
2261 assert(CxTYPE_is_LOOP(cx));
2262 oldsp = PL_stack_base + cx->blk_oldsp;
2263 base = CxTYPE(cx) == CXt_LOOP_LIST
2264 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
2266 gimme = cx->blk_gimme;
2268 if (gimme == G_VOID)
2271 leave_adjust_stacks(oldsp, base, gimme,
2272 PL_op->op_private & OPpLVALUE ? 3 : 1);
2275 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
2283 /* This duplicates most of pp_leavesub, but with additional code to handle
2284 * return args in lvalue context. It was forked from pp_leavesub to
2285 * avoid slowing down that function any further.
2287 * Any changes made to this function may need to be copied to pp_leavesub
2290 * also tail-called by pp_return
2301 assert(CxTYPE(cx) == CXt_SUB);
2303 if (CxMULTICALL(cx)) {
2304 /* entry zero of a stack is always PL_sv_undef, which
2305 * simplifies converting a '()' return into undef in scalar context */
2306 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2310 gimme = cx->blk_gimme;
2311 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
2313 if (gimme == G_VOID)
2314 PL_stack_sp = oldsp;
2316 U8 lval = CxLVAL(cx);
2317 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2318 const char *what = NULL;
2320 if (gimme == G_SCALAR) {
2322 /* check for bad return arg */
2323 if (oldsp < PL_stack_sp) {
2324 SV *sv = *PL_stack_sp;
2325 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2327 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2328 : "a readonly value" : "a temporary";
2333 /* sub:lvalue{} will take us here. */
2338 "Can't return %s from lvalue subroutine", what);
2342 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2344 if (lval & OPpDEREF) {
2345 /* lval_sub()->{...} and similar */
2349 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2355 assert(gimme == G_ARRAY);
2356 assert (!(lval & OPpDEREF));
2359 /* scan for bad return args */
2361 for (p = PL_stack_sp; p > oldsp; p--) {
2363 /* the PL_sv_undef exception is to allow things like
2364 * this to work, where PL_sv_undef acts as 'skip'
2365 * placeholder on the LHS of list assigns:
2366 * sub foo :lvalue { undef }
2367 * ($a, undef, foo(), $b) = 1..4;
2369 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2371 /* Might be flattened array after $#array = */
2372 what = SvREADONLY(sv)
2373 ? "a readonly value" : "a temporary";
2379 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2384 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
2386 retop = cx->blk_sub.retop;
2397 const I32 cxix = dopoptosub(cxstack_ix);
2399 assert(cxstack_ix >= 0);
2400 if (cxix < cxstack_ix) {
2402 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2403 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2404 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2407 DIE(aTHX_ "Can't return outside a subroutine");
2409 * a sort block, which is a CXt_NULL not a CXt_SUB;
2410 * or a /(?{...})/ block.
2411 * Handle specially. */
2412 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2413 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2414 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
2415 if (cxstack_ix > 0) {
2416 /* See comment below about context popping. Since we know
2417 * we're scalar and not lvalue, we can preserve the return
2418 * value in a simpler fashion than there. */
2420 assert(cxstack[0].blk_gimme == G_SCALAR);
2421 if ( (sp != PL_stack_base)
2422 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2424 *SP = sv_mortalcopy(sv);
2427 /* caller responsible for popping cxstack[0] */
2431 /* There are contexts that need popping. Doing this may free the
2432 * return value(s), so preserve them first: e.g. popping the plain
2433 * loop here would free $x:
2434 * sub f { { my $x = 1; return $x } }
2435 * We may also need to shift the args down; for example,
2436 * for (1,2) { return 3,4 }
2437 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2438 * leave_adjust_stacks(), along with freeing any temps. Note that
2439 * whoever we tail-call (e.g. pp_leaveeval) will also call
2440 * leave_adjust_stacks(); however, the second call is likely to
2441 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2442 * pass them through, rather than copying them again. So this
2443 * isn't as inefficient as it sounds.
2445 cx = &cxstack[cxix];
2447 if (cx->blk_gimme != G_VOID)
2448 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
2450 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2454 cx = &cxstack[cxix]; /* CX stack may have been realloced */
2457 /* Like in the branch above, we need to handle any extra junk on
2458 * the stack. But because we're not also popping extra contexts, we
2459 * don't have to worry about prematurely freeing args. So we just
2460 * need to do the bare minimum to handle junk, and leave the main
2461 * arg processing in the function we tail call, e.g. pp_leavesub.
2462 * In list context we have to splice out the junk; in scalar
2463 * context we can leave as-is (pp_leavesub will later return the
2464 * top stack element). But for an empty arg list, e.g.
2465 * for (1,2) { return }
2466 * we need to set sp = oldsp so that pp_leavesub knows to push
2467 * &PL_sv_undef onto the stack.
2470 cx = &cxstack[cxix];
2471 oldsp = PL_stack_base + cx->blk_oldsp;
2472 if (oldsp != MARK) {
2473 SSize_t nargs = SP - MARK;
2475 if (cx->blk_gimme == G_ARRAY) {
2476 /* shift return args to base of call stack frame */
2477 Move(MARK + 1, oldsp + 1, nargs, SV*);
2478 PL_stack_sp = oldsp + nargs;
2482 PL_stack_sp = oldsp;
2486 /* fall through to a normal exit */
2487 switch (CxTYPE(cx)) {
2489 return CxTRYBLOCK(cx)
2490 ? Perl_pp_leavetry(aTHX)
2491 : Perl_pp_leaveeval(aTHX);
2493 return CvLVALUE(cx->blk_sub.cv)
2494 ? Perl_pp_leavesublv(aTHX)
2495 : Perl_pp_leavesub(aTHX);
2497 return Perl_pp_leavewrite(aTHX);
2499 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2503 /* find the enclosing loop or labelled loop and dounwind() back to it. */
2505 static PERL_CONTEXT *
2509 if (PL_op->op_flags & OPf_SPECIAL) {
2510 cxix = dopoptoloop(cxstack_ix);
2512 /* diag_listed_as: Can't "last" outside a loop block */
2513 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2519 const char * const label =
2520 PL_op->op_flags & OPf_STACKED
2521 ? SvPV(TOPs,label_len)
2522 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2523 const U32 label_flags =
2524 PL_op->op_flags & OPf_STACKED
2526 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2528 cxix = dopoptolabel(label, label_len, label_flags);
2530 /* diag_listed_as: Label not found for "last %s" */
2531 Perl_croak(aTHX_ "Label not found for \"%s %" SVf "\"",
2533 SVfARG(PL_op->op_flags & OPf_STACKED
2534 && !SvGMAGICAL(TOPp1s)
2536 : newSVpvn_flags(label,
2538 label_flags | SVs_TEMP)));
2540 if (cxix < cxstack_ix)
2542 return &cxstack[cxix];
2551 cx = S_unwind_loop(aTHX);
2553 assert(CxTYPE_is_LOOP(cx));
2554 PL_stack_sp = PL_stack_base
2555 + (CxTYPE(cx) == CXt_LOOP_LIST
2556 ? cx->blk_loop.state_u.stack.basesp
2562 /* Stack values are safe: */
2564 cx_poploop(cx); /* release loop vars ... */
2566 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2576 /* if not a bare 'next' in the main scope, search for it */
2578 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2579 cx = S_unwind_loop(aTHX);
2582 PL_curcop = cx->blk_oldcop;
2584 return (cx)->blk_loop.my_op->op_nextop;
2589 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
2590 OP* redo_op = cx->blk_loop.my_op->op_redoop;
2592 if (redo_op->op_type == OP_ENTER) {
2593 /* pop one less context to avoid $x being freed in while (my $x..) */
2596 assert(CxTYPE(cx) == CXt_BLOCK);
2597 redo_op = redo_op->op_next;
2603 PL_curcop = cx->blk_oldcop;
2609 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2612 static const char* const too_deep = "Target of goto is too deeply nested";
2614 PERL_ARGS_ASSERT_DOFINDLABEL;
2617 Perl_croak(aTHX_ "%s", too_deep);
2618 if (o->op_type == OP_LEAVE ||
2619 o->op_type == OP_SCOPE ||
2620 o->op_type == OP_LEAVELOOP ||
2621 o->op_type == OP_LEAVESUB ||
2622 o->op_type == OP_LEAVETRY)
2624 *ops++ = cUNOPo->op_first;
2626 Perl_croak(aTHX_ "%s", too_deep);
2629 if (o->op_flags & OPf_KIDS) {
2631 /* First try all the kids at this level, since that's likeliest. */
2632 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2633 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2634 STRLEN kid_label_len;
2635 U32 kid_label_flags;
2636 const char *kid_label = CopLABEL_len_flags(kCOP,
2637 &kid_label_len, &kid_label_flags);
2639 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2642 (const U8*)kid_label, kid_label_len,
2643 (const U8*)label, len) == 0)
2645 (const U8*)label, len,
2646 (const U8*)kid_label, kid_label_len) == 0)
2647 : ( len == kid_label_len && ((kid_label == label)
2648 || memEQ(kid_label, label, len)))))
2652 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2653 if (kid == PL_lastgotoprobe)
2655 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2658 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2659 ops[-1]->op_type == OP_DBSTATE)
2664 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2673 /* also used for: pp_dump() */
2681 #define GOTO_DEPTH 64
2682 OP *enterops[GOTO_DEPTH];
2683 const char *label = NULL;
2684 STRLEN label_len = 0;
2685 U32 label_flags = 0;
2686 const bool do_dump = (PL_op->op_type == OP_DUMP);
2687 static const char* const must_have_label = "goto must have label";
2689 if (PL_op->op_flags & OPf_STACKED) {
2690 /* goto EXPR or goto &foo */
2692 SV * const sv = POPs;
2695 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2696 /* This egregious kludge implements goto &subroutine */
2699 CV *cv = MUTABLE_CV(SvRV(sv));
2700 AV *arg = GvAV(PL_defgv);
2702 while (!CvROOT(cv) && !CvXSUB(cv)) {
2703 const GV * const gv = CvGV(cv);
2707 /* autoloaded stub? */
2708 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2710 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2712 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2713 if (autogv && (cv = GvCV(autogv)))
2715 tmpstr = sv_newmortal();
2716 gv_efullname3(tmpstr, gv, NULL);
2717 DIE(aTHX_ "Goto undefined subroutine &%" SVf, SVfARG(tmpstr));
2719 DIE(aTHX_ "Goto undefined subroutine");
2722 cxix = dopoptosub(cxstack_ix);
2724 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2726 cx = &cxstack[cxix];
2727 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2728 if (CxTYPE(cx) == CXt_EVAL) {
2730 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2731 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2733 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2734 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2736 else if (CxMULTICALL(cx))
2737 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2739 /* First do some returnish stuff. */
2741 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2743 if (cxix < cxstack_ix) {
2750 /* protect @_ during save stack unwind. */
2752 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2754 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2757 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2758 /* this is part of cx_popsub_args() */
2759 AV* av = MUTABLE_AV(PAD_SVl(0));
2760 assert(AvARRAY(MUTABLE_AV(
2761 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2762 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2764 /* we are going to donate the current @_ from the old sub
2765 * to the new sub. This first part of the donation puts a
2766 * new empty AV in the pad[0] slot of the old sub,
2767 * unless pad[0] and @_ differ (e.g. if the old sub did
2768 * local *_ = []); in which case clear the old pad[0]
2769 * array in the usual way */
2770 if (av == arg || AvREAL(av))
2771 clear_defarray(av, av == arg);
2772 else CLEAR_ARGARRAY(av);
2775 /* don't restore PL_comppad here. It won't be needed if the
2776 * sub we're going to is non-XS, but restoring it early then
2777 * croaking (e.g. the "Goto undefined subroutine" below)
2778 * means the CX block gets processed again in dounwind,
2779 * but this time with the wrong PL_comppad */
2781 /* A destructor called during LEAVE_SCOPE could have undefined
2782 * our precious cv. See bug #99850. */
2783 if (!CvROOT(cv) && !CvXSUB(cv)) {
2784 const GV * const gv = CvGV(cv);
2786 SV * const tmpstr = sv_newmortal();
2787 gv_efullname3(tmpstr, gv, NULL);
2788 DIE(aTHX_ "Goto undefined subroutine &%" SVf,
2791 DIE(aTHX_ "Goto undefined subroutine");
2794 if (CxTYPE(cx) == CXt_SUB) {
2795 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2796 SvREFCNT_dec_NN(cx->blk_sub.cv);
2799 /* Now do some callish stuff. */
2801 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2802 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2807 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2809 /* put GvAV(defgv) back onto stack */
2811 EXTEND(SP, items+1); /* @_ could have been extended. */
2816 bool r = cBOOL(AvREAL(arg));
2817 for (index=0; index<items; index++)
2821 SV ** const svp = av_fetch(arg, index, 0);
2822 sv = svp ? *svp : NULL;
2824 else sv = AvARRAY(arg)[index];
2826 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2827 : sv_2mortal(newSVavdefelem(arg, index, 1));
2831 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2832 /* Restore old @_ */
2833 CX_POP_SAVEARRAY(cx);
2836 retop = cx->blk_sub.retop;
2837 PL_comppad = cx->blk_sub.prevcomppad;
2838 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2840 /* XS subs don't have a CXt_SUB, so pop it;
2841 * this is a cx_popblock(), less all the stuff we already did
2842 * for cx_topblock() earlier */
2843 PL_curcop = cx->blk_oldcop;
2846 /* Push a mark for the start of arglist */
2849 (void)(*CvXSUB(cv))(aTHX_ cv);
2854 PADLIST * const padlist = CvPADLIST(cv);
2856 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2858 /* partial unrolled cx_pushsub(): */
2860 cx->blk_sub.cv = cv;
2861 cx->blk_sub.olddepth = CvDEPTH(cv);
2864 SvREFCNT_inc_simple_void_NN(cv);
2865 if (CvDEPTH(cv) > 1) {
2866 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2867 sub_crush_depth(cv);
2868 pad_push(padlist, CvDEPTH(cv));
2870 PL_curcop = cx->blk_oldcop;
2871 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2874 /* second half of donating @_ from the old sub to the
2875 * new sub: abandon the original pad[0] AV in the
2876 * new sub, and replace it with the donated @_.
2877 * pad[0] takes ownership of the extra refcount
2878 * we gave arg earlier */
2880 SvREFCNT_dec(PAD_SVl(0));
2881 PAD_SVl(0) = (SV *)arg;
2882 SvREFCNT_inc_simple_void_NN(arg);
2885 /* GvAV(PL_defgv) might have been modified on scope
2886 exit, so point it at arg again. */
2887 if (arg != GvAV(PL_defgv)) {
2888 AV * const av = GvAV(PL_defgv);
2889 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2894 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2895 Perl_get_db_sub(aTHX_ NULL, cv);
2897 CV * const gotocv = get_cvs("DB::goto", 0);
2899 PUSHMARK( PL_stack_sp );
2900 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2905 retop = CvSTART(cv);
2906 goto putback_return;
2911 label = SvPV_nomg_const(sv, label_len);
2912 label_flags = SvUTF8(sv);
2915 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2916 /* goto LABEL or dump LABEL */
2917 label = cPVOP->op_pv;
2918 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2919 label_len = strlen(label);
2921 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2926 OP *gotoprobe = NULL;
2927 bool leaving_eval = FALSE;
2928 bool in_block = FALSE;
2929 PERL_CONTEXT *last_eval_cx = NULL;
2933 PL_lastgotoprobe = NULL;
2935 for (ix = cxstack_ix; ix >= 0; ix--) {
2937 switch (CxTYPE(cx)) {
2939 leaving_eval = TRUE;
2940 if (!CxTRYBLOCK(cx)) {
2941 gotoprobe = (last_eval_cx ?
2942 last_eval_cx->blk_eval.old_eval_root :
2947 /* else fall through */
2948 case CXt_LOOP_PLAIN:
2949 case CXt_LOOP_LAZYIV:
2950 case CXt_LOOP_LAZYSV:
2955 gotoprobe = OpSIBLING(cx->blk_oldcop);
2961 gotoprobe = OpSIBLING(cx->blk_oldcop);
2964 gotoprobe = PL_main_root;
2967 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2968 gotoprobe = CvROOT(cx->blk_sub.cv);
2974 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2977 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
2978 CxTYPE(cx), (long) ix);
2979 gotoprobe = PL_main_root;
2985 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
2986 enterops, enterops + GOTO_DEPTH);
2989 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
2990 sibl1->op_type == OP_UNSTACK &&
2991 (sibl2 = OpSIBLING(sibl1)))
2993 retop = dofindlabel(sibl2,
2994 label, label_len, label_flags, enterops,
2995 enterops + GOTO_DEPTH);
3000 PL_lastgotoprobe = gotoprobe;
3003 DIE(aTHX_ "Can't find label %" UTF8f,
3004 UTF8fARG(label_flags, label_len, label));
3006 /* if we're leaving an eval, check before we pop any frames
3007 that we're not going to punt, otherwise the error
3010 if (leaving_eval && *enterops && enterops[1]) {
3012 for (i = 1; enterops[i]; i++)
3013 if (enterops[i]->op_type == OP_ENTERITER)
3014 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3017 if (*enterops && enterops[1]) {
3018 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3020 deprecate("\"goto\" to jump into a construct");
3023 /* pop unwanted frames */
3025 if (ix < cxstack_ix) {
3027 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3033 /* push wanted frames */
3035 if (*enterops && enterops[1]) {
3036 OP * const oldop = PL_op;
3037 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3038 for (; enterops[ix]; ix++) {
3039 PL_op = enterops[ix];
3040 /* Eventually we may want to stack the needed arguments
3041 * for each op. For now, we punt on the hard ones. */
3042 if (PL_op->op_type == OP_ENTERITER)
3043 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3044 PL_op->op_ppaddr(aTHX);
3052 if (!retop) retop = PL_main_start;
3054 PL_restartop = retop;
3055 PL_do_undump = TRUE;
3059 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3060 PL_do_undump = FALSE;
3078 anum = 0; (void)POPs;
3084 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3087 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3090 PL_exit_flags |= PERL_EXIT_EXPECTED;
3092 PUSHs(&PL_sv_undef);
3099 S_save_lines(pTHX_ AV *array, SV *sv)
3101 const char *s = SvPVX_const(sv);
3102 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3105 PERL_ARGS_ASSERT_SAVE_LINES;
3107 while (s && s < send) {
3109 SV * const tmpstr = newSV_type(SVt_PVMG);
3111 t = (const char *)memchr(s, '\n', send - s);
3117 sv_setpvn(tmpstr, s, t - s);
3118 av_store(array, line++, tmpstr);
3126 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3128 0 is used as continue inside eval,
3130 3 is used for a die caught by an inner eval - continue inner loop
3132 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3133 establish a local jmpenv to handle exception traps.
3138 S_docatch(pTHX_ OP *o)
3141 OP * const oldop = PL_op;
3145 assert(CATCH_GET == TRUE);
3152 assert(cxstack_ix >= 0);
3153 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3154 CX_CUR()->blk_eval.cur_top_env = PL_top_env;
3159 /* die caught by an inner eval - continue inner loop */
3160 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3161 PL_restartjmpenv = NULL;
3162 PL_op = PL_restartop;
3171 NOT_REACHED; /* NOTREACHED */
3180 =for apidoc find_runcv
3182 Locate the CV corresponding to the currently executing sub or eval.
3183 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3184 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3185 entered. (This allows debuggers to eval in the scope of the breakpoint
3186 rather than in the scope of the debugger itself.)
3192 Perl_find_runcv(pTHX_ U32 *db_seqp)
3194 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3197 /* If this becomes part of the API, it might need a better name. */
3199 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3206 PL_curcop == &PL_compiling
3208 : PL_curcop->cop_seq;
3210 for (si = PL_curstackinfo; si; si = si->si_prev) {
3212 for (ix = si->si_cxix; ix >= 0; ix--) {
3213 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3215 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3216 cv = cx->blk_sub.cv;
3217 /* skip DB:: code */
3218 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3219 *db_seqp = cx->blk_oldcop->cop_seq;
3222 if (cx->cx_type & CXp_SUB_RE)
3225 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3226 cv = cx->blk_eval.cv;
3229 case FIND_RUNCV_padid_eq:
3231 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3234 case FIND_RUNCV_level_eq:
3235 if (level++ != arg) continue;
3243 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3247 /* Run yyparse() in a setjmp wrapper. Returns:
3248 * 0: yyparse() successful
3249 * 1: yyparse() failed
3253 S_try_yyparse(pTHX_ int gramtype)
3258 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3262 ret = yyparse(gramtype) ? 1 : 0;
3269 NOT_REACHED; /* NOTREACHED */
3276 /* Compile a require/do or an eval ''.
3278 * outside is the lexically enclosing CV (if any) that invoked us.
3279 * seq is the current COP scope value.
3280 * hh is the saved hints hash, if any.
3282 * Returns a bool indicating whether the compile was successful; if so,
3283 * PL_eval_start contains the first op of the compiled code; otherwise,
3286 * This function is called from two places: pp_require and pp_entereval.
3287 * These can be distinguished by whether PL_op is entereval.
3291 S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
3294 OP * const saveop = PL_op;
3295 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3296 COP * const oldcurcop = PL_curcop;
3297 bool in_require = (saveop->op_type == OP_REQUIRE);
3301 PL_in_eval = (in_require
3302 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3304 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3305 ? EVAL_RE_REPARSING : 0)));
3309 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3311 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3312 CX_CUR()->blk_eval.cv = evalcv;
3313 CX_CUR()->blk_gimme = gimme;
3315 CvOUTSIDE_SEQ(evalcv) = seq;
3316 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3318 /* set up a scratch pad */
3320 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3321 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3324 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3326 /* make sure we compile in the right package */
3328 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3329 SAVEGENERICSV(PL_curstash);
3330 PL_curstash = (HV *)CopSTASH(PL_curcop);
3331 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3332 else SvREFCNT_inc_simple_void(PL_curstash);
3334 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3335 SAVESPTR(PL_beginav);
3336 PL_beginav = newAV();
3337 SAVEFREESV(PL_beginav);
3338 SAVESPTR(PL_unitcheckav);
3339 PL_unitcheckav = newAV();
3340 SAVEFREESV(PL_unitcheckav);
3343 ENTER_with_name("evalcomp");
3344 SAVESPTR(PL_compcv);
3347 /* try to compile it */
3349 PL_eval_root = NULL;
3350 PL_curcop = &PL_compiling;
3351 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3352 PL_in_eval |= EVAL_KEEPERR;
3359 hv_clear(GvHV(PL_hintgv));
3362 PL_hints = saveop->op_private & OPpEVAL_COPHH
3363 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
3365 /* making 'use re eval' not be in scope when compiling the
3366 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3367 * infinite recursion when S_has_runtime_code() gives a false
3368 * positive: the second time round, HINT_RE_EVAL isn't set so we
3369 * don't bother calling S_has_runtime_code() */
3370 if (PL_in_eval & EVAL_RE_REPARSING)
3371 PL_hints &= ~HINT_RE_EVAL;
3374 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3375 SvREFCNT_dec(GvHV(PL_hintgv));
3376 GvHV(PL_hintgv) = hh;
3379 SAVECOMPILEWARNINGS();
3381 if (PL_dowarn & G_WARN_ALL_ON)
3382 PL_compiling.cop_warnings = pWARN_ALL ;
3383 else if (PL_dowarn & G_WARN_ALL_OFF)
3384 PL_compiling.cop_warnings = pWARN_NONE ;
3386 PL_compiling.cop_warnings = pWARN_STD ;
3389 PL_compiling.cop_warnings =
3390 DUP_WARNINGS(oldcurcop->cop_warnings);
3391 cophh_free(CopHINTHASH_get(&PL_compiling));
3392 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3393 /* The label, if present, is the first entry on the chain. So rather
3394 than writing a blank label in front of it (which involves an
3395 allocation), just use the next entry in the chain. */
3396 PL_compiling.cop_hints_hash
3397 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3398 /* Check the assumption that this removed the label. */
3399 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3402 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3405 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3407 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3408 * so honour CATCH_GET and trap it here if necessary */
3411 /* compile the code */
3412 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3414 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3419 /* note that if yystatus == 3, then the require/eval died during
3420 * compilation, so the EVAL CX block has already been popped, and
3421 * various vars restored */
3422 if (yystatus != 3) {
3424 op_free(PL_eval_root);
3425 PL_eval_root = NULL;
3427 SP = PL_stack_base + POPMARK; /* pop original mark */
3429 assert(CxTYPE(cx) == CXt_EVAL);
3430 /* pop the CXt_EVAL, and if was a require, croak */
3431 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
3434 /* die_unwind() re-croaks when in require, having popped the
3435 * require EVAL context. So we should never catch a require
3437 assert(!in_require);
3440 if (!*(SvPV_nolen_const(errsv)))
3441 sv_setpvs(errsv, "Compilation error");
3443 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3448 /* Compilation successful. Now clean up */
3450 LEAVE_with_name("evalcomp");
3452 CopLINE_set(&PL_compiling, 0);
3453 SAVEFREEOP(PL_eval_root);
3454 cv_forget_slab(evalcv);
3456 DEBUG_x(dump_eval());
3458 /* Register with debugger: */
3459 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3460 CV * const cv = get_cvs("DB::postponed", 0);
3464 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3466 call_sv(MUTABLE_SV(cv), G_DISCARD);
3470 if (PL_unitcheckav) {
3471 OP *es = PL_eval_start;
3472 call_list(PL_scopestack_ix, PL_unitcheckav);
3476 CvDEPTH(evalcv) = 1;
3477 SP = PL_stack_base + POPMARK; /* pop original mark */
3478 PL_op = saveop; /* The caller may need it. */
3479 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3487 S_check_type_and_open(pTHX_ SV *name)
3492 const char *p = SvPV_const(name, len);
3495 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3497 /* checking here captures a reasonable error message when
3498 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3499 * user gets a confusing message about looking for the .pmc file
3500 * rather than for the .pm file so do the check in S_doopen_pm when
3501 * PMC is on instead of here. S_doopen_pm calls this func.
3502 * This check prevents a \0 in @INC causing problems.
3504 #ifdef PERL_DISABLE_PMC
3505 if (!IS_SAFE_PATHNAME(p, len, "require"))
3509 /* on Win32 stat is expensive (it does an open() and close() twice and
3510 a couple other IO calls), the open will fail with a dir on its own with
3511 errno EACCES, so only do a stat to separate a dir from a real EACCES
3512 caused by user perms */
3514 /* we use the value of errno later to see how stat() or open() failed.
3515 * We don't want it set if the stat succeeded but we still failed,
3516 * such as if the name exists, but is a directory */
3519 st_rc = PerlLIO_stat(p, &st);
3521 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3526 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3528 /* EACCES stops the INC search early in pp_require to implement
3529 feature RT #113422 */
3530 if(!retio && errno == EACCES) { /* exists but probably a directory */
3532 st_rc = PerlLIO_stat(p, &st);
3534 if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
3545 #ifndef PERL_DISABLE_PMC
3547 S_doopen_pm(pTHX_ SV *name)
3550 const char *p = SvPV_const(name, namelen);
3552 PERL_ARGS_ASSERT_DOOPEN_PM;
3554 /* check the name before trying for the .pmc name to avoid the
3555 * warning referring to the .pmc which the user probably doesn't
3556 * know or care about
3558 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3561 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3562 SV *const pmcsv = sv_newmortal();
3565 SvSetSV_nosteal(pmcsv,name);
3566 sv_catpvs(pmcsv, "c");
3568 pmcio = check_type_and_open(pmcsv);
3572 return check_type_and_open(name);
3575 # define doopen_pm(name) check_type_and_open(name)
3576 #endif /* !PERL_DISABLE_PMC */
3578 /* require doesn't search for absolute names, or when the name is
3579 explicitly relative the current directory */
3580 PERL_STATIC_INLINE bool
3581 S_path_is_searchable(const char *name)
3583 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3585 if (PERL_FILE_IS_ABSOLUTE(name)
3587 || (*name == '.' && ((name[1] == '/' ||
3588 (name[1] == '.' && name[2] == '/'))
3589 || (name[1] == '\\' ||
3590 ( name[1] == '.' && name[2] == '\\')))
3593 || (*name == '.' && (name[1] == '/' ||
3594 (name[1] == '.' && name[2] == '/')))
3605 /* implement 'require 5.010001' */
3608 S_require_version(pTHX_ SV *sv)
3612 sv = sv_2mortal(new_version(sv));
3613 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3614 upg_version(PL_patchlevel, TRUE);
3615 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3616 if ( vcmp(sv,PL_patchlevel) <= 0 )
3617 DIE(aTHX_ "Perls since %" SVf " too modern--this is %" SVf ", stopped",
3618 SVfARG(sv_2mortal(vnormal(sv))),
3619 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3623 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3626 SV * const req = SvRV(sv);
3627 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3629 /* get the left hand term */
3630 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3632 first = SvIV(*av_fetch(lav,0,0));
3633 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3634 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3635 || av_tindex(lav) > 1 /* FP with > 3 digits */
3636 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3638 DIE(aTHX_ "Perl %" SVf " required--this is only "
3639 "%" SVf ", stopped",
3640 SVfARG(sv_2mortal(vnormal(req))),
3641 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3644 else { /* probably 'use 5.10' or 'use 5.8' */
3648 if (av_tindex(lav)>=1)
3649 second = SvIV(*av_fetch(lav,1,0));
3651 second /= second >= 600 ? 100 : 10;
3652 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3653 (int)first, (int)second);
3654 upg_version(hintsv, TRUE);
3656 DIE(aTHX_ "Perl %" SVf " required (did you mean %" SVf "?)"
3657 "--this is only %" SVf ", stopped",
3658 SVfARG(sv_2mortal(vnormal(req))),
3659 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3660 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3669 /* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3670 * The first form will have already been converted at compile time to
3671 * the second form */
3674 S_require_file(pTHX_ SV *const sv)
3684 int vms_unixname = 0;
3687 const char *tryname = NULL;
3689 const U8 gimme = GIMME_V;
3690 int filter_has_file = 0;
3691 PerlIO *tryrsfp = NULL;
3692 SV *filter_cache = NULL;
3693 SV *filter_state = NULL;
3694 SV *filter_sub = NULL;
3698 bool path_searchable;
3699 I32 old_savestack_ix;
3700 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3701 const char *const op_name = op_is_require ? "require" : "do";
3703 assert(op_is_require || PL_op->op_type == OP_DOFILE);
3706 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3707 name = SvPV_nomg_const(sv, len);
3708 if (!(name && len > 0 && *name))
3709 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3711 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3712 if (!op_is_require) {
3716 DIE(aTHX_ "Can't locate %s: %s",
3717 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3718 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3721 TAINT_PROPER(op_name);
3723 path_searchable = path_is_searchable(name);
3726 /* The key in the %ENV hash is in the syntax of file passed as the argument
3727 * usually this is in UNIX format, but sometimes in VMS format, which
3728 * can result in a module being pulled in more than once.
3729 * To prevent this, the key must be stored in UNIX format if the VMS
3730 * name can be translated to UNIX.
3734 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3736 unixlen = strlen(unixname);
3742 /* if not VMS or VMS name can not be translated to UNIX, pass it
3745 unixname = (char *) name;
3748 if (op_is_require) {
3749 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3750 unixname, unixlen, 0);
3752 if (*svp != &PL_sv_undef)
3755 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3756 "Compilation failed in require", unixname);
3759 if (PL_op->op_flags & OPf_KIDS) {
3760 SVOP * const kid = (SVOP*)cUNOP->op_first;
3762 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3763 /* require foo (or use foo) with a bareword.
3764 Perl_load_module fakes up the identical optree, but its
3765 arguments aren't restricted by the parser to real barewords.
3767 const STRLEN package_len = len - 3;
3768 const char slashdot[2] = {'/', '.'};
3770 const char backslashdot[2] = {'\\', '.'};
3773 /* Disallow *purported* barewords that map to absolute
3774 filenames, filenames relative to the current or parent
3775 directory, or (*nix) hidden filenames. Also sanity check
3776 that the generated filename ends .pm */
3777 if (!path_searchable || len < 3 || name[0] == '.'
3778 || !memEQ(name + package_len, ".pm", 3))
3779 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%" SVf "\"", sv);
3780 if (memchr(name, 0, package_len)) {
3781 /* diag_listed_as: Bareword in require contains "%s" */
3782 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3784 if (ninstr(name, name + package_len, slashdot,
3785 slashdot + sizeof(slashdot))) {
3786 /* diag_listed_as: Bareword in require contains "%s" */
3787 DIE(aTHX_ "Bareword in require contains \"/.\"");
3790 if (ninstr(name, name + package_len, backslashdot,
3791 backslashdot + sizeof(backslashdot))) {
3792 /* diag_listed_as: Bareword in require contains "%s" */
3793 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3800 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
3802 /* prepare to compile file */
3804 if (!path_searchable) {
3805 /* At this point, name is SvPVX(sv) */
3807 tryrsfp = doopen_pm(sv);
3809 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3810 AV * const ar = GvAVn(PL_incgv);
3817 namesv = newSV_type(SVt_PV);
3818 for (i = 0; i <= AvFILL(ar); i++) {
3819 SV * const dirsv = *av_fetch(ar, i, TRUE);
3827 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3828 && !SvOBJECT(SvRV(loader)))
3830 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3834 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%" UVxf "/%s",
3835 PTR2UV(SvRV(dirsv)), name);
3836 tryname = SvPVX_const(namesv);
3839 if (SvPADTMP(nsv)) {
3840 nsv = sv_newmortal();
3841 SvSetSV_nosteal(nsv,sv);
3844 ENTER_with_name("call_INC");
3852 if (SvGMAGICAL(loader)) {
3853 SV *l = sv_newmortal();
3854 sv_setsv_nomg(l, loader);
3857 if (sv_isobject(loader))
3858 count = call_method("INC", G_ARRAY);
3860 count = call_sv(loader, G_ARRAY);
3870 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3871 && !isGV_with_GP(SvRV(arg))) {
3872 filter_cache = SvRV(arg);
3879 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3883 if (isGV_with_GP(arg)) {
3884 IO * const io = GvIO((const GV *)arg);
3889 tryrsfp = IoIFP(io);
3890 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3891 PerlIO_close(IoOFP(io));
3902 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3904 SvREFCNT_inc_simple_void_NN(filter_sub);
3907 filter_state = SP[i];
3908 SvREFCNT_inc_simple_void(filter_state);
3912 if (!tryrsfp && (filter_cache || filter_sub)) {
3913 tryrsfp = PerlIO_open(BIT_BUCKET,
3919 /* FREETMPS may free our filter_cache */
3920 SvREFCNT_inc_simple_void(filter_cache);
3924 LEAVE_with_name("call_INC");
3926 /* Now re-mortalize it. */
3927 sv_2mortal(filter_cache);
3929 /* Adjust file name if the hook has set an %INC entry.
3930 This needs to happen after the FREETMPS above. */
3931 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3933 tryname = SvPV_nolen_const(*svp);
3940 filter_has_file = 0;
3941 filter_cache = NULL;
3943 SvREFCNT_dec_NN(filter_state);
3944 filter_state = NULL;
3947 SvREFCNT_dec_NN(filter_sub);
3952 if (path_searchable) {
3957 dir = SvPV_nomg_const(dirsv, dirlen);
3963 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
3967 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3970 sv_setpv(namesv, unixdir);
3971 sv_catpv(namesv, unixname);
3973 # ifdef __SYMBIAN32__
3974 if (PL_origfilename[0] &&
3975 PL_origfilename[1] == ':' &&
3976 !(dir[0] && dir[1] == ':'))
3977 Perl_sv_setpvf(aTHX_ namesv,
3982 Perl_sv_setpvf(aTHX_ namesv,
3986 /* The equivalent of
3987 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3988 but without the need to parse the format string, or
3989 call strlen on either pointer, and with the correct
3990 allocation up front. */
3992 char *tmp = SvGROW(namesv, dirlen + len + 2);
3994 memcpy(tmp, dir, dirlen);
3997 /* Avoid '<dir>//<file>' */
3998 if (!dirlen || *(tmp-1) != '/') {
4001 /* So SvCUR_set reports the correct length below */
4005 /* name came from an SV, so it will have a '\0' at the
4006 end that we can copy as part of this memcpy(). */
4007 memcpy(tmp, name, len + 1);
4009 SvCUR_set(namesv, dirlen + len + 1);
4014 TAINT_PROPER(op_name);
4015 tryname = SvPVX_const(namesv);
4016 tryrsfp = doopen_pm(namesv);
4018 if (tryname[0] == '.' && tryname[1] == '/') {
4020 while (*++tryname == '/') {}
4024 else if (errno == EMFILE || errno == EACCES) {
4025 /* no point in trying other paths if out of handles;
4026 * on the other hand, if we couldn't open one of the
4027 * files, then going on with the search could lead to
4028 * unexpected results; see perl #113422
4037 saved_errno = errno; /* sv_2mortal can realloc things */
4040 if (op_is_require) {
4041 if(saved_errno == EMFILE || saved_errno == EACCES) {
4042 /* diag_listed_as: Can't locate %s */
4043 DIE(aTHX_ "Can't locate %s: %s: %s",
4044 name, tryname, Strerror(saved_errno));
4046 if (namesv) { /* did we lookup @INC? */
4047 AV * const ar = GvAVn(PL_incgv);
4049 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4050 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4051 for (i = 0; i <= AvFILL(ar); i++) {
4052 sv_catpvs(inc, " ");
4053 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4055 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4056 const char *c, *e = name + len - 3;
4057 sv_catpv(msg, " (you may need to install the ");
4058 for (c = name; c < e; c++) {
4060 sv_catpvs(msg, "::");
4063 sv_catpvn(msg, c, 1);
4066 sv_catpv(msg, " module)");
4068 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4069 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4071 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4072 sv_catpv(msg, " (did you run h2ph?)");
4075 /* diag_listed_as: Can't locate %s */
4077 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4081 DIE(aTHX_ "Can't locate %s", name);
4088 SETERRNO(0, SS_NORMAL);
4090 /* Assume success here to prevent recursive requirement. */
4091 /* name is never assigned to again, so len is still strlen(name) */
4092 /* Check whether a hook in @INC has already filled %INC */
4094 (void)hv_store(GvHVn(PL_incgv),
4095 unixname, unixlen, newSVpv(tryname,0),0);
4097 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4099 (void)hv_store(GvHVn(PL_incgv),
4100 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4103 old_savestack_ix = PL_savestack_ix;
4104 SAVECOPFILE_FREE(&PL_compiling);
4105 CopFILE_set(&PL_compiling, tryname);
4106 lex_start(NULL, tryrsfp, 0);
4108 if (filter_sub || filter_cache) {
4109 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4110 than hanging another SV from it. In turn, filter_add() optionally
4111 takes the SV to use as the filter (or creates a new SV if passed
4112 NULL), so simply pass in whatever value filter_cache has. */
4113 SV * const fc = filter_cache ? newSV(0) : NULL;
4115 if (fc) sv_copypv(fc, filter_cache);
4116 datasv = filter_add(S_run_user_filter, fc);
4117 IoLINES(datasv) = filter_has_file;
4118 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4119 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4122 /* switch to eval mode */
4123 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
4124 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
4126 SAVECOPLINE(&PL_compiling);
4127 CopLINE_set(&PL_compiling, 0);
4131 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
4132 op = DOCATCH(PL_eval_start);
4134 op = PL_op->op_next;
4136 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
4142 /* also used for: pp_dofile() */
4150 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4151 ? S_require_version(aTHX_ sv)
4152 : S_require_file(aTHX_ sv);
4156 /* This is a op added to hold the hints hash for
4157 pp_entereval. The hash can be modified by the code
4158 being eval'ed, so we return a copy instead. */
4163 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4173 const U8 gimme = GIMME_V;
4174 const U32 was = PL_breakable_sub_gen;
4175 char tbuf[TYPE_DIGITS(long) + 12];
4176 bool saved_delete = FALSE;
4177 char *tmpbuf = tbuf;
4180 U32 seq, lex_flags = 0;
4181 HV *saved_hh = NULL;
4182 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4183 I32 old_savestack_ix;
4185 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4186 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4188 else if (PL_hints & HINT_LOCALIZE_HH || (
4189 PL_op->op_private & OPpEVAL_COPHH
4190 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4192 saved_hh = cop_hints_2hv(PL_curcop, 0);
4193 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4197 /* make sure we've got a plain PV (no overload etc) before testing
4198 * for taint. Making a copy here is probably overkill, but better
4199 * safe than sorry */
4201 const char * const p = SvPV_const(sv, len);
4203 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4204 lex_flags |= LEX_START_COPIED;
4206 if (bytes && SvUTF8(sv))
4207 SvPVbyte_force(sv, len);
4209 else if (bytes && SvUTF8(sv)) {
4210 /* Don't modify someone else's scalar */
4213 (void)sv_2mortal(sv);
4214 SvPVbyte_force(sv,len);
4215 lex_flags |= LEX_START_COPIED;
4218 TAINT_IF(SvTAINTED(sv));
4219 TAINT_PROPER("eval");
4221 old_savestack_ix = PL_savestack_ix;
4223 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4224 ? LEX_IGNORE_UTF8_HINTS
4225 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4229 /* switch to eval mode */
4231 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4232 SV * const temp_sv = sv_newmortal();
4233 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%" IVdf "]",
4234 (unsigned long)++PL_evalseq,
4235 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4236 tmpbuf = SvPVX(temp_sv);
4237 len = SvCUR(temp_sv);
4240 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4241 SAVECOPFILE_FREE(&PL_compiling);
4242 CopFILE_set(&PL_compiling, tmpbuf+2);
4243 SAVECOPLINE(&PL_compiling);
4244 CopLINE_set(&PL_compiling, 1);
4245 /* special case: an eval '' executed within the DB package gets lexically
4246 * placed in the first non-DB CV rather than the current CV - this
4247 * allows the debugger to execute code, find lexicals etc, in the
4248 * scope of the code being debugged. Passing &seq gets find_runcv
4249 * to do the dirty work for us */
4250 runcv = find_runcv(&seq);
4252 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
4253 cx_pusheval(cx, PL_op->op_next, NULL);
4255 /* prepare to compile string */
4257 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4258 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4260 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4261 deleting the eval's FILEGV from the stash before gv_check() runs
4262 (i.e. before run-time proper). To work around the coredump that
4263 ensues, we always turn GvMULTI_on for any globals that were
4264 introduced within evals. See force_ident(). GSAR 96-10-12 */
4265 char *const safestr = savepvn(tmpbuf, len);
4266 SAVEDELETE(PL_defstash, safestr, len);
4267 saved_delete = TRUE;
4272 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
4273 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4274 ? PERLDB_LINE_OR_SAVESRC
4275 : PERLDB_SAVESRC_NOSUBS) {
4276 /* Retain the filegv we created. */
4277 } else if (!saved_delete) {
4278 char *const safestr = savepvn(tmpbuf, len);
4279 SAVEDELETE(PL_defstash, safestr, len);
4281 return DOCATCH(PL_eval_start);
4283 /* We have already left the scope set up earlier thanks to the LEAVE
4284 in doeval_compile(). */
4285 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4286 ? PERLDB_LINE_OR_SAVESRC
4287 : PERLDB_SAVESRC_INVALID) {
4288 /* Retain the filegv we created. */
4289 } else if (!saved_delete) {
4290 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4292 return PL_op->op_next;
4297 /* also tail-called by pp_return */
4312 assert(CxTYPE(cx) == CXt_EVAL);
4314 oldsp = PL_stack_base + cx->blk_oldsp;
4315 gimme = cx->blk_gimme;
4317 /* did require return a false value? */
4318 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4319 && !(gimme == G_SCALAR
4320 ? SvTRUE(*PL_stack_sp)
4321 : PL_stack_sp > oldsp);
4323 if (gimme == G_VOID)
4324 PL_stack_sp = oldsp;
4326 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
4328 /* the cx_popeval does a leavescope, which frees the optree associated
4329 * with eval, which if it frees the nextstate associated with
4330 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4331 * regex when running under 'use re Debug' because it needs PL_curcop
4332 * to get the current hints. So restore it early.
4334 PL_curcop = cx->blk_oldcop;
4336 /* grab this value before cx_popeval restores the old PL_in_eval */
4337 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4338 retop = cx->blk_eval.retop;
4339 evalcv = cx->blk_eval.cv;
4341 assert(CvDEPTH(evalcv) == 1);
4343 CvDEPTH(evalcv) = 0;
4345 /* pop the CXt_EVAL, and if a require failed, croak */
4346 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
4354 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4355 close to the related Perl_create_eval_scope. */
4357 Perl_delete_eval_scope(pTHX)
4368 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4369 also needed by Perl_fold_constants. */
4371 Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
4374 const U8 gimme = GIMME_V;
4376 cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
4377 PL_stack_sp, PL_savestack_ix);
4378 cx_pusheval(cx, retop, NULL);
4380 PL_in_eval = EVAL_INEVAL;
4381 if (flags & G_KEEPERR)
4382 PL_in_eval |= EVAL_KEEPERR;
4385 if (flags & G_FAKINGEVAL) {
4386 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4392 create_eval_scope(cLOGOP->op_other->op_next, 0);
4393 return DOCATCH(PL_op->op_next);
4397 /* also tail-called by pp_return */
4409 assert(CxTYPE(cx) == CXt_EVAL);
4410 oldsp = PL_stack_base + cx->blk_oldsp;
4411 gimme = cx->blk_gimme;
4413 if (gimme == G_VOID)
4414 PL_stack_sp = oldsp;
4416 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4420 retop = cx->blk_eval.retop;
4431 const U8 gimme = GIMME_V;
4435 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4436 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
4438 cx = cx_pushblock(CXt_GIVEN, gimme, SP, PL_savestack_ix);
4439 cx_pushgiven(cx, origsv);
4449 PERL_UNUSED_CONTEXT;
4452 assert(CxTYPE(cx) == CXt_GIVEN);
4453 oldsp = PL_stack_base + cx->blk_oldsp;
4454 gimme = cx->blk_gimme;
4456 if (gimme == G_VOID)
4457 PL_stack_sp = oldsp;
4459 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4469 /* Helper routines used by pp_smartmatch */
4471 S_make_matcher(pTHX_ REGEXP *re)
4473 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4475 PERL_ARGS_ASSERT_MAKE_MATCHER;
4477 PM_SETRE(matcher, ReREFCNT_inc(re));
4479 SAVEFREEOP((OP *) matcher);
4480 ENTER_with_name("matcher"); SAVETMPS;
4486 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4491 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4493 PL_op = (OP *) matcher;
4496 (void) Perl_pp_match(aTHX);
4498 result = SvTRUEx(POPs);
4505 S_destroy_matcher(pTHX_ PMOP *matcher)
4507 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4508 PERL_UNUSED_ARG(matcher);
4511 LEAVE_with_name("matcher");
4514 /* Do a smart match */
4517 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4518 return do_smartmatch(NULL, NULL, 0);
4521 /* This version of do_smartmatch() implements the
4522 * table of smart matches that is found in perlsyn.
4525 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4529 bool object_on_left = FALSE;
4530 SV *e = TOPs; /* e is for 'expression' */
4531 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4533 /* Take care only to invoke mg_get() once for each argument.
4534 * Currently we do this by copying the SV if it's magical. */
4536 if (!copied && SvGMAGICAL(d))
4537 d = sv_mortalcopy(d);
4544 e = sv_mortalcopy(e);
4546 /* First of all, handle overload magic of the rightmost argument */
4549 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4550 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4552 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4559 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4562 SP -= 2; /* Pop the values */
4567 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4574 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4575 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4576 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4578 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4579 object_on_left = TRUE;
4582 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4584 if (object_on_left) {
4585 goto sm_any_sub; /* Treat objects like scalars */
4587 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4588 /* Test sub truth for each key */
4590 bool andedresults = TRUE;
4591 HV *hv = (HV*) SvRV(d);
4592 I32 numkeys = hv_iterinit(hv);
4593 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4596 while ( (he = hv_iternext(hv)) ) {
4597 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4598 ENTER_with_name("smartmatch_hash_key_test");
4601 PUSHs(hv_iterkeysv(he));
4603 c = call_sv(e, G_SCALAR);
4606 andedresults = FALSE;
4608 andedresults = SvTRUEx(POPs) && andedresults;
4610 LEAVE_with_name("smartmatch_hash_key_test");
4617 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4618 /* Test sub truth for each element */
4620 bool andedresults = TRUE;
4621 AV *av = (AV*) SvRV(d);
4622 const I32 len = av_tindex(av);
4623 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4626 for (i = 0; i <= len; ++i) {
4627 SV * const * const svp = av_fetch(av, i, FALSE);
4628 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4629 ENTER_with_name("smartmatch_array_elem_test");
4635 c = call_sv(e, G_SCALAR);
4638 andedresults = FALSE;
4640 andedresults = SvTRUEx(POPs) && andedresults;
4642 LEAVE_with_name("smartmatch_array_elem_test");
4651 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4652 ENTER_with_name("smartmatch_coderef");
4657 c = call_sv(e, G_SCALAR);
4661 else if (SvTEMP(TOPs))
4662 SvREFCNT_inc_void(TOPs);
4664 LEAVE_with_name("smartmatch_coderef");
4669 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4670 if (object_on_left) {
4671 goto sm_any_hash; /* Treat objects like scalars */
4673 else if (!SvOK(d)) {
4674 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4677 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4678 /* Check that the key-sets are identical */
4680 HV *other_hv = MUTABLE_HV(SvRV(d));
4683 U32 this_key_count = 0,
4684 other_key_count = 0;
4685 HV *hv = MUTABLE_HV(SvRV(e));
4687 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4688 /* Tied hashes don't know how many keys they have. */
4689 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4690 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4694 HV * const temp = other_hv;
4700 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4704 /* The hashes have the same number of keys, so it suffices
4705 to check that one is a subset of the other. */
4706 (void) hv_iterinit(hv);
4707 while ( (he = hv_iternext(hv)) ) {
4708 SV *key = hv_iterkeysv(he);
4710 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4713 if(!hv_exists_ent(other_hv, key, 0)) {
4714 (void) hv_iterinit(hv); /* reset iterator */
4720 (void) hv_iterinit(other_hv);
4721 while ( hv_iternext(other_hv) )
4725 other_key_count = HvUSEDKEYS(other_hv);
4727 if (this_key_count != other_key_count)
4732 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4733 AV * const other_av = MUTABLE_AV(SvRV(d));
4734 const SSize_t other_len = av_tindex(other_av) + 1;
4736 HV *hv = MUTABLE_HV(SvRV(e));
4738 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4739 for (i = 0; i < other_len; ++i) {
4740 SV ** const svp = av_fetch(other_av, i, FALSE);
4741 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4742 if (svp) { /* ??? When can this not happen? */
4743 if (hv_exists_ent(hv, *svp, 0))
4749 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4750 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4753 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4755 HV *hv = MUTABLE_HV(SvRV(e));
4757 (void) hv_iterinit(hv);
4758 while ( (he = hv_iternext(hv)) ) {
4759 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4761 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4763 (void) hv_iterinit(hv);
4764 destroy_matcher(matcher);
4769 destroy_matcher(matcher);
4775 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4776 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4783 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4784 if (object_on_left) {
4785 goto sm_any_array; /* Treat objects like scalars */
4787 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4788 AV * const other_av = MUTABLE_AV(SvRV(e));
4789 const SSize_t other_len = av_tindex(other_av) + 1;
4792 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4793 for (i = 0; i < other_len; ++i) {
4794 SV ** const svp = av_fetch(other_av, i, FALSE);
4796 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4797 if (svp) { /* ??? When can this not happen? */
4798 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4804 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4805 AV *other_av = MUTABLE_AV(SvRV(d));
4806 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4807 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4811 const SSize_t other_len = av_tindex(other_av);
4813 if (NULL == seen_this) {
4814 seen_this = newHV();
4815 (void) sv_2mortal(MUTABLE_SV(seen_this));
4817 if (NULL == seen_other) {
4818 seen_other = newHV();
4819 (void) sv_2mortal(MUTABLE_SV(seen_other));
4821 for(i = 0; i <= other_len; ++i) {
4822 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4823 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4825 if (!this_elem || !other_elem) {
4826 if ((this_elem && SvOK(*this_elem))
4827 || (other_elem && SvOK(*other_elem)))
4830 else if (hv_exists_ent(seen_this,
4831 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4832 hv_exists_ent(seen_other,
4833 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4835 if (*this_elem != *other_elem)
4839 (void)hv_store_ent(seen_this,
4840 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4842 (void)hv_store_ent(seen_other,
4843 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4849 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4850 (void) do_smartmatch(seen_this, seen_other, 0);
4852 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4861 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4862 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4865 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4866 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4869 for(i = 0; i <= this_len; ++i) {
4870 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4871 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4873 if (svp && matcher_matches_sv(matcher, *svp)) {
4875 destroy_matcher(matcher);
4880 destroy_matcher(matcher);
4884 else if (!SvOK(d)) {
4885 /* undef ~~ array */
4886 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4889 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4890 for (i = 0; i <= this_len; ++i) {
4891 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4892 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4893 if (!svp || !SvOK(*svp))
4902 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4904 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4905 for (i = 0; i <= this_len; ++i) {
4906 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4913 /* infinite recursion isn't supposed to happen here */
4914 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4915 (void) do_smartmatch(NULL, NULL, 1);
4917 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4926 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4927 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4928 SV *t = d; d = e; e = t;
4929 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4932 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4933 SV *t = d; d = e; e = t;
4934 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4935 goto sm_regex_array;
4938 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4941 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4943 result = matcher_matches_sv(matcher, d);
4945 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
4946 destroy_matcher(matcher);
4951 /* See if there is overload magic on left */
4952 else if (object_on_left && SvAMAGIC(d)) {
4954 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4955 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4958 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4966 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4969 else if (!SvOK(d)) {
4970 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4971 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4976 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4977 DEBUG_M(if (SvNIOK(e))
4978 Perl_deb(aTHX_ " applying rule Any-Num\n");
4980 Perl_deb(aTHX_ " applying rule Num-numish\n");
4982 /* numeric comparison */
4985 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4986 (void) Perl_pp_i_eq(aTHX);
4988 (void) Perl_pp_eq(aTHX);
4996 /* As a last resort, use string comparison */
4997 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5000 return Perl_pp_seq(aTHX);
5007 const U8 gimme = GIMME_V;
5009 /* This is essentially an optimization: if the match
5010 fails, we don't want to push a context and then
5011 pop it again right away, so we skip straight
5012 to the op that follows the leavewhen.
5013 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5015 if (!(PL_op->op_flags & OPf_SPECIAL) && !SvTRUEx(POPs))
5016 RETURNOP(cLOGOP->op_other->op_next);
5018 cx = cx_pushblock(CXt_WHEN, gimme, SP, PL_savestack_ix);
5032 assert(CxTYPE(cx) == CXt_WHEN);
5033 gimme = cx->blk_gimme;
5035 cxix = dopoptogivenfor(cxstack_ix);
5037 /* diag_listed_as: Can't "when" outside a topicalizer */
5038 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5039 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5041 oldsp = PL_stack_base + cx->blk_oldsp;
5042 if (gimme == G_VOID)
5043 PL_stack_sp = oldsp;
5045 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
5047 /* pop the WHEN, BLOCK and anything else before the GIVEN/FOR */
5048 assert(cxix < cxstack_ix);
5051 cx = &cxstack[cxix];
5053 if (CxFOREACH(cx)) {
5054 /* emulate pp_next. Note that any stack(s) cleanup will be
5055 * done by the pp_unstack which op_nextop should point to */
5058 PL_curcop = cx->blk_oldcop;
5059 return cx->blk_loop.my_op->op_nextop;
5063 assert(cx->blk_givwhen.leave_op->op_type == OP_LEAVEGIVEN);
5064 return cx->blk_givwhen.leave_op;
5074 cxix = dopoptowhen(cxstack_ix);
5076 DIE(aTHX_ "Can't \"continue\" outside a when block");
5078 if (cxix < cxstack_ix)
5082 assert(CxTYPE(cx) == CXt_WHEN);
5083 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5087 nextop = cx->blk_givwhen.leave_op->op_next;
5098 cxix = dopoptogivenfor(cxstack_ix);
5100 DIE(aTHX_ "Can't \"break\" outside a given block");
5102 cx = &cxstack[cxix];
5104 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5106 if (cxix < cxstack_ix)
5109 /* Restore the sp at the time we entered the given block */
5111 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5113 return cx->blk_givwhen.leave_op;
5117 S_doparseform(pTHX_ SV *sv)
5120 char *s = SvPV(sv, len);
5122 char *base = NULL; /* start of current field */
5123 I32 skipspaces = 0; /* number of contiguous spaces seen */
5124 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5125 bool repeat = FALSE; /* ~~ seen on this line */
5126 bool postspace = FALSE; /* a text field may need right padding */
5129 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5131 bool ischop; /* it's a ^ rather than a @ */
5132 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5133 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5137 PERL_ARGS_ASSERT_DOPARSEFORM;
5140 Perl_croak(aTHX_ "Null picture in formline");
5142 if (SvTYPE(sv) >= SVt_PVMG) {
5143 /* This might, of course, still return NULL. */
5144 mg = mg_find(sv, PERL_MAGIC_fm);
5146 sv_upgrade(sv, SVt_PVMG);
5150 /* still the same as previously-compiled string? */
5151 SV *old = mg->mg_obj;
5152 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5153 && len == SvCUR(old)
5154 && strnEQ(SvPVX(old), SvPVX(sv), len)
5156 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5160 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5161 Safefree(mg->mg_ptr);
5167 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5168 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5171 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5172 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5176 /* estimate the buffer size needed */
5177 for (base = s; s <= send; s++) {
5178 if (*s == '\n' || *s == '@' || *s == '^')
5184 Newx(fops, maxops, U32);
5189 *fpc++ = FF_LINEMARK;
5190 noblank = repeat = FALSE;
5208 case ' ': case '\t':
5215 } /* else FALL THROUGH */
5223 *fpc++ = FF_LITERAL;
5231 *fpc++ = (U32)skipspaces;
5235 *fpc++ = FF_NEWLINE;
5239 arg = fpc - linepc + 1;
5246 *fpc++ = FF_LINEMARK;
5247 noblank = repeat = FALSE;
5256 ischop = s[-1] == '^';
5262 arg = (s - base) - 1;
5264 *fpc++ = FF_LITERAL;
5270 if (*s == '*') { /* @* or ^* */
5272 *fpc++ = 2; /* skip the @* or ^* */
5274 *fpc++ = FF_LINESNGL;
5277 *fpc++ = FF_LINEGLOB;
5279 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5280 arg = ischop ? FORM_NUM_BLANK : 0;
5285 const char * const f = ++s;
5288 arg |= FORM_NUM_POINT + (s - f);
5290 *fpc++ = s - base; /* fieldsize for FETCH */
5291 *fpc++ = FF_DECIMAL;
5293 unchopnum |= ! ischop;
5295 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5296 arg = ischop ? FORM_NUM_BLANK : 0;
5298 s++; /* skip the '0' first */
5302 const char * const f = ++s;
5305 arg |= FORM_NUM_POINT + (s - f);
5307 *fpc++ = s - base; /* fieldsize for FETCH */
5308 *fpc++ = FF_0DECIMAL;
5310 unchopnum |= ! ischop;
5312 else { /* text field */
5314 bool ismore = FALSE;
5317 while (*++s == '>') ;
5318 prespace = FF_SPACE;
5320 else if (*s == '|') {
5321 while (*++s == '|') ;
5322 prespace = FF_HALFSPACE;
5327 while (*++s == '<') ;
5330 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5334 *fpc++ = s - base; /* fieldsize for FETCH */
5336 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5339 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5353 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5356 mg->mg_ptr = (char *) fops;
5357 mg->mg_len = arg * sizeof(U32);
5358 mg->mg_obj = sv_copy;
5359 mg->mg_flags |= MGf_REFCOUNTED;
5361 if (unchopnum && repeat)
5362 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5369 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5371 /* Can value be printed in fldsize chars, using %*.*f ? */
5375 int intsize = fldsize - (value < 0 ? 1 : 0);
5377 if (frcsize & FORM_NUM_POINT)
5379 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5382 while (intsize--) pwr *= 10.0;
5383 while (frcsize--) eps /= 10.0;
5386 if (value + eps >= pwr)
5389 if (value - eps <= -pwr)
5396 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5398 SV * const datasv = FILTER_DATA(idx);
5399 const int filter_has_file = IoLINES(datasv);
5400 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5401 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5406 char *prune_from = NULL;
5407 bool read_from_cache = FALSE;
5411 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5413 assert(maxlen >= 0);
5416 /* I was having segfault trouble under Linux 2.2.5 after a
5417 parse error occurred. (Had to hack around it with a test
5418 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5419 not sure where the trouble is yet. XXX */
5422 SV *const cache = datasv;
5425 const char *cache_p = SvPV(cache, cache_len);
5429 /* Running in block mode and we have some cached data already.
5431 if (cache_len >= umaxlen) {
5432 /* In fact, so much data we don't even need to call
5437 const char *const first_nl =
5438 (const char *)memchr(cache_p, '\n', cache_len);
5440 take = first_nl + 1 - cache_p;
5444 sv_catpvn(buf_sv, cache_p, take);
5445 sv_chop(cache, cache_p + take);
5446 /* Definitely not EOF */
5450 sv_catsv(buf_sv, cache);
5452 umaxlen -= cache_len;
5455 read_from_cache = TRUE;
5459 /* Filter API says that the filter appends to the contents of the buffer.
5460 Usually the buffer is "", so the details don't matter. But if it's not,
5461 then clearly what it contains is already filtered by this filter, so we
5462 don't want to pass it in a second time.
5463 I'm going to use a mortal in case the upstream filter croaks. */
5464 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5465 ? sv_newmortal() : buf_sv;
5466 SvUPGRADE(upstream, SVt_PV);
5468 if (filter_has_file) {
5469 status = FILTER_READ(idx+1, upstream, 0);
5472 if (filter_sub && status >= 0) {
5476 ENTER_with_name("call_filter_sub");
5481 DEFSV_set(upstream);
5485 PUSHs(filter_state);
5488 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5498 SV * const errsv = ERRSV;
5499 if (SvTRUE_NN(errsv))
5500 err = newSVsv(errsv);
5506 LEAVE_with_name("call_filter_sub");
5509 if (SvGMAGICAL(upstream)) {
5511 if (upstream == buf_sv) mg_free(buf_sv);
5513 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5514 if(!err && SvOK(upstream)) {
5515 got_p = SvPV_nomg(upstream, got_len);
5517 if (got_len > umaxlen) {
5518 prune_from = got_p + umaxlen;
5521 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5522 if (first_nl && first_nl + 1 < got_p + got_len) {
5523 /* There's a second line here... */
5524 prune_from = first_nl + 1;
5528 if (!err && prune_from) {
5529 /* Oh. Too long. Stuff some in our cache. */
5530 STRLEN cached_len = got_p + got_len - prune_from;
5531 SV *const cache = datasv;
5534 /* Cache should be empty. */
5535 assert(!SvCUR(cache));
5538 sv_setpvn(cache, prune_from, cached_len);
5539 /* If you ask for block mode, you may well split UTF-8 characters.
5540 "If it breaks, you get to keep both parts"
5541 (Your code is broken if you don't put them back together again
5542 before something notices.) */
5543 if (SvUTF8(upstream)) {
5546 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5548 /* Cannot just use sv_setpvn, as that could free the buffer
5549 before we have a chance to assign it. */
5550 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5551 got_len - cached_len);
5553 /* Can't yet be EOF */
5558 /* If they are at EOF but buf_sv has something in it, then they may never
5559 have touched the SV upstream, so it may be undefined. If we naively
5560 concatenate it then we get a warning about use of uninitialised value.
5562 if (!err && upstream != buf_sv &&
5564 sv_catsv_nomg(buf_sv, upstream);
5566 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5569 IoLINES(datasv) = 0;
5571 SvREFCNT_dec(filter_state);
5572 IoTOP_GV(datasv) = NULL;
5575 SvREFCNT_dec(filter_sub);
5576 IoBOTTOM_GV(datasv) = NULL;
5578 filter_del(S_run_user_filter);
5584 if (status == 0 && read_from_cache) {
5585 /* If we read some data from the cache (and by getting here it implies
5586 that we emptied the cache) then we aren't yet at EOF, and mustn't
5587 report that to our caller. */
5594 * ex: set ts=8 sts=4 sw=4 et: