3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
80 PMOP *pm = (PMOP*)cLOGOP->op_other;
85 const regexp_engine *eng;
86 bool is_bare_re= FALSE;
88 if (PL_op->op_flags & OPf_STACKED) {
98 /* prevent recompiling under /o and ithreads. */
99 #if defined(USE_ITHREADS)
100 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
107 assert (re != (REGEXP*) &PL_sv_undef);
108 eng = re ? RX_ENGINE(re) : current_re_engine();
111 In the below logic: these are basically the same - check if this regcomp is part of a split.
113 (PL_op->op_pmflags & PMf_split )
114 (PL_op->op_next->op_type == OP_PUSHRE)
116 We could add a new mask for this and copy the PMf_split, if we did
117 some bit definition fiddling first.
119 For now we leave this
122 new_re = (eng->op_comp
124 : &Perl_re_op_compile
125 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
127 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
129 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
131 if (pm->op_pmflags & PMf_HAS_CV)
132 ReANY(new_re)->qr_anoncv
133 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
137 /* The match's LHS's get-magic might need to access this op's regexp
138 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
139 get-magic now before we replace the regexp. Hopefully this hack can
140 be replaced with the approach described at
141 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
143 if (pm->op_type == OP_MATCH) {
145 const bool was_tainted = TAINT_get;
146 if (pm->op_flags & OPf_STACKED)
148 else if (pm->op_private & OPpTARGET_MY)
149 lhs = PAD_SV(pm->op_targ);
152 /* Restore the previous value of PL_tainted (which may have been
153 modified by get-magic), to avoid incorrectly setting the
154 RXf_TAINTED flag with RX_TAINT_on further down. */
155 TAINT_set(was_tainted);
156 #ifdef NO_TAINT_SUPPORT
157 PERL_UNUSED_VAR(was_tainted);
160 tmp = reg_temp_copy(NULL, new_re);
161 ReREFCNT_dec(new_re);
167 PM_SETRE(pm, new_re);
171 if (TAINTING_get && TAINT_get) {
172 SvTAINTED_on((SV*)new_re);
176 #if !defined(USE_ITHREADS)
177 /* can't change the optree at runtime either */
178 /* PMf_KEEP is handled differently under threads to avoid these problems */
179 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
181 if (pm->op_pmflags & PMf_KEEP) {
182 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
183 cLOGOP->op_first->op_next = PL_op->op_next;
196 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
197 PMOP * const pm = (PMOP*) cLOGOP->op_other;
198 SV * const dstr = cx->sb_dstr;
201 char *orig = cx->sb_orig;
202 REGEXP * const rx = cx->sb_rx;
204 REGEXP *old = PM_GETRE(pm);
211 PM_SETRE(pm,ReREFCNT_inc(rx));
214 rxres_restore(&cx->sb_rxres, rx);
216 if (cx->sb_iters++) {
217 const I32 saviters = cx->sb_iters;
218 if (cx->sb_iters > cx->sb_maxiters)
219 DIE(aTHX_ "Substitution loop");
221 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
223 /* See "how taint works" above pp_subst() */
225 cx->sb_rxtainted |= SUBST_TAINT_REPL;
226 sv_catsv_nomg(dstr, POPs);
227 if (CxONCE(cx) || s < orig ||
228 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
229 (s == m), cx->sb_targ, NULL,
230 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
232 SV *targ = cx->sb_targ;
234 assert(cx->sb_strend >= s);
235 if(cx->sb_strend > s) {
236 if (DO_UTF8(dstr) && !SvUTF8(targ))
237 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
239 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
241 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
242 cx->sb_rxtainted |= SUBST_TAINT_PAT;
244 if (pm->op_pmflags & PMf_NONDESTRUCT) {
246 /* From here on down we're using the copy, and leaving the
247 original untouched. */
251 SV_CHECK_THINKFIRST_COW_DROP(targ);
252 if (isGV(targ)) Perl_croak_no_modify();
254 SvPV_set(targ, SvPVX(dstr));
255 SvCUR_set(targ, SvCUR(dstr));
256 SvLEN_set(targ, SvLEN(dstr));
259 SvPV_set(dstr, NULL);
262 mPUSHi(saviters - 1);
264 (void)SvPOK_only_UTF8(targ);
267 /* update the taint state of various various variables in
268 * preparation for final exit.
269 * See "how taint works" above pp_subst() */
271 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
272 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
275 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
277 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
278 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
280 SvTAINTED_on(TOPs); /* taint return value */
281 /* needed for mg_set below */
283 cBOOL(cx->sb_rxtainted &
284 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
288 /* PL_tainted must be correctly set for this mg_set */
291 LEAVE_SCOPE(cx->sb_oldsave);
294 RETURNOP(pm->op_next);
295 assert(0); /* NOTREACHED */
297 cx->sb_iters = saviters;
299 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
302 assert(!RX_SUBOFFSET(rx));
303 cx->sb_orig = orig = RX_SUBBEG(rx);
305 cx->sb_strend = s + (cx->sb_strend - m);
307 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
309 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
310 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
312 sv_catpvn_nomg(dstr, s, m-s);
314 cx->sb_s = RX_OFFS(rx)[0].end + orig;
315 { /* Update the pos() information. */
317 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
319 if (!(mg = mg_find_mglob(sv))) {
320 mg = sv_magicext_mglob(sv);
323 MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
326 (void)ReREFCNT_inc(rx);
327 /* update the taint state of various various variables in preparation
328 * for calling the code block.
329 * See "how taint works" above pp_subst() */
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
335 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
336 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
340 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
341 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
342 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
343 ? cx->sb_dstr : cx->sb_targ);
346 rxres_save(&cx->sb_rxres, rx);
348 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
352 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
357 PERL_ARGS_ASSERT_RXRES_SAVE;
360 if (!p || p[1] < RX_NPARENS(rx)) {
362 i = 7 + (RX_NPARENS(rx)+1) * 2;
364 i = 6 + (RX_NPARENS(rx)+1) * 2;
373 /* what (if anything) to free on croak */
374 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
375 RX_MATCH_COPIED_off(rx);
376 *p++ = RX_NPARENS(rx);
379 *p++ = PTR2UV(RX_SAVED_COPY(rx));
380 RX_SAVED_COPY(rx) = NULL;
383 *p++ = PTR2UV(RX_SUBBEG(rx));
384 *p++ = (UV)RX_SUBLEN(rx);
385 *p++ = (UV)RX_SUBOFFSET(rx);
386 *p++ = (UV)RX_SUBCOFFSET(rx);
387 for (i = 0; i <= RX_NPARENS(rx); ++i) {
388 *p++ = (UV)RX_OFFS(rx)[i].start;
389 *p++ = (UV)RX_OFFS(rx)[i].end;
394 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
399 PERL_ARGS_ASSERT_RXRES_RESTORE;
402 RX_MATCH_COPY_FREE(rx);
403 RX_MATCH_COPIED_set(rx, *p);
405 RX_NPARENS(rx) = *p++;
408 if (RX_SAVED_COPY(rx))
409 SvREFCNT_dec (RX_SAVED_COPY(rx));
410 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
414 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
415 RX_SUBLEN(rx) = (I32)(*p++);
416 RX_SUBOFFSET(rx) = (I32)*p++;
417 RX_SUBCOFFSET(rx) = (I32)*p++;
418 for (i = 0; i <= RX_NPARENS(rx); ++i) {
419 RX_OFFS(rx)[i].start = (I32)(*p++);
420 RX_OFFS(rx)[i].end = (I32)(*p++);
425 S_rxres_free(pTHX_ void **rsp)
427 UV * const p = (UV*)*rsp;
429 PERL_ARGS_ASSERT_RXRES_FREE;
433 void *tmp = INT2PTR(char*,*p);
436 U32 i = 9 + p[1] * 2;
438 U32 i = 8 + p[1] * 2;
443 SvREFCNT_dec (INT2PTR(SV*,p[2]));
446 PoisonFree(p, i, sizeof(UV));
455 #define FORM_NUM_BLANK (1<<30)
456 #define FORM_NUM_POINT (1<<29)
460 dVAR; dSP; dMARK; dORIGMARK;
461 SV * const tmpForm = *++MARK;
462 SV *formsv; /* contains text of original format */
463 U32 *fpc; /* format ops program counter */
464 char *t; /* current append position in target string */
465 const char *f; /* current position in format string */
467 SV *sv = NULL; /* current item */
468 const char *item = NULL;/* string value of current item */
469 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
470 I32 itembytes = 0; /* as itemsize, but length in bytes */
471 I32 fieldsize = 0; /* width of current field */
472 I32 lines = 0; /* number of lines that have been output */
473 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
474 const char *chophere = NULL; /* where to chop current item */
475 STRLEN linemark = 0; /* pos of start of line in output */
477 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
478 STRLEN len; /* length of current sv */
479 STRLEN linemax; /* estimate of output size in bytes */
480 bool item_is_utf8 = FALSE;
481 bool targ_is_utf8 = FALSE;
484 U8 *source; /* source of bytes to append */
485 STRLEN to_copy; /* how may bytes to append */
486 char trans; /* what chars to translate */
488 mg = doparseform(tmpForm);
490 fpc = (U32*)mg->mg_ptr;
491 /* the actual string the format was compiled from.
492 * with overload etc, this may not match tmpForm */
496 SvPV_force(PL_formtarget, len);
497 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
498 SvTAINTED_on(PL_formtarget);
499 if (DO_UTF8(PL_formtarget))
501 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
502 t = SvGROW(PL_formtarget, len + linemax + 1);
503 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
505 f = SvPV_const(formsv, len);
509 const char *name = "???";
512 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
513 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
514 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
515 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
516 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
518 case FF_CHECKNL: name = "CHECKNL"; break;
519 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
520 case FF_SPACE: name = "SPACE"; break;
521 case FF_HALFSPACE: name = "HALFSPACE"; break;
522 case FF_ITEM: name = "ITEM"; break;
523 case FF_CHOP: name = "CHOP"; break;
524 case FF_LINEGLOB: name = "LINEGLOB"; break;
525 case FF_NEWLINE: name = "NEWLINE"; break;
526 case FF_MORE: name = "MORE"; break;
527 case FF_LINEMARK: name = "LINEMARK"; break;
528 case FF_END: name = "END"; break;
529 case FF_0DECIMAL: name = "0DECIMAL"; break;
530 case FF_LINESNGL: name = "LINESNGL"; break;
533 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
535 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
538 case FF_LINEMARK: /* start (or end) of a line */
539 linemark = t - SvPVX(PL_formtarget);
544 case FF_LITERAL: /* append <arg> literal chars */
549 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
552 case FF_SKIP: /* skip <arg> chars in format */
556 case FF_FETCH: /* get next item and set field size to <arg> */
565 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
568 SvTAINTED_on(PL_formtarget);
571 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
573 const char *s = item = SvPV_const(sv, len);
574 const char *send = s + len;
577 item_is_utf8 = DO_UTF8(sv);
589 if (itemsize == fieldsize)
592 itembytes = s - item;
596 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
598 const char *s = item = SvPV_const(sv, len);
599 const char *send = s + len;
603 item_is_utf8 = DO_UTF8(sv);
605 /* look for a legal split position */
613 /* provisional split point */
617 /* we delay testing fieldsize until after we've
618 * processed the possible split char directly
619 * following the last field char; so if fieldsize=3
620 * and item="a b cdef", we consume "a b", not "a".
621 * Ditto further down.
623 if (size == fieldsize)
627 if (strchr(PL_chopset, *s)) {
628 /* provisional split point */
629 /* for a non-space split char, we include
630 * the split char; hence the '+1' */
634 if (size == fieldsize)
646 if (!chophere || s == send) {
650 itembytes = chophere - item;
655 case FF_SPACE: /* append padding space (diff of field, item size) */
656 arg = fieldsize - itemsize;
664 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
665 arg = fieldsize - itemsize;
674 case FF_ITEM: /* append a text item, while blanking ctrl chars */
680 case FF_CHOP: /* (for ^*) chop the current item */
682 const char *s = chophere;
690 /* tied, overloaded or similar strangeness.
691 * Do it the hard way */
692 sv_setpvn(sv, s, len - (s-item));
697 case FF_LINESNGL: /* process ^* */
701 case FF_LINEGLOB: /* process @* */
703 const bool oneline = fpc[-1] == FF_LINESNGL;
704 const char *s = item = SvPV_const(sv, len);
705 const char *const send = s + len;
707 item_is_utf8 = DO_UTF8(sv);
718 to_copy = s - item - 1;
732 /* append to_copy bytes from source to PL_formstring.
733 * item_is_utf8 implies source is utf8.
734 * if trans, translate certain characters during the copy */
739 SvCUR_set(PL_formtarget,
740 t - SvPVX_const(PL_formtarget));
742 if (targ_is_utf8 && !item_is_utf8) {
743 source = tmp = bytes_to_utf8(source, &to_copy);
745 if (item_is_utf8 && !targ_is_utf8) {
747 /* Upgrade targ to UTF8, and then we reduce it to
748 a problem we have a simple solution for.
749 Don't need get magic. */
750 sv_utf8_upgrade_nomg(PL_formtarget);
752 /* re-calculate linemark */
753 s = (U8*)SvPVX(PL_formtarget);
754 /* the bytes we initially allocated to append the
755 * whole line may have been gobbled up during the
756 * upgrade, so allocate a whole new line's worth
761 linemark = s - (U8*)SvPVX(PL_formtarget);
763 /* Easy. They agree. */
764 assert (item_is_utf8 == targ_is_utf8);
767 /* @* and ^* are the only things that can exceed
768 * the linemax, so grow by the output size, plus
769 * a whole new form's worth in case of any further
771 grow = linemax + to_copy;
773 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
774 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
776 Copy(source, t, to_copy, char);
778 /* blank out ~ or control chars, depending on trans.
779 * works on bytes not chars, so relies on not
780 * matching utf8 continuation bytes */
782 U8 *send = s + to_copy;
785 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
792 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
798 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
800 #if defined(USE_LONG_DOUBLE)
802 ((arg & FORM_NUM_POINT) ?
803 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
806 ((arg & FORM_NUM_POINT) ?
807 "%#0*.*f" : "%0*.*f");
811 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
813 #if defined(USE_LONG_DOUBLE)
815 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
818 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
821 /* If the field is marked with ^ and the value is undefined,
823 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
831 /* overflow evidence */
832 if (num_overflow(value, fieldsize, arg)) {
838 /* Formats aren't yet marked for locales, so assume "yes". */
840 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
841 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
842 /* we generate fmt ourselves so it is safe */
843 GCC_DIAG_IGNORE(-Wformat-nonliteral);
844 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
846 RESTORE_LC_NUMERIC();
851 case FF_NEWLINE: /* delete trailing spaces, then append \n */
853 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
858 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
861 if (arg) { /* repeat until fields exhausted? */
867 t = SvPVX(PL_formtarget) + linemark;
872 case FF_MORE: /* replace long end of string with '...' */
874 const char *s = chophere;
875 const char *send = item + len;
877 while (isSPACE(*s) && (s < send))
882 arg = fieldsize - itemsize;
889 if (strnEQ(s1," ",3)) {
890 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
900 case FF_END: /* tidy up, then return */
902 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
904 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
906 SvUTF8_on(PL_formtarget);
907 FmLINES(PL_formtarget) += lines;
909 if (fpc[-1] == FF_BLANK)
910 RETURNOP(cLISTOP->op_first);
922 if (PL_stack_base + *PL_markstack_ptr == SP) {
924 if (GIMME_V == G_SCALAR)
926 RETURNOP(PL_op->op_next->op_next);
928 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
929 Perl_pp_pushmark(aTHX); /* push dst */
930 Perl_pp_pushmark(aTHX); /* push src */
931 ENTER_with_name("grep"); /* enter outer scope */
934 if (PL_op->op_private & OPpGREP_LEX)
935 SAVESPTR(PAD_SVl(PL_op->op_targ));
938 ENTER_with_name("grep_item"); /* enter inner scope */
941 src = PL_stack_base[*PL_markstack_ptr];
943 assert(!IS_PADGV(src));
944 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
948 if (PL_op->op_private & OPpGREP_LEX)
949 PAD_SVl(PL_op->op_targ) = src;
954 if (PL_op->op_type == OP_MAPSTART)
955 Perl_pp_pushmark(aTHX); /* push top */
956 return ((LOGOP*)PL_op->op_next)->op_other;
962 const I32 gimme = GIMME_V;
963 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
969 /* first, move source pointer to the next item in the source list */
970 ++PL_markstack_ptr[-1];
972 /* if there are new items, push them into the destination list */
973 if (items && gimme != G_VOID) {
974 /* might need to make room back there first */
975 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
976 /* XXX this implementation is very pessimal because the stack
977 * is repeatedly extended for every set of items. Is possible
978 * to do this without any stack extension or copying at all
979 * by maintaining a separate list over which the map iterates
980 * (like foreach does). --gsar */
982 /* everything in the stack after the destination list moves
983 * towards the end the stack by the amount of room needed */
984 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
986 /* items to shift up (accounting for the moved source pointer) */
987 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
989 /* This optimization is by Ben Tilly and it does
990 * things differently from what Sarathy (gsar)
991 * is describing. The downside of this optimization is
992 * that leaves "holes" (uninitialized and hopefully unused areas)
993 * to the Perl stack, but on the other hand this
994 * shouldn't be a problem. If Sarathy's idea gets
995 * implemented, this optimization should become
996 * irrelevant. --jhi */
998 shift = count; /* Avoid shifting too often --Ben Tilly */
1002 dst = (SP += shift);
1003 PL_markstack_ptr[-1] += shift;
1004 *PL_markstack_ptr += shift;
1008 /* copy the new items down to the destination list */
1009 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1010 if (gimme == G_ARRAY) {
1011 /* add returned items to the collection (making mortal copies
1012 * if necessary), then clear the current temps stack frame
1013 * *except* for those items. We do this splicing the items
1014 * into the start of the tmps frame (so some items may be on
1015 * the tmps stack twice), then moving PL_tmps_floor above
1016 * them, then freeing the frame. That way, the only tmps that
1017 * accumulate over iterations are the return values for map.
1018 * We have to do to this way so that everything gets correctly
1019 * freed if we die during the map.
1023 /* make space for the slice */
1024 EXTEND_MORTAL(items);
1025 tmpsbase = PL_tmps_floor + 1;
1026 Move(PL_tmps_stack + tmpsbase,
1027 PL_tmps_stack + tmpsbase + items,
1028 PL_tmps_ix - PL_tmps_floor,
1030 PL_tmps_ix += items;
1035 sv = sv_mortalcopy(sv);
1037 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1039 /* clear the stack frame except for the items */
1040 PL_tmps_floor += items;
1042 /* FREETMPS may have cleared the TEMP flag on some of the items */
1045 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1048 /* scalar context: we don't care about which values map returns
1049 * (we use undef here). And so we certainly don't want to do mortal
1050 * copies of meaningless values. */
1051 while (items-- > 0) {
1053 *dst-- = &PL_sv_undef;
1061 LEAVE_with_name("grep_item"); /* exit inner scope */
1064 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1066 (void)POPMARK; /* pop top */
1067 LEAVE_with_name("grep"); /* exit outer scope */
1068 (void)POPMARK; /* pop src */
1069 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1070 (void)POPMARK; /* pop dst */
1071 SP = PL_stack_base + POPMARK; /* pop original mark */
1072 if (gimme == G_SCALAR) {
1073 if (PL_op->op_private & OPpGREP_LEX) {
1074 SV* sv = sv_newmortal();
1075 sv_setiv(sv, items);
1083 else if (gimme == G_ARRAY)
1090 ENTER_with_name("grep_item"); /* enter inner scope */
1093 /* set $_ to the new source item */
1094 src = PL_stack_base[PL_markstack_ptr[-1]];
1095 if (SvPADTMP(src)) {
1096 assert(!IS_PADGV(src));
1097 src = sv_mortalcopy(src);
1100 if (PL_op->op_private & OPpGREP_LEX)
1101 PAD_SVl(PL_op->op_targ) = src;
1105 RETURNOP(cLOGOP->op_other);
1114 if (GIMME == G_ARRAY)
1116 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1117 return cLOGOP->op_other;
1127 if (GIMME == G_ARRAY) {
1128 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1132 SV * const targ = PAD_SV(PL_op->op_targ);
1135 if (PL_op->op_private & OPpFLIP_LINENUM) {
1136 if (GvIO(PL_last_in_gv)) {
1137 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1140 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1142 flip = SvIV(sv) == SvIV(GvSV(gv));
1148 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1149 if (PL_op->op_flags & OPf_SPECIAL) {
1157 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1160 sv_setpvs(TARG, "");
1166 /* This code tries to decide if "$left .. $right" should use the
1167 magical string increment, or if the range is numeric (we make
1168 an exception for .."0" [#18165]). AMS 20021031. */
1170 #define RANGE_IS_NUMERIC(left,right) ( \
1171 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1172 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1173 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1174 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1175 && (!SvOK(right) || looks_like_number(right))))
1181 if (GIMME == G_ARRAY) {
1187 if (RANGE_IS_NUMERIC(left,right)) {
1189 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1190 (SvOK(right) && (SvIOK(right)
1191 ? SvIsUV(right) && SvUV(right) > IV_MAX
1192 : SvNV_nomg(right) > IV_MAX)))
1193 DIE(aTHX_ "Range iterator outside integer range");
1194 i = SvIV_nomg(left);
1195 j = SvIV_nomg(right);
1197 /* Dance carefully around signed max. */
1198 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1201 /* The wraparound of signed integers is undefined
1202 * behavior, but here we aim for count >=1, and
1203 * negative count is just wrong. */
1208 Perl_croak(aTHX_ "Out of memory during list extend");
1215 SV * const sv = sv_2mortal(newSViv(i++));
1221 const char * const lpv = SvPV_nomg_const(left, llen);
1222 const char * const tmps = SvPV_nomg_const(right, len);
1224 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1225 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1227 if (strEQ(SvPVX_const(sv),tmps))
1229 sv = sv_2mortal(newSVsv(sv));
1236 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1240 if (PL_op->op_private & OPpFLIP_LINENUM) {
1241 if (GvIO(PL_last_in_gv)) {
1242 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1245 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1246 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1254 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1255 sv_catpvs(targ, "E0");
1265 static const char * const context_name[] = {
1267 NULL, /* CXt_WHEN never actually needs "block" */
1268 NULL, /* CXt_BLOCK never actually needs "block" */
1269 NULL, /* CXt_GIVEN never actually needs "block" */
1270 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1271 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1272 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1273 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1281 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1286 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1288 for (i = cxstack_ix; i >= 0; i--) {
1289 const PERL_CONTEXT * const cx = &cxstack[i];
1290 switch (CxTYPE(cx)) {
1296 /* diag_listed_as: Exiting subroutine via %s */
1297 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1298 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1299 if (CxTYPE(cx) == CXt_NULL)
1302 case CXt_LOOP_LAZYIV:
1303 case CXt_LOOP_LAZYSV:
1305 case CXt_LOOP_PLAIN:
1307 STRLEN cx_label_len = 0;
1308 U32 cx_label_flags = 0;
1309 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1311 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1314 (const U8*)cx_label, cx_label_len,
1315 (const U8*)label, len) == 0)
1317 (const U8*)label, len,
1318 (const U8*)cx_label, cx_label_len) == 0)
1319 : (len == cx_label_len && ((cx_label == label)
1320 || memEQ(cx_label, label, len))) )) {
1321 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1322 (long)i, cx_label));
1325 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1336 Perl_dowantarray(pTHX)
1339 const I32 gimme = block_gimme();
1340 return (gimme == G_VOID) ? G_SCALAR : gimme;
1344 Perl_block_gimme(pTHX)
1347 const I32 cxix = dopoptosub(cxstack_ix);
1351 switch (cxstack[cxix].blk_gimme) {
1359 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1360 assert(0); /* NOTREACHED */
1366 Perl_is_lvalue_sub(pTHX)
1369 const I32 cxix = dopoptosub(cxstack_ix);
1370 assert(cxix >= 0); /* We should only be called from inside subs */
1372 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1373 return CxLVAL(cxstack + cxix);
1378 /* only used by PUSHSUB */
1380 Perl_was_lvalue_sub(pTHX)
1383 const I32 cxix = dopoptosub(cxstack_ix-1);
1384 assert(cxix >= 0); /* We should only be called from inside subs */
1386 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1387 return CxLVAL(cxstack + cxix);
1393 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1398 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1400 for (i = startingblock; i >= 0; i--) {
1401 const PERL_CONTEXT * const cx = &cxstk[i];
1402 switch (CxTYPE(cx)) {
1406 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1407 * twice; the first for the normal foo() call, and the second
1408 * for a faked up re-entry into the sub to execute the
1409 * code block. Hide this faked entry from the world. */
1410 if (cx->cx_type & CXp_SUB_RE_FAKE)
1415 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1423 S_dopoptoeval(pTHX_ I32 startingblock)
1427 for (i = startingblock; i >= 0; i--) {
1428 const PERL_CONTEXT *cx = &cxstack[i];
1429 switch (CxTYPE(cx)) {
1433 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1441 S_dopoptoloop(pTHX_ I32 startingblock)
1445 for (i = startingblock; i >= 0; i--) {
1446 const PERL_CONTEXT * const cx = &cxstack[i];
1447 switch (CxTYPE(cx)) {
1453 /* diag_listed_as: Exiting subroutine via %s */
1454 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1455 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1456 if ((CxTYPE(cx)) == CXt_NULL)
1459 case CXt_LOOP_LAZYIV:
1460 case CXt_LOOP_LAZYSV:
1462 case CXt_LOOP_PLAIN:
1463 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1471 S_dopoptogiven(pTHX_ I32 startingblock)
1475 for (i = startingblock; i >= 0; i--) {
1476 const PERL_CONTEXT *cx = &cxstack[i];
1477 switch (CxTYPE(cx)) {
1481 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1483 case CXt_LOOP_PLAIN:
1484 assert(!CxFOREACHDEF(cx));
1486 case CXt_LOOP_LAZYIV:
1487 case CXt_LOOP_LAZYSV:
1489 if (CxFOREACHDEF(cx)) {
1490 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1499 S_dopoptowhen(pTHX_ I32 startingblock)
1503 for (i = startingblock; i >= 0; i--) {
1504 const PERL_CONTEXT *cx = &cxstack[i];
1505 switch (CxTYPE(cx)) {
1509 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1517 Perl_dounwind(pTHX_ I32 cxix)
1522 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1525 while (cxstack_ix > cxix) {
1527 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1528 DEBUG_CX("UNWIND"); \
1529 /* Note: we don't need to restore the base context info till the end. */
1530 switch (CxTYPE(cx)) {
1533 continue; /* not break */
1541 case CXt_LOOP_LAZYIV:
1542 case CXt_LOOP_LAZYSV:
1544 case CXt_LOOP_PLAIN:
1555 PERL_UNUSED_VAR(optype);
1559 Perl_qerror(pTHX_ SV *err)
1563 PERL_ARGS_ASSERT_QERROR;
1566 if (PL_in_eval & EVAL_KEEPERR) {
1567 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1571 sv_catsv(ERRSV, err);
1574 sv_catsv(PL_errors, err);
1576 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1578 ++PL_parser->error_count;
1582 Perl_die_unwind(pTHX_ SV *msv)
1585 SV *exceptsv = sv_mortalcopy(msv);
1586 U8 in_eval = PL_in_eval;
1587 PERL_ARGS_ASSERT_DIE_UNWIND;
1594 * Historically, perl used to set ERRSV ($@) early in the die
1595 * process and rely on it not getting clobbered during unwinding.
1596 * That sucked, because it was liable to get clobbered, so the
1597 * setting of ERRSV used to emit the exception from eval{} has
1598 * been moved to much later, after unwinding (see just before
1599 * JMPENV_JUMP below). However, some modules were relying on the
1600 * early setting, by examining $@ during unwinding to use it as
1601 * a flag indicating whether the current unwinding was caused by
1602 * an exception. It was never a reliable flag for that purpose,
1603 * being totally open to false positives even without actual
1604 * clobberage, but was useful enough for production code to
1605 * semantically rely on it.
1607 * We'd like to have a proper introspective interface that
1608 * explicitly describes the reason for whatever unwinding
1609 * operations are currently in progress, so that those modules
1610 * work reliably and $@ isn't further overloaded. But we don't
1611 * have one yet. In its absence, as a stopgap measure, ERRSV is
1612 * now *additionally* set here, before unwinding, to serve as the
1613 * (unreliable) flag that it used to.
1615 * This behaviour is temporary, and should be removed when a
1616 * proper way to detect exceptional unwinding has been developed.
1617 * As of 2010-12, the authors of modules relying on the hack
1618 * are aware of the issue, because the modules failed on
1619 * perls 5.13.{1..7} which had late setting of $@ without this
1620 * early-setting hack.
1622 if (!(in_eval & EVAL_KEEPERR)) {
1623 SvTEMP_off(exceptsv);
1624 sv_setsv(ERRSV, exceptsv);
1627 if (in_eval & EVAL_KEEPERR) {
1628 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1632 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1633 && PL_curstackinfo->si_prev)
1645 JMPENV *restartjmpenv;
1648 if (cxix < cxstack_ix)
1651 POPBLOCK(cx,PL_curpm);
1652 if (CxTYPE(cx) != CXt_EVAL) {
1654 const char* message = SvPVx_const(exceptsv, msglen);
1655 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1656 PerlIO_write(Perl_error_log, message, msglen);
1660 namesv = cx->blk_eval.old_namesv;
1661 oldcop = cx->blk_oldcop;
1662 restartjmpenv = cx->blk_eval.cur_top_env;
1663 restartop = cx->blk_eval.retop;
1665 if (gimme == G_SCALAR)
1666 *++newsp = &PL_sv_undef;
1667 PL_stack_sp = newsp;
1671 /* LEAVE could clobber PL_curcop (see save_re_context())
1672 * XXX it might be better to find a way to avoid messing with
1673 * PL_curcop in save_re_context() instead, but this is a more
1674 * minimal fix --GSAR */
1677 if (optype == OP_REQUIRE) {
1678 (void)hv_store(GvHVn(PL_incgv),
1679 SvPVX_const(namesv),
1680 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1682 /* note that unlike pp_entereval, pp_require isn't
1683 * supposed to trap errors. So now that we've popped the
1684 * EVAL that pp_require pushed, and processed the error
1685 * message, rethrow the error */
1686 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1687 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1690 if (!(in_eval & EVAL_KEEPERR))
1691 sv_setsv(ERRSV, exceptsv);
1692 PL_restartjmpenv = restartjmpenv;
1693 PL_restartop = restartop;
1695 assert(0); /* NOTREACHED */
1699 write_to_stderr(exceptsv);
1701 assert(0); /* NOTREACHED */
1706 dVAR; dSP; dPOPTOPssrl;
1707 if (SvTRUE(left) != SvTRUE(right))
1714 =for apidoc caller_cx
1716 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1717 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1718 information returned to Perl by C<caller>. Note that XSUBs don't get a
1719 stack frame, so C<caller_cx(0, NULL)> will return information for the
1720 immediately-surrounding Perl code.
1722 This function skips over the automatic calls to C<&DB::sub> made on the
1723 behalf of the debugger. If the stack frame requested was a sub called by
1724 C<DB::sub>, the return value will be the frame for the call to
1725 C<DB::sub>, since that has the correct line number/etc. for the call
1726 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1727 frame for the sub call itself.
1732 const PERL_CONTEXT *
1733 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1735 I32 cxix = dopoptosub(cxstack_ix);
1736 const PERL_CONTEXT *cx;
1737 const PERL_CONTEXT *ccstack = cxstack;
1738 const PERL_SI *top_si = PL_curstackinfo;
1741 /* we may be in a higher stacklevel, so dig down deeper */
1742 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1743 top_si = top_si->si_prev;
1744 ccstack = top_si->si_cxstack;
1745 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1749 /* caller() should not report the automatic calls to &DB::sub */
1750 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1751 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1755 cxix = dopoptosub_at(ccstack, cxix - 1);
1758 cx = &ccstack[cxix];
1759 if (dbcxp) *dbcxp = cx;
1761 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1762 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1763 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1764 field below is defined for any cx. */
1765 /* caller() should not report the automatic calls to &DB::sub */
1766 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1767 cx = &ccstack[dbcxix];
1777 const PERL_CONTEXT *cx;
1778 const PERL_CONTEXT *dbcx;
1780 const HEK *stash_hek;
1782 bool has_arg = MAXARG && TOPs;
1791 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1793 if (GIMME != G_ARRAY) {
1801 assert(CopSTASH(cx->blk_oldcop));
1802 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1803 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1805 if (GIMME != G_ARRAY) {
1808 PUSHs(&PL_sv_undef);
1811 sv_sethek(TARG, stash_hek);
1820 PUSHs(&PL_sv_undef);
1823 sv_sethek(TARG, stash_hek);
1826 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1827 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1828 cx->blk_sub.retop, TRUE);
1830 lcop = cx->blk_oldcop;
1831 mPUSHi((I32)CopLINE(lcop));
1834 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1835 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1836 /* So is ccstack[dbcxix]. */
1837 if (cvgv && isGV(cvgv)) {
1838 SV * const sv = newSV(0);
1839 gv_efullname3(sv, cvgv, NULL);
1841 PUSHs(boolSV(CxHASARGS(cx)));
1844 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1845 PUSHs(boolSV(CxHASARGS(cx)));
1849 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1852 gimme = (I32)cx->blk_gimme;
1853 if (gimme == G_VOID)
1854 PUSHs(&PL_sv_undef);
1856 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1857 if (CxTYPE(cx) == CXt_EVAL) {
1859 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1860 SV *cur_text = cx->blk_eval.cur_text;
1861 if (SvCUR(cur_text) >= 2) {
1862 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1863 SvUTF8(cur_text)|SVs_TEMP));
1866 /* I think this is will always be "", but be sure */
1867 PUSHs(sv_2mortal(newSVsv(cur_text)));
1873 else if (cx->blk_eval.old_namesv) {
1874 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1877 /* eval BLOCK (try blocks have old_namesv == 0) */
1879 PUSHs(&PL_sv_undef);
1880 PUSHs(&PL_sv_undef);
1884 PUSHs(&PL_sv_undef);
1885 PUSHs(&PL_sv_undef);
1887 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1888 && CopSTASH_eq(PL_curcop, PL_debstash))
1890 AV * const ary = cx->blk_sub.argarray;
1891 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1893 Perl_init_dbargs(aTHX);
1895 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1896 av_extend(PL_dbargs, AvFILLp(ary) + off);
1897 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1898 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1900 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1903 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1905 if (old_warnings == pWARN_NONE)
1906 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1907 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1908 mask = &PL_sv_undef ;
1909 else if (old_warnings == pWARN_ALL ||
1910 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1911 /* Get the bit mask for $warnings::Bits{all}, because
1912 * it could have been extended by warnings::register */
1914 HV * const bits = get_hv("warnings::Bits", 0);
1915 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1916 mask = newSVsv(*bits_all);
1919 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1923 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1927 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1928 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1939 if (MAXARG < 1 || (!TOPs && !POPs))
1940 tmps = NULL, len = 0;
1942 tmps = SvPVx_const(POPs, len);
1943 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1948 /* like pp_nextstate, but used instead when the debugger is active */
1953 PL_curcop = (COP*)PL_op;
1954 TAINT_NOT; /* Each statement is presumed innocent */
1955 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1960 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1961 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1965 const I32 gimme = G_ARRAY;
1967 GV * const gv = PL_DBgv;
1970 if (gv && isGV_with_GP(gv))
1973 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1974 DIE(aTHX_ "No DB::DB routine defined");
1976 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1977 /* don't do recursive DB::DB call */
1991 (void)(*CvXSUB(cv))(aTHX_ cv);
1997 PUSHBLOCK(cx, CXt_SUB, SP);
1999 cx->blk_sub.retop = PL_op->op_next;
2001 if (CvDEPTH(cv) >= 2) {
2002 PERL_STACK_OVERFLOW_CHECK();
2003 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2006 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2007 RETURNOP(CvSTART(cv));
2014 /* SVs on the stack that have any of the flags passed in are left as is.
2015 Other SVs are protected via the mortals stack if lvalue is true, and
2016 copied otherwise. */
2019 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2020 U32 flags, bool lvalue)
2023 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2025 if (flags & SVs_PADTMP) {
2026 flags &= ~SVs_PADTMP;
2029 if (gimme == G_SCALAR) {
2031 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2034 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2035 : sv_mortalcopy(*SP);
2037 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2040 *++MARK = &PL_sv_undef;
2044 else if (gimme == G_ARRAY) {
2045 /* in case LEAVE wipes old return values */
2046 while (++MARK <= SP) {
2047 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2051 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2052 : sv_mortalcopy(*MARK);
2053 TAINT_NOT; /* Each item is independent */
2056 /* When this function was called with MARK == newsp, we reach this
2057 * point with SP == newsp. */
2067 I32 gimme = GIMME_V;
2069 ENTER_with_name("block");
2072 PUSHBLOCK(cx, CXt_BLOCK, SP);
2085 if (PL_op->op_flags & OPf_SPECIAL) {
2086 cx = &cxstack[cxstack_ix];
2087 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2092 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2095 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2096 PL_op->op_private & OPpLVALUE);
2097 PL_curpm = newpm; /* Don't pop $1 et al till now */
2099 LEAVE_with_name("block");
2108 const I32 gimme = GIMME_V;
2109 void *itervar; /* location of the iteration variable */
2110 U8 cxtype = CXt_LOOP_FOR;
2112 ENTER_with_name("loop1");
2115 if (PL_op->op_targ) { /* "my" variable */
2116 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2117 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2118 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2119 SVs_PADSTALE, SVs_PADSTALE);
2121 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2123 itervar = PL_comppad;
2125 itervar = &PAD_SVl(PL_op->op_targ);
2128 else { /* symbol table variable */
2129 GV * const gv = MUTABLE_GV(POPs);
2130 SV** svp = &GvSV(gv);
2131 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2133 itervar = (void *)gv;
2136 if (PL_op->op_private & OPpITER_DEF)
2137 cxtype |= CXp_FOR_DEF;
2139 ENTER_with_name("loop2");
2141 PUSHBLOCK(cx, cxtype, SP);
2142 PUSHLOOP_FOR(cx, itervar, MARK);
2143 if (PL_op->op_flags & OPf_STACKED) {
2144 SV *maybe_ary = POPs;
2145 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2147 SV * const right = maybe_ary;
2150 if (RANGE_IS_NUMERIC(sv,right)) {
2151 cx->cx_type &= ~CXTYPEMASK;
2152 cx->cx_type |= CXt_LOOP_LAZYIV;
2153 /* Make sure that no-one re-orders cop.h and breaks our
2155 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2156 #ifdef NV_PRESERVES_UV
2157 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2158 (SvNV_nomg(sv) > (NV)IV_MAX)))
2160 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2161 (SvNV_nomg(right) < (NV)IV_MIN))))
2163 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2165 ((SvNV_nomg(sv) > 0) &&
2166 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2167 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2169 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2171 ((SvNV_nomg(right) > 0) &&
2172 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2173 (SvNV_nomg(right) > (NV)UV_MAX))
2176 DIE(aTHX_ "Range iterator outside integer range");
2177 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2178 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2180 /* for correct -Dstv display */
2181 cx->blk_oldsp = sp - PL_stack_base;
2185 cx->cx_type &= ~CXTYPEMASK;
2186 cx->cx_type |= CXt_LOOP_LAZYSV;
2187 /* Make sure that no-one re-orders cop.h and breaks our
2189 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2190 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2191 cx->blk_loop.state_u.lazysv.end = right;
2192 SvREFCNT_inc(right);
2193 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2194 /* This will do the upgrade to SVt_PV, and warn if the value
2195 is uninitialised. */
2196 (void) SvPV_nolen_const(right);
2197 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2198 to replace !SvOK() with a pointer to "". */
2200 SvREFCNT_dec(right);
2201 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2205 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2206 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2207 SvREFCNT_inc(maybe_ary);
2208 cx->blk_loop.state_u.ary.ix =
2209 (PL_op->op_private & OPpITER_REVERSED) ?
2210 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2214 else { /* iterating over items on the stack */
2215 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2216 if (PL_op->op_private & OPpITER_REVERSED) {
2217 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2220 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2231 const I32 gimme = GIMME_V;
2233 ENTER_with_name("loop1");
2235 ENTER_with_name("loop2");
2237 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2238 PUSHLOOP_PLAIN(cx, SP);
2253 assert(CxTYPE_is_LOOP(cx));
2255 newsp = PL_stack_base + cx->blk_loop.resetsp;
2258 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2259 PL_op->op_private & OPpLVALUE);
2262 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2263 PL_curpm = newpm; /* ... and pop $1 et al */
2265 LEAVE_with_name("loop2");
2266 LEAVE_with_name("loop1");
2272 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2273 PERL_CONTEXT *cx, PMOP *newpm)
2275 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2276 if (gimme == G_SCALAR) {
2277 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2279 const char *what = NULL;
2281 assert(MARK+1 == SP);
2282 if ((SvPADTMP(TOPs) ||
2283 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2286 !SvSMAGICAL(TOPs)) {
2288 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2289 : "a readonly value" : "a temporary";
2294 /* sub:lvalue{} will take us here. */
2303 "Can't return %s from lvalue subroutine", what
2308 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2309 if (!SvPADTMP(*SP)) {
2310 *++newsp = SvREFCNT_inc(*SP);
2315 /* FREETMPS could clobber it */
2316 SV *sv = SvREFCNT_inc(*SP);
2318 *++newsp = sv_mortalcopy(sv);
2325 ? sv_mortalcopy(*SP)
2327 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2332 *++newsp = &PL_sv_undef;
2334 if (CxLVAL(cx) & OPpDEREF) {
2337 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2341 else if (gimme == G_ARRAY) {
2342 assert (!(CxLVAL(cx) & OPpDEREF));
2343 if (ref || !CxLVAL(cx))
2344 while (++MARK <= SP)
2346 SvFLAGS(*MARK) & SVs_PADTMP
2347 ? sv_mortalcopy(*MARK)
2350 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2351 else while (++MARK <= SP) {
2352 if (*MARK != &PL_sv_undef
2354 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2359 /* Might be flattened array after $#array = */
2366 /* diag_listed_as: Can't return %s from lvalue subroutine */
2368 "Can't return a %s from lvalue subroutine",
2369 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2375 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2378 PL_stack_sp = newsp;
2385 bool popsub2 = FALSE;
2386 bool clear_errsv = FALSE;
2396 const I32 cxix = dopoptosub(cxstack_ix);
2399 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2400 * sort block, which is a CXt_NULL
2403 PL_stack_base[1] = *PL_stack_sp;
2404 PL_stack_sp = PL_stack_base + 1;
2408 DIE(aTHX_ "Can't return outside a subroutine");
2410 if (cxix < cxstack_ix)
2413 if (CxMULTICALL(&cxstack[cxix])) {
2414 gimme = cxstack[cxix].blk_gimme;
2415 if (gimme == G_VOID)
2416 PL_stack_sp = PL_stack_base;
2417 else if (gimme == G_SCALAR) {
2418 PL_stack_base[1] = *PL_stack_sp;
2419 PL_stack_sp = PL_stack_base + 1;
2425 switch (CxTYPE(cx)) {
2428 lval = !!CvLVALUE(cx->blk_sub.cv);
2429 retop = cx->blk_sub.retop;
2430 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2433 if (!(PL_in_eval & EVAL_KEEPERR))
2436 namesv = cx->blk_eval.old_namesv;
2437 retop = cx->blk_eval.retop;
2440 if (optype == OP_REQUIRE &&
2441 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2443 /* Unassume the success we assumed earlier. */
2444 (void)hv_delete(GvHVn(PL_incgv),
2445 SvPVX_const(namesv),
2446 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2448 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2452 retop = cx->blk_sub.retop;
2456 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2460 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2462 if (gimme == G_SCALAR) {
2465 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2466 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2467 && !SvMAGICAL(TOPs)) {
2468 *++newsp = SvREFCNT_inc(*SP);
2473 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2475 *++newsp = sv_mortalcopy(sv);
2479 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2480 && !SvMAGICAL(*SP)) {
2484 *++newsp = sv_mortalcopy(*SP);
2487 *++newsp = sv_mortalcopy(*SP);
2490 *++newsp = &PL_sv_undef;
2492 else if (gimme == G_ARRAY) {
2493 while (++MARK <= SP) {
2494 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2495 && !SvGMAGICAL(*MARK)
2496 ? *MARK : sv_mortalcopy(*MARK);
2497 TAINT_NOT; /* Each item is independent */
2500 PL_stack_sp = newsp;
2504 /* Stack values are safe: */
2507 POPSUB(cx,sv); /* release CV and @_ ... */
2511 PL_curpm = newpm; /* ... and pop $1 et al */
2520 /* This duplicates parts of pp_leavesub, so that it can share code with
2531 if (CxMULTICALL(&cxstack[cxstack_ix]))
2535 cxstack_ix++; /* temporarily protect top context */
2539 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2542 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2544 PL_curpm = newpm; /* ... and pop $1 et al */
2547 return cx->blk_sub.retop;
2551 S_unwind_loop(pTHX_ const char * const opname)
2555 if (PL_op->op_flags & OPf_SPECIAL) {
2556 cxix = dopoptoloop(cxstack_ix);
2558 /* diag_listed_as: Can't "last" outside a loop block */
2559 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2564 const char * const label =
2565 PL_op->op_flags & OPf_STACKED
2566 ? SvPV(TOPs,label_len)
2567 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2568 const U32 label_flags =
2569 PL_op->op_flags & OPf_STACKED
2571 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2573 cxix = dopoptolabel(label, label_len, label_flags);
2575 /* diag_listed_as: Label not found for "last %s" */
2576 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2578 SVfARG(PL_op->op_flags & OPf_STACKED
2579 && !SvGMAGICAL(TOPp1s)
2581 : newSVpvn_flags(label,
2583 label_flags | SVs_TEMP)));
2585 if (cxix < cxstack_ix)
2602 S_unwind_loop(aTHX_ "last");
2605 cxstack_ix++; /* temporarily protect top context */
2606 switch (CxTYPE(cx)) {
2607 case CXt_LOOP_LAZYIV:
2608 case CXt_LOOP_LAZYSV:
2610 case CXt_LOOP_PLAIN:
2612 newsp = PL_stack_base + cx->blk_loop.resetsp;
2613 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2617 nextop = cx->blk_sub.retop;
2621 nextop = cx->blk_eval.retop;
2625 nextop = cx->blk_sub.retop;
2628 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2632 PL_stack_sp = newsp;
2636 /* Stack values are safe: */
2638 case CXt_LOOP_LAZYIV:
2639 case CXt_LOOP_PLAIN:
2640 case CXt_LOOP_LAZYSV:
2642 POPLOOP(cx); /* release loop vars ... */
2646 POPSUB(cx,sv); /* release CV and @_ ... */
2649 PL_curpm = newpm; /* ... and pop $1 et al */
2652 PERL_UNUSED_VAR(optype);
2653 PERL_UNUSED_VAR(gimme);
2661 const I32 inner = PL_scopestack_ix;
2663 S_unwind_loop(aTHX_ "next");
2665 /* clear off anything above the scope we're re-entering, but
2666 * save the rest until after a possible continue block */
2668 if (PL_scopestack_ix < inner)
2669 leave_scope(PL_scopestack[PL_scopestack_ix]);
2670 PL_curcop = cx->blk_oldcop;
2672 return (cx)->blk_loop.my_op->op_nextop;
2678 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2681 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2683 if (redo_op->op_type == OP_ENTER) {
2684 /* pop one less context to avoid $x being freed in while (my $x..) */
2686 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2687 redo_op = redo_op->op_next;
2691 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2692 LEAVE_SCOPE(oldsave);
2694 PL_curcop = cx->blk_oldcop;
2700 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2704 static const char* const too_deep = "Target of goto is too deeply nested";
2706 PERL_ARGS_ASSERT_DOFINDLABEL;
2709 Perl_croak(aTHX_ "%s", too_deep);
2710 if (o->op_type == OP_LEAVE ||
2711 o->op_type == OP_SCOPE ||
2712 o->op_type == OP_LEAVELOOP ||
2713 o->op_type == OP_LEAVESUB ||
2714 o->op_type == OP_LEAVETRY)
2716 *ops++ = cUNOPo->op_first;
2718 Perl_croak(aTHX_ "%s", too_deep);
2721 if (o->op_flags & OPf_KIDS) {
2723 /* First try all the kids at this level, since that's likeliest. */
2724 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2725 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2726 STRLEN kid_label_len;
2727 U32 kid_label_flags;
2728 const char *kid_label = CopLABEL_len_flags(kCOP,
2729 &kid_label_len, &kid_label_flags);
2731 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2734 (const U8*)kid_label, kid_label_len,
2735 (const U8*)label, len) == 0)
2737 (const U8*)label, len,
2738 (const U8*)kid_label, kid_label_len) == 0)
2739 : ( len == kid_label_len && ((kid_label == label)
2740 || memEQ(kid_label, label, len)))))
2744 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2745 if (kid == PL_lastgotoprobe)
2747 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2750 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2751 ops[-1]->op_type == OP_DBSTATE)
2756 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2764 PP(pp_goto) /* also pp_dump */
2770 #define GOTO_DEPTH 64
2771 OP *enterops[GOTO_DEPTH];
2772 const char *label = NULL;
2773 STRLEN label_len = 0;
2774 U32 label_flags = 0;
2775 const bool do_dump = (PL_op->op_type == OP_DUMP);
2776 static const char* const must_have_label = "goto must have label";
2778 if (PL_op->op_flags & OPf_STACKED) {
2779 /* goto EXPR or goto &foo */
2781 SV * const sv = POPs;
2784 /* This egregious kludge implements goto &subroutine */
2785 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2788 CV *cv = MUTABLE_CV(SvRV(sv));
2789 AV *arg = GvAV(PL_defgv);
2793 if (!CvROOT(cv) && !CvXSUB(cv)) {
2794 const GV * const gv = CvGV(cv);
2798 /* autoloaded stub? */
2799 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2801 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2803 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2804 if (autogv && (cv = GvCV(autogv)))
2806 tmpstr = sv_newmortal();
2807 gv_efullname3(tmpstr, gv, NULL);
2808 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2810 DIE(aTHX_ "Goto undefined subroutine");
2813 /* First do some returnish stuff. */
2814 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2816 cxix = dopoptosub(cxstack_ix);
2817 if (cxix < cxstack_ix) {
2820 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2826 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2827 if (CxTYPE(cx) == CXt_EVAL) {
2830 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2831 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2833 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2834 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2836 else if (CxMULTICALL(cx))
2839 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2841 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2842 AV* av = cx->blk_sub.argarray;
2844 /* abandon the original @_ if it got reified or if it is
2845 the same as the current @_ */
2846 if (AvREAL(av) || av == arg) {
2850 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2852 else CLEAR_ARGARRAY(av);
2854 /* We donate this refcount later to the callee’s pad. */
2855 SvREFCNT_inc_simple_void(arg);
2856 if (CxTYPE(cx) == CXt_SUB &&
2857 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2858 SvREFCNT_dec(cx->blk_sub.cv);
2859 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2860 LEAVE_SCOPE(oldsave);
2862 /* A destructor called during LEAVE_SCOPE could have undefined
2863 * our precious cv. See bug #99850. */
2864 if (!CvROOT(cv) && !CvXSUB(cv)) {
2865 const GV * const gv = CvGV(cv);
2868 SV * const tmpstr = sv_newmortal();
2869 gv_efullname3(tmpstr, gv, NULL);
2870 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2873 DIE(aTHX_ "Goto undefined subroutine");
2876 /* Now do some callish stuff. */
2878 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2880 OP* const retop = cx->blk_sub.retop;
2883 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2884 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2887 PERL_UNUSED_VAR(newsp);
2888 PERL_UNUSED_VAR(gimme);
2890 /* put GvAV(defgv) back onto stack */
2892 EXTEND(SP, items+1); /* @_ could have been extended. */
2897 bool r = cBOOL(AvREAL(arg));
2898 for (index=0; index<items; index++)
2902 SV ** const svp = av_fetch(arg, index, 0);
2903 sv = svp ? *svp : NULL;
2905 else sv = AvARRAY(arg)[index];
2907 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2908 : sv_2mortal(newSVavdefelem(arg, index, 1));
2913 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2914 /* Restore old @_ */
2915 arg = GvAV(PL_defgv);
2916 GvAV(PL_defgv) = cx->blk_sub.savearray;
2920 /* XS subs don't have a CxSUB, so pop it */
2921 POPBLOCK(cx, PL_curpm);
2922 /* Push a mark for the start of arglist */
2925 (void)(*CvXSUB(cv))(aTHX_ cv);
2931 PADLIST * const padlist = CvPADLIST(cv);
2932 cx->blk_sub.cv = cv;
2933 cx->blk_sub.olddepth = CvDEPTH(cv);
2936 if (CvDEPTH(cv) < 2)
2937 SvREFCNT_inc_simple_void_NN(cv);
2939 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2940 sub_crush_depth(cv);
2941 pad_push(padlist, CvDEPTH(cv));
2943 PL_curcop = cx->blk_oldcop;
2945 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2948 CX_CURPAD_SAVE(cx->blk_sub);
2950 /* cx->blk_sub.argarray has no reference count, so we
2951 need something to hang on to our argument array so
2952 that cx->blk_sub.argarray does not end up pointing
2953 to freed memory as the result of undef *_. So put
2954 it in the callee’s pad, donating our refer-
2957 SvREFCNT_dec(PAD_SVl(0));
2958 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2961 /* GvAV(PL_defgv) might have been modified on scope
2962 exit, so restore it. */
2963 if (arg != GvAV(PL_defgv)) {
2964 AV * const av = GvAV(PL_defgv);
2965 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2969 else SvREFCNT_dec(arg);
2970 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2971 Perl_get_db_sub(aTHX_ NULL, cv);
2973 CV * const gotocv = get_cvs("DB::goto", 0);
2975 PUSHMARK( PL_stack_sp );
2976 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2982 RETURNOP(CvSTART(cv));
2987 label = SvPV_nomg_const(sv, label_len);
2988 label_flags = SvUTF8(sv);
2991 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2992 /* goto LABEL or dump LABEL */
2993 label = cPVOP->op_pv;
2994 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2995 label_len = strlen(label);
2997 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
3002 OP *gotoprobe = NULL;
3003 bool leaving_eval = FALSE;
3004 bool in_block = FALSE;
3005 PERL_CONTEXT *last_eval_cx = NULL;
3009 PL_lastgotoprobe = NULL;
3011 for (ix = cxstack_ix; ix >= 0; ix--) {
3013 switch (CxTYPE(cx)) {
3015 leaving_eval = TRUE;
3016 if (!CxTRYBLOCK(cx)) {
3017 gotoprobe = (last_eval_cx ?
3018 last_eval_cx->blk_eval.old_eval_root :
3023 /* else fall through */
3024 case CXt_LOOP_LAZYIV:
3025 case CXt_LOOP_LAZYSV:
3027 case CXt_LOOP_PLAIN:
3030 gotoprobe = cx->blk_oldcop->op_sibling;
3036 gotoprobe = cx->blk_oldcop->op_sibling;
3039 gotoprobe = PL_main_root;
3042 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3043 gotoprobe = CvROOT(cx->blk_sub.cv);
3049 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3052 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3053 CxTYPE(cx), (long) ix);
3054 gotoprobe = PL_main_root;
3058 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3059 enterops, enterops + GOTO_DEPTH);
3062 if (gotoprobe->op_sibling &&
3063 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3064 gotoprobe->op_sibling->op_sibling) {
3065 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3066 label, label_len, label_flags, enterops,
3067 enterops + GOTO_DEPTH);
3072 PL_lastgotoprobe = gotoprobe;
3075 DIE(aTHX_ "Can't find label %"UTF8f,
3076 UTF8fARG(label_flags, label_len, label));
3078 /* if we're leaving an eval, check before we pop any frames
3079 that we're not going to punt, otherwise the error
3082 if (leaving_eval && *enterops && enterops[1]) {
3084 for (i = 1; enterops[i]; i++)
3085 if (enterops[i]->op_type == OP_ENTERITER)
3086 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3089 if (*enterops && enterops[1]) {
3090 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3092 deprecate("\"goto\" to jump into a construct");
3095 /* pop unwanted frames */
3097 if (ix < cxstack_ix) {
3101 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3104 oldsave = PL_scopestack[PL_scopestack_ix];
3105 LEAVE_SCOPE(oldsave);
3108 /* push wanted frames */
3110 if (*enterops && enterops[1]) {
3111 OP * const oldop = PL_op;
3112 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3113 for (; enterops[ix]; ix++) {
3114 PL_op = enterops[ix];
3115 /* Eventually we may want to stack the needed arguments
3116 * for each op. For now, we punt on the hard ones. */
3117 if (PL_op->op_type == OP_ENTERITER)
3118 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3119 PL_op->op_ppaddr(aTHX);
3127 if (!retop) retop = PL_main_start;
3129 PL_restartop = retop;
3130 PL_do_undump = TRUE;
3134 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3135 PL_do_undump = FALSE;
3151 anum = 0; (void)POPs;
3157 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3160 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3163 PL_exit_flags |= PERL_EXIT_EXPECTED;
3165 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3166 if (anum || !(PL_minus_c && PL_madskills))
3171 PUSHs(&PL_sv_undef);
3178 S_save_lines(pTHX_ AV *array, SV *sv)
3180 const char *s = SvPVX_const(sv);
3181 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3184 PERL_ARGS_ASSERT_SAVE_LINES;
3186 while (s && s < send) {
3188 SV * const tmpstr = newSV_type(SVt_PVMG);
3190 t = (const char *)memchr(s, '\n', send - s);
3196 sv_setpvn(tmpstr, s, t - s);
3197 av_store(array, line++, tmpstr);
3205 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3207 0 is used as continue inside eval,
3209 3 is used for a die caught by an inner eval - continue inner loop
3211 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3212 establish a local jmpenv to handle exception traps.
3217 S_docatch(pTHX_ OP *o)
3221 OP * const oldop = PL_op;
3225 assert(CATCH_GET == TRUE);
3232 assert(cxstack_ix >= 0);
3233 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3234 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3239 /* die caught by an inner eval - continue inner loop */
3240 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3241 PL_restartjmpenv = NULL;
3242 PL_op = PL_restartop;
3251 assert(0); /* NOTREACHED */
3260 =for apidoc find_runcv
3262 Locate the CV corresponding to the currently executing sub or eval.
3263 If db_seqp is non_null, skip CVs that are in the DB package and populate
3264 *db_seqp with the cop sequence number at the point that the DB:: code was
3265 entered. (This allows debuggers to eval in the scope of the breakpoint
3266 rather than in the scope of the debugger itself.)
3272 Perl_find_runcv(pTHX_ U32 *db_seqp)
3274 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3277 /* If this becomes part of the API, it might need a better name. */
3279 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3287 PL_curcop == &PL_compiling
3289 : PL_curcop->cop_seq;
3291 for (si = PL_curstackinfo; si; si = si->si_prev) {
3293 for (ix = si->si_cxix; ix >= 0; ix--) {
3294 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3296 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3297 cv = cx->blk_sub.cv;
3298 /* skip DB:: code */
3299 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3300 *db_seqp = cx->blk_oldcop->cop_seq;
3303 if (cx->cx_type & CXp_SUB_RE)
3306 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3307 cv = cx->blk_eval.cv;
3310 case FIND_RUNCV_padid_eq:
3312 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3315 case FIND_RUNCV_level_eq:
3316 if (level++ != arg) continue;
3324 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3328 /* Run yyparse() in a setjmp wrapper. Returns:
3329 * 0: yyparse() successful
3330 * 1: yyparse() failed
3334 S_try_yyparse(pTHX_ int gramtype)
3339 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3343 ret = yyparse(gramtype) ? 1 : 0;
3350 assert(0); /* NOTREACHED */
3357 /* Compile a require/do or an eval ''.
3359 * outside is the lexically enclosing CV (if any) that invoked us.
3360 * seq is the current COP scope value.
3361 * hh is the saved hints hash, if any.
3363 * Returns a bool indicating whether the compile was successful; if so,
3364 * PL_eval_start contains the first op of the compiled code; otherwise,
3367 * This function is called from two places: pp_require and pp_entereval.
3368 * These can be distinguished by whether PL_op is entereval.
3372 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3375 OP * const saveop = PL_op;
3376 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3377 COP * const oldcurcop = PL_curcop;
3378 bool in_require = (saveop->op_type == OP_REQUIRE);
3382 PL_in_eval = (in_require
3383 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3385 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3386 ? EVAL_RE_REPARSING : 0)));
3390 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3392 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3393 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3394 cxstack[cxstack_ix].blk_gimme = gimme;
3396 CvOUTSIDE_SEQ(evalcv) = seq;
3397 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3399 /* set up a scratch pad */
3401 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3402 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3406 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3408 /* make sure we compile in the right package */
3410 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3411 SAVEGENERICSV(PL_curstash);
3412 PL_curstash = (HV *)CopSTASH(PL_curcop);
3413 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3414 else SvREFCNT_inc_simple_void(PL_curstash);
3416 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3417 SAVESPTR(PL_beginav);
3418 PL_beginav = newAV();
3419 SAVEFREESV(PL_beginav);
3420 SAVESPTR(PL_unitcheckav);
3421 PL_unitcheckav = newAV();
3422 SAVEFREESV(PL_unitcheckav);
3425 SAVEBOOL(PL_madskills);
3429 ENTER_with_name("evalcomp");
3430 SAVESPTR(PL_compcv);
3433 /* try to compile it */
3435 PL_eval_root = NULL;
3436 PL_curcop = &PL_compiling;
3437 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3438 PL_in_eval |= EVAL_KEEPERR;
3445 hv_clear(GvHV(PL_hintgv));
3448 PL_hints = saveop->op_private & OPpEVAL_COPHH
3449 ? oldcurcop->cop_hints : saveop->op_targ;
3451 /* making 'use re eval' not be in scope when compiling the
3452 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3453 * infinite recursion when S_has_runtime_code() gives a false
3454 * positive: the second time round, HINT_RE_EVAL isn't set so we
3455 * don't bother calling S_has_runtime_code() */
3456 if (PL_in_eval & EVAL_RE_REPARSING)
3457 PL_hints &= ~HINT_RE_EVAL;
3460 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3461 SvREFCNT_dec(GvHV(PL_hintgv));
3462 GvHV(PL_hintgv) = hh;
3465 SAVECOMPILEWARNINGS();
3467 if (PL_dowarn & G_WARN_ALL_ON)
3468 PL_compiling.cop_warnings = pWARN_ALL ;
3469 else if (PL_dowarn & G_WARN_ALL_OFF)
3470 PL_compiling.cop_warnings = pWARN_NONE ;
3472 PL_compiling.cop_warnings = pWARN_STD ;
3475 PL_compiling.cop_warnings =
3476 DUP_WARNINGS(oldcurcop->cop_warnings);
3477 cophh_free(CopHINTHASH_get(&PL_compiling));
3478 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3479 /* The label, if present, is the first entry on the chain. So rather
3480 than writing a blank label in front of it (which involves an
3481 allocation), just use the next entry in the chain. */
3482 PL_compiling.cop_hints_hash
3483 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3484 /* Check the assumption that this removed the label. */
3485 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3488 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3491 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3493 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3494 * so honour CATCH_GET and trap it here if necessary */
3496 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3498 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3499 SV **newsp; /* Used by POPBLOCK. */
3501 I32 optype; /* Used by POPEVAL. */
3507 PERL_UNUSED_VAR(newsp);
3508 PERL_UNUSED_VAR(optype);
3510 /* note that if yystatus == 3, then the EVAL CX block has already
3511 * been popped, and various vars restored */
3513 if (yystatus != 3) {
3515 op_free(PL_eval_root);
3516 PL_eval_root = NULL;
3518 SP = PL_stack_base + POPMARK; /* pop original mark */
3519 POPBLOCK(cx,PL_curpm);
3521 namesv = cx->blk_eval.old_namesv;
3522 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3523 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3529 /* If cx is still NULL, it means that we didn't go in the
3530 * POPEVAL branch. */
3531 cx = &cxstack[cxstack_ix];
3532 assert(CxTYPE(cx) == CXt_EVAL);
3533 namesv = cx->blk_eval.old_namesv;
3535 (void)hv_store(GvHVn(PL_incgv),
3536 SvPVX_const(namesv),
3537 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3539 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3542 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3545 if (!*(SvPV_nolen_const(errsv))) {
3546 sv_setpvs(errsv, "Compilation error");
3549 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3554 LEAVE_with_name("evalcomp");
3556 CopLINE_set(&PL_compiling, 0);
3557 SAVEFREEOP(PL_eval_root);
3558 cv_forget_slab(evalcv);
3560 DEBUG_x(dump_eval());
3562 /* Register with debugger: */
3563 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3564 CV * const cv = get_cvs("DB::postponed", 0);
3568 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3570 call_sv(MUTABLE_SV(cv), G_DISCARD);
3574 if (PL_unitcheckav) {
3575 OP *es = PL_eval_start;
3576 call_list(PL_scopestack_ix, PL_unitcheckav);
3580 /* compiled okay, so do it */
3582 CvDEPTH(evalcv) = 1;
3583 SP = PL_stack_base + POPMARK; /* pop original mark */
3584 PL_op = saveop; /* The caller may need it. */
3585 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3592 S_check_type_and_open(pTHX_ SV *name)
3596 const char *p = SvPV_const(name, len);
3599 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3601 /* checking here captures a reasonable error message when
3602 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3603 * user gets a confusing message about looking for the .pmc file
3604 * rather than for the .pm file.
3605 * This check prevents a \0 in @INC causing problems.
3607 if (!IS_SAFE_PATHNAME(p, len, "require"))
3610 /* we use the value of errno later to see how stat() or open() failed.
3611 * We don't want it set if the stat succeeded but we still failed,
3612 * such as if the name exists, but is a directory */
3615 st_rc = PerlLIO_stat(p, &st);
3617 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3621 #if !defined(PERLIO_IS_STDIO)
3622 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3624 return PerlIO_open(p, PERL_SCRIPT_MODE);
3628 #ifndef PERL_DISABLE_PMC
3630 S_doopen_pm(pTHX_ SV *name)
3633 const char *p = SvPV_const(name, namelen);
3635 PERL_ARGS_ASSERT_DOOPEN_PM;
3637 /* check the name before trying for the .pmc name to avoid the
3638 * warning referring to the .pmc which the user probably doesn't
3639 * know or care about
3641 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3644 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3645 SV *const pmcsv = sv_newmortal();
3648 SvSetSV_nosteal(pmcsv,name);
3649 sv_catpvn(pmcsv, "c", 1);
3651 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3652 return check_type_and_open(pmcsv);
3654 return check_type_and_open(name);
3657 # define doopen_pm(name) check_type_and_open(name)
3658 #endif /* !PERL_DISABLE_PMC */
3660 /* require doesn't search for absolute names, or when the name is
3661 explicity relative the current directory */
3662 PERL_STATIC_INLINE bool
3663 S_path_is_searchable(const char *name)
3665 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3667 if (PERL_FILE_IS_ABSOLUTE(name)
3669 || (*name == '.' && ((name[1] == '/' ||
3670 (name[1] == '.' && name[2] == '/'))
3671 || (name[1] == '\\' ||
3672 ( name[1] == '.' && name[2] == '\\')))
3675 || (*name == '.' && (name[1] == '/' ||
3676 (name[1] == '.' && name[2] == '/')))
3696 int vms_unixname = 0;
3699 const char *tryname = NULL;
3701 const I32 gimme = GIMME_V;
3702 int filter_has_file = 0;
3703 PerlIO *tryrsfp = NULL;
3704 SV *filter_cache = NULL;
3705 SV *filter_state = NULL;
3706 SV *filter_sub = NULL;
3711 bool path_searchable;
3714 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3715 sv = sv_2mortal(new_version(sv));
3716 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3717 upg_version(PL_patchlevel, TRUE);
3718 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3719 if ( vcmp(sv,PL_patchlevel) <= 0 )
3720 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3721 SVfARG(sv_2mortal(vnormal(sv))),
3722 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3726 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3729 SV * const req = SvRV(sv);
3730 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3732 /* get the left hand term */
3733 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3735 first = SvIV(*av_fetch(lav,0,0));
3736 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3737 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3738 || av_tindex(lav) > 1 /* FP with > 3 digits */
3739 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3741 DIE(aTHX_ "Perl %"SVf" required--this is only "
3743 SVfARG(sv_2mortal(vnormal(req))),
3744 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3747 else { /* probably 'use 5.10' or 'use 5.8' */
3751 if (av_tindex(lav)>=1)
3752 second = SvIV(*av_fetch(lav,1,0));
3754 second /= second >= 600 ? 100 : 10;
3755 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3756 (int)first, (int)second);
3757 upg_version(hintsv, TRUE);
3759 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3760 "--this is only %"SVf", stopped",
3761 SVfARG(sv_2mortal(vnormal(req))),
3762 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3763 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3771 name = SvPV_const(sv, len);
3772 if (!(name && len > 0 && *name))
3773 DIE(aTHX_ "Null filename used");
3774 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3775 DIE(aTHX_ "Can't locate %s: %s",
3776 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3777 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3780 TAINT_PROPER("require");
3782 path_searchable = path_is_searchable(name);
3785 /* The key in the %ENV hash is in the syntax of file passed as the argument
3786 * usually this is in UNIX format, but sometimes in VMS format, which
3787 * can result in a module being pulled in more than once.
3788 * To prevent this, the key must be stored in UNIX format if the VMS
3789 * name can be translated to UNIX.
3793 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3795 unixlen = strlen(unixname);
3801 /* if not VMS or VMS name can not be translated to UNIX, pass it
3804 unixname = (char *) name;
3807 if (PL_op->op_type == OP_REQUIRE) {
3808 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3809 unixname, unixlen, 0);
3811 if (*svp != &PL_sv_undef)
3814 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3815 "Compilation failed in require", unixname);
3819 LOADING_FILE_PROBE(unixname);
3821 /* prepare to compile file */
3823 if (!path_searchable) {
3824 /* At this point, name is SvPVX(sv) */
3826 tryrsfp = doopen_pm(sv);
3828 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3829 AV * const ar = GvAVn(PL_incgv);
3836 namesv = newSV_type(SVt_PV);
3837 for (i = 0; i <= AvFILL(ar); i++) {
3838 SV * const dirsv = *av_fetch(ar, i, TRUE);
3846 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3847 && !SvOBJECT(SvRV(loader)))
3849 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3853 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3854 PTR2UV(SvRV(dirsv)), name);
3855 tryname = SvPVX_const(namesv);
3858 if (SvPADTMP(nsv)) {
3859 nsv = sv_newmortal();
3860 SvSetSV_nosteal(nsv,sv);
3863 ENTER_with_name("call_INC");
3871 if (SvGMAGICAL(loader)) {
3872 SV *l = sv_newmortal();
3873 sv_setsv_nomg(l, loader);
3876 if (sv_isobject(loader))
3877 count = call_method("INC", G_ARRAY);
3879 count = call_sv(loader, G_ARRAY);
3889 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3890 && !isGV_with_GP(SvRV(arg))) {
3891 filter_cache = SvRV(arg);
3898 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3902 if (isGV_with_GP(arg)) {
3903 IO * const io = GvIO((const GV *)arg);
3908 tryrsfp = IoIFP(io);
3909 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3910 PerlIO_close(IoOFP(io));
3921 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3923 SvREFCNT_inc_simple_void_NN(filter_sub);
3926 filter_state = SP[i];
3927 SvREFCNT_inc_simple_void(filter_state);
3931 if (!tryrsfp && (filter_cache || filter_sub)) {
3932 tryrsfp = PerlIO_open(BIT_BUCKET,
3938 /* FREETMPS may free our filter_cache */
3939 SvREFCNT_inc_simple_void(filter_cache);
3943 LEAVE_with_name("call_INC");
3945 /* Now re-mortalize it. */
3946 sv_2mortal(filter_cache);
3948 /* Adjust file name if the hook has set an %INC entry.
3949 This needs to happen after the FREETMPS above. */
3950 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3952 tryname = SvPV_nolen_const(*svp);
3959 filter_has_file = 0;
3960 filter_cache = NULL;
3962 SvREFCNT_dec(filter_state);
3963 filter_state = NULL;
3966 SvREFCNT_dec(filter_sub);
3971 if (path_searchable) {
3976 dir = SvPV_nomg_const(dirsv, dirlen);
3982 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3986 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3989 sv_setpv(namesv, unixdir);
3990 sv_catpv(namesv, unixname);
3992 # ifdef __SYMBIAN32__
3993 if (PL_origfilename[0] &&
3994 PL_origfilename[1] == ':' &&
3995 !(dir[0] && dir[1] == ':'))
3996 Perl_sv_setpvf(aTHX_ namesv,
4001 Perl_sv_setpvf(aTHX_ namesv,
4005 /* The equivalent of
4006 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4007 but without the need to parse the format string, or
4008 call strlen on either pointer, and with the correct
4009 allocation up front. */
4011 char *tmp = SvGROW(namesv, dirlen + len + 2);
4013 memcpy(tmp, dir, dirlen);
4016 /* Avoid '<dir>//<file>' */
4017 if (!dirlen || *(tmp-1) != '/') {
4020 /* So SvCUR_set reports the correct length below */
4024 /* name came from an SV, so it will have a '\0' at the
4025 end that we can copy as part of this memcpy(). */
4026 memcpy(tmp, name, len + 1);
4028 SvCUR_set(namesv, dirlen + len + 1);
4033 TAINT_PROPER("require");
4034 tryname = SvPVX_const(namesv);
4035 tryrsfp = doopen_pm(namesv);
4037 if (tryname[0] == '.' && tryname[1] == '/') {
4039 while (*++tryname == '/') {}
4043 else if (errno == EMFILE || errno == EACCES) {
4044 /* no point in trying other paths if out of handles;
4045 * on the other hand, if we couldn't open one of the
4046 * files, then going on with the search could lead to
4047 * unexpected results; see perl #113422
4056 saved_errno = errno; /* sv_2mortal can realloc things */
4059 if (PL_op->op_type == OP_REQUIRE) {
4060 if(saved_errno == EMFILE || saved_errno == EACCES) {
4061 /* diag_listed_as: Can't locate %s */
4062 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4064 if (namesv) { /* did we lookup @INC? */
4065 AV * const ar = GvAVn(PL_incgv);
4067 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4068 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4069 for (i = 0; i <= AvFILL(ar); i++) {
4070 sv_catpvs(inc, " ");
4071 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4073 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4074 const char *c, *e = name + len - 3;
4075 sv_catpv(msg, " (you may need to install the ");
4076 for (c = name; c < e; c++) {
4078 sv_catpvn(msg, "::", 2);
4081 sv_catpvn(msg, c, 1);
4084 sv_catpv(msg, " module)");
4086 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4087 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4089 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4090 sv_catpv(msg, " (did you run h2ph?)");
4093 /* diag_listed_as: Can't locate %s */
4095 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4099 DIE(aTHX_ "Can't locate %s", name);
4106 SETERRNO(0, SS_NORMAL);
4108 /* Assume success here to prevent recursive requirement. */
4109 /* name is never assigned to again, so len is still strlen(name) */
4110 /* Check whether a hook in @INC has already filled %INC */
4112 (void)hv_store(GvHVn(PL_incgv),
4113 unixname, unixlen, newSVpv(tryname,0),0);
4115 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4117 (void)hv_store(GvHVn(PL_incgv),
4118 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4121 ENTER_with_name("eval");
4123 SAVECOPFILE_FREE(&PL_compiling);
4124 CopFILE_set(&PL_compiling, tryname);
4125 lex_start(NULL, tryrsfp, 0);
4127 if (filter_sub || filter_cache) {
4128 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4129 than hanging another SV from it. In turn, filter_add() optionally
4130 takes the SV to use as the filter (or creates a new SV if passed
4131 NULL), so simply pass in whatever value filter_cache has. */
4132 SV * const fc = filter_cache ? newSV(0) : NULL;
4134 if (fc) sv_copypv(fc, filter_cache);
4135 datasv = filter_add(S_run_user_filter, fc);
4136 IoLINES(datasv) = filter_has_file;
4137 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4138 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4141 /* switch to eval mode */
4142 PUSHBLOCK(cx, CXt_EVAL, SP);
4144 cx->blk_eval.retop = PL_op->op_next;
4146 SAVECOPLINE(&PL_compiling);
4147 CopLINE_set(&PL_compiling, 0);
4151 /* Store and reset encoding. */
4152 encoding = PL_encoding;
4155 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4156 op = DOCATCH(PL_eval_start);
4158 op = PL_op->op_next;
4160 /* Restore encoding. */
4161 PL_encoding = encoding;
4163 LOADED_FILE_PROBE(unixname);
4168 /* This is a op added to hold the hints hash for
4169 pp_entereval. The hash can be modified by the code
4170 being eval'ed, so we return a copy instead. */
4176 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4186 const I32 gimme = GIMME_V;
4187 const U32 was = PL_breakable_sub_gen;
4188 char tbuf[TYPE_DIGITS(long) + 12];
4189 bool saved_delete = FALSE;
4190 char *tmpbuf = tbuf;
4193 U32 seq, lex_flags = 0;
4194 HV *saved_hh = NULL;
4195 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4197 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4198 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4200 else if (PL_hints & HINT_LOCALIZE_HH || (
4201 PL_op->op_private & OPpEVAL_COPHH
4202 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4204 saved_hh = cop_hints_2hv(PL_curcop, 0);
4205 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4209 /* make sure we've got a plain PV (no overload etc) before testing
4210 * for taint. Making a copy here is probably overkill, but better
4211 * safe than sorry */
4213 const char * const p = SvPV_const(sv, len);
4215 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4216 lex_flags |= LEX_START_COPIED;
4218 if (bytes && SvUTF8(sv))
4219 SvPVbyte_force(sv, len);
4221 else if (bytes && SvUTF8(sv)) {
4222 /* Don't modify someone else's scalar */
4225 (void)sv_2mortal(sv);
4226 SvPVbyte_force(sv,len);
4227 lex_flags |= LEX_START_COPIED;
4230 TAINT_IF(SvTAINTED(sv));
4231 TAINT_PROPER("eval");
4233 ENTER_with_name("eval");
4234 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4235 ? LEX_IGNORE_UTF8_HINTS
4236 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4241 /* switch to eval mode */
4243 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4244 SV * const temp_sv = sv_newmortal();
4245 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4246 (unsigned long)++PL_evalseq,
4247 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4248 tmpbuf = SvPVX(temp_sv);
4249 len = SvCUR(temp_sv);
4252 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4253 SAVECOPFILE_FREE(&PL_compiling);
4254 CopFILE_set(&PL_compiling, tmpbuf+2);
4255 SAVECOPLINE(&PL_compiling);
4256 CopLINE_set(&PL_compiling, 1);
4257 /* special case: an eval '' executed within the DB package gets lexically
4258 * placed in the first non-DB CV rather than the current CV - this
4259 * allows the debugger to execute code, find lexicals etc, in the
4260 * scope of the code being debugged. Passing &seq gets find_runcv
4261 * to do the dirty work for us */
4262 runcv = find_runcv(&seq);
4264 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4266 cx->blk_eval.retop = PL_op->op_next;
4268 /* prepare to compile string */
4270 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4271 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4273 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4274 deleting the eval's FILEGV from the stash before gv_check() runs
4275 (i.e. before run-time proper). To work around the coredump that
4276 ensues, we always turn GvMULTI_on for any globals that were
4277 introduced within evals. See force_ident(). GSAR 96-10-12 */
4278 char *const safestr = savepvn(tmpbuf, len);
4279 SAVEDELETE(PL_defstash, safestr, len);
4280 saved_delete = TRUE;
4285 if (doeval(gimme, runcv, seq, saved_hh)) {
4286 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4287 ? (PERLDB_LINE || PERLDB_SAVESRC)
4288 : PERLDB_SAVESRC_NOSUBS) {
4289 /* Retain the filegv we created. */
4290 } else if (!saved_delete) {
4291 char *const safestr = savepvn(tmpbuf, len);
4292 SAVEDELETE(PL_defstash, safestr, len);
4294 return DOCATCH(PL_eval_start);
4296 /* We have already left the scope set up earlier thanks to the LEAVE
4298 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4299 ? (PERLDB_LINE || PERLDB_SAVESRC)
4300 : PERLDB_SAVESRC_INVALID) {
4301 /* Retain the filegv we created. */
4302 } else if (!saved_delete) {
4303 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4305 return PL_op->op_next;
4317 const U8 save_flags = PL_op -> op_flags;
4325 namesv = cx->blk_eval.old_namesv;
4326 retop = cx->blk_eval.retop;
4327 evalcv = cx->blk_eval.cv;
4330 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4331 gimme, SVs_TEMP, FALSE);
4332 PL_curpm = newpm; /* Don't pop $1 et al till now */
4335 assert(CvDEPTH(evalcv) == 1);
4337 CvDEPTH(evalcv) = 0;
4339 if (optype == OP_REQUIRE &&
4340 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4342 /* Unassume the success we assumed earlier. */
4343 (void)hv_delete(GvHVn(PL_incgv),
4344 SvPVX_const(namesv),
4345 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4347 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4349 /* die_unwind() did LEAVE, or we won't be here */
4352 LEAVE_with_name("eval");
4353 if (!(save_flags & OPf_SPECIAL)) {
4361 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4362 close to the related Perl_create_eval_scope. */
4364 Perl_delete_eval_scope(pTHX)
4375 LEAVE_with_name("eval_scope");
4376 PERL_UNUSED_VAR(newsp);
4377 PERL_UNUSED_VAR(gimme);
4378 PERL_UNUSED_VAR(optype);
4381 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4382 also needed by Perl_fold_constants. */
4384 Perl_create_eval_scope(pTHX_ U32 flags)
4387 const I32 gimme = GIMME_V;
4389 ENTER_with_name("eval_scope");
4392 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4395 PL_in_eval = EVAL_INEVAL;
4396 if (flags & G_KEEPERR)
4397 PL_in_eval |= EVAL_KEEPERR;
4400 if (flags & G_FAKINGEVAL) {
4401 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4409 PERL_CONTEXT * const cx = create_eval_scope(0);
4410 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4411 return DOCATCH(PL_op->op_next);
4426 PERL_UNUSED_VAR(optype);
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("eval_scope");
4442 const I32 gimme = GIMME_V;
4444 ENTER_with_name("given");
4447 if (PL_op->op_targ) {
4448 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4449 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4450 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4457 PUSHBLOCK(cx, CXt_GIVEN, SP);
4470 PERL_UNUSED_CONTEXT;
4473 assert(CxTYPE(cx) == CXt_GIVEN);
4476 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4477 SVs_PADTMP|SVs_TEMP, FALSE);
4478 PL_curpm = newpm; /* Don't pop $1 et al till now */
4480 LEAVE_with_name("given");
4484 /* Helper routines used by pp_smartmatch */
4486 S_make_matcher(pTHX_ REGEXP *re)
4489 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4491 PERL_ARGS_ASSERT_MAKE_MATCHER;
4493 PM_SETRE(matcher, ReREFCNT_inc(re));
4495 SAVEFREEOP((OP *) matcher);
4496 ENTER_with_name("matcher"); SAVETMPS;
4502 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4507 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4509 PL_op = (OP *) matcher;
4512 (void) Perl_pp_match(aTHX);
4514 return (SvTRUEx(POPs));
4518 S_destroy_matcher(pTHX_ PMOP *matcher)
4522 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4523 PERL_UNUSED_ARG(matcher);
4526 LEAVE_with_name("matcher");
4529 /* Do a smart match */
4532 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4533 return do_smartmatch(NULL, NULL, 0);
4536 /* This version of do_smartmatch() implements the
4537 * table of smart matches that is found in perlsyn.
4540 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4545 bool object_on_left = FALSE;
4546 SV *e = TOPs; /* e is for 'expression' */
4547 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4549 /* Take care only to invoke mg_get() once for each argument.
4550 * Currently we do this by copying the SV if it's magical. */
4552 if (!copied && SvGMAGICAL(d))
4553 d = sv_mortalcopy(d);
4560 e = sv_mortalcopy(e);
4562 /* First of all, handle overload magic of the rightmost argument */
4565 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4566 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4568 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4575 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4578 SP -= 2; /* Pop the values */
4583 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4590 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4591 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4592 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4594 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4595 object_on_left = TRUE;
4598 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4600 if (object_on_left) {
4601 goto sm_any_sub; /* Treat objects like scalars */
4603 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4604 /* Test sub truth for each key */
4606 bool andedresults = TRUE;
4607 HV *hv = (HV*) SvRV(d);
4608 I32 numkeys = hv_iterinit(hv);
4609 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4612 while ( (he = hv_iternext(hv)) ) {
4613 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4614 ENTER_with_name("smartmatch_hash_key_test");
4617 PUSHs(hv_iterkeysv(he));
4619 c = call_sv(e, G_SCALAR);
4622 andedresults = FALSE;
4624 andedresults = SvTRUEx(POPs) && andedresults;
4626 LEAVE_with_name("smartmatch_hash_key_test");
4633 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4634 /* Test sub truth for each element */
4636 bool andedresults = TRUE;
4637 AV *av = (AV*) SvRV(d);
4638 const I32 len = av_tindex(av);
4639 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4642 for (i = 0; i <= len; ++i) {
4643 SV * const * const svp = av_fetch(av, i, FALSE);
4644 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4645 ENTER_with_name("smartmatch_array_elem_test");
4651 c = call_sv(e, G_SCALAR);
4654 andedresults = FALSE;
4656 andedresults = SvTRUEx(POPs) && andedresults;
4658 LEAVE_with_name("smartmatch_array_elem_test");
4667 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4668 ENTER_with_name("smartmatch_coderef");
4673 c = call_sv(e, G_SCALAR);
4677 else if (SvTEMP(TOPs))
4678 SvREFCNT_inc_void(TOPs);
4680 LEAVE_with_name("smartmatch_coderef");
4685 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4686 if (object_on_left) {
4687 goto sm_any_hash; /* Treat objects like scalars */
4689 else if (!SvOK(d)) {
4690 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4693 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4694 /* Check that the key-sets are identical */
4696 HV *other_hv = MUTABLE_HV(SvRV(d));
4699 U32 this_key_count = 0,
4700 other_key_count = 0;
4701 HV *hv = MUTABLE_HV(SvRV(e));
4703 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4704 /* Tied hashes don't know how many keys they have. */
4705 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4706 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4710 HV * const temp = other_hv;
4716 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4720 /* The hashes have the same number of keys, so it suffices
4721 to check that one is a subset of the other. */
4722 (void) hv_iterinit(hv);
4723 while ( (he = hv_iternext(hv)) ) {
4724 SV *key = hv_iterkeysv(he);
4726 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4729 if(!hv_exists_ent(other_hv, key, 0)) {
4730 (void) hv_iterinit(hv); /* reset iterator */
4736 (void) hv_iterinit(other_hv);
4737 while ( hv_iternext(other_hv) )
4741 other_key_count = HvUSEDKEYS(other_hv);
4743 if (this_key_count != other_key_count)
4748 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4749 AV * const other_av = MUTABLE_AV(SvRV(d));
4750 const SSize_t other_len = av_tindex(other_av) + 1;
4752 HV *hv = MUTABLE_HV(SvRV(e));
4754 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4755 for (i = 0; i < other_len; ++i) {
4756 SV ** const svp = av_fetch(other_av, i, FALSE);
4757 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4758 if (svp) { /* ??? When can this not happen? */
4759 if (hv_exists_ent(hv, *svp, 0))
4765 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4766 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4769 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4771 HV *hv = MUTABLE_HV(SvRV(e));
4773 (void) hv_iterinit(hv);
4774 while ( (he = hv_iternext(hv)) ) {
4775 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4776 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4777 (void) hv_iterinit(hv);
4778 destroy_matcher(matcher);
4782 destroy_matcher(matcher);
4788 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4789 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4796 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4797 if (object_on_left) {
4798 goto sm_any_array; /* Treat objects like scalars */
4800 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4801 AV * const other_av = MUTABLE_AV(SvRV(e));
4802 const SSize_t other_len = av_tindex(other_av) + 1;
4805 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4806 for (i = 0; i < other_len; ++i) {
4807 SV ** const svp = av_fetch(other_av, i, FALSE);
4809 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4810 if (svp) { /* ??? When can this not happen? */
4811 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4817 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4818 AV *other_av = MUTABLE_AV(SvRV(d));
4819 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4820 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4824 const SSize_t other_len = av_tindex(other_av);
4826 if (NULL == seen_this) {
4827 seen_this = newHV();
4828 (void) sv_2mortal(MUTABLE_SV(seen_this));
4830 if (NULL == seen_other) {
4831 seen_other = newHV();
4832 (void) sv_2mortal(MUTABLE_SV(seen_other));
4834 for(i = 0; i <= other_len; ++i) {
4835 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4836 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4838 if (!this_elem || !other_elem) {
4839 if ((this_elem && SvOK(*this_elem))
4840 || (other_elem && SvOK(*other_elem)))
4843 else if (hv_exists_ent(seen_this,
4844 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4845 hv_exists_ent(seen_other,
4846 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4848 if (*this_elem != *other_elem)
4852 (void)hv_store_ent(seen_this,
4853 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4855 (void)hv_store_ent(seen_other,
4856 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4862 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4863 (void) do_smartmatch(seen_this, seen_other, 0);
4865 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4874 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4875 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4878 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4879 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4882 for(i = 0; i <= this_len; ++i) {
4883 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4884 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4885 if (svp && matcher_matches_sv(matcher, *svp)) {
4886 destroy_matcher(matcher);
4890 destroy_matcher(matcher);
4894 else if (!SvOK(d)) {
4895 /* undef ~~ array */
4896 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4899 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4900 for (i = 0; i <= this_len; ++i) {
4901 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4902 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4903 if (!svp || !SvOK(*svp))
4912 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4914 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4915 for (i = 0; i <= this_len; ++i) {
4916 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4923 /* infinite recursion isn't supposed to happen here */
4924 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4925 (void) do_smartmatch(NULL, NULL, 1);
4927 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4936 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4937 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4938 SV *t = d; d = e; e = t;
4939 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4942 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4943 SV *t = d; d = e; e = t;
4944 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4945 goto sm_regex_array;
4948 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4950 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4952 PUSHs(matcher_matches_sv(matcher, d)
4955 destroy_matcher(matcher);
4960 /* See if there is overload magic on left */
4961 else if (object_on_left && SvAMAGIC(d)) {
4963 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4964 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4967 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4975 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4978 else if (!SvOK(d)) {
4979 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4980 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4985 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4986 DEBUG_M(if (SvNIOK(e))
4987 Perl_deb(aTHX_ " applying rule Any-Num\n");
4989 Perl_deb(aTHX_ " applying rule Num-numish\n");
4991 /* numeric comparison */
4994 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4995 (void) Perl_pp_i_eq(aTHX);
4997 (void) Perl_pp_eq(aTHX);
5005 /* As a last resort, use string comparison */
5006 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5009 return Perl_pp_seq(aTHX);
5016 const I32 gimme = GIMME_V;
5018 /* This is essentially an optimization: if the match
5019 fails, we don't want to push a context and then
5020 pop it again right away, so we skip straight
5021 to the op that follows the leavewhen.
5022 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5024 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
5025 RETURNOP(cLOGOP->op_other->op_next);
5027 ENTER_with_name("when");
5030 PUSHBLOCK(cx, CXt_WHEN, SP);
5045 cxix = dopoptogiven(cxstack_ix);
5047 /* diag_listed_as: Can't "when" outside a topicalizer */
5048 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5049 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5052 assert(CxTYPE(cx) == CXt_WHEN);
5055 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
5056 SVs_PADTMP|SVs_TEMP, FALSE);
5057 PL_curpm = newpm; /* pop $1 et al */
5059 LEAVE_with_name("when");
5061 if (cxix < cxstack_ix)
5064 cx = &cxstack[cxix];
5066 if (CxFOREACH(cx)) {
5067 /* clear off anything above the scope we're re-entering */
5068 I32 inner = PL_scopestack_ix;
5071 if (PL_scopestack_ix < inner)
5072 leave_scope(PL_scopestack[PL_scopestack_ix]);
5073 PL_curcop = cx->blk_oldcop;
5076 return cx->blk_loop.my_op->op_nextop;
5080 RETURNOP(cx->blk_givwhen.leave_op);
5093 PERL_UNUSED_VAR(gimme);
5095 cxix = dopoptowhen(cxstack_ix);
5097 DIE(aTHX_ "Can't \"continue\" outside a when block");
5099 if (cxix < cxstack_ix)
5103 assert(CxTYPE(cx) == CXt_WHEN);
5106 PL_curpm = newpm; /* pop $1 et al */
5108 LEAVE_with_name("when");
5109 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5118 cxix = dopoptogiven(cxstack_ix);
5120 DIE(aTHX_ "Can't \"break\" outside a given block");
5122 cx = &cxstack[cxix];
5124 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5126 if (cxix < cxstack_ix)
5129 /* Restore the sp at the time we entered the given block */
5132 return cx->blk_givwhen.leave_op;
5136 S_doparseform(pTHX_ SV *sv)
5139 char *s = SvPV(sv, len);
5141 char *base = NULL; /* start of current field */
5142 I32 skipspaces = 0; /* number of contiguous spaces seen */
5143 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5144 bool repeat = FALSE; /* ~~ seen on this line */
5145 bool postspace = FALSE; /* a text field may need right padding */
5148 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5150 bool ischop; /* it's a ^ rather than a @ */
5151 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5152 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5156 PERL_ARGS_ASSERT_DOPARSEFORM;
5159 Perl_croak(aTHX_ "Null picture in formline");
5161 if (SvTYPE(sv) >= SVt_PVMG) {
5162 /* This might, of course, still return NULL. */
5163 mg = mg_find(sv, PERL_MAGIC_fm);
5165 sv_upgrade(sv, SVt_PVMG);
5169 /* still the same as previously-compiled string? */
5170 SV *old = mg->mg_obj;
5171 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5172 && len == SvCUR(old)
5173 && strnEQ(SvPVX(old), SvPVX(sv), len)
5175 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5179 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5180 Safefree(mg->mg_ptr);
5186 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5187 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5190 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5191 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5195 /* estimate the buffer size needed */
5196 for (base = s; s <= send; s++) {
5197 if (*s == '\n' || *s == '@' || *s == '^')
5203 Newx(fops, maxops, U32);
5208 *fpc++ = FF_LINEMARK;
5209 noblank = repeat = FALSE;
5227 case ' ': case '\t':
5234 } /* else FALL THROUGH */
5242 *fpc++ = FF_LITERAL;
5250 *fpc++ = (U32)skipspaces;
5254 *fpc++ = FF_NEWLINE;
5258 arg = fpc - linepc + 1;
5265 *fpc++ = FF_LINEMARK;
5266 noblank = repeat = FALSE;
5275 ischop = s[-1] == '^';
5281 arg = (s - base) - 1;
5283 *fpc++ = FF_LITERAL;
5289 if (*s == '*') { /* @* or ^* */
5291 *fpc++ = 2; /* skip the @* or ^* */
5293 *fpc++ = FF_LINESNGL;
5296 *fpc++ = FF_LINEGLOB;
5298 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5299 arg = ischop ? FORM_NUM_BLANK : 0;
5304 const char * const f = ++s;
5307 arg |= FORM_NUM_POINT + (s - f);
5309 *fpc++ = s - base; /* fieldsize for FETCH */
5310 *fpc++ = FF_DECIMAL;
5312 unchopnum |= ! ischop;
5314 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5315 arg = ischop ? FORM_NUM_BLANK : 0;
5317 s++; /* skip the '0' first */
5321 const char * const f = ++s;
5324 arg |= FORM_NUM_POINT + (s - f);
5326 *fpc++ = s - base; /* fieldsize for FETCH */
5327 *fpc++ = FF_0DECIMAL;
5329 unchopnum |= ! ischop;
5331 else { /* text field */
5333 bool ismore = FALSE;
5336 while (*++s == '>') ;
5337 prespace = FF_SPACE;
5339 else if (*s == '|') {
5340 while (*++s == '|') ;
5341 prespace = FF_HALFSPACE;
5346 while (*++s == '<') ;
5349 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5353 *fpc++ = s - base; /* fieldsize for FETCH */
5355 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5358 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5372 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5375 mg->mg_ptr = (char *) fops;
5376 mg->mg_len = arg * sizeof(U32);
5377 mg->mg_obj = sv_copy;
5378 mg->mg_flags |= MGf_REFCOUNTED;
5380 if (unchopnum && repeat)
5381 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5388 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5390 /* Can value be printed in fldsize chars, using %*.*f ? */
5394 int intsize = fldsize - (value < 0 ? 1 : 0);
5396 if (frcsize & FORM_NUM_POINT)
5398 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5401 while (intsize--) pwr *= 10.0;
5402 while (frcsize--) eps /= 10.0;
5405 if (value + eps >= pwr)
5408 if (value - eps <= -pwr)
5415 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5418 SV * const datasv = FILTER_DATA(idx);
5419 const int filter_has_file = IoLINES(datasv);
5420 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5421 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5426 char *prune_from = NULL;
5427 bool read_from_cache = FALSE;
5431 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5433 assert(maxlen >= 0);
5436 /* I was having segfault trouble under Linux 2.2.5 after a
5437 parse error occured. (Had to hack around it with a test
5438 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5439 not sure where the trouble is yet. XXX */
5442 SV *const cache = datasv;
5445 const char *cache_p = SvPV(cache, cache_len);
5449 /* Running in block mode and we have some cached data already.
5451 if (cache_len >= umaxlen) {
5452 /* In fact, so much data we don't even need to call
5457 const char *const first_nl =
5458 (const char *)memchr(cache_p, '\n', cache_len);
5460 take = first_nl + 1 - cache_p;
5464 sv_catpvn(buf_sv, cache_p, take);
5465 sv_chop(cache, cache_p + take);
5466 /* Definitely not EOF */
5470 sv_catsv(buf_sv, cache);
5472 umaxlen -= cache_len;
5475 read_from_cache = TRUE;
5479 /* Filter API says that the filter appends to the contents of the buffer.
5480 Usually the buffer is "", so the details don't matter. But if it's not,
5481 then clearly what it contains is already filtered by this filter, so we
5482 don't want to pass it in a second time.
5483 I'm going to use a mortal in case the upstream filter croaks. */
5484 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5485 ? sv_newmortal() : buf_sv;
5486 SvUPGRADE(upstream, SVt_PV);
5488 if (filter_has_file) {
5489 status = FILTER_READ(idx+1, upstream, 0);
5492 if (filter_sub && status >= 0) {
5496 ENTER_with_name("call_filter_sub");
5501 DEFSV_set(upstream);
5505 PUSHs(filter_state);
5508 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5518 SV * const errsv = ERRSV;
5519 if (SvTRUE_NN(errsv))
5520 err = newSVsv(errsv);
5526 LEAVE_with_name("call_filter_sub");
5529 if (SvGMAGICAL(upstream)) {
5531 if (upstream == buf_sv) mg_free(buf_sv);
5533 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5534 if(!err && SvOK(upstream)) {
5535 got_p = SvPV_nomg(upstream, got_len);
5537 if (got_len > umaxlen) {
5538 prune_from = got_p + umaxlen;
5541 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5542 if (first_nl && first_nl + 1 < got_p + got_len) {
5543 /* There's a second line here... */
5544 prune_from = first_nl + 1;
5548 if (!err && prune_from) {
5549 /* Oh. Too long. Stuff some in our cache. */
5550 STRLEN cached_len = got_p + got_len - prune_from;
5551 SV *const cache = datasv;
5554 /* Cache should be empty. */
5555 assert(!SvCUR(cache));
5558 sv_setpvn(cache, prune_from, cached_len);
5559 /* If you ask for block mode, you may well split UTF-8 characters.
5560 "If it breaks, you get to keep both parts"
5561 (Your code is broken if you don't put them back together again
5562 before something notices.) */
5563 if (SvUTF8(upstream)) {
5566 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5568 /* Cannot just use sv_setpvn, as that could free the buffer
5569 before we have a chance to assign it. */
5570 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5571 got_len - cached_len);
5573 /* Can't yet be EOF */
5578 /* If they are at EOF but buf_sv has something in it, then they may never
5579 have touched the SV upstream, so it may be undefined. If we naively
5580 concatenate it then we get a warning about use of uninitialised value.
5582 if (!err && upstream != buf_sv &&
5584 sv_catsv_nomg(buf_sv, upstream);
5586 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5589 IoLINES(datasv) = 0;
5591 SvREFCNT_dec(filter_state);
5592 IoTOP_GV(datasv) = NULL;
5595 SvREFCNT_dec(filter_sub);
5596 IoBOTTOM_GV(datasv) = NULL;
5598 filter_del(S_run_user_filter);
5604 if (status == 0 && read_from_cache) {
5605 /* If we read some data from the cache (and by getting here it implies
5606 that we emptied the cache) then we aren't yet at EOF, and mustn't
5607 report that to our caller. */
5615 * c-indentation-style: bsd
5617 * indent-tabs-mode: nil
5620 * ex: set ts=8 sts=4 sw=4 et: