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 RUN_PP_CATCHABLY(thispp) \
38 STMT_START { if (CATCH_GET) return docatch(thispp); } STMT_END
40 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
78 PMOP *pm = (PMOP*)cLOGOP->op_other;
83 const regexp_engine *eng;
84 bool is_bare_re= FALSE;
86 if (PL_op->op_flags & OPf_STACKED) {
96 /* prevent recompiling under /o and ithreads. */
97 #if defined(USE_ITHREADS)
98 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
105 assert (re != (REGEXP*) &PL_sv_undef);
106 eng = re ? RX_ENGINE(re) : current_re_engine();
108 new_re = (eng->op_comp
110 : &Perl_re_op_compile
111 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
113 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
115 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
117 if (pm->op_pmflags & PMf_HAS_CV)
118 ReANY(new_re)->qr_anoncv
119 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
123 /* The match's LHS's get-magic might need to access this op's regexp
124 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
125 get-magic now before we replace the regexp. Hopefully this hack can
126 be replaced with the approach described at
127 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
129 if (pm->op_type == OP_MATCH) {
131 const bool was_tainted = TAINT_get;
132 if (pm->op_flags & OPf_STACKED)
134 else if (pm->op_targ)
135 lhs = PAD_SV(pm->op_targ);
138 /* Restore the previous value of PL_tainted (which may have been
139 modified by get-magic), to avoid incorrectly setting the
140 RXf_TAINTED flag with RX_TAINT_on further down. */
141 TAINT_set(was_tainted);
142 #ifdef NO_TAINT_SUPPORT
143 PERL_UNUSED_VAR(was_tainted);
146 tmp = reg_temp_copy(NULL, new_re);
147 ReREFCNT_dec(new_re);
153 PM_SETRE(pm, new_re);
157 assert(TAINTING_get || !TAINT_get);
159 SvTAINTED_on((SV*)new_re);
163 /* handle the empty pattern */
164 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm) {
165 if (PL_curpm == PL_reg_curpm) {
166 if (PL_curpm_under) {
167 if (PL_curpm_under == PL_reg_curpm) {
168 Perl_croak(aTHX_ "Infinite recursion via empty pattern");
178 #if !defined(USE_ITHREADS)
179 /* can't change the optree at runtime either */
180 /* PMf_KEEP is handled differently under threads to avoid these problems */
181 if (pm->op_pmflags & PMf_KEEP) {
182 cLOGOP->op_first->op_next = PL_op->op_next;
194 PERL_CONTEXT *cx = CX_CUR();
195 PMOP * const pm = (PMOP*) cLOGOP->op_other;
196 SV * const dstr = cx->sb_dstr;
199 char *orig = cx->sb_orig;
200 REGEXP * const rx = cx->sb_rx;
202 REGEXP *old = PM_GETRE(pm);
209 PM_SETRE(pm,ReREFCNT_inc(rx));
212 rxres_restore(&cx->sb_rxres, rx);
214 if (cx->sb_iters++) {
215 const SSize_t saviters = cx->sb_iters;
216 if (cx->sb_iters > cx->sb_maxiters)
217 DIE(aTHX_ "Substitution loop");
219 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
221 /* See "how taint works" above pp_subst() */
223 cx->sb_rxtainted |= SUBST_TAINT_REPL;
224 sv_catsv_nomg(dstr, POPs);
225 if (CxONCE(cx) || s < orig ||
226 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
227 (s == m), cx->sb_targ, NULL,
228 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
230 SV *targ = cx->sb_targ;
232 assert(cx->sb_strend >= s);
233 if(cx->sb_strend > s) {
234 if (DO_UTF8(dstr) && !SvUTF8(targ))
235 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
237 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
239 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
240 cx->sb_rxtainted |= SUBST_TAINT_PAT;
242 if (pm->op_pmflags & PMf_NONDESTRUCT) {
244 /* From here on down we're using the copy, and leaving the
245 original untouched. */
249 SV_CHECK_THINKFIRST_COW_DROP(targ);
250 if (isGV(targ)) Perl_croak_no_modify();
252 SvPV_set(targ, SvPVX(dstr));
253 SvCUR_set(targ, SvCUR(dstr));
254 SvLEN_set(targ, SvLEN(dstr));
257 SvPV_set(dstr, NULL);
260 mPUSHi(saviters - 1);
262 (void)SvPOK_only_UTF8(targ);
265 /* update the taint state of various various variables in
266 * preparation for final exit.
267 * See "how taint works" above pp_subst() */
269 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
270 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
271 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
273 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
275 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
276 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
278 SvTAINTED_on(TOPs); /* taint return value */
279 /* needed for mg_set below */
281 cBOOL(cx->sb_rxtainted &
282 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
286 /* PL_tainted must be correctly set for this mg_set */
295 RETURNOP(pm->op_next);
296 NOT_REACHED; /* NOTREACHED */
298 cx->sb_iters = saviters;
300 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
303 assert(!RX_SUBOFFSET(rx));
304 cx->sb_orig = orig = RX_SUBBEG(rx);
306 cx->sb_strend = s + (cx->sb_strend - m);
308 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
310 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
311 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
313 sv_catpvn_nomg(dstr, s, m-s);
315 cx->sb_s = RX_OFFS(rx)[0].end + orig;
316 { /* Update the pos() information. */
318 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
321 /* the string being matched against may no longer be a string,
322 * e.g. $_=0; s/.../$_++/ge */
325 SvPV_force_nomg_nolen(sv);
327 if (!(mg = mg_find_mglob(sv))) {
328 mg = sv_magicext_mglob(sv);
330 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
333 (void)ReREFCNT_inc(rx);
334 /* update the taint state of various various variables in preparation
335 * for calling the code block.
336 * See "how taint works" above pp_subst() */
338 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
339 cx->sb_rxtainted |= SUBST_TAINT_PAT;
341 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
342 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
343 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
345 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
347 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
348 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
349 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
350 ? cx->sb_dstr : cx->sb_targ);
353 rxres_save(&cx->sb_rxres, rx);
355 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
359 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
364 PERL_ARGS_ASSERT_RXRES_SAVE;
367 if (!p || p[1] < RX_NPARENS(rx)) {
369 i = 7 + (RX_NPARENS(rx)+1) * 2;
371 i = 6 + (RX_NPARENS(rx)+1) * 2;
380 /* what (if anything) to free on croak */
381 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
382 RX_MATCH_COPIED_off(rx);
383 *p++ = RX_NPARENS(rx);
386 *p++ = PTR2UV(RX_SAVED_COPY(rx));
387 RX_SAVED_COPY(rx) = NULL;
390 *p++ = PTR2UV(RX_SUBBEG(rx));
391 *p++ = (UV)RX_SUBLEN(rx);
392 *p++ = (UV)RX_SUBOFFSET(rx);
393 *p++ = (UV)RX_SUBCOFFSET(rx);
394 for (i = 0; i <= RX_NPARENS(rx); ++i) {
395 *p++ = (UV)RX_OFFS(rx)[i].start;
396 *p++ = (UV)RX_OFFS(rx)[i].end;
401 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
406 PERL_ARGS_ASSERT_RXRES_RESTORE;
409 RX_MATCH_COPY_FREE(rx);
410 RX_MATCH_COPIED_set(rx, *p);
412 RX_NPARENS(rx) = *p++;
415 if (RX_SAVED_COPY(rx))
416 SvREFCNT_dec (RX_SAVED_COPY(rx));
417 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
421 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
422 RX_SUBLEN(rx) = (I32)(*p++);
423 RX_SUBOFFSET(rx) = (I32)*p++;
424 RX_SUBCOFFSET(rx) = (I32)*p++;
425 for (i = 0; i <= RX_NPARENS(rx); ++i) {
426 RX_OFFS(rx)[i].start = (I32)(*p++);
427 RX_OFFS(rx)[i].end = (I32)(*p++);
432 S_rxres_free(pTHX_ void **rsp)
434 UV * const p = (UV*)*rsp;
436 PERL_ARGS_ASSERT_RXRES_FREE;
440 void *tmp = INT2PTR(char*,*p);
443 U32 i = 9 + p[1] * 2;
445 U32 i = 8 + p[1] * 2;
450 SvREFCNT_dec (INT2PTR(SV*,p[2]));
453 PoisonFree(p, i, sizeof(UV));
462 #define FORM_NUM_BLANK (1<<30)
463 #define FORM_NUM_POINT (1<<29)
467 dSP; dMARK; dORIGMARK;
468 SV * const tmpForm = *++MARK;
469 SV *formsv; /* contains text of original format */
470 U32 *fpc; /* format ops program counter */
471 char *t; /* current append position in target string */
472 const char *f; /* current position in format string */
474 SV *sv = NULL; /* current item */
475 const char *item = NULL;/* string value of current item */
476 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
477 I32 itembytes = 0; /* as itemsize, but length in bytes */
478 I32 fieldsize = 0; /* width of current field */
479 I32 lines = 0; /* number of lines that have been output */
480 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
481 const char *chophere = NULL; /* where to chop current item */
482 STRLEN linemark = 0; /* pos of start of line in output */
484 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
485 STRLEN len; /* length of current sv */
486 STRLEN linemax; /* estimate of output size in bytes */
487 bool item_is_utf8 = FALSE;
488 bool targ_is_utf8 = FALSE;
491 U8 *source; /* source of bytes to append */
492 STRLEN to_copy; /* how may bytes to append */
493 char trans; /* what chars to translate */
494 bool copied_form = FALSE; /* have we duplicated the form? */
496 mg = doparseform(tmpForm);
498 fpc = (U32*)mg->mg_ptr;
499 /* the actual string the format was compiled from.
500 * with overload etc, this may not match tmpForm */
504 SvPV_force(PL_formtarget, len);
505 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
506 SvTAINTED_on(PL_formtarget);
507 if (DO_UTF8(PL_formtarget))
509 /* this is an initial estimate of how much output buffer space
510 * to allocate. It may be exceeded later */
511 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
512 t = SvGROW(PL_formtarget, len + linemax + 1);
513 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
515 f = SvPV_const(formsv, len);
519 const char *name = "???";
522 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
523 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
524 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
525 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
526 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
528 case FF_CHECKNL: name = "CHECKNL"; break;
529 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
530 case FF_SPACE: name = "SPACE"; break;
531 case FF_HALFSPACE: name = "HALFSPACE"; break;
532 case FF_ITEM: name = "ITEM"; break;
533 case FF_CHOP: name = "CHOP"; break;
534 case FF_LINEGLOB: name = "LINEGLOB"; break;
535 case FF_NEWLINE: name = "NEWLINE"; break;
536 case FF_MORE: name = "MORE"; break;
537 case FF_LINEMARK: name = "LINEMARK"; break;
538 case FF_END: name = "END"; break;
539 case FF_0DECIMAL: name = "0DECIMAL"; break;
540 case FF_LINESNGL: name = "LINESNGL"; break;
543 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
545 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
548 case FF_LINEMARK: /* start (or end) of a line */
549 linemark = t - SvPVX(PL_formtarget);
554 case FF_LITERAL: /* append <arg> literal chars */
559 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
562 case FF_SKIP: /* skip <arg> chars in format */
566 case FF_FETCH: /* get next item and set field size to <arg> */
575 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
578 SvTAINTED_on(PL_formtarget);
581 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
583 const char *s = item = SvPV_const(sv, len);
584 const char *send = s + len;
587 item_is_utf8 = DO_UTF8(sv);
599 if (itemsize == fieldsize)
602 itembytes = s - item;
607 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
609 const char *s = item = SvPV_const(sv, len);
610 const char *send = s + len;
614 item_is_utf8 = DO_UTF8(sv);
616 /* look for a legal split position */
624 /* provisional split point */
628 /* we delay testing fieldsize until after we've
629 * processed the possible split char directly
630 * following the last field char; so if fieldsize=3
631 * and item="a b cdef", we consume "a b", not "a".
632 * Ditto further down.
634 if (size == fieldsize)
638 if (strchr(PL_chopset, *s)) {
639 /* provisional split point */
640 /* for a non-space split char, we include
641 * the split char; hence the '+1' */
645 if (size == fieldsize)
657 if (!chophere || s == send) {
661 itembytes = chophere - item;
666 case FF_SPACE: /* append padding space (diff of field, item size) */
667 arg = fieldsize - itemsize;
675 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
676 arg = fieldsize - itemsize;
685 case FF_ITEM: /* append a text item, while blanking ctrl chars */
691 case FF_CHOP: /* (for ^*) chop the current item */
692 if (sv != &PL_sv_no) {
693 const char *s = chophere;
695 ((sv == tmpForm || SvSMAGICAL(sv))
696 || (SvGMAGICAL(tmpForm) && !sv_only_taint_gmagic(tmpForm))) ) {
697 /* sv and tmpForm are either the same SV, or magic might allow modification
698 of tmpForm when sv is modified, so copy */
699 SV *newformsv = sv_mortalcopy(formsv);
702 f = SvPV_nolen(newformsv) + (f - SvPV_nolen(formsv));
703 Newx(new_compiled, mg->mg_len / sizeof(U32), U32);
704 memcpy(new_compiled, mg->mg_ptr, mg->mg_len);
705 SAVEFREEPV(new_compiled);
706 fpc = new_compiled + (fpc - (U32*)mg->mg_ptr);
718 /* tied, overloaded or similar strangeness.
719 * Do it the hard way */
720 sv_setpvn(sv, s, len - (s-item));
725 case FF_LINESNGL: /* process ^* */
729 case FF_LINEGLOB: /* process @* */
731 const bool oneline = fpc[-1] == FF_LINESNGL;
732 const char *s = item = SvPV_const(sv, len);
733 const char *const send = s + len;
735 item_is_utf8 = DO_UTF8(sv);
746 to_copy = s - item - 1;
760 /* append to_copy bytes from source to PL_formstring.
761 * item_is_utf8 implies source is utf8.
762 * if trans, translate certain characters during the copy */
767 SvCUR_set(PL_formtarget,
768 t - SvPVX_const(PL_formtarget));
770 if (targ_is_utf8 && !item_is_utf8) {
771 source = tmp = bytes_to_utf8(source, &to_copy);
774 if (item_is_utf8 && !targ_is_utf8) {
776 /* Upgrade targ to UTF8, and then we reduce it to
777 a problem we have a simple solution for.
778 Don't need get magic. */
779 sv_utf8_upgrade_nomg(PL_formtarget);
781 /* re-calculate linemark */
782 s = (U8*)SvPVX(PL_formtarget);
783 /* the bytes we initially allocated to append the
784 * whole line may have been gobbled up during the
785 * upgrade, so allocate a whole new line's worth
790 linemark = s - (U8*)SvPVX(PL_formtarget);
792 /* Easy. They agree. */
793 assert (item_is_utf8 == targ_is_utf8);
796 /* @* and ^* are the only things that can exceed
797 * the linemax, so grow by the output size, plus
798 * a whole new form's worth in case of any further
800 grow = linemax + to_copy;
802 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
803 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
805 Copy(source, t, to_copy, char);
807 /* blank out ~ or control chars, depending on trans.
808 * works on bytes not chars, so relies on not
809 * matching utf8 continuation bytes */
811 U8 *send = s + to_copy;
814 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
821 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
827 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
830 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
833 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
836 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
838 /* If the field is marked with ^ and the value is undefined,
840 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
848 /* overflow evidence */
849 if (num_overflow(value, fieldsize, arg)) {
855 /* Formats aren't yet marked for locales, so assume "yes". */
857 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
859 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
860 STORE_LC_NUMERIC_SET_TO_NEEDED();
861 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
864 const char* qfmt = quadmath_format_single(fmt);
867 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
868 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
870 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
875 /* we generate fmt ourselves so it is safe */
876 GCC_DIAG_IGNORE(-Wformat-nonliteral);
877 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
880 PERL_MY_SNPRINTF_POST_GUARD(len, max);
881 RESTORE_LC_NUMERIC();
886 case FF_NEWLINE: /* delete trailing spaces, then append \n */
888 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
893 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
896 if (arg) { /* repeat until fields exhausted? */
902 t = SvPVX(PL_formtarget) + linemark;
907 case FF_MORE: /* replace long end of string with '...' */
909 const char *s = chophere;
910 const char *send = item + len;
912 while (isSPACE(*s) && (s < send))
917 arg = fieldsize - itemsize;
924 if (strnEQ(s1," ",3)) {
925 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
935 case FF_END: /* tidy up, then return */
937 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
939 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
941 SvUTF8_on(PL_formtarget);
942 FmLINES(PL_formtarget) += lines;
944 if (fpc[-1] == FF_BLANK)
945 RETURNOP(cLISTOP->op_first);
952 /* also used for: pp_mapstart() */
958 if (PL_stack_base + TOPMARK == SP) {
960 if (GIMME_V == G_SCALAR)
962 RETURNOP(PL_op->op_next->op_next);
964 PL_stack_sp = PL_stack_base + TOPMARK + 1;
965 Perl_pp_pushmark(aTHX); /* push dst */
966 Perl_pp_pushmark(aTHX); /* push src */
967 ENTER_with_name("grep"); /* enter outer scope */
971 ENTER_with_name("grep_item"); /* enter inner scope */
974 src = PL_stack_base[TOPMARK];
976 src = PL_stack_base[TOPMARK] = sv_mortalcopy(src);
983 if (PL_op->op_type == OP_MAPSTART)
984 Perl_pp_pushmark(aTHX); /* push top */
985 return ((LOGOP*)PL_op->op_next)->op_other;
991 const U8 gimme = GIMME_V;
992 I32 items = (SP - PL_stack_base) - TOPMARK; /* how many new items */
998 /* first, move source pointer to the next item in the source list */
999 ++PL_markstack_ptr[-1];
1001 /* if there are new items, push them into the destination list */
1002 if (items && gimme != G_VOID) {
1003 /* might need to make room back there first */
1004 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1005 /* XXX this implementation is very pessimal because the stack
1006 * is repeatedly extended for every set of items. Is possible
1007 * to do this without any stack extension or copying at all
1008 * by maintaining a separate list over which the map iterates
1009 * (like foreach does). --gsar */
1011 /* everything in the stack after the destination list moves
1012 * towards the end the stack by the amount of room needed */
1013 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1015 /* items to shift up (accounting for the moved source pointer) */
1016 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1018 /* This optimization is by Ben Tilly and it does
1019 * things differently from what Sarathy (gsar)
1020 * is describing. The downside of this optimization is
1021 * that leaves "holes" (uninitialized and hopefully unused areas)
1022 * to the Perl stack, but on the other hand this
1023 * shouldn't be a problem. If Sarathy's idea gets
1024 * implemented, this optimization should become
1025 * irrelevant. --jhi */
1027 shift = count; /* Avoid shifting too often --Ben Tilly */
1031 dst = (SP += shift);
1032 PL_markstack_ptr[-1] += shift;
1033 *PL_markstack_ptr += shift;
1037 /* copy the new items down to the destination list */
1038 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1039 if (gimme == G_ARRAY) {
1040 /* add returned items to the collection (making mortal copies
1041 * if necessary), then clear the current temps stack frame
1042 * *except* for those items. We do this splicing the items
1043 * into the start of the tmps frame (so some items may be on
1044 * the tmps stack twice), then moving PL_tmps_floor above
1045 * them, then freeing the frame. That way, the only tmps that
1046 * accumulate over iterations are the return values for map.
1047 * We have to do to this way so that everything gets correctly
1048 * freed if we die during the map.
1052 /* make space for the slice */
1053 EXTEND_MORTAL(items);
1054 tmpsbase = PL_tmps_floor + 1;
1055 Move(PL_tmps_stack + tmpsbase,
1056 PL_tmps_stack + tmpsbase + items,
1057 PL_tmps_ix - PL_tmps_floor,
1059 PL_tmps_ix += items;
1064 sv = sv_mortalcopy(sv);
1066 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1068 /* clear the stack frame except for the items */
1069 PL_tmps_floor += items;
1071 /* FREETMPS may have cleared the TEMP flag on some of the items */
1074 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1077 /* scalar context: we don't care about which values map returns
1078 * (we use undef here). And so we certainly don't want to do mortal
1079 * copies of meaningless values. */
1080 while (items-- > 0) {
1082 *dst-- = &PL_sv_undef;
1090 LEAVE_with_name("grep_item"); /* exit inner scope */
1093 if (PL_markstack_ptr[-1] > TOPMARK) {
1095 (void)POPMARK; /* pop top */
1096 LEAVE_with_name("grep"); /* exit outer scope */
1097 (void)POPMARK; /* pop src */
1098 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1099 (void)POPMARK; /* pop dst */
1100 SP = PL_stack_base + POPMARK; /* pop original mark */
1101 if (gimme == G_SCALAR) {
1105 else if (gimme == G_ARRAY)
1112 ENTER_with_name("grep_item"); /* enter inner scope */
1115 /* set $_ to the new source item */
1116 src = PL_stack_base[PL_markstack_ptr[-1]];
1117 if (SvPADTMP(src)) {
1118 src = sv_mortalcopy(src);
1123 RETURNOP(cLOGOP->op_other);
1131 if (GIMME_V == G_ARRAY)
1133 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1134 return cLOGOP->op_other;
1143 if (GIMME_V == G_ARRAY) {
1144 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1148 SV * const targ = PAD_SV(PL_op->op_targ);
1151 if (PL_op->op_private & OPpFLIP_LINENUM) {
1152 if (GvIO(PL_last_in_gv)) {
1153 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1156 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1158 flip = SvIV(sv) == SvIV(GvSV(gv));
1164 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1165 if (PL_op->op_flags & OPf_SPECIAL) {
1173 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1182 /* This code tries to decide if "$left .. $right" should use the
1183 magical string increment, or if the range is numeric (we make
1184 an exception for .."0" [#18165]). AMS 20021031. */
1186 #define RANGE_IS_NUMERIC(left,right) ( \
1187 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1188 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1189 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1190 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1191 && (!SvOK(right) || looks_like_number(right))))
1197 if (GIMME_V == G_ARRAY) {
1203 if (RANGE_IS_NUMERIC(left,right)) {
1205 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1206 (SvOK(right) && (SvIOK(right)
1207 ? SvIsUV(right) && SvUV(right) > IV_MAX
1208 : SvNV_nomg(right) > IV_MAX)))
1209 DIE(aTHX_ "Range iterator outside integer range");
1210 i = SvIV_nomg(left);
1211 j = SvIV_nomg(right);
1213 /* Dance carefully around signed max. */
1214 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1217 /* The wraparound of signed integers is undefined
1218 * behavior, but here we aim for count >=1, and
1219 * negative count is just wrong. */
1221 #if IVSIZE > Size_t_size
1228 Perl_croak(aTHX_ "Out of memory during list extend");
1235 SV * const sv = sv_2mortal(newSViv(i));
1237 if (n) /* avoid incrementing above IV_MAX */
1243 const char * const lpv = SvPV_nomg_const(left, llen);
1244 const char * const tmps = SvPV_nomg_const(right, len);
1246 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1247 if (DO_UTF8(right) && IN_UNI_8_BIT)
1248 len = sv_len_utf8_nomg(right);
1249 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1251 if (strEQ(SvPVX_const(sv),tmps))
1253 sv = sv_2mortal(newSVsv(sv));
1260 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1264 if (PL_op->op_private & OPpFLIP_LINENUM) {
1265 if (GvIO(PL_last_in_gv)) {
1266 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1269 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1270 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1278 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1279 sv_catpvs(targ, "E0");
1289 static const char * const context_name[] = {
1291 NULL, /* CXt_WHEN never actually needs "block" */
1292 NULL, /* CXt_BLOCK never actually needs "block" */
1293 NULL, /* CXt_GIVEN never actually needs "block" */
1294 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1295 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1296 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1297 NULL, /* CXt_LOOP_LIST never actually needs "loop" */
1298 NULL, /* CXt_LOOP_ARY never actually needs "loop" */
1306 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1310 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1312 for (i = cxstack_ix; i >= 0; i--) {
1313 const PERL_CONTEXT * const cx = &cxstack[i];
1314 switch (CxTYPE(cx)) {
1320 /* diag_listed_as: Exiting subroutine via %s */
1321 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1322 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1323 if (CxTYPE(cx) == CXt_NULL) /* sort BLOCK */
1326 case CXt_LOOP_PLAIN:
1327 case CXt_LOOP_LAZYIV:
1328 case CXt_LOOP_LAZYSV:
1332 STRLEN cx_label_len = 0;
1333 U32 cx_label_flags = 0;
1334 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1336 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1339 (const U8*)cx_label, cx_label_len,
1340 (const U8*)label, len) == 0)
1342 (const U8*)label, len,
1343 (const U8*)cx_label, cx_label_len) == 0)
1344 : (len == cx_label_len && ((cx_label == label)
1345 || memEQ(cx_label, label, len))) )) {
1346 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1347 (long)i, cx_label));
1350 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1361 Perl_dowantarray(pTHX)
1363 const U8 gimme = block_gimme();
1364 return (gimme == G_VOID) ? G_SCALAR : gimme;
1368 Perl_block_gimme(pTHX)
1370 const I32 cxix = dopoptosub(cxstack_ix);
1375 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1377 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1383 Perl_is_lvalue_sub(pTHX)
1385 const I32 cxix = dopoptosub(cxstack_ix);
1386 assert(cxix >= 0); /* We should only be called from inside subs */
1388 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1389 return CxLVAL(cxstack + cxix);
1394 /* only used by cx_pushsub() */
1396 Perl_was_lvalue_sub(pTHX)
1398 const I32 cxix = dopoptosub(cxstack_ix-1);
1399 assert(cxix >= 0); /* We should only be called from inside subs */
1401 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1402 return CxLVAL(cxstack + cxix);
1408 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1412 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1414 PERL_UNUSED_CONTEXT;
1417 for (i = startingblock; i >= 0; i--) {
1418 const PERL_CONTEXT * const cx = &cxstk[i];
1419 switch (CxTYPE(cx)) {
1423 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1424 * twice; the first for the normal foo() call, and the second
1425 * for a faked up re-entry into the sub to execute the
1426 * code block. Hide this faked entry from the world. */
1427 if (cx->cx_type & CXp_SUB_RE_FAKE)
1432 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1440 S_dopoptoeval(pTHX_ I32 startingblock)
1443 for (i = startingblock; i >= 0; i--) {
1444 const PERL_CONTEXT *cx = &cxstack[i];
1445 switch (CxTYPE(cx)) {
1449 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1457 S_dopoptoloop(pTHX_ I32 startingblock)
1460 for (i = startingblock; i >= 0; i--) {
1461 const PERL_CONTEXT * const cx = &cxstack[i];
1462 switch (CxTYPE(cx)) {
1468 /* diag_listed_as: Exiting subroutine via %s */
1469 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1470 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1471 if ((CxTYPE(cx)) == CXt_NULL) /* sort BLOCK */
1474 case CXt_LOOP_PLAIN:
1475 case CXt_LOOP_LAZYIV:
1476 case CXt_LOOP_LAZYSV:
1479 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1486 /* find the next GIVEN or FOR (with implicit $_) loop context block */
1489 S_dopoptogivenfor(pTHX_ I32 startingblock)
1492 for (i = startingblock; i >= 0; i--) {
1493 const PERL_CONTEXT *cx = &cxstack[i];
1494 switch (CxTYPE(cx)) {
1498 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found given at cx=%ld)\n", (long)i));
1500 case CXt_LOOP_PLAIN:
1501 assert(!(cx->cx_type & CXp_FOR_DEF));
1503 case CXt_LOOP_LAZYIV:
1504 case CXt_LOOP_LAZYSV:
1507 if (cx->cx_type & CXp_FOR_DEF) {
1508 DEBUG_l( Perl_deb(aTHX_ "(dopoptogivenfor(): found foreach at cx=%ld)\n", (long)i));
1517 S_dopoptowhen(pTHX_ I32 startingblock)
1520 for (i = startingblock; i >= 0; i--) {
1521 const PERL_CONTEXT *cx = &cxstack[i];
1522 switch (CxTYPE(cx)) {
1526 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1533 /* dounwind(): pop all contexts above (but not including) cxix.
1534 * Note that it clears the savestack frame associated with each popped
1535 * context entry, but doesn't free any temps.
1536 * It does a cx_popblock() of the last frame that it pops, and leaves
1537 * cxstack_ix equal to cxix.
1541 Perl_dounwind(pTHX_ I32 cxix)
1543 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1546 while (cxstack_ix > cxix) {
1547 PERL_CONTEXT *cx = CX_CUR();
1549 CX_DEBUG(cx, "UNWIND");
1550 /* Note: we don't need to restore the base context info till the end. */
1554 switch (CxTYPE(cx)) {
1557 /* CXt_SUBST is not a block context type, so skip the
1558 * cx_popblock(cx) below */
1559 if (cxstack_ix == cxix + 1) {
1570 case CXt_LOOP_PLAIN:
1571 case CXt_LOOP_LAZYIV:
1572 case CXt_LOOP_LAZYSV:
1585 /* these two don't have a POPFOO() */
1591 if (cxstack_ix == cxix + 1) {
1600 Perl_qerror(pTHX_ SV *err)
1602 PERL_ARGS_ASSERT_QERROR;
1605 if (PL_in_eval & EVAL_KEEPERR) {
1606 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1610 sv_catsv(ERRSV, err);
1613 sv_catsv(PL_errors, err);
1615 Perl_warn(aTHX_ "%" SVf, SVfARG(err));
1617 ++PL_parser->error_count;
1622 /* pop a CXt_EVAL context and in addition, if it was a require then
1624 * 0: do nothing extra;
1625 * 1: undef $INC{$name}; croak "$name did not return a true value";
1626 * 2: delete $INC{$name}; croak "$errsv: Compilation failed in require"
1630 S_pop_eval_context_maybe_croak(pTHX_ PERL_CONTEXT *cx, SV *errsv, int action)
1632 SV *namesv = NULL; /* init to avoid dumb compiler warning */
1636 do_croak = action && (CxOLD_OP_TYPE(cx) == OP_REQUIRE);
1638 /* keep namesv alive after cx_popeval() */
1639 namesv = cx->blk_eval.old_namesv;
1640 cx->blk_eval.old_namesv = NULL;
1649 HV *inc_hv = GvHVn(PL_incgv);
1650 I32 klen = SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv);
1651 const char *key = SvPVX_const(namesv);
1654 (void)hv_delete(inc_hv, key, klen, G_DISCARD);
1655 fmt = "%" SVf " did not return a true value";
1659 (void)hv_store(inc_hv, key, klen, &PL_sv_undef, 0);
1660 fmt = "%" SVf "Compilation failed in require";
1662 errsv = newSVpvs_flags("Unknown error\n", SVs_TEMP);
1665 Perl_croak(aTHX_ fmt, SVfARG(errsv));
1670 /* die_unwind(): this is the final destination for the various croak()
1671 * functions. If we're in an eval, unwind the context and other stacks
1672 * back to the top-most CXt_EVAL and set $@ to msv; otherwise print msv
1673 * to STDERR and initiate an exit. Note that if the CXt_EVAL popped back
1674 * to is a require the exception will be rethrown, as requires don't
1675 * actually trap exceptions.
1679 Perl_die_unwind(pTHX_ SV *msv)
1682 U8 in_eval = PL_in_eval;
1683 PERL_ARGS_ASSERT_DIE_UNWIND;
1688 exceptsv = sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
1691 * Historically, perl used to set ERRSV ($@) early in the die
1692 * process and rely on it not getting clobbered during unwinding.
1693 * That sucked, because it was liable to get clobbered, so the
1694 * setting of ERRSV used to emit the exception from eval{} has
1695 * been moved to much later, after unwinding (see just before
1696 * JMPENV_JUMP below). However, some modules were relying on the
1697 * early setting, by examining $@ during unwinding to use it as
1698 * a flag indicating whether the current unwinding was caused by
1699 * an exception. It was never a reliable flag for that purpose,
1700 * being totally open to false positives even without actual
1701 * clobberage, but was useful enough for production code to
1702 * semantically rely on it.
1704 * We'd like to have a proper introspective interface that
1705 * explicitly describes the reason for whatever unwinding
1706 * operations are currently in progress, so that those modules
1707 * work reliably and $@ isn't further overloaded. But we don't
1708 * have one yet. In its absence, as a stopgap measure, ERRSV is
1709 * now *additionally* set here, before unwinding, to serve as the
1710 * (unreliable) flag that it used to.
1712 * This behaviour is temporary, and should be removed when a
1713 * proper way to detect exceptional unwinding has been developed.
1714 * As of 2010-12, the authors of modules relying on the hack
1715 * are aware of the issue, because the modules failed on
1716 * perls 5.13.{1..7} which had late setting of $@ without this
1717 * early-setting hack.
1719 if (!(in_eval & EVAL_KEEPERR))
1720 sv_setsv_flags(ERRSV, exceptsv,
1721 (SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
1723 if (in_eval & EVAL_KEEPERR) {
1724 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
1728 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1729 && PL_curstackinfo->si_prev)
1739 JMPENV *restartjmpenv;
1742 if (cxix < cxstack_ix)
1746 assert(CxTYPE(cx) == CXt_EVAL);
1748 /* return false to the caller of eval */
1749 oldsp = PL_stack_base + cx->blk_oldsp;
1750 gimme = cx->blk_gimme;
1751 if (gimme == G_SCALAR)
1752 *++oldsp = &PL_sv_undef;
1753 PL_stack_sp = oldsp;
1755 restartjmpenv = cx->blk_eval.cur_top_env;
1756 restartop = cx->blk_eval.retop;
1757 /* Note that unlike pp_entereval, pp_require isn't supposed to
1758 * trap errors. So if we're a require, after we pop the
1759 * CXt_EVAL that pp_require pushed, rethrow the error with
1760 * croak(exceptsv). This is all handled by the call below when
1763 S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
1765 if (!(in_eval & EVAL_KEEPERR))
1766 sv_setsv(ERRSV, exceptsv);
1767 PL_restartjmpenv = restartjmpenv;
1768 PL_restartop = restartop;
1770 NOT_REACHED; /* NOTREACHED */
1774 write_to_stderr(exceptsv);
1776 NOT_REACHED; /* NOTREACHED */
1782 if (SvTRUE(left) != SvTRUE(right))
1790 =head1 CV Manipulation Functions
1792 =for apidoc caller_cx
1794 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1795 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1796 information returned to Perl by C<caller>. Note that XSUBs don't get a
1797 stack frame, so C<caller_cx(0, NULL)> will return information for the
1798 immediately-surrounding Perl code.
1800 This function skips over the automatic calls to C<&DB::sub> made on the
1801 behalf of the debugger. If the stack frame requested was a sub called by
1802 C<DB::sub>, the return value will be the frame for the call to
1803 C<DB::sub>, since that has the correct line number/etc. for the call
1804 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1805 frame for the sub call itself.
1810 const PERL_CONTEXT *
1811 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1813 I32 cxix = dopoptosub(cxstack_ix);
1814 const PERL_CONTEXT *cx;
1815 const PERL_CONTEXT *ccstack = cxstack;
1816 const PERL_SI *top_si = PL_curstackinfo;
1819 /* we may be in a higher stacklevel, so dig down deeper */
1820 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1821 top_si = top_si->si_prev;
1822 ccstack = top_si->si_cxstack;
1823 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1827 /* caller() should not report the automatic calls to &DB::sub */
1828 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1829 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1833 cxix = dopoptosub_at(ccstack, cxix - 1);
1836 cx = &ccstack[cxix];
1837 if (dbcxp) *dbcxp = cx;
1839 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1840 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1841 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1842 field below is defined for any cx. */
1843 /* caller() should not report the automatic calls to &DB::sub */
1844 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1845 cx = &ccstack[dbcxix];
1854 const PERL_CONTEXT *cx;
1855 const PERL_CONTEXT *dbcx;
1857 const HEK *stash_hek;
1859 bool has_arg = MAXARG && TOPs;
1868 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1870 if (gimme != G_ARRAY) {
1877 CX_DEBUG(cx, "CALLER");
1878 assert(CopSTASH(cx->blk_oldcop));
1879 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1880 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1882 if (gimme != G_ARRAY) {
1885 PUSHs(&PL_sv_undef);
1888 sv_sethek(TARG, stash_hek);
1897 PUSHs(&PL_sv_undef);
1900 sv_sethek(TARG, stash_hek);
1903 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1904 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1905 cx->blk_sub.retop, TRUE);
1907 lcop = cx->blk_oldcop;
1908 mPUSHu(CopLINE(lcop));
1911 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1912 /* So is ccstack[dbcxix]. */
1913 if (CvHASGV(dbcx->blk_sub.cv)) {
1914 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1915 PUSHs(boolSV(CxHASARGS(cx)));
1918 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1919 PUSHs(boolSV(CxHASARGS(cx)));
1923 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1926 gimme = cx->blk_gimme;
1927 if (gimme == G_VOID)
1928 PUSHs(&PL_sv_undef);
1930 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1931 if (CxTYPE(cx) == CXt_EVAL) {
1933 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1934 SV *cur_text = cx->blk_eval.cur_text;
1935 if (SvCUR(cur_text) >= 2) {
1936 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1937 SvUTF8(cur_text)|SVs_TEMP));
1940 /* I think this is will always be "", but be sure */
1941 PUSHs(sv_2mortal(newSVsv(cur_text)));
1947 else if (cx->blk_eval.old_namesv) {
1948 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1951 /* eval BLOCK (try blocks have old_namesv == 0) */
1953 PUSHs(&PL_sv_undef);
1954 PUSHs(&PL_sv_undef);
1958 PUSHs(&PL_sv_undef);
1959 PUSHs(&PL_sv_undef);
1961 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1962 && CopSTASH_eq(PL_curcop, PL_debstash))
1964 /* slot 0 of the pad contains the original @_ */
1965 AV * const ary = MUTABLE_AV(AvARRAY(MUTABLE_AV(
1966 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
1967 cx->blk_sub.olddepth+1]))[0]);
1968 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1970 Perl_init_dbargs(aTHX);
1972 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1973 av_extend(PL_dbargs, AvFILLp(ary) + off);
1974 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1975 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1977 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1980 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1982 if (old_warnings == pWARN_NONE)
1983 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1984 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1985 mask = &PL_sv_undef ;
1986 else if (old_warnings == pWARN_ALL ||
1987 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1988 /* Get the bit mask for $warnings::Bits{all}, because
1989 * it could have been extended by warnings::register */
1991 HV * const bits = get_hv("warnings::Bits", 0);
1992 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1993 mask = newSVsv(*bits_all);
1996 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
2000 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2004 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2005 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2015 if (MAXARG < 1 || (!TOPs && !POPs))
2016 tmps = NULL, len = 0;
2018 tmps = SvPVx_const(POPs, len);
2019 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
2024 /* like pp_nextstate, but used instead when the debugger is active */
2028 PL_curcop = (COP*)PL_op;
2029 TAINT_NOT; /* Each statement is presumed innocent */
2030 PL_stack_sp = PL_stack_base + CX_CUR()->blk_oldsp;
2035 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2036 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
2040 const U8 gimme = G_ARRAY;
2041 GV * const gv = PL_DBgv;
2044 if (gv && isGV_with_GP(gv))
2047 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
2048 DIE(aTHX_ "No DB::DB routine defined");
2050 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2051 /* don't do recursive DB::DB call */
2061 (void)(*CvXSUB(cv))(aTHX_ cv);
2067 cx = cx_pushblock(CXt_SUB, gimme, SP, PL_savestack_ix);
2068 cx_pushsub(cx, cv, PL_op->op_next, 0);
2069 /* OP_DBSTATE's op_private holds hint bits rather than
2070 * the lvalue-ish flags seen in OP_ENTERSUB. So cancel
2071 * any CxLVAL() flags that have now been mis-calculated */
2078 if (CvDEPTH(cv) >= 2)
2079 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2080 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2081 RETURNOP(CvSTART(cv));
2093 (void)cx_pushblock(CXt_BLOCK, gimme, PL_stack_sp, PL_savestack_ix);
2105 assert(CxTYPE(cx) == CXt_BLOCK);
2107 if (PL_op->op_flags & OPf_SPECIAL)
2108 /* fake block should preserve $1 et al; e.g. /(...)/ while ...; */
2109 cx->blk_oldpm = PL_curpm;
2111 oldsp = PL_stack_base + cx->blk_oldsp;
2112 gimme = cx->blk_gimme;
2114 if (gimme == G_VOID)
2115 PL_stack_sp = oldsp;
2117 leave_adjust_stacks(oldsp, oldsp, gimme,
2118 PL_op->op_private & OPpLVALUE ? 3 : 1);
2128 S_outside_integer(pTHX_ SV *sv)
2131 const NV nv = SvNV_nomg(sv);
2132 if (Perl_isinfnan(nv))
2134 #ifdef NV_PRESERVES_UV
2135 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2138 if (nv <= (NV)IV_MIN)
2141 ((nv > (NV)UV_MAX ||
2142 SvUV_nomg(sv) > (UV)IV_MAX)))
2153 const U8 gimme = GIMME_V;
2154 void *itervarp; /* GV or pad slot of the iteration variable */
2155 SV *itersave; /* the old var in the iterator var slot */
2158 if (PL_op->op_targ) { /* "my" variable */
2159 itervarp = &PAD_SVl(PL_op->op_targ);
2160 itersave = *(SV**)itervarp;
2162 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2163 /* the SV currently in the pad slot is never live during
2164 * iteration (the slot is always aliased to one of the items)
2165 * so it's always stale */
2166 SvPADSTALE_on(itersave);
2168 SvREFCNT_inc_simple_void_NN(itersave);
2169 cxflags = CXp_FOR_PAD;
2172 SV * const sv = POPs;
2173 itervarp = (void *)sv;
2174 if (LIKELY(isGV(sv))) { /* symbol table variable */
2175 itersave = GvSV(sv);
2176 SvREFCNT_inc_simple_void(itersave);
2177 cxflags = CXp_FOR_GV;
2178 if (PL_op->op_private & OPpITER_DEF)
2179 cxflags |= CXp_FOR_DEF;
2181 else { /* LV ref: for \$foo (...) */
2182 assert(SvTYPE(sv) == SVt_PVMG);
2183 assert(SvMAGIC(sv));
2184 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2186 cxflags = CXp_FOR_LVREF;
2189 /* OPpITER_DEF (implicit $_) should only occur with a GV iter var */
2190 assert((cxflags & CXp_FOR_GV) || !(PL_op->op_private & OPpITER_DEF));
2192 /* Note that this context is initially set as CXt_NULL. Further on
2193 * down it's changed to one of the CXt_LOOP_*. Before it's changed,
2194 * there mustn't be anything in the blk_loop substruct that requires
2195 * freeing or undoing, in case we die in the meantime. And vice-versa.
2197 cx = cx_pushblock(cxflags, gimme, MARK, PL_savestack_ix);
2198 cx_pushloop_for(cx, itervarp, itersave);
2200 if (PL_op->op_flags & OPf_STACKED) {
2201 /* OPf_STACKED implies either a single array: for(@), with a
2202 * single AV on the stack, or a range: for (1..5), with 1 and 5 on
2204 SV *maybe_ary = POPs;
2205 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2208 SV * const right = maybe_ary;
2209 if (UNLIKELY(cxflags & CXp_FOR_LVREF))
2210 DIE(aTHX_ "Assigned value is not a reference");
2213 if (RANGE_IS_NUMERIC(sv,right)) {
2214 cx->cx_type |= CXt_LOOP_LAZYIV;
2215 if (S_outside_integer(aTHX_ sv) ||
2216 S_outside_integer(aTHX_ right))
2217 DIE(aTHX_ "Range iterator outside integer range");
2218 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2219 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2222 cx->cx_type |= CXt_LOOP_LAZYSV;
2223 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2224 cx->blk_loop.state_u.lazysv.end = right;
2225 SvREFCNT_inc_simple_void_NN(right);
2226 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2227 /* This will do the upgrade to SVt_PV, and warn if the value
2228 is uninitialised. */
2229 (void) SvPV_nolen_const(right);
2230 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2231 to replace !SvOK() with a pointer to "". */
2233 SvREFCNT_dec(right);
2234 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2238 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2239 /* for (@array) {} */
2240 cx->cx_type |= CXt_LOOP_ARY;
2241 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2242 SvREFCNT_inc_simple_void_NN(maybe_ary);
2243 cx->blk_loop.state_u.ary.ix =
2244 (PL_op->op_private & OPpITER_REVERSED) ?
2245 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2248 /* EXTEND(SP, 1) not needed in this branch because we just did POPs */
2250 else { /* iterating over items on the stack */
2251 cx->cx_type |= CXt_LOOP_LIST;
2252 cx->blk_oldsp = SP - PL_stack_base;
2253 cx->blk_loop.state_u.stack.basesp = MARK - PL_stack_base;
2254 cx->blk_loop.state_u.stack.ix =
2255 (PL_op->op_private & OPpITER_REVERSED)
2257 : cx->blk_loop.state_u.stack.basesp;
2258 /* pre-extend stack so pp_iter doesn't have to check every time
2259 * it pushes yes/no */
2269 const U8 gimme = GIMME_V;
2271 cx = cx_pushblock(CXt_LOOP_PLAIN, gimme, PL_stack_sp, PL_savestack_ix);
2272 cx_pushloop_plain(cx);
2285 assert(CxTYPE_is_LOOP(cx));
2286 oldsp = PL_stack_base + cx->blk_oldsp;
2287 base = CxTYPE(cx) == CXt_LOOP_LIST
2288 ? PL_stack_base + cx->blk_loop.state_u.stack.basesp
2290 gimme = cx->blk_gimme;
2292 if (gimme == G_VOID)
2295 leave_adjust_stacks(oldsp, base, gimme,
2296 PL_op->op_private & OPpLVALUE ? 3 : 1);
2299 cx_poploop(cx); /* Stack values are safe: release loop vars ... */
2307 /* This duplicates most of pp_leavesub, but with additional code to handle
2308 * return args in lvalue context. It was forked from pp_leavesub to
2309 * avoid slowing down that function any further.
2311 * Any changes made to this function may need to be copied to pp_leavesub
2314 * also tail-called by pp_return
2325 assert(CxTYPE(cx) == CXt_SUB);
2327 if (CxMULTICALL(cx)) {
2328 /* entry zero of a stack is always PL_sv_undef, which
2329 * simplifies converting a '()' return into undef in scalar context */
2330 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2334 gimme = cx->blk_gimme;
2335 oldsp = PL_stack_base + cx->blk_oldsp; /* last arg of previous frame */
2337 if (gimme == G_VOID)
2338 PL_stack_sp = oldsp;
2340 U8 lval = CxLVAL(cx);
2341 bool is_lval = (lval && !(lval & OPpENTERSUB_INARGS));
2342 const char *what = NULL;
2344 if (gimme == G_SCALAR) {
2346 /* check for bad return arg */
2347 if (oldsp < PL_stack_sp) {
2348 SV *sv = *PL_stack_sp;
2349 if ((SvPADTMP(sv) || SvREADONLY(sv))) {
2351 SvREADONLY(sv) ? (sv == &PL_sv_undef) ? "undef"
2352 : "a readonly value" : "a temporary";
2357 /* sub:lvalue{} will take us here. */
2362 "Can't return %s from lvalue subroutine", what);
2366 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2368 if (lval & OPpDEREF) {
2369 /* lval_sub()->{...} and similar */
2373 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2379 assert(gimme == G_ARRAY);
2380 assert (!(lval & OPpDEREF));
2383 /* scan for bad return args */
2385 for (p = PL_stack_sp; p > oldsp; p--) {
2387 /* the PL_sv_undef exception is to allow things like
2388 * this to work, where PL_sv_undef acts as 'skip'
2389 * placeholder on the LHS of list assigns:
2390 * sub foo :lvalue { undef }
2391 * ($a, undef, foo(), $b) = 1..4;
2393 if (sv != &PL_sv_undef && (SvPADTMP(sv) || SvREADONLY(sv)))
2395 /* Might be flattened array after $#array = */
2396 what = SvREADONLY(sv)
2397 ? "a readonly value" : "a temporary";
2403 leave_adjust_stacks(oldsp, oldsp, gimme, is_lval ? 3 : 2);
2408 cx_popsub(cx); /* Stack values are safe: release CV and @_ ... */
2410 retop = cx->blk_sub.retop;
2421 const I32 cxix = dopoptosub(cxstack_ix);
2423 assert(cxstack_ix >= 0);
2424 if (cxix < cxstack_ix) {
2426 if (!( PL_curstackinfo->si_type == PERLSI_SORT
2427 || ( PL_curstackinfo->si_type == PERLSI_MULTICALL
2428 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE))
2431 DIE(aTHX_ "Can't return outside a subroutine");
2433 * a sort block, which is a CXt_NULL not a CXt_SUB;
2434 * or a /(?{...})/ block.
2435 * Handle specially. */
2436 assert(CxTYPE(&cxstack[0]) == CXt_NULL
2437 || ( CxTYPE(&cxstack[0]) == CXt_SUB
2438 && (cxstack[0].cx_type & CXp_SUB_RE_FAKE)));
2439 if (cxstack_ix > 0) {
2440 /* See comment below about context popping. Since we know
2441 * we're scalar and not lvalue, we can preserve the return
2442 * value in a simpler fashion than there. */
2444 assert(cxstack[0].blk_gimme == G_SCALAR);
2445 if ( (sp != PL_stack_base)
2446 && !(SvFLAGS(sv) & (SVs_TEMP|SVs_PADTMP))
2448 *SP = sv_mortalcopy(sv);
2451 /* caller responsible for popping cxstack[0] */
2455 /* There are contexts that need popping. Doing this may free the
2456 * return value(s), so preserve them first: e.g. popping the plain
2457 * loop here would free $x:
2458 * sub f { { my $x = 1; return $x } }
2459 * We may also need to shift the args down; for example,
2460 * for (1,2) { return 3,4 }
2461 * leaves 1,2,3,4 on the stack. Both these actions will be done by
2462 * leave_adjust_stacks(), along with freeing any temps. Note that
2463 * whoever we tail-call (e.g. pp_leaveeval) will also call
2464 * leave_adjust_stacks(); however, the second call is likely to
2465 * just see a bunch of SvTEMPs with a ref count of 1, and so just
2466 * pass them through, rather than copying them again. So this
2467 * isn't as inefficient as it sounds.
2469 cx = &cxstack[cxix];
2471 if (cx->blk_gimme != G_VOID)
2472 leave_adjust_stacks(MARK, PL_stack_base + cx->blk_oldsp,
2474 CxTYPE(cx) == CXt_SUB && CvLVALUE(cx->blk_sub.cv)
2478 cx = &cxstack[cxix]; /* CX stack may have been realloced */
2481 /* Like in the branch above, we need to handle any extra junk on
2482 * the stack. But because we're not also popping extra contexts, we
2483 * don't have to worry about prematurely freeing args. So we just
2484 * need to do the bare minimum to handle junk, and leave the main
2485 * arg processing in the function we tail call, e.g. pp_leavesub.
2486 * In list context we have to splice out the junk; in scalar
2487 * context we can leave as-is (pp_leavesub will later return the
2488 * top stack element). But for an empty arg list, e.g.
2489 * for (1,2) { return }
2490 * we need to set sp = oldsp so that pp_leavesub knows to push
2491 * &PL_sv_undef onto the stack.
2494 cx = &cxstack[cxix];
2495 oldsp = PL_stack_base + cx->blk_oldsp;
2496 if (oldsp != MARK) {
2497 SSize_t nargs = SP - MARK;
2499 if (cx->blk_gimme == G_ARRAY) {
2500 /* shift return args to base of call stack frame */
2501 Move(MARK + 1, oldsp + 1, nargs, SV*);
2502 PL_stack_sp = oldsp + nargs;
2506 PL_stack_sp = oldsp;
2510 /* fall through to a normal exit */
2511 switch (CxTYPE(cx)) {
2513 return CxTRYBLOCK(cx)
2514 ? Perl_pp_leavetry(aTHX)
2515 : Perl_pp_leaveeval(aTHX);
2517 return CvLVALUE(cx->blk_sub.cv)
2518 ? Perl_pp_leavesublv(aTHX)
2519 : Perl_pp_leavesub(aTHX);
2521 return Perl_pp_leavewrite(aTHX);
2523 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2527 /* find the enclosing loop or labelled loop and dounwind() back to it. */
2529 static PERL_CONTEXT *
2533 if (PL_op->op_flags & OPf_SPECIAL) {
2534 cxix = dopoptoloop(cxstack_ix);
2536 /* diag_listed_as: Can't "last" outside a loop block */
2537 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block",
2543 const char * const label =
2544 PL_op->op_flags & OPf_STACKED
2545 ? SvPV(TOPs,label_len)
2546 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2547 const U32 label_flags =
2548 PL_op->op_flags & OPf_STACKED
2550 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2552 cxix = dopoptolabel(label, label_len, label_flags);
2554 /* diag_listed_as: Label not found for "last %s" */
2555 Perl_croak(aTHX_ "Label not found for \"%s %" SVf "\"",
2557 SVfARG(PL_op->op_flags & OPf_STACKED
2558 && !SvGMAGICAL(TOPp1s)
2560 : newSVpvn_flags(label,
2562 label_flags | SVs_TEMP)));
2564 if (cxix < cxstack_ix)
2566 return &cxstack[cxix];
2575 cx = S_unwind_loop(aTHX);
2577 assert(CxTYPE_is_LOOP(cx));
2578 PL_stack_sp = PL_stack_base
2579 + (CxTYPE(cx) == CXt_LOOP_LIST
2580 ? cx->blk_loop.state_u.stack.basesp
2586 /* Stack values are safe: */
2588 cx_poploop(cx); /* release loop vars ... */
2590 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2600 /* if not a bare 'next' in the main scope, search for it */
2602 if (!((PL_op->op_flags & OPf_SPECIAL) && CxTYPE_is_LOOP(cx)))
2603 cx = S_unwind_loop(aTHX);
2606 PL_curcop = cx->blk_oldcop;
2608 return (cx)->blk_loop.my_op->op_nextop;
2613 PERL_CONTEXT *cx = S_unwind_loop(aTHX);
2614 OP* redo_op = cx->blk_loop.my_op->op_redoop;
2616 if (redo_op->op_type == OP_ENTER) {
2617 /* pop one less context to avoid $x being freed in while (my $x..) */
2620 assert(CxTYPE(cx) == CXt_BLOCK);
2621 redo_op = redo_op->op_next;
2627 PL_curcop = cx->blk_oldcop;
2633 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2636 static const char* const too_deep = "Target of goto is too deeply nested";
2638 PERL_ARGS_ASSERT_DOFINDLABEL;
2641 Perl_croak(aTHX_ "%s", too_deep);
2642 if (o->op_type == OP_LEAVE ||
2643 o->op_type == OP_SCOPE ||
2644 o->op_type == OP_LEAVELOOP ||
2645 o->op_type == OP_LEAVESUB ||
2646 o->op_type == OP_LEAVETRY)
2648 *ops++ = cUNOPo->op_first;
2650 Perl_croak(aTHX_ "%s", too_deep);
2653 if (o->op_flags & OPf_KIDS) {
2655 /* First try all the kids at this level, since that's likeliest. */
2656 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2657 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2658 STRLEN kid_label_len;
2659 U32 kid_label_flags;
2660 const char *kid_label = CopLABEL_len_flags(kCOP,
2661 &kid_label_len, &kid_label_flags);
2663 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2666 (const U8*)kid_label, kid_label_len,
2667 (const U8*)label, len) == 0)
2669 (const U8*)label, len,
2670 (const U8*)kid_label, kid_label_len) == 0)
2671 : ( len == kid_label_len && ((kid_label == label)
2672 || memEQ(kid_label, label, len)))))
2676 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2677 if (kid == PL_lastgotoprobe)
2679 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2682 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2683 ops[-1]->op_type == OP_DBSTATE)
2688 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2697 /* also used for: pp_dump() */
2705 #define GOTO_DEPTH 64
2706 OP *enterops[GOTO_DEPTH];
2707 const char *label = NULL;
2708 STRLEN label_len = 0;
2709 U32 label_flags = 0;
2710 const bool do_dump = (PL_op->op_type == OP_DUMP);
2711 static const char* const must_have_label = "goto must have label";
2713 if (PL_op->op_flags & OPf_STACKED) {
2714 /* goto EXPR or goto &foo */
2716 SV * const sv = POPs;
2719 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2720 /* This egregious kludge implements goto &subroutine */
2723 CV *cv = MUTABLE_CV(SvRV(sv));
2724 AV *arg = GvAV(PL_defgv);
2726 while (!CvROOT(cv) && !CvXSUB(cv)) {
2727 const GV * const gv = CvGV(cv);
2731 /* autoloaded stub? */
2732 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2734 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2736 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2737 if (autogv && (cv = GvCV(autogv)))
2739 tmpstr = sv_newmortal();
2740 gv_efullname3(tmpstr, gv, NULL);
2741 DIE(aTHX_ "Goto undefined subroutine &%" SVf, SVfARG(tmpstr));
2743 DIE(aTHX_ "Goto undefined subroutine");
2746 cxix = dopoptosub(cxstack_ix);
2748 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2750 cx = &cxstack[cxix];
2751 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2752 if (CxTYPE(cx) == CXt_EVAL) {
2754 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2755 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2757 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2758 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2760 else if (CxMULTICALL(cx))
2761 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2763 /* First do some returnish stuff. */
2765 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2767 if (cxix < cxstack_ix) {
2774 /* protect @_ during save stack unwind. */
2776 SvREFCNT_inc_NN(sv_2mortal(MUTABLE_SV(arg)));
2778 assert(PL_scopestack_ix == cx->blk_oldscopesp);
2781 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2782 /* this is part of cx_popsub_args() */
2783 AV* av = MUTABLE_AV(PAD_SVl(0));
2784 assert(AvARRAY(MUTABLE_AV(
2785 PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[
2786 CvDEPTH(cx->blk_sub.cv)])) == PL_curpad);
2788 /* we are going to donate the current @_ from the old sub
2789 * to the new sub. This first part of the donation puts a
2790 * new empty AV in the pad[0] slot of the old sub,
2791 * unless pad[0] and @_ differ (e.g. if the old sub did
2792 * local *_ = []); in which case clear the old pad[0]
2793 * array in the usual way */
2794 if (av == arg || AvREAL(av))
2795 clear_defarray(av, av == arg);
2796 else CLEAR_ARGARRAY(av);
2799 /* don't restore PL_comppad here. It won't be needed if the
2800 * sub we're going to is non-XS, but restoring it early then
2801 * croaking (e.g. the "Goto undefined subroutine" below)
2802 * means the CX block gets processed again in dounwind,
2803 * but this time with the wrong PL_comppad */
2805 /* A destructor called during LEAVE_SCOPE could have undefined
2806 * our precious cv. See bug #99850. */
2807 if (!CvROOT(cv) && !CvXSUB(cv)) {
2808 const GV * const gv = CvGV(cv);
2810 SV * const tmpstr = sv_newmortal();
2811 gv_efullname3(tmpstr, gv, NULL);
2812 DIE(aTHX_ "Goto undefined subroutine &%" SVf,
2815 DIE(aTHX_ "Goto undefined subroutine");
2818 if (CxTYPE(cx) == CXt_SUB) {
2819 CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth;
2820 SvREFCNT_dec_NN(cx->blk_sub.cv);
2823 /* Now do some callish stuff. */
2825 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2826 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2831 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2833 /* put GvAV(defgv) back onto stack */
2835 EXTEND(SP, items+1); /* @_ could have been extended. */
2840 bool r = cBOOL(AvREAL(arg));
2841 for (index=0; index<items; index++)
2845 SV ** const svp = av_fetch(arg, index, 0);
2846 sv = svp ? *svp : NULL;
2848 else sv = AvARRAY(arg)[index];
2850 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2851 : sv_2mortal(newSVavdefelem(arg, index, 1));
2855 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2856 /* Restore old @_ */
2857 CX_POP_SAVEARRAY(cx);
2860 retop = cx->blk_sub.retop;
2861 PL_comppad = cx->blk_sub.prevcomppad;
2862 PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL;
2864 /* XS subs don't have a CXt_SUB, so pop it;
2865 * this is a cx_popblock(), less all the stuff we already did
2866 * for cx_topblock() earlier */
2867 PL_curcop = cx->blk_oldcop;
2870 /* Push a mark for the start of arglist */
2873 (void)(*CvXSUB(cv))(aTHX_ cv);
2878 PADLIST * const padlist = CvPADLIST(cv);
2880 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2882 /* partial unrolled cx_pushsub(): */
2884 cx->blk_sub.cv = cv;
2885 cx->blk_sub.olddepth = CvDEPTH(cv);
2888 SvREFCNT_inc_simple_void_NN(cv);
2889 if (CvDEPTH(cv) > 1) {
2890 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2891 sub_crush_depth(cv);
2892 pad_push(padlist, CvDEPTH(cv));
2894 PL_curcop = cx->blk_oldcop;
2895 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2898 /* second half of donating @_ from the old sub to the
2899 * new sub: abandon the original pad[0] AV in the
2900 * new sub, and replace it with the donated @_.
2901 * pad[0] takes ownership of the extra refcount
2902 * we gave arg earlier */
2904 SvREFCNT_dec(PAD_SVl(0));
2905 PAD_SVl(0) = (SV *)arg;
2906 SvREFCNT_inc_simple_void_NN(arg);
2909 /* GvAV(PL_defgv) might have been modified on scope
2910 exit, so point it at arg again. */
2911 if (arg != GvAV(PL_defgv)) {
2912 AV * const av = GvAV(PL_defgv);
2913 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2918 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2919 Perl_get_db_sub(aTHX_ NULL, cv);
2921 CV * const gotocv = get_cvs("DB::goto", 0);
2923 PUSHMARK( PL_stack_sp );
2924 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2929 retop = CvSTART(cv);
2930 goto putback_return;
2935 label = SvPV_nomg_const(sv, label_len);
2936 label_flags = SvUTF8(sv);
2939 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2940 /* goto LABEL or dump LABEL */
2941 label = cPVOP->op_pv;
2942 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2943 label_len = strlen(label);
2945 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2950 OP *gotoprobe = NULL;
2951 bool leaving_eval = FALSE;
2952 bool in_block = FALSE;
2953 bool pseudo_block = FALSE;
2954 PERL_CONTEXT *last_eval_cx = NULL;
2958 PL_lastgotoprobe = NULL;
2960 for (ix = cxstack_ix; ix >= 0; ix--) {
2962 switch (CxTYPE(cx)) {
2964 leaving_eval = TRUE;
2965 if (!CxTRYBLOCK(cx)) {
2966 gotoprobe = (last_eval_cx ?
2967 last_eval_cx->blk_eval.old_eval_root :
2972 /* else fall through */
2973 case CXt_LOOP_PLAIN:
2974 case CXt_LOOP_LAZYIV:
2975 case CXt_LOOP_LAZYSV:
2980 gotoprobe = OpSIBLING(cx->blk_oldcop);
2986 gotoprobe = OpSIBLING(cx->blk_oldcop);
2989 gotoprobe = PL_main_root;
2992 gotoprobe = CvROOT(cx->blk_sub.cv);
2993 pseudo_block = cBOOL(CxMULTICALL(cx));
2997 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3000 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3001 CxTYPE(cx), (long) ix);
3002 gotoprobe = PL_main_root;
3008 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3009 enterops, enterops + GOTO_DEPTH);
3012 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
3013 sibl1->op_type == OP_UNSTACK &&
3014 (sibl2 = OpSIBLING(sibl1)))
3016 retop = dofindlabel(sibl2,
3017 label, label_len, label_flags, enterops,
3018 enterops + GOTO_DEPTH);
3024 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3025 PL_lastgotoprobe = gotoprobe;
3028 DIE(aTHX_ "Can't find label %" UTF8f,
3029 UTF8fARG(label_flags, label_len, label));
3031 /* if we're leaving an eval, check before we pop any frames
3032 that we're not going to punt, otherwise the error
3035 if (leaving_eval && *enterops && enterops[1]) {
3037 for (i = 1; enterops[i]; i++)
3038 if (enterops[i]->op_type == OP_ENTERITER)
3039 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3042 if (*enterops && enterops[1]) {
3043 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3045 deprecate("\"goto\" to jump into a construct");
3048 /* pop unwanted frames */
3050 if (ix < cxstack_ix) {
3052 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3058 /* push wanted frames */
3060 if (*enterops && enterops[1]) {
3061 OP * const oldop = PL_op;
3062 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3063 for (; enterops[ix]; ix++) {
3064 PL_op = enterops[ix];
3065 /* Eventually we may want to stack the needed arguments
3066 * for each op. For now, we punt on the hard ones. */
3067 if (PL_op->op_type == OP_ENTERITER)
3068 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3069 PL_op->op_ppaddr(aTHX);
3077 if (!retop) retop = PL_main_start;
3079 PL_restartop = retop;
3080 PL_do_undump = TRUE;
3084 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3085 PL_do_undump = FALSE;
3103 anum = 0; (void)POPs;
3109 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3112 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3115 PL_exit_flags |= PERL_EXIT_EXPECTED;
3117 PUSHs(&PL_sv_undef);
3124 S_save_lines(pTHX_ AV *array, SV *sv)
3126 const char *s = SvPVX_const(sv);
3127 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3130 PERL_ARGS_ASSERT_SAVE_LINES;
3132 while (s && s < send) {
3134 SV * const tmpstr = newSV_type(SVt_PVMG);
3136 t = (const char *)memchr(s, '\n', send - s);
3142 sv_setpvn(tmpstr, s, t - s);
3143 av_store(array, line++, tmpstr);
3151 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3153 0 is used as continue inside eval,
3155 3 is used for a die caught by an inner eval - continue inner loop
3157 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3158 establish a local jmpenv to handle exception traps.
3163 S_docatch(pTHX_ Perl_ppaddr_t firstpp)
3166 OP * const oldop = PL_op;
3169 assert(CATCH_GET == TRUE);
3174 PL_op = firstpp(aTHX);
3179 /* die caught by an inner eval - continue inner loop */
3180 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3181 PL_restartjmpenv = NULL;
3182 PL_op = PL_restartop;
3191 NOT_REACHED; /* NOTREACHED */
3200 =for apidoc find_runcv
3202 Locate the CV corresponding to the currently executing sub or eval.
3203 If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
3204 C<*db_seqp> with the cop sequence number at the point that the DB:: code was
3205 entered. (This allows debuggers to eval in the scope of the breakpoint
3206 rather than in the scope of the debugger itself.)
3212 Perl_find_runcv(pTHX_ U32 *db_seqp)
3214 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3217 /* If this becomes part of the API, it might need a better name. */
3219 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3226 PL_curcop == &PL_compiling
3228 : PL_curcop->cop_seq;
3230 for (si = PL_curstackinfo; si; si = si->si_prev) {
3232 for (ix = si->si_cxix; ix >= 0; ix--) {
3233 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3235 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3236 cv = cx->blk_sub.cv;
3237 /* skip DB:: code */
3238 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3239 *db_seqp = cx->blk_oldcop->cop_seq;
3242 if (cx->cx_type & CXp_SUB_RE)
3245 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3246 cv = cx->blk_eval.cv;
3249 case FIND_RUNCV_padid_eq:
3251 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3254 case FIND_RUNCV_level_eq:
3255 if (level++ != arg) continue;
3263 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3267 /* Run yyparse() in a setjmp wrapper. Returns:
3268 * 0: yyparse() successful
3269 * 1: yyparse() failed
3273 S_try_yyparse(pTHX_ int gramtype)
3278 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3282 ret = yyparse(gramtype) ? 1 : 0;
3289 NOT_REACHED; /* NOTREACHED */
3296 /* Compile a require/do or an eval ''.
3298 * outside is the lexically enclosing CV (if any) that invoked us.
3299 * seq is the current COP scope value.
3300 * hh is the saved hints hash, if any.
3302 * Returns a bool indicating whether the compile was successful; if so,
3303 * PL_eval_start contains the first op of the compiled code; otherwise,
3306 * This function is called from two places: pp_require and pp_entereval.
3307 * These can be distinguished by whether PL_op is entereval.
3311 S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
3314 OP * const saveop = PL_op;
3315 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3316 COP * const oldcurcop = PL_curcop;
3317 bool in_require = (saveop->op_type == OP_REQUIRE);
3321 PL_in_eval = (in_require
3322 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3324 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3325 ? EVAL_RE_REPARSING : 0)));
3329 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3331 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
3332 CX_CUR()->blk_eval.cv = evalcv;
3333 CX_CUR()->blk_gimme = gimme;
3335 CvOUTSIDE_SEQ(evalcv) = seq;
3336 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3338 /* set up a scratch pad */
3340 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3341 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3344 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3346 /* make sure we compile in the right package */
3348 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3349 SAVEGENERICSV(PL_curstash);
3350 PL_curstash = (HV *)CopSTASH(PL_curcop);
3351 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3352 else SvREFCNT_inc_simple_void(PL_curstash);
3354 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3355 SAVESPTR(PL_beginav);
3356 PL_beginav = newAV();
3357 SAVEFREESV(PL_beginav);
3358 SAVESPTR(PL_unitcheckav);
3359 PL_unitcheckav = newAV();
3360 SAVEFREESV(PL_unitcheckav);
3363 ENTER_with_name("evalcomp");
3364 SAVESPTR(PL_compcv);
3367 /* try to compile it */
3369 PL_eval_root = NULL;
3370 PL_curcop = &PL_compiling;
3371 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3372 PL_in_eval |= EVAL_KEEPERR;
3379 hv_clear(GvHV(PL_hintgv));
3382 PL_hints = saveop->op_private & OPpEVAL_COPHH
3383 ? oldcurcop->cop_hints : (U32)saveop->op_targ;
3385 /* making 'use re eval' not be in scope when compiling the
3386 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3387 * infinite recursion when S_has_runtime_code() gives a false
3388 * positive: the second time round, HINT_RE_EVAL isn't set so we
3389 * don't bother calling S_has_runtime_code() */
3390 if (PL_in_eval & EVAL_RE_REPARSING)
3391 PL_hints &= ~HINT_RE_EVAL;
3394 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3395 SvREFCNT_dec(GvHV(PL_hintgv));
3396 GvHV(PL_hintgv) = hh;
3399 SAVECOMPILEWARNINGS();
3401 if (PL_dowarn & G_WARN_ALL_ON)
3402 PL_compiling.cop_warnings = pWARN_ALL ;
3403 else if (PL_dowarn & G_WARN_ALL_OFF)
3404 PL_compiling.cop_warnings = pWARN_NONE ;
3406 PL_compiling.cop_warnings = pWARN_STD ;
3409 PL_compiling.cop_warnings =
3410 DUP_WARNINGS(oldcurcop->cop_warnings);
3411 cophh_free(CopHINTHASH_get(&PL_compiling));
3412 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3413 /* The label, if present, is the first entry on the chain. So rather
3414 than writing a blank label in front of it (which involves an
3415 allocation), just use the next entry in the chain. */
3416 PL_compiling.cop_hints_hash
3417 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3418 /* Check the assumption that this removed the label. */
3419 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3422 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3425 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3427 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3428 * so honour CATCH_GET and trap it here if necessary */
3431 /* compile the code */
3432 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3434 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3439 /* note that if yystatus == 3, then the require/eval died during
3440 * compilation, so the EVAL CX block has already been popped, and
3441 * various vars restored */
3442 if (yystatus != 3) {
3444 op_free(PL_eval_root);
3445 PL_eval_root = NULL;
3447 SP = PL_stack_base + POPMARK; /* pop original mark */
3449 assert(CxTYPE(cx) == CXt_EVAL);
3450 /* pop the CXt_EVAL, and if was a require, croak */
3451 S_pop_eval_context_maybe_croak(aTHX_ cx, ERRSV, 2);
3454 /* die_unwind() re-croaks when in require, having popped the
3455 * require EVAL context. So we should never catch a require
3457 assert(!in_require);
3460 if (!*(SvPV_nolen_const(errsv)))
3461 sv_setpvs(errsv, "Compilation error");
3463 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3468 /* Compilation successful. Now clean up */
3470 LEAVE_with_name("evalcomp");
3472 CopLINE_set(&PL_compiling, 0);
3473 SAVEFREEOP(PL_eval_root);
3474 cv_forget_slab(evalcv);
3476 DEBUG_x(dump_eval());
3478 /* Register with debugger: */
3479 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3480 CV * const cv = get_cvs("DB::postponed", 0);
3484 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3486 call_sv(MUTABLE_SV(cv), G_DISCARD);
3490 if (PL_unitcheckav) {
3491 OP *es = PL_eval_start;
3492 call_list(PL_scopestack_ix, PL_unitcheckav);
3496 CvDEPTH(evalcv) = 1;
3497 SP = PL_stack_base + POPMARK; /* pop original mark */
3498 PL_op = saveop; /* The caller may need it. */
3499 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3505 /* Return NULL if the file doesn't exist or isn't a file;
3506 * else return PerlIO_openn().
3510 S_check_type_and_open(pTHX_ SV *name)
3515 const char *p = SvPV_const(name, len);
3518 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3520 /* checking here captures a reasonable error message when
3521 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3522 * user gets a confusing message about looking for the .pmc file
3523 * rather than for the .pm file so do the check in S_doopen_pm when
3524 * PMC is on instead of here. S_doopen_pm calls this func.
3525 * This check prevents a \0 in @INC causing problems.
3527 #ifdef PERL_DISABLE_PMC
3528 if (!IS_SAFE_PATHNAME(p, len, "require"))
3532 /* on Win32 stat is expensive (it does an open() and close() twice and
3533 a couple other IO calls), the open will fail with a dir on its own with
3534 errno EACCES, so only do a stat to separate a dir from a real EACCES
3535 caused by user perms */
3537 /* we use the value of errno later to see how stat() or open() failed.
3538 * We don't want it set if the stat succeeded but we still failed,
3539 * such as if the name exists, but is a directory */
3542 st_rc = PerlLIO_stat(p, &st);
3544 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3549 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3551 /* EACCES stops the INC search early in pp_require to implement
3552 feature RT #113422 */
3553 if(!retio && errno == EACCES) { /* exists but probably a directory */
3555 st_rc = PerlLIO_stat(p, &st);
3557 if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
3568 /* doopen_pm(): return the equivalent of PerlIO_openn() on the given name,
3569 * but first check for bad names (\0) and non-files.
3570 * Also if the filename ends in .pm and unless PERL_DISABLE_PMC,
3571 * try loading Foo.pmc first.
3573 #ifndef PERL_DISABLE_PMC
3575 S_doopen_pm(pTHX_ SV *name)
3578 const char *p = SvPV_const(name, namelen);
3580 PERL_ARGS_ASSERT_DOOPEN_PM;
3582 /* check the name before trying for the .pmc name to avoid the
3583 * warning referring to the .pmc which the user probably doesn't
3584 * know or care about
3586 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3589 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3590 SV *const pmcsv = sv_newmortal();
3593 SvSetSV_nosteal(pmcsv,name);
3594 sv_catpvs(pmcsv, "c");
3596 pmcio = check_type_and_open(pmcsv);
3600 return check_type_and_open(name);
3603 # define doopen_pm(name) check_type_and_open(name)
3604 #endif /* !PERL_DISABLE_PMC */
3606 /* require doesn't search in @INC for absolute names, or when the name is
3607 explicitly relative the current directory: i.e. ./, ../ */
3608 PERL_STATIC_INLINE bool
3609 S_path_is_searchable(const char *name)
3611 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3613 if (PERL_FILE_IS_ABSOLUTE(name)
3615 || (*name == '.' && ((name[1] == '/' ||
3616 (name[1] == '.' && name[2] == '/'))
3617 || (name[1] == '\\' ||
3618 ( name[1] == '.' && name[2] == '\\')))
3621 || (*name == '.' && (name[1] == '/' ||
3622 (name[1] == '.' && name[2] == '/')))
3633 /* implement 'require 5.010001' */
3636 S_require_version(pTHX_ SV *sv)
3640 sv = sv_2mortal(new_version(sv));
3641 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3642 upg_version(PL_patchlevel, TRUE);
3643 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3644 if ( vcmp(sv,PL_patchlevel) <= 0 )
3645 DIE(aTHX_ "Perls since %" SVf " too modern--this is %" SVf ", stopped",
3646 SVfARG(sv_2mortal(vnormal(sv))),
3647 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3651 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3654 SV * const req = SvRV(sv);
3655 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3657 /* get the left hand term */
3658 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3660 first = SvIV(*av_fetch(lav,0,0));
3661 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3662 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3663 || av_tindex(lav) > 1 /* FP with > 3 digits */
3664 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3666 DIE(aTHX_ "Perl %" SVf " required--this is only "
3667 "%" SVf ", stopped",
3668 SVfARG(sv_2mortal(vnormal(req))),
3669 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3672 else { /* probably 'use 5.10' or 'use 5.8' */
3676 if (av_tindex(lav)>=1)
3677 second = SvIV(*av_fetch(lav,1,0));
3679 second /= second >= 600 ? 100 : 10;
3680 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3681 (int)first, (int)second);
3682 upg_version(hintsv, TRUE);
3684 DIE(aTHX_ "Perl %" SVf " required (did you mean %" SVf "?)"
3685 "--this is only %" SVf ", stopped",
3686 SVfARG(sv_2mortal(vnormal(req))),
3687 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3688 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3697 /* Handle C<require Foo::Bar>, C<require "Foo/Bar.pm"> and C<do "Foo.pm">.
3698 * The first form will have already been converted at compile time to
3699 * the second form */
3702 S_require_file(pTHX_ SV *sv)
3712 int vms_unixname = 0;
3715 /* tryname is the actual pathname (with @INC prefix) which was loaded.
3716 * It's stored as a value in %INC, and used for error messages */
3717 const char *tryname = NULL;
3718 SV *namesv = NULL; /* SV equivalent of tryname */
3719 const U8 gimme = GIMME_V;
3720 int filter_has_file = 0;
3721 PerlIO *tryrsfp = NULL;
3722 SV *filter_cache = NULL;
3723 SV *filter_state = NULL;
3724 SV *filter_sub = NULL;
3728 bool path_searchable;
3729 I32 old_savestack_ix;
3730 const bool op_is_require = PL_op->op_type == OP_REQUIRE;
3731 const char *const op_name = op_is_require ? "require" : "do";
3733 assert(op_is_require || PL_op->op_type == OP_DOFILE);
3736 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3737 name = SvPV_nomg_const(sv, len);
3738 if (!(name && len > 0 && *name))
3739 DIE(aTHX_ "Missing or undefined argument to %s", op_name);
3741 if (!IS_SAFE_PATHNAME(name, len, op_name)) {
3742 if (!op_is_require) {
3746 DIE(aTHX_ "Can't locate %s: %s",
3747 pv_escape(newSVpvs_flags("",SVs_TEMP),name,len,len*2,
3748 NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3751 TAINT_PROPER(op_name);
3753 path_searchable = path_is_searchable(name);
3756 /* The key in the %ENV hash is in the syntax of file passed as the argument
3757 * usually this is in UNIX format, but sometimes in VMS format, which
3758 * can result in a module being pulled in more than once.
3759 * To prevent this, the key must be stored in UNIX format if the VMS
3760 * name can be translated to UNIX.
3764 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3766 unixlen = strlen(unixname);
3772 /* if not VMS or VMS name can not be translated to UNIX, pass it
3775 unixname = (char *) name;
3778 if (op_is_require) {
3779 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3780 unixname, unixlen, 0);
3782 if (*svp != &PL_sv_undef)
3785 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3786 "Compilation failed in require", unixname);
3789 /*XXX OPf_KIDS should always be true? -dapm 4/2017 */
3790 if (PL_op->op_flags & OPf_KIDS) {
3791 SVOP * const kid = (SVOP*)cUNOP->op_first;
3793 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
3794 /* Make sure that a bareword module name (e.g. ::Foo::Bar)
3795 * doesn't map to a naughty pathname like /Foo/Bar.pm.
3796 * Note that the parser will normally detect such errors
3797 * at compile time before we reach here, but
3798 * Perl_load_module() can fake up an identical optree
3799 * without going near the parser, and being able to put
3800 * anything as the bareword. So we include a duplicate set
3801 * of checks here at runtime.
3803 const STRLEN package_len = len - 3;
3804 const char slashdot[2] = {'/', '.'};
3806 const char backslashdot[2] = {'\\', '.'};
3809 /* Disallow *purported* barewords that map to absolute
3810 filenames, filenames relative to the current or parent
3811 directory, or (*nix) hidden filenames. Also sanity check
3812 that the generated filename ends .pm */
3813 if (!path_searchable || len < 3 || name[0] == '.'
3814 || !memEQ(name + package_len, ".pm", 3))
3815 DIE(aTHX_ "Bareword in require maps to disallowed filename \"%" SVf "\"", sv);
3816 if (memchr(name, 0, package_len)) {
3817 /* diag_listed_as: Bareword in require contains "%s" */
3818 DIE(aTHX_ "Bareword in require contains \"\\0\"");
3820 if (ninstr(name, name + package_len, slashdot,
3821 slashdot + sizeof(slashdot))) {
3822 /* diag_listed_as: Bareword in require contains "%s" */
3823 DIE(aTHX_ "Bareword in require contains \"/.\"");
3826 if (ninstr(name, name + package_len, backslashdot,
3827 backslashdot + sizeof(backslashdot))) {
3828 /* diag_listed_as: Bareword in require contains "%s" */
3829 DIE(aTHX_ "Bareword in require contains \"\\.\"");
3836 PERL_DTRACE_PROBE_FILE_LOADING(unixname);
3838 /* Try to locate and open a file, possibly using @INC */
3840 /* with "/foo/bar.pm", "./foo.pm" and "../foo/bar.pm", try to load
3841 * the file directly rather than via @INC ... */
3842 if (!path_searchable) {
3843 /* At this point, name is SvPVX(sv) */
3845 tryrsfp = doopen_pm(sv);
3848 /* ... but if we fail, still search @INC for code references;
3849 * these are applied even on on-searchable paths (except
3850 * if we got EACESS).
3852 * For searchable paths, just search @INC normally
3854 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3855 AV * const ar = GvAVn(PL_incgv);
3862 namesv = newSV_type(SVt_PV);
3863 for (i = 0; i <= AvFILL(ar); i++) {
3864 SV * const dirsv = *av_fetch(ar, i, TRUE);
3872 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3873 && !SvOBJECT(SvRV(loader)))
3875 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3879 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%" UVxf "/%s",
3880 PTR2UV(SvRV(dirsv)), name);
3881 tryname = SvPVX_const(namesv);
3884 if (SvPADTMP(nsv)) {
3885 nsv = sv_newmortal();
3886 SvSetSV_nosteal(nsv,sv);
3889 ENTER_with_name("call_INC");
3897 if (SvGMAGICAL(loader)) {
3898 SV *l = sv_newmortal();
3899 sv_setsv_nomg(l, loader);
3902 if (sv_isobject(loader))
3903 count = call_method("INC", G_ARRAY);
3905 count = call_sv(loader, G_ARRAY);
3915 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3916 && !isGV_with_GP(SvRV(arg))) {
3917 filter_cache = SvRV(arg);
3924 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3928 if (isGV_with_GP(arg)) {
3929 IO * const io = GvIO((const GV *)arg);
3934 tryrsfp = IoIFP(io);
3935 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3936 PerlIO_close(IoOFP(io));
3947 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3949 SvREFCNT_inc_simple_void_NN(filter_sub);
3952 filter_state = SP[i];
3953 SvREFCNT_inc_simple_void(filter_state);
3957 if (!tryrsfp && (filter_cache || filter_sub)) {
3958 tryrsfp = PerlIO_open(BIT_BUCKET,
3964 /* FREETMPS may free our filter_cache */
3965 SvREFCNT_inc_simple_void(filter_cache);
3969 LEAVE_with_name("call_INC");
3971 /* Now re-mortalize it. */
3972 sv_2mortal(filter_cache);
3974 /* Adjust file name if the hook has set an %INC entry.
3975 This needs to happen after the FREETMPS above. */
3976 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3978 tryname = SvPV_nolen_const(*svp);
3985 filter_has_file = 0;
3986 filter_cache = NULL;
3988 SvREFCNT_dec_NN(filter_state);
3989 filter_state = NULL;
3992 SvREFCNT_dec_NN(filter_sub);
3996 else if (path_searchable) {
3997 /* match against a plain @INC element (non-searchable
3998 * paths are only matched against refs in @INC) */
4003 dir = SvPV_nomg_const(dirsv, dirlen);
4009 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", op_name))
4013 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
4016 sv_setpv(namesv, unixdir);
4017 sv_catpv(namesv, unixname);
4019 # ifdef __SYMBIAN32__
4020 if (PL_origfilename[0] &&
4021 PL_origfilename[1] == ':' &&
4022 !(dir[0] && dir[1] == ':'))
4023 Perl_sv_setpvf(aTHX_ namesv,
4028 Perl_sv_setpvf(aTHX_ namesv,
4032 /* The equivalent of
4033 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4034 but without the need to parse the format string, or
4035 call strlen on either pointer, and with the correct
4036 allocation up front. */
4038 char *tmp = SvGROW(namesv, dirlen + len + 2);
4040 memcpy(tmp, dir, dirlen);
4043 /* Avoid '<dir>//<file>' */
4044 if (!dirlen || *(tmp-1) != '/') {
4047 /* So SvCUR_set reports the correct length below */
4051 /* name came from an SV, so it will have a '\0' at the
4052 end that we can copy as part of this memcpy(). */
4053 memcpy(tmp, name, len + 1);
4055 SvCUR_set(namesv, dirlen + len + 1);
4060 TAINT_PROPER(op_name);
4061 tryname = SvPVX_const(namesv);
4062 tryrsfp = doopen_pm(namesv);
4064 if (tryname[0] == '.' && tryname[1] == '/') {
4066 while (*++tryname == '/') {}
4070 else if (errno == EMFILE || errno == EACCES) {
4071 /* no point in trying other paths if out of handles;
4072 * on the other hand, if we couldn't open one of the
4073 * files, then going on with the search could lead to
4074 * unexpected results; see perl #113422
4083 /* at this point we've ether opened a file (tryrsfp) or set errno */
4085 saved_errno = errno; /* sv_2mortal can realloc things */
4088 /* we failed; croak if require() or return undef if do() */
4089 if (op_is_require) {
4090 if(saved_errno == EMFILE || saved_errno == EACCES) {
4091 /* diag_listed_as: Can't locate %s */
4092 DIE(aTHX_ "Can't locate %s: %s: %s",
4093 name, tryname, Strerror(saved_errno));
4095 if (path_searchable) { /* did we lookup @INC? */
4096 AV * const ar = GvAVn(PL_incgv);
4098 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4099 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4100 const char *e = name + len - 3; /* possible .pm */
4101 for (i = 0; i <= AvFILL(ar); i++) {
4102 sv_catpvs(inc, " ");
4103 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4105 if (e > name && _memEQs(e, ".pm")) {
4107 bool utf8 = cBOOL(SvUTF8(sv));
4109 /* if the filename, when converted from "Foo/Bar.pm"
4110 * form back to Foo::Bar form, makes a valid
4111 * package name (i.e. parseable by C<require
4112 * Foo::Bar>), then emit a hint.
4114 * this loop is modelled after the one in
4118 if (utf8 && isIDFIRST_utf8_safe(c, e)) {
4120 while (c < e && isIDCONT_utf8_safe(
4121 (const U8*) c, (const U8*) e))
4124 else if (isWORDCHAR_A(*c)) {
4125 while (c < e && isWORDCHAR_A(*c))
4134 if (c == e && isIDFIRST_lazy_if_safe(name, e, utf8)) {
4135 sv_catpv(msg, " (you may need to install the ");
4136 for (c = name; c < e; c++) {
4138 sv_catpvs(msg, "::");
4141 sv_catpvn(msg, c, 1);
4144 sv_catpv(msg, " module)");
4147 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4148 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4150 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4151 sv_catpv(msg, " (did you run h2ph?)");
4154 /* diag_listed_as: Can't locate %s */
4156 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4160 DIE(aTHX_ "Can't locate %s", name);
4163 #ifdef DEFAULT_INC_EXCLUDES_DOT
4167 /* the complication is to match the logic from doopen_pm() so
4168 * we don't treat do "sda1" as a previously successful "do".
4170 bool do_warn = namesv && ckWARN_d(WARN_DEPRECATED)
4171 && PerlLIO_stat(name, &st) == 0 && !S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode)
4172 && (io = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &sv)) != NULL;
4178 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4179 "do \"%s\" failed, '.' is no longer in @INC; "
4180 "did you mean do \"./%s\"?",
4189 SETERRNO(0, SS_NORMAL);
4191 /* Update %INC. Assume success here to prevent recursive requirement. */
4192 /* name is never assigned to again, so len is still strlen(name) */
4193 /* Check whether a hook in @INC has already filled %INC */
4195 (void)hv_store(GvHVn(PL_incgv),
4196 unixname, unixlen, newSVpv(tryname,0),0);
4198 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4200 (void)hv_store(GvHVn(PL_incgv),
4201 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4204 /* Now parse the file */
4206 old_savestack_ix = PL_savestack_ix;
4207 SAVECOPFILE_FREE(&PL_compiling);
4208 CopFILE_set(&PL_compiling, tryname);
4209 lex_start(NULL, tryrsfp, 0);
4211 if (filter_sub || filter_cache) {
4212 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4213 than hanging another SV from it. In turn, filter_add() optionally
4214 takes the SV to use as the filter (or creates a new SV if passed
4215 NULL), so simply pass in whatever value filter_cache has. */
4216 SV * const fc = filter_cache ? newSV(0) : NULL;
4218 if (fc) sv_copypv(fc, filter_cache);
4219 datasv = filter_add(S_run_user_filter, fc);
4220 IoLINES(datasv) = filter_has_file;
4221 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4222 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4225 /* switch to eval mode */
4227 cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
4228 cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
4230 SAVECOPLINE(&PL_compiling);
4231 CopLINE_set(&PL_compiling, 0);
4235 if (doeval_compile(gimme, NULL, PL_curcop->cop_seq, NULL))
4238 op = PL_op->op_next;
4240 PERL_DTRACE_PROBE_FILE_LOADED(unixname);
4246 /* also used for: pp_dofile() */
4250 RUN_PP_CATCHABLY(Perl_pp_require);
4257 return ((SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE)
4258 ? S_require_version(aTHX_ sv)
4259 : S_require_file(aTHX_ sv);
4264 /* This is a op added to hold the hints hash for
4265 pp_entereval. The hash can be modified by the code
4266 being eval'ed, so we return a copy instead. */
4271 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4283 char tbuf[TYPE_DIGITS(long) + 12];
4291 I32 old_savestack_ix;
4293 RUN_PP_CATCHABLY(Perl_pp_entereval);
4296 was = PL_breakable_sub_gen;
4297 saved_delete = FALSE;
4301 bytes = PL_op->op_private & OPpEVAL_BYTES;
4303 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4304 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4306 else if (PL_hints & HINT_LOCALIZE_HH || (
4307 PL_op->op_private & OPpEVAL_COPHH
4308 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4310 saved_hh = cop_hints_2hv(PL_curcop, 0);
4311 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4315 /* make sure we've got a plain PV (no overload etc) before testing
4316 * for taint. Making a copy here is probably overkill, but better
4317 * safe than sorry */
4319 const char * const p = SvPV_const(sv, len);
4321 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4322 lex_flags |= LEX_START_COPIED;
4324 if (bytes && SvUTF8(sv))
4325 SvPVbyte_force(sv, len);
4327 else if (bytes && SvUTF8(sv)) {
4328 /* Don't modify someone else's scalar */
4331 (void)sv_2mortal(sv);
4332 SvPVbyte_force(sv,len);
4333 lex_flags |= LEX_START_COPIED;
4336 TAINT_IF(SvTAINTED(sv));
4337 TAINT_PROPER("eval");
4339 old_savestack_ix = PL_savestack_ix;
4341 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4342 ? LEX_IGNORE_UTF8_HINTS
4343 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4347 /* switch to eval mode */
4349 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4350 SV * const temp_sv = sv_newmortal();
4351 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%" IVdf "]",
4352 (unsigned long)++PL_evalseq,
4353 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4354 tmpbuf = SvPVX(temp_sv);
4355 len = SvCUR(temp_sv);
4358 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4359 SAVECOPFILE_FREE(&PL_compiling);
4360 CopFILE_set(&PL_compiling, tmpbuf+2);
4361 SAVECOPLINE(&PL_compiling);
4362 CopLINE_set(&PL_compiling, 1);
4363 /* special case: an eval '' executed within the DB package gets lexically
4364 * placed in the first non-DB CV rather than the current CV - this
4365 * allows the debugger to execute code, find lexicals etc, in the
4366 * scope of the code being debugged. Passing &seq gets find_runcv
4367 * to do the dirty work for us */
4368 runcv = find_runcv(&seq);
4371 cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
4372 cx_pusheval(cx, PL_op->op_next, NULL);
4374 /* prepare to compile string */
4376 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4377 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4379 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4380 deleting the eval's FILEGV from the stash before gv_check() runs
4381 (i.e. before run-time proper). To work around the coredump that
4382 ensues, we always turn GvMULTI_on for any globals that were
4383 introduced within evals. See force_ident(). GSAR 96-10-12 */
4384 char *const safestr = savepvn(tmpbuf, len);
4385 SAVEDELETE(PL_defstash, safestr, len);
4386 saved_delete = TRUE;
4391 if (doeval_compile(gimme, runcv, seq, saved_hh)) {
4392 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4393 ? PERLDB_LINE_OR_SAVESRC
4394 : PERLDB_SAVESRC_NOSUBS) {
4395 /* Retain the filegv we created. */
4396 } else if (!saved_delete) {
4397 char *const safestr = savepvn(tmpbuf, len);
4398 SAVEDELETE(PL_defstash, safestr, len);
4400 return PL_eval_start;
4402 /* We have already left the scope set up earlier thanks to the LEAVE
4403 in doeval_compile(). */
4404 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4405 ? PERLDB_LINE_OR_SAVESRC
4406 : PERLDB_SAVESRC_INVALID) {
4407 /* Retain the filegv we created. */
4408 } else if (!saved_delete) {
4409 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4411 return PL_op->op_next;
4416 /* also tail-called by pp_return */
4431 assert(CxTYPE(cx) == CXt_EVAL);
4433 oldsp = PL_stack_base + cx->blk_oldsp;
4434 gimme = cx->blk_gimme;
4436 /* did require return a false value? */
4437 failed = CxOLD_OP_TYPE(cx) == OP_REQUIRE
4438 && !(gimme == G_SCALAR
4439 ? SvTRUE(*PL_stack_sp)
4440 : PL_stack_sp > oldsp);
4442 if (gimme == G_VOID)
4443 PL_stack_sp = oldsp;
4445 leave_adjust_stacks(oldsp, oldsp, gimme, 0);
4447 /* the cx_popeval does a leavescope, which frees the optree associated
4448 * with eval, which if it frees the nextstate associated with
4449 * PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
4450 * regex when running under 'use re Debug' because it needs PL_curcop
4451 * to get the current hints. So restore it early.
4453 PL_curcop = cx->blk_oldcop;
4455 /* grab this value before cx_popeval restores the old PL_in_eval */
4456 keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4457 retop = cx->blk_eval.retop;
4458 evalcv = cx->blk_eval.cv;
4460 assert(CvDEPTH(evalcv) == 1);
4462 CvDEPTH(evalcv) = 0;
4464 /* pop the CXt_EVAL, and if a require failed, croak */
4465 S_pop_eval_context_maybe_croak(aTHX_ cx, NULL, failed);
4473 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4474 close to the related Perl_create_eval_scope. */
4476 Perl_delete_eval_scope(pTHX)
4487 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4488 also needed by Perl_fold_constants. */
4490 Perl_create_eval_scope(pTHX_ OP *retop, U32 flags)
4493 const U8 gimme = GIMME_V;
4495 cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
4496 PL_stack_sp, PL_savestack_ix);
4497 cx_pusheval(cx, retop, NULL);
4499 PL_in_eval = EVAL_INEVAL;
4500 if (flags & G_KEEPERR)
4501 PL_in_eval |= EVAL_KEEPERR;
4504 if (flags & G_FAKINGEVAL) {
4505 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4511 RUN_PP_CATCHABLY(Perl_pp_entertry);
4514 create_eval_scope(cLOGOP->op_other->op_next, 0);
4515 return PL_op->op_next;
4519 /* also tail-called by pp_return */
4531 assert(CxTYPE(cx) == CXt_EVAL);
4532 oldsp = PL_stack_base + cx->blk_oldsp;
4533 gimme = cx->blk_gimme;
4535 if (gimme == G_VOID)
4536 PL_stack_sp = oldsp;
4538 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4542 retop = cx->blk_eval.retop;
4553 const U8 gimme = GIMME_V;
4557 assert(!PL_op->op_targ); /* used to be set for lexical $_ */
4558 GvSV(PL_defgv) = SvREFCNT_inc(newsv);
4560 cx = cx_pushblock(CXt_GIVEN, gimme, SP, PL_savestack_ix);
4561 cx_pushgiven(cx, origsv);
4571 PERL_UNUSED_CONTEXT;
4574 assert(CxTYPE(cx) == CXt_GIVEN);
4575 oldsp = PL_stack_base + cx->blk_oldsp;
4576 gimme = cx->blk_gimme;
4578 if (gimme == G_VOID)
4579 PL_stack_sp = oldsp;
4581 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
4591 /* Helper routines used by pp_smartmatch */
4593 S_make_matcher(pTHX_ REGEXP *re)
4595 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4597 PERL_ARGS_ASSERT_MAKE_MATCHER;
4599 PM_SETRE(matcher, ReREFCNT_inc(re));
4601 SAVEFREEOP((OP *) matcher);
4602 ENTER_with_name("matcher"); SAVETMPS;
4608 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4613 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4615 PL_op = (OP *) matcher;
4618 (void) Perl_pp_match(aTHX);
4620 result = SvTRUEx(POPs);
4627 S_destroy_matcher(pTHX_ PMOP *matcher)
4629 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4630 PERL_UNUSED_ARG(matcher);
4633 LEAVE_with_name("matcher");
4636 /* Do a smart match */
4639 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4640 return do_smartmatch(NULL, NULL, 0);
4643 /* This version of do_smartmatch() implements the
4644 * table of smart matches that is found in perlsyn.
4647 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4651 bool object_on_left = FALSE;
4652 SV *e = TOPs; /* e is for 'expression' */
4653 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4655 /* Take care only to invoke mg_get() once for each argument.
4656 * Currently we do this by copying the SV if it's magical. */
4658 if (!copied && SvGMAGICAL(d))
4659 d = sv_mortalcopy(d);
4666 e = sv_mortalcopy(e);
4668 /* First of all, handle overload magic of the rightmost argument */
4671 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4672 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4674 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4681 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4684 SP -= 2; /* Pop the values */
4689 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4696 if (SvROK(e) && SvOBJECT(SvRV(e)) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4697 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4698 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4700 if (SvROK(d) && SvOBJECT(SvRV(d)) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4701 object_on_left = TRUE;
4704 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4706 if (object_on_left) {
4707 goto sm_any_sub; /* Treat objects like scalars */
4709 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4710 /* Test sub truth for each key */
4712 bool andedresults = TRUE;
4713 HV *hv = (HV*) SvRV(d);
4714 I32 numkeys = hv_iterinit(hv);
4715 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4718 while ( (he = hv_iternext(hv)) ) {
4719 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4720 ENTER_with_name("smartmatch_hash_key_test");
4723 PUSHs(hv_iterkeysv(he));
4725 c = call_sv(e, G_SCALAR);
4728 andedresults = FALSE;
4730 andedresults = SvTRUEx(POPs) && andedresults;
4732 LEAVE_with_name("smartmatch_hash_key_test");
4739 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4740 /* Test sub truth for each element */
4742 bool andedresults = TRUE;
4743 AV *av = (AV*) SvRV(d);
4744 const I32 len = av_tindex(av);
4745 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4748 for (i = 0; i <= len; ++i) {
4749 SV * const * const svp = av_fetch(av, i, FALSE);
4750 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4751 ENTER_with_name("smartmatch_array_elem_test");
4757 c = call_sv(e, G_SCALAR);
4760 andedresults = FALSE;
4762 andedresults = SvTRUEx(POPs) && andedresults;
4764 LEAVE_with_name("smartmatch_array_elem_test");
4773 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4774 ENTER_with_name("smartmatch_coderef");
4779 c = call_sv(e, G_SCALAR);
4783 else if (SvTEMP(TOPs))
4784 SvREFCNT_inc_void(TOPs);
4786 LEAVE_with_name("smartmatch_coderef");
4791 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4792 if (object_on_left) {
4793 goto sm_any_hash; /* Treat objects like scalars */
4795 else if (!SvOK(d)) {
4796 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4799 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4800 /* Check that the key-sets are identical */
4802 HV *other_hv = MUTABLE_HV(SvRV(d));
4805 U32 this_key_count = 0,
4806 other_key_count = 0;
4807 HV *hv = MUTABLE_HV(SvRV(e));
4809 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4810 /* Tied hashes don't know how many keys they have. */
4811 tied = cBOOL(SvTIED_mg((SV*)hv, PERL_MAGIC_tied));
4812 other_tied = cBOOL(SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied));
4816 HV * const temp = other_hv;
4822 else if(HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4826 /* The hashes have the same number of keys, so it suffices
4827 to check that one is a subset of the other. */
4828 (void) hv_iterinit(hv);
4829 while ( (he = hv_iternext(hv)) ) {
4830 SV *key = hv_iterkeysv(he);
4832 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4835 if(!hv_exists_ent(other_hv, key, 0)) {
4836 (void) hv_iterinit(hv); /* reset iterator */
4842 (void) hv_iterinit(other_hv);
4843 while ( hv_iternext(other_hv) )
4847 other_key_count = HvUSEDKEYS(other_hv);
4849 if (this_key_count != other_key_count)
4854 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4855 AV * const other_av = MUTABLE_AV(SvRV(d));
4856 const SSize_t other_len = av_tindex(other_av) + 1;
4858 HV *hv = MUTABLE_HV(SvRV(e));
4860 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4861 for (i = 0; i < other_len; ++i) {
4862 SV ** const svp = av_fetch(other_av, i, FALSE);
4863 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4864 if (svp) { /* ??? When can this not happen? */
4865 if (hv_exists_ent(hv, *svp, 0))
4871 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4872 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4875 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4877 HV *hv = MUTABLE_HV(SvRV(e));
4879 (void) hv_iterinit(hv);
4880 while ( (he = hv_iternext(hv)) ) {
4881 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4883 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4885 (void) hv_iterinit(hv);
4886 destroy_matcher(matcher);
4891 destroy_matcher(matcher);
4897 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4898 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4905 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4906 if (object_on_left) {
4907 goto sm_any_array; /* Treat objects like scalars */
4909 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4910 AV * const other_av = MUTABLE_AV(SvRV(e));
4911 const SSize_t other_len = av_tindex(other_av) + 1;
4914 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4915 for (i = 0; i < other_len; ++i) {
4916 SV ** const svp = av_fetch(other_av, i, FALSE);
4918 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4919 if (svp) { /* ??? When can this not happen? */
4920 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4926 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4927 AV *other_av = MUTABLE_AV(SvRV(d));
4928 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4929 if (av_tindex(MUTABLE_AV(SvRV(e))) != av_tindex(other_av))
4933 const SSize_t other_len = av_tindex(other_av);
4935 if (NULL == seen_this) {
4936 seen_this = newHV();
4937 (void) sv_2mortal(MUTABLE_SV(seen_this));
4939 if (NULL == seen_other) {
4940 seen_other = newHV();
4941 (void) sv_2mortal(MUTABLE_SV(seen_other));
4943 for(i = 0; i <= other_len; ++i) {
4944 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4945 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4947 if (!this_elem || !other_elem) {
4948 if ((this_elem && SvOK(*this_elem))
4949 || (other_elem && SvOK(*other_elem)))
4952 else if (hv_exists_ent(seen_this,
4953 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4954 hv_exists_ent(seen_other,
4955 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4957 if (*this_elem != *other_elem)
4961 (void)hv_store_ent(seen_this,
4962 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4964 (void)hv_store_ent(seen_other,
4965 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4971 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4972 (void) do_smartmatch(seen_this, seen_other, 0);
4974 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4983 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4984 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4987 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4988 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
4991 for(i = 0; i <= this_len; ++i) {
4992 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4993 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4995 if (svp && matcher_matches_sv(matcher, *svp)) {
4997 destroy_matcher(matcher);
5002 destroy_matcher(matcher);
5006 else if (!SvOK(d)) {
5007 /* undef ~~ array */
5008 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
5011 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
5012 for (i = 0; i <= this_len; ++i) {
5013 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5014 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
5015 if (!svp || !SvOK(*svp))
5024 const SSize_t this_len = av_tindex(MUTABLE_AV(SvRV(e)));
5026 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
5027 for (i = 0; i <= this_len; ++i) {
5028 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
5035 /* infinite recursion isn't supposed to happen here */
5036 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
5037 (void) do_smartmatch(NULL, NULL, 1);
5039 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
5048 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
5049 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
5050 SV *t = d; d = e; e = t;
5051 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
5054 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
5055 SV *t = d; d = e; e = t;
5056 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
5057 goto sm_regex_array;
5060 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
5063 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
5065 result = matcher_matches_sv(matcher, d);
5067 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
5068 destroy_matcher(matcher);
5073 /* See if there is overload magic on left */
5074 else if (object_on_left && SvAMAGIC(d)) {
5076 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
5077 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
5080 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
5088 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
5091 else if (!SvOK(d)) {
5092 /* undef ~~ scalar ; we already know that the scalar is SvOK */
5093 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
5098 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
5099 DEBUG_M(if (SvNIOK(e))
5100 Perl_deb(aTHX_ " applying rule Any-Num\n");
5102 Perl_deb(aTHX_ " applying rule Num-numish\n");
5104 /* numeric comparison */
5107 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
5108 (void) Perl_pp_i_eq(aTHX);
5110 (void) Perl_pp_eq(aTHX);
5118 /* As a last resort, use string comparison */
5119 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
5122 return Perl_pp_seq(aTHX);
5129 const U8 gimme = GIMME_V;
5131 /* This is essentially an optimization: if the match
5132 fails, we don't want to push a context and then
5133 pop it again right away, so we skip straight
5134 to the op that follows the leavewhen.
5135 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5137 if (!(PL_op->op_flags & OPf_SPECIAL) && !SvTRUEx(POPs))
5138 RETURNOP(cLOGOP->op_other->op_next);
5140 cx = cx_pushblock(CXt_WHEN, gimme, SP, PL_savestack_ix);
5154 assert(CxTYPE(cx) == CXt_WHEN);
5155 gimme = cx->blk_gimme;
5157 cxix = dopoptogivenfor(cxstack_ix);
5159 /* diag_listed_as: Can't "when" outside a topicalizer */
5160 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
5161 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
5163 oldsp = PL_stack_base + cx->blk_oldsp;
5164 if (gimme == G_VOID)
5165 PL_stack_sp = oldsp;
5167 leave_adjust_stacks(oldsp, oldsp, gimme, 1);
5169 /* pop the WHEN, BLOCK and anything else before the GIVEN/FOR */
5170 assert(cxix < cxstack_ix);
5173 cx = &cxstack[cxix];
5175 if (CxFOREACH(cx)) {
5176 /* emulate pp_next. Note that any stack(s) cleanup will be
5177 * done by the pp_unstack which op_nextop should point to */
5180 PL_curcop = cx->blk_oldcop;
5181 return cx->blk_loop.my_op->op_nextop;
5185 assert(cx->blk_givwhen.leave_op->op_type == OP_LEAVEGIVEN);
5186 return cx->blk_givwhen.leave_op;
5196 cxix = dopoptowhen(cxstack_ix);
5198 DIE(aTHX_ "Can't \"continue\" outside a when block");
5200 if (cxix < cxstack_ix)
5204 assert(CxTYPE(cx) == CXt_WHEN);
5205 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5209 nextop = cx->blk_givwhen.leave_op->op_next;
5220 cxix = dopoptogivenfor(cxstack_ix);
5222 DIE(aTHX_ "Can't \"break\" outside a given block");
5224 cx = &cxstack[cxix];
5226 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5228 if (cxix < cxstack_ix)
5231 /* Restore the sp at the time we entered the given block */
5233 PL_stack_sp = PL_stack_base + cx->blk_oldsp;
5235 return cx->blk_givwhen.leave_op;
5239 S_doparseform(pTHX_ SV *sv)
5242 char *s = SvPV(sv, len);
5244 char *base = NULL; /* start of current field */
5245 I32 skipspaces = 0; /* number of contiguous spaces seen */
5246 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5247 bool repeat = FALSE; /* ~~ seen on this line */
5248 bool postspace = FALSE; /* a text field may need right padding */
5251 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5253 bool ischop; /* it's a ^ rather than a @ */
5254 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5255 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5259 PERL_ARGS_ASSERT_DOPARSEFORM;
5262 Perl_croak(aTHX_ "Null picture in formline");
5264 if (SvTYPE(sv) >= SVt_PVMG) {
5265 /* This might, of course, still return NULL. */
5266 mg = mg_find(sv, PERL_MAGIC_fm);
5268 sv_upgrade(sv, SVt_PVMG);
5272 /* still the same as previously-compiled string? */
5273 SV *old = mg->mg_obj;
5274 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5275 && len == SvCUR(old)
5276 && strnEQ(SvPVX(old), s, len)
5278 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5282 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5283 Safefree(mg->mg_ptr);
5289 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5290 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5293 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5294 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5298 /* estimate the buffer size needed */
5299 for (base = s; s <= send; s++) {
5300 if (*s == '\n' || *s == '@' || *s == '^')
5306 Newx(fops, maxops, U32);
5311 *fpc++ = FF_LINEMARK;
5312 noblank = repeat = FALSE;
5330 case ' ': case '\t':
5337 } /* else FALL THROUGH */
5345 *fpc++ = FF_LITERAL;
5353 *fpc++ = (U32)skipspaces;
5357 *fpc++ = FF_NEWLINE;
5361 arg = fpc - linepc + 1;
5368 *fpc++ = FF_LINEMARK;
5369 noblank = repeat = FALSE;
5378 ischop = s[-1] == '^';
5384 arg = (s - base) - 1;
5386 *fpc++ = FF_LITERAL;
5392 if (*s == '*') { /* @* or ^* */
5394 *fpc++ = 2; /* skip the @* or ^* */
5396 *fpc++ = FF_LINESNGL;
5399 *fpc++ = FF_LINEGLOB;
5401 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5402 arg = ischop ? FORM_NUM_BLANK : 0;
5407 const char * const f = ++s;
5410 arg |= FORM_NUM_POINT + (s - f);
5412 *fpc++ = s - base; /* fieldsize for FETCH */
5413 *fpc++ = FF_DECIMAL;
5415 unchopnum |= ! ischop;
5417 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5418 arg = ischop ? FORM_NUM_BLANK : 0;
5420 s++; /* skip the '0' first */
5424 const char * const f = ++s;
5427 arg |= FORM_NUM_POINT + (s - f);
5429 *fpc++ = s - base; /* fieldsize for FETCH */
5430 *fpc++ = FF_0DECIMAL;
5432 unchopnum |= ! ischop;
5434 else { /* text field */
5436 bool ismore = FALSE;
5439 while (*++s == '>') ;
5440 prespace = FF_SPACE;
5442 else if (*s == '|') {
5443 while (*++s == '|') ;
5444 prespace = FF_HALFSPACE;
5449 while (*++s == '<') ;
5452 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5456 *fpc++ = s - base; /* fieldsize for FETCH */
5458 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5461 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5475 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5478 mg->mg_ptr = (char *) fops;
5479 mg->mg_len = arg * sizeof(U32);
5480 mg->mg_obj = sv_copy;
5481 mg->mg_flags |= MGf_REFCOUNTED;
5483 if (unchopnum && repeat)
5484 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5491 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5493 /* Can value be printed in fldsize chars, using %*.*f ? */
5497 int intsize = fldsize - (value < 0 ? 1 : 0);
5499 if (frcsize & FORM_NUM_POINT)
5501 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5504 while (intsize--) pwr *= 10.0;
5505 while (frcsize--) eps /= 10.0;
5508 if (value + eps >= pwr)
5511 if (value - eps <= -pwr)
5518 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5520 SV * const datasv = FILTER_DATA(idx);
5521 const int filter_has_file = IoLINES(datasv);
5522 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5523 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5528 char *prune_from = NULL;
5529 bool read_from_cache = FALSE;
5533 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5535 assert(maxlen >= 0);
5538 /* I was having segfault trouble under Linux 2.2.5 after a
5539 parse error occurred. (Had to hack around it with a test
5540 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5541 not sure where the trouble is yet. XXX */
5544 SV *const cache = datasv;
5547 const char *cache_p = SvPV(cache, cache_len);
5551 /* Running in block mode and we have some cached data already.
5553 if (cache_len >= umaxlen) {
5554 /* In fact, so much data we don't even need to call
5559 const char *const first_nl =
5560 (const char *)memchr(cache_p, '\n', cache_len);
5562 take = first_nl + 1 - cache_p;
5566 sv_catpvn(buf_sv, cache_p, take);
5567 sv_chop(cache, cache_p + take);
5568 /* Definitely not EOF */
5572 sv_catsv(buf_sv, cache);
5574 umaxlen -= cache_len;
5577 read_from_cache = TRUE;
5581 /* Filter API says that the filter appends to the contents of the buffer.
5582 Usually the buffer is "", so the details don't matter. But if it's not,
5583 then clearly what it contains is already filtered by this filter, so we
5584 don't want to pass it in a second time.
5585 I'm going to use a mortal in case the upstream filter croaks. */
5586 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5587 ? sv_newmortal() : buf_sv;
5588 SvUPGRADE(upstream, SVt_PV);
5590 if (filter_has_file) {
5591 status = FILTER_READ(idx+1, upstream, 0);
5594 if (filter_sub && status >= 0) {
5598 ENTER_with_name("call_filter_sub");
5603 DEFSV_set(upstream);
5607 PUSHs(filter_state);
5610 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5620 SV * const errsv = ERRSV;
5621 if (SvTRUE_NN(errsv))
5622 err = newSVsv(errsv);
5628 LEAVE_with_name("call_filter_sub");
5631 if (SvGMAGICAL(upstream)) {
5633 if (upstream == buf_sv) mg_free(buf_sv);
5635 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5636 if(!err && SvOK(upstream)) {
5637 got_p = SvPV_nomg(upstream, got_len);
5639 if (got_len > umaxlen) {
5640 prune_from = got_p + umaxlen;
5643 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5644 if (first_nl && first_nl + 1 < got_p + got_len) {
5645 /* There's a second line here... */
5646 prune_from = first_nl + 1;
5650 if (!err && prune_from) {
5651 /* Oh. Too long. Stuff some in our cache. */
5652 STRLEN cached_len = got_p + got_len - prune_from;
5653 SV *const cache = datasv;
5656 /* Cache should be empty. */
5657 assert(!SvCUR(cache));
5660 sv_setpvn(cache, prune_from, cached_len);
5661 /* If you ask for block mode, you may well split UTF-8 characters.
5662 "If it breaks, you get to keep both parts"
5663 (Your code is broken if you don't put them back together again
5664 before something notices.) */
5665 if (SvUTF8(upstream)) {
5668 if (SvPOK(upstream)) SvCUR_set(upstream, got_len - cached_len);
5670 /* Cannot just use sv_setpvn, as that could free the buffer
5671 before we have a chance to assign it. */
5672 sv_usepvn(upstream, savepvn(got_p, got_len - cached_len),
5673 got_len - cached_len);
5675 /* Can't yet be EOF */
5680 /* If they are at EOF but buf_sv has something in it, then they may never
5681 have touched the SV upstream, so it may be undefined. If we naively
5682 concatenate it then we get a warning about use of uninitialised value.
5684 if (!err && upstream != buf_sv &&
5686 sv_catsv_nomg(buf_sv, upstream);
5688 else if (SvOK(upstream)) (void)SvPV_force_nolen(buf_sv);
5691 IoLINES(datasv) = 0;
5693 SvREFCNT_dec(filter_state);
5694 IoTOP_GV(datasv) = NULL;
5697 SvREFCNT_dec(filter_sub);
5698 IoBOTTOM_GV(datasv) = NULL;
5700 filter_del(S_run_user_filter);
5706 if (status == 0 && read_from_cache) {
5707 /* If we read some data from the cache (and by getting here it implies
5708 that we emptied the cache) then we aren't yet at EOF, and mustn't
5709 report that to our caller. */
5716 * ex: set ts=8 sts=4 sw=4 et: