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) %"SVf,
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 (void)hv_store(GvHVn(PL_incgv),
1767 SvPVX_const(namesv),
1768 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)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_ "%"SVf"Compilation failed in require",
1775 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1778 if (in_eval & EVAL_KEEPERR) {
1779 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1783 sv_setsv(ERRSV, exceptsv);
1785 PL_restartjmpenv = restartjmpenv;
1786 PL_restartop = restartop;
1792 write_to_stderr(exceptsv);
1799 dVAR; dSP; dPOPTOPssrl;
1800 if (SvTRUE(left) != SvTRUE(right))
1807 =for apidoc caller_cx
1809 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1810 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1811 information returned to Perl by C<caller>. Note that XSUBs don't get a
1812 stack frame, so C<caller_cx(0, NULL)> will return information for the
1813 immediately-surrounding Perl code.
1815 This function skips over the automatic calls to C<&DB::sub> made on the
1816 behalf of the debugger. If the stack frame requested was a sub called by
1817 C<DB::sub>, the return value will be the frame for the call to
1818 C<DB::sub>, since that has the correct line number/etc. for the call
1819 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1820 frame for the sub call itself.
1825 const PERL_CONTEXT *
1826 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1828 register I32 cxix = dopoptosub(cxstack_ix);
1829 register const PERL_CONTEXT *cx;
1830 register const PERL_CONTEXT *ccstack = cxstack;
1831 const PERL_SI *top_si = PL_curstackinfo;
1834 /* we may be in a higher stacklevel, so dig down deeper */
1835 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1836 top_si = top_si->si_prev;
1837 ccstack = top_si->si_cxstack;
1838 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1842 /* caller() should not report the automatic calls to &DB::sub */
1843 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1844 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1848 cxix = dopoptosub_at(ccstack, cxix - 1);
1851 cx = &ccstack[cxix];
1852 if (dbcxp) *dbcxp = cx;
1854 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1855 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1856 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1857 field below is defined for any cx. */
1858 /* caller() should not report the automatic calls to &DB::sub */
1859 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1860 cx = &ccstack[dbcxix];
1870 register const PERL_CONTEXT *cx;
1871 const PERL_CONTEXT *dbcx;
1873 const HEK *stash_hek;
1875 bool has_arg = MAXARG && TOPs;
1883 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1885 if (GIMME != G_ARRAY) {
1892 stash_hek = HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop));
1893 if (GIMME != G_ARRAY) {
1896 PUSHs(&PL_sv_undef);
1899 sv_sethek(TARG, stash_hek);
1908 PUSHs(&PL_sv_undef);
1911 sv_sethek(TARG, stash_hek);
1914 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1915 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1918 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1919 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1920 /* So is ccstack[dbcxix]. */
1922 SV * const sv = newSV(0);
1923 gv_efullname3(sv, cvgv, NULL);
1925 PUSHs(boolSV(CxHASARGS(cx)));
1928 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1929 PUSHs(boolSV(CxHASARGS(cx)));
1933 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1936 gimme = (I32)cx->blk_gimme;
1937 if (gimme == G_VOID)
1938 PUSHs(&PL_sv_undef);
1940 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1941 if (CxTYPE(cx) == CXt_EVAL) {
1943 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1944 PUSHs(cx->blk_eval.cur_text);
1948 else if (cx->blk_eval.old_namesv) {
1949 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1952 /* eval BLOCK (try blocks have old_namesv == 0) */
1954 PUSHs(&PL_sv_undef);
1955 PUSHs(&PL_sv_undef);
1959 PUSHs(&PL_sv_undef);
1960 PUSHs(&PL_sv_undef);
1962 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1963 && CopSTASH_eq(PL_curcop, PL_debstash))
1965 AV * const ary = cx->blk_sub.argarray;
1966 const int off = AvARRAY(ary) - AvALLOC(ary);
1968 Perl_init_dbargs(aTHX);
1970 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1971 av_extend(PL_dbargs, AvFILLp(ary) + off);
1972 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1973 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1975 /* XXX only hints propagated via op_private are currently
1976 * visible (others are not easily accessible, since they
1977 * use the global PL_hints) */
1978 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1981 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1983 if (old_warnings == pWARN_NONE ||
1984 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1985 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1986 else if (old_warnings == pWARN_ALL ||
1987 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1988 /* Get the bit mask for $warnings::Bits{all}, because
1989 * it could have been extended by warnings::register */
1991 HV * const bits = get_hv("warnings::Bits", 0);
1992 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1993 mask = newSVsv(*bits_all);
1996 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
2000 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2004 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2005 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2014 const char * const tmps =
2015 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
2016 sv_reset(tmps, CopSTASH(PL_curcop));
2021 /* like pp_nextstate, but used instead when the debugger is active */
2026 PL_curcop = (COP*)PL_op;
2027 TAINT_NOT; /* Each statement is presumed innocent */
2028 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2033 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2034 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2037 register PERL_CONTEXT *cx;
2038 const I32 gimme = G_ARRAY;
2040 GV * const gv = PL_DBgv;
2041 register CV * const cv = GvCV(gv);
2044 DIE(aTHX_ "No DB::DB routine defined");
2046 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2047 /* don't do recursive DB::DB call */
2062 (void)(*CvXSUB(cv))(aTHX_ cv);
2069 PUSHBLOCK(cx, CXt_SUB, SP);
2071 cx->blk_sub.retop = PL_op->op_next;
2074 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2075 RETURNOP(CvSTART(cv));
2083 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2085 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2087 if (gimme == G_SCALAR) {
2089 *++newsp = (SvFLAGS(*SP) & flags) ? *SP : sv_mortalcopy(*SP);
2091 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2094 *++MARK = &PL_sv_undef;
2098 else if (gimme == G_ARRAY) {
2099 /* in case LEAVE wipes old return values */
2100 while (++MARK <= SP) {
2101 if (SvFLAGS(*MARK) & flags)
2104 *++newsp = sv_mortalcopy(*MARK);
2105 TAINT_NOT; /* Each item is independent */
2108 /* When this function was called with MARK == newsp, we reach this
2109 * point with SP == newsp. */
2118 register PERL_CONTEXT *cx;
2119 I32 gimme = GIMME_V;
2121 ENTER_with_name("block");
2124 PUSHBLOCK(cx, CXt_BLOCK, SP);
2132 register PERL_CONTEXT *cx;
2137 if (PL_op->op_flags & OPf_SPECIAL) {
2138 cx = &cxstack[cxstack_ix];
2139 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2144 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2147 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2148 PL_curpm = newpm; /* Don't pop $1 et al till now */
2150 LEAVE_with_name("block");
2158 register PERL_CONTEXT *cx;
2159 const I32 gimme = GIMME_V;
2160 void *itervar; /* location of the iteration variable */
2161 U8 cxtype = CXt_LOOP_FOR;
2163 ENTER_with_name("loop1");
2166 if (PL_op->op_targ) { /* "my" variable */
2167 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2168 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2169 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2170 SVs_PADSTALE, SVs_PADSTALE);
2172 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2174 itervar = PL_comppad;
2176 itervar = &PAD_SVl(PL_op->op_targ);
2179 else { /* symbol table variable */
2180 GV * const gv = MUTABLE_GV(POPs);
2181 SV** svp = &GvSV(gv);
2182 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2184 itervar = (void *)gv;
2187 if (PL_op->op_private & OPpITER_DEF)
2188 cxtype |= CXp_FOR_DEF;
2190 ENTER_with_name("loop2");
2192 PUSHBLOCK(cx, cxtype, SP);
2193 PUSHLOOP_FOR(cx, itervar, MARK);
2194 if (PL_op->op_flags & OPf_STACKED) {
2195 SV *maybe_ary = POPs;
2196 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2198 SV * const right = maybe_ary;
2201 if (RANGE_IS_NUMERIC(sv,right)) {
2202 cx->cx_type &= ~CXTYPEMASK;
2203 cx->cx_type |= CXt_LOOP_LAZYIV;
2204 /* Make sure that no-one re-orders cop.h and breaks our
2206 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2207 #ifdef NV_PRESERVES_UV
2208 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2209 (SvNV(sv) > (NV)IV_MAX)))
2211 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2212 (SvNV(right) < (NV)IV_MIN))))
2214 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2217 ((SvUV(sv) > (UV)IV_MAX) ||
2218 (SvNV(sv) > (NV)UV_MAX)))))
2220 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2222 ((SvNV(right) > 0) &&
2223 ((SvUV(right) > (UV)IV_MAX) ||
2224 (SvNV(right) > (NV)UV_MAX))))))
2226 DIE(aTHX_ "Range iterator outside integer range");
2227 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2228 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2230 /* for correct -Dstv display */
2231 cx->blk_oldsp = sp - PL_stack_base;
2235 cx->cx_type &= ~CXTYPEMASK;
2236 cx->cx_type |= CXt_LOOP_LAZYSV;
2237 /* Make sure that no-one re-orders cop.h and breaks our
2239 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2240 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2241 cx->blk_loop.state_u.lazysv.end = right;
2242 SvREFCNT_inc(right);
2243 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2244 /* This will do the upgrade to SVt_PV, and warn if the value
2245 is uninitialised. */
2246 (void) SvPV_nolen_const(right);
2247 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2248 to replace !SvOK() with a pointer to "". */
2250 SvREFCNT_dec(right);
2251 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2255 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2256 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2257 SvREFCNT_inc(maybe_ary);
2258 cx->blk_loop.state_u.ary.ix =
2259 (PL_op->op_private & OPpITER_REVERSED) ?
2260 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2264 else { /* iterating over items on the stack */
2265 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2266 if (PL_op->op_private & OPpITER_REVERSED) {
2267 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2270 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2280 register PERL_CONTEXT *cx;
2281 const I32 gimme = GIMME_V;
2283 ENTER_with_name("loop1");
2285 ENTER_with_name("loop2");
2287 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2288 PUSHLOOP_PLAIN(cx, SP);
2296 register PERL_CONTEXT *cx;
2303 assert(CxTYPE_is_LOOP(cx));
2305 newsp = PL_stack_base + cx->blk_loop.resetsp;
2308 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2311 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2312 PL_curpm = newpm; /* ... and pop $1 et al */
2314 LEAVE_with_name("loop2");
2315 LEAVE_with_name("loop1");
2321 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2322 PERL_CONTEXT *cx, PMOP *newpm)
2324 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2325 if (gimme == G_SCALAR) {
2326 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2328 const char *what = NULL;
2330 assert(MARK+1 == SP);
2331 if ((SvPADTMP(TOPs) ||
2332 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2335 !SvSMAGICAL(TOPs)) {
2337 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2338 : "a readonly value" : "a temporary";
2343 /* sub:lvalue{} will take us here. */
2352 "Can't return %s from lvalue subroutine", what
2357 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2358 *++newsp = SvREFCNT_inc(*SP);
2365 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2370 *++newsp = &PL_sv_undef;
2372 if (CxLVAL(cx) & OPpDEREF) {
2375 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2379 else if (gimme == G_ARRAY) {
2380 assert (!(CxLVAL(cx) & OPpDEREF));
2381 if (ref || !CxLVAL(cx))
2382 while (++MARK <= SP)
2386 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2387 ? sv_mortalcopy(*MARK)
2388 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2389 else while (++MARK <= SP) {
2390 if (*MARK != &PL_sv_undef
2392 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2397 /* Might be flattened array after $#array = */
2405 "Can't return a %s from lvalue subroutine",
2406 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2412 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2415 PL_stack_sp = newsp;
2421 register PERL_CONTEXT *cx;
2422 bool popsub2 = FALSE;
2423 bool clear_errsv = FALSE;
2433 const I32 cxix = dopoptosub(cxstack_ix);
2436 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2437 * sort block, which is a CXt_NULL
2440 PL_stack_base[1] = *PL_stack_sp;
2441 PL_stack_sp = PL_stack_base + 1;
2445 DIE(aTHX_ "Can't return outside a subroutine");
2447 if (cxix < cxstack_ix)
2450 if (CxMULTICALL(&cxstack[cxix])) {
2451 gimme = cxstack[cxix].blk_gimme;
2452 if (gimme == G_VOID)
2453 PL_stack_sp = PL_stack_base;
2454 else if (gimme == G_SCALAR) {
2455 PL_stack_base[1] = *PL_stack_sp;
2456 PL_stack_sp = PL_stack_base + 1;
2462 switch (CxTYPE(cx)) {
2465 lval = !!CvLVALUE(cx->blk_sub.cv);
2466 retop = cx->blk_sub.retop;
2467 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2470 if (!(PL_in_eval & EVAL_KEEPERR))
2473 namesv = cx->blk_eval.old_namesv;
2474 retop = cx->blk_eval.retop;
2477 if (optype == OP_REQUIRE &&
2478 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2480 /* Unassume the success we assumed earlier. */
2481 (void)hv_delete(GvHVn(PL_incgv),
2482 SvPVX_const(namesv),
2483 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2485 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2490 retop = cx->blk_sub.retop;
2493 DIE(aTHX_ "panic: return");
2497 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2499 if (gimme == G_SCALAR) {
2502 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2503 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2504 *++newsp = SvREFCNT_inc(*SP);
2509 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2511 *++newsp = sv_mortalcopy(sv);
2515 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2519 *++newsp = sv_mortalcopy(*SP);
2522 *++newsp = sv_mortalcopy(*SP);
2525 *++newsp = &PL_sv_undef;
2527 else if (gimme == G_ARRAY) {
2528 while (++MARK <= SP) {
2529 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2530 ? *MARK : sv_mortalcopy(*MARK);
2531 TAINT_NOT; /* Each item is independent */
2534 PL_stack_sp = newsp;
2538 /* Stack values are safe: */
2541 POPSUB(cx,sv); /* release CV and @_ ... */
2545 PL_curpm = newpm; /* ... and pop $1 et al */
2554 /* This duplicates parts of pp_leavesub, so that it can share code with
2562 register PERL_CONTEXT *cx;
2565 if (CxMULTICALL(&cxstack[cxstack_ix]))
2569 cxstack_ix++; /* temporarily protect top context */
2573 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2577 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2578 PL_curpm = newpm; /* ... and pop $1 et al */
2581 return cx->blk_sub.retop;
2588 register PERL_CONTEXT *cx;
2599 if (PL_op->op_flags & OPf_SPECIAL) {
2600 cxix = dopoptoloop(cxstack_ix);
2602 DIE(aTHX_ "Can't \"last\" outside a loop block");
2605 cxix = dopoptolabel(cPVOP->op_pv);
2607 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2609 if (cxix < cxstack_ix)
2613 cxstack_ix++; /* temporarily protect top context */
2615 switch (CxTYPE(cx)) {
2616 case CXt_LOOP_LAZYIV:
2617 case CXt_LOOP_LAZYSV:
2619 case CXt_LOOP_PLAIN:
2621 newsp = PL_stack_base + cx->blk_loop.resetsp;
2622 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2626 nextop = cx->blk_sub.retop;
2630 nextop = cx->blk_eval.retop;
2634 nextop = cx->blk_sub.retop;
2637 DIE(aTHX_ "panic: last");
2641 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2642 pop2 == CXt_SUB ? SVs_TEMP : 0);
2647 /* Stack values are safe: */
2649 case CXt_LOOP_LAZYIV:
2650 case CXt_LOOP_PLAIN:
2651 case CXt_LOOP_LAZYSV:
2653 POPLOOP(cx); /* release loop vars ... */
2657 POPSUB(cx,sv); /* release CV and @_ ... */
2660 PL_curpm = newpm; /* ... and pop $1 et al */
2663 PERL_UNUSED_VAR(optype);
2664 PERL_UNUSED_VAR(gimme);
2672 register PERL_CONTEXT *cx;
2675 if (PL_op->op_flags & OPf_SPECIAL) {
2676 cxix = dopoptoloop(cxstack_ix);
2678 DIE(aTHX_ "Can't \"next\" outside a loop block");
2681 cxix = dopoptolabel(cPVOP->op_pv);
2683 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2685 if (cxix < cxstack_ix)
2688 /* clear off anything above the scope we're re-entering, but
2689 * save the rest until after a possible continue block */
2690 inner = PL_scopestack_ix;
2692 if (PL_scopestack_ix < inner)
2693 leave_scope(PL_scopestack[PL_scopestack_ix]);
2694 PL_curcop = cx->blk_oldcop;
2695 return (cx)->blk_loop.my_op->op_nextop;
2702 register PERL_CONTEXT *cx;
2706 if (PL_op->op_flags & OPf_SPECIAL) {
2707 cxix = dopoptoloop(cxstack_ix);
2709 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2712 cxix = dopoptolabel(cPVOP->op_pv);
2714 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2716 if (cxix < cxstack_ix)
2719 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2720 if (redo_op->op_type == OP_ENTER) {
2721 /* pop one less context to avoid $x being freed in while (my $x..) */
2723 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2724 redo_op = redo_op->op_next;
2728 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2729 LEAVE_SCOPE(oldsave);
2731 PL_curcop = cx->blk_oldcop;
2736 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2740 static const char too_deep[] = "Target of goto is too deeply nested";
2742 PERL_ARGS_ASSERT_DOFINDLABEL;
2745 Perl_croak(aTHX_ too_deep);
2746 if (o->op_type == OP_LEAVE ||
2747 o->op_type == OP_SCOPE ||
2748 o->op_type == OP_LEAVELOOP ||
2749 o->op_type == OP_LEAVESUB ||
2750 o->op_type == OP_LEAVETRY)
2752 *ops++ = cUNOPo->op_first;
2754 Perl_croak(aTHX_ too_deep);
2757 if (o->op_flags & OPf_KIDS) {
2759 /* First try all the kids at this level, since that's likeliest. */
2760 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2761 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2762 const char *kid_label = CopLABEL(kCOP);
2763 if (kid_label && strEQ(kid_label, label))
2767 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2768 if (kid == PL_lastgotoprobe)
2770 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2773 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2774 ops[-1]->op_type == OP_DBSTATE)
2779 if ((o = dofindlabel(kid, label, ops, oplimit)))
2792 register PERL_CONTEXT *cx;
2793 #define GOTO_DEPTH 64
2794 OP *enterops[GOTO_DEPTH];
2795 const char *label = NULL;
2796 const bool do_dump = (PL_op->op_type == OP_DUMP);
2797 static const char must_have_label[] = "goto must have label";
2799 if (PL_op->op_flags & OPf_STACKED) {
2800 SV * const sv = POPs;
2802 /* This egregious kludge implements goto &subroutine */
2803 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2805 register PERL_CONTEXT *cx;
2806 CV *cv = MUTABLE_CV(SvRV(sv));
2813 if (!CvROOT(cv) && !CvXSUB(cv)) {
2814 const GV * const gv = CvGV(cv);
2818 /* autoloaded stub? */
2819 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2821 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2823 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2824 if (autogv && (cv = GvCV(autogv)))
2826 tmpstr = sv_newmortal();
2827 gv_efullname3(tmpstr, gv, NULL);
2828 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2830 DIE(aTHX_ "Goto undefined subroutine");
2833 /* First do some returnish stuff. */
2834 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2836 cxix = dopoptosub(cxstack_ix);
2838 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2839 if (cxix < cxstack_ix)
2843 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2844 if (CxTYPE(cx) == CXt_EVAL) {
2846 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2848 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2850 else if (CxMULTICALL(cx))
2851 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2852 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2853 /* put @_ back onto stack */
2854 AV* av = cx->blk_sub.argarray;
2856 items = AvFILLp(av) + 1;
2857 EXTEND(SP, items+1); /* @_ could have been extended. */
2858 Copy(AvARRAY(av), SP + 1, items, SV*);
2859 SvREFCNT_dec(GvAV(PL_defgv));
2860 GvAV(PL_defgv) = cx->blk_sub.savearray;
2862 /* abandon @_ if it got reified */
2867 av_extend(av, items-1);
2869 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2872 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2873 AV* const av = GvAV(PL_defgv);
2874 items = AvFILLp(av) + 1;
2875 EXTEND(SP, items+1); /* @_ could have been extended. */
2876 Copy(AvARRAY(av), SP + 1, items, SV*);
2880 if (CxTYPE(cx) == CXt_SUB &&
2881 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2882 SvREFCNT_dec(cx->blk_sub.cv);
2883 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2884 LEAVE_SCOPE(oldsave);
2886 /* Now do some callish stuff. */
2888 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2890 OP* const retop = cx->blk_sub.retop;
2891 SV **newsp __attribute__unused__;
2892 I32 gimme __attribute__unused__;
2895 for (index=0; index<items; index++)
2896 sv_2mortal(SP[-index]);
2899 /* XS subs don't have a CxSUB, so pop it */
2900 POPBLOCK(cx, PL_curpm);
2901 /* Push a mark for the start of arglist */
2904 (void)(*CvXSUB(cv))(aTHX_ cv);
2909 AV* const padlist = CvPADLIST(cv);
2910 if (CxTYPE(cx) == CXt_EVAL) {
2911 PL_in_eval = CxOLD_IN_EVAL(cx);
2912 PL_eval_root = cx->blk_eval.old_eval_root;
2913 cx->cx_type = CXt_SUB;
2915 cx->blk_sub.cv = cv;
2916 cx->blk_sub.olddepth = CvDEPTH(cv);
2919 if (CvDEPTH(cv) < 2)
2920 SvREFCNT_inc_simple_void_NN(cv);
2922 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2923 sub_crush_depth(cv);
2924 pad_push(padlist, CvDEPTH(cv));
2926 PL_curcop = cx->blk_oldcop;
2928 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2931 AV *const av = MUTABLE_AV(PAD_SVl(0));
2933 cx->blk_sub.savearray = GvAV(PL_defgv);
2934 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2935 CX_CURPAD_SAVE(cx->blk_sub);
2936 cx->blk_sub.argarray = av;
2938 if (items >= AvMAX(av) + 1) {
2939 SV **ary = AvALLOC(av);
2940 if (AvARRAY(av) != ary) {
2941 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2944 if (items >= AvMAX(av) + 1) {
2945 AvMAX(av) = items - 1;
2946 Renew(ary,items+1,SV*);
2952 Copy(mark,AvARRAY(av),items,SV*);
2953 AvFILLp(av) = items - 1;
2954 assert(!AvREAL(av));
2956 /* transfer 'ownership' of refcnts to new @_ */
2966 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2967 Perl_get_db_sub(aTHX_ NULL, cv);
2969 CV * const gotocv = get_cvs("DB::goto", 0);
2971 PUSHMARK( PL_stack_sp );
2972 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2977 RETURNOP(CvSTART(cv));
2981 label = SvPV_nolen_const(sv);
2982 if (!(do_dump || *label))
2983 DIE(aTHX_ must_have_label);
2986 else if (PL_op->op_flags & OPf_SPECIAL) {
2988 DIE(aTHX_ must_have_label);
2991 label = cPVOP->op_pv;
2995 if (label && *label) {
2996 OP *gotoprobe = NULL;
2997 bool leaving_eval = FALSE;
2998 bool in_block = FALSE;
2999 PERL_CONTEXT *last_eval_cx = NULL;
3003 PL_lastgotoprobe = NULL;
3005 for (ix = cxstack_ix; ix >= 0; ix--) {
3007 switch (CxTYPE(cx)) {
3009 leaving_eval = TRUE;
3010 if (!CxTRYBLOCK(cx)) {
3011 gotoprobe = (last_eval_cx ?
3012 last_eval_cx->blk_eval.old_eval_root :
3017 /* else fall through */
3018 case CXt_LOOP_LAZYIV:
3019 case CXt_LOOP_LAZYSV:
3021 case CXt_LOOP_PLAIN:
3024 gotoprobe = cx->blk_oldcop->op_sibling;
3030 gotoprobe = cx->blk_oldcop->op_sibling;
3033 gotoprobe = PL_main_root;
3036 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3037 gotoprobe = CvROOT(cx->blk_sub.cv);
3043 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3046 DIE(aTHX_ "panic: goto");
3047 gotoprobe = PL_main_root;
3051 retop = dofindlabel(gotoprobe, label,
3052 enterops, enterops + GOTO_DEPTH);
3055 if (gotoprobe->op_sibling &&
3056 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3057 gotoprobe->op_sibling->op_sibling) {
3058 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3059 label, enterops, enterops + GOTO_DEPTH);
3064 PL_lastgotoprobe = gotoprobe;
3067 DIE(aTHX_ "Can't find label %s", label);
3069 /* if we're leaving an eval, check before we pop any frames
3070 that we're not going to punt, otherwise the error
3073 if (leaving_eval && *enterops && enterops[1]) {
3075 for (i = 1; enterops[i]; i++)
3076 if (enterops[i]->op_type == OP_ENTERITER)
3077 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3080 if (*enterops && enterops[1]) {
3081 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3083 deprecate("\"goto\" to jump into a construct");
3086 /* pop unwanted frames */
3088 if (ix < cxstack_ix) {
3095 oldsave = PL_scopestack[PL_scopestack_ix];
3096 LEAVE_SCOPE(oldsave);
3099 /* push wanted frames */
3101 if (*enterops && enterops[1]) {
3102 OP * const oldop = PL_op;
3103 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3104 for (; enterops[ix]; ix++) {
3105 PL_op = enterops[ix];
3106 /* Eventually we may want to stack the needed arguments
3107 * for each op. For now, we punt on the hard ones. */
3108 if (PL_op->op_type == OP_ENTERITER)
3109 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3110 PL_op->op_ppaddr(aTHX);
3118 if (!retop) retop = PL_main_start;
3120 PL_restartop = retop;
3121 PL_do_undump = TRUE;
3125 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3126 PL_do_undump = FALSE;
3141 anum = 0; (void)POPs;
3146 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3148 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3151 PL_exit_flags |= PERL_EXIT_EXPECTED;
3153 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3154 if (anum || !(PL_minus_c && PL_madskills))
3159 PUSHs(&PL_sv_undef);
3166 S_save_lines(pTHX_ AV *array, SV *sv)
3168 const char *s = SvPVX_const(sv);
3169 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3172 PERL_ARGS_ASSERT_SAVE_LINES;
3174 while (s && s < send) {
3176 SV * const tmpstr = newSV_type(SVt_PVMG);
3178 t = (const char *)memchr(s, '\n', send - s);
3184 sv_setpvn(tmpstr, s, t - s);
3185 av_store(array, line++, tmpstr);
3193 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3195 0 is used as continue inside eval,
3197 3 is used for a die caught by an inner eval - continue inner loop
3199 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3200 establish a local jmpenv to handle exception traps.
3205 S_docatch(pTHX_ OP *o)
3209 OP * const oldop = PL_op;
3213 assert(CATCH_GET == TRUE);
3220 assert(cxstack_ix >= 0);
3221 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3222 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3227 /* die caught by an inner eval - continue inner loop */
3228 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3229 PL_restartjmpenv = NULL;
3230 PL_op = PL_restartop;
3246 /* James Bond: Do you expect me to talk?
3247 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3249 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3250 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3252 Currently it is not used outside the core code. Best if it stays that way.
3254 Hence it's now deprecated, and will be removed.
3257 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3258 /* sv Text to convert to OP tree. */
3259 /* startop op_free() this to undo. */
3260 /* code Short string id of the caller. */
3262 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3263 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3266 /* Don't use this. It will go away without warning once the regexp engine is
3267 refactored not to use it. */
3269 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3272 dVAR; dSP; /* Make POPBLOCK work. */
3278 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3279 char *tmpbuf = tbuf;
3282 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3286 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3288 ENTER_with_name("eval");
3289 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3291 /* switch to eval mode */
3293 if (IN_PERL_COMPILETIME) {
3294 SAVECOPSTASH_FREE(&PL_compiling);
3295 CopSTASH_set(&PL_compiling, PL_curstash);
3297 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3298 SV * const sv = sv_newmortal();
3299 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3300 code, (unsigned long)++PL_evalseq,
3301 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3306 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3307 (unsigned long)++PL_evalseq);
3308 SAVECOPFILE_FREE(&PL_compiling);
3309 CopFILE_set(&PL_compiling, tmpbuf+2);
3310 SAVECOPLINE(&PL_compiling);
3311 CopLINE_set(&PL_compiling, 1);
3312 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3313 deleting the eval's FILEGV from the stash before gv_check() runs
3314 (i.e. before run-time proper). To work around the coredump that
3315 ensues, we always turn GvMULTI_on for any globals that were
3316 introduced within evals. See force_ident(). GSAR 96-10-12 */
3317 safestr = savepvn(tmpbuf, len);
3318 SAVEDELETE(PL_defstash, safestr, len);
3320 #ifdef OP_IN_REGISTER
3326 /* we get here either during compilation, or via pp_regcomp at runtime */
3327 runtime = IN_PERL_RUNTIME;
3330 runcv = find_runcv(NULL);
3332 /* At run time, we have to fetch the hints from PL_curcop. */
3333 PL_hints = PL_curcop->cop_hints;
3334 if (PL_hints & HINT_LOCALIZE_HH) {
3335 /* SAVEHINTS created a new HV in PL_hintgv, which we
3337 SvREFCNT_dec(GvHV(PL_hintgv));
3339 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3340 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3342 SAVECOMPILEWARNINGS();
3343 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3344 cophh_free(CopHINTHASH_get(&PL_compiling));
3345 /* XXX Does this need to avoid copying a label? */
3346 PL_compiling.cop_hints_hash
3347 = cophh_copy(PL_curcop->cop_hints_hash);
3351 PL_op->op_type = OP_ENTEREVAL;
3352 PL_op->op_flags = 0; /* Avoid uninit warning. */
3353 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3355 need_catch = CATCH_GET;
3359 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3361 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3362 CATCH_SET(need_catch);
3363 POPBLOCK(cx,PL_curpm);
3366 (*startop)->op_type = OP_NULL;
3367 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3368 /* XXX DAPM do this properly one year */
3369 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3370 LEAVE_with_name("eval");
3371 if (IN_PERL_COMPILETIME)
3372 CopHINTS_set(&PL_compiling, PL_hints);
3373 #ifdef OP_IN_REGISTER
3376 PERL_UNUSED_VAR(newsp);
3377 PERL_UNUSED_VAR(optype);
3379 return PL_eval_start;
3384 =for apidoc find_runcv
3386 Locate the CV corresponding to the currently executing sub or eval.
3387 If db_seqp is non_null, skip CVs that are in the DB package and populate
3388 *db_seqp with the cop sequence number at the point that the DB:: code was
3389 entered. (allows debuggers to eval in the scope of the breakpoint rather
3390 than in the scope of the debugger itself).
3396 Perl_find_runcv(pTHX_ U32 *db_seqp)
3402 *db_seqp = PL_curcop->cop_seq;
3403 for (si = PL_curstackinfo; si; si = si->si_prev) {
3405 for (ix = si->si_cxix; ix >= 0; ix--) {
3406 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3407 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3408 CV * const cv = cx->blk_sub.cv;
3409 /* skip DB:: code */
3410 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3411 *db_seqp = cx->blk_oldcop->cop_seq;
3416 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3424 /* Run yyparse() in a setjmp wrapper. Returns:
3425 * 0: yyparse() successful
3426 * 1: yyparse() failed
3430 S_try_yyparse(pTHX_ int gramtype)
3435 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3439 ret = yyparse(gramtype) ? 1 : 0;
3453 /* Compile a require/do, an eval '', or a /(?{...})/.
3454 * In the last case, startop is non-null, and contains the address of
3455 * a pointer that should be set to the just-compiled code.
3456 * outside is the lexically enclosing CV (if any) that invoked us.
3457 * Returns a bool indicating whether the compile was successful; if so,
3458 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3459 * pushes undef (also croaks if startop != NULL).
3463 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3466 OP * const saveop = PL_op;
3467 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3470 PL_in_eval = (in_require
3471 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3476 SAVESPTR(PL_compcv);
3477 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3478 CvEVAL_on(PL_compcv);
3479 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3480 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3481 cxstack[cxstack_ix].blk_gimme = gimme;
3483 CvOUTSIDE_SEQ(PL_compcv) = seq;
3484 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3486 /* set up a scratch pad */
3488 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3489 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3493 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3495 /* make sure we compile in the right package */
3497 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3498 SAVESPTR(PL_curstash);
3499 PL_curstash = CopSTASH(PL_curcop);
3501 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3502 SAVESPTR(PL_beginav);
3503 PL_beginav = newAV();
3504 SAVEFREESV(PL_beginav);
3505 SAVESPTR(PL_unitcheckav);
3506 PL_unitcheckav = newAV();
3507 SAVEFREESV(PL_unitcheckav);
3510 SAVEBOOL(PL_madskills);
3514 /* try to compile it */
3516 PL_eval_root = NULL;
3517 PL_curcop = &PL_compiling;
3518 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3519 PL_in_eval |= EVAL_KEEPERR;
3523 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3525 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3526 * so honour CATCH_GET and trap it here if necessary */
3528 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3530 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3531 SV **newsp; /* Used by POPBLOCK. */
3533 I32 optype; /* Used by POPEVAL. */
3538 PERL_UNUSED_VAR(newsp);
3539 PERL_UNUSED_VAR(optype);
3541 /* note that if yystatus == 3, then the EVAL CX block has already
3542 * been popped, and various vars restored */
3544 if (yystatus != 3) {
3546 op_free(PL_eval_root);
3547 PL_eval_root = NULL;
3549 SP = PL_stack_base + POPMARK; /* pop original mark */
3551 POPBLOCK(cx,PL_curpm);
3553 namesv = cx->blk_eval.old_namesv;
3557 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3561 /* If cx is still NULL, it means that we didn't go in the
3562 * POPEVAL branch. */
3563 cx = &cxstack[cxstack_ix];
3564 assert(CxTYPE(cx) == CXt_EVAL);
3565 namesv = cx->blk_eval.old_namesv;
3567 (void)hv_store(GvHVn(PL_incgv),
3568 SvPVX_const(namesv),
3569 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3571 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3574 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3577 if (yystatus != 3) {
3578 POPBLOCK(cx,PL_curpm);
3581 Perl_croak(aTHX_ "%"SVf"Compilation failed in regexp",
3584 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3587 if (!*(SvPVx_nolen_const(ERRSV))) {
3588 sv_setpvs(ERRSV, "Compilation error");
3591 PUSHs(&PL_sv_undef);
3595 CopLINE_set(&PL_compiling, 0);
3597 *startop = PL_eval_root;
3599 SAVEFREEOP(PL_eval_root);
3601 DEBUG_x(dump_eval());
3603 /* Register with debugger: */
3604 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3605 CV * const cv = get_cvs("DB::postponed", 0);
3609 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3611 call_sv(MUTABLE_SV(cv), G_DISCARD);
3615 if (PL_unitcheckav) {
3616 OP *es = PL_eval_start;
3617 call_list(PL_scopestack_ix, PL_unitcheckav);
3621 /* compiled okay, so do it */
3623 CvDEPTH(PL_compcv) = 1;
3624 SP = PL_stack_base + POPMARK; /* pop original mark */
3625 PL_op = saveop; /* The caller may need it. */
3626 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3633 S_check_type_and_open(pTHX_ SV *name)
3636 const char *p = SvPV_nolen_const(name);
3637 const int st_rc = PerlLIO_stat(p, &st);
3639 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3641 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3645 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3646 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3648 return PerlIO_open(p, PERL_SCRIPT_MODE);
3652 #ifndef PERL_DISABLE_PMC
3654 S_doopen_pm(pTHX_ SV *name)
3657 const char *p = SvPV_const(name, namelen);
3659 PERL_ARGS_ASSERT_DOOPEN_PM;
3661 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3662 SV *const pmcsv = sv_newmortal();
3665 SvSetSV_nosteal(pmcsv,name);
3666 sv_catpvn(pmcsv, "c", 1);
3668 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3669 return check_type_and_open(pmcsv);
3671 return check_type_and_open(name);
3674 # define doopen_pm(name) check_type_and_open(name)
3675 #endif /* !PERL_DISABLE_PMC */
3680 register PERL_CONTEXT *cx;
3687 int vms_unixname = 0;
3689 const char *tryname = NULL;
3691 const I32 gimme = GIMME_V;
3692 int filter_has_file = 0;
3693 PerlIO *tryrsfp = NULL;
3694 SV *filter_cache = NULL;
3695 SV *filter_state = NULL;
3696 SV *filter_sub = NULL;
3702 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3703 sv = sv_2mortal(new_version(sv));
3704 if (!sv_derived_from(PL_patchlevel, "version"))
3705 upg_version(PL_patchlevel, TRUE);
3706 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3707 if ( vcmp(sv,PL_patchlevel) <= 0 )
3708 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3709 SVfARG(sv_2mortal(vnormal(sv))),
3710 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3714 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3717 SV * const req = SvRV(sv);
3718 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3720 /* get the left hand term */
3721 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3723 first = SvIV(*av_fetch(lav,0,0));
3724 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3725 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3726 || av_len(lav) > 1 /* FP with > 3 digits */
3727 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3729 DIE(aTHX_ "Perl %"SVf" required--this is only "
3731 SVfARG(sv_2mortal(vnormal(req))),
3732 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3735 else { /* probably 'use 5.10' or 'use 5.8' */
3740 second = SvIV(*av_fetch(lav,1,0));
3742 second /= second >= 600 ? 100 : 10;
3743 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3744 (int)first, (int)second);
3745 upg_version(hintsv, TRUE);
3747 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3748 "--this is only %"SVf", stopped",
3749 SVfARG(sv_2mortal(vnormal(req))),
3750 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3751 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3759 name = SvPV_const(sv, len);
3760 if (!(name && len > 0 && *name))
3761 DIE(aTHX_ "Null filename used");
3762 TAINT_PROPER("require");
3766 /* The key in the %ENV hash is in the syntax of file passed as the argument
3767 * usually this is in UNIX format, but sometimes in VMS format, which
3768 * can result in a module being pulled in more than once.
3769 * To prevent this, the key must be stored in UNIX format if the VMS
3770 * name can be translated to UNIX.
3772 if ((unixname = tounixspec(name, NULL)) != NULL) {
3773 unixlen = strlen(unixname);
3779 /* if not VMS or VMS name can not be translated to UNIX, pass it
3782 unixname = (char *) name;
3785 if (PL_op->op_type == OP_REQUIRE) {
3786 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3787 unixname, unixlen, 0);
3789 if (*svp != &PL_sv_undef)
3792 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3793 "Compilation failed in require", unixname);
3797 /* prepare to compile file */
3799 if (path_is_absolute(name)) {
3800 /* At this point, name is SvPVX(sv) */
3802 tryrsfp = doopen_pm(sv);
3805 AV * const ar = GvAVn(PL_incgv);
3811 namesv = newSV_type(SVt_PV);
3812 for (i = 0; i <= AvFILL(ar); i++) {
3813 SV * const dirsv = *av_fetch(ar, i, TRUE);
3815 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3822 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3823 && !sv_isobject(loader))
3825 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3828 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3829 PTR2UV(SvRV(dirsv)), name);
3830 tryname = SvPVX_const(namesv);
3833 ENTER_with_name("call_INC");
3841 if (sv_isobject(loader))
3842 count = call_method("INC", G_ARRAY);
3844 count = call_sv(loader, G_ARRAY);
3854 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3855 && !isGV_with_GP(SvRV(arg))) {
3856 filter_cache = SvRV(arg);
3857 SvREFCNT_inc_simple_void_NN(filter_cache);
3864 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3868 if (isGV_with_GP(arg)) {
3869 IO * const io = GvIO((const GV *)arg);
3874 tryrsfp = IoIFP(io);
3875 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3876 PerlIO_close(IoOFP(io));
3887 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3889 SvREFCNT_inc_simple_void_NN(filter_sub);
3892 filter_state = SP[i];
3893 SvREFCNT_inc_simple_void(filter_state);
3897 if (!tryrsfp && (filter_cache || filter_sub)) {
3898 tryrsfp = PerlIO_open(BIT_BUCKET,
3906 LEAVE_with_name("call_INC");
3908 /* Adjust file name if the hook has set an %INC entry.
3909 This needs to happen after the FREETMPS above. */
3910 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3912 tryname = SvPV_nolen_const(*svp);
3919 filter_has_file = 0;
3921 SvREFCNT_dec(filter_cache);
3922 filter_cache = NULL;
3925 SvREFCNT_dec(filter_state);
3926 filter_state = NULL;
3929 SvREFCNT_dec(filter_sub);
3934 if (!path_is_absolute(name)
3940 dir = SvPV_const(dirsv, dirlen);
3948 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3950 sv_setpv(namesv, unixdir);
3951 sv_catpv(namesv, unixname);
3953 # ifdef __SYMBIAN32__
3954 if (PL_origfilename[0] &&
3955 PL_origfilename[1] == ':' &&
3956 !(dir[0] && dir[1] == ':'))
3957 Perl_sv_setpvf(aTHX_ namesv,
3962 Perl_sv_setpvf(aTHX_ namesv,
3966 /* The equivalent of
3967 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3968 but without the need to parse the format string, or
3969 call strlen on either pointer, and with the correct
3970 allocation up front. */
3972 char *tmp = SvGROW(namesv, dirlen + len + 2);
3974 memcpy(tmp, dir, dirlen);
3977 /* name came from an SV, so it will have a '\0' at the
3978 end that we can copy as part of this memcpy(). */
3979 memcpy(tmp, name, len + 1);
3981 SvCUR_set(namesv, dirlen + len + 1);
3986 TAINT_PROPER("require");
3987 tryname = SvPVX_const(namesv);
3988 tryrsfp = doopen_pm(namesv);
3990 if (tryname[0] == '.' && tryname[1] == '/') {
3992 while (*++tryname == '/');
3996 else if (errno == EMFILE)
3997 /* no point in trying other paths if out of handles */
4006 if (PL_op->op_type == OP_REQUIRE) {
4007 if(errno == EMFILE) {
4008 /* diag_listed_as: Can't locate %s */
4009 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4011 if (namesv) { /* did we lookup @INC? */
4012 AV * const ar = GvAVn(PL_incgv);
4014 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4015 for (i = 0; i <= AvFILL(ar); i++) {
4016 sv_catpvs(inc, " ");
4017 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4020 /* diag_listed_as: Can't locate %s */
4022 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4024 (memEQ(name + len - 2, ".h", 3)
4025 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4026 (memEQ(name + len - 3, ".ph", 4)
4027 ? " (did you run h2ph?)" : ""),
4032 DIE(aTHX_ "Can't locate %s", name);
4038 SETERRNO(0, SS_NORMAL);
4040 /* Assume success here to prevent recursive requirement. */
4041 /* name is never assigned to again, so len is still strlen(name) */
4042 /* Check whether a hook in @INC has already filled %INC */
4044 (void)hv_store(GvHVn(PL_incgv),
4045 unixname, unixlen, newSVpv(tryname,0),0);
4047 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4049 (void)hv_store(GvHVn(PL_incgv),
4050 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4053 ENTER_with_name("eval");
4055 SAVECOPFILE_FREE(&PL_compiling);
4056 CopFILE_set(&PL_compiling, tryname);
4057 lex_start(NULL, tryrsfp, 0);
4061 hv_clear(GvHV(PL_hintgv));
4063 SAVECOMPILEWARNINGS();
4064 if (PL_dowarn & G_WARN_ALL_ON)
4065 PL_compiling.cop_warnings = pWARN_ALL ;
4066 else if (PL_dowarn & G_WARN_ALL_OFF)
4067 PL_compiling.cop_warnings = pWARN_NONE ;
4069 PL_compiling.cop_warnings = pWARN_STD ;
4071 if (filter_sub || filter_cache) {
4072 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4073 than hanging another SV from it. In turn, filter_add() optionally
4074 takes the SV to use as the filter (or creates a new SV if passed
4075 NULL), so simply pass in whatever value filter_cache has. */
4076 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4077 IoLINES(datasv) = filter_has_file;
4078 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4079 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4082 /* switch to eval mode */
4083 PUSHBLOCK(cx, CXt_EVAL, SP);
4085 cx->blk_eval.retop = PL_op->op_next;
4087 SAVECOPLINE(&PL_compiling);
4088 CopLINE_set(&PL_compiling, 0);
4092 /* Store and reset encoding. */
4093 encoding = PL_encoding;
4096 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4097 op = DOCATCH(PL_eval_start);
4099 op = PL_op->op_next;
4101 /* Restore encoding. */
4102 PL_encoding = encoding;
4107 /* This is a op added to hold the hints hash for
4108 pp_entereval. The hash can be modified by the code
4109 being eval'ed, so we return a copy instead. */
4115 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4123 register PERL_CONTEXT *cx;
4125 const I32 gimme = GIMME_V;
4126 const U32 was = PL_breakable_sub_gen;
4127 char tbuf[TYPE_DIGITS(long) + 12];
4128 bool saved_delete = FALSE;
4129 char *tmpbuf = tbuf;
4133 HV *saved_hh = NULL;
4135 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4136 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4140 /* make sure we've got a plain PV (no overload etc) before testing
4141 * for taint. Making a copy here is probably overkill, but better
4142 * safe than sorry */
4144 const char * const p = SvPV_const(sv, len);
4146 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4149 TAINT_IF(SvTAINTED(sv));
4150 TAINT_PROPER("eval");
4152 ENTER_with_name("eval");
4153 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4156 /* switch to eval mode */
4158 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4159 SV * const temp_sv = sv_newmortal();
4160 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4161 (unsigned long)++PL_evalseq,
4162 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4163 tmpbuf = SvPVX(temp_sv);
4164 len = SvCUR(temp_sv);
4167 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4168 SAVECOPFILE_FREE(&PL_compiling);
4169 CopFILE_set(&PL_compiling, tmpbuf+2);
4170 SAVECOPLINE(&PL_compiling);
4171 CopLINE_set(&PL_compiling, 1);
4172 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4173 deleting the eval's FILEGV from the stash before gv_check() runs
4174 (i.e. before run-time proper). To work around the coredump that
4175 ensues, we always turn GvMULTI_on for any globals that were
4176 introduced within evals. See force_ident(). GSAR 96-10-12 */
4178 PL_hints = PL_op->op_targ;
4180 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4181 SvREFCNT_dec(GvHV(PL_hintgv));
4182 GvHV(PL_hintgv) = saved_hh;
4184 SAVECOMPILEWARNINGS();
4185 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4186 cophh_free(CopHINTHASH_get(&PL_compiling));
4187 if (Perl_cop_fetch_label(aTHX_ PL_curcop, NULL, NULL)) {
4188 /* The label, if present, is the first entry on the chain. So rather
4189 than writing a blank label in front of it (which involves an
4190 allocation), just use the next entry in the chain. */
4191 PL_compiling.cop_hints_hash
4192 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4193 /* Check the assumption that this removed the label. */
4194 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4197 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4198 /* special case: an eval '' executed within the DB package gets lexically
4199 * placed in the first non-DB CV rather than the current CV - this
4200 * allows the debugger to execute code, find lexicals etc, in the
4201 * scope of the code being debugged. Passing &seq gets find_runcv
4202 * to do the dirty work for us */
4203 runcv = find_runcv(&seq);
4205 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4207 cx->blk_eval.retop = PL_op->op_next;
4209 /* prepare to compile string */
4211 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4212 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4214 char *const safestr = savepvn(tmpbuf, len);
4215 SAVEDELETE(PL_defstash, safestr, len);
4216 saved_delete = TRUE;
4221 if (doeval(gimme, NULL, runcv, seq)) {
4222 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4223 ? (PERLDB_LINE || PERLDB_SAVESRC)
4224 : PERLDB_SAVESRC_NOSUBS) {
4225 /* Retain the filegv we created. */
4226 } else if (!saved_delete) {
4227 char *const safestr = savepvn(tmpbuf, len);
4228 SAVEDELETE(PL_defstash, safestr, len);
4230 return DOCATCH(PL_eval_start);
4232 /* We have already left the scope set up earlier thanks to the LEAVE
4234 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4235 ? (PERLDB_LINE || PERLDB_SAVESRC)
4236 : PERLDB_SAVESRC_INVALID) {
4237 /* Retain the filegv we created. */
4238 } else if (!saved_delete) {
4239 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4241 return PL_op->op_next;
4251 register PERL_CONTEXT *cx;
4253 const U8 save_flags = PL_op -> op_flags;
4260 namesv = cx->blk_eval.old_namesv;
4261 retop = cx->blk_eval.retop;
4264 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4266 PL_curpm = newpm; /* Don't pop $1 et al till now */
4269 assert(CvDEPTH(PL_compcv) == 1);
4271 CvDEPTH(PL_compcv) = 0;
4273 if (optype == OP_REQUIRE &&
4274 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4276 /* Unassume the success we assumed earlier. */
4277 (void)hv_delete(GvHVn(PL_incgv),
4278 SvPVX_const(namesv),
4279 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4281 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4283 /* die_unwind() did LEAVE, or we won't be here */
4286 LEAVE_with_name("eval");
4287 if (!(save_flags & OPf_SPECIAL)) {
4295 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4296 close to the related Perl_create_eval_scope. */
4298 Perl_delete_eval_scope(pTHX)
4303 register PERL_CONTEXT *cx;
4309 LEAVE_with_name("eval_scope");
4310 PERL_UNUSED_VAR(newsp);
4311 PERL_UNUSED_VAR(gimme);
4312 PERL_UNUSED_VAR(optype);
4315 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4316 also needed by Perl_fold_constants. */
4318 Perl_create_eval_scope(pTHX_ U32 flags)
4321 const I32 gimme = GIMME_V;
4323 ENTER_with_name("eval_scope");
4326 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4329 PL_in_eval = EVAL_INEVAL;
4330 if (flags & G_KEEPERR)
4331 PL_in_eval |= EVAL_KEEPERR;
4334 if (flags & G_FAKINGEVAL) {
4335 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4343 PERL_CONTEXT * const cx = create_eval_scope(0);
4344 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4345 return DOCATCH(PL_op->op_next);
4354 register PERL_CONTEXT *cx;
4360 PERL_UNUSED_VAR(optype);
4363 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4364 PL_curpm = newpm; /* Don't pop $1 et al till now */
4366 LEAVE_with_name("eval_scope");
4374 register PERL_CONTEXT *cx;
4375 const I32 gimme = GIMME_V;
4377 ENTER_with_name("given");
4380 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4381 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4383 PUSHBLOCK(cx, CXt_GIVEN, SP);
4392 register PERL_CONTEXT *cx;
4396 PERL_UNUSED_CONTEXT;
4399 assert(CxTYPE(cx) == CXt_GIVEN);
4402 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4403 PL_curpm = newpm; /* Don't pop $1 et al till now */
4405 LEAVE_with_name("given");
4409 /* Helper routines used by pp_smartmatch */
4411 S_make_matcher(pTHX_ REGEXP *re)
4414 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4416 PERL_ARGS_ASSERT_MAKE_MATCHER;
4418 PM_SETRE(matcher, ReREFCNT_inc(re));
4420 SAVEFREEOP((OP *) matcher);
4421 ENTER_with_name("matcher"); SAVETMPS;
4427 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4432 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4434 PL_op = (OP *) matcher;
4437 (void) Perl_pp_match(aTHX);
4439 return (SvTRUEx(POPs));
4443 S_destroy_matcher(pTHX_ PMOP *matcher)
4447 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4448 PERL_UNUSED_ARG(matcher);
4451 LEAVE_with_name("matcher");
4454 /* Do a smart match */
4457 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4458 return do_smartmatch(NULL, NULL, 0);
4461 /* This version of do_smartmatch() implements the
4462 * table of smart matches that is found in perlsyn.
4465 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4470 bool object_on_left = FALSE;
4471 SV *e = TOPs; /* e is for 'expression' */
4472 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4474 /* Take care only to invoke mg_get() once for each argument.
4475 * Currently we do this by copying the SV if it's magical. */
4477 if (!copied && SvGMAGICAL(d))
4478 d = sv_mortalcopy(d);
4485 e = sv_mortalcopy(e);
4487 /* First of all, handle overload magic of the rightmost argument */
4490 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4491 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4493 tmpsv = amagic_call(d, e, smart_amg, 0);
4500 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4503 SP -= 2; /* Pop the values */
4508 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4515 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4516 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4517 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4519 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4520 object_on_left = TRUE;
4523 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4525 if (object_on_left) {
4526 goto sm_any_sub; /* Treat objects like scalars */
4528 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4529 /* Test sub truth for each key */
4531 bool andedresults = TRUE;
4532 HV *hv = (HV*) SvRV(d);
4533 I32 numkeys = hv_iterinit(hv);
4534 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4537 while ( (he = hv_iternext(hv)) ) {
4538 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4539 ENTER_with_name("smartmatch_hash_key_test");
4542 PUSHs(hv_iterkeysv(he));
4544 c = call_sv(e, G_SCALAR);
4547 andedresults = FALSE;
4549 andedresults = SvTRUEx(POPs) && andedresults;
4551 LEAVE_with_name("smartmatch_hash_key_test");
4558 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4559 /* Test sub truth for each element */
4561 bool andedresults = TRUE;
4562 AV *av = (AV*) SvRV(d);
4563 const I32 len = av_len(av);
4564 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4567 for (i = 0; i <= len; ++i) {
4568 SV * const * const svp = av_fetch(av, i, FALSE);
4569 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4570 ENTER_with_name("smartmatch_array_elem_test");
4576 c = call_sv(e, G_SCALAR);
4579 andedresults = FALSE;
4581 andedresults = SvTRUEx(POPs) && andedresults;
4583 LEAVE_with_name("smartmatch_array_elem_test");
4592 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4593 ENTER_with_name("smartmatch_coderef");
4598 c = call_sv(e, G_SCALAR);
4602 else if (SvTEMP(TOPs))
4603 SvREFCNT_inc_void(TOPs);
4605 LEAVE_with_name("smartmatch_coderef");
4610 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4611 if (object_on_left) {
4612 goto sm_any_hash; /* Treat objects like scalars */
4614 else if (!SvOK(d)) {
4615 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4618 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4619 /* Check that the key-sets are identical */
4621 HV *other_hv = MUTABLE_HV(SvRV(d));
4623 bool other_tied = FALSE;
4624 U32 this_key_count = 0,
4625 other_key_count = 0;
4626 HV *hv = MUTABLE_HV(SvRV(e));
4628 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4629 /* Tied hashes don't know how many keys they have. */
4630 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4633 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4634 HV * const temp = other_hv;
4639 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4642 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4645 /* The hashes have the same number of keys, so it suffices
4646 to check that one is a subset of the other. */
4647 (void) hv_iterinit(hv);
4648 while ( (he = hv_iternext(hv)) ) {
4649 SV *key = hv_iterkeysv(he);
4651 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4654 if(!hv_exists_ent(other_hv, key, 0)) {
4655 (void) hv_iterinit(hv); /* reset iterator */
4661 (void) hv_iterinit(other_hv);
4662 while ( hv_iternext(other_hv) )
4666 other_key_count = HvUSEDKEYS(other_hv);
4668 if (this_key_count != other_key_count)
4673 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4674 AV * const other_av = MUTABLE_AV(SvRV(d));
4675 const I32 other_len = av_len(other_av) + 1;
4677 HV *hv = MUTABLE_HV(SvRV(e));
4679 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4680 for (i = 0; i < other_len; ++i) {
4681 SV ** const svp = av_fetch(other_av, i, FALSE);
4682 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4683 if (svp) { /* ??? When can this not happen? */
4684 if (hv_exists_ent(hv, *svp, 0))
4690 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4691 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4694 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4696 HV *hv = MUTABLE_HV(SvRV(e));
4698 (void) hv_iterinit(hv);
4699 while ( (he = hv_iternext(hv)) ) {
4700 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4701 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4702 (void) hv_iterinit(hv);
4703 destroy_matcher(matcher);
4707 destroy_matcher(matcher);
4713 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4714 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4721 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4722 if (object_on_left) {
4723 goto sm_any_array; /* Treat objects like scalars */
4725 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4726 AV * const other_av = MUTABLE_AV(SvRV(e));
4727 const I32 other_len = av_len(other_av) + 1;
4730 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4731 for (i = 0; i < other_len; ++i) {
4732 SV ** const svp = av_fetch(other_av, i, FALSE);
4734 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4735 if (svp) { /* ??? When can this not happen? */
4736 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4742 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4743 AV *other_av = MUTABLE_AV(SvRV(d));
4744 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4745 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4749 const I32 other_len = av_len(other_av);
4751 if (NULL == seen_this) {
4752 seen_this = newHV();
4753 (void) sv_2mortal(MUTABLE_SV(seen_this));
4755 if (NULL == seen_other) {
4756 seen_other = newHV();
4757 (void) sv_2mortal(MUTABLE_SV(seen_other));
4759 for(i = 0; i <= other_len; ++i) {
4760 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4761 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4763 if (!this_elem || !other_elem) {
4764 if ((this_elem && SvOK(*this_elem))
4765 || (other_elem && SvOK(*other_elem)))
4768 else if (hv_exists_ent(seen_this,
4769 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4770 hv_exists_ent(seen_other,
4771 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4773 if (*this_elem != *other_elem)
4777 (void)hv_store_ent(seen_this,
4778 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4780 (void)hv_store_ent(seen_other,
4781 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4787 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4788 (void) do_smartmatch(seen_this, seen_other, 0);
4790 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4799 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4800 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4803 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4804 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4807 for(i = 0; i <= this_len; ++i) {
4808 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4809 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4810 if (svp && matcher_matches_sv(matcher, *svp)) {
4811 destroy_matcher(matcher);
4815 destroy_matcher(matcher);
4819 else if (!SvOK(d)) {
4820 /* undef ~~ array */
4821 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4824 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4825 for (i = 0; i <= this_len; ++i) {
4826 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4827 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4828 if (!svp || !SvOK(*svp))
4837 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4839 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4840 for (i = 0; i <= this_len; ++i) {
4841 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4848 /* infinite recursion isn't supposed to happen here */
4849 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4850 (void) do_smartmatch(NULL, NULL, 1);
4852 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4861 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4862 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4863 SV *t = d; d = e; e = t;
4864 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4867 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4868 SV *t = d; d = e; e = t;
4869 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4870 goto sm_regex_array;
4873 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4875 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4877 PUSHs(matcher_matches_sv(matcher, d)
4880 destroy_matcher(matcher);
4885 /* See if there is overload magic on left */
4886 else if (object_on_left && SvAMAGIC(d)) {
4888 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4889 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4892 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4900 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4903 else if (!SvOK(d)) {
4904 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4905 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4910 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4911 DEBUG_M(if (SvNIOK(e))
4912 Perl_deb(aTHX_ " applying rule Any-Num\n");
4914 Perl_deb(aTHX_ " applying rule Num-numish\n");
4916 /* numeric comparison */
4919 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4920 (void) Perl_pp_i_eq(aTHX);
4922 (void) Perl_pp_eq(aTHX);
4930 /* As a last resort, use string comparison */
4931 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4934 return Perl_pp_seq(aTHX);
4940 register PERL_CONTEXT *cx;
4941 const I32 gimme = GIMME_V;
4943 /* This is essentially an optimization: if the match
4944 fails, we don't want to push a context and then
4945 pop it again right away, so we skip straight
4946 to the op that follows the leavewhen.
4947 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4949 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4950 RETURNOP(cLOGOP->op_other->op_next);
4952 ENTER_with_name("when");
4955 PUSHBLOCK(cx, CXt_WHEN, SP);
4965 register PERL_CONTEXT *cx;
4970 cxix = dopoptogiven(cxstack_ix);
4972 DIE(aTHX_ "Can't use when() outside a topicalizer");
4975 assert(CxTYPE(cx) == CXt_WHEN);
4978 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4979 PL_curpm = newpm; /* pop $1 et al */
4981 LEAVE_with_name("when");
4983 if (cxix < cxstack_ix)
4986 cx = &cxstack[cxix];
4988 if (CxFOREACH(cx)) {
4989 /* clear off anything above the scope we're re-entering */
4990 I32 inner = PL_scopestack_ix;
4993 if (PL_scopestack_ix < inner)
4994 leave_scope(PL_scopestack[PL_scopestack_ix]);
4995 PL_curcop = cx->blk_oldcop;
4997 return cx->blk_loop.my_op->op_nextop;
5000 RETURNOP(cx->blk_givwhen.leave_op);
5007 register PERL_CONTEXT *cx;
5012 PERL_UNUSED_VAR(gimme);
5014 cxix = dopoptowhen(cxstack_ix);
5016 DIE(aTHX_ "Can't \"continue\" outside a when block");
5018 if (cxix < cxstack_ix)
5022 assert(CxTYPE(cx) == CXt_WHEN);
5025 PL_curpm = newpm; /* pop $1 et al */
5027 LEAVE_with_name("when");
5028 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5035 register PERL_CONTEXT *cx;
5037 cxix = dopoptogiven(cxstack_ix);
5039 DIE(aTHX_ "Can't \"break\" outside a given block");
5041 cx = &cxstack[cxix];
5043 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5045 if (cxix < cxstack_ix)
5048 /* Restore the sp at the time we entered the given block */
5051 return cx->blk_givwhen.leave_op;
5055 S_doparseform(pTHX_ SV *sv)
5058 register char *s = SvPV(sv, len);
5059 register char *send;
5060 register char *base = NULL; /* start of current field */
5061 register I32 skipspaces = 0; /* number of contiguous spaces seen */
5062 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5063 bool repeat = FALSE; /* ~~ seen on this line */
5064 bool postspace = FALSE; /* a text field may need right padding */
5067 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5069 bool ischop; /* it's a ^ rather than a @ */
5070 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5071 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5075 PERL_ARGS_ASSERT_DOPARSEFORM;
5078 Perl_croak(aTHX_ "Null picture in formline");
5080 if (SvTYPE(sv) >= SVt_PVMG) {
5081 /* This might, of course, still return NULL. */
5082 mg = mg_find(sv, PERL_MAGIC_fm);
5084 sv_upgrade(sv, SVt_PVMG);
5088 /* still the same as previously-compiled string? */
5089 SV *old = mg->mg_obj;
5090 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5091 && len == SvCUR(old)
5092 && strnEQ(SvPVX(old), SvPVX(sv), len)
5094 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5098 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5099 Safefree(mg->mg_ptr);
5105 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5106 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5109 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5110 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5114 /* estimate the buffer size needed */
5115 for (base = s; s <= send; s++) {
5116 if (*s == '\n' || *s == '@' || *s == '^')
5122 Newx(fops, maxops, U32);
5127 *fpc++ = FF_LINEMARK;
5128 noblank = repeat = FALSE;
5146 case ' ': case '\t':
5153 } /* else FALL THROUGH */
5161 *fpc++ = FF_LITERAL;
5169 *fpc++ = (U32)skipspaces;
5173 *fpc++ = FF_NEWLINE;
5177 arg = fpc - linepc + 1;
5184 *fpc++ = FF_LINEMARK;
5185 noblank = repeat = FALSE;
5194 ischop = s[-1] == '^';