3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
72 /* XXXX Should store the old value to allow for tie/overload - and
73 restore in regcomp, where marked with XXXX. */
83 register PMOP *pm = (PMOP*)cLOGOP->op_other;
87 /* prevent recompiling under /o and ithreads. */
88 #if defined(USE_ITHREADS)
89 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
90 if (PL_op->op_flags & OPf_STACKED) {
100 #define tryAMAGICregexp(rx) \
103 if (SvROK(rx) && SvAMAGIC(rx)) { \
104 SV *sv = AMG_CALLunary(rx, regexp_amg); \
108 if (SvTYPE(sv) != SVt_REGEXP) \
109 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
116 if (PL_op->op_flags & OPf_STACKED) {
117 /* multiple args; concatenate them */
119 tmpstr = PAD_SV(ARGTARG);
120 sv_setpvs(tmpstr, "");
121 while (++MARK <= SP) {
125 tryAMAGICregexp(msv);
127 if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
128 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
130 sv_setsv(tmpstr, sv);
133 sv_catsv_nomg(tmpstr, msv);
140 tryAMAGICregexp(tmpstr);
143 #undef tryAMAGICregexp
146 SV * const sv = SvRV(tmpstr);
147 if (SvTYPE(sv) == SVt_REGEXP)
150 else if (SvTYPE(tmpstr) == SVt_REGEXP)
151 re = (REGEXP*) tmpstr;
154 /* The match's LHS's get-magic might need to access this op's reg-
155 exp (as is sometimes the case with $'; see bug 70764). So we
156 must call get-magic now before we replace the regexp. Hopeful-
157 ly this hack can be replaced with the approach described at
158 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03
159 /msg122415.html some day. */
160 if(pm->op_type == OP_MATCH) {
162 const bool was_tainted = PL_tainted;
163 if (pm->op_flags & OPf_STACKED)
165 else if (pm->op_private & OPpTARGET_MY)
166 lhs = PAD_SV(pm->op_targ);
169 /* Restore the previous value of PL_tainted (which may have been
170 modified by get-magic), to avoid incorrectly setting the
171 RXf_TAINTED flag further down. */
172 PL_tainted = was_tainted;
175 re = reg_temp_copy(NULL, re);
176 ReREFCNT_dec(PM_GETRE(pm));
181 const char *t = SvOK(tmpstr) ? SvPV_nomg_const(tmpstr, len) : "";
184 assert (re != (REGEXP*) &PL_sv_undef);
186 /* Check against the last compiled regexp. */
187 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
188 memNE(RX_PRECOMP(re), t, len))
190 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
191 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
195 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
197 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
199 } else if (PL_curcop->cop_hints_hash) {
200 SV *ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0);
201 if (ptr && SvIOK(ptr) && SvIV(ptr))
202 eng = INT2PTR(regexp_engine*,SvIV(ptr));
205 if (PL_op->op_flags & OPf_SPECIAL)
206 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
208 if (DO_UTF8(tmpstr)) {
209 assert (SvUTF8(tmpstr));
210 } else if (SvUTF8(tmpstr)) {
211 /* Not doing UTF-8, despite what the SV says. Is this only if
212 we're trapped in use 'bytes'? */
213 /* Make a copy of the octet sequence, but without the flag on,
214 as the compiler now honours the SvUTF8 flag on tmpstr. */
216 const char *const p = SvPV(tmpstr, len);
217 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
219 else if (SvAMAGIC(tmpstr)) {
220 /* make a copy to avoid extra stringifies */
221 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
224 /* If it is gmagical, create a mortal copy, but without calling
225 get-magic, as we have already done that. */
226 if(SvGMAGICAL(tmpstr)) {
227 SV *mortalcopy = sv_newmortal();
228 sv_setsv_flags(mortalcopy, tmpstr, 0);
233 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
235 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
237 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
238 inside tie/overload accessors. */
244 #ifndef INCOMPLETE_TAINTS
247 SvTAINTED_on((SV*)re);
248 RX_EXTFLAGS(re) |= RXf_TAINTED;
253 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
257 #if !defined(USE_ITHREADS)
258 /* can't change the optree at runtime either */
259 /* PMf_KEEP is handled differently under threads to avoid these problems */
260 if (pm->op_pmflags & PMf_KEEP) {
261 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
262 cLOGOP->op_first->op_next = PL_op->op_next;
272 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
273 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
274 register SV * const dstr = cx->sb_dstr;
275 register char *s = cx->sb_s;
276 register char *m = cx->sb_m;
277 char *orig = cx->sb_orig;
278 register REGEXP * const rx = cx->sb_rx;
280 REGEXP *old = PM_GETRE(pm);
287 PM_SETRE(pm,ReREFCNT_inc(rx));
290 rxres_restore(&cx->sb_rxres, rx);
291 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
293 if (cx->sb_iters++) {
294 const I32 saviters = cx->sb_iters;
295 if (cx->sb_iters > cx->sb_maxiters)
296 DIE(aTHX_ "Substitution loop");
298 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
300 /* See "how taint works" above pp_subst() */
302 cx->sb_rxtainted |= SUBST_TAINT_REPL;
303 sv_catsv_nomg(dstr, POPs);
304 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
308 /* I believe that we can't set REXEC_SCREAM here if
309 SvSCREAM(cx->sb_targ) is true because SvPVX(cx->sb_targ) isn't always
310 equal to s. [See the comment before Perl_re_intuit_start(), which is
311 called from Perl_regexec_flags(), which says that it should be when
312 SvSCREAM() is true.] s, cx->sb_strend and orig will be consistent
313 with SvPVX(cx->sb_targ), as substconst doesn't modify cx->sb_targ
315 if (CxONCE(cx) || s < orig ||
316 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
317 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
318 ((cx->sb_rflags & REXEC_COPY_STR)
319 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
320 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
322 SV *targ = cx->sb_targ;
324 assert(cx->sb_strend >= s);
325 if(cx->sb_strend > s) {
326 if (DO_UTF8(dstr) && !SvUTF8(targ))
327 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
329 sv_catpvn(dstr, s, cx->sb_strend - s);
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if (pm->op_pmflags & PMf_NONDESTRUCT) {
336 /* From here on down we're using the copy, and leaving the
337 original untouched. */
341 #ifdef PERL_OLD_COPY_ON_WRITE
343 sv_force_normal_flags(targ, SV_COW_DROP_PV);
349 SvPV_set(targ, SvPVX(dstr));
350 SvCUR_set(targ, SvCUR(dstr));
351 SvLEN_set(targ, SvLEN(dstr));
354 SvPV_set(dstr, NULL);
356 mPUSHi(saviters - 1);
358 (void)SvPOK_only_UTF8(targ);
361 /* update the taint state of various various variables in
362 * preparation for final exit.
363 * See "how taint works" above pp_subst() */
365 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
366 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
367 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
369 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
371 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
372 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
374 SvTAINTED_on(TOPs); /* taint return value */
375 /* needed for mg_set below */
376 PL_tainted = cBOOL(cx->sb_rxtainted &
377 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
380 /* PL_tainted must be correctly set for this mg_set */
383 LEAVE_SCOPE(cx->sb_oldsave);
385 RETURNOP(pm->op_next);
388 cx->sb_iters = saviters;
390 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
393 cx->sb_orig = orig = RX_SUBBEG(rx);
395 cx->sb_strend = s + (cx->sb_strend - m);
397 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
399 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
400 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
402 sv_catpvn(dstr, s, m-s);
404 cx->sb_s = RX_OFFS(rx)[0].end + orig;
405 { /* Update the pos() information. */
407 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
409 SvUPGRADE(sv, SVt_PVMG);
410 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
411 #ifdef PERL_OLD_COPY_ON_WRITE
413 sv_force_normal_flags(sv, 0);
415 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
418 mg->mg_len = m - orig;
421 (void)ReREFCNT_inc(rx);
422 /* update the taint state of various various variables in preparation
423 * for calling the code block.
424 * See "how taint works" above pp_subst() */
426 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
427 cx->sb_rxtainted |= SUBST_TAINT_PAT;
429 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
430 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
431 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
433 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
435 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
436 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
437 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
438 ? cx->sb_dstr : cx->sb_targ);
441 rxres_save(&cx->sb_rxres, rx);
443 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
447 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
452 PERL_ARGS_ASSERT_RXRES_SAVE;
455 if (!p || p[1] < RX_NPARENS(rx)) {
456 #ifdef PERL_OLD_COPY_ON_WRITE
457 i = 7 + RX_NPARENS(rx) * 2;
459 i = 6 + RX_NPARENS(rx) * 2;
468 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
469 RX_MATCH_COPIED_off(rx);
471 #ifdef PERL_OLD_COPY_ON_WRITE
472 *p++ = PTR2UV(RX_SAVED_COPY(rx));
473 RX_SAVED_COPY(rx) = NULL;
476 *p++ = RX_NPARENS(rx);
478 *p++ = PTR2UV(RX_SUBBEG(rx));
479 *p++ = (UV)RX_SUBLEN(rx);
480 for (i = 0; i <= RX_NPARENS(rx); ++i) {
481 *p++ = (UV)RX_OFFS(rx)[i].start;
482 *p++ = (UV)RX_OFFS(rx)[i].end;
487 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
492 PERL_ARGS_ASSERT_RXRES_RESTORE;
495 RX_MATCH_COPY_FREE(rx);
496 RX_MATCH_COPIED_set(rx, *p);
499 #ifdef PERL_OLD_COPY_ON_WRITE
500 if (RX_SAVED_COPY(rx))
501 SvREFCNT_dec (RX_SAVED_COPY(rx));
502 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
506 RX_NPARENS(rx) = *p++;
508 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
509 RX_SUBLEN(rx) = (I32)(*p++);
510 for (i = 0; i <= RX_NPARENS(rx); ++i) {
511 RX_OFFS(rx)[i].start = (I32)(*p++);
512 RX_OFFS(rx)[i].end = (I32)(*p++);
517 S_rxres_free(pTHX_ void **rsp)
519 UV * const p = (UV*)*rsp;
521 PERL_ARGS_ASSERT_RXRES_FREE;
526 void *tmp = INT2PTR(char*,*p);
529 PoisonFree(*p, 1, sizeof(*p));
531 Safefree(INT2PTR(char*,*p));
533 #ifdef PERL_OLD_COPY_ON_WRITE
535 SvREFCNT_dec (INT2PTR(SV*,p[1]));
543 #define FORM_NUM_BLANK (1<<30)
544 #define FORM_NUM_POINT (1<<29)
548 dVAR; dSP; dMARK; dORIGMARK;
549 register SV * const tmpForm = *++MARK;
550 SV *formsv; /* contains text of original format */
551 register U32 *fpc; /* format ops program counter */
552 register char *t; /* current append position in target string */
553 const char *f; /* current position in format string */
555 register SV *sv = NULL; /* current item */
556 const char *item = NULL;/* string value of current item */
557 I32 itemsize = 0; /* length of current item, possibly truncated */
558 I32 fieldsize = 0; /* width of current field */
559 I32 lines = 0; /* number of lines that have been output */
560 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
561 const char *chophere = NULL; /* where to chop current item */
562 STRLEN linemark = 0; /* pos of start of line in output */
564 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
566 STRLEN linemax; /* estimate of output size in bytes */
567 bool item_is_utf8 = FALSE;
568 bool targ_is_utf8 = FALSE;
571 U8 *source; /* source of bytes to append */
572 STRLEN to_copy; /* how may bytes to append */
573 char trans; /* what chars to translate */
575 mg = doparseform(tmpForm);
577 fpc = (U32*)mg->mg_ptr;
578 /* the actual string the format was compiled from.
579 * with overload etc, this may not match tmpForm */
583 SvPV_force(PL_formtarget, len);
584 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
585 SvTAINTED_on(PL_formtarget);
586 if (DO_UTF8(PL_formtarget))
588 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
589 t = SvGROW(PL_formtarget, len + linemax + 1);
590 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
592 f = SvPV_const(formsv, len);
596 const char *name = "???";
599 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
600 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
601 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
602 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
603 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
605 case FF_CHECKNL: name = "CHECKNL"; break;
606 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
607 case FF_SPACE: name = "SPACE"; break;
608 case FF_HALFSPACE: name = "HALFSPACE"; break;
609 case FF_ITEM: name = "ITEM"; break;
610 case FF_CHOP: name = "CHOP"; break;
611 case FF_LINEGLOB: name = "LINEGLOB"; break;
612 case FF_NEWLINE: name = "NEWLINE"; break;
613 case FF_MORE: name = "MORE"; break;
614 case FF_LINEMARK: name = "LINEMARK"; break;
615 case FF_END: name = "END"; break;
616 case FF_0DECIMAL: name = "0DECIMAL"; break;
617 case FF_LINESNGL: name = "LINESNGL"; break;
620 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
622 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
626 linemark = t - SvPVX(PL_formtarget);
636 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
652 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
655 SvTAINTED_on(PL_formtarget);
661 const char *s = item = SvPV_const(sv, len);
664 itemsize = sv_len_utf8(sv);
665 if (itemsize != (I32)len) {
667 if (itemsize > fieldsize) {
668 itemsize = fieldsize;
669 itembytes = itemsize;
670 sv_pos_u2b(sv, &itembytes, 0);
674 send = chophere = s + itembytes;
684 sv_pos_b2u(sv, &itemsize);
688 item_is_utf8 = FALSE;
689 if (itemsize > fieldsize)
690 itemsize = fieldsize;
691 send = chophere = s + itemsize;
705 const char *s = item = SvPV_const(sv, len);
708 itemsize = sv_len_utf8(sv);
709 if (itemsize != (I32)len) {
711 if (itemsize <= fieldsize) {
712 const char *send = chophere = s + itemsize;
725 itemsize = fieldsize;
726 itembytes = itemsize;
727 sv_pos_u2b(sv, &itembytes, 0);
728 send = chophere = s + itembytes;
729 while (s < send || (s == send && isSPACE(*s))) {
739 if (strchr(PL_chopset, *s))
744 itemsize = chophere - item;
745 sv_pos_b2u(sv, &itemsize);
751 item_is_utf8 = FALSE;
752 if (itemsize <= fieldsize) {
753 const char *const send = chophere = s + itemsize;
766 itemsize = fieldsize;
767 send = chophere = s + itemsize;
768 while (s < send || (s == send && isSPACE(*s))) {
778 if (strchr(PL_chopset, *s))
783 itemsize = chophere - item;
789 arg = fieldsize - itemsize;
798 arg = fieldsize - itemsize;
812 /* convert to_copy from chars to bytes */
816 to_copy = s - source;
822 const char *s = chophere;
836 const bool oneline = fpc[-1] == FF_LINESNGL;
837 const char *s = item = SvPV_const(sv, len);
838 const char *const send = s + len;
840 item_is_utf8 = DO_UTF8(sv);
851 to_copy = s - SvPVX_const(sv) - 1;
865 /* append to_copy bytes from source to PL_formstring.
866 * item_is_utf8 implies source is utf8.
867 * if trans, translate certain characters during the copy */
872 SvCUR_set(PL_formtarget,
873 t - SvPVX_const(PL_formtarget));
875 if (targ_is_utf8 && !item_is_utf8) {
876 source = tmp = bytes_to_utf8(source, &to_copy);
878 if (item_is_utf8 && !targ_is_utf8) {
880 /* Upgrade targ to UTF8, and then we reduce it to
881 a problem we have a simple solution for.
882 Don't need get magic. */
883 sv_utf8_upgrade_nomg(PL_formtarget);
885 /* re-calculate linemark */
886 s = (U8*)SvPVX(PL_formtarget);
887 /* the bytes we initially allocated to append the
888 * whole line may have been gobbled up during the
889 * upgrade, so allocate a whole new line's worth
894 linemark = s - (U8*)SvPVX(PL_formtarget);
896 /* Easy. They agree. */
897 assert (item_is_utf8 == targ_is_utf8);
900 /* @* and ^* are the only things that can exceed
901 * the linemax, so grow by the output size, plus
902 * a whole new form's worth in case of any further
904 grow = linemax + to_copy;
906 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
907 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
909 Copy(source, t, to_copy, char);
911 /* blank out ~ or control chars, depending on trans.
912 * works on bytes not chars, so relies on not
913 * matching utf8 continuation bytes */
915 U8 *send = s + to_copy;
918 if (trans == '~' ? (ch == '~') :
931 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
939 #if defined(USE_LONG_DOUBLE)
941 ((arg & FORM_NUM_POINT) ?
942 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
945 ((arg & FORM_NUM_POINT) ?
946 "%#0*.*f" : "%0*.*f");
951 #if defined(USE_LONG_DOUBLE)
953 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
956 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
959 /* If the field is marked with ^ and the value is undefined,
961 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
969 /* overflow evidence */
970 if (num_overflow(value, fieldsize, arg)) {
976 /* Formats aren't yet marked for locales, so assume "yes". */
978 STORE_NUMERIC_STANDARD_SET_LOCAL();
979 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
980 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
981 RESTORE_NUMERIC_STANDARD();
988 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
996 if (arg) { /* repeat until fields exhausted? */
1002 t = SvPVX(PL_formtarget) + linemark;
1009 const char *s = chophere;
1010 const char *send = item + len;
1012 while (isSPACE(*s) && (s < send))
1017 arg = fieldsize - itemsize;
1024 if (strnEQ(s1," ",3)) {
1025 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1036 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
1038 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1040 SvUTF8_on(PL_formtarget);
1041 FmLINES(PL_formtarget) += lines;
1043 if (fpc[-1] == FF_BLANK)
1044 RETURNOP(cLISTOP->op_first);
1056 if (PL_stack_base + *PL_markstack_ptr == SP) {
1058 if (GIMME_V == G_SCALAR)
1060 RETURNOP(PL_op->op_next->op_next);
1062 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1063 Perl_pp_pushmark(aTHX); /* push dst */
1064 Perl_pp_pushmark(aTHX); /* push src */
1065 ENTER_with_name("grep"); /* enter outer scope */
1068 if (PL_op->op_private & OPpGREP_LEX)
1069 SAVESPTR(PAD_SVl(PL_op->op_targ));
1072 ENTER_with_name("grep_item"); /* enter inner scope */
1075 src = PL_stack_base[*PL_markstack_ptr];
1077 if (PL_op->op_private & OPpGREP_LEX)
1078 PAD_SVl(PL_op->op_targ) = src;
1083 if (PL_op->op_type == OP_MAPSTART)
1084 Perl_pp_pushmark(aTHX); /* push top */
1085 return ((LOGOP*)PL_op->op_next)->op_other;
1091 const I32 gimme = GIMME_V;
1092 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1098 /* first, move source pointer to the next item in the source list */
1099 ++PL_markstack_ptr[-1];
1101 /* if there are new items, push them into the destination list */
1102 if (items && gimme != G_VOID) {
1103 /* might need to make room back there first */
1104 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1105 /* XXX this implementation is very pessimal because the stack
1106 * is repeatedly extended for every set of items. Is possible
1107 * to do this without any stack extension or copying at all
1108 * by maintaining a separate list over which the map iterates
1109 * (like foreach does). --gsar */
1111 /* everything in the stack after the destination list moves
1112 * towards the end the stack by the amount of room needed */
1113 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1115 /* items to shift up (accounting for the moved source pointer) */
1116 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1118 /* This optimization is by Ben Tilly and it does
1119 * things differently from what Sarathy (gsar)
1120 * is describing. The downside of this optimization is
1121 * that leaves "holes" (uninitialized and hopefully unused areas)
1122 * to the Perl stack, but on the other hand this
1123 * shouldn't be a problem. If Sarathy's idea gets
1124 * implemented, this optimization should become
1125 * irrelevant. --jhi */
1127 shift = count; /* Avoid shifting too often --Ben Tilly */
1131 dst = (SP += shift);
1132 PL_markstack_ptr[-1] += shift;
1133 *PL_markstack_ptr += shift;
1137 /* copy the new items down to the destination list */
1138 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1139 if (gimme == G_ARRAY) {
1140 /* add returned items to the collection (making mortal copies
1141 * if necessary), then clear the current temps stack frame
1142 * *except* for those items. We do this splicing the items
1143 * into the start of the tmps frame (so some items may be on
1144 * the tmps stack twice), then moving PL_tmps_floor above
1145 * them, then freeing the frame. That way, the only tmps that
1146 * accumulate over iterations are the return values for map.
1147 * We have to do to this way so that everything gets correctly
1148 * freed if we die during the map.
1152 /* make space for the slice */
1153 EXTEND_MORTAL(items);
1154 tmpsbase = PL_tmps_floor + 1;
1155 Move(PL_tmps_stack + tmpsbase,
1156 PL_tmps_stack + tmpsbase + items,
1157 PL_tmps_ix - PL_tmps_floor,
1159 PL_tmps_ix += items;
1164 sv = sv_mortalcopy(sv);
1166 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1168 /* clear the stack frame except for the items */
1169 PL_tmps_floor += items;
1171 /* FREETMPS may have cleared the TEMP flag on some of the items */
1174 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1177 /* scalar context: we don't care about which values map returns
1178 * (we use undef here). And so we certainly don't want to do mortal
1179 * copies of meaningless values. */
1180 while (items-- > 0) {
1182 *dst-- = &PL_sv_undef;
1190 LEAVE_with_name("grep_item"); /* exit inner scope */
1193 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1195 (void)POPMARK; /* pop top */
1196 LEAVE_with_name("grep"); /* exit outer scope */
1197 (void)POPMARK; /* pop src */
1198 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1199 (void)POPMARK; /* pop dst */
1200 SP = PL_stack_base + POPMARK; /* pop original mark */
1201 if (gimme == G_SCALAR) {
1202 if (PL_op->op_private & OPpGREP_LEX) {
1203 SV* sv = sv_newmortal();
1204 sv_setiv(sv, items);
1212 else if (gimme == G_ARRAY)
1219 ENTER_with_name("grep_item"); /* enter inner scope */
1222 /* set $_ to the new source item */
1223 src = PL_stack_base[PL_markstack_ptr[-1]];
1225 if (PL_op->op_private & OPpGREP_LEX)
1226 PAD_SVl(PL_op->op_targ) = src;
1230 RETURNOP(cLOGOP->op_other);
1239 if (GIMME == G_ARRAY)
1241 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1242 return cLOGOP->op_other;
1252 if (GIMME == G_ARRAY) {
1253 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1257 SV * const targ = PAD_SV(PL_op->op_targ);
1260 if (PL_op->op_private & OPpFLIP_LINENUM) {
1261 if (GvIO(PL_last_in_gv)) {
1262 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1265 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1267 flip = SvIV(sv) == SvIV(GvSV(gv));
1273 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1274 if (PL_op->op_flags & OPf_SPECIAL) {
1282 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1285 sv_setpvs(TARG, "");
1291 /* This code tries to decide if "$left .. $right" should use the
1292 magical string increment, or if the range is numeric (we make
1293 an exception for .."0" [#18165]). AMS 20021031. */
1295 #define RANGE_IS_NUMERIC(left,right) ( \
1296 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1297 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1298 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1299 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1300 && (!SvOK(right) || looks_like_number(right))))
1306 if (GIMME == G_ARRAY) {
1312 if (RANGE_IS_NUMERIC(left,right)) {
1315 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1316 (SvOK(right) && SvNV(right) > IV_MAX))
1317 DIE(aTHX_ "Range iterator outside integer range");
1328 SV * const sv = sv_2mortal(newSViv(i++));
1333 SV * const final = sv_mortalcopy(right);
1335 const char * const tmps = SvPV_const(final, len);
1337 SV *sv = sv_mortalcopy(left);
1338 SvPV_force_nolen(sv);
1339 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1341 if (strEQ(SvPVX_const(sv),tmps))
1343 sv = sv_2mortal(newSVsv(sv));
1350 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1354 if (PL_op->op_private & OPpFLIP_LINENUM) {
1355 if (GvIO(PL_last_in_gv)) {
1356 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1359 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1360 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1368 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1369 sv_catpvs(targ, "E0");
1379 static const char * const context_name[] = {
1381 NULL, /* CXt_WHEN never actually needs "block" */
1382 NULL, /* CXt_BLOCK never actually needs "block" */
1383 NULL, /* CXt_GIVEN never actually needs "block" */
1384 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1385 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1386 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1387 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1395 S_dopoptolabel(pTHX_ const char *label)
1400 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1402 for (i = cxstack_ix; i >= 0; i--) {
1403 register const PERL_CONTEXT * const cx = &cxstack[i];
1404 switch (CxTYPE(cx)) {
1410 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1411 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1412 if (CxTYPE(cx) == CXt_NULL)
1415 case CXt_LOOP_LAZYIV:
1416 case CXt_LOOP_LAZYSV:
1418 case CXt_LOOP_PLAIN:
1420 const char *cx_label = CxLABEL(cx);
1421 if (!cx_label || strNE(label, cx_label) ) {
1422 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1423 (long)i, cx_label));
1426 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1437 Perl_dowantarray(pTHX)
1440 const I32 gimme = block_gimme();
1441 return (gimme == G_VOID) ? G_SCALAR : gimme;
1445 Perl_block_gimme(pTHX)
1448 const I32 cxix = dopoptosub(cxstack_ix);
1452 switch (cxstack[cxix].blk_gimme) {
1460 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1467 Perl_is_lvalue_sub(pTHX)
1470 const I32 cxix = dopoptosub(cxstack_ix);
1471 assert(cxix >= 0); /* We should only be called from inside subs */
1473 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1474 return CxLVAL(cxstack + cxix);
1479 /* only used by PUSHSUB */
1481 Perl_was_lvalue_sub(pTHX)
1484 const I32 cxix = dopoptosub(cxstack_ix-1);
1485 assert(cxix >= 0); /* We should only be called from inside subs */
1487 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1488 return CxLVAL(cxstack + cxix);
1494 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1499 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1501 for (i = startingblock; i >= 0; i--) {
1502 register const PERL_CONTEXT * const cx = &cxstk[i];
1503 switch (CxTYPE(cx)) {
1509 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1517 S_dopoptoeval(pTHX_ I32 startingblock)
1521 for (i = startingblock; i >= 0; i--) {
1522 register const PERL_CONTEXT *cx = &cxstack[i];
1523 switch (CxTYPE(cx)) {
1527 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1535 S_dopoptoloop(pTHX_ I32 startingblock)
1539 for (i = startingblock; i >= 0; i--) {
1540 register const PERL_CONTEXT * const cx = &cxstack[i];
1541 switch (CxTYPE(cx)) {
1547 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1548 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1549 if ((CxTYPE(cx)) == CXt_NULL)
1552 case CXt_LOOP_LAZYIV:
1553 case CXt_LOOP_LAZYSV:
1555 case CXt_LOOP_PLAIN:
1556 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1564 S_dopoptogiven(pTHX_ I32 startingblock)
1568 for (i = startingblock; i >= 0; i--) {
1569 register const PERL_CONTEXT *cx = &cxstack[i];
1570 switch (CxTYPE(cx)) {
1574 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1576 case CXt_LOOP_PLAIN:
1577 assert(!CxFOREACHDEF(cx));
1579 case CXt_LOOP_LAZYIV:
1580 case CXt_LOOP_LAZYSV:
1582 if (CxFOREACHDEF(cx)) {
1583 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1592 S_dopoptowhen(pTHX_ I32 startingblock)
1596 for (i = startingblock; i >= 0; i--) {
1597 register const PERL_CONTEXT *cx = &cxstack[i];
1598 switch (CxTYPE(cx)) {
1602 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1610 Perl_dounwind(pTHX_ I32 cxix)
1615 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1618 while (cxstack_ix > cxix) {
1620 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1621 DEBUG_CX("UNWIND"); \
1622 /* Note: we don't need to restore the base context info till the end. */
1623 switch (CxTYPE(cx)) {
1626 continue; /* not break */
1634 case CXt_LOOP_LAZYIV:
1635 case CXt_LOOP_LAZYSV:
1637 case CXt_LOOP_PLAIN:
1648 PERL_UNUSED_VAR(optype);
1652 Perl_qerror(pTHX_ SV *err)
1656 PERL_ARGS_ASSERT_QERROR;
1659 if (PL_in_eval & EVAL_KEEPERR) {
1660 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1661 SvPV_nolen_const(err));
1664 sv_catsv(ERRSV, err);
1667 sv_catsv(PL_errors, err);
1669 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1671 ++PL_parser->error_count;
1675 Perl_die_unwind(pTHX_ SV *msv)
1678 SV *exceptsv = sv_mortalcopy(msv);
1679 U8 in_eval = PL_in_eval;
1680 PERL_ARGS_ASSERT_DIE_UNWIND;
1687 * Historically, perl used to set ERRSV ($@) early in the die
1688 * process and rely on it not getting clobbered during unwinding.
1689 * That sucked, because it was liable to get clobbered, so the
1690 * setting of ERRSV used to emit the exception from eval{} has
1691 * been moved to much later, after unwinding (see just before
1692 * JMPENV_JUMP below). However, some modules were relying on the
1693 * early setting, by examining $@ during unwinding to use it as
1694 * a flag indicating whether the current unwinding was caused by
1695 * an exception. It was never a reliable flag for that purpose,
1696 * being totally open to false positives even without actual
1697 * clobberage, but was useful enough for production code to
1698 * semantically rely on it.
1700 * We'd like to have a proper introspective interface that
1701 * explicitly describes the reason for whatever unwinding
1702 * operations are currently in progress, so that those modules
1703 * work reliably and $@ isn't further overloaded. But we don't
1704 * have one yet. In its absence, as a stopgap measure, ERRSV is
1705 * now *additionally* set here, before unwinding, to serve as the
1706 * (unreliable) flag that it used to.
1708 * This behaviour is temporary, and should be removed when a
1709 * proper way to detect exceptional unwinding has been developed.
1710 * As of 2010-12, the authors of modules relying on the hack
1711 * are aware of the issue, because the modules failed on
1712 * perls 5.13.{1..7} which had late setting of $@ without this
1713 * early-setting hack.
1715 if (!(in_eval & EVAL_KEEPERR)) {
1716 SvTEMP_off(exceptsv);
1717 sv_setsv(ERRSV, exceptsv);
1720 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1721 && PL_curstackinfo->si_prev)
1730 register PERL_CONTEXT *cx;
1733 JMPENV *restartjmpenv;
1736 if (cxix < cxstack_ix)
1739 POPBLOCK(cx,PL_curpm);
1740 if (CxTYPE(cx) != CXt_EVAL) {
1742 const char* message = SvPVx_const(exceptsv, msglen);
1743 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1744 PerlIO_write(Perl_error_log, message, msglen);
1748 namesv = cx->blk_eval.old_namesv;
1749 oldcop = cx->blk_oldcop;
1750 restartjmpenv = cx->blk_eval.cur_top_env;
1751 restartop = cx->blk_eval.retop;
1753 if (gimme == G_SCALAR)
1754 *++newsp = &PL_sv_undef;
1755 PL_stack_sp = newsp;
1759 /* LEAVE could clobber PL_curcop (see save_re_context())
1760 * XXX it might be better to find a way to avoid messing with
1761 * PL_curcop in save_re_context() instead, but this is a more
1762 * minimal fix --GSAR */
1765 if (optype == OP_REQUIRE) {
1766 const char* const msg = SvPVx_nolen_const(exceptsv);
1767 (void)hv_store(GvHVn(PL_incgv),
1768 SvPVX_const(namesv), SvCUR(namesv),
1770 /* note that unlike pp_entereval, pp_require isn't
1771 * supposed to trap errors. So now that we've popped the
1772 * EVAL that pp_require pushed, and processed the error
1773 * message, rethrow the error */
1774 Perl_croak(aTHX_ "%sCompilation failed in require",
1775 *msg ? msg : "Unknown error\n");
1777 if (in_eval & EVAL_KEEPERR) {
1778 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1779 SvPV_nolen_const(exceptsv));
1782 sv_setsv(ERRSV, exceptsv);
1784 PL_restartjmpenv = restartjmpenv;
1785 PL_restartop = restartop;
1791 write_to_stderr(exceptsv);
1798 dVAR; dSP; dPOPTOPssrl;
1799 if (SvTRUE(left) != SvTRUE(right))
1806 =for apidoc caller_cx
1808 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1809 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1810 information returned to Perl by C<caller>. Note that XSUBs don't get a
1811 stack frame, so C<caller_cx(0, NULL)> will return information for the
1812 immediately-surrounding Perl code.
1814 This function skips over the automatic calls to C<&DB::sub> made on the
1815 behalf of the debugger. If the stack frame requested was a sub called by
1816 C<DB::sub>, the return value will be the frame for the call to
1817 C<DB::sub>, since that has the correct line number/etc. for the call
1818 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1819 frame for the sub call itself.
1824 const PERL_CONTEXT *
1825 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1827 register I32 cxix = dopoptosub(cxstack_ix);
1828 register const PERL_CONTEXT *cx;
1829 register const PERL_CONTEXT *ccstack = cxstack;
1830 const PERL_SI *top_si = PL_curstackinfo;
1833 /* we may be in a higher stacklevel, so dig down deeper */
1834 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1835 top_si = top_si->si_prev;
1836 ccstack = top_si->si_cxstack;
1837 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1841 /* caller() should not report the automatic calls to &DB::sub */
1842 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1843 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1847 cxix = dopoptosub_at(ccstack, cxix - 1);
1850 cx = &ccstack[cxix];
1851 if (dbcxp) *dbcxp = cx;
1853 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1854 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1855 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1856 field below is defined for any cx. */
1857 /* caller() should not report the automatic calls to &DB::sub */
1858 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1859 cx = &ccstack[dbcxix];
1869 register const PERL_CONTEXT *cx;
1870 const PERL_CONTEXT *dbcx;
1872 const char *stashname;
1874 bool has_arg = MAXARG && TOPs;
1882 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1884 if (GIMME != G_ARRAY) {
1891 stashname = CopSTASHPV(cx->blk_oldcop);
1892 if (GIMME != G_ARRAY) {
1895 PUSHs(&PL_sv_undef);
1898 sv_setpv(TARG, stashname);
1907 PUSHs(&PL_sv_undef);
1909 mPUSHs(newSVpv(stashname, 0));
1910 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1911 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1914 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1915 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1916 /* So is ccstack[dbcxix]. */
1918 SV * const sv = newSV(0);
1919 gv_efullname3(sv, cvgv, NULL);
1921 PUSHs(boolSV(CxHASARGS(cx)));
1924 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1925 PUSHs(boolSV(CxHASARGS(cx)));
1929 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1932 gimme = (I32)cx->blk_gimme;
1933 if (gimme == G_VOID)
1934 PUSHs(&PL_sv_undef);
1936 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1937 if (CxTYPE(cx) == CXt_EVAL) {
1939 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1940 PUSHs(cx->blk_eval.cur_text);
1944 else if (cx->blk_eval.old_namesv) {
1945 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1948 /* eval BLOCK (try blocks have old_namesv == 0) */
1950 PUSHs(&PL_sv_undef);
1951 PUSHs(&PL_sv_undef);
1955 PUSHs(&PL_sv_undef);
1956 PUSHs(&PL_sv_undef);
1958 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1959 && CopSTASH_eq(PL_curcop, PL_debstash))
1961 AV * const ary = cx->blk_sub.argarray;
1962 const int off = AvARRAY(ary) - AvALLOC(ary);
1964 Perl_init_dbargs(aTHX);
1966 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1967 av_extend(PL_dbargs, AvFILLp(ary) + off);
1968 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1969 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1971 /* XXX only hints propagated via op_private are currently
1972 * visible (others are not easily accessible, since they
1973 * use the global PL_hints) */
1974 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1977 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1979 if (old_warnings == pWARN_NONE ||
1980 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1981 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1982 else if (old_warnings == pWARN_ALL ||
1983 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1984 /* Get the bit mask for $warnings::Bits{all}, because
1985 * it could have been extended by warnings::register */
1987 HV * const bits = get_hv("warnings::Bits", 0);
1988 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1989 mask = newSVsv(*bits_all);
1992 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1996 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2000 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2001 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2010 const char * const tmps =
2011 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
2012 sv_reset(tmps, CopSTASH(PL_curcop));
2017 /* like pp_nextstate, but used instead when the debugger is active */
2022 PL_curcop = (COP*)PL_op;
2023 TAINT_NOT; /* Each statement is presumed innocent */
2024 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2029 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2030 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2033 register PERL_CONTEXT *cx;
2034 const I32 gimme = G_ARRAY;
2036 GV * const gv = PL_DBgv;
2037 register CV * const cv = GvCV(gv);
2040 DIE(aTHX_ "No DB::DB routine defined");
2042 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2043 /* don't do recursive DB::DB call */
2058 (void)(*CvXSUB(cv))(aTHX_ cv);
2065 PUSHBLOCK(cx, CXt_SUB, SP);
2067 cx->blk_sub.retop = PL_op->op_next;
2070 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2071 RETURNOP(CvSTART(cv));
2079 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2081 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2083 if (gimme == G_SCALAR) {
2085 *++newsp = (SvFLAGS(*SP) & flags) ? *SP : sv_mortalcopy(*SP);
2087 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2090 *++MARK = &PL_sv_undef;
2094 else if (gimme == G_ARRAY) {
2095 /* in case LEAVE wipes old return values */
2096 while (++MARK <= SP) {
2097 if (SvFLAGS(*MARK) & flags)
2100 *++newsp = sv_mortalcopy(*MARK);
2101 TAINT_NOT; /* Each item is independent */
2104 /* When this function was called with MARK == newsp, we reach this
2105 * point with SP == newsp. */
2114 register PERL_CONTEXT *cx;
2115 I32 gimme = GIMME_V;
2117 ENTER_with_name("block");
2120 PUSHBLOCK(cx, CXt_BLOCK, SP);
2128 register PERL_CONTEXT *cx;
2133 if (PL_op->op_flags & OPf_SPECIAL) {
2134 cx = &cxstack[cxstack_ix];
2135 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2140 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2143 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2144 PL_curpm = newpm; /* Don't pop $1 et al till now */
2146 LEAVE_with_name("block");
2154 register PERL_CONTEXT *cx;
2155 const I32 gimme = GIMME_V;
2156 void *itervar; /* location of the iteration variable */
2157 U8 cxtype = CXt_LOOP_FOR;
2159 ENTER_with_name("loop1");
2162 if (PL_op->op_targ) { /* "my" variable */
2163 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2164 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2165 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2166 SVs_PADSTALE, SVs_PADSTALE);
2168 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2170 itervar = PL_comppad;
2172 itervar = &PAD_SVl(PL_op->op_targ);
2175 else { /* symbol table variable */
2176 GV * const gv = MUTABLE_GV(POPs);
2177 SV** svp = &GvSV(gv);
2178 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2180 itervar = (void *)gv;
2183 if (PL_op->op_private & OPpITER_DEF)
2184 cxtype |= CXp_FOR_DEF;
2186 ENTER_with_name("loop2");
2188 PUSHBLOCK(cx, cxtype, SP);
2189 PUSHLOOP_FOR(cx, itervar, MARK);
2190 if (PL_op->op_flags & OPf_STACKED) {
2191 SV *maybe_ary = POPs;
2192 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2194 SV * const right = maybe_ary;
2197 if (RANGE_IS_NUMERIC(sv,right)) {
2198 cx->cx_type &= ~CXTYPEMASK;
2199 cx->cx_type |= CXt_LOOP_LAZYIV;
2200 /* Make sure that no-one re-orders cop.h and breaks our
2202 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2203 #ifdef NV_PRESERVES_UV
2204 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2205 (SvNV(sv) > (NV)IV_MAX)))
2207 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2208 (SvNV(right) < (NV)IV_MIN))))
2210 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2213 ((SvUV(sv) > (UV)IV_MAX) ||
2214 (SvNV(sv) > (NV)UV_MAX)))))
2216 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2218 ((SvNV(right) > 0) &&
2219 ((SvUV(right) > (UV)IV_MAX) ||
2220 (SvNV(right) > (NV)UV_MAX))))))
2222 DIE(aTHX_ "Range iterator outside integer range");
2223 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2224 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2226 /* for correct -Dstv display */
2227 cx->blk_oldsp = sp - PL_stack_base;
2231 cx->cx_type &= ~CXTYPEMASK;
2232 cx->cx_type |= CXt_LOOP_LAZYSV;
2233 /* Make sure that no-one re-orders cop.h and breaks our
2235 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2236 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2237 cx->blk_loop.state_u.lazysv.end = right;
2238 SvREFCNT_inc(right);
2239 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2240 /* This will do the upgrade to SVt_PV, and warn if the value
2241 is uninitialised. */
2242 (void) SvPV_nolen_const(right);
2243 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2244 to replace !SvOK() with a pointer to "". */
2246 SvREFCNT_dec(right);
2247 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2251 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2252 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2253 SvREFCNT_inc(maybe_ary);
2254 cx->blk_loop.state_u.ary.ix =
2255 (PL_op->op_private & OPpITER_REVERSED) ?
2256 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2260 else { /* iterating over items on the stack */
2261 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2262 if (PL_op->op_private & OPpITER_REVERSED) {
2263 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2266 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2276 register PERL_CONTEXT *cx;
2277 const I32 gimme = GIMME_V;
2279 ENTER_with_name("loop1");
2281 ENTER_with_name("loop2");
2283 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2284 PUSHLOOP_PLAIN(cx, SP);
2292 register PERL_CONTEXT *cx;
2299 assert(CxTYPE_is_LOOP(cx));
2301 newsp = PL_stack_base + cx->blk_loop.resetsp;
2304 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2307 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2308 PL_curpm = newpm; /* ... and pop $1 et al */
2310 LEAVE_with_name("loop2");
2311 LEAVE_with_name("loop1");
2317 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2318 PERL_CONTEXT *cx, PMOP *newpm)
2320 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2321 if (gimme == G_SCALAR) {
2322 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2324 const char *what = NULL;
2326 assert(MARK+1 == SP);
2327 if ((SvPADTMP(TOPs) ||
2328 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2331 !SvSMAGICAL(TOPs)) {
2333 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2334 : "a readonly value" : "a temporary";
2339 /* sub:lvalue{} will take us here. */
2348 "Can't return %s from lvalue subroutine", what
2353 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2354 *++newsp = SvREFCNT_inc(*SP);
2361 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2366 *++newsp = &PL_sv_undef;
2368 if (CxLVAL(cx) & OPpDEREF) {
2371 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2375 else if (gimme == G_ARRAY) {
2376 assert (!(CxLVAL(cx) & OPpDEREF));
2377 if (ref || !CxLVAL(cx))
2378 while (++MARK <= SP)
2382 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2383 ? sv_mortalcopy(*MARK)
2384 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2385 else while (++MARK <= SP) {
2386 if (*MARK != &PL_sv_undef
2388 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2393 /* Might be flattened array after $#array = */
2401 "Can't return a %s from lvalue subroutine",
2402 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2408 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2411 PL_stack_sp = newsp;
2417 register PERL_CONTEXT *cx;
2418 bool popsub2 = FALSE;
2419 bool clear_errsv = FALSE;
2429 const I32 cxix = dopoptosub(cxstack_ix);
2432 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2433 * sort block, which is a CXt_NULL
2436 PL_stack_base[1] = *PL_stack_sp;
2437 PL_stack_sp = PL_stack_base + 1;
2441 DIE(aTHX_ "Can't return outside a subroutine");
2443 if (cxix < cxstack_ix)
2446 if (CxMULTICALL(&cxstack[cxix])) {
2447 gimme = cxstack[cxix].blk_gimme;
2448 if (gimme == G_VOID)
2449 PL_stack_sp = PL_stack_base;
2450 else if (gimme == G_SCALAR) {
2451 PL_stack_base[1] = *PL_stack_sp;
2452 PL_stack_sp = PL_stack_base + 1;
2458 switch (CxTYPE(cx)) {
2461 lval = !!CvLVALUE(cx->blk_sub.cv);
2462 retop = cx->blk_sub.retop;
2463 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2466 if (!(PL_in_eval & EVAL_KEEPERR))
2469 namesv = cx->blk_eval.old_namesv;
2470 retop = cx->blk_eval.retop;
2473 if (optype == OP_REQUIRE &&
2474 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2476 /* Unassume the success we assumed earlier. */
2477 (void)hv_delete(GvHVn(PL_incgv),
2478 SvPVX_const(namesv), SvCUR(namesv),
2480 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2485 retop = cx->blk_sub.retop;
2488 DIE(aTHX_ "panic: return");
2492 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2494 if (gimme == G_SCALAR) {
2497 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2498 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2499 *++newsp = SvREFCNT_inc(*SP);
2504 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2506 *++newsp = sv_mortalcopy(sv);
2510 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2514 *++newsp = sv_mortalcopy(*SP);
2517 *++newsp = sv_mortalcopy(*SP);
2520 *++newsp = &PL_sv_undef;
2522 else if (gimme == G_ARRAY) {
2523 while (++MARK <= SP) {
2524 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2525 ? *MARK : sv_mortalcopy(*MARK);
2526 TAINT_NOT; /* Each item is independent */
2529 PL_stack_sp = newsp;
2533 /* Stack values are safe: */
2536 POPSUB(cx,sv); /* release CV and @_ ... */
2540 PL_curpm = newpm; /* ... and pop $1 et al */
2549 /* This duplicates parts of pp_leavesub, so that it can share code with
2557 register PERL_CONTEXT *cx;
2560 if (CxMULTICALL(&cxstack[cxstack_ix]))
2564 cxstack_ix++; /* temporarily protect top context */
2568 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2572 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2573 PL_curpm = newpm; /* ... and pop $1 et al */
2576 return cx->blk_sub.retop;
2583 register PERL_CONTEXT *cx;
2594 if (PL_op->op_flags & OPf_SPECIAL) {
2595 cxix = dopoptoloop(cxstack_ix);
2597 DIE(aTHX_ "Can't \"last\" outside a loop block");
2600 cxix = dopoptolabel(cPVOP->op_pv);
2602 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2604 if (cxix < cxstack_ix)
2608 cxstack_ix++; /* temporarily protect top context */
2610 switch (CxTYPE(cx)) {
2611 case CXt_LOOP_LAZYIV:
2612 case CXt_LOOP_LAZYSV:
2614 case CXt_LOOP_PLAIN:
2616 newsp = PL_stack_base + cx->blk_loop.resetsp;
2617 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2621 nextop = cx->blk_sub.retop;
2625 nextop = cx->blk_eval.retop;
2629 nextop = cx->blk_sub.retop;
2632 DIE(aTHX_ "panic: last");
2636 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2637 pop2 == CXt_SUB ? SVs_TEMP : 0);
2642 /* Stack values are safe: */
2644 case CXt_LOOP_LAZYIV:
2645 case CXt_LOOP_PLAIN:
2646 case CXt_LOOP_LAZYSV:
2648 POPLOOP(cx); /* release loop vars ... */
2652 POPSUB(cx,sv); /* release CV and @_ ... */
2655 PL_curpm = newpm; /* ... and pop $1 et al */
2658 PERL_UNUSED_VAR(optype);
2659 PERL_UNUSED_VAR(gimme);
2667 register PERL_CONTEXT *cx;
2670 if (PL_op->op_flags & OPf_SPECIAL) {
2671 cxix = dopoptoloop(cxstack_ix);
2673 DIE(aTHX_ "Can't \"next\" outside a loop block");
2676 cxix = dopoptolabel(cPVOP->op_pv);
2678 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2680 if (cxix < cxstack_ix)
2683 /* clear off anything above the scope we're re-entering, but
2684 * save the rest until after a possible continue block */
2685 inner = PL_scopestack_ix;
2687 if (PL_scopestack_ix < inner)
2688 leave_scope(PL_scopestack[PL_scopestack_ix]);
2689 PL_curcop = cx->blk_oldcop;
2690 return (cx)->blk_loop.my_op->op_nextop;
2697 register PERL_CONTEXT *cx;
2701 if (PL_op->op_flags & OPf_SPECIAL) {
2702 cxix = dopoptoloop(cxstack_ix);
2704 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2707 cxix = dopoptolabel(cPVOP->op_pv);
2709 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2711 if (cxix < cxstack_ix)
2714 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2715 if (redo_op->op_type == OP_ENTER) {
2716 /* pop one less context to avoid $x being freed in while (my $x..) */
2718 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2719 redo_op = redo_op->op_next;
2723 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2724 LEAVE_SCOPE(oldsave);
2726 PL_curcop = cx->blk_oldcop;
2731 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2735 static const char too_deep[] = "Target of goto is too deeply nested";
2737 PERL_ARGS_ASSERT_DOFINDLABEL;
2740 Perl_croak(aTHX_ too_deep);
2741 if (o->op_type == OP_LEAVE ||
2742 o->op_type == OP_SCOPE ||
2743 o->op_type == OP_LEAVELOOP ||
2744 o->op_type == OP_LEAVESUB ||
2745 o->op_type == OP_LEAVETRY)
2747 *ops++ = cUNOPo->op_first;
2749 Perl_croak(aTHX_ too_deep);
2752 if (o->op_flags & OPf_KIDS) {
2754 /* First try all the kids at this level, since that's likeliest. */
2755 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2756 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2757 const char *kid_label = CopLABEL(kCOP);
2758 if (kid_label && strEQ(kid_label, label))
2762 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2763 if (kid == PL_lastgotoprobe)
2765 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2768 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2769 ops[-1]->op_type == OP_DBSTATE)
2774 if ((o = dofindlabel(kid, label, ops, oplimit)))
2787 register PERL_CONTEXT *cx;
2788 #define GOTO_DEPTH 64
2789 OP *enterops[GOTO_DEPTH];
2790 const char *label = NULL;
2791 const bool do_dump = (PL_op->op_type == OP_DUMP);
2792 static const char must_have_label[] = "goto must have label";
2794 if (PL_op->op_flags & OPf_STACKED) {
2795 SV * const sv = POPs;
2797 /* This egregious kludge implements goto &subroutine */
2798 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2800 register PERL_CONTEXT *cx;
2801 CV *cv = MUTABLE_CV(SvRV(sv));
2808 if (!CvROOT(cv) && !CvXSUB(cv)) {
2809 const GV * const gv = CvGV(cv);
2813 /* autoloaded stub? */
2814 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2816 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2817 GvNAMELEN(gv), FALSE);
2818 if (autogv && (cv = GvCV(autogv)))
2820 tmpstr = sv_newmortal();
2821 gv_efullname3(tmpstr, gv, NULL);
2822 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2824 DIE(aTHX_ "Goto undefined subroutine");
2827 /* First do some returnish stuff. */
2828 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2830 cxix = dopoptosub(cxstack_ix);
2832 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2833 if (cxix < cxstack_ix)
2837 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2838 if (CxTYPE(cx) == CXt_EVAL) {
2840 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2842 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2844 else if (CxMULTICALL(cx))
2845 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2846 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2847 /* put @_ back onto stack */
2848 AV* av = cx->blk_sub.argarray;
2850 items = AvFILLp(av) + 1;
2851 EXTEND(SP, items+1); /* @_ could have been extended. */
2852 Copy(AvARRAY(av), SP + 1, items, SV*);
2853 SvREFCNT_dec(GvAV(PL_defgv));
2854 GvAV(PL_defgv) = cx->blk_sub.savearray;
2856 /* abandon @_ if it got reified */
2861 av_extend(av, items-1);
2863 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2866 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2867 AV* const av = GvAV(PL_defgv);
2868 items = AvFILLp(av) + 1;
2869 EXTEND(SP, items+1); /* @_ could have been extended. */
2870 Copy(AvARRAY(av), SP + 1, items, SV*);
2874 if (CxTYPE(cx) == CXt_SUB &&
2875 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2876 SvREFCNT_dec(cx->blk_sub.cv);
2877 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2878 LEAVE_SCOPE(oldsave);
2880 /* Now do some callish stuff. */
2882 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2884 OP* const retop = cx->blk_sub.retop;
2885 SV **newsp __attribute__unused__;
2886 I32 gimme __attribute__unused__;
2889 for (index=0; index<items; index++)
2890 sv_2mortal(SP[-index]);
2893 /* XS subs don't have a CxSUB, so pop it */
2894 POPBLOCK(cx, PL_curpm);
2895 /* Push a mark for the start of arglist */
2898 (void)(*CvXSUB(cv))(aTHX_ cv);
2903 AV* const padlist = CvPADLIST(cv);
2904 if (CxTYPE(cx) == CXt_EVAL) {
2905 PL_in_eval = CxOLD_IN_EVAL(cx);
2906 PL_eval_root = cx->blk_eval.old_eval_root;
2907 cx->cx_type = CXt_SUB;
2909 cx->blk_sub.cv = cv;
2910 cx->blk_sub.olddepth = CvDEPTH(cv);
2913 if (CvDEPTH(cv) < 2)
2914 SvREFCNT_inc_simple_void_NN(cv);
2916 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2917 sub_crush_depth(cv);
2918 pad_push(padlist, CvDEPTH(cv));
2920 PL_curcop = cx->blk_oldcop;
2922 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2925 AV *const av = MUTABLE_AV(PAD_SVl(0));
2927 cx->blk_sub.savearray = GvAV(PL_defgv);
2928 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2929 CX_CURPAD_SAVE(cx->blk_sub);
2930 cx->blk_sub.argarray = av;
2932 if (items >= AvMAX(av) + 1) {
2933 SV **ary = AvALLOC(av);
2934 if (AvARRAY(av) != ary) {
2935 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2938 if (items >= AvMAX(av) + 1) {
2939 AvMAX(av) = items - 1;
2940 Renew(ary,items+1,SV*);
2946 Copy(mark,AvARRAY(av),items,SV*);
2947 AvFILLp(av) = items - 1;
2948 assert(!AvREAL(av));
2950 /* transfer 'ownership' of refcnts to new @_ */
2960 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2961 Perl_get_db_sub(aTHX_ NULL, cv);
2963 CV * const gotocv = get_cvs("DB::goto", 0);
2965 PUSHMARK( PL_stack_sp );
2966 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2971 RETURNOP(CvSTART(cv));
2975 label = SvPV_nolen_const(sv);
2976 if (!(do_dump || *label))
2977 DIE(aTHX_ must_have_label);
2980 else if (PL_op->op_flags & OPf_SPECIAL) {
2982 DIE(aTHX_ must_have_label);
2985 label = cPVOP->op_pv;
2989 if (label && *label) {
2990 OP *gotoprobe = NULL;
2991 bool leaving_eval = FALSE;
2992 bool in_block = FALSE;
2993 PERL_CONTEXT *last_eval_cx = NULL;
2997 PL_lastgotoprobe = NULL;
2999 for (ix = cxstack_ix; ix >= 0; ix--) {
3001 switch (CxTYPE(cx)) {
3003 leaving_eval = TRUE;
3004 if (!CxTRYBLOCK(cx)) {
3005 gotoprobe = (last_eval_cx ?
3006 last_eval_cx->blk_eval.old_eval_root :
3011 /* else fall through */
3012 case CXt_LOOP_LAZYIV:
3013 case CXt_LOOP_LAZYSV:
3015 case CXt_LOOP_PLAIN:
3018 gotoprobe = cx->blk_oldcop->op_sibling;
3024 gotoprobe = cx->blk_oldcop->op_sibling;
3027 gotoprobe = PL_main_root;
3030 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3031 gotoprobe = CvROOT(cx->blk_sub.cv);
3037 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3040 DIE(aTHX_ "panic: goto");
3041 gotoprobe = PL_main_root;
3045 retop = dofindlabel(gotoprobe, label,
3046 enterops, enterops + GOTO_DEPTH);
3049 if (gotoprobe->op_sibling &&
3050 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3051 gotoprobe->op_sibling->op_sibling) {
3052 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3053 label, enterops, enterops + GOTO_DEPTH);
3058 PL_lastgotoprobe = gotoprobe;
3061 DIE(aTHX_ "Can't find label %s", label);
3063 /* if we're leaving an eval, check before we pop any frames
3064 that we're not going to punt, otherwise the error
3067 if (leaving_eval && *enterops && enterops[1]) {
3069 for (i = 1; enterops[i]; i++)
3070 if (enterops[i]->op_type == OP_ENTERITER)
3071 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3074 if (*enterops && enterops[1]) {
3075 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3077 deprecate("\"goto\" to jump into a construct");
3080 /* pop unwanted frames */
3082 if (ix < cxstack_ix) {
3089 oldsave = PL_scopestack[PL_scopestack_ix];
3090 LEAVE_SCOPE(oldsave);
3093 /* push wanted frames */
3095 if (*enterops && enterops[1]) {
3096 OP * const oldop = PL_op;
3097 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3098 for (; enterops[ix]; ix++) {
3099 PL_op = enterops[ix];
3100 /* Eventually we may want to stack the needed arguments
3101 * for each op. For now, we punt on the hard ones. */
3102 if (PL_op->op_type == OP_ENTERITER)
3103 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3104 PL_op->op_ppaddr(aTHX);
3112 if (!retop) retop = PL_main_start;
3114 PL_restartop = retop;
3115 PL_do_undump = TRUE;
3119 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3120 PL_do_undump = FALSE;
3135 anum = 0; (void)POPs;
3140 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3142 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3145 PL_exit_flags |= PERL_EXIT_EXPECTED;
3147 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3148 if (anum || !(PL_minus_c && PL_madskills))
3153 PUSHs(&PL_sv_undef);
3160 S_save_lines(pTHX_ AV *array, SV *sv)
3162 const char *s = SvPVX_const(sv);
3163 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3166 PERL_ARGS_ASSERT_SAVE_LINES;
3168 while (s && s < send) {
3170 SV * const tmpstr = newSV_type(SVt_PVMG);
3172 t = (const char *)memchr(s, '\n', send - s);
3178 sv_setpvn(tmpstr, s, t - s);
3179 av_store(array, line++, tmpstr);
3187 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3189 0 is used as continue inside eval,
3191 3 is used for a die caught by an inner eval - continue inner loop
3193 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3194 establish a local jmpenv to handle exception traps.
3199 S_docatch(pTHX_ OP *o)
3203 OP * const oldop = PL_op;
3207 assert(CATCH_GET == TRUE);
3214 assert(cxstack_ix >= 0);
3215 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3216 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3221 /* die caught by an inner eval - continue inner loop */
3222 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3223 PL_restartjmpenv = NULL;
3224 PL_op = PL_restartop;
3240 /* James Bond: Do you expect me to talk?
3241 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3243 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3244 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3246 Currently it is not used outside the core code. Best if it stays that way.
3248 Hence it's now deprecated, and will be removed.
3251 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3252 /* sv Text to convert to OP tree. */
3253 /* startop op_free() this to undo. */
3254 /* code Short string id of the caller. */
3256 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3257 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3260 /* Don't use this. It will go away without warning once the regexp engine is
3261 refactored not to use it. */
3263 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3266 dVAR; dSP; /* Make POPBLOCK work. */
3272 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3273 char *tmpbuf = tbuf;
3276 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3280 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3282 ENTER_with_name("eval");
3283 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3285 /* switch to eval mode */
3287 if (IN_PERL_COMPILETIME) {
3288 SAVECOPSTASH_FREE(&PL_compiling);
3289 CopSTASH_set(&PL_compiling, PL_curstash);
3291 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3292 SV * const sv = sv_newmortal();
3293 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3294 code, (unsigned long)++PL_evalseq,
3295 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3300 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3301 (unsigned long)++PL_evalseq);
3302 SAVECOPFILE_FREE(&PL_compiling);
3303 CopFILE_set(&PL_compiling, tmpbuf+2);
3304 SAVECOPLINE(&PL_compiling);
3305 CopLINE_set(&PL_compiling, 1);
3306 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3307 deleting the eval's FILEGV from the stash before gv_check() runs
3308 (i.e. before run-time proper). To work around the coredump that
3309 ensues, we always turn GvMULTI_on for any globals that were
3310 introduced within evals. See force_ident(). GSAR 96-10-12 */
3311 safestr = savepvn(tmpbuf, len);
3312 SAVEDELETE(PL_defstash, safestr, len);
3314 #ifdef OP_IN_REGISTER
3320 /* we get here either during compilation, or via pp_regcomp at runtime */
3321 runtime = IN_PERL_RUNTIME;
3324 runcv = find_runcv(NULL);
3326 /* At run time, we have to fetch the hints from PL_curcop. */
3327 PL_hints = PL_curcop->cop_hints;
3328 if (PL_hints & HINT_LOCALIZE_HH) {
3329 /* SAVEHINTS created a new HV in PL_hintgv, which we
3331 SvREFCNT_dec(GvHV(PL_hintgv));
3333 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3334 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3336 SAVECOMPILEWARNINGS();
3337 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3338 cophh_free(CopHINTHASH_get(&PL_compiling));
3339 /* XXX Does this need to avoid copying a label? */
3340 PL_compiling.cop_hints_hash
3341 = cophh_copy(PL_curcop->cop_hints_hash);
3345 PL_op->op_type = OP_ENTEREVAL;
3346 PL_op->op_flags = 0; /* Avoid uninit warning. */
3347 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3349 need_catch = CATCH_GET;
3353 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3355 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3356 CATCH_SET(need_catch);
3357 POPBLOCK(cx,PL_curpm);
3360 (*startop)->op_type = OP_NULL;
3361 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3362 /* XXX DAPM do this properly one year */
3363 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3364 LEAVE_with_name("eval");
3365 if (IN_PERL_COMPILETIME)
3366 CopHINTS_set(&PL_compiling, PL_hints);
3367 #ifdef OP_IN_REGISTER
3370 PERL_UNUSED_VAR(newsp);
3371 PERL_UNUSED_VAR(optype);
3373 return PL_eval_start;
3378 =for apidoc find_runcv
3380 Locate the CV corresponding to the currently executing sub or eval.
3381 If db_seqp is non_null, skip CVs that are in the DB package and populate
3382 *db_seqp with the cop sequence number at the point that the DB:: code was
3383 entered. (allows debuggers to eval in the scope of the breakpoint rather
3384 than in the scope of the debugger itself).
3390 Perl_find_runcv(pTHX_ U32 *db_seqp)
3396 *db_seqp = PL_curcop->cop_seq;
3397 for (si = PL_curstackinfo; si; si = si->si_prev) {
3399 for (ix = si->si_cxix; ix >= 0; ix--) {
3400 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3401 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3402 CV * const cv = cx->blk_sub.cv;
3403 /* skip DB:: code */
3404 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3405 *db_seqp = cx->blk_oldcop->cop_seq;
3410 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3418 /* Run yyparse() in a setjmp wrapper. Returns:
3419 * 0: yyparse() successful
3420 * 1: yyparse() failed
3424 S_try_yyparse(pTHX_ int gramtype)
3429 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3433 ret = yyparse(gramtype) ? 1 : 0;
3447 /* Compile a require/do, an eval '', or a /(?{...})/.
3448 * In the last case, startop is non-null, and contains the address of
3449 * a pointer that should be set to the just-compiled code.
3450 * outside is the lexically enclosing CV (if any) that invoked us.
3451 * Returns a bool indicating whether the compile was successful; if so,
3452 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3453 * pushes undef (also croaks if startop != NULL).
3457 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3460 OP * const saveop = PL_op;
3461 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3464 PL_in_eval = (in_require
3465 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3470 SAVESPTR(PL_compcv);
3471 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3472 CvEVAL_on(PL_compcv);
3473 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3474 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3475 cxstack[cxstack_ix].blk_gimme = gimme;
3477 CvOUTSIDE_SEQ(PL_compcv) = seq;
3478 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3480 /* set up a scratch pad */
3482 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3483 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3487 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3489 /* make sure we compile in the right package */
3491 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3492 SAVESPTR(PL_curstash);
3493 PL_curstash = CopSTASH(PL_curcop);
3495 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3496 SAVESPTR(PL_beginav);
3497 PL_beginav = newAV();
3498 SAVEFREESV(PL_beginav);
3499 SAVESPTR(PL_unitcheckav);
3500 PL_unitcheckav = newAV();
3501 SAVEFREESV(PL_unitcheckav);
3504 SAVEBOOL(PL_madskills);
3508 /* try to compile it */
3510 PL_eval_root = NULL;
3511 PL_curcop = &PL_compiling;
3512 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3513 PL_in_eval |= EVAL_KEEPERR;
3517 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3519 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3520 * so honour CATCH_GET and trap it here if necessary */
3522 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3524 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3525 SV **newsp; /* Used by POPBLOCK. */
3527 I32 optype; /* Used by POPEVAL. */
3533 PERL_UNUSED_VAR(newsp);
3534 PERL_UNUSED_VAR(optype);
3536 /* note that if yystatus == 3, then the EVAL CX block has already
3537 * been popped, and various vars restored */
3539 if (yystatus != 3) {
3541 op_free(PL_eval_root);
3542 PL_eval_root = NULL;
3544 SP = PL_stack_base + POPMARK; /* pop original mark */
3546 POPBLOCK(cx,PL_curpm);
3548 namesv = cx->blk_eval.old_namesv;
3552 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3554 msg = SvPVx_nolen_const(ERRSV);
3557 /* If cx is still NULL, it means that we didn't go in the
3558 * POPEVAL branch. */
3559 cx = &cxstack[cxstack_ix];
3560 assert(CxTYPE(cx) == CXt_EVAL);
3561 namesv = cx->blk_eval.old_namesv;
3563 (void)hv_store(GvHVn(PL_incgv),
3564 SvPVX_const(namesv), SvCUR(namesv),
3566 Perl_croak(aTHX_ "%sCompilation failed in require",
3567 *msg ? msg : "Unknown error\n");
3570 if (yystatus != 3) {
3571 POPBLOCK(cx,PL_curpm);
3574 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3575 (*msg ? msg : "Unknown error\n"));
3579 sv_setpvs(ERRSV, "Compilation error");
3582 PUSHs(&PL_sv_undef);
3586 CopLINE_set(&PL_compiling, 0);
3588 *startop = PL_eval_root;
3590 SAVEFREEOP(PL_eval_root);
3592 DEBUG_x(dump_eval());
3594 /* Register with debugger: */
3595 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3596 CV * const cv = get_cvs("DB::postponed", 0);
3600 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3602 call_sv(MUTABLE_SV(cv), G_DISCARD);
3606 if (PL_unitcheckav) {
3607 OP *es = PL_eval_start;
3608 call_list(PL_scopestack_ix, PL_unitcheckav);
3612 /* compiled okay, so do it */
3614 CvDEPTH(PL_compcv) = 1;
3615 SP = PL_stack_base + POPMARK; /* pop original mark */
3616 PL_op = saveop; /* The caller may need it. */
3617 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3624 S_check_type_and_open(pTHX_ SV *name)
3627 const char *p = SvPV_nolen_const(name);
3628 const int st_rc = PerlLIO_stat(p, &st);
3630 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3632 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3636 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3637 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3639 return PerlIO_open(p, PERL_SCRIPT_MODE);
3643 #ifndef PERL_DISABLE_PMC
3645 S_doopen_pm(pTHX_ SV *name)
3648 const char *p = SvPV_const(name, namelen);
3650 PERL_ARGS_ASSERT_DOOPEN_PM;
3652 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3653 SV *const pmcsv = sv_newmortal();
3656 SvSetSV_nosteal(pmcsv,name);
3657 sv_catpvn(pmcsv, "c", 1);
3659 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3660 return check_type_and_open(pmcsv);
3662 return check_type_and_open(name);
3665 # define doopen_pm(name) check_type_and_open(name)
3666 #endif /* !PERL_DISABLE_PMC */
3671 register PERL_CONTEXT *cx;
3678 int vms_unixname = 0;
3680 const char *tryname = NULL;
3682 const I32 gimme = GIMME_V;
3683 int filter_has_file = 0;
3684 PerlIO *tryrsfp = NULL;
3685 SV *filter_cache = NULL;
3686 SV *filter_state = NULL;
3687 SV *filter_sub = NULL;
3693 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3694 sv = sv_2mortal(new_version(sv));
3695 if (!sv_derived_from(PL_patchlevel, "version"))
3696 upg_version(PL_patchlevel, TRUE);
3697 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3698 if ( vcmp(sv,PL_patchlevel) <= 0 )
3699 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3700 SVfARG(sv_2mortal(vnormal(sv))),
3701 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3705 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3708 SV * const req = SvRV(sv);
3709 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3711 /* get the left hand term */
3712 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3714 first = SvIV(*av_fetch(lav,0,0));
3715 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3716 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3717 || av_len(lav) > 1 /* FP with > 3 digits */
3718 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3720 DIE(aTHX_ "Perl %"SVf" required--this is only "
3722 SVfARG(sv_2mortal(vnormal(req))),
3723 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3726 else { /* probably 'use 5.10' or 'use 5.8' */
3731 second = SvIV(*av_fetch(lav,1,0));
3733 second /= second >= 600 ? 100 : 10;
3734 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3735 (int)first, (int)second);
3736 upg_version(hintsv, TRUE);
3738 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3739 "--this is only %"SVf", stopped",
3740 SVfARG(sv_2mortal(vnormal(req))),
3741 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3742 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3750 name = SvPV_const(sv, len);
3751 if (!(name && len > 0 && *name))
3752 DIE(aTHX_ "Null filename used");
3753 TAINT_PROPER("require");
3757 /* The key in the %ENV hash is in the syntax of file passed as the argument
3758 * usually this is in UNIX format, but sometimes in VMS format, which
3759 * can result in a module being pulled in more than once.
3760 * To prevent this, the key must be stored in UNIX format if the VMS
3761 * name can be translated to UNIX.
3763 if ((unixname = tounixspec(name, NULL)) != NULL) {
3764 unixlen = strlen(unixname);
3770 /* if not VMS or VMS name can not be translated to UNIX, pass it
3773 unixname = (char *) name;
3776 if (PL_op->op_type == OP_REQUIRE) {
3777 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3778 unixname, unixlen, 0);
3780 if (*svp != &PL_sv_undef)
3783 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3784 "Compilation failed in require", unixname);
3788 /* prepare to compile file */
3790 if (path_is_absolute(name)) {
3791 /* At this point, name is SvPVX(sv) */
3793 tryrsfp = doopen_pm(sv);
3796 AV * const ar = GvAVn(PL_incgv);
3802 namesv = newSV_type(SVt_PV);
3803 for (i = 0; i <= AvFILL(ar); i++) {
3804 SV * const dirsv = *av_fetch(ar, i, TRUE);
3806 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3813 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3814 && !sv_isobject(loader))
3816 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3819 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3820 PTR2UV(SvRV(dirsv)), name);
3821 tryname = SvPVX_const(namesv);
3824 ENTER_with_name("call_INC");
3832 if (sv_isobject(loader))
3833 count = call_method("INC", G_ARRAY);
3835 count = call_sv(loader, G_ARRAY);
3845 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3846 && !isGV_with_GP(SvRV(arg))) {
3847 filter_cache = SvRV(arg);
3848 SvREFCNT_inc_simple_void_NN(filter_cache);
3855 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3859 if (isGV_with_GP(arg)) {
3860 IO * const io = GvIO((const GV *)arg);
3865 tryrsfp = IoIFP(io);
3866 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3867 PerlIO_close(IoOFP(io));
3878 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3880 SvREFCNT_inc_simple_void_NN(filter_sub);
3883 filter_state = SP[i];
3884 SvREFCNT_inc_simple_void(filter_state);
3888 if (!tryrsfp && (filter_cache || filter_sub)) {
3889 tryrsfp = PerlIO_open(BIT_BUCKET,
3897 LEAVE_with_name("call_INC");
3899 /* Adjust file name if the hook has set an %INC entry.
3900 This needs to happen after the FREETMPS above. */
3901 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3903 tryname = SvPV_nolen_const(*svp);
3910 filter_has_file = 0;
3912 SvREFCNT_dec(filter_cache);
3913 filter_cache = NULL;
3916 SvREFCNT_dec(filter_state);
3917 filter_state = NULL;
3920 SvREFCNT_dec(filter_sub);
3925 if (!path_is_absolute(name)
3931 dir = SvPV_const(dirsv, dirlen);
3939 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3941 sv_setpv(namesv, unixdir);
3942 sv_catpv(namesv, unixname);
3944 # ifdef __SYMBIAN32__
3945 if (PL_origfilename[0] &&
3946 PL_origfilename[1] == ':' &&
3947 !(dir[0] && dir[1] == ':'))
3948 Perl_sv_setpvf(aTHX_ namesv,
3953 Perl_sv_setpvf(aTHX_ namesv,
3957 /* The equivalent of
3958 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3959 but without the need to parse the format string, or
3960 call strlen on either pointer, and with the correct
3961 allocation up front. */
3963 char *tmp = SvGROW(namesv, dirlen + len + 2);
3965 memcpy(tmp, dir, dirlen);
3968 /* name came from an SV, so it will have a '\0' at the
3969 end that we can copy as part of this memcpy(). */
3970 memcpy(tmp, name, len + 1);
3972 SvCUR_set(namesv, dirlen + len + 1);
3977 TAINT_PROPER("require");
3978 tryname = SvPVX_const(namesv);
3979 tryrsfp = doopen_pm(namesv);
3981 if (tryname[0] == '.' && tryname[1] == '/') {
3983 while (*++tryname == '/');
3987 else if (errno == EMFILE)
3988 /* no point in trying other paths if out of handles */
3997 if (PL_op->op_type == OP_REQUIRE) {
3998 if(errno == EMFILE) {
3999 /* diag_listed_as: Can't locate %s */
4000 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4002 if (namesv) { /* did we lookup @INC? */
4003 AV * const ar = GvAVn(PL_incgv);
4005 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4006 for (i = 0; i <= AvFILL(ar); i++) {
4007 sv_catpvs(inc, " ");
4008 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4011 /* diag_listed_as: Can't locate %s */
4013 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4015 (memEQ(name + len - 2, ".h", 3)
4016 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4017 (memEQ(name + len - 3, ".ph", 4)
4018 ? " (did you run h2ph?)" : ""),
4023 DIE(aTHX_ "Can't locate %s", name);
4029 SETERRNO(0, SS_NORMAL);
4031 /* Assume success here to prevent recursive requirement. */
4032 /* name is never assigned to again, so len is still strlen(name) */
4033 /* Check whether a hook in @INC has already filled %INC */
4035 (void)hv_store(GvHVn(PL_incgv),
4036 unixname, unixlen, newSVpv(tryname,0),0);
4038 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4040 (void)hv_store(GvHVn(PL_incgv),
4041 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4044 ENTER_with_name("eval");
4046 SAVECOPFILE_FREE(&PL_compiling);
4047 CopFILE_set(&PL_compiling, tryname);
4048 lex_start(NULL, tryrsfp, 0);
4052 hv_clear(GvHV(PL_hintgv));
4054 SAVECOMPILEWARNINGS();
4055 if (PL_dowarn & G_WARN_ALL_ON)
4056 PL_compiling.cop_warnings = pWARN_ALL ;
4057 else if (PL_dowarn & G_WARN_ALL_OFF)
4058 PL_compiling.cop_warnings = pWARN_NONE ;
4060 PL_compiling.cop_warnings = pWARN_STD ;
4062 if (filter_sub || filter_cache) {
4063 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4064 than hanging another SV from it. In turn, filter_add() optionally
4065 takes the SV to use as the filter (or creates a new SV if passed
4066 NULL), so simply pass in whatever value filter_cache has. */
4067 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4068 IoLINES(datasv) = filter_has_file;
4069 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4070 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4073 /* switch to eval mode */
4074 PUSHBLOCK(cx, CXt_EVAL, SP);
4076 cx->blk_eval.retop = PL_op->op_next;
4078 SAVECOPLINE(&PL_compiling);
4079 CopLINE_set(&PL_compiling, 0);
4083 /* Store and reset encoding. */
4084 encoding = PL_encoding;
4087 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4088 op = DOCATCH(PL_eval_start);
4090 op = PL_op->op_next;
4092 /* Restore encoding. */
4093 PL_encoding = encoding;
4098 /* This is a op added to hold the hints hash for
4099 pp_entereval. The hash can be modified by the code
4100 being eval'ed, so we return a copy instead. */
4106 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4114 register PERL_CONTEXT *cx;
4116 const I32 gimme = GIMME_V;
4117 const U32 was = PL_breakable_sub_gen;
4118 char tbuf[TYPE_DIGITS(long) + 12];
4119 bool saved_delete = FALSE;
4120 char *tmpbuf = tbuf;
4124 HV *saved_hh = NULL;
4126 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4127 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4131 /* make sure we've got a plain PV (no overload etc) before testing
4132 * for taint. Making a copy here is probably overkill, but better
4133 * safe than sorry */
4135 const char * const p = SvPV_const(sv, len);
4137 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4140 TAINT_IF(SvTAINTED(sv));
4141 TAINT_PROPER("eval");
4143 ENTER_with_name("eval");
4144 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4147 /* switch to eval mode */
4149 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4150 SV * const temp_sv = sv_newmortal();
4151 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4152 (unsigned long)++PL_evalseq,
4153 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4154 tmpbuf = SvPVX(temp_sv);
4155 len = SvCUR(temp_sv);
4158 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4159 SAVECOPFILE_FREE(&PL_compiling);
4160 CopFILE_set(&PL_compiling, tmpbuf+2);
4161 SAVECOPLINE(&PL_compiling);
4162 CopLINE_set(&PL_compiling, 1);
4163 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4164 deleting the eval's FILEGV from the stash before gv_check() runs
4165 (i.e. before run-time proper). To work around the coredump that
4166 ensues, we always turn GvMULTI_on for any globals that were
4167 introduced within evals. See force_ident(). GSAR 96-10-12 */
4169 PL_hints = PL_op->op_targ;
4171 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4172 SvREFCNT_dec(GvHV(PL_hintgv));
4173 GvHV(PL_hintgv) = saved_hh;
4175 SAVECOMPILEWARNINGS();
4176 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4177 cophh_free(CopHINTHASH_get(&PL_compiling));
4178 if (Perl_cop_fetch_label(aTHX_ PL_curcop, NULL, NULL)) {
4179 /* The label, if present, is the first entry on the chain. So rather
4180 than writing a blank label in front of it (which involves an
4181 allocation), just use the next entry in the chain. */
4182 PL_compiling.cop_hints_hash
4183 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4184 /* Check the assumption that this removed the label. */
4185 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4188 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4189 /* special case: an eval '' executed within the DB package gets lexically
4190 * placed in the first non-DB CV rather than the current CV - this
4191 * allows the debugger to execute code, find lexicals etc, in the
4192 * scope of the code being debugged. Passing &seq gets find_runcv
4193 * to do the dirty work for us */
4194 runcv = find_runcv(&seq);
4196 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4198 cx->blk_eval.retop = PL_op->op_next;
4200 /* prepare to compile string */
4202 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4203 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4205 char *const safestr = savepvn(tmpbuf, len);
4206 SAVEDELETE(PL_defstash, safestr, len);
4207 saved_delete = TRUE;
4212 if (doeval(gimme, NULL, runcv, seq)) {
4213 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4214 ? (PERLDB_LINE || PERLDB_SAVESRC)
4215 : PERLDB_SAVESRC_NOSUBS) {
4216 /* Retain the filegv we created. */
4217 } else if (!saved_delete) {
4218 char *const safestr = savepvn(tmpbuf, len);
4219 SAVEDELETE(PL_defstash, safestr, len);
4221 return DOCATCH(PL_eval_start);
4223 /* We have already left the scope set up earlier thanks to the LEAVE
4225 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4226 ? (PERLDB_LINE || PERLDB_SAVESRC)
4227 : PERLDB_SAVESRC_INVALID) {
4228 /* Retain the filegv we created. */
4229 } else if (!saved_delete) {
4230 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4232 return PL_op->op_next;
4242 register PERL_CONTEXT *cx;
4244 const U8 save_flags = PL_op -> op_flags;
4251 namesv = cx->blk_eval.old_namesv;
4252 retop = cx->blk_eval.retop;
4255 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4257 PL_curpm = newpm; /* Don't pop $1 et al till now */
4260 assert(CvDEPTH(PL_compcv) == 1);
4262 CvDEPTH(PL_compcv) = 0;
4264 if (optype == OP_REQUIRE &&
4265 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4267 /* Unassume the success we assumed earlier. */
4268 (void)hv_delete(GvHVn(PL_incgv),
4269 SvPVX_const(namesv), SvCUR(namesv),
4271 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4273 /* die_unwind() did LEAVE, or we won't be here */
4276 LEAVE_with_name("eval");
4277 if (!(save_flags & OPf_SPECIAL)) {
4285 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4286 close to the related Perl_create_eval_scope. */
4288 Perl_delete_eval_scope(pTHX)
4293 register PERL_CONTEXT *cx;
4299 LEAVE_with_name("eval_scope");
4300 PERL_UNUSED_VAR(newsp);
4301 PERL_UNUSED_VAR(gimme);
4302 PERL_UNUSED_VAR(optype);
4305 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4306 also needed by Perl_fold_constants. */
4308 Perl_create_eval_scope(pTHX_ U32 flags)
4311 const I32 gimme = GIMME_V;
4313 ENTER_with_name("eval_scope");
4316 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4319 PL_in_eval = EVAL_INEVAL;
4320 if (flags & G_KEEPERR)
4321 PL_in_eval |= EVAL_KEEPERR;
4324 if (flags & G_FAKINGEVAL) {
4325 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4333 PERL_CONTEXT * const cx = create_eval_scope(0);
4334 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4335 return DOCATCH(PL_op->op_next);
4344 register PERL_CONTEXT *cx;
4350 PERL_UNUSED_VAR(optype);
4353 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4354 PL_curpm = newpm; /* Don't pop $1 et al till now */
4356 LEAVE_with_name("eval_scope");
4364 register PERL_CONTEXT *cx;
4365 const I32 gimme = GIMME_V;
4367 ENTER_with_name("given");
4370 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4371 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4373 PUSHBLOCK(cx, CXt_GIVEN, SP);
4382 register PERL_CONTEXT *cx;
4386 PERL_UNUSED_CONTEXT;
4389 assert(CxTYPE(cx) == CXt_GIVEN);
4392 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4393 PL_curpm = newpm; /* Don't pop $1 et al till now */
4395 LEAVE_with_name("given");
4399 /* Helper routines used by pp_smartmatch */
4401 S_make_matcher(pTHX_ REGEXP *re)
4404 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4406 PERL_ARGS_ASSERT_MAKE_MATCHER;
4408 PM_SETRE(matcher, ReREFCNT_inc(re));
4410 SAVEFREEOP((OP *) matcher);
4411 ENTER_with_name("matcher"); SAVETMPS;
4417 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4422 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4424 PL_op = (OP *) matcher;
4427 (void) Perl_pp_match(aTHX);
4429 return (SvTRUEx(POPs));
4433 S_destroy_matcher(pTHX_ PMOP *matcher)
4437 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4438 PERL_UNUSED_ARG(matcher);
4441 LEAVE_with_name("matcher");
4444 /* Do a smart match */
4447 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4448 return do_smartmatch(NULL, NULL, 0);
4451 /* This version of do_smartmatch() implements the
4452 * table of smart matches that is found in perlsyn.
4455 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4460 bool object_on_left = FALSE;
4461 SV *e = TOPs; /* e is for 'expression' */
4462 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4464 /* Take care only to invoke mg_get() once for each argument.
4465 * Currently we do this by copying the SV if it's magical. */
4467 if (!copied && SvGMAGICAL(d))
4468 d = sv_mortalcopy(d);
4475 e = sv_mortalcopy(e);
4477 /* First of all, handle overload magic of the rightmost argument */
4480 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4481 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4483 tmpsv = amagic_call(d, e, smart_amg, 0);
4490 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4493 SP -= 2; /* Pop the values */
4498 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4505 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4506 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4507 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4509 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4510 object_on_left = TRUE;
4513 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4515 if (object_on_left) {
4516 goto sm_any_sub; /* Treat objects like scalars */
4518 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4519 /* Test sub truth for each key */
4521 bool andedresults = TRUE;
4522 HV *hv = (HV*) SvRV(d);
4523 I32 numkeys = hv_iterinit(hv);
4524 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4527 while ( (he = hv_iternext(hv)) ) {
4528 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4529 ENTER_with_name("smartmatch_hash_key_test");