3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
80 register PMOP *pm = (PMOP*)cLOGOP->op_other;
85 const regexp_engine *eng;
88 if (PL_op->op_flags & OPf_STACKED) {
98 /* prevent recompiling under /o and ithreads. */
99 #if defined(USE_ITHREADS)
100 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
107 assert (re != (REGEXP*) &PL_sv_undef);
108 eng = re ? RX_ENGINE(re) : current_re_engine();
110 new_re = (eng->op_comp
112 : &Perl_re_op_compile
113 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
115 (pm->op_pmflags & RXf_PMf_COMPILETIME),
117 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
118 if (pm->op_pmflags & PMf_HAS_CV)
119 ((struct regexp *)SvANY(new_re))->qr_anoncv
120 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
124 /* The match's LHS's get-magic might need to access this op's regexp
125 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
126 get-magic now before we replace the regexp. Hopefully this hack can
127 be replaced with the approach described at
128 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
130 if (pm->op_type == OP_MATCH) {
132 const bool was_tainted = PL_tainted;
133 if (pm->op_flags & OPf_STACKED)
135 else if (pm->op_private & OPpTARGET_MY)
136 lhs = PAD_SV(pm->op_targ);
139 /* Restore the previous value of PL_tainted (which may have been
140 modified by get-magic), to avoid incorrectly setting the
141 RXf_TAINTED flag further down. */
142 PL_tainted = was_tainted;
144 tmp = reg_temp_copy(NULL, new_re);
145 ReREFCNT_dec(new_re);
150 PM_SETRE(pm, new_re);
153 #ifndef INCOMPLETE_TAINTS
154 if (PL_tainting && PL_tainted) {
155 SvTAINTED_on((SV*)new_re);
156 RX_EXTFLAGS(new_re) |= RXf_TAINTED;
160 #if !defined(USE_ITHREADS)
161 /* can't change the optree at runtime either */
162 /* PMf_KEEP is handled differently under threads to avoid these problems */
163 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
165 if (pm->op_pmflags & PMf_KEEP) {
166 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
167 cLOGOP->op_first->op_next = PL_op->op_next;
180 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
181 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
182 register SV * const dstr = cx->sb_dstr;
183 register char *s = cx->sb_s;
184 register char *m = cx->sb_m;
185 char *orig = cx->sb_orig;
186 register REGEXP * const rx = cx->sb_rx;
188 REGEXP *old = PM_GETRE(pm);
195 PM_SETRE(pm,ReREFCNT_inc(rx));
198 rxres_restore(&cx->sb_rxres, rx);
199 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
201 if (cx->sb_iters++) {
202 const I32 saviters = cx->sb_iters;
203 if (cx->sb_iters > cx->sb_maxiters)
204 DIE(aTHX_ "Substitution loop");
206 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
208 /* See "how taint works" above pp_subst() */
210 cx->sb_rxtainted |= SUBST_TAINT_REPL;
211 sv_catsv_nomg(dstr, POPs);
212 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
216 if (CxONCE(cx) || s < orig ||
217 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
218 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
219 ((cx->sb_rflags & REXEC_COPY_STR)
220 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
221 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
223 SV *targ = cx->sb_targ;
225 assert(cx->sb_strend >= s);
226 if(cx->sb_strend > s) {
227 if (DO_UTF8(dstr) && !SvUTF8(targ))
228 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
230 sv_catpvn(dstr, s, cx->sb_strend - s);
232 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
233 cx->sb_rxtainted |= SUBST_TAINT_PAT;
235 if (pm->op_pmflags & PMf_NONDESTRUCT) {
237 /* From here on down we're using the copy, and leaving the
238 original untouched. */
243 sv_force_normal_flags(targ, SV_COW_DROP_PV);
248 SvPV_set(targ, SvPVX(dstr));
249 SvCUR_set(targ, SvCUR(dstr));
250 SvLEN_set(targ, SvLEN(dstr));
253 SvPV_set(dstr, NULL);
255 mPUSHi(saviters - 1);
257 (void)SvPOK_only_UTF8(targ);
260 /* update the taint state of various various variables in
261 * preparation for final exit.
262 * See "how taint works" above pp_subst() */
264 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
265 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
266 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
268 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
270 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
271 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
273 SvTAINTED_on(TOPs); /* taint return value */
274 /* needed for mg_set below */
275 PL_tainted = cBOOL(cx->sb_rxtainted &
276 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
279 /* PL_tainted must be correctly set for this mg_set */
282 LEAVE_SCOPE(cx->sb_oldsave);
284 RETURNOP(pm->op_next);
285 assert(0); /* NOTREACHED */
287 cx->sb_iters = saviters;
289 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
292 cx->sb_orig = orig = RX_SUBBEG(rx);
294 cx->sb_strend = s + (cx->sb_strend - m);
296 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
298 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
299 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
301 sv_catpvn(dstr, s, m-s);
303 cx->sb_s = RX_OFFS(rx)[0].end + orig;
304 { /* Update the pos() information. */
306 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
308 SvUPGRADE(sv, SVt_PVMG);
309 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
310 #ifdef PERL_OLD_COPY_ON_WRITE
312 sv_force_normal_flags(sv, 0);
314 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
317 mg->mg_len = m - orig;
320 (void)ReREFCNT_inc(rx);
321 /* update the taint state of various various variables in preparation
322 * for calling the code block.
323 * See "how taint works" above pp_subst() */
325 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
326 cx->sb_rxtainted |= SUBST_TAINT_PAT;
328 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
329 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
330 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
332 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
334 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
335 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
336 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
337 ? cx->sb_dstr : cx->sb_targ);
340 rxres_save(&cx->sb_rxres, rx);
342 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
346 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
351 PERL_ARGS_ASSERT_RXRES_SAVE;
354 if (!p || p[1] < RX_NPARENS(rx)) {
355 #ifdef PERL_OLD_COPY_ON_WRITE
356 i = 7 + RX_NPARENS(rx) * 2;
358 i = 6 + RX_NPARENS(rx) * 2;
367 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
368 RX_MATCH_COPIED_off(rx);
370 #ifdef PERL_OLD_COPY_ON_WRITE
371 *p++ = PTR2UV(RX_SAVED_COPY(rx));
372 RX_SAVED_COPY(rx) = NULL;
375 *p++ = RX_NPARENS(rx);
377 *p++ = PTR2UV(RX_SUBBEG(rx));
378 *p++ = (UV)RX_SUBLEN(rx);
379 for (i = 0; i <= RX_NPARENS(rx); ++i) {
380 *p++ = (UV)RX_OFFS(rx)[i].start;
381 *p++ = (UV)RX_OFFS(rx)[i].end;
386 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
391 PERL_ARGS_ASSERT_RXRES_RESTORE;
394 RX_MATCH_COPY_FREE(rx);
395 RX_MATCH_COPIED_set(rx, *p);
398 #ifdef PERL_OLD_COPY_ON_WRITE
399 if (RX_SAVED_COPY(rx))
400 SvREFCNT_dec (RX_SAVED_COPY(rx));
401 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
405 RX_NPARENS(rx) = *p++;
407 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
408 RX_SUBLEN(rx) = (I32)(*p++);
409 for (i = 0; i <= RX_NPARENS(rx); ++i) {
410 RX_OFFS(rx)[i].start = (I32)(*p++);
411 RX_OFFS(rx)[i].end = (I32)(*p++);
416 S_rxres_free(pTHX_ void **rsp)
418 UV * const p = (UV*)*rsp;
420 PERL_ARGS_ASSERT_RXRES_FREE;
425 void *tmp = INT2PTR(char*,*p);
428 PoisonFree(*p, 1, sizeof(*p));
430 Safefree(INT2PTR(char*,*p));
432 #ifdef PERL_OLD_COPY_ON_WRITE
434 SvREFCNT_dec (INT2PTR(SV*,p[1]));
442 #define FORM_NUM_BLANK (1<<30)
443 #define FORM_NUM_POINT (1<<29)
447 dVAR; dSP; dMARK; dORIGMARK;
448 register SV * const tmpForm = *++MARK;
449 SV *formsv; /* contains text of original format */
450 register U32 *fpc; /* format ops program counter */
451 register char *t; /* current append position in target string */
452 const char *f; /* current position in format string */
454 register SV *sv = NULL; /* current item */
455 const char *item = NULL;/* string value of current item */
456 I32 itemsize = 0; /* length of current item, possibly truncated */
457 I32 fieldsize = 0; /* width of current field */
458 I32 lines = 0; /* number of lines that have been output */
459 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
460 const char *chophere = NULL; /* where to chop current item */
461 STRLEN linemark = 0; /* pos of start of line in output */
463 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
465 STRLEN linemax; /* estimate of output size in bytes */
466 bool item_is_utf8 = FALSE;
467 bool targ_is_utf8 = FALSE;
470 U8 *source; /* source of bytes to append */
471 STRLEN to_copy; /* how may bytes to append */
472 char trans; /* what chars to translate */
474 mg = doparseform(tmpForm);
476 fpc = (U32*)mg->mg_ptr;
477 /* the actual string the format was compiled from.
478 * with overload etc, this may not match tmpForm */
482 SvPV_force(PL_formtarget, len);
483 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
484 SvTAINTED_on(PL_formtarget);
485 if (DO_UTF8(PL_formtarget))
487 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
488 t = SvGROW(PL_formtarget, len + linemax + 1);
489 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
491 f = SvPV_const(formsv, len);
495 const char *name = "???";
498 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
499 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
500 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
501 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
502 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
504 case FF_CHECKNL: name = "CHECKNL"; break;
505 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
506 case FF_SPACE: name = "SPACE"; break;
507 case FF_HALFSPACE: name = "HALFSPACE"; break;
508 case FF_ITEM: name = "ITEM"; break;
509 case FF_CHOP: name = "CHOP"; break;
510 case FF_LINEGLOB: name = "LINEGLOB"; break;
511 case FF_NEWLINE: name = "NEWLINE"; break;
512 case FF_MORE: name = "MORE"; break;
513 case FF_LINEMARK: name = "LINEMARK"; break;
514 case FF_END: name = "END"; break;
515 case FF_0DECIMAL: name = "0DECIMAL"; break;
516 case FF_LINESNGL: name = "LINESNGL"; break;
519 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
521 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
525 linemark = t - SvPVX(PL_formtarget);
535 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
551 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
554 SvTAINTED_on(PL_formtarget);
560 const char *s = item = SvPV_const(sv, len);
563 itemsize = sv_len_utf8(sv);
564 if (itemsize != (I32)len) {
566 if (itemsize > fieldsize) {
567 itemsize = fieldsize;
568 itembytes = itemsize;
569 sv_pos_u2b(sv, &itembytes, 0);
573 send = chophere = s + itembytes;
583 sv_pos_b2u(sv, &itemsize);
587 item_is_utf8 = FALSE;
588 if (itemsize > fieldsize)
589 itemsize = fieldsize;
590 send = chophere = s + itemsize;
604 const char *s = item = SvPV_const(sv, len);
607 itemsize = sv_len_utf8(sv);
608 if (itemsize != (I32)len) {
610 if (itemsize <= fieldsize) {
611 const char *send = chophere = s + itemsize;
624 itemsize = fieldsize;
625 itembytes = itemsize;
626 sv_pos_u2b(sv, &itembytes, 0);
627 send = chophere = s + itembytes;
628 while (s < send || (s == send && isSPACE(*s))) {
638 if (strchr(PL_chopset, *s))
643 itemsize = chophere - item;
644 sv_pos_b2u(sv, &itemsize);
650 item_is_utf8 = FALSE;
651 if (itemsize <= fieldsize) {
652 const char *const send = chophere = s + itemsize;
665 itemsize = fieldsize;
666 send = chophere = s + itemsize;
667 while (s < send || (s == send && isSPACE(*s))) {
677 if (strchr(PL_chopset, *s))
682 itemsize = chophere - item;
688 arg = fieldsize - itemsize;
697 arg = fieldsize - itemsize;
711 /* convert to_copy from chars to bytes */
715 to_copy = s - source;
721 const char *s = chophere;
735 const bool oneline = fpc[-1] == FF_LINESNGL;
736 const char *s = item = SvPV_const(sv, len);
737 const char *const send = s + len;
739 item_is_utf8 = DO_UTF8(sv);
750 to_copy = s - SvPVX_const(sv) - 1;
764 /* append to_copy bytes from source to PL_formstring.
765 * item_is_utf8 implies source is utf8.
766 * if trans, translate certain characters during the copy */
771 SvCUR_set(PL_formtarget,
772 t - SvPVX_const(PL_formtarget));
774 if (targ_is_utf8 && !item_is_utf8) {
775 source = tmp = bytes_to_utf8(source, &to_copy);
777 if (item_is_utf8 && !targ_is_utf8) {
779 /* Upgrade targ to UTF8, and then we reduce it to
780 a problem we have a simple solution for.
781 Don't need get magic. */
782 sv_utf8_upgrade_nomg(PL_formtarget);
784 /* re-calculate linemark */
785 s = (U8*)SvPVX(PL_formtarget);
786 /* the bytes we initially allocated to append the
787 * whole line may have been gobbled up during the
788 * upgrade, so allocate a whole new line's worth
793 linemark = s - (U8*)SvPVX(PL_formtarget);
795 /* Easy. They agree. */
796 assert (item_is_utf8 == targ_is_utf8);
799 /* @* and ^* are the only things that can exceed
800 * the linemax, so grow by the output size, plus
801 * a whole new form's worth in case of any further
803 grow = linemax + to_copy;
805 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
806 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
808 Copy(source, t, to_copy, char);
810 /* blank out ~ or control chars, depending on trans.
811 * works on bytes not chars, so relies on not
812 * matching utf8 continuation bytes */
814 U8 *send = s + to_copy;
817 if (trans == '~' ? (ch == '~') :
830 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
838 #if defined(USE_LONG_DOUBLE)
840 ((arg & FORM_NUM_POINT) ?
841 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
844 ((arg & FORM_NUM_POINT) ?
845 "%#0*.*f" : "%0*.*f");
850 #if defined(USE_LONG_DOUBLE)
852 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
855 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
858 /* If the field is marked with ^ and the value is undefined,
860 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
868 /* overflow evidence */
869 if (num_overflow(value, fieldsize, arg)) {
875 /* Formats aren't yet marked for locales, so assume "yes". */
877 STORE_NUMERIC_STANDARD_SET_LOCAL();
878 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
879 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
880 RESTORE_NUMERIC_STANDARD();
887 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
895 if (arg) { /* repeat until fields exhausted? */
901 t = SvPVX(PL_formtarget) + linemark;
908 const char *s = chophere;
909 const char *send = item + len;
911 while (isSPACE(*s) && (s < send))
916 arg = fieldsize - itemsize;
923 if (strnEQ(s1," ",3)) {
924 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
935 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
937 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
939 SvUTF8_on(PL_formtarget);
940 FmLINES(PL_formtarget) += lines;
942 if (fpc[-1] == FF_BLANK)
943 RETURNOP(cLISTOP->op_first);
955 if (PL_stack_base + *PL_markstack_ptr == SP) {
957 if (GIMME_V == G_SCALAR)
959 RETURNOP(PL_op->op_next->op_next);
961 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
962 Perl_pp_pushmark(aTHX); /* push dst */
963 Perl_pp_pushmark(aTHX); /* push src */
964 ENTER_with_name("grep"); /* enter outer scope */
967 if (PL_op->op_private & OPpGREP_LEX)
968 SAVESPTR(PAD_SVl(PL_op->op_targ));
971 ENTER_with_name("grep_item"); /* enter inner scope */
974 src = PL_stack_base[*PL_markstack_ptr];
976 if (PL_op->op_private & OPpGREP_LEX)
977 PAD_SVl(PL_op->op_targ) = src;
982 if (PL_op->op_type == OP_MAPSTART)
983 Perl_pp_pushmark(aTHX); /* push top */
984 return ((LOGOP*)PL_op->op_next)->op_other;
990 const I32 gimme = GIMME_V;
991 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
997 /* first, move source pointer to the next item in the source list */
998 ++PL_markstack_ptr[-1];
1000 /* if there are new items, push them into the destination list */
1001 if (items && gimme != G_VOID) {
1002 /* might need to make room back there first */
1003 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1004 /* XXX this implementation is very pessimal because the stack
1005 * is repeatedly extended for every set of items. Is possible
1006 * to do this without any stack extension or copying at all
1007 * by maintaining a separate list over which the map iterates
1008 * (like foreach does). --gsar */
1010 /* everything in the stack after the destination list moves
1011 * towards the end the stack by the amount of room needed */
1012 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1014 /* items to shift up (accounting for the moved source pointer) */
1015 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1017 /* This optimization is by Ben Tilly and it does
1018 * things differently from what Sarathy (gsar)
1019 * is describing. The downside of this optimization is
1020 * that leaves "holes" (uninitialized and hopefully unused areas)
1021 * to the Perl stack, but on the other hand this
1022 * shouldn't be a problem. If Sarathy's idea gets
1023 * implemented, this optimization should become
1024 * irrelevant. --jhi */
1026 shift = count; /* Avoid shifting too often --Ben Tilly */
1030 dst = (SP += shift);
1031 PL_markstack_ptr[-1] += shift;
1032 *PL_markstack_ptr += shift;
1036 /* copy the new items down to the destination list */
1037 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1038 if (gimme == G_ARRAY) {
1039 /* add returned items to the collection (making mortal copies
1040 * if necessary), then clear the current temps stack frame
1041 * *except* for those items. We do this splicing the items
1042 * into the start of the tmps frame (so some items may be on
1043 * the tmps stack twice), then moving PL_tmps_floor above
1044 * them, then freeing the frame. That way, the only tmps that
1045 * accumulate over iterations are the return values for map.
1046 * We have to do to this way so that everything gets correctly
1047 * freed if we die during the map.
1051 /* make space for the slice */
1052 EXTEND_MORTAL(items);
1053 tmpsbase = PL_tmps_floor + 1;
1054 Move(PL_tmps_stack + tmpsbase,
1055 PL_tmps_stack + tmpsbase + items,
1056 PL_tmps_ix - PL_tmps_floor,
1058 PL_tmps_ix += items;
1063 sv = sv_mortalcopy(sv);
1065 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1067 /* clear the stack frame except for the items */
1068 PL_tmps_floor += items;
1070 /* FREETMPS may have cleared the TEMP flag on some of the items */
1073 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1076 /* scalar context: we don't care about which values map returns
1077 * (we use undef here). And so we certainly don't want to do mortal
1078 * copies of meaningless values. */
1079 while (items-- > 0) {
1081 *dst-- = &PL_sv_undef;
1089 LEAVE_with_name("grep_item"); /* exit inner scope */
1092 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1094 (void)POPMARK; /* pop top */
1095 LEAVE_with_name("grep"); /* exit outer scope */
1096 (void)POPMARK; /* pop src */
1097 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1098 (void)POPMARK; /* pop dst */
1099 SP = PL_stack_base + POPMARK; /* pop original mark */
1100 if (gimme == G_SCALAR) {
1101 if (PL_op->op_private & OPpGREP_LEX) {
1102 SV* sv = sv_newmortal();
1103 sv_setiv(sv, items);
1111 else if (gimme == G_ARRAY)
1118 ENTER_with_name("grep_item"); /* enter inner scope */
1121 /* set $_ to the new source item */
1122 src = PL_stack_base[PL_markstack_ptr[-1]];
1124 if (PL_op->op_private & OPpGREP_LEX)
1125 PAD_SVl(PL_op->op_targ) = src;
1129 RETURNOP(cLOGOP->op_other);
1138 if (GIMME == G_ARRAY)
1140 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1141 return cLOGOP->op_other;
1151 if (GIMME == G_ARRAY) {
1152 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1156 SV * const targ = PAD_SV(PL_op->op_targ);
1159 if (PL_op->op_private & OPpFLIP_LINENUM) {
1160 if (GvIO(PL_last_in_gv)) {
1161 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1164 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1166 flip = SvIV(sv) == SvIV(GvSV(gv));
1172 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1173 if (PL_op->op_flags & OPf_SPECIAL) {
1181 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1184 sv_setpvs(TARG, "");
1190 /* This code tries to decide if "$left .. $right" should use the
1191 magical string increment, or if the range is numeric (we make
1192 an exception for .."0" [#18165]). AMS 20021031. */
1194 #define RANGE_IS_NUMERIC(left,right) ( \
1195 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1196 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1197 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1198 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1199 && (!SvOK(right) || looks_like_number(right))))
1205 if (GIMME == G_ARRAY) {
1211 if (RANGE_IS_NUMERIC(left,right)) {
1214 if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) ||
1215 (SvOK(right) && SvNV_nomg(right) > IV_MAX))
1216 DIE(aTHX_ "Range iterator outside integer range");
1217 i = SvIV_nomg(left);
1218 max = SvIV_nomg(right);
1227 SV * const sv = sv_2mortal(newSViv(i++));
1233 const char * const lpv = SvPV_nomg_const(left, llen);
1234 const char * const tmps = SvPV_nomg_const(right, len);
1236 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1237 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1239 if (strEQ(SvPVX_const(sv),tmps))
1241 sv = sv_2mortal(newSVsv(sv));
1248 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1252 if (PL_op->op_private & OPpFLIP_LINENUM) {
1253 if (GvIO(PL_last_in_gv)) {
1254 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1257 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1258 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1266 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1267 sv_catpvs(targ, "E0");
1277 static const char * const context_name[] = {
1279 NULL, /* CXt_WHEN never actually needs "block" */
1280 NULL, /* CXt_BLOCK never actually needs "block" */
1281 NULL, /* CXt_GIVEN never actually needs "block" */
1282 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1283 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1284 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1285 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1293 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1298 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1300 for (i = cxstack_ix; i >= 0; i--) {
1301 register const PERL_CONTEXT * const cx = &cxstack[i];
1302 switch (CxTYPE(cx)) {
1308 /* diag_listed_as: Exiting subroutine via %s */
1309 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1310 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1311 if (CxTYPE(cx) == CXt_NULL)
1314 case CXt_LOOP_LAZYIV:
1315 case CXt_LOOP_LAZYSV:
1317 case CXt_LOOP_PLAIN:
1319 STRLEN cx_label_len = 0;
1320 U32 cx_label_flags = 0;
1321 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1323 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1326 (const U8*)cx_label, cx_label_len,
1327 (const U8*)label, len) == 0)
1329 (const U8*)label, len,
1330 (const U8*)cx_label, cx_label_len) == 0)
1331 : (len == cx_label_len && ((cx_label == label)
1332 || memEQ(cx_label, label, len))) )) {
1333 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1334 (long)i, cx_label));
1337 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1348 Perl_dowantarray(pTHX)
1351 const I32 gimme = block_gimme();
1352 return (gimme == G_VOID) ? G_SCALAR : gimme;
1356 Perl_block_gimme(pTHX)
1359 const I32 cxix = dopoptosub(cxstack_ix);
1363 switch (cxstack[cxix].blk_gimme) {
1371 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1372 assert(0); /* NOTREACHED */
1378 Perl_is_lvalue_sub(pTHX)
1381 const I32 cxix = dopoptosub(cxstack_ix);
1382 assert(cxix >= 0); /* We should only be called from inside subs */
1384 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1385 return CxLVAL(cxstack + cxix);
1390 /* only used by PUSHSUB */
1392 Perl_was_lvalue_sub(pTHX)
1395 const I32 cxix = dopoptosub(cxstack_ix-1);
1396 assert(cxix >= 0); /* We should only be called from inside subs */
1398 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1399 return CxLVAL(cxstack + cxix);
1405 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1410 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1412 for (i = startingblock; i >= 0; i--) {
1413 register const PERL_CONTEXT * const cx = &cxstk[i];
1414 switch (CxTYPE(cx)) {
1420 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1428 S_dopoptoeval(pTHX_ I32 startingblock)
1432 for (i = startingblock; i >= 0; i--) {
1433 register const PERL_CONTEXT *cx = &cxstack[i];
1434 switch (CxTYPE(cx)) {
1438 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1446 S_dopoptoloop(pTHX_ I32 startingblock)
1450 for (i = startingblock; i >= 0; i--) {
1451 register const PERL_CONTEXT * const cx = &cxstack[i];
1452 switch (CxTYPE(cx)) {
1458 /* diag_listed_as: Exiting subroutine via %s */
1459 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1460 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1461 if ((CxTYPE(cx)) == CXt_NULL)
1464 case CXt_LOOP_LAZYIV:
1465 case CXt_LOOP_LAZYSV:
1467 case CXt_LOOP_PLAIN:
1468 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1476 S_dopoptogiven(pTHX_ I32 startingblock)
1480 for (i = startingblock; i >= 0; i--) {
1481 register const PERL_CONTEXT *cx = &cxstack[i];
1482 switch (CxTYPE(cx)) {
1486 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1488 case CXt_LOOP_PLAIN:
1489 assert(!CxFOREACHDEF(cx));
1491 case CXt_LOOP_LAZYIV:
1492 case CXt_LOOP_LAZYSV:
1494 if (CxFOREACHDEF(cx)) {
1495 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1504 S_dopoptowhen(pTHX_ I32 startingblock)
1508 for (i = startingblock; i >= 0; i--) {
1509 register const PERL_CONTEXT *cx = &cxstack[i];
1510 switch (CxTYPE(cx)) {
1514 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1522 Perl_dounwind(pTHX_ I32 cxix)
1527 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1530 while (cxstack_ix > cxix) {
1532 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1533 DEBUG_CX("UNWIND"); \
1534 /* Note: we don't need to restore the base context info till the end. */
1535 switch (CxTYPE(cx)) {
1538 continue; /* not break */
1546 case CXt_LOOP_LAZYIV:
1547 case CXt_LOOP_LAZYSV:
1549 case CXt_LOOP_PLAIN:
1560 PERL_UNUSED_VAR(optype);
1564 Perl_qerror(pTHX_ SV *err)
1568 PERL_ARGS_ASSERT_QERROR;
1571 if (PL_in_eval & EVAL_KEEPERR) {
1572 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1576 sv_catsv(ERRSV, err);
1579 sv_catsv(PL_errors, err);
1581 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1583 ++PL_parser->error_count;
1587 Perl_die_unwind(pTHX_ SV *msv)
1590 SV *exceptsv = sv_mortalcopy(msv);
1591 U8 in_eval = PL_in_eval;
1592 PERL_ARGS_ASSERT_DIE_UNWIND;
1599 * Historically, perl used to set ERRSV ($@) early in the die
1600 * process and rely on it not getting clobbered during unwinding.
1601 * That sucked, because it was liable to get clobbered, so the
1602 * setting of ERRSV used to emit the exception from eval{} has
1603 * been moved to much later, after unwinding (see just before
1604 * JMPENV_JUMP below). However, some modules were relying on the
1605 * early setting, by examining $@ during unwinding to use it as
1606 * a flag indicating whether the current unwinding was caused by
1607 * an exception. It was never a reliable flag for that purpose,
1608 * being totally open to false positives even without actual
1609 * clobberage, but was useful enough for production code to
1610 * semantically rely on it.
1612 * We'd like to have a proper introspective interface that
1613 * explicitly describes the reason for whatever unwinding
1614 * operations are currently in progress, so that those modules
1615 * work reliably and $@ isn't further overloaded. But we don't
1616 * have one yet. In its absence, as a stopgap measure, ERRSV is
1617 * now *additionally* set here, before unwinding, to serve as the
1618 * (unreliable) flag that it used to.
1620 * This behaviour is temporary, and should be removed when a
1621 * proper way to detect exceptional unwinding has been developed.
1622 * As of 2010-12, the authors of modules relying on the hack
1623 * are aware of the issue, because the modules failed on
1624 * perls 5.13.{1..7} which had late setting of $@ without this
1625 * early-setting hack.
1627 if (!(in_eval & EVAL_KEEPERR)) {
1628 SvTEMP_off(exceptsv);
1629 sv_setsv(ERRSV, exceptsv);
1632 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1633 && PL_curstackinfo->si_prev)
1642 register PERL_CONTEXT *cx;
1645 JMPENV *restartjmpenv;
1648 if (cxix < cxstack_ix)
1651 POPBLOCK(cx,PL_curpm);
1652 if (CxTYPE(cx) != CXt_EVAL) {
1654 const char* message = SvPVx_const(exceptsv, msglen);
1655 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1656 PerlIO_write(Perl_error_log, message, msglen);
1660 namesv = cx->blk_eval.old_namesv;
1661 oldcop = cx->blk_oldcop;
1662 restartjmpenv = cx->blk_eval.cur_top_env;
1663 restartop = cx->blk_eval.retop;
1665 if (gimme == G_SCALAR)
1666 *++newsp = &PL_sv_undef;
1667 PL_stack_sp = newsp;
1671 /* LEAVE could clobber PL_curcop (see save_re_context())
1672 * XXX it might be better to find a way to avoid messing with
1673 * PL_curcop in save_re_context() instead, but this is a more
1674 * minimal fix --GSAR */
1677 if (optype == OP_REQUIRE) {
1678 (void)hv_store(GvHVn(PL_incgv),
1679 SvPVX_const(namesv),
1680 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1682 /* note that unlike pp_entereval, pp_require isn't
1683 * supposed to trap errors. So now that we've popped the
1684 * EVAL that pp_require pushed, and processed the error
1685 * message, rethrow the error */
1686 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1687 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1690 if (in_eval & EVAL_KEEPERR) {
1691 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1695 sv_setsv(ERRSV, exceptsv);
1697 PL_restartjmpenv = restartjmpenv;
1698 PL_restartop = restartop;
1700 assert(0); /* NOTREACHED */
1704 write_to_stderr(exceptsv);
1706 assert(0); /* NOTREACHED */
1711 dVAR; dSP; dPOPTOPssrl;
1712 if (SvTRUE(left) != SvTRUE(right))
1719 =for apidoc caller_cx
1721 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1722 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1723 information returned to Perl by C<caller>. Note that XSUBs don't get a
1724 stack frame, so C<caller_cx(0, NULL)> will return information for the
1725 immediately-surrounding Perl code.
1727 This function skips over the automatic calls to C<&DB::sub> made on the
1728 behalf of the debugger. If the stack frame requested was a sub called by
1729 C<DB::sub>, the return value will be the frame for the call to
1730 C<DB::sub>, since that has the correct line number/etc. for the call
1731 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1732 frame for the sub call itself.
1737 const PERL_CONTEXT *
1738 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1740 register I32 cxix = dopoptosub(cxstack_ix);
1741 register const PERL_CONTEXT *cx;
1742 register const PERL_CONTEXT *ccstack = cxstack;
1743 const PERL_SI *top_si = PL_curstackinfo;
1746 /* we may be in a higher stacklevel, so dig down deeper */
1747 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1748 top_si = top_si->si_prev;
1749 ccstack = top_si->si_cxstack;
1750 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1754 /* caller() should not report the automatic calls to &DB::sub */
1755 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1756 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1760 cxix = dopoptosub_at(ccstack, cxix - 1);
1763 cx = &ccstack[cxix];
1764 if (dbcxp) *dbcxp = cx;
1766 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1767 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1768 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1769 field below is defined for any cx. */
1770 /* caller() should not report the automatic calls to &DB::sub */
1771 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1772 cx = &ccstack[dbcxix];
1782 register const PERL_CONTEXT *cx;
1783 const PERL_CONTEXT *dbcx;
1785 const HEK *stash_hek;
1787 bool has_arg = MAXARG && TOPs;
1795 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1797 if (GIMME != G_ARRAY) {
1805 assert(CopSTASH(cx->blk_oldcop));
1806 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1807 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1809 if (GIMME != G_ARRAY) {
1812 PUSHs(&PL_sv_undef);
1815 sv_sethek(TARG, stash_hek);
1824 PUSHs(&PL_sv_undef);
1827 sv_sethek(TARG, stash_hek);
1830 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1831 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1834 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1835 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1836 /* So is ccstack[dbcxix]. */
1837 if (cvgv && isGV(cvgv)) {
1838 SV * const sv = newSV(0);
1839 gv_efullname3(sv, cvgv, NULL);
1841 PUSHs(boolSV(CxHASARGS(cx)));
1844 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1845 PUSHs(boolSV(CxHASARGS(cx)));
1849 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1852 gimme = (I32)cx->blk_gimme;
1853 if (gimme == G_VOID)
1854 PUSHs(&PL_sv_undef);
1856 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1857 if (CxTYPE(cx) == CXt_EVAL) {
1859 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1860 PUSHs(cx->blk_eval.cur_text);
1864 else if (cx->blk_eval.old_namesv) {
1865 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1868 /* eval BLOCK (try blocks have old_namesv == 0) */
1870 PUSHs(&PL_sv_undef);
1871 PUSHs(&PL_sv_undef);
1875 PUSHs(&PL_sv_undef);
1876 PUSHs(&PL_sv_undef);
1878 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1879 && CopSTASH_eq(PL_curcop, PL_debstash))
1881 AV * const ary = cx->blk_sub.argarray;
1882 const int off = AvARRAY(ary) - AvALLOC(ary);
1884 Perl_init_dbargs(aTHX);
1886 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1887 av_extend(PL_dbargs, AvFILLp(ary) + off);
1888 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1889 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1891 /* XXX only hints propagated via op_private are currently
1892 * visible (others are not easily accessible, since they
1893 * use the global PL_hints) */
1894 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1897 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1899 if (old_warnings == pWARN_NONE ||
1900 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1901 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1902 else if (old_warnings == pWARN_ALL ||
1903 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1904 /* Get the bit mask for $warnings::Bits{all}, because
1905 * it could have been extended by warnings::register */
1907 HV * const bits = get_hv("warnings::Bits", 0);
1908 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1909 mask = newSVsv(*bits_all);
1912 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1916 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1920 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1921 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1930 const char * const tmps =
1931 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
1932 sv_reset(tmps, CopSTASH(PL_curcop));
1937 /* like pp_nextstate, but used instead when the debugger is active */
1942 PL_curcop = (COP*)PL_op;
1943 TAINT_NOT; /* Each statement is presumed innocent */
1944 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1949 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1950 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1953 register PERL_CONTEXT *cx;
1954 const I32 gimme = G_ARRAY;
1956 GV * const gv = PL_DBgv;
1957 register CV * const cv = GvCV(gv);
1960 DIE(aTHX_ "No DB::DB routine defined");
1962 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1963 /* don't do recursive DB::DB call */
1978 (void)(*CvXSUB(cv))(aTHX_ cv);
1985 PUSHBLOCK(cx, CXt_SUB, SP);
1987 cx->blk_sub.retop = PL_op->op_next;
1990 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1991 RETURNOP(CvSTART(cv));
1999 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2002 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2004 if (flags & SVs_PADTMP) {
2005 flags &= ~SVs_PADTMP;
2008 if (gimme == G_SCALAR) {
2010 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2011 ? *SP : sv_mortalcopy(*SP);
2013 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2016 *++MARK = &PL_sv_undef;
2020 else if (gimme == G_ARRAY) {
2021 /* in case LEAVE wipes old return values */
2022 while (++MARK <= SP) {
2023 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2026 *++newsp = sv_mortalcopy(*MARK);
2027 TAINT_NOT; /* Each item is independent */
2030 /* When this function was called with MARK == newsp, we reach this
2031 * point with SP == newsp. */
2040 register PERL_CONTEXT *cx;
2041 I32 gimme = GIMME_V;
2043 ENTER_with_name("block");
2046 PUSHBLOCK(cx, CXt_BLOCK, SP);
2054 register PERL_CONTEXT *cx;
2059 if (PL_op->op_flags & OPf_SPECIAL) {
2060 cx = &cxstack[cxstack_ix];
2061 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2066 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2069 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2070 PL_curpm = newpm; /* Don't pop $1 et al till now */
2072 LEAVE_with_name("block");
2080 register PERL_CONTEXT *cx;
2081 const I32 gimme = GIMME_V;
2082 void *itervar; /* location of the iteration variable */
2083 U8 cxtype = CXt_LOOP_FOR;
2085 ENTER_with_name("loop1");
2088 if (PL_op->op_targ) { /* "my" variable */
2089 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2090 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2091 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2092 SVs_PADSTALE, SVs_PADSTALE);
2094 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2096 itervar = PL_comppad;
2098 itervar = &PAD_SVl(PL_op->op_targ);
2101 else { /* symbol table variable */
2102 GV * const gv = MUTABLE_GV(POPs);
2103 SV** svp = &GvSV(gv);
2104 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2106 itervar = (void *)gv;
2109 if (PL_op->op_private & OPpITER_DEF)
2110 cxtype |= CXp_FOR_DEF;
2112 ENTER_with_name("loop2");
2114 PUSHBLOCK(cx, cxtype, SP);
2115 PUSHLOOP_FOR(cx, itervar, MARK);
2116 if (PL_op->op_flags & OPf_STACKED) {
2117 SV *maybe_ary = POPs;
2118 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2120 SV * const right = maybe_ary;
2123 if (RANGE_IS_NUMERIC(sv,right)) {
2124 cx->cx_type &= ~CXTYPEMASK;
2125 cx->cx_type |= CXt_LOOP_LAZYIV;
2126 /* Make sure that no-one re-orders cop.h and breaks our
2128 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2129 #ifdef NV_PRESERVES_UV
2130 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2131 (SvNV_nomg(sv) > (NV)IV_MAX)))
2133 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2134 (SvNV_nomg(right) < (NV)IV_MIN))))
2136 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2138 ((SvNV_nomg(sv) > 0) &&
2139 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2140 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2142 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2144 ((SvNV_nomg(right) > 0) &&
2145 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2146 (SvNV_nomg(right) > (NV)UV_MAX))
2149 DIE(aTHX_ "Range iterator outside integer range");
2150 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2151 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2153 /* for correct -Dstv display */
2154 cx->blk_oldsp = sp - PL_stack_base;
2158 cx->cx_type &= ~CXTYPEMASK;
2159 cx->cx_type |= CXt_LOOP_LAZYSV;
2160 /* Make sure that no-one re-orders cop.h and breaks our
2162 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2163 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2164 cx->blk_loop.state_u.lazysv.end = right;
2165 SvREFCNT_inc(right);
2166 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2167 /* This will do the upgrade to SVt_PV, and warn if the value
2168 is uninitialised. */
2169 (void) SvPV_nolen_const(right);
2170 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2171 to replace !SvOK() with a pointer to "". */
2173 SvREFCNT_dec(right);
2174 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2178 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2179 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2180 SvREFCNT_inc(maybe_ary);
2181 cx->blk_loop.state_u.ary.ix =
2182 (PL_op->op_private & OPpITER_REVERSED) ?
2183 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2187 else { /* iterating over items on the stack */
2188 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2189 if (PL_op->op_private & OPpITER_REVERSED) {
2190 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2193 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2203 register PERL_CONTEXT *cx;
2204 const I32 gimme = GIMME_V;
2206 ENTER_with_name("loop1");
2208 ENTER_with_name("loop2");
2210 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2211 PUSHLOOP_PLAIN(cx, SP);
2219 register PERL_CONTEXT *cx;
2226 assert(CxTYPE_is_LOOP(cx));
2228 newsp = PL_stack_base + cx->blk_loop.resetsp;
2231 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2234 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2235 PL_curpm = newpm; /* ... and pop $1 et al */
2237 LEAVE_with_name("loop2");
2238 LEAVE_with_name("loop1");
2244 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2245 PERL_CONTEXT *cx, PMOP *newpm)
2247 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2248 if (gimme == G_SCALAR) {
2249 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2251 const char *what = NULL;
2253 assert(MARK+1 == SP);
2254 if ((SvPADTMP(TOPs) ||
2255 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2258 !SvSMAGICAL(TOPs)) {
2260 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2261 : "a readonly value" : "a temporary";
2266 /* sub:lvalue{} will take us here. */
2275 "Can't return %s from lvalue subroutine", what
2280 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2281 if (!SvPADTMP(*SP)) {
2282 *++newsp = SvREFCNT_inc(*SP);
2287 /* FREETMPS could clobber it */
2288 SV *sv = SvREFCNT_inc(*SP);
2290 *++newsp = sv_mortalcopy(sv);
2297 ? sv_mortalcopy(*SP)
2299 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2304 *++newsp = &PL_sv_undef;
2306 if (CxLVAL(cx) & OPpDEREF) {
2309 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2313 else if (gimme == G_ARRAY) {
2314 assert (!(CxLVAL(cx) & OPpDEREF));
2315 if (ref || !CxLVAL(cx))
2316 while (++MARK <= SP)
2318 SvFLAGS(*MARK) & SVs_PADTMP
2319 ? sv_mortalcopy(*MARK)
2322 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2323 else while (++MARK <= SP) {
2324 if (*MARK != &PL_sv_undef
2326 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2331 /* Might be flattened array after $#array = */
2338 /* diag_listed_as: Can't return %s from lvalue subroutine */
2340 "Can't return a %s from lvalue subroutine",
2341 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2347 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2350 PL_stack_sp = newsp;
2356 register PERL_CONTEXT *cx;
2357 bool popsub2 = FALSE;
2358 bool clear_errsv = FALSE;
2368 const I32 cxix = dopoptosub(cxstack_ix);
2371 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2372 * sort block, which is a CXt_NULL
2375 PL_stack_base[1] = *PL_stack_sp;
2376 PL_stack_sp = PL_stack_base + 1;
2380 DIE(aTHX_ "Can't return outside a subroutine");
2382 if (cxix < cxstack_ix)
2385 if (CxMULTICALL(&cxstack[cxix])) {
2386 gimme = cxstack[cxix].blk_gimme;
2387 if (gimme == G_VOID)
2388 PL_stack_sp = PL_stack_base;
2389 else if (gimme == G_SCALAR) {
2390 PL_stack_base[1] = *PL_stack_sp;
2391 PL_stack_sp = PL_stack_base + 1;
2397 switch (CxTYPE(cx)) {
2400 lval = !!CvLVALUE(cx->blk_sub.cv);
2401 retop = cx->blk_sub.retop;
2402 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2405 if (!(PL_in_eval & EVAL_KEEPERR))
2408 namesv = cx->blk_eval.old_namesv;
2409 retop = cx->blk_eval.retop;
2412 if (optype == OP_REQUIRE &&
2413 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2415 /* Unassume the success we assumed earlier. */
2416 (void)hv_delete(GvHVn(PL_incgv),
2417 SvPVX_const(namesv),
2418 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2420 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2425 retop = cx->blk_sub.retop;
2428 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2432 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2434 if (gimme == G_SCALAR) {
2437 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2438 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2439 && !SvMAGICAL(TOPs)) {
2440 *++newsp = SvREFCNT_inc(*SP);
2445 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2447 *++newsp = sv_mortalcopy(sv);
2451 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2452 && !SvMAGICAL(*SP)) {
2456 *++newsp = sv_mortalcopy(*SP);
2459 *++newsp = sv_mortalcopy(*SP);
2462 *++newsp = &PL_sv_undef;
2464 else if (gimme == G_ARRAY) {
2465 while (++MARK <= SP) {
2466 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2467 && !SvGMAGICAL(*MARK)
2468 ? *MARK : sv_mortalcopy(*MARK);
2469 TAINT_NOT; /* Each item is independent */
2472 PL_stack_sp = newsp;
2476 /* Stack values are safe: */
2479 POPSUB(cx,sv); /* release CV and @_ ... */
2483 PL_curpm = newpm; /* ... and pop $1 et al */
2492 /* This duplicates parts of pp_leavesub, so that it can share code with
2500 register PERL_CONTEXT *cx;
2503 if (CxMULTICALL(&cxstack[cxstack_ix]))
2507 cxstack_ix++; /* temporarily protect top context */
2511 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2515 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2516 PL_curpm = newpm; /* ... and pop $1 et al */
2519 return cx->blk_sub.retop;
2526 register PERL_CONTEXT *cx;
2537 if (PL_op->op_flags & OPf_SPECIAL) {
2538 cxix = dopoptoloop(cxstack_ix);
2540 DIE(aTHX_ "Can't \"last\" outside a loop block");
2543 cxix = dopoptolabel(cPVOP->op_pv, strlen(cPVOP->op_pv),
2544 (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0);
2546 DIE(aTHX_ "Label not found for \"last %"SVf"\"",
2547 SVfARG(newSVpvn_flags(cPVOP->op_pv,
2548 strlen(cPVOP->op_pv),
2549 ((cPVOP->op_private & OPpPV_IS_UTF8)
2550 ? SVf_UTF8 : 0) | SVs_TEMP)));
2552 if (cxix < cxstack_ix)
2556 cxstack_ix++; /* temporarily protect top context */
2558 switch (CxTYPE(cx)) {
2559 case CXt_LOOP_LAZYIV:
2560 case CXt_LOOP_LAZYSV:
2562 case CXt_LOOP_PLAIN:
2564 newsp = PL_stack_base + cx->blk_loop.resetsp;
2565 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2569 nextop = cx->blk_sub.retop;
2573 nextop = cx->blk_eval.retop;
2577 nextop = cx->blk_sub.retop;
2580 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2584 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2585 pop2 == CXt_SUB ? SVs_TEMP : 0);
2590 /* Stack values are safe: */
2592 case CXt_LOOP_LAZYIV:
2593 case CXt_LOOP_PLAIN:
2594 case CXt_LOOP_LAZYSV:
2596 POPLOOP(cx); /* release loop vars ... */
2600 POPSUB(cx,sv); /* release CV and @_ ... */
2603 PL_curpm = newpm; /* ... and pop $1 et al */
2606 PERL_UNUSED_VAR(optype);
2607 PERL_UNUSED_VAR(gimme);
2615 register PERL_CONTEXT *cx;
2618 if (PL_op->op_flags & OPf_SPECIAL) {
2619 cxix = dopoptoloop(cxstack_ix);
2621 DIE(aTHX_ "Can't \"next\" outside a loop block");
2624 cxix = dopoptolabel(cPVOP->op_pv, strlen(cPVOP->op_pv),
2625 (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0);
2627 DIE(aTHX_ "Label not found for \"next %"SVf"\"",
2628 SVfARG(newSVpvn_flags(cPVOP->op_pv,
2629 strlen(cPVOP->op_pv),
2630 ((cPVOP->op_private & OPpPV_IS_UTF8)
2631 ? SVf_UTF8 : 0) | SVs_TEMP)));
2633 if (cxix < cxstack_ix)
2636 /* clear off anything above the scope we're re-entering, but
2637 * save the rest until after a possible continue block */
2638 inner = PL_scopestack_ix;
2640 if (PL_scopestack_ix < inner)
2641 leave_scope(PL_scopestack[PL_scopestack_ix]);
2642 PL_curcop = cx->blk_oldcop;
2643 return (cx)->blk_loop.my_op->op_nextop;
2650 register PERL_CONTEXT *cx;
2654 if (PL_op->op_flags & OPf_SPECIAL) {
2655 cxix = dopoptoloop(cxstack_ix);
2657 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2660 cxix = dopoptolabel(cPVOP->op_pv, strlen(cPVOP->op_pv),
2661 (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0);
2663 DIE(aTHX_ "Label not found for \"redo %"SVf"\"",
2664 SVfARG(newSVpvn_flags(cPVOP->op_pv,
2665 strlen(cPVOP->op_pv),
2666 ((cPVOP->op_private & OPpPV_IS_UTF8)
2667 ? SVf_UTF8 : 0) | SVs_TEMP)));
2669 if (cxix < cxstack_ix)
2672 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2673 if (redo_op->op_type == OP_ENTER) {
2674 /* pop one less context to avoid $x being freed in while (my $x..) */
2676 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2677 redo_op = redo_op->op_next;
2681 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2682 LEAVE_SCOPE(oldsave);
2684 PL_curcop = cx->blk_oldcop;
2689 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2693 static const char too_deep[] = "Target of goto is too deeply nested";
2695 PERL_ARGS_ASSERT_DOFINDLABEL;
2698 Perl_croak(aTHX_ too_deep);
2699 if (o->op_type == OP_LEAVE ||
2700 o->op_type == OP_SCOPE ||
2701 o->op_type == OP_LEAVELOOP ||
2702 o->op_type == OP_LEAVESUB ||
2703 o->op_type == OP_LEAVETRY)
2705 *ops++ = cUNOPo->op_first;
2707 Perl_croak(aTHX_ too_deep);
2710 if (o->op_flags & OPf_KIDS) {
2712 /* First try all the kids at this level, since that's likeliest. */
2713 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2714 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2715 STRLEN kid_label_len;
2716 U32 kid_label_flags;
2717 const char *kid_label = CopLABEL_len_flags(kCOP,
2718 &kid_label_len, &kid_label_flags);
2720 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2723 (const U8*)kid_label, kid_label_len,
2724 (const U8*)label, len) == 0)
2726 (const U8*)label, len,
2727 (const U8*)kid_label, kid_label_len) == 0)
2728 : ( len == kid_label_len && ((kid_label == label)
2729 || memEQ(kid_label, label, len)))))
2733 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2734 if (kid == PL_lastgotoprobe)
2736 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2739 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2740 ops[-1]->op_type == OP_DBSTATE)
2745 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2758 register PERL_CONTEXT *cx;
2759 #define GOTO_DEPTH 64
2760 OP *enterops[GOTO_DEPTH];
2761 const char *label = NULL;
2762 STRLEN label_len = 0;
2763 U32 label_flags = 0;
2764 const bool do_dump = (PL_op->op_type == OP_DUMP);
2765 static const char must_have_label[] = "goto must have label";
2767 if (PL_op->op_flags & OPf_STACKED) {
2768 SV * const sv = POPs;
2770 /* This egregious kludge implements goto &subroutine */
2771 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2773 register PERL_CONTEXT *cx;
2774 CV *cv = MUTABLE_CV(SvRV(sv));
2781 if (!CvROOT(cv) && !CvXSUB(cv)) {
2782 const GV * const gv = CvGV(cv);
2786 /* autoloaded stub? */
2787 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2789 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2791 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2792 if (autogv && (cv = GvCV(autogv)))
2794 tmpstr = sv_newmortal();
2795 gv_efullname3(tmpstr, gv, NULL);
2796 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2798 DIE(aTHX_ "Goto undefined subroutine");
2801 /* First do some returnish stuff. */
2802 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2804 cxix = dopoptosub(cxstack_ix);
2806 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2807 if (cxix < cxstack_ix)
2811 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2812 if (CxTYPE(cx) == CXt_EVAL) {
2814 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2815 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2817 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2818 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2820 else if (CxMULTICALL(cx))
2821 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2822 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2823 /* put @_ back onto stack */
2824 AV* av = cx->blk_sub.argarray;
2826 items = AvFILLp(av) + 1;
2827 EXTEND(SP, items+1); /* @_ could have been extended. */
2828 Copy(AvARRAY(av), SP + 1, items, SV*);
2829 SvREFCNT_dec(GvAV(PL_defgv));
2830 GvAV(PL_defgv) = cx->blk_sub.savearray;
2832 /* abandon @_ if it got reified */
2837 av_extend(av, items-1);
2839 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2842 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2843 AV* const av = GvAV(PL_defgv);
2844 items = AvFILLp(av) + 1;
2845 EXTEND(SP, items+1); /* @_ could have been extended. */
2846 Copy(AvARRAY(av), SP + 1, items, SV*);
2850 if (CxTYPE(cx) == CXt_SUB &&
2851 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2852 SvREFCNT_dec(cx->blk_sub.cv);
2853 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2854 LEAVE_SCOPE(oldsave);
2856 /* A destructor called during LEAVE_SCOPE could have undefined
2857 * our precious cv. See bug #99850. */
2858 if (!CvROOT(cv) && !CvXSUB(cv)) {
2859 const GV * const gv = CvGV(cv);
2861 SV * const tmpstr = sv_newmortal();
2862 gv_efullname3(tmpstr, gv, NULL);
2863 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2866 DIE(aTHX_ "Goto undefined subroutine");
2869 /* Now do some callish stuff. */
2871 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2873 OP* const retop = cx->blk_sub.retop;
2874 SV **newsp PERL_UNUSED_DECL;
2875 I32 gimme PERL_UNUSED_DECL;
2878 for (index=0; index<items; index++)
2879 sv_2mortal(SP[-index]);
2882 /* XS subs don't have a CxSUB, so pop it */
2883 POPBLOCK(cx, PL_curpm);
2884 /* Push a mark for the start of arglist */
2887 (void)(*CvXSUB(cv))(aTHX_ cv);
2892 AV* const padlist = CvPADLIST(cv);
2893 if (CxTYPE(cx) == CXt_EVAL) {
2894 PL_in_eval = CxOLD_IN_EVAL(cx);
2895 PL_eval_root = cx->blk_eval.old_eval_root;
2896 cx->cx_type = CXt_SUB;
2898 cx->blk_sub.cv = cv;
2899 cx->blk_sub.olddepth = CvDEPTH(cv);
2902 if (CvDEPTH(cv) < 2)
2903 SvREFCNT_inc_simple_void_NN(cv);
2905 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2906 sub_crush_depth(cv);
2907 pad_push(padlist, CvDEPTH(cv));
2909 PL_curcop = cx->blk_oldcop;
2911 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2914 AV *const av = MUTABLE_AV(PAD_SVl(0));
2916 cx->blk_sub.savearray = GvAV(PL_defgv);
2917 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2918 CX_CURPAD_SAVE(cx->blk_sub);
2919 cx->blk_sub.argarray = av;
2921 if (items >= AvMAX(av) + 1) {
2922 SV **ary = AvALLOC(av);
2923 if (AvARRAY(av) != ary) {
2924 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2927 if (items >= AvMAX(av) + 1) {
2928 AvMAX(av) = items - 1;
2929 Renew(ary,items+1,SV*);
2935 Copy(mark,AvARRAY(av),items,SV*);
2936 AvFILLp(av) = items - 1;
2937 assert(!AvREAL(av));
2939 /* transfer 'ownership' of refcnts to new @_ */
2949 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2950 Perl_get_db_sub(aTHX_ NULL, cv);
2952 CV * const gotocv = get_cvs("DB::goto", 0);
2954 PUSHMARK( PL_stack_sp );
2955 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2960 RETURNOP(CvSTART(cv));
2964 label = SvPV_const(sv, label_len);
2965 label_flags = SvUTF8(sv);
2968 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2969 label = cPVOP->op_pv;
2970 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2971 label_len = strlen(label);
2973 if (!(do_dump || label_len)) DIE(aTHX_ must_have_label);
2978 OP *gotoprobe = NULL;
2979 bool leaving_eval = FALSE;
2980 bool in_block = FALSE;
2981 PERL_CONTEXT *last_eval_cx = NULL;
2985 PL_lastgotoprobe = NULL;
2987 for (ix = cxstack_ix; ix >= 0; ix--) {
2989 switch (CxTYPE(cx)) {
2991 leaving_eval = TRUE;
2992 if (!CxTRYBLOCK(cx)) {
2993 gotoprobe = (last_eval_cx ?
2994 last_eval_cx->blk_eval.old_eval_root :
2999 /* else fall through */
3000 case CXt_LOOP_LAZYIV:
3001 case CXt_LOOP_LAZYSV:
3003 case CXt_LOOP_PLAIN:
3006 gotoprobe = cx->blk_oldcop->op_sibling;
3012 gotoprobe = cx->blk_oldcop->op_sibling;
3015 gotoprobe = PL_main_root;
3018 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3019 gotoprobe = CvROOT(cx->blk_sub.cv);
3025 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3028 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3029 CxTYPE(cx), (long) ix);
3030 gotoprobe = PL_main_root;
3034 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3035 enterops, enterops + GOTO_DEPTH);
3038 if (gotoprobe->op_sibling &&
3039 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3040 gotoprobe->op_sibling->op_sibling) {
3041 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3042 label, label_len, label_flags, enterops,
3043 enterops + GOTO_DEPTH);
3048 PL_lastgotoprobe = gotoprobe;
3051 DIE(aTHX_ "Can't find label %"SVf,
3052 SVfARG(newSVpvn_flags(label, label_len,
3053 SVs_TEMP | label_flags)));
3055 /* if we're leaving an eval, check before we pop any frames
3056 that we're not going to punt, otherwise the error
3059 if (leaving_eval && *enterops && enterops[1]) {
3061 for (i = 1; enterops[i]; i++)
3062 if (enterops[i]->op_type == OP_ENTERITER)
3063 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3066 if (*enterops && enterops[1]) {
3067 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3069 deprecate("\"goto\" to jump into a construct");
3072 /* pop unwanted frames */
3074 if (ix < cxstack_ix) {
3081 oldsave = PL_scopestack[PL_scopestack_ix];
3082 LEAVE_SCOPE(oldsave);
3085 /* push wanted frames */
3087 if (*enterops && enterops[1]) {
3088 OP * const oldop = PL_op;
3089 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3090 for (; enterops[ix]; ix++) {
3091 PL_op = enterops[ix];
3092 /* Eventually we may want to stack the needed arguments
3093 * for each op. For now, we punt on the hard ones. */
3094 if (PL_op->op_type == OP_ENTERITER)
3095 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3096 PL_op->op_ppaddr(aTHX);
3104 if (!retop) retop = PL_main_start;
3106 PL_restartop = retop;
3107 PL_do_undump = TRUE;
3111 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3112 PL_do_undump = FALSE;
3127 anum = 0; (void)POPs;
3132 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3134 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3137 PL_exit_flags |= PERL_EXIT_EXPECTED;
3139 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3140 if (anum || !(PL_minus_c && PL_madskills))
3145 PUSHs(&PL_sv_undef);
3152 S_save_lines(pTHX_ AV *array, SV *sv)
3154 const char *s = SvPVX_const(sv);
3155 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3158 PERL_ARGS_ASSERT_SAVE_LINES;
3160 while (s && s < send) {
3162 SV * const tmpstr = newSV_type(SVt_PVMG);
3164 t = (const char *)memchr(s, '\n', send - s);
3170 sv_setpvn(tmpstr, s, t - s);
3171 av_store(array, line++, tmpstr);
3179 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3181 0 is used as continue inside eval,
3183 3 is used for a die caught by an inner eval - continue inner loop
3185 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3186 establish a local jmpenv to handle exception traps.
3191 S_docatch(pTHX_ OP *o)
3195 OP * const oldop = PL_op;
3199 assert(CATCH_GET == TRUE);
3206 assert(cxstack_ix >= 0);
3207 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3208 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3213 /* die caught by an inner eval - continue inner loop */
3214 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3215 PL_restartjmpenv = NULL;
3216 PL_op = PL_restartop;
3225 assert(0); /* NOTREACHED */
3234 =for apidoc find_runcv
3236 Locate the CV corresponding to the currently executing sub or eval.
3237 If db_seqp is non_null, skip CVs that are in the DB package and populate
3238 *db_seqp with the cop sequence number at the point that the DB:: code was
3239 entered. (allows debuggers to eval in the scope of the breakpoint rather
3240 than in the scope of the debugger itself).
3246 Perl_find_runcv(pTHX_ U32 *db_seqp)
3252 *db_seqp = PL_curcop->cop_seq;
3253 for (si = PL_curstackinfo; si; si = si->si_prev) {
3255 for (ix = si->si_cxix; ix >= 0; ix--) {
3256 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3257 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3258 CV * const cv = cx->blk_sub.cv;
3259 /* skip DB:: code */
3260 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3261 *db_seqp = cx->blk_oldcop->cop_seq;
3266 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3267 return cx->blk_eval.cv;
3274 /* Run yyparse() in a setjmp wrapper. Returns:
3275 * 0: yyparse() successful
3276 * 1: yyparse() failed
3280 S_try_yyparse(pTHX_ int gramtype)
3285 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3289 ret = yyparse(gramtype) ? 1 : 0;
3296 assert(0); /* NOTREACHED */
3303 /* Compile a require/do or an eval ''.
3305 * outside is the lexically enclosing CV (if any) that invoked us.
3306 * seq is the current COP scope value.
3307 * hh is the saved hints hash, if any.
3309 * Returns a bool indicating whether the compile was successful; if so,
3310 * PL_eval_start contains the first op of the compiled code; otherwise,
3313 * This function is called from two places: pp_require and pp_entereval.
3314 * These can be distinguished by whether PL_op is entereval.
3318 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3321 OP * const saveop = PL_op;
3322 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3323 COP * const oldcurcop = PL_curcop;
3324 bool in_require = (saveop->op_type == OP_REQUIRE);
3328 PL_in_eval = (in_require
3329 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3334 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3336 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3337 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3338 cxstack[cxstack_ix].blk_gimme = gimme;
3340 CvOUTSIDE_SEQ(evalcv) = seq;
3341 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3343 /* set up a scratch pad */
3345 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3346 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3350 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3352 /* make sure we compile in the right package */
3354 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3355 SAVEGENERICSV(PL_curstash);
3356 PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3358 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3359 SAVESPTR(PL_beginav);
3360 PL_beginav = newAV();
3361 SAVEFREESV(PL_beginav);
3362 SAVESPTR(PL_unitcheckav);
3363 PL_unitcheckav = newAV();
3364 SAVEFREESV(PL_unitcheckav);
3367 SAVEBOOL(PL_madskills);
3371 ENTER_with_name("evalcomp");
3372 SAVESPTR(PL_compcv);
3375 /* try to compile it */
3377 PL_eval_root = NULL;
3378 PL_curcop = &PL_compiling;
3379 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3380 PL_in_eval |= EVAL_KEEPERR;
3387 hv_clear(GvHV(PL_hintgv));
3390 PL_hints = saveop->op_private & OPpEVAL_COPHH
3391 ? oldcurcop->cop_hints : saveop->op_targ;
3393 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3394 SvREFCNT_dec(GvHV(PL_hintgv));
3395 GvHV(PL_hintgv) = hh;
3398 SAVECOMPILEWARNINGS();
3400 if (PL_dowarn & G_WARN_ALL_ON)
3401 PL_compiling.cop_warnings = pWARN_ALL ;
3402 else if (PL_dowarn & G_WARN_ALL_OFF)
3403 PL_compiling.cop_warnings = pWARN_NONE ;
3405 PL_compiling.cop_warnings = pWARN_STD ;
3408 PL_compiling.cop_warnings =
3409 DUP_WARNINGS(oldcurcop->cop_warnings);
3410 cophh_free(CopHINTHASH_get(&PL_compiling));
3411 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3412 /* The label, if present, is the first entry on the chain. So rather
3413 than writing a blank label in front of it (which involves an
3414 allocation), just use the next entry in the chain. */
3415 PL_compiling.cop_hints_hash
3416 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3417 /* Check the assumption that this removed the label. */
3418 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3421 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3424 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3426 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3427 * so honour CATCH_GET and trap it here if necessary */
3429 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3431 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3432 SV **newsp; /* Used by POPBLOCK. */
3434 I32 optype; /* Used by POPEVAL. */
3439 PERL_UNUSED_VAR(newsp);
3440 PERL_UNUSED_VAR(optype);
3442 /* note that if yystatus == 3, then the EVAL CX block has already
3443 * been popped, and various vars restored */
3445 if (yystatus != 3) {
3447 op_free(PL_eval_root);
3448 PL_eval_root = NULL;
3450 SP = PL_stack_base + POPMARK; /* pop original mark */
3451 POPBLOCK(cx,PL_curpm);
3453 namesv = cx->blk_eval.old_namesv;
3454 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3455 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3460 /* If cx is still NULL, it means that we didn't go in the
3461 * POPEVAL branch. */
3462 cx = &cxstack[cxstack_ix];
3463 assert(CxTYPE(cx) == CXt_EVAL);
3464 namesv = cx->blk_eval.old_namesv;
3466 (void)hv_store(GvHVn(PL_incgv),
3467 SvPVX_const(namesv),
3468 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3470 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3473 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3476 if (!*(SvPVx_nolen_const(ERRSV))) {
3477 sv_setpvs(ERRSV, "Compilation error");
3480 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3485 LEAVE_with_name("evalcomp");
3487 CopLINE_set(&PL_compiling, 0);
3488 SAVEFREEOP(PL_eval_root);
3490 DEBUG_x(dump_eval());
3492 /* Register with debugger: */
3493 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3494 CV * const cv = get_cvs("DB::postponed", 0);
3498 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3500 call_sv(MUTABLE_SV(cv), G_DISCARD);
3504 if (PL_unitcheckav) {
3505 OP *es = PL_eval_start;
3506 call_list(PL_scopestack_ix, PL_unitcheckav);
3510 /* compiled okay, so do it */
3512 CvDEPTH(evalcv) = 1;
3513 SP = PL_stack_base + POPMARK; /* pop original mark */
3514 PL_op = saveop; /* The caller may need it. */
3515 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3522 S_check_type_and_open(pTHX_ SV *name)
3525 const char *p = SvPV_nolen_const(name);
3526 const int st_rc = PerlLIO_stat(p, &st);
3528 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3530 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3534 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3535 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3537 return PerlIO_open(p, PERL_SCRIPT_MODE);
3541 #ifndef PERL_DISABLE_PMC
3543 S_doopen_pm(pTHX_ SV *name)
3546 const char *p = SvPV_const(name, namelen);
3548 PERL_ARGS_ASSERT_DOOPEN_PM;
3550 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3551 SV *const pmcsv = sv_newmortal();
3554 SvSetSV_nosteal(pmcsv,name);
3555 sv_catpvn(pmcsv, "c", 1);
3557 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3558 return check_type_and_open(pmcsv);
3560 return check_type_and_open(name);
3563 # define doopen_pm(name) check_type_and_open(name)
3564 #endif /* !PERL_DISABLE_PMC */
3569 register PERL_CONTEXT *cx;
3576 int vms_unixname = 0;
3578 const char *tryname = NULL;
3580 const I32 gimme = GIMME_V;
3581 int filter_has_file = 0;
3582 PerlIO *tryrsfp = NULL;
3583 SV *filter_cache = NULL;
3584 SV *filter_state = NULL;
3585 SV *filter_sub = NULL;
3592 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3593 sv = sv_2mortal(new_version(sv));
3594 if (!sv_derived_from(PL_patchlevel, "version"))
3595 upg_version(PL_patchlevel, TRUE);
3596 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3597 if ( vcmp(sv,PL_patchlevel) <= 0 )
3598 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3599 SVfARG(sv_2mortal(vnormal(sv))),
3600 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3604 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3607 SV * const req = SvRV(sv);
3608 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3610 /* get the left hand term */
3611 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3613 first = SvIV(*av_fetch(lav,0,0));
3614 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3615 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3616 || av_len(lav) > 1 /* FP with > 3 digits */
3617 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3619 DIE(aTHX_ "Perl %"SVf" required--this is only "
3621 SVfARG(sv_2mortal(vnormal(req))),
3622 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3625 else { /* probably 'use 5.10' or 'use 5.8' */
3630 second = SvIV(*av_fetch(lav,1,0));
3632 second /= second >= 600 ? 100 : 10;
3633 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3634 (int)first, (int)second);
3635 upg_version(hintsv, TRUE);
3637 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3638 "--this is only %"SVf", stopped",
3639 SVfARG(sv_2mortal(vnormal(req))),
3640 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3641 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3649 name = SvPV_const(sv, len);
3650 if (!(name && len > 0 && *name))
3651 DIE(aTHX_ "Null filename used");
3652 TAINT_PROPER("require");
3656 /* The key in the %ENV hash is in the syntax of file passed as the argument
3657 * usually this is in UNIX format, but sometimes in VMS format, which
3658 * can result in a module being pulled in more than once.
3659 * To prevent this, the key must be stored in UNIX format if the VMS
3660 * name can be translated to UNIX.
3662 if ((unixname = tounixspec(name, NULL)) != NULL) {
3663 unixlen = strlen(unixname);
3669 /* if not VMS or VMS name can not be translated to UNIX, pass it
3672 unixname = (char *) name;
3675 if (PL_op->op_type == OP_REQUIRE) {
3676 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3677 unixname, unixlen, 0);
3679 if (*svp != &PL_sv_undef)
3682 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3683 "Compilation failed in require", unixname);
3687 /* prepare to compile file */
3689 if (path_is_absolute(name)) {
3690 /* At this point, name is SvPVX(sv) */
3692 tryrsfp = doopen_pm(sv);
3694 if (!tryrsfp && !(errno == EACCES && path_is_absolute(name))) {
3695 AV * const ar = GvAVn(PL_incgv);
3701 namesv = newSV_type(SVt_PV);
3702 for (i = 0; i <= AvFILL(ar); i++) {
3703 SV * const dirsv = *av_fetch(ar, i, TRUE);
3705 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3712 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3713 && !sv_isobject(loader))
3715 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3718 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3719 PTR2UV(SvRV(dirsv)), name);
3720 tryname = SvPVX_const(namesv);
3723 ENTER_with_name("call_INC");
3731 if (sv_isobject(loader))
3732 count = call_method("INC", G_ARRAY);
3734 count = call_sv(loader, G_ARRAY);
3744 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3745 && !isGV_with_GP(SvRV(arg))) {
3746 filter_cache = SvRV(arg);
3747 SvREFCNT_inc_simple_void_NN(filter_cache);
3754 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3758 if (isGV_with_GP(arg)) {
3759 IO * const io = GvIO((const GV *)arg);
3764 tryrsfp = IoIFP(io);
3765 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3766 PerlIO_close(IoOFP(io));
3777 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3779 SvREFCNT_inc_simple_void_NN(filter_sub);
3782 filter_state = SP[i];
3783 SvREFCNT_inc_simple_void(filter_state);
3787 if (!tryrsfp && (filter_cache || filter_sub)) {
3788 tryrsfp = PerlIO_open(BIT_BUCKET,
3796 LEAVE_with_name("call_INC");
3798 /* Adjust file name if the hook has set an %INC entry.
3799 This needs to happen after the FREETMPS above. */
3800 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3802 tryname = SvPV_nolen_const(*svp);
3809 filter_has_file = 0;
3811 SvREFCNT_dec(filter_cache);
3812 filter_cache = NULL;
3815 SvREFCNT_dec(filter_state);
3816 filter_state = NULL;
3819 SvREFCNT_dec(filter_sub);
3824 if (!path_is_absolute(name)
3830 dir = SvPV_const(dirsv, dirlen);
3838 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3840 sv_setpv(namesv, unixdir);
3841 sv_catpv(namesv, unixname);
3843 # ifdef __SYMBIAN32__
3844 if (PL_origfilename[0] &&
3845 PL_origfilename[1] == ':' &&
3846 !(dir[0] && dir[1] == ':'))
3847 Perl_sv_setpvf(aTHX_ namesv,
3852 Perl_sv_setpvf(aTHX_ namesv,
3856 /* The equivalent of
3857 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3858 but without the need to parse the format string, or
3859 call strlen on either pointer, and with the correct
3860 allocation up front. */
3862 char *tmp = SvGROW(namesv, dirlen + len + 2);
3864 memcpy(tmp, dir, dirlen);
3867 /* name came from an SV, so it will have a '\0' at the
3868 end that we can copy as part of this memcpy(). */
3869 memcpy(tmp, name, len + 1);
3871 SvCUR_set(namesv, dirlen + len + 1);
3876 TAINT_PROPER("require");
3877 tryname = SvPVX_const(namesv);
3878 tryrsfp = doopen_pm(namesv);
3880 if (tryname[0] == '.' && tryname[1] == '/') {
3882 while (*++tryname == '/');
3886 else if (errno == EMFILE || errno == EACCES) {
3887 /* no point in trying other paths if out of handles;
3888 * on the other hand, if we couldn't open one of the
3889 * files, then going on with the search could lead to
3890 * unexpected results; see perl #113422
3899 saved_errno = errno; /* sv_2mortal can realloc things */
3902 if (PL_op->op_type == OP_REQUIRE) {
3903 if(saved_errno == EMFILE || saved_errno == EACCES) {
3904 /* diag_listed_as: Can't locate %s */
3905 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
3907 if (namesv) { /* did we lookup @INC? */
3908 AV * const ar = GvAVn(PL_incgv);
3910 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3911 for (i = 0; i <= AvFILL(ar); i++) {
3912 sv_catpvs(inc, " ");
3913 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3916 /* diag_listed_as: Can't locate %s */
3918 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3920 (memEQ(name + len - 2, ".h", 3)
3921 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3922 (memEQ(name + len - 3, ".ph", 4)
3923 ? " (did you run h2ph?)" : ""),
3928 DIE(aTHX_ "Can't locate %s", name);
3935 SETERRNO(0, SS_NORMAL);
3937 /* Assume success here to prevent recursive requirement. */
3938 /* name is never assigned to again, so len is still strlen(name) */
3939 /* Check whether a hook in @INC has already filled %INC */
3941 (void)hv_store(GvHVn(PL_incgv),
3942 unixname, unixlen, newSVpv(tryname,0),0);
3944 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3946 (void)hv_store(GvHVn(PL_incgv),
3947 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3950 ENTER_with_name("eval");
3952 SAVECOPFILE_FREE(&PL_compiling);
3953 CopFILE_set(&PL_compiling, tryname);
3954 lex_start(NULL, tryrsfp, 0);
3956 if (filter_sub || filter_cache) {
3957 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3958 than hanging another SV from it. In turn, filter_add() optionally
3959 takes the SV to use as the filter (or creates a new SV if passed
3960 NULL), so simply pass in whatever value filter_cache has. */
3961 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3962 IoLINES(datasv) = filter_has_file;
3963 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3964 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3967 /* switch to eval mode */
3968 PUSHBLOCK(cx, CXt_EVAL, SP);
3970 cx->blk_eval.retop = PL_op->op_next;
3972 SAVECOPLINE(&PL_compiling);
3973 CopLINE_set(&PL_compiling, 0);
3977 /* Store and reset encoding. */
3978 encoding = PL_encoding;
3981 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
3982 op = DOCATCH(PL_eval_start);
3984 op = PL_op->op_next;
3986 /* Restore encoding. */
3987 PL_encoding = encoding;
3992 /* This is a op added to hold the hints hash for
3993 pp_entereval. The hash can be modified by the code
3994 being eval'ed, so we return a copy instead. */
4000 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4008 register PERL_CONTEXT *cx;
4010 const I32 gimme = GIMME_V;
4011 const U32 was = PL_breakable_sub_gen;
4012 char tbuf[TYPE_DIGITS(long) + 12];
4013 bool saved_delete = FALSE;
4014 char *tmpbuf = tbuf;
4017 U32 seq, lex_flags = 0;
4018 HV *saved_hh = NULL;
4019 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4021 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4022 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4024 else if (PL_hints & HINT_LOCALIZE_HH || (
4025 PL_op->op_private & OPpEVAL_COPHH
4026 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4028 saved_hh = cop_hints_2hv(PL_curcop, 0);
4029 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4033 /* make sure we've got a plain PV (no overload etc) before testing
4034 * for taint. Making a copy here is probably overkill, but better
4035 * safe than sorry */
4037 const char * const p = SvPV_const(sv, len);
4039 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4040 lex_flags |= LEX_START_COPIED;
4042 if (bytes && SvUTF8(sv))
4043 SvPVbyte_force(sv, len);
4045 else if (bytes && SvUTF8(sv)) {
4046 /* Don't modify someone else's scalar */
4049 (void)sv_2mortal(sv);
4050 SvPVbyte_force(sv,len);
4051 lex_flags |= LEX_START_COPIED;
4054 TAINT_IF(SvTAINTED(sv));
4055 TAINT_PROPER("eval");
4057 ENTER_with_name("eval");
4058 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4059 ? LEX_IGNORE_UTF8_HINTS
4060 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4065 /* switch to eval mode */
4067 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4068 SV * const temp_sv = sv_newmortal();
4069 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4070 (unsigned long)++PL_evalseq,
4071 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4072 tmpbuf = SvPVX(temp_sv);
4073 len = SvCUR(temp_sv);
4076 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4077 SAVECOPFILE_FREE(&PL_compiling);
4078 CopFILE_set(&PL_compiling, tmpbuf+2);
4079 SAVECOPLINE(&PL_compiling);
4080 CopLINE_set(&PL_compiling, 1);
4081 /* special case: an eval '' executed within the DB package gets lexically
4082 * placed in the first non-DB CV rather than the current CV - this
4083 * allows the debugger to execute code, find lexicals etc, in the
4084 * scope of the code being debugged. Passing &seq gets find_runcv
4085 * to do the dirty work for us */
4086 runcv = find_runcv(&seq);
4088 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4090 cx->blk_eval.retop = PL_op->op_next;
4092 /* prepare to compile string */
4094 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4095 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4097 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4098 deleting the eval's FILEGV from the stash before gv_check() runs
4099 (i.e. before run-time proper). To work around the coredump that
4100 ensues, we always turn GvMULTI_on for any globals that were
4101 introduced within evals. See force_ident(). GSAR 96-10-12 */
4102 char *const safestr = savepvn(tmpbuf, len);
4103 SAVEDELETE(PL_defstash, safestr, len);
4104 saved_delete = TRUE;
4109 if (doeval(gimme, runcv, seq, saved_hh)) {
4110 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4111 ? (PERLDB_LINE || PERLDB_SAVESRC)
4112 : PERLDB_SAVESRC_NOSUBS) {
4113 /* Retain the filegv we created. */
4114 } else if (!saved_delete) {
4115 char *const safestr = savepvn(tmpbuf, len);
4116 SAVEDELETE(PL_defstash, safestr, len);
4118 return DOCATCH(PL_eval_start);
4120 /* We have already left the scope set up earlier thanks to the LEAVE
4122 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4123 ? (PERLDB_LINE || PERLDB_SAVESRC)
4124 : PERLDB_SAVESRC_INVALID) {
4125 /* Retain the filegv we created. */
4126 } else if (!saved_delete) {
4127 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4129 return PL_op->op_next;
4139 register PERL_CONTEXT *cx;
4141 const U8 save_flags = PL_op -> op_flags;
4149 namesv = cx->blk_eval.old_namesv;
4150 retop = cx->blk_eval.retop;
4151 evalcv = cx->blk_eval.cv;
4154 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4156 PL_curpm = newpm; /* Don't pop $1 et al till now */
4159 assert(CvDEPTH(evalcv) == 1);
4161 CvDEPTH(evalcv) = 0;
4163 if (optype == OP_REQUIRE &&
4164 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4166 /* Unassume the success we assumed earlier. */
4167 (void)hv_delete(GvHVn(PL_incgv),
4168 SvPVX_const(namesv),
4169 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4171 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4173 /* die_unwind() did LEAVE, or we won't be here */
4176 LEAVE_with_name("eval");
4177 if (!(save_flags & OPf_SPECIAL)) {
4185 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4186 close to the related Perl_create_eval_scope. */
4188 Perl_delete_eval_scope(pTHX)
4193 register PERL_CONTEXT *cx;
4199 LEAVE_with_name("eval_scope");
4200 PERL_UNUSED_VAR(newsp);
4201 PERL_UNUSED_VAR(gimme);
4202 PERL_UNUSED_VAR(optype);
4205 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4206 also needed by Perl_fold_constants. */
4208 Perl_create_eval_scope(pTHX_ U32 flags)
4211 const I32 gimme = GIMME_V;
4213 ENTER_with_name("eval_scope");
4216 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4219 PL_in_eval = EVAL_INEVAL;
4220 if (flags & G_KEEPERR)
4221 PL_in_eval |= EVAL_KEEPERR;
4224 if (flags & G_FAKINGEVAL) {
4225 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4233 PERL_CONTEXT * const cx = create_eval_scope(0);
4234 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4235 return DOCATCH(PL_op->op_next);
4244 register PERL_CONTEXT *cx;
4250 PERL_UNUSED_VAR(optype);
4253 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4254 PL_curpm = newpm; /* Don't pop $1 et al till now */
4256 LEAVE_with_name("eval_scope");
4264 register PERL_CONTEXT *cx;
4265 const I32 gimme = GIMME_V;
4267 ENTER_with_name("given");
4270 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4271 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4273 PUSHBLOCK(cx, CXt_GIVEN, SP);
4282 register PERL_CONTEXT *cx;
4286 PERL_UNUSED_CONTEXT;
4289 assert(CxTYPE(cx) == CXt_GIVEN);
4292 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4293 PL_curpm = newpm; /* Don't pop $1 et al till now */
4295 LEAVE_with_name("given");
4299 /* Helper routines used by pp_smartmatch */
4301 S_make_matcher(pTHX_ REGEXP *re)
4304 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4306 PERL_ARGS_ASSERT_MAKE_MATCHER;
4308 PM_SETRE(matcher, ReREFCNT_inc(re));
4310 SAVEFREEOP((OP *) matcher);
4311 ENTER_with_name("matcher"); SAVETMPS;
4317 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4322 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4324 PL_op = (OP *) matcher;
4327 (void) Perl_pp_match(aTHX);
4329 return (SvTRUEx(POPs));
4333 S_destroy_matcher(pTHX_ PMOP *matcher)
4337 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4338 PERL_UNUSED_ARG(matcher);
4341 LEAVE_with_name("matcher");
4344 /* Do a smart match */
4347 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4348 return do_smartmatch(NULL, NULL, 0);
4351 /* This version of do_smartmatch() implements the
4352 * table of smart matches that is found in perlsyn.
4355 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4360 bool object_on_left = FALSE;
4361 SV *e = TOPs; /* e is for 'expression' */
4362 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4364 /* Take care only to invoke mg_get() once for each argument.
4365 * Currently we do this by copying the SV if it's magical. */
4367 if (!copied && SvGMAGICAL(d))
4368 d = sv_mortalcopy(d);
4375 e = sv_mortalcopy(e);
4377 /* First of all, handle overload magic of the rightmost argument */
4380 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4381 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4383 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4390 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4393 SP -= 2; /* Pop the values */
4398 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4405 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4406 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4407 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4409 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4410 object_on_left = TRUE;
4413 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4415 if (object_on_left) {
4416 goto sm_any_sub; /* Treat objects like scalars */
4418 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4419 /* Test sub truth for each key */
4421 bool andedresults = TRUE;
4422 HV *hv = (HV*) SvRV(d);
4423 I32 numkeys = hv_iterinit(hv);
4424 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4427 while ( (he = hv_iternext(hv)) ) {
4428 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4429 ENTER_with_name("smartmatch_hash_key_test");
4432 PUSHs(hv_iterkeysv(he));
4434 c = call_sv(e, G_SCALAR);
4437 andedresults = FALSE;
4439 andedresults = SvTRUEx(POPs) && andedresults;
4441 LEAVE_with_name("smartmatch_hash_key_test");
4448 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4449 /* Test sub truth for each element */
4451 bool andedresults = TRUE;
4452 AV *av = (AV*) SvRV(d);
4453 const I32 len = av_len(av);
4454 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4457 for (i = 0; i <= len; ++i) {
4458 SV * const * const svp = av_fetch(av, i, FALSE);
4459 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4460 ENTER_with_name("smartmatch_array_elem_test");
4466 c = call_sv(e, G_SCALAR);
4469 andedresults = FALSE;
4471 andedresults = SvTRUEx(POPs) && andedresults;
4473 LEAVE_with_name("smartmatch_array_elem_test");
4482 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4483 ENTER_with_name("smartmatch_coderef");
4488 c = call_sv(e, G_SCALAR);
4492 else if (SvTEMP(TOPs))
4493 SvREFCNT_inc_void(TOPs);
4495 LEAVE_with_name("smartmatch_coderef");
4500 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4501 if (object_on_left) {
4502 goto sm_any_hash; /* Treat objects like scalars */
4504 else if (!SvOK(d)) {
4505 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4508 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4509 /* Check that the key-sets are identical */
4511 HV *other_hv = MUTABLE_HV(SvRV(d));
4513 bool other_tied = FALSE;
4514 U32 this_key_count = 0,
4515 other_key_count = 0;
4516 HV *hv = MUTABLE_HV(SvRV(e));
4518 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4519 /* Tied hashes don't know how many keys they have. */
4520 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4523 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4524 HV * const temp = other_hv;
4529 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4532 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4535 /* The hashes have the same number of keys, so it suffices
4536 to check that one is a subset of the other. */
4537 (void) hv_iterinit(hv);
4538 while ( (he = hv_iternext(hv)) ) {
4539 SV *key = hv_iterkeysv(he);
4541 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4544 if(!hv_exists_ent(other_hv, key, 0)) {
4545 (void) hv_iterinit(hv); /* reset iterator */
4551 (void) hv_iterinit(other_hv);
4552 while ( hv_iternext(other_hv) )
4556 other_key_count = HvUSEDKEYS(other_hv);
4558 if (this_key_count != other_key_count)
4563 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4564 AV * const other_av = MUTABLE_AV(SvRV(d));
4565 const I32 other_len = av_len(other_av) + 1;
4567 HV *hv = MUTABLE_HV(SvRV(e));
4569 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4570 for (i = 0; i < other_len; ++i) {
4571 SV ** const svp = av_fetch(other_av, i, FALSE);
4572 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4573 if (svp) { /* ??? When can this not happen? */
4574 if (hv_exists_ent(hv, *svp, 0))
4580 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4581 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4584 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4586 HV *hv = MUTABLE_HV(SvRV(e));
4588 (void) hv_iterinit(hv);
4589 while ( (he = hv_iternext(hv)) ) {
4590 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4591 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4592 (void) hv_iterinit(hv);
4593 destroy_matcher(matcher);
4597 destroy_matcher(matcher);
4603 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4604 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4611 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4612 if (object_on_left) {
4613 goto sm_any_array; /* Treat objects like scalars */
4615 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4616 AV * const other_av = MUTABLE_AV(SvRV(e));
4617 const I32 other_len = av_len(other_av) + 1;
4620 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4621 for (i = 0; i < other_len; ++i) {
4622 SV ** const svp = av_fetch(other_av, i, FALSE);
4624 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4625 if (svp) { /* ??? When can this not happen? */
4626 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4632 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4633 AV *other_av = MUTABLE_AV(SvRV(d));
4634 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4635 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4639 const I32 other_len = av_len(other_av);
4641 if (NULL == seen_this) {
4642 seen_this = newHV();
4643 (void) sv_2mortal(MUTABLE_SV(seen_this));
4645 if (NULL == seen_other) {
4646 seen_other = newHV();
4647 (void) sv_2mortal(MUTABLE_SV(seen_other));
4649 for(i = 0; i <= other_len; ++i) {
4650 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4651 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4653 if (!this_elem || !other_elem) {
4654 if ((this_elem && SvOK(*this_elem))
4655 || (other_elem && SvOK(*other_elem)))
4658 else if (hv_exists_ent(seen_this,
4659 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4660 hv_exists_ent(seen_other,
4661 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4663 if (*this_elem != *other_elem)
4667 (void)hv_store_ent(seen_this,
4668 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4670 (void)hv_store_ent(seen_other,
4671 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4677 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4678 (void) do_smartmatch(seen_this, seen_other, 0);
4680 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4689 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4690 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4693 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4694 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4697 for(i = 0; i <= this_len; ++i) {
4698 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4699 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4700 if (svp && matcher_matches_sv(matcher, *svp)) {
4701 destroy_matcher(matcher);
4705 destroy_matcher(matcher);
4709 else if (!SvOK(d)) {
4710 /* undef ~~ array */
4711 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4714 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4715 for (i = 0; i <= this_len; ++i) {
4716 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4717 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4718 if (!svp || !SvOK(*svp))
4727 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4729 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4730 for (i = 0; i <= this_len; ++i) {
4731 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4738 /* infinite recursion isn't supposed to happen here */
4739 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4740 (void) do_smartmatch(NULL, NULL, 1);
4742 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4751 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4752 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4753 SV *t = d; d = e; e = t;
4754 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4757 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4758 SV *t = d; d = e; e = t;
4759 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4760 goto sm_regex_array;
4763 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4765 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4767 PUSHs(matcher_matches_sv(matcher, d)
4770 destroy_matcher(matcher);
4775 /* See if there is overload magic on left */
4776 else if (object_on_left && SvAMAGIC(d)) {
4778 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4779 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4782 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4790 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4793 else if (!SvOK(d)) {
4794 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4795 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4800 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4801 DEBUG_M(if (SvNIOK(e))
4802 Perl_deb(aTHX_ " applying rule Any-Num\n");
4804 Perl_deb(aTHX_ " applying rule Num-numish\n");
4806 /* numeric comparison */
4809 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4810 (void) Perl_pp_i_eq(aTHX);
4812 (void) Perl_pp_eq(aTHX);
4820 /* As a last resort, use string comparison */
4821 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4824 return Perl_pp_seq(aTHX);
4830 register PERL_CONTEXT *cx;
4831 const I32 gimme = GIMME_V;
4833 /* This is essentially an optimization: if the match
4834 fails, we don't want to push a context and then
4835 pop it again right away, so we skip straight
4836 to the op that follows the leavewhen.
4837 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4839 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4840 RETURNOP(cLOGOP->op_other->op_next);
4842 ENTER_with_name("when");
4845 PUSHBLOCK(cx, CXt_WHEN, SP);
4855 register PERL_CONTEXT *cx;
4860 cxix = dopoptogiven(cxstack_ix);
4862 /* diag_listed_as: Can't "when" outside a topicalizer */
4863 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4864 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
4867 assert(CxTYPE(cx) == CXt_WHEN);
4870 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4871 PL_curpm = newpm; /* pop $1 et al */
4873 LEAVE_with_name("when");
4875 if (cxix < cxstack_ix)
4878 cx = &cxstack[cxix];
4880 if (CxFOREACH(cx)) {
4881 /* clear off anything above the scope we're re-entering */
4882 I32 inner = PL_scopestack_ix;
4885 if (PL_scopestack_ix < inner)
4886 leave_scope(PL_scopestack[PL_scopestack_ix]);
4887 PL_curcop = cx->blk_oldcop;
4889 return cx->blk_loop.my_op->op_nextop;
4892 RETURNOP(cx->blk_givwhen.leave_op);
4899 register PERL_CONTEXT *cx;
4904 PERL_UNUSED_VAR(gimme);
4906 cxix = dopoptowhen(cxstack_ix);
4908 DIE(aTHX_ "Can't \"continue\" outside a when block");
4910 if (cxix < cxstack_ix)
4914 assert(CxTYPE(cx) == CXt_WHEN);
4917 PL_curpm = newpm; /* pop $1 et al */
4919 LEAVE_with_name("when");
4920 RETURNOP(cx->blk_givwhen.leave_op->op_next);
4927 register PERL_CONTEXT *cx;
4929 cxix = dopoptogiven(cxstack_ix);
4931 DIE(aTHX_ "Can't \"break\" outside a given block");
4933 cx = &cxstack[cxix];
4935 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4937 if (cxix < cxstack_ix)
4940 /* Restore the sp at the time we entered the given block */
4943 return cx->blk_givwhen.leave_op;
4947 S_doparseform(pTHX_ SV *sv)
4950 register char *s = SvPV(sv, len);
4951 register char *send;
4952 register char *base = NULL; /* start of current field */
4953 register I32 skipspaces = 0; /* number of contiguous spaces seen */
4954 bool noblank = FALSE; /* ~ or ~~ seen on this line */
4955 bool repeat = FALSE; /* ~~ seen on this line */
4956 bool postspace = FALSE; /* a text field may need right padding */
4959 U32 *linepc = NULL; /* position of last FF_LINEMARK */
4961 bool ischop; /* it's a ^ rather than a @ */
4962 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
4963 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4967 PERL_ARGS_ASSERT_DOPARSEFORM;
4970 Perl_croak(aTHX_ "Null picture in formline");
4972 if (SvTYPE(sv) >= SVt_PVMG) {
4973 /* This might, of course, still return NULL. */
4974 mg = mg_find(sv, PERL_MAGIC_fm);
4976 sv_upgrade(sv, SVt_PVMG);
4980 /* still the same as previously-compiled string? */
4981 SV *old = mg->mg_obj;
4982 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
4983 && len == SvCUR(old)
4984 && strnEQ(SvPVX(old), SvPVX(sv), len)
4986 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
4990 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
4991 Safefree(mg->mg_ptr);
4997 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
4998 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5001 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5002 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5006 /* estimate the buffer size needed */
5007 for (base = s; s <= send; s++) {
5008 if (*s == '\n' || *s == '@' || *s == '^')
5014 Newx(fops, maxops, U32);
5019 *fpc++ = FF_LINEMARK;
5020 noblank = repeat = FALSE;
5038 case ' ': case '\t':
5045 } /* else FALL THROUGH */
5053 *fpc++ = FF_LITERAL;
5061 *fpc++ = (U32)skipspaces;
5065 *fpc++ = FF_NEWLINE;
5069 arg = fpc - linepc + 1;
5076 *fpc++ = FF_LINEMARK;
5077 noblank = repeat = FALSE;
5086 ischop = s[-1] == '^';
5092 arg = (s - base) - 1;
5094 *fpc++ = FF_LITERAL;
5100 if (*s == '*') { /* @* or ^* */
5102 *fpc++ = 2; /* skip the @* or ^* */
5104 *fpc++ = FF_LINESNGL;
5107 *fpc++ = FF_LINEGLOB;
5109 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5110 arg = ischop ? FORM_NUM_BLANK : 0;
5115 const char * const f = ++s;
5118 arg |= FORM_NUM_POINT + (s - f);
5120 *fpc++ = s - base; /* fieldsize for FETCH */
5121 *fpc++ = FF_DECIMAL;
5123 unchopnum |= ! ischop;
5125 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5126 arg = ischop ? FORM_NUM_BLANK : 0;
5128 s++; /* skip the '0' first */
5132 const char * const f = ++s;
5135 arg |= FORM_NUM_POINT + (s - f);
5137 *fpc++ = s - base; /* fieldsize for FETCH */
5138 *fpc++ = FF_0DECIMAL;
5140 unchopnum |= ! ischop;
5142 else { /* text field */
5144 bool ismore = FALSE;
5147 while (*++s == '>') ;
5148 prespace = FF_SPACE;
5150 else if (*s == '|') {
5151 while (*++s == '|') ;
5152 prespace = FF_HALFSPACE;
5157 while (*++s == '<') ;
5160 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5164 *fpc++ = s - base; /* fieldsize for FETCH */
5166 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5169 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5183 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5186 mg->mg_ptr = (char *) fops;
5187 mg->mg_len = arg * sizeof(U32);
5188 mg->mg_obj = sv_copy;
5189 mg->mg_flags |= MGf_REFCOUNTED;
5191 if (unchopnum && repeat)
5192 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5199 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5201 /* Can value be printed in fldsize chars, using %*.*f ? */
5205 int intsize = fldsize - (value < 0 ? 1 : 0);
5207 if (frcsize & FORM_NUM_POINT)
5209 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5212 while (intsize--) pwr *= 10.0;
5213 while (frcsize--) eps /= 10.0;
5216 if (value + eps >= pwr)
5219 if (value - eps <= -pwr)
5226 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5229 SV * const datasv = FILTER_DATA(idx);
5230 const int filter_has_file = IoLINES(datasv);
5231 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5232 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5237 char *prune_from = NULL;
5238 bool read_from_cache = FALSE;
5241 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5243 assert(maxlen >= 0);
5246 /* I was having segfault trouble under Linux 2.2.5 after a
5247 parse error occured. (Had to hack around it with a test
5248 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5249 not sure where the trouble is yet. XXX */
5252 SV *const cache = datasv;
5255 const char *cache_p = SvPV(cache, cache_len);
5259 /* Running in block mode and we have some cached data already.
5261 if (cache_len >= umaxlen) {
5262 /* In fact, so much data we don't even need to call
5267 const char *const first_nl =
5268 (const char *)memchr(cache_p, '\n', cache_len);
5270 take = first_nl + 1 - cache_p;
5274 sv_catpvn(buf_sv, cache_p, take);
5275 sv_chop(cache, cache_p + take);
5276 /* Definitely not EOF */
5280 sv_catsv(buf_sv, cache);
5282 umaxlen -= cache_len;
5285 read_from_cache = TRUE;
5289 /* Filter API says that the filter appends to the contents of the buffer.
5290 Usually the buffer is "", so the details don't matter. But if it's not,
5291 then clearly what it contains is already filtered by this filter, so we
5292 don't want to pass it in a second time.
5293 I'm going to use a mortal in case the upstream filter croaks. */
5294 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5295 ? sv_newmortal() : buf_sv;
5296 SvUPGRADE(upstream, SVt_PV);
5298 if (filter_has_file) {
5299 status = FILTER_READ(idx+1, upstream, 0);
5302 if (filter_sub && status >= 0) {
5306 ENTER_with_name("call_filter_sub");
5311 DEFSV_set(upstream);
5315 PUSHs(filter_state);
5318 count = call_sv(filter_sub, G_SCALAR);
5330 LEAVE_with_name("call_filter_sub");
5333 if(SvOK(upstream)) {
5334 got_p = SvPV(upstream, got_len);
5336 if (got_len > umaxlen) {
5337 prune_from = got_p + umaxlen;
5340 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5341 if (first_nl && first_nl + 1 < got_p + got_len) {
5342 /* There's a second line here... */
5343 prune_from = first_nl + 1;
5348 /* Oh. Too long. Stuff some in our cache. */
5349 STRLEN cached_len = got_p + got_len - prune_from;
5350 SV *const cache = datasv;
5353 /* Cache should be empty. */
5354 assert(!SvCUR(cache));
5357 sv_setpvn(cache, prune_from, cached_len);
5358 /* If you ask for block mode, you may well split UTF-8 characters.
5359 "If it breaks, you get to keep both parts"
5360 (Your code is broken if you don't put them back together again
5361 before something notices.) */
5362 if (SvUTF8(upstream)) {
5365 SvCUR_set(upstream, got_len - cached_len);
5367 /* Can't yet be EOF */
5372 /* If they are at EOF but buf_sv has something in it, then they may never
5373 have touched the SV upstream, so it may be undefined. If we naively
5374 concatenate it then we get a warning about use of uninitialised value.
5376 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5377 sv_catsv(buf_sv, upstream);
5381 IoLINES(datasv) = 0;
5383 SvREFCNT_dec(filter_state);
5384 IoTOP_GV(datasv) = NULL;
5387 SvREFCNT_dec(filter_sub);
5388 IoBOTTOM_GV(datasv) = NULL;
5390 filter_del(S_run_user_filter);
5392 if (status == 0 && read_from_cache) {
5393 /* If we read some data from the cache (and by getting here it implies
5394 that we emptied the cache) then we aren't yet at EOF, and mustn't
5395 report that to our caller. */
5401 /* perhaps someone can come up with a better name for
5402 this? it is not really "absolute", per se ... */
5404 S_path_is_absolute(const char *name)
5406 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5408 if (PERL_FILE_IS_ABSOLUTE(name)
5410 || (*name == '.' && ((name[1] == '/' ||
5411 (name[1] == '.' && name[2] == '/'))
5412 || (name[1] == '\\' ||
5413 ( name[1] == '.' && name[2] == '\\')))
5416 || (*name == '.' && (name[1] == '/' ||
5417 (name[1] == '.' && name[2] == '/')))
5429 * c-indentation-style: bsd
5431 * indent-tabs-mode: nil
5434 * ex: set ts=8 sts=4 sw=4 et: