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);
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 #ifndef INCOMPLETE_TAINTS
172 if (TAINTING_get && TAINT_get) {
173 SvTAINTED_on((SV*)new_re);
178 #if !defined(USE_ITHREADS)
179 /* can't change the optree at runtime either */
180 /* PMf_KEEP is handled differently under threads to avoid these problems */
181 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
183 if (pm->op_pmflags & PMf_KEEP) {
184 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
185 cLOGOP->op_first->op_next = PL_op->op_next;
198 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
199 PMOP * const pm = (PMOP*) cLOGOP->op_other;
200 SV * const dstr = cx->sb_dstr;
203 char *orig = cx->sb_orig;
204 REGEXP * const rx = cx->sb_rx;
206 REGEXP *old = PM_GETRE(pm);
213 PM_SETRE(pm,ReREFCNT_inc(rx));
216 rxres_restore(&cx->sb_rxres, rx);
218 if (cx->sb_iters++) {
219 const I32 saviters = cx->sb_iters;
220 if (cx->sb_iters > cx->sb_maxiters)
221 DIE(aTHX_ "Substitution loop");
223 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
225 /* See "how taint works" above pp_subst() */
227 cx->sb_rxtainted |= SUBST_TAINT_REPL;
228 sv_catsv_nomg(dstr, POPs);
229 if (CxONCE(cx) || s < orig ||
230 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
231 (s == m), cx->sb_targ, NULL,
232 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
234 SV *targ = cx->sb_targ;
236 assert(cx->sb_strend >= s);
237 if(cx->sb_strend > s) {
238 if (DO_UTF8(dstr) && !SvUTF8(targ))
239 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
241 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
243 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
244 cx->sb_rxtainted |= SUBST_TAINT_PAT;
246 if (pm->op_pmflags & PMf_NONDESTRUCT) {
248 /* From here on down we're using the copy, and leaving the
249 original untouched. */
253 SV_CHECK_THINKFIRST_COW_DROP(targ);
254 if (isGV(targ)) Perl_croak_no_modify();
256 SvPV_set(targ, SvPVX(dstr));
257 SvCUR_set(targ, SvCUR(dstr));
258 SvLEN_set(targ, SvLEN(dstr));
261 SvPV_set(dstr, NULL);
264 mPUSHi(saviters - 1);
266 (void)SvPOK_only_UTF8(targ);
269 /* update the taint state of various various variables in
270 * preparation for final exit.
271 * See "how taint works" above pp_subst() */
273 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
274 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
275 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
277 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
279 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
280 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
282 SvTAINTED_on(TOPs); /* taint return value */
283 /* needed for mg_set below */
285 cBOOL(cx->sb_rxtainted &
286 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
290 /* PL_tainted must be correctly set for this mg_set */
293 LEAVE_SCOPE(cx->sb_oldsave);
296 RETURNOP(pm->op_next);
297 assert(0); /* NOTREACHED */
299 cx->sb_iters = saviters;
301 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
304 assert(!RX_SUBOFFSET(rx));
305 cx->sb_orig = orig = RX_SUBBEG(rx);
307 cx->sb_strend = s + (cx->sb_strend - m);
309 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
311 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
312 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
314 sv_catpvn_nomg(dstr, s, m-s);
316 cx->sb_s = RX_OFFS(rx)[0].end + orig;
317 { /* Update the pos() information. */
319 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
321 if (!(mg = mg_find_mglob(sv))) {
322 mg = sv_magicext_mglob(sv);
325 MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
328 (void)ReREFCNT_inc(rx);
329 /* update the taint state of various various variables in preparation
330 * for calling the code block.
331 * See "how taint works" above pp_subst() */
333 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
334 cx->sb_rxtainted |= SUBST_TAINT_PAT;
336 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
337 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
340 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
342 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
343 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
344 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
345 ? cx->sb_dstr : cx->sb_targ);
348 rxres_save(&cx->sb_rxres, rx);
350 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
354 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
359 PERL_ARGS_ASSERT_RXRES_SAVE;
362 if (!p || p[1] < RX_NPARENS(rx)) {
364 i = 7 + (RX_NPARENS(rx)+1) * 2;
366 i = 6 + (RX_NPARENS(rx)+1) * 2;
375 /* what (if anything) to free on croak */
376 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
377 RX_MATCH_COPIED_off(rx);
378 *p++ = RX_NPARENS(rx);
381 *p++ = PTR2UV(RX_SAVED_COPY(rx));
382 RX_SAVED_COPY(rx) = NULL;
385 *p++ = PTR2UV(RX_SUBBEG(rx));
386 *p++ = (UV)RX_SUBLEN(rx);
387 *p++ = (UV)RX_SUBOFFSET(rx);
388 *p++ = (UV)RX_SUBCOFFSET(rx);
389 for (i = 0; i <= RX_NPARENS(rx); ++i) {
390 *p++ = (UV)RX_OFFS(rx)[i].start;
391 *p++ = (UV)RX_OFFS(rx)[i].end;
396 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
401 PERL_ARGS_ASSERT_RXRES_RESTORE;
404 RX_MATCH_COPY_FREE(rx);
405 RX_MATCH_COPIED_set(rx, *p);
407 RX_NPARENS(rx) = *p++;
410 if (RX_SAVED_COPY(rx))
411 SvREFCNT_dec (RX_SAVED_COPY(rx));
412 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
416 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
417 RX_SUBLEN(rx) = (I32)(*p++);
418 RX_SUBOFFSET(rx) = (I32)*p++;
419 RX_SUBCOFFSET(rx) = (I32)*p++;
420 for (i = 0; i <= RX_NPARENS(rx); ++i) {
421 RX_OFFS(rx)[i].start = (I32)(*p++);
422 RX_OFFS(rx)[i].end = (I32)(*p++);
427 S_rxres_free(pTHX_ void **rsp)
429 UV * const p = (UV*)*rsp;
431 PERL_ARGS_ASSERT_RXRES_FREE;
435 void *tmp = INT2PTR(char*,*p);
438 U32 i = 9 + p[1] * 2;
440 U32 i = 8 + p[1] * 2;
445 SvREFCNT_dec (INT2PTR(SV*,p[2]));
448 PoisonFree(p, i, sizeof(UV));
457 #define FORM_NUM_BLANK (1<<30)
458 #define FORM_NUM_POINT (1<<29)
462 dVAR; dSP; dMARK; dORIGMARK;
463 SV * const tmpForm = *++MARK;
464 SV *formsv; /* contains text of original format */
465 U32 *fpc; /* format ops program counter */
466 char *t; /* current append position in target string */
467 const char *f; /* current position in format string */
469 SV *sv = NULL; /* current item */
470 const char *item = NULL;/* string value of current item */
471 I32 itemsize = 0; /* length of current item, possibly truncated */
472 I32 fieldsize = 0; /* width of current field */
473 I32 lines = 0; /* number of lines that have been output */
474 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
475 const char *chophere = NULL; /* where to chop current item */
476 STRLEN linemark = 0; /* pos of start of line in output */
478 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
480 STRLEN linemax; /* estimate of output size in bytes */
481 bool item_is_utf8 = FALSE;
482 bool targ_is_utf8 = FALSE;
485 U8 *source; /* source of bytes to append */
486 STRLEN to_copy; /* how may bytes to append */
487 char trans; /* what chars to translate */
489 mg = doparseform(tmpForm);
491 fpc = (U32*)mg->mg_ptr;
492 /* the actual string the format was compiled from.
493 * with overload etc, this may not match tmpForm */
497 SvPV_force(PL_formtarget, len);
498 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
499 SvTAINTED_on(PL_formtarget);
500 if (DO_UTF8(PL_formtarget))
502 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
503 t = SvGROW(PL_formtarget, len + linemax + 1);
504 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
506 f = SvPV_const(formsv, len);
510 const char *name = "???";
513 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
514 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
515 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
516 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
517 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
519 case FF_CHECKNL: name = "CHECKNL"; break;
520 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
521 case FF_SPACE: name = "SPACE"; break;
522 case FF_HALFSPACE: name = "HALFSPACE"; break;
523 case FF_ITEM: name = "ITEM"; break;
524 case FF_CHOP: name = "CHOP"; break;
525 case FF_LINEGLOB: name = "LINEGLOB"; break;
526 case FF_NEWLINE: name = "NEWLINE"; break;
527 case FF_MORE: name = "MORE"; break;
528 case FF_LINEMARK: name = "LINEMARK"; break;
529 case FF_END: name = "END"; break;
530 case FF_0DECIMAL: name = "0DECIMAL"; break;
531 case FF_LINESNGL: name = "LINESNGL"; break;
534 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
536 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
540 linemark = t - SvPVX(PL_formtarget);
550 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
566 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
569 SvTAINTED_on(PL_formtarget);
575 const char *s = item = SvPV_const(sv, len);
578 itemsize = sv_len_utf8(sv);
579 if (itemsize != (I32)len) {
581 if (itemsize > fieldsize) {
582 itemsize = fieldsize;
583 itembytes = itemsize;
584 sv_pos_u2b(sv, &itembytes, 0);
588 send = chophere = s + itembytes;
598 sv_pos_b2u(sv, &itemsize);
602 item_is_utf8 = FALSE;
603 if (itemsize > fieldsize)
604 itemsize = fieldsize;
605 send = chophere = s + itemsize;
619 const char *s = item = SvPV_const(sv, len);
622 itemsize = sv_len_utf8(sv);
623 if (itemsize != (I32)len) {
625 if (itemsize <= fieldsize) {
626 const char *send = chophere = s + itemsize;
640 itemsize = fieldsize;
641 itembytes = itemsize;
642 sv_pos_u2b(sv, &itembytes, 0);
643 send = chophere = s + itembytes;
644 while (s < send || (s == send && isSPACE(*s))) {
654 if (strchr(PL_chopset, *s))
659 itemsize = chophere - item;
660 sv_pos_b2u(sv, &itemsize);
666 item_is_utf8 = FALSE;
667 if (itemsize <= fieldsize) {
668 const char *const send = chophere = s + itemsize;
682 itemsize = fieldsize;
683 send = chophere = s + itemsize;
684 while (s < send || (s == send && isSPACE(*s))) {
694 if (strchr(PL_chopset, *s))
699 itemsize = chophere - item;
705 arg = fieldsize - itemsize;
714 arg = fieldsize - itemsize;
728 /* convert to_copy from chars to bytes */
732 to_copy = s - source;
738 const char *s = chophere;
752 const bool oneline = fpc[-1] == FF_LINESNGL;
753 const char *s = item = SvPV_const(sv, len);
754 const char *const send = s + len;
756 item_is_utf8 = DO_UTF8(sv);
767 to_copy = s - SvPVX_const(sv) - 1;
781 /* append to_copy bytes from source to PL_formstring.
782 * item_is_utf8 implies source is utf8.
783 * if trans, translate certain characters during the copy */
788 SvCUR_set(PL_formtarget,
789 t - SvPVX_const(PL_formtarget));
791 if (targ_is_utf8 && !item_is_utf8) {
792 source = tmp = bytes_to_utf8(source, &to_copy);
794 if (item_is_utf8 && !targ_is_utf8) {
796 /* Upgrade targ to UTF8, and then we reduce it to
797 a problem we have a simple solution for.
798 Don't need get magic. */
799 sv_utf8_upgrade_nomg(PL_formtarget);
801 /* re-calculate linemark */
802 s = (U8*)SvPVX(PL_formtarget);
803 /* the bytes we initially allocated to append the
804 * whole line may have been gobbled up during the
805 * upgrade, so allocate a whole new line's worth
810 linemark = s - (U8*)SvPVX(PL_formtarget);
812 /* Easy. They agree. */
813 assert (item_is_utf8 == targ_is_utf8);
816 /* @* and ^* are the only things that can exceed
817 * the linemax, so grow by the output size, plus
818 * a whole new form's worth in case of any further
820 grow = linemax + to_copy;
822 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
823 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
825 Copy(source, t, to_copy, char);
827 /* blank out ~ or control chars, depending on trans.
828 * works on bytes not chars, so relies on not
829 * matching utf8 continuation bytes */
831 U8 *send = s + to_copy;
834 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
841 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
849 #if defined(USE_LONG_DOUBLE)
851 ((arg & FORM_NUM_POINT) ?
852 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
855 ((arg & FORM_NUM_POINT) ?
856 "%#0*.*f" : "%0*.*f");
861 #if defined(USE_LONG_DOUBLE)
863 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
866 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
869 /* If the field is marked with ^ and the value is undefined,
871 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
879 /* overflow evidence */
880 if (num_overflow(value, fieldsize, arg)) {
886 /* Formats aren't yet marked for locales, so assume "yes". */
888 STORE_NUMERIC_STANDARD_SET_LOCAL();
889 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
890 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
891 RESTORE_NUMERIC_STANDARD();
898 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
906 if (arg) { /* repeat until fields exhausted? */
912 t = SvPVX(PL_formtarget) + linemark;
919 const char *s = chophere;
920 const char *send = item + len;
922 while (isSPACE(*s) && (s < send))
927 arg = fieldsize - itemsize;
934 if (strnEQ(s1," ",3)) {
935 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
946 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
948 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
950 SvUTF8_on(PL_formtarget);
951 FmLINES(PL_formtarget) += lines;
953 if (fpc[-1] == FF_BLANK)
954 RETURNOP(cLISTOP->op_first);
966 if (PL_stack_base + *PL_markstack_ptr == SP) {
968 if (GIMME_V == G_SCALAR)
970 RETURNOP(PL_op->op_next->op_next);
972 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
973 Perl_pp_pushmark(aTHX); /* push dst */
974 Perl_pp_pushmark(aTHX); /* push src */
975 ENTER_with_name("grep"); /* enter outer scope */
978 if (PL_op->op_private & OPpGREP_LEX)
979 SAVESPTR(PAD_SVl(PL_op->op_targ));
982 ENTER_with_name("grep_item"); /* enter inner scope */
985 src = PL_stack_base[*PL_markstack_ptr];
986 if (SvPADTMP(src) && !IS_PADGV(src)) {
987 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
991 if (PL_op->op_private & OPpGREP_LEX)
992 PAD_SVl(PL_op->op_targ) = src;
997 if (PL_op->op_type == OP_MAPSTART)
998 Perl_pp_pushmark(aTHX); /* push top */
999 return ((LOGOP*)PL_op->op_next)->op_other;
1005 const I32 gimme = GIMME_V;
1006 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1012 /* first, move source pointer to the next item in the source list */
1013 ++PL_markstack_ptr[-1];
1015 /* if there are new items, push them into the destination list */
1016 if (items && gimme != G_VOID) {
1017 /* might need to make room back there first */
1018 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1019 /* XXX this implementation is very pessimal because the stack
1020 * is repeatedly extended for every set of items. Is possible
1021 * to do this without any stack extension or copying at all
1022 * by maintaining a separate list over which the map iterates
1023 * (like foreach does). --gsar */
1025 /* everything in the stack after the destination list moves
1026 * towards the end the stack by the amount of room needed */
1027 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1029 /* items to shift up (accounting for the moved source pointer) */
1030 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1032 /* This optimization is by Ben Tilly and it does
1033 * things differently from what Sarathy (gsar)
1034 * is describing. The downside of this optimization is
1035 * that leaves "holes" (uninitialized and hopefully unused areas)
1036 * to the Perl stack, but on the other hand this
1037 * shouldn't be a problem. If Sarathy's idea gets
1038 * implemented, this optimization should become
1039 * irrelevant. --jhi */
1041 shift = count; /* Avoid shifting too often --Ben Tilly */
1045 dst = (SP += shift);
1046 PL_markstack_ptr[-1] += shift;
1047 *PL_markstack_ptr += shift;
1051 /* copy the new items down to the destination list */
1052 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1053 if (gimme == G_ARRAY) {
1054 /* add returned items to the collection (making mortal copies
1055 * if necessary), then clear the current temps stack frame
1056 * *except* for those items. We do this splicing the items
1057 * into the start of the tmps frame (so some items may be on
1058 * the tmps stack twice), then moving PL_tmps_floor above
1059 * them, then freeing the frame. That way, the only tmps that
1060 * accumulate over iterations are the return values for map.
1061 * We have to do to this way so that everything gets correctly
1062 * freed if we die during the map.
1066 /* make space for the slice */
1067 EXTEND_MORTAL(items);
1068 tmpsbase = PL_tmps_floor + 1;
1069 Move(PL_tmps_stack + tmpsbase,
1070 PL_tmps_stack + tmpsbase + items,
1071 PL_tmps_ix - PL_tmps_floor,
1073 PL_tmps_ix += items;
1078 sv = sv_mortalcopy(sv);
1080 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1082 /* clear the stack frame except for the items */
1083 PL_tmps_floor += items;
1085 /* FREETMPS may have cleared the TEMP flag on some of the items */
1088 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1091 /* scalar context: we don't care about which values map returns
1092 * (we use undef here). And so we certainly don't want to do mortal
1093 * copies of meaningless values. */
1094 while (items-- > 0) {
1096 *dst-- = &PL_sv_undef;
1104 LEAVE_with_name("grep_item"); /* exit inner scope */
1107 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1109 (void)POPMARK; /* pop top */
1110 LEAVE_with_name("grep"); /* exit outer scope */
1111 (void)POPMARK; /* pop src */
1112 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1113 (void)POPMARK; /* pop dst */
1114 SP = PL_stack_base + POPMARK; /* pop original mark */
1115 if (gimme == G_SCALAR) {
1116 if (PL_op->op_private & OPpGREP_LEX) {
1117 SV* sv = sv_newmortal();
1118 sv_setiv(sv, items);
1126 else if (gimme == G_ARRAY)
1133 ENTER_with_name("grep_item"); /* enter inner scope */
1136 /* set $_ to the new source item */
1137 src = PL_stack_base[PL_markstack_ptr[-1]];
1138 if (SvPADTMP(src) && !IS_PADGV(src)) src = sv_mortalcopy(src);
1140 if (PL_op->op_private & OPpGREP_LEX)
1141 PAD_SVl(PL_op->op_targ) = src;
1145 RETURNOP(cLOGOP->op_other);
1154 if (GIMME == G_ARRAY)
1156 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1157 return cLOGOP->op_other;
1167 if (GIMME == G_ARRAY) {
1168 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1172 SV * const targ = PAD_SV(PL_op->op_targ);
1175 if (PL_op->op_private & OPpFLIP_LINENUM) {
1176 if (GvIO(PL_last_in_gv)) {
1177 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1180 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1182 flip = SvIV(sv) == SvIV(GvSV(gv));
1188 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1189 if (PL_op->op_flags & OPf_SPECIAL) {
1197 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1200 sv_setpvs(TARG, "");
1206 /* This code tries to decide if "$left .. $right" should use the
1207 magical string increment, or if the range is numeric (we make
1208 an exception for .."0" [#18165]). AMS 20021031. */
1210 #define RANGE_IS_NUMERIC(left,right) ( \
1211 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1212 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1213 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1214 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1215 && (!SvOK(right) || looks_like_number(right))))
1221 if (GIMME == G_ARRAY) {
1227 if (RANGE_IS_NUMERIC(left,right)) {
1230 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1231 (SvOK(right) && (SvIOK(right)
1232 ? SvIsUV(right) && SvUV(right) > IV_MAX
1233 : SvNV_nomg(right) > IV_MAX)))
1234 DIE(aTHX_ "Range iterator outside integer range");
1235 i = SvIV_nomg(left);
1236 max = SvIV_nomg(right);
1239 if (j > SSize_t_MAX)
1240 Perl_croak(aTHX_ "Out of memory during list extend");
1247 SV * const sv = sv_2mortal(newSViv(i++));
1253 const char * const lpv = SvPV_nomg_const(left, llen);
1254 const char * const tmps = SvPV_nomg_const(right, len);
1256 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1257 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1259 if (strEQ(SvPVX_const(sv),tmps))
1261 sv = sv_2mortal(newSVsv(sv));
1268 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1272 if (PL_op->op_private & OPpFLIP_LINENUM) {
1273 if (GvIO(PL_last_in_gv)) {
1274 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1277 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1278 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1286 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1287 sv_catpvs(targ, "E0");
1297 static const char * const context_name[] = {
1299 NULL, /* CXt_WHEN never actually needs "block" */
1300 NULL, /* CXt_BLOCK never actually needs "block" */
1301 NULL, /* CXt_GIVEN never actually needs "block" */
1302 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1303 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1304 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1305 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1313 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1318 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1320 for (i = cxstack_ix; i >= 0; i--) {
1321 const PERL_CONTEXT * const cx = &cxstack[i];
1322 switch (CxTYPE(cx)) {
1328 /* diag_listed_as: Exiting subroutine via %s */
1329 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1330 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1331 if (CxTYPE(cx) == CXt_NULL)
1334 case CXt_LOOP_LAZYIV:
1335 case CXt_LOOP_LAZYSV:
1337 case CXt_LOOP_PLAIN:
1339 STRLEN cx_label_len = 0;
1340 U32 cx_label_flags = 0;
1341 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1343 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1346 (const U8*)cx_label, cx_label_len,
1347 (const U8*)label, len) == 0)
1349 (const U8*)label, len,
1350 (const U8*)cx_label, cx_label_len) == 0)
1351 : (len == cx_label_len && ((cx_label == label)
1352 || memEQ(cx_label, label, len))) )) {
1353 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1354 (long)i, cx_label));
1357 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1368 Perl_dowantarray(pTHX)
1371 const I32 gimme = block_gimme();
1372 return (gimme == G_VOID) ? G_SCALAR : gimme;
1376 Perl_block_gimme(pTHX)
1379 const I32 cxix = dopoptosub(cxstack_ix);
1383 switch (cxstack[cxix].blk_gimme) {
1391 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1392 assert(0); /* NOTREACHED */
1398 Perl_is_lvalue_sub(pTHX)
1401 const I32 cxix = dopoptosub(cxstack_ix);
1402 assert(cxix >= 0); /* We should only be called from inside subs */
1404 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1405 return CxLVAL(cxstack + cxix);
1410 /* only used by PUSHSUB */
1412 Perl_was_lvalue_sub(pTHX)
1415 const I32 cxix = dopoptosub(cxstack_ix-1);
1416 assert(cxix >= 0); /* We should only be called from inside subs */
1418 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1419 return CxLVAL(cxstack + cxix);
1425 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1430 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1432 for (i = startingblock; i >= 0; i--) {
1433 const PERL_CONTEXT * const cx = &cxstk[i];
1434 switch (CxTYPE(cx)) {
1438 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1439 * twice; the first for the normal foo() call, and the second
1440 * for a faked up re-entry into the sub to execute the
1441 * code block. Hide this faked entry from the world. */
1442 if (cx->cx_type & CXp_SUB_RE_FAKE)
1446 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1454 S_dopoptoeval(pTHX_ I32 startingblock)
1458 for (i = startingblock; i >= 0; i--) {
1459 const PERL_CONTEXT *cx = &cxstack[i];
1460 switch (CxTYPE(cx)) {
1464 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1472 S_dopoptoloop(pTHX_ I32 startingblock)
1476 for (i = startingblock; i >= 0; i--) {
1477 const PERL_CONTEXT * const cx = &cxstack[i];
1478 switch (CxTYPE(cx)) {
1484 /* diag_listed_as: Exiting subroutine via %s */
1485 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1486 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1487 if ((CxTYPE(cx)) == CXt_NULL)
1490 case CXt_LOOP_LAZYIV:
1491 case CXt_LOOP_LAZYSV:
1493 case CXt_LOOP_PLAIN:
1494 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1502 S_dopoptogiven(pTHX_ I32 startingblock)
1506 for (i = startingblock; i >= 0; i--) {
1507 const PERL_CONTEXT *cx = &cxstack[i];
1508 switch (CxTYPE(cx)) {
1512 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1514 case CXt_LOOP_PLAIN:
1515 assert(!CxFOREACHDEF(cx));
1517 case CXt_LOOP_LAZYIV:
1518 case CXt_LOOP_LAZYSV:
1520 if (CxFOREACHDEF(cx)) {
1521 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1530 S_dopoptowhen(pTHX_ I32 startingblock)
1534 for (i = startingblock; i >= 0; i--) {
1535 const PERL_CONTEXT *cx = &cxstack[i];
1536 switch (CxTYPE(cx)) {
1540 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1548 Perl_dounwind(pTHX_ I32 cxix)
1553 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1556 while (cxstack_ix > cxix) {
1558 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1559 DEBUG_CX("UNWIND"); \
1560 /* Note: we don't need to restore the base context info till the end. */
1561 switch (CxTYPE(cx)) {
1564 continue; /* not break */
1572 case CXt_LOOP_LAZYIV:
1573 case CXt_LOOP_LAZYSV:
1575 case CXt_LOOP_PLAIN:
1586 PERL_UNUSED_VAR(optype);
1590 Perl_qerror(pTHX_ SV *err)
1594 PERL_ARGS_ASSERT_QERROR;
1597 if (PL_in_eval & EVAL_KEEPERR) {
1598 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1602 sv_catsv(ERRSV, err);
1605 sv_catsv(PL_errors, err);
1607 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1609 ++PL_parser->error_count;
1613 Perl_die_unwind(pTHX_ SV *msv)
1616 SV *exceptsv = sv_mortalcopy(msv);
1617 U8 in_eval = PL_in_eval;
1618 PERL_ARGS_ASSERT_DIE_UNWIND;
1625 * Historically, perl used to set ERRSV ($@) early in the die
1626 * process and rely on it not getting clobbered during unwinding.
1627 * That sucked, because it was liable to get clobbered, so the
1628 * setting of ERRSV used to emit the exception from eval{} has
1629 * been moved to much later, after unwinding (see just before
1630 * JMPENV_JUMP below). However, some modules were relying on the
1631 * early setting, by examining $@ during unwinding to use it as
1632 * a flag indicating whether the current unwinding was caused by
1633 * an exception. It was never a reliable flag for that purpose,
1634 * being totally open to false positives even without actual
1635 * clobberage, but was useful enough for production code to
1636 * semantically rely on it.
1638 * We'd like to have a proper introspective interface that
1639 * explicitly describes the reason for whatever unwinding
1640 * operations are currently in progress, so that those modules
1641 * work reliably and $@ isn't further overloaded. But we don't
1642 * have one yet. In its absence, as a stopgap measure, ERRSV is
1643 * now *additionally* set here, before unwinding, to serve as the
1644 * (unreliable) flag that it used to.
1646 * This behaviour is temporary, and should be removed when a
1647 * proper way to detect exceptional unwinding has been developed.
1648 * As of 2010-12, the authors of modules relying on the hack
1649 * are aware of the issue, because the modules failed on
1650 * perls 5.13.{1..7} which had late setting of $@ without this
1651 * early-setting hack.
1653 if (!(in_eval & EVAL_KEEPERR)) {
1654 SvTEMP_off(exceptsv);
1655 sv_setsv(ERRSV, exceptsv);
1658 if (in_eval & EVAL_KEEPERR) {
1659 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1663 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1664 && PL_curstackinfo->si_prev)
1676 JMPENV *restartjmpenv;
1679 if (cxix < cxstack_ix)
1682 POPBLOCK(cx,PL_curpm);
1683 if (CxTYPE(cx) != CXt_EVAL) {
1685 const char* message = SvPVx_const(exceptsv, msglen);
1686 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1687 PerlIO_write(Perl_error_log, message, msglen);
1691 namesv = cx->blk_eval.old_namesv;
1692 oldcop = cx->blk_oldcop;
1693 restartjmpenv = cx->blk_eval.cur_top_env;
1694 restartop = cx->blk_eval.retop;
1696 if (gimme == G_SCALAR)
1697 *++newsp = &PL_sv_undef;
1698 PL_stack_sp = newsp;
1702 /* LEAVE could clobber PL_curcop (see save_re_context())
1703 * XXX it might be better to find a way to avoid messing with
1704 * PL_curcop in save_re_context() instead, but this is a more
1705 * minimal fix --GSAR */
1708 if (optype == OP_REQUIRE) {
1709 (void)hv_store(GvHVn(PL_incgv),
1710 SvPVX_const(namesv),
1711 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1713 /* note that unlike pp_entereval, pp_require isn't
1714 * supposed to trap errors. So now that we've popped the
1715 * EVAL that pp_require pushed, and processed the error
1716 * message, rethrow the error */
1717 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1718 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1721 if (!(in_eval & EVAL_KEEPERR))
1722 sv_setsv(ERRSV, exceptsv);
1723 PL_restartjmpenv = restartjmpenv;
1724 PL_restartop = restartop;
1726 assert(0); /* NOTREACHED */
1730 write_to_stderr(exceptsv);
1732 assert(0); /* NOTREACHED */
1737 dVAR; dSP; dPOPTOPssrl;
1738 if (SvTRUE(left) != SvTRUE(right))
1745 =for apidoc caller_cx
1747 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1748 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1749 information returned to Perl by C<caller>. Note that XSUBs don't get a
1750 stack frame, so C<caller_cx(0, NULL)> will return information for the
1751 immediately-surrounding Perl code.
1753 This function skips over the automatic calls to C<&DB::sub> made on the
1754 behalf of the debugger. If the stack frame requested was a sub called by
1755 C<DB::sub>, the return value will be the frame for the call to
1756 C<DB::sub>, since that has the correct line number/etc. for the call
1757 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1758 frame for the sub call itself.
1763 const PERL_CONTEXT *
1764 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1766 I32 cxix = dopoptosub(cxstack_ix);
1767 const PERL_CONTEXT *cx;
1768 const PERL_CONTEXT *ccstack = cxstack;
1769 const PERL_SI *top_si = PL_curstackinfo;
1772 /* we may be in a higher stacklevel, so dig down deeper */
1773 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1774 top_si = top_si->si_prev;
1775 ccstack = top_si->si_cxstack;
1776 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1780 /* caller() should not report the automatic calls to &DB::sub */
1781 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1782 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1786 cxix = dopoptosub_at(ccstack, cxix - 1);
1789 cx = &ccstack[cxix];
1790 if (dbcxp) *dbcxp = cx;
1792 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1793 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1794 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1795 field below is defined for any cx. */
1796 /* caller() should not report the automatic calls to &DB::sub */
1797 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1798 cx = &ccstack[dbcxix];
1808 const PERL_CONTEXT *cx;
1809 const PERL_CONTEXT *dbcx;
1811 const HEK *stash_hek;
1813 bool has_arg = MAXARG && TOPs;
1822 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1824 if (GIMME != G_ARRAY) {
1832 assert(CopSTASH(cx->blk_oldcop));
1833 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1834 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1836 if (GIMME != G_ARRAY) {
1839 PUSHs(&PL_sv_undef);
1842 sv_sethek(TARG, stash_hek);
1851 PUSHs(&PL_sv_undef);
1854 sv_sethek(TARG, stash_hek);
1857 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1858 lcop = closest_cop(cx->blk_oldcop, cx->blk_oldcop->op_sibling,
1859 cx->blk_sub.retop, TRUE);
1861 lcop = cx->blk_oldcop;
1862 mPUSHi((I32)CopLINE(lcop));
1865 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1866 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1867 /* So is ccstack[dbcxix]. */
1868 if (cvgv && isGV(cvgv)) {
1869 SV * const sv = newSV(0);
1870 gv_efullname3(sv, cvgv, NULL);
1872 PUSHs(boolSV(CxHASARGS(cx)));
1875 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1876 PUSHs(boolSV(CxHASARGS(cx)));
1880 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1883 gimme = (I32)cx->blk_gimme;
1884 if (gimme == G_VOID)
1885 PUSHs(&PL_sv_undef);
1887 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1888 if (CxTYPE(cx) == CXt_EVAL) {
1890 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1891 PUSHs(newSVpvn_flags(SvPVX(cx->blk_eval.cur_text),
1892 SvCUR(cx->blk_eval.cur_text)-2,
1893 SvUTF8(cx->blk_eval.cur_text)|SVs_TEMP));
1897 else if (cx->blk_eval.old_namesv) {
1898 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1901 /* eval BLOCK (try blocks have old_namesv == 0) */
1903 PUSHs(&PL_sv_undef);
1904 PUSHs(&PL_sv_undef);
1908 PUSHs(&PL_sv_undef);
1909 PUSHs(&PL_sv_undef);
1911 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1912 && CopSTASH_eq(PL_curcop, PL_debstash))
1914 AV * const ary = cx->blk_sub.argarray;
1915 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1917 Perl_init_dbargs(aTHX);
1919 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1920 av_extend(PL_dbargs, AvFILLp(ary) + off);
1921 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1922 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1924 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1927 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1929 if (old_warnings == pWARN_NONE)
1930 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1931 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1932 mask = &PL_sv_undef ;
1933 else if (old_warnings == pWARN_ALL ||
1934 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1935 /* Get the bit mask for $warnings::Bits{all}, because
1936 * it could have been extended by warnings::register */
1938 HV * const bits = get_hv("warnings::Bits", 0);
1939 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1940 mask = newSVsv(*bits_all);
1943 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1947 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1951 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1952 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1963 if (MAXARG < 1 || (!TOPs && !POPs))
1964 tmps = NULL, len = 0;
1966 tmps = SvPVx_const(POPs, len);
1967 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1972 /* like pp_nextstate, but used instead when the debugger is active */
1977 PL_curcop = (COP*)PL_op;
1978 TAINT_NOT; /* Each statement is presumed innocent */
1979 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1984 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1985 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1989 const I32 gimme = G_ARRAY;
1991 GV * const gv = PL_DBgv;
1994 if (gv && isGV_with_GP(gv))
1997 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1998 DIE(aTHX_ "No DB::DB routine defined");
2000 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2001 /* don't do recursive DB::DB call */
2015 (void)(*CvXSUB(cv))(aTHX_ cv);
2021 PUSHBLOCK(cx, CXt_SUB, SP);
2023 cx->blk_sub.retop = PL_op->op_next;
2025 if (CvDEPTH(cv) >= 2) {
2026 PERL_STACK_OVERFLOW_CHECK();
2027 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2030 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2031 RETURNOP(CvSTART(cv));
2039 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2042 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2044 if (flags & SVs_PADTMP) {
2045 flags &= ~SVs_PADTMP;
2048 if (gimme == G_SCALAR) {
2050 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2051 ? *SP : sv_mortalcopy(*SP);
2053 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2056 *++MARK = &PL_sv_undef;
2060 else if (gimme == G_ARRAY) {
2061 /* in case LEAVE wipes old return values */
2062 while (++MARK <= SP) {
2063 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2066 *++newsp = sv_mortalcopy(*MARK);
2067 TAINT_NOT; /* Each item is independent */
2070 /* When this function was called with MARK == newsp, we reach this
2071 * point with SP == newsp. */
2081 I32 gimme = GIMME_V;
2083 ENTER_with_name("block");
2086 PUSHBLOCK(cx, CXt_BLOCK, SP);
2099 if (PL_op->op_flags & OPf_SPECIAL) {
2100 cx = &cxstack[cxstack_ix];
2101 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2106 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2109 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2110 PL_curpm = newpm; /* Don't pop $1 et al till now */
2112 LEAVE_with_name("block");
2121 const I32 gimme = GIMME_V;
2122 void *itervar; /* location of the iteration variable */
2123 U8 cxtype = CXt_LOOP_FOR;
2125 ENTER_with_name("loop1");
2128 if (PL_op->op_targ) { /* "my" variable */
2129 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2130 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2131 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2132 SVs_PADSTALE, SVs_PADSTALE);
2134 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2136 itervar = PL_comppad;
2138 itervar = &PAD_SVl(PL_op->op_targ);
2141 else { /* symbol table variable */
2142 GV * const gv = MUTABLE_GV(POPs);
2143 SV** svp = &GvSV(gv);
2144 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2146 itervar = (void *)gv;
2149 if (PL_op->op_private & OPpITER_DEF)
2150 cxtype |= CXp_FOR_DEF;
2152 ENTER_with_name("loop2");
2154 PUSHBLOCK(cx, cxtype, SP);
2155 PUSHLOOP_FOR(cx, itervar, MARK);
2156 if (PL_op->op_flags & OPf_STACKED) {
2157 SV *maybe_ary = POPs;
2158 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2160 SV * const right = maybe_ary;
2163 if (RANGE_IS_NUMERIC(sv,right)) {
2164 cx->cx_type &= ~CXTYPEMASK;
2165 cx->cx_type |= CXt_LOOP_LAZYIV;
2166 /* Make sure that no-one re-orders cop.h and breaks our
2168 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2169 #ifdef NV_PRESERVES_UV
2170 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2171 (SvNV_nomg(sv) > (NV)IV_MAX)))
2173 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2174 (SvNV_nomg(right) < (NV)IV_MIN))))
2176 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2178 ((SvNV_nomg(sv) > 0) &&
2179 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2180 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2182 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2184 ((SvNV_nomg(right) > 0) &&
2185 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2186 (SvNV_nomg(right) > (NV)UV_MAX))
2189 DIE(aTHX_ "Range iterator outside integer range");
2190 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2191 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2193 /* for correct -Dstv display */
2194 cx->blk_oldsp = sp - PL_stack_base;
2198 cx->cx_type &= ~CXTYPEMASK;
2199 cx->cx_type |= CXt_LOOP_LAZYSV;
2200 /* Make sure that no-one re-orders cop.h and breaks our
2202 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2203 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2204 cx->blk_loop.state_u.lazysv.end = right;
2205 SvREFCNT_inc(right);
2206 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2207 /* This will do the upgrade to SVt_PV, and warn if the value
2208 is uninitialised. */
2209 (void) SvPV_nolen_const(right);
2210 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2211 to replace !SvOK() with a pointer to "". */
2213 SvREFCNT_dec(right);
2214 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2218 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2219 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2220 SvREFCNT_inc(maybe_ary);
2221 cx->blk_loop.state_u.ary.ix =
2222 (PL_op->op_private & OPpITER_REVERSED) ?
2223 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2227 else { /* iterating over items on the stack */
2228 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2229 if (PL_op->op_private & OPpITER_REVERSED) {
2230 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2233 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2244 const I32 gimme = GIMME_V;
2246 ENTER_with_name("loop1");
2248 ENTER_with_name("loop2");
2250 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2251 PUSHLOOP_PLAIN(cx, SP);
2266 assert(CxTYPE_is_LOOP(cx));
2268 newsp = PL_stack_base + cx->blk_loop.resetsp;
2271 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2274 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2275 PL_curpm = newpm; /* ... and pop $1 et al */
2277 LEAVE_with_name("loop2");
2278 LEAVE_with_name("loop1");
2284 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2285 PERL_CONTEXT *cx, PMOP *newpm)
2287 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2288 if (gimme == G_SCALAR) {
2289 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2291 const char *what = NULL;
2293 assert(MARK+1 == SP);
2294 if ((SvPADTMP(TOPs) ||
2295 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2298 !SvSMAGICAL(TOPs)) {
2300 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2301 : "a readonly value" : "a temporary";
2306 /* sub:lvalue{} will take us here. */
2315 "Can't return %s from lvalue subroutine", what
2320 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2321 if (!SvPADTMP(*SP)) {
2322 *++newsp = SvREFCNT_inc(*SP);
2327 /* FREETMPS could clobber it */
2328 SV *sv = SvREFCNT_inc(*SP);
2330 *++newsp = sv_mortalcopy(sv);
2337 ? sv_mortalcopy(*SP)
2339 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2344 *++newsp = &PL_sv_undef;
2346 if (CxLVAL(cx) & OPpDEREF) {
2349 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2353 else if (gimme == G_ARRAY) {
2354 assert (!(CxLVAL(cx) & OPpDEREF));
2355 if (ref || !CxLVAL(cx))
2356 while (++MARK <= SP)
2358 SvFLAGS(*MARK) & SVs_PADTMP
2359 ? sv_mortalcopy(*MARK)
2362 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2363 else while (++MARK <= SP) {
2364 if (*MARK != &PL_sv_undef
2366 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2371 /* Might be flattened array after $#array = */
2378 /* diag_listed_as: Can't return %s from lvalue subroutine */
2380 "Can't return a %s from lvalue subroutine",
2381 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2387 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2390 PL_stack_sp = newsp;
2397 bool popsub2 = FALSE;
2398 bool clear_errsv = FALSE;
2408 const I32 cxix = dopoptosub(cxstack_ix);
2411 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2412 * sort block, which is a CXt_NULL
2415 PL_stack_base[1] = *PL_stack_sp;
2416 PL_stack_sp = PL_stack_base + 1;
2420 DIE(aTHX_ "Can't return outside a subroutine");
2422 if (cxix < cxstack_ix)
2425 if (CxMULTICALL(&cxstack[cxix])) {
2426 gimme = cxstack[cxix].blk_gimme;
2427 if (gimme == G_VOID)
2428 PL_stack_sp = PL_stack_base;
2429 else if (gimme == G_SCALAR) {
2430 PL_stack_base[1] = *PL_stack_sp;
2431 PL_stack_sp = PL_stack_base + 1;
2437 switch (CxTYPE(cx)) {
2440 lval = !!CvLVALUE(cx->blk_sub.cv);
2441 retop = cx->blk_sub.retop;
2442 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2445 if (!(PL_in_eval & EVAL_KEEPERR))
2448 namesv = cx->blk_eval.old_namesv;
2449 retop = cx->blk_eval.retop;
2452 if (optype == OP_REQUIRE &&
2453 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2455 /* Unassume the success we assumed earlier. */
2456 (void)hv_delete(GvHVn(PL_incgv),
2457 SvPVX_const(namesv),
2458 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2460 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2464 retop = cx->blk_sub.retop;
2468 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2472 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2474 if (gimme == G_SCALAR) {
2477 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2478 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2479 && !SvMAGICAL(TOPs)) {
2480 *++newsp = SvREFCNT_inc(*SP);
2485 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2487 *++newsp = sv_mortalcopy(sv);
2491 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2492 && !SvMAGICAL(*SP)) {
2496 *++newsp = sv_mortalcopy(*SP);
2499 *++newsp = sv_mortalcopy(*SP);
2502 *++newsp = &PL_sv_undef;
2504 else if (gimme == G_ARRAY) {
2505 while (++MARK <= SP) {
2506 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2507 && !SvGMAGICAL(*MARK)
2508 ? *MARK : sv_mortalcopy(*MARK);
2509 TAINT_NOT; /* Each item is independent */
2512 PL_stack_sp = newsp;
2516 /* Stack values are safe: */
2519 POPSUB(cx,sv); /* release CV and @_ ... */
2523 PL_curpm = newpm; /* ... and pop $1 et al */
2532 /* This duplicates parts of pp_leavesub, so that it can share code with
2543 if (CxMULTICALL(&cxstack[cxstack_ix]))
2547 cxstack_ix++; /* temporarily protect top context */
2551 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2554 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2556 PL_curpm = newpm; /* ... and pop $1 et al */
2559 return cx->blk_sub.retop;
2563 S_unwind_loop(pTHX_ const char * const opname)
2567 if (PL_op->op_flags & OPf_SPECIAL) {
2568 cxix = dopoptoloop(cxstack_ix);
2570 /* diag_listed_as: Can't "last" outside a loop block */
2571 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2576 const char * const label =
2577 PL_op->op_flags & OPf_STACKED
2578 ? SvPV(TOPs,label_len)
2579 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2580 const U32 label_flags =
2581 PL_op->op_flags & OPf_STACKED
2583 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2585 cxix = dopoptolabel(label, label_len, label_flags);
2587 /* diag_listed_as: Label not found for "last %s" */
2588 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2590 SVfARG(PL_op->op_flags & OPf_STACKED
2591 && !SvGMAGICAL(TOPp1s)
2593 : newSVpvn_flags(label,
2595 label_flags | SVs_TEMP)));
2597 if (cxix < cxstack_ix)
2615 S_unwind_loop(aTHX_ "last");
2618 cxstack_ix++; /* temporarily protect top context */
2620 switch (CxTYPE(cx)) {
2621 case CXt_LOOP_LAZYIV:
2622 case CXt_LOOP_LAZYSV:
2624 case CXt_LOOP_PLAIN:
2626 newsp = PL_stack_base + cx->blk_loop.resetsp;
2627 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2631 nextop = cx->blk_sub.retop;
2635 nextop = cx->blk_eval.retop;
2639 nextop = cx->blk_sub.retop;
2642 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2646 PL_stack_sp = adjust_stack_on_leave(newsp, PL_stack_sp, MARK, gimme,
2647 pop2 == CXt_SUB ? SVs_TEMP : 0);
2651 /* Stack values are safe: */
2653 case CXt_LOOP_LAZYIV:
2654 case CXt_LOOP_PLAIN:
2655 case CXt_LOOP_LAZYSV:
2657 POPLOOP(cx); /* release loop vars ... */
2661 POPSUB(cx,sv); /* release CV and @_ ... */
2664 PL_curpm = newpm; /* ... and pop $1 et al */
2667 PERL_UNUSED_VAR(optype);
2668 PERL_UNUSED_VAR(gimme);
2676 const I32 inner = PL_scopestack_ix;
2678 S_unwind_loop(aTHX_ "next");
2680 /* clear off anything above the scope we're re-entering, but
2681 * save the rest until after a possible continue block */
2683 if (PL_scopestack_ix < inner)
2684 leave_scope(PL_scopestack[PL_scopestack_ix]);
2685 PL_curcop = cx->blk_oldcop;
2687 return (cx)->blk_loop.my_op->op_nextop;
2693 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2696 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2698 if (redo_op->op_type == OP_ENTER) {
2699 /* pop one less context to avoid $x being freed in while (my $x..) */
2701 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2702 redo_op = redo_op->op_next;
2706 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2707 LEAVE_SCOPE(oldsave);
2709 PL_curcop = cx->blk_oldcop;
2715 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2719 static const char* const too_deep = "Target of goto is too deeply nested";
2721 PERL_ARGS_ASSERT_DOFINDLABEL;
2724 Perl_croak(aTHX_ "%s", too_deep);
2725 if (o->op_type == OP_LEAVE ||
2726 o->op_type == OP_SCOPE ||
2727 o->op_type == OP_LEAVELOOP ||
2728 o->op_type == OP_LEAVESUB ||
2729 o->op_type == OP_LEAVETRY)
2731 *ops++ = cUNOPo->op_first;
2733 Perl_croak(aTHX_ "%s", too_deep);
2736 if (o->op_flags & OPf_KIDS) {
2738 /* First try all the kids at this level, since that's likeliest. */
2739 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2740 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2741 STRLEN kid_label_len;
2742 U32 kid_label_flags;
2743 const char *kid_label = CopLABEL_len_flags(kCOP,
2744 &kid_label_len, &kid_label_flags);
2746 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2749 (const U8*)kid_label, kid_label_len,
2750 (const U8*)label, len) == 0)
2752 (const U8*)label, len,
2753 (const U8*)kid_label, kid_label_len) == 0)
2754 : ( len == kid_label_len && ((kid_label == label)
2755 || memEQ(kid_label, label, len)))))
2759 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2760 if (kid == PL_lastgotoprobe)
2762 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2765 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2766 ops[-1]->op_type == OP_DBSTATE)
2771 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2785 #define GOTO_DEPTH 64
2786 OP *enterops[GOTO_DEPTH];
2787 const char *label = NULL;
2788 STRLEN label_len = 0;
2789 U32 label_flags = 0;
2790 const bool do_dump = (PL_op->op_type == OP_DUMP);
2791 static const char* const must_have_label = "goto must have label";
2793 if (PL_op->op_flags & OPf_STACKED) {
2794 SV * const sv = POPs;
2797 /* This egregious kludge implements goto &subroutine */
2798 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2801 CV *cv = MUTABLE_CV(SvRV(sv));
2802 AV *arg = GvAV(PL_defgv);
2806 if (!CvROOT(cv) && !CvXSUB(cv)) {
2807 const GV * const gv = CvGV(cv);
2811 /* autoloaded stub? */
2812 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2814 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2816 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2817 if (autogv && (cv = GvCV(autogv)))
2819 tmpstr = sv_newmortal();
2820 gv_efullname3(tmpstr, gv, NULL);
2821 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2823 DIE(aTHX_ "Goto undefined subroutine");
2826 /* First do some returnish stuff. */
2827 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2829 cxix = dopoptosub(cxstack_ix);
2830 if (cxix < cxstack_ix) {
2833 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2839 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2840 if (CxTYPE(cx) == CXt_EVAL) {
2843 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2844 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2846 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2847 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2849 else if (CxMULTICALL(cx))
2852 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2854 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2855 AV* av = cx->blk_sub.argarray;
2857 /* abandon the original @_ if it got reified or if it is
2858 the same as the current @_ */
2859 if (AvREAL(av) || av == arg) {
2863 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2865 else CLEAR_ARGARRAY(av);
2867 /* We donate this refcount later to the callee’s pad. */
2868 SvREFCNT_inc_simple_void(arg);
2869 if (CxTYPE(cx) == CXt_SUB &&
2870 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2871 SvREFCNT_dec(cx->blk_sub.cv);
2872 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2873 LEAVE_SCOPE(oldsave);
2875 /* A destructor called during LEAVE_SCOPE could have undefined
2876 * our precious cv. See bug #99850. */
2877 if (!CvROOT(cv) && !CvXSUB(cv)) {
2878 const GV * const gv = CvGV(cv);
2881 SV * const tmpstr = sv_newmortal();
2882 gv_efullname3(tmpstr, gv, NULL);
2883 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2886 DIE(aTHX_ "Goto undefined subroutine");
2889 /* Now do some callish stuff. */
2891 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2893 OP* const retop = cx->blk_sub.retop;
2896 const SSize_t items = AvFILLp(arg) + 1;
2899 PERL_UNUSED_VAR(newsp);
2900 PERL_UNUSED_VAR(gimme);
2902 /* put GvAV(defgv) back onto stack */
2903 EXTEND(SP, items+1); /* @_ could have been extended. */
2904 Copy(AvARRAY(arg), SP + 1, items, SV*);
2909 for (index=0; index<items; index++)
2910 SvREFCNT_inc_void(sv_2mortal(SP[-index]));
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-
2956 SvREFCNT_dec(PAD_SVl(0));
2957 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2959 /* GvAV(PL_defgv) might have been modified on scope
2960 exit, so restore it. */
2961 if (arg != GvAV(PL_defgv)) {
2962 AV * const av = GvAV(PL_defgv);
2963 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2967 else SvREFCNT_dec(arg);
2968 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2969 Perl_get_db_sub(aTHX_ NULL, cv);
2971 CV * const gotocv = get_cvs("DB::goto", 0);
2973 PUSHMARK( PL_stack_sp );
2974 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2980 RETURNOP(CvSTART(cv));
2984 label = SvPV_nomg_const(sv, label_len);
2985 label_flags = SvUTF8(sv);
2988 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2989 label = cPVOP->op_pv;
2990 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2991 label_len = strlen(label);
2993 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2998 OP *gotoprobe = NULL;
2999 bool leaving_eval = FALSE;
3000 bool in_block = FALSE;
3001 PERL_CONTEXT *last_eval_cx = NULL;
3005 PL_lastgotoprobe = NULL;
3007 for (ix = cxstack_ix; ix >= 0; ix--) {
3009 switch (CxTYPE(cx)) {
3011 leaving_eval = TRUE;
3012 if (!CxTRYBLOCK(cx)) {
3013 gotoprobe = (last_eval_cx ?
3014 last_eval_cx->blk_eval.old_eval_root :
3019 /* else fall through */
3020 case CXt_LOOP_LAZYIV:
3021 case CXt_LOOP_LAZYSV:
3023 case CXt_LOOP_PLAIN:
3026 gotoprobe = cx->blk_oldcop->op_sibling;
3032 gotoprobe = cx->blk_oldcop->op_sibling;
3035 gotoprobe = PL_main_root;
3038 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3039 gotoprobe = CvROOT(cx->blk_sub.cv);
3045 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3048 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3049 CxTYPE(cx), (long) ix);
3050 gotoprobe = PL_main_root;
3054 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3055 enterops, enterops + GOTO_DEPTH);
3058 if (gotoprobe->op_sibling &&
3059 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3060 gotoprobe->op_sibling->op_sibling) {
3061 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3062 label, label_len, label_flags, enterops,
3063 enterops + GOTO_DEPTH);
3068 PL_lastgotoprobe = gotoprobe;
3071 DIE(aTHX_ "Can't find label %"UTF8f,
3072 UTF8fARG(label_flags, label_len, label));
3074 /* if we're leaving an eval, check before we pop any frames
3075 that we're not going to punt, otherwise the error
3078 if (leaving_eval && *enterops && enterops[1]) {
3080 for (i = 1; enterops[i]; i++)
3081 if (enterops[i]->op_type == OP_ENTERITER)
3082 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3085 if (*enterops && enterops[1]) {
3086 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3088 deprecate("\"goto\" to jump into a construct");
3091 /* pop unwanted frames */
3093 if (ix < cxstack_ix) {
3100 oldsave = PL_scopestack[PL_scopestack_ix];
3101 LEAVE_SCOPE(oldsave);
3104 /* push wanted frames */
3106 if (*enterops && enterops[1]) {
3107 OP * const oldop = PL_op;
3108 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3109 for (; enterops[ix]; ix++) {
3110 PL_op = enterops[ix];
3111 /* Eventually we may want to stack the needed arguments
3112 * for each op. For now, we punt on the hard ones. */
3113 if (PL_op->op_type == OP_ENTERITER)
3114 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3115 PL_op->op_ppaddr(aTHX);
3123 if (!retop) retop = PL_main_start;
3125 PL_restartop = retop;
3126 PL_do_undump = TRUE;
3130 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3131 PL_do_undump = FALSE;
3147 anum = 0; (void)POPs;
3152 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3154 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3157 PL_exit_flags |= PERL_EXIT_EXPECTED;
3159 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3160 if (anum || !(PL_minus_c && PL_madskills))
3165 PUSHs(&PL_sv_undef);
3172 S_save_lines(pTHX_ AV *array, SV *sv)
3174 const char *s = SvPVX_const(sv);
3175 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3178 PERL_ARGS_ASSERT_SAVE_LINES;
3180 while (s && s < send) {
3182 SV * const tmpstr = newSV_type(SVt_PVMG);
3184 t = (const char *)memchr(s, '\n', send - s);
3190 sv_setpvn(tmpstr, s, t - s);
3191 av_store(array, line++, tmpstr);
3199 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3201 0 is used as continue inside eval,
3203 3 is used for a die caught by an inner eval - continue inner loop
3205 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3206 establish a local jmpenv to handle exception traps.
3211 S_docatch(pTHX_ OP *o)
3215 OP * const oldop = PL_op;
3219 assert(CATCH_GET == TRUE);
3226 assert(cxstack_ix >= 0);
3227 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3228 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3233 /* die caught by an inner eval - continue inner loop */
3234 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3235 PL_restartjmpenv = NULL;
3236 PL_op = PL_restartop;
3245 assert(0); /* NOTREACHED */
3254 =for apidoc find_runcv
3256 Locate the CV corresponding to the currently executing sub or eval.
3257 If db_seqp is non_null, skip CVs that are in the DB package and populate
3258 *db_seqp with the cop sequence number at the point that the DB:: code was
3259 entered. (allows debuggers to eval in the scope of the breakpoint rather
3260 than in the scope of the debugger itself).
3266 Perl_find_runcv(pTHX_ U32 *db_seqp)
3268 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3271 /* If this becomes part of the API, it might need a better name. */
3273 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3281 PL_curcop == &PL_compiling
3283 : PL_curcop->cop_seq;
3285 for (si = PL_curstackinfo; si; si = si->si_prev) {
3287 for (ix = si->si_cxix; ix >= 0; ix--) {
3288 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3290 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3291 cv = cx->blk_sub.cv;
3292 /* skip DB:: code */
3293 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3294 *db_seqp = cx->blk_oldcop->cop_seq;
3297 if (cx->cx_type & CXp_SUB_RE)
3300 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3301 cv = cx->blk_eval.cv;
3304 case FIND_RUNCV_padid_eq:
3306 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3309 case FIND_RUNCV_level_eq:
3310 if (level++ != arg) continue;
3318 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3322 /* Run yyparse() in a setjmp wrapper. Returns:
3323 * 0: yyparse() successful
3324 * 1: yyparse() failed
3328 S_try_yyparse(pTHX_ int gramtype)
3333 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3337 ret = yyparse(gramtype) ? 1 : 0;
3344 assert(0); /* NOTREACHED */
3351 /* Compile a require/do or an eval ''.
3353 * outside is the lexically enclosing CV (if any) that invoked us.
3354 * seq is the current COP scope value.
3355 * hh is the saved hints hash, if any.
3357 * Returns a bool indicating whether the compile was successful; if so,
3358 * PL_eval_start contains the first op of the compiled code; otherwise,
3361 * This function is called from two places: pp_require and pp_entereval.
3362 * These can be distinguished by whether PL_op is entereval.
3366 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3369 OP * const saveop = PL_op;
3370 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3371 COP * const oldcurcop = PL_curcop;
3372 bool in_require = (saveop->op_type == OP_REQUIRE);
3376 PL_in_eval = (in_require
3377 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3379 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3380 ? EVAL_RE_REPARSING : 0)));
3384 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3386 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3387 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3388 cxstack[cxstack_ix].blk_gimme = gimme;
3390 CvOUTSIDE_SEQ(evalcv) = seq;
3391 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3393 /* set up a scratch pad */
3395 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3396 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3400 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3402 /* make sure we compile in the right package */
3404 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3405 SAVEGENERICSV(PL_curstash);
3406 PL_curstash = (HV *)CopSTASH(PL_curcop);
3407 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3408 else SvREFCNT_inc_simple_void(PL_curstash);
3410 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3411 SAVESPTR(PL_beginav);
3412 PL_beginav = newAV();
3413 SAVEFREESV(PL_beginav);
3414 SAVESPTR(PL_unitcheckav);
3415 PL_unitcheckav = newAV();
3416 SAVEFREESV(PL_unitcheckav);
3419 SAVEBOOL(PL_madskills);
3423 ENTER_with_name("evalcomp");
3424 SAVESPTR(PL_compcv);
3427 /* try to compile it */
3429 PL_eval_root = NULL;
3430 PL_curcop = &PL_compiling;
3431 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3432 PL_in_eval |= EVAL_KEEPERR;
3439 hv_clear(GvHV(PL_hintgv));
3442 PL_hints = saveop->op_private & OPpEVAL_COPHH
3443 ? oldcurcop->cop_hints : saveop->op_targ;
3445 /* making 'use re eval' not be in scope when compiling the
3446 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3447 * infinite recursion when S_has_runtime_code() gives a false
3448 * positive: the second time round, HINT_RE_EVAL isn't set so we
3449 * don't bother calling S_has_runtime_code() */
3450 if (PL_in_eval & EVAL_RE_REPARSING)
3451 PL_hints &= ~HINT_RE_EVAL;
3454 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3455 SvREFCNT_dec(GvHV(PL_hintgv));
3456 GvHV(PL_hintgv) = hh;
3459 SAVECOMPILEWARNINGS();
3461 if (PL_dowarn & G_WARN_ALL_ON)
3462 PL_compiling.cop_warnings = pWARN_ALL ;
3463 else if (PL_dowarn & G_WARN_ALL_OFF)
3464 PL_compiling.cop_warnings = pWARN_NONE ;
3466 PL_compiling.cop_warnings = pWARN_STD ;
3469 PL_compiling.cop_warnings =
3470 DUP_WARNINGS(oldcurcop->cop_warnings);
3471 cophh_free(CopHINTHASH_get(&PL_compiling));
3472 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3473 /* The label, if present, is the first entry on the chain. So rather
3474 than writing a blank label in front of it (which involves an
3475 allocation), just use the next entry in the chain. */
3476 PL_compiling.cop_hints_hash
3477 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3478 /* Check the assumption that this removed the label. */
3479 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3482 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3485 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3487 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3488 * so honour CATCH_GET and trap it here if necessary */
3490 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3492 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3493 SV **newsp; /* Used by POPBLOCK. */
3495 I32 optype; /* Used by POPEVAL. */
3501 PERL_UNUSED_VAR(newsp);
3502 PERL_UNUSED_VAR(optype);
3504 /* note that if yystatus == 3, then the EVAL CX block has already
3505 * been popped, and various vars restored */
3507 if (yystatus != 3) {
3509 op_free(PL_eval_root);
3510 PL_eval_root = NULL;
3512 SP = PL_stack_base + POPMARK; /* pop original mark */
3513 POPBLOCK(cx,PL_curpm);
3515 namesv = cx->blk_eval.old_namesv;
3516 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3517 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3523 /* If cx is still NULL, it means that we didn't go in the
3524 * POPEVAL branch. */
3525 cx = &cxstack[cxstack_ix];
3526 assert(CxTYPE(cx) == CXt_EVAL);
3527 namesv = cx->blk_eval.old_namesv;
3529 (void)hv_store(GvHVn(PL_incgv),
3530 SvPVX_const(namesv),
3531 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3533 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3536 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3539 if (!*(SvPV_nolen_const(errsv))) {
3540 sv_setpvs(errsv, "Compilation error");
3543 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3548 LEAVE_with_name("evalcomp");
3550 CopLINE_set(&PL_compiling, 0);
3551 SAVEFREEOP(PL_eval_root);
3552 cv_forget_slab(evalcv);
3554 DEBUG_x(dump_eval());
3556 /* Register with debugger: */
3557 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3558 CV * const cv = get_cvs("DB::postponed", 0);
3562 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3564 call_sv(MUTABLE_SV(cv), G_DISCARD);
3568 if (PL_unitcheckav) {
3569 OP *es = PL_eval_start;
3570 call_list(PL_scopestack_ix, PL_unitcheckav);
3574 /* compiled okay, so do it */
3576 CvDEPTH(evalcv) = 1;
3577 SP = PL_stack_base + POPMARK; /* pop original mark */
3578 PL_op = saveop; /* The caller may need it. */
3579 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3586 S_check_type_and_open(pTHX_ SV *name)
3589 const char *p = SvPV_nolen_const(name);
3592 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3594 /* checking here captures a reasonable error message when
3595 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3596 * user gets a confusing message about looking for the .pmc file
3597 * rather than for the .pm file.
3598 * This check prevents a \0 in @INC causing problems.
3600 if (!IS_SAFE_PATHNAME(name, "require"))
3603 st_rc = PerlLIO_stat(p, &st);
3605 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3609 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3610 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3612 return PerlIO_open(p, PERL_SCRIPT_MODE);
3616 #ifndef PERL_DISABLE_PMC
3618 S_doopen_pm(pTHX_ SV *name)
3621 const char *p = SvPV_const(name, namelen);
3623 PERL_ARGS_ASSERT_DOOPEN_PM;
3625 /* check the name before trying for the .pmc name to avoid the
3626 * warning referring to the .pmc which the user probably doesn't
3627 * know or care about
3629 if (!IS_SAFE_PATHNAME(name, "require"))
3632 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3633 SV *const pmcsv = sv_newmortal();
3636 SvSetSV_nosteal(pmcsv,name);
3637 sv_catpvn(pmcsv, "c", 1);
3639 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3640 return check_type_and_open(pmcsv);
3642 return check_type_and_open(name);
3645 # define doopen_pm(name) check_type_and_open(name)
3646 #endif /* !PERL_DISABLE_PMC */
3648 /* require doesn't search for absolute names, or when the name is
3649 explicity relative the current directory */
3650 PERL_STATIC_INLINE bool
3651 S_path_is_searchable(const char *name)
3653 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3655 if (PERL_FILE_IS_ABSOLUTE(name)
3657 || (*name == '.' && ((name[1] == '/' ||
3658 (name[1] == '.' && name[2] == '/'))
3659 || (name[1] == '\\' ||
3660 ( name[1] == '.' && name[2] == '\\')))
3663 || (*name == '.' && (name[1] == '/' ||
3664 (name[1] == '.' && name[2] == '/')))
3684 int vms_unixname = 0;
3689 const char *tryname = NULL;
3691 const I32 gimme = GIMME_V;
3692 int filter_has_file = 0;
3693 PerlIO *tryrsfp = NULL;
3694 SV *filter_cache = NULL;
3695 SV *filter_state = NULL;
3696 SV *filter_sub = NULL;
3701 bool path_searchable;
3704 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3705 sv = sv_2mortal(new_version(sv));
3706 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3707 upg_version(PL_patchlevel, TRUE);
3708 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3709 if ( vcmp(sv,PL_patchlevel) <= 0 )
3710 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3711 SVfARG(sv_2mortal(vnormal(sv))),
3712 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3716 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3719 SV * const req = SvRV(sv);
3720 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3722 /* get the left hand term */
3723 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3725 first = SvIV(*av_fetch(lav,0,0));
3726 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3727 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3728 || av_len(lav) > 1 /* FP with > 3 digits */
3729 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3731 DIE(aTHX_ "Perl %"SVf" required--this is only "
3733 SVfARG(sv_2mortal(vnormal(req))),
3734 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3737 else { /* probably 'use 5.10' or 'use 5.8' */
3742 second = SvIV(*av_fetch(lav,1,0));
3744 second /= second >= 600 ? 100 : 10;
3745 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3746 (int)first, (int)second);
3747 upg_version(hintsv, TRUE);
3749 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3750 "--this is only %"SVf", stopped",
3751 SVfARG(sv_2mortal(vnormal(req))),
3752 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3753 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3761 name = SvPV_const(sv, len);
3762 if (!(name && len > 0 && *name))
3763 DIE(aTHX_ "Null filename used");
3764 if (!IS_SAFE_PATHNAME(sv, "require")) {
3765 DIE(aTHX_ "Can't locate %s: %s",
3766 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3767 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3770 TAINT_PROPER("require");
3772 path_searchable = path_is_searchable(name);
3775 /* The key in the %ENV hash is in the syntax of file passed as the argument
3776 * usually this is in UNIX format, but sometimes in VMS format, which
3777 * can result in a module being pulled in more than once.
3778 * To prevent this, the key must be stored in UNIX format if the VMS
3779 * name can be translated to UNIX.
3782 if ((unixnamebuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1))))
3783 && (unixname = tounixspec(name, unixnamebuf)) != NULL) {
3784 unixlen = strlen(unixname);
3790 /* if not VMS or VMS name can not be translated to UNIX, pass it
3793 unixname = (char *) name;
3796 if (PL_op->op_type == OP_REQUIRE) {
3797 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3798 unixname, unixlen, 0);
3800 if (*svp != &PL_sv_undef)
3803 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3804 "Compilation failed in require", unixname);
3808 LOADING_FILE_PROBE(unixname);
3810 /* prepare to compile file */
3812 if (!path_searchable) {
3813 /* At this point, name is SvPVX(sv) */
3815 tryrsfp = doopen_pm(sv);
3817 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3818 AV * const ar = GvAVn(PL_incgv);
3824 namesv = newSV_type(SVt_PV);
3825 for (i = 0; i <= AvFILL(ar); i++) {
3826 SV * const dirsv = *av_fetch(ar, i, TRUE);
3828 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3835 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3836 && !sv_isobject(loader))
3838 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3841 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3842 PTR2UV(SvRV(dirsv)), name);
3843 tryname = SvPVX_const(namesv);
3846 ENTER_with_name("call_INC");
3854 if (sv_isobject(loader))
3855 count = call_method("INC", G_ARRAY);
3857 count = call_sv(loader, G_ARRAY);
3867 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3868 && !isGV_with_GP(SvRV(arg))) {
3869 filter_cache = SvRV(arg);
3876 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3880 if (isGV_with_GP(arg)) {
3881 IO * const io = GvIO((const GV *)arg);
3886 tryrsfp = IoIFP(io);
3887 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3888 PerlIO_close(IoOFP(io));
3899 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3901 SvREFCNT_inc_simple_void_NN(filter_sub);
3904 filter_state = SP[i];
3905 SvREFCNT_inc_simple_void(filter_state);
3909 if (!tryrsfp && (filter_cache || filter_sub)) {
3910 tryrsfp = PerlIO_open(BIT_BUCKET,
3918 LEAVE_with_name("call_INC");
3920 /* Adjust file name if the hook has set an %INC entry.
3921 This needs to happen after the FREETMPS above. */
3922 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3924 tryname = SvPV_nolen_const(*svp);
3931 filter_has_file = 0;
3932 filter_cache = NULL;
3934 SvREFCNT_dec(filter_state);
3935 filter_state = NULL;
3938 SvREFCNT_dec(filter_sub);
3943 if (path_searchable) {
3948 dir = SvPV_const(dirsv, dirlen);
3955 if (((unixdirbuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))) == NULL)
3956 || ((unixdir = tounixpath(dir, unixdirbuf)) == NULL))
3958 sv_setpv(namesv, unixdir);
3959 sv_catpv(namesv, unixname);
3961 # ifdef __SYMBIAN32__
3962 if (PL_origfilename[0] &&
3963 PL_origfilename[1] == ':' &&
3964 !(dir[0] && dir[1] == ':'))
3965 Perl_sv_setpvf(aTHX_ namesv,
3970 Perl_sv_setpvf(aTHX_ namesv,
3974 /* The equivalent of
3975 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3976 but without the need to parse the format string, or
3977 call strlen on either pointer, and with the correct
3978 allocation up front. */
3980 char *tmp = SvGROW(namesv, dirlen + len + 2);
3982 memcpy(tmp, dir, dirlen);
3985 /* Avoid '<dir>//<file>' */
3986 if (!dirlen || *(tmp-1) != '/') {
3990 /* name came from an SV, so it will have a '\0' at the
3991 end that we can copy as part of this memcpy(). */
3992 memcpy(tmp, name, len + 1);
3994 SvCUR_set(namesv, dirlen + len + 1);
3999 TAINT_PROPER("require");
4000 tryname = SvPVX_const(namesv);
4001 tryrsfp = doopen_pm(namesv);
4003 if (tryname[0] == '.' && tryname[1] == '/') {
4005 while (*++tryname == '/') {}
4009 else if (errno == EMFILE || errno == EACCES) {
4010 /* no point in trying other paths if out of handles;
4011 * on the other hand, if we couldn't open one of the
4012 * files, then going on with the search could lead to
4013 * unexpected results; see perl #113422
4022 saved_errno = errno; /* sv_2mortal can realloc things */
4025 if (PL_op->op_type == OP_REQUIRE) {
4026 if(saved_errno == EMFILE || saved_errno == EACCES) {
4027 /* diag_listed_as: Can't locate %s */
4028 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4030 if (namesv) { /* did we lookup @INC? */
4031 AV * const ar = GvAVn(PL_incgv);
4033 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4034 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4035 for (i = 0; i <= AvFILL(ar); i++) {
4036 sv_catpvs(inc, " ");
4037 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4039 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4040 const char *c, *e = name + len - 3;
4041 sv_catpv(msg, " (you may need to install the ");
4042 for (c = name; c < e; c++) {
4044 sv_catpvn(msg, "::", 2);
4047 sv_catpvn(msg, c, 1);
4050 sv_catpv(msg, " module)");
4052 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4053 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4055 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4056 sv_catpv(msg, " (did you run h2ph?)");
4059 /* diag_listed_as: Can't locate %s */
4061 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4065 DIE(aTHX_ "Can't locate %s", name);
4072 SETERRNO(0, SS_NORMAL);
4074 /* Assume success here to prevent recursive requirement. */
4075 /* name is never assigned to again, so len is still strlen(name) */
4076 /* Check whether a hook in @INC has already filled %INC */
4078 (void)hv_store(GvHVn(PL_incgv),
4079 unixname, unixlen, newSVpv(tryname,0),0);
4081 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4083 (void)hv_store(GvHVn(PL_incgv),
4084 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4087 ENTER_with_name("eval");
4089 SAVECOPFILE_FREE(&PL_compiling);
4090 CopFILE_set(&PL_compiling, tryname);
4091 lex_start(NULL, tryrsfp, 0);
4093 if (filter_sub || filter_cache) {
4094 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4095 than hanging another SV from it. In turn, filter_add() optionally
4096 takes the SV to use as the filter (or creates a new SV if passed
4097 NULL), so simply pass in whatever value filter_cache has. */
4098 SV * const fc = filter_cache ? newSV(0) : NULL;
4100 if (fc) sv_copypv(fc, filter_cache);
4101 datasv = filter_add(S_run_user_filter, fc);
4102 IoLINES(datasv) = filter_has_file;
4103 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4104 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4107 /* switch to eval mode */
4108 PUSHBLOCK(cx, CXt_EVAL, SP);
4110 cx->blk_eval.retop = PL_op->op_next;
4112 SAVECOPLINE(&PL_compiling);
4113 CopLINE_set(&PL_compiling, 0);
4117 /* Store and reset encoding. */
4118 encoding = PL_encoding;
4121 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4122 op = DOCATCH(PL_eval_start);
4124 op = PL_op->op_next;
4126 /* Restore encoding. */
4127 PL_encoding = encoding;
4129 LOADED_FILE_PROBE(unixname);
4134 /* This is a op added to hold the hints hash for
4135 pp_entereval. The hash can be modified by the code
4136 being eval'ed, so we return a copy instead. */
4142 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4152 const I32 gimme = GIMME_V;
4153 const U32 was = PL_breakable_sub_gen;
4154 char tbuf[TYPE_DIGITS(long) + 12];
4155 bool saved_delete = FALSE;
4156 char *tmpbuf = tbuf;
4159 U32 seq, lex_flags = 0;
4160 HV *saved_hh = NULL;
4161 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4163 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4164 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4166 else if (PL_hints & HINT_LOCALIZE_HH || (
4167 PL_op->op_private & OPpEVAL_COPHH
4168 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4170 saved_hh = cop_hints_2hv(PL_curcop, 0);
4171 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4175 /* make sure we've got a plain PV (no overload etc) before testing
4176 * for taint. Making a copy here is probably overkill, but better
4177 * safe than sorry */
4179 const char * const p = SvPV_const(sv, len);
4181 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4182 lex_flags |= LEX_START_COPIED;
4184 if (bytes && SvUTF8(sv))
4185 SvPVbyte_force(sv, len);
4187 else if (bytes && SvUTF8(sv)) {
4188 /* Don't modify someone else's scalar */
4191 (void)sv_2mortal(sv);
4192 SvPVbyte_force(sv,len);
4193 lex_flags |= LEX_START_COPIED;
4196 TAINT_IF(SvTAINTED(sv));
4197 TAINT_PROPER("eval");
4199 ENTER_with_name("eval");
4200 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4201 ? LEX_IGNORE_UTF8_HINTS
4202 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4207 /* switch to eval mode */
4209 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4210 SV * const temp_sv = sv_newmortal();
4211 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4212 (unsigned long)++PL_evalseq,
4213 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4214 tmpbuf = SvPVX(temp_sv);
4215 len = SvCUR(temp_sv);
4218 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4219 SAVECOPFILE_FREE(&PL_compiling);
4220 CopFILE_set(&PL_compiling, tmpbuf+2);
4221 SAVECOPLINE(&PL_compiling);
4222 CopLINE_set(&PL_compiling, 1);
4223 /* special case: an eval '' executed within the DB package gets lexically
4224 * placed in the first non-DB CV rather than the current CV - this
4225 * allows the debugger to execute code, find lexicals etc, in the
4226 * scope of the code being debugged. Passing &seq gets find_runcv
4227 * to do the dirty work for us */
4228 runcv = find_runcv(&seq);
4230 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4232 cx->blk_eval.retop = PL_op->op_next;
4234 /* prepare to compile string */
4236 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4237 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4239 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4240 deleting the eval's FILEGV from the stash before gv_check() runs
4241 (i.e. before run-time proper). To work around the coredump that
4242 ensues, we always turn GvMULTI_on for any globals that were
4243 introduced within evals. See force_ident(). GSAR 96-10-12 */
4244 char *const safestr = savepvn(tmpbuf, len);
4245 SAVEDELETE(PL_defstash, safestr, len);
4246 saved_delete = TRUE;
4251 if (doeval(gimme, runcv, seq, saved_hh)) {
4252 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4253 ? (PERLDB_LINE || PERLDB_SAVESRC)
4254 : PERLDB_SAVESRC_NOSUBS) {
4255 /* Retain the filegv we created. */
4256 } else if (!saved_delete) {
4257 char *const safestr = savepvn(tmpbuf, len);
4258 SAVEDELETE(PL_defstash, safestr, len);
4260 return DOCATCH(PL_eval_start);
4262 /* We have already left the scope set up earlier thanks to the LEAVE
4264 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4265 ? (PERLDB_LINE || PERLDB_SAVESRC)
4266 : PERLDB_SAVESRC_INVALID) {
4267 /* Retain the filegv we created. */
4268 } else if (!saved_delete) {
4269 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4271 return PL_op->op_next;
4283 const U8 save_flags = PL_op -> op_flags;
4291 namesv = cx->blk_eval.old_namesv;
4292 retop = cx->blk_eval.retop;
4293 evalcv = cx->blk_eval.cv;
4296 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4298 PL_curpm = newpm; /* Don't pop $1 et al till now */
4301 assert(CvDEPTH(evalcv) == 1);
4303 CvDEPTH(evalcv) = 0;
4305 if (optype == OP_REQUIRE &&
4306 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4308 /* Unassume the success we assumed earlier. */
4309 (void)hv_delete(GvHVn(PL_incgv),
4310 SvPVX_const(namesv),
4311 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4313 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4315 /* die_unwind() did LEAVE, or we won't be here */
4318 LEAVE_with_name("eval");
4319 if (!(save_flags & OPf_SPECIAL)) {
4327 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4328 close to the related Perl_create_eval_scope. */
4330 Perl_delete_eval_scope(pTHX)
4341 LEAVE_with_name("eval_scope");
4342 PERL_UNUSED_VAR(newsp);
4343 PERL_UNUSED_VAR(gimme);
4344 PERL_UNUSED_VAR(optype);
4347 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4348 also needed by Perl_fold_constants. */
4350 Perl_create_eval_scope(pTHX_ U32 flags)
4353 const I32 gimme = GIMME_V;
4355 ENTER_with_name("eval_scope");
4358 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4361 PL_in_eval = EVAL_INEVAL;
4362 if (flags & G_KEEPERR)
4363 PL_in_eval |= EVAL_KEEPERR;
4366 if (flags & G_FAKINGEVAL) {
4367 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4375 PERL_CONTEXT * const cx = create_eval_scope(0);
4376 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4377 return DOCATCH(PL_op->op_next);
4392 PERL_UNUSED_VAR(optype);
4395 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4396 PL_curpm = newpm; /* Don't pop $1 et al till now */
4398 LEAVE_with_name("eval_scope");
4407 const I32 gimme = GIMME_V;
4409 ENTER_with_name("given");
4412 if (PL_op->op_targ) {
4413 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4414 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4415 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4422 PUSHBLOCK(cx, CXt_GIVEN, SP);
4435 PERL_UNUSED_CONTEXT;
4438 assert(CxTYPE(cx) == CXt_GIVEN);
4441 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4442 PL_curpm = newpm; /* Don't pop $1 et al till now */
4444 LEAVE_with_name("given");
4448 /* Helper routines used by pp_smartmatch */
4450 S_make_matcher(pTHX_ REGEXP *re)
4453 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4455 PERL_ARGS_ASSERT_MAKE_MATCHER;
4457 PM_SETRE(matcher, ReREFCNT_inc(re));
4459 SAVEFREEOP((OP *) matcher);
4460 ENTER_with_name("matcher"); SAVETMPS;
4466 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4471 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4473 PL_op = (OP *) matcher;
4476 (void) Perl_pp_match(aTHX);
4478 return (SvTRUEx(POPs));
4482 S_destroy_matcher(pTHX_ PMOP *matcher)
4486 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4487 PERL_UNUSED_ARG(matcher);
4490 LEAVE_with_name("matcher");
4493 /* Do a smart match */
4496 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4497 return do_smartmatch(NULL, NULL, 0);
4500 /* This version of do_smartmatch() implements the
4501 * table of smart matches that is found in perlsyn.
4504 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4509 bool object_on_left = FALSE;
4510 SV *e = TOPs; /* e is for 'expression' */
4511 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4513 /* Take care only to invoke mg_get() once for each argument.
4514 * Currently we do this by copying the SV if it's magical. */
4516 if (!copied && SvGMAGICAL(d))
4517 d = sv_mortalcopy(d);
4524 e = sv_mortalcopy(e);
4526 /* First of all, handle overload magic of the rightmost argument */
4529 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4530 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4532 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4539 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4542 SP -= 2; /* Pop the values */
4547 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4554 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4555 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4556 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4558 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4559 object_on_left = TRUE;
4562 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4564 if (object_on_left) {
4565 goto sm_any_sub; /* Treat objects like scalars */
4567 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4568 /* Test sub truth for each key */
4570 bool andedresults = TRUE;
4571 HV *hv = (HV*) SvRV(d);
4572 I32 numkeys = hv_iterinit(hv);
4573 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4576 while ( (he = hv_iternext(hv)) ) {
4577 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4578 ENTER_with_name("smartmatch_hash_key_test");
4581 PUSHs(hv_iterkeysv(he));
4583 c = call_sv(e, G_SCALAR);
4586 andedresults = FALSE;
4588 andedresults = SvTRUEx(POPs) && andedresults;
4590 LEAVE_with_name("smartmatch_hash_key_test");
4597 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4598 /* Test sub truth for each element */
4600 bool andedresults = TRUE;
4601 AV *av = (AV*) SvRV(d);
4602 const I32 len = av_len(av);
4603 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4606 for (i = 0; i <= len; ++i) {
4607 SV * const * const svp = av_fetch(av, i, FALSE);
4608 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4609 ENTER_with_name("smartmatch_array_elem_test");
4615 c = call_sv(e, G_SCALAR);
4618 andedresults = FALSE;
4620 andedresults = SvTRUEx(POPs) && andedresults;
4622 LEAVE_with_name("smartmatch_array_elem_test");
4631 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4632 ENTER_with_name("smartmatch_coderef");
4637 c = call_sv(e, G_SCALAR);
4641 else if (SvTEMP(TOPs))
4642 SvREFCNT_inc_void(TOPs);
4644 LEAVE_with_name("smartmatch_coderef");
4649 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4650 if (object_on_left) {
4651 goto sm_any_hash; /* Treat objects like scalars */
4653 else if (!SvOK(d)) {
4654 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4657 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4658 /* Check that the key-sets are identical */
4660 HV *other_hv = MUTABLE_HV(SvRV(d));
4662 bool other_tied = FALSE;
4663 U32 this_key_count = 0,
4664 other_key_count = 0;
4665 HV *hv = MUTABLE_HV(SvRV(e));
4667 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4668 /* Tied hashes don't know how many keys they have. */
4669 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4672 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4673 HV * const temp = other_hv;
4678 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4681 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4684 /* The hashes have the same number of keys, so it suffices
4685 to check that one is a subset of the other. */
4686 (void) hv_iterinit(hv);
4687 while ( (he = hv_iternext(hv)) ) {
4688 SV *key = hv_iterkeysv(he);
4690 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4693 if(!hv_exists_ent(other_hv, key, 0)) {
4694 (void) hv_iterinit(hv); /* reset iterator */
4700 (void) hv_iterinit(other_hv);
4701 while ( hv_iternext(other_hv) )
4705 other_key_count = HvUSEDKEYS(other_hv);
4707 if (this_key_count != other_key_count)
4712 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4713 AV * const other_av = MUTABLE_AV(SvRV(d));
4714 const SSize_t other_len = av_len(other_av) + 1;
4716 HV *hv = MUTABLE_HV(SvRV(e));
4718 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4719 for (i = 0; i < other_len; ++i) {
4720 SV ** const svp = av_fetch(other_av, i, FALSE);
4721 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4722 if (svp) { /* ??? When can this not happen? */
4723 if (hv_exists_ent(hv, *svp, 0))
4729 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4730 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4733 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4735 HV *hv = MUTABLE_HV(SvRV(e));
4737 (void) hv_iterinit(hv);
4738 while ( (he = hv_iternext(hv)) ) {
4739 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4740 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4741 (void) hv_iterinit(hv);
4742 destroy_matcher(matcher);
4746 destroy_matcher(matcher);
4752 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4753 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4760 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4761 if (object_on_left) {
4762 goto sm_any_array; /* Treat objects like scalars */
4764 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4765 AV * const other_av = MUTABLE_AV(SvRV(e));
4766 const SSize_t other_len = av_len(other_av) + 1;
4769 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4770 for (i = 0; i < other_len; ++i) {
4771 SV ** const svp = av_fetch(other_av, i, FALSE);
4773 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4774 if (svp) { /* ??? When can this not happen? */
4775 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4781 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4782 AV *other_av = MUTABLE_AV(SvRV(d));
4783 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4784 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4788 const SSize_t other_len = av_len(other_av);
4790 if (NULL == seen_this) {
4791 seen_this = newHV();
4792 (void) sv_2mortal(MUTABLE_SV(seen_this));
4794 if (NULL == seen_other) {
4795 seen_other = newHV();
4796 (void) sv_2mortal(MUTABLE_SV(seen_other));
4798 for(i = 0; i <= other_len; ++i) {
4799 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4800 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4802 if (!this_elem || !other_elem) {
4803 if ((this_elem && SvOK(*this_elem))
4804 || (other_elem && SvOK(*other_elem)))
4807 else if (hv_exists_ent(seen_this,
4808 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4809 hv_exists_ent(seen_other,
4810 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4812 if (*this_elem != *other_elem)
4816 (void)hv_store_ent(seen_this,
4817 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4819 (void)hv_store_ent(seen_other,
4820 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4826 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4827 (void) do_smartmatch(seen_this, seen_other, 0);
4829 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4838 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4839 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4842 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4843 const SSize_t this_len = av_len(MUTABLE_AV(SvRV(e)));
4846 for(i = 0; i <= this_len; ++i) {
4847 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4848 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4849 if (svp && matcher_matches_sv(matcher, *svp)) {
4850 destroy_matcher(matcher);
4854 destroy_matcher(matcher);
4858 else if (!SvOK(d)) {
4859 /* undef ~~ array */
4860 const SSize_t this_len = av_len(MUTABLE_AV(SvRV(e)));
4863 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4864 for (i = 0; i <= this_len; ++i) {
4865 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4866 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4867 if (!svp || !SvOK(*svp))
4876 const SSize_t this_len = av_len(MUTABLE_AV(SvRV(e)));
4878 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4879 for (i = 0; i <= this_len; ++i) {
4880 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4887 /* infinite recursion isn't supposed to happen here */
4888 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4889 (void) do_smartmatch(NULL, NULL, 1);
4891 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4900 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4901 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4902 SV *t = d; d = e; e = t;
4903 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4906 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4907 SV *t = d; d = e; e = t;
4908 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4909 goto sm_regex_array;
4912 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4914 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4916 PUSHs(matcher_matches_sv(matcher, d)
4919 destroy_matcher(matcher);
4924 /* See if there is overload magic on left */
4925 else if (object_on_left && SvAMAGIC(d)) {
4927 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4928 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4931 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4939 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4942 else if (!SvOK(d)) {
4943 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4944 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4949 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4950 DEBUG_M(if (SvNIOK(e))
4951 Perl_deb(aTHX_ " applying rule Any-Num\n");
4953 Perl_deb(aTHX_ " applying rule Num-numish\n");
4955 /* numeric comparison */
4958 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4959 (void) Perl_pp_i_eq(aTHX);
4961 (void) Perl_pp_eq(aTHX);
4969 /* As a last resort, use string comparison */
4970 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4973 return Perl_pp_seq(aTHX);
4980 const I32 gimme = GIMME_V;
4982 /* This is essentially an optimization: if the match
4983 fails, we don't want to push a context and then
4984 pop it again right away, so we skip straight
4985 to the op that follows the leavewhen.
4986 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4988 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4989 RETURNOP(cLOGOP->op_other->op_next);
4991 ENTER_with_name("when");
4994 PUSHBLOCK(cx, CXt_WHEN, SP);
5009 cxix = dopoptogiven(cxstack_ix);
5011 /* diag_listed_as: Can't "when" outside a topicalizer */
5012 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5013 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5016 assert(CxTYPE(cx) == CXt_WHEN);
5019 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
5020 PL_curpm = newpm; /* pop $1 et al */
5022 LEAVE_with_name("when");
5024 if (cxix < cxstack_ix)
5027 cx = &cxstack[cxix];
5029 if (CxFOREACH(cx)) {
5030 /* clear off anything above the scope we're re-entering */
5031 I32 inner = PL_scopestack_ix;
5034 if (PL_scopestack_ix < inner)
5035 leave_scope(PL_scopestack[PL_scopestack_ix]);
5036 PL_curcop = cx->blk_oldcop;
5039 return cx->blk_loop.my_op->op_nextop;
5043 RETURNOP(cx->blk_givwhen.leave_op);
5056 PERL_UNUSED_VAR(gimme);
5058 cxix = dopoptowhen(cxstack_ix);
5060 DIE(aTHX_ "Can't \"continue\" outside a when block");
5062 if (cxix < cxstack_ix)
5066 assert(CxTYPE(cx) == CXt_WHEN);
5069 PL_curpm = newpm; /* pop $1 et al */
5071 LEAVE_with_name("when");
5072 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5081 cxix = dopoptogiven(cxstack_ix);
5083 DIE(aTHX_ "Can't \"break\" outside a given block");
5085 cx = &cxstack[cxix];
5087 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5089 if (cxix < cxstack_ix)
5092 /* Restore the sp at the time we entered the given block */
5095 return cx->blk_givwhen.leave_op;
5099 S_doparseform(pTHX_ SV *sv)
5102 char *s = SvPV(sv, len);
5104 char *base = NULL; /* start of current field */
5105 I32 skipspaces = 0; /* number of contiguous spaces seen */
5106 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5107 bool repeat = FALSE; /* ~~ seen on this line */
5108 bool postspace = FALSE; /* a text field may need right padding */
5111 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5113 bool ischop; /* it's a ^ rather than a @ */
5114 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5115 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5119 PERL_ARGS_ASSERT_DOPARSEFORM;
5122 Perl_croak(aTHX_ "Null picture in formline");
5124 if (SvTYPE(sv) >= SVt_PVMG) {
5125 /* This might, of course, still return NULL. */
5126 mg = mg_find(sv, PERL_MAGIC_fm);
5128 sv_upgrade(sv, SVt_PVMG);
5132 /* still the same as previously-compiled string? */
5133 SV *old = mg->mg_obj;
5134 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5135 && len == SvCUR(old)
5136 && strnEQ(SvPVX(old), SvPVX(sv), len)
5138 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5142 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5143 Safefree(mg->mg_ptr);
5149 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5150 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5153 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5154 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5158 /* estimate the buffer size needed */
5159 for (base = s; s <= send; s++) {
5160 if (*s == '\n' || *s == '@' || *s == '^')
5166 Newx(fops, maxops, U32);
5171 *fpc++ = FF_LINEMARK;
5172 noblank = repeat = FALSE;
5190 case ' ': case '\t':
5197 } /* else FALL THROUGH */
5205 *fpc++ = FF_LITERAL;
5213 *fpc++ = (U32)skipspaces;
5217 *fpc++ = FF_NEWLINE;
5221 arg = fpc - linepc + 1;
5228 *fpc++ = FF_LINEMARK;
5229 noblank = repeat = FALSE;
5238 ischop = s[-1] == '^';
5244 arg = (s - base) - 1;
5246 *fpc++ = FF_LITERAL;
5252 if (*s == '*') { /* @* or ^* */
5254 *fpc++ = 2; /* skip the @* or ^* */
5256 *fpc++ = FF_LINESNGL;
5259 *fpc++ = FF_LINEGLOB;
5261 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5262 arg = ischop ? FORM_NUM_BLANK : 0;
5267 const char * const f = ++s;
5270 arg |= FORM_NUM_POINT + (s - f);
5272 *fpc++ = s - base; /* fieldsize for FETCH */
5273 *fpc++ = FF_DECIMAL;
5275 unchopnum |= ! ischop;
5277 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5278 arg = ischop ? FORM_NUM_BLANK : 0;
5280 s++; /* skip the '0' first */
5284 const char * const f = ++s;
5287 arg |= FORM_NUM_POINT + (s - f);
5289 *fpc++ = s - base; /* fieldsize for FETCH */
5290 *fpc++ = FF_0DECIMAL;
5292 unchopnum |= ! ischop;
5294 else { /* text field */
5296 bool ismore = FALSE;
5299 while (*++s == '>') ;
5300 prespace = FF_SPACE;
5302 else if (*s == '|') {
5303 while (*++s == '|') ;
5304 prespace = FF_HALFSPACE;
5309 while (*++s == '<') ;
5312 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5316 *fpc++ = s - base; /* fieldsize for FETCH */
5318 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5321 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5335 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5338 mg->mg_ptr = (char *) fops;
5339 mg->mg_len = arg * sizeof(U32);
5340 mg->mg_obj = sv_copy;
5341 mg->mg_flags |= MGf_REFCOUNTED;
5343 if (unchopnum && repeat)
5344 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5351 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5353 /* Can value be printed in fldsize chars, using %*.*f ? */
5357 int intsize = fldsize - (value < 0 ? 1 : 0);
5359 if (frcsize & FORM_NUM_POINT)
5361 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5364 while (intsize--) pwr *= 10.0;
5365 while (frcsize--) eps /= 10.0;
5368 if (value + eps >= pwr)
5371 if (value - eps <= -pwr)
5378 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5381 SV * const datasv = FILTER_DATA(idx);
5382 const int filter_has_file = IoLINES(datasv);
5383 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5384 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5389 char *prune_from = NULL;
5390 bool read_from_cache = FALSE;
5394 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5396 assert(maxlen >= 0);
5399 /* I was having segfault trouble under Linux 2.2.5 after a
5400 parse error occured. (Had to hack around it with a test
5401 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5402 not sure where the trouble is yet. XXX */
5405 SV *const cache = datasv;
5408 const char *cache_p = SvPV(cache, cache_len);
5412 /* Running in block mode and we have some cached data already.
5414 if (cache_len >= umaxlen) {
5415 /* In fact, so much data we don't even need to call
5420 const char *const first_nl =
5421 (const char *)memchr(cache_p, '\n', cache_len);
5423 take = first_nl + 1 - cache_p;
5427 sv_catpvn(buf_sv, cache_p, take);
5428 sv_chop(cache, cache_p + take);
5429 /* Definitely not EOF */
5433 sv_catsv(buf_sv, cache);
5435 umaxlen -= cache_len;
5438 read_from_cache = TRUE;
5442 /* Filter API says that the filter appends to the contents of the buffer.
5443 Usually the buffer is "", so the details don't matter. But if it's not,
5444 then clearly what it contains is already filtered by this filter, so we
5445 don't want to pass it in a second time.
5446 I'm going to use a mortal in case the upstream filter croaks. */
5447 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5448 ? sv_newmortal() : buf_sv;
5449 SvUPGRADE(upstream, SVt_PV);
5451 if (filter_has_file) {
5452 status = FILTER_READ(idx+1, upstream, 0);
5455 if (filter_sub && status >= 0) {
5459 ENTER_with_name("call_filter_sub");
5464 DEFSV_set(upstream);
5468 PUSHs(filter_state);
5471 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5481 SV * const errsv = ERRSV;
5482 if (SvTRUE_NN(errsv))
5483 err = newSVsv(errsv);
5489 LEAVE_with_name("call_filter_sub");
5492 if (SvGMAGICAL(upstream)) {
5494 if (upstream == buf_sv) mg_free(buf_sv);
5496 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5497 if(!err && SvOK(upstream)) {
5498 got_p = SvPV_nomg(upstream, got_len);
5500 if (got_len > umaxlen) {
5501 prune_from = got_p + umaxlen;
5504 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5505 if (first_nl && first_nl + 1 < got_p + got_len) {
5506 /* There's a second line here... */
5507 prune_from = first_nl + 1;
5511 if (!err && prune_from) {
5512 /* Oh. Too long. Stuff some in our cache. */
5513 STRLEN cached_len = got_p + got_len - prune_from;
5514 SV *const cache = datasv;
5517 /* Cache should be empty. */
5518 assert(!SvCUR(cache));
5521 sv_setpvn(cache, prune_from, cached_len);
5522 /* If you ask for block mode, you may well split UTF-8 characters.
5523 "If it breaks, you get to keep both parts"
5524 (Your code is broken if you don't put them back together again
5525 before something notices.) */
5526 if (SvUTF8(upstream)) {
5529 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5531 /* Cannot just use sv_setpvn, as that could free the buffer
5532 before we have a chance to assign it. */
5533 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5534 got_len - cached_len);
5536 /* Can't yet be EOF */
5541 /* If they are at EOF but buf_sv has something in it, then they may never
5542 have touched the SV upstream, so it may be undefined. If we naively
5543 concatenate it then we get a warning about use of uninitialised value.
5545 if (!err && upstream != buf_sv &&
5547 sv_catsv_nomg(buf_sv, upstream);
5549 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5552 IoLINES(datasv) = 0;
5554 SvREFCNT_dec(filter_state);
5555 IoTOP_GV(datasv) = NULL;
5558 SvREFCNT_dec(filter_sub);
5559 IoBOTTOM_GV(datasv) = NULL;
5561 filter_del(S_run_user_filter);
5567 if (status == 0 && read_from_cache) {
5568 /* If we read some data from the cache (and by getting here it implies
5569 that we emptied the cache) then we aren't yet at EOF, and mustn't
5570 report that to our caller. */
5578 * c-indentation-style: bsd
5580 * indent-tabs-mode: nil
5583 * ex: set ts=8 sts=4 sw=4 et: