3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
80 PMOP *pm = (PMOP*)cLOGOP->op_other;
85 const regexp_engine *eng;
86 bool is_bare_re= FALSE;
88 if (PL_op->op_flags & OPf_STACKED) {
98 /* prevent recompiling under /o and ithreads. */
99 #if defined(USE_ITHREADS)
100 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
107 assert (re != (REGEXP*) &PL_sv_undef);
108 eng = re ? RX_ENGINE(re) : current_re_engine();
111 In the below logic: these are basically the same - check if this regcomp is part of a split.
113 (PL_op->op_pmflags & PMf_split )
114 (PL_op->op_next->op_type == OP_PUSHRE)
116 We could add a new mask for this and copy the PMf_split, if we did
117 some bit definition fiddling first.
119 For now we leave this
122 new_re = (eng->op_comp
124 : &Perl_re_op_compile
125 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
127 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
129 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
131 if (pm->op_pmflags & PMf_HAS_CV)
132 ReANY(new_re)->qr_anoncv
133 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
137 /* The match's LHS's get-magic might need to access this op's regexp
138 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
139 get-magic now before we replace the regexp. Hopefully this hack can
140 be replaced with the approach described at
141 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
143 if (pm->op_type == OP_MATCH) {
145 const bool was_tainted = TAINT_get;
146 if (pm->op_flags & OPf_STACKED)
148 else if (pm->op_private & OPpTARGET_MY)
149 lhs = PAD_SV(pm->op_targ);
152 /* Restore the previous value of PL_tainted (which may have been
153 modified by get-magic), to avoid incorrectly setting the
154 RXf_TAINTED flag with RX_TAINT_on further down. */
155 TAINT_set(was_tainted);
156 #ifdef NO_TAINT_SUPPORT
157 PERL_UNUSED_VAR(was_tainted);
160 tmp = reg_temp_copy(NULL, new_re);
161 ReREFCNT_dec(new_re);
167 PM_SETRE(pm, new_re);
171 if (TAINTING_get && TAINT_get) {
172 SvTAINTED_on((SV*)new_re);
176 #if !defined(USE_ITHREADS)
177 /* can't change the optree at runtime either */
178 /* PMf_KEEP is handled differently under threads to avoid these problems */
179 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
181 if (pm->op_pmflags & PMf_KEEP) {
182 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
183 cLOGOP->op_first->op_next = PL_op->op_next;
196 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
197 PMOP * const pm = (PMOP*) cLOGOP->op_other;
198 SV * const dstr = cx->sb_dstr;
201 char *orig = cx->sb_orig;
202 REGEXP * const rx = cx->sb_rx;
204 REGEXP *old = PM_GETRE(pm);
211 PM_SETRE(pm,ReREFCNT_inc(rx));
214 rxres_restore(&cx->sb_rxres, rx);
216 if (cx->sb_iters++) {
217 const I32 saviters = cx->sb_iters;
218 if (cx->sb_iters > cx->sb_maxiters)
219 DIE(aTHX_ "Substitution loop");
221 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
223 /* See "how taint works" above pp_subst() */
225 cx->sb_rxtainted |= SUBST_TAINT_REPL;
226 sv_catsv_nomg(dstr, POPs);
227 if (CxONCE(cx) || s < orig ||
228 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
229 (s == m), cx->sb_targ, NULL,
230 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
232 SV *targ = cx->sb_targ;
234 assert(cx->sb_strend >= s);
235 if(cx->sb_strend > s) {
236 if (DO_UTF8(dstr) && !SvUTF8(targ))
237 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
239 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
241 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
242 cx->sb_rxtainted |= SUBST_TAINT_PAT;
244 if (pm->op_pmflags & PMf_NONDESTRUCT) {
246 /* From here on down we're using the copy, and leaving the
247 original untouched. */
251 SV_CHECK_THINKFIRST_COW_DROP(targ);
252 if (isGV(targ)) Perl_croak_no_modify();
254 SvPV_set(targ, SvPVX(dstr));
255 SvCUR_set(targ, SvCUR(dstr));
256 SvLEN_set(targ, SvLEN(dstr));
259 SvPV_set(dstr, NULL);
262 mPUSHi(saviters - 1);
264 (void)SvPOK_only_UTF8(targ);
267 /* update the taint state of various various variables in
268 * preparation for final exit.
269 * See "how taint works" above pp_subst() */
271 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
272 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
275 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
277 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
278 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
280 SvTAINTED_on(TOPs); /* taint return value */
281 /* needed for mg_set below */
283 cBOOL(cx->sb_rxtainted &
284 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
288 /* PL_tainted must be correctly set for this mg_set */
291 LEAVE_SCOPE(cx->sb_oldsave);
294 RETURNOP(pm->op_next);
295 assert(0); /* NOTREACHED */
297 cx->sb_iters = saviters;
299 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
302 assert(!RX_SUBOFFSET(rx));
303 cx->sb_orig = orig = RX_SUBBEG(rx);
305 cx->sb_strend = s + (cx->sb_strend - m);
307 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
309 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
310 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
312 sv_catpvn_nomg(dstr, s, m-s);
314 cx->sb_s = RX_OFFS(rx)[0].end + orig;
315 { /* Update the pos() information. */
317 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
319 if (!(mg = mg_find_mglob(sv))) {
320 mg = sv_magicext_mglob(sv);
323 MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
326 (void)ReREFCNT_inc(rx);
327 /* update the taint state of various various variables in preparation
328 * for calling the code block.
329 * See "how taint works" above pp_subst() */
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
335 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
336 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
340 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
341 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
342 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
343 ? cx->sb_dstr : cx->sb_targ);
346 rxres_save(&cx->sb_rxres, rx);
348 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
352 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
357 PERL_ARGS_ASSERT_RXRES_SAVE;
360 if (!p || p[1] < RX_NPARENS(rx)) {
362 i = 7 + (RX_NPARENS(rx)+1) * 2;
364 i = 6 + (RX_NPARENS(rx)+1) * 2;
373 /* what (if anything) to free on croak */
374 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
375 RX_MATCH_COPIED_off(rx);
376 *p++ = RX_NPARENS(rx);
379 *p++ = PTR2UV(RX_SAVED_COPY(rx));
380 RX_SAVED_COPY(rx) = NULL;
383 *p++ = PTR2UV(RX_SUBBEG(rx));
384 *p++ = (UV)RX_SUBLEN(rx);
385 *p++ = (UV)RX_SUBOFFSET(rx);
386 *p++ = (UV)RX_SUBCOFFSET(rx);
387 for (i = 0; i <= RX_NPARENS(rx); ++i) {
388 *p++ = (UV)RX_OFFS(rx)[i].start;
389 *p++ = (UV)RX_OFFS(rx)[i].end;
394 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
399 PERL_ARGS_ASSERT_RXRES_RESTORE;
402 RX_MATCH_COPY_FREE(rx);
403 RX_MATCH_COPIED_set(rx, *p);
405 RX_NPARENS(rx) = *p++;
408 if (RX_SAVED_COPY(rx))
409 SvREFCNT_dec (RX_SAVED_COPY(rx));
410 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
414 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
415 RX_SUBLEN(rx) = (I32)(*p++);
416 RX_SUBOFFSET(rx) = (I32)*p++;
417 RX_SUBCOFFSET(rx) = (I32)*p++;
418 for (i = 0; i <= RX_NPARENS(rx); ++i) {
419 RX_OFFS(rx)[i].start = (I32)(*p++);
420 RX_OFFS(rx)[i].end = (I32)(*p++);
425 S_rxres_free(pTHX_ void **rsp)
427 UV * const p = (UV*)*rsp;
429 PERL_ARGS_ASSERT_RXRES_FREE;
433 void *tmp = INT2PTR(char*,*p);
436 U32 i = 9 + p[1] * 2;
438 U32 i = 8 + p[1] * 2;
443 SvREFCNT_dec (INT2PTR(SV*,p[2]));
446 PoisonFree(p, i, sizeof(UV));
455 #define FORM_NUM_BLANK (1<<30)
456 #define FORM_NUM_POINT (1<<29)
460 dVAR; dSP; dMARK; dORIGMARK;
461 SV * const tmpForm = *++MARK;
462 SV *formsv; /* contains text of original format */
463 U32 *fpc; /* format ops program counter */
464 char *t; /* current append position in target string */
465 const char *f; /* current position in format string */
467 SV *sv = NULL; /* current item */
468 const char *item = NULL;/* string value of current item */
469 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
470 I32 itembytes = 0; /* as itemsize, but length in bytes */
471 I32 fieldsize = 0; /* width of current field */
472 I32 lines = 0; /* number of lines that have been output */
473 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
474 const char *chophere = NULL; /* where to chop current item */
475 STRLEN linemark = 0; /* pos of start of line in output */
477 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
478 STRLEN len; /* length of current sv */
479 STRLEN linemax; /* estimate of output size in bytes */
480 bool item_is_utf8 = FALSE;
481 bool targ_is_utf8 = FALSE;
484 U8 *source; /* source of bytes to append */
485 STRLEN to_copy; /* how may bytes to append */
486 char trans; /* what chars to translate */
488 mg = doparseform(tmpForm);
490 fpc = (U32*)mg->mg_ptr;
491 /* the actual string the format was compiled from.
492 * with overload etc, this may not match tmpForm */
496 SvPV_force(PL_formtarget, len);
497 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
498 SvTAINTED_on(PL_formtarget);
499 if (DO_UTF8(PL_formtarget))
501 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
502 t = SvGROW(PL_formtarget, len + linemax + 1);
503 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
505 f = SvPV_const(formsv, len);
509 const char *name = "???";
512 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
513 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
514 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
515 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
516 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
518 case FF_CHECKNL: name = "CHECKNL"; break;
519 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
520 case FF_SPACE: name = "SPACE"; break;
521 case FF_HALFSPACE: name = "HALFSPACE"; break;
522 case FF_ITEM: name = "ITEM"; break;
523 case FF_CHOP: name = "CHOP"; break;
524 case FF_LINEGLOB: name = "LINEGLOB"; break;
525 case FF_NEWLINE: name = "NEWLINE"; break;
526 case FF_MORE: name = "MORE"; break;
527 case FF_LINEMARK: name = "LINEMARK"; break;
528 case FF_END: name = "END"; break;
529 case FF_0DECIMAL: name = "0DECIMAL"; break;
530 case FF_LINESNGL: name = "LINESNGL"; break;
533 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
535 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
538 case FF_LINEMARK: /* start (or end) of a line */
539 linemark = t - SvPVX(PL_formtarget);
544 case FF_LITERAL: /* append <arg> literal chars */
549 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
552 case FF_SKIP: /* skip <arg> chars in format */
556 case FF_FETCH: /* get next item and set field size to <arg> */
565 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
568 SvTAINTED_on(PL_formtarget);
571 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
573 const char *s = item = SvPV_const(sv, len);
574 const char *send = s + len;
577 item_is_utf8 = DO_UTF8(sv);
589 if (itemsize == fieldsize)
592 itembytes = s - item;
596 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
598 const char *s = item = SvPV_const(sv, len);
599 const char *send = s + len;
603 item_is_utf8 = DO_UTF8(sv);
605 /* look for a legal split position */
613 /* provisional split point */
617 /* we delay testing fieldsize until after we've
618 * processed the possible split char directly
619 * following the last field char; so if fieldsize=3
620 * and item="a b cdef", we consume "a b", not "a".
621 * Ditto further down.
623 if (size == fieldsize)
627 if (strchr(PL_chopset, *s)) {
628 /* provisional split point */
629 /* for a non-space split char, we include
630 * the split char; hence the '+1' */
634 if (size == fieldsize)
646 if (!chophere || s == send) {
650 itembytes = chophere - item;
655 case FF_SPACE: /* append padding space (diff of field, item size) */
656 arg = fieldsize - itemsize;
664 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
665 arg = fieldsize - itemsize;
674 case FF_ITEM: /* append a text item, while blanking ctrl chars */
680 case FF_CHOP: /* (for ^*) chop the current item */
682 const char *s = chophere;
690 /* tied, overloaded or similar strangeness.
691 * Do it the hard way */
692 sv_setpvn(sv, s, len - (s-item));
697 case FF_LINESNGL: /* process ^* */
700 case FF_LINEGLOB: /* process @* */
702 const bool oneline = fpc[-1] == FF_LINESNGL;
703 const char *s = item = SvPV_const(sv, len);
704 const char *const send = s + len;
706 item_is_utf8 = DO_UTF8(sv);
717 to_copy = s - item - 1;
731 /* append to_copy bytes from source to PL_formstring.
732 * item_is_utf8 implies source is utf8.
733 * if trans, translate certain characters during the copy */
738 SvCUR_set(PL_formtarget,
739 t - SvPVX_const(PL_formtarget));
741 if (targ_is_utf8 && !item_is_utf8) {
742 source = tmp = bytes_to_utf8(source, &to_copy);
744 if (item_is_utf8 && !targ_is_utf8) {
746 /* Upgrade targ to UTF8, and then we reduce it to
747 a problem we have a simple solution for.
748 Don't need get magic. */
749 sv_utf8_upgrade_nomg(PL_formtarget);
751 /* re-calculate linemark */
752 s = (U8*)SvPVX(PL_formtarget);
753 /* the bytes we initially allocated to append the
754 * whole line may have been gobbled up during the
755 * upgrade, so allocate a whole new line's worth
760 linemark = s - (U8*)SvPVX(PL_formtarget);
762 /* Easy. They agree. */
763 assert (item_is_utf8 == targ_is_utf8);
766 /* @* and ^* are the only things that can exceed
767 * the linemax, so grow by the output size, plus
768 * a whole new form's worth in case of any further
770 grow = linemax + to_copy;
772 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
773 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
775 Copy(source, t, to_copy, char);
777 /* blank out ~ or control chars, depending on trans.
778 * works on bytes not chars, so relies on not
779 * matching utf8 continuation bytes */
781 U8 *send = s + to_copy;
784 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
791 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
797 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
799 #if defined(USE_LONG_DOUBLE)
801 ((arg & FORM_NUM_POINT) ?
802 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
805 ((arg & FORM_NUM_POINT) ?
806 "%#0*.*f" : "%0*.*f");
810 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
812 #if defined(USE_LONG_DOUBLE)
814 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
817 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
820 /* If the field is marked with ^ and the value is undefined,
822 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
830 /* overflow evidence */
831 if (num_overflow(value, fieldsize, arg)) {
837 /* Formats aren't yet marked for locales, so assume "yes". */
839 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
840 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
841 /* we generate fmt ourselves so it is safe */
842 GCC_DIAG_IGNORE(-Wformat-nonliteral);
843 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
845 RESTORE_LC_NUMERIC();
850 case FF_NEWLINE: /* delete trailing spaces, then append \n */
852 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
857 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
860 if (arg) { /* repeat until fields exhausted? */
866 t = SvPVX(PL_formtarget) + linemark;
871 case FF_MORE: /* replace long end of string with '...' */
873 const char *s = chophere;
874 const char *send = item + len;
876 while (isSPACE(*s) && (s < send))
881 arg = fieldsize - itemsize;
888 if (strnEQ(s1," ",3)) {
889 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
899 case FF_END: /* tidy up, then return */
901 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
903 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
905 SvUTF8_on(PL_formtarget);
906 FmLINES(PL_formtarget) += lines;
908 if (fpc[-1] == FF_BLANK)
909 RETURNOP(cLISTOP->op_first);
921 if (PL_stack_base + *PL_markstack_ptr == SP) {
923 if (GIMME_V == G_SCALAR)
925 RETURNOP(PL_op->op_next->op_next);
927 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
928 Perl_pp_pushmark(aTHX); /* push dst */
929 Perl_pp_pushmark(aTHX); /* push src */
930 ENTER_with_name("grep"); /* enter outer scope */
933 if (PL_op->op_private & OPpGREP_LEX)
934 SAVESPTR(PAD_SVl(PL_op->op_targ));
937 ENTER_with_name("grep_item"); /* enter inner scope */
940 src = PL_stack_base[*PL_markstack_ptr];
942 assert(!IS_PADGV(src));
943 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
947 if (PL_op->op_private & OPpGREP_LEX)
948 PAD_SVl(PL_op->op_targ) = src;
953 if (PL_op->op_type == OP_MAPSTART)
954 Perl_pp_pushmark(aTHX); /* push top */
955 return ((LOGOP*)PL_op->op_next)->op_other;
961 const I32 gimme = GIMME_V;
962 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
968 /* first, move source pointer to the next item in the source list */
969 ++PL_markstack_ptr[-1];
971 /* if there are new items, push them into the destination list */
972 if (items && gimme != G_VOID) {
973 /* might need to make room back there first */
974 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
975 /* XXX this implementation is very pessimal because the stack
976 * is repeatedly extended for every set of items. Is possible
977 * to do this without any stack extension or copying at all
978 * by maintaining a separate list over which the map iterates
979 * (like foreach does). --gsar */
981 /* everything in the stack after the destination list moves
982 * towards the end the stack by the amount of room needed */
983 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
985 /* items to shift up (accounting for the moved source pointer) */
986 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
988 /* This optimization is by Ben Tilly and it does
989 * things differently from what Sarathy (gsar)
990 * is describing. The downside of this optimization is
991 * that leaves "holes" (uninitialized and hopefully unused areas)
992 * to the Perl stack, but on the other hand this
993 * shouldn't be a problem. If Sarathy's idea gets
994 * implemented, this optimization should become
995 * irrelevant. --jhi */
997 shift = count; /* Avoid shifting too often --Ben Tilly */
1001 dst = (SP += shift);
1002 PL_markstack_ptr[-1] += shift;
1003 *PL_markstack_ptr += shift;
1007 /* copy the new items down to the destination list */
1008 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1009 if (gimme == G_ARRAY) {
1010 /* add returned items to the collection (making mortal copies
1011 * if necessary), then clear the current temps stack frame
1012 * *except* for those items. We do this splicing the items
1013 * into the start of the tmps frame (so some items may be on
1014 * the tmps stack twice), then moving PL_tmps_floor above
1015 * them, then freeing the frame. That way, the only tmps that
1016 * accumulate over iterations are the return values for map.
1017 * We have to do to this way so that everything gets correctly
1018 * freed if we die during the map.
1022 /* make space for the slice */
1023 EXTEND_MORTAL(items);
1024 tmpsbase = PL_tmps_floor + 1;
1025 Move(PL_tmps_stack + tmpsbase,
1026 PL_tmps_stack + tmpsbase + items,
1027 PL_tmps_ix - PL_tmps_floor,
1029 PL_tmps_ix += items;
1034 sv = sv_mortalcopy(sv);
1036 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1038 /* clear the stack frame except for the items */
1039 PL_tmps_floor += items;
1041 /* FREETMPS may have cleared the TEMP flag on some of the items */
1044 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1047 /* scalar context: we don't care about which values map returns
1048 * (we use undef here). And so we certainly don't want to do mortal
1049 * copies of meaningless values. */
1050 while (items-- > 0) {
1052 *dst-- = &PL_sv_undef;
1060 LEAVE_with_name("grep_item"); /* exit inner scope */
1063 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1065 (void)POPMARK; /* pop top */
1066 LEAVE_with_name("grep"); /* exit outer scope */
1067 (void)POPMARK; /* pop src */
1068 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1069 (void)POPMARK; /* pop dst */
1070 SP = PL_stack_base + POPMARK; /* pop original mark */
1071 if (gimme == G_SCALAR) {
1072 if (PL_op->op_private & OPpGREP_LEX) {
1073 SV* sv = sv_newmortal();
1074 sv_setiv(sv, items);
1082 else if (gimme == G_ARRAY)
1089 ENTER_with_name("grep_item"); /* enter inner scope */
1092 /* set $_ to the new source item */
1093 src = PL_stack_base[PL_markstack_ptr[-1]];
1094 if (SvPADTMP(src)) {
1095 assert(!IS_PADGV(src));
1096 src = sv_mortalcopy(src);
1099 if (PL_op->op_private & OPpGREP_LEX)
1100 PAD_SVl(PL_op->op_targ) = src;
1104 RETURNOP(cLOGOP->op_other);
1113 if (GIMME == G_ARRAY)
1115 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1116 return cLOGOP->op_other;
1126 if (GIMME == G_ARRAY) {
1127 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1131 SV * const targ = PAD_SV(PL_op->op_targ);
1134 if (PL_op->op_private & OPpFLIP_LINENUM) {
1135 if (GvIO(PL_last_in_gv)) {
1136 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1139 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1141 flip = SvIV(sv) == SvIV(GvSV(gv));
1147 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1148 if (PL_op->op_flags & OPf_SPECIAL) {
1156 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1159 sv_setpvs(TARG, "");
1165 /* This code tries to decide if "$left .. $right" should use the
1166 magical string increment, or if the range is numeric (we make
1167 an exception for .."0" [#18165]). AMS 20021031. */
1169 #define RANGE_IS_NUMERIC(left,right) ( \
1170 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1171 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1172 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1173 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1174 && (!SvOK(right) || looks_like_number(right))))
1180 if (GIMME == G_ARRAY) {
1186 if (RANGE_IS_NUMERIC(left,right)) {
1189 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1190 (SvOK(right) && (SvIOK(right)
1191 ? SvIsUV(right) && SvUV(right) > IV_MAX
1192 : SvNV_nomg(right) > IV_MAX)))
1193 DIE(aTHX_ "Range iterator outside integer range");
1194 i = SvIV_nomg(left);
1195 max = SvIV_nomg(right);
1198 if (j > SSize_t_MAX)
1199 Perl_croak(aTHX_ "Out of memory during list extend");
1206 SV * const sv = sv_2mortal(newSViv(i++));
1212 const char * const lpv = SvPV_nomg_const(left, llen);
1213 const char * const tmps = SvPV_nomg_const(right, len);
1215 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1216 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1218 if (strEQ(SvPVX_const(sv),tmps))
1220 sv = sv_2mortal(newSVsv(sv));
1227 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1231 if (PL_op->op_private & OPpFLIP_LINENUM) {
1232 if (GvIO(PL_last_in_gv)) {
1233 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1236 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1237 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1245 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1246 sv_catpvs(targ, "E0");
1256 static const char * const context_name[] = {
1258 NULL, /* CXt_WHEN never actually needs "block" */
1259 NULL, /* CXt_BLOCK never actually needs "block" */
1260 NULL, /* CXt_GIVEN never actually needs "block" */
1261 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1262 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1263 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1264 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1272 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1277 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1279 for (i = cxstack_ix; i >= 0; i--) {
1280 const PERL_CONTEXT * const cx = &cxstack[i];
1281 switch (CxTYPE(cx)) {
1287 /* diag_listed_as: Exiting subroutine via %s */
1288 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1289 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1290 if (CxTYPE(cx) == CXt_NULL)
1293 case CXt_LOOP_LAZYIV:
1294 case CXt_LOOP_LAZYSV:
1296 case CXt_LOOP_PLAIN:
1298 STRLEN cx_label_len = 0;
1299 U32 cx_label_flags = 0;
1300 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1302 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1305 (const U8*)cx_label, cx_label_len,
1306 (const U8*)label, len) == 0)
1308 (const U8*)label, len,
1309 (const U8*)cx_label, cx_label_len) == 0)
1310 : (len == cx_label_len && ((cx_label == label)
1311 || memEQ(cx_label, label, len))) )) {
1312 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1313 (long)i, cx_label));
1316 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1327 Perl_dowantarray(pTHX)
1330 const I32 gimme = block_gimme();
1331 return (gimme == G_VOID) ? G_SCALAR : gimme;
1335 Perl_block_gimme(pTHX)
1338 const I32 cxix = dopoptosub(cxstack_ix);
1342 switch (cxstack[cxix].blk_gimme) {
1350 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1351 assert(0); /* NOTREACHED */
1357 Perl_is_lvalue_sub(pTHX)
1360 const I32 cxix = dopoptosub(cxstack_ix);
1361 assert(cxix >= 0); /* We should only be called from inside subs */
1363 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1364 return CxLVAL(cxstack + cxix);
1369 /* only used by PUSHSUB */
1371 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)
1389 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1391 for (i = startingblock; i >= 0; i--) {
1392 const PERL_CONTEXT * const cx = &cxstk[i];
1393 switch (CxTYPE(cx)) {
1397 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1398 * twice; the first for the normal foo() call, and the second
1399 * for a faked up re-entry into the sub to execute the
1400 * code block. Hide this faked entry from the world. */
1401 if (cx->cx_type & CXp_SUB_RE_FAKE)
1405 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1413 S_dopoptoeval(pTHX_ I32 startingblock)
1417 for (i = startingblock; i >= 0; i--) {
1418 const PERL_CONTEXT *cx = &cxstack[i];
1419 switch (CxTYPE(cx)) {
1423 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1431 S_dopoptoloop(pTHX_ I32 startingblock)
1435 for (i = startingblock; i >= 0; i--) {
1436 const PERL_CONTEXT * const cx = &cxstack[i];
1437 switch (CxTYPE(cx)) {
1443 /* diag_listed_as: Exiting subroutine via %s */
1444 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1445 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1446 if ((CxTYPE(cx)) == CXt_NULL)
1449 case CXt_LOOP_LAZYIV:
1450 case CXt_LOOP_LAZYSV:
1452 case CXt_LOOP_PLAIN:
1453 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1461 S_dopoptogiven(pTHX_ I32 startingblock)
1465 for (i = startingblock; i >= 0; i--) {
1466 const PERL_CONTEXT *cx = &cxstack[i];
1467 switch (CxTYPE(cx)) {
1471 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1473 case CXt_LOOP_PLAIN:
1474 assert(!CxFOREACHDEF(cx));
1476 case CXt_LOOP_LAZYIV:
1477 case CXt_LOOP_LAZYSV:
1479 if (CxFOREACHDEF(cx)) {
1480 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1489 S_dopoptowhen(pTHX_ I32 startingblock)
1493 for (i = startingblock; i >= 0; i--) {
1494 const PERL_CONTEXT *cx = &cxstack[i];
1495 switch (CxTYPE(cx)) {
1499 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1507 Perl_dounwind(pTHX_ I32 cxix)
1512 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1515 while (cxstack_ix > cxix) {
1517 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1518 DEBUG_CX("UNWIND"); \
1519 /* Note: we don't need to restore the base context info till the end. */
1520 switch (CxTYPE(cx)) {
1523 continue; /* not break */
1531 case CXt_LOOP_LAZYIV:
1532 case CXt_LOOP_LAZYSV:
1534 case CXt_LOOP_PLAIN:
1545 PERL_UNUSED_VAR(optype);
1549 Perl_qerror(pTHX_ SV *err)
1553 PERL_ARGS_ASSERT_QERROR;
1556 if (PL_in_eval & EVAL_KEEPERR) {
1557 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1561 sv_catsv(ERRSV, err);
1564 sv_catsv(PL_errors, err);
1566 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1568 ++PL_parser->error_count;
1572 Perl_die_unwind(pTHX_ SV *msv)
1575 SV *exceptsv = sv_mortalcopy(msv);
1576 U8 in_eval = PL_in_eval;
1577 PERL_ARGS_ASSERT_DIE_UNWIND;
1584 * Historically, perl used to set ERRSV ($@) early in the die
1585 * process and rely on it not getting clobbered during unwinding.
1586 * That sucked, because it was liable to get clobbered, so the
1587 * setting of ERRSV used to emit the exception from eval{} has
1588 * been moved to much later, after unwinding (see just before
1589 * JMPENV_JUMP below). However, some modules were relying on the
1590 * early setting, by examining $@ during unwinding to use it as
1591 * a flag indicating whether the current unwinding was caused by
1592 * an exception. It was never a reliable flag for that purpose,
1593 * being totally open to false positives even without actual
1594 * clobberage, but was useful enough for production code to
1595 * semantically rely on it.
1597 * We'd like to have a proper introspective interface that
1598 * explicitly describes the reason for whatever unwinding
1599 * operations are currently in progress, so that those modules
1600 * work reliably and $@ isn't further overloaded. But we don't
1601 * have one yet. In its absence, as a stopgap measure, ERRSV is
1602 * now *additionally* set here, before unwinding, to serve as the
1603 * (unreliable) flag that it used to.
1605 * This behaviour is temporary, and should be removed when a
1606 * proper way to detect exceptional unwinding has been developed.
1607 * As of 2010-12, the authors of modules relying on the hack
1608 * are aware of the issue, because the modules failed on
1609 * perls 5.13.{1..7} which had late setting of $@ without this
1610 * early-setting hack.
1612 if (!(in_eval & EVAL_KEEPERR)) {
1613 SvTEMP_off(exceptsv);
1614 sv_setsv(ERRSV, exceptsv);
1617 if (in_eval & EVAL_KEEPERR) {
1618 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1622 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1623 && PL_curstackinfo->si_prev)
1635 JMPENV *restartjmpenv;
1638 if (cxix < cxstack_ix)
1641 POPBLOCK(cx,PL_curpm);
1642 if (CxTYPE(cx) != CXt_EVAL) {
1644 const char* message = SvPVx_const(exceptsv, msglen);
1645 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1646 PerlIO_write(Perl_error_log, message, msglen);
1650 namesv = cx->blk_eval.old_namesv;
1651 oldcop = cx->blk_oldcop;
1652 restartjmpenv = cx->blk_eval.cur_top_env;
1653 restartop = cx->blk_eval.retop;
1655 if (gimme == G_SCALAR)
1656 *++newsp = &PL_sv_undef;
1657 PL_stack_sp = newsp;
1661 /* LEAVE could clobber PL_curcop (see save_re_context())
1662 * XXX it might be better to find a way to avoid messing with
1663 * PL_curcop in save_re_context() instead, but this is a more
1664 * minimal fix --GSAR */
1667 if (optype == OP_REQUIRE) {
1668 (void)hv_store(GvHVn(PL_incgv),
1669 SvPVX_const(namesv),
1670 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1672 /* note that unlike pp_entereval, pp_require isn't
1673 * supposed to trap errors. So now that we've popped the
1674 * EVAL that pp_require pushed, and processed the error
1675 * message, rethrow the error */
1676 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1677 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1680 if (!(in_eval & EVAL_KEEPERR))
1681 sv_setsv(ERRSV, exceptsv);
1682 PL_restartjmpenv = restartjmpenv;
1683 PL_restartop = restartop;
1685 assert(0); /* NOTREACHED */
1689 write_to_stderr(exceptsv);
1691 assert(0); /* NOTREACHED */
1696 dVAR; dSP; dPOPTOPssrl;
1697 if (SvTRUE(left) != SvTRUE(right))
1704 =for apidoc caller_cx
1706 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1707 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1708 information returned to Perl by C<caller>. Note that XSUBs don't get a
1709 stack frame, so C<caller_cx(0, NULL)> will return information for the
1710 immediately-surrounding Perl code.
1712 This function skips over the automatic calls to C<&DB::sub> made on the
1713 behalf of the debugger. If the stack frame requested was a sub called by
1714 C<DB::sub>, the return value will be the frame for the call to
1715 C<DB::sub>, since that has the correct line number/etc. for the call
1716 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1717 frame for the sub call itself.
1722 const PERL_CONTEXT *
1723 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1725 I32 cxix = dopoptosub(cxstack_ix);
1726 const PERL_CONTEXT *cx;
1727 const PERL_CONTEXT *ccstack = cxstack;
1728 const PERL_SI *top_si = PL_curstackinfo;
1731 /* we may be in a higher stacklevel, so dig down deeper */
1732 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1733 top_si = top_si->si_prev;
1734 ccstack = top_si->si_cxstack;
1735 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1739 /* caller() should not report the automatic calls to &DB::sub */
1740 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1741 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1745 cxix = dopoptosub_at(ccstack, cxix - 1);
1748 cx = &ccstack[cxix];
1749 if (dbcxp) *dbcxp = cx;
1751 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1752 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1753 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1754 field below is defined for any cx. */
1755 /* caller() should not report the automatic calls to &DB::sub */
1756 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1757 cx = &ccstack[dbcxix];
1767 const PERL_CONTEXT *cx;
1768 const PERL_CONTEXT *dbcx;
1770 const HEK *stash_hek;
1772 bool has_arg = MAXARG && TOPs;
1781 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1783 if (GIMME != G_ARRAY) {
1791 assert(CopSTASH(cx->blk_oldcop));
1792 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1793 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1795 if (GIMME != G_ARRAY) {
1798 PUSHs(&PL_sv_undef);
1801 sv_sethek(TARG, stash_hek);
1810 PUSHs(&PL_sv_undef);
1813 sv_sethek(TARG, stash_hek);
1816 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1817 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1818 cx->blk_sub.retop, TRUE);
1820 lcop = cx->blk_oldcop;
1821 mPUSHi((I32)CopLINE(lcop));
1824 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1825 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1826 /* So is ccstack[dbcxix]. */
1827 if (cvgv && isGV(cvgv)) {
1828 SV * const sv = newSV(0);
1829 gv_efullname3(sv, cvgv, NULL);
1831 PUSHs(boolSV(CxHASARGS(cx)));
1834 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1835 PUSHs(boolSV(CxHASARGS(cx)));
1839 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1842 gimme = (I32)cx->blk_gimme;
1843 if (gimme == G_VOID)
1844 PUSHs(&PL_sv_undef);
1846 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1847 if (CxTYPE(cx) == CXt_EVAL) {
1849 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1850 SV *cur_text = cx->blk_eval.cur_text;
1851 if (SvCUR(cur_text) >= 2) {
1852 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1853 SvUTF8(cur_text)|SVs_TEMP));
1856 /* I think this is will always be "", but be sure */
1857 PUSHs(sv_2mortal(newSVsv(cur_text)));
1863 else if (cx->blk_eval.old_namesv) {
1864 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1867 /* eval BLOCK (try blocks have old_namesv == 0) */
1869 PUSHs(&PL_sv_undef);
1870 PUSHs(&PL_sv_undef);
1874 PUSHs(&PL_sv_undef);
1875 PUSHs(&PL_sv_undef);
1877 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1878 && CopSTASH_eq(PL_curcop, PL_debstash))
1880 AV * const ary = cx->blk_sub.argarray;
1881 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1883 Perl_init_dbargs(aTHX);
1885 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1886 av_extend(PL_dbargs, AvFILLp(ary) + off);
1887 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1888 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1890 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1893 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1895 if (old_warnings == pWARN_NONE)
1896 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1897 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1898 mask = &PL_sv_undef ;
1899 else if (old_warnings == pWARN_ALL ||
1900 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1901 /* Get the bit mask for $warnings::Bits{all}, because
1902 * it could have been extended by warnings::register */
1904 HV * const bits = get_hv("warnings::Bits", 0);
1905 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1906 mask = newSVsv(*bits_all);
1909 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1913 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1917 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1918 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1929 if (MAXARG < 1 || (!TOPs && !POPs))
1930 tmps = NULL, len = 0;
1932 tmps = SvPVx_const(POPs, len);
1933 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1938 /* like pp_nextstate, but used instead when the debugger is active */
1943 PL_curcop = (COP*)PL_op;
1944 TAINT_NOT; /* Each statement is presumed innocent */
1945 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1950 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1951 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1955 const I32 gimme = G_ARRAY;
1957 GV * const gv = PL_DBgv;
1960 if (gv && isGV_with_GP(gv))
1963 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1964 DIE(aTHX_ "No DB::DB routine defined");
1966 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1967 /* don't do recursive DB::DB call */
1981 (void)(*CvXSUB(cv))(aTHX_ cv);
1987 PUSHBLOCK(cx, CXt_SUB, SP);
1989 cx->blk_sub.retop = PL_op->op_next;
1991 if (CvDEPTH(cv) >= 2) {
1992 PERL_STACK_OVERFLOW_CHECK();
1993 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1996 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1997 RETURNOP(CvSTART(cv));
2004 /* SVs on the stack that have any of the flags passed in are left as is.
2005 Other SVs are protected via the mortals stack if lvalue is true, and
2006 copied otherwise. */
2009 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2010 U32 flags, bool lvalue)
2013 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2015 if (flags & SVs_PADTMP) {
2016 flags &= ~SVs_PADTMP;
2019 if (gimme == G_SCALAR) {
2021 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2024 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2025 : sv_mortalcopy(*SP);
2027 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2030 *++MARK = &PL_sv_undef;
2034 else if (gimme == G_ARRAY) {
2035 /* in case LEAVE wipes old return values */
2036 while (++MARK <= SP) {
2037 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2041 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2042 : sv_mortalcopy(*MARK);
2043 TAINT_NOT; /* Each item is independent */
2046 /* When this function was called with MARK == newsp, we reach this
2047 * point with SP == newsp. */
2057 I32 gimme = GIMME_V;
2059 ENTER_with_name("block");
2062 PUSHBLOCK(cx, CXt_BLOCK, SP);
2075 if (PL_op->op_flags & OPf_SPECIAL) {
2076 cx = &cxstack[cxstack_ix];
2077 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2082 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2085 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2086 PL_op->op_private & OPpLVALUE);
2087 PL_curpm = newpm; /* Don't pop $1 et al till now */
2089 LEAVE_with_name("block");
2098 const I32 gimme = GIMME_V;
2099 void *itervar; /* location of the iteration variable */
2100 U8 cxtype = CXt_LOOP_FOR;
2102 ENTER_with_name("loop1");
2105 if (PL_op->op_targ) { /* "my" variable */
2106 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2107 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2108 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2109 SVs_PADSTALE, SVs_PADSTALE);
2111 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2113 itervar = PL_comppad;
2115 itervar = &PAD_SVl(PL_op->op_targ);
2118 else { /* symbol table variable */
2119 GV * const gv = MUTABLE_GV(POPs);
2120 SV** svp = &GvSV(gv);
2121 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2123 itervar = (void *)gv;
2126 if (PL_op->op_private & OPpITER_DEF)
2127 cxtype |= CXp_FOR_DEF;
2129 ENTER_with_name("loop2");
2131 PUSHBLOCK(cx, cxtype, SP);
2132 PUSHLOOP_FOR(cx, itervar, MARK);
2133 if (PL_op->op_flags & OPf_STACKED) {
2134 SV *maybe_ary = POPs;
2135 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2137 SV * const right = maybe_ary;
2140 if (RANGE_IS_NUMERIC(sv,right)) {
2141 cx->cx_type &= ~CXTYPEMASK;
2142 cx->cx_type |= CXt_LOOP_LAZYIV;
2143 /* Make sure that no-one re-orders cop.h and breaks our
2145 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2146 #ifdef NV_PRESERVES_UV
2147 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2148 (SvNV_nomg(sv) > (NV)IV_MAX)))
2150 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2151 (SvNV_nomg(right) < (NV)IV_MIN))))
2153 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2155 ((SvNV_nomg(sv) > 0) &&
2156 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2157 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2159 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2161 ((SvNV_nomg(right) > 0) &&
2162 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2163 (SvNV_nomg(right) > (NV)UV_MAX))
2166 DIE(aTHX_ "Range iterator outside integer range");
2167 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2168 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2170 /* for correct -Dstv display */
2171 cx->blk_oldsp = sp - PL_stack_base;
2175 cx->cx_type &= ~CXTYPEMASK;
2176 cx->cx_type |= CXt_LOOP_LAZYSV;
2177 /* Make sure that no-one re-orders cop.h and breaks our
2179 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2180 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2181 cx->blk_loop.state_u.lazysv.end = right;
2182 SvREFCNT_inc(right);
2183 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2184 /* This will do the upgrade to SVt_PV, and warn if the value
2185 is uninitialised. */
2186 (void) SvPV_nolen_const(right);
2187 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2188 to replace !SvOK() with a pointer to "". */
2190 SvREFCNT_dec(right);
2191 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2195 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2196 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2197 SvREFCNT_inc(maybe_ary);
2198 cx->blk_loop.state_u.ary.ix =
2199 (PL_op->op_private & OPpITER_REVERSED) ?
2200 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2204 else { /* iterating over items on the stack */
2205 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2206 if (PL_op->op_private & OPpITER_REVERSED) {
2207 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2210 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2221 const I32 gimme = GIMME_V;
2223 ENTER_with_name("loop1");
2225 ENTER_with_name("loop2");
2227 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2228 PUSHLOOP_PLAIN(cx, SP);
2243 assert(CxTYPE_is_LOOP(cx));
2245 newsp = PL_stack_base + cx->blk_loop.resetsp;
2248 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2249 PL_op->op_private & OPpLVALUE);
2252 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2253 PL_curpm = newpm; /* ... and pop $1 et al */
2255 LEAVE_with_name("loop2");
2256 LEAVE_with_name("loop1");
2262 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2263 PERL_CONTEXT *cx, PMOP *newpm)
2265 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2266 if (gimme == G_SCALAR) {
2267 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2269 const char *what = NULL;
2271 assert(MARK+1 == SP);
2272 if ((SvPADTMP(TOPs) ||
2273 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2276 !SvSMAGICAL(TOPs)) {
2278 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2279 : "a readonly value" : "a temporary";
2284 /* sub:lvalue{} will take us here. */
2293 "Can't return %s from lvalue subroutine", what
2298 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2299 if (!SvPADTMP(*SP)) {
2300 *++newsp = SvREFCNT_inc(*SP);
2305 /* FREETMPS could clobber it */
2306 SV *sv = SvREFCNT_inc(*SP);
2308 *++newsp = sv_mortalcopy(sv);
2315 ? sv_mortalcopy(*SP)
2317 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2322 *++newsp = &PL_sv_undef;
2324 if (CxLVAL(cx) & OPpDEREF) {
2327 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2331 else if (gimme == G_ARRAY) {
2332 assert (!(CxLVAL(cx) & OPpDEREF));
2333 if (ref || !CxLVAL(cx))
2334 while (++MARK <= SP)
2336 SvFLAGS(*MARK) & SVs_PADTMP
2337 ? sv_mortalcopy(*MARK)
2340 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2341 else while (++MARK <= SP) {
2342 if (*MARK != &PL_sv_undef
2344 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2349 /* Might be flattened array after $#array = */
2356 /* diag_listed_as: Can't return %s from lvalue subroutine */
2358 "Can't return a %s from lvalue subroutine",
2359 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2365 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2368 PL_stack_sp = newsp;
2375 bool popsub2 = FALSE;
2376 bool clear_errsv = FALSE;
2386 const I32 cxix = dopoptosub(cxstack_ix);
2389 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2390 * sort block, which is a CXt_NULL
2393 PL_stack_base[1] = *PL_stack_sp;
2394 PL_stack_sp = PL_stack_base + 1;
2398 DIE(aTHX_ "Can't return outside a subroutine");
2400 if (cxix < cxstack_ix)
2403 if (CxMULTICALL(&cxstack[cxix])) {
2404 gimme = cxstack[cxix].blk_gimme;
2405 if (gimme == G_VOID)
2406 PL_stack_sp = PL_stack_base;
2407 else if (gimme == G_SCALAR) {
2408 PL_stack_base[1] = *PL_stack_sp;
2409 PL_stack_sp = PL_stack_base + 1;
2415 switch (CxTYPE(cx)) {
2418 lval = !!CvLVALUE(cx->blk_sub.cv);
2419 retop = cx->blk_sub.retop;
2420 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2423 if (!(PL_in_eval & EVAL_KEEPERR))
2426 namesv = cx->blk_eval.old_namesv;
2427 retop = cx->blk_eval.retop;
2430 if (optype == OP_REQUIRE &&
2431 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2433 /* Unassume the success we assumed earlier. */
2434 (void)hv_delete(GvHVn(PL_incgv),
2435 SvPVX_const(namesv),
2436 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2438 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2442 retop = cx->blk_sub.retop;
2446 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2450 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2452 if (gimme == G_SCALAR) {
2455 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2456 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2457 && !SvMAGICAL(TOPs)) {
2458 *++newsp = SvREFCNT_inc(*SP);
2463 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2465 *++newsp = sv_mortalcopy(sv);
2469 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2470 && !SvMAGICAL(*SP)) {
2474 *++newsp = sv_mortalcopy(*SP);
2477 *++newsp = sv_mortalcopy(*SP);
2480 *++newsp = &PL_sv_undef;
2482 else if (gimme == G_ARRAY) {
2483 while (++MARK <= SP) {
2484 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2485 && !SvGMAGICAL(*MARK)
2486 ? *MARK : sv_mortalcopy(*MARK);
2487 TAINT_NOT; /* Each item is independent */
2490 PL_stack_sp = newsp;
2494 /* Stack values are safe: */
2497 POPSUB(cx,sv); /* release CV and @_ ... */
2501 PL_curpm = newpm; /* ... and pop $1 et al */
2510 /* This duplicates parts of pp_leavesub, so that it can share code with
2521 if (CxMULTICALL(&cxstack[cxstack_ix]))
2525 cxstack_ix++; /* temporarily protect top context */
2529 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2532 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2534 PL_curpm = newpm; /* ... and pop $1 et al */
2537 return cx->blk_sub.retop;
2541 S_unwind_loop(pTHX_ const char * const opname)
2545 if (PL_op->op_flags & OPf_SPECIAL) {
2546 cxix = dopoptoloop(cxstack_ix);
2548 /* diag_listed_as: Can't "last" outside a loop block */
2549 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2554 const char * const label =
2555 PL_op->op_flags & OPf_STACKED
2556 ? SvPV(TOPs,label_len)
2557 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2558 const U32 label_flags =
2559 PL_op->op_flags & OPf_STACKED
2561 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2563 cxix = dopoptolabel(label, label_len, label_flags);
2565 /* diag_listed_as: Label not found for "last %s" */
2566 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2568 SVfARG(PL_op->op_flags & OPf_STACKED
2569 && !SvGMAGICAL(TOPp1s)
2571 : newSVpvn_flags(label,
2573 label_flags | SVs_TEMP)));
2575 if (cxix < cxstack_ix)
2592 S_unwind_loop(aTHX_ "last");
2595 cxstack_ix++; /* temporarily protect top context */
2596 switch (CxTYPE(cx)) {
2597 case CXt_LOOP_LAZYIV:
2598 case CXt_LOOP_LAZYSV:
2600 case CXt_LOOP_PLAIN:
2602 newsp = PL_stack_base + cx->blk_loop.resetsp;
2603 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2607 nextop = cx->blk_sub.retop;
2611 nextop = cx->blk_eval.retop;
2615 nextop = cx->blk_sub.retop;
2618 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2622 PL_stack_sp = newsp;
2626 /* Stack values are safe: */
2628 case CXt_LOOP_LAZYIV:
2629 case CXt_LOOP_PLAIN:
2630 case CXt_LOOP_LAZYSV:
2632 POPLOOP(cx); /* release loop vars ... */
2636 POPSUB(cx,sv); /* release CV and @_ ... */
2639 PL_curpm = newpm; /* ... and pop $1 et al */
2642 PERL_UNUSED_VAR(optype);
2643 PERL_UNUSED_VAR(gimme);
2651 const I32 inner = PL_scopestack_ix;
2653 S_unwind_loop(aTHX_ "next");
2655 /* clear off anything above the scope we're re-entering, but
2656 * save the rest until after a possible continue block */
2658 if (PL_scopestack_ix < inner)
2659 leave_scope(PL_scopestack[PL_scopestack_ix]);
2660 PL_curcop = cx->blk_oldcop;
2662 return (cx)->blk_loop.my_op->op_nextop;
2668 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2671 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2673 if (redo_op->op_type == OP_ENTER) {
2674 /* pop one less context to avoid $x being freed in while (my $x..) */
2676 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2677 redo_op = redo_op->op_next;
2681 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2682 LEAVE_SCOPE(oldsave);
2684 PL_curcop = cx->blk_oldcop;
2690 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2694 static const char* const too_deep = "Target of goto is too deeply nested";
2696 PERL_ARGS_ASSERT_DOFINDLABEL;
2699 Perl_croak(aTHX_ "%s", too_deep);
2700 if (o->op_type == OP_LEAVE ||
2701 o->op_type == OP_SCOPE ||
2702 o->op_type == OP_LEAVELOOP ||
2703 o->op_type == OP_LEAVESUB ||
2704 o->op_type == OP_LEAVETRY)
2706 *ops++ = cUNOPo->op_first;
2708 Perl_croak(aTHX_ "%s", too_deep);
2711 if (o->op_flags & OPf_KIDS) {
2713 /* First try all the kids at this level, since that's likeliest. */
2714 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2715 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2716 STRLEN kid_label_len;
2717 U32 kid_label_flags;
2718 const char *kid_label = CopLABEL_len_flags(kCOP,
2719 &kid_label_len, &kid_label_flags);
2721 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2724 (const U8*)kid_label, kid_label_len,
2725 (const U8*)label, len) == 0)
2727 (const U8*)label, len,
2728 (const U8*)kid_label, kid_label_len) == 0)
2729 : ( len == kid_label_len && ((kid_label == label)
2730 || memEQ(kid_label, label, len)))))
2734 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2735 if (kid == PL_lastgotoprobe)
2737 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2740 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2741 ops[-1]->op_type == OP_DBSTATE)
2746 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2754 PP(pp_goto) /* also pp_dump */
2760 #define GOTO_DEPTH 64
2761 OP *enterops[GOTO_DEPTH];
2762 const char *label = NULL;
2763 STRLEN label_len = 0;
2764 U32 label_flags = 0;
2765 const bool do_dump = (PL_op->op_type == OP_DUMP);
2766 static const char* const must_have_label = "goto must have label";
2768 if (PL_op->op_flags & OPf_STACKED) {
2769 /* goto EXPR or goto &foo */
2771 SV * const sv = POPs;
2774 /* This egregious kludge implements goto &subroutine */
2775 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2778 CV *cv = MUTABLE_CV(SvRV(sv));
2779 AV *arg = GvAV(PL_defgv);
2783 if (!CvROOT(cv) && !CvXSUB(cv)) {
2784 const GV * const gv = CvGV(cv);
2788 /* autoloaded stub? */
2789 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2791 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2793 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2794 if (autogv && (cv = GvCV(autogv)))
2796 tmpstr = sv_newmortal();
2797 gv_efullname3(tmpstr, gv, NULL);
2798 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2800 DIE(aTHX_ "Goto undefined subroutine");
2803 /* First do some returnish stuff. */
2804 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2806 cxix = dopoptosub(cxstack_ix);
2807 if (cxix < cxstack_ix) {
2810 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2816 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2817 if (CxTYPE(cx) == CXt_EVAL) {
2820 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2821 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2823 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2824 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2826 else if (CxMULTICALL(cx))
2829 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2831 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2832 AV* av = cx->blk_sub.argarray;
2834 /* abandon the original @_ if it got reified or if it is
2835 the same as the current @_ */
2836 if (AvREAL(av) || av == arg) {
2840 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2842 else CLEAR_ARGARRAY(av);
2844 /* We donate this refcount later to the callee’s pad. */
2845 SvREFCNT_inc_simple_void(arg);
2846 if (CxTYPE(cx) == CXt_SUB &&
2847 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2848 SvREFCNT_dec(cx->blk_sub.cv);
2849 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2850 LEAVE_SCOPE(oldsave);
2852 /* A destructor called during LEAVE_SCOPE could have undefined
2853 * our precious cv. See bug #99850. */
2854 if (!CvROOT(cv) && !CvXSUB(cv)) {
2855 const GV * const gv = CvGV(cv);
2858 SV * const tmpstr = sv_newmortal();
2859 gv_efullname3(tmpstr, gv, NULL);
2860 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2863 DIE(aTHX_ "Goto undefined subroutine");
2866 /* Now do some callish stuff. */
2868 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2870 OP* const retop = cx->blk_sub.retop;
2873 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2874 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2877 PERL_UNUSED_VAR(newsp);
2878 PERL_UNUSED_VAR(gimme);
2880 /* put GvAV(defgv) back onto stack */
2882 EXTEND(SP, items+1); /* @_ could have been extended. */
2887 bool r = cBOOL(AvREAL(arg));
2888 for (index=0; index<items; index++)
2892 SV ** const svp = av_fetch(arg, index, 0);
2893 sv = svp ? *svp : NULL;
2895 else sv = AvARRAY(arg)[index];
2897 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2898 : sv_2mortal(newSVavdefelem(arg, index, 1));
2903 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2904 /* Restore old @_ */
2905 arg = GvAV(PL_defgv);
2906 GvAV(PL_defgv) = cx->blk_sub.savearray;
2910 /* XS subs don't have a CxSUB, so pop it */
2911 POPBLOCK(cx, PL_curpm);
2912 /* Push a mark for the start of arglist */
2915 (void)(*CvXSUB(cv))(aTHX_ cv);
2921 PADLIST * const padlist = CvPADLIST(cv);
2922 cx->blk_sub.cv = cv;
2923 cx->blk_sub.olddepth = CvDEPTH(cv);
2926 if (CvDEPTH(cv) < 2)
2927 SvREFCNT_inc_simple_void_NN(cv);
2929 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2930 sub_crush_depth(cv);
2931 pad_push(padlist, CvDEPTH(cv));
2933 PL_curcop = cx->blk_oldcop;
2935 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2938 CX_CURPAD_SAVE(cx->blk_sub);
2940 /* cx->blk_sub.argarray has no reference count, so we
2941 need something to hang on to our argument array so
2942 that cx->blk_sub.argarray does not end up pointing
2943 to freed memory as the result of undef *_. So put
2944 it in the callee’s pad, donating our refer-
2947 SvREFCNT_dec(PAD_SVl(0));
2948 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2951 /* GvAV(PL_defgv) might have been modified on scope
2952 exit, so restore it. */
2953 if (arg != GvAV(PL_defgv)) {
2954 AV * const av = GvAV(PL_defgv);
2955 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2959 else SvREFCNT_dec(arg);
2960 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2961 Perl_get_db_sub(aTHX_ NULL, cv);
2963 CV * const gotocv = get_cvs("DB::goto", 0);
2965 PUSHMARK( PL_stack_sp );
2966 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2972 RETURNOP(CvSTART(cv));
2977 label = SvPV_nomg_const(sv, label_len);
2978 label_flags = SvUTF8(sv);
2981 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2982 /* goto LABEL or dump LABEL */
2983 label = cPVOP->op_pv;
2984 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2985 label_len = strlen(label);
2987 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2992 OP *gotoprobe = NULL;
2993 bool leaving_eval = FALSE;
2994 bool in_block = FALSE;
2995 PERL_CONTEXT *last_eval_cx = NULL;
2999 PL_lastgotoprobe = NULL;
3001 for (ix = cxstack_ix; ix >= 0; ix--) {
3003 switch (CxTYPE(cx)) {
3005 leaving_eval = TRUE;
3006 if (!CxTRYBLOCK(cx)) {
3007 gotoprobe = (last_eval_cx ?
3008 last_eval_cx->blk_eval.old_eval_root :
3013 /* else fall through */
3014 case CXt_LOOP_LAZYIV:
3015 case CXt_LOOP_LAZYSV:
3017 case CXt_LOOP_PLAIN:
3020 gotoprobe = cx->blk_oldcop->op_sibling;
3026 gotoprobe = cx->blk_oldcop->op_sibling;
3029 gotoprobe = PL_main_root;
3032 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3033 gotoprobe = CvROOT(cx->blk_sub.cv);
3039 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3042 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3043 CxTYPE(cx), (long) ix);
3044 gotoprobe = PL_main_root;
3048 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3049 enterops, enterops + GOTO_DEPTH);
3052 if (gotoprobe->op_sibling &&
3053 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3054 gotoprobe->op_sibling->op_sibling) {
3055 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3056 label, label_len, label_flags, enterops,
3057 enterops + GOTO_DEPTH);
3062 PL_lastgotoprobe = gotoprobe;
3065 DIE(aTHX_ "Can't find label %"UTF8f,
3066 UTF8fARG(label_flags, label_len, label));
3068 /* if we're leaving an eval, check before we pop any frames
3069 that we're not going to punt, otherwise the error
3072 if (leaving_eval && *enterops && enterops[1]) {
3074 for (i = 1; enterops[i]; i++)
3075 if (enterops[i]->op_type == OP_ENTERITER)
3076 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3079 if (*enterops && enterops[1]) {
3080 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3082 deprecate("\"goto\" to jump into a construct");
3085 /* pop unwanted frames */
3087 if (ix < cxstack_ix) {
3094 oldsave = PL_scopestack[PL_scopestack_ix];
3095 LEAVE_SCOPE(oldsave);
3098 /* push wanted frames */
3100 if (*enterops && enterops[1]) {
3101 OP * const oldop = PL_op;
3102 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3103 for (; enterops[ix]; ix++) {
3104 PL_op = enterops[ix];
3105 /* Eventually we may want to stack the needed arguments
3106 * for each op. For now, we punt on the hard ones. */
3107 if (PL_op->op_type == OP_ENTERITER)
3108 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3109 PL_op->op_ppaddr(aTHX);
3117 if (!retop) retop = PL_main_start;
3119 PL_restartop = retop;
3120 PL_do_undump = TRUE;
3124 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3125 PL_do_undump = FALSE;
3141 anum = 0; (void)POPs;
3147 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3150 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3153 PL_exit_flags |= PERL_EXIT_EXPECTED;
3155 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3156 if (anum || !(PL_minus_c && PL_madskills))
3161 PUSHs(&PL_sv_undef);
3168 S_save_lines(pTHX_ AV *array, SV *sv)
3170 const char *s = SvPVX_const(sv);
3171 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3174 PERL_ARGS_ASSERT_SAVE_LINES;
3176 while (s && s < send) {
3178 SV * const tmpstr = newSV_type(SVt_PVMG);
3180 t = (const char *)memchr(s, '\n', send - s);
3186 sv_setpvn(tmpstr, s, t - s);
3187 av_store(array, line++, tmpstr);
3195 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3197 0 is used as continue inside eval,
3199 3 is used for a die caught by an inner eval - continue inner loop
3201 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3202 establish a local jmpenv to handle exception traps.
3207 S_docatch(pTHX_ OP *o)
3211 OP * const oldop = PL_op;
3215 assert(CATCH_GET == TRUE);
3222 assert(cxstack_ix >= 0);
3223 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3224 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3229 /* die caught by an inner eval - continue inner loop */
3230 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3231 PL_restartjmpenv = NULL;
3232 PL_op = PL_restartop;
3241 assert(0); /* NOTREACHED */
3250 =for apidoc find_runcv
3252 Locate the CV corresponding to the currently executing sub or eval.
3253 If db_seqp is non_null, skip CVs that are in the DB package and populate
3254 *db_seqp with the cop sequence number at the point that the DB:: code was
3255 entered. (This allows debuggers to eval in the scope of the breakpoint
3256 rather than in the scope of the debugger itself.)
3262 Perl_find_runcv(pTHX_ U32 *db_seqp)
3264 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3267 /* If this becomes part of the API, it might need a better name. */
3269 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3277 PL_curcop == &PL_compiling
3279 : PL_curcop->cop_seq;
3281 for (si = PL_curstackinfo; si; si = si->si_prev) {
3283 for (ix = si->si_cxix; ix >= 0; ix--) {
3284 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3286 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3287 cv = cx->blk_sub.cv;
3288 /* skip DB:: code */
3289 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3290 *db_seqp = cx->blk_oldcop->cop_seq;
3293 if (cx->cx_type & CXp_SUB_RE)
3296 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3297 cv = cx->blk_eval.cv;
3300 case FIND_RUNCV_padid_eq:
3302 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3305 case FIND_RUNCV_level_eq:
3306 if (level++ != arg) continue;
3314 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3318 /* Run yyparse() in a setjmp wrapper. Returns:
3319 * 0: yyparse() successful
3320 * 1: yyparse() failed
3324 S_try_yyparse(pTHX_ int gramtype)
3329 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3333 ret = yyparse(gramtype) ? 1 : 0;
3340 assert(0); /* NOTREACHED */
3347 /* Compile a require/do or an eval ''.
3349 * outside is the lexically enclosing CV (if any) that invoked us.
3350 * seq is the current COP scope value.
3351 * hh is the saved hints hash, if any.
3353 * Returns a bool indicating whether the compile was successful; if so,
3354 * PL_eval_start contains the first op of the compiled code; otherwise,
3357 * This function is called from two places: pp_require and pp_entereval.
3358 * These can be distinguished by whether PL_op is entereval.
3362 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3365 OP * const saveop = PL_op;
3366 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3367 COP * const oldcurcop = PL_curcop;
3368 bool in_require = (saveop->op_type == OP_REQUIRE);
3372 PL_in_eval = (in_require
3373 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3375 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3376 ? EVAL_RE_REPARSING : 0)));
3380 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3382 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3383 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3384 cxstack[cxstack_ix].blk_gimme = gimme;
3386 CvOUTSIDE_SEQ(evalcv) = seq;
3387 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3389 /* set up a scratch pad */
3391 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3392 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3396 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3398 /* make sure we compile in the right package */
3400 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3401 SAVEGENERICSV(PL_curstash);
3402 PL_curstash = (HV *)CopSTASH(PL_curcop);
3403 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3404 else SvREFCNT_inc_simple_void(PL_curstash);
3406 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3407 SAVESPTR(PL_beginav);
3408 PL_beginav = newAV();
3409 SAVEFREESV(PL_beginav);
3410 SAVESPTR(PL_unitcheckav);
3411 PL_unitcheckav = newAV();
3412 SAVEFREESV(PL_unitcheckav);
3415 SAVEBOOL(PL_madskills);
3419 ENTER_with_name("evalcomp");
3420 SAVESPTR(PL_compcv);
3423 /* try to compile it */
3425 PL_eval_root = NULL;
3426 PL_curcop = &PL_compiling;
3427 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3428 PL_in_eval |= EVAL_KEEPERR;
3435 hv_clear(GvHV(PL_hintgv));
3438 PL_hints = saveop->op_private & OPpEVAL_COPHH
3439 ? oldcurcop->cop_hints : saveop->op_targ;
3441 /* making 'use re eval' not be in scope when compiling the
3442 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3443 * infinite recursion when S_has_runtime_code() gives a false
3444 * positive: the second time round, HINT_RE_EVAL isn't set so we
3445 * don't bother calling S_has_runtime_code() */
3446 if (PL_in_eval & EVAL_RE_REPARSING)
3447 PL_hints &= ~HINT_RE_EVAL;
3450 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3451 SvREFCNT_dec(GvHV(PL_hintgv));
3452 GvHV(PL_hintgv) = hh;
3455 SAVECOMPILEWARNINGS();
3457 if (PL_dowarn & G_WARN_ALL_ON)
3458 PL_compiling.cop_warnings = pWARN_ALL ;
3459 else if (PL_dowarn & G_WARN_ALL_OFF)
3460 PL_compiling.cop_warnings = pWARN_NONE ;
3462 PL_compiling.cop_warnings = pWARN_STD ;
3465 PL_compiling.cop_warnings =
3466 DUP_WARNINGS(oldcurcop->cop_warnings);
3467 cophh_free(CopHINTHASH_get(&PL_compiling));
3468 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3469 /* The label, if present, is the first entry on the chain. So rather
3470 than writing a blank label in front of it (which involves an
3471 allocation), just use the next entry in the chain. */
3472 PL_compiling.cop_hints_hash
3473 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3474 /* Check the assumption that this removed the label. */
3475 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3478 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3481 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3483 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3484 * so honour CATCH_GET and trap it here if necessary */
3486 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3488 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3489 SV **newsp; /* Used by POPBLOCK. */
3491 I32 optype; /* Used by POPEVAL. */
3497 PERL_UNUSED_VAR(newsp);
3498 PERL_UNUSED_VAR(optype);
3500 /* note that if yystatus == 3, then the EVAL CX block has already
3501 * been popped, and various vars restored */
3503 if (yystatus != 3) {
3505 op_free(PL_eval_root);
3506 PL_eval_root = NULL;
3508 SP = PL_stack_base + POPMARK; /* pop original mark */
3509 POPBLOCK(cx,PL_curpm);
3511 namesv = cx->blk_eval.old_namesv;
3512 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3513 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3519 /* If cx is still NULL, it means that we didn't go in the
3520 * POPEVAL branch. */
3521 cx = &cxstack[cxstack_ix];
3522 assert(CxTYPE(cx) == CXt_EVAL);
3523 namesv = cx->blk_eval.old_namesv;
3525 (void)hv_store(GvHVn(PL_incgv),
3526 SvPVX_const(namesv),
3527 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3529 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3532 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3535 if (!*(SvPV_nolen_const(errsv))) {
3536 sv_setpvs(errsv, "Compilation error");
3539 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3544 LEAVE_with_name("evalcomp");
3546 CopLINE_set(&PL_compiling, 0);
3547 SAVEFREEOP(PL_eval_root);
3548 cv_forget_slab(evalcv);
3550 DEBUG_x(dump_eval());
3552 /* Register with debugger: */
3553 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3554 CV * const cv = get_cvs("DB::postponed", 0);
3558 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3560 call_sv(MUTABLE_SV(cv), G_DISCARD);
3564 if (PL_unitcheckav) {
3565 OP *es = PL_eval_start;
3566 call_list(PL_scopestack_ix, PL_unitcheckav);
3570 /* compiled okay, so do it */
3572 CvDEPTH(evalcv) = 1;
3573 SP = PL_stack_base + POPMARK; /* pop original mark */
3574 PL_op = saveop; /* The caller may need it. */
3575 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3582 S_check_type_and_open(pTHX_ SV *name)
3586 const char *p = SvPV_const(name, len);
3589 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3591 /* checking here captures a reasonable error message when
3592 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3593 * user gets a confusing message about looking for the .pmc file
3594 * rather than for the .pm file.
3595 * This check prevents a \0 in @INC causing problems.
3597 if (!IS_SAFE_PATHNAME(p, len, "require"))
3600 /* we use the value of errno later to see how stat() or open() failed.
3601 * We don't want it set if the stat succeeded but we still failed,
3602 * such as if the name exists, but is a directory */
3605 st_rc = PerlLIO_stat(p, &st);
3607 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3611 #if !defined(PERLIO_IS_STDIO)
3612 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3614 return PerlIO_open(p, PERL_SCRIPT_MODE);
3618 #ifndef PERL_DISABLE_PMC
3620 S_doopen_pm(pTHX_ SV *name)
3623 const char *p = SvPV_const(name, namelen);
3625 PERL_ARGS_ASSERT_DOOPEN_PM;
3627 /* check the name before trying for the .pmc name to avoid the
3628 * warning referring to the .pmc which the user probably doesn't
3629 * know or care about
3631 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3634 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3635 SV *const pmcsv = sv_newmortal();
3638 SvSetSV_nosteal(pmcsv,name);
3639 sv_catpvn(pmcsv, "c", 1);
3641 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3642 return check_type_and_open(pmcsv);
3644 return check_type_and_open(name);
3647 # define doopen_pm(name) check_type_and_open(name)
3648 #endif /* !PERL_DISABLE_PMC */
3650 /* require doesn't search for absolute names, or when the name is
3651 explicity relative the current directory */
3652 PERL_STATIC_INLINE bool
3653 S_path_is_searchable(const char *name)
3655 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3657 if (PERL_FILE_IS_ABSOLUTE(name)
3659 || (*name == '.' && ((name[1] == '/' ||
3660 (name[1] == '.' && name[2] == '/'))
3661 || (name[1] == '\\' ||
3662 ( name[1] == '.' && name[2] == '\\')))
3665 || (*name == '.' && (name[1] == '/' ||
3666 (name[1] == '.' && name[2] == '/')))
3686 int vms_unixname = 0;
3689 const char *tryname = NULL;
3691 const I32 gimme = GIMME_V;
3692 int filter_has_file = 0;
3693 PerlIO *tryrsfp = NULL;
3694 SV *filter_cache = NULL;
3695 SV *filter_state = NULL;
3696 SV *filter_sub = NULL;
3701 bool path_searchable;
3704 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3705 sv = sv_2mortal(new_version(sv));
3706 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3707 upg_version(PL_patchlevel, TRUE);
3708 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3709 if ( vcmp(sv,PL_patchlevel) <= 0 )
3710 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3711 SVfARG(sv_2mortal(vnormal(sv))),
3712 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3716 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3719 SV * const req = SvRV(sv);
3720 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3722 /* get the left hand term */
3723 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3725 first = SvIV(*av_fetch(lav,0,0));
3726 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3727 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3728 || av_tindex(lav) > 1 /* FP with > 3 digits */
3729 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3731 DIE(aTHX_ "Perl %"SVf" required--this is only "
3733 SVfARG(sv_2mortal(vnormal(req))),
3734 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3737 else { /* probably 'use 5.10' or 'use 5.8' */
3741 if (av_tindex(lav)>=1)
3742 second = SvIV(*av_fetch(lav,1,0));
3744 second /= second >= 600 ? 100 : 10;
3745 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3746 (int)first, (int)second);
3747 upg_version(hintsv, TRUE);
3749 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3750 "--this is only %"SVf", stopped",
3751 SVfARG(sv_2mortal(vnormal(req))),
3752 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3753 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3761 name = SvPV_const(sv, len);
3762 if (!(name && len > 0 && *name))
3763 DIE(aTHX_ "Null filename used");
3764 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3765 DIE(aTHX_ "Can't locate %s: %s",
3766 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3767 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3770 TAINT_PROPER("require");
3772 path_searchable = path_is_searchable(name);
3775 /* The key in the %ENV hash is in the syntax of file passed as the argument
3776 * usually this is in UNIX format, but sometimes in VMS format, which
3777 * can result in a module being pulled in more than once.
3778 * To prevent this, the key must be stored in UNIX format if the VMS
3779 * name can be translated to UNIX.
3783 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3785 unixlen = strlen(unixname);
3791 /* if not VMS or VMS name can not be translated to UNIX, pass it
3794 unixname = (char *) name;
3797 if (PL_op->op_type == OP_REQUIRE) {
3798 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3799 unixname, unixlen, 0);
3801 if (*svp != &PL_sv_undef)
3804 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3805 "Compilation failed in require", unixname);
3809 LOADING_FILE_PROBE(unixname);
3811 /* prepare to compile file */
3813 if (!path_searchable) {
3814 /* At this point, name is SvPVX(sv) */
3816 tryrsfp = doopen_pm(sv);
3818 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3819 AV * const ar = GvAVn(PL_incgv);
3826 namesv = newSV_type(SVt_PV);
3827 for (i = 0; i <= AvFILL(ar); i++) {
3828 SV * const dirsv = *av_fetch(ar, i, TRUE);
3836 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3837 && !SvOBJECT(SvRV(loader)))
3839 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3843 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3844 PTR2UV(SvRV(dirsv)), name);
3845 tryname = SvPVX_const(namesv);
3848 if (SvPADTMP(nsv)) {
3849 nsv = sv_newmortal();
3850 SvSetSV_nosteal(nsv,sv);
3853 ENTER_with_name("call_INC");
3861 if (SvGMAGICAL(loader)) {
3862 SV *l = sv_newmortal();
3863 sv_setsv_nomg(l, loader);
3866 if (sv_isobject(loader))
3867 count = call_method("INC", G_ARRAY);
3869 count = call_sv(loader, G_ARRAY);
3879 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3880 && !isGV_with_GP(SvRV(arg))) {
3881 filter_cache = SvRV(arg);
3888 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3892 if (isGV_with_GP(arg)) {
3893 IO * const io = GvIO((const GV *)arg);
3898 tryrsfp = IoIFP(io);
3899 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3900 PerlIO_close(IoOFP(io));
3911 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3913 SvREFCNT_inc_simple_void_NN(filter_sub);
3916 filter_state = SP[i];
3917 SvREFCNT_inc_simple_void(filter_state);
3921 if (!tryrsfp && (filter_cache || filter_sub)) {
3922 tryrsfp = PerlIO_open(BIT_BUCKET,
3928 /* FREETMPS may free our filter_cache */
3929 SvREFCNT_inc_simple_void(filter_cache);
3933 LEAVE_with_name("call_INC");
3935 /* Now re-mortalize it. */
3936 sv_2mortal(filter_cache);
3938 /* Adjust file name if the hook has set an %INC entry.
3939 This needs to happen after the FREETMPS above. */
3940 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3942 tryname = SvPV_nolen_const(*svp);
3949 filter_has_file = 0;
3950 filter_cache = NULL;
3952 SvREFCNT_dec(filter_state);
3953 filter_state = NULL;
3956 SvREFCNT_dec(filter_sub);
3961 if (path_searchable) {
3966 dir = SvPV_nomg_const(dirsv, dirlen);
3972 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3976 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3979 sv_setpv(namesv, unixdir);
3980 sv_catpv(namesv, unixname);
3982 # ifdef __SYMBIAN32__
3983 if (PL_origfilename[0] &&
3984 PL_origfilename[1] == ':' &&
3985 !(dir[0] && dir[1] == ':'))
3986 Perl_sv_setpvf(aTHX_ namesv,
3991 Perl_sv_setpvf(aTHX_ namesv,
3995 /* The equivalent of
3996 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3997 but without the need to parse the format string, or
3998 call strlen on either pointer, and with the correct
3999 allocation up front. */
4001 char *tmp = SvGROW(namesv, dirlen + len + 2);
4003 memcpy(tmp, dir, dirlen);
4006 /* Avoid '<dir>//<file>' */
4007 if (!dirlen || *(tmp-1) != '/') {
4010 /* So SvCUR_set reports the correct length below */
4014 /* name came from an SV, so it will have a '\0' at the
4015 end that we can copy as part of this memcpy(). */
4016 memcpy(tmp, name, len + 1);
4018 SvCUR_set(namesv, dirlen + len + 1);
4023 TAINT_PROPER("require");
4024 tryname = SvPVX_const(namesv);
4025 tryrsfp = doopen_pm(namesv);
4027 if (tryname[0] == '.' && tryname[1] == '/') {
4029 while (*++tryname == '/') {}
4033 else if (errno == EMFILE || errno == EACCES) {
4034 /* no point in trying other paths if out of handles;
4035 * on the other hand, if we couldn't open one of the
4036 * files, then going on with the search could lead to
4037 * unexpected results; see perl #113422
4046 saved_errno = errno; /* sv_2mortal can realloc things */
4049 if (PL_op->op_type == OP_REQUIRE) {
4050 if(saved_errno == EMFILE || saved_errno == EACCES) {
4051 /* diag_listed_as: Can't locate %s */
4052 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4054 if (namesv) { /* did we lookup @INC? */
4055 AV * const ar = GvAVn(PL_incgv);
4057 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4058 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4059 for (i = 0; i <= AvFILL(ar); i++) {
4060 sv_catpvs(inc, " ");
4061 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4063 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4064 const char *c, *e = name + len - 3;
4065 sv_catpv(msg, " (you may need to install the ");
4066 for (c = name; c < e; c++) {
4068 sv_catpvn(msg, "::", 2);
4071 sv_catpvn(msg, c, 1);
4074 sv_catpv(msg, " module)");
4076 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4077 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4079 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4080 sv_catpv(msg, " (did you run h2ph?)");
4083 /* diag_listed_as: Can't locate %s */
4085 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4089 DIE(aTHX_ "Can't locate %s", name);
4096 SETERRNO(0, SS_NORMAL);
4098 /* Assume success here to prevent recursive requirement. */
4099 /* name is never assigned to again, so len is still strlen(name) */
4100 /* Check whether a hook in @INC has already filled %INC */
4102 (void)hv_store(GvHVn(PL_incgv),
4103 unixname, unixlen, newSVpv(tryname,0),0);
4105 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4107 (void)hv_store(GvHVn(PL_incgv),
4108 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4111 ENTER_with_name("eval");
4113 SAVECOPFILE_FREE(&PL_compiling);
4114 CopFILE_set(&PL_compiling, tryname);
4115 lex_start(NULL, tryrsfp, 0);
4117 if (filter_sub || filter_cache) {
4118 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4119 than hanging another SV from it. In turn, filter_add() optionally
4120 takes the SV to use as the filter (or creates a new SV if passed
4121 NULL), so simply pass in whatever value filter_cache has. */
4122 SV * const fc = filter_cache ? newSV(0) : NULL;
4124 if (fc) sv_copypv(fc, filter_cache);
4125 datasv = filter_add(S_run_user_filter, fc);
4126 IoLINES(datasv) = filter_has_file;
4127 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4128 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4131 /* switch to eval mode */
4132 PUSHBLOCK(cx, CXt_EVAL, SP);
4134 cx->blk_eval.retop = PL_op->op_next;
4136 SAVECOPLINE(&PL_compiling);
4137 CopLINE_set(&PL_compiling, 0);
4141 /* Store and reset encoding. */
4142 encoding = PL_encoding;
4145 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4146 op = DOCATCH(PL_eval_start);
4148 op = PL_op->op_next;
4150 /* Restore encoding. */
4151 PL_encoding = encoding;
4153 LOADED_FILE_PROBE(unixname);
4158 /* This is a op added to hold the hints hash for
4159 pp_entereval. The hash can be modified by the code
4160 being eval'ed, so we return a copy instead. */
4166 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4176 const I32 gimme = GIMME_V;
4177 const U32 was = PL_breakable_sub_gen;
4178 char tbuf[TYPE_DIGITS(long) + 12];
4179 bool saved_delete = FALSE;
4180 char *tmpbuf = tbuf;
4183 U32 seq, lex_flags = 0;
4184 HV *saved_hh = NULL;
4185 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4187 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4188 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4190 else if (PL_hints & HINT_LOCALIZE_HH || (
4191 PL_op->op_private & OPpEVAL_COPHH
4192 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4194 saved_hh = cop_hints_2hv(PL_curcop, 0);
4195 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4199 /* make sure we've got a plain PV (no overload etc) before testing
4200 * for taint. Making a copy here is probably overkill, but better
4201 * safe than sorry */
4203 const char * const p = SvPV_const(sv, len);
4205 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4206 lex_flags |= LEX_START_COPIED;
4208 if (bytes && SvUTF8(sv))
4209 SvPVbyte_force(sv, len);
4211 else if (bytes && SvUTF8(sv)) {
4212 /* Don't modify someone else's scalar */
4215 (void)sv_2mortal(sv);
4216 SvPVbyte_force(sv,len);
4217 lex_flags |= LEX_START_COPIED;
4220 TAINT_IF(SvTAINTED(sv));
4221 TAINT_PROPER("eval");
4223 ENTER_with_name("eval");
4224 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4225 ? LEX_IGNORE_UTF8_HINTS
4226 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4231 /* switch to eval mode */
4233 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4234 SV * const temp_sv = sv_newmortal();
4235 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4236 (unsigned long)++PL_evalseq,
4237 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4238 tmpbuf = SvPVX(temp_sv);
4239 len = SvCUR(temp_sv);
4242 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4243 SAVECOPFILE_FREE(&PL_compiling);
4244 CopFILE_set(&PL_compiling, tmpbuf+2);
4245 SAVECOPLINE(&PL_compiling);
4246 CopLINE_set(&PL_compiling, 1);
4247 /* special case: an eval '' executed within the DB package gets lexically
4248 * placed in the first non-DB CV rather than the current CV - this
4249 * allows the debugger to execute code, find lexicals etc, in the
4250 * scope of the code being debugged. Passing &seq gets find_runcv
4251 * to do the dirty work for us */
4252 runcv = find_runcv(&seq);
4254 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4256 cx->blk_eval.retop = PL_op->op_next;
4258 /* prepare to compile string */
4260 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4261 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4263 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4264 deleting the eval's FILEGV from the stash before gv_check() runs
4265 (i.e. before run-time proper). To work around the coredump that
4266 ensues, we always turn GvMULTI_on for any globals that were
4267 introduced within evals. See force_ident(). GSAR 96-10-12 */
4268 char *const safestr = savepvn(tmpbuf, len);
4269 SAVEDELETE(PL_defstash, safestr, len);
4270 saved_delete = TRUE;
4275 if (doeval(gimme, runcv, seq, saved_hh)) {
4276 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4277 ? (PERLDB_LINE || PERLDB_SAVESRC)
4278 : PERLDB_SAVESRC_NOSUBS) {
4279 /* Retain the filegv we created. */
4280 } else if (!saved_delete) {
4281 char *const safestr = savepvn(tmpbuf, len);
4282 SAVEDELETE(PL_defstash, safestr, len);
4284 return DOCATCH(PL_eval_start);
4286 /* We have already left the scope set up earlier thanks to the LEAVE
4288 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4289 ? (PERLDB_LINE || PERLDB_SAVESRC)
4290 : PERLDB_SAVESRC_INVALID) {
4291 /* Retain the filegv we created. */
4292 } else if (!saved_delete) {
4293 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4295 return PL_op->op_next;
4307 const U8 save_flags = PL_op -> op_flags;
4315 namesv = cx->blk_eval.old_namesv;
4316 retop = cx->blk_eval.retop;
4317 evalcv = cx->blk_eval.cv;
4320 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4321 gimme, SVs_TEMP, FALSE);
4322 PL_curpm = newpm; /* Don't pop $1 et al till now */
4325 assert(CvDEPTH(evalcv) == 1);
4327 CvDEPTH(evalcv) = 0;
4329 if (optype == OP_REQUIRE &&
4330 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4332 /* Unassume the success we assumed earlier. */
4333 (void)hv_delete(GvHVn(PL_incgv),
4334 SvPVX_const(namesv),
4335 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4337 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4339 /* die_unwind() did LEAVE, or we won't be here */
4342 LEAVE_with_name("eval");
4343 if (!(save_flags & OPf_SPECIAL)) {
4351 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4352 close to the related Perl_create_eval_scope. */
4354 Perl_delete_eval_scope(pTHX)
4365 LEAVE_with_name("eval_scope");
4366 PERL_UNUSED_VAR(newsp);
4367 PERL_UNUSED_VAR(gimme);
4368 PERL_UNUSED_VAR(optype);
4371 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4372 also needed by Perl_fold_constants. */
4374 Perl_create_eval_scope(pTHX_ U32 flags)
4377 const I32 gimme = GIMME_V;
4379 ENTER_with_name("eval_scope");
4382 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4385 PL_in_eval = EVAL_INEVAL;
4386 if (flags & G_KEEPERR)
4387 PL_in_eval |= EVAL_KEEPERR;
4390 if (flags & G_FAKINGEVAL) {
4391 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4399 PERL_CONTEXT * const cx = create_eval_scope(0);
4400 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4401 return DOCATCH(PL_op->op_next);
4416 PERL_UNUSED_VAR(optype);
4419 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4420 SVs_PADTMP|SVs_TEMP, FALSE);
4421 PL_curpm = newpm; /* Don't pop $1 et al till now */
4423 LEAVE_with_name("eval_scope");
4432 const I32 gimme = GIMME_V;
4434 ENTER_with_name("given");
4437 if (PL_op->op_targ) {
4438 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4439 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4440 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4447 PUSHBLOCK(cx, CXt_GIVEN, SP);
4460 PERL_UNUSED_CONTEXT;
4463 assert(CxTYPE(cx) == CXt_GIVEN);
4466 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4467 SVs_PADTMP|SVs_TEMP, FALSE);
4468 PL_curpm = newpm; /* Don't pop $1 et al till now */
4470 LEAVE_with_name("given");
4474 /* Helper routines used by pp_smartmatch */
4476 S_make_matcher(pTHX_ REGEXP *re)
4479 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4481 PERL_ARGS_ASSERT_MAKE_MATCHER;
4483 PM_SETRE(matcher, ReREFCNT_inc(re));
4485 SAVEFREEOP((OP *) matcher);
4486 ENTER_with_name("matcher"); SAVETMPS;
4492 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4497 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4499 PL_op = (OP *) matcher;
4502 (void) Perl_pp_match(aTHX);
4504 return (SvTRUEx(POPs));
4508 S_destroy_matcher(pTHX_ PMOP *matcher)
4512 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4513 PERL_UNUSED_ARG(matcher);
4516 LEAVE_with_name("matcher");
4519 /* Do a smart match */
4522 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4523 return do_smartmatch(NULL, NULL, 0);
4526 /* This version of do_smartmatch() implements the
4527 * table of smart matches that is found in perlsyn.
4530 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4535 bool object_on_left = FALSE;
4536 SV *e = TOPs; /* e is for 'expression' */
4537 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4539 /* Take care only to invoke mg_get() once for each argument.
4540 * Currently we do this by copying the SV if it's magical. */
4542 if (!copied && SvGMAGICAL(d))
4543 d = sv_mortalcopy(d);
4550 e = sv_mortalcopy(e);
4552 /* First of all, handle overload magic of the rightmost argument */
4555 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4556 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4558 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4565 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4568 SP -= 2; /* Pop the values */
4573 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4580 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4581 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4582 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4584 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4585 object_on_left = TRUE;
4588 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4590 if (object_on_left) {
4591 goto sm_any_sub; /* Treat objects like scalars */
4593 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4594 /* Test sub truth for each key */
4596 bool andedresults = TRUE;
4597 HV *hv = (HV*) SvRV(d);
4598 I32 numkeys = hv_iterinit(hv);
4599 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4602 while ( (he = hv_iternext(hv)) ) {
4603 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4604 ENTER_with_name("smartmatch_hash_key_test");
4607 PUSHs(hv_iterkeysv(he));
4609 c = call_sv(e, G_SCALAR);
4612 andedresults = FALSE;
4614 andedresults = SvTRUEx(POPs) && andedresults;
4616 LEAVE_with_name("smartmatch_hash_key_test");
4623 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4624 /* Test sub truth for each element */
4626 bool andedresults = TRUE;
4627 AV *av = (AV*) SvRV(d);
4628 const I32 len = av_tindex(av);
4629 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4632 for (i = 0; i <= len; ++i) {
4633 SV * const * const svp = av_fetch(av, i, FALSE);
4634 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4635 ENTER_with_name("smartmatch_array_elem_test");
4641 c = call_sv(e, G_SCALAR);
4644 andedresults = FALSE;
4646 andedresults = SvTRUEx(POPs) && andedresults;
4648 LEAVE_with_name("smartmatch_array_elem_test");
4657 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4658 ENTER_with_name("smartmatch_coderef");
4663 c = call_sv(e, G_SCALAR);
4667 else if (SvTEMP(TOPs))
4668 SvREFCNT_inc_void(TOPs);
4670 LEAVE_with_name("smartmatch_coderef");
4675 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4676 if (object_on_left) {
4677 goto sm_any_hash; /* Treat objects like scalars */
4679 else if (!SvOK(d)) {
4680 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4683 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4684 /* Check that the key-sets are identical */
4686 HV *other_hv = MUTABLE_HV(SvRV(d));
4689 U32 this_key_count = 0,
4690 other_key_count = 0;
4691 HV *hv = MUTABLE_HV(SvRV(e));
4693 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4694 /* Tied hashes don't know how many keys they have. */
4695 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4696 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4700 HV * const temp = other_hv;
4706 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4710 /* The hashes have the same number of keys, so it suffices
4711 to check that one is a subset of the other. */
4712 (void) hv_iterinit(hv);
4713 while ( (he = hv_iternext(hv)) ) {
4714 SV *key = hv_iterkeysv(he);
4716 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4719 if(!hv_exists_ent(other_hv, key, 0)) {
4720 (void) hv_iterinit(hv); /* reset iterator */
4726 (void) hv_iterinit(other_hv);
4727 while ( hv_iternext(other_hv) )
4731 other_key_count = HvUSEDKEYS(other_hv);
4733 if (this_key_count != other_key_count)
4738 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4739 AV * const other_av = MUTABLE_AV(SvRV(d));
4740 const SSize_t other_len = av_tindex(other_av) + 1;
4742 HV *hv = MUTABLE_HV(SvRV(e));
4744 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4745 for (i = 0; i < other_len; ++i) {
4746 SV ** const svp = av_fetch(other_av, i, FALSE);
4747 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4748 if (svp) { /* ??? When can this not happen? */
4749 if (hv_exists_ent(hv, *svp, 0))
4755 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4756 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4759 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4761 HV *hv = MUTABLE_HV(SvRV(e));
4763 (void) hv_iterinit(hv);
4764 while ( (he = hv_iternext(hv)) ) {
4765 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4766 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4767 (void) hv_iterinit(hv);
4768 destroy_matcher(matcher);
4772 destroy_matcher(matcher);
4778 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4779 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4786 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4787 if (object_on_left) {
4788 goto sm_any_array; /* Treat objects like scalars */
4790 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4791 AV * const other_av = MUTABLE_AV(SvRV(e));
4792 const SSize_t other_len = av_tindex(other_av) + 1;
4795 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4796 for (i = 0; i < other_len; ++i) {
4797 SV ** const svp = av_fetch(other_av, i, FALSE);
4799 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4800 if (svp) { /* ??? When can this not happen? */
4801 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4807 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4808 AV *other_av = MUTABLE_AV(SvRV(d));
4809 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4810 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4814 const SSize_t other_len = av_tindex(other_av);
4816 if (NULL == seen_this) {
4817 seen_this = newHV();
4818 (void) sv_2mortal(MUTABLE_SV(seen_this));
4820 if (NULL == seen_other) {
4821 seen_other = newHV();
4822 (void) sv_2mortal(MUTABLE_SV(seen_other));
4824 for(i = 0; i <= other_len; ++i) {
4825 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4826 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4828 if (!this_elem || !other_elem) {
4829 if ((this_elem && SvOK(*this_elem))
4830 || (other_elem && SvOK(*other_elem)))
4833 else if (hv_exists_ent(seen_this,
4834 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4835 hv_exists_ent(seen_other,
4836 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4838 if (*this_elem != *other_elem)
4842 (void)hv_store_ent(seen_this,
4843 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4845 (void)hv_store_ent(seen_other,
4846 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4852 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4853 (void) do_smartmatch(seen_this, seen_other, 0);
4855 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4864 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4865 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4868 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4869 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4872 for(i = 0; i <= this_len; ++i) {
4873 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4874 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4875 if (svp && matcher_matches_sv(matcher, *svp)) {
4876 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));
4940 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4942 PUSHs(matcher_matches_sv(matcher, d)
4945 destroy_matcher(matcher);
4950 /* See if there is overload magic on left */
4951 else if (object_on_left && SvAMAGIC(d)) {
4953 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4954 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4957 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4965 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4968 else if (!SvOK(d)) {
4969 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4970 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4975 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4976 DEBUG_M(if (SvNIOK(e))
4977 Perl_deb(aTHX_ " applying rule Any-Num\n");
4979 Perl_deb(aTHX_ " applying rule Num-numish\n");
4981 /* numeric comparison */
4984 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4985 (void) Perl_pp_i_eq(aTHX);
4987 (void) Perl_pp_eq(aTHX);
4995 /* As a last resort, use string comparison */
4996 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4999 return Perl_pp_seq(aTHX);
5006 const I32 gimme = GIMME_V;
5008 /* This is essentially an optimization: if the match
5009 fails, we don't want to push a context and then
5010 pop it again right away, so we skip straight
5011 to the op that follows the leavewhen.
5012 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5014 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
5015 RETURNOP(cLOGOP->op_other->op_next);
5017 ENTER_with_name("when");
5020 PUSHBLOCK(cx, CXt_WHEN, SP);
5035 cxix = dopoptogiven(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");
5042 assert(CxTYPE(cx) == CXt_WHEN);
5045 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
5046 SVs_PADTMP|SVs_TEMP, FALSE);
5047 PL_curpm = newpm; /* pop $1 et al */
5049 LEAVE_with_name("when");
5051 if (cxix < cxstack_ix)
5054 cx = &cxstack[cxix];
5056 if (CxFOREACH(cx)) {
5057 /* clear off anything above the scope we're re-entering */
5058 I32 inner = PL_scopestack_ix;
5061 if (PL_scopestack_ix < inner)
5062 leave_scope(PL_scopestack[PL_scopestack_ix]);
5063 PL_curcop = cx->blk_oldcop;
5066 return cx->blk_loop.my_op->op_nextop;
5070 RETURNOP(cx->blk_givwhen.leave_op);
5083 PERL_UNUSED_VAR(gimme);
5085 cxix = dopoptowhen(cxstack_ix);
5087 DIE(aTHX_ "Can't \"continue\" outside a when block");
5089 if (cxix < cxstack_ix)
5093 assert(CxTYPE(cx) == CXt_WHEN);
5096 PL_curpm = newpm; /* pop $1 et al */
5098 LEAVE_with_name("when");
5099 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5108 cxix = dopoptogiven(cxstack_ix);
5110 DIE(aTHX_ "Can't \"break\" outside a given block");
5112 cx = &cxstack[cxix];
5114 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5116 if (cxix < cxstack_ix)
5119 /* Restore the sp at the time we entered the given block */
5122 return cx->blk_givwhen.leave_op;
5126 S_doparseform(pTHX_ SV *sv)
5129 char *s = SvPV(sv, len);
5131 char *base = NULL; /* start of current field */
5132 I32 skipspaces = 0; /* number of contiguous spaces seen */
5133 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5134 bool repeat = FALSE; /* ~~ seen on this line */
5135 bool postspace = FALSE; /* a text field may need right padding */
5138 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5140 bool ischop; /* it's a ^ rather than a @ */
5141 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5142 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5146 PERL_ARGS_ASSERT_DOPARSEFORM;
5149 Perl_croak(aTHX_ "Null picture in formline");
5151 if (SvTYPE(sv) >= SVt_PVMG) {
5152 /* This might, of course, still return NULL. */
5153 mg = mg_find(sv, PERL_MAGIC_fm);
5155 sv_upgrade(sv, SVt_PVMG);
5159 /* still the same as previously-compiled string? */
5160 SV *old = mg->mg_obj;
5161 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5162 && len == SvCUR(old)
5163 && strnEQ(SvPVX(old), SvPVX(sv), len)
5165 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5169 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5170 Safefree(mg->mg_ptr);
5176 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5177 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5180 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5181 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5185 /* estimate the buffer size needed */
5186 for (base = s; s <= send; s++) {
5187 if (*s == '\n' || *s == '@' || *s == '^')
5193 Newx(fops, maxops, U32);
5198 *fpc++ = FF_LINEMARK;
5199 noblank = repeat = FALSE;
5217 case ' ': case '\t':
5224 } /* else FALL THROUGH */
5232 *fpc++ = FF_LITERAL;
5240 *fpc++ = (U32)skipspaces;
5244 *fpc++ = FF_NEWLINE;
5248 arg = fpc - linepc + 1;
5255 *fpc++ = FF_LINEMARK;
5256 noblank = repeat = FALSE;
5265 ischop = s[-1] == '^';
5271 arg = (s - base) - 1;
5273 *fpc++ = FF_LITERAL;
5279 if (*s == '*') { /* @* or ^* */
5281 *fpc++ = 2; /* skip the @* or ^* */
5283 *fpc++ = FF_LINESNGL;
5286 *fpc++ = FF_LINEGLOB;
5288 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5289 arg = ischop ? FORM_NUM_BLANK : 0;
5294 const char * const f = ++s;
5297 arg |= FORM_NUM_POINT + (s - f);
5299 *fpc++ = s - base; /* fieldsize for FETCH */
5300 *fpc++ = FF_DECIMAL;
5302 unchopnum |= ! ischop;
5304 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5305 arg = ischop ? FORM_NUM_BLANK : 0;
5307 s++; /* skip the '0' first */
5311 const char * const f = ++s;
5314 arg |= FORM_NUM_POINT + (s - f);
5316 *fpc++ = s - base; /* fieldsize for FETCH */
5317 *fpc++ = FF_0DECIMAL;
5319 unchopnum |= ! ischop;
5321 else { /* text field */
5323 bool ismore = FALSE;
5326 while (*++s == '>') ;
5327 prespace = FF_SPACE;
5329 else if (*s == '|') {
5330 while (*++s == '|') ;
5331 prespace = FF_HALFSPACE;
5336 while (*++s == '<') ;
5339 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5343 *fpc++ = s - base; /* fieldsize for FETCH */
5345 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5348 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5362 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5365 mg->mg_ptr = (char *) fops;
5366 mg->mg_len = arg * sizeof(U32);
5367 mg->mg_obj = sv_copy;
5368 mg->mg_flags |= MGf_REFCOUNTED;
5370 if (unchopnum && repeat)
5371 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5378 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5380 /* Can value be printed in fldsize chars, using %*.*f ? */
5384 int intsize = fldsize - (value < 0 ? 1 : 0);
5386 if (frcsize & FORM_NUM_POINT)
5388 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5391 while (intsize--) pwr *= 10.0;
5392 while (frcsize--) eps /= 10.0;
5395 if (value + eps >= pwr)
5398 if (value - eps <= -pwr)
5405 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5408 SV * const datasv = FILTER_DATA(idx);
5409 const int filter_has_file = IoLINES(datasv);
5410 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5411 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5416 char *prune_from = NULL;
5417 bool read_from_cache = FALSE;
5421 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5423 assert(maxlen >= 0);
5426 /* I was having segfault trouble under Linux 2.2.5 after a
5427 parse error occured. (Had to hack around it with a test
5428 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5429 not sure where the trouble is yet. XXX */
5432 SV *const cache = datasv;
5435 const char *cache_p = SvPV(cache, cache_len);
5439 /* Running in block mode and we have some cached data already.
5441 if (cache_len >= umaxlen) {
5442 /* In fact, so much data we don't even need to call
5447 const char *const first_nl =
5448 (const char *)memchr(cache_p, '\n', cache_len);
5450 take = first_nl + 1 - cache_p;
5454 sv_catpvn(buf_sv, cache_p, take);
5455 sv_chop(cache, cache_p + take);
5456 /* Definitely not EOF */
5460 sv_catsv(buf_sv, cache);
5462 umaxlen -= cache_len;
5465 read_from_cache = TRUE;
5469 /* Filter API says that the filter appends to the contents of the buffer.
5470 Usually the buffer is "", so the details don't matter. But if it's not,
5471 then clearly what it contains is already filtered by this filter, so we
5472 don't want to pass it in a second time.
5473 I'm going to use a mortal in case the upstream filter croaks. */
5474 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5475 ? sv_newmortal() : buf_sv;
5476 SvUPGRADE(upstream, SVt_PV);
5478 if (filter_has_file) {
5479 status = FILTER_READ(idx+1, upstream, 0);
5482 if (filter_sub && status >= 0) {
5486 ENTER_with_name("call_filter_sub");
5491 DEFSV_set(upstream);
5495 PUSHs(filter_state);
5498 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5508 SV * const errsv = ERRSV;
5509 if (SvTRUE_NN(errsv))
5510 err = newSVsv(errsv);
5516 LEAVE_with_name("call_filter_sub");
5519 if (SvGMAGICAL(upstream)) {
5521 if (upstream == buf_sv) mg_free(buf_sv);
5523 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5524 if(!err && SvOK(upstream)) {
5525 got_p = SvPV_nomg(upstream, got_len);
5527 if (got_len > umaxlen) {
5528 prune_from = got_p + umaxlen;
5531 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5532 if (first_nl && first_nl + 1 < got_p + got_len) {
5533 /* There's a second line here... */
5534 prune_from = first_nl + 1;
5538 if (!err && prune_from) {
5539 /* Oh. Too long. Stuff some in our cache. */
5540 STRLEN cached_len = got_p + got_len - prune_from;
5541 SV *const cache = datasv;
5544 /* Cache should be empty. */
5545 assert(!SvCUR(cache));
5548 sv_setpvn(cache, prune_from, cached_len);
5549 /* If you ask for block mode, you may well split UTF-8 characters.
5550 "If it breaks, you get to keep both parts"
5551 (Your code is broken if you don't put them back together again
5552 before something notices.) */
5553 if (SvUTF8(upstream)) {
5556 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5558 /* Cannot just use sv_setpvn, as that could free the buffer
5559 before we have a chance to assign it. */
5560 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5561 got_len - cached_len);
5563 /* Can't yet be EOF */
5568 /* If they are at EOF but buf_sv has something in it, then they may never
5569 have touched the SV upstream, so it may be undefined. If we naively
5570 concatenate it then we get a warning about use of uninitialised value.
5572 if (!err && upstream != buf_sv &&
5574 sv_catsv_nomg(buf_sv, upstream);
5576 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5579 IoLINES(datasv) = 0;
5581 SvREFCNT_dec(filter_state);
5582 IoTOP_GV(datasv) = NULL;
5585 SvREFCNT_dec(filter_sub);
5586 IoBOTTOM_GV(datasv) = NULL;
5588 filter_del(S_run_user_filter);
5594 if (status == 0 && read_from_cache) {
5595 /* If we read some data from the cache (and by getting here it implies
5596 that we emptied the cache) then we aren't yet at EOF, and mustn't
5597 report that to our caller. */
5605 * c-indentation-style: bsd
5607 * indent-tabs-mode: nil
5610 * ex: set ts=8 sts=4 sw=4 et: