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");
2318 /* sub:lvalue{} will take us here. */
2325 /* diag_listed_as: Can't return %s from lvalue subroutine*/
2326 "Can't return undef from lvalue subroutine"
2331 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2332 *++newsp = SvREFCNT_inc(*SP);
2339 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2344 *++newsp = &PL_sv_undef;
2346 if (CxLVAL(cx) & OPpENTERSUB_DEREF) {
2350 if (cx->blk_sub.retop->op_type == OP_RV2SV)
2351 deref_type = OPpDEREF_SV;
2352 else if (cx->blk_sub.retop->op_type == OP_RV2AV)
2353 deref_type = OPpDEREF_AV;
2355 assert(cx->blk_sub.retop->op_type == OP_RV2HV);
2356 deref_type = OPpDEREF_HV;
2358 vivify_ref(TOPs, deref_type);
2362 else if (gimme == G_ARRAY) {
2363 assert (!(CxLVAL(cx) & OPpENTERSUB_DEREF));
2364 if (ref || !CxLVAL(cx))
2365 while (++MARK <= SP)
2369 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2370 ? sv_mortalcopy(*MARK)
2371 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2372 else while (++MARK <= SP) {
2373 if (*MARK != &PL_sv_undef
2375 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2380 /* Might be flattened array after $#array = */
2388 "Can't return a %s from lvalue subroutine",
2389 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2395 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2398 PL_stack_sp = newsp;
2404 register PERL_CONTEXT *cx;
2405 bool popsub2 = FALSE;
2406 bool clear_errsv = FALSE;
2408 bool gmagic = FALSE;
2417 const I32 cxix = dopoptosub(cxstack_ix);
2420 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2421 * sort block, which is a CXt_NULL
2424 PL_stack_base[1] = *PL_stack_sp;
2425 PL_stack_sp = PL_stack_base + 1;
2429 DIE(aTHX_ "Can't return outside a subroutine");
2431 if (cxix < cxstack_ix)
2434 if (CxMULTICALL(&cxstack[cxix])) {
2435 gimme = cxstack[cxix].blk_gimme;
2436 if (gimme == G_VOID)
2437 PL_stack_sp = PL_stack_base;
2438 else if (gimme == G_SCALAR) {
2439 PL_stack_base[1] = *PL_stack_sp;
2440 PL_stack_sp = PL_stack_base + 1;
2446 switch (CxTYPE(cx)) {
2449 lval = !!CvLVALUE(cx->blk_sub.cv);
2450 retop = cx->blk_sub.retop;
2451 gmagic = CxLVAL(cx) & OPpENTERSUB_DEREF;
2452 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2455 if (!(PL_in_eval & EVAL_KEEPERR))
2458 namesv = cx->blk_eval.old_namesv;
2459 retop = cx->blk_eval.retop;
2462 if (optype == OP_REQUIRE &&
2463 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2465 /* Unassume the success we assumed earlier. */
2466 (void)hv_delete(GvHVn(PL_incgv),
2467 SvPVX_const(namesv), SvCUR(namesv),
2469 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2474 retop = cx->blk_sub.retop;
2477 DIE(aTHX_ "panic: return");
2481 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2483 if (gimme == G_SCALAR) {
2486 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2487 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2488 *++newsp = SvREFCNT_inc(*SP);
2493 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2495 *++newsp = sv_mortalcopy(sv);
2497 if (gmagic) SvGETMAGIC(sv);
2500 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2502 if (gmagic) SvGETMAGIC(*SP);
2505 *++newsp = sv_mortalcopy(*SP);
2508 *++newsp = sv_mortalcopy(*SP);
2511 *++newsp = &PL_sv_undef;
2513 else if (gimme == G_ARRAY) {
2514 while (++MARK <= SP) {
2515 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2516 ? *MARK : sv_mortalcopy(*MARK);
2517 TAINT_NOT; /* Each item is independent */
2520 PL_stack_sp = newsp;
2524 /* Stack values are safe: */
2527 POPSUB(cx,sv); /* release CV and @_ ... */
2531 PL_curpm = newpm; /* ... and pop $1 et al */
2540 /* This duplicates parts of pp_leavesub, so that it can share code with
2548 register PERL_CONTEXT *cx;
2551 if (CxMULTICALL(&cxstack[cxstack_ix]))
2555 cxstack_ix++; /* temporarily protect top context */
2556 assert(CvLVALUE(cx->blk_sub.cv));
2560 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2564 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2565 PL_curpm = newpm; /* ... and pop $1 et al */
2568 return cx->blk_sub.retop;
2575 register PERL_CONTEXT *cx;
2586 if (PL_op->op_flags & OPf_SPECIAL) {
2587 cxix = dopoptoloop(cxstack_ix);
2589 DIE(aTHX_ "Can't \"last\" outside a loop block");
2592 cxix = dopoptolabel(cPVOP->op_pv);
2594 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2596 if (cxix < cxstack_ix)
2600 cxstack_ix++; /* temporarily protect top context */
2602 switch (CxTYPE(cx)) {
2603 case CXt_LOOP_LAZYIV:
2604 case CXt_LOOP_LAZYSV:
2606 case CXt_LOOP_PLAIN:
2608 newsp = PL_stack_base + cx->blk_loop.resetsp;
2609 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2613 nextop = cx->blk_sub.retop;
2617 nextop = cx->blk_eval.retop;
2621 nextop = cx->blk_sub.retop;
2624 DIE(aTHX_ "panic: last");
2628 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2629 pop2 == CXt_SUB ? SVs_TEMP : 0);
2634 /* Stack values are safe: */
2636 case CXt_LOOP_LAZYIV:
2637 case CXt_LOOP_PLAIN:
2638 case CXt_LOOP_LAZYSV:
2640 POPLOOP(cx); /* release loop vars ... */
2644 POPSUB(cx,sv); /* release CV and @_ ... */
2647 PL_curpm = newpm; /* ... and pop $1 et al */
2650 PERL_UNUSED_VAR(optype);
2651 PERL_UNUSED_VAR(gimme);
2659 register PERL_CONTEXT *cx;
2662 if (PL_op->op_flags & OPf_SPECIAL) {
2663 cxix = dopoptoloop(cxstack_ix);
2665 DIE(aTHX_ "Can't \"next\" outside a loop block");
2668 cxix = dopoptolabel(cPVOP->op_pv);
2670 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2672 if (cxix < cxstack_ix)
2675 /* clear off anything above the scope we're re-entering, but
2676 * save the rest until after a possible continue block */
2677 inner = PL_scopestack_ix;
2679 if (PL_scopestack_ix < inner)
2680 leave_scope(PL_scopestack[PL_scopestack_ix]);
2681 PL_curcop = cx->blk_oldcop;
2682 return (cx)->blk_loop.my_op->op_nextop;
2689 register PERL_CONTEXT *cx;
2693 if (PL_op->op_flags & OPf_SPECIAL) {
2694 cxix = dopoptoloop(cxstack_ix);
2696 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2699 cxix = dopoptolabel(cPVOP->op_pv);
2701 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2703 if (cxix < cxstack_ix)
2706 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2707 if (redo_op->op_type == OP_ENTER) {
2708 /* pop one less context to avoid $x being freed in while (my $x..) */
2710 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2711 redo_op = redo_op->op_next;
2715 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2716 LEAVE_SCOPE(oldsave);
2718 PL_curcop = cx->blk_oldcop;
2723 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2727 static const char too_deep[] = "Target of goto is too deeply nested";
2729 PERL_ARGS_ASSERT_DOFINDLABEL;
2732 Perl_croak(aTHX_ too_deep);
2733 if (o->op_type == OP_LEAVE ||
2734 o->op_type == OP_SCOPE ||
2735 o->op_type == OP_LEAVELOOP ||
2736 o->op_type == OP_LEAVESUB ||
2737 o->op_type == OP_LEAVETRY)
2739 *ops++ = cUNOPo->op_first;
2741 Perl_croak(aTHX_ too_deep);
2744 if (o->op_flags & OPf_KIDS) {
2746 /* First try all the kids at this level, since that's likeliest. */
2747 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2748 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2749 const char *kid_label = CopLABEL(kCOP);
2750 if (kid_label && strEQ(kid_label, label))
2754 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2755 if (kid == PL_lastgotoprobe)
2757 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2760 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2761 ops[-1]->op_type == OP_DBSTATE)
2766 if ((o = dofindlabel(kid, label, ops, oplimit)))
2779 register PERL_CONTEXT *cx;
2780 #define GOTO_DEPTH 64
2781 OP *enterops[GOTO_DEPTH];
2782 const char *label = NULL;
2783 const bool do_dump = (PL_op->op_type == OP_DUMP);
2784 static const char must_have_label[] = "goto must have label";
2786 if (PL_op->op_flags & OPf_STACKED) {
2787 SV * const sv = POPs;
2789 /* This egregious kludge implements goto &subroutine */
2790 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2792 register PERL_CONTEXT *cx;
2793 CV *cv = MUTABLE_CV(SvRV(sv));
2800 if (!CvROOT(cv) && !CvXSUB(cv)) {
2801 const GV * const gv = CvGV(cv);
2805 /* autoloaded stub? */
2806 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2808 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2809 GvNAMELEN(gv), FALSE);
2810 if (autogv && (cv = GvCV(autogv)))
2812 tmpstr = sv_newmortal();
2813 gv_efullname3(tmpstr, gv, NULL);
2814 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2816 DIE(aTHX_ "Goto undefined subroutine");
2819 /* First do some returnish stuff. */
2820 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2822 cxix = dopoptosub(cxstack_ix);
2824 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2825 if (cxix < cxstack_ix)
2829 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2830 if (CxTYPE(cx) == CXt_EVAL) {
2832 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2834 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2836 else if (CxMULTICALL(cx))
2837 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2838 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2839 /* put @_ back onto stack */
2840 AV* av = cx->blk_sub.argarray;
2842 items = AvFILLp(av) + 1;
2843 EXTEND(SP, items+1); /* @_ could have been extended. */
2844 Copy(AvARRAY(av), SP + 1, items, SV*);
2845 SvREFCNT_dec(GvAV(PL_defgv));
2846 GvAV(PL_defgv) = cx->blk_sub.savearray;
2848 /* abandon @_ if it got reified */
2853 av_extend(av, items-1);
2855 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2858 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2859 AV* const av = GvAV(PL_defgv);
2860 items = AvFILLp(av) + 1;
2861 EXTEND(SP, items+1); /* @_ could have been extended. */
2862 Copy(AvARRAY(av), SP + 1, items, SV*);
2866 if (CxTYPE(cx) == CXt_SUB &&
2867 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2868 SvREFCNT_dec(cx->blk_sub.cv);
2869 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2870 LEAVE_SCOPE(oldsave);
2872 /* Now do some callish stuff. */
2874 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2876 OP* const retop = cx->blk_sub.retop;
2877 SV **newsp __attribute__unused__;
2878 I32 gimme __attribute__unused__;
2881 for (index=0; index<items; index++)
2882 sv_2mortal(SP[-index]);
2885 /* XS subs don't have a CxSUB, so pop it */
2886 POPBLOCK(cx, PL_curpm);
2887 /* Push a mark for the start of arglist */
2890 (void)(*CvXSUB(cv))(aTHX_ cv);
2895 AV* const padlist = CvPADLIST(cv);
2896 if (CxTYPE(cx) == CXt_EVAL) {
2897 PL_in_eval = CxOLD_IN_EVAL(cx);
2898 PL_eval_root = cx->blk_eval.old_eval_root;
2899 cx->cx_type = CXt_SUB;
2901 cx->blk_sub.cv = cv;
2902 cx->blk_sub.olddepth = CvDEPTH(cv);
2905 if (CvDEPTH(cv) < 2)
2906 SvREFCNT_inc_simple_void_NN(cv);
2908 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2909 sub_crush_depth(cv);
2910 pad_push(padlist, CvDEPTH(cv));
2913 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2916 AV *const av = MUTABLE_AV(PAD_SVl(0));
2918 cx->blk_sub.savearray = GvAV(PL_defgv);
2919 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2920 CX_CURPAD_SAVE(cx->blk_sub);
2921 cx->blk_sub.argarray = av;
2923 if (items >= AvMAX(av) + 1) {
2924 SV **ary = AvALLOC(av);
2925 if (AvARRAY(av) != ary) {
2926 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2929 if (items >= AvMAX(av) + 1) {
2930 AvMAX(av) = items - 1;
2931 Renew(ary,items+1,SV*);
2937 Copy(mark,AvARRAY(av),items,SV*);
2938 AvFILLp(av) = items - 1;
2939 assert(!AvREAL(av));
2941 /* transfer 'ownership' of refcnts to new @_ */
2951 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2952 Perl_get_db_sub(aTHX_ NULL, cv);
2954 CV * const gotocv = get_cvs("DB::goto", 0);
2956 PUSHMARK( PL_stack_sp );
2957 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2962 RETURNOP(CvSTART(cv));
2966 label = SvPV_nolen_const(sv);
2967 if (!(do_dump || *label))
2968 DIE(aTHX_ must_have_label);
2971 else if (PL_op->op_flags & OPf_SPECIAL) {
2973 DIE(aTHX_ must_have_label);
2976 label = cPVOP->op_pv;
2980 if (label && *label) {
2981 OP *gotoprobe = NULL;
2982 bool leaving_eval = FALSE;
2983 bool in_block = FALSE;
2984 PERL_CONTEXT *last_eval_cx = NULL;
2988 PL_lastgotoprobe = NULL;
2990 for (ix = cxstack_ix; ix >= 0; ix--) {
2992 switch (CxTYPE(cx)) {
2994 leaving_eval = TRUE;
2995 if (!CxTRYBLOCK(cx)) {
2996 gotoprobe = (last_eval_cx ?
2997 last_eval_cx->blk_eval.old_eval_root :
3002 /* else fall through */
3003 case CXt_LOOP_LAZYIV:
3004 case CXt_LOOP_LAZYSV:
3006 case CXt_LOOP_PLAIN:
3009 gotoprobe = cx->blk_oldcop->op_sibling;
3015 gotoprobe = cx->blk_oldcop->op_sibling;
3018 gotoprobe = PL_main_root;
3021 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3022 gotoprobe = CvROOT(cx->blk_sub.cv);
3028 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3031 DIE(aTHX_ "panic: goto");
3032 gotoprobe = PL_main_root;
3036 retop = dofindlabel(gotoprobe, label,
3037 enterops, enterops + GOTO_DEPTH);
3040 if (gotoprobe->op_sibling &&
3041 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3042 gotoprobe->op_sibling->op_sibling) {
3043 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3044 label, enterops, enterops + GOTO_DEPTH);
3049 PL_lastgotoprobe = gotoprobe;
3052 DIE(aTHX_ "Can't find label %s", label);
3054 /* if we're leaving an eval, check before we pop any frames
3055 that we're not going to punt, otherwise the error
3058 if (leaving_eval && *enterops && enterops[1]) {
3060 for (i = 1; enterops[i]; i++)
3061 if (enterops[i]->op_type == OP_ENTERITER)
3062 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3065 if (*enterops && enterops[1]) {
3066 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3068 deprecate("\"goto\" to jump into a construct");
3071 /* pop unwanted frames */
3073 if (ix < cxstack_ix) {
3080 oldsave = PL_scopestack[PL_scopestack_ix];
3081 LEAVE_SCOPE(oldsave);
3084 /* push wanted frames */
3086 if (*enterops && enterops[1]) {
3087 OP * const oldop = PL_op;
3088 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3089 for (; enterops[ix]; ix++) {
3090 PL_op = enterops[ix];
3091 /* Eventually we may want to stack the needed arguments
3092 * for each op. For now, we punt on the hard ones. */
3093 if (PL_op->op_type == OP_ENTERITER)
3094 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3095 PL_op->op_ppaddr(aTHX);
3103 if (!retop) retop = PL_main_start;
3105 PL_restartop = retop;
3106 PL_do_undump = TRUE;
3110 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3111 PL_do_undump = FALSE;
3128 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3130 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3133 PL_exit_flags |= PERL_EXIT_EXPECTED;
3135 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3136 if (anum || !(PL_minus_c && PL_madskills))
3141 PUSHs(&PL_sv_undef);
3148 S_save_lines(pTHX_ AV *array, SV *sv)
3150 const char *s = SvPVX_const(sv);
3151 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3154 PERL_ARGS_ASSERT_SAVE_LINES;
3156 while (s && s < send) {
3158 SV * const tmpstr = newSV_type(SVt_PVMG);
3160 t = (const char *)memchr(s, '\n', send - s);
3166 sv_setpvn(tmpstr, s, t - s);
3167 av_store(array, line++, tmpstr);
3175 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3177 0 is used as continue inside eval,
3179 3 is used for a die caught by an inner eval - continue inner loop
3181 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3182 establish a local jmpenv to handle exception traps.
3187 S_docatch(pTHX_ OP *o)
3191 OP * const oldop = PL_op;
3195 assert(CATCH_GET == TRUE);
3202 assert(cxstack_ix >= 0);
3203 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3204 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3209 /* die caught by an inner eval - continue inner loop */
3210 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3211 PL_restartjmpenv = NULL;
3212 PL_op = PL_restartop;
3228 /* James Bond: Do you expect me to talk?
3229 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3231 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3232 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3234 Currently it is not used outside the core code. Best if it stays that way.
3236 Hence it's now deprecated, and will be removed.
3239 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3240 /* sv Text to convert to OP tree. */
3241 /* startop op_free() this to undo. */
3242 /* code Short string id of the caller. */
3244 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3245 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3248 /* Don't use this. It will go away without warning once the regexp engine is
3249 refactored not to use it. */
3251 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3254 dVAR; dSP; /* Make POPBLOCK work. */
3260 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3261 char *tmpbuf = tbuf;
3264 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3268 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3270 ENTER_with_name("eval");
3271 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3273 /* switch to eval mode */
3275 if (IN_PERL_COMPILETIME) {
3276 SAVECOPSTASH_FREE(&PL_compiling);
3277 CopSTASH_set(&PL_compiling, PL_curstash);
3279 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3280 SV * const sv = sv_newmortal();
3281 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3282 code, (unsigned long)++PL_evalseq,
3283 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3288 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3289 (unsigned long)++PL_evalseq);
3290 SAVECOPFILE_FREE(&PL_compiling);
3291 CopFILE_set(&PL_compiling, tmpbuf+2);
3292 SAVECOPLINE(&PL_compiling);
3293 CopLINE_set(&PL_compiling, 1);
3294 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3295 deleting the eval's FILEGV from the stash before gv_check() runs
3296 (i.e. before run-time proper). To work around the coredump that
3297 ensues, we always turn GvMULTI_on for any globals that were
3298 introduced within evals. See force_ident(). GSAR 96-10-12 */
3299 safestr = savepvn(tmpbuf, len);
3300 SAVEDELETE(PL_defstash, safestr, len);
3302 #ifdef OP_IN_REGISTER
3308 /* we get here either during compilation, or via pp_regcomp at runtime */
3309 runtime = IN_PERL_RUNTIME;
3312 runcv = find_runcv(NULL);
3314 /* At run time, we have to fetch the hints from PL_curcop. */
3315 PL_hints = PL_curcop->cop_hints;
3316 if (PL_hints & HINT_LOCALIZE_HH) {
3317 /* SAVEHINTS created a new HV in PL_hintgv, which we
3319 SvREFCNT_dec(GvHV(PL_hintgv));
3321 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3322 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3324 SAVECOMPILEWARNINGS();
3325 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3326 cophh_free(CopHINTHASH_get(&PL_compiling));
3327 /* XXX Does this need to avoid copying a label? */
3328 PL_compiling.cop_hints_hash
3329 = cophh_copy(PL_curcop->cop_hints_hash);
3333 PL_op->op_type = OP_ENTEREVAL;
3334 PL_op->op_flags = 0; /* Avoid uninit warning. */
3335 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3337 need_catch = CATCH_GET;
3341 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3343 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3344 CATCH_SET(need_catch);
3345 POPBLOCK(cx,PL_curpm);
3348 (*startop)->op_type = OP_NULL;
3349 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3350 /* XXX DAPM do this properly one year */
3351 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3352 LEAVE_with_name("eval");
3353 if (IN_PERL_COMPILETIME)
3354 CopHINTS_set(&PL_compiling, PL_hints);
3355 #ifdef OP_IN_REGISTER
3358 PERL_UNUSED_VAR(newsp);
3359 PERL_UNUSED_VAR(optype);
3361 return PL_eval_start;
3366 =for apidoc find_runcv
3368 Locate the CV corresponding to the currently executing sub or eval.
3369 If db_seqp is non_null, skip CVs that are in the DB package and populate
3370 *db_seqp with the cop sequence number at the point that the DB:: code was
3371 entered. (allows debuggers to eval in the scope of the breakpoint rather
3372 than in the scope of the debugger itself).
3378 Perl_find_runcv(pTHX_ U32 *db_seqp)
3384 *db_seqp = PL_curcop->cop_seq;
3385 for (si = PL_curstackinfo; si; si = si->si_prev) {
3387 for (ix = si->si_cxix; ix >= 0; ix--) {
3388 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3389 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3390 CV * const cv = cx->blk_sub.cv;
3391 /* skip DB:: code */
3392 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3393 *db_seqp = cx->blk_oldcop->cop_seq;
3398 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3406 /* Run yyparse() in a setjmp wrapper. Returns:
3407 * 0: yyparse() successful
3408 * 1: yyparse() failed
3412 S_try_yyparse(pTHX_ int gramtype)
3417 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3421 ret = yyparse(gramtype) ? 1 : 0;
3435 /* Compile a require/do, an eval '', or a /(?{...})/.
3436 * In the last case, startop is non-null, and contains the address of
3437 * a pointer that should be set to the just-compiled code.
3438 * outside is the lexically enclosing CV (if any) that invoked us.
3439 * Returns a bool indicating whether the compile was successful; if so,
3440 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3441 * pushes undef (also croaks if startop != NULL).
3445 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3448 OP * const saveop = PL_op;
3449 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3452 PL_in_eval = (in_require
3453 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3458 SAVESPTR(PL_compcv);
3459 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3460 CvEVAL_on(PL_compcv);
3461 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3462 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3464 CvOUTSIDE_SEQ(PL_compcv) = seq;
3465 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3467 /* set up a scratch pad */
3469 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3470 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3474 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3476 /* make sure we compile in the right package */
3478 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3479 SAVESPTR(PL_curstash);
3480 PL_curstash = CopSTASH(PL_curcop);
3482 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3483 SAVESPTR(PL_beginav);
3484 PL_beginav = newAV();
3485 SAVEFREESV(PL_beginav);
3486 SAVESPTR(PL_unitcheckav);
3487 PL_unitcheckav = newAV();
3488 SAVEFREESV(PL_unitcheckav);
3491 SAVEBOOL(PL_madskills);
3495 /* try to compile it */
3497 PL_eval_root = NULL;
3498 PL_curcop = &PL_compiling;
3499 CopARYBASE_set(PL_curcop, 0);
3500 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3501 PL_in_eval |= EVAL_KEEPERR;
3505 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3507 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3508 * so honour CATCH_GET and trap it here if necessary */
3510 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3512 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3513 SV **newsp; /* Used by POPBLOCK. */
3514 PERL_CONTEXT *cx = NULL;
3515 I32 optype; /* Used by POPEVAL. */
3519 PERL_UNUSED_VAR(newsp);
3520 PERL_UNUSED_VAR(optype);
3522 /* note that if yystatus == 3, then the EVAL CX block has already
3523 * been popped, and various vars restored */
3525 if (yystatus != 3) {
3527 op_free(PL_eval_root);
3528 PL_eval_root = NULL;
3530 SP = PL_stack_base + POPMARK; /* pop original mark */
3532 POPBLOCK(cx,PL_curpm);
3534 namesv = cx->blk_eval.old_namesv;
3538 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3540 msg = SvPVx_nolen_const(ERRSV);
3543 /* If cx is still NULL, it means that we didn't go in the
3544 * POPEVAL branch. */
3545 cx = &cxstack[cxstack_ix];
3546 assert(CxTYPE(cx) == CXt_EVAL);
3547 namesv = cx->blk_eval.old_namesv;
3549 (void)hv_store(GvHVn(PL_incgv),
3550 SvPVX_const(namesv), SvCUR(namesv),
3552 Perl_croak(aTHX_ "%sCompilation failed in require",
3553 *msg ? msg : "Unknown error\n");
3556 if (yystatus != 3) {
3557 POPBLOCK(cx,PL_curpm);
3560 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3561 (*msg ? msg : "Unknown error\n"));
3565 sv_setpvs(ERRSV, "Compilation error");
3568 PUSHs(&PL_sv_undef);
3572 CopLINE_set(&PL_compiling, 0);
3574 *startop = PL_eval_root;
3576 SAVEFREEOP(PL_eval_root);
3578 /* Set the context for this new optree.
3579 * Propagate the context from the eval(). */
3580 if ((gimme & G_WANT) == G_VOID)
3581 scalarvoid(PL_eval_root);
3582 else if ((gimme & G_WANT) == G_ARRAY)
3585 scalar(PL_eval_root);
3587 DEBUG_x(dump_eval());
3589 /* Register with debugger: */
3590 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3591 CV * const cv = get_cvs("DB::postponed", 0);
3595 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3597 call_sv(MUTABLE_SV(cv), G_DISCARD);
3601 if (PL_unitcheckav) {
3602 OP *es = PL_eval_start;
3603 call_list(PL_scopestack_ix, PL_unitcheckav);
3607 /* compiled okay, so do it */
3609 CvDEPTH(PL_compcv) = 1;
3610 SP = PL_stack_base + POPMARK; /* pop original mark */
3611 PL_op = saveop; /* The caller may need it. */
3612 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3619 S_check_type_and_open(pTHX_ SV *name)
3622 const char *p = SvPV_nolen_const(name);
3623 const int st_rc = PerlLIO_stat(p, &st);
3625 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3627 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3631 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3632 return PerlIO_openn(aTHX_ NULL, PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3634 return PerlIO_open(p, PERL_SCRIPT_MODE);
3638 #ifndef PERL_DISABLE_PMC
3640 S_doopen_pm(pTHX_ SV *name)
3643 const char *p = SvPV_const(name, namelen);
3645 PERL_ARGS_ASSERT_DOOPEN_PM;
3647 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3648 SV *const pmcsv = sv_newmortal();
3651 SvSetSV_nosteal(pmcsv,name);
3652 sv_catpvn(pmcsv, "c", 1);
3654 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3655 return check_type_and_open(pmcsv);
3657 return check_type_and_open(name);
3660 # define doopen_pm(name) check_type_and_open(name)
3661 #endif /* !PERL_DISABLE_PMC */
3666 register PERL_CONTEXT *cx;
3673 int vms_unixname = 0;
3675 const char *tryname = NULL;
3677 const I32 gimme = GIMME_V;
3678 int filter_has_file = 0;
3679 PerlIO *tryrsfp = NULL;
3680 SV *filter_cache = NULL;
3681 SV *filter_state = NULL;
3682 SV *filter_sub = NULL;
3688 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3689 sv = sv_2mortal(new_version(sv));
3690 if (!sv_derived_from(PL_patchlevel, "version"))
3691 upg_version(PL_patchlevel, TRUE);
3692 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3693 if ( vcmp(sv,PL_patchlevel) <= 0 )
3694 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3695 SVfARG(sv_2mortal(vnormal(sv))),
3696 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3700 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3703 SV * const req = SvRV(sv);
3704 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3706 /* get the left hand term */
3707 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3709 first = SvIV(*av_fetch(lav,0,0));
3710 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3711 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3712 || av_len(lav) > 1 /* FP with > 3 digits */
3713 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3715 DIE(aTHX_ "Perl %"SVf" required--this is only "
3717 SVfARG(sv_2mortal(vnormal(req))),
3718 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3721 else { /* probably 'use 5.10' or 'use 5.8' */
3726 second = SvIV(*av_fetch(lav,1,0));
3728 second /= second >= 600 ? 100 : 10;
3729 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3730 (int)first, (int)second);
3731 upg_version(hintsv, TRUE);
3733 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3734 "--this is only %"SVf", stopped",
3735 SVfARG(sv_2mortal(vnormal(req))),
3736 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3737 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3745 name = SvPV_const(sv, len);
3746 if (!(name && len > 0 && *name))
3747 DIE(aTHX_ "Null filename used");
3748 TAINT_PROPER("require");
3752 /* The key in the %ENV hash is in the syntax of file passed as the argument
3753 * usually this is in UNIX format, but sometimes in VMS format, which
3754 * can result in a module being pulled in more than once.
3755 * To prevent this, the key must be stored in UNIX format if the VMS
3756 * name can be translated to UNIX.
3758 if ((unixname = tounixspec(name, NULL)) != NULL) {
3759 unixlen = strlen(unixname);
3765 /* if not VMS or VMS name can not be translated to UNIX, pass it
3768 unixname = (char *) name;
3771 if (PL_op->op_type == OP_REQUIRE) {
3772 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3773 unixname, unixlen, 0);
3775 if (*svp != &PL_sv_undef)
3778 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3779 "Compilation failed in require", unixname);
3783 /* prepare to compile file */
3785 if (path_is_absolute(name)) {
3786 /* At this point, name is SvPVX(sv) */
3788 tryrsfp = doopen_pm(sv);
3791 AV * const ar = GvAVn(PL_incgv);
3797 namesv = newSV_type(SVt_PV);
3798 for (i = 0; i <= AvFILL(ar); i++) {
3799 SV * const dirsv = *av_fetch(ar, i, TRUE);
3801 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3808 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3809 && !sv_isobject(loader))
3811 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3814 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3815 PTR2UV(SvRV(dirsv)), name);
3816 tryname = SvPVX_const(namesv);
3819 ENTER_with_name("call_INC");
3827 if (sv_isobject(loader))
3828 count = call_method("INC", G_ARRAY);
3830 count = call_sv(loader, G_ARRAY);
3840 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3841 && !isGV_with_GP(SvRV(arg))) {
3842 filter_cache = SvRV(arg);
3843 SvREFCNT_inc_simple_void_NN(filter_cache);
3850 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3854 if (isGV_with_GP(arg)) {
3855 IO * const io = GvIO((const GV *)arg);
3860 tryrsfp = IoIFP(io);
3861 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3862 PerlIO_close(IoOFP(io));
3873 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3875 SvREFCNT_inc_simple_void_NN(filter_sub);
3878 filter_state = SP[i];
3879 SvREFCNT_inc_simple_void(filter_state);
3883 if (!tryrsfp && (filter_cache || filter_sub)) {
3884 tryrsfp = PerlIO_open(BIT_BUCKET,
3892 LEAVE_with_name("call_INC");
3894 /* Adjust file name if the hook has set an %INC entry.
3895 This needs to happen after the FREETMPS above. */
3896 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3898 tryname = SvPV_nolen_const(*svp);
3905 filter_has_file = 0;
3907 SvREFCNT_dec(filter_cache);
3908 filter_cache = NULL;
3911 SvREFCNT_dec(filter_state);
3912 filter_state = NULL;
3915 SvREFCNT_dec(filter_sub);
3920 if (!path_is_absolute(name)
3926 dir = SvPV_const(dirsv, dirlen);
3934 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3936 sv_setpv(namesv, unixdir);
3937 sv_catpv(namesv, unixname);
3939 # ifdef __SYMBIAN32__
3940 if (PL_origfilename[0] &&
3941 PL_origfilename[1] == ':' &&
3942 !(dir[0] && dir[1] == ':'))
3943 Perl_sv_setpvf(aTHX_ namesv,
3948 Perl_sv_setpvf(aTHX_ namesv,
3952 /* The equivalent of
3953 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3954 but without the need to parse the format string, or
3955 call strlen on either pointer, and with the correct
3956 allocation up front. */
3958 char *tmp = SvGROW(namesv, dirlen + len + 2);
3960 memcpy(tmp, dir, dirlen);
3963 /* name came from an SV, so it will have a '\0' at the
3964 end that we can copy as part of this memcpy(). */
3965 memcpy(tmp, name, len + 1);
3967 SvCUR_set(namesv, dirlen + len + 1);
3972 TAINT_PROPER("require");
3973 tryname = SvPVX_const(namesv);
3974 tryrsfp = doopen_pm(namesv);
3976 if (tryname[0] == '.' && tryname[1] == '/') {
3978 while (*++tryname == '/');
3982 else if (errno == EMFILE)
3983 /* no point in trying other paths if out of handles */
3992 if (PL_op->op_type == OP_REQUIRE) {
3993 if(errno == EMFILE) {
3994 /* diag_listed_as: Can't locate %s */
3995 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
3997 if (namesv) { /* did we lookup @INC? */
3998 AV * const ar = GvAVn(PL_incgv);
4000 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4001 for (i = 0; i <= AvFILL(ar); i++) {
4002 sv_catpvs(inc, " ");
4003 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4006 /* diag_listed_as: Can't locate %s */
4008 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4010 (memEQ(name + len - 2, ".h", 3)
4011 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4012 (memEQ(name + len - 3, ".ph", 4)
4013 ? " (did you run h2ph?)" : ""),
4018 DIE(aTHX_ "Can't locate %s", name);
4024 SETERRNO(0, SS_NORMAL);
4026 /* Assume success here to prevent recursive requirement. */
4027 /* name is never assigned to again, so len is still strlen(name) */
4028 /* Check whether a hook in @INC has already filled %INC */
4030 (void)hv_store(GvHVn(PL_incgv),
4031 unixname, unixlen, newSVpv(tryname,0),0);
4033 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4035 (void)hv_store(GvHVn(PL_incgv),
4036 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4039 ENTER_with_name("eval");
4041 SAVECOPFILE_FREE(&PL_compiling);
4042 CopFILE_set(&PL_compiling, tryname);
4043 lex_start(NULL, tryrsfp, 0);
4047 hv_clear(GvHV(PL_hintgv));
4049 SAVECOMPILEWARNINGS();
4050 if (PL_dowarn & G_WARN_ALL_ON)
4051 PL_compiling.cop_warnings = pWARN_ALL ;
4052 else if (PL_dowarn & G_WARN_ALL_OFF)
4053 PL_compiling.cop_warnings = pWARN_NONE ;
4055 PL_compiling.cop_warnings = pWARN_STD ;
4057 if (filter_sub || filter_cache) {
4058 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4059 than hanging another SV from it. In turn, filter_add() optionally
4060 takes the SV to use as the filter (or creates a new SV if passed
4061 NULL), so simply pass in whatever value filter_cache has. */
4062 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4063 IoLINES(datasv) = filter_has_file;
4064 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4065 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4068 /* switch to eval mode */
4069 PUSHBLOCK(cx, CXt_EVAL, SP);
4071 cx->blk_eval.retop = PL_op->op_next;
4073 SAVECOPLINE(&PL_compiling);
4074 CopLINE_set(&PL_compiling, 0);
4078 /* Store and reset encoding. */
4079 encoding = PL_encoding;
4082 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4083 op = DOCATCH(PL_eval_start);
4085 op = PL_op->op_next;
4087 /* Restore encoding. */
4088 PL_encoding = encoding;
4093 /* This is a op added to hold the hints hash for
4094 pp_entereval. The hash can be modified by the code
4095 being eval'ed, so we return a copy instead. */
4101 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4109 register PERL_CONTEXT *cx;
4111 const I32 gimme = GIMME_V;
4112 const U32 was = PL_breakable_sub_gen;
4113 char tbuf[TYPE_DIGITS(long) + 12];
4114 bool saved_delete = FALSE;
4115 char *tmpbuf = tbuf;
4119 HV *saved_hh = NULL;
4121 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4122 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4126 /* make sure we've got a plain PV (no overload etc) before testing
4127 * for taint. Making a copy here is probably overkill, but better
4128 * safe than sorry */
4130 const char * const p = SvPV_const(sv, len);
4132 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4135 TAINT_IF(SvTAINTED(sv));
4136 TAINT_PROPER("eval");
4138 ENTER_with_name("eval");
4139 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4142 /* switch to eval mode */
4144 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4145 SV * const temp_sv = sv_newmortal();
4146 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4147 (unsigned long)++PL_evalseq,
4148 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4149 tmpbuf = SvPVX(temp_sv);
4150 len = SvCUR(temp_sv);
4153 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4154 SAVECOPFILE_FREE(&PL_compiling);
4155 CopFILE_set(&PL_compiling, tmpbuf+2);
4156 SAVECOPLINE(&PL_compiling);
4157 CopLINE_set(&PL_compiling, 1);
4158 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4159 deleting the eval's FILEGV from the stash before gv_check() runs
4160 (i.e. before run-time proper). To work around the coredump that
4161 ensues, we always turn GvMULTI_on for any globals that were
4162 introduced within evals. See force_ident(). GSAR 96-10-12 */
4164 PL_hints = PL_op->op_targ;
4166 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4167 SvREFCNT_dec(GvHV(PL_hintgv));
4168 GvHV(PL_hintgv) = saved_hh;
4170 SAVECOMPILEWARNINGS();
4171 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4172 cophh_free(CopHINTHASH_get(&PL_compiling));
4173 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
4174 /* The label, if present, is the first entry on the chain. So rather
4175 than writing a blank label in front of it (which involves an
4176 allocation), just use the next entry in the chain. */
4177 PL_compiling.cop_hints_hash
4178 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4179 /* Check the assumption that this removed the label. */
4180 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4183 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4184 /* special case: an eval '' executed within the DB package gets lexically
4185 * placed in the first non-DB CV rather than the current CV - this
4186 * allows the debugger to execute code, find lexicals etc, in the
4187 * scope of the code being debugged. Passing &seq gets find_runcv
4188 * to do the dirty work for us */
4189 runcv = find_runcv(&seq);
4191 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4193 cx->blk_eval.retop = PL_op->op_next;
4195 /* prepare to compile string */
4197 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4198 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4200 char *const safestr = savepvn(tmpbuf, len);
4201 SAVEDELETE(PL_defstash, safestr, len);
4202 saved_delete = TRUE;
4207 if (doeval(gimme, NULL, runcv, seq)) {
4208 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4209 ? (PERLDB_LINE || PERLDB_SAVESRC)
4210 : PERLDB_SAVESRC_NOSUBS) {
4211 /* Retain the filegv we created. */
4212 } else if (!saved_delete) {
4213 char *const safestr = savepvn(tmpbuf, len);
4214 SAVEDELETE(PL_defstash, safestr, len);
4216 return DOCATCH(PL_eval_start);
4218 /* We have already left the scope set up earlier thanks to the LEAVE
4220 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4221 ? (PERLDB_LINE || PERLDB_SAVESRC)
4222 : PERLDB_SAVESRC_INVALID) {
4223 /* Retain the filegv we created. */
4224 } else if (!saved_delete) {
4225 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4227 return PL_op->op_next;
4237 register PERL_CONTEXT *cx;
4239 const U8 save_flags = PL_op -> op_flags;
4246 namesv = cx->blk_eval.old_namesv;
4247 retop = cx->blk_eval.retop;
4250 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4252 PL_curpm = newpm; /* Don't pop $1 et al till now */
4255 assert(CvDEPTH(PL_compcv) == 1);
4257 CvDEPTH(PL_compcv) = 0;
4259 if (optype == OP_REQUIRE &&
4260 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4262 /* Unassume the success we assumed earlier. */
4263 (void)hv_delete(GvHVn(PL_incgv),
4264 SvPVX_const(namesv), SvCUR(namesv),
4266 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4268 /* die_unwind() did LEAVE, or we won't be here */
4271 LEAVE_with_name("eval");
4272 if (!(save_flags & OPf_SPECIAL)) {
4280 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4281 close to the related Perl_create_eval_scope. */
4283 Perl_delete_eval_scope(pTHX)
4288 register PERL_CONTEXT *cx;
4294 LEAVE_with_name("eval_scope");
4295 PERL_UNUSED_VAR(newsp);
4296 PERL_UNUSED_VAR(gimme);
4297 PERL_UNUSED_VAR(optype);
4300 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4301 also needed by Perl_fold_constants. */
4303 Perl_create_eval_scope(pTHX_ U32 flags)
4306 const I32 gimme = GIMME_V;
4308 ENTER_with_name("eval_scope");
4311 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4314 PL_in_eval = EVAL_INEVAL;
4315 if (flags & G_KEEPERR)
4316 PL_in_eval |= EVAL_KEEPERR;
4319 if (flags & G_FAKINGEVAL) {
4320 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4328 PERL_CONTEXT * const cx = create_eval_scope(0);
4329 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4330 return DOCATCH(PL_op->op_next);
4339 register PERL_CONTEXT *cx;
4345 PERL_UNUSED_VAR(optype);
4348 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4349 PL_curpm = newpm; /* Don't pop $1 et al till now */
4351 LEAVE_with_name("eval_scope");
4359 register PERL_CONTEXT *cx;
4360 const I32 gimme = GIMME_V;
4362 ENTER_with_name("given");
4365 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4367 PUSHBLOCK(cx, CXt_GIVEN, SP);
4376 register PERL_CONTEXT *cx;
4380 PERL_UNUSED_CONTEXT;
4383 assert(CxTYPE(cx) == CXt_GIVEN);
4386 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4387 PL_curpm = newpm; /* Don't pop $1 et al till now */
4389 LEAVE_with_name("given");
4393 /* Helper routines used by pp_smartmatch */
4395 S_make_matcher(pTHX_ REGEXP *re)
4398 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4400 PERL_ARGS_ASSERT_MAKE_MATCHER;
4402 PM_SETRE(matcher, ReREFCNT_inc(re));
4404 SAVEFREEOP((OP *) matcher);
4405 ENTER_with_name("matcher"); SAVETMPS;
4411 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4416 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4418 PL_op = (OP *) matcher;
4421 (void) Perl_pp_match(aTHX);
4423 return (SvTRUEx(POPs));
4427 S_destroy_matcher(pTHX_ PMOP *matcher)
4431 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4432 PERL_UNUSED_ARG(matcher);
4435 LEAVE_with_name("matcher");
4438 /* Do a smart match */
4441 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4442 return do_smartmatch(NULL, NULL);
4445 /* This version of do_smartmatch() implements the
4446 * table of smart matches that is found in perlsyn.
4449 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4454 bool object_on_left = FALSE;
4455 SV *e = TOPs; /* e is for 'expression' */
4456 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4458 /* Take care only to invoke mg_get() once for each argument.
4459 * Currently we do this by copying the SV if it's magical. */
4462 d = sv_mortalcopy(d);
4469 e = sv_mortalcopy(e);
4471 /* First of all, handle overload magic of the rightmost argument */
4474 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4475 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4477 tmpsv = amagic_call(d, e, smart_amg, 0);
4484 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4487 SP -= 2; /* Pop the values */
4492 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4499 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4500 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4501 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4503 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4504 object_on_left = TRUE;
4507 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {