3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
45 const PERL_CONTEXT *cx;
48 if (PL_op->op_private & OPpOFFBYONE) {
49 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
52 cxix = dopoptosub(cxstack_ix);
58 switch (cx->blk_gimme) {
77 PMOP *pm = (PMOP*)cLOGOP->op_other;
82 const regexp_engine *eng;
83 bool is_bare_re= FALSE;
85 if (PL_op->op_flags & OPf_STACKED) {
95 /* prevent recompiling under /o and ithreads. */
96 #if defined(USE_ITHREADS)
97 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
104 assert (re != (REGEXP*) &PL_sv_undef);
105 eng = re ? RX_ENGINE(re) : current_re_engine();
108 In the below logic: these are basically the same - check if this regcomp is part of a split.
110 (PL_op->op_pmflags & PMf_split )
111 (PL_op->op_next->op_type == OP_PUSHRE)
113 We could add a new mask for this and copy the PMf_split, if we did
114 some bit definition fiddling first.
116 For now we leave this
119 new_re = (eng->op_comp
121 : &Perl_re_op_compile
122 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
124 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
126 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
128 if (pm->op_pmflags & PMf_HAS_CV)
129 ReANY(new_re)->qr_anoncv
130 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
134 /* The match's LHS's get-magic might need to access this op's regexp
135 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
136 get-magic now before we replace the regexp. Hopefully this hack can
137 be replaced with the approach described at
138 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
140 if (pm->op_type == OP_MATCH) {
142 const bool was_tainted = TAINT_get;
143 if (pm->op_flags & OPf_STACKED)
145 else if (pm->op_private & OPpTARGET_MY)
146 lhs = PAD_SV(pm->op_targ);
149 /* Restore the previous value of PL_tainted (which may have been
150 modified by get-magic), to avoid incorrectly setting the
151 RXf_TAINTED flag with RX_TAINT_on further down. */
152 TAINT_set(was_tainted);
153 #ifdef NO_TAINT_SUPPORT
154 PERL_UNUSED_VAR(was_tainted);
157 tmp = reg_temp_copy(NULL, new_re);
158 ReREFCNT_dec(new_re);
164 PM_SETRE(pm, new_re);
168 if (TAINTING_get && TAINT_get) {
169 SvTAINTED_on((SV*)new_re);
173 #if !defined(USE_ITHREADS)
174 /* can't change the optree at runtime either */
175 /* PMf_KEEP is handled differently under threads to avoid these problems */
176 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
178 if (pm->op_pmflags & PMf_KEEP) {
179 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
180 cLOGOP->op_first->op_next = PL_op->op_next;
192 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
193 PMOP * const pm = (PMOP*) cLOGOP->op_other;
194 SV * const dstr = cx->sb_dstr;
197 char *orig = cx->sb_orig;
198 REGEXP * const rx = cx->sb_rx;
200 REGEXP *old = PM_GETRE(pm);
207 PM_SETRE(pm,ReREFCNT_inc(rx));
210 rxres_restore(&cx->sb_rxres, rx);
212 if (cx->sb_iters++) {
213 const I32 saviters = cx->sb_iters;
214 if (cx->sb_iters > cx->sb_maxiters)
215 DIE(aTHX_ "Substitution loop");
217 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
219 /* See "how taint works" above pp_subst() */
221 cx->sb_rxtainted |= SUBST_TAINT_REPL;
222 sv_catsv_nomg(dstr, POPs);
223 if (CxONCE(cx) || s < orig ||
224 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
225 (s == m), cx->sb_targ, NULL,
226 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
228 SV *targ = cx->sb_targ;
230 assert(cx->sb_strend >= s);
231 if(cx->sb_strend > s) {
232 if (DO_UTF8(dstr) && !SvUTF8(targ))
233 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
235 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
237 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
238 cx->sb_rxtainted |= SUBST_TAINT_PAT;
240 if (pm->op_pmflags & PMf_NONDESTRUCT) {
242 /* From here on down we're using the copy, and leaving the
243 original untouched. */
247 SV_CHECK_THINKFIRST_COW_DROP(targ);
248 if (isGV(targ)) Perl_croak_no_modify();
250 SvPV_set(targ, SvPVX(dstr));
251 SvCUR_set(targ, SvCUR(dstr));
252 SvLEN_set(targ, SvLEN(dstr));
255 SvPV_set(dstr, NULL);
258 mPUSHi(saviters - 1);
260 (void)SvPOK_only_UTF8(targ);
263 /* update the taint state of various various variables in
264 * preparation for final exit.
265 * See "how taint works" above pp_subst() */
267 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
268 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
269 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
271 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
273 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
274 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
276 SvTAINTED_on(TOPs); /* taint return value */
277 /* needed for mg_set below */
279 cBOOL(cx->sb_rxtainted &
280 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
284 /* PL_tainted must be correctly set for this mg_set */
287 LEAVE_SCOPE(cx->sb_oldsave);
290 RETURNOP(pm->op_next);
291 assert(0); /* NOTREACHED */
293 cx->sb_iters = saviters;
295 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
298 assert(!RX_SUBOFFSET(rx));
299 cx->sb_orig = orig = RX_SUBBEG(rx);
301 cx->sb_strend = s + (cx->sb_strend - m);
303 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
305 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
306 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
308 sv_catpvn_nomg(dstr, s, m-s);
310 cx->sb_s = RX_OFFS(rx)[0].end + orig;
311 { /* Update the pos() information. */
313 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
315 if (!(mg = mg_find_mglob(sv))) {
316 mg = sv_magicext_mglob(sv);
319 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
322 (void)ReREFCNT_inc(rx);
323 /* update the taint state of various various variables in preparation
324 * for calling the code block.
325 * See "how taint works" above pp_subst() */
327 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
328 cx->sb_rxtainted |= SUBST_TAINT_PAT;
330 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
331 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
332 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
334 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
336 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
337 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
338 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
339 ? cx->sb_dstr : cx->sb_targ);
342 rxres_save(&cx->sb_rxres, rx);
344 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
348 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
353 PERL_ARGS_ASSERT_RXRES_SAVE;
356 if (!p || p[1] < RX_NPARENS(rx)) {
358 i = 7 + (RX_NPARENS(rx)+1) * 2;
360 i = 6 + (RX_NPARENS(rx)+1) * 2;
369 /* what (if anything) to free on croak */
370 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
371 RX_MATCH_COPIED_off(rx);
372 *p++ = RX_NPARENS(rx);
375 *p++ = PTR2UV(RX_SAVED_COPY(rx));
376 RX_SAVED_COPY(rx) = NULL;
379 *p++ = PTR2UV(RX_SUBBEG(rx));
380 *p++ = (UV)RX_SUBLEN(rx);
381 *p++ = (UV)RX_SUBOFFSET(rx);
382 *p++ = (UV)RX_SUBCOFFSET(rx);
383 for (i = 0; i <= RX_NPARENS(rx); ++i) {
384 *p++ = (UV)RX_OFFS(rx)[i].start;
385 *p++ = (UV)RX_OFFS(rx)[i].end;
390 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
395 PERL_ARGS_ASSERT_RXRES_RESTORE;
398 RX_MATCH_COPY_FREE(rx);
399 RX_MATCH_COPIED_set(rx, *p);
401 RX_NPARENS(rx) = *p++;
404 if (RX_SAVED_COPY(rx))
405 SvREFCNT_dec (RX_SAVED_COPY(rx));
406 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
410 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
411 RX_SUBLEN(rx) = (I32)(*p++);
412 RX_SUBOFFSET(rx) = (I32)*p++;
413 RX_SUBCOFFSET(rx) = (I32)*p++;
414 for (i = 0; i <= RX_NPARENS(rx); ++i) {
415 RX_OFFS(rx)[i].start = (I32)(*p++);
416 RX_OFFS(rx)[i].end = (I32)(*p++);
421 S_rxres_free(pTHX_ void **rsp)
423 UV * const p = (UV*)*rsp;
425 PERL_ARGS_ASSERT_RXRES_FREE;
429 void *tmp = INT2PTR(char*,*p);
432 U32 i = 9 + p[1] * 2;
434 U32 i = 8 + p[1] * 2;
439 SvREFCNT_dec (INT2PTR(SV*,p[2]));
442 PoisonFree(p, i, sizeof(UV));
451 #define FORM_NUM_BLANK (1<<30)
452 #define FORM_NUM_POINT (1<<29)
456 dSP; dMARK; dORIGMARK;
457 SV * const tmpForm = *++MARK;
458 SV *formsv; /* contains text of original format */
459 U32 *fpc; /* format ops program counter */
460 char *t; /* current append position in target string */
461 const char *f; /* current position in format string */
463 SV *sv = NULL; /* current item */
464 const char *item = NULL;/* string value of current item */
465 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
466 I32 itembytes = 0; /* as itemsize, but length in bytes */
467 I32 fieldsize = 0; /* width of current field */
468 I32 lines = 0; /* number of lines that have been output */
469 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
470 const char *chophere = NULL; /* where to chop current item */
471 STRLEN linemark = 0; /* pos of start of line in output */
473 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
474 STRLEN len; /* length of current sv */
475 STRLEN linemax; /* estimate of output size in bytes */
476 bool item_is_utf8 = FALSE;
477 bool targ_is_utf8 = FALSE;
480 U8 *source; /* source of bytes to append */
481 STRLEN to_copy; /* how may bytes to append */
482 char trans; /* what chars to translate */
484 mg = doparseform(tmpForm);
486 fpc = (U32*)mg->mg_ptr;
487 /* the actual string the format was compiled from.
488 * with overload etc, this may not match tmpForm */
492 SvPV_force(PL_formtarget, len);
493 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
494 SvTAINTED_on(PL_formtarget);
495 if (DO_UTF8(PL_formtarget))
497 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
498 t = SvGROW(PL_formtarget, len + linemax + 1);
499 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
501 f = SvPV_const(formsv, len);
505 const char *name = "???";
508 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
509 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
510 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
511 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
512 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
514 case FF_CHECKNL: name = "CHECKNL"; break;
515 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
516 case FF_SPACE: name = "SPACE"; break;
517 case FF_HALFSPACE: name = "HALFSPACE"; break;
518 case FF_ITEM: name = "ITEM"; break;
519 case FF_CHOP: name = "CHOP"; break;
520 case FF_LINEGLOB: name = "LINEGLOB"; break;
521 case FF_NEWLINE: name = "NEWLINE"; break;
522 case FF_MORE: name = "MORE"; break;
523 case FF_LINEMARK: name = "LINEMARK"; break;
524 case FF_END: name = "END"; break;
525 case FF_0DECIMAL: name = "0DECIMAL"; break;
526 case FF_LINESNGL: name = "LINESNGL"; break;
529 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
531 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
534 case FF_LINEMARK: /* start (or end) of a line */
535 linemark = t - SvPVX(PL_formtarget);
540 case FF_LITERAL: /* append <arg> literal chars */
545 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
548 case FF_SKIP: /* skip <arg> chars in format */
552 case FF_FETCH: /* get next item and set field size to <arg> */
561 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
564 SvTAINTED_on(PL_formtarget);
567 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
569 const char *s = item = SvPV_const(sv, len);
570 const char *send = s + len;
573 item_is_utf8 = DO_UTF8(sv);
585 if (itemsize == fieldsize)
588 itembytes = s - item;
592 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
594 const char *s = item = SvPV_const(sv, len);
595 const char *send = s + len;
599 item_is_utf8 = DO_UTF8(sv);
601 /* look for a legal split position */
609 /* provisional split point */
613 /* we delay testing fieldsize until after we've
614 * processed the possible split char directly
615 * following the last field char; so if fieldsize=3
616 * and item="a b cdef", we consume "a b", not "a".
617 * Ditto further down.
619 if (size == fieldsize)
623 if (strchr(PL_chopset, *s)) {
624 /* provisional split point */
625 /* for a non-space split char, we include
626 * the split char; hence the '+1' */
630 if (size == fieldsize)
642 if (!chophere || s == send) {
646 itembytes = chophere - item;
651 case FF_SPACE: /* append padding space (diff of field, item size) */
652 arg = fieldsize - itemsize;
660 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
661 arg = fieldsize - itemsize;
670 case FF_ITEM: /* append a text item, while blanking ctrl chars */
676 case FF_CHOP: /* (for ^*) chop the current item */
678 const char *s = chophere;
686 /* tied, overloaded or similar strangeness.
687 * Do it the hard way */
688 sv_setpvn(sv, s, len - (s-item));
693 case FF_LINESNGL: /* process ^* */
697 case FF_LINEGLOB: /* process @* */
699 const bool oneline = fpc[-1] == FF_LINESNGL;
700 const char *s = item = SvPV_const(sv, len);
701 const char *const send = s + len;
703 item_is_utf8 = DO_UTF8(sv);
714 to_copy = s - item - 1;
728 /* append to_copy bytes from source to PL_formstring.
729 * item_is_utf8 implies source is utf8.
730 * if trans, translate certain characters during the copy */
735 SvCUR_set(PL_formtarget,
736 t - SvPVX_const(PL_formtarget));
738 if (targ_is_utf8 && !item_is_utf8) {
739 source = tmp = bytes_to_utf8(source, &to_copy);
741 if (item_is_utf8 && !targ_is_utf8) {
743 /* Upgrade targ to UTF8, and then we reduce it to
744 a problem we have a simple solution for.
745 Don't need get magic. */
746 sv_utf8_upgrade_nomg(PL_formtarget);
748 /* re-calculate linemark */
749 s = (U8*)SvPVX(PL_formtarget);
750 /* the bytes we initially allocated to append the
751 * whole line may have been gobbled up during the
752 * upgrade, so allocate a whole new line's worth
757 linemark = s - (U8*)SvPVX(PL_formtarget);
759 /* Easy. They agree. */
760 assert (item_is_utf8 == targ_is_utf8);
763 /* @* and ^* are the only things that can exceed
764 * the linemax, so grow by the output size, plus
765 * a whole new form's worth in case of any further
767 grow = linemax + to_copy;
769 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
770 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
772 Copy(source, t, to_copy, char);
774 /* blank out ~ or control chars, depending on trans.
775 * works on bytes not chars, so relies on not
776 * matching utf8 continuation bytes */
778 U8 *send = s + to_copy;
781 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
788 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
794 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
797 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
800 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
803 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
805 /* If the field is marked with ^ and the value is undefined,
807 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
815 /* overflow evidence */
816 if (num_overflow(value, fieldsize, arg)) {
822 /* Formats aren't yet marked for locales, so assume "yes". */
824 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
826 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
827 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
828 /* we generate fmt ourselves so it is safe */
829 GCC_DIAG_IGNORE(-Wformat-nonliteral);
830 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
831 PERL_MY_SNPRINTF_POST_GUARD(len, max);
833 RESTORE_LC_NUMERIC();
838 case FF_NEWLINE: /* delete trailing spaces, then append \n */
840 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
845 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
848 if (arg) { /* repeat until fields exhausted? */
854 t = SvPVX(PL_formtarget) + linemark;
859 case FF_MORE: /* replace long end of string with '...' */
861 const char *s = chophere;
862 const char *send = item + len;
864 while (isSPACE(*s) && (s < send))
869 arg = fieldsize - itemsize;
876 if (strnEQ(s1," ",3)) {
877 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
887 case FF_END: /* tidy up, then return */
889 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
891 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
893 SvUTF8_on(PL_formtarget);
894 FmLINES(PL_formtarget) += lines;
896 if (fpc[-1] == FF_BLANK)
897 RETURNOP(cLISTOP->op_first);
909 if (PL_stack_base + *PL_markstack_ptr == SP) {
911 if (GIMME_V == G_SCALAR)
913 RETURNOP(PL_op->op_next->op_next);
915 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
916 Perl_pp_pushmark(aTHX); /* push dst */
917 Perl_pp_pushmark(aTHX); /* push src */
918 ENTER_with_name("grep"); /* enter outer scope */
921 if (PL_op->op_private & OPpGREP_LEX)
922 SAVESPTR(PAD_SVl(PL_op->op_targ));
925 ENTER_with_name("grep_item"); /* enter inner scope */
928 src = PL_stack_base[*PL_markstack_ptr];
930 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
934 if (PL_op->op_private & OPpGREP_LEX)
935 PAD_SVl(PL_op->op_targ) = src;
940 if (PL_op->op_type == OP_MAPSTART)
941 Perl_pp_pushmark(aTHX); /* push top */
942 return ((LOGOP*)PL_op->op_next)->op_other;
948 const I32 gimme = GIMME_V;
949 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
955 /* first, move source pointer to the next item in the source list */
956 ++PL_markstack_ptr[-1];
958 /* if there are new items, push them into the destination list */
959 if (items && gimme != G_VOID) {
960 /* might need to make room back there first */
961 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
962 /* XXX this implementation is very pessimal because the stack
963 * is repeatedly extended for every set of items. Is possible
964 * to do this without any stack extension or copying at all
965 * by maintaining a separate list over which the map iterates
966 * (like foreach does). --gsar */
968 /* everything in the stack after the destination list moves
969 * towards the end the stack by the amount of room needed */
970 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
972 /* items to shift up (accounting for the moved source pointer) */
973 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
975 /* This optimization is by Ben Tilly and it does
976 * things differently from what Sarathy (gsar)
977 * is describing. The downside of this optimization is
978 * that leaves "holes" (uninitialized and hopefully unused areas)
979 * to the Perl stack, but on the other hand this
980 * shouldn't be a problem. If Sarathy's idea gets
981 * implemented, this optimization should become
982 * irrelevant. --jhi */
984 shift = count; /* Avoid shifting too often --Ben Tilly */
989 PL_markstack_ptr[-1] += shift;
990 *PL_markstack_ptr += shift;
994 /* copy the new items down to the destination list */
995 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
996 if (gimme == G_ARRAY) {
997 /* add returned items to the collection (making mortal copies
998 * if necessary), then clear the current temps stack frame
999 * *except* for those items. We do this splicing the items
1000 * into the start of the tmps frame (so some items may be on
1001 * the tmps stack twice), then moving PL_tmps_floor above
1002 * them, then freeing the frame. That way, the only tmps that
1003 * accumulate over iterations are the return values for map.
1004 * We have to do to this way so that everything gets correctly
1005 * freed if we die during the map.
1009 /* make space for the slice */
1010 EXTEND_MORTAL(items);
1011 tmpsbase = PL_tmps_floor + 1;
1012 Move(PL_tmps_stack + tmpsbase,
1013 PL_tmps_stack + tmpsbase + items,
1014 PL_tmps_ix - PL_tmps_floor,
1016 PL_tmps_ix += items;
1021 sv = sv_mortalcopy(sv);
1023 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1025 /* clear the stack frame except for the items */
1026 PL_tmps_floor += items;
1028 /* FREETMPS may have cleared the TEMP flag on some of the items */
1031 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1034 /* scalar context: we don't care about which values map returns
1035 * (we use undef here). And so we certainly don't want to do mortal
1036 * copies of meaningless values. */
1037 while (items-- > 0) {
1039 *dst-- = &PL_sv_undef;
1047 LEAVE_with_name("grep_item"); /* exit inner scope */
1050 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1052 (void)POPMARK; /* pop top */
1053 LEAVE_with_name("grep"); /* exit outer scope */
1054 (void)POPMARK; /* pop src */
1055 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1056 (void)POPMARK; /* pop dst */
1057 SP = PL_stack_base + POPMARK; /* pop original mark */
1058 if (gimme == G_SCALAR) {
1059 if (PL_op->op_private & OPpGREP_LEX) {
1060 SV* sv = sv_newmortal();
1061 sv_setiv(sv, items);
1069 else if (gimme == G_ARRAY)
1076 ENTER_with_name("grep_item"); /* enter inner scope */
1079 /* set $_ to the new source item */
1080 src = PL_stack_base[PL_markstack_ptr[-1]];
1081 if (SvPADTMP(src)) {
1082 src = sv_mortalcopy(src);
1085 if (PL_op->op_private & OPpGREP_LEX)
1086 PAD_SVl(PL_op->op_targ) = src;
1090 RETURNOP(cLOGOP->op_other);
1098 if (GIMME == G_ARRAY)
1100 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1101 return cLOGOP->op_other;
1110 if (GIMME == G_ARRAY) {
1111 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1115 SV * const targ = PAD_SV(PL_op->op_targ);
1118 if (PL_op->op_private & OPpFLIP_LINENUM) {
1119 if (GvIO(PL_last_in_gv)) {
1120 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1123 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1125 flip = SvIV(sv) == SvIV(GvSV(gv));
1131 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1132 if (PL_op->op_flags & OPf_SPECIAL) {
1140 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1143 sv_setpvs(TARG, "");
1149 /* This code tries to decide if "$left .. $right" should use the
1150 magical string increment, or if the range is numeric (we make
1151 an exception for .."0" [#18165]). AMS 20021031. */
1153 #define RANGE_IS_NUMERIC(left,right) ( \
1154 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1155 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1156 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1157 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1158 && (!SvOK(right) || looks_like_number(right))))
1164 if (GIMME == G_ARRAY) {
1170 if (RANGE_IS_NUMERIC(left,right)) {
1172 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1173 (SvOK(right) && (SvIOK(right)
1174 ? SvIsUV(right) && SvUV(right) > IV_MAX
1175 : SvNV_nomg(right) > IV_MAX)))
1176 DIE(aTHX_ "Range iterator outside integer range");
1177 i = SvIV_nomg(left);
1178 j = SvIV_nomg(right);
1180 /* Dance carefully around signed max. */
1181 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1184 /* The wraparound of signed integers is undefined
1185 * behavior, but here we aim for count >=1, and
1186 * negative count is just wrong. */
1191 Perl_croak(aTHX_ "Out of memory during list extend");
1198 SV * const sv = sv_2mortal(newSViv(i++));
1204 const char * const lpv = SvPV_nomg_const(left, llen);
1205 const char * const tmps = SvPV_nomg_const(right, len);
1207 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1208 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1210 if (strEQ(SvPVX_const(sv),tmps))
1212 sv = sv_2mortal(newSVsv(sv));
1219 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1223 if (PL_op->op_private & OPpFLIP_LINENUM) {
1224 if (GvIO(PL_last_in_gv)) {
1225 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1228 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1229 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1237 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1238 sv_catpvs(targ, "E0");
1248 static const char * const context_name[] = {
1250 NULL, /* CXt_WHEN never actually needs "block" */
1251 NULL, /* CXt_BLOCK never actually needs "block" */
1252 NULL, /* CXt_GIVEN never actually needs "block" */
1253 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1254 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1255 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1256 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1264 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1268 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1270 for (i = cxstack_ix; i >= 0; i--) {
1271 const PERL_CONTEXT * const cx = &cxstack[i];
1272 switch (CxTYPE(cx)) {
1278 /* diag_listed_as: Exiting subroutine via %s */
1279 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1280 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1281 if (CxTYPE(cx) == CXt_NULL)
1284 case CXt_LOOP_LAZYIV:
1285 case CXt_LOOP_LAZYSV:
1287 case CXt_LOOP_PLAIN:
1289 STRLEN cx_label_len = 0;
1290 U32 cx_label_flags = 0;
1291 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1293 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1296 (const U8*)cx_label, cx_label_len,
1297 (const U8*)label, len) == 0)
1299 (const U8*)label, len,
1300 (const U8*)cx_label, cx_label_len) == 0)
1301 : (len == cx_label_len && ((cx_label == label)
1302 || memEQ(cx_label, label, len))) )) {
1303 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1304 (long)i, cx_label));
1307 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1318 Perl_dowantarray(pTHX)
1320 const I32 gimme = block_gimme();
1321 return (gimme == G_VOID) ? G_SCALAR : gimme;
1325 Perl_block_gimme(pTHX)
1327 const I32 cxix = dopoptosub(cxstack_ix);
1331 switch (cxstack[cxix].blk_gimme) {
1339 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1341 NOT_REACHED; /* NOTREACHED */
1345 Perl_is_lvalue_sub(pTHX)
1347 const I32 cxix = dopoptosub(cxstack_ix);
1348 assert(cxix >= 0); /* We should only be called from inside subs */
1350 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1351 return CxLVAL(cxstack + cxix);
1356 /* only used by PUSHSUB */
1358 Perl_was_lvalue_sub(pTHX)
1360 const I32 cxix = dopoptosub(cxstack_ix-1);
1361 assert(cxix >= 0); /* We should only be called from inside subs */
1363 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1364 return CxLVAL(cxstack + cxix);
1370 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1374 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1376 PERL_UNUSED_CONTEXT;
1379 for (i = startingblock; i >= 0; i--) {
1380 const PERL_CONTEXT * const cx = &cxstk[i];
1381 switch (CxTYPE(cx)) {
1385 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1386 * twice; the first for the normal foo() call, and the second
1387 * for a faked up re-entry into the sub to execute the
1388 * code block. Hide this faked entry from the world. */
1389 if (cx->cx_type & CXp_SUB_RE_FAKE)
1394 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1402 S_dopoptoeval(pTHX_ I32 startingblock)
1405 for (i = startingblock; i >= 0; i--) {
1406 const PERL_CONTEXT *cx = &cxstack[i];
1407 switch (CxTYPE(cx)) {
1411 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1419 S_dopoptoloop(pTHX_ I32 startingblock)
1422 for (i = startingblock; i >= 0; i--) {
1423 const PERL_CONTEXT * const cx = &cxstack[i];
1424 switch (CxTYPE(cx)) {
1430 /* diag_listed_as: Exiting subroutine via %s */
1431 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1432 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1433 if ((CxTYPE(cx)) == CXt_NULL)
1436 case CXt_LOOP_LAZYIV:
1437 case CXt_LOOP_LAZYSV:
1439 case CXt_LOOP_PLAIN:
1440 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1448 S_dopoptogiven(pTHX_ I32 startingblock)
1451 for (i = startingblock; i >= 0; i--) {
1452 const PERL_CONTEXT *cx = &cxstack[i];
1453 switch (CxTYPE(cx)) {
1457 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1459 case CXt_LOOP_PLAIN:
1460 assert(!CxFOREACHDEF(cx));
1462 case CXt_LOOP_LAZYIV:
1463 case CXt_LOOP_LAZYSV:
1465 if (CxFOREACHDEF(cx)) {
1466 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1475 S_dopoptowhen(pTHX_ I32 startingblock)
1478 for (i = startingblock; i >= 0; i--) {
1479 const PERL_CONTEXT *cx = &cxstack[i];
1480 switch (CxTYPE(cx)) {
1484 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1492 Perl_dounwind(pTHX_ I32 cxix)
1496 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1499 while (cxstack_ix > cxix) {
1501 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1502 DEBUG_CX("UNWIND"); \
1503 /* Note: we don't need to restore the base context info till the end. */
1504 switch (CxTYPE(cx)) {
1507 continue; /* not break */
1515 case CXt_LOOP_LAZYIV:
1516 case CXt_LOOP_LAZYSV:
1518 case CXt_LOOP_PLAIN:
1529 PERL_UNUSED_VAR(optype);
1533 Perl_qerror(pTHX_ SV *err)
1535 PERL_ARGS_ASSERT_QERROR;
1538 if (PL_in_eval & EVAL_KEEPERR) {
1539 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1543 sv_catsv(ERRSV, err);
1546 sv_catsv(PL_errors, err);
1548 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1550 ++PL_parser->error_count;
1554 Perl_die_unwind(pTHX_ SV *msv)
1556 SV *exceptsv = sv_mortalcopy(msv);
1557 U8 in_eval = PL_in_eval;
1558 PERL_ARGS_ASSERT_DIE_UNWIND;
1565 * Historically, perl used to set ERRSV ($@) early in the die
1566 * process and rely on it not getting clobbered during unwinding.
1567 * That sucked, because it was liable to get clobbered, so the
1568 * setting of ERRSV used to emit the exception from eval{} has
1569 * been moved to much later, after unwinding (see just before
1570 * JMPENV_JUMP below). However, some modules were relying on the
1571 * early setting, by examining $@ during unwinding to use it as
1572 * a flag indicating whether the current unwinding was caused by
1573 * an exception. It was never a reliable flag for that purpose,
1574 * being totally open to false positives even without actual
1575 * clobberage, but was useful enough for production code to
1576 * semantically rely on it.
1578 * We'd like to have a proper introspective interface that
1579 * explicitly describes the reason for whatever unwinding
1580 * operations are currently in progress, so that those modules
1581 * work reliably and $@ isn't further overloaded. But we don't
1582 * have one yet. In its absence, as a stopgap measure, ERRSV is
1583 * now *additionally* set here, before unwinding, to serve as the
1584 * (unreliable) flag that it used to.
1586 * This behaviour is temporary, and should be removed when a
1587 * proper way to detect exceptional unwinding has been developed.
1588 * As of 2010-12, the authors of modules relying on the hack
1589 * are aware of the issue, because the modules failed on
1590 * perls 5.13.{1..7} which had late setting of $@ without this
1591 * early-setting hack.
1593 if (!(in_eval & EVAL_KEEPERR)) {
1594 SvTEMP_off(exceptsv);
1595 sv_setsv(ERRSV, exceptsv);
1598 if (in_eval & EVAL_KEEPERR) {
1599 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1603 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1604 && PL_curstackinfo->si_prev)
1618 JMPENV *restartjmpenv;
1621 if (cxix < cxstack_ix)
1624 POPBLOCK(cx,PL_curpm);
1625 if (CxTYPE(cx) != CXt_EVAL) {
1627 const char* message = SvPVx_const(exceptsv, msglen);
1628 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1629 PerlIO_write(Perl_error_log, message, msglen);
1633 namesv = cx->blk_eval.old_namesv;
1635 oldcop = cx->blk_oldcop;
1637 restartjmpenv = cx->blk_eval.cur_top_env;
1638 restartop = cx->blk_eval.retop;
1640 if (gimme == G_SCALAR)
1641 *++newsp = &PL_sv_undef;
1642 PL_stack_sp = newsp;
1646 if (optype == OP_REQUIRE) {
1647 assert (PL_curcop == oldcop);
1648 (void)hv_store(GvHVn(PL_incgv),
1649 SvPVX_const(namesv),
1650 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1652 /* note that unlike pp_entereval, pp_require isn't
1653 * supposed to trap errors. So now that we've popped the
1654 * EVAL that pp_require pushed, and processed the error
1655 * message, rethrow the error */
1656 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1657 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1660 if (!(in_eval & EVAL_KEEPERR))
1661 sv_setsv(ERRSV, exceptsv);
1662 PL_restartjmpenv = restartjmpenv;
1663 PL_restartop = restartop;
1665 assert(0); /* NOTREACHED */
1669 write_to_stderr(exceptsv);
1671 assert(0); /* NOTREACHED */
1677 if (SvTRUE(left) != SvTRUE(right))
1685 =head1 CV Manipulation Functions
1687 =for apidoc caller_cx
1689 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1690 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1691 information returned to Perl by C<caller>. Note that XSUBs don't get a
1692 stack frame, so C<caller_cx(0, NULL)> will return information for the
1693 immediately-surrounding Perl code.
1695 This function skips over the automatic calls to C<&DB::sub> made on the
1696 behalf of the debugger. If the stack frame requested was a sub called by
1697 C<DB::sub>, the return value will be the frame for the call to
1698 C<DB::sub>, since that has the correct line number/etc. for the call
1699 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1700 frame for the sub call itself.
1705 const PERL_CONTEXT *
1706 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1708 I32 cxix = dopoptosub(cxstack_ix);
1709 const PERL_CONTEXT *cx;
1710 const PERL_CONTEXT *ccstack = cxstack;
1711 const PERL_SI *top_si = PL_curstackinfo;
1714 /* we may be in a higher stacklevel, so dig down deeper */
1715 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1716 top_si = top_si->si_prev;
1717 ccstack = top_si->si_cxstack;
1718 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1722 /* caller() should not report the automatic calls to &DB::sub */
1723 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1724 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1728 cxix = dopoptosub_at(ccstack, cxix - 1);
1731 cx = &ccstack[cxix];
1732 if (dbcxp) *dbcxp = cx;
1734 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1735 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1736 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1737 field below is defined for any cx. */
1738 /* caller() should not report the automatic calls to &DB::sub */
1739 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1740 cx = &ccstack[dbcxix];
1749 const PERL_CONTEXT *cx;
1750 const PERL_CONTEXT *dbcx;
1752 const HEK *stash_hek;
1754 bool has_arg = MAXARG && TOPs;
1763 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1765 if (GIMME != G_ARRAY) {
1773 assert(CopSTASH(cx->blk_oldcop));
1774 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1775 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1777 if (GIMME != G_ARRAY) {
1780 PUSHs(&PL_sv_undef);
1783 sv_sethek(TARG, stash_hek);
1792 PUSHs(&PL_sv_undef);
1795 sv_sethek(TARG, stash_hek);
1798 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1799 lcop = closest_cop(cx->blk_oldcop, OP_SIBLING(cx->blk_oldcop),
1800 cx->blk_sub.retop, TRUE);
1802 lcop = cx->blk_oldcop;
1803 mPUSHi((I32)CopLINE(lcop));
1806 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1807 /* So is ccstack[dbcxix]. */
1808 if (CvHASGV(dbcx->blk_sub.cv)) {
1809 PUSHs(cv_name(dbcx->blk_sub.cv, 0));
1810 PUSHs(boolSV(CxHASARGS(cx)));
1813 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1814 PUSHs(boolSV(CxHASARGS(cx)));
1818 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1821 gimme = (I32)cx->blk_gimme;
1822 if (gimme == G_VOID)
1823 PUSHs(&PL_sv_undef);
1825 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1826 if (CxTYPE(cx) == CXt_EVAL) {
1828 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1829 SV *cur_text = cx->blk_eval.cur_text;
1830 if (SvCUR(cur_text) >= 2) {
1831 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1832 SvUTF8(cur_text)|SVs_TEMP));
1835 /* I think this is will always be "", but be sure */
1836 PUSHs(sv_2mortal(newSVsv(cur_text)));
1842 else if (cx->blk_eval.old_namesv) {
1843 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1846 /* eval BLOCK (try blocks have old_namesv == 0) */
1848 PUSHs(&PL_sv_undef);
1849 PUSHs(&PL_sv_undef);
1853 PUSHs(&PL_sv_undef);
1854 PUSHs(&PL_sv_undef);
1856 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1857 && CopSTASH_eq(PL_curcop, PL_debstash))
1859 AV * const ary = cx->blk_sub.argarray;
1860 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1862 Perl_init_dbargs(aTHX);
1864 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1865 av_extend(PL_dbargs, AvFILLp(ary) + off);
1866 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1867 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1869 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1872 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1874 if (old_warnings == pWARN_NONE)
1875 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1876 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1877 mask = &PL_sv_undef ;
1878 else if (old_warnings == pWARN_ALL ||
1879 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1880 /* Get the bit mask for $warnings::Bits{all}, because
1881 * it could have been extended by warnings::register */
1883 HV * const bits = get_hv("warnings::Bits", 0);
1884 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1885 mask = newSVsv(*bits_all);
1888 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1892 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1896 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1897 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1907 if (MAXARG < 1 || (!TOPs && !POPs))
1908 tmps = NULL, len = 0;
1910 tmps = SvPVx_const(POPs, len);
1911 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1916 /* like pp_nextstate, but used instead when the debugger is active */
1920 PL_curcop = (COP*)PL_op;
1921 TAINT_NOT; /* Each statement is presumed innocent */
1922 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1927 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1928 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1932 const I32 gimme = G_ARRAY;
1934 GV * const gv = PL_DBgv;
1937 if (gv && isGV_with_GP(gv))
1940 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1941 DIE(aTHX_ "No DB::DB routine defined");
1943 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1944 /* don't do recursive DB::DB call */
1958 (void)(*CvXSUB(cv))(aTHX_ cv);
1964 PUSHBLOCK(cx, CXt_SUB, SP);
1966 cx->blk_sub.retop = PL_op->op_next;
1968 if (CvDEPTH(cv) >= 2) {
1969 PERL_STACK_OVERFLOW_CHECK();
1970 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1973 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1974 RETURNOP(CvSTART(cv));
1981 /* SVs on the stack that have any of the flags passed in are left as is.
1982 Other SVs are protected via the mortals stack if lvalue is true, and
1983 copied otherwise. */
1986 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
1987 U32 flags, bool lvalue)
1990 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
1992 if (flags & SVs_PADTMP) {
1993 flags &= ~SVs_PADTMP;
1996 if (gimme == G_SCALAR) {
1998 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2001 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2002 : sv_mortalcopy(*SP);
2004 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2007 *++MARK = &PL_sv_undef;
2011 else if (gimme == G_ARRAY) {
2012 /* in case LEAVE wipes old return values */
2013 while (++MARK <= SP) {
2014 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2018 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2019 : sv_mortalcopy(*MARK);
2020 TAINT_NOT; /* Each item is independent */
2023 /* When this function was called with MARK == newsp, we reach this
2024 * point with SP == newsp. */
2034 I32 gimme = GIMME_V;
2036 ENTER_with_name("block");
2039 PUSHBLOCK(cx, CXt_BLOCK, SP);
2052 if (PL_op->op_flags & OPf_SPECIAL) {
2053 cx = &cxstack[cxstack_ix];
2054 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2059 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2062 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2063 PL_op->op_private & OPpLVALUE);
2064 PL_curpm = newpm; /* Don't pop $1 et al till now */
2066 LEAVE_with_name("block");
2075 const I32 gimme = GIMME_V;
2076 void *itervar; /* location of the iteration variable */
2077 U8 cxtype = CXt_LOOP_FOR;
2079 ENTER_with_name("loop1");
2082 if (PL_op->op_targ) { /* "my" variable */
2083 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2084 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2085 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2086 SVs_PADSTALE, SVs_PADSTALE);
2088 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2090 itervar = PL_comppad;
2092 itervar = &PAD_SVl(PL_op->op_targ);
2095 else { /* symbol table variable */
2096 GV * const gv = MUTABLE_GV(POPs);
2097 SV** svp = &GvSV(gv);
2098 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2100 itervar = (void *)gv;
2103 if (PL_op->op_private & OPpITER_DEF)
2104 cxtype |= CXp_FOR_DEF;
2106 ENTER_with_name("loop2");
2108 PUSHBLOCK(cx, cxtype, SP);
2109 PUSHLOOP_FOR(cx, itervar, MARK);
2110 if (PL_op->op_flags & OPf_STACKED) {
2111 SV *maybe_ary = POPs;
2112 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2114 SV * const right = maybe_ary;
2117 if (RANGE_IS_NUMERIC(sv,right)) {
2118 cx->cx_type &= ~CXTYPEMASK;
2119 cx->cx_type |= CXt_LOOP_LAZYIV;
2120 /* Make sure that no-one re-orders cop.h and breaks our
2122 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2123 #ifdef NV_PRESERVES_UV
2124 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2125 (SvNV_nomg(sv) > (NV)IV_MAX)))
2127 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2128 (SvNV_nomg(right) < (NV)IV_MIN))))
2130 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2132 ((SvNV_nomg(sv) > 0) &&
2133 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2134 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2136 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2138 ((SvNV_nomg(right) > 0) &&
2139 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2140 (SvNV_nomg(right) > (NV)UV_MAX))
2143 DIE(aTHX_ "Range iterator outside integer range");
2144 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2145 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2147 /* for correct -Dstv display */
2148 cx->blk_oldsp = sp - PL_stack_base;
2152 cx->cx_type &= ~CXTYPEMASK;
2153 cx->cx_type |= CXt_LOOP_LAZYSV;
2154 /* Make sure that no-one re-orders cop.h and breaks our
2156 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2157 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2158 cx->blk_loop.state_u.lazysv.end = right;
2159 SvREFCNT_inc(right);
2160 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2161 /* This will do the upgrade to SVt_PV, and warn if the value
2162 is uninitialised. */
2163 (void) SvPV_nolen_const(right);
2164 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2165 to replace !SvOK() with a pointer to "". */
2167 SvREFCNT_dec(right);
2168 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2172 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2173 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2174 SvREFCNT_inc(maybe_ary);
2175 cx->blk_loop.state_u.ary.ix =
2176 (PL_op->op_private & OPpITER_REVERSED) ?
2177 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2181 else { /* iterating over items on the stack */
2182 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2183 if (PL_op->op_private & OPpITER_REVERSED) {
2184 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2187 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2198 const I32 gimme = GIMME_V;
2200 ENTER_with_name("loop1");
2202 ENTER_with_name("loop2");
2204 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2205 PUSHLOOP_PLAIN(cx, SP);
2220 assert(CxTYPE_is_LOOP(cx));
2222 newsp = PL_stack_base + cx->blk_loop.resetsp;
2225 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2226 PL_op->op_private & OPpLVALUE);
2229 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2230 PL_curpm = newpm; /* ... and pop $1 et al */
2232 LEAVE_with_name("loop2");
2233 LEAVE_with_name("loop1");
2239 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2240 PERL_CONTEXT *cx, PMOP *newpm)
2242 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2243 if (gimme == G_SCALAR) {
2244 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2246 const char *what = NULL;
2248 assert(MARK+1 == SP);
2249 if ((SvPADTMP(TOPs) ||
2250 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2253 !SvSMAGICAL(TOPs)) {
2255 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2256 : "a readonly value" : "a temporary";
2261 /* sub:lvalue{} will take us here. */
2270 "Can't return %s from lvalue subroutine", what
2275 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2276 if (!SvPADTMP(*SP)) {
2277 *++newsp = SvREFCNT_inc(*SP);
2282 /* FREETMPS could clobber it */
2283 SV *sv = SvREFCNT_inc(*SP);
2285 *++newsp = sv_mortalcopy(sv);
2292 ? sv_mortalcopy(*SP)
2294 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2299 *++newsp = &PL_sv_undef;
2301 if (CxLVAL(cx) & OPpDEREF) {
2304 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2308 else if (gimme == G_ARRAY) {
2309 assert (!(CxLVAL(cx) & OPpDEREF));
2310 if (ref || !CxLVAL(cx))
2311 while (++MARK <= SP)
2313 SvFLAGS(*MARK) & SVs_PADTMP
2314 ? sv_mortalcopy(*MARK)
2317 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2318 else while (++MARK <= SP) {
2319 if (*MARK != &PL_sv_undef
2321 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2326 /* Might be flattened array after $#array = */
2333 /* diag_listed_as: Can't return %s from lvalue subroutine */
2335 "Can't return a %s from lvalue subroutine",
2336 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2342 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2345 PL_stack_sp = newsp;
2352 bool popsub2 = FALSE;
2353 bool clear_errsv = FALSE;
2363 const I32 cxix = dopoptosub(cxstack_ix);
2366 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2367 * sort block, which is a CXt_NULL
2370 PL_stack_base[1] = *PL_stack_sp;
2371 PL_stack_sp = PL_stack_base + 1;
2375 DIE(aTHX_ "Can't return outside a subroutine");
2377 if (cxix < cxstack_ix)
2380 if (CxMULTICALL(&cxstack[cxix])) {
2381 gimme = cxstack[cxix].blk_gimme;
2382 if (gimme == G_VOID)
2383 PL_stack_sp = PL_stack_base;
2384 else if (gimme == G_SCALAR) {
2385 PL_stack_base[1] = *PL_stack_sp;
2386 PL_stack_sp = PL_stack_base + 1;
2392 switch (CxTYPE(cx)) {
2395 lval = !!CvLVALUE(cx->blk_sub.cv);
2396 retop = cx->blk_sub.retop;
2397 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2400 if (!(PL_in_eval & EVAL_KEEPERR))
2403 namesv = cx->blk_eval.old_namesv;
2404 retop = cx->blk_eval.retop;
2407 if (optype == OP_REQUIRE &&
2408 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2410 /* Unassume the success we assumed earlier. */
2411 (void)hv_delete(GvHVn(PL_incgv),
2412 SvPVX_const(namesv),
2413 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2415 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2419 retop = cx->blk_sub.retop;
2423 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2427 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2429 if (gimme == G_SCALAR) {
2432 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2433 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2434 && !SvMAGICAL(TOPs)) {
2435 *++newsp = SvREFCNT_inc(*SP);
2440 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2442 *++newsp = sv_mortalcopy(sv);
2446 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2447 && !SvMAGICAL(*SP)) {
2451 *++newsp = sv_mortalcopy(*SP);
2454 *++newsp = sv_mortalcopy(*SP);
2457 *++newsp = &PL_sv_undef;
2459 else if (gimme == G_ARRAY) {
2460 while (++MARK <= SP) {
2461 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2462 && !SvGMAGICAL(*MARK)
2463 ? *MARK : sv_mortalcopy(*MARK);
2464 TAINT_NOT; /* Each item is independent */
2467 PL_stack_sp = newsp;
2471 /* Stack values are safe: */
2474 POPSUB(cx,sv); /* release CV and @_ ... */
2478 PL_curpm = newpm; /* ... and pop $1 et al */
2487 /* This duplicates parts of pp_leavesub, so that it can share code with
2498 if (CxMULTICALL(&cxstack[cxstack_ix]))
2502 cxstack_ix++; /* temporarily protect top context */
2506 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2509 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2511 PL_curpm = newpm; /* ... and pop $1 et al */
2514 return cx->blk_sub.retop;
2518 S_unwind_loop(pTHX_ const char * const opname)
2521 if (PL_op->op_flags & OPf_SPECIAL) {
2522 cxix = dopoptoloop(cxstack_ix);
2524 /* diag_listed_as: Can't "last" outside a loop block */
2525 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2530 const char * const label =
2531 PL_op->op_flags & OPf_STACKED
2532 ? SvPV(TOPs,label_len)
2533 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2534 const U32 label_flags =
2535 PL_op->op_flags & OPf_STACKED
2537 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2539 cxix = dopoptolabel(label, label_len, label_flags);
2541 /* diag_listed_as: Label not found for "last %s" */
2542 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2544 SVfARG(PL_op->op_flags & OPf_STACKED
2545 && !SvGMAGICAL(TOPp1s)
2547 : newSVpvn_flags(label,
2549 label_flags | SVs_TEMP)));
2551 if (cxix < cxstack_ix)
2567 S_unwind_loop(aTHX_ "last");
2570 cxstack_ix++; /* temporarily protect top context */
2571 switch (CxTYPE(cx)) {
2572 case CXt_LOOP_LAZYIV:
2573 case CXt_LOOP_LAZYSV:
2575 case CXt_LOOP_PLAIN:
2577 newsp = PL_stack_base + cx->blk_loop.resetsp;
2578 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2582 nextop = cx->blk_sub.retop;
2586 nextop = cx->blk_eval.retop;
2590 nextop = cx->blk_sub.retop;
2593 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2597 PL_stack_sp = newsp;
2601 /* Stack values are safe: */
2603 case CXt_LOOP_LAZYIV:
2604 case CXt_LOOP_PLAIN:
2605 case CXt_LOOP_LAZYSV:
2607 POPLOOP(cx); /* release loop vars ... */
2611 POPSUB(cx,sv); /* release CV and @_ ... */
2614 PL_curpm = newpm; /* ... and pop $1 et al */
2617 PERL_UNUSED_VAR(optype);
2618 PERL_UNUSED_VAR(gimme);
2625 const I32 inner = PL_scopestack_ix;
2627 S_unwind_loop(aTHX_ "next");
2629 /* clear off anything above the scope we're re-entering, but
2630 * save the rest until after a possible continue block */
2632 if (PL_scopestack_ix < inner)
2633 leave_scope(PL_scopestack[PL_scopestack_ix]);
2634 PL_curcop = cx->blk_oldcop;
2636 return (cx)->blk_loop.my_op->op_nextop;
2641 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2644 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2646 if (redo_op->op_type == OP_ENTER) {
2647 /* pop one less context to avoid $x being freed in while (my $x..) */
2649 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2650 redo_op = redo_op->op_next;
2654 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2655 LEAVE_SCOPE(oldsave);
2657 PL_curcop = cx->blk_oldcop;
2663 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2666 static const char* const too_deep = "Target of goto is too deeply nested";
2668 PERL_ARGS_ASSERT_DOFINDLABEL;
2671 Perl_croak(aTHX_ "%s", too_deep);
2672 if (o->op_type == OP_LEAVE ||
2673 o->op_type == OP_SCOPE ||
2674 o->op_type == OP_LEAVELOOP ||
2675 o->op_type == OP_LEAVESUB ||
2676 o->op_type == OP_LEAVETRY)
2678 *ops++ = cUNOPo->op_first;
2680 Perl_croak(aTHX_ "%s", too_deep);
2683 if (o->op_flags & OPf_KIDS) {
2685 /* First try all the kids at this level, since that's likeliest. */
2686 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2687 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2688 STRLEN kid_label_len;
2689 U32 kid_label_flags;
2690 const char *kid_label = CopLABEL_len_flags(kCOP,
2691 &kid_label_len, &kid_label_flags);
2693 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2696 (const U8*)kid_label, kid_label_len,
2697 (const U8*)label, len) == 0)
2699 (const U8*)label, len,
2700 (const U8*)kid_label, kid_label_len) == 0)
2701 : ( len == kid_label_len && ((kid_label == label)
2702 || memEQ(kid_label, label, len)))))
2706 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2707 if (kid == PL_lastgotoprobe)
2709 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2712 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2713 ops[-1]->op_type == OP_DBSTATE)
2718 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2726 PP(pp_goto) /* also pp_dump */
2732 #define GOTO_DEPTH 64
2733 OP *enterops[GOTO_DEPTH];
2734 const char *label = NULL;
2735 STRLEN label_len = 0;
2736 U32 label_flags = 0;
2737 const bool do_dump = (PL_op->op_type == OP_DUMP);
2738 static const char* const must_have_label = "goto must have label";
2740 if (PL_op->op_flags & OPf_STACKED) {
2741 /* goto EXPR or goto &foo */
2743 SV * const sv = POPs;
2746 /* This egregious kludge implements goto &subroutine */
2747 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2750 CV *cv = MUTABLE_CV(SvRV(sv));
2751 AV *arg = GvAV(PL_defgv);
2755 if (!CvROOT(cv) && !CvXSUB(cv)) {
2756 const GV * const gv = CvGV(cv);
2760 /* autoloaded stub? */
2761 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2763 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2765 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2766 if (autogv && (cv = GvCV(autogv)))
2768 tmpstr = sv_newmortal();
2769 gv_efullname3(tmpstr, gv, NULL);
2770 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2772 DIE(aTHX_ "Goto undefined subroutine");
2775 /* First do some returnish stuff. */
2776 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2778 cxix = dopoptosub(cxstack_ix);
2779 if (cxix < cxstack_ix) {
2782 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2788 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2789 if (CxTYPE(cx) == CXt_EVAL) {
2792 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2793 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2795 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2796 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2798 else if (CxMULTICALL(cx))
2801 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2803 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2804 AV* av = cx->blk_sub.argarray;
2806 /* abandon the original @_ if it got reified or if it is
2807 the same as the current @_ */
2808 if (AvREAL(av) || av == arg) {
2812 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2814 else CLEAR_ARGARRAY(av);
2816 /* We donate this refcount later to the callee’s pad. */
2817 SvREFCNT_inc_simple_void(arg);
2818 if (CxTYPE(cx) == CXt_SUB &&
2819 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2820 SvREFCNT_dec(cx->blk_sub.cv);
2821 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2822 LEAVE_SCOPE(oldsave);
2824 /* A destructor called during LEAVE_SCOPE could have undefined
2825 * our precious cv. See bug #99850. */
2826 if (!CvROOT(cv) && !CvXSUB(cv)) {
2827 const GV * const gv = CvGV(cv);
2830 SV * const tmpstr = sv_newmortal();
2831 gv_efullname3(tmpstr, gv, NULL);
2832 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2835 DIE(aTHX_ "Goto undefined subroutine");
2838 /* Now do some callish stuff. */
2840 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2842 OP* const retop = cx->blk_sub.retop;
2845 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2846 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2849 PERL_UNUSED_VAR(newsp);
2850 PERL_UNUSED_VAR(gimme);
2852 /* put GvAV(defgv) back onto stack */
2854 EXTEND(SP, items+1); /* @_ could have been extended. */
2859 bool r = cBOOL(AvREAL(arg));
2860 for (index=0; index<items; index++)
2864 SV ** const svp = av_fetch(arg, index, 0);
2865 sv = svp ? *svp : NULL;
2867 else sv = AvARRAY(arg)[index];
2869 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2870 : sv_2mortal(newSVavdefelem(arg, index, 1));
2875 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2876 /* Restore old @_ */
2877 arg = GvAV(PL_defgv);
2878 GvAV(PL_defgv) = cx->blk_sub.savearray;
2882 /* XS subs don't have a CxSUB, so pop it */
2883 POPBLOCK(cx, PL_curpm);
2884 /* Push a mark for the start of arglist */
2887 (void)(*CvXSUB(cv))(aTHX_ cv);
2893 PADLIST * const padlist = CvPADLIST(cv);
2894 cx->blk_sub.cv = cv;
2895 cx->blk_sub.olddepth = CvDEPTH(cv);
2898 if (CvDEPTH(cv) < 2)
2899 SvREFCNT_inc_simple_void_NN(cv);
2901 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2902 sub_crush_depth(cv);
2903 pad_push(padlist, CvDEPTH(cv));
2905 PL_curcop = cx->blk_oldcop;
2907 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2910 CX_CURPAD_SAVE(cx->blk_sub);
2912 /* cx->blk_sub.argarray has no reference count, so we
2913 need something to hang on to our argument array so
2914 that cx->blk_sub.argarray does not end up pointing
2915 to freed memory as the result of undef *_. So put
2916 it in the callee’s pad, donating our refer-
2919 SvREFCNT_dec(PAD_SVl(0));
2920 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2923 /* GvAV(PL_defgv) might have been modified on scope
2924 exit, so restore it. */
2925 if (arg != GvAV(PL_defgv)) {
2926 AV * const av = GvAV(PL_defgv);
2927 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2931 else SvREFCNT_dec(arg);
2932 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2933 Perl_get_db_sub(aTHX_ NULL, cv);
2935 CV * const gotocv = get_cvs("DB::goto", 0);
2937 PUSHMARK( PL_stack_sp );
2938 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2944 RETURNOP(CvSTART(cv));
2949 label = SvPV_nomg_const(sv, label_len);
2950 label_flags = SvUTF8(sv);
2953 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2954 /* goto LABEL or dump LABEL */
2955 label = cPVOP->op_pv;
2956 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2957 label_len = strlen(label);
2959 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2964 OP *gotoprobe = NULL;
2965 bool leaving_eval = FALSE;
2966 bool in_block = FALSE;
2967 PERL_CONTEXT *last_eval_cx = NULL;
2971 PL_lastgotoprobe = NULL;
2973 for (ix = cxstack_ix; ix >= 0; ix--) {
2975 switch (CxTYPE(cx)) {
2977 leaving_eval = TRUE;
2978 if (!CxTRYBLOCK(cx)) {
2979 gotoprobe = (last_eval_cx ?
2980 last_eval_cx->blk_eval.old_eval_root :
2985 /* else fall through */
2986 case CXt_LOOP_LAZYIV:
2987 case CXt_LOOP_LAZYSV:
2989 case CXt_LOOP_PLAIN:
2992 gotoprobe = OP_SIBLING(cx->blk_oldcop);
2998 gotoprobe = OP_SIBLING(cx->blk_oldcop);
3001 gotoprobe = PL_main_root;
3004 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3005 gotoprobe = CvROOT(cx->blk_sub.cv);
3011 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3014 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3015 CxTYPE(cx), (long) ix);
3016 gotoprobe = PL_main_root;
3022 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3023 enterops, enterops + GOTO_DEPTH);
3026 if ( (sibl1 = OP_SIBLING(gotoprobe)) &&
3027 sibl1->op_type == OP_UNSTACK &&
3028 (sibl2 = OP_SIBLING(sibl1)))
3030 retop = dofindlabel(sibl2,
3031 label, label_len, label_flags, enterops,
3032 enterops + GOTO_DEPTH);
3037 PL_lastgotoprobe = gotoprobe;
3040 DIE(aTHX_ "Can't find label %"UTF8f,
3041 UTF8fARG(label_flags, label_len, label));
3043 /* if we're leaving an eval, check before we pop any frames
3044 that we're not going to punt, otherwise the error
3047 if (leaving_eval && *enterops && enterops[1]) {
3049 for (i = 1; enterops[i]; i++)
3050 if (enterops[i]->op_type == OP_ENTERITER)
3051 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3054 if (*enterops && enterops[1]) {
3055 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3057 deprecate("\"goto\" to jump into a construct");
3060 /* pop unwanted frames */
3062 if (ix < cxstack_ix) {
3066 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3069 oldsave = PL_scopestack[PL_scopestack_ix];
3070 LEAVE_SCOPE(oldsave);
3073 /* push wanted frames */
3075 if (*enterops && enterops[1]) {
3076 OP * const oldop = PL_op;
3077 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3078 for (; enterops[ix]; ix++) {
3079 PL_op = enterops[ix];
3080 /* Eventually we may want to stack the needed arguments
3081 * for each op. For now, we punt on the hard ones. */
3082 if (PL_op->op_type == OP_ENTERITER)
3083 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3084 PL_op->op_ppaddr(aTHX);
3092 if (!retop) retop = PL_main_start;
3094 PL_restartop = retop;
3095 PL_do_undump = TRUE;
3099 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3100 PL_do_undump = FALSE;
3115 anum = 0; (void)POPs;
3121 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3124 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3127 PL_exit_flags |= PERL_EXIT_EXPECTED;
3129 PUSHs(&PL_sv_undef);
3136 S_save_lines(pTHX_ AV *array, SV *sv)
3138 const char *s = SvPVX_const(sv);
3139 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3142 PERL_ARGS_ASSERT_SAVE_LINES;
3144 while (s && s < send) {
3146 SV * const tmpstr = newSV_type(SVt_PVMG);
3148 t = (const char *)memchr(s, '\n', send - s);
3154 sv_setpvn(tmpstr, s, t - s);
3155 av_store(array, line++, tmpstr);
3163 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3165 0 is used as continue inside eval,
3167 3 is used for a die caught by an inner eval - continue inner loop
3169 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3170 establish a local jmpenv to handle exception traps.
3175 S_docatch(pTHX_ OP *o)
3178 OP * const oldop = PL_op;
3182 assert(CATCH_GET == TRUE);
3189 assert(cxstack_ix >= 0);
3190 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3191 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3196 /* die caught by an inner eval - continue inner loop */
3197 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3198 PL_restartjmpenv = NULL;
3199 PL_op = PL_restartop;
3208 assert(0); /* NOTREACHED */
3217 =for apidoc find_runcv
3219 Locate the CV corresponding to the currently executing sub or eval.
3220 If db_seqp is non_null, skip CVs that are in the DB package and populate
3221 *db_seqp with the cop sequence number at the point that the DB:: code was
3222 entered. (This allows debuggers to eval in the scope of the breakpoint
3223 rather than in the scope of the debugger itself.)
3229 Perl_find_runcv(pTHX_ U32 *db_seqp)
3231 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3234 /* If this becomes part of the API, it might need a better name. */
3236 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3243 PL_curcop == &PL_compiling
3245 : PL_curcop->cop_seq;
3247 for (si = PL_curstackinfo; si; si = si->si_prev) {
3249 for (ix = si->si_cxix; ix >= 0; ix--) {
3250 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3252 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3253 cv = cx->blk_sub.cv;
3254 /* skip DB:: code */
3255 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3256 *db_seqp = cx->blk_oldcop->cop_seq;
3259 if (cx->cx_type & CXp_SUB_RE)
3262 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3263 cv = cx->blk_eval.cv;
3266 case FIND_RUNCV_padid_eq:
3268 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3271 case FIND_RUNCV_level_eq:
3272 if (level++ != arg) continue;
3280 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3284 /* Run yyparse() in a setjmp wrapper. Returns:
3285 * 0: yyparse() successful
3286 * 1: yyparse() failed
3290 S_try_yyparse(pTHX_ int gramtype)
3295 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3299 ret = yyparse(gramtype) ? 1 : 0;
3306 assert(0); /* NOTREACHED */
3313 /* Compile a require/do or an eval ''.
3315 * outside is the lexically enclosing CV (if any) that invoked us.
3316 * seq is the current COP scope value.
3317 * hh is the saved hints hash, if any.
3319 * Returns a bool indicating whether the compile was successful; if so,
3320 * PL_eval_start contains the first op of the compiled code; otherwise,
3323 * This function is called from two places: pp_require and pp_entereval.
3324 * These can be distinguished by whether PL_op is entereval.
3328 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3331 OP * const saveop = PL_op;
3332 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3333 COP * const oldcurcop = PL_curcop;
3334 bool in_require = (saveop->op_type == OP_REQUIRE);
3338 PL_in_eval = (in_require
3339 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3341 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3342 ? EVAL_RE_REPARSING : 0)));
3346 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3348 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3349 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3350 cxstack[cxstack_ix].blk_gimme = gimme;
3352 CvOUTSIDE_SEQ(evalcv) = seq;
3353 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3355 /* set up a scratch pad */
3357 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3358 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3361 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3363 /* make sure we compile in the right package */
3365 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3366 SAVEGENERICSV(PL_curstash);
3367 PL_curstash = (HV *)CopSTASH(PL_curcop);
3368 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3369 else SvREFCNT_inc_simple_void(PL_curstash);
3371 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3372 SAVESPTR(PL_beginav);
3373 PL_beginav = newAV();
3374 SAVEFREESV(PL_beginav);
3375 SAVESPTR(PL_unitcheckav);
3376 PL_unitcheckav = newAV();
3377 SAVEFREESV(PL_unitcheckav);
3380 ENTER_with_name("evalcomp");
3381 SAVESPTR(PL_compcv);
3384 /* try to compile it */
3386 PL_eval_root = NULL;
3387 PL_curcop = &PL_compiling;
3388 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3389 PL_in_eval |= EVAL_KEEPERR;
3396 hv_clear(GvHV(PL_hintgv));
3399 PL_hints = saveop->op_private & OPpEVAL_COPHH
3400 ? oldcurcop->cop_hints : saveop->op_targ;
3402 /* making 'use re eval' not be in scope when compiling the
3403 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3404 * infinite recursion when S_has_runtime_code() gives a false
3405 * positive: the second time round, HINT_RE_EVAL isn't set so we
3406 * don't bother calling S_has_runtime_code() */
3407 if (PL_in_eval & EVAL_RE_REPARSING)
3408 PL_hints &= ~HINT_RE_EVAL;
3411 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3412 SvREFCNT_dec(GvHV(PL_hintgv));
3413 GvHV(PL_hintgv) = hh;
3416 SAVECOMPILEWARNINGS();
3418 if (PL_dowarn & G_WARN_ALL_ON)
3419 PL_compiling.cop_warnings = pWARN_ALL ;
3420 else if (PL_dowarn & G_WARN_ALL_OFF)
3421 PL_compiling.cop_warnings = pWARN_NONE ;
3423 PL_compiling.cop_warnings = pWARN_STD ;
3426 PL_compiling.cop_warnings =
3427 DUP_WARNINGS(oldcurcop->cop_warnings);
3428 cophh_free(CopHINTHASH_get(&PL_compiling));
3429 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3430 /* The label, if present, is the first entry on the chain. So rather
3431 than writing a blank label in front of it (which involves an
3432 allocation), just use the next entry in the chain. */
3433 PL_compiling.cop_hints_hash
3434 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3435 /* Check the assumption that this removed the label. */
3436 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3439 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3442 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3444 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3445 * so honour CATCH_GET and trap it here if necessary */
3447 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3449 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3450 SV **newsp; /* Used by POPBLOCK. */
3452 I32 optype; /* Used by POPEVAL. */
3458 PERL_UNUSED_VAR(newsp);
3459 PERL_UNUSED_VAR(optype);
3461 /* note that if yystatus == 3, then the EVAL CX block has already
3462 * been popped, and various vars restored */
3464 if (yystatus != 3) {
3466 op_free(PL_eval_root);
3467 PL_eval_root = NULL;
3469 SP = PL_stack_base + POPMARK; /* pop original mark */
3470 POPBLOCK(cx,PL_curpm);
3472 namesv = cx->blk_eval.old_namesv;
3473 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3474 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3480 /* If cx is still NULL, it means that we didn't go in the
3481 * POPEVAL branch. */
3482 cx = &cxstack[cxstack_ix];
3483 assert(CxTYPE(cx) == CXt_EVAL);
3484 namesv = cx->blk_eval.old_namesv;
3486 (void)hv_store(GvHVn(PL_incgv),
3487 SvPVX_const(namesv),
3488 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3490 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3493 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3496 if (!*(SvPV_nolen_const(errsv))) {
3497 sv_setpvs(errsv, "Compilation error");
3500 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3505 LEAVE_with_name("evalcomp");
3507 CopLINE_set(&PL_compiling, 0);
3508 SAVEFREEOP(PL_eval_root);
3509 cv_forget_slab(evalcv);
3511 DEBUG_x(dump_eval());
3513 /* Register with debugger: */
3514 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3515 CV * const cv = get_cvs("DB::postponed", 0);
3519 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3521 call_sv(MUTABLE_SV(cv), G_DISCARD);
3525 if (PL_unitcheckav) {
3526 OP *es = PL_eval_start;
3527 call_list(PL_scopestack_ix, PL_unitcheckav);
3531 /* compiled okay, so do it */
3533 CvDEPTH(evalcv) = 1;
3534 SP = PL_stack_base + POPMARK; /* pop original mark */
3535 PL_op = saveop; /* The caller may need it. */
3536 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3543 S_check_type_and_open(pTHX_ SV *name)
3547 const char *p = SvPV_const(name, len);
3550 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3552 /* checking here captures a reasonable error message when
3553 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3554 * user gets a confusing message about looking for the .pmc file
3555 * rather than for the .pm file.
3556 * This check prevents a \0 in @INC causing problems.
3558 if (!IS_SAFE_PATHNAME(p, len, "require"))
3561 /* we use the value of errno later to see how stat() or open() failed.
3562 * We don't want it set if the stat succeeded but we still failed,
3563 * such as if the name exists, but is a directory */
3566 st_rc = PerlLIO_stat(p, &st);
3568 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3572 #if !defined(PERLIO_IS_STDIO)
3573 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3575 return PerlIO_open(p, PERL_SCRIPT_MODE);
3579 #ifndef PERL_DISABLE_PMC
3581 S_doopen_pm(pTHX_ SV *name)
3584 const char *p = SvPV_const(name, namelen);
3586 PERL_ARGS_ASSERT_DOOPEN_PM;
3588 /* check the name before trying for the .pmc name to avoid the
3589 * warning referring to the .pmc which the user probably doesn't
3590 * know or care about
3592 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3595 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3596 SV *const pmcsv = sv_newmortal();
3599 SvSetSV_nosteal(pmcsv,name);
3600 sv_catpvs(pmcsv, "c");
3602 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3603 return check_type_and_open(pmcsv);
3605 return check_type_and_open(name);
3608 # define doopen_pm(name) check_type_and_open(name)
3609 #endif /* !PERL_DISABLE_PMC */
3611 /* require doesn't search for absolute names, or when the name is
3612 explicity relative the current directory */
3613 PERL_STATIC_INLINE bool
3614 S_path_is_searchable(const char *name)
3616 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3618 if (PERL_FILE_IS_ABSOLUTE(name)
3620 || (*name == '.' && ((name[1] == '/' ||
3621 (name[1] == '.' && name[2] == '/'))
3622 || (name[1] == '\\' ||
3623 ( name[1] == '.' && name[2] == '\\')))
3626 || (*name == '.' && (name[1] == '/' ||
3627 (name[1] == '.' && name[2] == '/')))
3647 int vms_unixname = 0;
3650 const char *tryname = NULL;
3652 const I32 gimme = GIMME_V;
3653 int filter_has_file = 0;
3654 PerlIO *tryrsfp = NULL;
3655 SV *filter_cache = NULL;
3656 SV *filter_state = NULL;
3657 SV *filter_sub = NULL;
3662 bool path_searchable;
3666 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3667 sv = sv_2mortal(new_version(sv));
3668 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3669 upg_version(PL_patchlevel, TRUE);
3670 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3671 if ( vcmp(sv,PL_patchlevel) <= 0 )
3672 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3673 SVfARG(sv_2mortal(vnormal(sv))),
3674 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3678 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3681 SV * const req = SvRV(sv);
3682 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3684 /* get the left hand term */
3685 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3687 first = SvIV(*av_fetch(lav,0,0));
3688 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3689 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3690 || av_tindex(lav) > 1 /* FP with > 3 digits */
3691 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3693 DIE(aTHX_ "Perl %"SVf" required--this is only "
3695 SVfARG(sv_2mortal(vnormal(req))),
3696 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3699 else { /* probably 'use 5.10' or 'use 5.8' */
3703 if (av_tindex(lav)>=1)
3704 second = SvIV(*av_fetch(lav,1,0));
3706 second /= second >= 600 ? 100 : 10;
3707 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3708 (int)first, (int)second);
3709 upg_version(hintsv, TRUE);
3711 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3712 "--this is only %"SVf", stopped",
3713 SVfARG(sv_2mortal(vnormal(req))),
3714 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3715 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3724 DIE(aTHX_ "Missing or undefined argument to require");
3725 name = SvPV_nomg_const(sv, len);
3726 if (!(name && len > 0 && *name))
3727 DIE(aTHX_ "Missing or undefined argument to require");
3729 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3730 DIE(aTHX_ "Can't locate %s: %s",
3731 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3732 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3735 TAINT_PROPER("require");
3737 path_searchable = path_is_searchable(name);
3740 /* The key in the %ENV hash is in the syntax of file passed as the argument
3741 * usually this is in UNIX format, but sometimes in VMS format, which
3742 * can result in a module being pulled in more than once.
3743 * To prevent this, the key must be stored in UNIX format if the VMS
3744 * name can be translated to UNIX.
3748 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3750 unixlen = strlen(unixname);
3756 /* if not VMS or VMS name can not be translated to UNIX, pass it
3759 unixname = (char *) name;
3762 if (PL_op->op_type == OP_REQUIRE) {
3763 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3764 unixname, unixlen, 0);
3766 if (*svp != &PL_sv_undef)
3769 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3770 "Compilation failed in require", unixname);
3774 LOADING_FILE_PROBE(unixname);
3776 /* prepare to compile file */
3778 if (!path_searchable) {
3779 /* At this point, name is SvPVX(sv) */
3781 tryrsfp = doopen_pm(sv);
3783 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3784 AV * const ar = GvAVn(PL_incgv);
3791 namesv = newSV_type(SVt_PV);
3792 for (i = 0; i <= AvFILL(ar); i++) {
3793 SV * const dirsv = *av_fetch(ar, i, TRUE);
3801 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3802 && !SvOBJECT(SvRV(loader)))
3804 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3808 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3809 PTR2UV(SvRV(dirsv)), name);
3810 tryname = SvPVX_const(namesv);
3813 if (SvPADTMP(nsv)) {
3814 nsv = sv_newmortal();
3815 SvSetSV_nosteal(nsv,sv);
3818 ENTER_with_name("call_INC");
3826 if (SvGMAGICAL(loader)) {
3827 SV *l = sv_newmortal();
3828 sv_setsv_nomg(l, loader);
3831 if (sv_isobject(loader))
3832 count = call_method("INC", G_ARRAY);
3834 count = call_sv(loader, G_ARRAY);
3844 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3845 && !isGV_with_GP(SvRV(arg))) {
3846 filter_cache = SvRV(arg);
3853 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3857 if (isGV_with_GP(arg)) {
3858 IO * const io = GvIO((const GV *)arg);
3863 tryrsfp = IoIFP(io);
3864 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3865 PerlIO_close(IoOFP(io));
3876 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3878 SvREFCNT_inc_simple_void_NN(filter_sub);
3881 filter_state = SP[i];
3882 SvREFCNT_inc_simple_void(filter_state);
3886 if (!tryrsfp && (filter_cache || filter_sub)) {
3887 tryrsfp = PerlIO_open(BIT_BUCKET,
3893 /* FREETMPS may free our filter_cache */
3894 SvREFCNT_inc_simple_void(filter_cache);
3898 LEAVE_with_name("call_INC");
3900 /* Now re-mortalize it. */
3901 sv_2mortal(filter_cache);
3903 /* Adjust file name if the hook has set an %INC entry.
3904 This needs to happen after the FREETMPS above. */
3905 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3907 tryname = SvPV_nolen_const(*svp);
3914 filter_has_file = 0;
3915 filter_cache = NULL;
3917 SvREFCNT_dec_NN(filter_state);
3918 filter_state = NULL;
3921 SvREFCNT_dec_NN(filter_sub);
3926 if (path_searchable) {
3931 dir = SvPV_nomg_const(dirsv, dirlen);
3937 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3941 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3944 sv_setpv(namesv, unixdir);
3945 sv_catpv(namesv, unixname);
3947 # ifdef __SYMBIAN32__
3948 if (PL_origfilename[0] &&
3949 PL_origfilename[1] == ':' &&
3950 !(dir[0] && dir[1] == ':'))
3951 Perl_sv_setpvf(aTHX_ namesv,
3956 Perl_sv_setpvf(aTHX_ namesv,
3960 /* The equivalent of
3961 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3962 but without the need to parse the format string, or
3963 call strlen on either pointer, and with the correct
3964 allocation up front. */
3966 char *tmp = SvGROW(namesv, dirlen + len + 2);
3968 memcpy(tmp, dir, dirlen);
3971 /* Avoid '<dir>//<file>' */
3972 if (!dirlen || *(tmp-1) != '/') {
3975 /* So SvCUR_set reports the correct length below */
3979 /* name came from an SV, so it will have a '\0' at the
3980 end that we can copy as part of this memcpy(). */
3981 memcpy(tmp, name, len + 1);
3983 SvCUR_set(namesv, dirlen + len + 1);
3988 TAINT_PROPER("require");
3989 tryname = SvPVX_const(namesv);
3990 tryrsfp = doopen_pm(namesv);
3992 if (tryname[0] == '.' && tryname[1] == '/') {
3994 while (*++tryname == '/') {}
3998 else if (errno == EMFILE || errno == EACCES) {
3999 /* no point in trying other paths if out of handles;
4000 * on the other hand, if we couldn't open one of the
4001 * files, then going on with the search could lead to
4002 * unexpected results; see perl #113422
4011 saved_errno = errno; /* sv_2mortal can realloc things */
4014 if (PL_op->op_type == OP_REQUIRE) {
4015 if(saved_errno == EMFILE || saved_errno == EACCES) {
4016 /* diag_listed_as: Can't locate %s */
4017 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4019 if (namesv) { /* did we lookup @INC? */
4020 AV * const ar = GvAVn(PL_incgv);
4022 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4023 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4024 for (i = 0; i <= AvFILL(ar); i++) {
4025 sv_catpvs(inc, " ");
4026 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4028 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4029 const char *c, *e = name + len - 3;
4030 sv_catpv(msg, " (you may need to install the ");
4031 for (c = name; c < e; c++) {
4033 sv_catpvs(msg, "::");
4036 sv_catpvn(msg, c, 1);
4039 sv_catpv(msg, " module)");
4041 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4042 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4044 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4045 sv_catpv(msg, " (did you run h2ph?)");
4048 /* diag_listed_as: Can't locate %s */
4050 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4054 DIE(aTHX_ "Can't locate %s", name);
4061 SETERRNO(0, SS_NORMAL);
4063 /* Assume success here to prevent recursive requirement. */
4064 /* name is never assigned to again, so len is still strlen(name) */
4065 /* Check whether a hook in @INC has already filled %INC */
4067 (void)hv_store(GvHVn(PL_incgv),
4068 unixname, unixlen, newSVpv(tryname,0),0);
4070 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4072 (void)hv_store(GvHVn(PL_incgv),
4073 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4076 ENTER_with_name("eval");
4078 SAVECOPFILE_FREE(&PL_compiling);
4079 CopFILE_set(&PL_compiling, tryname);
4080 lex_start(NULL, tryrsfp, 0);
4082 if (filter_sub || filter_cache) {
4083 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4084 than hanging another SV from it. In turn, filter_add() optionally
4085 takes the SV to use as the filter (or creates a new SV if passed
4086 NULL), so simply pass in whatever value filter_cache has. */
4087 SV * const fc = filter_cache ? newSV(0) : NULL;
4089 if (fc) sv_copypv(fc, filter_cache);
4090 datasv = filter_add(S_run_user_filter, fc);
4091 IoLINES(datasv) = filter_has_file;
4092 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4093 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4096 /* switch to eval mode */
4097 PUSHBLOCK(cx, CXt_EVAL, SP);
4099 cx->blk_eval.retop = PL_op->op_next;
4101 SAVECOPLINE(&PL_compiling);
4102 CopLINE_set(&PL_compiling, 0);
4106 /* Store and reset encoding. */
4107 encoding = PL_encoding;
4110 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4111 op = DOCATCH(PL_eval_start);
4113 op = PL_op->op_next;
4115 /* Restore encoding. */
4116 PL_encoding = encoding;
4118 LOADED_FILE_PROBE(unixname);
4123 /* This is a op added to hold the hints hash for
4124 pp_entereval. The hash can be modified by the code
4125 being eval'ed, so we return a copy instead. */
4130 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4140 const I32 gimme = GIMME_V;
4141 const U32 was = PL_breakable_sub_gen;
4142 char tbuf[TYPE_DIGITS(long) + 12];
4143 bool saved_delete = FALSE;
4144 char *tmpbuf = tbuf;
4147 U32 seq, lex_flags = 0;
4148 HV *saved_hh = NULL;
4149 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4151 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4152 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4154 else if (PL_hints & HINT_LOCALIZE_HH || (
4155 PL_op->op_private & OPpEVAL_COPHH
4156 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4158 saved_hh = cop_hints_2hv(PL_curcop, 0);
4159 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4163 /* make sure we've got a plain PV (no overload etc) before testing
4164 * for taint. Making a copy here is probably overkill, but better
4165 * safe than sorry */
4167 const char * const p = SvPV_const(sv, len);
4169 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4170 lex_flags |= LEX_START_COPIED;
4172 if (bytes && SvUTF8(sv))
4173 SvPVbyte_force(sv, len);
4175 else if (bytes && SvUTF8(sv)) {
4176 /* Don't modify someone else's scalar */
4179 (void)sv_2mortal(sv);
4180 SvPVbyte_force(sv,len);
4181 lex_flags |= LEX_START_COPIED;
4184 TAINT_IF(SvTAINTED(sv));
4185 TAINT_PROPER("eval");
4187 ENTER_with_name("eval");
4188 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4189 ? LEX_IGNORE_UTF8_HINTS
4190 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4195 /* switch to eval mode */
4197 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4198 SV * const temp_sv = sv_newmortal();
4199 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4200 (unsigned long)++PL_evalseq,
4201 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4202 tmpbuf = SvPVX(temp_sv);
4203 len = SvCUR(temp_sv);
4206 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4207 SAVECOPFILE_FREE(&PL_compiling);
4208 CopFILE_set(&PL_compiling, tmpbuf+2);
4209 SAVECOPLINE(&PL_compiling);
4210 CopLINE_set(&PL_compiling, 1);
4211 /* special case: an eval '' executed within the DB package gets lexically
4212 * placed in the first non-DB CV rather than the current CV - this
4213 * allows the debugger to execute code, find lexicals etc, in the
4214 * scope of the code being debugged. Passing &seq gets find_runcv
4215 * to do the dirty work for us */
4216 runcv = find_runcv(&seq);
4218 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4220 cx->blk_eval.retop = PL_op->op_next;
4222 /* prepare to compile string */
4224 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4225 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4227 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4228 deleting the eval's FILEGV from the stash before gv_check() runs
4229 (i.e. before run-time proper). To work around the coredump that
4230 ensues, we always turn GvMULTI_on for any globals that were
4231 introduced within evals. See force_ident(). GSAR 96-10-12 */
4232 char *const safestr = savepvn(tmpbuf, len);
4233 SAVEDELETE(PL_defstash, safestr, len);
4234 saved_delete = TRUE;
4239 if (doeval(gimme, runcv, seq, saved_hh)) {
4240 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4241 ? (PERLDB_LINE || PERLDB_SAVESRC)
4242 : PERLDB_SAVESRC_NOSUBS) {
4243 /* Retain the filegv we created. */
4244 } else if (!saved_delete) {
4245 char *const safestr = savepvn(tmpbuf, len);
4246 SAVEDELETE(PL_defstash, safestr, len);
4248 return DOCATCH(PL_eval_start);
4250 /* We have already left the scope set up earlier thanks to the LEAVE
4252 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4253 ? (PERLDB_LINE || PERLDB_SAVESRC)
4254 : PERLDB_SAVESRC_INVALID) {
4255 /* Retain the filegv we created. */
4256 } else if (!saved_delete) {
4257 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4259 return PL_op->op_next;
4271 const U8 save_flags = PL_op -> op_flags;
4279 namesv = cx->blk_eval.old_namesv;
4280 retop = cx->blk_eval.retop;
4281 evalcv = cx->blk_eval.cv;
4284 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4285 gimme, SVs_TEMP, FALSE);
4286 PL_curpm = newpm; /* Don't pop $1 et al till now */
4289 assert(CvDEPTH(evalcv) == 1);
4291 CvDEPTH(evalcv) = 0;
4293 if (optype == OP_REQUIRE &&
4294 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4296 /* Unassume the success we assumed earlier. */
4297 (void)hv_delete(GvHVn(PL_incgv),
4298 SvPVX_const(namesv),
4299 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4301 Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
4302 NOT_REACHED; /* NOTREACHED */
4303 /* die_unwind() did LEAVE, or we won't be here */
4306 LEAVE_with_name("eval");
4307 if (!(save_flags & OPf_SPECIAL)) {
4315 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4316 close to the related Perl_create_eval_scope. */
4318 Perl_delete_eval_scope(pTHX)
4329 LEAVE_with_name("eval_scope");
4330 PERL_UNUSED_VAR(newsp);
4331 PERL_UNUSED_VAR(gimme);
4332 PERL_UNUSED_VAR(optype);
4335 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4336 also needed by Perl_fold_constants. */
4338 Perl_create_eval_scope(pTHX_ U32 flags)
4341 const I32 gimme = GIMME_V;
4343 ENTER_with_name("eval_scope");
4346 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4349 PL_in_eval = EVAL_INEVAL;
4350 if (flags & G_KEEPERR)
4351 PL_in_eval |= EVAL_KEEPERR;
4354 if (flags & G_FAKINGEVAL) {
4355 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4362 PERL_CONTEXT * const cx = create_eval_scope(0);
4363 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4364 return DOCATCH(PL_op->op_next);
4379 PERL_UNUSED_VAR(optype);
4382 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4383 SVs_PADTMP|SVs_TEMP, FALSE);
4384 PL_curpm = newpm; /* Don't pop $1 et al till now */
4386 LEAVE_with_name("eval_scope");
4395 const I32 gimme = GIMME_V;
4397 ENTER_with_name("given");
4400 if (PL_op->op_targ) {
4401 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4402 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4403 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4410 PUSHBLOCK(cx, CXt_GIVEN, SP);
4423 PERL_UNUSED_CONTEXT;
4426 assert(CxTYPE(cx) == CXt_GIVEN);
4429 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4430 SVs_PADTMP|SVs_TEMP, FALSE);
4431 PL_curpm = newpm; /* Don't pop $1 et al till now */
4433 LEAVE_with_name("given");
4437 /* Helper routines used by pp_smartmatch */
4439 S_make_matcher(pTHX_ REGEXP *re)
4441 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4443 PERL_ARGS_ASSERT_MAKE_MATCHER;
4445 PM_SETRE(matcher, ReREFCNT_inc(re));
4447 SAVEFREEOP((OP *) matcher);
4448 ENTER_with_name("matcher"); SAVETMPS;
4454 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4458 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4460 PL_op = (OP *) matcher;
4463 (void) Perl_pp_match(aTHX);
4465 return (SvTRUEx(POPs));
4469 S_destroy_matcher(pTHX_ PMOP *matcher)
4471 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4472 PERL_UNUSED_ARG(matcher);
4475 LEAVE_with_name("matcher");
4478 /* Do a smart match */
4481 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4482 return do_smartmatch(NULL, NULL, 0);
4485 /* This version of do_smartmatch() implements the
4486 * table of smart matches that is found in perlsyn.
4489 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4493 bool object_on_left = FALSE;
4494 SV *e = TOPs; /* e is for 'expression' */
4495 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4497 /* Take care only to invoke mg_get() once for each argument.
4498 * Currently we do this by copying the SV if it's magical. */
4500 if (!copied && SvGMAGICAL(d))
4501 d = sv_mortalcopy(d);
4508 e = sv_mortalcopy(e);
4510 /* First of all, handle overload magic of the rightmost argument */
4513 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4514 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4516 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4523 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4526 SP -= 2; /* Pop the values */
4531 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4538 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4539 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4540 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4542 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4543 object_on_left = TRUE;
4546 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4548 if (object_on_left) {
4549 goto sm_any_sub; /* Treat objects like scalars */
4551 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4552 /* Test sub truth for each key */
4554 bool andedresults = TRUE;
4555 HV *hv = (HV*) SvRV(d);
4556 I32 numkeys = hv_iterinit(hv);
4557 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4560 while ( (he = hv_iternext(hv)) ) {
4561 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4562 ENTER_with_name("smartmatch_hash_key_test");
4565 PUSHs(hv_iterkeysv(he));
4567 c = call_sv(e, G_SCALAR);
4570 andedresults = FALSE;
4572 andedresults = SvTRUEx(POPs) && andedresults;
4574 LEAVE_with_name("smartmatch_hash_key_test");
4581 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4582 /* Test sub truth for each element */
4584 bool andedresults = TRUE;
4585 AV *av = (AV*) SvRV(d);
4586 const I32 len = av_tindex(av);
4587 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4590 for (i = 0; i <= len; ++i) {
4591 SV * const * const svp = av_fetch(av, i, FALSE);
4592 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4593 ENTER_with_name("smartmatch_array_elem_test");
4599 c = call_sv(e, G_SCALAR);
4602 andedresults = FALSE;
4604 andedresults = SvTRUEx(POPs) && andedresults;
4606 LEAVE_with_name("smartmatch_array_elem_test");
4615 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4616 ENTER_with_name("smartmatch_coderef");
4621 c = call_sv(e, G_SCALAR);
4625 else if (SvTEMP(TOPs))
4626 SvREFCNT_inc_void(TOPs);
4628 LEAVE_with_name("smartmatch_coderef");
4633 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4634 if (object_on_left) {
4635 goto sm_any_hash; /* Treat objects like scalars */
4637 else if (!SvOK(d)) {
4638 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4641 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4642 /* Check that the key-sets are identical */
4644 HV *other_hv = MUTABLE_HV(SvRV(d));
4647 U32 this_key_count = 0,
4648 other_key_count = 0;
4649 HV *hv = MUTABLE_HV(SvRV(e));
4651 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4652 /* Tied hashes don't know how many keys they have. */
4653 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4654 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4658 HV * const temp = other_hv;
4664 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4668 /* The hashes have the same number of keys, so it suffices
4669 to check that one is a subset of the other. */
4670 (void) hv_iterinit(hv);
4671 while ( (he = hv_iternext(hv)) ) {
4672 SV *key = hv_iterkeysv(he);
4674 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4677 if(!hv_exists_ent(other_hv, key, 0)) {
4678 (void) hv_iterinit(hv); /* reset iterator */
4684 (void) hv_iterinit(other_hv);
4685 while ( hv_iternext(other_hv) )
4689 other_key_count = HvUSEDKEYS(other_hv);
4691 if (this_key_count != other_key_count)
4696 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4697 AV * const other_av = MUTABLE_AV(SvRV(d));
4698 const SSize_t other_len = av_tindex(other_av) + 1;
4700 HV *hv = MUTABLE_HV(SvRV(e));
4702 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4703 for (i = 0; i < other_len; ++i) {
4704 SV ** const svp = av_fetch(other_av, i, FALSE);
4705 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4706 if (svp) { /* ??? When can this not happen? */
4707 if (hv_exists_ent(hv, *svp, 0))
4713 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4714 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4717 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4719 HV *hv = MUTABLE_HV(SvRV(e));
4721 (void) hv_iterinit(hv);
4722 while ( (he = hv_iternext(hv)) ) {
4723 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4724 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4725 (void) hv_iterinit(hv);
4726 destroy_matcher(matcher);
4730 destroy_matcher(matcher);
4736 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4737 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4744 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4745 if (object_on_left) {
4746 goto sm_any_array; /* Treat objects like scalars */
4748 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4749 AV * const other_av = MUTABLE_AV(SvRV(e));
4750 const SSize_t other_len = av_tindex(other_av) + 1;
4753 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4754 for (i = 0; i < other_len; ++i) {
4755 SV ** const svp = av_fetch(other_av, i, FALSE);
4757 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4758 if (svp) { /* ??? When can this not happen? */
4759 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4765 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4766 AV *other_av = MUTABLE_AV(SvRV(d));
4767 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4768 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4772 const SSize_t other_len = av_tindex(other_av);
4774 if (NULL == seen_this) {
4775 seen_this = newHV();
4776 (void) sv_2mortal(MUTABLE_SV(seen_this));
4778 if (NULL == seen_other) {
4779 seen_other = newHV();
4780 (void) sv_2mortal(MUTABLE_SV(seen_other));
4782 for(i = 0; i <= other_len; ++i) {
4783 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4784 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4786 if (!this_elem || !other_elem) {
4787 if ((this_elem && SvOK(*this_elem))
4788 || (other_elem && SvOK(*other_elem)))
4791 else if (hv_exists_ent(seen_this,
4792 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4793 hv_exists_ent(seen_other,
4794 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4796 if (*this_elem != *other_elem)
4800 (void)hv_store_ent(seen_this,
4801 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4803 (void)hv_store_ent(seen_other,
4804 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4810 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4811 (void) do_smartmatch(seen_this, seen_other, 0);
4813 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4822 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4823 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4826 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4827 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4830 for(i = 0; i <= this_len; ++i) {
4831 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4832 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4833 if (svp && matcher_matches_sv(matcher, *svp)) {
4834 destroy_matcher(matcher);
4838 destroy_matcher(matcher);
4842 else if (!SvOK(d)) {
4843 /* undef ~~ array */
4844 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4847 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4848 for (i = 0; i <= this_len; ++i) {
4849 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4850 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4851 if (!svp || !SvOK(*svp))
4860 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4862 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4863 for (i = 0; i <= this_len; ++i) {
4864 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4871 /* infinite recursion isn't supposed to happen here */
4872 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4873 (void) do_smartmatch(NULL, NULL, 1);
4875 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4884 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4885 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4886 SV *t = d; d = e; e = t;
4887 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4890 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4891 SV *t = d; d = e; e = t;
4892 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4893 goto sm_regex_array;
4896 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4898 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4900 PUSHs(matcher_matches_sv(matcher, d)
4903 destroy_matcher(matcher);
4908 /* See if there is overload magic on left */
4909 else if (object_on_left && SvAMAGIC(d)) {
4911 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4912 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4915 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4923 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4926 else if (!SvOK(d)) {
4927 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4928 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4933 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4934 DEBUG_M(if (SvNIOK(e))
4935 Perl_deb(aTHX_ " applying rule Any-Num\n");
4937 Perl_deb(aTHX_ " applying rule Num-numish\n");
4939 /* numeric comparison */
4942 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4943 (void) Perl_pp_i_eq(aTHX);
4945 (void) Perl_pp_eq(aTHX);
4953 /* As a last resort, use string comparison */
4954 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4957 return Perl_pp_seq(aTHX);
4964 const I32 gimme = GIMME_V;
4966 /* This is essentially an optimization: if the match
4967 fails, we don't want to push a context and then
4968 pop it again right away, so we skip straight
4969 to the op that follows the leavewhen.
4970 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4972 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4973 RETURNOP(cLOGOP->op_other->op_next);
4975 ENTER_with_name("when");
4978 PUSHBLOCK(cx, CXt_WHEN, SP);
4993 cxix = dopoptogiven(cxstack_ix);
4995 /* diag_listed_as: Can't "when" outside a topicalizer */
4996 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4997 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5000 assert(CxTYPE(cx) == CXt_WHEN);
5003 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
5004 SVs_PADTMP|SVs_TEMP, FALSE);
5005 PL_curpm = newpm; /* pop $1 et al */
5007 LEAVE_with_name("when");
5009 if (cxix < cxstack_ix)
5012 cx = &cxstack[cxix];
5014 if (CxFOREACH(cx)) {
5015 /* clear off anything above the scope we're re-entering */
5016 I32 inner = PL_scopestack_ix;
5019 if (PL_scopestack_ix < inner)
5020 leave_scope(PL_scopestack[PL_scopestack_ix]);
5021 PL_curcop = cx->blk_oldcop;
5024 return cx->blk_loop.my_op->op_nextop;
5028 RETURNOP(cx->blk_givwhen.leave_op);
5041 PERL_UNUSED_VAR(gimme);
5043 cxix = dopoptowhen(cxstack_ix);
5045 DIE(aTHX_ "Can't \"continue\" outside a when block");
5047 if (cxix < cxstack_ix)
5051 assert(CxTYPE(cx) == CXt_WHEN);
5054 PL_curpm = newpm; /* pop $1 et al */
5056 LEAVE_with_name("when");
5057 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5065 cxix = dopoptogiven(cxstack_ix);
5067 DIE(aTHX_ "Can't \"break\" outside a given block");
5069 cx = &cxstack[cxix];
5071 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5073 if (cxix < cxstack_ix)
5076 /* Restore the sp at the time we entered the given block */
5079 return cx->blk_givwhen.leave_op;
5083 S_doparseform(pTHX_ SV *sv)
5086 char *s = SvPV(sv, len);
5088 char *base = NULL; /* start of current field */
5089 I32 skipspaces = 0; /* number of contiguous spaces seen */
5090 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5091 bool repeat = FALSE; /* ~~ seen on this line */
5092 bool postspace = FALSE; /* a text field may need right padding */
5095 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5097 bool ischop; /* it's a ^ rather than a @ */
5098 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5099 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5103 PERL_ARGS_ASSERT_DOPARSEFORM;
5106 Perl_croak(aTHX_ "Null picture in formline");
5108 if (SvTYPE(sv) >= SVt_PVMG) {
5109 /* This might, of course, still return NULL. */
5110 mg = mg_find(sv, PERL_MAGIC_fm);
5112 sv_upgrade(sv, SVt_PVMG);
5116 /* still the same as previously-compiled string? */
5117 SV *old = mg->mg_obj;
5118 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5119 && len == SvCUR(old)
5120 && strnEQ(SvPVX(old), SvPVX(sv), len)
5122 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5126 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5127 Safefree(mg->mg_ptr);
5133 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5134 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5137 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5138 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5142 /* estimate the buffer size needed */
5143 for (base = s; s <= send; s++) {
5144 if (*s == '\n' || *s == '@' || *s == '^')
5150 Newx(fops, maxops, U32);
5155 *fpc++ = FF_LINEMARK;
5156 noblank = repeat = FALSE;
5174 case ' ': case '\t':
5181 } /* else FALL THROUGH */
5189 *fpc++ = FF_LITERAL;
5197 *fpc++ = (U32)skipspaces;
5201 *fpc++ = FF_NEWLINE;
5205 arg = fpc - linepc + 1;
5212 *fpc++ = FF_LINEMARK;
5213 noblank = repeat = FALSE;
5222 ischop = s[-1] == '^';
5228 arg = (s - base) - 1;
5230 *fpc++ = FF_LITERAL;
5236 if (*s == '*') { /* @* or ^* */
5238 *fpc++ = 2; /* skip the @* or ^* */
5240 *fpc++ = FF_LINESNGL;
5243 *fpc++ = FF_LINEGLOB;
5245 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5246 arg = ischop ? FORM_NUM_BLANK : 0;
5251 const char * const f = ++s;
5254 arg |= FORM_NUM_POINT + (s - f);
5256 *fpc++ = s - base; /* fieldsize for FETCH */
5257 *fpc++ = FF_DECIMAL;
5259 unchopnum |= ! ischop;
5261 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5262 arg = ischop ? FORM_NUM_BLANK : 0;
5264 s++; /* skip the '0' first */
5268 const char * const f = ++s;
5271 arg |= FORM_NUM_POINT + (s - f);
5273 *fpc++ = s - base; /* fieldsize for FETCH */
5274 *fpc++ = FF_0DECIMAL;
5276 unchopnum |= ! ischop;
5278 else { /* text field */
5280 bool ismore = FALSE;
5283 while (*++s == '>') ;
5284 prespace = FF_SPACE;
5286 else if (*s == '|') {
5287 while (*++s == '|') ;
5288 prespace = FF_HALFSPACE;
5293 while (*++s == '<') ;
5296 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5300 *fpc++ = s - base; /* fieldsize for FETCH */
5302 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5305 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5319 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5322 mg->mg_ptr = (char *) fops;
5323 mg->mg_len = arg * sizeof(U32);
5324 mg->mg_obj = sv_copy;
5325 mg->mg_flags |= MGf_REFCOUNTED;
5327 if (unchopnum && repeat)
5328 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5335 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5337 /* Can value be printed in fldsize chars, using %*.*f ? */
5341 int intsize = fldsize - (value < 0 ? 1 : 0);
5343 if (frcsize & FORM_NUM_POINT)
5345 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5348 while (intsize--) pwr *= 10.0;
5349 while (frcsize--) eps /= 10.0;
5352 if (value + eps >= pwr)
5355 if (value - eps <= -pwr)
5362 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5364 SV * const datasv = FILTER_DATA(idx);
5365 const int filter_has_file = IoLINES(datasv);
5366 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5367 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5372 char *prune_from = NULL;
5373 bool read_from_cache = FALSE;
5377 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5379 assert(maxlen >= 0);
5382 /* I was having segfault trouble under Linux 2.2.5 after a
5383 parse error occured. (Had to hack around it with a test
5384 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5385 not sure where the trouble is yet. XXX */
5388 SV *const cache = datasv;
5391 const char *cache_p = SvPV(cache, cache_len);
5395 /* Running in block mode and we have some cached data already.
5397 if (cache_len >= umaxlen) {
5398 /* In fact, so much data we don't even need to call
5403 const char *const first_nl =
5404 (const char *)memchr(cache_p, '\n', cache_len);
5406 take = first_nl + 1 - cache_p;
5410 sv_catpvn(buf_sv, cache_p, take);
5411 sv_chop(cache, cache_p + take);
5412 /* Definitely not EOF */
5416 sv_catsv(buf_sv, cache);
5418 umaxlen -= cache_len;
5421 read_from_cache = TRUE;
5425 /* Filter API says that the filter appends to the contents of the buffer.
5426 Usually the buffer is "", so the details don't matter. But if it's not,
5427 then clearly what it contains is already filtered by this filter, so we
5428 don't want to pass it in a second time.
5429 I'm going to use a mortal in case the upstream filter croaks. */
5430 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5431 ? sv_newmortal() : buf_sv;
5432 SvUPGRADE(upstream, SVt_PV);
5434 if (filter_has_file) {
5435 status = FILTER_READ(idx+1, upstream, 0);
5438 if (filter_sub && status >= 0) {
5442 ENTER_with_name("call_filter_sub");
5447 DEFSV_set(upstream);
5451 PUSHs(filter_state);
5454 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5464 SV * const errsv = ERRSV;
5465 if (SvTRUE_NN(errsv))
5466 err = newSVsv(errsv);
5472 LEAVE_with_name("call_filter_sub");
5475 if (SvGMAGICAL(upstream)) {
5477 if (upstream == buf_sv) mg_free(buf_sv);
5479 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5480 if(!err && SvOK(upstream)) {
5481 got_p = SvPV_nomg(upstream, got_len);
5483 if (got_len > umaxlen) {
5484 prune_from = got_p + umaxlen;
5487 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5488 if (first_nl && first_nl + 1 < got_p + got_len) {
5489 /* There's a second line here... */
5490 prune_from = first_nl + 1;
5494 if (!err && prune_from) {
5495 /* Oh. Too long. Stuff some in our cache. */
5496 STRLEN cached_len = got_p + got_len - prune_from;
5497 SV *const cache = datasv;
5500 /* Cache should be empty. */
5501 assert(!SvCUR(cache));
5504 sv_setpvn(cache, prune_from, cached_len);
5505 /* If you ask for block mode, you may well split UTF-8 characters.
5506 "If it breaks, you get to keep both parts"
5507 (Your code is broken if you don't put them back together again
5508 before something notices.) */
5509 if (SvUTF8(upstream)) {
5512 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5514 /* Cannot just use sv_setpvn, as that could free the buffer
5515 before we have a chance to assign it. */
5516 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5517 got_len - cached_len);
5519 /* Can't yet be EOF */
5524 /* If they are at EOF but buf_sv has something in it, then they may never
5525 have touched the SV upstream, so it may be undefined. If we naively
5526 concatenate it then we get a warning about use of uninitialised value.
5528 if (!err && upstream != buf_sv &&
5530 sv_catsv_nomg(buf_sv, upstream);
5532 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5535 IoLINES(datasv) = 0;
5537 SvREFCNT_dec(filter_state);
5538 IoTOP_GV(datasv) = NULL;
5541 SvREFCNT_dec(filter_sub);
5542 IoBOTTOM_GV(datasv) = NULL;
5544 filter_del(S_run_user_filter);
5550 if (status == 0 && read_from_cache) {
5551 /* If we read some data from the cache (and by getting here it implies
5552 that we emptied the cache) then we aren't yet at EOF, and mustn't
5553 report that to our caller. */
5561 * c-indentation-style: bsd
5563 * indent-tabs-mode: nil
5566 * ex: set ts=8 sts=4 sw=4 et: