3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
80 PMOP *pm = (PMOP*)cLOGOP->op_other;
85 const regexp_engine *eng;
86 bool is_bare_re= FALSE;
88 if (PL_op->op_flags & OPf_STACKED) {
98 /* prevent recompiling under /o and ithreads. */
99 #if defined(USE_ITHREADS)
100 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
107 assert (re != (REGEXP*) &PL_sv_undef);
108 eng = re ? RX_ENGINE(re) : current_re_engine();
111 In the below logic: these are basically the same - check if this regcomp is part of a split.
113 (PL_op->op_pmflags & PMf_split )
114 (PL_op->op_next->op_type == OP_PUSHRE)
116 We could add a new mask for this and copy the PMf_split, if we did
117 some bit definition fiddling first.
119 For now we leave this
122 new_re = (eng->op_comp
124 : &Perl_re_op_compile
125 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
127 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
129 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
131 if (pm->op_pmflags & PMf_HAS_CV)
132 ReANY(new_re)->qr_anoncv
133 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
137 /* The match's LHS's get-magic might need to access this op's regexp
138 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
139 get-magic now before we replace the regexp. Hopefully this hack can
140 be replaced with the approach described at
141 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
143 if (pm->op_type == OP_MATCH) {
145 const bool was_tainted = TAINT_get;
146 if (pm->op_flags & OPf_STACKED)
148 else if (pm->op_private & OPpTARGET_MY)
149 lhs = PAD_SV(pm->op_targ);
152 /* Restore the previous value of PL_tainted (which may have been
153 modified by get-magic), to avoid incorrectly setting the
154 RXf_TAINTED flag with RX_TAINT_on further down. */
155 TAINT_set(was_tainted);
156 #ifdef NO_TAINT_SUPPORT
157 PERL_UNUSED_VAR(was_tainted);
160 tmp = reg_temp_copy(NULL, new_re);
161 ReREFCNT_dec(new_re);
167 PM_SETRE(pm, new_re);
171 if (TAINTING_get && TAINT_get) {
172 SvTAINTED_on((SV*)new_re);
176 #if !defined(USE_ITHREADS)
177 /* can't change the optree at runtime either */
178 /* PMf_KEEP is handled differently under threads to avoid these problems */
179 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
181 if (pm->op_pmflags & PMf_KEEP) {
182 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
183 cLOGOP->op_first->op_next = PL_op->op_next;
196 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
197 PMOP * const pm = (PMOP*) cLOGOP->op_other;
198 SV * const dstr = cx->sb_dstr;
201 char *orig = cx->sb_orig;
202 REGEXP * const rx = cx->sb_rx;
204 REGEXP *old = PM_GETRE(pm);
211 PM_SETRE(pm,ReREFCNT_inc(rx));
214 rxres_restore(&cx->sb_rxres, rx);
216 if (cx->sb_iters++) {
217 const I32 saviters = cx->sb_iters;
218 if (cx->sb_iters > cx->sb_maxiters)
219 DIE(aTHX_ "Substitution loop");
221 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
223 /* See "how taint works" above pp_subst() */
225 cx->sb_rxtainted |= SUBST_TAINT_REPL;
226 sv_catsv_nomg(dstr, POPs);
227 if (CxONCE(cx) || s < orig ||
228 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
229 (s == m), cx->sb_targ, NULL,
230 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
232 SV *targ = cx->sb_targ;
234 assert(cx->sb_strend >= s);
235 if(cx->sb_strend > s) {
236 if (DO_UTF8(dstr) && !SvUTF8(targ))
237 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
239 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
241 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
242 cx->sb_rxtainted |= SUBST_TAINT_PAT;
244 if (pm->op_pmflags & PMf_NONDESTRUCT) {
246 /* From here on down we're using the copy, and leaving the
247 original untouched. */
251 SV_CHECK_THINKFIRST_COW_DROP(targ);
252 if (isGV(targ)) Perl_croak_no_modify();
254 SvPV_set(targ, SvPVX(dstr));
255 SvCUR_set(targ, SvCUR(dstr));
256 SvLEN_set(targ, SvLEN(dstr));
259 SvPV_set(dstr, NULL);
262 mPUSHi(saviters - 1);
264 (void)SvPOK_only_UTF8(targ);
267 /* update the taint state of various various variables in
268 * preparation for final exit.
269 * See "how taint works" above pp_subst() */
271 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
272 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
275 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
277 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
278 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
280 SvTAINTED_on(TOPs); /* taint return value */
281 /* needed for mg_set below */
283 cBOOL(cx->sb_rxtainted &
284 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
288 /* PL_tainted must be correctly set for this mg_set */
291 LEAVE_SCOPE(cx->sb_oldsave);
294 RETURNOP(pm->op_next);
295 assert(0); /* NOTREACHED */
297 cx->sb_iters = saviters;
299 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
302 assert(!RX_SUBOFFSET(rx));
303 cx->sb_orig = orig = RX_SUBBEG(rx);
305 cx->sb_strend = s + (cx->sb_strend - m);
307 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
309 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
310 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
312 sv_catpvn_nomg(dstr, s, m-s);
314 cx->sb_s = RX_OFFS(rx)[0].end + orig;
315 { /* Update the pos() information. */
317 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
319 if (!(mg = mg_find_mglob(sv))) {
320 mg = sv_magicext_mglob(sv);
323 MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
326 (void)ReREFCNT_inc(rx);
327 /* update the taint state of various various variables in preparation
328 * for calling the code block.
329 * See "how taint works" above pp_subst() */
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
335 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
336 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
340 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
341 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
342 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
343 ? cx->sb_dstr : cx->sb_targ);
346 rxres_save(&cx->sb_rxres, rx);
348 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
352 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
357 PERL_ARGS_ASSERT_RXRES_SAVE;
360 if (!p || p[1] < RX_NPARENS(rx)) {
362 i = 7 + (RX_NPARENS(rx)+1) * 2;
364 i = 6 + (RX_NPARENS(rx)+1) * 2;
373 /* what (if anything) to free on croak */
374 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
375 RX_MATCH_COPIED_off(rx);
376 *p++ = RX_NPARENS(rx);
379 *p++ = PTR2UV(RX_SAVED_COPY(rx));
380 RX_SAVED_COPY(rx) = NULL;
383 *p++ = PTR2UV(RX_SUBBEG(rx));
384 *p++ = (UV)RX_SUBLEN(rx);
385 *p++ = (UV)RX_SUBOFFSET(rx);
386 *p++ = (UV)RX_SUBCOFFSET(rx);
387 for (i = 0; i <= RX_NPARENS(rx); ++i) {
388 *p++ = (UV)RX_OFFS(rx)[i].start;
389 *p++ = (UV)RX_OFFS(rx)[i].end;
394 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
399 PERL_ARGS_ASSERT_RXRES_RESTORE;
402 RX_MATCH_COPY_FREE(rx);
403 RX_MATCH_COPIED_set(rx, *p);
405 RX_NPARENS(rx) = *p++;
408 if (RX_SAVED_COPY(rx))
409 SvREFCNT_dec (RX_SAVED_COPY(rx));
410 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
414 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
415 RX_SUBLEN(rx) = (I32)(*p++);
416 RX_SUBOFFSET(rx) = (I32)*p++;
417 RX_SUBCOFFSET(rx) = (I32)*p++;
418 for (i = 0; i <= RX_NPARENS(rx); ++i) {
419 RX_OFFS(rx)[i].start = (I32)(*p++);
420 RX_OFFS(rx)[i].end = (I32)(*p++);
425 S_rxres_free(pTHX_ void **rsp)
427 UV * const p = (UV*)*rsp;
429 PERL_ARGS_ASSERT_RXRES_FREE;
433 void *tmp = INT2PTR(char*,*p);
436 U32 i = 9 + p[1] * 2;
438 U32 i = 8 + p[1] * 2;
443 SvREFCNT_dec (INT2PTR(SV*,p[2]));
446 PoisonFree(p, i, sizeof(UV));
455 #define FORM_NUM_BLANK (1<<30)
456 #define FORM_NUM_POINT (1<<29)
460 dVAR; dSP; dMARK; dORIGMARK;
461 SV * const tmpForm = *++MARK;
462 SV *formsv; /* contains text of original format */
463 U32 *fpc; /* format ops program counter */
464 char *t; /* current append position in target string */
465 const char *f; /* current position in format string */
467 SV *sv = NULL; /* current item */
468 const char *item = NULL;/* string value of current item */
469 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
470 I32 itembytes = 0; /* as itemsize, but length in bytes */
471 I32 fieldsize = 0; /* width of current field */
472 I32 lines = 0; /* number of lines that have been output */
473 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
474 const char *chophere = NULL; /* where to chop current item */
475 STRLEN linemark = 0; /* pos of start of line in output */
477 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
478 STRLEN len; /* length of current sv */
479 STRLEN linemax; /* estimate of output size in bytes */
480 bool item_is_utf8 = FALSE;
481 bool targ_is_utf8 = FALSE;
484 U8 *source; /* source of bytes to append */
485 STRLEN to_copy; /* how may bytes to append */
486 char trans; /* what chars to translate */
488 mg = doparseform(tmpForm);
490 fpc = (U32*)mg->mg_ptr;
491 /* the actual string the format was compiled from.
492 * with overload etc, this may not match tmpForm */
496 SvPV_force(PL_formtarget, len);
497 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
498 SvTAINTED_on(PL_formtarget);
499 if (DO_UTF8(PL_formtarget))
501 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
502 t = SvGROW(PL_formtarget, len + linemax + 1);
503 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
505 f = SvPV_const(formsv, len);
509 const char *name = "???";
512 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
513 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
514 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
515 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
516 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
518 case FF_CHECKNL: name = "CHECKNL"; break;
519 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
520 case FF_SPACE: name = "SPACE"; break;
521 case FF_HALFSPACE: name = "HALFSPACE"; break;
522 case FF_ITEM: name = "ITEM"; break;
523 case FF_CHOP: name = "CHOP"; break;
524 case FF_LINEGLOB: name = "LINEGLOB"; break;
525 case FF_NEWLINE: name = "NEWLINE"; break;
526 case FF_MORE: name = "MORE"; break;
527 case FF_LINEMARK: name = "LINEMARK"; break;
528 case FF_END: name = "END"; break;
529 case FF_0DECIMAL: name = "0DECIMAL"; break;
530 case FF_LINESNGL: name = "LINESNGL"; break;
533 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
535 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
538 case FF_LINEMARK: /* start (or end) of a line */
539 linemark = t - SvPVX(PL_formtarget);
544 case FF_LITERAL: /* append <arg> literal chars */
549 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
552 case FF_SKIP: /* skip <arg> chars in format */
556 case FF_FETCH: /* get next item and set field size to <arg> */
565 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
568 SvTAINTED_on(PL_formtarget);
571 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
573 const char *s = item = SvPV_const(sv, len);
574 const char *send = s + len;
577 item_is_utf8 = DO_UTF8(sv);
589 if (itemsize == fieldsize)
592 itembytes = s - item;
596 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
598 const char *s = item = SvPV_const(sv, len);
599 const char *send = s + len;
603 item_is_utf8 = DO_UTF8(sv);
605 /* look for a legal split position */
613 /* provisional split point */
617 /* we delay testing fieldsize until after we've
618 * processed the possible split char directly
619 * following the last field char; so if fieldsize=3
620 * and item="a b cdef", we consume "a b", not "a".
621 * Ditto further down.
623 if (size == fieldsize)
627 if (strchr(PL_chopset, *s)) {
628 /* provisional split point */
629 /* for a non-space split char, we include
630 * the split char; hence the '+1' */
634 if (size == fieldsize)
646 if (!chophere || s == send) {
650 itembytes = chophere - item;
655 case FF_SPACE: /* append padding space (diff of field, item size) */
656 arg = fieldsize - itemsize;
664 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
665 arg = fieldsize - itemsize;
674 case FF_ITEM: /* append a text item, while blanking ctrl chars */
680 case FF_CHOP: /* (for ^*) chop the current item */
682 const char *s = chophere;
690 /* tied, overloaded or similar strangeness.
691 * Do it the hard way */
692 sv_setpvn(sv, s, len - (s-item));
697 case FF_LINESNGL: /* process ^* */
701 case FF_LINEGLOB: /* process @* */
703 const bool oneline = fpc[-1] == FF_LINESNGL;
704 const char *s = item = SvPV_const(sv, len);
705 const char *const send = s + len;
707 item_is_utf8 = DO_UTF8(sv);
718 to_copy = s - item - 1;
732 /* append to_copy bytes from source to PL_formstring.
733 * item_is_utf8 implies source is utf8.
734 * if trans, translate certain characters during the copy */
739 SvCUR_set(PL_formtarget,
740 t - SvPVX_const(PL_formtarget));
742 if (targ_is_utf8 && !item_is_utf8) {
743 source = tmp = bytes_to_utf8(source, &to_copy);
745 if (item_is_utf8 && !targ_is_utf8) {
747 /* Upgrade targ to UTF8, and then we reduce it to
748 a problem we have a simple solution for.
749 Don't need get magic. */
750 sv_utf8_upgrade_nomg(PL_formtarget);
752 /* re-calculate linemark */
753 s = (U8*)SvPVX(PL_formtarget);
754 /* the bytes we initially allocated to append the
755 * whole line may have been gobbled up during the
756 * upgrade, so allocate a whole new line's worth
761 linemark = s - (U8*)SvPVX(PL_formtarget);
763 /* Easy. They agree. */
764 assert (item_is_utf8 == targ_is_utf8);
767 /* @* and ^* are the only things that can exceed
768 * the linemax, so grow by the output size, plus
769 * a whole new form's worth in case of any further
771 grow = linemax + to_copy;
773 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
774 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
776 Copy(source, t, to_copy, char);
778 /* blank out ~ or control chars, depending on trans.
779 * works on bytes not chars, so relies on not
780 * matching utf8 continuation bytes */
782 U8 *send = s + to_copy;
785 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
792 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
798 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
800 #if defined(USE_LONG_DOUBLE)
802 ((arg & FORM_NUM_POINT) ?
803 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
806 ((arg & FORM_NUM_POINT) ?
807 "%#0*.*f" : "%0*.*f");
811 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
813 #if defined(USE_LONG_DOUBLE)
815 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
818 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
821 /* If the field is marked with ^ and the value is undefined,
823 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
831 /* overflow evidence */
832 if (num_overflow(value, fieldsize, arg)) {
838 /* Formats aren't yet marked for locales, so assume "yes". */
840 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
841 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
842 /* we generate fmt ourselves so it is safe */
843 GCC_DIAG_IGNORE(-Wformat-nonliteral);
844 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
846 RESTORE_LC_NUMERIC();
851 case FF_NEWLINE: /* delete trailing spaces, then append \n */
853 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
858 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
861 if (arg) { /* repeat until fields exhausted? */
867 t = SvPVX(PL_formtarget) + linemark;
872 case FF_MORE: /* replace long end of string with '...' */
874 const char *s = chophere;
875 const char *send = item + len;
877 while (isSPACE(*s) && (s < send))
882 arg = fieldsize - itemsize;
889 if (strnEQ(s1," ",3)) {
890 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
900 case FF_END: /* tidy up, then return */
902 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
904 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
906 SvUTF8_on(PL_formtarget);
907 FmLINES(PL_formtarget) += lines;
909 if (fpc[-1] == FF_BLANK)
910 RETURNOP(cLISTOP->op_first);
922 if (PL_stack_base + *PL_markstack_ptr == SP) {
924 if (GIMME_V == G_SCALAR)
926 RETURNOP(PL_op->op_next->op_next);
928 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
929 Perl_pp_pushmark(aTHX); /* push dst */
930 Perl_pp_pushmark(aTHX); /* push src */
931 ENTER_with_name("grep"); /* enter outer scope */
934 if (PL_op->op_private & OPpGREP_LEX)
935 SAVESPTR(PAD_SVl(PL_op->op_targ));
938 ENTER_with_name("grep_item"); /* enter inner scope */
941 src = PL_stack_base[*PL_markstack_ptr];
943 assert(!IS_PADGV(src));
944 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
948 if (PL_op->op_private & OPpGREP_LEX)
949 PAD_SVl(PL_op->op_targ) = src;
954 if (PL_op->op_type == OP_MAPSTART)
955 Perl_pp_pushmark(aTHX); /* push top */
956 return ((LOGOP*)PL_op->op_next)->op_other;
962 const I32 gimme = GIMME_V;
963 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
969 /* first, move source pointer to the next item in the source list */
970 ++PL_markstack_ptr[-1];
972 /* if there are new items, push them into the destination list */
973 if (items && gimme != G_VOID) {
974 /* might need to make room back there first */
975 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
976 /* XXX this implementation is very pessimal because the stack
977 * is repeatedly extended for every set of items. Is possible
978 * to do this without any stack extension or copying at all
979 * by maintaining a separate list over which the map iterates
980 * (like foreach does). --gsar */
982 /* everything in the stack after the destination list moves
983 * towards the end the stack by the amount of room needed */
984 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
986 /* items to shift up (accounting for the moved source pointer) */
987 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
989 /* This optimization is by Ben Tilly and it does
990 * things differently from what Sarathy (gsar)
991 * is describing. The downside of this optimization is
992 * that leaves "holes" (uninitialized and hopefully unused areas)
993 * to the Perl stack, but on the other hand this
994 * shouldn't be a problem. If Sarathy's idea gets
995 * implemented, this optimization should become
996 * irrelevant. --jhi */
998 shift = count; /* Avoid shifting too often --Ben Tilly */
1002 dst = (SP += shift);
1003 PL_markstack_ptr[-1] += shift;
1004 *PL_markstack_ptr += shift;
1008 /* copy the new items down to the destination list */
1009 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1010 if (gimme == G_ARRAY) {
1011 /* add returned items to the collection (making mortal copies
1012 * if necessary), then clear the current temps stack frame
1013 * *except* for those items. We do this splicing the items
1014 * into the start of the tmps frame (so some items may be on
1015 * the tmps stack twice), then moving PL_tmps_floor above
1016 * them, then freeing the frame. That way, the only tmps that
1017 * accumulate over iterations are the return values for map.
1018 * We have to do to this way so that everything gets correctly
1019 * freed if we die during the map.
1023 /* make space for the slice */
1024 EXTEND_MORTAL(items);
1025 tmpsbase = PL_tmps_floor + 1;
1026 Move(PL_tmps_stack + tmpsbase,
1027 PL_tmps_stack + tmpsbase + items,
1028 PL_tmps_ix - PL_tmps_floor,
1030 PL_tmps_ix += items;
1035 sv = sv_mortalcopy(sv);
1037 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1039 /* clear the stack frame except for the items */
1040 PL_tmps_floor += items;
1042 /* FREETMPS may have cleared the TEMP flag on some of the items */
1045 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1048 /* scalar context: we don't care about which values map returns
1049 * (we use undef here). And so we certainly don't want to do mortal
1050 * copies of meaningless values. */
1051 while (items-- > 0) {
1053 *dst-- = &PL_sv_undef;
1061 LEAVE_with_name("grep_item"); /* exit inner scope */
1064 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1066 (void)POPMARK; /* pop top */
1067 LEAVE_with_name("grep"); /* exit outer scope */
1068 (void)POPMARK; /* pop src */
1069 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1070 (void)POPMARK; /* pop dst */
1071 SP = PL_stack_base + POPMARK; /* pop original mark */
1072 if (gimme == G_SCALAR) {
1073 if (PL_op->op_private & OPpGREP_LEX) {
1074 SV* sv = sv_newmortal();
1075 sv_setiv(sv, items);
1083 else if (gimme == G_ARRAY)
1090 ENTER_with_name("grep_item"); /* enter inner scope */
1093 /* set $_ to the new source item */
1094 src = PL_stack_base[PL_markstack_ptr[-1]];
1095 if (SvPADTMP(src)) {
1096 assert(!IS_PADGV(src));
1097 src = sv_mortalcopy(src);
1100 if (PL_op->op_private & OPpGREP_LEX)
1101 PAD_SVl(PL_op->op_targ) = src;
1105 RETURNOP(cLOGOP->op_other);
1114 if (GIMME == G_ARRAY)
1116 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1117 return cLOGOP->op_other;
1127 if (GIMME == G_ARRAY) {
1128 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1132 SV * const targ = PAD_SV(PL_op->op_targ);
1135 if (PL_op->op_private & OPpFLIP_LINENUM) {
1136 if (GvIO(PL_last_in_gv)) {
1137 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1140 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1142 flip = SvIV(sv) == SvIV(GvSV(gv));
1148 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1149 if (PL_op->op_flags & OPf_SPECIAL) {
1157 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1160 sv_setpvs(TARG, "");
1166 /* This code tries to decide if "$left .. $right" should use the
1167 magical string increment, or if the range is numeric (we make
1168 an exception for .."0" [#18165]). AMS 20021031. */
1170 #define RANGE_IS_NUMERIC(left,right) ( \
1171 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1172 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1173 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1174 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1175 && (!SvOK(right) || looks_like_number(right))))
1181 if (GIMME == G_ARRAY) {
1187 if (RANGE_IS_NUMERIC(left,right)) {
1189 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1190 (SvOK(right) && (SvIOK(right)
1191 ? SvIsUV(right) && SvUV(right) > IV_MAX
1192 : SvNV_nomg(right) > IV_MAX)))
1193 DIE(aTHX_ "Range iterator outside integer range");
1194 i = SvIV_nomg(left);
1195 j = SvIV_nomg(right);
1197 /* Dance carefully around signed max. */
1198 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1201 /* The wraparound of signed integers is undefined
1202 * behavior, but here we aim for count >=1, and
1203 * negative count is just wrong. */
1208 Perl_croak(aTHX_ "Out of memory during list extend");
1215 SV * const sv = sv_2mortal(newSViv(i++));
1221 const char * const lpv = SvPV_nomg_const(left, llen);
1222 const char * const tmps = SvPV_nomg_const(right, len);
1224 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1225 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1227 if (strEQ(SvPVX_const(sv),tmps))
1229 sv = sv_2mortal(newSVsv(sv));
1236 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1240 if (PL_op->op_private & OPpFLIP_LINENUM) {
1241 if (GvIO(PL_last_in_gv)) {
1242 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1245 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1246 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1254 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1255 sv_catpvs(targ, "E0");
1265 static const char * const context_name[] = {
1267 NULL, /* CXt_WHEN never actually needs "block" */
1268 NULL, /* CXt_BLOCK never actually needs "block" */
1269 NULL, /* CXt_GIVEN never actually needs "block" */
1270 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1271 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1272 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1273 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1281 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1286 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1288 for (i = cxstack_ix; i >= 0; i--) {
1289 const PERL_CONTEXT * const cx = &cxstack[i];
1290 switch (CxTYPE(cx)) {
1296 /* diag_listed_as: Exiting subroutine via %s */
1297 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1298 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1299 if (CxTYPE(cx) == CXt_NULL)
1302 case CXt_LOOP_LAZYIV:
1303 case CXt_LOOP_LAZYSV:
1305 case CXt_LOOP_PLAIN:
1307 STRLEN cx_label_len = 0;
1308 U32 cx_label_flags = 0;
1309 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1311 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1314 (const U8*)cx_label, cx_label_len,
1315 (const U8*)label, len) == 0)
1317 (const U8*)label, len,
1318 (const U8*)cx_label, cx_label_len) == 0)
1319 : (len == cx_label_len && ((cx_label == label)
1320 || memEQ(cx_label, label, len))) )) {
1321 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1322 (long)i, cx_label));
1325 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1336 Perl_dowantarray(pTHX)
1339 const I32 gimme = block_gimme();
1340 return (gimme == G_VOID) ? G_SCALAR : gimme;
1344 Perl_block_gimme(pTHX)
1347 const I32 cxix = dopoptosub(cxstack_ix);
1351 switch (cxstack[cxix].blk_gimme) {
1359 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1361 NOT_REACHED; /* NOTREACHED */
1365 Perl_is_lvalue_sub(pTHX)
1368 const I32 cxix = dopoptosub(cxstack_ix);
1369 assert(cxix >= 0); /* We should only be called from inside subs */
1371 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1372 return CxLVAL(cxstack + cxix);
1377 /* only used by PUSHSUB */
1379 Perl_was_lvalue_sub(pTHX)
1382 const I32 cxix = dopoptosub(cxstack_ix-1);
1383 assert(cxix >= 0); /* We should only be called from inside subs */
1385 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1386 return CxLVAL(cxstack + cxix);
1392 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1397 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1399 for (i = startingblock; i >= 0; i--) {
1400 const PERL_CONTEXT * const cx = &cxstk[i];
1401 switch (CxTYPE(cx)) {
1405 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1406 * twice; the first for the normal foo() call, and the second
1407 * for a faked up re-entry into the sub to execute the
1408 * code block. Hide this faked entry from the world. */
1409 if (cx->cx_type & CXp_SUB_RE_FAKE)
1414 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1422 S_dopoptoeval(pTHX_ I32 startingblock)
1426 for (i = startingblock; i >= 0; i--) {
1427 const PERL_CONTEXT *cx = &cxstack[i];
1428 switch (CxTYPE(cx)) {
1432 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1440 S_dopoptoloop(pTHX_ I32 startingblock)
1444 for (i = startingblock; i >= 0; i--) {
1445 const PERL_CONTEXT * const cx = &cxstack[i];
1446 switch (CxTYPE(cx)) {
1452 /* diag_listed_as: Exiting subroutine via %s */
1453 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1454 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1455 if ((CxTYPE(cx)) == CXt_NULL)
1458 case CXt_LOOP_LAZYIV:
1459 case CXt_LOOP_LAZYSV:
1461 case CXt_LOOP_PLAIN:
1462 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1470 S_dopoptogiven(pTHX_ I32 startingblock)
1474 for (i = startingblock; i >= 0; i--) {
1475 const PERL_CONTEXT *cx = &cxstack[i];
1476 switch (CxTYPE(cx)) {
1480 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1482 case CXt_LOOP_PLAIN:
1483 assert(!CxFOREACHDEF(cx));
1485 case CXt_LOOP_LAZYIV:
1486 case CXt_LOOP_LAZYSV:
1488 if (CxFOREACHDEF(cx)) {
1489 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1498 S_dopoptowhen(pTHX_ I32 startingblock)
1502 for (i = startingblock; i >= 0; i--) {
1503 const PERL_CONTEXT *cx = &cxstack[i];
1504 switch (CxTYPE(cx)) {
1508 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1516 Perl_dounwind(pTHX_ I32 cxix)
1521 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1524 while (cxstack_ix > cxix) {
1526 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1527 DEBUG_CX("UNWIND"); \
1528 /* Note: we don't need to restore the base context info till the end. */
1529 switch (CxTYPE(cx)) {
1532 continue; /* not break */
1540 case CXt_LOOP_LAZYIV:
1541 case CXt_LOOP_LAZYSV:
1543 case CXt_LOOP_PLAIN:
1554 PERL_UNUSED_VAR(optype);
1558 Perl_qerror(pTHX_ SV *err)
1562 PERL_ARGS_ASSERT_QERROR;
1565 if (PL_in_eval & EVAL_KEEPERR) {
1566 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1570 sv_catsv(ERRSV, err);
1573 sv_catsv(PL_errors, err);
1575 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1577 ++PL_parser->error_count;
1581 Perl_die_unwind(pTHX_ SV *msv)
1584 SV *exceptsv = sv_mortalcopy(msv);
1585 U8 in_eval = PL_in_eval;
1586 PERL_ARGS_ASSERT_DIE_UNWIND;
1593 * Historically, perl used to set ERRSV ($@) early in the die
1594 * process and rely on it not getting clobbered during unwinding.
1595 * That sucked, because it was liable to get clobbered, so the
1596 * setting of ERRSV used to emit the exception from eval{} has
1597 * been moved to much later, after unwinding (see just before
1598 * JMPENV_JUMP below). However, some modules were relying on the
1599 * early setting, by examining $@ during unwinding to use it as
1600 * a flag indicating whether the current unwinding was caused by
1601 * an exception. It was never a reliable flag for that purpose,
1602 * being totally open to false positives even without actual
1603 * clobberage, but was useful enough for production code to
1604 * semantically rely on it.
1606 * We'd like to have a proper introspective interface that
1607 * explicitly describes the reason for whatever unwinding
1608 * operations are currently in progress, so that those modules
1609 * work reliably and $@ isn't further overloaded. But we don't
1610 * have one yet. In its absence, as a stopgap measure, ERRSV is
1611 * now *additionally* set here, before unwinding, to serve as the
1612 * (unreliable) flag that it used to.
1614 * This behaviour is temporary, and should be removed when a
1615 * proper way to detect exceptional unwinding has been developed.
1616 * As of 2010-12, the authors of modules relying on the hack
1617 * are aware of the issue, because the modules failed on
1618 * perls 5.13.{1..7} which had late setting of $@ without this
1619 * early-setting hack.
1621 if (!(in_eval & EVAL_KEEPERR)) {
1622 SvTEMP_off(exceptsv);
1623 sv_setsv(ERRSV, exceptsv);
1626 if (in_eval & EVAL_KEEPERR) {
1627 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1631 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1632 && PL_curstackinfo->si_prev)
1644 JMPENV *restartjmpenv;
1647 if (cxix < cxstack_ix)
1650 POPBLOCK(cx,PL_curpm);
1651 if (CxTYPE(cx) != CXt_EVAL) {
1653 const char* message = SvPVx_const(exceptsv, msglen);
1654 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1655 PerlIO_write(Perl_error_log, message, msglen);
1659 namesv = cx->blk_eval.old_namesv;
1660 oldcop = cx->blk_oldcop;
1661 restartjmpenv = cx->blk_eval.cur_top_env;
1662 restartop = cx->blk_eval.retop;
1664 if (gimme == G_SCALAR)
1665 *++newsp = &PL_sv_undef;
1666 PL_stack_sp = newsp;
1670 /* LEAVE could clobber PL_curcop (see save_re_context())
1671 * XXX it might be better to find a way to avoid messing with
1672 * PL_curcop in save_re_context() instead, but this is a more
1673 * minimal fix --GSAR */
1676 if (optype == OP_REQUIRE) {
1677 (void)hv_store(GvHVn(PL_incgv),
1678 SvPVX_const(namesv),
1679 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1681 /* note that unlike pp_entereval, pp_require isn't
1682 * supposed to trap errors. So now that we've popped the
1683 * EVAL that pp_require pushed, and processed the error
1684 * message, rethrow the error */
1685 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1686 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1689 if (!(in_eval & EVAL_KEEPERR))
1690 sv_setsv(ERRSV, exceptsv);
1691 PL_restartjmpenv = restartjmpenv;
1692 PL_restartop = restartop;
1694 assert(0); /* NOTREACHED */
1698 write_to_stderr(exceptsv);
1700 assert(0); /* NOTREACHED */
1705 dVAR; dSP; dPOPTOPssrl;
1706 if (SvTRUE(left) != SvTRUE(right))
1714 =head1 CV Manipulation Functions
1716 =for apidoc caller_cx
1718 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1719 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1720 information returned to Perl by C<caller>. Note that XSUBs don't get a
1721 stack frame, so C<caller_cx(0, NULL)> will return information for the
1722 immediately-surrounding Perl code.
1724 This function skips over the automatic calls to C<&DB::sub> made on the
1725 behalf of the debugger. If the stack frame requested was a sub called by
1726 C<DB::sub>, the return value will be the frame for the call to
1727 C<DB::sub>, since that has the correct line number/etc. for the call
1728 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1729 frame for the sub call itself.
1734 const PERL_CONTEXT *
1735 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1737 I32 cxix = dopoptosub(cxstack_ix);
1738 const PERL_CONTEXT *cx;
1739 const PERL_CONTEXT *ccstack = cxstack;
1740 const PERL_SI *top_si = PL_curstackinfo;
1743 /* we may be in a higher stacklevel, so dig down deeper */
1744 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1745 top_si = top_si->si_prev;
1746 ccstack = top_si->si_cxstack;
1747 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1751 /* caller() should not report the automatic calls to &DB::sub */
1752 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1753 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1757 cxix = dopoptosub_at(ccstack, cxix - 1);
1760 cx = &ccstack[cxix];
1761 if (dbcxp) *dbcxp = cx;
1763 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1764 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1765 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1766 field below is defined for any cx. */
1767 /* caller() should not report the automatic calls to &DB::sub */
1768 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1769 cx = &ccstack[dbcxix];
1779 const PERL_CONTEXT *cx;
1780 const PERL_CONTEXT *dbcx;
1782 const HEK *stash_hek;
1784 bool has_arg = MAXARG && TOPs;
1793 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1795 if (GIMME != G_ARRAY) {
1803 assert(CopSTASH(cx->blk_oldcop));
1804 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1805 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1807 if (GIMME != G_ARRAY) {
1810 PUSHs(&PL_sv_undef);
1813 sv_sethek(TARG, stash_hek);
1822 PUSHs(&PL_sv_undef);
1825 sv_sethek(TARG, stash_hek);
1828 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1829 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1830 cx->blk_sub.retop, TRUE);
1832 lcop = cx->blk_oldcop;
1833 mPUSHi((I32)CopLINE(lcop));
1836 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1837 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1838 /* So is ccstack[dbcxix]. */
1839 if (cvgv && isGV(cvgv)) {
1840 SV * const sv = newSV(0);
1841 gv_efullname3(sv, cvgv, NULL);
1843 PUSHs(boolSV(CxHASARGS(cx)));
1846 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1847 PUSHs(boolSV(CxHASARGS(cx)));
1851 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1854 gimme = (I32)cx->blk_gimme;
1855 if (gimme == G_VOID)
1856 PUSHs(&PL_sv_undef);
1858 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1859 if (CxTYPE(cx) == CXt_EVAL) {
1861 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1862 SV *cur_text = cx->blk_eval.cur_text;
1863 if (SvCUR(cur_text) >= 2) {
1864 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1865 SvUTF8(cur_text)|SVs_TEMP));
1868 /* I think this is will always be "", but be sure */
1869 PUSHs(sv_2mortal(newSVsv(cur_text)));
1875 else if (cx->blk_eval.old_namesv) {
1876 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1879 /* eval BLOCK (try blocks have old_namesv == 0) */
1881 PUSHs(&PL_sv_undef);
1882 PUSHs(&PL_sv_undef);
1886 PUSHs(&PL_sv_undef);
1887 PUSHs(&PL_sv_undef);
1889 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1890 && CopSTASH_eq(PL_curcop, PL_debstash))
1892 AV * const ary = cx->blk_sub.argarray;
1893 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1895 Perl_init_dbargs(aTHX);
1897 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1898 av_extend(PL_dbargs, AvFILLp(ary) + off);
1899 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1900 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1902 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1905 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1907 if (old_warnings == pWARN_NONE)
1908 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1909 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1910 mask = &PL_sv_undef ;
1911 else if (old_warnings == pWARN_ALL ||
1912 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1913 /* Get the bit mask for $warnings::Bits{all}, because
1914 * it could have been extended by warnings::register */
1916 HV * const bits = get_hv("warnings::Bits", 0);
1917 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1918 mask = newSVsv(*bits_all);
1921 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1925 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1929 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1930 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1941 if (MAXARG < 1 || (!TOPs && !POPs))
1942 tmps = NULL, len = 0;
1944 tmps = SvPVx_const(POPs, len);
1945 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1950 /* like pp_nextstate, but used instead when the debugger is active */
1955 PL_curcop = (COP*)PL_op;
1956 TAINT_NOT; /* Each statement is presumed innocent */
1957 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1962 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1963 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1967 const I32 gimme = G_ARRAY;
1969 GV * const gv = PL_DBgv;
1972 if (gv && isGV_with_GP(gv))
1975 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1976 DIE(aTHX_ "No DB::DB routine defined");
1978 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1979 /* don't do recursive DB::DB call */
1993 (void)(*CvXSUB(cv))(aTHX_ cv);
1999 PUSHBLOCK(cx, CXt_SUB, SP);
2001 cx->blk_sub.retop = PL_op->op_next;
2003 if (CvDEPTH(cv) >= 2) {
2004 PERL_STACK_OVERFLOW_CHECK();
2005 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2008 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2009 RETURNOP(CvSTART(cv));
2016 /* SVs on the stack that have any of the flags passed in are left as is.
2017 Other SVs are protected via the mortals stack if lvalue is true, and
2018 copied otherwise. */
2021 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2022 U32 flags, bool lvalue)
2025 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2027 if (flags & SVs_PADTMP) {
2028 flags &= ~SVs_PADTMP;
2031 if (gimme == G_SCALAR) {
2033 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2036 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2037 : sv_mortalcopy(*SP);
2039 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2042 *++MARK = &PL_sv_undef;
2046 else if (gimme == G_ARRAY) {
2047 /* in case LEAVE wipes old return values */
2048 while (++MARK <= SP) {
2049 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2053 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2054 : sv_mortalcopy(*MARK);
2055 TAINT_NOT; /* Each item is independent */
2058 /* When this function was called with MARK == newsp, we reach this
2059 * point with SP == newsp. */
2069 I32 gimme = GIMME_V;
2071 ENTER_with_name("block");
2074 PUSHBLOCK(cx, CXt_BLOCK, SP);
2087 if (PL_op->op_flags & OPf_SPECIAL) {
2088 cx = &cxstack[cxstack_ix];
2089 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2094 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2097 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2098 PL_op->op_private & OPpLVALUE);
2099 PL_curpm = newpm; /* Don't pop $1 et al till now */
2101 LEAVE_with_name("block");
2110 const I32 gimme = GIMME_V;
2111 void *itervar; /* location of the iteration variable */
2112 U8 cxtype = CXt_LOOP_FOR;
2114 ENTER_with_name("loop1");
2117 if (PL_op->op_targ) { /* "my" variable */
2118 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2119 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2120 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2121 SVs_PADSTALE, SVs_PADSTALE);
2123 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2125 itervar = PL_comppad;
2127 itervar = &PAD_SVl(PL_op->op_targ);
2130 else { /* symbol table variable */
2131 GV * const gv = MUTABLE_GV(POPs);
2132 SV** svp = &GvSV(gv);
2133 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2135 itervar = (void *)gv;
2138 if (PL_op->op_private & OPpITER_DEF)
2139 cxtype |= CXp_FOR_DEF;
2141 ENTER_with_name("loop2");
2143 PUSHBLOCK(cx, cxtype, SP);
2144 PUSHLOOP_FOR(cx, itervar, MARK);
2145 if (PL_op->op_flags & OPf_STACKED) {
2146 SV *maybe_ary = POPs;
2147 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2149 SV * const right = maybe_ary;
2152 if (RANGE_IS_NUMERIC(sv,right)) {
2153 cx->cx_type &= ~CXTYPEMASK;
2154 cx->cx_type |= CXt_LOOP_LAZYIV;
2155 /* Make sure that no-one re-orders cop.h and breaks our
2157 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2158 #ifdef NV_PRESERVES_UV
2159 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2160 (SvNV_nomg(sv) > (NV)IV_MAX)))
2162 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2163 (SvNV_nomg(right) < (NV)IV_MIN))))
2165 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2167 ((SvNV_nomg(sv) > 0) &&
2168 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2169 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2171 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2173 ((SvNV_nomg(right) > 0) &&
2174 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2175 (SvNV_nomg(right) > (NV)UV_MAX))
2178 DIE(aTHX_ "Range iterator outside integer range");
2179 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2180 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2182 /* for correct -Dstv display */
2183 cx->blk_oldsp = sp - PL_stack_base;
2187 cx->cx_type &= ~CXTYPEMASK;
2188 cx->cx_type |= CXt_LOOP_LAZYSV;
2189 /* Make sure that no-one re-orders cop.h and breaks our
2191 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2192 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2193 cx->blk_loop.state_u.lazysv.end = right;
2194 SvREFCNT_inc(right);
2195 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2196 /* This will do the upgrade to SVt_PV, and warn if the value
2197 is uninitialised. */
2198 (void) SvPV_nolen_const(right);
2199 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2200 to replace !SvOK() with a pointer to "". */
2202 SvREFCNT_dec(right);
2203 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2207 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2208 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2209 SvREFCNT_inc(maybe_ary);
2210 cx->blk_loop.state_u.ary.ix =
2211 (PL_op->op_private & OPpITER_REVERSED) ?
2212 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2216 else { /* iterating over items on the stack */
2217 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2218 if (PL_op->op_private & OPpITER_REVERSED) {
2219 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2222 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2233 const I32 gimme = GIMME_V;
2235 ENTER_with_name("loop1");
2237 ENTER_with_name("loop2");
2239 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2240 PUSHLOOP_PLAIN(cx, SP);
2255 assert(CxTYPE_is_LOOP(cx));
2257 newsp = PL_stack_base + cx->blk_loop.resetsp;
2260 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2261 PL_op->op_private & OPpLVALUE);
2264 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2265 PL_curpm = newpm; /* ... and pop $1 et al */
2267 LEAVE_with_name("loop2");
2268 LEAVE_with_name("loop1");
2274 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2275 PERL_CONTEXT *cx, PMOP *newpm)
2277 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2278 if (gimme == G_SCALAR) {
2279 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2281 const char *what = NULL;
2283 assert(MARK+1 == SP);
2284 if ((SvPADTMP(TOPs) ||
2285 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2288 !SvSMAGICAL(TOPs)) {
2290 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2291 : "a readonly value" : "a temporary";
2296 /* sub:lvalue{} will take us here. */
2305 "Can't return %s from lvalue subroutine", what
2310 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2311 if (!SvPADTMP(*SP)) {
2312 *++newsp = SvREFCNT_inc(*SP);
2317 /* FREETMPS could clobber it */
2318 SV *sv = SvREFCNT_inc(*SP);
2320 *++newsp = sv_mortalcopy(sv);
2327 ? sv_mortalcopy(*SP)
2329 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2334 *++newsp = &PL_sv_undef;
2336 if (CxLVAL(cx) & OPpDEREF) {
2339 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2343 else if (gimme == G_ARRAY) {
2344 assert (!(CxLVAL(cx) & OPpDEREF));
2345 if (ref || !CxLVAL(cx))
2346 while (++MARK <= SP)
2348 SvFLAGS(*MARK) & SVs_PADTMP
2349 ? sv_mortalcopy(*MARK)
2352 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2353 else while (++MARK <= SP) {
2354 if (*MARK != &PL_sv_undef
2356 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2361 /* Might be flattened array after $#array = */
2368 /* diag_listed_as: Can't return %s from lvalue subroutine */
2370 "Can't return a %s from lvalue subroutine",
2371 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2377 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2380 PL_stack_sp = newsp;
2387 bool popsub2 = FALSE;
2388 bool clear_errsv = FALSE;
2398 const I32 cxix = dopoptosub(cxstack_ix);
2401 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2402 * sort block, which is a CXt_NULL
2405 PL_stack_base[1] = *PL_stack_sp;
2406 PL_stack_sp = PL_stack_base + 1;
2410 DIE(aTHX_ "Can't return outside a subroutine");
2412 if (cxix < cxstack_ix)
2415 if (CxMULTICALL(&cxstack[cxix])) {
2416 gimme = cxstack[cxix].blk_gimme;
2417 if (gimme == G_VOID)
2418 PL_stack_sp = PL_stack_base;
2419 else if (gimme == G_SCALAR) {
2420 PL_stack_base[1] = *PL_stack_sp;
2421 PL_stack_sp = PL_stack_base + 1;
2427 switch (CxTYPE(cx)) {
2430 lval = !!CvLVALUE(cx->blk_sub.cv);
2431 retop = cx->blk_sub.retop;
2432 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2435 if (!(PL_in_eval & EVAL_KEEPERR))
2438 namesv = cx->blk_eval.old_namesv;
2439 retop = cx->blk_eval.retop;
2442 if (optype == OP_REQUIRE &&
2443 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2445 /* Unassume the success we assumed earlier. */
2446 (void)hv_delete(GvHVn(PL_incgv),
2447 SvPVX_const(namesv),
2448 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2450 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2454 retop = cx->blk_sub.retop;
2458 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2462 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2464 if (gimme == G_SCALAR) {
2467 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2468 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2469 && !SvMAGICAL(TOPs)) {
2470 *++newsp = SvREFCNT_inc(*SP);
2475 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2477 *++newsp = sv_mortalcopy(sv);
2481 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2482 && !SvMAGICAL(*SP)) {
2486 *++newsp = sv_mortalcopy(*SP);
2489 *++newsp = sv_mortalcopy(*SP);
2492 *++newsp = &PL_sv_undef;
2494 else if (gimme == G_ARRAY) {
2495 while (++MARK <= SP) {
2496 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2497 && !SvGMAGICAL(*MARK)
2498 ? *MARK : sv_mortalcopy(*MARK);
2499 TAINT_NOT; /* Each item is independent */
2502 PL_stack_sp = newsp;
2506 /* Stack values are safe: */
2509 POPSUB(cx,sv); /* release CV and @_ ... */
2513 PL_curpm = newpm; /* ... and pop $1 et al */
2522 /* This duplicates parts of pp_leavesub, so that it can share code with
2533 if (CxMULTICALL(&cxstack[cxstack_ix]))
2537 cxstack_ix++; /* temporarily protect top context */
2541 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2544 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2546 PL_curpm = newpm; /* ... and pop $1 et al */
2549 return cx->blk_sub.retop;
2553 S_unwind_loop(pTHX_ const char * const opname)
2557 if (PL_op->op_flags & OPf_SPECIAL) {
2558 cxix = dopoptoloop(cxstack_ix);
2560 /* diag_listed_as: Can't "last" outside a loop block */
2561 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2566 const char * const label =
2567 PL_op->op_flags & OPf_STACKED
2568 ? SvPV(TOPs,label_len)
2569 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2570 const U32 label_flags =
2571 PL_op->op_flags & OPf_STACKED
2573 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2575 cxix = dopoptolabel(label, label_len, label_flags);
2577 /* diag_listed_as: Label not found for "last %s" */
2578 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2580 SVfARG(PL_op->op_flags & OPf_STACKED
2581 && !SvGMAGICAL(TOPp1s)
2583 : newSVpvn_flags(label,
2585 label_flags | SVs_TEMP)));
2587 if (cxix < cxstack_ix)
2604 S_unwind_loop(aTHX_ "last");
2607 cxstack_ix++; /* temporarily protect top context */
2608 switch (CxTYPE(cx)) {
2609 case CXt_LOOP_LAZYIV:
2610 case CXt_LOOP_LAZYSV:
2612 case CXt_LOOP_PLAIN:
2614 newsp = PL_stack_base + cx->blk_loop.resetsp;
2615 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2619 nextop = cx->blk_sub.retop;
2623 nextop = cx->blk_eval.retop;
2627 nextop = cx->blk_sub.retop;
2630 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2634 PL_stack_sp = newsp;
2638 /* Stack values are safe: */
2640 case CXt_LOOP_LAZYIV:
2641 case CXt_LOOP_PLAIN:
2642 case CXt_LOOP_LAZYSV:
2644 POPLOOP(cx); /* release loop vars ... */
2648 POPSUB(cx,sv); /* release CV and @_ ... */
2651 PL_curpm = newpm; /* ... and pop $1 et al */
2654 PERL_UNUSED_VAR(optype);
2655 PERL_UNUSED_VAR(gimme);
2663 const I32 inner = PL_scopestack_ix;
2665 S_unwind_loop(aTHX_ "next");
2667 /* clear off anything above the scope we're re-entering, but
2668 * save the rest until after a possible continue block */
2670 if (PL_scopestack_ix < inner)
2671 leave_scope(PL_scopestack[PL_scopestack_ix]);
2672 PL_curcop = cx->blk_oldcop;
2674 return (cx)->blk_loop.my_op->op_nextop;
2680 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2683 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2685 if (redo_op->op_type == OP_ENTER) {
2686 /* pop one less context to avoid $x being freed in while (my $x..) */
2688 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2689 redo_op = redo_op->op_next;
2693 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2694 LEAVE_SCOPE(oldsave);
2696 PL_curcop = cx->blk_oldcop;
2702 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2706 static const char* const too_deep = "Target of goto is too deeply nested";
2708 PERL_ARGS_ASSERT_DOFINDLABEL;
2711 Perl_croak(aTHX_ "%s", too_deep);
2712 if (o->op_type == OP_LEAVE ||
2713 o->op_type == OP_SCOPE ||
2714 o->op_type == OP_LEAVELOOP ||
2715 o->op_type == OP_LEAVESUB ||
2716 o->op_type == OP_LEAVETRY)
2718 *ops++ = cUNOPo->op_first;
2720 Perl_croak(aTHX_ "%s", too_deep);
2723 if (o->op_flags & OPf_KIDS) {
2725 /* First try all the kids at this level, since that's likeliest. */
2726 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2727 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2728 STRLEN kid_label_len;
2729 U32 kid_label_flags;
2730 const char *kid_label = CopLABEL_len_flags(kCOP,
2731 &kid_label_len, &kid_label_flags);
2733 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2736 (const U8*)kid_label, kid_label_len,
2737 (const U8*)label, len) == 0)
2739 (const U8*)label, len,
2740 (const U8*)kid_label, kid_label_len) == 0)
2741 : ( len == kid_label_len && ((kid_label == label)
2742 || memEQ(kid_label, label, len)))))
2746 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2747 if (kid == PL_lastgotoprobe)
2749 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2752 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2753 ops[-1]->op_type == OP_DBSTATE)
2758 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2766 PP(pp_goto) /* also pp_dump */
2772 #define GOTO_DEPTH 64
2773 OP *enterops[GOTO_DEPTH];
2774 const char *label = NULL;
2775 STRLEN label_len = 0;
2776 U32 label_flags = 0;
2777 const bool do_dump = (PL_op->op_type == OP_DUMP);
2778 static const char* const must_have_label = "goto must have label";
2780 if (PL_op->op_flags & OPf_STACKED) {
2781 /* goto EXPR or goto &foo */
2783 SV * const sv = POPs;
2786 /* This egregious kludge implements goto &subroutine */
2787 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2790 CV *cv = MUTABLE_CV(SvRV(sv));
2791 AV *arg = GvAV(PL_defgv);
2795 if (!CvROOT(cv) && !CvXSUB(cv)) {
2796 const GV * const gv = CvGV(cv);
2800 /* autoloaded stub? */
2801 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2803 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2805 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2806 if (autogv && (cv = GvCV(autogv)))
2808 tmpstr = sv_newmortal();
2809 gv_efullname3(tmpstr, gv, NULL);
2810 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2812 DIE(aTHX_ "Goto undefined subroutine");
2815 /* First do some returnish stuff. */
2816 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2818 cxix = dopoptosub(cxstack_ix);
2819 if (cxix < cxstack_ix) {
2822 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2828 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2829 if (CxTYPE(cx) == CXt_EVAL) {
2832 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2833 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2835 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2836 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2838 else if (CxMULTICALL(cx))
2841 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2843 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2844 AV* av = cx->blk_sub.argarray;
2846 /* abandon the original @_ if it got reified or if it is
2847 the same as the current @_ */
2848 if (AvREAL(av) || av == arg) {
2852 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2854 else CLEAR_ARGARRAY(av);
2856 /* We donate this refcount later to the callee’s pad. */
2857 SvREFCNT_inc_simple_void(arg);
2858 if (CxTYPE(cx) == CXt_SUB &&
2859 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2860 SvREFCNT_dec(cx->blk_sub.cv);
2861 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2862 LEAVE_SCOPE(oldsave);
2864 /* A destructor called during LEAVE_SCOPE could have undefined
2865 * our precious cv. See bug #99850. */
2866 if (!CvROOT(cv) && !CvXSUB(cv)) {
2867 const GV * const gv = CvGV(cv);
2870 SV * const tmpstr = sv_newmortal();
2871 gv_efullname3(tmpstr, gv, NULL);
2872 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2875 DIE(aTHX_ "Goto undefined subroutine");
2878 /* Now do some callish stuff. */
2880 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2882 OP* const retop = cx->blk_sub.retop;
2885 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2886 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2889 PERL_UNUSED_VAR(newsp);
2890 PERL_UNUSED_VAR(gimme);
2892 /* put GvAV(defgv) back onto stack */
2894 EXTEND(SP, items+1); /* @_ could have been extended. */
2899 bool r = cBOOL(AvREAL(arg));
2900 for (index=0; index<items; index++)
2904 SV ** const svp = av_fetch(arg, index, 0);
2905 sv = svp ? *svp : NULL;
2907 else sv = AvARRAY(arg)[index];
2909 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2910 : sv_2mortal(newSVavdefelem(arg, index, 1));
2915 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2916 /* Restore old @_ */
2917 arg = GvAV(PL_defgv);
2918 GvAV(PL_defgv) = cx->blk_sub.savearray;
2922 /* XS subs don't have a CxSUB, so pop it */
2923 POPBLOCK(cx, PL_curpm);
2924 /* Push a mark for the start of arglist */
2927 (void)(*CvXSUB(cv))(aTHX_ cv);
2933 PADLIST * const padlist = CvPADLIST(cv);
2934 cx->blk_sub.cv = cv;
2935 cx->blk_sub.olddepth = CvDEPTH(cv);
2938 if (CvDEPTH(cv) < 2)
2939 SvREFCNT_inc_simple_void_NN(cv);
2941 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2942 sub_crush_depth(cv);
2943 pad_push(padlist, CvDEPTH(cv));
2945 PL_curcop = cx->blk_oldcop;
2947 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2950 CX_CURPAD_SAVE(cx->blk_sub);
2952 /* cx->blk_sub.argarray has no reference count, so we
2953 need something to hang on to our argument array so
2954 that cx->blk_sub.argarray does not end up pointing
2955 to freed memory as the result of undef *_. So put
2956 it in the callee’s pad, donating our refer-
2959 SvREFCNT_dec(PAD_SVl(0));
2960 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2963 /* GvAV(PL_defgv) might have been modified on scope
2964 exit, so restore it. */
2965 if (arg != GvAV(PL_defgv)) {
2966 AV * const av = GvAV(PL_defgv);
2967 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2971 else SvREFCNT_dec(arg);
2972 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2973 Perl_get_db_sub(aTHX_ NULL, cv);
2975 CV * const gotocv = get_cvs("DB::goto", 0);
2977 PUSHMARK( PL_stack_sp );
2978 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2984 RETURNOP(CvSTART(cv));
2989 label = SvPV_nomg_const(sv, label_len);
2990 label_flags = SvUTF8(sv);
2993 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2994 /* goto LABEL or dump LABEL */
2995 label = cPVOP->op_pv;
2996 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2997 label_len = strlen(label);
2999 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3004 OP *gotoprobe = NULL;
3005 bool leaving_eval = FALSE;
3006 bool in_block = FALSE;
3007 PERL_CONTEXT *last_eval_cx = NULL;
3011 PL_lastgotoprobe = NULL;
3013 for (ix = cxstack_ix; ix >= 0; ix--) {
3015 switch (CxTYPE(cx)) {
3017 leaving_eval = TRUE;
3018 if (!CxTRYBLOCK(cx)) {
3019 gotoprobe = (last_eval_cx ?
3020 last_eval_cx->blk_eval.old_eval_root :
3025 /* else fall through */
3026 case CXt_LOOP_LAZYIV:
3027 case CXt_LOOP_LAZYSV:
3029 case CXt_LOOP_PLAIN:
3032 gotoprobe = cx->blk_oldcop->op_sibling;
3038 gotoprobe = cx->blk_oldcop->op_sibling;
3041 gotoprobe = PL_main_root;
3044 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3045 gotoprobe = CvROOT(cx->blk_sub.cv);
3051 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3054 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3055 CxTYPE(cx), (long) ix);
3056 gotoprobe = PL_main_root;
3060 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3061 enterops, enterops + GOTO_DEPTH);
3064 if (gotoprobe->op_sibling &&
3065 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3066 gotoprobe->op_sibling->op_sibling) {
3067 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3068 label, label_len, label_flags, enterops,
3069 enterops + GOTO_DEPTH);
3074 PL_lastgotoprobe = gotoprobe;
3077 DIE(aTHX_ "Can't find label %"UTF8f,
3078 UTF8fARG(label_flags, label_len, label));
3080 /* if we're leaving an eval, check before we pop any frames
3081 that we're not going to punt, otherwise the error
3084 if (leaving_eval && *enterops && enterops[1]) {
3086 for (i = 1; enterops[i]; i++)
3087 if (enterops[i]->op_type == OP_ENTERITER)
3088 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3091 if (*enterops && enterops[1]) {
3092 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3094 deprecate("\"goto\" to jump into a construct");
3097 /* pop unwanted frames */
3099 if (ix < cxstack_ix) {
3103 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3106 oldsave = PL_scopestack[PL_scopestack_ix];
3107 LEAVE_SCOPE(oldsave);
3110 /* push wanted frames */
3112 if (*enterops && enterops[1]) {
3113 OP * const oldop = PL_op;
3114 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3115 for (; enterops[ix]; ix++) {
3116 PL_op = enterops[ix];
3117 /* Eventually we may want to stack the needed arguments
3118 * for each op. For now, we punt on the hard ones. */
3119 if (PL_op->op_type == OP_ENTERITER)
3120 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3121 PL_op->op_ppaddr(aTHX);
3129 if (!retop) retop = PL_main_start;
3131 PL_restartop = retop;
3132 PL_do_undump = TRUE;
3136 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3137 PL_do_undump = FALSE;
3153 anum = 0; (void)POPs;
3159 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3162 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3165 PL_exit_flags |= PERL_EXIT_EXPECTED;
3167 PUSHs(&PL_sv_undef);
3174 S_save_lines(pTHX_ AV *array, SV *sv)
3176 const char *s = SvPVX_const(sv);
3177 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3180 PERL_ARGS_ASSERT_SAVE_LINES;
3182 while (s && s < send) {
3184 SV * const tmpstr = newSV_type(SVt_PVMG);
3186 t = (const char *)memchr(s, '\n', send - s);
3192 sv_setpvn(tmpstr, s, t - s);
3193 av_store(array, line++, tmpstr);
3201 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3203 0 is used as continue inside eval,
3205 3 is used for a die caught by an inner eval - continue inner loop
3207 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3208 establish a local jmpenv to handle exception traps.
3213 S_docatch(pTHX_ OP *o)
3217 OP * const oldop = PL_op;
3221 assert(CATCH_GET == TRUE);
3228 assert(cxstack_ix >= 0);
3229 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3230 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3235 /* die caught by an inner eval - continue inner loop */
3236 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3237 PL_restartjmpenv = NULL;
3238 PL_op = PL_restartop;
3247 assert(0); /* NOTREACHED */
3256 =for apidoc find_runcv
3258 Locate the CV corresponding to the currently executing sub or eval.
3259 If db_seqp is non_null, skip CVs that are in the DB package and populate
3260 *db_seqp with the cop sequence number at the point that the DB:: code was
3261 entered. (This allows debuggers to eval in the scope of the breakpoint
3262 rather than in the scope of the debugger itself.)
3268 Perl_find_runcv(pTHX_ U32 *db_seqp)
3270 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3273 /* If this becomes part of the API, it might need a better name. */
3275 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3283 PL_curcop == &PL_compiling
3285 : PL_curcop->cop_seq;
3287 for (si = PL_curstackinfo; si; si = si->si_prev) {
3289 for (ix = si->si_cxix; ix >= 0; ix--) {
3290 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3292 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3293 cv = cx->blk_sub.cv;
3294 /* skip DB:: code */
3295 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3296 *db_seqp = cx->blk_oldcop->cop_seq;
3299 if (cx->cx_type & CXp_SUB_RE)
3302 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3303 cv = cx->blk_eval.cv;
3306 case FIND_RUNCV_padid_eq:
3308 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3311 case FIND_RUNCV_level_eq:
3312 if (level++ != arg) continue;
3320 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3324 /* Run yyparse() in a setjmp wrapper. Returns:
3325 * 0: yyparse() successful
3326 * 1: yyparse() failed
3330 S_try_yyparse(pTHX_ int gramtype)
3335 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3339 ret = yyparse(gramtype) ? 1 : 0;
3346 assert(0); /* NOTREACHED */
3353 /* Compile a require/do or an eval ''.
3355 * outside is the lexically enclosing CV (if any) that invoked us.
3356 * seq is the current COP scope value.
3357 * hh is the saved hints hash, if any.
3359 * Returns a bool indicating whether the compile was successful; if so,
3360 * PL_eval_start contains the first op of the compiled code; otherwise,
3363 * This function is called from two places: pp_require and pp_entereval.
3364 * These can be distinguished by whether PL_op is entereval.
3368 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3371 OP * const saveop = PL_op;
3372 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3373 COP * const oldcurcop = PL_curcop;
3374 bool in_require = (saveop->op_type == OP_REQUIRE);
3378 PL_in_eval = (in_require
3379 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3381 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3382 ? EVAL_RE_REPARSING : 0)));
3386 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3388 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3389 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3390 cxstack[cxstack_ix].blk_gimme = gimme;
3392 CvOUTSIDE_SEQ(evalcv) = seq;
3393 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3395 /* set up a scratch pad */
3397 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3398 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3401 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3403 /* make sure we compile in the right package */
3405 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3406 SAVEGENERICSV(PL_curstash);
3407 PL_curstash = (HV *)CopSTASH(PL_curcop);
3408 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3409 else SvREFCNT_inc_simple_void(PL_curstash);
3411 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3412 SAVESPTR(PL_beginav);
3413 PL_beginav = newAV();
3414 SAVEFREESV(PL_beginav);
3415 SAVESPTR(PL_unitcheckav);
3416 PL_unitcheckav = newAV();
3417 SAVEFREESV(PL_unitcheckav);
3420 ENTER_with_name("evalcomp");
3421 SAVESPTR(PL_compcv);
3424 /* try to compile it */
3426 PL_eval_root = NULL;
3427 PL_curcop = &PL_compiling;
3428 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3429 PL_in_eval |= EVAL_KEEPERR;
3436 hv_clear(GvHV(PL_hintgv));
3439 PL_hints = saveop->op_private & OPpEVAL_COPHH
3440 ? oldcurcop->cop_hints : saveop->op_targ;
3442 /* making 'use re eval' not be in scope when compiling the
3443 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3444 * infinite recursion when S_has_runtime_code() gives a false
3445 * positive: the second time round, HINT_RE_EVAL isn't set so we
3446 * don't bother calling S_has_runtime_code() */
3447 if (PL_in_eval & EVAL_RE_REPARSING)
3448 PL_hints &= ~HINT_RE_EVAL;
3451 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3452 SvREFCNT_dec(GvHV(PL_hintgv));
3453 GvHV(PL_hintgv) = hh;
3456 SAVECOMPILEWARNINGS();
3458 if (PL_dowarn & G_WARN_ALL_ON)
3459 PL_compiling.cop_warnings = pWARN_ALL ;
3460 else if (PL_dowarn & G_WARN_ALL_OFF)
3461 PL_compiling.cop_warnings = pWARN_NONE ;
3463 PL_compiling.cop_warnings = pWARN_STD ;
3466 PL_compiling.cop_warnings =
3467 DUP_WARNINGS(oldcurcop->cop_warnings);
3468 cophh_free(CopHINTHASH_get(&PL_compiling));
3469 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3470 /* The label, if present, is the first entry on the chain. So rather
3471 than writing a blank label in front of it (which involves an
3472 allocation), just use the next entry in the chain. */
3473 PL_compiling.cop_hints_hash
3474 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3475 /* Check the assumption that this removed the label. */
3476 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3479 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3482 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3484 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3485 * so honour CATCH_GET and trap it here if necessary */
3487 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3489 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3490 SV **newsp; /* Used by POPBLOCK. */
3492 I32 optype; /* Used by POPEVAL. */
3498 PERL_UNUSED_VAR(newsp);
3499 PERL_UNUSED_VAR(optype);
3501 /* note that if yystatus == 3, then the EVAL CX block has already
3502 * been popped, and various vars restored */
3504 if (yystatus != 3) {
3506 op_free(PL_eval_root);
3507 PL_eval_root = NULL;
3509 SP = PL_stack_base + POPMARK; /* pop original mark */
3510 POPBLOCK(cx,PL_curpm);
3512 namesv = cx->blk_eval.old_namesv;
3513 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3514 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3520 /* If cx is still NULL, it means that we didn't go in the
3521 * POPEVAL branch. */
3522 cx = &cxstack[cxstack_ix];
3523 assert(CxTYPE(cx) == CXt_EVAL);
3524 namesv = cx->blk_eval.old_namesv;
3526 (void)hv_store(GvHVn(PL_incgv),
3527 SvPVX_const(namesv),
3528 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3530 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3533 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3536 if (!*(SvPV_nolen_const(errsv))) {
3537 sv_setpvs(errsv, "Compilation error");
3540 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3545 LEAVE_with_name("evalcomp");
3547 CopLINE_set(&PL_compiling, 0);
3548 SAVEFREEOP(PL_eval_root);
3549 cv_forget_slab(evalcv);
3551 DEBUG_x(dump_eval());
3553 /* Register with debugger: */
3554 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3555 CV * const cv = get_cvs("DB::postponed", 0);
3559 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3561 call_sv(MUTABLE_SV(cv), G_DISCARD);
3565 if (PL_unitcheckav) {
3566 OP *es = PL_eval_start;
3567 call_list(PL_scopestack_ix, PL_unitcheckav);
3571 /* compiled okay, so do it */
3573 CvDEPTH(evalcv) = 1;
3574 SP = PL_stack_base + POPMARK; /* pop original mark */
3575 PL_op = saveop; /* The caller may need it. */
3576 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3583 S_check_type_and_open(pTHX_ SV *name)
3587 const char *p = SvPV_const(name, len);
3590 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3592 /* checking here captures a reasonable error message when
3593 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3594 * user gets a confusing message about looking for the .pmc file
3595 * rather than for the .pm file.
3596 * This check prevents a \0 in @INC causing problems.
3598 if (!IS_SAFE_PATHNAME(p, len, "require"))
3601 /* we use the value of errno later to see how stat() or open() failed.
3602 * We don't want it set if the stat succeeded but we still failed,
3603 * such as if the name exists, but is a directory */
3606 st_rc = PerlLIO_stat(p, &st);
3608 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3612 #if !defined(PERLIO_IS_STDIO)
3613 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3615 return PerlIO_open(p, PERL_SCRIPT_MODE);
3619 #ifndef PERL_DISABLE_PMC
3621 S_doopen_pm(pTHX_ SV *name)
3624 const char *p = SvPV_const(name, namelen);
3626 PERL_ARGS_ASSERT_DOOPEN_PM;
3628 /* check the name before trying for the .pmc name to avoid the
3629 * warning referring to the .pmc which the user probably doesn't
3630 * know or care about
3632 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3635 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3636 SV *const pmcsv = sv_newmortal();
3639 SvSetSV_nosteal(pmcsv,name);
3640 sv_catpvs(pmcsv, "c");
3642 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3643 return check_type_and_open(pmcsv);
3645 return check_type_and_open(name);
3648 # define doopen_pm(name) check_type_and_open(name)
3649 #endif /* !PERL_DISABLE_PMC */
3651 /* require doesn't search for absolute names, or when the name is
3652 explicity relative the current directory */
3653 PERL_STATIC_INLINE bool
3654 S_path_is_searchable(const char *name)
3656 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3658 if (PERL_FILE_IS_ABSOLUTE(name)
3660 || (*name == '.' && ((name[1] == '/' ||
3661 (name[1] == '.' && name[2] == '/'))
3662 || (name[1] == '\\' ||
3663 ( name[1] == '.' && name[2] == '\\')))
3666 || (*name == '.' && (name[1] == '/' ||
3667 (name[1] == '.' && name[2] == '/')))
3687 int vms_unixname = 0;
3690 const char *tryname = NULL;
3692 const I32 gimme = GIMME_V;
3693 int filter_has_file = 0;
3694 PerlIO *tryrsfp = NULL;
3695 SV *filter_cache = NULL;
3696 SV *filter_state = NULL;
3697 SV *filter_sub = NULL;
3702 bool path_searchable;
3705 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3706 sv = sv_2mortal(new_version(sv));
3707 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3708 upg_version(PL_patchlevel, TRUE);
3709 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3710 if ( vcmp(sv,PL_patchlevel) <= 0 )
3711 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3712 SVfARG(sv_2mortal(vnormal(sv))),
3713 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3717 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3720 SV * const req = SvRV(sv);
3721 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3723 /* get the left hand term */
3724 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3726 first = SvIV(*av_fetch(lav,0,0));
3727 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3728 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3729 || av_tindex(lav) > 1 /* FP with > 3 digits */
3730 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3732 DIE(aTHX_ "Perl %"SVf" required--this is only "
3734 SVfARG(sv_2mortal(vnormal(req))),
3735 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3738 else { /* probably 'use 5.10' or 'use 5.8' */
3742 if (av_tindex(lav)>=1)
3743 second = SvIV(*av_fetch(lav,1,0));
3745 second /= second >= 600 ? 100 : 10;
3746 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3747 (int)first, (int)second);
3748 upg_version(hintsv, TRUE);
3750 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3751 "--this is only %"SVf", stopped",
3752 SVfARG(sv_2mortal(vnormal(req))),
3753 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3754 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3762 name = SvPV_const(sv, len);
3763 if (!(name && len > 0 && *name))
3764 DIE(aTHX_ "Null filename used");
3765 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3766 DIE(aTHX_ "Can't locate %s: %s",
3767 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3768 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3771 TAINT_PROPER("require");
3773 path_searchable = path_is_searchable(name);
3776 /* The key in the %ENV hash is in the syntax of file passed as the argument
3777 * usually this is in UNIX format, but sometimes in VMS format, which
3778 * can result in a module being pulled in more than once.
3779 * To prevent this, the key must be stored in UNIX format if the VMS
3780 * name can be translated to UNIX.
3784 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3786 unixlen = strlen(unixname);
3792 /* if not VMS or VMS name can not be translated to UNIX, pass it
3795 unixname = (char *) name;
3798 if (PL_op->op_type == OP_REQUIRE) {
3799 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3800 unixname, unixlen, 0);
3802 if (*svp != &PL_sv_undef)
3805 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3806 "Compilation failed in require", unixname);
3810 LOADING_FILE_PROBE(unixname);
3812 /* prepare to compile file */
3814 if (!path_searchable) {
3815 /* At this point, name is SvPVX(sv) */
3817 tryrsfp = doopen_pm(sv);
3819 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3820 AV * const ar = GvAVn(PL_incgv);
3827 namesv = newSV_type(SVt_PV);
3828 for (i = 0; i <= AvFILL(ar); i++) {
3829 SV * const dirsv = *av_fetch(ar, i, TRUE);
3837 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3838 && !SvOBJECT(SvRV(loader)))
3840 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3844 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3845 PTR2UV(SvRV(dirsv)), name);
3846 tryname = SvPVX_const(namesv);
3849 if (SvPADTMP(nsv)) {
3850 nsv = sv_newmortal();
3851 SvSetSV_nosteal(nsv,sv);
3854 ENTER_with_name("call_INC");
3862 if (SvGMAGICAL(loader)) {
3863 SV *l = sv_newmortal();
3864 sv_setsv_nomg(l, loader);
3867 if (sv_isobject(loader))
3868 count = call_method("INC", G_ARRAY);
3870 count = call_sv(loader, G_ARRAY);
3880 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3881 && !isGV_with_GP(SvRV(arg))) {
3882 filter_cache = SvRV(arg);
3889 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3893 if (isGV_with_GP(arg)) {
3894 IO * const io = GvIO((const GV *)arg);
3899 tryrsfp = IoIFP(io);
3900 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3901 PerlIO_close(IoOFP(io));
3912 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3914 SvREFCNT_inc_simple_void_NN(filter_sub);
3917 filter_state = SP[i];
3918 SvREFCNT_inc_simple_void(filter_state);
3922 if (!tryrsfp && (filter_cache || filter_sub)) {
3923 tryrsfp = PerlIO_open(BIT_BUCKET,
3929 /* FREETMPS may free our filter_cache */
3930 SvREFCNT_inc_simple_void(filter_cache);
3934 LEAVE_with_name("call_INC");
3936 /* Now re-mortalize it. */
3937 sv_2mortal(filter_cache);
3939 /* Adjust file name if the hook has set an %INC entry.
3940 This needs to happen after the FREETMPS above. */
3941 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3943 tryname = SvPV_nolen_const(*svp);
3950 filter_has_file = 0;
3951 filter_cache = NULL;
3953 SvREFCNT_dec_NN(filter_state);
3954 filter_state = NULL;
3957 SvREFCNT_dec_NN(filter_sub);
3962 if (path_searchable) {
3967 dir = SvPV_nomg_const(dirsv, dirlen);
3973 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3977 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3980 sv_setpv(namesv, unixdir);
3981 sv_catpv(namesv, unixname);
3983 # ifdef __SYMBIAN32__
3984 if (PL_origfilename[0] &&
3985 PL_origfilename[1] == ':' &&
3986 !(dir[0] && dir[1] == ':'))
3987 Perl_sv_setpvf(aTHX_ namesv,
3992 Perl_sv_setpvf(aTHX_ namesv,
3996 /* The equivalent of
3997 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3998 but without the need to parse the format string, or
3999 call strlen on either pointer, and with the correct
4000 allocation up front. */
4002 char *tmp = SvGROW(namesv, dirlen + len + 2);
4004 memcpy(tmp, dir, dirlen);
4007 /* Avoid '<dir>//<file>' */
4008 if (!dirlen || *(tmp-1) != '/') {
4011 /* So SvCUR_set reports the correct length below */
4015 /* name came from an SV, so it will have a '\0' at the
4016 end that we can copy as part of this memcpy(). */
4017 memcpy(tmp, name, len + 1);
4019 SvCUR_set(namesv, dirlen + len + 1);
4024 TAINT_PROPER("require");
4025 tryname = SvPVX_const(namesv);
4026 tryrsfp = doopen_pm(namesv);
4028 if (tryname[0] == '.' && tryname[1] == '/') {
4030 while (*++tryname == '/') {}
4034 else if (errno == EMFILE || errno == EACCES) {
4035 /* no point in trying other paths if out of handles;
4036 * on the other hand, if we couldn't open one of the
4037 * files, then going on with the search could lead to
4038 * unexpected results; see perl #113422
4047 saved_errno = errno; /* sv_2mortal can realloc things */
4050 if (PL_op->op_type == OP_REQUIRE) {
4051 if(saved_errno == EMFILE || saved_errno == EACCES) {
4052 /* diag_listed_as: Can't locate %s */
4053 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4055 if (namesv) { /* did we lookup @INC? */
4056 AV * const ar = GvAVn(PL_incgv);
4058 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4059 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4060 for (i = 0; i <= AvFILL(ar); i++) {
4061 sv_catpvs(inc, " ");
4062 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4064 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4065 const char *c, *e = name + len - 3;
4066 sv_catpv(msg, " (you may need to install the ");
4067 for (c = name; c < e; c++) {
4069 sv_catpvs(msg, "::");
4072 sv_catpvn(msg, c, 1);
4075 sv_catpv(msg, " module)");
4077 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4078 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4080 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4081 sv_catpv(msg, " (did you run h2ph?)");
4084 /* diag_listed_as: Can't locate %s */
4086 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4090 DIE(aTHX_ "Can't locate %s", name);
4097 SETERRNO(0, SS_NORMAL);
4099 /* Assume success here to prevent recursive requirement. */
4100 /* name is never assigned to again, so len is still strlen(name) */
4101 /* Check whether a hook in @INC has already filled %INC */
4103 (void)hv_store(GvHVn(PL_incgv),
4104 unixname, unixlen, newSVpv(tryname,0),0);
4106 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4108 (void)hv_store(GvHVn(PL_incgv),
4109 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4112 ENTER_with_name("eval");
4114 SAVECOPFILE_FREE(&PL_compiling);
4115 CopFILE_set(&PL_compiling, tryname);
4116 lex_start(NULL, tryrsfp, 0);
4118 if (filter_sub || filter_cache) {
4119 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4120 than hanging another SV from it. In turn, filter_add() optionally
4121 takes the SV to use as the filter (or creates a new SV if passed
4122 NULL), so simply pass in whatever value filter_cache has. */
4123 SV * const fc = filter_cache ? newSV(0) : NULL;
4125 if (fc) sv_copypv(fc, filter_cache);
4126 datasv = filter_add(S_run_user_filter, fc);
4127 IoLINES(datasv) = filter_has_file;
4128 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4129 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4132 /* switch to eval mode */
4133 PUSHBLOCK(cx, CXt_EVAL, SP);
4135 cx->blk_eval.retop = PL_op->op_next;
4137 SAVECOPLINE(&PL_compiling);
4138 CopLINE_set(&PL_compiling, 0);
4142 /* Store and reset encoding. */
4143 encoding = PL_encoding;
4146 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4147 op = DOCATCH(PL_eval_start);
4149 op = PL_op->op_next;
4151 /* Restore encoding. */
4152 PL_encoding = encoding;
4154 LOADED_FILE_PROBE(unixname);
4159 /* This is a op added to hold the hints hash for
4160 pp_entereval. The hash can be modified by the code
4161 being eval'ed, so we return a copy instead. */
4167 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4177 const I32 gimme = GIMME_V;
4178 const U32 was = PL_breakable_sub_gen;
4179 char tbuf[TYPE_DIGITS(long) + 12];
4180 bool saved_delete = FALSE;
4181 char *tmpbuf = tbuf;
4184 U32 seq, lex_flags = 0;
4185 HV *saved_hh = NULL;
4186 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4188 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4189 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4191 else if (PL_hints & HINT_LOCALIZE_HH || (
4192 PL_op->op_private & OPpEVAL_COPHH
4193 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4195 saved_hh = cop_hints_2hv(PL_curcop, 0);
4196 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4200 /* make sure we've got a plain PV (no overload etc) before testing
4201 * for taint. Making a copy here is probably overkill, but better
4202 * safe than sorry */
4204 const char * const p = SvPV_const(sv, len);
4206 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4207 lex_flags |= LEX_START_COPIED;
4209 if (bytes && SvUTF8(sv))
4210 SvPVbyte_force(sv, len);
4212 else if (bytes && SvUTF8(sv)) {
4213 /* Don't modify someone else's scalar */
4216 (void)sv_2mortal(sv);
4217 SvPVbyte_force(sv,len);
4218 lex_flags |= LEX_START_COPIED;
4221 TAINT_IF(SvTAINTED(sv));
4222 TAINT_PROPER("eval");
4224 ENTER_with_name("eval");
4225 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4226 ? LEX_IGNORE_UTF8_HINTS
4227 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4232 /* switch to eval mode */
4234 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4235 SV * const temp_sv = sv_newmortal();
4236 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4237 (unsigned long)++PL_evalseq,
4238 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4239 tmpbuf = SvPVX(temp_sv);
4240 len = SvCUR(temp_sv);
4243 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4244 SAVECOPFILE_FREE(&PL_compiling);
4245 CopFILE_set(&PL_compiling, tmpbuf+2);
4246 SAVECOPLINE(&PL_compiling);
4247 CopLINE_set(&PL_compiling, 1);
4248 /* special case: an eval '' executed within the DB package gets lexically
4249 * placed in the first non-DB CV rather than the current CV - this
4250 * allows the debugger to execute code, find lexicals etc, in the
4251 * scope of the code being debugged. Passing &seq gets find_runcv
4252 * to do the dirty work for us */
4253 runcv = find_runcv(&seq);
4255 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4257 cx->blk_eval.retop = PL_op->op_next;
4259 /* prepare to compile string */
4261 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4262 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4264 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4265 deleting the eval's FILEGV from the stash before gv_check() runs
4266 (i.e. before run-time proper). To work around the coredump that
4267 ensues, we always turn GvMULTI_on for any globals that were
4268 introduced within evals. See force_ident(). GSAR 96-10-12 */
4269 char *const safestr = savepvn(tmpbuf, len);
4270 SAVEDELETE(PL_defstash, safestr, len);
4271 saved_delete = TRUE;
4276 if (doeval(gimme, runcv, seq, saved_hh)) {
4277 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4278 ? (PERLDB_LINE || PERLDB_SAVESRC)
4279 : PERLDB_SAVESRC_NOSUBS) {
4280 /* Retain the filegv we created. */
4281 } else if (!saved_delete) {
4282 char *const safestr = savepvn(tmpbuf, len);
4283 SAVEDELETE(PL_defstash, safestr, len);
4285 return DOCATCH(PL_eval_start);
4287 /* We have already left the scope set up earlier thanks to the LEAVE
4289 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4290 ? (PERLDB_LINE || PERLDB_SAVESRC)
4291 : PERLDB_SAVESRC_INVALID) {
4292 /* Retain the filegv we created. */
4293 } else if (!saved_delete) {
4294 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4296 return PL_op->op_next;
4308 const U8 save_flags = PL_op -> op_flags;
4316 namesv = cx->blk_eval.old_namesv;
4317 retop = cx->blk_eval.retop;
4318 evalcv = cx->blk_eval.cv;
4321 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4322 gimme, SVs_TEMP, FALSE);
4323 PL_curpm = newpm; /* Don't pop $1 et al till now */
4326 assert(CvDEPTH(evalcv) == 1);
4328 CvDEPTH(evalcv) = 0;
4330 if (optype == OP_REQUIRE &&
4331 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4333 /* Unassume the success we assumed earlier. */
4334 (void)hv_delete(GvHVn(PL_incgv),
4335 SvPVX_const(namesv),
4336 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4338 Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
4339 NOT_REACHED; /* NOTREACHED */
4340 /* die_unwind() did LEAVE, or we won't be here */
4343 LEAVE_with_name("eval");
4344 if (!(save_flags & OPf_SPECIAL)) {
4352 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4353 close to the related Perl_create_eval_scope. */
4355 Perl_delete_eval_scope(pTHX)
4366 LEAVE_with_name("eval_scope");
4367 PERL_UNUSED_VAR(newsp);
4368 PERL_UNUSED_VAR(gimme);
4369 PERL_UNUSED_VAR(optype);
4372 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4373 also needed by Perl_fold_constants. */
4375 Perl_create_eval_scope(pTHX_ U32 flags)
4378 const I32 gimme = GIMME_V;
4380 ENTER_with_name("eval_scope");
4383 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4386 PL_in_eval = EVAL_INEVAL;
4387 if (flags & G_KEEPERR)
4388 PL_in_eval |= EVAL_KEEPERR;
4391 if (flags & G_FAKINGEVAL) {
4392 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4400 PERL_CONTEXT * const cx = create_eval_scope(0);
4401 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4402 return DOCATCH(PL_op->op_next);
4417 PERL_UNUSED_VAR(optype);
4420 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4421 SVs_PADTMP|SVs_TEMP, FALSE);
4422 PL_curpm = newpm; /* Don't pop $1 et al till now */
4424 LEAVE_with_name("eval_scope");
4433 const I32 gimme = GIMME_V;
4435 ENTER_with_name("given");
4438 if (PL_op->op_targ) {
4439 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4440 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4441 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4448 PUSHBLOCK(cx, CXt_GIVEN, SP);
4461 PERL_UNUSED_CONTEXT;
4464 assert(CxTYPE(cx) == CXt_GIVEN);
4467 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4468 SVs_PADTMP|SVs_TEMP, FALSE);
4469 PL_curpm = newpm; /* Don't pop $1 et al till now */
4471 LEAVE_with_name("given");
4475 /* Helper routines used by pp_smartmatch */
4477 S_make_matcher(pTHX_ REGEXP *re)
4480 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4482 PERL_ARGS_ASSERT_MAKE_MATCHER;
4484 PM_SETRE(matcher, ReREFCNT_inc(re));
4486 SAVEFREEOP((OP *) matcher);
4487 ENTER_with_name("matcher"); SAVETMPS;
4493 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4498 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4500 PL_op = (OP *) matcher;
4503 (void) Perl_pp_match(aTHX);
4505 return (SvTRUEx(POPs));
4509 S_destroy_matcher(pTHX_ PMOP *matcher)
4513 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4514 PERL_UNUSED_ARG(matcher);
4517 LEAVE_with_name("matcher");
4520 /* Do a smart match */
4523 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4524 return do_smartmatch(NULL, NULL, 0);
4527 /* This version of do_smartmatch() implements the
4528 * table of smart matches that is found in perlsyn.
4531 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4536 bool object_on_left = FALSE;
4537 SV *e = TOPs; /* e is for 'expression' */
4538 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4540 /* Take care only to invoke mg_get() once for each argument.
4541 * Currently we do this by copying the SV if it's magical. */
4543 if (!copied && SvGMAGICAL(d))
4544 d = sv_mortalcopy(d);
4551 e = sv_mortalcopy(e);
4553 /* First of all, handle overload magic of the rightmost argument */
4556 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4557 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4559 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4566 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4569 SP -= 2; /* Pop the values */
4574 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4581 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4582 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4583 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4585 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4586 object_on_left = TRUE;
4589 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4591 if (object_on_left) {
4592 goto sm_any_sub; /* Treat objects like scalars */
4594 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4595 /* Test sub truth for each key */
4597 bool andedresults = TRUE;
4598 HV *hv = (HV*) SvRV(d);
4599 I32 numkeys = hv_iterinit(hv);
4600 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4603 while ( (he = hv_iternext(hv)) ) {
4604 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4605 ENTER_with_name("smartmatch_hash_key_test");
4608 PUSHs(hv_iterkeysv(he));
4610 c = call_sv(e, G_SCALAR);
4613 andedresults = FALSE;
4615 andedresults = SvTRUEx(POPs) && andedresults;
4617 LEAVE_with_name("smartmatch_hash_key_test");
4624 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4625 /* Test sub truth for each element */
4627 bool andedresults = TRUE;
4628 AV *av = (AV*) SvRV(d);
4629 const I32 len = av_tindex(av);
4630 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4633 for (i = 0; i <= len; ++i) {
4634 SV * const * const svp = av_fetch(av, i, FALSE);
4635 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4636 ENTER_with_name("smartmatch_array_elem_test");
4642 c = call_sv(e, G_SCALAR);
4645 andedresults = FALSE;
4647 andedresults = SvTRUEx(POPs) && andedresults;
4649 LEAVE_with_name("smartmatch_array_elem_test");
4658 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4659 ENTER_with_name("smartmatch_coderef");
4664 c = call_sv(e, G_SCALAR);
4668 else if (SvTEMP(TOPs))
4669 SvREFCNT_inc_void(TOPs);
4671 LEAVE_with_name("smartmatch_coderef");
4676 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4677 if (object_on_left) {
4678 goto sm_any_hash; /* Treat objects like scalars */
4680 else if (!SvOK(d)) {
4681 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4684 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4685 /* Check that the key-sets are identical */
4687 HV *other_hv = MUTABLE_HV(SvRV(d));
4690 U32 this_key_count = 0,
4691 other_key_count = 0;
4692 HV *hv = MUTABLE_HV(SvRV(e));
4694 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4695 /* Tied hashes don't know how many keys they have. */
4696 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4697 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4701 HV * const temp = other_hv;
4707 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4711 /* The hashes have the same number of keys, so it suffices
4712 to check that one is a subset of the other. */
4713 (void) hv_iterinit(hv);
4714 while ( (he = hv_iternext(hv)) ) {
4715 SV *key = hv_iterkeysv(he);
4717 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4720 if(!hv_exists_ent(other_hv, key, 0)) {
4721 (void) hv_iterinit(hv); /* reset iterator */
4727 (void) hv_iterinit(other_hv);
4728 while ( hv_iternext(other_hv) )
4732 other_key_count = HvUSEDKEYS(other_hv);
4734 if (this_key_count != other_key_count)
4739 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4740 AV * const other_av = MUTABLE_AV(SvRV(d));
4741 const SSize_t other_len = av_tindex(other_av) + 1;
4743 HV *hv = MUTABLE_HV(SvRV(e));
4745 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4746 for (i = 0; i < other_len; ++i) {
4747 SV ** const svp = av_fetch(other_av, i, FALSE);
4748 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4749 if (svp) { /* ??? When can this not happen? */
4750 if (hv_exists_ent(hv, *svp, 0))
4756 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4757 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4760 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4762 HV *hv = MUTABLE_HV(SvRV(e));
4764 (void) hv_iterinit(hv);
4765 while ( (he = hv_iternext(hv)) ) {
4766 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4767 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4768 (void) hv_iterinit(hv);
4769 destroy_matcher(matcher);
4773 destroy_matcher(matcher);
4779 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4780 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4787 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4788 if (object_on_left) {
4789 goto sm_any_array; /* Treat objects like scalars */
4791 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4792 AV * const other_av = MUTABLE_AV(SvRV(e));
4793 const SSize_t other_len = av_tindex(other_av) + 1;
4796 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4797 for (i = 0; i < other_len; ++i) {
4798 SV ** const svp = av_fetch(other_av, i, FALSE);
4800 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4801 if (svp) { /* ??? When can this not happen? */
4802 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4808 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4809 AV *other_av = MUTABLE_AV(SvRV(d));
4810 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4811 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4815 const SSize_t other_len = av_tindex(other_av);
4817 if (NULL == seen_this) {
4818 seen_this = newHV();
4819 (void) sv_2mortal(MUTABLE_SV(seen_this));
4821 if (NULL == seen_other) {
4822 seen_other = newHV();
4823 (void) sv_2mortal(MUTABLE_SV(seen_other));
4825 for(i = 0; i <= other_len; ++i) {
4826 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4827 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4829 if (!this_elem || !other_elem) {
4830 if ((this_elem && SvOK(*this_elem))
4831 || (other_elem && SvOK(*other_elem)))
4834 else if (hv_exists_ent(seen_this,
4835 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4836 hv_exists_ent(seen_other,
4837 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4839 if (*this_elem != *other_elem)
4843 (void)hv_store_ent(seen_this,
4844 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4846 (void)hv_store_ent(seen_other,
4847 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4853 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4854 (void) do_smartmatch(seen_this, seen_other, 0);
4856 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4865 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4866 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4869 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4870 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4873 for(i = 0; i <= this_len; ++i) {
4874 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4875 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4876 if (svp && matcher_matches_sv(matcher, *svp)) {
4877 destroy_matcher(matcher);
4881 destroy_matcher(matcher);
4885 else if (!SvOK(d)) {
4886 /* undef ~~ array */
4887 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4890 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4891 for (i = 0; i <= this_len; ++i) {
4892 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4893 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4894 if (!svp || !SvOK(*svp))
4903 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4905 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4906 for (i = 0; i <= this_len; ++i) {
4907 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4914 /* infinite recursion isn't supposed to happen here */
4915 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4916 (void) do_smartmatch(NULL, NULL, 1);
4918 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4927 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4928 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4929 SV *t = d; d = e; e = t;
4930 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4933 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4934 SV *t = d; d = e; e = t;
4935 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4936 goto sm_regex_array;
4939 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4941 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4943 PUSHs(matcher_matches_sv(matcher, d)
4946 destroy_matcher(matcher);
4951 /* See if there is overload magic on left */
4952 else if (object_on_left && SvAMAGIC(d)) {
4954 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4955 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4958 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4966 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4969 else if (!SvOK(d)) {
4970 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4971 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4976 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4977 DEBUG_M(if (SvNIOK(e))
4978 Perl_deb(aTHX_ " applying rule Any-Num\n");
4980 Perl_deb(aTHX_ " applying rule Num-numish\n");
4982 /* numeric comparison */
4985 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4986 (void) Perl_pp_i_eq(aTHX);
4988 (void) Perl_pp_eq(aTHX);
4996 /* As a last resort, use string comparison */
4997 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5000 return Perl_pp_seq(aTHX);
5007 const I32 gimme = GIMME_V;
5009 /* This is essentially an optimization: if the match
5010 fails, we don't want to push a context and then
5011 pop it again right away, so we skip straight
5012 to the op that follows the leavewhen.
5013 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5015 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
5016 RETURNOP(cLOGOP->op_other->op_next);
5018 ENTER_with_name("when");
5021 PUSHBLOCK(cx, CXt_WHEN, SP);
5036 cxix = dopoptogiven(cxstack_ix);
5038 /* diag_listed_as: Can't "when" outside a topicalizer */
5039 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5040 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5043 assert(CxTYPE(cx) == CXt_WHEN);
5046 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
5047 SVs_PADTMP|SVs_TEMP, FALSE);
5048 PL_curpm = newpm; /* pop $1 et al */
5050 LEAVE_with_name("when");
5052 if (cxix < cxstack_ix)
5055 cx = &cxstack[cxix];
5057 if (CxFOREACH(cx)) {
5058 /* clear off anything above the scope we're re-entering */
5059 I32 inner = PL_scopestack_ix;
5062 if (PL_scopestack_ix < inner)
5063 leave_scope(PL_scopestack[PL_scopestack_ix]);
5064 PL_curcop = cx->blk_oldcop;
5067 return cx->blk_loop.my_op->op_nextop;
5071 RETURNOP(cx->blk_givwhen.leave_op);
5084 PERL_UNUSED_VAR(gimme);
5086 cxix = dopoptowhen(cxstack_ix);
5088 DIE(aTHX_ "Can't \"continue\" outside a when block");
5090 if (cxix < cxstack_ix)
5094 assert(CxTYPE(cx) == CXt_WHEN);
5097 PL_curpm = newpm; /* pop $1 et al */
5099 LEAVE_with_name("when");
5100 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5109 cxix = dopoptogiven(cxstack_ix);
5111 DIE(aTHX_ "Can't \"break\" outside a given block");
5113 cx = &cxstack[cxix];
5115 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5117 if (cxix < cxstack_ix)
5120 /* Restore the sp at the time we entered the given block */
5123 return cx->blk_givwhen.leave_op;
5127 S_doparseform(pTHX_ SV *sv)
5130 char *s = SvPV(sv, len);
5132 char *base = NULL; /* start of current field */
5133 I32 skipspaces = 0; /* number of contiguous spaces seen */
5134 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5135 bool repeat = FALSE; /* ~~ seen on this line */
5136 bool postspace = FALSE; /* a text field may need right padding */
5139 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5141 bool ischop; /* it's a ^ rather than a @ */
5142 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5143 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5147 PERL_ARGS_ASSERT_DOPARSEFORM;
5150 Perl_croak(aTHX_ "Null picture in formline");
5152 if (SvTYPE(sv) >= SVt_PVMG) {
5153 /* This might, of course, still return NULL. */
5154 mg = mg_find(sv, PERL_MAGIC_fm);
5156 sv_upgrade(sv, SVt_PVMG);
5160 /* still the same as previously-compiled string? */
5161 SV *old = mg->mg_obj;
5162 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5163 && len == SvCUR(old)
5164 && strnEQ(SvPVX(old), SvPVX(sv), len)
5166 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5170 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5171 Safefree(mg->mg_ptr);
5177 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5178 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5181 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5182 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5186 /* estimate the buffer size needed */
5187 for (base = s; s <= send; s++) {
5188 if (*s == '\n' || *s == '@' || *s == '^')
5194 Newx(fops, maxops, U32);
5199 *fpc++ = FF_LINEMARK;
5200 noblank = repeat = FALSE;
5218 case ' ': case '\t':
5225 } /* else FALL THROUGH */
5233 *fpc++ = FF_LITERAL;
5241 *fpc++ = (U32)skipspaces;
5245 *fpc++ = FF_NEWLINE;
5249 arg = fpc - linepc + 1;
5256 *fpc++ = FF_LINEMARK;
5257 noblank = repeat = FALSE;
5266 ischop = s[-1] == '^';
5272 arg = (s - base) - 1;
5274 *fpc++ = FF_LITERAL;
5280 if (*s == '*') { /* @* or ^* */
5282 *fpc++ = 2; /* skip the @* or ^* */
5284 *fpc++ = FF_LINESNGL;
5287 *fpc++ = FF_LINEGLOB;
5289 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5290 arg = ischop ? FORM_NUM_BLANK : 0;
5295 const char * const f = ++s;
5298 arg |= FORM_NUM_POINT + (s - f);
5300 *fpc++ = s - base; /* fieldsize for FETCH */
5301 *fpc++ = FF_DECIMAL;
5303 unchopnum |= ! ischop;
5305 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5306 arg = ischop ? FORM_NUM_BLANK : 0;
5308 s++; /* skip the '0' first */
5312 const char * const f = ++s;
5315 arg |= FORM_NUM_POINT + (s - f);
5317 *fpc++ = s - base; /* fieldsize for FETCH */
5318 *fpc++ = FF_0DECIMAL;
5320 unchopnum |= ! ischop;
5322 else { /* text field */
5324 bool ismore = FALSE;
5327 while (*++s == '>') ;
5328 prespace = FF_SPACE;
5330 else if (*s == '|') {
5331 while (*++s == '|') ;
5332 prespace = FF_HALFSPACE;
5337 while (*++s == '<') ;
5340 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5344 *fpc++ = s - base; /* fieldsize for FETCH */
5346 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5349 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5363 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5366 mg->mg_ptr = (char *) fops;
5367 mg->mg_len = arg * sizeof(U32);
5368 mg->mg_obj = sv_copy;
5369 mg->mg_flags |= MGf_REFCOUNTED;
5371 if (unchopnum && repeat)
5372 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5379 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5381 /* Can value be printed in fldsize chars, using %*.*f ? */
5385 int intsize = fldsize - (value < 0 ? 1 : 0);
5387 if (frcsize & FORM_NUM_POINT)
5389 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5392 while (intsize--) pwr *= 10.0;
5393 while (frcsize--) eps /= 10.0;
5396 if (value + eps >= pwr)
5399 if (value - eps <= -pwr)
5406 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5409 SV * const datasv = FILTER_DATA(idx);
5410 const int filter_has_file = IoLINES(datasv);
5411 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5412 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5417 char *prune_from = NULL;
5418 bool read_from_cache = FALSE;
5422 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5424 assert(maxlen >= 0);
5427 /* I was having segfault trouble under Linux 2.2.5 after a
5428 parse error occured. (Had to hack around it with a test
5429 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5430 not sure where the trouble is yet. XXX */
5433 SV *const cache = datasv;
5436 const char *cache_p = SvPV(cache, cache_len);
5440 /* Running in block mode and we have some cached data already.
5442 if (cache_len >= umaxlen) {
5443 /* In fact, so much data we don't even need to call
5448 const char *const first_nl =
5449 (const char *)memchr(cache_p, '\n', cache_len);
5451 take = first_nl + 1 - cache_p;
5455 sv_catpvn(buf_sv, cache_p, take);
5456 sv_chop(cache, cache_p + take);
5457 /* Definitely not EOF */
5461 sv_catsv(buf_sv, cache);
5463 umaxlen -= cache_len;
5466 read_from_cache = TRUE;
5470 /* Filter API says that the filter appends to the contents of the buffer.
5471 Usually the buffer is "", so the details don't matter. But if it's not,
5472 then clearly what it contains is already filtered by this filter, so we
5473 don't want to pass it in a second time.
5474 I'm going to use a mortal in case the upstream filter croaks. */
5475 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5476 ? sv_newmortal() : buf_sv;
5477 SvUPGRADE(upstream, SVt_PV);
5479 if (filter_has_file) {
5480 status = FILTER_READ(idx+1, upstream, 0);
5483 if (filter_sub && status >= 0) {
5487 ENTER_with_name("call_filter_sub");
5492 DEFSV_set(upstream);
5496 PUSHs(filter_state);
5499 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5509 SV * const errsv = ERRSV;
5510 if (SvTRUE_NN(errsv))
5511 err = newSVsv(errsv);
5517 LEAVE_with_name("call_filter_sub");
5520 if (SvGMAGICAL(upstream)) {
5522 if (upstream == buf_sv) mg_free(buf_sv);
5524 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5525 if(!err && SvOK(upstream)) {
5526 got_p = SvPV_nomg(upstream, got_len);
5528 if (got_len > umaxlen) {
5529 prune_from = got_p + umaxlen;
5532 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5533 if (first_nl && first_nl + 1 < got_p + got_len) {
5534 /* There's a second line here... */
5535 prune_from = first_nl + 1;
5539 if (!err && prune_from) {
5540 /* Oh. Too long. Stuff some in our cache. */
5541 STRLEN cached_len = got_p + got_len - prune_from;
5542 SV *const cache = datasv;
5545 /* Cache should be empty. */
5546 assert(!SvCUR(cache));
5549 sv_setpvn(cache, prune_from, cached_len);
5550 /* If you ask for block mode, you may well split UTF-8 characters.
5551 "If it breaks, you get to keep both parts"
5552 (Your code is broken if you don't put them back together again
5553 before something notices.) */
5554 if (SvUTF8(upstream)) {
5557 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5559 /* Cannot just use sv_setpvn, as that could free the buffer
5560 before we have a chance to assign it. */
5561 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5562 got_len - cached_len);
5564 /* Can't yet be EOF */
5569 /* If they are at EOF but buf_sv has something in it, then they may never
5570 have touched the SV upstream, so it may be undefined. If we naively
5571 concatenate it then we get a warning about use of uninitialised value.
5573 if (!err && upstream != buf_sv &&
5575 sv_catsv_nomg(buf_sv, upstream);
5577 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5580 IoLINES(datasv) = 0;
5582 SvREFCNT_dec(filter_state);
5583 IoTOP_GV(datasv) = NULL;
5586 SvREFCNT_dec(filter_sub);
5587 IoBOTTOM_GV(datasv) = NULL;
5589 filter_del(S_run_user_filter);
5595 if (status == 0 && read_from_cache) {
5596 /* If we read some data from the cache (and by getting here it implies
5597 that we emptied the cache) then we aren't yet at EOF, and mustn't
5598 report that to our caller. */
5606 * c-indentation-style: bsd
5608 * indent-tabs-mode: nil
5611 * ex: set ts=8 sts=4 sw=4 et: