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);
1472 /* only used by PUSHSUB */
1474 Perl_was_lvalue_sub(pTHX)
1477 const I32 cxix = dopoptosub(cxstack_ix-1);
1478 assert(cxix >= 0); /* We should only be called from inside subs */
1480 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1481 return CxLVAL(cxstack + cxix);
1487 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1492 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1494 for (i = startingblock; i >= 0; i--) {
1495 register const PERL_CONTEXT * const cx = &cxstk[i];
1496 switch (CxTYPE(cx)) {
1502 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1510 S_dopoptoeval(pTHX_ I32 startingblock)
1514 for (i = startingblock; i >= 0; i--) {
1515 register const PERL_CONTEXT *cx = &cxstack[i];
1516 switch (CxTYPE(cx)) {
1520 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1528 S_dopoptoloop(pTHX_ I32 startingblock)
1532 for (i = startingblock; i >= 0; i--) {
1533 register const PERL_CONTEXT * const cx = &cxstack[i];
1534 switch (CxTYPE(cx)) {
1540 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1541 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1542 if ((CxTYPE(cx)) == CXt_NULL)
1545 case CXt_LOOP_LAZYIV:
1546 case CXt_LOOP_LAZYSV:
1548 case CXt_LOOP_PLAIN:
1549 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1557 S_dopoptogiven(pTHX_ I32 startingblock)
1561 for (i = startingblock; i >= 0; i--) {
1562 register const PERL_CONTEXT *cx = &cxstack[i];
1563 switch (CxTYPE(cx)) {
1567 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1569 case CXt_LOOP_PLAIN:
1570 assert(!CxFOREACHDEF(cx));
1572 case CXt_LOOP_LAZYIV:
1573 case CXt_LOOP_LAZYSV:
1575 if (CxFOREACHDEF(cx)) {
1576 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1585 S_dopoptowhen(pTHX_ I32 startingblock)
1589 for (i = startingblock; i >= 0; i--) {
1590 register const PERL_CONTEXT *cx = &cxstack[i];
1591 switch (CxTYPE(cx)) {
1595 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1603 Perl_dounwind(pTHX_ I32 cxix)
1608 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1611 while (cxstack_ix > cxix) {
1613 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1614 DEBUG_CX("UNWIND"); \
1615 /* Note: we don't need to restore the base context info till the end. */
1616 switch (CxTYPE(cx)) {
1619 continue; /* not break */
1627 case CXt_LOOP_LAZYIV:
1628 case CXt_LOOP_LAZYSV:
1630 case CXt_LOOP_PLAIN:
1641 PERL_UNUSED_VAR(optype);
1645 Perl_qerror(pTHX_ SV *err)
1649 PERL_ARGS_ASSERT_QERROR;
1652 if (PL_in_eval & EVAL_KEEPERR) {
1653 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1654 SvPV_nolen_const(err));
1657 sv_catsv(ERRSV, err);
1660 sv_catsv(PL_errors, err);
1662 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1664 ++PL_parser->error_count;
1668 Perl_die_unwind(pTHX_ SV *msv)
1671 SV *exceptsv = sv_mortalcopy(msv);
1672 U8 in_eval = PL_in_eval;
1673 PERL_ARGS_ASSERT_DIE_UNWIND;
1680 * Historically, perl used to set ERRSV ($@) early in the die
1681 * process and rely on it not getting clobbered during unwinding.
1682 * That sucked, because it was liable to get clobbered, so the
1683 * setting of ERRSV used to emit the exception from eval{} has
1684 * been moved to much later, after unwinding (see just before
1685 * JMPENV_JUMP below). However, some modules were relying on the
1686 * early setting, by examining $@ during unwinding to use it as
1687 * a flag indicating whether the current unwinding was caused by
1688 * an exception. It was never a reliable flag for that purpose,
1689 * being totally open to false positives even without actual
1690 * clobberage, but was useful enough for production code to
1691 * semantically rely on it.
1693 * We'd like to have a proper introspective interface that
1694 * explicitly describes the reason for whatever unwinding
1695 * operations are currently in progress, so that those modules
1696 * work reliably and $@ isn't further overloaded. But we don't
1697 * have one yet. In its absence, as a stopgap measure, ERRSV is
1698 * now *additionally* set here, before unwinding, to serve as the
1699 * (unreliable) flag that it used to.
1701 * This behaviour is temporary, and should be removed when a
1702 * proper way to detect exceptional unwinding has been developed.
1703 * As of 2010-12, the authors of modules relying on the hack
1704 * are aware of the issue, because the modules failed on
1705 * perls 5.13.{1..7} which had late setting of $@ without this
1706 * early-setting hack.
1708 if (!(in_eval & EVAL_KEEPERR)) {
1709 SvTEMP_off(exceptsv);
1710 sv_setsv(ERRSV, exceptsv);
1713 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1714 && PL_curstackinfo->si_prev)
1723 register PERL_CONTEXT *cx;
1726 JMPENV *restartjmpenv;
1729 if (cxix < cxstack_ix)
1732 POPBLOCK(cx,PL_curpm);
1733 if (CxTYPE(cx) != CXt_EVAL) {
1735 const char* message = SvPVx_const(exceptsv, msglen);
1736 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1737 PerlIO_write(Perl_error_log, message, msglen);
1741 namesv = cx->blk_eval.old_namesv;
1742 oldcop = cx->blk_oldcop;
1743 restartjmpenv = cx->blk_eval.cur_top_env;
1744 restartop = cx->blk_eval.retop;
1746 if (gimme == G_SCALAR)
1747 *++newsp = &PL_sv_undef;
1748 PL_stack_sp = newsp;
1752 /* LEAVE could clobber PL_curcop (see save_re_context())
1753 * XXX it might be better to find a way to avoid messing with
1754 * PL_curcop in save_re_context() instead, but this is a more
1755 * minimal fix --GSAR */
1758 if (optype == OP_REQUIRE) {
1759 const char* const msg = SvPVx_nolen_const(exceptsv);
1760 (void)hv_store(GvHVn(PL_incgv),
1761 SvPVX_const(namesv), SvCUR(namesv),
1763 /* note that unlike pp_entereval, pp_require isn't
1764 * supposed to trap errors. So now that we've popped the
1765 * EVAL that pp_require pushed, and processed the error
1766 * message, rethrow the error */
1767 Perl_croak(aTHX_ "%sCompilation failed in require",
1768 *msg ? msg : "Unknown error\n");
1770 if (in_eval & EVAL_KEEPERR) {
1771 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1772 SvPV_nolen_const(exceptsv));
1775 sv_setsv(ERRSV, exceptsv);
1777 PL_restartjmpenv = restartjmpenv;
1778 PL_restartop = restartop;
1784 write_to_stderr(exceptsv);
1791 dVAR; dSP; dPOPTOPssrl;
1792 if (SvTRUE(left) != SvTRUE(right))
1799 =for apidoc caller_cx
1801 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1802 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1803 information returned to Perl by C<caller>. Note that XSUBs don't get a
1804 stack frame, so C<caller_cx(0, NULL)> will return information for the
1805 immediately-surrounding Perl code.
1807 This function skips over the automatic calls to C<&DB::sub> made on the
1808 behalf of the debugger. If the stack frame requested was a sub called by
1809 C<DB::sub>, the return value will be the frame for the call to
1810 C<DB::sub>, since that has the correct line number/etc. for the call
1811 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1812 frame for the sub call itself.
1817 const PERL_CONTEXT *
1818 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1820 register I32 cxix = dopoptosub(cxstack_ix);
1821 register const PERL_CONTEXT *cx;
1822 register const PERL_CONTEXT *ccstack = cxstack;
1823 const PERL_SI *top_si = PL_curstackinfo;
1826 /* we may be in a higher stacklevel, so dig down deeper */
1827 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1828 top_si = top_si->si_prev;
1829 ccstack = top_si->si_cxstack;
1830 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1834 /* caller() should not report the automatic calls to &DB::sub */
1835 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1836 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1840 cxix = dopoptosub_at(ccstack, cxix - 1);
1843 cx = &ccstack[cxix];
1844 if (dbcxp) *dbcxp = cx;
1846 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1847 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1848 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1849 field below is defined for any cx. */
1850 /* caller() should not report the automatic calls to &DB::sub */
1851 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1852 cx = &ccstack[dbcxix];
1862 register const PERL_CONTEXT *cx;
1863 const PERL_CONTEXT *dbcx;
1865 const char *stashname;
1871 cx = caller_cx(count, &dbcx);
1873 if (GIMME != G_ARRAY) {
1880 stashname = CopSTASHPV(cx->blk_oldcop);
1881 if (GIMME != G_ARRAY) {
1884 PUSHs(&PL_sv_undef);
1887 sv_setpv(TARG, stashname);
1896 PUSHs(&PL_sv_undef);
1898 mPUSHs(newSVpv(stashname, 0));
1899 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1900 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1903 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1904 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1905 /* So is ccstack[dbcxix]. */
1907 SV * const sv = newSV(0);
1908 gv_efullname3(sv, cvgv, NULL);
1910 PUSHs(boolSV(CxHASARGS(cx)));
1913 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1914 PUSHs(boolSV(CxHASARGS(cx)));
1918 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1921 gimme = (I32)cx->blk_gimme;
1922 if (gimme == G_VOID)
1923 PUSHs(&PL_sv_undef);
1925 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1926 if (CxTYPE(cx) == CXt_EVAL) {
1928 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1929 PUSHs(cx->blk_eval.cur_text);
1933 else if (cx->blk_eval.old_namesv) {
1934 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1937 /* eval BLOCK (try blocks have old_namesv == 0) */
1939 PUSHs(&PL_sv_undef);
1940 PUSHs(&PL_sv_undef);
1944 PUSHs(&PL_sv_undef);
1945 PUSHs(&PL_sv_undef);
1947 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1948 && CopSTASH_eq(PL_curcop, PL_debstash))
1950 AV * const ary = cx->blk_sub.argarray;
1951 const int off = AvARRAY(ary) - AvALLOC(ary);
1954 Perl_init_dbargs(aTHX);
1956 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1957 av_extend(PL_dbargs, AvFILLp(ary) + off);
1958 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1959 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1961 /* XXX only hints propagated via op_private are currently
1962 * visible (others are not easily accessible, since they
1963 * use the global PL_hints) */
1964 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1967 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1969 if (old_warnings == pWARN_NONE ||
1970 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1971 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1972 else if (old_warnings == pWARN_ALL ||
1973 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1974 /* Get the bit mask for $warnings::Bits{all}, because
1975 * it could have been extended by warnings::register */
1977 HV * const bits = get_hv("warnings::Bits", 0);
1978 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1979 mask = newSVsv(*bits_all);
1982 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1986 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1990 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1991 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2000 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
2001 sv_reset(tmps, CopSTASH(PL_curcop));
2006 /* like pp_nextstate, but used instead when the debugger is active */
2011 PL_curcop = (COP*)PL_op;
2012 TAINT_NOT; /* Each statement is presumed innocent */
2013 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2018 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2019 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2022 register PERL_CONTEXT *cx;
2023 const I32 gimme = G_ARRAY;
2025 GV * const gv = PL_DBgv;
2026 register CV * const cv = GvCV(gv);
2029 DIE(aTHX_ "No DB::DB routine defined");
2031 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2032 /* don't do recursive DB::DB call */
2047 (void)(*CvXSUB(cv))(aTHX_ cv);
2054 PUSHBLOCK(cx, CXt_SUB, SP);
2056 cx->blk_sub.retop = PL_op->op_next;
2059 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2060 RETURNOP(CvSTART(cv));
2068 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2070 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2072 if (gimme == G_SCALAR) {
2074 *++newsp = (SvFLAGS(*SP) & flags) ? *SP : sv_mortalcopy(*SP);
2076 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2079 *++MARK = &PL_sv_undef;
2083 else if (gimme == G_ARRAY) {
2084 /* in case LEAVE wipes old return values */
2085 while (++MARK <= SP) {
2086 if (SvFLAGS(*MARK) & flags)
2089 *++newsp = sv_mortalcopy(*MARK);
2090 TAINT_NOT; /* Each item is independent */
2093 /* When this function was called with MARK == newsp, we reach this
2094 * point with SP == newsp. */
2103 register PERL_CONTEXT *cx;
2104 I32 gimme = GIMME_V;
2106 ENTER_with_name("block");
2109 PUSHBLOCK(cx, CXt_BLOCK, SP);
2117 register PERL_CONTEXT *cx;
2122 if (PL_op->op_flags & OPf_SPECIAL) {
2123 cx = &cxstack[cxstack_ix];
2124 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2129 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2132 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2133 PL_curpm = newpm; /* Don't pop $1 et al till now */
2135 LEAVE_with_name("block");
2143 register PERL_CONTEXT *cx;
2144 const I32 gimme = GIMME_V;
2145 void *itervar; /* location of the iteration variable */
2146 U8 cxtype = CXt_LOOP_FOR;
2148 ENTER_with_name("loop1");
2151 if (PL_op->op_targ) { /* "my" variable */
2152 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2153 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2154 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2155 SVs_PADSTALE, SVs_PADSTALE);
2157 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2159 itervar = PL_comppad;
2161 itervar = &PAD_SVl(PL_op->op_targ);
2164 else { /* symbol table variable */
2165 GV * const gv = MUTABLE_GV(POPs);
2166 SV** svp = &GvSV(gv);
2167 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2169 itervar = (void *)gv;
2172 if (PL_op->op_private & OPpITER_DEF)
2173 cxtype |= CXp_FOR_DEF;
2175 ENTER_with_name("loop2");
2177 PUSHBLOCK(cx, cxtype, SP);
2178 PUSHLOOP_FOR(cx, itervar, MARK);
2179 if (PL_op->op_flags & OPf_STACKED) {
2180 SV *maybe_ary = POPs;
2181 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2183 SV * const right = maybe_ary;
2186 if (RANGE_IS_NUMERIC(sv,right)) {
2187 cx->cx_type &= ~CXTYPEMASK;
2188 cx->cx_type |= CXt_LOOP_LAZYIV;
2189 /* Make sure that no-one re-orders cop.h and breaks our
2191 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2192 #ifdef NV_PRESERVES_UV
2193 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2194 (SvNV(sv) > (NV)IV_MAX)))
2196 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2197 (SvNV(right) < (NV)IV_MIN))))
2199 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2202 ((SvUV(sv) > (UV)IV_MAX) ||
2203 (SvNV(sv) > (NV)UV_MAX)))))
2205 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2207 ((SvNV(right) > 0) &&
2208 ((SvUV(right) > (UV)IV_MAX) ||
2209 (SvNV(right) > (NV)UV_MAX))))))
2211 DIE(aTHX_ "Range iterator outside integer range");
2212 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2213 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2215 /* for correct -Dstv display */
2216 cx->blk_oldsp = sp - PL_stack_base;
2220 cx->cx_type &= ~CXTYPEMASK;
2221 cx->cx_type |= CXt_LOOP_LAZYSV;
2222 /* Make sure that no-one re-orders cop.h and breaks our
2224 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2225 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2226 cx->blk_loop.state_u.lazysv.end = right;
2227 SvREFCNT_inc(right);
2228 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2229 /* This will do the upgrade to SVt_PV, and warn if the value
2230 is uninitialised. */
2231 (void) SvPV_nolen_const(right);
2232 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2233 to replace !SvOK() with a pointer to "". */
2235 SvREFCNT_dec(right);
2236 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2240 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2241 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2242 SvREFCNT_inc(maybe_ary);
2243 cx->blk_loop.state_u.ary.ix =
2244 (PL_op->op_private & OPpITER_REVERSED) ?
2245 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2249 else { /* iterating over items on the stack */
2250 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2251 if (PL_op->op_private & OPpITER_REVERSED) {
2252 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2255 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2265 register PERL_CONTEXT *cx;
2266 const I32 gimme = GIMME_V;
2268 ENTER_with_name("loop1");
2270 ENTER_with_name("loop2");
2272 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2273 PUSHLOOP_PLAIN(cx, SP);
2281 register PERL_CONTEXT *cx;
2288 assert(CxTYPE_is_LOOP(cx));
2290 newsp = PL_stack_base + cx->blk_loop.resetsp;
2293 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2296 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2297 PL_curpm = newpm; /* ... and pop $1 et al */
2299 LEAVE_with_name("loop2");
2300 LEAVE_with_name("loop1");
2306 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2307 PERL_CONTEXT *cx, PMOP *newpm)
2309 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2310 if (gimme == G_SCALAR) {
2311 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2313 const char *what = NULL;
2315 assert(MARK+1 == SP);
2316 if ((SvPADTMP(TOPs) ||
2317 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2320 !SvSMAGICAL(TOPs)) {
2322 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2323 : "a readonly value" : "a temporary";
2328 /* sub:lvalue{} will take us here. */
2337 "Can't return %s from lvalue subroutine", what
2342 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2343 *++newsp = SvREFCNT_inc(*SP);
2350 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2355 *++newsp = &PL_sv_undef;
2357 if (CxLVAL(cx) & OPpENTERSUB_DEREF) {
2361 if (cx->blk_sub.retop->op_type == OP_RV2SV)
2362 deref_type = OPpDEREF_SV;
2363 else if (cx->blk_sub.retop->op_type == OP_RV2AV)
2364 deref_type = OPpDEREF_AV;
2366 assert(cx->blk_sub.retop->op_type == OP_RV2HV);
2367 deref_type = OPpDEREF_HV;
2369 vivify_ref(TOPs, deref_type);
2373 else if (gimme == G_ARRAY) {
2374 assert (!(CxLVAL(cx) & OPpENTERSUB_DEREF));
2375 if (ref || !CxLVAL(cx))
2376 while (++MARK <= SP)
2380 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2381 ? sv_mortalcopy(*MARK)
2382 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2383 else while (++MARK <= SP) {
2384 if (*MARK != &PL_sv_undef
2386 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2391 /* Might be flattened array after $#array = */
2399 "Can't return a %s from lvalue subroutine",
2400 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2406 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2409 PL_stack_sp = newsp;
2415 register PERL_CONTEXT *cx;
2416 bool popsub2 = FALSE;
2417 bool clear_errsv = FALSE;
2419 bool gmagic = FALSE;
2428 const I32 cxix = dopoptosub(cxstack_ix);
2431 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2432 * sort block, which is a CXt_NULL
2435 PL_stack_base[1] = *PL_stack_sp;
2436 PL_stack_sp = PL_stack_base + 1;
2440 DIE(aTHX_ "Can't return outside a subroutine");
2442 if (cxix < cxstack_ix)
2445 if (CxMULTICALL(&cxstack[cxix])) {
2446 gimme = cxstack[cxix].blk_gimme;
2447 if (gimme == G_VOID)
2448 PL_stack_sp = PL_stack_base;
2449 else if (gimme == G_SCALAR) {
2450 PL_stack_base[1] = *PL_stack_sp;
2451 PL_stack_sp = PL_stack_base + 1;
2457 switch (CxTYPE(cx)) {
2460 lval = !!CvLVALUE(cx->blk_sub.cv);
2461 retop = cx->blk_sub.retop;
2462 gmagic = CxLVAL(cx) & OPpENTERSUB_DEREF;
2463 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2466 if (!(PL_in_eval & EVAL_KEEPERR))
2469 namesv = cx->blk_eval.old_namesv;
2470 retop = cx->blk_eval.retop;
2473 if (optype == OP_REQUIRE &&
2474 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2476 /* Unassume the success we assumed earlier. */
2477 (void)hv_delete(GvHVn(PL_incgv),
2478 SvPVX_const(namesv), SvCUR(namesv),
2480 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2485 retop = cx->blk_sub.retop;
2488 DIE(aTHX_ "panic: return");
2492 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2494 if (gimme == G_SCALAR) {
2497 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2498 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2499 *++newsp = SvREFCNT_inc(*SP);
2504 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2506 *++newsp = sv_mortalcopy(sv);
2508 if (gmagic) SvGETMAGIC(sv);
2511 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2513 if (gmagic) SvGETMAGIC(*SP);
2516 *++newsp = sv_mortalcopy(*SP);
2519 *++newsp = sv_mortalcopy(*SP);
2522 *++newsp = &PL_sv_undef;
2524 else if (gimme == G_ARRAY) {
2525 while (++MARK <= SP) {
2526 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2527 ? *MARK : sv_mortalcopy(*MARK);
2528 TAINT_NOT; /* Each item is independent */
2531 PL_stack_sp = newsp;
2535 /* Stack values are safe: */
2538 POPSUB(cx,sv); /* release CV and @_ ... */
2542 PL_curpm = newpm; /* ... and pop $1 et al */
2551 /* This duplicates parts of pp_leavesub, so that it can share code with
2559 register PERL_CONTEXT *cx;
2562 if (CxMULTICALL(&cxstack[cxstack_ix]))
2566 cxstack_ix++; /* temporarily protect top context */
2567 assert(CvLVALUE(cx->blk_sub.cv));
2571 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2575 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2576 PL_curpm = newpm; /* ... and pop $1 et al */
2579 return cx->blk_sub.retop;
2586 register PERL_CONTEXT *cx;
2597 if (PL_op->op_flags & OPf_SPECIAL) {
2598 cxix = dopoptoloop(cxstack_ix);
2600 DIE(aTHX_ "Can't \"last\" outside a loop block");
2603 cxix = dopoptolabel(cPVOP->op_pv);
2605 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2607 if (cxix < cxstack_ix)
2611 cxstack_ix++; /* temporarily protect top context */
2613 switch (CxTYPE(cx)) {
2614 case CXt_LOOP_LAZYIV:
2615 case CXt_LOOP_LAZYSV:
2617 case CXt_LOOP_PLAIN:
2619 newsp = PL_stack_base + cx->blk_loop.resetsp;
2620 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2624 nextop = cx->blk_sub.retop;
2628 nextop = cx->blk_eval.retop;
2632 nextop = cx->blk_sub.retop;
2635 DIE(aTHX_ "panic: last");
2639 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2640 pop2 == CXt_SUB ? SVs_TEMP : 0);
2645 /* Stack values are safe: */
2647 case CXt_LOOP_LAZYIV:
2648 case CXt_LOOP_PLAIN:
2649 case CXt_LOOP_LAZYSV:
2651 POPLOOP(cx); /* release loop vars ... */
2655 POPSUB(cx,sv); /* release CV and @_ ... */
2658 PL_curpm = newpm; /* ... and pop $1 et al */
2661 PERL_UNUSED_VAR(optype);
2662 PERL_UNUSED_VAR(gimme);
2670 register PERL_CONTEXT *cx;
2673 if (PL_op->op_flags & OPf_SPECIAL) {
2674 cxix = dopoptoloop(cxstack_ix);
2676 DIE(aTHX_ "Can't \"next\" outside a loop block");
2679 cxix = dopoptolabel(cPVOP->op_pv);
2681 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2683 if (cxix < cxstack_ix)
2686 /* clear off anything above the scope we're re-entering, but
2687 * save the rest until after a possible continue block */
2688 inner = PL_scopestack_ix;
2690 if (PL_scopestack_ix < inner)
2691 leave_scope(PL_scopestack[PL_scopestack_ix]);
2692 PL_curcop = cx->blk_oldcop;
2693 return (cx)->blk_loop.my_op->op_nextop;
2700 register PERL_CONTEXT *cx;
2704 if (PL_op->op_flags & OPf_SPECIAL) {
2705 cxix = dopoptoloop(cxstack_ix);
2707 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2710 cxix = dopoptolabel(cPVOP->op_pv);
2712 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2714 if (cxix < cxstack_ix)
2717 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2718 if (redo_op->op_type == OP_ENTER) {
2719 /* pop one less context to avoid $x being freed in while (my $x..) */
2721 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2722 redo_op = redo_op->op_next;
2726 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2727 LEAVE_SCOPE(oldsave);
2729 PL_curcop = cx->blk_oldcop;
2734 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2738 static const char too_deep[] = "Target of goto is too deeply nested";
2740 PERL_ARGS_ASSERT_DOFINDLABEL;
2743 Perl_croak(aTHX_ too_deep);
2744 if (o->op_type == OP_LEAVE ||
2745 o->op_type == OP_SCOPE ||
2746 o->op_type == OP_LEAVELOOP ||
2747 o->op_type == OP_LEAVESUB ||
2748 o->op_type == OP_LEAVETRY)
2750 *ops++ = cUNOPo->op_first;
2752 Perl_croak(aTHX_ too_deep);
2755 if (o->op_flags & OPf_KIDS) {
2757 /* First try all the kids at this level, since that's likeliest. */
2758 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2759 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2760 const char *kid_label = CopLABEL(kCOP);
2761 if (kid_label && strEQ(kid_label, label))
2765 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2766 if (kid == PL_lastgotoprobe)
2768 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2771 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2772 ops[-1]->op_type == OP_DBSTATE)
2777 if ((o = dofindlabel(kid, label, ops, oplimit)))
2790 register PERL_CONTEXT *cx;
2791 #define GOTO_DEPTH 64
2792 OP *enterops[GOTO_DEPTH];
2793 const char *label = NULL;
2794 const bool do_dump = (PL_op->op_type == OP_DUMP);
2795 static const char must_have_label[] = "goto must have label";
2797 if (PL_op->op_flags & OPf_STACKED) {
2798 SV * const sv = POPs;
2800 /* This egregious kludge implements goto &subroutine */
2801 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2803 register PERL_CONTEXT *cx;
2804 CV *cv = MUTABLE_CV(SvRV(sv));
2811 if (!CvROOT(cv) && !CvXSUB(cv)) {
2812 const GV * const gv = CvGV(cv);
2816 /* autoloaded stub? */
2817 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2819 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2820 GvNAMELEN(gv), FALSE);
2821 if (autogv && (cv = GvCV(autogv)))
2823 tmpstr = sv_newmortal();
2824 gv_efullname3(tmpstr, gv, NULL);
2825 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2827 DIE(aTHX_ "Goto undefined subroutine");
2830 /* First do some returnish stuff. */
2831 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2833 cxix = dopoptosub(cxstack_ix);
2835 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2836 if (cxix < cxstack_ix)
2840 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2841 if (CxTYPE(cx) == CXt_EVAL) {
2843 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2845 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2847 else if (CxMULTICALL(cx))
2848 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2849 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2850 /* put @_ back onto stack */
2851 AV* av = cx->blk_sub.argarray;
2853 items = AvFILLp(av) + 1;
2854 EXTEND(SP, items+1); /* @_ could have been extended. */
2855 Copy(AvARRAY(av), SP + 1, items, SV*);
2856 SvREFCNT_dec(GvAV(PL_defgv));
2857 GvAV(PL_defgv) = cx->blk_sub.savearray;
2859 /* abandon @_ if it got reified */
2864 av_extend(av, items-1);
2866 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2869 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2870 AV* const av = GvAV(PL_defgv);
2871 items = AvFILLp(av) + 1;
2872 EXTEND(SP, items+1); /* @_ could have been extended. */
2873 Copy(AvARRAY(av), SP + 1, items, SV*);
2877 if (CxTYPE(cx) == CXt_SUB &&
2878 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2879 SvREFCNT_dec(cx->blk_sub.cv);
2880 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2881 LEAVE_SCOPE(oldsave);
2883 /* Now do some callish stuff. */
2885 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2887 OP* const retop = cx->blk_sub.retop;
2888 SV **newsp __attribute__unused__;
2889 I32 gimme __attribute__unused__;
2892 for (index=0; index<items; index++)
2893 sv_2mortal(SP[-index]);
2896 /* XS subs don't have a CxSUB, so pop it */
2897 POPBLOCK(cx, PL_curpm);
2898 /* Push a mark for the start of arglist */
2901 (void)(*CvXSUB(cv))(aTHX_ cv);
2906 AV* const padlist = CvPADLIST(cv);
2907 if (CxTYPE(cx) == CXt_EVAL) {
2908 PL_in_eval = CxOLD_IN_EVAL(cx);
2909 PL_eval_root = cx->blk_eval.old_eval_root;
2910 cx->cx_type = CXt_SUB;
2912 cx->blk_sub.cv = cv;
2913 cx->blk_sub.olddepth = CvDEPTH(cv);
2916 if (CvDEPTH(cv) < 2)
2917 SvREFCNT_inc_simple_void_NN(cv);
2919 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2920 sub_crush_depth(cv);
2921 pad_push(padlist, CvDEPTH(cv));
2924 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2927 AV *const av = MUTABLE_AV(PAD_SVl(0));
2929 cx->blk_sub.savearray = GvAV(PL_defgv);
2930 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2931 CX_CURPAD_SAVE(cx->blk_sub);
2932 cx->blk_sub.argarray = av;
2934 if (items >= AvMAX(av) + 1) {
2935 SV **ary = AvALLOC(av);
2936 if (AvARRAY(av) != ary) {
2937 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2940 if (items >= AvMAX(av) + 1) {
2941 AvMAX(av) = items - 1;
2942 Renew(ary,items+1,SV*);
2948 Copy(mark,AvARRAY(av),items,SV*);
2949 AvFILLp(av) = items - 1;
2950 assert(!AvREAL(av));
2952 /* transfer 'ownership' of refcnts to new @_ */
2962 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2963 Perl_get_db_sub(aTHX_ NULL, cv);
2965 CV * const gotocv = get_cvs("DB::goto", 0);
2967 PUSHMARK( PL_stack_sp );
2968 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2973 RETURNOP(CvSTART(cv));
2977 label = SvPV_nolen_const(sv);
2978 if (!(do_dump || *label))
2979 DIE(aTHX_ must_have_label);
2982 else if (PL_op->op_flags & OPf_SPECIAL) {
2984 DIE(aTHX_ must_have_label);
2987 label = cPVOP->op_pv;
2991 if (label && *label) {
2992 OP *gotoprobe = NULL;
2993 bool leaving_eval = FALSE;
2994 bool in_block = FALSE;
2995 PERL_CONTEXT *last_eval_cx = NULL;
2999 PL_lastgotoprobe = NULL;
3001 for (ix = cxstack_ix; ix >= 0; ix--) {
3003 switch (CxTYPE(cx)) {
3005 leaving_eval = TRUE;
3006 if (!CxTRYBLOCK(cx)) {
3007 gotoprobe = (last_eval_cx ?
3008 last_eval_cx->blk_eval.old_eval_root :
3013 /* else fall through */
3014 case CXt_LOOP_LAZYIV:
3015 case CXt_LOOP_LAZYSV:
3017 case CXt_LOOP_PLAIN:
3020 gotoprobe = cx->blk_oldcop->op_sibling;
3026 gotoprobe = cx->blk_oldcop->op_sibling;
3029 gotoprobe = PL_main_root;
3032 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3033 gotoprobe = CvROOT(cx->blk_sub.cv);
3039 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3042 DIE(aTHX_ "panic: goto");
3043 gotoprobe = PL_main_root;
3047 retop = dofindlabel(gotoprobe, label,
3048 enterops, enterops + GOTO_DEPTH);
3051 if (gotoprobe->op_sibling &&
3052 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3053 gotoprobe->op_sibling->op_sibling) {
3054 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3055 label, enterops, enterops + GOTO_DEPTH);
3060 PL_lastgotoprobe = gotoprobe;
3063 DIE(aTHX_ "Can't find label %s", label);
3065 /* if we're leaving an eval, check before we pop any frames
3066 that we're not going to punt, otherwise the error
3069 if (leaving_eval && *enterops && enterops[1]) {
3071 for (i = 1; enterops[i]; i++)
3072 if (enterops[i]->op_type == OP_ENTERITER)
3073 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3076 if (*enterops && enterops[1]) {
3077 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3079 deprecate("\"goto\" to jump into a construct");
3082 /* pop unwanted frames */
3084 if (ix < cxstack_ix) {
3091 oldsave = PL_scopestack[PL_scopestack_ix];
3092 LEAVE_SCOPE(oldsave);
3095 /* push wanted frames */
3097 if (*enterops && enterops[1]) {
3098 OP * const oldop = PL_op;
3099 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3100 for (; enterops[ix]; ix++) {
3101 PL_op = enterops[ix];
3102 /* Eventually we may want to stack the needed arguments
3103 * for each op. For now, we punt on the hard ones. */
3104 if (PL_op->op_type == OP_ENTERITER)
3105 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3106 PL_op->op_ppaddr(aTHX);
3114 if (!retop) retop = PL_main_start;
3116 PL_restartop = retop;
3117 PL_do_undump = TRUE;
3121 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3122 PL_do_undump = FALSE;
3139 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3141 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3144 PL_exit_flags |= PERL_EXIT_EXPECTED;
3146 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3147 if (anum || !(PL_minus_c && PL_madskills))
3152 PUSHs(&PL_sv_undef);
3159 S_save_lines(pTHX_ AV *array, SV *sv)
3161 const char *s = SvPVX_const(sv);
3162 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3165 PERL_ARGS_ASSERT_SAVE_LINES;
3167 while (s && s < send) {
3169 SV * const tmpstr = newSV_type(SVt_PVMG);
3171 t = (const char *)memchr(s, '\n', send - s);
3177 sv_setpvn(tmpstr, s, t - s);
3178 av_store(array, line++, tmpstr);
3186 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3188 0 is used as continue inside eval,
3190 3 is used for a die caught by an inner eval - continue inner loop
3192 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3193 establish a local jmpenv to handle exception traps.
3198 S_docatch(pTHX_ OP *o)
3202 OP * const oldop = PL_op;
3206 assert(CATCH_GET == TRUE);
3213 assert(cxstack_ix >= 0);
3214 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3215 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3220 /* die caught by an inner eval - continue inner loop */
3221 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3222 PL_restartjmpenv = NULL;
3223 PL_op = PL_restartop;
3239 /* James Bond: Do you expect me to talk?
3240 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3242 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3243 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3245 Currently it is not used outside the core code. Best if it stays that way.
3247 Hence it's now deprecated, and will be removed.
3250 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3251 /* sv Text to convert to OP tree. */
3252 /* startop op_free() this to undo. */
3253 /* code Short string id of the caller. */
3255 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3256 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3259 /* Don't use this. It will go away without warning once the regexp engine is
3260 refactored not to use it. */
3262 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3265 dVAR; dSP; /* Make POPBLOCK work. */
3271 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3272 char *tmpbuf = tbuf;
3275 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3279 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3281 ENTER_with_name("eval");
3282 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3284 /* switch to eval mode */
3286 if (IN_PERL_COMPILETIME) {
3287 SAVECOPSTASH_FREE(&PL_compiling);
3288 CopSTASH_set(&PL_compiling, PL_curstash);
3290 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3291 SV * const sv = sv_newmortal();
3292 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3293 code, (unsigned long)++PL_evalseq,
3294 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3299 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3300 (unsigned long)++PL_evalseq);
3301 SAVECOPFILE_FREE(&PL_compiling);
3302 CopFILE_set(&PL_compiling, tmpbuf+2);
3303 SAVECOPLINE(&PL_compiling);
3304 CopLINE_set(&PL_compiling, 1);
3305 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3306 deleting the eval's FILEGV from the stash before gv_check() runs
3307 (i.e. before run-time proper). To work around the coredump that
3308 ensues, we always turn GvMULTI_on for any globals that were
3309 introduced within evals. See force_ident(). GSAR 96-10-12 */
3310 safestr = savepvn(tmpbuf, len);
3311 SAVEDELETE(PL_defstash, safestr, len);
3313 #ifdef OP_IN_REGISTER
3319 /* we get here either during compilation, or via pp_regcomp at runtime */
3320 runtime = IN_PERL_RUNTIME;
3323 runcv = find_runcv(NULL);
3325 /* At run time, we have to fetch the hints from PL_curcop. */
3326 PL_hints = PL_curcop->cop_hints;
3327 if (PL_hints & HINT_LOCALIZE_HH) {
3328 /* SAVEHINTS created a new HV in PL_hintgv, which we
3330 SvREFCNT_dec(GvHV(PL_hintgv));
3332 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3333 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3335 SAVECOMPILEWARNINGS();
3336 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3337 cophh_free(CopHINTHASH_get(&PL_compiling));
3338 /* XXX Does this need to avoid copying a label? */
3339 PL_compiling.cop_hints_hash
3340 = cophh_copy(PL_curcop->cop_hints_hash);
3344 PL_op->op_type = OP_ENTEREVAL;
3345 PL_op->op_flags = 0; /* Avoid uninit warning. */
3346 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3348 need_catch = CATCH_GET;
3352 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3354 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3355 CATCH_SET(need_catch);
3356 POPBLOCK(cx,PL_curpm);
3359 (*startop)->op_type = OP_NULL;
3360 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3361 /* XXX DAPM do this properly one year */
3362 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3363 LEAVE_with_name("eval");
3364 if (IN_PERL_COMPILETIME)
3365 CopHINTS_set(&PL_compiling, PL_hints);
3366 #ifdef OP_IN_REGISTER
3369 PERL_UNUSED_VAR(newsp);
3370 PERL_UNUSED_VAR(optype);
3372 return PL_eval_start;
3377 =for apidoc find_runcv
3379 Locate the CV corresponding to the currently executing sub or eval.
3380 If db_seqp is non_null, skip CVs that are in the DB package and populate
3381 *db_seqp with the cop sequence number at the point that the DB:: code was
3382 entered. (allows debuggers to eval in the scope of the breakpoint rather
3383 than in the scope of the debugger itself).
3389 Perl_find_runcv(pTHX_ U32 *db_seqp)
3395 *db_seqp = PL_curcop->cop_seq;
3396 for (si = PL_curstackinfo; si; si = si->si_prev) {
3398 for (ix = si->si_cxix; ix >= 0; ix--) {
3399 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3400 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3401 CV * const cv = cx->blk_sub.cv;
3402 /* skip DB:: code */
3403 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3404 *db_seqp = cx->blk_oldcop->cop_seq;
3409 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3417 /* Run yyparse() in a setjmp wrapper. Returns:
3418 * 0: yyparse() successful
3419 * 1: yyparse() failed
3423 S_try_yyparse(pTHX_ int gramtype)
3428 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3432 ret = yyparse(gramtype) ? 1 : 0;
3446 /* Compile a require/do, an eval '', or a /(?{...})/.
3447 * In the last case, startop is non-null, and contains the address of
3448 * a pointer that should be set to the just-compiled code.
3449 * outside is the lexically enclosing CV (if any) that invoked us.
3450 * Returns a bool indicating whether the compile was successful; if so,
3451 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3452 * pushes undef (also croaks if startop != NULL).
3456 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3459 OP * const saveop = PL_op;
3460 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3463 PL_in_eval = (in_require
3464 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3469 SAVESPTR(PL_compcv);
3470 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3471 CvEVAL_on(PL_compcv);
3472 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3473 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3475 CvOUTSIDE_SEQ(PL_compcv) = seq;
3476 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3478 /* set up a scratch pad */
3480 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3481 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3485 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3487 /* make sure we compile in the right package */
3489 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3490 SAVESPTR(PL_curstash);
3491 PL_curstash = CopSTASH(PL_curcop);
3493 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3494 SAVESPTR(PL_beginav);
3495 PL_beginav = newAV();
3496 SAVEFREESV(PL_beginav);
3497 SAVESPTR(PL_unitcheckav);
3498 PL_unitcheckav = newAV();
3499 SAVEFREESV(PL_unitcheckav);
3502 SAVEBOOL(PL_madskills);
3506 /* try to compile it */
3508 PL_eval_root = NULL;
3509 PL_curcop = &PL_compiling;
3510 CopARYBASE_set(PL_curcop, 0);
3511 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3512 PL_in_eval |= EVAL_KEEPERR;
3516 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3518 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3519 * so honour CATCH_GET and trap it here if necessary */
3521 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3523 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3524 SV **newsp; /* Used by POPBLOCK. */
3525 PERL_CONTEXT *cx = NULL;
3526 I32 optype; /* Used by POPEVAL. */
3530 PERL_UNUSED_VAR(newsp);
3531 PERL_UNUSED_VAR(optype);
3533 /* note that if yystatus == 3, then the EVAL CX block has already
3534 * been popped, and various vars restored */
3536 if (yystatus != 3) {
3538 op_free(PL_eval_root);
3539 PL_eval_root = NULL;
3541 SP = PL_stack_base + POPMARK; /* pop original mark */
3543 POPBLOCK(cx,PL_curpm);
3545 namesv = cx->blk_eval.old_namesv;
3549 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3551 msg = SvPVx_nolen_const(ERRSV);
3554 /* If cx is still NULL, it means that we didn't go in the
3555 * POPEVAL branch. */
3556 cx = &cxstack[cxstack_ix];
3557 assert(CxTYPE(cx) == CXt_EVAL);
3558 namesv = cx->blk_eval.old_namesv;
3560 (void)hv_store(GvHVn(PL_incgv),
3561 SvPVX_const(namesv), SvCUR(namesv),
3563 Perl_croak(aTHX_ "%sCompilation failed in require",
3564 *msg ? msg : "Unknown error\n");
3567 if (yystatus != 3) {
3568 POPBLOCK(cx,PL_curpm);
3571 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3572 (*msg ? msg : "Unknown error\n"));
3576 sv_setpvs(ERRSV, "Compilation error");
3579 PUSHs(&PL_sv_undef);
3583 CopLINE_set(&PL_compiling, 0);
3585 *startop = PL_eval_root;
3587 SAVEFREEOP(PL_eval_root);
3589 /* Set the context for this new optree.
3590 * Propagate the context from the eval(). */
3591 if ((gimme & G_WANT) == G_VOID)
3592 scalarvoid(PL_eval_root);
3593 else if ((gimme & G_WANT) == G_ARRAY)
3596 scalar(PL_eval_root);
3598 DEBUG_x(dump_eval());
3600 /* Register with debugger: */
3601 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3602 CV * const cv = get_cvs("DB::postponed", 0);
3606 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3608 call_sv(MUTABLE_SV(cv), G_DISCARD);
3612 if (PL_unitcheckav) {
3613 OP *es = PL_eval_start;
3614 call_list(PL_scopestack_ix, PL_unitcheckav);
3618 /* compiled okay, so do it */
3620 CvDEPTH(PL_compcv) = 1;
3621 SP = PL_stack_base + POPMARK; /* pop original mark */
3622 PL_op = saveop; /* The caller may need it. */
3623 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3630 S_check_type_and_open(pTHX_ SV *name)
3633 const char *p = SvPV_nolen_const(name);
3634 const int st_rc = PerlLIO_stat(p, &st);
3636 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3638 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3642 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3643 return PerlIO_openn(aTHX_ NULL, PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3645 return PerlIO_open(p, PERL_SCRIPT_MODE);
3649 #ifndef PERL_DISABLE_PMC
3651 S_doopen_pm(pTHX_ SV *name)
3654 const char *p = SvPV_const(name, namelen);
3656 PERL_ARGS_ASSERT_DOOPEN_PM;
3658 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3659 SV *const pmcsv = sv_newmortal();
3662 SvSetSV_nosteal(pmcsv,name);
3663 sv_catpvn(pmcsv, "c", 1);
3665 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3666 return check_type_and_open(pmcsv);
3668 return check_type_and_open(name);
3671 # define doopen_pm(name) check_type_and_open(name)
3672 #endif /* !PERL_DISABLE_PMC */
3677 register PERL_CONTEXT *cx;
3684 int vms_unixname = 0;
3686 const char *tryname = NULL;
3688 const I32 gimme = GIMME_V;
3689 int filter_has_file = 0;
3690 PerlIO *tryrsfp = NULL;
3691 SV *filter_cache = NULL;
3692 SV *filter_state = NULL;
3693 SV *filter_sub = NULL;
3699 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3700 sv = sv_2mortal(new_version(sv));
3701 if (!sv_derived_from(PL_patchlevel, "version"))
3702 upg_version(PL_patchlevel, TRUE);
3703 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3704 if ( vcmp(sv,PL_patchlevel) <= 0 )
3705 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3706 SVfARG(sv_2mortal(vnormal(sv))),
3707 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3711 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3714 SV * const req = SvRV(sv);
3715 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3717 /* get the left hand term */
3718 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3720 first = SvIV(*av_fetch(lav,0,0));
3721 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3722 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3723 || av_len(lav) > 1 /* FP with > 3 digits */
3724 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3726 DIE(aTHX_ "Perl %"SVf" required--this is only "
3728 SVfARG(sv_2mortal(vnormal(req))),
3729 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3732 else { /* probably 'use 5.10' or 'use 5.8' */
3737 second = SvIV(*av_fetch(lav,1,0));
3739 second /= second >= 600 ? 100 : 10;
3740 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3741 (int)first, (int)second);
3742 upg_version(hintsv, TRUE);
3744 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3745 "--this is only %"SVf", stopped",
3746 SVfARG(sv_2mortal(vnormal(req))),
3747 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3748 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3756 name = SvPV_const(sv, len);
3757 if (!(name && len > 0 && *name))
3758 DIE(aTHX_ "Null filename used");
3759 TAINT_PROPER("require");
3763 /* The key in the %ENV hash is in the syntax of file passed as the argument
3764 * usually this is in UNIX format, but sometimes in VMS format, which
3765 * can result in a module being pulled in more than once.
3766 * To prevent this, the key must be stored in UNIX format if the VMS
3767 * name can be translated to UNIX.
3769 if ((unixname = tounixspec(name, NULL)) != NULL) {
3770 unixlen = strlen(unixname);
3776 /* if not VMS or VMS name can not be translated to UNIX, pass it
3779 unixname = (char *) name;
3782 if (PL_op->op_type == OP_REQUIRE) {
3783 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3784 unixname, unixlen, 0);
3786 if (*svp != &PL_sv_undef)
3789 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3790 "Compilation failed in require", unixname);
3794 /* prepare to compile file */
3796 if (path_is_absolute(name)) {
3797 /* At this point, name is SvPVX(sv) */
3799 tryrsfp = doopen_pm(sv);
3802 AV * const ar = GvAVn(PL_incgv);
3808 namesv = newSV_type(SVt_PV);
3809 for (i = 0; i <= AvFILL(ar); i++) {
3810 SV * const dirsv = *av_fetch(ar, i, TRUE);
3812 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3819 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3820 && !sv_isobject(loader))
3822 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3825 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3826 PTR2UV(SvRV(dirsv)), name);
3827 tryname = SvPVX_const(namesv);
3830 ENTER_with_name("call_INC");
3838 if (sv_isobject(loader))
3839 count = call_method("INC", G_ARRAY);
3841 count = call_sv(loader, G_ARRAY);
3851 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3852 && !isGV_with_GP(SvRV(arg))) {
3853 filter_cache = SvRV(arg);
3854 SvREFCNT_inc_simple_void_NN(filter_cache);
3861 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3865 if (isGV_with_GP(arg)) {
3866 IO * const io = GvIO((const GV *)arg);
3871 tryrsfp = IoIFP(io);
3872 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3873 PerlIO_close(IoOFP(io));
3884 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3886 SvREFCNT_inc_simple_void_NN(filter_sub);
3889 filter_state = SP[i];
3890 SvREFCNT_inc_simple_void(filter_state);
3894 if (!tryrsfp && (filter_cache || filter_sub)) {
3895 tryrsfp = PerlIO_open(BIT_BUCKET,
3903 LEAVE_with_name("call_INC");
3905 /* Adjust file name if the hook has set an %INC entry.
3906 This needs to happen after the FREETMPS above. */
3907 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3909 tryname = SvPV_nolen_const(*svp);
3916 filter_has_file = 0;
3918 SvREFCNT_dec(filter_cache);
3919 filter_cache = NULL;
3922 SvREFCNT_dec(filter_state);
3923 filter_state = NULL;
3926 SvREFCNT_dec(filter_sub);
3931 if (!path_is_absolute(name)
3937 dir = SvPV_const(dirsv, dirlen);
3945 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3947 sv_setpv(namesv, unixdir);
3948 sv_catpv(namesv, unixname);
3950 # ifdef __SYMBIAN32__
3951 if (PL_origfilename[0] &&
3952 PL_origfilename[1] == ':' &&
3953 !(dir[0] && dir[1] == ':'))
3954 Perl_sv_setpvf(aTHX_ namesv,
3959 Perl_sv_setpvf(aTHX_ namesv,
3963 /* The equivalent of
3964 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3965 but without the need to parse the format string, or
3966 call strlen on either pointer, and with the correct
3967 allocation up front. */
3969 char *tmp = SvGROW(namesv, dirlen + len + 2);
3971 memcpy(tmp, dir, dirlen);
3974 /* name came from an SV, so it will have a '\0' at the
3975 end that we can copy as part of this memcpy(). */
3976 memcpy(tmp, name, len + 1);
3978 SvCUR_set(namesv, dirlen + len + 1);
3983 TAINT_PROPER("require");
3984 tryname = SvPVX_const(namesv);
3985 tryrsfp = doopen_pm(namesv);
3987 if (tryname[0] == '.' && tryname[1] == '/') {
3989 while (*++tryname == '/');
3993 else if (errno == EMFILE)
3994 /* no point in trying other paths if out of handles */
4003 if (PL_op->op_type == OP_REQUIRE) {
4004 if(errno == EMFILE) {
4005 /* diag_listed_as: Can't locate %s */
4006 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4008 if (namesv) { /* did we lookup @INC? */
4009 AV * const ar = GvAVn(PL_incgv);
4011 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4012 for (i = 0; i <= AvFILL(ar); i++) {
4013 sv_catpvs(inc, " ");
4014 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4017 /* diag_listed_as: Can't locate %s */
4019 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4021 (memEQ(name + len - 2, ".h", 3)
4022 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4023 (memEQ(name + len - 3, ".ph", 4)
4024 ? " (did you run h2ph?)" : ""),
4029 DIE(aTHX_ "Can't locate %s", name);
4035 SETERRNO(0, SS_NORMAL);
4037 /* Assume success here to prevent recursive requirement. */
4038 /* name is never assigned to again, so len is still strlen(name) */
4039 /* Check whether a hook in @INC has already filled %INC */
4041 (void)hv_store(GvHVn(PL_incgv),
4042 unixname, unixlen, newSVpv(tryname,0),0);
4044 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4046 (void)hv_store(GvHVn(PL_incgv),
4047 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4050 ENTER_with_name("eval");
4052 SAVECOPFILE_FREE(&PL_compiling);
4053 CopFILE_set(&PL_compiling, tryname);
4054 lex_start(NULL, tryrsfp, 0);
4058 hv_clear(GvHV(PL_hintgv));
4060 SAVECOMPILEWARNINGS();
4061 if (PL_dowarn & G_WARN_ALL_ON)
4062 PL_compiling.cop_warnings = pWARN_ALL ;
4063 else if (PL_dowarn & G_WARN_ALL_OFF)
4064 PL_compiling.cop_warnings = pWARN_NONE ;
4066 PL_compiling.cop_warnings = pWARN_STD ;
4068 if (filter_sub || filter_cache) {
4069 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4070 than hanging another SV from it. In turn, filter_add() optionally
4071 takes the SV to use as the filter (or creates a new SV if passed
4072 NULL), so simply pass in whatever value filter_cache has. */
4073 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4074 IoLINES(datasv) = filter_has_file;
4075 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4076 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4079 /* switch to eval mode */
4080 PUSHBLOCK(cx, CXt_EVAL, SP);
4082 cx->blk_eval.retop = PL_op->op_next;
4084 SAVECOPLINE(&PL_compiling);
4085 CopLINE_set(&PL_compiling, 0);
4089 /* Store and reset encoding. */
4090 encoding = PL_encoding;
4093 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4094 op = DOCATCH(PL_eval_start);
4096 op = PL_op->op_next;
4098 /* Restore encoding. */
4099 PL_encoding = encoding;
4104 /* This is a op added to hold the hints hash for
4105 pp_entereval. The hash can be modified by the code
4106 being eval'ed, so we return a copy instead. */
4112 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4120 register PERL_CONTEXT *cx;
4122 const I32 gimme = GIMME_V;
4123 const U32 was = PL_breakable_sub_gen;
4124 char tbuf[TYPE_DIGITS(long) + 12];
4125 bool saved_delete = FALSE;
4126 char *tmpbuf = tbuf;
4130 HV *saved_hh = NULL;
4132 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4133 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4137 /* make sure we've got a plain PV (no overload etc) before testing
4138 * for taint. Making a copy here is probably overkill, but better
4139 * safe than sorry */
4141 const char * const p = SvPV_const(sv, len);
4143 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4146 TAINT_IF(SvTAINTED(sv));
4147 TAINT_PROPER("eval");
4149 ENTER_with_name("eval");
4150 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4153 /* switch to eval mode */
4155 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4156 SV * const temp_sv = sv_newmortal();
4157 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4158 (unsigned long)++PL_evalseq,
4159 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4160 tmpbuf = SvPVX(temp_sv);
4161 len = SvCUR(temp_sv);
4164 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4165 SAVECOPFILE_FREE(&PL_compiling);
4166 CopFILE_set(&PL_compiling, tmpbuf+2);
4167 SAVECOPLINE(&PL_compiling);
4168 CopLINE_set(&PL_compiling, 1);
4169 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4170 deleting the eval's FILEGV from the stash before gv_check() runs
4171 (i.e. before run-time proper). To work around the coredump that
4172 ensues, we always turn GvMULTI_on for any globals that were
4173 introduced within evals. See force_ident(). GSAR 96-10-12 */
4175 PL_hints = PL_op->op_targ;
4177 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4178 SvREFCNT_dec(GvHV(PL_hintgv));
4179 GvHV(PL_hintgv) = saved_hh;
4181 SAVECOMPILEWARNINGS();
4182 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4183 cophh_free(CopHINTHASH_get(&PL_compiling));
4184 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
4185 /* The label, if present, is the first entry on the chain. So rather
4186 than writing a blank label in front of it (which involves an
4187 allocation), just use the next entry in the chain. */
4188 PL_compiling.cop_hints_hash
4189 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4190 /* Check the assumption that this removed the label. */
4191 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4194 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4195 /* special case: an eval '' executed within the DB package gets lexically
4196 * placed in the first non-DB CV rather than the current CV - this
4197 * allows the debugger to execute code, find lexicals etc, in the
4198 * scope of the code being debugged. Passing &seq gets find_runcv
4199 * to do the dirty work for us */
4200 runcv = find_runcv(&seq);
4202 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4204 cx->blk_eval.retop = PL_op->op_next;
4206 /* prepare to compile string */
4208 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4209 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4211 char *const safestr = savepvn(tmpbuf, len);
4212 SAVEDELETE(PL_defstash, safestr, len);
4213 saved_delete = TRUE;
4218 if (doeval(gimme, NULL, runcv, seq)) {
4219 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4220 ? (PERLDB_LINE || PERLDB_SAVESRC)
4221 : PERLDB_SAVESRC_NOSUBS) {
4222 /* Retain the filegv we created. */
4223 } else if (!saved_delete) {
4224 char *const safestr = savepvn(tmpbuf, len);
4225 SAVEDELETE(PL_defstash, safestr, len);
4227 return DOCATCH(PL_eval_start);
4229 /* We have already left the scope set up earlier thanks to the LEAVE
4231 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4232 ? (PERLDB_LINE || PERLDB_SAVESRC)
4233 : PERLDB_SAVESRC_INVALID) {
4234 /* Retain the filegv we created. */
4235 } else if (!saved_delete) {
4236 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4238 return PL_op->op_next;
4248 register PERL_CONTEXT *cx;
4250 const U8 save_flags = PL_op -> op_flags;
4257 namesv = cx->blk_eval.old_namesv;
4258 retop = cx->blk_eval.retop;
4261 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4263 PL_curpm = newpm; /* Don't pop $1 et al till now */
4266 assert(CvDEPTH(PL_compcv) == 1);
4268 CvDEPTH(PL_compcv) = 0;
4270 if (optype == OP_REQUIRE &&
4271 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4273 /* Unassume the success we assumed earlier. */
4274 (void)hv_delete(GvHVn(PL_incgv),
4275 SvPVX_const(namesv), SvCUR(namesv),
4277 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4279 /* die_unwind() did LEAVE, or we won't be here */
4282 LEAVE_with_name("eval");
4283 if (!(save_flags & OPf_SPECIAL)) {
4291 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4292 close to the related Perl_create_eval_scope. */
4294 Perl_delete_eval_scope(pTHX)
4299 register PERL_CONTEXT *cx;
4305 LEAVE_with_name("eval_scope");
4306 PERL_UNUSED_VAR(newsp);
4307 PERL_UNUSED_VAR(gimme);
4308 PERL_UNUSED_VAR(optype);
4311 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4312 also needed by Perl_fold_constants. */
4314 Perl_create_eval_scope(pTHX_ U32 flags)
4317 const I32 gimme = GIMME_V;
4319 ENTER_with_name("eval_scope");
4322 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4325 PL_in_eval = EVAL_INEVAL;
4326 if (flags & G_KEEPERR)
4327 PL_in_eval |= EVAL_KEEPERR;
4330 if (flags & G_FAKINGEVAL) {
4331 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4339 PERL_CONTEXT * const cx = create_eval_scope(0);
4340 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4341 return DOCATCH(PL_op->op_next);
4350 register PERL_CONTEXT *cx;
4356 PERL_UNUSED_VAR(optype);
4359 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4360 PL_curpm = newpm; /* Don't pop $1 et al till now */
4362 LEAVE_with_name("eval_scope");
4370 register PERL_CONTEXT *cx;
4371 const I32 gimme = GIMME_V;
4373 ENTER_with_name("given");
4376 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4378 PUSHBLOCK(cx, CXt_GIVEN, SP);
4387 register PERL_CONTEXT *cx;
4391 PERL_UNUSED_CONTEXT;
4394 assert(CxTYPE(cx) == CXt_GIVEN);
4397 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4398 PL_curpm = newpm; /* Don't pop $1 et al till now */
4400 LEAVE_with_name("given");
4404 /* Helper routines used by pp_smartmatch */
4406 S_make_matcher(pTHX_ REGEXP *re)
4409 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4411 PERL_ARGS_ASSERT_MAKE_MATCHER;
4413 PM_SETRE(matcher, ReREFCNT_inc(re));
4415 SAVEFREEOP((OP *) matcher);
4416 ENTER_with_name("matcher"); SAVETMPS;
4422 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4427 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4429 PL_op = (OP *) matcher;
4432 (void) Perl_pp_match(aTHX);
4434 return (SvTRUEx(POPs));
4438 S_destroy_matcher(pTHX_ PMOP *matcher)
4442 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4443 PERL_UNUSED_ARG(matcher);
4446 LEAVE_with_name("matcher");
4449 /* Do a smart match */
4452 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4453 return do_smartmatch(NULL, NULL);
4456 /* This version of do_smartmatch() implements the
4457 * table of smart matches that is found in perlsyn.
4460 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4465 bool object_on_left = FALSE;
4466 SV *e = TOPs; /* e is for 'expression' */
4467 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4469 /* Take care only to invoke mg_get() once for each argument.
4470 * Currently we do this by copying the SV if it's magical. */
4473 d = sv_mortalcopy(d);
4480 e = sv_mortalcopy(e);
4482 /* First of all, handle overload magic of the rightmost argument */
4485 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4486 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4488 tmpsv = amagic_call(d, e, smart_amg, 0);
4495 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4498 SP -= 2; /* Pop the values */
4503 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4510 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4511 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4512 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4514 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4515 object_on_left = TRUE;
4518 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4520 if (object_on_left) {
4521 goto sm_any_sub; /* Treat objects like scalars */
4523 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4524 /* Test sub truth for each key */
4526 bool andedresults = TRUE;
4527 HV *hv = (HV*) SvRV(d);
4528 I32 numkeys = hv_iterinit(hv);
4529 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4532 while ( (he = hv_iternext(hv)) ) {
4533 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4534 ENTER_with_name("smartmatch_hash_key_test");
4537 PUSHs(hv_iterkeysv(he));
4539 c = call_sv(e, G_SCALAR);
4542 andedresults = FALSE;
4544 andedresults = SvTRUEx(POPs) && andedresults;
4546 LEAVE_with_name("smartmatch_hash_key_test");
4553 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4554 /* Test sub truth for each element */
4556 bool andedresults = TRUE;
4557 AV *av = (AV*) SvRV(d);
4558 const I32 len = av_len(av);
4559 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4562 for (i = 0; i <= len; ++i) {
4563 SV * const * const svp = av_fetch(av, i, FALSE);
4564 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4565 ENTER_with_name("smartmatch_array_elem_test");
4571 c = call_sv(e, G_SCALAR);
4574 andedresults = FALSE;
4576 andedresults = SvTRUEx(POPs) && andedresults;
4578 LEAVE_with_name("smartmatch_array_elem_test");
4587 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4588 ENTER_with_name("smartmatch_coderef");
4593 c = call_sv(e, G_SCALAR);
4597 else if (SvTEMP(TOPs))
4598 SvREFCNT_inc_void(TOPs);
4600 LEAVE_with_name("smartmatch_coderef");
4605 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4606 if (object_on_left) {
4607 goto sm_any_hash; /* Treat objects like scalars */
4609 else if (!SvOK(d)) {
4610 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4613 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4614 /* Check that the key-sets are identical */
4616 HV *other_hv = MUTABLE_HV(SvRV(d));
4618 bool other_tied = FALSE;
4619 U32 this_key_count = 0,
4620 other_key_count = 0;
4621 HV *hv = MUTABLE_HV(SvRV(e));
4623 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4624 /* Tied hashes don't know how many keys they have. */
4625 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4628 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4629 HV * const temp = other_hv;
4634 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4637 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4640 /* The hashes have the same number of keys, so it suffices
4641 to check that one is a subset of the other. */
4642 (void) hv_iterinit(hv);
4643 while ( (he = hv_iternext(hv)) ) {
4644 SV *key = hv_iterkeysv(he);
4646 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4649 if(!hv_exists_ent(other_hv, key, 0)) {
4650 (void) hv_iterinit(hv); /* reset iterator */
4656 (void) hv_iterinit(other_hv);
4657 while ( hv_iternext(other_hv) )
4661 other_key_count = HvUSEDKEYS(other_hv);
4663 if (this_key_count != other_key_count)
4668 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4669 AV * const other_av = MUTABLE_AV(SvRV(d));
4670 const I32 other_len = av_len(other_av) + 1;
4672 HV *hv = MUTABLE_HV(SvRV(e));
4674 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4675 for (i = 0; i < other_len; ++i) {
4676 SV ** const svp = av_fetch(other_av, i, FALSE);
4677 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4678 if (svp) { /* ??? When can this not happen? */
4679 if (hv_exists_ent(hv, *svp, 0))
4685 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4686 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4689 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4691 HV *hv = MUTABLE_HV(SvRV(e));
4693 (void) hv_iterinit(hv);
4694 while ( (he = hv_iternext(hv)) ) {
4695 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4696 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4697 (void) hv_iterinit(hv);
4698 destroy_matcher(matcher);
4702 destroy_matcher(matcher);
4708 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4709 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4716 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4717 if (object_on_left) {
4718 goto sm_any_array; /* Treat objects like scalars */
4720 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4721 AV * const other_av = MUTABLE_AV(SvRV(e));
4722 const I32 other_len = av_len(other_av) + 1;
4725 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4726 for (i = 0; i < other_len; ++i) {
4727 SV ** const svp = av_fetch(other_av, i, FALSE);
4729 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4730 if (svp) { /* ??? When can this not happen? */
4731 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4737 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4738 AV *other_av = MUTABLE_AV(SvRV(d));
4739 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4740 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4744 const I32 other_len = av_len(other_av);
4746 if (NULL == seen_this) {
4747 seen_this = newHV();
4748 (void) sv_2mortal(MUTABLE_SV(seen_this));
4750 if (NULL == seen_other) {
4751 seen_other = newHV();
4752 (void) sv_2mortal(MUTABLE_SV(seen_other));
4754 for(i = 0; i <= other_len; ++i) {
4755 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4756 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4758 if (!this_elem || !other_elem) {
4759 if ((this_elem && SvOK(*this_elem))
4760 || (other_elem && SvOK(*other_elem)))
4763 else if (hv_exists_ent(seen_this,
4764 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4765 hv_exists_ent(seen_other,
4766 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4768 if (*this_elem != *other_elem)
4772 (void)hv_store_ent(seen_this,
4773 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4775 (void)hv_store_ent(seen_other,
4776 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4782 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4783 (void) do_smartmatch(seen_this, seen_other);
4785 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4794 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4795 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4798 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4799 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4802 for(i = 0; i <= this_len; ++i) {
4803 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4804 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4805 if (svp && matcher_matches_sv(matcher, *svp)) {
4806 destroy_matcher(matcher);
4810 destroy_matcher(matcher);
4814 else if (!SvOK(d)) {
4815 /* undef ~~ array */
4816 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4819 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4820 for (i = 0; i <= this_len; ++i) {
4821 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4822 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4823 if (!svp || !SvOK(*svp))
4832 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4834 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4835 for (i = 0; i <= this_len; ++i) {
4836 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4843 /* infinite recursion isn't supposed to happen here */
4844 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4845 (void) do_smartmatch(NULL, NULL);
4847 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4856 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4857 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4858 SV *t = d; d = e; e = t;
4859 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4862 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4863 SV *t = d; d = e; e = t;
4864 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4865 goto sm_regex_array;
4868 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4870 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4872 PUSHs(matcher_matches_sv(matcher, d)
4875 destroy_matcher(matcher);
4880 /* See if there is overload magic on left */
4881 else if (object_on_left && SvAMAGIC(d)) {
4883 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4884 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4887 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4895 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4898 else if (!SvOK(d)) {
4899 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4900 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4905 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4906 DEBUG_M(if (SvNIOK(e))
4907 Perl_deb(aTHX_ " applying rule Any-Num\n");
4909 Perl_deb(aTHX_ " applying rule Num-numish\n");
4911 /* numeric comparison */
4914 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4915 (void) Perl_pp_i_eq(aTHX);
4917 (void) Perl_pp_eq(aTHX);
4925 /* As a last resort, use string comparison */
4926 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4929 return Perl_pp_seq(aTHX);
4935 register PERL_CONTEXT *cx;
4936 const I32 gimme = GIMME_V;
4938 /* This is essentially an optimization: if the match
4939 fails, we don't want to push a context and then
4940 pop it again right away, so we skip straight
4941 to the op that follows the leavewhen.
4942 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4944 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4945 RETURNOP(cLOGOP->op_other->op_next);
4947 ENTER_with_name("when");
4950 PUSHBLOCK(cx, CXt_WHEN, SP);
4960 register PERL_CONTEXT *cx;
4965 cxix = dopoptogiven(cxstack_ix);
4967 DIE(aTHX_ "Can't use when() outside a topicalizer");
4970 assert(CxTYPE(cx) == CXt_WHEN);
4973 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4974 PL_curpm = newpm; /* pop $1 et al */
4976 LEAVE_with_name("when");
4978 if (cxix < cxstack_ix)
4981 cx = &cxstack[cxix];
4983 if (CxFOREACH(cx)) {
4984 /* clear off anything above the scope we're re-entering */
4985 I32 inner = PL_scopestack_ix;
4988 if (PL_scopestack_ix < inner)
4989 leave_scope(PL_scopestack[PL_scopestack_ix]);
4990 PL_curcop = cx->blk_oldcop;
4992 return cx->blk_loop.my_op->op_nextop;
4995 RETURNOP(cx->blk_givwhen.leave_op);
5002 register PERL_CONTEXT *cx;
5007 PERL_UNUSED_VAR(gimme);
5009 cxix = dopoptowhen(cxstack_ix);
5011 DIE(aTHX_ "Can't \"continue\" outside a when block");
5013 if (cxix < cxstack_ix)
5017 assert(CxTYPE(cx) == CXt_WHEN);
5020 PL_curpm = newpm; /* pop $1 et al */
5022 LEAVE_with_name("when");
5023 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5030 register PERL_CONTEXT *cx;
5032 cxix = dopoptogiven(cxstack_ix);
5034 DIE(aTHX_ "Can't \"break\" outside a given block");
5036 cx = &cxstack[cxix];
5038 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5040 if (cxix < cxstack_ix)
5043 /* Restore the sp at the time we entered the given block */
5046 return cx->blk_givwhen.leave_op;
5050 S_doparseform(pTHX_ SV *sv)
5053 register char *s = SvPV(sv, len);
5054 register char *send;
5055 register char *base = NULL; /* start of current field */
5056 register I32 skipspaces = 0; /* number of contiguous spaces seen */
5057 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5058 bool repeat = FALSE; /* ~~ seen on this line */
5059 bool postspace = FALSE; /* a text field may need right padding */
5062 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5064 bool ischop; /* it's a ^ rather than a @ */
5065 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5066 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5070 PERL_ARGS_ASSERT_DOPARSEFORM;
5073 Perl_croak(aTHX_ "Null picture in formline");
5075 if (SvTYPE(sv) >= SVt_PVMG) {
5076 /* This might, of course, still return NULL. */
5077 mg = mg_find(sv, PERL_MAGIC_fm);
5079 sv_upgrade(sv, SVt_PVMG);
5083 /* still the same as previously-compiled string? */
5084 SV *old = mg->mg_obj;
5085 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5086 && len == SvCUR(old)
5087 && strnEQ(SvPVX(old), SvPVX(sv), len)
5089 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5093 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5094 Safefree(mg->mg_ptr);
5100 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5101 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5104 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5105 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5109 /* estimate the buffer size needed */
5110 for (base = s; s <= send; s++) {
5111 if (*s == '\n' || *s == '@' || *s == '^')
5117 Newx(fops, maxops, U32);
5122 *fpc++ = FF_LINEMARK;
5123 noblank = repeat = FALSE;
5141 case ' ': case '\t':
5148 } /* else FALL THROUGH */
5156 *fpc++ = FF_LITERAL;
5164 *fpc++ = (U32)skipspaces;
5168 *fpc++ = FF_NEWLINE;
5172 arg = fpc - linepc + 1;
5179 *fpc++ = FF_LINEMARK;
5180 noblank = repeat = FALSE;
5189 ischop = s[-1] == '^';
5195 arg = (s - base) - 1;
5197 *fpc++ = FF_LITERAL;
5203 if (*s == '*') { /* @* or ^* */
5205 *fpc++ = 2; /* skip the @* or ^* */
5207 *fpc++ = FF_LINESNGL;
5210 *fpc++ = FF_LINEGLOB;
5212 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5213 arg = ischop ? FORM_NUM_BLANK : 0;
5218 const char * const f = ++s;
5221 arg |= FORM_NUM_POINT + (s - f);
5223 *fpc++ = s - base; /* fieldsize for FETCH */
5224 *fpc++ = FF_DECIMAL;
5226 unchopnum |= ! ischop;
5228 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5229 arg = ischop ? FORM_NUM_BLANK : 0;
5231 s++; /* skip the '0' first */
5235 const char * const f = ++s;
5238 arg |= FORM_NUM_POINT + (s - f);
5240 *fpc++ = s - base; /* fieldsize for FETCH */
5241 *fpc++ = FF_0DECIMAL;
5243 unchopnum |= ! ischop;
5245 else { /* text field */
5247 bool ismore = FALSE;
5250 while (*++s == '>') ;
5251 prespace = FF_SPACE;
5253 else if (*s == '|') {
5254 while (*++s == '|') ;
5255 prespace = FF_HALFSPACE;
5260 while (*++s == '<') ;
5263 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5267 *fpc++ = s - base; /* fieldsize for FETCH */
5269 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5272 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5286 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5289 mg->mg_ptr = (char *) fops;
5290 mg->mg_len = arg * sizeof(U32);
5291 mg->mg_obj = sv_copy;
5292 mg->mg_flags |= MGf_REFCOUNTED;
5294 if (unchopnum && repeat)
5295 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5302 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5304 /* Can value be printed in fldsize chars, using %*.*f ? */
5308 int intsize = fldsize - (value < 0 ? 1 : 0);
5310 if (frcsize & FORM_NUM_POINT)
5312 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5315 while (intsize--) pwr *= 10.0;
5316 while (frcsize--) eps /= 10.0;
5319 if (value + eps >= pwr)
5322 if (value - eps <= -pwr)
5329 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5332 SV * const datasv = FILTER_DATA(idx);
5333 const int filter_has_file = IoLINES(datasv);
5334 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5335 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5340 char *prune_from = NULL;
5341 bool read_from_cache = FALSE;
5344 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5346 assert(maxlen >= 0);
5349 /* I was having segfault trouble under Linux 2.2.5 after a
5350 parse error occured. (Had to hack around it with a test
5351 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5352 not sure where the trouble is yet. XXX */
5355 SV *const cache = datasv;
5358 const char *cache_p = SvPV(cache, cache_len);
5362 /* Running in block mode and we have some cached data already.
5364 if (cache_len >= umaxlen) {
5365 /* In fact, so much data we don't even need to call
5370 const char *const first_nl =
5371 (const char *)memchr(cache_p, '\n', cache_len);
5373 take = first_nl + 1 - cache_p;
5377 sv_catpvn(buf_sv, cache_p, take);
5378 sv_chop(cache, cache_p + take);
5379 /* Definitely not EOF */
5383 sv_catsv(buf_sv, cache);
5385 umaxlen -= cache_len;
5388 read_from_cache = TRUE;
5392 /* Filter API says that the filter appends to the contents of the buffer.
5393 Usually the buffer is "", so the details don't matter. But if it's not,
5394 then clearly what it contains is already filtered by this filter, so we
5395 don't want to pass it in a second time.
5396 I'm going to use a mortal in case the upstream filter croaks. */
5397 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5398 ? sv_newmortal() : buf_sv;
5399 SvUPGRADE(upstream, SVt_PV);
5401 if (filter_has_file) {
5402 status = FILTER_READ(idx+1, upstream, 0);
5405 if (filter_sub && status >= 0) {
5409 ENTER_with_name("call_filter_sub");
5410 save_gp(PL_defgv, 0);
5411 GvINTRO_off(PL_defgv);
5412 SAVEGENERICSV(GvSV(PL_defgv));
5416 DEFSV_set(upstream);
5417 SvREFCNT_inc_simple_void_NN(upstream);
5421 PUSHs(filter_state);
5424 count = call_sv(filter_sub, G_SCALAR);
5436 LEAVE_with_name("call_filter_sub");
5439 if(SvOK(upstream)) {
5440 got_p = SvPV(upstream, got_len);
5442 if (got_len > umaxlen) {
5443 prune_from = got_p + umaxlen;
5446 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5447 if (first_nl && first_nl + 1 < got_p + got_len) {
5448 /* There's a second line here... */
5449 prune_from = first_nl + 1;
5454 /* Oh. Too long. Stuff some in our cache. */
5455 STRLEN cached_len = got_p + got_len - prune_from;
5456 SV *const cache = datasv;
5459 /* Cache should be empty. */
5460 assert(!SvCUR(cache));
5463 sv_setpvn(cache, prune_from, cached_len);
5464 /* If you ask for block mode, you may well split UTF-8 characters.
5465 "If it breaks, you get to keep both parts"
5466 (Your code is broken if you don't put them back together again
5467 before something notices.) */
5468 if (SvUTF8(upstream)) {
5471 SvCUR_set(upstream, got_len - cached_len);
5473 /* Can't yet be EOF */
5478 /* If they are at EOF but buf_sv has something in it, then they may never
5479 have touched the SV upstream, so it may be undefined. If we naively
5480 concatenate it then we get a warning about use of uninitialised value.
5482 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5483 sv_catsv(buf_sv, upstream);
5487 IoLINES(datasv) = 0;
5489 SvREFCNT_dec(filter_state);
5490 IoTOP_GV(datasv) = NULL;
5493 SvREFCNT_dec(filter_sub);
5494 IoBOTTOM_GV(datasv) = NULL;
5496 filter_del(S_run_user_filter);
5498 if (status == 0 && read_from_cache) {
5499 /* If we read some data from the cache (and by getting here it implies
5500 that we emptied the cache) then we aren't yet at EOF, and mustn't
5501 report that to our caller. */
5507 /* perhaps someone can come up with a better name for
5508 this? it is not really "absolute", per se ... */
5510 S_path_is_absolute(const char *name)
5512 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5514 if (PERL_FILE_IS_ABSOLUTE(name)
5516 || (*name == '.' && ((name[1] == '/' ||
5517 (name[1] == '.' && name[2] == '/'))
5518 || (name[1] == '\\' ||
5519 ( name[1] == '.' && name[2] == '\\')))
5522 || (*name == '.' && (name[1] == '/' ||
5523 (name[1] == '.' && name[2] == '/')))
5535 * c-indentation-style: bsd
5537 * indent-tabs-mode: t
5540 * ex: set ts=8 sts=4 sw=4 noet: