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))
48 cxix = dopoptosub(cxstack_ix);
52 switch (cxstack[cxix].blk_gimme) {
65 /* XXXX Should store the old value to allow for tie/overload - and
66 restore in regcomp, where marked with XXXX. */
76 register PMOP *pm = (PMOP*)cLOGOP->op_other;
80 /* prevent recompiling under /o and ithreads. */
81 #if defined(USE_ITHREADS)
82 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
83 if (PL_op->op_flags & OPf_STACKED) {
93 #define tryAMAGICregexp(rx) \
96 if (SvROK(rx) && SvAMAGIC(rx)) { \
97 SV *sv = AMG_CALLunary(rx, regexp_amg); \
101 if (SvTYPE(sv) != SVt_REGEXP) \
102 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
109 if (PL_op->op_flags & OPf_STACKED) {
110 /* multiple args; concatenate them */
112 tmpstr = PAD_SV(ARGTARG);
113 sv_setpvs(tmpstr, "");
114 while (++MARK <= SP) {
118 tryAMAGICregexp(msv);
120 if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
121 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
123 sv_setsv(tmpstr, sv);
126 sv_catsv_nomg(tmpstr, msv);
133 tryAMAGICregexp(tmpstr);
136 #undef tryAMAGICregexp
139 SV * const sv = SvRV(tmpstr);
140 if (SvTYPE(sv) == SVt_REGEXP)
143 else if (SvTYPE(tmpstr) == SVt_REGEXP)
144 re = (REGEXP*) tmpstr;
147 /* The match's LHS's get-magic might need to access this op's reg-
148 exp (as is sometimes the case with $'; see bug 70764). So we
149 must call get-magic now before we replace the regexp. Hopeful-
150 ly this hack can be replaced with the approach described at
151 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03
152 /msg122415.html some day. */
153 if(pm->op_type == OP_MATCH) {
155 const bool was_tainted = PL_tainted;
156 if (pm->op_flags & OPf_STACKED)
158 else if (pm->op_private & OPpTARGET_MY)
159 lhs = PAD_SV(pm->op_targ);
162 /* Restore the previous value of PL_tainted (which may have been
163 modified by get-magic), to avoid incorrectly setting the
164 RXf_TAINTED flag further down. */
165 PL_tainted = was_tainted;
168 re = reg_temp_copy(NULL, re);
169 ReREFCNT_dec(PM_GETRE(pm));
174 const char *t = SvOK(tmpstr) ? SvPV_nomg_const(tmpstr, len) : "";
177 assert (re != (REGEXP*) &PL_sv_undef);
179 /* Check against the last compiled regexp. */
180 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
181 memNE(RX_PRECOMP(re), t, len))
183 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
184 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
188 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
190 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
192 } else if (PL_curcop->cop_hints_hash) {
193 SV *ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0);
194 if (ptr && SvIOK(ptr) && SvIV(ptr))
195 eng = INT2PTR(regexp_engine*,SvIV(ptr));
198 if (PL_op->op_flags & OPf_SPECIAL)
199 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
201 if (DO_UTF8(tmpstr)) {
202 assert (SvUTF8(tmpstr));
203 } else if (SvUTF8(tmpstr)) {
204 /* Not doing UTF-8, despite what the SV says. Is this only if
205 we're trapped in use 'bytes'? */
206 /* Make a copy of the octet sequence, but without the flag on,
207 as the compiler now honours the SvUTF8 flag on tmpstr. */
209 const char *const p = SvPV(tmpstr, len);
210 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
212 else if (SvAMAGIC(tmpstr)) {
213 /* make a copy to avoid extra stringifies */
214 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
217 /* If it is gmagical, create a mortal copy, but without calling
218 get-magic, as we have already done that. */
219 if(SvGMAGICAL(tmpstr)) {
220 SV *mortalcopy = sv_newmortal();
221 sv_setsv_flags(mortalcopy, tmpstr, 0);
226 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
228 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
230 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
231 inside tie/overload accessors. */
237 #ifndef INCOMPLETE_TAINTS
240 SvTAINTED_on((SV*)re);
241 RX_EXTFLAGS(re) |= RXf_TAINTED;
246 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
250 #if !defined(USE_ITHREADS)
251 /* can't change the optree at runtime either */
252 /* PMf_KEEP is handled differently under threads to avoid these problems */
253 if (pm->op_pmflags & PMf_KEEP) {
254 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
255 cLOGOP->op_first->op_next = PL_op->op_next;
265 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
266 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
267 register SV * const dstr = cx->sb_dstr;
268 register char *s = cx->sb_s;
269 register char *m = cx->sb_m;
270 char *orig = cx->sb_orig;
271 register REGEXP * const rx = cx->sb_rx;
273 REGEXP *old = PM_GETRE(pm);
280 PM_SETRE(pm,ReREFCNT_inc(rx));
283 rxres_restore(&cx->sb_rxres, rx);
284 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
286 if (cx->sb_iters++) {
287 const I32 saviters = cx->sb_iters;
288 if (cx->sb_iters > cx->sb_maxiters)
289 DIE(aTHX_ "Substitution loop");
291 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
293 /* See "how taint works" above pp_subst() */
295 cx->sb_rxtainted |= SUBST_TAINT_REPL;
296 sv_catsv_nomg(dstr, POPs);
297 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
301 /* I believe that we can't set REXEC_SCREAM here if
302 SvSCREAM(cx->sb_targ) is true because SvPVX(cx->sb_targ) isn't always
303 equal to s. [See the comment before Perl_re_intuit_start(), which is
304 called from Perl_regexec_flags(), which says that it should be when
305 SvSCREAM() is true.] s, cx->sb_strend and orig will be consistent
306 with SvPVX(cx->sb_targ), as substconst doesn't modify cx->sb_targ
308 if (CxONCE(cx) || s < orig ||
309 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
310 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
311 ((cx->sb_rflags & REXEC_COPY_STR)
312 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
313 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
315 SV *targ = cx->sb_targ;
317 assert(cx->sb_strend >= s);
318 if(cx->sb_strend > s) {
319 if (DO_UTF8(dstr) && !SvUTF8(targ))
320 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
322 sv_catpvn(dstr, s, cx->sb_strend - s);
324 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
325 cx->sb_rxtainted |= SUBST_TAINT_PAT;
327 if (pm->op_pmflags & PMf_NONDESTRUCT) {
329 /* From here on down we're using the copy, and leaving the
330 original untouched. */
334 #ifdef PERL_OLD_COPY_ON_WRITE
336 sv_force_normal_flags(targ, SV_COW_DROP_PV);
342 SvPV_set(targ, SvPVX(dstr));
343 SvCUR_set(targ, SvCUR(dstr));
344 SvLEN_set(targ, SvLEN(dstr));
347 SvPV_set(dstr, NULL);
349 mPUSHi(saviters - 1);
351 (void)SvPOK_only_UTF8(targ);
354 /* update the taint state of various various variables in
355 * preparation for final exit.
356 * See "how taint works" above pp_subst() */
358 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
359 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
360 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
362 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
364 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
365 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
367 SvTAINTED_on(TOPs); /* taint return value */
368 /* needed for mg_set below */
369 PL_tainted = cBOOL(cx->sb_rxtainted &
370 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
373 /* PL_tainted must be correctly set for this mg_set */
376 LEAVE_SCOPE(cx->sb_oldsave);
378 RETURNOP(pm->op_next);
381 cx->sb_iters = saviters;
383 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
386 cx->sb_orig = orig = RX_SUBBEG(rx);
388 cx->sb_strend = s + (cx->sb_strend - m);
390 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
392 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
393 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
395 sv_catpvn(dstr, s, m-s);
397 cx->sb_s = RX_OFFS(rx)[0].end + orig;
398 { /* Update the pos() information. */
400 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
402 SvUPGRADE(sv, SVt_PVMG);
403 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
404 #ifdef PERL_OLD_COPY_ON_WRITE
406 sv_force_normal_flags(sv, 0);
408 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
411 mg->mg_len = m - orig;
414 (void)ReREFCNT_inc(rx);
415 /* update the taint state of various various variables in preparation
416 * for calling the code block.
417 * See "how taint works" above pp_subst() */
419 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
420 cx->sb_rxtainted |= SUBST_TAINT_PAT;
422 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
423 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
424 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
426 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
428 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
429 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
430 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
431 ? cx->sb_dstr : cx->sb_targ);
434 rxres_save(&cx->sb_rxres, rx);
436 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
440 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
445 PERL_ARGS_ASSERT_RXRES_SAVE;
448 if (!p || p[1] < RX_NPARENS(rx)) {
449 #ifdef PERL_OLD_COPY_ON_WRITE
450 i = 7 + RX_NPARENS(rx) * 2;
452 i = 6 + RX_NPARENS(rx) * 2;
461 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
462 RX_MATCH_COPIED_off(rx);
464 #ifdef PERL_OLD_COPY_ON_WRITE
465 *p++ = PTR2UV(RX_SAVED_COPY(rx));
466 RX_SAVED_COPY(rx) = NULL;
469 *p++ = RX_NPARENS(rx);
471 *p++ = PTR2UV(RX_SUBBEG(rx));
472 *p++ = (UV)RX_SUBLEN(rx);
473 for (i = 0; i <= RX_NPARENS(rx); ++i) {
474 *p++ = (UV)RX_OFFS(rx)[i].start;
475 *p++ = (UV)RX_OFFS(rx)[i].end;
480 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
485 PERL_ARGS_ASSERT_RXRES_RESTORE;
488 RX_MATCH_COPY_FREE(rx);
489 RX_MATCH_COPIED_set(rx, *p);
492 #ifdef PERL_OLD_COPY_ON_WRITE
493 if (RX_SAVED_COPY(rx))
494 SvREFCNT_dec (RX_SAVED_COPY(rx));
495 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
499 RX_NPARENS(rx) = *p++;
501 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
502 RX_SUBLEN(rx) = (I32)(*p++);
503 for (i = 0; i <= RX_NPARENS(rx); ++i) {
504 RX_OFFS(rx)[i].start = (I32)(*p++);
505 RX_OFFS(rx)[i].end = (I32)(*p++);
510 S_rxres_free(pTHX_ void **rsp)
512 UV * const p = (UV*)*rsp;
514 PERL_ARGS_ASSERT_RXRES_FREE;
519 void *tmp = INT2PTR(char*,*p);
522 PoisonFree(*p, 1, sizeof(*p));
524 Safefree(INT2PTR(char*,*p));
526 #ifdef PERL_OLD_COPY_ON_WRITE
528 SvREFCNT_dec (INT2PTR(SV*,p[1]));
536 #define FORM_NUM_BLANK (1<<30)
537 #define FORM_NUM_POINT (1<<29)
541 dVAR; dSP; dMARK; dORIGMARK;
542 register SV * const tmpForm = *++MARK;
543 SV *formsv; /* contains text of original format */
544 register U32 *fpc; /* format ops program counter */
545 register char *t; /* current append position in target string */
546 const char *f; /* current position in format string */
548 register SV *sv = NULL; /* current item */
549 const char *item = NULL;/* string value of current item */
550 I32 itemsize = 0; /* length of current item, possibly truncated */
551 I32 fieldsize = 0; /* width of current field */
552 I32 lines = 0; /* number of lines that have been output */
553 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
554 const char *chophere = NULL; /* where to chop current item */
555 STRLEN linemark = 0; /* pos of start of line in output */
557 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
559 STRLEN linemax; /* estimate of output size in bytes */
560 bool item_is_utf8 = FALSE;
561 bool targ_is_utf8 = FALSE;
564 U8 *source; /* source of bytes to append */
565 STRLEN to_copy; /* how may bytes to append */
566 char trans; /* what chars to translate */
568 mg = doparseform(tmpForm);
570 fpc = (U32*)mg->mg_ptr;
571 /* the actual string the format was compiled from.
572 * with overload etc, this may not match tmpForm */
576 SvPV_force(PL_formtarget, len);
577 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
578 SvTAINTED_on(PL_formtarget);
579 if (DO_UTF8(PL_formtarget))
581 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
582 t = SvGROW(PL_formtarget, len + linemax + 1);
583 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
585 f = SvPV_const(formsv, len);
589 const char *name = "???";
592 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
593 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
594 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
595 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
596 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
598 case FF_CHECKNL: name = "CHECKNL"; break;
599 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
600 case FF_SPACE: name = "SPACE"; break;
601 case FF_HALFSPACE: name = "HALFSPACE"; break;
602 case FF_ITEM: name = "ITEM"; break;
603 case FF_CHOP: name = "CHOP"; break;
604 case FF_LINEGLOB: name = "LINEGLOB"; break;
605 case FF_NEWLINE: name = "NEWLINE"; break;
606 case FF_MORE: name = "MORE"; break;
607 case FF_LINEMARK: name = "LINEMARK"; break;
608 case FF_END: name = "END"; break;
609 case FF_0DECIMAL: name = "0DECIMAL"; break;
610 case FF_LINESNGL: name = "LINESNGL"; break;
613 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
615 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
619 linemark = t - SvPVX(PL_formtarget);
629 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
645 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
648 SvTAINTED_on(PL_formtarget);
654 const char *s = item = SvPV_const(sv, len);
657 itemsize = sv_len_utf8(sv);
658 if (itemsize != (I32)len) {
660 if (itemsize > fieldsize) {
661 itemsize = fieldsize;
662 itembytes = itemsize;
663 sv_pos_u2b(sv, &itembytes, 0);
667 send = chophere = s + itembytes;
677 sv_pos_b2u(sv, &itemsize);
681 item_is_utf8 = FALSE;
682 if (itemsize > fieldsize)
683 itemsize = fieldsize;
684 send = chophere = s + itemsize;
698 const char *s = item = SvPV_const(sv, len);
701 itemsize = sv_len_utf8(sv);
702 if (itemsize != (I32)len) {
704 if (itemsize <= fieldsize) {
705 const char *send = chophere = s + itemsize;
718 itemsize = fieldsize;
719 itembytes = itemsize;
720 sv_pos_u2b(sv, &itembytes, 0);
721 send = chophere = s + itembytes;
722 while (s < send || (s == send && isSPACE(*s))) {
732 if (strchr(PL_chopset, *s))
737 itemsize = chophere - item;
738 sv_pos_b2u(sv, &itemsize);
744 item_is_utf8 = FALSE;
745 if (itemsize <= fieldsize) {
746 const char *const send = chophere = s + itemsize;
759 itemsize = fieldsize;
760 send = chophere = s + itemsize;
761 while (s < send || (s == send && isSPACE(*s))) {
771 if (strchr(PL_chopset, *s))
776 itemsize = chophere - item;
782 arg = fieldsize - itemsize;
791 arg = fieldsize - itemsize;
805 /* convert to_copy from chars to bytes */
809 to_copy = s - source;
815 const char *s = chophere;
829 const bool oneline = fpc[-1] == FF_LINESNGL;
830 const char *s = item = SvPV_const(sv, len);
831 const char *const send = s + len;
833 item_is_utf8 = DO_UTF8(sv);
844 to_copy = s - SvPVX_const(sv) - 1;
858 /* append to_copy bytes from source to PL_formstring.
859 * item_is_utf8 implies source is utf8.
860 * if trans, translate certain characters during the copy */
865 SvCUR_set(PL_formtarget,
866 t - SvPVX_const(PL_formtarget));
868 if (targ_is_utf8 && !item_is_utf8) {
869 source = tmp = bytes_to_utf8(source, &to_copy);
871 if (item_is_utf8 && !targ_is_utf8) {
873 /* Upgrade targ to UTF8, and then we reduce it to
874 a problem we have a simple solution for.
875 Don't need get magic. */
876 sv_utf8_upgrade_nomg(PL_formtarget);
878 /* re-calculate linemark */
879 s = (U8*)SvPVX(PL_formtarget);
880 /* the bytes we initially allocated to append the
881 * whole line may have been gobbled up during the
882 * upgrade, so allocate a whole new line's worth
887 linemark = s - (U8*)SvPVX(PL_formtarget);
889 /* Easy. They agree. */
890 assert (item_is_utf8 == targ_is_utf8);
893 /* @* and ^* are the only things that can exceed
894 * the linemax, so grow by the output size, plus
895 * a whole new form's worth in case of any further
897 grow = linemax + to_copy;
899 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
900 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
902 Copy(source, t, to_copy, char);
904 /* blank out ~ or control chars, depending on trans.
905 * works on bytes not chars, so relies on not
906 * matching utf8 continuation bytes */
908 U8 *send = s + to_copy;
911 if (trans == '~' ? (ch == '~') :
924 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
932 #if defined(USE_LONG_DOUBLE)
934 ((arg & FORM_NUM_POINT) ?
935 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
938 ((arg & FORM_NUM_POINT) ?
939 "%#0*.*f" : "%0*.*f");
944 #if defined(USE_LONG_DOUBLE)
946 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
949 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
952 /* If the field is marked with ^ and the value is undefined,
954 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
962 /* overflow evidence */
963 if (num_overflow(value, fieldsize, arg)) {
969 /* Formats aren't yet marked for locales, so assume "yes". */
971 STORE_NUMERIC_STANDARD_SET_LOCAL();
972 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
973 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
974 RESTORE_NUMERIC_STANDARD();
981 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
989 if (arg) { /* repeat until fields exhausted? */
995 t = SvPVX(PL_formtarget) + linemark;
1002 const char *s = chophere;
1003 const char *send = item + len;
1005 while (isSPACE(*s) && (s < send))
1010 arg = fieldsize - itemsize;
1017 if (strnEQ(s1," ",3)) {
1018 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1029 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
1031 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1033 SvUTF8_on(PL_formtarget);
1034 FmLINES(PL_formtarget) += lines;
1036 if (fpc[-1] == FF_BLANK)
1037 RETURNOP(cLISTOP->op_first);
1049 if (PL_stack_base + *PL_markstack_ptr == SP) {
1051 if (GIMME_V == G_SCALAR)
1053 RETURNOP(PL_op->op_next->op_next);
1055 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1056 Perl_pp_pushmark(aTHX); /* push dst */
1057 Perl_pp_pushmark(aTHX); /* push src */
1058 ENTER_with_name("grep"); /* enter outer scope */
1061 if (PL_op->op_private & OPpGREP_LEX)
1062 SAVESPTR(PAD_SVl(PL_op->op_targ));
1065 ENTER_with_name("grep_item"); /* enter inner scope */
1068 src = PL_stack_base[*PL_markstack_ptr];
1070 if (PL_op->op_private & OPpGREP_LEX)
1071 PAD_SVl(PL_op->op_targ) = src;
1076 if (PL_op->op_type == OP_MAPSTART)
1077 Perl_pp_pushmark(aTHX); /* push top */
1078 return ((LOGOP*)PL_op->op_next)->op_other;
1084 const I32 gimme = GIMME_V;
1085 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1091 /* first, move source pointer to the next item in the source list */
1092 ++PL_markstack_ptr[-1];
1094 /* if there are new items, push them into the destination list */
1095 if (items && gimme != G_VOID) {
1096 /* might need to make room back there first */
1097 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1098 /* XXX this implementation is very pessimal because the stack
1099 * is repeatedly extended for every set of items. Is possible
1100 * to do this without any stack extension or copying at all
1101 * by maintaining a separate list over which the map iterates
1102 * (like foreach does). --gsar */
1104 /* everything in the stack after the destination list moves
1105 * towards the end the stack by the amount of room needed */
1106 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1108 /* items to shift up (accounting for the moved source pointer) */
1109 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1111 /* This optimization is by Ben Tilly and it does
1112 * things differently from what Sarathy (gsar)
1113 * is describing. The downside of this optimization is
1114 * that leaves "holes" (uninitialized and hopefully unused areas)
1115 * to the Perl stack, but on the other hand this
1116 * shouldn't be a problem. If Sarathy's idea gets
1117 * implemented, this optimization should become
1118 * irrelevant. --jhi */
1120 shift = count; /* Avoid shifting too often --Ben Tilly */
1124 dst = (SP += shift);
1125 PL_markstack_ptr[-1] += shift;
1126 *PL_markstack_ptr += shift;
1130 /* copy the new items down to the destination list */
1131 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1132 if (gimme == G_ARRAY) {
1133 /* add returned items to the collection (making mortal copies
1134 * if necessary), then clear the current temps stack frame
1135 * *except* for those items. We do this splicing the items
1136 * into the start of the tmps frame (so some items may be on
1137 * the tmps stack twice), then moving PL_tmps_floor above
1138 * them, then freeing the frame. That way, the only tmps that
1139 * accumulate over iterations are the return values for map.
1140 * We have to do to this way so that everything gets correctly
1141 * freed if we die during the map.
1145 /* make space for the slice */
1146 EXTEND_MORTAL(items);
1147 tmpsbase = PL_tmps_floor + 1;
1148 Move(PL_tmps_stack + tmpsbase,
1149 PL_tmps_stack + tmpsbase + items,
1150 PL_tmps_ix - PL_tmps_floor,
1152 PL_tmps_ix += items;
1157 sv = sv_mortalcopy(sv);
1159 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1161 /* clear the stack frame except for the items */
1162 PL_tmps_floor += items;
1164 /* FREETMPS may have cleared the TEMP flag on some of the items */
1167 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1170 /* scalar context: we don't care about which values map returns
1171 * (we use undef here). And so we certainly don't want to do mortal
1172 * copies of meaningless values. */
1173 while (items-- > 0) {
1175 *dst-- = &PL_sv_undef;
1183 LEAVE_with_name("grep_item"); /* exit inner scope */
1186 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1188 (void)POPMARK; /* pop top */
1189 LEAVE_with_name("grep"); /* exit outer scope */
1190 (void)POPMARK; /* pop src */
1191 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1192 (void)POPMARK; /* pop dst */
1193 SP = PL_stack_base + POPMARK; /* pop original mark */
1194 if (gimme == G_SCALAR) {
1195 if (PL_op->op_private & OPpGREP_LEX) {
1196 SV* sv = sv_newmortal();
1197 sv_setiv(sv, items);
1205 else if (gimme == G_ARRAY)
1212 ENTER_with_name("grep_item"); /* enter inner scope */
1215 /* set $_ to the new source item */
1216 src = PL_stack_base[PL_markstack_ptr[-1]];
1218 if (PL_op->op_private & OPpGREP_LEX)
1219 PAD_SVl(PL_op->op_targ) = src;
1223 RETURNOP(cLOGOP->op_other);
1232 if (GIMME == G_ARRAY)
1234 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1235 return cLOGOP->op_other;
1245 if (GIMME == G_ARRAY) {
1246 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1250 SV * const targ = PAD_SV(PL_op->op_targ);
1253 if (PL_op->op_private & OPpFLIP_LINENUM) {
1254 if (GvIO(PL_last_in_gv)) {
1255 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1258 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1260 flip = SvIV(sv) == SvIV(GvSV(gv));
1266 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1267 if (PL_op->op_flags & OPf_SPECIAL) {
1275 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1278 sv_setpvs(TARG, "");
1284 /* This code tries to decide if "$left .. $right" should use the
1285 magical string increment, or if the range is numeric (we make
1286 an exception for .."0" [#18165]). AMS 20021031. */
1288 #define RANGE_IS_NUMERIC(left,right) ( \
1289 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1290 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1291 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1292 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1293 && (!SvOK(right) || looks_like_number(right))))
1299 if (GIMME == G_ARRAY) {
1305 if (RANGE_IS_NUMERIC(left,right)) {
1308 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1309 (SvOK(right) && SvNV(right) > IV_MAX))
1310 DIE(aTHX_ "Range iterator outside integer range");
1321 SV * const sv = sv_2mortal(newSViv(i++));
1326 SV * const final = sv_mortalcopy(right);
1328 const char * const tmps = SvPV_const(final, len);
1330 SV *sv = sv_mortalcopy(left);
1331 SvPV_force_nolen(sv);
1332 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1334 if (strEQ(SvPVX_const(sv),tmps))
1336 sv = sv_2mortal(newSVsv(sv));
1343 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1347 if (PL_op->op_private & OPpFLIP_LINENUM) {
1348 if (GvIO(PL_last_in_gv)) {
1349 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1352 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1353 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1361 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1362 sv_catpvs(targ, "E0");
1372 static const char * const context_name[] = {
1374 NULL, /* CXt_WHEN never actually needs "block" */
1375 NULL, /* CXt_BLOCK never actually needs "block" */
1376 NULL, /* CXt_GIVEN never actually needs "block" */
1377 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1378 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1379 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1380 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1388 S_dopoptolabel(pTHX_ const char *label)
1393 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1395 for (i = cxstack_ix; i >= 0; i--) {
1396 register const PERL_CONTEXT * const cx = &cxstack[i];
1397 switch (CxTYPE(cx)) {
1403 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1404 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1405 if (CxTYPE(cx) == CXt_NULL)
1408 case CXt_LOOP_LAZYIV:
1409 case CXt_LOOP_LAZYSV:
1411 case CXt_LOOP_PLAIN:
1413 const char *cx_label = CxLABEL(cx);
1414 if (!cx_label || strNE(label, cx_label) ) {
1415 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1416 (long)i, cx_label));
1419 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1430 Perl_dowantarray(pTHX)
1433 const I32 gimme = block_gimme();
1434 return (gimme == G_VOID) ? G_SCALAR : gimme;
1438 Perl_block_gimme(pTHX)
1441 const I32 cxix = dopoptosub(cxstack_ix);
1445 switch (cxstack[cxix].blk_gimme) {
1453 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1460 Perl_is_lvalue_sub(pTHX)
1463 const I32 cxix = dopoptosub(cxstack_ix);
1464 assert(cxix >= 0); /* We should only be called from inside subs */
1466 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1467 return CxLVAL(cxstack + cxix);
1473 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1478 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1480 for (i = startingblock; i >= 0; i--) {
1481 register const PERL_CONTEXT * const cx = &cxstk[i];
1482 switch (CxTYPE(cx)) {
1488 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1496 S_dopoptoeval(pTHX_ I32 startingblock)
1500 for (i = startingblock; i >= 0; i--) {
1501 register const PERL_CONTEXT *cx = &cxstack[i];
1502 switch (CxTYPE(cx)) {
1506 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1514 S_dopoptoloop(pTHX_ I32 startingblock)
1518 for (i = startingblock; i >= 0; i--) {
1519 register const PERL_CONTEXT * const cx = &cxstack[i];
1520 switch (CxTYPE(cx)) {
1526 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1527 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1528 if ((CxTYPE(cx)) == CXt_NULL)
1531 case CXt_LOOP_LAZYIV:
1532 case CXt_LOOP_LAZYSV:
1534 case CXt_LOOP_PLAIN:
1535 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1543 S_dopoptogiven(pTHX_ I32 startingblock)
1547 for (i = startingblock; i >= 0; i--) {
1548 register const PERL_CONTEXT *cx = &cxstack[i];
1549 switch (CxTYPE(cx)) {
1553 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1555 case CXt_LOOP_PLAIN:
1556 assert(!CxFOREACHDEF(cx));
1558 case CXt_LOOP_LAZYIV:
1559 case CXt_LOOP_LAZYSV:
1561 if (CxFOREACHDEF(cx)) {
1562 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1571 S_dopoptowhen(pTHX_ I32 startingblock)
1575 for (i = startingblock; i >= 0; i--) {
1576 register const PERL_CONTEXT *cx = &cxstack[i];
1577 switch (CxTYPE(cx)) {
1581 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1589 Perl_dounwind(pTHX_ I32 cxix)
1594 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1597 while (cxstack_ix > cxix) {
1599 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1600 DEBUG_CX("UNWIND"); \
1601 /* Note: we don't need to restore the base context info till the end. */
1602 switch (CxTYPE(cx)) {
1605 continue; /* not break */
1613 case CXt_LOOP_LAZYIV:
1614 case CXt_LOOP_LAZYSV:
1616 case CXt_LOOP_PLAIN:
1627 PERL_UNUSED_VAR(optype);
1631 Perl_qerror(pTHX_ SV *err)
1635 PERL_ARGS_ASSERT_QERROR;
1638 if (PL_in_eval & EVAL_KEEPERR) {
1639 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1640 SvPV_nolen_const(err));
1643 sv_catsv(ERRSV, err);
1646 sv_catsv(PL_errors, err);
1648 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1650 ++PL_parser->error_count;
1654 Perl_die_unwind(pTHX_ SV *msv)
1657 SV *exceptsv = sv_mortalcopy(msv);
1658 U8 in_eval = PL_in_eval;
1659 PERL_ARGS_ASSERT_DIE_UNWIND;
1666 * Historically, perl used to set ERRSV ($@) early in the die
1667 * process and rely on it not getting clobbered during unwinding.
1668 * That sucked, because it was liable to get clobbered, so the
1669 * setting of ERRSV used to emit the exception from eval{} has
1670 * been moved to much later, after unwinding (see just before
1671 * JMPENV_JUMP below). However, some modules were relying on the
1672 * early setting, by examining $@ during unwinding to use it as
1673 * a flag indicating whether the current unwinding was caused by
1674 * an exception. It was never a reliable flag for that purpose,
1675 * being totally open to false positives even without actual
1676 * clobberage, but was useful enough for production code to
1677 * semantically rely on it.
1679 * We'd like to have a proper introspective interface that
1680 * explicitly describes the reason for whatever unwinding
1681 * operations are currently in progress, so that those modules
1682 * work reliably and $@ isn't further overloaded. But we don't
1683 * have one yet. In its absence, as a stopgap measure, ERRSV is
1684 * now *additionally* set here, before unwinding, to serve as the
1685 * (unreliable) flag that it used to.
1687 * This behaviour is temporary, and should be removed when a
1688 * proper way to detect exceptional unwinding has been developed.
1689 * As of 2010-12, the authors of modules relying on the hack
1690 * are aware of the issue, because the modules failed on
1691 * perls 5.13.{1..7} which had late setting of $@ without this
1692 * early-setting hack.
1694 if (!(in_eval & EVAL_KEEPERR)) {
1695 SvTEMP_off(exceptsv);
1696 sv_setsv(ERRSV, exceptsv);
1699 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1700 && PL_curstackinfo->si_prev)
1709 register PERL_CONTEXT *cx;
1712 JMPENV *restartjmpenv;
1715 if (cxix < cxstack_ix)
1718 POPBLOCK(cx,PL_curpm);
1719 if (CxTYPE(cx) != CXt_EVAL) {
1721 const char* message = SvPVx_const(exceptsv, msglen);
1722 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1723 PerlIO_write(Perl_error_log, message, msglen);
1727 namesv = cx->blk_eval.old_namesv;
1728 oldcop = cx->blk_oldcop;
1729 restartjmpenv = cx->blk_eval.cur_top_env;
1730 restartop = cx->blk_eval.retop;
1732 if (gimme == G_SCALAR)
1733 *++newsp = &PL_sv_undef;
1734 PL_stack_sp = newsp;
1738 /* LEAVE could clobber PL_curcop (see save_re_context())
1739 * XXX it might be better to find a way to avoid messing with
1740 * PL_curcop in save_re_context() instead, but this is a more
1741 * minimal fix --GSAR */
1744 if (optype == OP_REQUIRE) {
1745 const char* const msg = SvPVx_nolen_const(exceptsv);
1746 (void)hv_store(GvHVn(PL_incgv),
1747 SvPVX_const(namesv), SvCUR(namesv),
1749 /* note that unlike pp_entereval, pp_require isn't
1750 * supposed to trap errors. So now that we've popped the
1751 * EVAL that pp_require pushed, and processed the error
1752 * message, rethrow the error */
1753 Perl_croak(aTHX_ "%sCompilation failed in require",
1754 *msg ? msg : "Unknown error\n");
1756 if (in_eval & EVAL_KEEPERR) {
1757 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1758 SvPV_nolen_const(exceptsv));
1761 sv_setsv(ERRSV, exceptsv);
1763 PL_restartjmpenv = restartjmpenv;
1764 PL_restartop = restartop;
1770 write_to_stderr(exceptsv);
1777 dVAR; dSP; dPOPTOPssrl;
1778 if (SvTRUE(left) != SvTRUE(right))
1785 =for apidoc caller_cx
1787 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1788 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1789 information returned to Perl by C<caller>. Note that XSUBs don't get a
1790 stack frame, so C<caller_cx(0, NULL)> will return information for the
1791 immediately-surrounding Perl code.
1793 This function skips over the automatic calls to C<&DB::sub> made on the
1794 behalf of the debugger. If the stack frame requested was a sub called by
1795 C<DB::sub>, the return value will be the frame for the call to
1796 C<DB::sub>, since that has the correct line number/etc. for the call
1797 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1798 frame for the sub call itself.
1803 const PERL_CONTEXT *
1804 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1806 register I32 cxix = dopoptosub(cxstack_ix);
1807 register const PERL_CONTEXT *cx;
1808 register const PERL_CONTEXT *ccstack = cxstack;
1809 const PERL_SI *top_si = PL_curstackinfo;
1812 /* we may be in a higher stacklevel, so dig down deeper */
1813 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1814 top_si = top_si->si_prev;
1815 ccstack = top_si->si_cxstack;
1816 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1820 /* caller() should not report the automatic calls to &DB::sub */
1821 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1822 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1826 cxix = dopoptosub_at(ccstack, cxix - 1);
1829 cx = &ccstack[cxix];
1830 if (dbcxp) *dbcxp = cx;
1832 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1833 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1834 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1835 field below is defined for any cx. */
1836 /* caller() should not report the automatic calls to &DB::sub */
1837 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1838 cx = &ccstack[dbcxix];
1848 register const PERL_CONTEXT *cx;
1849 const PERL_CONTEXT *dbcx;
1851 const char *stashname;
1857 cx = caller_cx(count, &dbcx);
1859 if (GIMME != G_ARRAY) {
1866 stashname = CopSTASHPV(cx->blk_oldcop);
1867 if (GIMME != G_ARRAY) {
1870 PUSHs(&PL_sv_undef);
1873 sv_setpv(TARG, stashname);
1882 PUSHs(&PL_sv_undef);
1884 mPUSHs(newSVpv(stashname, 0));
1885 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1886 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1889 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1890 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1891 /* So is ccstack[dbcxix]. */
1893 SV * const sv = newSV(0);
1894 gv_efullname3(sv, cvgv, NULL);
1896 PUSHs(boolSV(CxHASARGS(cx)));
1899 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1900 PUSHs(boolSV(CxHASARGS(cx)));
1904 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1907 gimme = (I32)cx->blk_gimme;
1908 if (gimme == G_VOID)
1909 PUSHs(&PL_sv_undef);
1911 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1912 if (CxTYPE(cx) == CXt_EVAL) {
1914 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1915 PUSHs(cx->blk_eval.cur_text);
1919 else if (cx->blk_eval.old_namesv) {
1920 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1923 /* eval BLOCK (try blocks have old_namesv == 0) */
1925 PUSHs(&PL_sv_undef);
1926 PUSHs(&PL_sv_undef);
1930 PUSHs(&PL_sv_undef);
1931 PUSHs(&PL_sv_undef);
1933 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1934 && CopSTASH_eq(PL_curcop, PL_debstash))
1936 AV * const ary = cx->blk_sub.argarray;
1937 const int off = AvARRAY(ary) - AvALLOC(ary);
1940 Perl_init_dbargs(aTHX);
1942 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1943 av_extend(PL_dbargs, AvFILLp(ary) + off);
1944 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1945 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1947 /* XXX only hints propagated via op_private are currently
1948 * visible (others are not easily accessible, since they
1949 * use the global PL_hints) */
1950 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1953 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1955 if (old_warnings == pWARN_NONE ||
1956 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1957 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1958 else if (old_warnings == pWARN_ALL ||
1959 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1960 /* Get the bit mask for $warnings::Bits{all}, because
1961 * it could have been extended by warnings::register */
1963 HV * const bits = get_hv("warnings::Bits", 0);
1964 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1965 mask = newSVsv(*bits_all);
1968 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1972 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1976 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1977 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1986 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1987 sv_reset(tmps, CopSTASH(PL_curcop));
1992 /* like pp_nextstate, but used instead when the debugger is active */
1997 PL_curcop = (COP*)PL_op;
1998 TAINT_NOT; /* Each statement is presumed innocent */
1999 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2004 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2005 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2008 register PERL_CONTEXT *cx;
2009 const I32 gimme = G_ARRAY;
2011 GV * const gv = PL_DBgv;
2012 register CV * const cv = GvCV(gv);
2015 DIE(aTHX_ "No DB::DB routine defined");
2017 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2018 /* don't do recursive DB::DB call */
2033 (void)(*CvXSUB(cv))(aTHX_ cv);
2040 PUSHBLOCK(cx, CXt_SUB, SP);
2042 cx->blk_sub.retop = PL_op->op_next;
2045 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2046 RETURNOP(CvSTART(cv));
2054 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2056 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2058 if (gimme == G_SCALAR) {
2060 *++newsp = (SvFLAGS(*SP) & flags) ? *SP : sv_mortalcopy(*SP);
2062 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2065 *++MARK = &PL_sv_undef;
2069 else if (gimme == G_ARRAY) {
2070 /* in case LEAVE wipes old return values */
2071 while (++MARK <= SP) {
2072 if (SvFLAGS(*MARK) & flags)
2075 *++newsp = sv_mortalcopy(*MARK);
2076 TAINT_NOT; /* Each item is independent */
2079 /* When this function was called with MARK == newsp, we reach this
2080 * point with SP == newsp. */
2089 register PERL_CONTEXT *cx;
2090 I32 gimme = GIMME_V;
2092 ENTER_with_name("block");
2095 PUSHBLOCK(cx, CXt_BLOCK, SP);
2103 register PERL_CONTEXT *cx;
2108 if (PL_op->op_flags & OPf_SPECIAL) {
2109 cx = &cxstack[cxstack_ix];
2110 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2115 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2118 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2119 PL_curpm = newpm; /* Don't pop $1 et al till now */
2121 LEAVE_with_name("block");
2129 register PERL_CONTEXT *cx;
2130 const I32 gimme = GIMME_V;
2131 void *itervar; /* location of the iteration variable */
2132 U8 cxtype = CXt_LOOP_FOR;
2134 ENTER_with_name("loop1");
2137 if (PL_op->op_targ) { /* "my" variable */
2138 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2139 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2140 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2141 SVs_PADSTALE, SVs_PADSTALE);
2143 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2145 itervar = PL_comppad;
2147 itervar = &PAD_SVl(PL_op->op_targ);
2150 else { /* symbol table variable */
2151 GV * const gv = MUTABLE_GV(POPs);
2152 SV** svp = &GvSV(gv);
2153 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2155 itervar = (void *)gv;
2158 if (PL_op->op_private & OPpITER_DEF)
2159 cxtype |= CXp_FOR_DEF;
2161 ENTER_with_name("loop2");
2163 PUSHBLOCK(cx, cxtype, SP);
2164 PUSHLOOP_FOR(cx, itervar, MARK);
2165 if (PL_op->op_flags & OPf_STACKED) {
2166 SV *maybe_ary = POPs;
2167 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2169 SV * const right = maybe_ary;
2172 if (RANGE_IS_NUMERIC(sv,right)) {
2173 cx->cx_type &= ~CXTYPEMASK;
2174 cx->cx_type |= CXt_LOOP_LAZYIV;
2175 /* Make sure that no-one re-orders cop.h and breaks our
2177 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2178 #ifdef NV_PRESERVES_UV
2179 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2180 (SvNV(sv) > (NV)IV_MAX)))
2182 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2183 (SvNV(right) < (NV)IV_MIN))))
2185 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2188 ((SvUV(sv) > (UV)IV_MAX) ||
2189 (SvNV(sv) > (NV)UV_MAX)))))
2191 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2193 ((SvNV(right) > 0) &&
2194 ((SvUV(right) > (UV)IV_MAX) ||
2195 (SvNV(right) > (NV)UV_MAX))))))
2197 DIE(aTHX_ "Range iterator outside integer range");
2198 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2199 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2201 /* for correct -Dstv display */
2202 cx->blk_oldsp = sp - PL_stack_base;
2206 cx->cx_type &= ~CXTYPEMASK;
2207 cx->cx_type |= CXt_LOOP_LAZYSV;
2208 /* Make sure that no-one re-orders cop.h and breaks our
2210 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2211 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2212 cx->blk_loop.state_u.lazysv.end = right;
2213 SvREFCNT_inc(right);
2214 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2215 /* This will do the upgrade to SVt_PV, and warn if the value
2216 is uninitialised. */
2217 (void) SvPV_nolen_const(right);
2218 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2219 to replace !SvOK() with a pointer to "". */
2221 SvREFCNT_dec(right);
2222 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2226 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2227 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2228 SvREFCNT_inc(maybe_ary);
2229 cx->blk_loop.state_u.ary.ix =
2230 (PL_op->op_private & OPpITER_REVERSED) ?
2231 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2235 else { /* iterating over items on the stack */
2236 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2237 if (PL_op->op_private & OPpITER_REVERSED) {
2238 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2241 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2251 register PERL_CONTEXT *cx;
2252 const I32 gimme = GIMME_V;
2254 ENTER_with_name("loop1");
2256 ENTER_with_name("loop2");
2258 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2259 PUSHLOOP_PLAIN(cx, SP);
2267 register PERL_CONTEXT *cx;
2274 assert(CxTYPE_is_LOOP(cx));
2276 newsp = PL_stack_base + cx->blk_loop.resetsp;
2279 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2282 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2283 PL_curpm = newpm; /* ... and pop $1 et al */
2285 LEAVE_with_name("loop2");
2286 LEAVE_with_name("loop1");
2292 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2293 PERL_CONTEXT *cx, PMOP *newpm)
2295 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2296 if (gimme == G_SCALAR) {
2297 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2300 assert(MARK+1 == SP);
2301 if ((SvPADTMP(TOPs) ||
2302 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2305 !SvSMAGICAL(TOPs)) {
2312 "Can't return %s from lvalue subroutine",
2313 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2314 : "a readonly value" : "a temporary");
2316 else { /* Can be a localized value
2317 EXTEND_MORTAL(1); * subject to deletion. */
2318 PL_tmps_stack[++PL_tmps_ix] = *SP;
2319 SvREFCNT_inc_void(*SP);
2324 /* sub:lvalue{} will take us here. */
2331 /* diag_listed_as: Can't return %s from lvalue subroutine*/
2332 "Can't return undef from lvalue subroutine"
2336 else if (MARK < SP) {
2337 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2338 *++newsp = SvREFCNT_inc(*SP);
2345 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2350 *++newsp = &PL_sv_undef;
2352 if (CxLVAL(cx) & OPpENTERSUB_DEREF) {
2356 if (cx->blk_sub.retop->op_type == OP_RV2SV)
2357 deref_type = OPpDEREF_SV;
2358 else if (cx->blk_sub.retop->op_type == OP_RV2AV)
2359 deref_type = OPpDEREF_AV;
2361 assert(cx->blk_sub.retop->op_type == OP_RV2HV);
2362 deref_type = OPpDEREF_HV;
2364 vivify_ref(TOPs, deref_type);
2368 else if (gimme == G_ARRAY) {
2369 assert (!(CxLVAL(cx) & OPpENTERSUB_DEREF));
2370 if (ref || !CxLVAL(cx))
2371 while (++MARK <= SP)
2375 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2376 ? sv_mortalcopy(*MARK)
2377 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2378 else while (++MARK <= SP) {
2379 if (*MARK != &PL_sv_undef
2381 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2386 /* Might be flattened array after $#array = */
2394 "Can't return a %s from lvalue subroutine",
2395 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2401 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2404 PL_stack_sp = newsp;
2410 register PERL_CONTEXT *cx;
2411 bool popsub2 = FALSE;
2412 bool clear_errsv = FALSE;
2414 bool gmagic = FALSE;
2423 const I32 cxix = dopoptosub(cxstack_ix);
2426 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2427 * sort block, which is a CXt_NULL
2430 PL_stack_base[1] = *PL_stack_sp;
2431 PL_stack_sp = PL_stack_base + 1;
2435 DIE(aTHX_ "Can't return outside a subroutine");
2437 if (cxix < cxstack_ix)
2440 if (CxMULTICALL(&cxstack[cxix])) {
2441 gimme = cxstack[cxix].blk_gimme;
2442 if (gimme == G_VOID)
2443 PL_stack_sp = PL_stack_base;
2444 else if (gimme == G_SCALAR) {
2445 PL_stack_base[1] = *PL_stack_sp;
2446 PL_stack_sp = PL_stack_base + 1;
2452 switch (CxTYPE(cx)) {
2455 lval = !!CvLVALUE(cx->blk_sub.cv);
2456 retop = cx->blk_sub.retop;
2457 gmagic = CxLVAL(cx) & OPpENTERSUB_DEREF;
2458 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2461 if (!(PL_in_eval & EVAL_KEEPERR))
2464 namesv = cx->blk_eval.old_namesv;
2465 retop = cx->blk_eval.retop;
2468 if (optype == OP_REQUIRE &&
2469 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2471 /* Unassume the success we assumed earlier. */
2472 (void)hv_delete(GvHVn(PL_incgv),
2473 SvPVX_const(namesv), SvCUR(namesv),
2475 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2480 retop = cx->blk_sub.retop;
2483 DIE(aTHX_ "panic: return");
2487 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2489 if (gimme == G_SCALAR) {
2492 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2493 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2494 *++newsp = SvREFCNT_inc(*SP);
2499 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2501 *++newsp = sv_mortalcopy(sv);
2503 if (gmagic) SvGETMAGIC(sv);
2506 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2508 if (gmagic) SvGETMAGIC(*SP);
2511 *++newsp = sv_mortalcopy(*SP);
2514 *++newsp = sv_mortalcopy(*SP);
2517 *++newsp = &PL_sv_undef;
2519 else if (gimme == G_ARRAY) {
2520 while (++MARK <= SP) {
2521 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2522 ? *MARK : sv_mortalcopy(*MARK);
2523 TAINT_NOT; /* Each item is independent */
2526 PL_stack_sp = newsp;
2530 /* Stack values are safe: */
2533 POPSUB(cx,sv); /* release CV and @_ ... */
2537 PL_curpm = newpm; /* ... and pop $1 et al */
2546 /* This duplicates parts of pp_leavesub, so that it can share code with
2554 register PERL_CONTEXT *cx;
2557 if (CxMULTICALL(&cxstack[cxstack_ix]))
2561 cxstack_ix++; /* temporarily protect top context */
2562 assert(CvLVALUE(cx->blk_sub.cv));
2566 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2570 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2571 PL_curpm = newpm; /* ... and pop $1 et al */
2574 return cx->blk_sub.retop;
2581 register PERL_CONTEXT *cx;
2592 if (PL_op->op_flags & OPf_SPECIAL) {
2593 cxix = dopoptoloop(cxstack_ix);
2595 DIE(aTHX_ "Can't \"last\" outside a loop block");
2598 cxix = dopoptolabel(cPVOP->op_pv);
2600 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2602 if (cxix < cxstack_ix)
2606 cxstack_ix++; /* temporarily protect top context */
2608 switch (CxTYPE(cx)) {
2609 case CXt_LOOP_LAZYIV:
2610 case CXt_LOOP_LAZYSV:
2612 case CXt_LOOP_PLAIN:
2614 newsp = PL_stack_base + cx->blk_loop.resetsp;
2615 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2619 nextop = cx->blk_sub.retop;
2623 nextop = cx->blk_eval.retop;
2627 nextop = cx->blk_sub.retop;
2630 DIE(aTHX_ "panic: last");
2634 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2635 pop2 == CXt_SUB ? SVs_TEMP : 0);
2640 /* Stack values are safe: */
2642 case CXt_LOOP_LAZYIV:
2643 case CXt_LOOP_PLAIN:
2644 case CXt_LOOP_LAZYSV:
2646 POPLOOP(cx); /* release loop vars ... */
2650 POPSUB(cx,sv); /* release CV and @_ ... */
2653 PL_curpm = newpm; /* ... and pop $1 et al */
2656 PERL_UNUSED_VAR(optype);
2657 PERL_UNUSED_VAR(gimme);
2665 register PERL_CONTEXT *cx;
2668 if (PL_op->op_flags & OPf_SPECIAL) {
2669 cxix = dopoptoloop(cxstack_ix);
2671 DIE(aTHX_ "Can't \"next\" outside a loop block");
2674 cxix = dopoptolabel(cPVOP->op_pv);
2676 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2678 if (cxix < cxstack_ix)
2681 /* clear off anything above the scope we're re-entering, but
2682 * save the rest until after a possible continue block */
2683 inner = PL_scopestack_ix;
2685 if (PL_scopestack_ix < inner)
2686 leave_scope(PL_scopestack[PL_scopestack_ix]);
2687 PL_curcop = cx->blk_oldcop;
2688 return (cx)->blk_loop.my_op->op_nextop;
2695 register PERL_CONTEXT *cx;
2699 if (PL_op->op_flags & OPf_SPECIAL) {
2700 cxix = dopoptoloop(cxstack_ix);
2702 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2705 cxix = dopoptolabel(cPVOP->op_pv);
2707 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2709 if (cxix < cxstack_ix)
2712 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2713 if (redo_op->op_type == OP_ENTER) {
2714 /* pop one less context to avoid $x being freed in while (my $x..) */
2716 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2717 redo_op = redo_op->op_next;
2721 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2722 LEAVE_SCOPE(oldsave);
2724 PL_curcop = cx->blk_oldcop;
2729 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2733 static const char too_deep[] = "Target of goto is too deeply nested";
2735 PERL_ARGS_ASSERT_DOFINDLABEL;
2738 Perl_croak(aTHX_ too_deep);
2739 if (o->op_type == OP_LEAVE ||
2740 o->op_type == OP_SCOPE ||
2741 o->op_type == OP_LEAVELOOP ||
2742 o->op_type == OP_LEAVESUB ||
2743 o->op_type == OP_LEAVETRY)
2745 *ops++ = cUNOPo->op_first;
2747 Perl_croak(aTHX_ too_deep);
2750 if (o->op_flags & OPf_KIDS) {
2752 /* First try all the kids at this level, since that's likeliest. */
2753 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2754 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2755 const char *kid_label = CopLABEL(kCOP);
2756 if (kid_label && strEQ(kid_label, label))
2760 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2761 if (kid == PL_lastgotoprobe)
2763 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2766 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2767 ops[-1]->op_type == OP_DBSTATE)
2772 if ((o = dofindlabel(kid, label, ops, oplimit)))
2785 register PERL_CONTEXT *cx;
2786 #define GOTO_DEPTH 64
2787 OP *enterops[GOTO_DEPTH];
2788 const char *label = NULL;
2789 const bool do_dump = (PL_op->op_type == OP_DUMP);
2790 static const char must_have_label[] = "goto must have label";
2792 if (PL_op->op_flags & OPf_STACKED) {
2793 SV * const sv = POPs;
2795 /* This egregious kludge implements goto &subroutine */
2796 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2798 register PERL_CONTEXT *cx;
2799 CV *cv = MUTABLE_CV(SvRV(sv));
2806 if (!CvROOT(cv) && !CvXSUB(cv)) {
2807 const GV * const gv = CvGV(cv);
2811 /* autoloaded stub? */
2812 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2814 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2815 GvNAMELEN(gv), FALSE);
2816 if (autogv && (cv = GvCV(autogv)))
2818 tmpstr = sv_newmortal();
2819 gv_efullname3(tmpstr, gv, NULL);
2820 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2822 DIE(aTHX_ "Goto undefined subroutine");
2825 /* First do some returnish stuff. */
2826 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2828 cxix = dopoptosub(cxstack_ix);
2830 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2831 if (cxix < cxstack_ix)
2835 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2836 if (CxTYPE(cx) == CXt_EVAL) {
2838 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2840 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2842 else if (CxMULTICALL(cx))
2843 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2844 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2845 /* put @_ back onto stack */
2846 AV* av = cx->blk_sub.argarray;
2848 items = AvFILLp(av) + 1;
2849 EXTEND(SP, items+1); /* @_ could have been extended. */
2850 Copy(AvARRAY(av), SP + 1, items, SV*);
2851 SvREFCNT_dec(GvAV(PL_defgv));
2852 GvAV(PL_defgv) = cx->blk_sub.savearray;
2854 /* abandon @_ if it got reified */
2859 av_extend(av, items-1);
2861 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2864 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2865 AV* const av = GvAV(PL_defgv);
2866 items = AvFILLp(av) + 1;
2867 EXTEND(SP, items+1); /* @_ could have been extended. */
2868 Copy(AvARRAY(av), SP + 1, items, SV*);
2872 if (CxTYPE(cx) == CXt_SUB &&
2873 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2874 SvREFCNT_dec(cx->blk_sub.cv);
2875 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2876 LEAVE_SCOPE(oldsave);
2878 /* Now do some callish stuff. */
2880 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2882 OP* const retop = cx->blk_sub.retop;
2883 SV **newsp __attribute__unused__;
2884 I32 gimme __attribute__unused__;
2887 for (index=0; index<items; index++)
2888 sv_2mortal(SP[-index]);
2891 /* XS subs don't have a CxSUB, so pop it */
2892 POPBLOCK(cx, PL_curpm);
2893 /* Push a mark for the start of arglist */
2896 (void)(*CvXSUB(cv))(aTHX_ cv);
2901 AV* const padlist = CvPADLIST(cv);
2902 if (CxTYPE(cx) == CXt_EVAL) {
2903 PL_in_eval = CxOLD_IN_EVAL(cx);
2904 PL_eval_root = cx->blk_eval.old_eval_root;
2905 cx->cx_type = CXt_SUB;
2907 cx->blk_sub.cv = cv;
2908 cx->blk_sub.olddepth = CvDEPTH(cv);
2911 if (CvDEPTH(cv) < 2)
2912 SvREFCNT_inc_simple_void_NN(cv);
2914 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2915 sub_crush_depth(cv);
2916 pad_push(padlist, CvDEPTH(cv));
2919 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2922 AV *const av = MUTABLE_AV(PAD_SVl(0));
2924 cx->blk_sub.savearray = GvAV(PL_defgv);
2925 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2926 CX_CURPAD_SAVE(cx->blk_sub);
2927 cx->blk_sub.argarray = av;
2929 if (items >= AvMAX(av) + 1) {
2930 SV **ary = AvALLOC(av);
2931 if (AvARRAY(av) != ary) {
2932 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2935 if (items >= AvMAX(av) + 1) {
2936 AvMAX(av) = items - 1;
2937 Renew(ary,items+1,SV*);
2943 Copy(mark,AvARRAY(av),items,SV*);
2944 AvFILLp(av) = items - 1;
2945 assert(!AvREAL(av));
2947 /* transfer 'ownership' of refcnts to new @_ */
2957 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2958 Perl_get_db_sub(aTHX_ NULL, cv);
2960 CV * const gotocv = get_cvs("DB::goto", 0);
2962 PUSHMARK( PL_stack_sp );
2963 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2968 RETURNOP(CvSTART(cv));
2972 label = SvPV_nolen_const(sv);
2973 if (!(do_dump || *label))
2974 DIE(aTHX_ must_have_label);
2977 else if (PL_op->op_flags & OPf_SPECIAL) {
2979 DIE(aTHX_ must_have_label);
2982 label = cPVOP->op_pv;
2986 if (label && *label) {
2987 OP *gotoprobe = NULL;
2988 bool leaving_eval = FALSE;
2989 bool in_block = FALSE;
2990 PERL_CONTEXT *last_eval_cx = NULL;
2994 PL_lastgotoprobe = NULL;
2996 for (ix = cxstack_ix; ix >= 0; ix--) {
2998 switch (CxTYPE(cx)) {
3000 leaving_eval = TRUE;
3001 if (!CxTRYBLOCK(cx)) {
3002 gotoprobe = (last_eval_cx ?
3003 last_eval_cx->blk_eval.old_eval_root :
3008 /* else fall through */
3009 case CXt_LOOP_LAZYIV:
3010 case CXt_LOOP_LAZYSV:
3012 case CXt_LOOP_PLAIN:
3015 gotoprobe = cx->blk_oldcop->op_sibling;
3021 gotoprobe = cx->blk_oldcop->op_sibling;
3024 gotoprobe = PL_main_root;
3027 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3028 gotoprobe = CvROOT(cx->blk_sub.cv);
3034 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3037 DIE(aTHX_ "panic: goto");
3038 gotoprobe = PL_main_root;
3042 retop = dofindlabel(gotoprobe, label,
3043 enterops, enterops + GOTO_DEPTH);
3046 if (gotoprobe->op_sibling &&
3047 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3048 gotoprobe->op_sibling->op_sibling) {
3049 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3050 label, enterops, enterops + GOTO_DEPTH);
3055 PL_lastgotoprobe = gotoprobe;
3058 DIE(aTHX_ "Can't find label %s", label);
3060 /* if we're leaving an eval, check before we pop any frames
3061 that we're not going to punt, otherwise the error
3064 if (leaving_eval && *enterops && enterops[1]) {
3066 for (i = 1; enterops[i]; i++)
3067 if (enterops[i]->op_type == OP_ENTERITER)
3068 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3071 if (*enterops && enterops[1]) {
3072 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3074 deprecate("\"goto\" to jump into a construct");
3077 /* pop unwanted frames */
3079 if (ix < cxstack_ix) {
3086 oldsave = PL_scopestack[PL_scopestack_ix];
3087 LEAVE_SCOPE(oldsave);
3090 /* push wanted frames */
3092 if (*enterops && enterops[1]) {
3093 OP * const oldop = PL_op;
3094 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3095 for (; enterops[ix]; ix++) {
3096 PL_op = enterops[ix];
3097 /* Eventually we may want to stack the needed arguments
3098 * for each op. For now, we punt on the hard ones. */
3099 if (PL_op->op_type == OP_ENTERITER)
3100 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3101 PL_op->op_ppaddr(aTHX);
3109 if (!retop) retop = PL_main_start;
3111 PL_restartop = retop;
3112 PL_do_undump = TRUE;
3116 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3117 PL_do_undump = FALSE;
3134 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3136 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3139 PL_exit_flags |= PERL_EXIT_EXPECTED;
3141 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3142 if (anum || !(PL_minus_c && PL_madskills))
3147 PUSHs(&PL_sv_undef);
3154 S_save_lines(pTHX_ AV *array, SV *sv)
3156 const char *s = SvPVX_const(sv);
3157 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3160 PERL_ARGS_ASSERT_SAVE_LINES;
3162 while (s && s < send) {
3164 SV * const tmpstr = newSV_type(SVt_PVMG);
3166 t = (const char *)memchr(s, '\n', send - s);
3172 sv_setpvn(tmpstr, s, t - s);
3173 av_store(array, line++, tmpstr);
3181 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3183 0 is used as continue inside eval,
3185 3 is used for a die caught by an inner eval - continue inner loop
3187 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3188 establish a local jmpenv to handle exception traps.
3193 S_docatch(pTHX_ OP *o)
3197 OP * const oldop = PL_op;
3201 assert(CATCH_GET == TRUE);
3208 assert(cxstack_ix >= 0);
3209 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3210 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3215 /* die caught by an inner eval - continue inner loop */
3216 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3217 PL_restartjmpenv = NULL;
3218 PL_op = PL_restartop;
3234 /* James Bond: Do you expect me to talk?
3235 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3237 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3238 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3240 Currently it is not used outside the core code. Best if it stays that way.
3242 Hence it's now deprecated, and will be removed.
3245 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3246 /* sv Text to convert to OP tree. */
3247 /* startop op_free() this to undo. */
3248 /* code Short string id of the caller. */
3250 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3251 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3254 /* Don't use this. It will go away without warning once the regexp engine is
3255 refactored not to use it. */
3257 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3260 dVAR; dSP; /* Make POPBLOCK work. */
3266 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3267 char *tmpbuf = tbuf;
3270 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3274 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3276 ENTER_with_name("eval");
3277 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3279 /* switch to eval mode */
3281 if (IN_PERL_COMPILETIME) {
3282 SAVECOPSTASH_FREE(&PL_compiling);
3283 CopSTASH_set(&PL_compiling, PL_curstash);
3285 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3286 SV * const sv = sv_newmortal();
3287 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3288 code, (unsigned long)++PL_evalseq,
3289 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3294 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3295 (unsigned long)++PL_evalseq);
3296 SAVECOPFILE_FREE(&PL_compiling);
3297 CopFILE_set(&PL_compiling, tmpbuf+2);
3298 SAVECOPLINE(&PL_compiling);
3299 CopLINE_set(&PL_compiling, 1);
3300 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3301 deleting the eval's FILEGV from the stash before gv_check() runs
3302 (i.e. before run-time proper). To work around the coredump that
3303 ensues, we always turn GvMULTI_on for any globals that were
3304 introduced within evals. See force_ident(). GSAR 96-10-12 */
3305 safestr = savepvn(tmpbuf, len);
3306 SAVEDELETE(PL_defstash, safestr, len);
3308 #ifdef OP_IN_REGISTER
3314 /* we get here either during compilation, or via pp_regcomp at runtime */
3315 runtime = IN_PERL_RUNTIME;
3318 runcv = find_runcv(NULL);
3320 /* At run time, we have to fetch the hints from PL_curcop. */
3321 PL_hints = PL_curcop->cop_hints;
3322 if (PL_hints & HINT_LOCALIZE_HH) {
3323 /* SAVEHINTS created a new HV in PL_hintgv, which we
3325 SvREFCNT_dec(GvHV(PL_hintgv));
3327 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3328 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3330 SAVECOMPILEWARNINGS();
3331 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3332 cophh_free(CopHINTHASH_get(&PL_compiling));
3333 /* XXX Does this need to avoid copying a label? */
3334 PL_compiling.cop_hints_hash
3335 = cophh_copy(PL_curcop->cop_hints_hash);
3339 PL_op->op_type = OP_ENTEREVAL;
3340 PL_op->op_flags = 0; /* Avoid uninit warning. */
3341 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3343 need_catch = CATCH_GET;
3347 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3349 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3350 CATCH_SET(need_catch);
3351 POPBLOCK(cx,PL_curpm);
3354 (*startop)->op_type = OP_NULL;
3355 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3356 /* XXX DAPM do this properly one year */
3357 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3358 LEAVE_with_name("eval");
3359 if (IN_PERL_COMPILETIME)
3360 CopHINTS_set(&PL_compiling, PL_hints);
3361 #ifdef OP_IN_REGISTER
3364 PERL_UNUSED_VAR(newsp);
3365 PERL_UNUSED_VAR(optype);
3367 return PL_eval_start;
3372 =for apidoc find_runcv
3374 Locate the CV corresponding to the currently executing sub or eval.
3375 If db_seqp is non_null, skip CVs that are in the DB package and populate
3376 *db_seqp with the cop sequence number at the point that the DB:: code was
3377 entered. (allows debuggers to eval in the scope of the breakpoint rather
3378 than in the scope of the debugger itself).
3384 Perl_find_runcv(pTHX_ U32 *db_seqp)
3390 *db_seqp = PL_curcop->cop_seq;
3391 for (si = PL_curstackinfo; si; si = si->si_prev) {
3393 for (ix = si->si_cxix; ix >= 0; ix--) {
3394 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3395 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3396 CV * const cv = cx->blk_sub.cv;
3397 /* skip DB:: code */
3398 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3399 *db_seqp = cx->blk_oldcop->cop_seq;
3404 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3412 /* Run yyparse() in a setjmp wrapper. Returns:
3413 * 0: yyparse() successful
3414 * 1: yyparse() failed
3418 S_try_yyparse(pTHX_ int gramtype)
3423 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3427 ret = yyparse(gramtype) ? 1 : 0;
3441 /* Compile a require/do, an eval '', or a /(?{...})/.
3442 * In the last case, startop is non-null, and contains the address of
3443 * a pointer that should be set to the just-compiled code.
3444 * outside is the lexically enclosing CV (if any) that invoked us.
3445 * Returns a bool indicating whether the compile was successful; if so,
3446 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3447 * pushes undef (also croaks if startop != NULL).
3451 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3454 OP * const saveop = PL_op;
3455 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3458 PL_in_eval = (in_require
3459 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3464 SAVESPTR(PL_compcv);
3465 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3466 CvEVAL_on(PL_compcv);
3467 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3468 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3470 CvOUTSIDE_SEQ(PL_compcv) = seq;
3471 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3473 /* set up a scratch pad */
3475 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3476 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3480 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3482 /* make sure we compile in the right package */
3484 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3485 SAVESPTR(PL_curstash);
3486 PL_curstash = CopSTASH(PL_curcop);
3488 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3489 SAVESPTR(PL_beginav);
3490 PL_beginav = newAV();
3491 SAVEFREESV(PL_beginav);
3492 SAVESPTR(PL_unitcheckav);
3493 PL_unitcheckav = newAV();
3494 SAVEFREESV(PL_unitcheckav);
3497 SAVEBOOL(PL_madskills);
3501 /* try to compile it */
3503 PL_eval_root = NULL;
3504 PL_curcop = &PL_compiling;
3505 CopARYBASE_set(PL_curcop, 0);
3506 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3507 PL_in_eval |= EVAL_KEEPERR;
3511 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3513 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3514 * so honour CATCH_GET and trap it here if necessary */
3516 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3518 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3519 SV **newsp; /* Used by POPBLOCK. */
3520 PERL_CONTEXT *cx = NULL;
3521 I32 optype; /* Used by POPEVAL. */
3525 PERL_UNUSED_VAR(newsp);
3526 PERL_UNUSED_VAR(optype);
3528 /* note that if yystatus == 3, then the EVAL CX block has already
3529 * been popped, and various vars restored */
3531 if (yystatus != 3) {
3533 op_free(PL_eval_root);
3534 PL_eval_root = NULL;
3536 SP = PL_stack_base + POPMARK; /* pop original mark */
3538 POPBLOCK(cx,PL_curpm);
3540 namesv = cx->blk_eval.old_namesv;
3544 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3546 msg = SvPVx_nolen_const(ERRSV);
3549 /* If cx is still NULL, it means that we didn't go in the
3550 * POPEVAL branch. */
3551 cx = &cxstack[cxstack_ix];
3552 assert(CxTYPE(cx) == CXt_EVAL);
3553 namesv = cx->blk_eval.old_namesv;
3555 (void)hv_store(GvHVn(PL_incgv),
3556 SvPVX_const(namesv), SvCUR(namesv),
3558 Perl_croak(aTHX_ "%sCompilation failed in require",
3559 *msg ? msg : "Unknown error\n");
3562 if (yystatus != 3) {
3563 POPBLOCK(cx,PL_curpm);
3566 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3567 (*msg ? msg : "Unknown error\n"));
3571 sv_setpvs(ERRSV, "Compilation error");
3574 PUSHs(&PL_sv_undef);
3578 CopLINE_set(&PL_compiling, 0);
3580 *startop = PL_eval_root;
3582 SAVEFREEOP(PL_eval_root);
3584 /* Set the context for this new optree.
3585 * Propagate the context from the eval(). */
3586 if ((gimme & G_WANT) == G_VOID)
3587 scalarvoid(PL_eval_root);
3588 else if ((gimme & G_WANT) == G_ARRAY)
3591 scalar(PL_eval_root);
3593 DEBUG_x(dump_eval());
3595 /* Register with debugger: */
3596 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3597 CV * const cv = get_cvs("DB::postponed", 0);
3601 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3603 call_sv(MUTABLE_SV(cv), G_DISCARD);
3607 if (PL_unitcheckav) {
3608 OP *es = PL_eval_start;
3609 call_list(PL_scopestack_ix, PL_unitcheckav);
3613 /* compiled okay, so do it */
3615 CvDEPTH(PL_compcv) = 1;
3616 SP = PL_stack_base + POPMARK; /* pop original mark */
3617 PL_op = saveop; /* The caller may need it. */
3618 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3625 S_check_type_and_open(pTHX_ SV *name)
3628 const char *p = SvPV_nolen_const(name);
3629 const int st_rc = PerlLIO_stat(p, &st);
3631 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3633 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3637 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3638 return PerlIO_openn(aTHX_ NULL, PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3640 return PerlIO_open(p, PERL_SCRIPT_MODE);
3644 #ifndef PERL_DISABLE_PMC
3646 S_doopen_pm(pTHX_ SV *name)
3649 const char *p = SvPV_const(name, namelen);
3651 PERL_ARGS_ASSERT_DOOPEN_PM;
3653 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3654 SV *const pmcsv = sv_newmortal();
3657 SvSetSV_nosteal(pmcsv,name);
3658 sv_catpvn(pmcsv, "c", 1);
3660 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3661 return check_type_and_open(pmcsv);
3663 return check_type_and_open(name);
3666 # define doopen_pm(name) check_type_and_open(name)
3667 #endif /* !PERL_DISABLE_PMC */
3672 register PERL_CONTEXT *cx;
3679 int vms_unixname = 0;
3681 const char *tryname = NULL;
3683 const I32 gimme = GIMME_V;
3684 int filter_has_file = 0;
3685 PerlIO *tryrsfp = NULL;
3686 SV *filter_cache = NULL;
3687 SV *filter_state = NULL;
3688 SV *filter_sub = NULL;
3694 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3695 sv = sv_2mortal(new_version(sv));
3696 if (!sv_derived_from(PL_patchlevel, "version"))
3697 upg_version(PL_patchlevel, TRUE);
3698 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3699 if ( vcmp(sv,PL_patchlevel) <= 0 )
3700 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3701 SVfARG(sv_2mortal(vnormal(sv))),
3702 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3706 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3709 SV * const req = SvRV(sv);
3710 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3712 /* get the left hand term */
3713 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3715 first = SvIV(*av_fetch(lav,0,0));
3716 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3717 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3718 || av_len(lav) > 1 /* FP with > 3 digits */
3719 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3721 DIE(aTHX_ "Perl %"SVf" required--this is only "
3723 SVfARG(sv_2mortal(vnormal(req))),
3724 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3727 else { /* probably 'use 5.10' or 'use 5.8' */
3732 second = SvIV(*av_fetch(lav,1,0));
3734 second /= second >= 600 ? 100 : 10;
3735 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3736 (int)first, (int)second);
3737 upg_version(hintsv, TRUE);
3739 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3740 "--this is only %"SVf", stopped",
3741 SVfARG(sv_2mortal(vnormal(req))),
3742 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3743 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3751 name = SvPV_const(sv, len);
3752 if (!(name && len > 0 && *name))
3753 DIE(aTHX_ "Null filename used");
3754 TAINT_PROPER("require");
3758 /* The key in the %ENV hash is in the syntax of file passed as the argument
3759 * usually this is in UNIX format, but sometimes in VMS format, which
3760 * can result in a module being pulled in more than once.
3761 * To prevent this, the key must be stored in UNIX format if the VMS
3762 * name can be translated to UNIX.
3764 if ((unixname = tounixspec(name, NULL)) != NULL) {
3765 unixlen = strlen(unixname);
3771 /* if not VMS or VMS name can not be translated to UNIX, pass it
3774 unixname = (char *) name;
3777 if (PL_op->op_type == OP_REQUIRE) {
3778 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3779 unixname, unixlen, 0);
3781 if (*svp != &PL_sv_undef)
3784 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3785 "Compilation failed in require", unixname);
3789 /* prepare to compile file */
3791 if (path_is_absolute(name)) {
3792 /* At this point, name is SvPVX(sv) */
3794 tryrsfp = doopen_pm(sv);
3797 AV * const ar = GvAVn(PL_incgv);
3803 namesv = newSV_type(SVt_PV);
3804 for (i = 0; i <= AvFILL(ar); i++) {
3805 SV * const dirsv = *av_fetch(ar, i, TRUE);
3807 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3814 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3815 && !sv_isobject(loader))
3817 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3820 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3821 PTR2UV(SvRV(dirsv)), name);
3822 tryname = SvPVX_const(namesv);
3825 ENTER_with_name("call_INC");
3833 if (sv_isobject(loader))
3834 count = call_method("INC", G_ARRAY);
3836 count = call_sv(loader, G_ARRAY);
3846 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3847 && !isGV_with_GP(SvRV(arg))) {
3848 filter_cache = SvRV(arg);
3849 SvREFCNT_inc_simple_void_NN(filter_cache);
3856 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3860 if (isGV_with_GP(arg)) {
3861 IO * const io = GvIO((const GV *)arg);
3866 tryrsfp = IoIFP(io);
3867 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3868 PerlIO_close(IoOFP(io));
3879 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3881 SvREFCNT_inc_simple_void_NN(filter_sub);
3884 filter_state = SP[i];
3885 SvREFCNT_inc_simple_void(filter_state);
3889 if (!tryrsfp && (filter_cache || filter_sub)) {
3890 tryrsfp = PerlIO_open(BIT_BUCKET,
3898 LEAVE_with_name("call_INC");
3900 /* Adjust file name if the hook has set an %INC entry.
3901 This needs to happen after the FREETMPS above. */
3902 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3904 tryname = SvPV_nolen_const(*svp);
3911 filter_has_file = 0;
3913 SvREFCNT_dec(filter_cache);
3914 filter_cache = NULL;
3917 SvREFCNT_dec(filter_state);
3918 filter_state = NULL;
3921 SvREFCNT_dec(filter_sub);
3926 if (!path_is_absolute(name)
3932 dir = SvPV_const(dirsv, dirlen);
3940 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3942 sv_setpv(namesv, unixdir);
3943 sv_catpv(namesv, unixname);
3945 # ifdef __SYMBIAN32__
3946 if (PL_origfilename[0] &&
3947 PL_origfilename[1] == ':' &&
3948 !(dir[0] && dir[1] == ':'))
3949 Perl_sv_setpvf(aTHX_ namesv,
3954 Perl_sv_setpvf(aTHX_ namesv,
3958 /* The equivalent of
3959 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3960 but without the need to parse the format string, or
3961 call strlen on either pointer, and with the correct
3962 allocation up front. */
3964 char *tmp = SvGROW(namesv, dirlen + len + 2);
3966 memcpy(tmp, dir, dirlen);
3969 /* name came from an SV, so it will have a '\0' at the
3970 end that we can copy as part of this memcpy(). */
3971 memcpy(tmp, name, len + 1);
3973 SvCUR_set(namesv, dirlen + len + 1);
3978 TAINT_PROPER("require");
3979 tryname = SvPVX_const(namesv);
3980 tryrsfp = doopen_pm(namesv);
3982 if (tryname[0] == '.' && tryname[1] == '/') {
3984 while (*++tryname == '/');
3988 else if (errno == EMFILE)
3989 /* no point in trying other paths if out of handles */
3998 if (PL_op->op_type == OP_REQUIRE) {
3999 if(errno == EMFILE) {
4000 /* diag_listed_as: Can't locate %s */
4001 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4003 if (namesv) { /* did we lookup @INC? */
4004 AV * const ar = GvAVn(PL_incgv);
4006 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4007 for (i = 0; i <= AvFILL(ar); i++) {
4008 sv_catpvs(inc, " ");
4009 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4012 /* diag_listed_as: Can't locate %s */
4014 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4016 (memEQ(name + len - 2, ".h", 3)
4017 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4018 (memEQ(name + len - 3, ".ph", 4)
4019 ? " (did you run h2ph?)" : ""),
4024 DIE(aTHX_ "Can't locate %s", name);
4030 SETERRNO(0, SS_NORMAL);
4032 /* Assume success here to prevent recursive requirement. */
4033 /* name is never assigned to again, so len is still strlen(name) */
4034 /* Check whether a hook in @INC has already filled %INC */
4036 (void)hv_store(GvHVn(PL_incgv),
4037 unixname, unixlen, newSVpv(tryname,0),0);
4039 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4041 (void)hv_store(GvHVn(PL_incgv),
4042 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4045 ENTER_with_name("eval");
4047 SAVECOPFILE_FREE(&PL_compiling);
4048 CopFILE_set(&PL_compiling, tryname);
4049 lex_start(NULL, tryrsfp, 0);
4053 hv_clear(GvHV(PL_hintgv));
4055 SAVECOMPILEWARNINGS();
4056 if (PL_dowarn & G_WARN_ALL_ON)
4057 PL_compiling.cop_warnings = pWARN_ALL ;
4058 else if (PL_dowarn & G_WARN_ALL_OFF)
4059 PL_compiling.cop_warnings = pWARN_NONE ;
4061 PL_compiling.cop_warnings = pWARN_STD ;
4063 if (filter_sub || filter_cache) {
4064 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4065 than hanging another SV from it. In turn, filter_add() optionally
4066 takes the SV to use as the filter (or creates a new SV if passed
4067 NULL), so simply pass in whatever value filter_cache has. */
4068 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4069 IoLINES(datasv) = filter_has_file;
4070 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4071 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4074 /* switch to eval mode */
4075 PUSHBLOCK(cx, CXt_EVAL, SP);
4077 cx->blk_eval.retop = PL_op->op_next;
4079 SAVECOPLINE(&PL_compiling);
4080 CopLINE_set(&PL_compiling, 0);
4084 /* Store and reset encoding. */
4085 encoding = PL_encoding;
4088 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4089 op = DOCATCH(PL_eval_start);
4091 op = PL_op->op_next;
4093 /* Restore encoding. */
4094 PL_encoding = encoding;
4099 /* This is a op added to hold the hints hash for
4100 pp_entereval. The hash can be modified by the code
4101 being eval'ed, so we return a copy instead. */
4107 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4115 register PERL_CONTEXT *cx;
4117 const I32 gimme = GIMME_V;
4118 const U32 was = PL_breakable_sub_gen;
4119 char tbuf[TYPE_DIGITS(long) + 12];
4120 bool saved_delete = FALSE;
4121 char *tmpbuf = tbuf;
4125 HV *saved_hh = NULL;
4127 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4128 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4132 /* make sure we've got a plain PV (no overload etc) before testing
4133 * for taint. Making a copy here is probably overkill, but better
4134 * safe than sorry */
4136 const char * const p = SvPV_const(sv, len);
4138 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4141 TAINT_IF(SvTAINTED(sv));
4142 TAINT_PROPER("eval");
4144 ENTER_with_name("eval");
4145 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4148 /* switch to eval mode */
4150 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4151 SV * const temp_sv = sv_newmortal();
4152 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4153 (unsigned long)++PL_evalseq,
4154 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4155 tmpbuf = SvPVX(temp_sv);
4156 len = SvCUR(temp_sv);
4159 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4160 SAVECOPFILE_FREE(&PL_compiling);
4161 CopFILE_set(&PL_compiling, tmpbuf+2);
4162 SAVECOPLINE(&PL_compiling);
4163 CopLINE_set(&PL_compiling, 1);
4164 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4165 deleting the eval's FILEGV from the stash before gv_check() runs
4166 (i.e. before run-time proper). To work around the coredump that
4167 ensues, we always turn GvMULTI_on for any globals that were
4168 introduced within evals. See force_ident(). GSAR 96-10-12 */
4170 PL_hints = PL_op->op_targ;
4172 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4173 SvREFCNT_dec(GvHV(PL_hintgv));
4174 GvHV(PL_hintgv) = saved_hh;
4176 SAVECOMPILEWARNINGS();
4177 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4178 cophh_free(CopHINTHASH_get(&PL_compiling));
4179 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
4180 /* The label, if present, is the first entry on the chain. So rather
4181 than writing a blank label in front of it (which involves an
4182 allocation), just use the next entry in the chain. */
4183 PL_compiling.cop_hints_hash
4184 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4185 /* Check the assumption that this removed the label. */
4186 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4189 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4190 /* special case: an eval '' executed within the DB package gets lexically
4191 * placed in the first non-DB CV rather than the current CV - this
4192 * allows the debugger to execute code, find lexicals etc, in the
4193 * scope of the code being debugged. Passing &seq gets find_runcv
4194 * to do the dirty work for us */
4195 runcv = find_runcv(&seq);
4197 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4199 cx->blk_eval.retop = PL_op->op_next;
4201 /* prepare to compile string */
4203 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4204 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4206 char *const safestr = savepvn(tmpbuf, len);
4207 SAVEDELETE(PL_defstash, safestr, len);
4208 saved_delete = TRUE;
4213 if (doeval(gimme, NULL, runcv, seq)) {
4214 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4215 ? (PERLDB_LINE || PERLDB_SAVESRC)
4216 : PERLDB_SAVESRC_NOSUBS) {
4217 /* Retain the filegv we created. */
4218 } else if (!saved_delete) {
4219 char *const safestr = savepvn(tmpbuf, len);
4220 SAVEDELETE(PL_defstash, safestr, len);
4222 return DOCATCH(PL_eval_start);
4224 /* We have already left the scope set up earlier thanks to the LEAVE
4226 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4227 ? (PERLDB_LINE || PERLDB_SAVESRC)
4228 : PERLDB_SAVESRC_INVALID) {
4229 /* Retain the filegv we created. */
4230 } else if (!saved_delete) {
4231 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4233 return PL_op->op_next;
4243 register PERL_CONTEXT *cx;
4245 const U8 save_flags = PL_op -> op_flags;
4252 namesv = cx->blk_eval.old_namesv;
4253 retop = cx->blk_eval.retop;
4256 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4258 PL_curpm = newpm; /* Don't pop $1 et al till now */
4261 assert(CvDEPTH(PL_compcv) == 1);
4263 CvDEPTH(PL_compcv) = 0;
4265 if (optype == OP_REQUIRE &&
4266 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4268 /* Unassume the success we assumed earlier. */
4269 (void)hv_delete(GvHVn(PL_incgv),
4270 SvPVX_const(namesv), SvCUR(namesv),
4272 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4274 /* die_unwind() did LEAVE, or we won't be here */
4277 LEAVE_with_name("eval");
4278 if (!(save_flags & OPf_SPECIAL)) {
4286 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4287 close to the related Perl_create_eval_scope. */
4289 Perl_delete_eval_scope(pTHX)
4294 register PERL_CONTEXT *cx;
4300 LEAVE_with_name("eval_scope");
4301 PERL_UNUSED_VAR(newsp);
4302 PERL_UNUSED_VAR(gimme);
4303 PERL_UNUSED_VAR(optype);
4306 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4307 also needed by Perl_fold_constants. */
4309 Perl_create_eval_scope(pTHX_ U32 flags)
4312 const I32 gimme = GIMME_V;
4314 ENTER_with_name("eval_scope");
4317 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4320 PL_in_eval = EVAL_INEVAL;
4321 if (flags & G_KEEPERR)
4322 PL_in_eval |= EVAL_KEEPERR;
4325 if (flags & G_FAKINGEVAL) {
4326 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4334 PERL_CONTEXT * const cx = create_eval_scope(0);
4335 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4336 return DOCATCH(PL_op->op_next);
4345 register PERL_CONTEXT *cx;
4351 PERL_UNUSED_VAR(optype);
4354 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4355 PL_curpm = newpm; /* Don't pop $1 et al till now */
4357 LEAVE_with_name("eval_scope");
4365 register PERL_CONTEXT *cx;
4366 const I32 gimme = GIMME_V;
4368 ENTER_with_name("given");
4371 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);
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)
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. */
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)) {