3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
80 PMOP *pm = (PMOP*)cLOGOP->op_other;
85 const regexp_engine *eng;
86 bool is_bare_re= FALSE;
88 if (PL_op->op_flags & OPf_STACKED) {
98 /* prevent recompiling under /o and ithreads. */
99 #if defined(USE_ITHREADS)
100 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
107 assert (re != (REGEXP*) &PL_sv_undef);
108 eng = re ? RX_ENGINE(re) : current_re_engine();
111 In the below logic: these are basically the same - check if this regcomp is part of a split.
113 (PL_op->op_pmflags & PMf_split )
114 (PL_op->op_next->op_type == OP_PUSHRE)
116 We could add a new mask for this and copy the PMf_split, if we did
117 some bit definition fiddling first.
119 For now we leave this
122 new_re = (eng->op_comp
124 : &Perl_re_op_compile
125 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
127 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
129 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
131 if (pm->op_pmflags & PMf_HAS_CV)
132 ReANY(new_re)->qr_anoncv
133 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
137 /* The match's LHS's get-magic might need to access this op's regexp
138 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
139 get-magic now before we replace the regexp. Hopefully this hack can
140 be replaced with the approach described at
141 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
143 if (pm->op_type == OP_MATCH) {
145 const bool was_tainted = TAINT_get;
146 if (pm->op_flags & OPf_STACKED)
148 else if (pm->op_private & OPpTARGET_MY)
149 lhs = PAD_SV(pm->op_targ);
152 /* Restore the previous value of PL_tainted (which may have been
153 modified by get-magic), to avoid incorrectly setting the
154 RXf_TAINTED flag with RX_TAINT_on further down. */
155 TAINT_set(was_tainted);
156 #ifdef NO_TAINT_SUPPORT
157 PERL_UNUSED_VAR(was_tainted);
160 tmp = reg_temp_copy(NULL, new_re);
161 ReREFCNT_dec(new_re);
167 PM_SETRE(pm, new_re);
171 if (TAINTING_get && TAINT_get) {
172 SvTAINTED_on((SV*)new_re);
176 #if !defined(USE_ITHREADS)
177 /* can't change the optree at runtime either */
178 /* PMf_KEEP is handled differently under threads to avoid these problems */
179 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
181 if (pm->op_pmflags & PMf_KEEP) {
182 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
183 cLOGOP->op_first->op_next = PL_op->op_next;
196 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
197 PMOP * const pm = (PMOP*) cLOGOP->op_other;
198 SV * const dstr = cx->sb_dstr;
201 char *orig = cx->sb_orig;
202 REGEXP * const rx = cx->sb_rx;
204 REGEXP *old = PM_GETRE(pm);
211 PM_SETRE(pm,ReREFCNT_inc(rx));
214 rxres_restore(&cx->sb_rxres, rx);
216 if (cx->sb_iters++) {
217 const I32 saviters = cx->sb_iters;
218 if (cx->sb_iters > cx->sb_maxiters)
219 DIE(aTHX_ "Substitution loop");
221 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
223 /* See "how taint works" above pp_subst() */
225 cx->sb_rxtainted |= SUBST_TAINT_REPL;
226 sv_catsv_nomg(dstr, POPs);
227 if (CxONCE(cx) || s < orig ||
228 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
229 (s == m), cx->sb_targ, NULL,
230 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
232 SV *targ = cx->sb_targ;
234 assert(cx->sb_strend >= s);
235 if(cx->sb_strend > s) {
236 if (DO_UTF8(dstr) && !SvUTF8(targ))
237 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
239 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
241 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
242 cx->sb_rxtainted |= SUBST_TAINT_PAT;
244 if (pm->op_pmflags & PMf_NONDESTRUCT) {
246 /* From here on down we're using the copy, and leaving the
247 original untouched. */
251 SV_CHECK_THINKFIRST_COW_DROP(targ);
252 if (isGV(targ)) Perl_croak_no_modify();
254 SvPV_set(targ, SvPVX(dstr));
255 SvCUR_set(targ, SvCUR(dstr));
256 SvLEN_set(targ, SvLEN(dstr));
259 SvPV_set(dstr, NULL);
262 mPUSHi(saviters - 1);
264 (void)SvPOK_only_UTF8(targ);
267 /* update the taint state of various various variables in
268 * preparation for final exit.
269 * See "how taint works" above pp_subst() */
271 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
272 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
275 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
277 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
278 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
280 SvTAINTED_on(TOPs); /* taint return value */
281 /* needed for mg_set below */
283 cBOOL(cx->sb_rxtainted &
284 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
288 /* PL_tainted must be correctly set for this mg_set */
291 LEAVE_SCOPE(cx->sb_oldsave);
294 RETURNOP(pm->op_next);
295 assert(0); /* NOTREACHED */
297 cx->sb_iters = saviters;
299 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
302 assert(!RX_SUBOFFSET(rx));
303 cx->sb_orig = orig = RX_SUBBEG(rx);
305 cx->sb_strend = s + (cx->sb_strend - m);
307 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
309 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
310 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
312 sv_catpvn_nomg(dstr, s, m-s);
314 cx->sb_s = RX_OFFS(rx)[0].end + orig;
315 { /* Update the pos() information. */
317 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
319 if (!(mg = mg_find_mglob(sv))) {
320 mg = sv_magicext_mglob(sv);
323 MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
326 (void)ReREFCNT_inc(rx);
327 /* update the taint state of various various variables in preparation
328 * for calling the code block.
329 * See "how taint works" above pp_subst() */
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
335 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
336 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
340 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
341 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
342 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
343 ? cx->sb_dstr : cx->sb_targ);
346 rxres_save(&cx->sb_rxres, rx);
348 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
352 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
357 PERL_ARGS_ASSERT_RXRES_SAVE;
360 if (!p || p[1] < RX_NPARENS(rx)) {
362 i = 7 + (RX_NPARENS(rx)+1) * 2;
364 i = 6 + (RX_NPARENS(rx)+1) * 2;
373 /* what (if anything) to free on croak */
374 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
375 RX_MATCH_COPIED_off(rx);
376 *p++ = RX_NPARENS(rx);
379 *p++ = PTR2UV(RX_SAVED_COPY(rx));
380 RX_SAVED_COPY(rx) = NULL;
383 *p++ = PTR2UV(RX_SUBBEG(rx));
384 *p++ = (UV)RX_SUBLEN(rx);
385 *p++ = (UV)RX_SUBOFFSET(rx);
386 *p++ = (UV)RX_SUBCOFFSET(rx);
387 for (i = 0; i <= RX_NPARENS(rx); ++i) {
388 *p++ = (UV)RX_OFFS(rx)[i].start;
389 *p++ = (UV)RX_OFFS(rx)[i].end;
394 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
399 PERL_ARGS_ASSERT_RXRES_RESTORE;
402 RX_MATCH_COPY_FREE(rx);
403 RX_MATCH_COPIED_set(rx, *p);
405 RX_NPARENS(rx) = *p++;
408 if (RX_SAVED_COPY(rx))
409 SvREFCNT_dec (RX_SAVED_COPY(rx));
410 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
414 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
415 RX_SUBLEN(rx) = (I32)(*p++);
416 RX_SUBOFFSET(rx) = (I32)*p++;
417 RX_SUBCOFFSET(rx) = (I32)*p++;
418 for (i = 0; i <= RX_NPARENS(rx); ++i) {
419 RX_OFFS(rx)[i].start = (I32)(*p++);
420 RX_OFFS(rx)[i].end = (I32)(*p++);
425 S_rxres_free(pTHX_ void **rsp)
427 UV * const p = (UV*)*rsp;
429 PERL_ARGS_ASSERT_RXRES_FREE;
433 void *tmp = INT2PTR(char*,*p);
436 U32 i = 9 + p[1] * 2;
438 U32 i = 8 + p[1] * 2;
443 SvREFCNT_dec (INT2PTR(SV*,p[2]));
446 PoisonFree(p, i, sizeof(UV));
455 #define FORM_NUM_BLANK (1<<30)
456 #define FORM_NUM_POINT (1<<29)
460 dVAR; dSP; dMARK; dORIGMARK;
461 SV * const tmpForm = *++MARK;
462 SV *formsv; /* contains text of original format */
463 U32 *fpc; /* format ops program counter */
464 char *t; /* current append position in target string */
465 const char *f; /* current position in format string */
467 SV *sv = NULL; /* current item */
468 const char *item = NULL;/* string value of current item */
469 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
470 I32 itembytes = 0; /* as itemsize, but length in bytes */
471 I32 fieldsize = 0; /* width of current field */
472 I32 lines = 0; /* number of lines that have been output */
473 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
474 const char *chophere = NULL; /* where to chop current item */
475 STRLEN linemark = 0; /* pos of start of line in output */
477 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
478 STRLEN len; /* length of current sv */
479 STRLEN linemax; /* estimate of output size in bytes */
480 bool item_is_utf8 = FALSE;
481 bool targ_is_utf8 = FALSE;
484 U8 *source; /* source of bytes to append */
485 STRLEN to_copy; /* how may bytes to append */
486 char trans; /* what chars to translate */
488 mg = doparseform(tmpForm);
490 fpc = (U32*)mg->mg_ptr;
491 /* the actual string the format was compiled from.
492 * with overload etc, this may not match tmpForm */
496 SvPV_force(PL_formtarget, len);
497 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
498 SvTAINTED_on(PL_formtarget);
499 if (DO_UTF8(PL_formtarget))
501 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
502 t = SvGROW(PL_formtarget, len + linemax + 1);
503 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
505 f = SvPV_const(formsv, len);
509 const char *name = "???";
512 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
513 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
514 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
515 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
516 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
518 case FF_CHECKNL: name = "CHECKNL"; break;
519 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
520 case FF_SPACE: name = "SPACE"; break;
521 case FF_HALFSPACE: name = "HALFSPACE"; break;
522 case FF_ITEM: name = "ITEM"; break;
523 case FF_CHOP: name = "CHOP"; break;
524 case FF_LINEGLOB: name = "LINEGLOB"; break;
525 case FF_NEWLINE: name = "NEWLINE"; break;
526 case FF_MORE: name = "MORE"; break;
527 case FF_LINEMARK: name = "LINEMARK"; break;
528 case FF_END: name = "END"; break;
529 case FF_0DECIMAL: name = "0DECIMAL"; break;
530 case FF_LINESNGL: name = "LINESNGL"; break;
533 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
535 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
538 case FF_LINEMARK: /* start (or end) of a line */
539 linemark = t - SvPVX(PL_formtarget);
544 case FF_LITERAL: /* append <arg> literal chars */
549 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
552 case FF_SKIP: /* skip <arg> chars in format */
556 case FF_FETCH: /* get next item and set field size to <arg> */
565 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
568 SvTAINTED_on(PL_formtarget);
571 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
573 const char *s = item = SvPV_const(sv, len);
574 const char *send = s + len;
577 item_is_utf8 = DO_UTF8(sv);
589 if (itemsize == fieldsize)
592 itembytes = s - item;
596 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
598 const char *s = item = SvPV_const(sv, len);
599 const char *send = s + len;
603 item_is_utf8 = DO_UTF8(sv);
605 /* look for a legal split position */
613 /* provisional split point */
617 /* we delay testing fieldsize until after we've
618 * processed the possible split char directly
619 * following the last field char; so if fieldsize=3
620 * and item="a b cdef", we consume "a b", not "a".
621 * Ditto further down.
623 if (size == fieldsize)
627 if (strchr(PL_chopset, *s)) {
628 /* provisional split point */
629 /* for a non-space split char, we include
630 * the split char; hence the '+1' */
634 if (size == fieldsize)
646 if (!chophere || s == send) {
650 itembytes = chophere - item;
655 case FF_SPACE: /* append padding space (diff of field, item size) */
656 arg = fieldsize - itemsize;
664 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
665 arg = fieldsize - itemsize;
674 case FF_ITEM: /* append a text item, while blanking ctrl chars */
680 case FF_CHOP: /* (for ^*) chop the current item */
682 const char *s = chophere;
690 /* tied, overloaded or similar strangeness.
691 * Do it the hard way */
692 sv_setpvn(sv, s, len - (s-item));
697 case FF_LINESNGL: /* process ^* */
701 case FF_LINEGLOB: /* process @* */
703 const bool oneline = fpc[-1] == FF_LINESNGL;
704 const char *s = item = SvPV_const(sv, len);
705 const char *const send = s + len;
707 item_is_utf8 = DO_UTF8(sv);
718 to_copy = s - item - 1;
732 /* append to_copy bytes from source to PL_formstring.
733 * item_is_utf8 implies source is utf8.
734 * if trans, translate certain characters during the copy */
739 SvCUR_set(PL_formtarget,
740 t - SvPVX_const(PL_formtarget));
742 if (targ_is_utf8 && !item_is_utf8) {
743 source = tmp = bytes_to_utf8(source, &to_copy);
745 if (item_is_utf8 && !targ_is_utf8) {
747 /* Upgrade targ to UTF8, and then we reduce it to
748 a problem we have a simple solution for.
749 Don't need get magic. */
750 sv_utf8_upgrade_nomg(PL_formtarget);
752 /* re-calculate linemark */
753 s = (U8*)SvPVX(PL_formtarget);
754 /* the bytes we initially allocated to append the
755 * whole line may have been gobbled up during the
756 * upgrade, so allocate a whole new line's worth
761 linemark = s - (U8*)SvPVX(PL_formtarget);
763 /* Easy. They agree. */
764 assert (item_is_utf8 == targ_is_utf8);
767 /* @* and ^* are the only things that can exceed
768 * the linemax, so grow by the output size, plus
769 * a whole new form's worth in case of any further
771 grow = linemax + to_copy;
773 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
774 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
776 Copy(source, t, to_copy, char);
778 /* blank out ~ or control chars, depending on trans.
779 * works on bytes not chars, so relies on not
780 * matching utf8 continuation bytes */
782 U8 *send = s + to_copy;
785 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
792 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
798 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
800 #if defined(USE_LONG_DOUBLE)
802 ((arg & FORM_NUM_POINT) ?
803 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
806 ((arg & FORM_NUM_POINT) ?
807 "%#0*.*f" : "%0*.*f");
811 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
813 #if defined(USE_LONG_DOUBLE)
815 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
818 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
821 /* If the field is marked with ^ and the value is undefined,
823 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
831 /* overflow evidence */
832 if (num_overflow(value, fieldsize, arg)) {
838 /* Formats aren't yet marked for locales, so assume "yes". */
840 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
841 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
842 /* we generate fmt ourselves so it is safe */
843 GCC_DIAG_IGNORE(-Wformat-nonliteral);
844 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
846 RESTORE_LC_NUMERIC();
851 case FF_NEWLINE: /* delete trailing spaces, then append \n */
853 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
858 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
861 if (arg) { /* repeat until fields exhausted? */
867 t = SvPVX(PL_formtarget) + linemark;
872 case FF_MORE: /* replace long end of string with '...' */
874 const char *s = chophere;
875 const char *send = item + len;
877 while (isSPACE(*s) && (s < send))
882 arg = fieldsize - itemsize;
889 if (strnEQ(s1," ",3)) {
890 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
900 case FF_END: /* tidy up, then return */
902 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
904 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
906 SvUTF8_on(PL_formtarget);
907 FmLINES(PL_formtarget) += lines;
909 if (fpc[-1] == FF_BLANK)
910 RETURNOP(cLISTOP->op_first);
922 if (PL_stack_base + *PL_markstack_ptr == SP) {
924 if (GIMME_V == G_SCALAR)
926 RETURNOP(PL_op->op_next->op_next);
928 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
929 Perl_pp_pushmark(aTHX); /* push dst */
930 Perl_pp_pushmark(aTHX); /* push src */
931 ENTER_with_name("grep"); /* enter outer scope */
934 if (PL_op->op_private & OPpGREP_LEX)
935 SAVESPTR(PAD_SVl(PL_op->op_targ));
938 ENTER_with_name("grep_item"); /* enter inner scope */
941 src = PL_stack_base[*PL_markstack_ptr];
943 assert(!IS_PADGV(src));
944 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
948 if (PL_op->op_private & OPpGREP_LEX)
949 PAD_SVl(PL_op->op_targ) = src;
954 if (PL_op->op_type == OP_MAPSTART)
955 Perl_pp_pushmark(aTHX); /* push top */
956 return ((LOGOP*)PL_op->op_next)->op_other;
962 const I32 gimme = GIMME_V;
963 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
969 /* first, move source pointer to the next item in the source list */
970 ++PL_markstack_ptr[-1];
972 /* if there are new items, push them into the destination list */
973 if (items && gimme != G_VOID) {
974 /* might need to make room back there first */
975 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
976 /* XXX this implementation is very pessimal because the stack
977 * is repeatedly extended for every set of items. Is possible
978 * to do this without any stack extension or copying at all
979 * by maintaining a separate list over which the map iterates
980 * (like foreach does). --gsar */
982 /* everything in the stack after the destination list moves
983 * towards the end the stack by the amount of room needed */
984 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
986 /* items to shift up (accounting for the moved source pointer) */
987 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
989 /* This optimization is by Ben Tilly and it does
990 * things differently from what Sarathy (gsar)
991 * is describing. The downside of this optimization is
992 * that leaves "holes" (uninitialized and hopefully unused areas)
993 * to the Perl stack, but on the other hand this
994 * shouldn't be a problem. If Sarathy's idea gets
995 * implemented, this optimization should become
996 * irrelevant. --jhi */
998 shift = count; /* Avoid shifting too often --Ben Tilly */
1002 dst = (SP += shift);
1003 PL_markstack_ptr[-1] += shift;
1004 *PL_markstack_ptr += shift;
1008 /* copy the new items down to the destination list */
1009 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1010 if (gimme == G_ARRAY) {
1011 /* add returned items to the collection (making mortal copies
1012 * if necessary), then clear the current temps stack frame
1013 * *except* for those items. We do this splicing the items
1014 * into the start of the tmps frame (so some items may be on
1015 * the tmps stack twice), then moving PL_tmps_floor above
1016 * them, then freeing the frame. That way, the only tmps that
1017 * accumulate over iterations are the return values for map.
1018 * We have to do to this way so that everything gets correctly
1019 * freed if we die during the map.
1023 /* make space for the slice */
1024 EXTEND_MORTAL(items);
1025 tmpsbase = PL_tmps_floor + 1;
1026 Move(PL_tmps_stack + tmpsbase,
1027 PL_tmps_stack + tmpsbase + items,
1028 PL_tmps_ix - PL_tmps_floor,
1030 PL_tmps_ix += items;
1035 sv = sv_mortalcopy(sv);
1037 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1039 /* clear the stack frame except for the items */
1040 PL_tmps_floor += items;
1042 /* FREETMPS may have cleared the TEMP flag on some of the items */
1045 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1048 /* scalar context: we don't care about which values map returns
1049 * (we use undef here). And so we certainly don't want to do mortal
1050 * copies of meaningless values. */
1051 while (items-- > 0) {
1053 *dst-- = &PL_sv_undef;
1061 LEAVE_with_name("grep_item"); /* exit inner scope */
1064 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1066 (void)POPMARK; /* pop top */
1067 LEAVE_with_name("grep"); /* exit outer scope */
1068 (void)POPMARK; /* pop src */
1069 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1070 (void)POPMARK; /* pop dst */
1071 SP = PL_stack_base + POPMARK; /* pop original mark */
1072 if (gimme == G_SCALAR) {
1073 if (PL_op->op_private & OPpGREP_LEX) {
1074 SV* sv = sv_newmortal();
1075 sv_setiv(sv, items);
1083 else if (gimme == G_ARRAY)
1090 ENTER_with_name("grep_item"); /* enter inner scope */
1093 /* set $_ to the new source item */
1094 src = PL_stack_base[PL_markstack_ptr[-1]];
1095 if (SvPADTMP(src)) {
1096 assert(!IS_PADGV(src));
1097 src = sv_mortalcopy(src);
1100 if (PL_op->op_private & OPpGREP_LEX)
1101 PAD_SVl(PL_op->op_targ) = src;
1105 RETURNOP(cLOGOP->op_other);
1114 if (GIMME == G_ARRAY)
1116 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1117 return cLOGOP->op_other;
1127 if (GIMME == G_ARRAY) {
1128 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1132 SV * const targ = PAD_SV(PL_op->op_targ);
1135 if (PL_op->op_private & OPpFLIP_LINENUM) {
1136 if (GvIO(PL_last_in_gv)) {
1137 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1140 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1142 flip = SvIV(sv) == SvIV(GvSV(gv));
1148 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1149 if (PL_op->op_flags & OPf_SPECIAL) {
1157 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1160 sv_setpvs(TARG, "");
1166 /* This code tries to decide if "$left .. $right" should use the
1167 magical string increment, or if the range is numeric (we make
1168 an exception for .."0" [#18165]). AMS 20021031. */
1170 #define RANGE_IS_NUMERIC(left,right) ( \
1171 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1172 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1173 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1174 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1175 && (!SvOK(right) || looks_like_number(right))))
1181 if (GIMME == G_ARRAY) {
1187 if (RANGE_IS_NUMERIC(left,right)) {
1190 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1191 (SvOK(right) && (SvIOK(right)
1192 ? SvIsUV(right) && SvUV(right) > IV_MAX
1193 : SvNV_nomg(right) > IV_MAX)))
1194 DIE(aTHX_ "Range iterator outside integer range");
1195 i = SvIV_nomg(left);
1196 max = SvIV_nomg(right);
1199 if (j > SSize_t_MAX)
1200 Perl_croak(aTHX_ "Out of memory during list extend");
1207 SV * const sv = sv_2mortal(newSViv(i++));
1213 const char * const lpv = SvPV_nomg_const(left, llen);
1214 const char * const tmps = SvPV_nomg_const(right, len);
1216 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1217 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1219 if (strEQ(SvPVX_const(sv),tmps))
1221 sv = sv_2mortal(newSVsv(sv));
1228 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1232 if (PL_op->op_private & OPpFLIP_LINENUM) {
1233 if (GvIO(PL_last_in_gv)) {
1234 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1237 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1238 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1246 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1247 sv_catpvs(targ, "E0");
1257 static const char * const context_name[] = {
1259 NULL, /* CXt_WHEN never actually needs "block" */
1260 NULL, /* CXt_BLOCK never actually needs "block" */
1261 NULL, /* CXt_GIVEN never actually needs "block" */
1262 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1263 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1264 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1265 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1273 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1278 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1280 for (i = cxstack_ix; i >= 0; i--) {
1281 const PERL_CONTEXT * const cx = &cxstack[i];
1282 switch (CxTYPE(cx)) {
1288 /* diag_listed_as: Exiting subroutine via %s */
1289 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1290 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1291 if (CxTYPE(cx) == CXt_NULL)
1294 case CXt_LOOP_LAZYIV:
1295 case CXt_LOOP_LAZYSV:
1297 case CXt_LOOP_PLAIN:
1299 STRLEN cx_label_len = 0;
1300 U32 cx_label_flags = 0;
1301 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1303 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1306 (const U8*)cx_label, cx_label_len,
1307 (const U8*)label, len) == 0)
1309 (const U8*)label, len,
1310 (const U8*)cx_label, cx_label_len) == 0)
1311 : (len == cx_label_len && ((cx_label == label)
1312 || memEQ(cx_label, label, len))) )) {
1313 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1314 (long)i, cx_label));
1317 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1328 Perl_dowantarray(pTHX)
1331 const I32 gimme = block_gimme();
1332 return (gimme == G_VOID) ? G_SCALAR : gimme;
1336 Perl_block_gimme(pTHX)
1339 const I32 cxix = dopoptosub(cxstack_ix);
1343 switch (cxstack[cxix].blk_gimme) {
1351 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1352 assert(0); /* NOTREACHED */
1358 Perl_is_lvalue_sub(pTHX)
1361 const I32 cxix = dopoptosub(cxstack_ix);
1362 assert(cxix >= 0); /* We should only be called from inside subs */
1364 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1365 return CxLVAL(cxstack + cxix);
1370 /* only used by PUSHSUB */
1372 Perl_was_lvalue_sub(pTHX)
1375 const I32 cxix = dopoptosub(cxstack_ix-1);
1376 assert(cxix >= 0); /* We should only be called from inside subs */
1378 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1379 return CxLVAL(cxstack + cxix);
1385 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1390 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1392 for (i = startingblock; i >= 0; i--) {
1393 const PERL_CONTEXT * const cx = &cxstk[i];
1394 switch (CxTYPE(cx)) {
1398 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1399 * twice; the first for the normal foo() call, and the second
1400 * for a faked up re-entry into the sub to execute the
1401 * code block. Hide this faked entry from the world. */
1402 if (cx->cx_type & CXp_SUB_RE_FAKE)
1407 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1415 S_dopoptoeval(pTHX_ I32 startingblock)
1419 for (i = startingblock; i >= 0; i--) {
1420 const PERL_CONTEXT *cx = &cxstack[i];
1421 switch (CxTYPE(cx)) {
1425 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1433 S_dopoptoloop(pTHX_ I32 startingblock)
1437 for (i = startingblock; i >= 0; i--) {
1438 const PERL_CONTEXT * const cx = &cxstack[i];
1439 switch (CxTYPE(cx)) {
1445 /* diag_listed_as: Exiting subroutine via %s */
1446 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1447 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1448 if ((CxTYPE(cx)) == CXt_NULL)
1451 case CXt_LOOP_LAZYIV:
1452 case CXt_LOOP_LAZYSV:
1454 case CXt_LOOP_PLAIN:
1455 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1463 S_dopoptogiven(pTHX_ I32 startingblock)
1467 for (i = startingblock; i >= 0; i--) {
1468 const PERL_CONTEXT *cx = &cxstack[i];
1469 switch (CxTYPE(cx)) {
1473 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1475 case CXt_LOOP_PLAIN:
1476 assert(!CxFOREACHDEF(cx));
1478 case CXt_LOOP_LAZYIV:
1479 case CXt_LOOP_LAZYSV:
1481 if (CxFOREACHDEF(cx)) {
1482 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1491 S_dopoptowhen(pTHX_ I32 startingblock)
1495 for (i = startingblock; i >= 0; i--) {
1496 const PERL_CONTEXT *cx = &cxstack[i];
1497 switch (CxTYPE(cx)) {
1501 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1509 Perl_dounwind(pTHX_ I32 cxix)
1514 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1517 while (cxstack_ix > cxix) {
1519 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1520 DEBUG_CX("UNWIND"); \
1521 /* Note: we don't need to restore the base context info till the end. */
1522 switch (CxTYPE(cx)) {
1525 continue; /* not break */
1533 case CXt_LOOP_LAZYIV:
1534 case CXt_LOOP_LAZYSV:
1536 case CXt_LOOP_PLAIN:
1547 PERL_UNUSED_VAR(optype);
1551 Perl_qerror(pTHX_ SV *err)
1555 PERL_ARGS_ASSERT_QERROR;
1558 if (PL_in_eval & EVAL_KEEPERR) {
1559 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1563 sv_catsv(ERRSV, err);
1566 sv_catsv(PL_errors, err);
1568 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1570 ++PL_parser->error_count;
1574 Perl_die_unwind(pTHX_ SV *msv)
1577 SV *exceptsv = sv_mortalcopy(msv);
1578 U8 in_eval = PL_in_eval;
1579 PERL_ARGS_ASSERT_DIE_UNWIND;
1586 * Historically, perl used to set ERRSV ($@) early in the die
1587 * process and rely on it not getting clobbered during unwinding.
1588 * That sucked, because it was liable to get clobbered, so the
1589 * setting of ERRSV used to emit the exception from eval{} has
1590 * been moved to much later, after unwinding (see just before
1591 * JMPENV_JUMP below). However, some modules were relying on the
1592 * early setting, by examining $@ during unwinding to use it as
1593 * a flag indicating whether the current unwinding was caused by
1594 * an exception. It was never a reliable flag for that purpose,
1595 * being totally open to false positives even without actual
1596 * clobberage, but was useful enough for production code to
1597 * semantically rely on it.
1599 * We'd like to have a proper introspective interface that
1600 * explicitly describes the reason for whatever unwinding
1601 * operations are currently in progress, so that those modules
1602 * work reliably and $@ isn't further overloaded. But we don't
1603 * have one yet. In its absence, as a stopgap measure, ERRSV is
1604 * now *additionally* set here, before unwinding, to serve as the
1605 * (unreliable) flag that it used to.
1607 * This behaviour is temporary, and should be removed when a
1608 * proper way to detect exceptional unwinding has been developed.
1609 * As of 2010-12, the authors of modules relying on the hack
1610 * are aware of the issue, because the modules failed on
1611 * perls 5.13.{1..7} which had late setting of $@ without this
1612 * early-setting hack.
1614 if (!(in_eval & EVAL_KEEPERR)) {
1615 SvTEMP_off(exceptsv);
1616 sv_setsv(ERRSV, exceptsv);
1619 if (in_eval & EVAL_KEEPERR) {
1620 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1624 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1625 && PL_curstackinfo->si_prev)
1637 JMPENV *restartjmpenv;
1640 if (cxix < cxstack_ix)
1643 POPBLOCK(cx,PL_curpm);
1644 if (CxTYPE(cx) != CXt_EVAL) {
1646 const char* message = SvPVx_const(exceptsv, msglen);
1647 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1648 PerlIO_write(Perl_error_log, message, msglen);
1652 namesv = cx->blk_eval.old_namesv;
1653 oldcop = cx->blk_oldcop;
1654 restartjmpenv = cx->blk_eval.cur_top_env;
1655 restartop = cx->blk_eval.retop;
1657 if (gimme == G_SCALAR)
1658 *++newsp = &PL_sv_undef;
1659 PL_stack_sp = newsp;
1663 /* LEAVE could clobber PL_curcop (see save_re_context())
1664 * XXX it might be better to find a way to avoid messing with
1665 * PL_curcop in save_re_context() instead, but this is a more
1666 * minimal fix --GSAR */
1669 if (optype == OP_REQUIRE) {
1670 (void)hv_store(GvHVn(PL_incgv),
1671 SvPVX_const(namesv),
1672 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1674 /* note that unlike pp_entereval, pp_require isn't
1675 * supposed to trap errors. So now that we've popped the
1676 * EVAL that pp_require pushed, and processed the error
1677 * message, rethrow the error */
1678 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1679 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1682 if (!(in_eval & EVAL_KEEPERR))
1683 sv_setsv(ERRSV, exceptsv);
1684 PL_restartjmpenv = restartjmpenv;
1685 PL_restartop = restartop;
1687 assert(0); /* NOTREACHED */
1691 write_to_stderr(exceptsv);
1693 assert(0); /* NOTREACHED */
1698 dVAR; dSP; dPOPTOPssrl;
1699 if (SvTRUE(left) != SvTRUE(right))
1706 =for apidoc caller_cx
1708 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1709 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1710 information returned to Perl by C<caller>. Note that XSUBs don't get a
1711 stack frame, so C<caller_cx(0, NULL)> will return information for the
1712 immediately-surrounding Perl code.
1714 This function skips over the automatic calls to C<&DB::sub> made on the
1715 behalf of the debugger. If the stack frame requested was a sub called by
1716 C<DB::sub>, the return value will be the frame for the call to
1717 C<DB::sub>, since that has the correct line number/etc. for the call
1718 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1719 frame for the sub call itself.
1724 const PERL_CONTEXT *
1725 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1727 I32 cxix = dopoptosub(cxstack_ix);
1728 const PERL_CONTEXT *cx;
1729 const PERL_CONTEXT *ccstack = cxstack;
1730 const PERL_SI *top_si = PL_curstackinfo;
1733 /* we may be in a higher stacklevel, so dig down deeper */
1734 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1735 top_si = top_si->si_prev;
1736 ccstack = top_si->si_cxstack;
1737 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1741 /* caller() should not report the automatic calls to &DB::sub */
1742 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1743 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1747 cxix = dopoptosub_at(ccstack, cxix - 1);
1750 cx = &ccstack[cxix];
1751 if (dbcxp) *dbcxp = cx;
1753 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1754 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1755 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1756 field below is defined for any cx. */
1757 /* caller() should not report the automatic calls to &DB::sub */
1758 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1759 cx = &ccstack[dbcxix];
1769 const PERL_CONTEXT *cx;
1770 const PERL_CONTEXT *dbcx;
1772 const HEK *stash_hek;
1774 bool has_arg = MAXARG && TOPs;
1783 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1785 if (GIMME != G_ARRAY) {
1793 assert(CopSTASH(cx->blk_oldcop));
1794 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1795 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1797 if (GIMME != G_ARRAY) {
1800 PUSHs(&PL_sv_undef);
1803 sv_sethek(TARG, stash_hek);
1812 PUSHs(&PL_sv_undef);
1815 sv_sethek(TARG, stash_hek);
1818 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1819 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1820 cx->blk_sub.retop, TRUE);
1822 lcop = cx->blk_oldcop;
1823 mPUSHi((I32)CopLINE(lcop));
1826 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1827 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1828 /* So is ccstack[dbcxix]. */
1829 if (cvgv && isGV(cvgv)) {
1830 SV * const sv = newSV(0);
1831 gv_efullname3(sv, cvgv, NULL);
1833 PUSHs(boolSV(CxHASARGS(cx)));
1836 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1837 PUSHs(boolSV(CxHASARGS(cx)));
1841 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1844 gimme = (I32)cx->blk_gimme;
1845 if (gimme == G_VOID)
1846 PUSHs(&PL_sv_undef);
1848 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1849 if (CxTYPE(cx) == CXt_EVAL) {
1851 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1852 SV *cur_text = cx->blk_eval.cur_text;
1853 if (SvCUR(cur_text) >= 2) {
1854 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1855 SvUTF8(cur_text)|SVs_TEMP));
1858 /* I think this is will always be "", but be sure */
1859 PUSHs(sv_2mortal(newSVsv(cur_text)));
1865 else if (cx->blk_eval.old_namesv) {
1866 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1869 /* eval BLOCK (try blocks have old_namesv == 0) */
1871 PUSHs(&PL_sv_undef);
1872 PUSHs(&PL_sv_undef);
1876 PUSHs(&PL_sv_undef);
1877 PUSHs(&PL_sv_undef);
1879 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1880 && CopSTASH_eq(PL_curcop, PL_debstash))
1882 AV * const ary = cx->blk_sub.argarray;
1883 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1885 Perl_init_dbargs(aTHX);
1887 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1888 av_extend(PL_dbargs, AvFILLp(ary) + off);
1889 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1890 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1892 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1895 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1897 if (old_warnings == pWARN_NONE)
1898 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1899 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1900 mask = &PL_sv_undef ;
1901 else if (old_warnings == pWARN_ALL ||
1902 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1903 /* Get the bit mask for $warnings::Bits{all}, because
1904 * it could have been extended by warnings::register */
1906 HV * const bits = get_hv("warnings::Bits", 0);
1907 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1908 mask = newSVsv(*bits_all);
1911 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1915 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1919 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1920 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1931 if (MAXARG < 1 || (!TOPs && !POPs))
1932 tmps = NULL, len = 0;
1934 tmps = SvPVx_const(POPs, len);
1935 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1940 /* like pp_nextstate, but used instead when the debugger is active */
1945 PL_curcop = (COP*)PL_op;
1946 TAINT_NOT; /* Each statement is presumed innocent */
1947 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1952 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1953 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1957 const I32 gimme = G_ARRAY;
1959 GV * const gv = PL_DBgv;
1962 if (gv && isGV_with_GP(gv))
1965 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1966 DIE(aTHX_ "No DB::DB routine defined");
1968 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1969 /* don't do recursive DB::DB call */
1983 (void)(*CvXSUB(cv))(aTHX_ cv);
1989 PUSHBLOCK(cx, CXt_SUB, SP);
1991 cx->blk_sub.retop = PL_op->op_next;
1993 if (CvDEPTH(cv) >= 2) {
1994 PERL_STACK_OVERFLOW_CHECK();
1995 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1998 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1999 RETURNOP(CvSTART(cv));
2006 /* SVs on the stack that have any of the flags passed in are left as is.
2007 Other SVs are protected via the mortals stack if lvalue is true, and
2008 copied otherwise. */
2011 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2012 U32 flags, bool lvalue)
2015 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2017 if (flags & SVs_PADTMP) {
2018 flags &= ~SVs_PADTMP;
2021 if (gimme == G_SCALAR) {
2023 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2026 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2027 : sv_mortalcopy(*SP);
2029 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2032 *++MARK = &PL_sv_undef;
2036 else if (gimme == G_ARRAY) {
2037 /* in case LEAVE wipes old return values */
2038 while (++MARK <= SP) {
2039 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2043 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2044 : sv_mortalcopy(*MARK);
2045 TAINT_NOT; /* Each item is independent */
2048 /* When this function was called with MARK == newsp, we reach this
2049 * point with SP == newsp. */
2059 I32 gimme = GIMME_V;
2061 ENTER_with_name("block");
2064 PUSHBLOCK(cx, CXt_BLOCK, SP);
2077 if (PL_op->op_flags & OPf_SPECIAL) {
2078 cx = &cxstack[cxstack_ix];
2079 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2084 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2087 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2088 PL_op->op_private & OPpLVALUE);
2089 PL_curpm = newpm; /* Don't pop $1 et al till now */
2091 LEAVE_with_name("block");
2100 const I32 gimme = GIMME_V;
2101 void *itervar; /* location of the iteration variable */
2102 U8 cxtype = CXt_LOOP_FOR;
2104 ENTER_with_name("loop1");
2107 if (PL_op->op_targ) { /* "my" variable */
2108 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2109 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2110 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2111 SVs_PADSTALE, SVs_PADSTALE);
2113 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2115 itervar = PL_comppad;
2117 itervar = &PAD_SVl(PL_op->op_targ);
2120 else { /* symbol table variable */
2121 GV * const gv = MUTABLE_GV(POPs);
2122 SV** svp = &GvSV(gv);
2123 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2125 itervar = (void *)gv;
2128 if (PL_op->op_private & OPpITER_DEF)
2129 cxtype |= CXp_FOR_DEF;
2131 ENTER_with_name("loop2");
2133 PUSHBLOCK(cx, cxtype, SP);
2134 PUSHLOOP_FOR(cx, itervar, MARK);
2135 if (PL_op->op_flags & OPf_STACKED) {
2136 SV *maybe_ary = POPs;
2137 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2139 SV * const right = maybe_ary;
2142 if (RANGE_IS_NUMERIC(sv,right)) {
2143 cx->cx_type &= ~CXTYPEMASK;
2144 cx->cx_type |= CXt_LOOP_LAZYIV;
2145 /* Make sure that no-one re-orders cop.h and breaks our
2147 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2148 #ifdef NV_PRESERVES_UV
2149 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2150 (SvNV_nomg(sv) > (NV)IV_MAX)))
2152 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2153 (SvNV_nomg(right) < (NV)IV_MIN))))
2155 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2157 ((SvNV_nomg(sv) > 0) &&
2158 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2159 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2161 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2163 ((SvNV_nomg(right) > 0) &&
2164 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2165 (SvNV_nomg(right) > (NV)UV_MAX))
2168 DIE(aTHX_ "Range iterator outside integer range");
2169 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2170 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2172 /* for correct -Dstv display */
2173 cx->blk_oldsp = sp - PL_stack_base;
2177 cx->cx_type &= ~CXTYPEMASK;
2178 cx->cx_type |= CXt_LOOP_LAZYSV;
2179 /* Make sure that no-one re-orders cop.h and breaks our
2181 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2182 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2183 cx->blk_loop.state_u.lazysv.end = right;
2184 SvREFCNT_inc(right);
2185 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2186 /* This will do the upgrade to SVt_PV, and warn if the value
2187 is uninitialised. */
2188 (void) SvPV_nolen_const(right);
2189 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2190 to replace !SvOK() with a pointer to "". */
2192 SvREFCNT_dec(right);
2193 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2197 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2198 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2199 SvREFCNT_inc(maybe_ary);
2200 cx->blk_loop.state_u.ary.ix =
2201 (PL_op->op_private & OPpITER_REVERSED) ?
2202 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2206 else { /* iterating over items on the stack */
2207 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2208 if (PL_op->op_private & OPpITER_REVERSED) {
2209 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2212 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2223 const I32 gimme = GIMME_V;
2225 ENTER_with_name("loop1");
2227 ENTER_with_name("loop2");
2229 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2230 PUSHLOOP_PLAIN(cx, SP);
2245 assert(CxTYPE_is_LOOP(cx));
2247 newsp = PL_stack_base + cx->blk_loop.resetsp;
2250 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2251 PL_op->op_private & OPpLVALUE);
2254 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2255 PL_curpm = newpm; /* ... and pop $1 et al */
2257 LEAVE_with_name("loop2");
2258 LEAVE_with_name("loop1");
2264 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2265 PERL_CONTEXT *cx, PMOP *newpm)
2267 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2268 if (gimme == G_SCALAR) {
2269 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2271 const char *what = NULL;
2273 assert(MARK+1 == SP);
2274 if ((SvPADTMP(TOPs) ||
2275 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2278 !SvSMAGICAL(TOPs)) {
2280 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2281 : "a readonly value" : "a temporary";
2286 /* sub:lvalue{} will take us here. */
2295 "Can't return %s from lvalue subroutine", what
2300 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2301 if (!SvPADTMP(*SP)) {
2302 *++newsp = SvREFCNT_inc(*SP);
2307 /* FREETMPS could clobber it */
2308 SV *sv = SvREFCNT_inc(*SP);
2310 *++newsp = sv_mortalcopy(sv);
2317 ? sv_mortalcopy(*SP)
2319 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2324 *++newsp = &PL_sv_undef;
2326 if (CxLVAL(cx) & OPpDEREF) {
2329 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2333 else if (gimme == G_ARRAY) {
2334 assert (!(CxLVAL(cx) & OPpDEREF));
2335 if (ref || !CxLVAL(cx))
2336 while (++MARK <= SP)
2338 SvFLAGS(*MARK) & SVs_PADTMP
2339 ? sv_mortalcopy(*MARK)
2342 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2343 else while (++MARK <= SP) {
2344 if (*MARK != &PL_sv_undef
2346 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2351 /* Might be flattened array after $#array = */
2358 /* diag_listed_as: Can't return %s from lvalue subroutine */
2360 "Can't return a %s from lvalue subroutine",
2361 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2367 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2370 PL_stack_sp = newsp;
2377 bool popsub2 = FALSE;
2378 bool clear_errsv = FALSE;
2388 const I32 cxix = dopoptosub(cxstack_ix);
2391 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2392 * sort block, which is a CXt_NULL
2395 PL_stack_base[1] = *PL_stack_sp;
2396 PL_stack_sp = PL_stack_base + 1;
2400 DIE(aTHX_ "Can't return outside a subroutine");
2402 if (cxix < cxstack_ix)
2405 if (CxMULTICALL(&cxstack[cxix])) {
2406 gimme = cxstack[cxix].blk_gimme;
2407 if (gimme == G_VOID)
2408 PL_stack_sp = PL_stack_base;
2409 else if (gimme == G_SCALAR) {
2410 PL_stack_base[1] = *PL_stack_sp;
2411 PL_stack_sp = PL_stack_base + 1;
2417 switch (CxTYPE(cx)) {
2420 lval = !!CvLVALUE(cx->blk_sub.cv);
2421 retop = cx->blk_sub.retop;
2422 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2425 if (!(PL_in_eval & EVAL_KEEPERR))
2428 namesv = cx->blk_eval.old_namesv;
2429 retop = cx->blk_eval.retop;
2432 if (optype == OP_REQUIRE &&
2433 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2435 /* Unassume the success we assumed earlier. */
2436 (void)hv_delete(GvHVn(PL_incgv),
2437 SvPVX_const(namesv),
2438 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2440 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2444 retop = cx->blk_sub.retop;
2448 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2452 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2454 if (gimme == G_SCALAR) {
2457 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2458 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2459 && !SvMAGICAL(TOPs)) {
2460 *++newsp = SvREFCNT_inc(*SP);
2465 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2467 *++newsp = sv_mortalcopy(sv);
2471 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2472 && !SvMAGICAL(*SP)) {
2476 *++newsp = sv_mortalcopy(*SP);
2479 *++newsp = sv_mortalcopy(*SP);
2482 *++newsp = &PL_sv_undef;
2484 else if (gimme == G_ARRAY) {
2485 while (++MARK <= SP) {
2486 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2487 && !SvGMAGICAL(*MARK)
2488 ? *MARK : sv_mortalcopy(*MARK);
2489 TAINT_NOT; /* Each item is independent */
2492 PL_stack_sp = newsp;
2496 /* Stack values are safe: */
2499 POPSUB(cx,sv); /* release CV and @_ ... */
2503 PL_curpm = newpm; /* ... and pop $1 et al */
2512 /* This duplicates parts of pp_leavesub, so that it can share code with
2523 if (CxMULTICALL(&cxstack[cxstack_ix]))
2527 cxstack_ix++; /* temporarily protect top context */
2531 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2534 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2536 PL_curpm = newpm; /* ... and pop $1 et al */
2539 return cx->blk_sub.retop;
2543 S_unwind_loop(pTHX_ const char * const opname)
2547 if (PL_op->op_flags & OPf_SPECIAL) {
2548 cxix = dopoptoloop(cxstack_ix);
2550 /* diag_listed_as: Can't "last" outside a loop block */
2551 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2556 const char * const label =
2557 PL_op->op_flags & OPf_STACKED
2558 ? SvPV(TOPs,label_len)
2559 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2560 const U32 label_flags =
2561 PL_op->op_flags & OPf_STACKED
2563 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2565 cxix = dopoptolabel(label, label_len, label_flags);
2567 /* diag_listed_as: Label not found for "last %s" */
2568 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2570 SVfARG(PL_op->op_flags & OPf_STACKED
2571 && !SvGMAGICAL(TOPp1s)
2573 : newSVpvn_flags(label,
2575 label_flags | SVs_TEMP)));
2577 if (cxix < cxstack_ix)
2594 S_unwind_loop(aTHX_ "last");
2597 cxstack_ix++; /* temporarily protect top context */
2598 switch (CxTYPE(cx)) {
2599 case CXt_LOOP_LAZYIV:
2600 case CXt_LOOP_LAZYSV:
2602 case CXt_LOOP_PLAIN:
2604 newsp = PL_stack_base + cx->blk_loop.resetsp;
2605 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2609 nextop = cx->blk_sub.retop;
2613 nextop = cx->blk_eval.retop;
2617 nextop = cx->blk_sub.retop;
2620 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2624 PL_stack_sp = newsp;
2628 /* Stack values are safe: */
2630 case CXt_LOOP_LAZYIV:
2631 case CXt_LOOP_PLAIN:
2632 case CXt_LOOP_LAZYSV:
2634 POPLOOP(cx); /* release loop vars ... */
2638 POPSUB(cx,sv); /* release CV and @_ ... */
2641 PL_curpm = newpm; /* ... and pop $1 et al */
2644 PERL_UNUSED_VAR(optype);
2645 PERL_UNUSED_VAR(gimme);
2653 const I32 inner = PL_scopestack_ix;
2655 S_unwind_loop(aTHX_ "next");
2657 /* clear off anything above the scope we're re-entering, but
2658 * save the rest until after a possible continue block */
2660 if (PL_scopestack_ix < inner)
2661 leave_scope(PL_scopestack[PL_scopestack_ix]);
2662 PL_curcop = cx->blk_oldcop;
2664 return (cx)->blk_loop.my_op->op_nextop;
2670 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2673 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2675 if (redo_op->op_type == OP_ENTER) {
2676 /* pop one less context to avoid $x being freed in while (my $x..) */
2678 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2679 redo_op = redo_op->op_next;
2683 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2684 LEAVE_SCOPE(oldsave);
2686 PL_curcop = cx->blk_oldcop;
2692 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2696 static const char* const too_deep = "Target of goto is too deeply nested";
2698 PERL_ARGS_ASSERT_DOFINDLABEL;
2701 Perl_croak(aTHX_ "%s", too_deep);
2702 if (o->op_type == OP_LEAVE ||
2703 o->op_type == OP_SCOPE ||
2704 o->op_type == OP_LEAVELOOP ||
2705 o->op_type == OP_LEAVESUB ||
2706 o->op_type == OP_LEAVETRY)
2708 *ops++ = cUNOPo->op_first;
2710 Perl_croak(aTHX_ "%s", too_deep);
2713 if (o->op_flags & OPf_KIDS) {
2715 /* First try all the kids at this level, since that's likeliest. */
2716 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2717 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2718 STRLEN kid_label_len;
2719 U32 kid_label_flags;
2720 const char *kid_label = CopLABEL_len_flags(kCOP,
2721 &kid_label_len, &kid_label_flags);
2723 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2726 (const U8*)kid_label, kid_label_len,
2727 (const U8*)label, len) == 0)
2729 (const U8*)label, len,
2730 (const U8*)kid_label, kid_label_len) == 0)
2731 : ( len == kid_label_len && ((kid_label == label)
2732 || memEQ(kid_label, label, len)))))
2736 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2737 if (kid == PL_lastgotoprobe)
2739 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2742 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2743 ops[-1]->op_type == OP_DBSTATE)
2748 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2756 PP(pp_goto) /* also pp_dump */
2762 #define GOTO_DEPTH 64
2763 OP *enterops[GOTO_DEPTH];
2764 const char *label = NULL;
2765 STRLEN label_len = 0;
2766 U32 label_flags = 0;
2767 const bool do_dump = (PL_op->op_type == OP_DUMP);
2768 static const char* const must_have_label = "goto must have label";
2770 if (PL_op->op_flags & OPf_STACKED) {
2771 /* goto EXPR or goto &foo */
2773 SV * const sv = POPs;
2776 /* This egregious kludge implements goto &subroutine */
2777 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2780 CV *cv = MUTABLE_CV(SvRV(sv));
2781 AV *arg = GvAV(PL_defgv);
2785 if (!CvROOT(cv) && !CvXSUB(cv)) {
2786 const GV * const gv = CvGV(cv);
2790 /* autoloaded stub? */
2791 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2793 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2795 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2796 if (autogv && (cv = GvCV(autogv)))
2798 tmpstr = sv_newmortal();
2799 gv_efullname3(tmpstr, gv, NULL);
2800 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2802 DIE(aTHX_ "Goto undefined subroutine");
2805 /* First do some returnish stuff. */
2806 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2808 cxix = dopoptosub(cxstack_ix);
2809 if (cxix < cxstack_ix) {
2812 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2818 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2819 if (CxTYPE(cx) == CXt_EVAL) {
2822 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2823 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2825 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2826 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2828 else if (CxMULTICALL(cx))
2831 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2833 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2834 AV* av = cx->blk_sub.argarray;
2836 /* abandon the original @_ if it got reified or if it is
2837 the same as the current @_ */
2838 if (AvREAL(av) || av == arg) {
2842 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2844 else CLEAR_ARGARRAY(av);
2846 /* We donate this refcount later to the callee’s pad. */
2847 SvREFCNT_inc_simple_void(arg);
2848 if (CxTYPE(cx) == CXt_SUB &&
2849 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2850 SvREFCNT_dec(cx->blk_sub.cv);
2851 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2852 LEAVE_SCOPE(oldsave);
2854 /* A destructor called during LEAVE_SCOPE could have undefined
2855 * our precious cv. See bug #99850. */
2856 if (!CvROOT(cv) && !CvXSUB(cv)) {
2857 const GV * const gv = CvGV(cv);
2860 SV * const tmpstr = sv_newmortal();
2861 gv_efullname3(tmpstr, gv, NULL);
2862 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2865 DIE(aTHX_ "Goto undefined subroutine");
2868 /* Now do some callish stuff. */
2870 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2872 OP* const retop = cx->blk_sub.retop;
2875 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2876 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2879 PERL_UNUSED_VAR(newsp);
2880 PERL_UNUSED_VAR(gimme);
2882 /* put GvAV(defgv) back onto stack */
2884 EXTEND(SP, items+1); /* @_ could have been extended. */
2889 bool r = cBOOL(AvREAL(arg));
2890 for (index=0; index<items; index++)
2894 SV ** const svp = av_fetch(arg, index, 0);
2895 sv = svp ? *svp : NULL;
2897 else sv = AvARRAY(arg)[index];
2899 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2900 : sv_2mortal(newSVavdefelem(arg, index, 1));
2905 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2906 /* Restore old @_ */
2907 arg = GvAV(PL_defgv);
2908 GvAV(PL_defgv) = cx->blk_sub.savearray;
2912 /* XS subs don't have a CxSUB, so pop it */
2913 POPBLOCK(cx, PL_curpm);
2914 /* Push a mark for the start of arglist */
2917 (void)(*CvXSUB(cv))(aTHX_ cv);
2923 PADLIST * const padlist = CvPADLIST(cv);
2924 cx->blk_sub.cv = cv;
2925 cx->blk_sub.olddepth = CvDEPTH(cv);
2928 if (CvDEPTH(cv) < 2)
2929 SvREFCNT_inc_simple_void_NN(cv);
2931 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2932 sub_crush_depth(cv);
2933 pad_push(padlist, CvDEPTH(cv));
2935 PL_curcop = cx->blk_oldcop;
2937 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2940 CX_CURPAD_SAVE(cx->blk_sub);
2942 /* cx->blk_sub.argarray has no reference count, so we
2943 need something to hang on to our argument array so
2944 that cx->blk_sub.argarray does not end up pointing
2945 to freed memory as the result of undef *_. So put
2946 it in the callee’s pad, donating our refer-
2949 SvREFCNT_dec(PAD_SVl(0));
2950 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2953 /* GvAV(PL_defgv) might have been modified on scope
2954 exit, so restore it. */
2955 if (arg != GvAV(PL_defgv)) {
2956 AV * const av = GvAV(PL_defgv);
2957 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2961 else SvREFCNT_dec(arg);
2962 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2963 Perl_get_db_sub(aTHX_ NULL, cv);
2965 CV * const gotocv = get_cvs("DB::goto", 0);
2967 PUSHMARK( PL_stack_sp );
2968 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2974 RETURNOP(CvSTART(cv));
2979 label = SvPV_nomg_const(sv, label_len);
2980 label_flags = SvUTF8(sv);
2983 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2984 /* goto LABEL or dump LABEL */
2985 label = cPVOP->op_pv;
2986 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2987 label_len = strlen(label);
2989 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2994 OP *gotoprobe = NULL;
2995 bool leaving_eval = FALSE;
2996 bool in_block = FALSE;
2997 PERL_CONTEXT *last_eval_cx = NULL;
3001 PL_lastgotoprobe = NULL;
3003 for (ix = cxstack_ix; ix >= 0; ix--) {
3005 switch (CxTYPE(cx)) {
3007 leaving_eval = TRUE;
3008 if (!CxTRYBLOCK(cx)) {
3009 gotoprobe = (last_eval_cx ?
3010 last_eval_cx->blk_eval.old_eval_root :
3015 /* else fall through */
3016 case CXt_LOOP_LAZYIV:
3017 case CXt_LOOP_LAZYSV:
3019 case CXt_LOOP_PLAIN:
3022 gotoprobe = cx->blk_oldcop->op_sibling;
3028 gotoprobe = cx->blk_oldcop->op_sibling;
3031 gotoprobe = PL_main_root;
3034 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3035 gotoprobe = CvROOT(cx->blk_sub.cv);
3041 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3044 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3045 CxTYPE(cx), (long) ix);
3046 gotoprobe = PL_main_root;
3050 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3051 enterops, enterops + GOTO_DEPTH);
3054 if (gotoprobe->op_sibling &&
3055 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3056 gotoprobe->op_sibling->op_sibling) {
3057 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3058 label, label_len, label_flags, enterops,
3059 enterops + GOTO_DEPTH);
3064 PL_lastgotoprobe = gotoprobe;
3067 DIE(aTHX_ "Can't find label %"UTF8f,
3068 UTF8fARG(label_flags, label_len, label));
3070 /* if we're leaving an eval, check before we pop any frames
3071 that we're not going to punt, otherwise the error
3074 if (leaving_eval && *enterops && enterops[1]) {
3076 for (i = 1; enterops[i]; i++)
3077 if (enterops[i]->op_type == OP_ENTERITER)
3078 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3081 if (*enterops && enterops[1]) {
3082 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3084 deprecate("\"goto\" to jump into a construct");
3087 /* pop unwanted frames */
3089 if (ix < cxstack_ix) {
3096 oldsave = PL_scopestack[PL_scopestack_ix];
3097 LEAVE_SCOPE(oldsave);
3100 /* push wanted frames */
3102 if (*enterops && enterops[1]) {
3103 OP * const oldop = PL_op;
3104 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3105 for (; enterops[ix]; ix++) {
3106 PL_op = enterops[ix];
3107 /* Eventually we may want to stack the needed arguments
3108 * for each op. For now, we punt on the hard ones. */
3109 if (PL_op->op_type == OP_ENTERITER)
3110 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3111 PL_op->op_ppaddr(aTHX);
3119 if (!retop) retop = PL_main_start;
3121 PL_restartop = retop;
3122 PL_do_undump = TRUE;
3126 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3127 PL_do_undump = FALSE;
3143 anum = 0; (void)POPs;
3149 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3152 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3155 PL_exit_flags |= PERL_EXIT_EXPECTED;
3157 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3158 if (anum || !(PL_minus_c && PL_madskills))
3163 PUSHs(&PL_sv_undef);
3170 S_save_lines(pTHX_ AV *array, SV *sv)
3172 const char *s = SvPVX_const(sv);
3173 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3176 PERL_ARGS_ASSERT_SAVE_LINES;
3178 while (s && s < send) {
3180 SV * const tmpstr = newSV_type(SVt_PVMG);
3182 t = (const char *)memchr(s, '\n', send - s);
3188 sv_setpvn(tmpstr, s, t - s);
3189 av_store(array, line++, tmpstr);
3197 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3199 0 is used as continue inside eval,
3201 3 is used for a die caught by an inner eval - continue inner loop
3203 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3204 establish a local jmpenv to handle exception traps.
3209 S_docatch(pTHX_ OP *o)
3213 OP * const oldop = PL_op;
3217 assert(CATCH_GET == TRUE);
3224 assert(cxstack_ix >= 0);
3225 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3226 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3231 /* die caught by an inner eval - continue inner loop */
3232 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3233 PL_restartjmpenv = NULL;
3234 PL_op = PL_restartop;
3243 assert(0); /* NOTREACHED */
3252 =for apidoc find_runcv
3254 Locate the CV corresponding to the currently executing sub or eval.
3255 If db_seqp is non_null, skip CVs that are in the DB package and populate
3256 *db_seqp with the cop sequence number at the point that the DB:: code was
3257 entered. (This allows debuggers to eval in the scope of the breakpoint
3258 rather than in the scope of the debugger itself.)
3264 Perl_find_runcv(pTHX_ U32 *db_seqp)
3266 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3269 /* If this becomes part of the API, it might need a better name. */
3271 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3279 PL_curcop == &PL_compiling
3281 : PL_curcop->cop_seq;
3283 for (si = PL_curstackinfo; si; si = si->si_prev) {
3285 for (ix = si->si_cxix; ix >= 0; ix--) {
3286 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3288 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3289 cv = cx->blk_sub.cv;
3290 /* skip DB:: code */
3291 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3292 *db_seqp = cx->blk_oldcop->cop_seq;
3295 if (cx->cx_type & CXp_SUB_RE)
3298 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3299 cv = cx->blk_eval.cv;
3302 case FIND_RUNCV_padid_eq:
3304 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3307 case FIND_RUNCV_level_eq:
3308 if (level++ != arg) continue;
3316 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3320 /* Run yyparse() in a setjmp wrapper. Returns:
3321 * 0: yyparse() successful
3322 * 1: yyparse() failed
3326 S_try_yyparse(pTHX_ int gramtype)
3331 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3335 ret = yyparse(gramtype) ? 1 : 0;
3342 assert(0); /* NOTREACHED */
3349 /* Compile a require/do or an eval ''.
3351 * outside is the lexically enclosing CV (if any) that invoked us.
3352 * seq is the current COP scope value.
3353 * hh is the saved hints hash, if any.
3355 * Returns a bool indicating whether the compile was successful; if so,
3356 * PL_eval_start contains the first op of the compiled code; otherwise,
3359 * This function is called from two places: pp_require and pp_entereval.
3360 * These can be distinguished by whether PL_op is entereval.
3364 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3367 OP * const saveop = PL_op;
3368 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3369 COP * const oldcurcop = PL_curcop;
3370 bool in_require = (saveop->op_type == OP_REQUIRE);
3374 PL_in_eval = (in_require
3375 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3377 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3378 ? EVAL_RE_REPARSING : 0)));
3382 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3384 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3385 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3386 cxstack[cxstack_ix].blk_gimme = gimme;
3388 CvOUTSIDE_SEQ(evalcv) = seq;
3389 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3391 /* set up a scratch pad */
3393 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3394 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3398 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3400 /* make sure we compile in the right package */
3402 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3403 SAVEGENERICSV(PL_curstash);
3404 PL_curstash = (HV *)CopSTASH(PL_curcop);
3405 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3406 else SvREFCNT_inc_simple_void(PL_curstash);
3408 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3409 SAVESPTR(PL_beginav);
3410 PL_beginav = newAV();
3411 SAVEFREESV(PL_beginav);
3412 SAVESPTR(PL_unitcheckav);
3413 PL_unitcheckav = newAV();
3414 SAVEFREESV(PL_unitcheckav);
3417 SAVEBOOL(PL_madskills);
3421 ENTER_with_name("evalcomp");
3422 SAVESPTR(PL_compcv);
3425 /* try to compile it */
3427 PL_eval_root = NULL;
3428 PL_curcop = &PL_compiling;
3429 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3430 PL_in_eval |= EVAL_KEEPERR;
3437 hv_clear(GvHV(PL_hintgv));
3440 PL_hints = saveop->op_private & OPpEVAL_COPHH
3441 ? oldcurcop->cop_hints : saveop->op_targ;
3443 /* making 'use re eval' not be in scope when compiling the
3444 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3445 * infinite recursion when S_has_runtime_code() gives a false
3446 * positive: the second time round, HINT_RE_EVAL isn't set so we
3447 * don't bother calling S_has_runtime_code() */
3448 if (PL_in_eval & EVAL_RE_REPARSING)
3449 PL_hints &= ~HINT_RE_EVAL;
3452 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3453 SvREFCNT_dec(GvHV(PL_hintgv));
3454 GvHV(PL_hintgv) = hh;
3457 SAVECOMPILEWARNINGS();
3459 if (PL_dowarn & G_WARN_ALL_ON)
3460 PL_compiling.cop_warnings = pWARN_ALL ;
3461 else if (PL_dowarn & G_WARN_ALL_OFF)
3462 PL_compiling.cop_warnings = pWARN_NONE ;
3464 PL_compiling.cop_warnings = pWARN_STD ;
3467 PL_compiling.cop_warnings =
3468 DUP_WARNINGS(oldcurcop->cop_warnings);
3469 cophh_free(CopHINTHASH_get(&PL_compiling));
3470 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3471 /* The label, if present, is the first entry on the chain. So rather
3472 than writing a blank label in front of it (which involves an
3473 allocation), just use the next entry in the chain. */
3474 PL_compiling.cop_hints_hash
3475 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3476 /* Check the assumption that this removed the label. */
3477 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3480 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3483 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3485 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3486 * so honour CATCH_GET and trap it here if necessary */
3488 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3490 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3491 SV **newsp; /* Used by POPBLOCK. */
3493 I32 optype; /* Used by POPEVAL. */
3499 PERL_UNUSED_VAR(newsp);
3500 PERL_UNUSED_VAR(optype);
3502 /* note that if yystatus == 3, then the EVAL CX block has already
3503 * been popped, and various vars restored */
3505 if (yystatus != 3) {
3507 op_free(PL_eval_root);
3508 PL_eval_root = NULL;
3510 SP = PL_stack_base + POPMARK; /* pop original mark */
3511 POPBLOCK(cx,PL_curpm);
3513 namesv = cx->blk_eval.old_namesv;
3514 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3515 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3521 /* If cx is still NULL, it means that we didn't go in the
3522 * POPEVAL branch. */
3523 cx = &cxstack[cxstack_ix];
3524 assert(CxTYPE(cx) == CXt_EVAL);
3525 namesv = cx->blk_eval.old_namesv;
3527 (void)hv_store(GvHVn(PL_incgv),
3528 SvPVX_const(namesv),
3529 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3531 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3534 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3537 if (!*(SvPV_nolen_const(errsv))) {
3538 sv_setpvs(errsv, "Compilation error");
3541 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3546 LEAVE_with_name("evalcomp");
3548 CopLINE_set(&PL_compiling, 0);
3549 SAVEFREEOP(PL_eval_root);
3550 cv_forget_slab(evalcv);
3552 DEBUG_x(dump_eval());
3554 /* Register with debugger: */
3555 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3556 CV * const cv = get_cvs("DB::postponed", 0);
3560 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3562 call_sv(MUTABLE_SV(cv), G_DISCARD);
3566 if (PL_unitcheckav) {
3567 OP *es = PL_eval_start;
3568 call_list(PL_scopestack_ix, PL_unitcheckav);
3572 /* compiled okay, so do it */
3574 CvDEPTH(evalcv) = 1;
3575 SP = PL_stack_base + POPMARK; /* pop original mark */
3576 PL_op = saveop; /* The caller may need it. */
3577 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3584 S_check_type_and_open(pTHX_ SV *name)
3588 const char *p = SvPV_const(name, len);
3591 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3593 /* checking here captures a reasonable error message when
3594 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3595 * user gets a confusing message about looking for the .pmc file
3596 * rather than for the .pm file.
3597 * This check prevents a \0 in @INC causing problems.
3599 if (!IS_SAFE_PATHNAME(p, len, "require"))
3602 /* we use the value of errno later to see how stat() or open() failed.
3603 * We don't want it set if the stat succeeded but we still failed,
3604 * such as if the name exists, but is a directory */
3607 st_rc = PerlLIO_stat(p, &st);
3609 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3613 #if !defined(PERLIO_IS_STDIO)
3614 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3616 return PerlIO_open(p, PERL_SCRIPT_MODE);
3620 #ifndef PERL_DISABLE_PMC
3622 S_doopen_pm(pTHX_ SV *name)
3625 const char *p = SvPV_const(name, namelen);
3627 PERL_ARGS_ASSERT_DOOPEN_PM;
3629 /* check the name before trying for the .pmc name to avoid the
3630 * warning referring to the .pmc which the user probably doesn't
3631 * know or care about
3633 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3636 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3637 SV *const pmcsv = sv_newmortal();
3640 SvSetSV_nosteal(pmcsv,name);
3641 sv_catpvn(pmcsv, "c", 1);
3643 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3644 return check_type_and_open(pmcsv);
3646 return check_type_and_open(name);
3649 # define doopen_pm(name) check_type_and_open(name)
3650 #endif /* !PERL_DISABLE_PMC */
3652 /* require doesn't search for absolute names, or when the name is
3653 explicity relative the current directory */
3654 PERL_STATIC_INLINE bool
3655 S_path_is_searchable(const char *name)
3657 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3659 if (PERL_FILE_IS_ABSOLUTE(name)
3661 || (*name == '.' && ((name[1] == '/' ||
3662 (name[1] == '.' && name[2] == '/'))
3663 || (name[1] == '\\' ||
3664 ( name[1] == '.' && name[2] == '\\')))
3667 || (*name == '.' && (name[1] == '/' ||
3668 (name[1] == '.' && name[2] == '/')))
3688 int vms_unixname = 0;
3691 const char *tryname = NULL;
3693 const I32 gimme = GIMME_V;
3694 int filter_has_file = 0;
3695 PerlIO *tryrsfp = NULL;
3696 SV *filter_cache = NULL;
3697 SV *filter_state = NULL;
3698 SV *filter_sub = NULL;
3703 bool path_searchable;
3706 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3707 sv = sv_2mortal(new_version(sv));
3708 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3709 upg_version(PL_patchlevel, TRUE);
3710 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3711 if ( vcmp(sv,PL_patchlevel) <= 0 )
3712 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3713 SVfARG(sv_2mortal(vnormal(sv))),
3714 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3718 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3721 SV * const req = SvRV(sv);
3722 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3724 /* get the left hand term */
3725 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3727 first = SvIV(*av_fetch(lav,0,0));
3728 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3729 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3730 || av_tindex(lav) > 1 /* FP with > 3 digits */
3731 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3733 DIE(aTHX_ "Perl %"SVf" required--this is only "
3735 SVfARG(sv_2mortal(vnormal(req))),
3736 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3739 else { /* probably 'use 5.10' or 'use 5.8' */
3743 if (av_tindex(lav)>=1)
3744 second = SvIV(*av_fetch(lav,1,0));
3746 second /= second >= 600 ? 100 : 10;
3747 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3748 (int)first, (int)second);
3749 upg_version(hintsv, TRUE);
3751 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3752 "--this is only %"SVf", stopped",
3753 SVfARG(sv_2mortal(vnormal(req))),
3754 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3755 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3763 name = SvPV_const(sv, len);
3764 if (!(name && len > 0 && *name))
3765 DIE(aTHX_ "Null filename used");
3766 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3767 DIE(aTHX_ "Can't locate %s: %s",
3768 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3769 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3772 TAINT_PROPER("require");
3774 path_searchable = path_is_searchable(name);
3777 /* The key in the %ENV hash is in the syntax of file passed as the argument
3778 * usually this is in UNIX format, but sometimes in VMS format, which
3779 * can result in a module being pulled in more than once.
3780 * To prevent this, the key must be stored in UNIX format if the VMS
3781 * name can be translated to UNIX.
3785 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3787 unixlen = strlen(unixname);
3793 /* if not VMS or VMS name can not be translated to UNIX, pass it
3796 unixname = (char *) name;
3799 if (PL_op->op_type == OP_REQUIRE) {
3800 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3801 unixname, unixlen, 0);
3803 if (*svp != &PL_sv_undef)
3806 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3807 "Compilation failed in require", unixname);
3811 LOADING_FILE_PROBE(unixname);
3813 /* prepare to compile file */
3815 if (!path_searchable) {
3816 /* At this point, name is SvPVX(sv) */
3818 tryrsfp = doopen_pm(sv);
3820 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3821 AV * const ar = GvAVn(PL_incgv);
3828 namesv = newSV_type(SVt_PV);
3829 for (i = 0; i <= AvFILL(ar); i++) {
3830 SV * const dirsv = *av_fetch(ar, i, TRUE);
3838 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3839 && !SvOBJECT(SvRV(loader)))
3841 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3845 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3846 PTR2UV(SvRV(dirsv)), name);
3847 tryname = SvPVX_const(namesv);
3850 if (SvPADTMP(nsv)) {
3851 nsv = sv_newmortal();
3852 SvSetSV_nosteal(nsv,sv);
3855 ENTER_with_name("call_INC");
3863 if (SvGMAGICAL(loader)) {
3864 SV *l = sv_newmortal();
3865 sv_setsv_nomg(l, loader);
3868 if (sv_isobject(loader))
3869 count = call_method("INC", G_ARRAY);
3871 count = call_sv(loader, G_ARRAY);
3881 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3882 && !isGV_with_GP(SvRV(arg))) {
3883 filter_cache = SvRV(arg);
3890 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3894 if (isGV_with_GP(arg)) {
3895 IO * const io = GvIO((const GV *)arg);
3900 tryrsfp = IoIFP(io);
3901 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3902 PerlIO_close(IoOFP(io));
3913 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3915 SvREFCNT_inc_simple_void_NN(filter_sub);
3918 filter_state = SP[i];
3919 SvREFCNT_inc_simple_void(filter_state);
3923 if (!tryrsfp && (filter_cache || filter_sub)) {
3924 tryrsfp = PerlIO_open(BIT_BUCKET,
3930 /* FREETMPS may free our filter_cache */
3931 SvREFCNT_inc_simple_void(filter_cache);
3935 LEAVE_with_name("call_INC");
3937 /* Now re-mortalize it. */
3938 sv_2mortal(filter_cache);
3940 /* Adjust file name if the hook has set an %INC entry.
3941 This needs to happen after the FREETMPS above. */
3942 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3944 tryname = SvPV_nolen_const(*svp);
3951 filter_has_file = 0;
3952 filter_cache = NULL;
3954 SvREFCNT_dec(filter_state);
3955 filter_state = NULL;
3958 SvREFCNT_dec(filter_sub);
3963 if (path_searchable) {
3968 dir = SvPV_nomg_const(dirsv, dirlen);
3974 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3978 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3981 sv_setpv(namesv, unixdir);
3982 sv_catpv(namesv, unixname);
3984 # ifdef __SYMBIAN32__
3985 if (PL_origfilename[0] &&
3986 PL_origfilename[1] == ':' &&
3987 !(dir[0] && dir[1] == ':'))
3988 Perl_sv_setpvf(aTHX_ namesv,
3993 Perl_sv_setpvf(aTHX_ namesv,
3997 /* The equivalent of
3998 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3999 but without the need to parse the format string, or
4000 call strlen on either pointer, and with the correct
4001 allocation up front. */
4003 char *tmp = SvGROW(namesv, dirlen + len + 2);
4005 memcpy(tmp, dir, dirlen);
4008 /* Avoid '<dir>//<file>' */
4009 if (!dirlen || *(tmp-1) != '/') {
4012 /* So SvCUR_set reports the correct length below */
4016 /* name came from an SV, so it will have a '\0' at the
4017 end that we can copy as part of this memcpy(). */
4018 memcpy(tmp, name, len + 1);
4020 SvCUR_set(namesv, dirlen + len + 1);
4025 TAINT_PROPER("require");
4026 tryname = SvPVX_const(namesv);
4027 tryrsfp = doopen_pm(namesv);
4029 if (tryname[0] == '.' && tryname[1] == '/') {
4031 while (*++tryname == '/') {}
4035 else if (errno == EMFILE || errno == EACCES) {
4036 /* no point in trying other paths if out of handles;
4037 * on the other hand, if we couldn't open one of the
4038 * files, then going on with the search could lead to
4039 * unexpected results; see perl #113422
4048 saved_errno = errno; /* sv_2mortal can realloc things */
4051 if (PL_op->op_type == OP_REQUIRE) {
4052 if(saved_errno == EMFILE || saved_errno == EACCES) {
4053 /* diag_listed_as: Can't locate %s */
4054 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4056 if (namesv) { /* did we lookup @INC? */
4057 AV * const ar = GvAVn(PL_incgv);
4059 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4060 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4061 for (i = 0; i <= AvFILL(ar); i++) {
4062 sv_catpvs(inc, " ");
4063 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4065 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4066 const char *c, *e = name + len - 3;
4067 sv_catpv(msg, " (you may need to install the ");
4068 for (c = name; c < e; c++) {
4070 sv_catpvn(msg, "::", 2);
4073 sv_catpvn(msg, c, 1);
4076 sv_catpv(msg, " module)");
4078 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4079 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4081 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4082 sv_catpv(msg, " (did you run h2ph?)");
4085 /* diag_listed_as: Can't locate %s */
4087 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4091 DIE(aTHX_ "Can't locate %s", name);
4098 SETERRNO(0, SS_NORMAL);
4100 /* Assume success here to prevent recursive requirement. */
4101 /* name is never assigned to again, so len is still strlen(name) */
4102 /* Check whether a hook in @INC has already filled %INC */
4104 (void)hv_store(GvHVn(PL_incgv),
4105 unixname, unixlen, newSVpv(tryname,0),0);
4107 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4109 (void)hv_store(GvHVn(PL_incgv),
4110 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4113 ENTER_with_name("eval");
4115 SAVECOPFILE_FREE(&PL_compiling);
4116 CopFILE_set(&PL_compiling, tryname);
4117 lex_start(NULL, tryrsfp, 0);
4119 if (filter_sub || filter_cache) {
4120 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4121 than hanging another SV from it. In turn, filter_add() optionally
4122 takes the SV to use as the filter (or creates a new SV if passed
4123 NULL), so simply pass in whatever value filter_cache has. */
4124 SV * const fc = filter_cache ? newSV(0) : NULL;
4126 if (fc) sv_copypv(fc, filter_cache);
4127 datasv = filter_add(S_run_user_filter, fc);
4128 IoLINES(datasv) = filter_has_file;
4129 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4130 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4133 /* switch to eval mode */
4134 PUSHBLOCK(cx, CXt_EVAL, SP);
4136 cx->blk_eval.retop = PL_op->op_next;
4138 SAVECOPLINE(&PL_compiling);
4139 CopLINE_set(&PL_compiling, 0);
4143 /* Store and reset encoding. */
4144 encoding = PL_encoding;
4147 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4148 op = DOCATCH(PL_eval_start);
4150 op = PL_op->op_next;
4152 /* Restore encoding. */
4153 PL_encoding = encoding;
4155 LOADED_FILE_PROBE(unixname);
4160 /* This is a op added to hold the hints hash for
4161 pp_entereval. The hash can be modified by the code
4162 being eval'ed, so we return a copy instead. */
4168 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4178 const I32 gimme = GIMME_V;
4179 const U32 was = PL_breakable_sub_gen;
4180 char tbuf[TYPE_DIGITS(long) + 12];
4181 bool saved_delete = FALSE;
4182 char *tmpbuf = tbuf;
4185 U32 seq, lex_flags = 0;
4186 HV *saved_hh = NULL;
4187 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4189 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4190 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4192 else if (PL_hints & HINT_LOCALIZE_HH || (
4193 PL_op->op_private & OPpEVAL_COPHH
4194 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4196 saved_hh = cop_hints_2hv(PL_curcop, 0);
4197 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4201 /* make sure we've got a plain PV (no overload etc) before testing
4202 * for taint. Making a copy here is probably overkill, but better
4203 * safe than sorry */
4205 const char * const p = SvPV_const(sv, len);
4207 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4208 lex_flags |= LEX_START_COPIED;
4210 if (bytes && SvUTF8(sv))
4211 SvPVbyte_force(sv, len);
4213 else if (bytes && SvUTF8(sv)) {
4214 /* Don't modify someone else's scalar */
4217 (void)sv_2mortal(sv);
4218 SvPVbyte_force(sv,len);
4219 lex_flags |= LEX_START_COPIED;
4222 TAINT_IF(SvTAINTED(sv));
4223 TAINT_PROPER("eval");
4225 ENTER_with_name("eval");
4226 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4227 ? LEX_IGNORE_UTF8_HINTS
4228 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4233 /* switch to eval mode */
4235 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4236 SV * const temp_sv = sv_newmortal();
4237 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4238 (unsigned long)++PL_evalseq,
4239 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4240 tmpbuf = SvPVX(temp_sv);
4241 len = SvCUR(temp_sv);
4244 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4245 SAVECOPFILE_FREE(&PL_compiling);
4246 CopFILE_set(&PL_compiling, tmpbuf+2);
4247 SAVECOPLINE(&PL_compiling);
4248 CopLINE_set(&PL_compiling, 1);
4249 /* special case: an eval '' executed within the DB package gets lexically
4250 * placed in the first non-DB CV rather than the current CV - this
4251 * allows the debugger to execute code, find lexicals etc, in the
4252 * scope of the code being debugged. Passing &seq gets find_runcv
4253 * to do the dirty work for us */
4254 runcv = find_runcv(&seq);
4256 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4258 cx->blk_eval.retop = PL_op->op_next;
4260 /* prepare to compile string */
4262 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4263 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4265 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4266 deleting the eval's FILEGV from the stash before gv_check() runs
4267 (i.e. before run-time proper). To work around the coredump that
4268 ensues, we always turn GvMULTI_on for any globals that were
4269 introduced within evals. See force_ident(). GSAR 96-10-12 */
4270 char *const safestr = savepvn(tmpbuf, len);
4271 SAVEDELETE(PL_defstash, safestr, len);
4272 saved_delete = TRUE;
4277 if (doeval(gimme, runcv, seq, saved_hh)) {
4278 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4279 ? (PERLDB_LINE || PERLDB_SAVESRC)
4280 : PERLDB_SAVESRC_NOSUBS) {
4281 /* Retain the filegv we created. */
4282 } else if (!saved_delete) {
4283 char *const safestr = savepvn(tmpbuf, len);
4284 SAVEDELETE(PL_defstash, safestr, len);
4286 return DOCATCH(PL_eval_start);
4288 /* We have already left the scope set up earlier thanks to the LEAVE
4290 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4291 ? (PERLDB_LINE || PERLDB_SAVESRC)
4292 : PERLDB_SAVESRC_INVALID) {
4293 /* Retain the filegv we created. */
4294 } else if (!saved_delete) {
4295 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4297 return PL_op->op_next;
4309 const U8 save_flags = PL_op -> op_flags;
4317 namesv = cx->blk_eval.old_namesv;
4318 retop = cx->blk_eval.retop;
4319 evalcv = cx->blk_eval.cv;
4322 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4323 gimme, SVs_TEMP, FALSE);
4324 PL_curpm = newpm; /* Don't pop $1 et al till now */
4327 assert(CvDEPTH(evalcv) == 1);
4329 CvDEPTH(evalcv) = 0;
4331 if (optype == OP_REQUIRE &&
4332 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4334 /* Unassume the success we assumed earlier. */
4335 (void)hv_delete(GvHVn(PL_incgv),
4336 SvPVX_const(namesv),
4337 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4339 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4341 /* die_unwind() did LEAVE, or we won't be here */
4344 LEAVE_with_name("eval");
4345 if (!(save_flags & OPf_SPECIAL)) {
4353 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4354 close to the related Perl_create_eval_scope. */
4356 Perl_delete_eval_scope(pTHX)
4367 LEAVE_with_name("eval_scope");
4368 PERL_UNUSED_VAR(newsp);
4369 PERL_UNUSED_VAR(gimme);
4370 PERL_UNUSED_VAR(optype);
4373 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4374 also needed by Perl_fold_constants. */
4376 Perl_create_eval_scope(pTHX_ U32 flags)
4379 const I32 gimme = GIMME_V;
4381 ENTER_with_name("eval_scope");
4384 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4387 PL_in_eval = EVAL_INEVAL;
4388 if (flags & G_KEEPERR)
4389 PL_in_eval |= EVAL_KEEPERR;
4392 if (flags & G_FAKINGEVAL) {
4393 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4401 PERL_CONTEXT * const cx = create_eval_scope(0);
4402 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4403 return DOCATCH(PL_op->op_next);
4418 PERL_UNUSED_VAR(optype);
4421 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4422 SVs_PADTMP|SVs_TEMP, FALSE);
4423 PL_curpm = newpm; /* Don't pop $1 et al till now */
4425 LEAVE_with_name("eval_scope");
4434 const I32 gimme = GIMME_V;
4436 ENTER_with_name("given");
4439 if (PL_op->op_targ) {
4440 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4441 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4442 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4449 PUSHBLOCK(cx, CXt_GIVEN, SP);
4462 PERL_UNUSED_CONTEXT;
4465 assert(CxTYPE(cx) == CXt_GIVEN);
4468 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4469 SVs_PADTMP|SVs_TEMP, FALSE);
4470 PL_curpm = newpm; /* Don't pop $1 et al till now */
4472 LEAVE_with_name("given");
4476 /* Helper routines used by pp_smartmatch */
4478 S_make_matcher(pTHX_ REGEXP *re)
4481 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4483 PERL_ARGS_ASSERT_MAKE_MATCHER;
4485 PM_SETRE(matcher, ReREFCNT_inc(re));
4487 SAVEFREEOP((OP *) matcher);
4488 ENTER_with_name("matcher"); SAVETMPS;
4494 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4499 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4501 PL_op = (OP *) matcher;
4504 (void) Perl_pp_match(aTHX);
4506 return (SvTRUEx(POPs));
4510 S_destroy_matcher(pTHX_ PMOP *matcher)
4514 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4515 PERL_UNUSED_ARG(matcher);
4518 LEAVE_with_name("matcher");
4521 /* Do a smart match */
4524 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4525 return do_smartmatch(NULL, NULL, 0);
4528 /* This version of do_smartmatch() implements the
4529 * table of smart matches that is found in perlsyn.
4532 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4537 bool object_on_left = FALSE;
4538 SV *e = TOPs; /* e is for 'expression' */
4539 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4541 /* Take care only to invoke mg_get() once for each argument.
4542 * Currently we do this by copying the SV if it's magical. */
4544 if (!copied && SvGMAGICAL(d))
4545 d = sv_mortalcopy(d);
4552 e = sv_mortalcopy(e);
4554 /* First of all, handle overload magic of the rightmost argument */
4557 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4558 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4560 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4567 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4570 SP -= 2; /* Pop the values */
4575 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4582 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4583 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4584 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4586 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4587 object_on_left = TRUE;
4590 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4592 if (object_on_left) {
4593 goto sm_any_sub; /* Treat objects like scalars */
4595 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4596 /* Test sub truth for each key */
4598 bool andedresults = TRUE;
4599 HV *hv = (HV*) SvRV(d);
4600 I32 numkeys = hv_iterinit(hv);
4601 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4604 while ( (he = hv_iternext(hv)) ) {
4605 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4606 ENTER_with_name("smartmatch_hash_key_test");
4609 PUSHs(hv_iterkeysv(he));
4611 c = call_sv(e, G_SCALAR);
4614 andedresults = FALSE;
4616 andedresults = SvTRUEx(POPs) && andedresults;
4618 LEAVE_with_name("smartmatch_hash_key_test");
4625 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4626 /* Test sub truth for each element */
4628 bool andedresults = TRUE;
4629 AV *av = (AV*) SvRV(d);
4630 const I32 len = av_tindex(av);
4631 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4634 for (i = 0; i <= len; ++i) {
4635 SV * const * const svp = av_fetch(av, i, FALSE);
4636 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4637 ENTER_with_name("smartmatch_array_elem_test");
4643 c = call_sv(e, G_SCALAR);
4646 andedresults = FALSE;
4648 andedresults = SvTRUEx(POPs) && andedresults;
4650 LEAVE_with_name("smartmatch_array_elem_test");
4659 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4660 ENTER_with_name("smartmatch_coderef");
4665 c = call_sv(e, G_SCALAR);
4669 else if (SvTEMP(TOPs))
4670 SvREFCNT_inc_void(TOPs);
4672 LEAVE_with_name("smartmatch_coderef");
4677 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4678 if (object_on_left) {
4679 goto sm_any_hash; /* Treat objects like scalars */
4681 else if (!SvOK(d)) {
4682 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4685 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4686 /* Check that the key-sets are identical */
4688 HV *other_hv = MUTABLE_HV(SvRV(d));
4691 U32 this_key_count = 0,
4692 other_key_count = 0;
4693 HV *hv = MUTABLE_HV(SvRV(e));
4695 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4696 /* Tied hashes don't know how many keys they have. */
4697 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4698 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4702 HV * const temp = other_hv;
4708 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4712 /* The hashes have the same number of keys, so it suffices
4713 to check that one is a subset of the other. */
4714 (void) hv_iterinit(hv);
4715 while ( (he = hv_iternext(hv)) ) {
4716 SV *key = hv_iterkeysv(he);
4718 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4721 if(!hv_exists_ent(other_hv, key, 0)) {
4722 (void) hv_iterinit(hv); /* reset iterator */
4728 (void) hv_iterinit(other_hv);
4729 while ( hv_iternext(other_hv) )
4733 other_key_count = HvUSEDKEYS(other_hv);
4735 if (this_key_count != other_key_count)
4740 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4741 AV * const other_av = MUTABLE_AV(SvRV(d));
4742 const SSize_t other_len = av_tindex(other_av) + 1;
4744 HV *hv = MUTABLE_HV(SvRV(e));
4746 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4747 for (i = 0; i < other_len; ++i) {
4748 SV ** const svp = av_fetch(other_av, i, FALSE);
4749 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4750 if (svp) { /* ??? When can this not happen? */
4751 if (hv_exists_ent(hv, *svp, 0))
4757 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4758 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4761 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4763 HV *hv = MUTABLE_HV(SvRV(e));
4765 (void) hv_iterinit(hv);
4766 while ( (he = hv_iternext(hv)) ) {
4767 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4768 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4769 (void) hv_iterinit(hv);
4770 destroy_matcher(matcher);
4774 destroy_matcher(matcher);
4780 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4781 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4788 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4789 if (object_on_left) {
4790 goto sm_any_array; /* Treat objects like scalars */
4792 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4793 AV * const other_av = MUTABLE_AV(SvRV(e));
4794 const SSize_t other_len = av_tindex(other_av) + 1;
4797 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4798 for (i = 0; i < other_len; ++i) {
4799 SV ** const svp = av_fetch(other_av, i, FALSE);
4801 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4802 if (svp) { /* ??? When can this not happen? */
4803 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4809 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4810 AV *other_av = MUTABLE_AV(SvRV(d));
4811 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4812 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4816 const SSize_t other_len = av_tindex(other_av);
4818 if (NULL == seen_this) {
4819 seen_this = newHV();
4820 (void) sv_2mortal(MUTABLE_SV(seen_this));
4822 if (NULL == seen_other) {
4823 seen_other = newHV();
4824 (void) sv_2mortal(MUTABLE_SV(seen_other));
4826 for(i = 0; i <= other_len; ++i) {
4827 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4828 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4830 if (!this_elem || !other_elem) {
4831 if ((this_elem && SvOK(*this_elem))
4832 || (other_elem && SvOK(*other_elem)))
4835 else if (hv_exists_ent(seen_this,
4836 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4837 hv_exists_ent(seen_other,
4838 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4840 if (*this_elem != *other_elem)
4844 (void)hv_store_ent(seen_this,
4845 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4847 (void)hv_store_ent(seen_other,
4848 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4854 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4855 (void) do_smartmatch(seen_this, seen_other, 0);
4857 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4866 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4867 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4870 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4871 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4874 for(i = 0; i <= this_len; ++i) {
4875 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4876 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4877 if (svp && matcher_matches_sv(matcher, *svp)) {
4878 destroy_matcher(matcher);
4882 destroy_matcher(matcher);
4886 else if (!SvOK(d)) {
4887 /* undef ~~ array */
4888 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4891 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4892 for (i = 0; i <= this_len; ++i) {
4893 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4894 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4895 if (!svp || !SvOK(*svp))
4904 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4906 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4907 for (i = 0; i <= this_len; ++i) {
4908 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4915 /* infinite recursion isn't supposed to happen here */
4916 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4917 (void) do_smartmatch(NULL, NULL, 1);
4919 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4928 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4929 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4930 SV *t = d; d = e; e = t;
4931 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4934 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4935 SV *t = d; d = e; e = t;
4936 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4937 goto sm_regex_array;
4940 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4942 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4944 PUSHs(matcher_matches_sv(matcher, d)
4947 destroy_matcher(matcher);
4952 /* See if there is overload magic on left */
4953 else if (object_on_left && SvAMAGIC(d)) {
4955 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4956 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4959 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4967 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4970 else if (!SvOK(d)) {
4971 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4972 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4977 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4978 DEBUG_M(if (SvNIOK(e))
4979 Perl_deb(aTHX_ " applying rule Any-Num\n");
4981 Perl_deb(aTHX_ " applying rule Num-numish\n");
4983 /* numeric comparison */
4986 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4987 (void) Perl_pp_i_eq(aTHX);
4989 (void) Perl_pp_eq(aTHX);
4997 /* As a last resort, use string comparison */
4998 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5001 return Perl_pp_seq(aTHX);
5008 const I32 gimme = GIMME_V;
5010 /* This is essentially an optimization: if the match
5011 fails, we don't want to push a context and then
5012 pop it again right away, so we skip straight
5013 to the op that follows the leavewhen.
5014 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5016 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
5017 RETURNOP(cLOGOP->op_other->op_next);
5019 ENTER_with_name("when");
5022 PUSHBLOCK(cx, CXt_WHEN, SP);
5037 cxix = dopoptogiven(cxstack_ix);
5039 /* diag_listed_as: Can't "when" outside a topicalizer */
5040 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5041 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5044 assert(CxTYPE(cx) == CXt_WHEN);
5047 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
5048 SVs_PADTMP|SVs_TEMP, FALSE);
5049 PL_curpm = newpm; /* pop $1 et al */
5051 LEAVE_with_name("when");
5053 if (cxix < cxstack_ix)
5056 cx = &cxstack[cxix];
5058 if (CxFOREACH(cx)) {
5059 /* clear off anything above the scope we're re-entering */
5060 I32 inner = PL_scopestack_ix;
5063 if (PL_scopestack_ix < inner)
5064 leave_scope(PL_scopestack[PL_scopestack_ix]);
5065 PL_curcop = cx->blk_oldcop;
5068 return cx->blk_loop.my_op->op_nextop;
5072 RETURNOP(cx->blk_givwhen.leave_op);
5085 PERL_UNUSED_VAR(gimme);
5087 cxix = dopoptowhen(cxstack_ix);
5089 DIE(aTHX_ "Can't \"continue\" outside a when block");
5091 if (cxix < cxstack_ix)
5095 assert(CxTYPE(cx) == CXt_WHEN);
5098 PL_curpm = newpm; /* pop $1 et al */
5100 LEAVE_with_name("when");
5101 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5110 cxix = dopoptogiven(cxstack_ix);
5112 DIE(aTHX_ "Can't \"break\" outside a given block");
5114 cx = &cxstack[cxix];
5116 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5118 if (cxix < cxstack_ix)
5121 /* Restore the sp at the time we entered the given block */
5124 return cx->blk_givwhen.leave_op;
5128 S_doparseform(pTHX_ SV *sv)
5131 char *s = SvPV(sv, len);
5133 char *base = NULL; /* start of current field */
5134 I32 skipspaces = 0; /* number of contiguous spaces seen */
5135 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5136 bool repeat = FALSE; /* ~~ seen on this line */
5137 bool postspace = FALSE; /* a text field may need right padding */
5140 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5142 bool ischop; /* it's a ^ rather than a @ */
5143 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5144 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5148 PERL_ARGS_ASSERT_DOPARSEFORM;
5151 Perl_croak(aTHX_ "Null picture in formline");
5153 if (SvTYPE(sv) >= SVt_PVMG) {
5154 /* This might, of course, still return NULL. */
5155 mg = mg_find(sv, PERL_MAGIC_fm);
5157 sv_upgrade(sv, SVt_PVMG);
5161 /* still the same as previously-compiled string? */
5162 SV *old = mg->mg_obj;
5163 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5164 && len == SvCUR(old)
5165 && strnEQ(SvPVX(old), SvPVX(sv), len)
5167 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5171 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5172 Safefree(mg->mg_ptr);
5178 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5179 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5182 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5183 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5187 /* estimate the buffer size needed */
5188 for (base = s; s <= send; s++) {
5189 if (*s == '\n' || *s == '@' || *s == '^')
5195 Newx(fops, maxops, U32);
5200 *fpc++ = FF_LINEMARK;
5201 noblank = repeat = FALSE;
5219 case ' ': case '\t':
5226 } /* else FALL THROUGH */
5234 *fpc++ = FF_LITERAL;
5242 *fpc++ = (U32)skipspaces;
5246 *fpc++ = FF_NEWLINE;
5250 arg = fpc - linepc + 1;
5257 *fpc++ = FF_LINEMARK;
5258 noblank = repeat = FALSE;
5267 ischop = s[-1] == '^';
5273 arg = (s - base) - 1;
5275 *fpc++ = FF_LITERAL;
5281 if (*s == '*') { /* @* or ^* */
5283 *fpc++ = 2; /* skip the @* or ^* */
5285 *fpc++ = FF_LINESNGL;
5288 *fpc++ = FF_LINEGLOB;
5290 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5291 arg = ischop ? FORM_NUM_BLANK : 0;
5296 const char * const f = ++s;
5299 arg |= FORM_NUM_POINT + (s - f);
5301 *fpc++ = s - base; /* fieldsize for FETCH */
5302 *fpc++ = FF_DECIMAL;
5304 unchopnum |= ! ischop;
5306 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5307 arg = ischop ? FORM_NUM_BLANK : 0;
5309 s++; /* skip the '0' first */
5313 const char * const f = ++s;
5316 arg |= FORM_NUM_POINT + (s - f);
5318 *fpc++ = s - base; /* fieldsize for FETCH */
5319 *fpc++ = FF_0DECIMAL;
5321 unchopnum |= ! ischop;
5323 else { /* text field */
5325 bool ismore = FALSE;
5328 while (*++s == '>') ;
5329 prespace = FF_SPACE;
5331 else if (*s == '|') {
5332 while (*++s == '|') ;
5333 prespace = FF_HALFSPACE;
5338 while (*++s == '<') ;
5341 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5345 *fpc++ = s - base; /* fieldsize for FETCH */
5347 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5350 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5364 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5367 mg->mg_ptr = (char *) fops;
5368 mg->mg_len = arg * sizeof(U32);
5369 mg->mg_obj = sv_copy;
5370 mg->mg_flags |= MGf_REFCOUNTED;
5372 if (unchopnum && repeat)
5373 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5380 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5382 /* Can value be printed in fldsize chars, using %*.*f ? */
5386 int intsize = fldsize - (value < 0 ? 1 : 0);
5388 if (frcsize & FORM_NUM_POINT)
5390 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5393 while (intsize--) pwr *= 10.0;
5394 while (frcsize--) eps /= 10.0;
5397 if (value + eps >= pwr)
5400 if (value - eps <= -pwr)
5407 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5410 SV * const datasv = FILTER_DATA(idx);
5411 const int filter_has_file = IoLINES(datasv);
5412 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5413 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5418 char *prune_from = NULL;
5419 bool read_from_cache = FALSE;
5423 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5425 assert(maxlen >= 0);
5428 /* I was having segfault trouble under Linux 2.2.5 after a
5429 parse error occured. (Had to hack around it with a test
5430 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5431 not sure where the trouble is yet. XXX */
5434 SV *const cache = datasv;
5437 const char *cache_p = SvPV(cache, cache_len);
5441 /* Running in block mode and we have some cached data already.
5443 if (cache_len >= umaxlen) {
5444 /* In fact, so much data we don't even need to call
5449 const char *const first_nl =
5450 (const char *)memchr(cache_p, '\n', cache_len);
5452 take = first_nl + 1 - cache_p;
5456 sv_catpvn(buf_sv, cache_p, take);
5457 sv_chop(cache, cache_p + take);
5458 /* Definitely not EOF */
5462 sv_catsv(buf_sv, cache);
5464 umaxlen -= cache_len;
5467 read_from_cache = TRUE;
5471 /* Filter API says that the filter appends to the contents of the buffer.
5472 Usually the buffer is "", so the details don't matter. But if it's not,
5473 then clearly what it contains is already filtered by this filter, so we
5474 don't want to pass it in a second time.
5475 I'm going to use a mortal in case the upstream filter croaks. */
5476 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5477 ? sv_newmortal() : buf_sv;
5478 SvUPGRADE(upstream, SVt_PV);
5480 if (filter_has_file) {
5481 status = FILTER_READ(idx+1, upstream, 0);
5484 if (filter_sub && status >= 0) {
5488 ENTER_with_name("call_filter_sub");
5493 DEFSV_set(upstream);
5497 PUSHs(filter_state);
5500 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5510 SV * const errsv = ERRSV;
5511 if (SvTRUE_NN(errsv))
5512 err = newSVsv(errsv);
5518 LEAVE_with_name("call_filter_sub");
5521 if (SvGMAGICAL(upstream)) {
5523 if (upstream == buf_sv) mg_free(buf_sv);
5525 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5526 if(!err && SvOK(upstream)) {
5527 got_p = SvPV_nomg(upstream, got_len);
5529 if (got_len > umaxlen) {
5530 prune_from = got_p + umaxlen;
5533 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5534 if (first_nl && first_nl + 1 < got_p + got_len) {
5535 /* There's a second line here... */
5536 prune_from = first_nl + 1;
5540 if (!err && prune_from) {
5541 /* Oh. Too long. Stuff some in our cache. */
5542 STRLEN cached_len = got_p + got_len - prune_from;
5543 SV *const cache = datasv;
5546 /* Cache should be empty. */
5547 assert(!SvCUR(cache));
5550 sv_setpvn(cache, prune_from, cached_len);
5551 /* If you ask for block mode, you may well split UTF-8 characters.
5552 "If it breaks, you get to keep both parts"
5553 (Your code is broken if you don't put them back together again
5554 before something notices.) */
5555 if (SvUTF8(upstream)) {
5558 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5560 /* Cannot just use sv_setpvn, as that could free the buffer
5561 before we have a chance to assign it. */
5562 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5563 got_len - cached_len);
5565 /* Can't yet be EOF */
5570 /* If they are at EOF but buf_sv has something in it, then they may never
5571 have touched the SV upstream, so it may be undefined. If we naively
5572 concatenate it then we get a warning about use of uninitialised value.
5574 if (!err && upstream != buf_sv &&
5576 sv_catsv_nomg(buf_sv, upstream);
5578 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5581 IoLINES(datasv) = 0;
5583 SvREFCNT_dec(filter_state);
5584 IoTOP_GV(datasv) = NULL;
5587 SvREFCNT_dec(filter_sub);
5588 IoBOTTOM_GV(datasv) = NULL;
5590 filter_del(S_run_user_filter);
5596 if (status == 0 && read_from_cache) {
5597 /* If we read some data from the cache (and by getting here it implies
5598 that we emptied the cache) then we aren't yet at EOF, and mustn't
5599 report that to our caller. */
5607 * c-indentation-style: bsd
5609 * indent-tabs-mode: nil
5612 * ex: set ts=8 sts=4 sw=4 et: