3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
45 const PERL_CONTEXT *cx;
48 if (PL_op->op_private & OPpOFFBYONE) {
49 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
52 cxix = dopoptosub(cxstack_ix);
58 switch (cx->blk_gimme) {
77 PMOP *pm = (PMOP*)cLOGOP->op_other;
82 const regexp_engine *eng;
83 bool is_bare_re= FALSE;
85 if (PL_op->op_flags & OPf_STACKED) {
95 /* prevent recompiling under /o and ithreads. */
96 #if defined(USE_ITHREADS)
97 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
104 assert (re != (REGEXP*) &PL_sv_undef);
105 eng = re ? RX_ENGINE(re) : current_re_engine();
108 In the below logic: these are basically the same - check if this regcomp is part of a split.
110 (PL_op->op_pmflags & PMf_split )
111 (PL_op->op_next->op_type == OP_PUSHRE)
113 We could add a new mask for this and copy the PMf_split, if we did
114 some bit definition fiddling first.
116 For now we leave this
119 new_re = (eng->op_comp
121 : &Perl_re_op_compile
122 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
124 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
126 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
128 if (pm->op_pmflags & PMf_HAS_CV)
129 ReANY(new_re)->qr_anoncv
130 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
134 /* The match's LHS's get-magic might need to access this op's regexp
135 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
136 get-magic now before we replace the regexp. Hopefully this hack can
137 be replaced with the approach described at
138 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
140 if (pm->op_type == OP_MATCH) {
142 const bool was_tainted = TAINT_get;
143 if (pm->op_flags & OPf_STACKED)
145 else if (pm->op_targ)
146 lhs = PAD_SV(pm->op_targ);
149 /* Restore the previous value of PL_tainted (which may have been
150 modified by get-magic), to avoid incorrectly setting the
151 RXf_TAINTED flag with RX_TAINT_on further down. */
152 TAINT_set(was_tainted);
153 #ifdef NO_TAINT_SUPPORT
154 PERL_UNUSED_VAR(was_tainted);
157 tmp = reg_temp_copy(NULL, new_re);
158 ReREFCNT_dec(new_re);
164 PM_SETRE(pm, new_re);
168 assert(TAINTING_get || !TAINT_get);
170 SvTAINTED_on((SV*)new_re);
174 #if !defined(USE_ITHREADS)
175 /* can't change the optree at runtime either */
176 /* PMf_KEEP is handled differently under threads to avoid these problems */
177 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
179 if (pm->op_pmflags & PMf_KEEP) {
180 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
181 cLOGOP->op_first->op_next = PL_op->op_next;
193 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
194 PMOP * const pm = (PMOP*) cLOGOP->op_other;
195 SV * const dstr = cx->sb_dstr;
198 char *orig = cx->sb_orig;
199 REGEXP * const rx = cx->sb_rx;
201 REGEXP *old = PM_GETRE(pm);
208 PM_SETRE(pm,ReREFCNT_inc(rx));
211 rxres_restore(&cx->sb_rxres, rx);
213 if (cx->sb_iters++) {
214 const SSize_t saviters = cx->sb_iters;
215 if (cx->sb_iters > cx->sb_maxiters)
216 DIE(aTHX_ "Substitution loop");
218 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
220 /* See "how taint works" above pp_subst() */
222 cx->sb_rxtainted |= SUBST_TAINT_REPL;
223 sv_catsv_nomg(dstr, POPs);
224 if (CxONCE(cx) || s < orig ||
225 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
226 (s == m), cx->sb_targ, NULL,
227 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
229 SV *targ = cx->sb_targ;
231 assert(cx->sb_strend >= s);
232 if(cx->sb_strend > s) {
233 if (DO_UTF8(dstr) && !SvUTF8(targ))
234 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
236 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
238 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
239 cx->sb_rxtainted |= SUBST_TAINT_PAT;
241 if (pm->op_pmflags & PMf_NONDESTRUCT) {
243 /* From here on down we're using the copy, and leaving the
244 original untouched. */
248 SV_CHECK_THINKFIRST_COW_DROP(targ);
249 if (isGV(targ)) Perl_croak_no_modify();
251 SvPV_set(targ, SvPVX(dstr));
252 SvCUR_set(targ, SvCUR(dstr));
253 SvLEN_set(targ, SvLEN(dstr));
256 SvPV_set(dstr, NULL);
259 mPUSHi(saviters - 1);
261 (void)SvPOK_only_UTF8(targ);
264 /* update the taint state of various various variables in
265 * preparation for final exit.
266 * See "how taint works" above pp_subst() */
268 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
269 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
270 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
272 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
274 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
275 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
277 SvTAINTED_on(TOPs); /* taint return value */
278 /* needed for mg_set below */
280 cBOOL(cx->sb_rxtainted &
281 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
285 /* PL_tainted must be correctly set for this mg_set */
288 LEAVE_SCOPE(cx->sb_oldsave);
291 RETURNOP(pm->op_next);
292 NOT_REACHED; /* NOTREACHED */
294 cx->sb_iters = saviters;
296 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
299 assert(!RX_SUBOFFSET(rx));
300 cx->sb_orig = orig = RX_SUBBEG(rx);
302 cx->sb_strend = s + (cx->sb_strend - m);
304 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
306 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
307 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
309 sv_catpvn_nomg(dstr, s, m-s);
311 cx->sb_s = RX_OFFS(rx)[0].end + orig;
312 { /* Update the pos() information. */
314 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
317 /* the string being matched against may no longer be a string,
318 * e.g. $_=0; s/.../$_++/ge */
321 SvPV_force_nomg_nolen(sv);
323 if (!(mg = mg_find_mglob(sv))) {
324 mg = sv_magicext_mglob(sv);
326 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
329 (void)ReREFCNT_inc(rx);
330 /* update the taint state of various various variables in preparation
331 * for calling the code block.
332 * See "how taint works" above pp_subst() */
334 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
335 cx->sb_rxtainted |= SUBST_TAINT_PAT;
337 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
338 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
339 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
341 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
343 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
344 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
345 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
346 ? cx->sb_dstr : cx->sb_targ);
349 rxres_save(&cx->sb_rxres, rx);
351 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
355 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
360 PERL_ARGS_ASSERT_RXRES_SAVE;
363 if (!p || p[1] < RX_NPARENS(rx)) {
365 i = 7 + (RX_NPARENS(rx)+1) * 2;
367 i = 6 + (RX_NPARENS(rx)+1) * 2;
376 /* what (if anything) to free on croak */
377 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
378 RX_MATCH_COPIED_off(rx);
379 *p++ = RX_NPARENS(rx);
382 *p++ = PTR2UV(RX_SAVED_COPY(rx));
383 RX_SAVED_COPY(rx) = NULL;
386 *p++ = PTR2UV(RX_SUBBEG(rx));
387 *p++ = (UV)RX_SUBLEN(rx);
388 *p++ = (UV)RX_SUBOFFSET(rx);
389 *p++ = (UV)RX_SUBCOFFSET(rx);
390 for (i = 0; i <= RX_NPARENS(rx); ++i) {
391 *p++ = (UV)RX_OFFS(rx)[i].start;
392 *p++ = (UV)RX_OFFS(rx)[i].end;
397 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
402 PERL_ARGS_ASSERT_RXRES_RESTORE;
405 RX_MATCH_COPY_FREE(rx);
406 RX_MATCH_COPIED_set(rx, *p);
408 RX_NPARENS(rx) = *p++;
411 if (RX_SAVED_COPY(rx))
412 SvREFCNT_dec (RX_SAVED_COPY(rx));
413 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
417 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
418 RX_SUBLEN(rx) = (I32)(*p++);
419 RX_SUBOFFSET(rx) = (I32)*p++;
420 RX_SUBCOFFSET(rx) = (I32)*p++;
421 for (i = 0; i <= RX_NPARENS(rx); ++i) {
422 RX_OFFS(rx)[i].start = (I32)(*p++);
423 RX_OFFS(rx)[i].end = (I32)(*p++);
428 S_rxres_free(pTHX_ void **rsp)
430 UV * const p = (UV*)*rsp;
432 PERL_ARGS_ASSERT_RXRES_FREE;
436 void *tmp = INT2PTR(char*,*p);
439 U32 i = 9 + p[1] * 2;
441 U32 i = 8 + p[1] * 2;
446 SvREFCNT_dec (INT2PTR(SV*,p[2]));
449 PoisonFree(p, i, sizeof(UV));
458 #define FORM_NUM_BLANK (1<<30)
459 #define FORM_NUM_POINT (1<<29)
463 dSP; dMARK; dORIGMARK;
464 SV * const tmpForm = *++MARK;
465 SV *formsv; /* contains text of original format */
466 U32 *fpc; /* format ops program counter */
467 char *t; /* current append position in target string */
468 const char *f; /* current position in format string */
470 SV *sv = NULL; /* current item */
471 const char *item = NULL;/* string value of current item */
472 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
473 I32 itembytes = 0; /* as itemsize, but length in bytes */
474 I32 fieldsize = 0; /* width of current field */
475 I32 lines = 0; /* number of lines that have been output */
476 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
477 const char *chophere = NULL; /* where to chop current item */
478 STRLEN linemark = 0; /* pos of start of line in output */
480 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
481 STRLEN len; /* length of current sv */
482 STRLEN linemax; /* estimate of output size in bytes */
483 bool item_is_utf8 = FALSE;
484 bool targ_is_utf8 = FALSE;
487 U8 *source; /* source of bytes to append */
488 STRLEN to_copy; /* how may bytes to append */
489 char trans; /* what chars to translate */
491 mg = doparseform(tmpForm);
493 fpc = (U32*)mg->mg_ptr;
494 /* the actual string the format was compiled from.
495 * with overload etc, this may not match tmpForm */
499 SvPV_force(PL_formtarget, len);
500 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
501 SvTAINTED_on(PL_formtarget);
502 if (DO_UTF8(PL_formtarget))
504 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
505 t = SvGROW(PL_formtarget, len + linemax + 1);
506 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
508 f = SvPV_const(formsv, len);
512 const char *name = "???";
515 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
516 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
517 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
518 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
519 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
521 case FF_CHECKNL: name = "CHECKNL"; break;
522 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
523 case FF_SPACE: name = "SPACE"; break;
524 case FF_HALFSPACE: name = "HALFSPACE"; break;
525 case FF_ITEM: name = "ITEM"; break;
526 case FF_CHOP: name = "CHOP"; break;
527 case FF_LINEGLOB: name = "LINEGLOB"; break;
528 case FF_NEWLINE: name = "NEWLINE"; break;
529 case FF_MORE: name = "MORE"; break;
530 case FF_LINEMARK: name = "LINEMARK"; break;
531 case FF_END: name = "END"; break;
532 case FF_0DECIMAL: name = "0DECIMAL"; break;
533 case FF_LINESNGL: name = "LINESNGL"; break;
536 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
538 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
541 case FF_LINEMARK: /* start (or end) of a line */
542 linemark = t - SvPVX(PL_formtarget);
547 case FF_LITERAL: /* append <arg> literal chars */
552 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
555 case FF_SKIP: /* skip <arg> chars in format */
559 case FF_FETCH: /* get next item and set field size to <arg> */
568 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
571 SvTAINTED_on(PL_formtarget);
574 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
576 const char *s = item = SvPV_const(sv, len);
577 const char *send = s + len;
580 item_is_utf8 = DO_UTF8(sv);
592 if (itemsize == fieldsize)
595 itembytes = s - item;
600 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
602 const char *s = item = SvPV_const(sv, len);
603 const char *send = s + len;
607 item_is_utf8 = DO_UTF8(sv);
609 /* look for a legal split position */
617 /* provisional split point */
621 /* we delay testing fieldsize until after we've
622 * processed the possible split char directly
623 * following the last field char; so if fieldsize=3
624 * and item="a b cdef", we consume "a b", not "a".
625 * Ditto further down.
627 if (size == fieldsize)
631 if (strchr(PL_chopset, *s)) {
632 /* provisional split point */
633 /* for a non-space split char, we include
634 * the split char; hence the '+1' */
638 if (size == fieldsize)
650 if (!chophere || s == send) {
654 itembytes = chophere - item;
659 case FF_SPACE: /* append padding space (diff of field, item size) */
660 arg = fieldsize - itemsize;
668 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
669 arg = fieldsize - itemsize;
678 case FF_ITEM: /* append a text item, while blanking ctrl chars */
684 case FF_CHOP: /* (for ^*) chop the current item */
685 if (sv != &PL_sv_no) {
686 const char *s = chophere;
694 /* tied, overloaded or similar strangeness.
695 * Do it the hard way */
696 sv_setpvn(sv, s, len - (s-item));
701 case FF_LINESNGL: /* process ^* */
705 case FF_LINEGLOB: /* process @* */
707 const bool oneline = fpc[-1] == FF_LINESNGL;
708 const char *s = item = SvPV_const(sv, len);
709 const char *const send = s + len;
711 item_is_utf8 = DO_UTF8(sv);
722 to_copy = s - item - 1;
736 /* append to_copy bytes from source to PL_formstring.
737 * item_is_utf8 implies source is utf8.
738 * if trans, translate certain characters during the copy */
743 SvCUR_set(PL_formtarget,
744 t - SvPVX_const(PL_formtarget));
746 if (targ_is_utf8 && !item_is_utf8) {
747 source = tmp = bytes_to_utf8(source, &to_copy);
749 if (item_is_utf8 && !targ_is_utf8) {
751 /* Upgrade targ to UTF8, and then we reduce it to
752 a problem we have a simple solution for.
753 Don't need get magic. */
754 sv_utf8_upgrade_nomg(PL_formtarget);
756 /* re-calculate linemark */
757 s = (U8*)SvPVX(PL_formtarget);
758 /* the bytes we initially allocated to append the
759 * whole line may have been gobbled up during the
760 * upgrade, so allocate a whole new line's worth
765 linemark = s - (U8*)SvPVX(PL_formtarget);
767 /* Easy. They agree. */
768 assert (item_is_utf8 == targ_is_utf8);
771 /* @* and ^* are the only things that can exceed
772 * the linemax, so grow by the output size, plus
773 * a whole new form's worth in case of any further
775 grow = linemax + to_copy;
777 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
778 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
780 Copy(source, t, to_copy, char);
782 /* blank out ~ or control chars, depending on trans.
783 * works on bytes not chars, so relies on not
784 * matching utf8 continuation bytes */
786 U8 *send = s + to_copy;
789 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
796 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
802 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
805 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
808 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
811 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
813 /* If the field is marked with ^ and the value is undefined,
815 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
823 /* overflow evidence */
824 if (num_overflow(value, fieldsize, arg)) {
830 /* Formats aren't yet marked for locales, so assume "yes". */
832 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
834 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
835 STORE_LC_NUMERIC_SET_TO_NEEDED();
836 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
839 const char* qfmt = quadmath_format_single(fmt);
842 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
843 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
845 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
850 /* we generate fmt ourselves so it is safe */
851 GCC_DIAG_IGNORE(-Wformat-nonliteral);
852 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
855 PERL_MY_SNPRINTF_POST_GUARD(len, max);
856 RESTORE_LC_NUMERIC();
861 case FF_NEWLINE: /* delete trailing spaces, then append \n */
863 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
868 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
871 if (arg) { /* repeat until fields exhausted? */
877 t = SvPVX(PL_formtarget) + linemark;
882 case FF_MORE: /* replace long end of string with '...' */
884 const char *s = chophere;
885 const char *send = item + len;
887 while (isSPACE(*s) && (s < send))
892 arg = fieldsize - itemsize;
899 if (strnEQ(s1," ",3)) {
900 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
910 case FF_END: /* tidy up, then return */
912 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
914 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
916 SvUTF8_on(PL_formtarget);
917 FmLINES(PL_formtarget) += lines;
919 if (fpc[-1] == FF_BLANK)
920 RETURNOP(cLISTOP->op_first);
932 if (PL_stack_base + TOPMARK == SP) {
934 if (GIMME_V == G_SCALAR)
936 RETURNOP(PL_op->op_next->op_next);
938 PL_stack_sp = PL_stack_base + TOPMARK + 1;
939 Perl_pp_pushmark(aTHX); /* push dst */
940 Perl_pp_pushmark(aTHX); /* push src */
941 ENTER_with_name("grep"); /* enter outer scope */
945 ENTER_with_name("grep_item"); /* enter inner scope */
948 src = PL_stack_base[TOPMARK];
950 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
957 if (PL_op->op_type == OP_MAPSTART)
958 Perl_pp_pushmark(aTHX); /* push top */
959 return ((LOGOP*)PL_op->op_next)->op_other;
965 const I32 gimme = GIMME_V;
966 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
972 /* first, move source pointer to the next item in the source list */
973 ++PL_markstack_ptr[-1];
975 /* if there are new items, push them into the destination list */
976 if (items && gimme != G_VOID) {
977 /* might need to make room back there first */
978 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
979 /* XXX this implementation is very pessimal because the stack
980 * is repeatedly extended for every set of items. Is possible
981 * to do this without any stack extension or copying at all
982 * by maintaining a separate list over which the map iterates
983 * (like foreach does). --gsar */
985 /* everything in the stack after the destination list moves
986 * towards the end the stack by the amount of room needed */
987 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
989 /* items to shift up (accounting for the moved source pointer) */
990 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
992 /* This optimization is by Ben Tilly and it does
993 * things differently from what Sarathy (gsar)
994 * is describing. The downside of this optimization is
995 * that leaves "holes" (uninitialized and hopefully unused areas)
996 * to the Perl stack, but on the other hand this
997 * shouldn't be a problem. If Sarathy's idea gets
998 * implemented, this optimization should become
999 * irrelevant. --jhi */
1001 shift = count; /* Avoid shifting too often --Ben Tilly */
1005 dst = (SP += shift);
1006 PL_markstack_ptr[-1] += shift;
1007 *PL_markstack_ptr += shift;
1011 /* copy the new items down to the destination list */
1012 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1013 if (gimme == G_ARRAY) {
1014 /* add returned items to the collection (making mortal copies
1015 * if necessary), then clear the current temps stack frame
1016 * *except* for those items. We do this splicing the items
1017 * into the start of the tmps frame (so some items may be on
1018 * the tmps stack twice), then moving PL_tmps_floor above
1019 * them, then freeing the frame. That way, the only tmps that
1020 * accumulate over iterations are the return values for map.
1021 * We have to do to this way so that everything gets correctly
1022 * freed if we die during the map.
1026 /* make space for the slice */
1027 EXTEND_MORTAL(items);
1028 tmpsbase = PL_tmps_floor + 1;
1029 Move(PL_tmps_stack + tmpsbase,
1030 PL_tmps_stack + tmpsbase + items,
1031 PL_tmps_ix - PL_tmps_floor,
1033 PL_tmps_ix += items;
1038 sv = sv_mortalcopy(sv);
1040 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1042 /* clear the stack frame except for the items */
1043 PL_tmps_floor += items;
1045 /* FREETMPS may have cleared the TEMP flag on some of the items */
1048 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1051 /* scalar context: we don't care about which values map returns
1052 * (we use undef here). And so we certainly don't want to do mortal
1053 * copies of meaningless values. */
1054 while (items-- > 0) {
1056 *dst-- = &PL_sv_undef;
1064 LEAVE_with_name("grep_item"); /* exit inner scope */
1067 if (PL_markstack_ptr[-1] > TOPMARK) {
1069 (void)POPMARK; /* pop top */
1070 LEAVE_with_name("grep"); /* exit outer scope */
1071 (void)POPMARK; /* pop src */
1072 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1073 (void)POPMARK; /* pop dst */
1074 SP = PL_stack_base + POPMARK; /* pop original mark */
1075 if (gimme == G_SCALAR) {
1079 else if (gimme == G_ARRAY)
1086 ENTER_with_name("grep_item"); /* enter inner scope */
1089 /* set $_ to the new source item */
1090 src = PL_stack_base[PL_markstack_ptr[-1]];
1091 if (SvPADTMP(src)) {
1092 src = sv_mortalcopy(src);
1097 RETURNOP(cLOGOP->op_other);
1105 if (GIMME_V == G_ARRAY)
1107 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1108 return cLOGOP->op_other;
1117 if (GIMME_V == G_ARRAY) {
1118 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1122 SV * const targ = PAD_SV(PL_op->op_targ);
1125 if (PL_op->op_private & OPpFLIP_LINENUM) {
1126 if (GvIO(PL_last_in_gv)) {
1127 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1130 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1132 flip = SvIV(sv) == SvIV(GvSV(gv));
1138 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1139 if (PL_op->op_flags & OPf_SPECIAL) {
1147 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1150 sv_setpvs(TARG, "");
1156 /* This code tries to decide if "$left .. $right" should use the
1157 magical string increment, or if the range is numeric (we make
1158 an exception for .."0" [#18165]). AMS 20021031. */
1160 #define RANGE_IS_NUMERIC(left,right) ( \
1161 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1162 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1163 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1164 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1165 && (!SvOK(right) || looks_like_number(right))))
1171 if (GIMME_V == G_ARRAY) {
1177 if (RANGE_IS_NUMERIC(left,right)) {
1179 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1180 (SvOK(right) && (SvIOK(right)
1181 ? SvIsUV(right) && SvUV(right) > IV_MAX
1182 : SvNV_nomg(right) > IV_MAX)))
1183 DIE(aTHX_ "Range iterator outside integer range");
1184 i = SvIV_nomg(left);
1185 j = SvIV_nomg(right);
1187 /* Dance carefully around signed max. */
1188 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1191 /* The wraparound of signed integers is undefined
1192 * behavior, but here we aim for count >=1, and
1193 * negative count is just wrong. */
1195 #if IVSIZE > Size_t_size
1202 Perl_croak(aTHX_ "Out of memory during list extend");
1209 SV * const sv = sv_2mortal(newSViv(i));
1211 if (n) /* avoid incrementing above IV_MAX */
1217 const char * const lpv = SvPV_nomg_const(left, llen);
1218 const char * const tmps = SvPV_nomg_const(right, len);
1220 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1221 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1223 if (strEQ(SvPVX_const(sv),tmps))
1225 sv = sv_2mortal(newSVsv(sv));
1232 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1236 if (PL_op->op_private & OPpFLIP_LINENUM) {
1237 if (GvIO(PL_last_in_gv)) {
1238 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1241 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1242 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1250 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1251 sv_catpvs(targ, "E0");
1261 static const char * const context_name[] = {
1263 NULL, /* CXt_WHEN never actually needs "block" */
1264 NULL, /* CXt_BLOCK never actually needs "block" */
1265 NULL, /* CXt_GIVEN never actually needs "block" */
1266 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1267 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1268 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1269 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1277 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1281 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1283 for (i = cxstack_ix; i >= 0; i--) {
1284 const PERL_CONTEXT * const cx = &cxstack[i];
1285 switch (CxTYPE(cx)) {
1291 /* diag_listed_as: Exiting subroutine via %s */
1292 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1293 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1294 if (CxTYPE(cx) == CXt_NULL)
1297 case CXt_LOOP_LAZYIV:
1298 case CXt_LOOP_LAZYSV:
1300 case CXt_LOOP_PLAIN:
1302 STRLEN cx_label_len = 0;
1303 U32 cx_label_flags = 0;
1304 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1306 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1309 (const U8*)cx_label, cx_label_len,
1310 (const U8*)label, len) == 0)
1312 (const U8*)label, len,
1313 (const U8*)cx_label, cx_label_len) == 0)
1314 : (len == cx_label_len && ((cx_label == label)
1315 || memEQ(cx_label, label, len))) )) {
1316 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1317 (long)i, cx_label));
1320 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1331 Perl_dowantarray(pTHX)
1333 const I32 gimme = block_gimme();
1334 return (gimme == G_VOID) ? G_SCALAR : gimme;
1338 Perl_block_gimme(pTHX)
1340 const I32 cxix = dopoptosub(cxstack_ix);
1345 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1347 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1353 Perl_is_lvalue_sub(pTHX)
1355 const I32 cxix = dopoptosub(cxstack_ix);
1356 assert(cxix >= 0); /* We should only be called from inside subs */
1358 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1359 return CxLVAL(cxstack + cxix);
1364 /* only used by PUSHSUB */
1366 Perl_was_lvalue_sub(pTHX)
1368 const I32 cxix = dopoptosub(cxstack_ix-1);
1369 assert(cxix >= 0); /* We should only be called from inside subs */
1371 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1372 return CxLVAL(cxstack + cxix);
1378 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1382 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1384 PERL_UNUSED_CONTEXT;
1387 for (i = startingblock; i >= 0; i--) {
1388 const PERL_CONTEXT * const cx = &cxstk[i];
1389 switch (CxTYPE(cx)) {
1393 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1394 * twice; the first for the normal foo() call, and the second
1395 * for a faked up re-entry into the sub to execute the
1396 * code block. Hide this faked entry from the world. */
1397 if (cx->cx_type & CXp_SUB_RE_FAKE)
1402 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1410 S_dopoptoeval(pTHX_ I32 startingblock)
1413 for (i = startingblock; i >= 0; i--) {
1414 const PERL_CONTEXT *cx = &cxstack[i];
1415 switch (CxTYPE(cx)) {
1419 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1427 S_dopoptoloop(pTHX_ I32 startingblock)
1430 for (i = startingblock; i >= 0; i--) {
1431 const PERL_CONTEXT * const cx = &cxstack[i];
1432 switch (CxTYPE(cx)) {
1438 /* diag_listed_as: Exiting subroutine via %s */
1439 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1440 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1441 if ((CxTYPE(cx)) == CXt_NULL)
1444 case CXt_LOOP_LAZYIV:
1445 case CXt_LOOP_LAZYSV:
1447 case CXt_LOOP_PLAIN:
1448 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1456 S_dopoptogiven(pTHX_ I32 startingblock)
1459 for (i = startingblock; i >= 0; i--) {
1460 const PERL_CONTEXT *cx = &cxstack[i];
1461 switch (CxTYPE(cx)) {
1465 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1467 case CXt_LOOP_PLAIN:
1468 assert(!CxFOREACHDEF(cx));
1470 case CXt_LOOP_LAZYIV:
1471 case CXt_LOOP_LAZYSV:
1473 if (CxFOREACHDEF(cx)) {
1474 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1483 S_dopoptowhen(pTHX_ I32 startingblock)
1486 for (i = startingblock; i >= 0; i--) {
1487 const PERL_CONTEXT *cx = &cxstack[i];
1488 switch (CxTYPE(cx)) {
1492 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1500 Perl_dounwind(pTHX_ I32 cxix)
1504 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1507 while (cxstack_ix > cxix) {
1509 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1510 DEBUG_CX("UNWIND"); \
1511 /* Note: we don't need to restore the base context info till the end. */
1512 switch (CxTYPE(cx)) {
1515 continue; /* not break */
1522 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
1523 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
1525 case CXt_LOOP_LAZYIV:
1526 case CXt_LOOP_LAZYSV:
1528 case CXt_LOOP_PLAIN:
1539 PERL_UNUSED_VAR(optype);
1543 Perl_qerror(pTHX_ SV *err)
1545 PERL_ARGS_ASSERT_QERROR;
1548 if (PL_in_eval & EVAL_KEEPERR) {
1549 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1553 sv_catsv(ERRSV, err);
1556 sv_catsv(PL_errors, err);
1558 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1560 ++PL_parser->error_count;
1564 Perl_die_unwind(pTHX_ SV *msv)
1566 SV *exceptsv = sv_mortalcopy(msv);
1567 U8 in_eval = PL_in_eval;
1568 PERL_ARGS_ASSERT_DIE_UNWIND;
1575 * Historically, perl used to set ERRSV ($@) early in the die
1576 * process and rely on it not getting clobbered during unwinding.
1577 * That sucked, because it was liable to get clobbered, so the
1578 * setting of ERRSV used to emit the exception from eval{} has
1579 * been moved to much later, after unwinding (see just before
1580 * JMPENV_JUMP below). However, some modules were relying on the
1581 * early setting, by examining $@ during unwinding to use it as
1582 * a flag indicating whether the current unwinding was caused by
1583 * an exception. It was never a reliable flag for that purpose,
1584 * being totally open to false positives even without actual
1585 * clobberage, but was useful enough for production code to
1586 * semantically rely on it.
1588 * We'd like to have a proper introspective interface that
1589 * explicitly describes the reason for whatever unwinding
1590 * operations are currently in progress, so that those modules
1591 * work reliably and $@ isn't further overloaded. But we don't
1592 * have one yet. In its absence, as a stopgap measure, ERRSV is
1593 * now *additionally* set here, before unwinding, to serve as the
1594 * (unreliable) flag that it used to.
1596 * This behaviour is temporary, and should be removed when a
1597 * proper way to detect exceptional unwinding has been developed.
1598 * As of 2010-12, the authors of modules relying on the hack
1599 * are aware of the issue, because the modules failed on
1600 * perls 5.13.{1..7} which had late setting of $@ without this
1601 * early-setting hack.
1603 if (!(in_eval & EVAL_KEEPERR)) {
1604 SvTEMP_off(exceptsv);
1605 sv_setsv(ERRSV, exceptsv);
1608 if (in_eval & EVAL_KEEPERR) {
1609 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1613 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1614 && PL_curstackinfo->si_prev)
1628 JMPENV *restartjmpenv;
1631 if (cxix < cxstack_ix)
1634 POPBLOCK(cx,PL_curpm);
1635 if (CxTYPE(cx) != CXt_EVAL) {
1637 const char* message = SvPVx_const(exceptsv, msglen);
1638 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1639 PerlIO_write(Perl_error_log, message, msglen);
1643 namesv = cx->blk_eval.old_namesv;
1645 oldcop = cx->blk_oldcop;
1647 restartjmpenv = cx->blk_eval.cur_top_env;
1648 restartop = cx->blk_eval.retop;
1650 if (gimme == G_SCALAR)
1651 *++newsp = &PL_sv_undef;
1652 PL_stack_sp = newsp;
1654 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
1655 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
1657 if (optype == OP_REQUIRE) {
1658 assert (PL_curcop == oldcop);
1659 (void)hv_store(GvHVn(PL_incgv),
1660 SvPVX_const(namesv),
1661 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1663 /* note that unlike pp_entereval, pp_require isn't
1664 * supposed to trap errors. So now that we've popped the
1665 * EVAL that pp_require pushed, and processed the error
1666 * message, rethrow the error */
1667 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1668 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1671 if (!(in_eval & EVAL_KEEPERR))
1672 sv_setsv(ERRSV, exceptsv);
1673 PL_restartjmpenv = restartjmpenv;
1674 PL_restartop = restartop;
1676 NOT_REACHED; /* NOTREACHED */
1680 write_to_stderr(exceptsv);
1682 NOT_REACHED; /* NOTREACHED */
1688 if (SvTRUE(left) != SvTRUE(right))
1696 =head1 CV Manipulation Functions
1698 =for apidoc caller_cx
1700 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1701 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1702 information returned to Perl by C<caller>. Note that XSUBs don't get a
1703 stack frame, so C<caller_cx(0, NULL)> will return information for the
1704 immediately-surrounding Perl code.
1706 This function skips over the automatic calls to C<&DB::sub> made on the
1707 behalf of the debugger. If the stack frame requested was a sub called by
1708 C<DB::sub>, the return value will be the frame for the call to
1709 C<DB::sub>, since that has the correct line number/etc. for the call
1710 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1711 frame for the sub call itself.
1716 const PERL_CONTEXT *
1717 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1719 I32 cxix = dopoptosub(cxstack_ix);
1720 const PERL_CONTEXT *cx;
1721 const PERL_CONTEXT *ccstack = cxstack;
1722 const PERL_SI *top_si = PL_curstackinfo;
1725 /* we may be in a higher stacklevel, so dig down deeper */
1726 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1727 top_si = top_si->si_prev;
1728 ccstack = top_si->si_cxstack;
1729 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1733 /* caller() should not report the automatic calls to &DB::sub */
1734 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1735 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1739 cxix = dopoptosub_at(ccstack, cxix - 1);
1742 cx = &ccstack[cxix];
1743 if (dbcxp) *dbcxp = cx;
1745 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1746 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1747 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1748 field below is defined for any cx. */
1749 /* caller() should not report the automatic calls to &DB::sub */
1750 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1751 cx = &ccstack[dbcxix];
1760 const PERL_CONTEXT *cx;
1761 const PERL_CONTEXT *dbcx;
1762 I32 gimme = GIMME_V;
1763 const HEK *stash_hek;
1765 bool has_arg = MAXARG && TOPs;
1774 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1776 if (gimme != G_ARRAY) {
1784 assert(CopSTASH(cx->blk_oldcop));
1785 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1786 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1788 if (gimme != G_ARRAY) {
1791 PUSHs(&PL_sv_undef);
1794 sv_sethek(TARG, stash_hek);
1803 PUSHs(&PL_sv_undef);
1806 sv_sethek(TARG, stash_hek);
1809 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1810 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1811 cx->blk_sub.retop, TRUE);
1813 lcop = cx->blk_oldcop;
1814 mPUSHu(CopLINE(lcop));
1817 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1818 /* So is ccstack[dbcxix]. */
1819 if (CvHASGV(dbcx->blk_sub.cv)) {
1820 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1821 PUSHs(boolSV(CxHASARGS(cx)));
1824 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1825 PUSHs(boolSV(CxHASARGS(cx)));
1829 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1832 gimme = (I32)cx->blk_gimme;
1833 if (gimme == G_VOID)
1834 PUSHs(&PL_sv_undef);
1836 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1837 if (CxTYPE(cx) == CXt_EVAL) {
1839 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1840 SV *cur_text = cx->blk_eval.cur_text;
1841 if (SvCUR(cur_text) >= 2) {
1842 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1843 SvUTF8(cur_text)|SVs_TEMP));
1846 /* I think this is will always be "", but be sure */
1847 PUSHs(sv_2mortal(newSVsv(cur_text)));
1853 else if (cx->blk_eval.old_namesv) {
1854 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1857 /* eval BLOCK (try blocks have old_namesv == 0) */
1859 PUSHs(&PL_sv_undef);
1860 PUSHs(&PL_sv_undef);
1864 PUSHs(&PL_sv_undef);
1865 PUSHs(&PL_sv_undef);
1867 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1868 && CopSTASH_eq(PL_curcop, PL_debstash))
1870 /* slot 0 of the pad contains the original @_ */
1871 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
1872 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
1873 cx->blk_sub.olddepth+1]))[0]);
1874 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1876 Perl_init_dbargs(aTHX);
1878 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1879 av_extend(PL_dbargs, AvFILLp(ary) + off);
1880 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1881 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1883 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1886 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1888 if (old_warnings == pWARN_NONE)
1889 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1890 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1891 mask = &PL_sv_undef ;
1892 else if (old_warnings == pWARN_ALL ||
1893 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1894 /* Get the bit mask for $warnings::Bits{all}, because
1895 * it could have been extended by warnings::register */
1897 HV * const bits = get_hv("warnings::Bits", 0);
1898 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1899 mask = newSVsv(*bits_all);
1902 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1906 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1910 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1911 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1921 if (MAXARG < 1 || (!TOPs && !POPs))
1922 tmps = NULL, len = 0;
1924 tmps = SvPVx_const(POPs, len);
1925 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1930 /* like pp_nextstate, but used instead when the debugger is active */
1934 PL_curcop = (COP*)PL_op;
1935 TAINT_NOT; /* Each statement is presumed innocent */
1936 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1941 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1942 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
1946 const I32 gimme = G_ARRAY;
1947 GV * const gv = PL_DBgv;
1950 if (gv && isGV_with_GP(gv))
1953 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1954 DIE(aTHX_ "No DB::DB routine defined");
1956 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1957 /* don't do recursive DB::DB call */
1967 (void)(*CvXSUB(cv))(aTHX_ cv);
1974 PUSHBLOCK(cx, CXt_SUB, SP);
1976 cx->blk_sub.retop = PL_op->op_next;
1977 cx->blk_sub.old_savestack_ix = PL_savestack_ix;
1983 if (CvDEPTH(cv) >= 2) {
1984 PERL_STACK_OVERFLOW_CHECK();
1985 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1987 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1988 RETURNOP(CvSTART(cv));
1995 /* S_leave_common: Common code that many functions in this file use on
1998 /* SVs on the stack that have any of the flags passed in are left as is.
1999 Other SVs are protected via the mortals stack if lvalue is true, and
2002 Also, taintedness is cleared.
2006 S_leave_common(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2007 U32 flags, bool lvalue)
2010 PERL_ARGS_ASSERT_LEAVE_COMMON;
2013 if (flags & SVs_PADTMP) {
2014 flags &= ~SVs_PADTMP;
2017 if (gimme == G_SCALAR) {
2019 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2022 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2023 : sv_mortalcopy(*SP);
2025 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2028 *++MARK = &PL_sv_undef;
2032 else if (gimme == G_ARRAY) {
2033 /* in case LEAVE wipes old return values */
2034 while (++MARK <= SP) {
2035 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2039 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2040 : sv_mortalcopy(*MARK);
2041 TAINT_NOT; /* Each item is independent */
2044 /* When this function was called with MARK == newsp, we reach this
2045 * point with SP == newsp. */
2055 I32 gimme = GIMME_V;
2057 ENTER_with_name("block");
2060 PUSHBLOCK(cx, CXt_BLOCK, SP);
2073 if (PL_op->op_flags & OPf_SPECIAL) {
2074 cx = &cxstack[cxstack_ix];
2075 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2080 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2082 SP = leave_common(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2083 PL_op->op_private & OPpLVALUE);
2084 PL_curpm = newpm; /* Don't pop $1 et al till now */
2086 LEAVE_with_name("block");
2092 S_outside_integer(pTHX_ SV *sv)
2095 const NV nv = SvNV_nomg(sv);
2096 if (Perl_isinfnan(nv))
2098 #ifdef NV_PRESERVES_UV
2099 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2102 if (nv <= (NV)IV_MIN)
2105 ((nv > (NV)UV_MAX ||
2106 SvUV_nomg(sv) > (UV)IV_MAX)))
2117 const I32 gimme = GIMME_V;
2118 void *itervar; /* location of the iteration variable */
2119 U8 cxtype = CXt_LOOP_FOR;
2121 ENTER_with_name("loop1");
2124 if (PL_op->op_targ) { /* "my" variable */
2125 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2126 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2127 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2128 SVs_PADSTALE, SVs_PADSTALE);
2130 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2131 itervar = &PAD_SVl(PL_op->op_targ);
2133 else if (LIKELY(isGV(TOPs))) { /* symbol table variable */
2134 GV * const gv = MUTABLE_GV(POPs);
2135 SV** svp = &GvSV(gv);
2136 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2138 itervar = (void *)gv;
2141 SV * const sv = POPs;
2142 assert(SvTYPE(sv) == SVt_PVMG);
2143 assert(SvMAGIC(sv));
2144 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2145 itervar = (void *)sv;
2146 cxtype |= CXp_FOR_LVREF;
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;
2161 if (UNLIKELY(cxtype & CXp_FOR_LVREF))
2162 DIE(aTHX_ "Assigned value is not a reference");
2165 if (RANGE_IS_NUMERIC(sv,right)) {
2166 cx->cx_type &= ~CXTYPEMASK;
2167 cx->cx_type |= CXt_LOOP_LAZYIV;
2168 /* Make sure that no-one re-orders cop.h and breaks our
2170 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2171 if (S_outside_integer(aTHX_ sv) ||
2172 S_outside_integer(aTHX_ right))
2173 DIE(aTHX_ "Range iterator outside integer range");
2174 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2175 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2177 /* for correct -Dstv display */
2178 cx->blk_oldsp = sp - PL_stack_base;
2182 cx->cx_type &= ~CXTYPEMASK;
2183 cx->cx_type |= CXt_LOOP_LAZYSV;
2184 /* Make sure that no-one re-orders cop.h and breaks our
2186 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2187 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2188 cx->blk_loop.state_u.lazysv.end = right;
2189 SvREFCNT_inc(right);
2190 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2191 /* This will do the upgrade to SVt_PV, and warn if the value
2192 is uninitialised. */
2193 (void) SvPV_nolen_const(right);
2194 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2195 to replace !SvOK() with a pointer to "". */
2197 SvREFCNT_dec(right);
2198 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2202 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2203 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2204 SvREFCNT_inc(maybe_ary);
2205 cx->blk_loop.state_u.ary.ix =
2206 (PL_op->op_private & OPpITER_REVERSED) ?
2207 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2211 else { /* iterating over items on the stack */
2212 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2213 if (PL_op->op_private & OPpITER_REVERSED) {
2214 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2217 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2228 const I32 gimme = GIMME_V;
2230 ENTER_with_name("loop1");
2232 ENTER_with_name("loop2");
2234 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2235 PUSHLOOP_PLAIN(cx, SP);
2250 assert(CxTYPE_is_LOOP(cx));
2252 newsp = PL_stack_base + cx->blk_loop.resetsp;
2254 SP = leave_common(newsp, SP, MARK, gimme, 0,
2255 PL_op->op_private & OPpLVALUE);
2258 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2259 PL_curpm = newpm; /* ... and pop $1 et al */
2261 LEAVE_with_name("loop2");
2262 LEAVE_with_name("loop1");
2268 /* This duplicates most of pp_leavesub, but with additional code to handle
2269 * return args in lvalue context. It was forked from pp_leavesub to
2270 * avoid slowing down that function any further.
2272 * Any changes made to this function may need to be copied to pp_leavesub
2286 const char *what = NULL;
2288 if (CxMULTICALL(&cxstack[cxstack_ix])) {
2289 /* entry zero of a stack is always PL_sv_undef, which
2290 * simplifies converting a '()' return into undef in scalar context */
2291 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2296 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2301 ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2302 if (gimme == G_SCALAR) {
2303 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2307 if ((SvPADTMP(TOPs) || SvREADONLY(TOPs)) &&
2308 !SvSMAGICAL(TOPs)) {
2310 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2311 : "a readonly value" : "a temporary";
2316 /* sub:lvalue{} will take us here. */
2325 "Can't return %s from lvalue subroutine", what
2330 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2331 if (!SvPADTMP(*SP)) {
2332 *MARK = SvREFCNT_inc(*SP);
2337 /* FREETMPS could clobber it */
2338 SV *sv = SvREFCNT_inc(*SP);
2340 *MARK = sv_mortalcopy(sv);
2347 ? sv_mortalcopy(*SP)
2349 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2354 *MARK = &PL_sv_undef;
2358 if (CxLVAL(cx) & OPpDEREF) {
2361 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2365 else if (gimme == G_ARRAY) {
2366 assert (!(CxLVAL(cx) & OPpDEREF));
2367 if (ref || !CxLVAL(cx))
2368 for (; MARK <= SP; MARK++)
2370 SvFLAGS(*MARK) & SVs_PADTMP
2371 ? sv_mortalcopy(*MARK)
2374 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2375 else for (; MARK <= SP; MARK++) {
2376 if (*MARK != &PL_sv_undef
2377 && (SvPADTMP(*MARK) || SvREADONLY(*MARK))
2379 /* Might be flattened array after $#array = */
2380 what = SvREADONLY(*MARK)
2381 ? "a readonly value" : "a temporary";
2384 else if (!SvTEMP(*MARK))
2385 *MARK = sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2390 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2392 PL_curpm = newpm; /* ... and pop $1 et al */
2395 return cx->blk_sub.retop;
2404 const I32 cxix = dopoptosub(cxstack_ix);
2406 assert(cxstack_ix >= 0);
2407 if (cxix < cxstack_ix) {
2409 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2410 * sort block, which is a CXt_NULL
2413 /* if we were in list context, we would have to splice out
2414 * any junk before the return args, like we do in the general
2415 * pp_return case, e.g.
2416 * sub f { for (junk1, junk2) { return arg1, arg2 }}
2418 assert(cxstack[0].blk_gimme == G_SCALAR);
2422 DIE(aTHX_ "Can't return outside a subroutine");
2427 cx = &cxstack[cxix];
2429 oldsp = PL_stack_base + cx->blk_oldsp;
2430 if (oldsp != MARK) {
2431 /* Handle extra junk on the stack. For example,
2432 * for (1,2) { return 3,4 }
2433 * leaves 1,2,3,4 on the stack. In list context we
2434 * have to splice out the 1,2; In scalar context for
2435 * for (1,2) { return }
2436 * we need to set sp = oldsp so that pp_leavesub knows
2437 * to push &PL_sv_undef onto the stack.
2438 * Note that in pp_return we only do the extra processing
2439 * required to handle junk; everything else we leave to
2442 SSize_t nargs = SP - MARK;
2444 if (cx->blk_gimme == G_ARRAY) {
2445 /* shift return args to base of call stack frame */
2446 Move(MARK + 1, oldsp + 1, nargs, SV*);
2447 PL_stack_sp = oldsp + nargs;
2451 PL_stack_sp = oldsp;
2454 /* fall through to a normal exit */
2455 switch (CxTYPE(cx)) {
2457 return CxTRYBLOCK(cx)
2458 ? Perl_pp_leavetry(aTHX)
2459 : Perl_pp_leaveeval(aTHX);
2461 return CvLVALUE(cx->blk_sub.cv)
2462 ? Perl_pp_leavesublv(aTHX)
2463 : Perl_pp_leavesub(aTHX);
2465 return Perl_pp_leavewrite(aTHX);
2467 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2473 S_unwind_loop(pTHX_ const char * const opname)
2476 if (PL_op->op_flags & OPf_SPECIAL) {
2477 cxix = dopoptoloop(cxstack_ix);
2479 /* diag_listed_as: Can't "last" outside a loop block */
2480 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2485 const char * const label =
2486 PL_op->op_flags & OPf_STACKED
2487 ? SvPV(TOPs,label_len)
2488 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2489 const U32 label_flags =
2490 PL_op->op_flags & OPf_STACKED
2492 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2494 cxix = dopoptolabel(label, label_len, label_flags);
2496 /* diag_listed_as: Label not found for "last %s" */
2497 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2499 SVfARG(PL_op->op_flags & OPf_STACKED
2500 && !SvGMAGICAL(TOPp1s)
2502 : newSVpvn_flags(label,
2504 label_flags | SVs_TEMP)));
2506 if (cxix < cxstack_ix)
2519 S_unwind_loop(aTHX_ "last");
2522 cxstack_ix++; /* temporarily protect top context */
2524 CxTYPE(cx) == CXt_LOOP_LAZYIV
2525 || CxTYPE(cx) == CXt_LOOP_LAZYSV
2526 || CxTYPE(cx) == CXt_LOOP_FOR
2527 || CxTYPE(cx) == CXt_LOOP_PLAIN
2529 newsp = PL_stack_base + cx->blk_loop.resetsp;
2530 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2533 PL_stack_sp = newsp;
2537 /* Stack values are safe: */
2538 POPLOOP(cx); /* release loop vars ... */
2540 PL_curpm = newpm; /* ... and pop $1 et al */
2542 PERL_UNUSED_VAR(gimme);
2549 const I32 inner = PL_scopestack_ix;
2551 S_unwind_loop(aTHX_ "next");
2553 /* clear off anything above the scope we're re-entering, but
2554 * save the rest until after a possible continue block */
2556 if (PL_scopestack_ix < inner)
2557 leave_scope(PL_scopestack[PL_scopestack_ix]);
2558 PL_curcop = cx->blk_oldcop;
2560 return (cx)->blk_loop.my_op->op_nextop;
2565 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2568 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2570 if (redo_op->op_type == OP_ENTER) {
2571 /* pop one less context to avoid $x being freed in while (my $x..) */
2573 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2574 redo_op = redo_op->op_next;
2578 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2579 LEAVE_SCOPE(oldsave);
2581 PL_curcop = cx->blk_oldcop;
2587 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2590 static const char* const too_deep = "Target of goto is too deeply nested";
2592 PERL_ARGS_ASSERT_DOFINDLABEL;
2595 Perl_croak(aTHX_ "%s", too_deep);
2596 if (o->op_type == OP_LEAVE ||
2597 o->op_type == OP_SCOPE ||
2598 o->op_type == OP_LEAVELOOP ||
2599 o->op_type == OP_LEAVESUB ||
2600 o->op_type == OP_LEAVETRY)
2602 *ops++ = cUNOPo->op_first;
2604 Perl_croak(aTHX_ "%s", too_deep);
2607 if (o->op_flags & OPf_KIDS) {
2609 /* First try all the kids at this level, since that's likeliest. */
2610 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2611 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2612 STRLEN kid_label_len;
2613 U32 kid_label_flags;
2614 const char *kid_label = CopLABEL_len_flags(kCOP,
2615 &kid_label_len, &kid_label_flags);
2617 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2620 (const U8*)kid_label, kid_label_len,
2621 (const U8*)label, len) == 0)
2623 (const U8*)label, len,
2624 (const U8*)kid_label, kid_label_len) == 0)
2625 : ( len == kid_label_len && ((kid_label == label)
2626 || memEQ(kid_label, label, len)))))
2630 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2631 if (kid == PL_lastgotoprobe)
2633 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2636 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2637 ops[-1]->op_type == OP_DBSTATE)
2642 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2651 /* also used for: pp_dump() */
2659 #define GOTO_DEPTH 64
2660 OP *enterops[GOTO_DEPTH];
2661 const char *label = NULL;
2662 STRLEN label_len = 0;
2663 U32 label_flags = 0;
2664 const bool do_dump = (PL_op->op_type == OP_DUMP);
2665 static const char* const must_have_label = "goto must have label";
2667 if (PL_op->op_flags & OPf_STACKED) {
2668 /* goto EXPR or goto &foo */
2670 SV * const sv = POPs;
2673 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2674 /* This egregious kludge implements goto &subroutine */
2677 CV *cv = MUTABLE_CV(SvRV(sv));
2678 AV *arg = GvAV(PL_defgv);
2680 while (!CvROOT(cv) && !CvXSUB(cv)) {
2681 const GV * const gv = CvGV(cv);
2685 /* autoloaded stub? */
2686 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2688 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2690 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2691 if (autogv && (cv = GvCV(autogv)))
2693 tmpstr = sv_newmortal();
2694 gv_efullname3(tmpstr, gv, NULL);
2695 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2697 DIE(aTHX_ "Goto undefined subroutine");
2700 cxix = dopoptosub(cxstack_ix);
2702 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2704 cx = &cxstack[cxix];
2705 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2706 if (CxTYPE(cx) == CXt_EVAL) {
2708 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2709 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2711 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2712 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2714 else if (CxMULTICALL(cx))
2715 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2717 /* First do some returnish stuff. */
2719 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2721 if (cxix < cxstack_ix) {
2727 /* partial unrolled POPSUB(): */
2729 /* protect @_ during save stack unwind. */
2731 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2733 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2734 LEAVE_SCOPE(cx->blk_sub.old_savestack_ix);
2736 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2737 AV* av = MUTABLE_AV(PAD_SVl(0));
2738 assert(AvARRAY(MUTABLE_AV(
2739 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2740 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2742 /* we are going to donate the current @_ from the old sub
2743 * to the new sub. This first part of the donation puts a
2744 * new empty AV in the pad[0] slot of the old sub,
2745 * unless pad[0] and @_ differ (e.g. if the old sub did
2746 * local *_ = []); in which case clear the old pad[0]
2747 * array in the usual way */
2748 if (av == arg || AvREAL(av))
2749 clear_defarray(av, av == arg);
2750 else CLEAR_ARGARRAY(av);
2753 /* don't restore PL_comppad here. It won't be needed if the
2754 * sub we're going to is non-XS, but restoring it early then
2755 * croaking (e.g. the "Goto undefined subroutine" below)
2756 * means the CX block gets processed again in dounwind,
2757 * but this time with the wrong PL_comppad */
2759 /* A destructor called during LEAVE_SCOPE could have undefined
2760 * our precious cv. See bug #99850. */
2761 if (!CvROOT(cv) && !CvXSUB(cv)) {
2762 const GV * const gv = CvGV(cv);
2764 SV * const tmpstr = sv_newmortal();
2765 gv_efullname3(tmpstr, gv, NULL);
2766 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2769 DIE(aTHX_ "Goto undefined subroutine");
2772 if (CxTYPE(cx) == CXt_SUB) {
2773 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2774 SvREFCNT_dec_NN(cx->blk_sub.cv);
2777 /* Now do some callish stuff. */
2781 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2782 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2785 PERL_UNUSED_VAR(newsp);
2786 PERL_UNUSED_VAR(gimme);
2790 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2792 /* put GvAV(defgv) back onto stack */
2794 EXTEND(SP, items+1); /* @_ could have been extended. */
2799 bool r = cBOOL(AvREAL(arg));
2800 for (index=0; index<items; index++)
2804 SV ** const svp = av_fetch(arg, index, 0);
2805 sv = svp ? *svp : NULL;
2807 else sv = AvARRAY(arg)[index];
2809 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2810 : sv_2mortal(newSVavdefelem(arg, index, 1));
2814 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2815 /* Restore old @_ */
2819 retop = cx->blk_sub.retop;
2820 PL_comppad = cx->blk_sub.prevcomppad;
2821 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2823 /* XS subs don't have a CXt_SUB, so pop it;
2824 * this is a POPBLOCK(), less all the stuff we already did
2825 * for TOPBLOCK() earlier */
2826 PL_curcop = cx->blk_oldcop;
2829 /* Push a mark for the start of arglist */
2832 (void)(*CvXSUB(cv))(aTHX_ cv);
2837 PADLIST * const padlist = CvPADLIST(cv);
2839 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2841 /* partial unrolled PUSHSUB(): */
2843 cx->blk_sub.cv = cv;
2844 cx->blk_sub.olddepth = CvDEPTH(cv);
2847 SvREFCNT_inc_simple_void_NN(cv);
2848 if (CvDEPTH(cv) > 1) {
2849 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2850 sub_crush_depth(cv);
2851 pad_push(padlist, CvDEPTH(cv));
2853 PL_curcop = cx->blk_oldcop;
2854 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2857 /* second half of donating @_ from the old sub to the
2858 * new sub: abandon the original pad[0] AV in the
2859 * new sub, and replace it with the donated @_.
2860 * pad[0] takes ownership of the extra refcount
2861 * we gave arg earlier */
2863 SvREFCNT_dec(PAD_SVl(0));
2864 PAD_SVl(0) = (SV *)arg;
2865 SvREFCNT_inc_simple_void_NN(arg);
2868 /* GvAV(PL_defgv) might have been modified on scope
2869 exit, so point it at arg again. */
2870 if (arg != GvAV(PL_defgv)) {
2871 AV * const av = GvAV(PL_defgv);
2872 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2877 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2878 Perl_get_db_sub(aTHX_ NULL, cv);
2880 CV * const gotocv = get_cvs("DB::goto", 0);
2882 PUSHMARK( PL_stack_sp );
2883 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2888 retop = CvSTART(cv);
2889 goto putback_return;
2894 label = SvPV_nomg_const(sv, label_len);
2895 label_flags = SvUTF8(sv);
2898 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2899 /* goto LABEL or dump LABEL */
2900 label = cPVOP->op_pv;
2901 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2902 label_len = strlen(label);
2904 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2909 OP *gotoprobe = NULL;
2910 bool leaving_eval = FALSE;
2911 bool in_block = FALSE;
2912 PERL_CONTEXT *last_eval_cx = NULL;
2916 PL_lastgotoprobe = NULL;
2918 for (ix = cxstack_ix; ix >= 0; ix--) {
2920 switch (CxTYPE(cx)) {
2922 leaving_eval = TRUE;
2923 if (!CxTRYBLOCK(cx)) {
2924 gotoprobe = (last_eval_cx ?
2925 last_eval_cx->blk_eval.old_eval_root :
2930 /* else fall through */
2931 case CXt_LOOP_LAZYIV:
2932 case CXt_LOOP_LAZYSV:
2934 case CXt_LOOP_PLAIN:
2937 gotoprobe = OpSIBLING(cx->blk_oldcop);
2943 gotoprobe = OpSIBLING(cx->blk_oldcop);
2946 gotoprobe = PL_main_root;
2949 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2950 gotoprobe = CvROOT(cx->blk_sub.cv);
2956 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2959 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
2960 CxTYPE(cx), (long) ix);
2961 gotoprobe = PL_main_root;
2967 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
2968 enterops, enterops + GOTO_DEPTH);
2971 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
2972 sibl1->op_type == OP_UNSTACK &&
2973 (sibl2 = OpSIBLING(sibl1)))
2975 retop = dofindlabel(sibl2,
2976 label, label_len, label_flags, enterops,
2977 enterops + GOTO_DEPTH);
2982 PL_lastgotoprobe = gotoprobe;
2985 DIE(aTHX_ "Can't find label %"UTF8f,
2986 UTF8fARG(label_flags, label_len, label));
2988 /* if we're leaving an eval, check before we pop any frames
2989 that we're not going to punt, otherwise the error
2992 if (leaving_eval && *enterops && enterops[1]) {
2994 for (i = 1; enterops[i]; i++)
2995 if (enterops[i]->op_type == OP_ENTERITER)
2996 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2999 if (*enterops && enterops[1]) {
3000 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3002 deprecate("\"goto\" to jump into a construct");
3005 /* pop unwanted frames */
3007 if (ix < cxstack_ix) {
3011 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3014 oldsave = PL_scopestack[PL_scopestack_ix];
3015 LEAVE_SCOPE(oldsave);
3018 /* push wanted frames */
3020 if (*enterops && enterops[1]) {
3021 OP * const oldop = PL_op;
3022 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3023 for (; enterops[ix]; ix++) {
3024 PL_op = enterops[ix];
3025 /* Eventually we may want to stack the needed arguments
3026 * for each op. For now, we punt on the hard ones. */
3027 if (PL_op->op_type == OP_ENTERITER)
3028 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3029 PL_op->op_ppaddr(aTHX);
3037 if (!retop) retop = PL_main_start;
3039 PL_restartop = retop;
3040 PL_do_undump = TRUE;
3044 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3045 PL_do_undump = FALSE;
3063 anum = 0; (void)POPs;
3069 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3072 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3075 PL_exit_flags |= PERL_EXIT_EXPECTED;
3077 PUSHs(&PL_sv_undef);
3084 S_save_lines(pTHX_ AV *array, SV *sv)
3086 const char *s = SvPVX_const(sv);
3087 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3090 PERL_ARGS_ASSERT_SAVE_LINES;
3092 while (s && s < send) {
3094 SV * const tmpstr = newSV_type(SVt_PVMG);
3096 t = (const char *)memchr(s, '\n', send - s);
3102 sv_setpvn(tmpstr, s, t - s);
3103 av_store(array, line++, tmpstr);
3111 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3113 0 is used as continue inside eval,
3115 3 is used for a die caught by an inner eval - continue inner loop
3117 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3118 establish a local jmpenv to handle exception traps.
3123 S_docatch(pTHX_ OP *o)
3126 OP * const oldop = PL_op;
3130 assert(CATCH_GET == TRUE);
3137 assert(cxstack_ix >= 0);
3138 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3139 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3144 /* die caught by an inner eval - continue inner loop */
3145 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3146 PL_restartjmpenv = NULL;
3147 PL_op = PL_restartop;
3156 NOT_REACHED; /* NOTREACHED */
3165 =for apidoc find_runcv
3167 Locate the CV corresponding to the currently executing sub or eval.
3168 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3169 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3170 entered. (This allows debuggers to eval in the scope of the breakpoint
3171 rather than in the scope of the debugger itself.)
3177 Perl_find_runcv(pTHX_ U32 *db_seqp)
3179 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3182 /* If this becomes part of the API, it might need a better name. */
3184 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3191 PL_curcop == &PL_compiling
3193 : PL_curcop->cop_seq;
3195 for (si = PL_curstackinfo; si; si = si->si_prev) {
3197 for (ix = si->si_cxix; ix >= 0; ix--) {
3198 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3200 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3201 cv = cx->blk_sub.cv;
3202 /* skip DB:: code */
3203 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3204 *db_seqp = cx->blk_oldcop->cop_seq;
3207 if (cx->cx_type & CXp_SUB_RE)
3210 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3211 cv = cx->blk_eval.cv;
3214 case FIND_RUNCV_padid_eq:
3216 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3219 case FIND_RUNCV_level_eq:
3220 if (level++ != arg) continue;
3228 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3232 /* Run yyparse() in a setjmp wrapper. Returns:
3233 * 0: yyparse() successful
3234 * 1: yyparse() failed
3238 S_try_yyparse(pTHX_ int gramtype)
3243 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3247 ret = yyparse(gramtype) ? 1 : 0;
3254 NOT_REACHED; /* NOTREACHED */
3261 /* Compile a require/do or an eval ''.
3263 * outside is the lexically enclosing CV (if any) that invoked us.
3264 * seq is the current COP scope value.
3265 * hh is the saved hints hash, if any.
3267 * Returns a bool indicating whether the compile was successful; if so,
3268 * PL_eval_start contains the first op of the compiled code; otherwise,
3271 * This function is called from two places: pp_require and pp_entereval.
3272 * These can be distinguished by whether PL_op is entereval.
3276 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3279 OP * const saveop = PL_op;
3280 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3281 COP * const oldcurcop = PL_curcop;
3282 bool in_require = (saveop->op_type == OP_REQUIRE);
3286 PL_in_eval = (in_require
3287 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3289 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3290 ? EVAL_RE_REPARSING : 0)));
3294 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3296 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3297 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3298 cxstack[cxstack_ix].blk_gimme = gimme;
3300 CvOUTSIDE_SEQ(evalcv) = seq;
3301 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3303 /* set up a scratch pad */
3305 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3306 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3309 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3311 /* make sure we compile in the right package */
3313 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3314 SAVEGENERICSV(PL_curstash);
3315 PL_curstash = (HV *)CopSTASH(PL_curcop);
3316 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3317 else SvREFCNT_inc_simple_void(PL_curstash);
3319 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3320 SAVESPTR(PL_beginav);
3321 PL_beginav = newAV();
3322 SAVEFREESV(PL_beginav);
3323 SAVESPTR(PL_unitcheckav);
3324 PL_unitcheckav = newAV();
3325 SAVEFREESV(PL_unitcheckav);
3328 ENTER_with_name("evalcomp");
3329 SAVESPTR(PL_compcv);
3332 /* try to compile it */
3334 PL_eval_root = NULL;
3335 PL_curcop = &PL_compiling;
3336 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3337 PL_in_eval |= EVAL_KEEPERR;
3344 hv_clear(GvHV(PL_hintgv));
3347 PL_hints = saveop->op_private & OPpEVAL_COPHH
3348 ? oldcurcop->cop_hints : saveop->op_targ;
3350 /* making 'use re eval' not be in scope when compiling the
3351 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3352 * infinite recursion when S_has_runtime_code() gives a false
3353 * positive: the second time round, HINT_RE_EVAL isn't set so we
3354 * don't bother calling S_has_runtime_code() */
3355 if (PL_in_eval & EVAL_RE_REPARSING)
3356 PL_hints &= ~HINT_RE_EVAL;
3359 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3360 SvREFCNT_dec(GvHV(PL_hintgv));
3361 GvHV(PL_hintgv) = hh;
3364 SAVECOMPILEWARNINGS();
3366 if (PL_dowarn & G_WARN_ALL_ON)
3367 PL_compiling.cop_warnings = pWARN_ALL ;
3368 else if (PL_dowarn & G_WARN_ALL_OFF)
3369 PL_compiling.cop_warnings = pWARN_NONE ;
3371 PL_compiling.cop_warnings = pWARN_STD ;
3374 PL_compiling.cop_warnings =
3375 DUP_WARNINGS(oldcurcop->cop_warnings);
3376 cophh_free(CopHINTHASH_get(&PL_compiling));
3377 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3378 /* The label, if present, is the first entry on the chain. So rather
3379 than writing a blank label in front of it (which involves an
3380 allocation), just use the next entry in the chain. */
3381 PL_compiling.cop_hints_hash
3382 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3383 /* Check the assumption that this removed the label. */
3384 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3387 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3390 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3392 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3393 * so honour CATCH_GET and trap it here if necessary */
3395 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3397 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3398 SV **newsp; /* Used by POPBLOCK. */
3400 I32 optype; /* Used by POPEVAL. */
3406 PERL_UNUSED_VAR(newsp);
3407 PERL_UNUSED_VAR(optype);
3409 /* note that if yystatus == 3, then the EVAL CX block has already
3410 * been popped, and various vars restored */
3412 if (yystatus != 3) {
3414 op_free(PL_eval_root);
3415 PL_eval_root = NULL;
3417 SP = PL_stack_base + POPMARK; /* pop original mark */
3418 POPBLOCK(cx,PL_curpm);
3420 namesv = cx->blk_eval.old_namesv;
3421 /* POPBLOCK has rendered LEAVE_with_name("evalcomp") unnecessary */
3422 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
3423 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
3429 /* If cx is still NULL, it means that we didn't go in the
3430 * POPEVAL branch. */
3431 cx = &cxstack[cxstack_ix];
3432 assert(CxTYPE(cx) == CXt_EVAL);
3433 namesv = cx->blk_eval.old_namesv;
3435 (void)hv_store(GvHVn(PL_incgv),
3436 SvPVX_const(namesv),
3437 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3439 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3442 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3445 if (!*(SvPV_nolen_const(errsv))) {
3446 sv_setpvs(errsv, "Compilation error");
3449 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3454 LEAVE_with_name("evalcomp");
3456 CopLINE_set(&PL_compiling, 0);
3457 SAVEFREEOP(PL_eval_root);
3458 cv_forget_slab(evalcv);
3460 DEBUG_x(dump_eval());
3462 /* Register with debugger: */
3463 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3464 CV * const cv = get_cvs("DB::postponed", 0);
3468 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3470 call_sv(MUTABLE_SV(cv), G_DISCARD);
3474 if (PL_unitcheckav) {
3475 OP *es = PL_eval_start;
3476 call_list(PL_scopestack_ix, PL_unitcheckav);
3480 /* compiled okay, so do it */
3482 CvDEPTH(evalcv) = 1;
3483 SP = PL_stack_base + POPMARK; /* pop original mark */
3484 PL_op = saveop; /* The caller may need it. */
3485 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3492 S_check_type_and_open(pTHX_ SV *name)
3497 const char *p = SvPV_const(name, len);
3500 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3502 /* checking here captures a reasonable error message when
3503 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3504 * user gets a confusing message about looking for the .pmc file
3505 * rather than for the .pm file so do the check in S_doopen_pm when
3506 * PMC is on instead of here. S_doopen_pm calls this func.
3507 * This check prevents a \0 in @INC causing problems.
3509 #ifdef PERL_DISABLE_PMC
3510 if (!IS_SAFE_PATHNAME(p, len, "require"))
3514 /* on Win32 stat is expensive (it does an open() and close() twice and
3515 a couple other IO calls), the open will fail with a dir on its own with
3516 errno EACCES, so only do a stat to separate a dir from a real EACCES
3517 caused by user perms */
3519 /* we use the value of errno later to see how stat() or open() failed.
3520 * We don't want it set if the stat succeeded but we still failed,
3521 * such as if the name exists, but is a directory */
3524 st_rc = PerlLIO_stat(p, &st);
3526 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3531 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3533 /* EACCES stops the INC search early in pp_require to implement
3534 feature RT #113422 */
3535 if(!retio && errno == EACCES) { /* exists but probably a directory */
3537 st_rc = PerlLIO_stat(p, &st);
3539 if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
3550 #ifndef PERL_DISABLE_PMC
3552 S_doopen_pm(pTHX_ SV *name)
3555 const char *p = SvPV_const(name, namelen);
3557 PERL_ARGS_ASSERT_DOOPEN_PM;
3559 /* check the name before trying for the .pmc name to avoid the
3560 * warning referring to the .pmc which the user probably doesn't
3561 * know or care about
3563 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3566 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3567 SV *const pmcsv = sv_newmortal();
3570 SvSetSV_nosteal(pmcsv,name);
3571 sv_catpvs(pmcsv, "c");
3573 pmcio = check_type_and_open(pmcsv);
3577 return check_type_and_open(name);
3580 # define doopen_pm(name) check_type_and_open(name)
3581 #endif /* !PERL_DISABLE_PMC */
3583 /* require doesn't search for absolute names, or when the name is
3584 explicitly relative the current directory */
3585 PERL_STATIC_INLINE bool
3586 S_path_is_searchable(const char *name)
3588 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3590 if (PERL_FILE_IS_ABSOLUTE(name)
3592 || (*name == '.' && ((name[1] == '/' ||
3593 (name[1] == '.' && name[2] == '/'))
3594 || (name[1] == '\\' ||
3595 ( name[1] == '.' && name[2] == '\\')))
3598 || (*name == '.' && (name[1] == '/' ||
3599 (name[1] == '.' && name[2] == '/')))
3610 /* also used for: pp_dofile() */
3622 int vms_unixname = 0;
3625 const char *tryname = NULL;
3627 const I32 gimme = GIMME_V;
3628 int filter_has_file = 0;
3629 PerlIO *tryrsfp = NULL;
3630 SV *filter_cache = NULL;
3631 SV *filter_state = NULL;
3632 SV *filter_sub = NULL;
3636 bool path_searchable;
3637 I32 old_savestack_ix;
3641 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3642 sv = sv_2mortal(new_version(sv));
3643 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3644 upg_version(PL_patchlevel, TRUE);
3645 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3646 if ( vcmp(sv,PL_patchlevel) <= 0 )
3647 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3648 SVfARG(sv_2mortal(vnormal(sv))),
3649 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3653 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3656 SV * const req = SvRV(sv);
3657 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3659 /* get the left hand term */
3660 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3662 first = SvIV(*av_fetch(lav,0,0));
3663 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3664 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3665 || av_tindex(lav) > 1 /* FP with > 3 digits */
3666 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3668 DIE(aTHX_ "Perl %"SVf" required--this is only "
3670 SVfARG(sv_2mortal(vnormal(req))),
3671 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3674 else { /* probably 'use 5.10' or 'use 5.8' */
3678 if (av_tindex(lav)>=1)
3679 second = SvIV(*av_fetch(lav,1,0));
3681 second /= second >= 600 ? 100 : 10;
3682 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3683 (int)first, (int)second);
3684 upg_version(hintsv, TRUE);
3686 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3687 "--this is only %"SVf", stopped",
3688 SVfARG(sv_2mortal(vnormal(req))),
3689 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3690 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3699 DIE(aTHX_ "Missing or undefined argument to require");
3700 name = SvPV_nomg_const(sv, len);
3701 if (!(name && len > 0 && *name))
3702 DIE(aTHX_ "Missing or undefined argument to require");
3704 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3705 DIE(aTHX_ "Can't locate %s: %s",
3706 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3707 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3710 TAINT_PROPER("require");
3712 path_searchable = path_is_searchable(name);
3715 /* The key in the %ENV hash is in the syntax of file passed as the argument
3716 * usually this is in UNIX format, but sometimes in VMS format, which
3717 * can result in a module being pulled in more than once.
3718 * To prevent this, the key must be stored in UNIX format if the VMS
3719 * name can be translated to UNIX.
3723 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3725 unixlen = strlen(unixname);
3731 /* if not VMS or VMS name can not be translated to UNIX, pass it
3734 unixname = (char *) name;
3737 if (PL_op->op_type == OP_REQUIRE) {
3738 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3739 unixname, unixlen, 0);
3741 if (*svp != &PL_sv_undef)
3744 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3745 "Compilation failed in require", unixname);
3749 LOADING_FILE_PROBE(unixname);
3751 /* prepare to compile file */
3753 if (!path_searchable) {
3754 /* At this point, name is SvPVX(sv) */
3756 tryrsfp = doopen_pm(sv);
3758 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3759 AV * const ar = GvAVn(PL_incgv);
3766 namesv = newSV_type(SVt_PV);
3767 for (i = 0; i <= AvFILL(ar); i++) {
3768 SV * const dirsv = *av_fetch(ar, i, TRUE);
3776 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3777 && !SvOBJECT(SvRV(loader)))
3779 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3783 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3784 PTR2UV(SvRV(dirsv)), name);
3785 tryname = SvPVX_const(namesv);
3788 if (SvPADTMP(nsv)) {
3789 nsv = sv_newmortal();
3790 SvSetSV_nosteal(nsv,sv);
3793 ENTER_with_name("call_INC");
3801 if (SvGMAGICAL(loader)) {
3802 SV *l = sv_newmortal();
3803 sv_setsv_nomg(l, loader);
3806 if (sv_isobject(loader))
3807 count = call_method("INC", G_ARRAY);
3809 count = call_sv(loader, G_ARRAY);
3819 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3820 && !isGV_with_GP(SvRV(arg))) {
3821 filter_cache = SvRV(arg);
3828 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3832 if (isGV_with_GP(arg)) {
3833 IO * const io = GvIO((const GV *)arg);
3838 tryrsfp = IoIFP(io);
3839 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3840 PerlIO_close(IoOFP(io));
3851 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3853 SvREFCNT_inc_simple_void_NN(filter_sub);
3856 filter_state = SP[i];
3857 SvREFCNT_inc_simple_void(filter_state);
3861 if (!tryrsfp && (filter_cache || filter_sub)) {
3862 tryrsfp = PerlIO_open(BIT_BUCKET,
3868 /* FREETMPS may free our filter_cache */
3869 SvREFCNT_inc_simple_void(filter_cache);
3873 LEAVE_with_name("call_INC");
3875 /* Now re-mortalize it. */
3876 sv_2mortal(filter_cache);
3878 /* Adjust file name if the hook has set an %INC entry.
3879 This needs to happen after the FREETMPS above. */
3880 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3882 tryname = SvPV_nolen_const(*svp);
3889 filter_has_file = 0;
3890 filter_cache = NULL;
3892 SvREFCNT_dec_NN(filter_state);
3893 filter_state = NULL;
3896 SvREFCNT_dec_NN(filter_sub);
3901 if (path_searchable) {
3906 dir = SvPV_nomg_const(dirsv, dirlen);
3912 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3916 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3919 sv_setpv(namesv, unixdir);
3920 sv_catpv(namesv, unixname);
3922 # ifdef __SYMBIAN32__
3923 if (PL_origfilename[0] &&
3924 PL_origfilename[1] == ':' &&
3925 !(dir[0] && dir[1] == ':'))
3926 Perl_sv_setpvf(aTHX_ namesv,
3931 Perl_sv_setpvf(aTHX_ namesv,
3935 /* The equivalent of
3936 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3937 but without the need to parse the format string, or
3938 call strlen on either pointer, and with the correct
3939 allocation up front. */
3941 char *tmp = SvGROW(namesv, dirlen + len + 2);
3943 memcpy(tmp, dir, dirlen);
3946 /* Avoid '<dir>//<file>' */
3947 if (!dirlen || *(tmp-1) != '/') {
3950 /* So SvCUR_set reports the correct length below */
3954 /* name came from an SV, so it will have a '\0' at the
3955 end that we can copy as part of this memcpy(). */
3956 memcpy(tmp, name, len + 1);
3958 SvCUR_set(namesv, dirlen + len + 1);
3963 TAINT_PROPER("require");
3964 tryname = SvPVX_const(namesv);
3965 tryrsfp = doopen_pm(namesv);
3967 if (tryname[0] == '.' && tryname[1] == '/') {
3969 while (*++tryname == '/') {}
3973 else if (errno == EMFILE || errno == EACCES) {
3974 /* no point in trying other paths if out of handles;
3975 * on the other hand, if we couldn't open one of the
3976 * files, then going on with the search could lead to
3977 * unexpected results; see perl #113422
3986 saved_errno = errno; /* sv_2mortal can realloc things */
3989 if (PL_op->op_type == OP_REQUIRE) {
3990 if(saved_errno == EMFILE || saved_errno == EACCES) {
3991 /* diag_listed_as: Can't locate %s */
3992 DIE(aTHX_ "Can't locate %s: %s: %s",
3993 name, tryname, Strerror(saved_errno));
3995 if (namesv) { /* did we lookup @INC? */
3996 AV * const ar = GvAVn(PL_incgv);
3998 SV *const msg = newSVpvs_flags("", SVs_TEMP);
3999 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4000 for (i = 0; i <= AvFILL(ar); i++) {
4001 sv_catpvs(inc, " ");
4002 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4004 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4005 const char *c, *e = name + len - 3;
4006 sv_catpv(msg, " (you may need to install the ");
4007 for (c = name; c < e; c++) {
4009 sv_catpvs(msg, "::");
4012 sv_catpvn(msg, c, 1);
4015 sv_catpv(msg, " module)");
4017 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4018 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4020 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4021 sv_catpv(msg, " (did you run h2ph?)");
4024 /* diag_listed_as: Can't locate %s */
4026 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4030 DIE(aTHX_ "Can't locate %s", name);
4037 SETERRNO(0, SS_NORMAL);
4039 /* Assume success here to prevent recursive requirement. */
4040 /* name is never assigned to again, so len is still strlen(name) */
4041 /* Check whether a hook in @INC has already filled %INC */
4043 (void)hv_store(GvHVn(PL_incgv),
4044 unixname, unixlen, newSVpv(tryname,0),0);
4046 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4048 (void)hv_store(GvHVn(PL_incgv),
4049 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4052 old_savestack_ix = PL_savestack_ix;
4053 SAVECOPFILE_FREE(&PL_compiling);
4054 CopFILE_set(&PL_compiling, tryname);
4055 lex_start(NULL, tryrsfp, 0);
4057 if (filter_sub || filter_cache) {
4058 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4059 than hanging another SV from it. In turn, filter_add() optionally
4060 takes the SV to use as the filter (or creates a new SV if passed
4061 NULL), so simply pass in whatever value filter_cache has. */
4062 SV * const fc = filter_cache ? newSV(0) : NULL;
4064 if (fc) sv_copypv(fc, filter_cache);
4065 datasv = filter_add(S_run_user_filter, fc);
4066 IoLINES(datasv) = filter_has_file;
4067 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4068 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4071 /* switch to eval mode */
4072 PUSHBLOCK(cx, CXt_EVAL, SP);
4074 cx->blk_eval.old_savestack_ix = old_savestack_ix;
4075 cx->blk_eval.retop = PL_op->op_next;
4077 SAVECOPLINE(&PL_compiling);
4078 CopLINE_set(&PL_compiling, 0);
4082 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4083 op = DOCATCH(PL_eval_start);
4085 op = PL_op->op_next;
4087 LOADED_FILE_PROBE(unixname);
4092 /* This is a op added to hold the hints hash for
4093 pp_entereval. The hash can be modified by the code
4094 being eval'ed, so we return a copy instead. */
4099 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4109 const I32 gimme = GIMME_V;
4110 const U32 was = PL_breakable_sub_gen;
4111 char tbuf[TYPE_DIGITS(long) + 12];
4112 bool saved_delete = FALSE;
4113 char *tmpbuf = tbuf;
4116 U32 seq, lex_flags = 0;
4117 HV *saved_hh = NULL;
4118 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4119 I32 old_savestack_ix;
4121 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4122 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4124 else if (PL_hints & HINT_LOCALIZE_HH || (
4125 PL_op->op_private & OPpEVAL_COPHH
4126 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4128 saved_hh = cop_hints_2hv(PL_curcop, 0);
4129 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4133 /* make sure we've got a plain PV (no overload etc) before testing
4134 * for taint. Making a copy here is probably overkill, but better
4135 * safe than sorry */
4137 const char * const p = SvPV_const(sv, len);
4139 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4140 lex_flags |= LEX_START_COPIED;
4142 if (bytes && SvUTF8(sv))
4143 SvPVbyte_force(sv, len);
4145 else if (bytes && SvUTF8(sv)) {
4146 /* Don't modify someone else's scalar */
4149 (void)sv_2mortal(sv);
4150 SvPVbyte_force(sv,len);
4151 lex_flags |= LEX_START_COPIED;
4154 TAINT_IF(SvTAINTED(sv));
4155 TAINT_PROPER("eval");
4157 old_savestack_ix = PL_savestack_ix;
4159 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4160 ? LEX_IGNORE_UTF8_HINTS
4161 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4165 /* switch to eval mode */
4167 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4168 SV * const temp_sv = sv_newmortal();
4169 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4170 (unsigned long)++PL_evalseq,
4171 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4172 tmpbuf = SvPVX(temp_sv);
4173 len = SvCUR(temp_sv);
4176 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4177 SAVECOPFILE_FREE(&PL_compiling);
4178 CopFILE_set(&PL_compiling, tmpbuf+2);
4179 SAVECOPLINE(&PL_compiling);
4180 CopLINE_set(&PL_compiling, 1);
4181 /* special case: an eval '' executed within the DB package gets lexically
4182 * placed in the first non-DB CV rather than the current CV - this
4183 * allows the debugger to execute code, find lexicals etc, in the
4184 * scope of the code being debugged. Passing &seq gets find_runcv
4185 * to do the dirty work for us */
4186 runcv = find_runcv(&seq);
4188 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4190 cx->blk_eval.old_savestack_ix = old_savestack_ix;
4191 cx->blk_eval.retop = PL_op->op_next;
4193 /* prepare to compile string */
4195 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4196 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4198 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4199 deleting the eval's FILEGV from the stash before gv_check() runs
4200 (i.e. before run-time proper). To work around the coredump that
4201 ensues, we always turn GvMULTI_on for any globals that were
4202 introduced within evals. See force_ident(). GSAR 96-10-12 */
4203 char *const safestr = savepvn(tmpbuf, len);
4204 SAVEDELETE(PL_defstash, safestr, len);
4205 saved_delete = TRUE;
4210 if (doeval(gimme, runcv, seq, saved_hh)) {
4211 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4212 ? PERLDB_LINE_OR_SAVESRC
4213 : PERLDB_SAVESRC_NOSUBS) {
4214 /* Retain the filegv we created. */
4215 } else if (!saved_delete) {
4216 char *const safestr = savepvn(tmpbuf, len);
4217 SAVEDELETE(PL_defstash, safestr, len);
4219 return DOCATCH(PL_eval_start);
4221 /* We have already left the scope set up earlier thanks to the LEAVE
4223 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4224 ? PERLDB_LINE_OR_SAVESRC
4225 : PERLDB_SAVESRC_INVALID) {
4226 /* Retain the filegv we created. */
4227 } else if (!saved_delete) {
4228 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4230 return PL_op->op_next;
4245 /* grab this value before POPEVAL restores old PL_in_eval */
4246 bool keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4251 namesv = cx->blk_eval.old_namesv;
4252 retop = cx->blk_eval.retop;
4253 evalcv = cx->blk_eval.cv;
4255 SP = leave_common((gimme == G_VOID) ? SP : newsp, SP, newsp,
4256 gimme, SVs_TEMP, FALSE);
4257 PL_curpm = newpm; /* Don't pop $1 et al till now */
4260 assert(CvDEPTH(evalcv) == 1);
4262 CvDEPTH(evalcv) = 0;
4264 if (optype == OP_REQUIRE &&
4265 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4267 /* Unassume the success we assumed earlier. */
4268 (void)hv_delete(GvHVn(PL_incgv),
4269 SvPVX_const(namesv),
4270 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4272 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
4273 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
4274 Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
4275 NOT_REACHED; /* NOTREACHED */
4276 /* die_unwind() did LEAVE, or we won't be here */
4279 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
4280 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
4288 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4289 close to the related Perl_create_eval_scope. */
4291 Perl_delete_eval_scope(pTHX)
4302 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
4303 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
4304 PERL_UNUSED_VAR(newsp);
4305 PERL_UNUSED_VAR(gimme);
4306 PERL_UNUSED_VAR(optype);
4309 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4310 also needed by Perl_fold_constants. */
4312 Perl_create_eval_scope(pTHX_ U32 flags)
4315 const I32 gimme = GIMME_V;
4317 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4319 cx->blk_eval.old_savestack_ix = PL_savestack_ix;
4321 PL_in_eval = EVAL_INEVAL;
4322 if (flags & G_KEEPERR)
4323 PL_in_eval |= EVAL_KEEPERR;
4326 if (flags & G_FAKINGEVAL) {
4327 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4334 PERL_CONTEXT * const cx = create_eval_scope(0);
4335 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4336 return DOCATCH(PL_op->op_next);
4351 retop = cx->blk_eval.retop;
4353 PERL_UNUSED_VAR(optype);
4355 SP = leave_common(newsp, SP, newsp, gimme,
4356 SVs_PADTMP|SVs_TEMP, FALSE);
4357 PL_curpm = newpm; /* Don't pop $1 et al till now */
4359 LEAVE_SCOPE(cx->blk_eval.old_savestack_ix);
4360 PL_tmps_floor = cx->blk_eval.old_tmpsfloor;
4370 const I32 gimme = GIMME_V;
4372 ENTER_with_name("given");
4375 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4379 PUSHBLOCK(cx, CXt_GIVEN, SP);
4392 PERL_UNUSED_CONTEXT;
4395 assert(CxTYPE(cx) == CXt_GIVEN);
4397 SP = leave_common(newsp, SP, newsp, gimme,
4398 SVs_PADTMP|SVs_TEMP, FALSE);
4399 PL_curpm = newpm; /* Don't pop $1 et al till now */
4401 LEAVE_with_name("given");
4405 /* Helper routines used by pp_smartmatch */
4407 S_make_matcher(pTHX_ REGEXP *re)
4409 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4411 PERL_ARGS_ASSERT_MAKE_MATCHER;
4413 PM_SETRE(matcher, ReREFCNT_inc(re));
4415 SAVEFREEOP((OP *) matcher);
4416 ENTER_with_name("matcher"); SAVETMPS;
4422 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4427 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4429 PL_op = (OP *) matcher;
4432 (void) Perl_pp_match(aTHX);
4434 result = SvTRUEx(POPs);
4441 S_destroy_matcher(pTHX_ PMOP *matcher)
4443 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4444 PERL_UNUSED_ARG(matcher);
4447 LEAVE_with_name("matcher");
4450 /* Do a smart match */
4453 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4454 return do_smartmatch(NULL, NULL, 0);
4457 /* This version of do_smartmatch() implements the
4458 * table of smart matches that is found in perlsyn.
4461 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4465 bool object_on_left = FALSE;
4466 SV *e = TOPs; /* e is for 'expression' */
4467 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4469 /* Take care only to invoke mg_get() once for each argument.
4470 * Currently we do this by copying the SV if it's magical. */
4472 if (!copied && SvGMAGICAL(d))
4473 d = sv_mortalcopy(d);
4480 e = sv_mortalcopy(e);
4482 /* First of all, handle overload magic of the rightmost argument */
4485 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4486 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4488 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4495 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4498 SP -= 2; /* Pop the values */
4503 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4510 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4511 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4512 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4514 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4515 object_on_left = TRUE;
4518 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4520 if (object_on_left) {
4521 goto sm_any_sub; /* Treat objects like scalars */
4523 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4524 /* Test sub truth for each key */
4526 bool andedresults = TRUE;
4527 HV *hv = (HV*) SvRV(d);
4528 I32 numkeys = hv_iterinit(hv);
4529 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4532 while ( (he = hv_iternext(hv)) ) {
4533 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4534 ENTER_with_name("smartmatch_hash_key_test");
4537 PUSHs(hv_iterkeysv(he));
4539 c = call_sv(e, G_SCALAR);
4542 andedresults = FALSE;
4544 andedresults = SvTRUEx(POPs) && andedresults;
4546 LEAVE_with_name("smartmatch_hash_key_test");
4553 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4554 /* Test sub truth for each element */
4556 bool andedresults = TRUE;
4557 AV *av = (AV*) SvRV(d);
4558 const I32 len = av_tindex(av);
4559 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4562 for (i = 0; i <= len; ++i) {
4563 SV * const * const svp = av_fetch(av, i, FALSE);
4564 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4565 ENTER_with_name("smartmatch_array_elem_test");
4571 c = call_sv(e, G_SCALAR);
4574 andedresults = FALSE;
4576 andedresults = SvTRUEx(POPs) && andedresults;
4578 LEAVE_with_name("smartmatch_array_elem_test");
4587 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4588 ENTER_with_name("smartmatch_coderef");
4593 c = call_sv(e, G_SCALAR);
4597 else if (SvTEMP(TOPs))
4598 SvREFCNT_inc_void(TOPs);
4600 LEAVE_with_name("smartmatch_coderef");
4605 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4606 if (object_on_left) {
4607 goto sm_any_hash; /* Treat objects like scalars */
4609 else if (!SvOK(d)) {
4610 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4613 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4614 /* Check that the key-sets are identical */
4616 HV *other_hv = MUTABLE_HV(SvRV(d));
4619 U32 this_key_count = 0,
4620 other_key_count = 0;
4621 HV *hv = MUTABLE_HV(SvRV(e));
4623 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4624 /* Tied hashes don't know how many keys they have. */
4625 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4626 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4630 HV * const temp = other_hv;
4636 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4640 /* The hashes have the same number of keys, so it suffices
4641 to check that one is a subset of the other. */
4642 (void) hv_iterinit(hv);
4643 while ( (he = hv_iternext(hv)) ) {
4644 SV *key = hv_iterkeysv(he);
4646 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4649 if(!hv_exists_ent(other_hv, key, 0)) {
4650 (void) hv_iterinit(hv); /* reset iterator */
4656 (void) hv_iterinit(other_hv);
4657 while ( hv_iternext(other_hv) )
4661 other_key_count = HvUSEDKEYS(other_hv);
4663 if (this_key_count != other_key_count)
4668 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4669 AV * const other_av = MUTABLE_AV(SvRV(d));
4670 const SSize_t other_len = av_tindex(other_av) + 1;
4672 HV *hv = MUTABLE_HV(SvRV(e));
4674 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4675 for (i = 0; i < other_len; ++i) {
4676 SV ** const svp = av_fetch(other_av, i, FALSE);
4677 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4678 if (svp) { /* ??? When can this not happen? */
4679 if (hv_exists_ent(hv, *svp, 0))
4685 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4686 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4689 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4691 HV *hv = MUTABLE_HV(SvRV(e));
4693 (void) hv_iterinit(hv);
4694 while ( (he = hv_iternext(hv)) ) {
4695 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4697 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4699 (void) hv_iterinit(hv);
4700 destroy_matcher(matcher);
4705 destroy_matcher(matcher);
4711 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4712 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4719 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4720 if (object_on_left) {
4721 goto sm_any_array; /* Treat objects like scalars */
4723 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4724 AV * const other_av = MUTABLE_AV(SvRV(e));
4725 const SSize_t other_len = av_tindex(other_av) + 1;
4728 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4729 for (i = 0; i < other_len; ++i) {
4730 SV ** const svp = av_fetch(other_av, i, FALSE);
4732 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4733 if (svp) { /* ??? When can this not happen? */
4734 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4740 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4741 AV *other_av = MUTABLE_AV(SvRV(d));
4742 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4743 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4747 const SSize_t other_len = av_tindex(other_av);
4749 if (NULL == seen_this) {
4750 seen_this = newHV();
4751 (void) sv_2mortal(MUTABLE_SV(seen_this));
4753 if (NULL == seen_other) {
4754 seen_other = newHV();
4755 (void) sv_2mortal(MUTABLE_SV(seen_other));
4757 for(i = 0; i <= other_len; ++i) {
4758 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4759 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4761 if (!this_elem || !other_elem) {
4762 if ((this_elem && SvOK(*this_elem))
4763 || (other_elem && SvOK(*other_elem)))
4766 else if (hv_exists_ent(seen_this,
4767 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4768 hv_exists_ent(seen_other,
4769 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4771 if (*this_elem != *other_elem)
4775 (void)hv_store_ent(seen_this,
4776 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4778 (void)hv_store_ent(seen_other,
4779 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4785 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4786 (void) do_smartmatch(seen_this, seen_other, 0);
4788 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4797 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4798 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4801 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4802 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4805 for(i = 0; i <= this_len; ++i) {
4806 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4807 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4809 if (svp && matcher_matches_sv(matcher, *svp)) {
4811 destroy_matcher(matcher);
4816 destroy_matcher(matcher);
4820 else if (!SvOK(d)) {
4821 /* undef ~~ array */
4822 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4825 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4826 for (i = 0; i <= this_len; ++i) {
4827 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4828 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4829 if (!svp || !SvOK(*svp))
4838 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4840 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4841 for (i = 0; i <= this_len; ++i) {
4842 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4849 /* infinite recursion isn't supposed to happen here */
4850 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4851 (void) do_smartmatch(NULL, NULL, 1);
4853 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4862 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4863 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4864 SV *t = d; d = e; e = t;
4865 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4868 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4869 SV *t = d; d = e; e = t;
4870 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4871 goto sm_regex_array;
4874 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4877 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4879 result = matcher_matches_sv(matcher, d);
4881 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
4882 destroy_matcher(matcher);
4887 /* See if there is overload magic on left */
4888 else if (object_on_left && SvAMAGIC(d)) {
4890 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4891 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4894 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4902 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4905 else if (!SvOK(d)) {
4906 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4907 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4912 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4913 DEBUG_M(if (SvNIOK(e))
4914 Perl_deb(aTHX_ " applying rule Any-Num\n");
4916 Perl_deb(aTHX_ " applying rule Num-numish\n");
4918 /* numeric comparison */
4921 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4922 (void) Perl_pp_i_eq(aTHX);
4924 (void) Perl_pp_eq(aTHX);
4932 /* As a last resort, use string comparison */
4933 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4936 return Perl_pp_seq(aTHX);
4943 const I32 gimme = GIMME_V;
4945 /* This is essentially an optimization: if the match
4946 fails, we don't want to push a context and then
4947 pop it again right away, so we skip straight
4948 to the op that follows the leavewhen.
4949 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4951 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4952 RETURNOP(cLOGOP->op_other->op_next);
4954 ENTER_with_name("when");
4957 PUSHBLOCK(cx, CXt_WHEN, SP);
4972 cxix = dopoptogiven(cxstack_ix);
4974 /* diag_listed_as: Can't "when" outside a topicalizer */
4975 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4976 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
4979 assert(CxTYPE(cx) == CXt_WHEN);
4981 SP = leave_common(newsp, SP, newsp, gimme,
4982 SVs_PADTMP|SVs_TEMP, FALSE);
4983 PL_curpm = newpm; /* pop $1 et al */
4985 LEAVE_with_name("when");
4987 if (cxix < cxstack_ix)
4990 cx = &cxstack[cxix];
4992 if (CxFOREACH(cx)) {
4993 /* clear off anything above the scope we're re-entering */
4994 I32 inner = PL_scopestack_ix;
4997 if (PL_scopestack_ix < inner)
4998 leave_scope(PL_scopestack[PL_scopestack_ix]);
4999 PL_curcop = cx->blk_oldcop;
5002 return cx->blk_loop.my_op->op_nextop;
5006 RETURNOP(cx->blk_givwhen.leave_op);
5019 PERL_UNUSED_VAR(gimme);
5021 cxix = dopoptowhen(cxstack_ix);
5023 DIE(aTHX_ "Can't \"continue\" outside a when block");
5025 if (cxix < cxstack_ix)
5029 assert(CxTYPE(cx) == CXt_WHEN);
5032 PL_curpm = newpm; /* pop $1 et al */
5034 LEAVE_with_name("when");
5035 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5043 cxix = dopoptogiven(cxstack_ix);
5045 DIE(aTHX_ "Can't \"break\" outside a given block");
5047 cx = &cxstack[cxix];
5049 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5051 if (cxix < cxstack_ix)
5054 /* Restore the sp at the time we entered the given block */
5057 return cx->blk_givwhen.leave_op;
5061 S_doparseform(pTHX_ SV *sv)
5064 char *s = SvPV(sv, len);
5066 char *base = NULL; /* start of current field */
5067 I32 skipspaces = 0; /* number of contiguous spaces seen */
5068 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5069 bool repeat = FALSE; /* ~~ seen on this line */
5070 bool postspace = FALSE; /* a text field may need right padding */
5073 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5075 bool ischop; /* it's a ^ rather than a @ */
5076 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5077 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5081 PERL_ARGS_ASSERT_DOPARSEFORM;
5084 Perl_croak(aTHX_ "Null picture in formline");
5086 if (SvTYPE(sv) >= SVt_PVMG) {
5087 /* This might, of course, still return NULL. */
5088 mg = mg_find(sv, PERL_MAGIC_fm);
5090 sv_upgrade(sv, SVt_PVMG);
5094 /* still the same as previously-compiled string? */
5095 SV *old = mg->mg_obj;
5096 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5097 && len == SvCUR(old)
5098 && strnEQ(SvPVX(old), SvPVX(sv), len)
5100 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5104 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5105 Safefree(mg->mg_ptr);
5111 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5112 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5115 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5116 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5120 /* estimate the buffer size needed */
5121 for (base = s; s <= send; s++) {
5122 if (*s == '\n' || *s == '@' || *s == '^')
5128 Newx(fops, maxops, U32);
5133 *fpc++ = FF_LINEMARK;
5134 noblank = repeat = FALSE;
5152 case ' ': case '\t':
5159 } /* else FALL THROUGH */
5167 *fpc++ = FF_LITERAL;
5175 *fpc++ = (U32)skipspaces;
5179 *fpc++ = FF_NEWLINE;
5183 arg = fpc - linepc + 1;
5190 *fpc++ = FF_LINEMARK;
5191 noblank = repeat = FALSE;
5200 ischop = s[-1] == '^';
5206 arg = (s - base) - 1;
5208 *fpc++ = FF_LITERAL;
5214 if (*s == '*') { /* @* or ^* */
5216 *fpc++ = 2; /* skip the @* or ^* */
5218 *fpc++ = FF_LINESNGL;
5221 *fpc++ = FF_LINEGLOB;
5223 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5224 arg = ischop ? FORM_NUM_BLANK : 0;
5229 const char * const f = ++s;
5232 arg |= FORM_NUM_POINT + (s - f);
5234 *fpc++ = s - base; /* fieldsize for FETCH */
5235 *fpc++ = FF_DECIMAL;
5237 unchopnum |= ! ischop;
5239 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5240 arg = ischop ? FORM_NUM_BLANK : 0;
5242 s++; /* skip the '0' first */
5246 const char * const f = ++s;
5249 arg |= FORM_NUM_POINT + (s - f);
5251 *fpc++ = s - base; /* fieldsize for FETCH */
5252 *fpc++ = FF_0DECIMAL;
5254 unchopnum |= ! ischop;
5256 else { /* text field */
5258 bool ismore = FALSE;
5261 while (*++s == '>') ;
5262 prespace = FF_SPACE;
5264 else if (*s == '|') {
5265 while (*++s == '|') ;
5266 prespace = FF_HALFSPACE;
5271 while (*++s == '<') ;
5274 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5278 *fpc++ = s - base; /* fieldsize for FETCH */
5280 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5283 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5297 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5300 mg->mg_ptr = (char *) fops;
5301 mg->mg_len = arg * sizeof(U32);
5302 mg->mg_obj = sv_copy;
5303 mg->mg_flags |= MGf_REFCOUNTED;
5305 if (unchopnum && repeat)
5306 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5313 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5315 /* Can value be printed in fldsize chars, using %*.*f ? */
5319 int intsize = fldsize - (value < 0 ? 1 : 0);
5321 if (frcsize & FORM_NUM_POINT)
5323 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5326 while (intsize--) pwr *= 10.0;
5327 while (frcsize--) eps /= 10.0;
5330 if (value + eps >= pwr)
5333 if (value - eps <= -pwr)
5340 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5342 SV * const datasv = FILTER_DATA(idx);
5343 const int filter_has_file = IoLINES(datasv);
5344 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5345 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5350 char *prune_from = NULL;
5351 bool read_from_cache = FALSE;
5355 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5357 assert(maxlen >= 0);
5360 /* I was having segfault trouble under Linux 2.2.5 after a
5361 parse error occurred. (Had to hack around it with a test
5362 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5363 not sure where the trouble is yet. XXX */
5366 SV *const cache = datasv;
5369 const char *cache_p = SvPV(cache, cache_len);
5373 /* Running in block mode and we have some cached data already.
5375 if (cache_len >= umaxlen) {
5376 /* In fact, so much data we don't even need to call
5381 const char *const first_nl =
5382 (const char *)memchr(cache_p, '\n', cache_len);
5384 take = first_nl + 1 - cache_p;
5388 sv_catpvn(buf_sv, cache_p, take);
5389 sv_chop(cache, cache_p + take);
5390 /* Definitely not EOF */
5394 sv_catsv(buf_sv, cache);
5396 umaxlen -= cache_len;
5399 read_from_cache = TRUE;
5403 /* Filter API says that the filter appends to the contents of the buffer.
5404 Usually the buffer is "", so the details don't matter. But if it's not,
5405 then clearly what it contains is already filtered by this filter, so we
5406 don't want to pass it in a second time.
5407 I'm going to use a mortal in case the upstream filter croaks. */
5408 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5409 ? sv_newmortal() : buf_sv;
5410 SvUPGRADE(upstream, SVt_PV);
5412 if (filter_has_file) {
5413 status = FILTER_READ(idx+1, upstream, 0);
5416 if (filter_sub && status >= 0) {
5420 ENTER_with_name("call_filter_sub");
5425 DEFSV_set(upstream);
5429 PUSHs(filter_state);
5432 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5442 SV * const errsv = ERRSV;
5443 if (SvTRUE_NN(errsv))
5444 err = newSVsv(errsv);
5450 LEAVE_with_name("call_filter_sub");
5453 if (SvGMAGICAL(upstream)) {
5455 if (upstream == buf_sv) mg_free(buf_sv);
5457 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5458 if(!err && SvOK(upstream)) {
5459 got_p = SvPV_nomg(upstream, got_len);
5461 if (got_len > umaxlen) {
5462 prune_from = got_p + umaxlen;
5465 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5466 if (first_nl && first_nl + 1 < got_p + got_len) {
5467 /* There's a second line here... */
5468 prune_from = first_nl + 1;
5472 if (!err && prune_from) {
5473 /* Oh. Too long. Stuff some in our cache. */
5474 STRLEN cached_len = got_p + got_len - prune_from;
5475 SV *const cache = datasv;
5478 /* Cache should be empty. */
5479 assert(!SvCUR(cache));
5482 sv_setpvn(cache, prune_from, cached_len);
5483 /* If you ask for block mode, you may well split UTF-8 characters.
5484 "If it breaks, you get to keep both parts"
5485 (Your code is broken if you don't put them back together again
5486 before something notices.) */
5487 if (SvUTF8(upstream)) {
5490 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5492 /* Cannot just use sv_setpvn, as that could free the buffer
5493 before we have a chance to assign it. */
5494 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5495 got_len - cached_len);
5497 /* Can't yet be EOF */
5502 /* If they are at EOF but buf_sv has something in it, then they may never
5503 have touched the SV upstream, so it may be undefined. If we naively
5504 concatenate it then we get a warning about use of uninitialised value.
5506 if (!err && upstream != buf_sv &&
5508 sv_catsv_nomg(buf_sv, upstream);
5510 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5513 IoLINES(datasv) = 0;
5515 SvREFCNT_dec(filter_state);
5516 IoTOP_GV(datasv) = NULL;
5519 SvREFCNT_dec(filter_sub);
5520 IoBOTTOM_GV(datasv) = NULL;
5522 filter_del(S_run_user_filter);
5528 if (status == 0 && read_from_cache) {
5529 /* If we read some data from the cache (and by getting here it implies
5530 that we emptied the cache) then we aren't yet at EOF, and mustn't
5531 report that to our caller. */
5538 * ex: set ts=8 sts=4 sw=4 et: