3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
72 /* XXXX Should store the old value to allow for tie/overload - and
73 restore in regcomp, where marked with XXXX. */
83 register PMOP *pm = (PMOP*)cLOGOP->op_other;
87 /* prevent recompiling under /o and ithreads. */
88 #if defined(USE_ITHREADS)
89 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
90 if (PL_op->op_flags & OPf_STACKED) {
100 #define tryAMAGICregexp(rx) \
103 if (SvROK(rx) && SvAMAGIC(rx)) { \
104 SV *sv = AMG_CALLunary(rx, regexp_amg); \
108 if (SvTYPE(sv) != SVt_REGEXP) \
109 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
116 if (PL_op->op_flags & OPf_STACKED) {
117 /* multiple args; concatenate them */
119 tmpstr = PAD_SV(ARGTARG);
120 sv_setpvs(tmpstr, "");
121 while (++MARK <= SP) {
125 tryAMAGICregexp(msv);
127 if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
128 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
130 sv_setsv(tmpstr, sv);
133 sv_catsv_nomg(tmpstr, msv);
140 tryAMAGICregexp(tmpstr);
143 #undef tryAMAGICregexp
146 SV * const sv = SvRV(tmpstr);
147 if (SvTYPE(sv) == SVt_REGEXP)
150 else if (SvTYPE(tmpstr) == SVt_REGEXP)
151 re = (REGEXP*) tmpstr;
154 /* The match's LHS's get-magic might need to access this op's reg-
155 exp (as is sometimes the case with $'; see bug 70764). So we
156 must call get-magic now before we replace the regexp. Hopeful-
157 ly this hack can be replaced with the approach described at
158 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03
159 /msg122415.html some day. */
160 if(pm->op_type == OP_MATCH) {
162 const bool was_tainted = PL_tainted;
163 if (pm->op_flags & OPf_STACKED)
165 else if (pm->op_private & OPpTARGET_MY)
166 lhs = PAD_SV(pm->op_targ);
169 /* Restore the previous value of PL_tainted (which may have been
170 modified by get-magic), to avoid incorrectly setting the
171 RXf_TAINTED flag further down. */
172 PL_tainted = was_tainted;
175 re = reg_temp_copy(NULL, re);
176 ReREFCNT_dec(PM_GETRE(pm));
181 const char *t = SvOK(tmpstr) ? SvPV_nomg_const(tmpstr, len) : "";
184 assert (re != (REGEXP*) &PL_sv_undef);
186 /* Check against the last compiled regexp. */
187 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
188 memNE(RX_PRECOMP(re), t, len))
190 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
191 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
195 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
197 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
199 } else if (PL_curcop->cop_hints_hash) {
200 SV *ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0);
201 if (ptr && SvIOK(ptr) && SvIV(ptr))
202 eng = INT2PTR(regexp_engine*,SvIV(ptr));
205 if (PL_op->op_flags & OPf_SPECIAL)
206 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
208 if (DO_UTF8(tmpstr)) {
209 assert (SvUTF8(tmpstr));
210 } else if (SvUTF8(tmpstr)) {
211 /* Not doing UTF-8, despite what the SV says. Is this only if
212 we're trapped in use 'bytes'? */
213 /* Make a copy of the octet sequence, but without the flag on,
214 as the compiler now honours the SvUTF8 flag on tmpstr. */
216 const char *const p = SvPV(tmpstr, len);
217 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
219 else if (SvAMAGIC(tmpstr)) {
220 /* make a copy to avoid extra stringifies */
221 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
224 /* If it is gmagical, create a mortal copy, but without calling
225 get-magic, as we have already done that. */
226 if(SvGMAGICAL(tmpstr)) {
227 SV *mortalcopy = sv_newmortal();
228 sv_setsv_flags(mortalcopy, tmpstr, 0);
233 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
235 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
237 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
238 inside tie/overload accessors. */
244 #ifndef INCOMPLETE_TAINTS
247 SvTAINTED_on((SV*)re);
248 RX_EXTFLAGS(re) |= RXf_TAINTED;
253 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
257 #if !defined(USE_ITHREADS)
258 /* can't change the optree at runtime either */
259 /* PMf_KEEP is handled differently under threads to avoid these problems */
260 if (pm->op_pmflags & PMf_KEEP) {
261 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
262 cLOGOP->op_first->op_next = PL_op->op_next;
272 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
273 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
274 register SV * const dstr = cx->sb_dstr;
275 register char *s = cx->sb_s;
276 register char *m = cx->sb_m;
277 char *orig = cx->sb_orig;
278 register REGEXP * const rx = cx->sb_rx;
280 REGEXP *old = PM_GETRE(pm);
287 PM_SETRE(pm,ReREFCNT_inc(rx));
290 rxres_restore(&cx->sb_rxres, rx);
291 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
293 if (cx->sb_iters++) {
294 const I32 saviters = cx->sb_iters;
295 if (cx->sb_iters > cx->sb_maxiters)
296 DIE(aTHX_ "Substitution loop");
298 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
300 /* See "how taint works" above pp_subst() */
302 cx->sb_rxtainted |= SUBST_TAINT_REPL;
303 sv_catsv_nomg(dstr, POPs);
304 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
308 /* I believe that we can't set REXEC_SCREAM here if
309 SvSCREAM(cx->sb_targ) is true because SvPVX(cx->sb_targ) isn't always
310 equal to s. [See the comment before Perl_re_intuit_start(), which is
311 called from Perl_regexec_flags(), which says that it should be when
312 SvSCREAM() is true.] s, cx->sb_strend and orig will be consistent
313 with SvPVX(cx->sb_targ), as substconst doesn't modify cx->sb_targ
315 if (CxONCE(cx) || s < orig ||
316 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
317 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
318 ((cx->sb_rflags & REXEC_COPY_STR)
319 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
320 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
322 SV *targ = cx->sb_targ;
324 assert(cx->sb_strend >= s);
325 if(cx->sb_strend > s) {
326 if (DO_UTF8(dstr) && !SvUTF8(targ))
327 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
329 sv_catpvn(dstr, s, cx->sb_strend - s);
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if (pm->op_pmflags & PMf_NONDESTRUCT) {
336 /* From here on down we're using the copy, and leaving the
337 original untouched. */
341 #ifdef PERL_OLD_COPY_ON_WRITE
343 sv_force_normal_flags(targ, SV_COW_DROP_PV);
349 SvPV_set(targ, SvPVX(dstr));
350 SvCUR_set(targ, SvCUR(dstr));
351 SvLEN_set(targ, SvLEN(dstr));
354 SvPV_set(dstr, NULL);
356 mPUSHi(saviters - 1);
358 (void)SvPOK_only_UTF8(targ);
361 /* update the taint state of various various variables in
362 * preparation for final exit.
363 * See "how taint works" above pp_subst() */
365 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
366 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
367 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
369 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
371 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
372 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
374 SvTAINTED_on(TOPs); /* taint return value */
375 /* needed for mg_set below */
376 PL_tainted = cBOOL(cx->sb_rxtainted &
377 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
380 /* PL_tainted must be correctly set for this mg_set */
383 LEAVE_SCOPE(cx->sb_oldsave);
385 RETURNOP(pm->op_next);
388 cx->sb_iters = saviters;
390 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
393 cx->sb_orig = orig = RX_SUBBEG(rx);
395 cx->sb_strend = s + (cx->sb_strend - m);
397 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
399 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
400 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
402 sv_catpvn(dstr, s, m-s);
404 cx->sb_s = RX_OFFS(rx)[0].end + orig;
405 { /* Update the pos() information. */
407 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
409 SvUPGRADE(sv, SVt_PVMG);
410 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
411 #ifdef PERL_OLD_COPY_ON_WRITE
413 sv_force_normal_flags(sv, 0);
415 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
418 mg->mg_len = m - orig;
421 (void)ReREFCNT_inc(rx);
422 /* update the taint state of various various variables in preparation
423 * for calling the code block.
424 * See "how taint works" above pp_subst() */
426 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
427 cx->sb_rxtainted |= SUBST_TAINT_PAT;
429 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
430 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
431 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
433 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
435 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
436 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
437 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
438 ? cx->sb_dstr : cx->sb_targ);
441 rxres_save(&cx->sb_rxres, rx);
443 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
447 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
452 PERL_ARGS_ASSERT_RXRES_SAVE;
455 if (!p || p[1] < RX_NPARENS(rx)) {
456 #ifdef PERL_OLD_COPY_ON_WRITE
457 i = 7 + RX_NPARENS(rx) * 2;
459 i = 6 + RX_NPARENS(rx) * 2;
468 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
469 RX_MATCH_COPIED_off(rx);
471 #ifdef PERL_OLD_COPY_ON_WRITE
472 *p++ = PTR2UV(RX_SAVED_COPY(rx));
473 RX_SAVED_COPY(rx) = NULL;
476 *p++ = RX_NPARENS(rx);
478 *p++ = PTR2UV(RX_SUBBEG(rx));
479 *p++ = (UV)RX_SUBLEN(rx);
480 for (i = 0; i <= RX_NPARENS(rx); ++i) {
481 *p++ = (UV)RX_OFFS(rx)[i].start;
482 *p++ = (UV)RX_OFFS(rx)[i].end;
487 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
492 PERL_ARGS_ASSERT_RXRES_RESTORE;
495 RX_MATCH_COPY_FREE(rx);
496 RX_MATCH_COPIED_set(rx, *p);
499 #ifdef PERL_OLD_COPY_ON_WRITE
500 if (RX_SAVED_COPY(rx))
501 SvREFCNT_dec (RX_SAVED_COPY(rx));
502 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
506 RX_NPARENS(rx) = *p++;
508 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
509 RX_SUBLEN(rx) = (I32)(*p++);
510 for (i = 0; i <= RX_NPARENS(rx); ++i) {
511 RX_OFFS(rx)[i].start = (I32)(*p++);
512 RX_OFFS(rx)[i].end = (I32)(*p++);
517 S_rxres_free(pTHX_ void **rsp)
519 UV * const p = (UV*)*rsp;
521 PERL_ARGS_ASSERT_RXRES_FREE;
526 void *tmp = INT2PTR(char*,*p);
529 PoisonFree(*p, 1, sizeof(*p));
531 Safefree(INT2PTR(char*,*p));
533 #ifdef PERL_OLD_COPY_ON_WRITE
535 SvREFCNT_dec (INT2PTR(SV*,p[1]));
543 #define FORM_NUM_BLANK (1<<30)
544 #define FORM_NUM_POINT (1<<29)
548 dVAR; dSP; dMARK; dORIGMARK;
549 register SV * const tmpForm = *++MARK;
550 SV *formsv; /* contains text of original format */
551 register U32 *fpc; /* format ops program counter */
552 register char *t; /* current append position in target string */
553 const char *f; /* current position in format string */
555 register SV *sv = NULL; /* current item */
556 const char *item = NULL;/* string value of current item */
557 I32 itemsize = 0; /* length of current item, possibly truncated */
558 I32 fieldsize = 0; /* width of current field */
559 I32 lines = 0; /* number of lines that have been output */
560 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
561 const char *chophere = NULL; /* where to chop current item */
562 STRLEN linemark = 0; /* pos of start of line in output */
564 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
566 STRLEN linemax; /* estimate of output size in bytes */
567 bool item_is_utf8 = FALSE;
568 bool targ_is_utf8 = FALSE;
571 U8 *source; /* source of bytes to append */
572 STRLEN to_copy; /* how may bytes to append */
573 char trans; /* what chars to translate */
575 mg = doparseform(tmpForm);
577 fpc = (U32*)mg->mg_ptr;
578 /* the actual string the format was compiled from.
579 * with overload etc, this may not match tmpForm */
583 SvPV_force(PL_formtarget, len);
584 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
585 SvTAINTED_on(PL_formtarget);
586 if (DO_UTF8(PL_formtarget))
588 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
589 t = SvGROW(PL_formtarget, len + linemax + 1);
590 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
592 f = SvPV_const(formsv, len);
596 const char *name = "???";
599 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
600 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
601 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
602 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
603 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
605 case FF_CHECKNL: name = "CHECKNL"; break;
606 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
607 case FF_SPACE: name = "SPACE"; break;
608 case FF_HALFSPACE: name = "HALFSPACE"; break;
609 case FF_ITEM: name = "ITEM"; break;
610 case FF_CHOP: name = "CHOP"; break;
611 case FF_LINEGLOB: name = "LINEGLOB"; break;
612 case FF_NEWLINE: name = "NEWLINE"; break;
613 case FF_MORE: name = "MORE"; break;
614 case FF_LINEMARK: name = "LINEMARK"; break;
615 case FF_END: name = "END"; break;
616 case FF_0DECIMAL: name = "0DECIMAL"; break;
617 case FF_LINESNGL: name = "LINESNGL"; break;
620 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
622 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
626 linemark = t - SvPVX(PL_formtarget);
636 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
652 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
655 SvTAINTED_on(PL_formtarget);
661 const char *s = item = SvPV_const(sv, len);
664 itemsize = sv_len_utf8(sv);
665 if (itemsize != (I32)len) {
667 if (itemsize > fieldsize) {
668 itemsize = fieldsize;
669 itembytes = itemsize;
670 sv_pos_u2b(sv, &itembytes, 0);
674 send = chophere = s + itembytes;
684 sv_pos_b2u(sv, &itemsize);
688 item_is_utf8 = FALSE;
689 if (itemsize > fieldsize)
690 itemsize = fieldsize;
691 send = chophere = s + itemsize;
705 const char *s = item = SvPV_const(sv, len);
708 itemsize = sv_len_utf8(sv);
709 if (itemsize != (I32)len) {
711 if (itemsize <= fieldsize) {
712 const char *send = chophere = s + itemsize;
725 itemsize = fieldsize;
726 itembytes = itemsize;
727 sv_pos_u2b(sv, &itembytes, 0);
728 send = chophere = s + itembytes;
729 while (s < send || (s == send && isSPACE(*s))) {
739 if (strchr(PL_chopset, *s))
744 itemsize = chophere - item;
745 sv_pos_b2u(sv, &itemsize);
751 item_is_utf8 = FALSE;
752 if (itemsize <= fieldsize) {
753 const char *const send = chophere = s + itemsize;
766 itemsize = fieldsize;
767 send = chophere = s + itemsize;
768 while (s < send || (s == send && isSPACE(*s))) {
778 if (strchr(PL_chopset, *s))
783 itemsize = chophere - item;
789 arg = fieldsize - itemsize;
798 arg = fieldsize - itemsize;
812 /* convert to_copy from chars to bytes */
816 to_copy = s - source;
822 const char *s = chophere;
836 const bool oneline = fpc[-1] == FF_LINESNGL;
837 const char *s = item = SvPV_const(sv, len);
838 const char *const send = s + len;
840 item_is_utf8 = DO_UTF8(sv);
851 to_copy = s - SvPVX_const(sv) - 1;
865 /* append to_copy bytes from source to PL_formstring.
866 * item_is_utf8 implies source is utf8.
867 * if trans, translate certain characters during the copy */
872 SvCUR_set(PL_formtarget,
873 t - SvPVX_const(PL_formtarget));
875 if (targ_is_utf8 && !item_is_utf8) {
876 source = tmp = bytes_to_utf8(source, &to_copy);
878 if (item_is_utf8 && !targ_is_utf8) {
880 /* Upgrade targ to UTF8, and then we reduce it to
881 a problem we have a simple solution for.
882 Don't need get magic. */
883 sv_utf8_upgrade_nomg(PL_formtarget);
885 /* re-calculate linemark */
886 s = (U8*)SvPVX(PL_formtarget);
887 /* the bytes we initially allocated to append the
888 * whole line may have been gobbled up during the
889 * upgrade, so allocate a whole new line's worth
894 linemark = s - (U8*)SvPVX(PL_formtarget);
896 /* Easy. They agree. */
897 assert (item_is_utf8 == targ_is_utf8);
900 /* @* and ^* are the only things that can exceed
901 * the linemax, so grow by the output size, plus
902 * a whole new form's worth in case of any further
904 grow = linemax + to_copy;
906 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
907 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
909 Copy(source, t, to_copy, char);
911 /* blank out ~ or control chars, depending on trans.
912 * works on bytes not chars, so relies on not
913 * matching utf8 continuation bytes */
915 U8 *send = s + to_copy;
918 if (trans == '~' ? (ch == '~') :
931 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
939 #if defined(USE_LONG_DOUBLE)
941 ((arg & FORM_NUM_POINT) ?
942 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
945 ((arg & FORM_NUM_POINT) ?
946 "%#0*.*f" : "%0*.*f");
951 #if defined(USE_LONG_DOUBLE)
953 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
956 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
959 /* If the field is marked with ^ and the value is undefined,
961 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
969 /* overflow evidence */
970 if (num_overflow(value, fieldsize, arg)) {
976 /* Formats aren't yet marked for locales, so assume "yes". */
978 STORE_NUMERIC_STANDARD_SET_LOCAL();
979 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
980 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
981 RESTORE_NUMERIC_STANDARD();
988 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
996 if (arg) { /* repeat until fields exhausted? */
1002 t = SvPVX(PL_formtarget) + linemark;
1009 const char *s = chophere;
1010 const char *send = item + len;
1012 while (isSPACE(*s) && (s < send))
1017 arg = fieldsize - itemsize;
1024 if (strnEQ(s1," ",3)) {
1025 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1036 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
1038 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1040 SvUTF8_on(PL_formtarget);
1041 FmLINES(PL_formtarget) += lines;
1043 if (fpc[-1] == FF_BLANK)
1044 RETURNOP(cLISTOP->op_first);
1056 if (PL_stack_base + *PL_markstack_ptr == SP) {
1058 if (GIMME_V == G_SCALAR)
1060 RETURNOP(PL_op->op_next->op_next);
1062 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1063 Perl_pp_pushmark(aTHX); /* push dst */
1064 Perl_pp_pushmark(aTHX); /* push src */
1065 ENTER_with_name("grep"); /* enter outer scope */
1068 if (PL_op->op_private & OPpGREP_LEX)
1069 SAVESPTR(PAD_SVl(PL_op->op_targ));
1072 ENTER_with_name("grep_item"); /* enter inner scope */
1075 src = PL_stack_base[*PL_markstack_ptr];
1077 if (PL_op->op_private & OPpGREP_LEX)
1078 PAD_SVl(PL_op->op_targ) = src;
1083 if (PL_op->op_type == OP_MAPSTART)
1084 Perl_pp_pushmark(aTHX); /* push top */
1085 return ((LOGOP*)PL_op->op_next)->op_other;
1091 const I32 gimme = GIMME_V;
1092 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1098 /* first, move source pointer to the next item in the source list */
1099 ++PL_markstack_ptr[-1];
1101 /* if there are new items, push them into the destination list */
1102 if (items && gimme != G_VOID) {
1103 /* might need to make room back there first */
1104 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1105 /* XXX this implementation is very pessimal because the stack
1106 * is repeatedly extended for every set of items. Is possible
1107 * to do this without any stack extension or copying at all
1108 * by maintaining a separate list over which the map iterates
1109 * (like foreach does). --gsar */
1111 /* everything in the stack after the destination list moves
1112 * towards the end the stack by the amount of room needed */
1113 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1115 /* items to shift up (accounting for the moved source pointer) */
1116 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1118 /* This optimization is by Ben Tilly and it does
1119 * things differently from what Sarathy (gsar)
1120 * is describing. The downside of this optimization is
1121 * that leaves "holes" (uninitialized and hopefully unused areas)
1122 * to the Perl stack, but on the other hand this
1123 * shouldn't be a problem. If Sarathy's idea gets
1124 * implemented, this optimization should become
1125 * irrelevant. --jhi */
1127 shift = count; /* Avoid shifting too often --Ben Tilly */
1131 dst = (SP += shift);
1132 PL_markstack_ptr[-1] += shift;
1133 *PL_markstack_ptr += shift;
1137 /* copy the new items down to the destination list */
1138 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1139 if (gimme == G_ARRAY) {
1140 /* add returned items to the collection (making mortal copies
1141 * if necessary), then clear the current temps stack frame
1142 * *except* for those items. We do this splicing the items
1143 * into the start of the tmps frame (so some items may be on
1144 * the tmps stack twice), then moving PL_tmps_floor above
1145 * them, then freeing the frame. That way, the only tmps that
1146 * accumulate over iterations are the return values for map.
1147 * We have to do to this way so that everything gets correctly
1148 * freed if we die during the map.
1152 /* make space for the slice */
1153 EXTEND_MORTAL(items);
1154 tmpsbase = PL_tmps_floor + 1;
1155 Move(PL_tmps_stack + tmpsbase,
1156 PL_tmps_stack + tmpsbase + items,
1157 PL_tmps_ix - PL_tmps_floor,
1159 PL_tmps_ix += items;
1164 sv = sv_mortalcopy(sv);
1166 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1168 /* clear the stack frame except for the items */
1169 PL_tmps_floor += items;
1171 /* FREETMPS may have cleared the TEMP flag on some of the items */
1174 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1177 /* scalar context: we don't care about which values map returns
1178 * (we use undef here). And so we certainly don't want to do mortal
1179 * copies of meaningless values. */
1180 while (items-- > 0) {
1182 *dst-- = &PL_sv_undef;
1190 LEAVE_with_name("grep_item"); /* exit inner scope */
1193 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1195 (void)POPMARK; /* pop top */
1196 LEAVE_with_name("grep"); /* exit outer scope */
1197 (void)POPMARK; /* pop src */
1198 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1199 (void)POPMARK; /* pop dst */
1200 SP = PL_stack_base + POPMARK; /* pop original mark */
1201 if (gimme == G_SCALAR) {
1202 if (PL_op->op_private & OPpGREP_LEX) {
1203 SV* sv = sv_newmortal();
1204 sv_setiv(sv, items);
1212 else if (gimme == G_ARRAY)
1219 ENTER_with_name("grep_item"); /* enter inner scope */
1222 /* set $_ to the new source item */
1223 src = PL_stack_base[PL_markstack_ptr[-1]];
1225 if (PL_op->op_private & OPpGREP_LEX)
1226 PAD_SVl(PL_op->op_targ) = src;
1230 RETURNOP(cLOGOP->op_other);
1239 if (GIMME == G_ARRAY)
1241 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1242 return cLOGOP->op_other;
1252 if (GIMME == G_ARRAY) {
1253 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1257 SV * const targ = PAD_SV(PL_op->op_targ);
1260 if (PL_op->op_private & OPpFLIP_LINENUM) {
1261 if (GvIO(PL_last_in_gv)) {
1262 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1265 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1267 flip = SvIV(sv) == SvIV(GvSV(gv));
1273 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1274 if (PL_op->op_flags & OPf_SPECIAL) {
1282 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1285 sv_setpvs(TARG, "");
1291 /* This code tries to decide if "$left .. $right" should use the
1292 magical string increment, or if the range is numeric (we make
1293 an exception for .."0" [#18165]). AMS 20021031. */
1295 #define RANGE_IS_NUMERIC(left,right) ( \
1296 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1297 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1298 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1299 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1300 && (!SvOK(right) || looks_like_number(right))))
1306 if (GIMME == G_ARRAY) {
1312 if (RANGE_IS_NUMERIC(left,right)) {
1315 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1316 (SvOK(right) && SvNV(right) > IV_MAX))
1317 DIE(aTHX_ "Range iterator outside integer range");
1328 SV * const sv = sv_2mortal(newSViv(i++));
1333 SV * const final = sv_mortalcopy(right);
1335 const char * const tmps = SvPV_const(final, len);
1337 SV *sv = sv_mortalcopy(left);
1338 SvPV_force_nolen(sv);
1339 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1341 if (strEQ(SvPVX_const(sv),tmps))
1343 sv = sv_2mortal(newSVsv(sv));
1350 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1354 if (PL_op->op_private & OPpFLIP_LINENUM) {
1355 if (GvIO(PL_last_in_gv)) {
1356 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1359 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1360 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1368 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1369 sv_catpvs(targ, "E0");
1379 static const char * const context_name[] = {
1381 NULL, /* CXt_WHEN never actually needs "block" */
1382 NULL, /* CXt_BLOCK never actually needs "block" */
1383 NULL, /* CXt_GIVEN never actually needs "block" */
1384 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1385 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1386 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1387 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1395 S_dopoptolabel(pTHX_ const char *label)
1400 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1402 for (i = cxstack_ix; i >= 0; i--) {
1403 register const PERL_CONTEXT * const cx = &cxstack[i];
1404 switch (CxTYPE(cx)) {
1410 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1411 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1412 if (CxTYPE(cx) == CXt_NULL)
1415 case CXt_LOOP_LAZYIV:
1416 case CXt_LOOP_LAZYSV:
1418 case CXt_LOOP_PLAIN:
1420 const char *cx_label = CxLABEL(cx);
1421 if (!cx_label || strNE(label, cx_label) ) {
1422 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1423 (long)i, cx_label));
1426 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1437 Perl_dowantarray(pTHX)
1440 const I32 gimme = block_gimme();
1441 return (gimme == G_VOID) ? G_SCALAR : gimme;
1445 Perl_block_gimme(pTHX)
1448 const I32 cxix = dopoptosub(cxstack_ix);
1452 switch (cxstack[cxix].blk_gimme) {
1460 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1467 Perl_is_lvalue_sub(pTHX)
1470 const I32 cxix = dopoptosub(cxstack_ix);
1471 assert(cxix >= 0); /* We should only be called from inside subs */
1473 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1474 return CxLVAL(cxstack + cxix);
1479 /* only used by PUSHSUB */
1481 Perl_was_lvalue_sub(pTHX)
1484 const I32 cxix = dopoptosub(cxstack_ix-1);
1485 assert(cxix >= 0); /* We should only be called from inside subs */
1487 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1488 return CxLVAL(cxstack + cxix);
1494 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1499 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1501 for (i = startingblock; i >= 0; i--) {
1502 register const PERL_CONTEXT * const cx = &cxstk[i];
1503 switch (CxTYPE(cx)) {
1509 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1517 S_dopoptoeval(pTHX_ I32 startingblock)
1521 for (i = startingblock; i >= 0; i--) {
1522 register const PERL_CONTEXT *cx = &cxstack[i];
1523 switch (CxTYPE(cx)) {
1527 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1535 S_dopoptoloop(pTHX_ I32 startingblock)
1539 for (i = startingblock; i >= 0; i--) {
1540 register const PERL_CONTEXT * const cx = &cxstack[i];
1541 switch (CxTYPE(cx)) {
1547 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1548 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1549 if ((CxTYPE(cx)) == CXt_NULL)
1552 case CXt_LOOP_LAZYIV:
1553 case CXt_LOOP_LAZYSV:
1555 case CXt_LOOP_PLAIN:
1556 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1564 S_dopoptogiven(pTHX_ I32 startingblock)
1568 for (i = startingblock; i >= 0; i--) {
1569 register const PERL_CONTEXT *cx = &cxstack[i];
1570 switch (CxTYPE(cx)) {
1574 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1576 case CXt_LOOP_PLAIN:
1577 assert(!CxFOREACHDEF(cx));
1579 case CXt_LOOP_LAZYIV:
1580 case CXt_LOOP_LAZYSV:
1582 if (CxFOREACHDEF(cx)) {
1583 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1592 S_dopoptowhen(pTHX_ I32 startingblock)
1596 for (i = startingblock; i >= 0; i--) {
1597 register const PERL_CONTEXT *cx = &cxstack[i];
1598 switch (CxTYPE(cx)) {
1602 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1610 Perl_dounwind(pTHX_ I32 cxix)
1615 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1618 while (cxstack_ix > cxix) {
1620 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1621 DEBUG_CX("UNWIND"); \
1622 /* Note: we don't need to restore the base context info till the end. */
1623 switch (CxTYPE(cx)) {
1626 continue; /* not break */
1634 case CXt_LOOP_LAZYIV:
1635 case CXt_LOOP_LAZYSV:
1637 case CXt_LOOP_PLAIN:
1648 PERL_UNUSED_VAR(optype);
1652 Perl_qerror(pTHX_ SV *err)
1656 PERL_ARGS_ASSERT_QERROR;
1659 if (PL_in_eval & EVAL_KEEPERR) {
1660 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1661 SvPV_nolen_const(err));
1664 sv_catsv(ERRSV, err);
1667 sv_catsv(PL_errors, err);
1669 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1671 ++PL_parser->error_count;
1675 Perl_die_unwind(pTHX_ SV *msv)
1678 SV *exceptsv = sv_mortalcopy(msv);
1679 U8 in_eval = PL_in_eval;
1680 PERL_ARGS_ASSERT_DIE_UNWIND;
1687 * Historically, perl used to set ERRSV ($@) early in the die
1688 * process and rely on it not getting clobbered during unwinding.
1689 * That sucked, because it was liable to get clobbered, so the
1690 * setting of ERRSV used to emit the exception from eval{} has
1691 * been moved to much later, after unwinding (see just before
1692 * JMPENV_JUMP below). However, some modules were relying on the
1693 * early setting, by examining $@ during unwinding to use it as
1694 * a flag indicating whether the current unwinding was caused by
1695 * an exception. It was never a reliable flag for that purpose,
1696 * being totally open to false positives even without actual
1697 * clobberage, but was useful enough for production code to
1698 * semantically rely on it.
1700 * We'd like to have a proper introspective interface that
1701 * explicitly describes the reason for whatever unwinding
1702 * operations are currently in progress, so that those modules
1703 * work reliably and $@ isn't further overloaded. But we don't
1704 * have one yet. In its absence, as a stopgap measure, ERRSV is
1705 * now *additionally* set here, before unwinding, to serve as the
1706 * (unreliable) flag that it used to.
1708 * This behaviour is temporary, and should be removed when a
1709 * proper way to detect exceptional unwinding has been developed.
1710 * As of 2010-12, the authors of modules relying on the hack
1711 * are aware of the issue, because the modules failed on
1712 * perls 5.13.{1..7} which had late setting of $@ without this
1713 * early-setting hack.
1715 if (!(in_eval & EVAL_KEEPERR)) {
1716 SvTEMP_off(exceptsv);
1717 sv_setsv(ERRSV, exceptsv);
1720 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1721 && PL_curstackinfo->si_prev)
1730 register PERL_CONTEXT *cx;
1733 JMPENV *restartjmpenv;
1736 if (cxix < cxstack_ix)
1739 POPBLOCK(cx,PL_curpm);
1740 if (CxTYPE(cx) != CXt_EVAL) {
1742 const char* message = SvPVx_const(exceptsv, msglen);
1743 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1744 PerlIO_write(Perl_error_log, message, msglen);
1748 namesv = cx->blk_eval.old_namesv;
1749 oldcop = cx->blk_oldcop;
1750 restartjmpenv = cx->blk_eval.cur_top_env;
1751 restartop = cx->blk_eval.retop;
1753 if (gimme == G_SCALAR)
1754 *++newsp = &PL_sv_undef;
1755 PL_stack_sp = newsp;
1759 /* LEAVE could clobber PL_curcop (see save_re_context())
1760 * XXX it might be better to find a way to avoid messing with
1761 * PL_curcop in save_re_context() instead, but this is a more
1762 * minimal fix --GSAR */
1765 if (optype == OP_REQUIRE) {
1766 const char* const msg = SvPVx_nolen_const(exceptsv);
1767 (void)hv_store(GvHVn(PL_incgv),
1768 SvPVX_const(namesv), SvCUR(namesv),
1770 /* note that unlike pp_entereval, pp_require isn't
1771 * supposed to trap errors. So now that we've popped the
1772 * EVAL that pp_require pushed, and processed the error
1773 * message, rethrow the error */
1774 Perl_croak(aTHX_ "%sCompilation failed in require",
1775 *msg ? msg : "Unknown error\n");
1777 if (in_eval & EVAL_KEEPERR) {
1778 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1779 SvPV_nolen_const(exceptsv));
1782 sv_setsv(ERRSV, exceptsv);
1784 PL_restartjmpenv = restartjmpenv;
1785 PL_restartop = restartop;
1791 write_to_stderr(exceptsv);
1798 dVAR; dSP; dPOPTOPssrl;
1799 if (SvTRUE(left) != SvTRUE(right))
1806 =for apidoc caller_cx
1808 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1809 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1810 information returned to Perl by C<caller>. Note that XSUBs don't get a
1811 stack frame, so C<caller_cx(0, NULL)> will return information for the
1812 immediately-surrounding Perl code.
1814 This function skips over the automatic calls to C<&DB::sub> made on the
1815 behalf of the debugger. If the stack frame requested was a sub called by
1816 C<DB::sub>, the return value will be the frame for the call to
1817 C<DB::sub>, since that has the correct line number/etc. for the call
1818 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1819 frame for the sub call itself.
1824 const PERL_CONTEXT *
1825 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1827 register I32 cxix = dopoptosub(cxstack_ix);
1828 register const PERL_CONTEXT *cx;
1829 register const PERL_CONTEXT *ccstack = cxstack;
1830 const PERL_SI *top_si = PL_curstackinfo;
1833 /* we may be in a higher stacklevel, so dig down deeper */
1834 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1835 top_si = top_si->si_prev;
1836 ccstack = top_si->si_cxstack;
1837 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1841 /* caller() should not report the automatic calls to &DB::sub */
1842 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1843 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1847 cxix = dopoptosub_at(ccstack, cxix - 1);
1850 cx = &ccstack[cxix];
1851 if (dbcxp) *dbcxp = cx;
1853 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1854 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1855 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1856 field below is defined for any cx. */
1857 /* caller() should not report the automatic calls to &DB::sub */
1858 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1859 cx = &ccstack[dbcxix];
1869 register const PERL_CONTEXT *cx;
1870 const PERL_CONTEXT *dbcx;
1872 const char *stashname;
1874 bool has_arg = MAXARG && TOPs;
1882 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1884 if (GIMME != G_ARRAY) {
1891 stashname = CopSTASHPV(cx->blk_oldcop);
1892 if (GIMME != G_ARRAY) {
1895 PUSHs(&PL_sv_undef);
1898 sv_setpv(TARG, stashname);
1907 PUSHs(&PL_sv_undef);
1909 mPUSHs(newSVpv(stashname, 0));
1910 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1911 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1914 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1915 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1916 /* So is ccstack[dbcxix]. */
1918 SV * const sv = newSV(0);
1919 gv_efullname3(sv, cvgv, NULL);
1921 PUSHs(boolSV(CxHASARGS(cx)));
1924 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1925 PUSHs(boolSV(CxHASARGS(cx)));
1929 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1932 gimme = (I32)cx->blk_gimme;
1933 if (gimme == G_VOID)
1934 PUSHs(&PL_sv_undef);
1936 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1937 if (CxTYPE(cx) == CXt_EVAL) {
1939 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1940 PUSHs(cx->blk_eval.cur_text);
1944 else if (cx->blk_eval.old_namesv) {
1945 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1948 /* eval BLOCK (try blocks have old_namesv == 0) */
1950 PUSHs(&PL_sv_undef);
1951 PUSHs(&PL_sv_undef);
1955 PUSHs(&PL_sv_undef);
1956 PUSHs(&PL_sv_undef);
1958 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1959 && CopSTASH_eq(PL_curcop, PL_debstash))
1961 AV * const ary = cx->blk_sub.argarray;
1962 const int off = AvARRAY(ary) - AvALLOC(ary);
1964 Perl_init_dbargs(aTHX);
1966 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1967 av_extend(PL_dbargs, AvFILLp(ary) + off);
1968 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1969 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1971 /* XXX only hints propagated via op_private are currently
1972 * visible (others are not easily accessible, since they
1973 * use the global PL_hints) */
1974 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1977 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1979 if (old_warnings == pWARN_NONE ||
1980 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1981 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1982 else if (old_warnings == pWARN_ALL ||
1983 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1984 /* Get the bit mask for $warnings::Bits{all}, because
1985 * it could have been extended by warnings::register */
1987 HV * const bits = get_hv("warnings::Bits", 0);
1988 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1989 mask = newSVsv(*bits_all);
1992 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1996 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2000 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2001 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2010 const char * const tmps =
2011 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
2012 sv_reset(tmps, CopSTASH(PL_curcop));
2017 /* like pp_nextstate, but used instead when the debugger is active */
2022 PL_curcop = (COP*)PL_op;
2023 TAINT_NOT; /* Each statement is presumed innocent */
2024 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2029 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2030 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2033 register PERL_CONTEXT *cx;
2034 const I32 gimme = G_ARRAY;
2036 GV * const gv = PL_DBgv;
2037 register CV * const cv = GvCV(gv);
2040 DIE(aTHX_ "No DB::DB routine defined");
2042 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2043 /* don't do recursive DB::DB call */
2058 (void)(*CvXSUB(cv))(aTHX_ cv);
2065 PUSHBLOCK(cx, CXt_SUB, SP);
2067 cx->blk_sub.retop = PL_op->op_next;
2070 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2071 RETURNOP(CvSTART(cv));
2079 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2081 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2083 if (gimme == G_SCALAR) {
2085 *++newsp = (SvFLAGS(*SP) & flags) ? *SP : sv_mortalcopy(*SP);
2087 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2090 *++MARK = &PL_sv_undef;
2094 else if (gimme == G_ARRAY) {
2095 /* in case LEAVE wipes old return values */
2096 while (++MARK <= SP) {
2097 if (SvFLAGS(*MARK) & flags)
2100 *++newsp = sv_mortalcopy(*MARK);
2101 TAINT_NOT; /* Each item is independent */
2104 /* When this function was called with MARK == newsp, we reach this
2105 * point with SP == newsp. */
2114 register PERL_CONTEXT *cx;
2115 I32 gimme = GIMME_V;
2117 ENTER_with_name("block");
2120 PUSHBLOCK(cx, CXt_BLOCK, SP);
2128 register PERL_CONTEXT *cx;
2133 if (PL_op->op_flags & OPf_SPECIAL) {
2134 cx = &cxstack[cxstack_ix];
2135 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2140 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2143 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2144 PL_curpm = newpm; /* Don't pop $1 et al till now */
2146 LEAVE_with_name("block");
2154 register PERL_CONTEXT *cx;
2155 const I32 gimme = GIMME_V;
2156 void *itervar; /* location of the iteration variable */
2157 U8 cxtype = CXt_LOOP_FOR;
2159 ENTER_with_name("loop1");
2162 if (PL_op->op_targ) { /* "my" variable */
2163 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2164 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2165 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2166 SVs_PADSTALE, SVs_PADSTALE);
2168 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2170 itervar = PL_comppad;
2172 itervar = &PAD_SVl(PL_op->op_targ);
2175 else { /* symbol table variable */
2176 GV * const gv = MUTABLE_GV(POPs);
2177 SV** svp = &GvSV(gv);
2178 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2180 itervar = (void *)gv;
2183 if (PL_op->op_private & OPpITER_DEF)
2184 cxtype |= CXp_FOR_DEF;
2186 ENTER_with_name("loop2");
2188 PUSHBLOCK(cx, cxtype, SP);
2189 PUSHLOOP_FOR(cx, itervar, MARK);
2190 if (PL_op->op_flags & OPf_STACKED) {
2191 SV *maybe_ary = POPs;
2192 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2194 SV * const right = maybe_ary;
2197 if (RANGE_IS_NUMERIC(sv,right)) {
2198 cx->cx_type &= ~CXTYPEMASK;
2199 cx->cx_type |= CXt_LOOP_LAZYIV;
2200 /* Make sure that no-one re-orders cop.h and breaks our
2202 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2203 #ifdef NV_PRESERVES_UV
2204 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2205 (SvNV(sv) > (NV)IV_MAX)))
2207 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2208 (SvNV(right) < (NV)IV_MIN))))
2210 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2213 ((SvUV(sv) > (UV)IV_MAX) ||
2214 (SvNV(sv) > (NV)UV_MAX)))))
2216 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2218 ((SvNV(right) > 0) &&
2219 ((SvUV(right) > (UV)IV_MAX) ||
2220 (SvNV(right) > (NV)UV_MAX))))))
2222 DIE(aTHX_ "Range iterator outside integer range");
2223 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2224 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2226 /* for correct -Dstv display */
2227 cx->blk_oldsp = sp - PL_stack_base;
2231 cx->cx_type &= ~CXTYPEMASK;
2232 cx->cx_type |= CXt_LOOP_LAZYSV;
2233 /* Make sure that no-one re-orders cop.h and breaks our
2235 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2236 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2237 cx->blk_loop.state_u.lazysv.end = right;
2238 SvREFCNT_inc(right);
2239 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2240 /* This will do the upgrade to SVt_PV, and warn if the value
2241 is uninitialised. */
2242 (void) SvPV_nolen_const(right);
2243 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2244 to replace !SvOK() with a pointer to "". */
2246 SvREFCNT_dec(right);
2247 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2251 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2252 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2253 SvREFCNT_inc(maybe_ary);
2254 cx->blk_loop.state_u.ary.ix =
2255 (PL_op->op_private & OPpITER_REVERSED) ?
2256 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2260 else { /* iterating over items on the stack */
2261 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2262 if (PL_op->op_private & OPpITER_REVERSED) {
2263 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2266 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2276 register PERL_CONTEXT *cx;
2277 const I32 gimme = GIMME_V;
2279 ENTER_with_name("loop1");
2281 ENTER_with_name("loop2");
2283 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2284 PUSHLOOP_PLAIN(cx, SP);
2292 register PERL_CONTEXT *cx;
2299 assert(CxTYPE_is_LOOP(cx));
2301 newsp = PL_stack_base + cx->blk_loop.resetsp;
2304 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2307 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2308 PL_curpm = newpm; /* ... and pop $1 et al */
2310 LEAVE_with_name("loop2");
2311 LEAVE_with_name("loop1");
2317 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2318 PERL_CONTEXT *cx, PMOP *newpm)
2320 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2321 if (gimme == G_SCALAR) {
2322 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2324 const char *what = NULL;
2326 assert(MARK+1 == SP);
2327 if ((SvPADTMP(TOPs) ||
2328 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2331 !SvSMAGICAL(TOPs)) {
2333 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2334 : "a readonly value" : "a temporary";
2339 /* sub:lvalue{} will take us here. */
2348 "Can't return %s from lvalue subroutine", what
2353 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2354 *++newsp = SvREFCNT_inc(*SP);
2361 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2366 *++newsp = &PL_sv_undef;
2368 if (CxLVAL(cx) & OPpDEREF) {
2371 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2375 else if (gimme == G_ARRAY) {
2376 assert (!(CxLVAL(cx) & OPpDEREF));
2377 if (ref || !CxLVAL(cx))
2378 while (++MARK <= SP)
2382 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2383 ? sv_mortalcopy(*MARK)
2384 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2385 else while (++MARK <= SP) {
2386 if (*MARK != &PL_sv_undef
2388 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2393 /* Might be flattened array after $#array = */
2401 "Can't return a %s from lvalue subroutine",
2402 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2408 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2411 PL_stack_sp = newsp;
2417 register PERL_CONTEXT *cx;
2418 bool popsub2 = FALSE;
2419 bool clear_errsv = FALSE;
2429 const I32 cxix = dopoptosub(cxstack_ix);
2432 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2433 * sort block, which is a CXt_NULL
2436 PL_stack_base[1] = *PL_stack_sp;
2437 PL_stack_sp = PL_stack_base + 1;
2441 DIE(aTHX_ "Can't return outside a subroutine");
2443 if (cxix < cxstack_ix)
2446 if (CxMULTICALL(&cxstack[cxix])) {
2447 gimme = cxstack[cxix].blk_gimme;
2448 if (gimme == G_VOID)
2449 PL_stack_sp = PL_stack_base;
2450 else if (gimme == G_SCALAR) {
2451 PL_stack_base[1] = *PL_stack_sp;
2452 PL_stack_sp = PL_stack_base + 1;
2458 switch (CxTYPE(cx)) {
2461 lval = !!CvLVALUE(cx->blk_sub.cv);
2462 retop = cx->blk_sub.retop;
2463 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2466 if (!(PL_in_eval & EVAL_KEEPERR))
2469 namesv = cx->blk_eval.old_namesv;
2470 retop = cx->blk_eval.retop;
2473 if (optype == OP_REQUIRE &&
2474 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2476 /* Unassume the success we assumed earlier. */
2477 (void)hv_delete(GvHVn(PL_incgv),
2478 SvPVX_const(namesv), SvCUR(namesv),
2480 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2485 retop = cx->blk_sub.retop;
2488 DIE(aTHX_ "panic: return");
2492 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2494 if (gimme == G_SCALAR) {
2497 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2498 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2499 *++newsp = SvREFCNT_inc(*SP);
2504 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2506 *++newsp = sv_mortalcopy(sv);
2510 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2514 *++newsp = sv_mortalcopy(*SP);
2517 *++newsp = sv_mortalcopy(*SP);
2520 *++newsp = &PL_sv_undef;
2522 else if (gimme == G_ARRAY) {
2523 while (++MARK <= SP) {
2524 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2525 ? *MARK : sv_mortalcopy(*MARK);
2526 TAINT_NOT; /* Each item is independent */
2529 PL_stack_sp = newsp;
2533 /* Stack values are safe: */
2536 POPSUB(cx,sv); /* release CV and @_ ... */
2540 PL_curpm = newpm; /* ... and pop $1 et al */
2549 /* This duplicates parts of pp_leavesub, so that it can share code with
2557 register PERL_CONTEXT *cx;
2560 if (CxMULTICALL(&cxstack[cxstack_ix]))
2564 cxstack_ix++; /* temporarily protect top context */
2568 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2572 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2573 PL_curpm = newpm; /* ... and pop $1 et al */
2576 return cx->blk_sub.retop;
2583 register PERL_CONTEXT *cx;
2594 if (PL_op->op_flags & OPf_SPECIAL) {
2595 cxix = dopoptoloop(cxstack_ix);
2597 DIE(aTHX_ "Can't \"last\" outside a loop block");
2600 cxix = dopoptolabel(cPVOP->op_pv);
2602 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2604 if (cxix < cxstack_ix)
2608 cxstack_ix++; /* temporarily protect top context */
2610 switch (CxTYPE(cx)) {
2611 case CXt_LOOP_LAZYIV:
2612 case CXt_LOOP_LAZYSV:
2614 case CXt_LOOP_PLAIN:
2616 newsp = PL_stack_base + cx->blk_loop.resetsp;
2617 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2621 nextop = cx->blk_sub.retop;
2625 nextop = cx->blk_eval.retop;
2629 nextop = cx->blk_sub.retop;
2632 DIE(aTHX_ "panic: last");
2636 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2637 pop2 == CXt_SUB ? SVs_TEMP : 0);
2642 /* Stack values are safe: */
2644 case CXt_LOOP_LAZYIV:
2645 case CXt_LOOP_PLAIN:
2646 case CXt_LOOP_LAZYSV:
2648 POPLOOP(cx); /* release loop vars ... */
2652 POPSUB(cx,sv); /* release CV and @_ ... */
2655 PL_curpm = newpm; /* ... and pop $1 et al */
2658 PERL_UNUSED_VAR(optype);
2659 PERL_UNUSED_VAR(gimme);
2667 register PERL_CONTEXT *cx;
2670 if (PL_op->op_flags & OPf_SPECIAL) {
2671 cxix = dopoptoloop(cxstack_ix);
2673 DIE(aTHX_ "Can't \"next\" outside a loop block");
2676 cxix = dopoptolabel(cPVOP->op_pv);
2678 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2680 if (cxix < cxstack_ix)
2683 /* clear off anything above the scope we're re-entering, but
2684 * save the rest until after a possible continue block */
2685 inner = PL_scopestack_ix;
2687 if (PL_scopestack_ix < inner)
2688 leave_scope(PL_scopestack[PL_scopestack_ix]);
2689 PL_curcop = cx->blk_oldcop;
2690 return (cx)->blk_loop.my_op->op_nextop;
2697 register PERL_CONTEXT *cx;
2701 if (PL_op->op_flags & OPf_SPECIAL) {
2702 cxix = dopoptoloop(cxstack_ix);
2704 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2707 cxix = dopoptolabel(cPVOP->op_pv);
2709 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2711 if (cxix < cxstack_ix)
2714 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2715 if (redo_op->op_type == OP_ENTER) {
2716 /* pop one less context to avoid $x being freed in while (my $x..) */
2718 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2719 redo_op = redo_op->op_next;
2723 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2724 LEAVE_SCOPE(oldsave);
2726 PL_curcop = cx->blk_oldcop;
2731 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2735 static const char too_deep[] = "Target of goto is too deeply nested";
2737 PERL_ARGS_ASSERT_DOFINDLABEL;
2740 Perl_croak(aTHX_ too_deep);
2741 if (o->op_type == OP_LEAVE ||
2742 o->op_type == OP_SCOPE ||
2743 o->op_type == OP_LEAVELOOP ||
2744 o->op_type == OP_LEAVESUB ||
2745 o->op_type == OP_LEAVETRY)
2747 *ops++ = cUNOPo->op_first;
2749 Perl_croak(aTHX_ too_deep);
2752 if (o->op_flags & OPf_KIDS) {
2754 /* First try all the kids at this level, since that's likeliest. */
2755 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2756 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2757 const char *kid_label = CopLABEL(kCOP);
2758 if (kid_label && strEQ(kid_label, label))
2762 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2763 if (kid == PL_lastgotoprobe)
2765 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2768 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2769 ops[-1]->op_type == OP_DBSTATE)
2774 if ((o = dofindlabel(kid, label, ops, oplimit)))
2787 register PERL_CONTEXT *cx;
2788 #define GOTO_DEPTH 64
2789 OP *enterops[GOTO_DEPTH];
2790 const char *label = NULL;
2791 const bool do_dump = (PL_op->op_type == OP_DUMP);
2792 static const char must_have_label[] = "goto must have label";
2794 if (PL_op->op_flags & OPf_STACKED) {
2795 SV * const sv = POPs;
2797 /* This egregious kludge implements goto &subroutine */
2798 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2800 register PERL_CONTEXT *cx;
2801 CV *cv = MUTABLE_CV(SvRV(sv));
2808 if (!CvROOT(cv) && !CvXSUB(cv)) {
2809 const GV * const gv = CvGV(cv);
2813 /* autoloaded stub? */
2814 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2816 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2818 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2819 if (autogv && (cv = GvCV(autogv)))
2821 tmpstr = sv_newmortal();
2822 gv_efullname3(tmpstr, gv, NULL);
2823 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2825 DIE(aTHX_ "Goto undefined subroutine");
2828 /* First do some returnish stuff. */
2829 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2831 cxix = dopoptosub(cxstack_ix);
2833 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2834 if (cxix < cxstack_ix)
2838 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2839 if (CxTYPE(cx) == CXt_EVAL) {
2841 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2843 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2845 else if (CxMULTICALL(cx))
2846 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2847 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2848 /* put @_ back onto stack */
2849 AV* av = cx->blk_sub.argarray;
2851 items = AvFILLp(av) + 1;
2852 EXTEND(SP, items+1); /* @_ could have been extended. */
2853 Copy(AvARRAY(av), SP + 1, items, SV*);
2854 SvREFCNT_dec(GvAV(PL_defgv));
2855 GvAV(PL_defgv) = cx->blk_sub.savearray;
2857 /* abandon @_ if it got reified */
2862 av_extend(av, items-1);
2864 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2867 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2868 AV* const av = GvAV(PL_defgv);
2869 items = AvFILLp(av) + 1;
2870 EXTEND(SP, items+1); /* @_ could have been extended. */
2871 Copy(AvARRAY(av), SP + 1, items, SV*);
2875 if (CxTYPE(cx) == CXt_SUB &&
2876 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2877 SvREFCNT_dec(cx->blk_sub.cv);
2878 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2879 LEAVE_SCOPE(oldsave);
2881 /* Now do some callish stuff. */
2883 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2885 OP* const retop = cx->blk_sub.retop;
2886 SV **newsp __attribute__unused__;
2887 I32 gimme __attribute__unused__;
2890 for (index=0; index<items; index++)
2891 sv_2mortal(SP[-index]);
2894 /* XS subs don't have a CxSUB, so pop it */
2895 POPBLOCK(cx, PL_curpm);
2896 /* Push a mark for the start of arglist */
2899 (void)(*CvXSUB(cv))(aTHX_ cv);
2904 AV* const padlist = CvPADLIST(cv);
2905 if (CxTYPE(cx) == CXt_EVAL) {
2906 PL_in_eval = CxOLD_IN_EVAL(cx);
2907 PL_eval_root = cx->blk_eval.old_eval_root;
2908 cx->cx_type = CXt_SUB;
2910 cx->blk_sub.cv = cv;
2911 cx->blk_sub.olddepth = CvDEPTH(cv);
2914 if (CvDEPTH(cv) < 2)
2915 SvREFCNT_inc_simple_void_NN(cv);
2917 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2918 sub_crush_depth(cv);
2919 pad_push(padlist, CvDEPTH(cv));
2921 PL_curcop = cx->blk_oldcop;
2923 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2926 AV *const av = MUTABLE_AV(PAD_SVl(0));
2928 cx->blk_sub.savearray = GvAV(PL_defgv);
2929 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2930 CX_CURPAD_SAVE(cx->blk_sub);
2931 cx->blk_sub.argarray = av;
2933 if (items >= AvMAX(av) + 1) {
2934 SV **ary = AvALLOC(av);
2935 if (AvARRAY(av) != ary) {
2936 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2939 if (items >= AvMAX(av) + 1) {
2940 AvMAX(av) = items - 1;
2941 Renew(ary,items+1,SV*);
2947 Copy(mark,AvARRAY(av),items,SV*);
2948 AvFILLp(av) = items - 1;
2949 assert(!AvREAL(av));
2951 /* transfer 'ownership' of refcnts to new @_ */
2961 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2962 Perl_get_db_sub(aTHX_ NULL, cv);
2964 CV * const gotocv = get_cvs("DB::goto", 0);
2966 PUSHMARK( PL_stack_sp );
2967 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2972 RETURNOP(CvSTART(cv));
2976 label = SvPV_nolen_const(sv);
2977 if (!(do_dump || *label))
2978 DIE(aTHX_ must_have_label);
2981 else if (PL_op->op_flags & OPf_SPECIAL) {
2983 DIE(aTHX_ must_have_label);
2986 label = cPVOP->op_pv;
2990 if (label && *label) {
2991 OP *gotoprobe = NULL;
2992 bool leaving_eval = FALSE;
2993 bool in_block = FALSE;
2994 PERL_CONTEXT *last_eval_cx = NULL;
2998 PL_lastgotoprobe = NULL;
3000 for (ix = cxstack_ix; ix >= 0; ix--) {
3002 switch (CxTYPE(cx)) {
3004 leaving_eval = TRUE;
3005 if (!CxTRYBLOCK(cx)) {
3006 gotoprobe = (last_eval_cx ?
3007 last_eval_cx->blk_eval.old_eval_root :
3012 /* else fall through */
3013 case CXt_LOOP_LAZYIV:
3014 case CXt_LOOP_LAZYSV:
3016 case CXt_LOOP_PLAIN:
3019 gotoprobe = cx->blk_oldcop->op_sibling;
3025 gotoprobe = cx->blk_oldcop->op_sibling;
3028 gotoprobe = PL_main_root;
3031 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3032 gotoprobe = CvROOT(cx->blk_sub.cv);
3038 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3041 DIE(aTHX_ "panic: goto");
3042 gotoprobe = PL_main_root;
3046 retop = dofindlabel(gotoprobe, label,
3047 enterops, enterops + GOTO_DEPTH);
3050 if (gotoprobe->op_sibling &&
3051 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3052 gotoprobe->op_sibling->op_sibling) {
3053 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3054 label, enterops, enterops + GOTO_DEPTH);
3059 PL_lastgotoprobe = gotoprobe;
3062 DIE(aTHX_ "Can't find label %s", label);
3064 /* if we're leaving an eval, check before we pop any frames
3065 that we're not going to punt, otherwise the error
3068 if (leaving_eval && *enterops && enterops[1]) {
3070 for (i = 1; enterops[i]; i++)
3071 if (enterops[i]->op_type == OP_ENTERITER)
3072 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3075 if (*enterops && enterops[1]) {
3076 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3078 deprecate("\"goto\" to jump into a construct");
3081 /* pop unwanted frames */
3083 if (ix < cxstack_ix) {
3090 oldsave = PL_scopestack[PL_scopestack_ix];
3091 LEAVE_SCOPE(oldsave);
3094 /* push wanted frames */
3096 if (*enterops && enterops[1]) {
3097 OP * const oldop = PL_op;
3098 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3099 for (; enterops[ix]; ix++) {
3100 PL_op = enterops[ix];
3101 /* Eventually we may want to stack the needed arguments
3102 * for each op. For now, we punt on the hard ones. */
3103 if (PL_op->op_type == OP_ENTERITER)
3104 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3105 PL_op->op_ppaddr(aTHX);
3113 if (!retop) retop = PL_main_start;
3115 PL_restartop = retop;
3116 PL_do_undump = TRUE;
3120 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3121 PL_do_undump = FALSE;
3136 anum = 0; (void)POPs;
3141 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3143 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3146 PL_exit_flags |= PERL_EXIT_EXPECTED;
3148 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3149 if (anum || !(PL_minus_c && PL_madskills))
3154 PUSHs(&PL_sv_undef);
3161 S_save_lines(pTHX_ AV *array, SV *sv)
3163 const char *s = SvPVX_const(sv);
3164 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3167 PERL_ARGS_ASSERT_SAVE_LINES;
3169 while (s && s < send) {
3171 SV * const tmpstr = newSV_type(SVt_PVMG);
3173 t = (const char *)memchr(s, '\n', send - s);
3179 sv_setpvn(tmpstr, s, t - s);
3180 av_store(array, line++, tmpstr);
3188 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3190 0 is used as continue inside eval,
3192 3 is used for a die caught by an inner eval - continue inner loop
3194 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3195 establish a local jmpenv to handle exception traps.
3200 S_docatch(pTHX_ OP *o)
3204 OP * const oldop = PL_op;
3208 assert(CATCH_GET == TRUE);
3215 assert(cxstack_ix >= 0);
3216 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3217 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3222 /* die caught by an inner eval - continue inner loop */
3223 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3224 PL_restartjmpenv = NULL;
3225 PL_op = PL_restartop;
3241 /* James Bond: Do you expect me to talk?
3242 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3244 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3245 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3247 Currently it is not used outside the core code. Best if it stays that way.
3249 Hence it's now deprecated, and will be removed.
3252 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3253 /* sv Text to convert to OP tree. */
3254 /* startop op_free() this to undo. */
3255 /* code Short string id of the caller. */
3257 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3258 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3261 /* Don't use this. It will go away without warning once the regexp engine is
3262 refactored not to use it. */
3264 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3267 dVAR; dSP; /* Make POPBLOCK work. */
3273 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3274 char *tmpbuf = tbuf;
3277 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3281 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3283 ENTER_with_name("eval");
3284 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3286 /* switch to eval mode */
3288 if (IN_PERL_COMPILETIME) {
3289 SAVECOPSTASH_FREE(&PL_compiling);
3290 CopSTASH_set(&PL_compiling, PL_curstash);
3292 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3293 SV * const sv = sv_newmortal();
3294 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3295 code, (unsigned long)++PL_evalseq,
3296 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3301 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3302 (unsigned long)++PL_evalseq);
3303 SAVECOPFILE_FREE(&PL_compiling);
3304 CopFILE_set(&PL_compiling, tmpbuf+2);
3305 SAVECOPLINE(&PL_compiling);
3306 CopLINE_set(&PL_compiling, 1);
3307 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3308 deleting the eval's FILEGV from the stash before gv_check() runs
3309 (i.e. before run-time proper). To work around the coredump that
3310 ensues, we always turn GvMULTI_on for any globals that were
3311 introduced within evals. See force_ident(). GSAR 96-10-12 */
3312 safestr = savepvn(tmpbuf, len);
3313 SAVEDELETE(PL_defstash, safestr, len);
3315 #ifdef OP_IN_REGISTER
3321 /* we get here either during compilation, or via pp_regcomp at runtime */
3322 runtime = IN_PERL_RUNTIME;
3325 runcv = find_runcv(NULL);
3327 /* At run time, we have to fetch the hints from PL_curcop. */
3328 PL_hints = PL_curcop->cop_hints;
3329 if (PL_hints & HINT_LOCALIZE_HH) {
3330 /* SAVEHINTS created a new HV in PL_hintgv, which we
3332 SvREFCNT_dec(GvHV(PL_hintgv));
3334 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3335 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3337 SAVECOMPILEWARNINGS();
3338 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3339 cophh_free(CopHINTHASH_get(&PL_compiling));
3340 /* XXX Does this need to avoid copying a label? */
3341 PL_compiling.cop_hints_hash
3342 = cophh_copy(PL_curcop->cop_hints_hash);
3346 PL_op->op_type = OP_ENTEREVAL;
3347 PL_op->op_flags = 0; /* Avoid uninit warning. */
3348 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3350 need_catch = CATCH_GET;
3354 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3356 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3357 CATCH_SET(need_catch);
3358 POPBLOCK(cx,PL_curpm);
3361 (*startop)->op_type = OP_NULL;
3362 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3363 /* XXX DAPM do this properly one year */
3364 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3365 LEAVE_with_name("eval");
3366 if (IN_PERL_COMPILETIME)
3367 CopHINTS_set(&PL_compiling, PL_hints);
3368 #ifdef OP_IN_REGISTER
3371 PERL_UNUSED_VAR(newsp);
3372 PERL_UNUSED_VAR(optype);
3374 return PL_eval_start;
3379 =for apidoc find_runcv
3381 Locate the CV corresponding to the currently executing sub or eval.
3382 If db_seqp is non_null, skip CVs that are in the DB package and populate
3383 *db_seqp with the cop sequence number at the point that the DB:: code was
3384 entered. (allows debuggers to eval in the scope of the breakpoint rather
3385 than in the scope of the debugger itself).
3391 Perl_find_runcv(pTHX_ U32 *db_seqp)
3397 *db_seqp = PL_curcop->cop_seq;
3398 for (si = PL_curstackinfo; si; si = si->si_prev) {
3400 for (ix = si->si_cxix; ix >= 0; ix--) {
3401 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3402 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3403 CV * const cv = cx->blk_sub.cv;
3404 /* skip DB:: code */
3405 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3406 *db_seqp = cx->blk_oldcop->cop_seq;
3411 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3419 /* Run yyparse() in a setjmp wrapper. Returns:
3420 * 0: yyparse() successful
3421 * 1: yyparse() failed
3425 S_try_yyparse(pTHX_ int gramtype)
3430 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3434 ret = yyparse(gramtype) ? 1 : 0;
3448 /* Compile a require/do, an eval '', or a /(?{...})/.
3449 * In the last case, startop is non-null, and contains the address of
3450 * a pointer that should be set to the just-compiled code.
3451 * outside is the lexically enclosing CV (if any) that invoked us.
3452 * Returns a bool indicating whether the compile was successful; if so,
3453 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3454 * pushes undef (also croaks if startop != NULL).
3458 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3461 OP * const saveop = PL_op;
3462 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3465 PL_in_eval = (in_require
3466 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3471 SAVESPTR(PL_compcv);
3472 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3473 CvEVAL_on(PL_compcv);
3474 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3475 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3476 cxstack[cxstack_ix].blk_gimme = gimme;
3478 CvOUTSIDE_SEQ(PL_compcv) = seq;
3479 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3481 /* set up a scratch pad */
3483 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3484 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3488 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3490 /* make sure we compile in the right package */
3492 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3493 SAVESPTR(PL_curstash);
3494 PL_curstash = CopSTASH(PL_curcop);
3496 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3497 SAVESPTR(PL_beginav);
3498 PL_beginav = newAV();
3499 SAVEFREESV(PL_beginav);
3500 SAVESPTR(PL_unitcheckav);
3501 PL_unitcheckav = newAV();
3502 SAVEFREESV(PL_unitcheckav);
3505 SAVEBOOL(PL_madskills);
3509 /* try to compile it */
3511 PL_eval_root = NULL;
3512 PL_curcop = &PL_compiling;
3513 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3514 PL_in_eval |= EVAL_KEEPERR;
3518 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3520 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3521 * so honour CATCH_GET and trap it here if necessary */
3523 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3525 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3526 SV **newsp; /* Used by POPBLOCK. */
3528 I32 optype; /* Used by POPEVAL. */
3534 PERL_UNUSED_VAR(newsp);
3535 PERL_UNUSED_VAR(optype);
3537 /* note that if yystatus == 3, then the EVAL CX block has already
3538 * been popped, and various vars restored */
3540 if (yystatus != 3) {
3542 op_free(PL_eval_root);
3543 PL_eval_root = NULL;
3545 SP = PL_stack_base + POPMARK; /* pop original mark */
3547 POPBLOCK(cx,PL_curpm);
3549 namesv = cx->blk_eval.old_namesv;
3553 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3555 msg = SvPVx_nolen_const(ERRSV);
3558 /* If cx is still NULL, it means that we didn't go in the
3559 * POPEVAL branch. */
3560 cx = &cxstack[cxstack_ix];
3561 assert(CxTYPE(cx) == CXt_EVAL);
3562 namesv = cx->blk_eval.old_namesv;
3564 (void)hv_store(GvHVn(PL_incgv),
3565 SvPVX_const(namesv), SvCUR(namesv),
3567 Perl_croak(aTHX_ "%sCompilation failed in require",
3568 *msg ? msg : "Unknown error\n");
3571 if (yystatus != 3) {
3572 POPBLOCK(cx,PL_curpm);
3575 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3576 (*msg ? msg : "Unknown error\n"));
3580 sv_setpvs(ERRSV, "Compilation error");
3583 PUSHs(&PL_sv_undef);
3587 CopLINE_set(&PL_compiling, 0);
3589 *startop = PL_eval_root;
3591 SAVEFREEOP(PL_eval_root);
3593 DEBUG_x(dump_eval());
3595 /* Register with debugger: */
3596 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3597 CV * const cv = get_cvs("DB::postponed", 0);
3601 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3603 call_sv(MUTABLE_SV(cv), G_DISCARD);
3607 if (PL_unitcheckav) {
3608 OP *es = PL_eval_start;
3609 call_list(PL_scopestack_ix, PL_unitcheckav);
3613 /* compiled okay, so do it */
3615 CvDEPTH(PL_compcv) = 1;
3616 SP = PL_stack_base + POPMARK; /* pop original mark */
3617 PL_op = saveop; /* The caller may need it. */
3618 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3625 S_check_type_and_open(pTHX_ SV *name)
3628 const char *p = SvPV_nolen_const(name);
3629 const int st_rc = PerlLIO_stat(p, &st);
3631 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3633 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3637 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3638 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3640 return PerlIO_open(p, PERL_SCRIPT_MODE);
3644 #ifndef PERL_DISABLE_PMC
3646 S_doopen_pm(pTHX_ SV *name)
3649 const char *p = SvPV_const(name, namelen);
3651 PERL_ARGS_ASSERT_DOOPEN_PM;
3653 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3654 SV *const pmcsv = sv_newmortal();
3657 SvSetSV_nosteal(pmcsv,name);
3658 sv_catpvn(pmcsv, "c", 1);
3660 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3661 return check_type_and_open(pmcsv);
3663 return check_type_and_open(name);
3666 # define doopen_pm(name) check_type_and_open(name)
3667 #endif /* !PERL_DISABLE_PMC */
3672 register PERL_CONTEXT *cx;
3679 int vms_unixname = 0;
3681 const char *tryname = NULL;
3683 const I32 gimme = GIMME_V;
3684 int filter_has_file = 0;
3685 PerlIO *tryrsfp = NULL;
3686 SV *filter_cache = NULL;
3687 SV *filter_state = NULL;
3688 SV *filter_sub = NULL;
3694 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3695 sv = sv_2mortal(new_version(sv));
3696 if (!sv_derived_from(PL_patchlevel, "version"))
3697 upg_version(PL_patchlevel, TRUE);
3698 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3699 if ( vcmp(sv,PL_patchlevel) <= 0 )
3700 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3701 SVfARG(sv_2mortal(vnormal(sv))),
3702 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3706 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3709 SV * const req = SvRV(sv);
3710 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3712 /* get the left hand term */
3713 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3715 first = SvIV(*av_fetch(lav,0,0));
3716 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3717 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3718 || av_len(lav) > 1 /* FP with > 3 digits */
3719 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3721 DIE(aTHX_ "Perl %"SVf" required--this is only "
3723 SVfARG(sv_2mortal(vnormal(req))),
3724 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3727 else { /* probably 'use 5.10' or 'use 5.8' */
3732 second = SvIV(*av_fetch(lav,1,0));
3734 second /= second >= 600 ? 100 : 10;
3735 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3736 (int)first, (int)second);
3737 upg_version(hintsv, TRUE);
3739 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3740 "--this is only %"SVf", stopped",
3741 SVfARG(sv_2mortal(vnormal(req))),
3742 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3743 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3751 name = SvPV_const(sv, len);
3752 if (!(name && len > 0 && *name))
3753 DIE(aTHX_ "Null filename used");
3754 TAINT_PROPER("require");
3758 /* The key in the %ENV hash is in the syntax of file passed as the argument
3759 * usually this is in UNIX format, but sometimes in VMS format, which
3760 * can result in a module being pulled in more than once.
3761 * To prevent this, the key must be stored in UNIX format if the VMS
3762 * name can be translated to UNIX.
3764 if ((unixname = tounixspec(name, NULL)) != NULL) {
3765 unixlen = strlen(unixname);
3771 /* if not VMS or VMS name can not be translated to UNIX, pass it
3774 unixname = (char *) name;
3777 if (PL_op->op_type == OP_REQUIRE) {
3778 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3779 unixname, unixlen, 0);
3781 if (*svp != &PL_sv_undef)
3784 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3785 "Compilation failed in require", unixname);
3789 /* prepare to compile file */
3791 if (path_is_absolute(name)) {
3792 /* At this point, name is SvPVX(sv) */
3794 tryrsfp = doopen_pm(sv);
3797 AV * const ar = GvAVn(PL_incgv);
3803 namesv = newSV_type(SVt_PV);
3804 for (i = 0; i <= AvFILL(ar); i++) {
3805 SV * const dirsv = *av_fetch(ar, i, TRUE);
3807 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3814 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3815 && !sv_isobject(loader))
3817 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3820 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3821 PTR2UV(SvRV(dirsv)), name);
3822 tryname = SvPVX_const(namesv);
3825 ENTER_with_name("call_INC");
3833 if (sv_isobject(loader))
3834 count = call_method("INC", G_ARRAY);
3836 count = call_sv(loader, G_ARRAY);
3846 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3847 && !isGV_with_GP(SvRV(arg))) {
3848 filter_cache = SvRV(arg);
3849 SvREFCNT_inc_simple_void_NN(filter_cache);
3856 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3860 if (isGV_with_GP(arg)) {
3861 IO * const io = GvIO((const GV *)arg);
3866 tryrsfp = IoIFP(io);
3867 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3868 PerlIO_close(IoOFP(io));
3879 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3881 SvREFCNT_inc_simple_void_NN(filter_sub);
3884 filter_state = SP[i];
3885 SvREFCNT_inc_simple_void(filter_state);
3889 if (!tryrsfp && (filter_cache || filter_sub)) {
3890 tryrsfp = PerlIO_open(BIT_BUCKET,
3898 LEAVE_with_name("call_INC");
3900 /* Adjust file name if the hook has set an %INC entry.
3901 This needs to happen after the FREETMPS above. */
3902 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3904 tryname = SvPV_nolen_const(*svp);
3911 filter_has_file = 0;
3913 SvREFCNT_dec(filter_cache);
3914 filter_cache = NULL;
3917 SvREFCNT_dec(filter_state);
3918 filter_state = NULL;
3921 SvREFCNT_dec(filter_sub);
3926 if (!path_is_absolute(name)
3932 dir = SvPV_const(dirsv, dirlen);
3940 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3942 sv_setpv(namesv, unixdir);
3943 sv_catpv(namesv, unixname);
3945 # ifdef __SYMBIAN32__
3946 if (PL_origfilename[0] &&
3947 PL_origfilename[1] == ':' &&
3948 !(dir[0] && dir[1] == ':'))
3949 Perl_sv_setpvf(aTHX_ namesv,
3954 Perl_sv_setpvf(aTHX_ namesv,
3958 /* The equivalent of
3959 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3960 but without the need to parse the format string, or
3961 call strlen on either pointer, and with the correct
3962 allocation up front. */
3964 char *tmp = SvGROW(namesv, dirlen + len + 2);
3966 memcpy(tmp, dir, dirlen);
3969 /* name came from an SV, so it will have a '\0' at the
3970 end that we can copy as part of this memcpy(). */
3971 memcpy(tmp, name, len + 1);
3973 SvCUR_set(namesv, dirlen + len + 1);
3978 TAINT_PROPER("require");
3979 tryname = SvPVX_const(namesv);
3980 tryrsfp = doopen_pm(namesv);
3982 if (tryname[0] == '.' && tryname[1] == '/') {
3984 while (*++tryname == '/');
3988 else if (errno == EMFILE)
3989 /* no point in trying other paths if out of handles */
3998 if (PL_op->op_type == OP_REQUIRE) {
3999 if(errno == EMFILE) {
4000 /* diag_listed_as: Can't locate %s */
4001 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4003 if (namesv) { /* did we lookup @INC? */
4004 AV * const ar = GvAVn(PL_incgv);
4006 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4007 for (i = 0; i <= AvFILL(ar); i++) {
4008 sv_catpvs(inc, " ");
4009 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4012 /* diag_listed_as: Can't locate %s */
4014 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4016 (memEQ(name + len - 2, ".h", 3)
4017 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4018 (memEQ(name + len - 3, ".ph", 4)
4019 ? " (did you run h2ph?)" : ""),
4024 DIE(aTHX_ "Can't locate %s", name);
4030 SETERRNO(0, SS_NORMAL);
4032 /* Assume success here to prevent recursive requirement. */
4033 /* name is never assigned to again, so len is still strlen(name) */
4034 /* Check whether a hook in @INC has already filled %INC */
4036 (void)hv_store(GvHVn(PL_incgv),
4037 unixname, unixlen, newSVpv(tryname,0),0);
4039 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4041 (void)hv_store(GvHVn(PL_incgv),
4042 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4045 ENTER_with_name("eval");
4047 SAVECOPFILE_FREE(&PL_compiling);
4048 CopFILE_set(&PL_compiling, tryname);
4049 lex_start(NULL, tryrsfp, 0);
4053 hv_clear(GvHV(PL_hintgv));
4055 SAVECOMPILEWARNINGS();
4056 if (PL_dowarn & G_WARN_ALL_ON)
4057 PL_compiling.cop_warnings = pWARN_ALL ;
4058 else if (PL_dowarn & G_WARN_ALL_OFF)
4059 PL_compiling.cop_warnings = pWARN_NONE ;
4061 PL_compiling.cop_warnings = pWARN_STD ;
4063 if (filter_sub || filter_cache) {
4064 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4065 than hanging another SV from it. In turn, filter_add() optionally
4066 takes the SV to use as the filter (or creates a new SV if passed
4067 NULL), so simply pass in whatever value filter_cache has. */
4068 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4069 IoLINES(datasv) = filter_has_file;
4070 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4071 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4074 /* switch to eval mode */
4075 PUSHBLOCK(cx, CXt_EVAL, SP);
4077 cx->blk_eval.retop = PL_op->op_next;
4079 SAVECOPLINE(&PL_compiling);
4080 CopLINE_set(&PL_compiling, 0);
4084 /* Store and reset encoding. */
4085 encoding = PL_encoding;
4088 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4089 op = DOCATCH(PL_eval_start);
4091 op = PL_op->op_next;
4093 /* Restore encoding. */
4094 PL_encoding = encoding;
4099 /* This is a op added to hold the hints hash for
4100 pp_entereval. The hash can be modified by the code
4101 being eval'ed, so we return a copy instead. */
4107 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4115 register PERL_CONTEXT *cx;
4117 const I32 gimme = GIMME_V;
4118 const U32 was = PL_breakable_sub_gen;
4119 char tbuf[TYPE_DIGITS(long) + 12];
4120 bool saved_delete = FALSE;
4121 char *tmpbuf = tbuf;
4125 HV *saved_hh = NULL;
4127 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4128 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4132 /* make sure we've got a plain PV (no overload etc) before testing
4133 * for taint. Making a copy here is probably overkill, but better
4134 * safe than sorry */
4136 const char * const p = SvPV_const(sv, len);
4138 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4141 TAINT_IF(SvTAINTED(sv));
4142 TAINT_PROPER("eval");
4144 ENTER_with_name("eval");
4145 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4148 /* switch to eval mode */
4150 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4151 SV * const temp_sv = sv_newmortal();
4152 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4153 (unsigned long)++PL_evalseq,
4154 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4155 tmpbuf = SvPVX(temp_sv);
4156 len = SvCUR(temp_sv);
4159 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4160 SAVECOPFILE_FREE(&PL_compiling);
4161 CopFILE_set(&PL_compiling, tmpbuf+2);
4162 SAVECOPLINE(&PL_compiling);
4163 CopLINE_set(&PL_compiling, 1);
4164 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4165 deleting the eval's FILEGV from the stash before gv_check() runs
4166 (i.e. before run-time proper). To work around the coredump that
4167 ensues, we always turn GvMULTI_on for any globals that were
4168 introduced within evals. See force_ident(). GSAR 96-10-12 */
4170 PL_hints = PL_op->op_targ;
4172 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4173 SvREFCNT_dec(GvHV(PL_hintgv));
4174 GvHV(PL_hintgv) = saved_hh;
4176 SAVECOMPILEWARNINGS();
4177 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4178 cophh_free(CopHINTHASH_get(&PL_compiling));
4179 if (Perl_cop_fetch_label(aTHX_ PL_curcop, NULL, NULL)) {
4180 /* The label, if present, is the first entry on the chain. So rather
4181 than writing a blank label in front of it (which involves an
4182 allocation), just use the next entry in the chain. */
4183 PL_compiling.cop_hints_hash
4184 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4185 /* Check the assumption that this removed the label. */
4186 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4189 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4190 /* special case: an eval '' executed within the DB package gets lexically
4191 * placed in the first non-DB CV rather than the current CV - this
4192 * allows the debugger to execute code, find lexicals etc, in the
4193 * scope of the code being debugged. Passing &seq gets find_runcv
4194 * to do the dirty work for us */
4195 runcv = find_runcv(&seq);
4197 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4199 cx->blk_eval.retop = PL_op->op_next;
4201 /* prepare to compile string */
4203 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4204 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4206 char *const safestr = savepvn(tmpbuf, len);
4207 SAVEDELETE(PL_defstash, safestr, len);
4208 saved_delete = TRUE;
4213 if (doeval(gimme, NULL, runcv, seq)) {
4214 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4215 ? (PERLDB_LINE || PERLDB_SAVESRC)
4216 : PERLDB_SAVESRC_NOSUBS) {
4217 /* Retain the filegv we created. */
4218 } else if (!saved_delete) {
4219 char *const safestr = savepvn(tmpbuf, len);
4220 SAVEDELETE(PL_defstash, safestr, len);
4222 return DOCATCH(PL_eval_start);
4224 /* We have already left the scope set up earlier thanks to the LEAVE
4226 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4227 ? (PERLDB_LINE || PERLDB_SAVESRC)
4228 : PERLDB_SAVESRC_INVALID) {
4229 /* Retain the filegv we created. */
4230 } else if (!saved_delete) {
4231 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4233 return PL_op->op_next;
4243 register PERL_CONTEXT *cx;
4245 const U8 save_flags = PL_op -> op_flags;
4252 namesv = cx->blk_eval.old_namesv;
4253 retop = cx->blk_eval.retop;
4256 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4258 PL_curpm = newpm; /* Don't pop $1 et al till now */
4261 assert(CvDEPTH(PL_compcv) == 1);
4263 CvDEPTH(PL_compcv) = 0;
4265 if (optype == OP_REQUIRE &&
4266 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4268 /* Unassume the success we assumed earlier. */
4269 (void)hv_delete(GvHVn(PL_incgv),
4270 SvPVX_const(namesv), SvCUR(namesv),
4272 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4274 /* die_unwind() did LEAVE, or we won't be here */
4277 LEAVE_with_name("eval");
4278 if (!(save_flags & OPf_SPECIAL)) {
4286 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4287 close to the related Perl_create_eval_scope. */
4289 Perl_delete_eval_scope(pTHX)
4294 register PERL_CONTEXT *cx;
4300 LEAVE_with_name("eval_scope");
4301 PERL_UNUSED_VAR(newsp);
4302 PERL_UNUSED_VAR(gimme);
4303 PERL_UNUSED_VAR(optype);
4306 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4307 also needed by Perl_fold_constants. */
4309 Perl_create_eval_scope(pTHX_ U32 flags)
4312 const I32 gimme = GIMME_V;
4314 ENTER_with_name("eval_scope");
4317 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4320 PL_in_eval = EVAL_INEVAL;
4321 if (flags & G_KEEPERR)
4322 PL_in_eval |= EVAL_KEEPERR;
4325 if (flags & G_FAKINGEVAL) {
4326 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4334 PERL_CONTEXT * const cx = create_eval_scope(0);
4335 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4336 return DOCATCH(PL_op->op_next);
4345 register PERL_CONTEXT *cx;
4351 PERL_UNUSED_VAR(optype);
4354 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4355 PL_curpm = newpm; /* Don't pop $1 et al till now */
4357 LEAVE_with_name("eval_scope");
4365 register PERL_CONTEXT *cx;
4366 const I32 gimme = GIMME_V;
4368 ENTER_with_name("given");
4371 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4372 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4374 PUSHBLOCK(cx, CXt_GIVEN, SP);
4383 register PERL_CONTEXT *cx;
4387 PERL_UNUSED_CONTEXT;
4390 assert(CxTYPE(cx) == CXt_GIVEN);
4393 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4394 PL_curpm = newpm; /* Don't pop $1 et al till now */
4396 LEAVE_with_name("given");
4400 /* Helper routines used by pp_smartmatch */
4402 S_make_matcher(pTHX_ REGEXP *re)
4405 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4407 PERL_ARGS_ASSERT_MAKE_MATCHER;
4409 PM_SETRE(matcher, ReREFCNT_inc(re));
4411 SAVEFREEOP((OP *) matcher);
4412 ENTER_with_name("matcher"); SAVETMPS;
4418 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4423 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4425 PL_op = (OP *) matcher;
4428 (void) Perl_pp_match(aTHX);
4430 return (SvTRUEx(POPs));
4434 S_destroy_matcher(pTHX_ PMOP *matcher)
4438 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4439 PERL_UNUSED_ARG(matcher);
4442 LEAVE_with_name("matcher");
4445 /* Do a smart match */
4448 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4449 return do_smartmatch(NULL, NULL, 0);
4452 /* This version of do_smartmatch() implements the
4453 * table of smart matches that is found in perlsyn.
4456 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4461 bool object_on_left = FALSE;
4462 SV *e = TOPs; /* e is for 'expression' */
4463 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4465 /* Take care only to invoke mg_get() once for each argument.
4466 * Currently we do this by copying the SV if it's magical. */
4468 if (!copied && SvGMAGICAL(d))
4469 d = sv_mortalcopy(d);
4476 e = sv_mortalcopy(e);
4478 /* First of all, handle overload magic of the rightmost argument */
4481 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4482 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4484 tmpsv = amagic_call(d, e, smart_amg, 0);
4491 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4494 SP -= 2; /* Pop the values */
4499 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4506 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4507 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4508 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4510 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4511 object_on_left = TRUE;
4514 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4516 if (object_on_left) {
4517 goto sm_any_sub; /* Treat objects like scalars */
4519 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4520 /* Test sub truth for each key */
4522 bool andedresults = TRUE;
4523 HV *hv = (HV*) SvRV(d);
4524 I32 numkeys = hv_iterinit(hv);
4525 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4528 while ( (he = hv_iternext(hv)) ) {
4529 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4530 ENTER_with_name("smartmatch_hash_key_test");
4533 PUSHs(hv_iterkeysv(he));
4535 c = call_sv(e, G_SCALAR);
4538 andedresults = FALSE;
4540 andedresults = SvTRUEx(POPs) && andedresults;
4542 LEAVE_with_name("smartmatch_hash_key_test");
4549 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4550 /* Test sub truth for each element */
4552 bool andedresults = TRUE;
4553 AV *av = (AV*) SvRV(d);
4554 const I32 len = av_len(av);
4555 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4558 for (i = 0; i <= len; ++i) {
4559 SV * const * const svp = av_fetch(av, i, FALSE);
4560 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4561 ENTER_with_name("smartmatch_array_elem_test");
4567 c = call_sv(e, G_SCALAR);
4570 andedresults = FALSE;
4572 andedresults = SvTRUEx(POPs) && andedresults;
4574 LEAVE_with_name("smartmatch_array_elem_test");
4583 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4584 ENTER_with_name("smartmatch_coderef");
4589 c = call_sv(e, G_SCALAR);
4593 else if (SvTEMP(TOPs))
4594 SvREFCNT_inc_void(TOPs);
4596 LEAVE_with_name("smartmatch_coderef");
4601 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4602 if (object_on_left) {
4603 goto sm_any_hash; /* Treat objects like scalars */
4605 else if (!SvOK(d)) {
4606 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4609 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4610 /* Check that the key-sets are identical */
4612 HV *other_hv = MUTABLE_HV(SvRV(d));
4614 bool other_tied = FALSE;
4615 U32 this_key_count = 0,
4616 other_key_count = 0;
4617 HV *hv = MUTABLE_HV(SvRV(e));
4619 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4620 /* Tied hashes don't know how many keys they have. */
4621 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4624 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4625 HV * const temp = other_hv;
4630 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4633 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4636 /* The hashes have the same number of keys, so it suffices
4637 to check that one is a subset of the other. */
4638 (void) hv_iterinit(hv);
4639 while ( (he = hv_iternext(hv)) ) {
4640 SV *key = hv_iterkeysv(he);
4642 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4645 if(!hv_exists_ent(other_hv, key, 0)) {
4646 (void) hv_iterinit(hv); /* reset iterator */
4652 (void) hv_iterinit(other_hv);
4653 while ( hv_iternext(other_hv) )
4657 other_key_count = HvUSEDKEYS(other_hv);
4659 if (this_key_count != other_key_count)
4664 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4665 AV * const other_av = MUTABLE_AV(SvRV(d));
4666 const I32 other_len = av_len(other_av) + 1;
4668 HV *hv = MUTABLE_HV(SvRV(e));
4670 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4671 for (i = 0; i < other_len; ++i) {
4672 SV ** const svp = av_fetch(other_av, i, FALSE);
4673 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4674 if (svp) { /* ??? When can this not happen? */
4675 if (hv_exists_ent(hv, *svp, 0))
4681 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4682 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4685 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4687 HV *hv = MUTABLE_HV(SvRV(e));
4689 (void) hv_iterinit(hv);
4690 while ( (he = hv_iternext(hv)) ) {
4691 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4692 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4693 (void) hv_iterinit(hv);
4694 destroy_matcher(matcher);
4698 destroy_matcher(matcher);
4704 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4705 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4712 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4713 if (object_on_left) {
4714 goto sm_any_array; /* Treat objects like scalars */
4716 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4717 AV * const other_av = MUTABLE_AV(SvRV(e));
4718 const I32 other_len = av_len(other_av) + 1;
4721 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4722 for (i = 0; i < other_len; ++i) {
4723 SV ** const svp = av_fetch(other_av, i, FALSE);
4725 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4726 if (svp) { /* ??? When can this not happen? */
4727 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4733 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4734 AV *other_av = MUTABLE_AV(SvRV(d));
4735 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4736 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4740 const I32 other_len = av_len(other_av);
4742 if (NULL == seen_this) {
4743 seen_this = newHV();
4744 (void) sv_2mortal(MUTABLE_SV(seen_this));
4746 if (NULL == seen_other) {
4747 seen_other = newHV();
4748 (void) sv_2mortal(MUTABLE_SV(seen_other));
4750 for(i = 0; i <= other_len; ++i) {
4751 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4752 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4754 if (!this_elem || !other_elem) {
4755 if ((this_elem && SvOK(*this_elem))
4756 || (other_elem && SvOK(*other_elem)))
4759 else if (hv_exists_ent(seen_this,
4760 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4761 hv_exists_ent(seen_other,
4762 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4764 if (*this_elem != *other_elem)
4768 (void)hv_store_ent(seen_this,
4769 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4771 (void)hv_store_ent(seen_other,
4772 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4778 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4779 (void) do_smartmatch(seen_this, seen_other, 0);
4781 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4790 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4791 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4794 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4795 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4798 for(i = 0; i <= this_len; ++i) {
4799 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4800 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4801 if (svp && matcher_matches_sv(matcher, *svp)) {
4802 destroy_matcher(matcher);
4806 destroy_matcher(matcher);
4810 else if (!SvOK(d)) {
4811 /* undef ~~ array */
4812 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4815 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4816 for (i = 0; i <= this_len; ++i) {
4817 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4818 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4819 if (!svp || !SvOK(*svp))
4828 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4830 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4831 for (i = 0; i <= this_len; ++i) {
4832 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4839 /* infinite recursion isn't supposed to happen here */
4840 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4841 (void) do_smartmatch(NULL, NULL, 1);
4843 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4852 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4853 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4854 SV *t = d; d = e; e = t;
4855 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4858 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4859 SV *t = d; d = e; e = t;
4860 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4861 goto sm_regex_array;
4864 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4866 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4868 PUSHs(matcher_matches_sv(matcher, d)
4871 destroy_matcher(matcher);
4876 /* See if there is overload magic on left */
4877 else if (object_on_left && SvAMAGIC(d)) {
4879 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4880 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4883 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4891 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4894 else if (!SvOK(d)) {
4895 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4896 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4901 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4902 DEBUG_M(if (SvNIOK(e))
4903 Perl_deb(aTHX_ " applying rule Any-Num\n");
4905 Perl_deb(aTHX_ " applying rule Num-numish\n");
4907 /* numeric comparison */
4910 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4911 (void) Perl_pp_i_eq(aTHX);
4913 (void) Perl_pp_eq(aTHX);
4921 /* As a last resort, use string comparison */
4922 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4925 return Perl_pp_seq(aTHX);
4931 register PERL_CONTEXT *cx;
4932 const I32 gimme = GIMME_V;
4934 /* This is essentially an optimization: if the match
4935 fails, we don't want to push a context and then
4936 pop it again right away, so we skip straight
4937 to the op that follows the leavewhen.
4938 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4940 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4941 RETURNOP(cLOGOP->op_other->op_next);
4943 ENTER_with_name("when");
4946 PUSHBLOCK(cx, CXt_WHEN, SP);
4956 register PERL_CONTEXT *cx;
4961 cxix = dopoptogiven(cxstack_ix);
4963 DIE(aTHX_ "Can't use when() outside a topicalizer");
4966 assert(CxTYPE(cx) == CXt_WHEN);
4969 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4970 PL_curpm = newpm; /* pop $1 et al */
4972 LEAVE_with_name("when");
4974 if (cxix < cxstack_ix)
4977 cx = &cxstack[cxix];
4979 if (CxFOREACH(cx)) {
4980 /* clear off anything above the scope we're re-entering */
4981 I32 inner = PL_scopestack_ix;
4984 if (PL_scopestack_ix < inner)
4985 leave_scope(PL_scopestack[PL_scopestack_ix]);
4986 PL_curcop = cx->blk_oldcop;
4988 return cx->blk_loop.my_op->op_nextop;
4991 RETURNOP(cx->blk_givwhen.leave_op);
4998 register PERL_CONTEXT *cx;
5003 PERL_UNUSED_VAR(gimme);
5005 cxix = dopoptowhen(cxstack_ix);
5007 DIE(aTHX_ "Can't \"continue\" outside a when block");
5009 if (cxix < cxstack_ix)
5013 assert(CxTYPE(cx) == CXt_WHEN);
5016 PL_curpm = newpm; /* pop $1 et al */
5018 LEAVE_with_name("when");
5019 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5026 register PERL_CONTEXT *cx;
5028 cxix = dopoptogiven(cxstack_ix);
5030 DIE(aTHX_ "Can't \"break\" outside a given block");
5032 cx = &cxstack[cxix];
5034 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5036 if (cxix < cxstack_ix)
5039 /* Restore the sp at the time we entered the given block */
5042 return cx->blk_givwhen.leave_op;
5046 S_doparseform(pTHX_ SV *sv)
5049 register char *s = SvPV(sv, len);
5050 register char *send;
5051 register char *base = NULL; /* start of current field */
5052 register I32 skipspaces = 0; /* number of contiguous spaces seen */
5053 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5054 bool repeat = FALSE; /* ~~ seen on this line */
5055 bool postspace = FALSE; /* a text field may need right padding */
5058 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5060 bool ischop; /* it's a ^ rather than a @ */
5061 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5062 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5066 PERL_ARGS_ASSERT_DOPARSEFORM;
5069 Perl_croak(aTHX_ "Null picture in formline");
5071 if (SvTYPE(sv) >= SVt_PVMG) {
5072 /* This might, of course, still return NULL. */
5073 mg = mg_find(sv, PERL_MAGIC_fm);
5075 sv_upgrade(sv, SVt_PVMG);
5079 /* still the same as previously-compiled string? */
5080 SV *old = mg->mg_obj;
5081 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5082 && len == SvCUR(old)
5083 && strnEQ(SvPVX(old), SvPVX(sv), len)
5085 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5089 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5090 Safefree(mg->mg_ptr);
5096 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5097 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5100 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5101 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5105 /* estimate the buffer size needed */
5106 for (base = s; s <= send; s++) {
5107 if (*s == '\n' || *s == '@' || *s == '^')
5113 Newx(fops, maxops, U32);
5118 *fpc++ = FF_LINEMARK;
5119 noblank = repeat = FALSE;
5137 case ' ': case '\t':
5144 } /* else FALL THROUGH */
5152 *fpc++ = FF_LITERAL;
5160 *fpc++ = (U32)skipspaces;
5164 *fpc++ = FF_NEWLINE;
5168 arg = fpc - linepc + 1;
5175 *fpc++ = FF_LINEMARK;
5176 noblank = repeat = FALSE;
5185 ischop = s[-1] == '^';
5191 arg = (s - base) - 1;
5193 *fpc++ = FF_LITERAL;
5199 if (*s == '*') { /* @* or ^* */
5201 *fpc++ = 2; /* skip the @* or ^* */
5203 *fpc++ = FF_LINESNGL;
5206 *fpc++ = FF_LINEGLOB;
5208 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5209 arg = ischop ? FORM_NUM_BLANK : 0;
5214 const char * const f = ++s;
5217 arg |= FORM_NUM_POINT + (s - f);
5219 *fpc++ = s - base; /* fieldsize for FETCH */
5220 *fpc++ = FF_DECIMAL;
5222 unchopnum |= ! ischop;
5224 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5225 arg = ischop ? FORM_NUM_BLANK : 0;
5227 s++; /* skip the '0' first */
5231 const char * const f = ++s;
5234 arg |= FORM_NUM_POINT + (s - f);
5236 *fpc++ = s - base; /* fieldsize for FETCH */
5237 *fpc++ = FF_0DECIMAL;
5239 unchopnum |= ! ischop;
5241 else { /* text field */
5243 bool ismore = FALSE;
5246 while (*++s == '>') ;
5247 prespace = FF_SPACE;
5249 else if (*s == '|') {
5250 while (*++s == '|') ;
5251 prespace = FF_HALFSPACE;
5256 while (*++s == '<') ;
5259 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5263 *fpc++ = s - base; /* fieldsize for FETCH */
5265 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5268 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5282 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5285 mg->mg_ptr = (char *) fops;
5286 mg->mg_len = arg * sizeof(U32);
5287 mg->mg_obj = sv_copy;
5288 mg->mg_flags |= MGf_REFCOUNTED;
5290 if (unchopnum && repeat)
5291 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5298 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5300 /* Can value be printed in fldsize chars, using %*.*f ? */
5304 int intsize = fldsize - (value < 0 ? 1 : 0);
5306 if (frcsize & FORM_NUM_POINT)
5308 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5311 while (intsize--) pwr *= 10.0;
5312 while (frcsize--) eps /= 10.0;
5315 if (value + eps >= pwr)
5318 if (value - eps <= -pwr)
5325 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5328 SV * const datasv = FILTER_DATA(idx);
5329 const int filter_has_file = IoLINES(datasv);
5330 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5331 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5336 char *prune_from = NULL;
5337 bool read_from_cache = FALSE;
5340 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5342 assert(maxlen >= 0);
5345 /* I was having segfault trouble under Linux 2.2.5 after a
5346 parse error occured. (Had to hack around it with a test
5347 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5348 not sure where the trouble is yet. XXX */
5351 SV *const cache = datasv;
5354 const char *cache_p = SvPV(cache, cache_len);
5358 /* Running in block mode and we have some cached data already.
5360 if (cache_len >= umaxlen) {
5361 /* In fact, so much data we don't even need to call
5366 const char *const first_nl =
5367 (const char *)memchr(cache_p, '\n', cache_len);
5369 take = first_nl + 1 - cache_p;
5373 sv_catpvn(buf_sv, cache_p, take);
5374 sv_chop(cache, cache_p + take);
5375 /* Definitely not EOF */
5379 sv_catsv(buf_sv, cache);
5381 umaxlen -= cache_len;
5384 read_from_cache = TRUE;
5388 /* Filter API says that the filter appends to the contents of the buffer.
5389 Usually the buffer is "", so the details don't matter. But if it's not,
5390 then clearly what it contains is already filtered by this filter, so we
5391 don't want to pass it in a second time.
5392 I'm going to use a mortal in case the upstream filter croaks. */
5393 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5394 ? sv_newmortal() : buf_sv;
5395 SvUPGRADE(upstream, SVt_PV);
5397 if (filter_has_file) {
5398 status = FILTER_READ(idx+1, upstream, 0);
5401 if (filter_sub && status >= 0) {
5405 ENTER_with_name("call_filter_sub");
5406 save_gp(PL_defgv, 0);
5407 GvINTRO_off(PL_defgv);
5408 SAVEGENERICSV(GvSV(PL_defgv));
5412 DEFSV_set(upstream);
5413 SvREFCNT_inc_simple_void_NN(upstream);
5417 PUSHs(filter_state);
5420 count = call_sv(filter_sub, G_SCALAR);
5432 LEAVE_with_name("call_filter_sub");
5435 if(SvOK(upstream)) {
5436 got_p = SvPV(upstream, got_len);
5438 if (got_len > umaxlen) {
5439 prune_from = got_p + umaxlen;
5442 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5443 if (first_nl && first_nl + 1 < got_p + got_len) {
5444 /* There's a second line here... */
5445 prune_from = first_nl + 1;
5450 /* Oh. Too long. Stuff some in our cache. */
5451 STRLEN cached_len = got_p + got_len - prune_from;
5452 SV *const cache = datasv;
5455 /* Cache should be empty. */
5456 assert(!SvCUR(cache));
5459 sv_setpvn(cache, prune_from, cached_len);
5460 /* If you ask for block mode, you may well split UTF-8 characters.
5461 "If it breaks, you get to keep both parts"
5462 (Your code is broken if you don't put them back together again
5463 before something notices.) */
5464 if (SvUTF8(upstream)) {
5467 SvCUR_set(upstream, got_len - cached_len);
5469 /* Can't yet be EOF */
5474 /* If they are at EOF but buf_sv has something in it, then they may never
5475 have touched the SV upstream, so it may be undefined. If we naively
5476 concatenate it then we get a warning about use of uninitialised value.
5478 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5479 sv_catsv(buf_sv, upstream);
5483 IoLINES(datasv) = 0;
5485 SvREFCNT_dec(filter_state);
5486 IoTOP_GV(datasv) = NULL;
5489 SvREFCNT_dec(filter_sub);
5490 IoBOTTOM_GV(datasv) = NULL;
5492 filter_del(S_run_user_filter);
5494 if (status == 0 && read_from_cache) {
5495 /* If we read some data from the cache (and by getting here it implies
5496 that we emptied the cache) then we aren't yet at EOF, and mustn't
5497 report that to our caller. */
5503 /* perhaps someone can come up with a better name for
5504 this? it is not really "absolute", per se ... */
5506 S_path_is_absolute(const char *name)
5508 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5510 if (PERL_FILE_IS_ABSOLUTE(name)
5512 || (*name == '.' && ((name[1] == '/' ||
5513 (name[1] == '.' && name[2] == '/'))
5514 || (name[1] == '\\' ||
5515 ( name[1] == '.' && name[2] == '\\')))
5518 || (*name == '.' && (name[1] == '/' ||
5519 (name[1] == '.' && name[2] == '/')))
5531 * c-indentation-style: bsd
5533 * indent-tabs-mode: t
5536 * ex: set ts=8 sts=4 sw=4 noet: