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_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
230 sv_catpvn_nomg(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_nomg_utf8_upgrade(dstr, s, m - s, nsv);
301 sv_catpvn_nomg(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;
2523 S_unwind_loop(pTHX_ const char * const opname)
2527 if (PL_op->op_flags & OPf_SPECIAL) {
2528 cxix = dopoptoloop(cxstack_ix);
2530 /* diag_listed_as: Can't "last" outside a loop block */
2531 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2536 const char * const label =
2537 PL_op->op_flags & OPf_STACKED
2538 ? SvPV(TOPs,label_len)
2539 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2540 const U32 label_flags =
2541 PL_op->op_flags & OPf_STACKED
2543 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2545 cxix = dopoptolabel(label, label_len, label_flags);
2547 /* diag_listed_as: Label not found for "last %s" */
2548 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2550 SVfARG(PL_op->op_flags & OPf_STACKED
2551 && !SvGMAGICAL(TOPp1s)
2553 : newSVpvn_flags(label,
2555 label_flags | SVs_TEMP)));
2557 if (cxix < cxstack_ix)
2565 register PERL_CONTEXT *cx;
2575 S_unwind_loop(aTHX_ "last");
2578 cxstack_ix++; /* temporarily protect top context */
2580 switch (CxTYPE(cx)) {
2581 case CXt_LOOP_LAZYIV:
2582 case CXt_LOOP_LAZYSV:
2584 case CXt_LOOP_PLAIN:
2586 newsp = PL_stack_base + cx->blk_loop.resetsp;
2587 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2591 nextop = cx->blk_sub.retop;
2595 nextop = cx->blk_eval.retop;
2599 nextop = cx->blk_sub.retop;
2602 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2606 PL_stack_sp = adjust_stack_on_leave(newsp, PL_stack_sp, MARK, gimme,
2607 pop2 == CXt_SUB ? SVs_TEMP : 0);
2611 /* Stack values are safe: */
2613 case CXt_LOOP_LAZYIV:
2614 case CXt_LOOP_PLAIN:
2615 case CXt_LOOP_LAZYSV:
2617 POPLOOP(cx); /* release loop vars ... */
2621 POPSUB(cx,sv); /* release CV and @_ ... */
2624 PL_curpm = newpm; /* ... and pop $1 et al */
2627 PERL_UNUSED_VAR(optype);
2628 PERL_UNUSED_VAR(gimme);
2635 register PERL_CONTEXT *cx;
2636 const I32 inner = PL_scopestack_ix;
2638 S_unwind_loop(aTHX_ "next");
2640 /* clear off anything above the scope we're re-entering, but
2641 * save the rest until after a possible continue block */
2643 if (PL_scopestack_ix < inner)
2644 leave_scope(PL_scopestack[PL_scopestack_ix]);
2645 PL_curcop = cx->blk_oldcop;
2646 return (cx)->blk_loop.my_op->op_nextop;
2652 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2653 register PERL_CONTEXT *cx;
2655 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2657 if (redo_op->op_type == OP_ENTER) {
2658 /* pop one less context to avoid $x being freed in while (my $x..) */
2660 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2661 redo_op = redo_op->op_next;
2665 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2666 LEAVE_SCOPE(oldsave);
2668 PL_curcop = cx->blk_oldcop;
2673 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2677 static const char too_deep[] = "Target of goto is too deeply nested";
2679 PERL_ARGS_ASSERT_DOFINDLABEL;
2682 Perl_croak(aTHX_ too_deep);
2683 if (o->op_type == OP_LEAVE ||
2684 o->op_type == OP_SCOPE ||
2685 o->op_type == OP_LEAVELOOP ||
2686 o->op_type == OP_LEAVESUB ||
2687 o->op_type == OP_LEAVETRY)
2689 *ops++ = cUNOPo->op_first;
2691 Perl_croak(aTHX_ too_deep);
2694 if (o->op_flags & OPf_KIDS) {
2696 /* First try all the kids at this level, since that's likeliest. */
2697 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2698 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2699 STRLEN kid_label_len;
2700 U32 kid_label_flags;
2701 const char *kid_label = CopLABEL_len_flags(kCOP,
2702 &kid_label_len, &kid_label_flags);
2704 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2707 (const U8*)kid_label, kid_label_len,
2708 (const U8*)label, len) == 0)
2710 (const U8*)label, len,
2711 (const U8*)kid_label, kid_label_len) == 0)
2712 : ( len == kid_label_len && ((kid_label == label)
2713 || memEQ(kid_label, label, len)))))
2717 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2718 if (kid == PL_lastgotoprobe)
2720 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2723 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2724 ops[-1]->op_type == OP_DBSTATE)
2729 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2742 register PERL_CONTEXT *cx;
2743 #define GOTO_DEPTH 64
2744 OP *enterops[GOTO_DEPTH];
2745 const char *label = NULL;
2746 STRLEN label_len = 0;
2747 U32 label_flags = 0;
2748 const bool do_dump = (PL_op->op_type == OP_DUMP);
2749 static const char must_have_label[] = "goto must have label";
2751 if (PL_op->op_flags & OPf_STACKED) {
2752 SV * const sv = POPs;
2754 /* This egregious kludge implements goto &subroutine */
2755 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2757 register PERL_CONTEXT *cx;
2758 CV *cv = MUTABLE_CV(SvRV(sv));
2765 if (!CvROOT(cv) && !CvXSUB(cv)) {
2766 const GV * const gv = CvGV(cv);
2770 /* autoloaded stub? */
2771 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2773 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2775 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2776 if (autogv && (cv = GvCV(autogv)))
2778 tmpstr = sv_newmortal();
2779 gv_efullname3(tmpstr, gv, NULL);
2780 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2782 DIE(aTHX_ "Goto undefined subroutine");
2785 /* First do some returnish stuff. */
2786 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2788 cxix = dopoptosub(cxstack_ix);
2790 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2791 if (cxix < cxstack_ix)
2795 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2796 if (CxTYPE(cx) == CXt_EVAL) {
2798 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2799 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2801 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2802 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2804 else if (CxMULTICALL(cx))
2805 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2806 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2807 /* put @_ back onto stack */
2808 AV* av = cx->blk_sub.argarray;
2810 items = AvFILLp(av) + 1;
2811 EXTEND(SP, items+1); /* @_ could have been extended. */
2812 Copy(AvARRAY(av), SP + 1, items, SV*);
2813 SvREFCNT_dec(GvAV(PL_defgv));
2814 GvAV(PL_defgv) = cx->blk_sub.savearray;
2816 /* abandon @_ if it got reified */
2821 av_extend(av, items-1);
2823 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2826 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2827 AV* const av = GvAV(PL_defgv);
2828 items = AvFILLp(av) + 1;
2829 EXTEND(SP, items+1); /* @_ could have been extended. */
2830 Copy(AvARRAY(av), SP + 1, items, SV*);
2834 if (CxTYPE(cx) == CXt_SUB &&
2835 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2836 SvREFCNT_dec(cx->blk_sub.cv);
2837 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2838 LEAVE_SCOPE(oldsave);
2840 /* A destructor called during LEAVE_SCOPE could have undefined
2841 * our precious cv. See bug #99850. */
2842 if (!CvROOT(cv) && !CvXSUB(cv)) {
2843 const GV * const gv = CvGV(cv);
2845 SV * const tmpstr = sv_newmortal();
2846 gv_efullname3(tmpstr, gv, NULL);
2847 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2850 DIE(aTHX_ "Goto undefined subroutine");
2853 /* Now do some callish stuff. */
2855 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2857 OP* const retop = cx->blk_sub.retop;
2858 SV **newsp PERL_UNUSED_DECL;
2859 I32 gimme PERL_UNUSED_DECL;
2862 for (index=0; index<items; index++)
2863 sv_2mortal(SP[-index]);
2866 /* XS subs don't have a CxSUB, so pop it */
2867 POPBLOCK(cx, PL_curpm);
2868 /* Push a mark for the start of arglist */
2871 (void)(*CvXSUB(cv))(aTHX_ cv);
2876 AV* const padlist = CvPADLIST(cv);
2877 if (CxTYPE(cx) == CXt_EVAL) {
2878 PL_in_eval = CxOLD_IN_EVAL(cx);
2879 PL_eval_root = cx->blk_eval.old_eval_root;
2880 cx->cx_type = CXt_SUB;
2882 cx->blk_sub.cv = cv;
2883 cx->blk_sub.olddepth = CvDEPTH(cv);
2886 if (CvDEPTH(cv) < 2)
2887 SvREFCNT_inc_simple_void_NN(cv);
2889 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2890 sub_crush_depth(cv);
2891 pad_push(padlist, CvDEPTH(cv));
2893 PL_curcop = cx->blk_oldcop;
2895 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2898 AV *const av = MUTABLE_AV(PAD_SVl(0));
2900 cx->blk_sub.savearray = GvAV(PL_defgv);
2901 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2902 CX_CURPAD_SAVE(cx->blk_sub);
2903 cx->blk_sub.argarray = av;
2905 if (items >= AvMAX(av) + 1) {
2906 SV **ary = AvALLOC(av);
2907 if (AvARRAY(av) != ary) {
2908 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2911 if (items >= AvMAX(av) + 1) {
2912 AvMAX(av) = items - 1;
2913 Renew(ary,items+1,SV*);
2919 Copy(mark,AvARRAY(av),items,SV*);
2920 AvFILLp(av) = items - 1;
2921 assert(!AvREAL(av));
2923 /* transfer 'ownership' of refcnts to new @_ */
2933 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2934 Perl_get_db_sub(aTHX_ NULL, cv);
2936 CV * const gotocv = get_cvs("DB::goto", 0);
2938 PUSHMARK( PL_stack_sp );
2939 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2944 RETURNOP(CvSTART(cv));
2948 label = SvPV_const(sv, label_len);
2949 label_flags = SvUTF8(sv);
2952 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2953 label = cPVOP->op_pv;
2954 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2955 label_len = strlen(label);
2957 if (!(do_dump || label_len)) DIE(aTHX_ must_have_label);
2962 OP *gotoprobe = NULL;
2963 bool leaving_eval = FALSE;
2964 bool in_block = FALSE;
2965 PERL_CONTEXT *last_eval_cx = NULL;
2969 PL_lastgotoprobe = NULL;
2971 for (ix = cxstack_ix; ix >= 0; ix--) {
2973 switch (CxTYPE(cx)) {
2975 leaving_eval = TRUE;
2976 if (!CxTRYBLOCK(cx)) {
2977 gotoprobe = (last_eval_cx ?
2978 last_eval_cx->blk_eval.old_eval_root :
2983 /* else fall through */
2984 case CXt_LOOP_LAZYIV:
2985 case CXt_LOOP_LAZYSV:
2987 case CXt_LOOP_PLAIN:
2990 gotoprobe = cx->blk_oldcop->op_sibling;
2996 gotoprobe = cx->blk_oldcop->op_sibling;
2999 gotoprobe = PL_main_root;
3002 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3003 gotoprobe = CvROOT(cx->blk_sub.cv);
3009 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3012 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3013 CxTYPE(cx), (long) ix);
3014 gotoprobe = PL_main_root;
3018 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3019 enterops, enterops + GOTO_DEPTH);
3022 if (gotoprobe->op_sibling &&
3023 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3024 gotoprobe->op_sibling->op_sibling) {
3025 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3026 label, label_len, label_flags, enterops,
3027 enterops + GOTO_DEPTH);
3032 PL_lastgotoprobe = gotoprobe;
3035 DIE(aTHX_ "Can't find label %"SVf,
3036 SVfARG(newSVpvn_flags(label, label_len,
3037 SVs_TEMP | label_flags)));
3039 /* if we're leaving an eval, check before we pop any frames
3040 that we're not going to punt, otherwise the error
3043 if (leaving_eval && *enterops && enterops[1]) {
3045 for (i = 1; enterops[i]; i++)
3046 if (enterops[i]->op_type == OP_ENTERITER)
3047 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3050 if (*enterops && enterops[1]) {
3051 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3053 deprecate("\"goto\" to jump into a construct");
3056 /* pop unwanted frames */
3058 if (ix < cxstack_ix) {
3065 oldsave = PL_scopestack[PL_scopestack_ix];
3066 LEAVE_SCOPE(oldsave);
3069 /* push wanted frames */
3071 if (*enterops && enterops[1]) {
3072 OP * const oldop = PL_op;
3073 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3074 for (; enterops[ix]; ix++) {
3075 PL_op = enterops[ix];
3076 /* Eventually we may want to stack the needed arguments
3077 * for each op. For now, we punt on the hard ones. */
3078 if (PL_op->op_type == OP_ENTERITER)
3079 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3080 PL_op->op_ppaddr(aTHX);
3088 if (!retop) retop = PL_main_start;
3090 PL_restartop = retop;
3091 PL_do_undump = TRUE;
3095 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3096 PL_do_undump = FALSE;
3111 anum = 0; (void)POPs;
3116 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3118 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3121 PL_exit_flags |= PERL_EXIT_EXPECTED;
3123 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3124 if (anum || !(PL_minus_c && PL_madskills))
3129 PUSHs(&PL_sv_undef);
3136 S_save_lines(pTHX_ AV *array, SV *sv)
3138 const char *s = SvPVX_const(sv);
3139 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3142 PERL_ARGS_ASSERT_SAVE_LINES;
3144 while (s && s < send) {
3146 SV * const tmpstr = newSV_type(SVt_PVMG);
3148 t = (const char *)memchr(s, '\n', send - s);
3154 sv_setpvn(tmpstr, s, t - s);
3155 av_store(array, line++, tmpstr);
3163 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3165 0 is used as continue inside eval,
3167 3 is used for a die caught by an inner eval - continue inner loop
3169 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3170 establish a local jmpenv to handle exception traps.
3175 S_docatch(pTHX_ OP *o)
3179 OP * const oldop = PL_op;
3183 assert(CATCH_GET == TRUE);
3190 assert(cxstack_ix >= 0);
3191 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3192 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3197 /* die caught by an inner eval - continue inner loop */
3198 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3199 PL_restartjmpenv = NULL;
3200 PL_op = PL_restartop;
3209 assert(0); /* NOTREACHED */
3218 =for apidoc find_runcv
3220 Locate the CV corresponding to the currently executing sub or eval.
3221 If db_seqp is non_null, skip CVs that are in the DB package and populate
3222 *db_seqp with the cop sequence number at the point that the DB:: code was
3223 entered. (allows debuggers to eval in the scope of the breakpoint rather
3224 than in the scope of the debugger itself).
3230 Perl_find_runcv(pTHX_ U32 *db_seqp)
3232 return Perl_find_runcv_where(aTHX_ 0, NULL, db_seqp);
3235 /* If this becomes part of the API, it might need a better name. */
3237 Perl_find_runcv_where(pTHX_ U8 cond, void *arg, U32 *db_seqp)
3244 *db_seqp = PL_curcop->cop_seq;
3245 for (si = PL_curstackinfo; si; si = si->si_prev) {
3247 for (ix = si->si_cxix; ix >= 0; ix--) {
3248 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3250 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3251 cv = cx->blk_sub.cv;
3252 /* skip DB:: code */
3253 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3254 *db_seqp = cx->blk_oldcop->cop_seq;
3258 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3259 cv = cx->blk_eval.cv;
3262 case FIND_RUNCV_root_eq:
3263 if (CvROOT(cv) != (OP *)arg) continue;
3265 case FIND_RUNCV_level_eq:
3266 if (level++ != PTR2IV(arg)) continue;
3274 return cond == FIND_RUNCV_root_eq ? NULL : PL_main_cv;
3278 /* Run yyparse() in a setjmp wrapper. Returns:
3279 * 0: yyparse() successful
3280 * 1: yyparse() failed
3284 S_try_yyparse(pTHX_ int gramtype)
3289 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3293 ret = yyparse(gramtype) ? 1 : 0;
3300 assert(0); /* NOTREACHED */
3307 /* Compile a require/do or an eval ''.
3309 * outside is the lexically enclosing CV (if any) that invoked us.
3310 * seq is the current COP scope value.
3311 * hh is the saved hints hash, if any.
3313 * Returns a bool indicating whether the compile was successful; if so,
3314 * PL_eval_start contains the first op of the compiled code; otherwise,
3317 * This function is called from two places: pp_require and pp_entereval.
3318 * These can be distinguished by whether PL_op is entereval.
3322 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3325 OP * const saveop = PL_op;
3326 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3327 COP * const oldcurcop = PL_curcop;
3328 bool in_require = (saveop->op_type == OP_REQUIRE);
3332 PL_in_eval = (in_require
3333 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3338 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3340 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3341 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3342 cxstack[cxstack_ix].blk_gimme = gimme;
3344 CvOUTSIDE_SEQ(evalcv) = seq;
3345 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3347 /* set up a scratch pad */
3349 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3350 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3354 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3356 /* make sure we compile in the right package */
3358 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3359 SAVEGENERICSV(PL_curstash);
3360 PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3362 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3363 SAVESPTR(PL_beginav);
3364 PL_beginav = newAV();
3365 SAVEFREESV(PL_beginav);
3366 SAVESPTR(PL_unitcheckav);
3367 PL_unitcheckav = newAV();
3368 SAVEFREESV(PL_unitcheckav);
3371 SAVEBOOL(PL_madskills);
3375 ENTER_with_name("evalcomp");
3376 SAVESPTR(PL_compcv);
3379 /* try to compile it */
3381 PL_eval_root = NULL;
3382 PL_curcop = &PL_compiling;
3383 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3384 PL_in_eval |= EVAL_KEEPERR;
3391 hv_clear(GvHV(PL_hintgv));
3394 PL_hints = saveop->op_private & OPpEVAL_COPHH
3395 ? oldcurcop->cop_hints : saveop->op_targ;
3397 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3398 SvREFCNT_dec(GvHV(PL_hintgv));
3399 GvHV(PL_hintgv) = hh;
3402 SAVECOMPILEWARNINGS();
3404 if (PL_dowarn & G_WARN_ALL_ON)
3405 PL_compiling.cop_warnings = pWARN_ALL ;
3406 else if (PL_dowarn & G_WARN_ALL_OFF)
3407 PL_compiling.cop_warnings = pWARN_NONE ;
3409 PL_compiling.cop_warnings = pWARN_STD ;
3412 PL_compiling.cop_warnings =
3413 DUP_WARNINGS(oldcurcop->cop_warnings);
3414 cophh_free(CopHINTHASH_get(&PL_compiling));
3415 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3416 /* The label, if present, is the first entry on the chain. So rather
3417 than writing a blank label in front of it (which involves an
3418 allocation), just use the next entry in the chain. */
3419 PL_compiling.cop_hints_hash
3420 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3421 /* Check the assumption that this removed the label. */
3422 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3425 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3428 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3430 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3431 * so honour CATCH_GET and trap it here if necessary */
3433 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3435 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3436 SV **newsp; /* Used by POPBLOCK. */
3438 I32 optype; /* Used by POPEVAL. */
3443 PERL_UNUSED_VAR(newsp);
3444 PERL_UNUSED_VAR(optype);
3446 /* note that if yystatus == 3, then the EVAL CX block has already
3447 * been popped, and various vars restored */
3449 if (yystatus != 3) {
3451 cv_forget_slab(evalcv);
3452 op_free(PL_eval_root);
3453 PL_eval_root = NULL;
3455 SP = PL_stack_base + POPMARK; /* pop original mark */
3456 POPBLOCK(cx,PL_curpm);
3458 namesv = cx->blk_eval.old_namesv;
3459 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3460 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3465 /* If cx is still NULL, it means that we didn't go in the
3466 * POPEVAL branch. */
3467 cx = &cxstack[cxstack_ix];
3468 assert(CxTYPE(cx) == CXt_EVAL);
3469 namesv = cx->blk_eval.old_namesv;
3471 (void)hv_store(GvHVn(PL_incgv),
3472 SvPVX_const(namesv),
3473 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3475 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3478 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3481 if (!*(SvPVx_nolen_const(ERRSV))) {
3482 sv_setpvs(ERRSV, "Compilation error");
3485 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3490 LEAVE_with_name("evalcomp");
3492 CopLINE_set(&PL_compiling, 0);
3493 SAVEFREEOP(PL_eval_root);
3494 cv_forget_slab(evalcv);
3496 DEBUG_x(dump_eval());
3498 /* Register with debugger: */
3499 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3500 CV * const cv = get_cvs("DB::postponed", 0);
3504 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3506 call_sv(MUTABLE_SV(cv), G_DISCARD);
3510 if (PL_unitcheckav) {
3511 OP *es = PL_eval_start;
3512 call_list(PL_scopestack_ix, PL_unitcheckav);
3516 /* compiled okay, so do it */
3518 CvDEPTH(evalcv) = 1;
3519 SP = PL_stack_base + POPMARK; /* pop original mark */
3520 PL_op = saveop; /* The caller may need it. */
3521 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3528 S_check_type_and_open(pTHX_ SV *name)
3531 const char *p = SvPV_nolen_const(name);
3532 const int st_rc = PerlLIO_stat(p, &st);
3534 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3536 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3540 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3541 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3543 return PerlIO_open(p, PERL_SCRIPT_MODE);
3547 #ifndef PERL_DISABLE_PMC
3549 S_doopen_pm(pTHX_ SV *name)
3552 const char *p = SvPV_const(name, namelen);
3554 PERL_ARGS_ASSERT_DOOPEN_PM;
3556 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3557 SV *const pmcsv = sv_newmortal();
3560 SvSetSV_nosteal(pmcsv,name);
3561 sv_catpvn(pmcsv, "c", 1);
3563 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3564 return check_type_and_open(pmcsv);
3566 return check_type_and_open(name);
3569 # define doopen_pm(name) check_type_and_open(name)
3570 #endif /* !PERL_DISABLE_PMC */
3575 register PERL_CONTEXT *cx;
3582 int vms_unixname = 0;
3584 const char *tryname = NULL;
3586 const I32 gimme = GIMME_V;
3587 int filter_has_file = 0;
3588 PerlIO *tryrsfp = NULL;
3589 SV *filter_cache = NULL;
3590 SV *filter_state = NULL;
3591 SV *filter_sub = NULL;
3598 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3599 sv = sv_2mortal(new_version(sv));
3600 if (!sv_derived_from(PL_patchlevel, "version"))
3601 upg_version(PL_patchlevel, TRUE);
3602 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3603 if ( vcmp(sv,PL_patchlevel) <= 0 )
3604 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3605 SVfARG(sv_2mortal(vnormal(sv))),
3606 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3610 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3613 SV * const req = SvRV(sv);
3614 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3616 /* get the left hand term */
3617 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3619 first = SvIV(*av_fetch(lav,0,0));
3620 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3621 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3622 || av_len(lav) > 1 /* FP with > 3 digits */
3623 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3625 DIE(aTHX_ "Perl %"SVf" required--this is only "
3627 SVfARG(sv_2mortal(vnormal(req))),
3628 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3631 else { /* probably 'use 5.10' or 'use 5.8' */
3636 second = SvIV(*av_fetch(lav,1,0));
3638 second /= second >= 600 ? 100 : 10;
3639 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3640 (int)first, (int)second);
3641 upg_version(hintsv, TRUE);
3643 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3644 "--this is only %"SVf", stopped",
3645 SVfARG(sv_2mortal(vnormal(req))),
3646 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3647 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3655 name = SvPV_const(sv, len);
3656 if (!(name && len > 0 && *name))
3657 DIE(aTHX_ "Null filename used");
3658 TAINT_PROPER("require");
3662 /* The key in the %ENV hash is in the syntax of file passed as the argument
3663 * usually this is in UNIX format, but sometimes in VMS format, which
3664 * can result in a module being pulled in more than once.
3665 * To prevent this, the key must be stored in UNIX format if the VMS
3666 * name can be translated to UNIX.
3668 if ((unixname = tounixspec(name, NULL)) != NULL) {
3669 unixlen = strlen(unixname);
3675 /* if not VMS or VMS name can not be translated to UNIX, pass it
3678 unixname = (char *) name;
3681 if (PL_op->op_type == OP_REQUIRE) {
3682 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3683 unixname, unixlen, 0);
3685 if (*svp != &PL_sv_undef)
3688 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3689 "Compilation failed in require", unixname);
3693 /* prepare to compile file */
3695 if (path_is_absolute(name)) {
3696 /* At this point, name is SvPVX(sv) */
3698 tryrsfp = doopen_pm(sv);
3700 if (!tryrsfp && !(errno == EACCES && path_is_absolute(name))) {
3701 AV * const ar = GvAVn(PL_incgv);
3707 namesv = newSV_type(SVt_PV);
3708 for (i = 0; i <= AvFILL(ar); i++) {
3709 SV * const dirsv = *av_fetch(ar, i, TRUE);
3711 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3718 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3719 && !sv_isobject(loader))
3721 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3724 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3725 PTR2UV(SvRV(dirsv)), name);
3726 tryname = SvPVX_const(namesv);
3729 ENTER_with_name("call_INC");
3737 if (sv_isobject(loader))
3738 count = call_method("INC", G_ARRAY);
3740 count = call_sv(loader, G_ARRAY);
3750 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3751 && !isGV_with_GP(SvRV(arg))) {
3752 filter_cache = SvRV(arg);
3753 SvREFCNT_inc_simple_void_NN(filter_cache);
3760 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3764 if (isGV_with_GP(arg)) {
3765 IO * const io = GvIO((const GV *)arg);
3770 tryrsfp = IoIFP(io);
3771 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3772 PerlIO_close(IoOFP(io));
3783 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3785 SvREFCNT_inc_simple_void_NN(filter_sub);
3788 filter_state = SP[i];
3789 SvREFCNT_inc_simple_void(filter_state);
3793 if (!tryrsfp && (filter_cache || filter_sub)) {
3794 tryrsfp = PerlIO_open(BIT_BUCKET,
3802 LEAVE_with_name("call_INC");
3804 /* Adjust file name if the hook has set an %INC entry.
3805 This needs to happen after the FREETMPS above. */
3806 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3808 tryname = SvPV_nolen_const(*svp);
3815 filter_has_file = 0;
3817 SvREFCNT_dec(filter_cache);
3818 filter_cache = NULL;
3821 SvREFCNT_dec(filter_state);
3822 filter_state = NULL;
3825 SvREFCNT_dec(filter_sub);
3830 if (!path_is_absolute(name)
3836 dir = SvPV_const(dirsv, dirlen);
3844 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3846 sv_setpv(namesv, unixdir);
3847 sv_catpv(namesv, unixname);
3849 # ifdef __SYMBIAN32__
3850 if (PL_origfilename[0] &&
3851 PL_origfilename[1] == ':' &&
3852 !(dir[0] && dir[1] == ':'))
3853 Perl_sv_setpvf(aTHX_ namesv,
3858 Perl_sv_setpvf(aTHX_ namesv,
3862 /* The equivalent of
3863 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3864 but without the need to parse the format string, or
3865 call strlen on either pointer, and with the correct
3866 allocation up front. */
3868 char *tmp = SvGROW(namesv, dirlen + len + 2);
3870 memcpy(tmp, dir, dirlen);
3873 /* name came from an SV, so it will have a '\0' at the
3874 end that we can copy as part of this memcpy(). */
3875 memcpy(tmp, name, len + 1);
3877 SvCUR_set(namesv, dirlen + len + 1);
3882 TAINT_PROPER("require");
3883 tryname = SvPVX_const(namesv);
3884 tryrsfp = doopen_pm(namesv);
3886 if (tryname[0] == '.' && tryname[1] == '/') {
3888 while (*++tryname == '/');
3892 else if (errno == EMFILE || errno == EACCES) {
3893 /* no point in trying other paths if out of handles;
3894 * on the other hand, if we couldn't open one of the
3895 * files, then going on with the search could lead to
3896 * unexpected results; see perl #113422
3905 saved_errno = errno; /* sv_2mortal can realloc things */
3908 if (PL_op->op_type == OP_REQUIRE) {
3909 if(saved_errno == EMFILE || saved_errno == EACCES) {
3910 /* diag_listed_as: Can't locate %s */
3911 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
3913 if (namesv) { /* did we lookup @INC? */
3914 AV * const ar = GvAVn(PL_incgv);
3916 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3917 for (i = 0; i <= AvFILL(ar); i++) {
3918 sv_catpvs(inc, " ");
3919 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3922 /* diag_listed_as: Can't locate %s */
3924 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3926 (memEQ(name + len - 2, ".h", 3)
3927 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3928 (memEQ(name + len - 3, ".ph", 4)
3929 ? " (did you run h2ph?)" : ""),
3934 DIE(aTHX_ "Can't locate %s", name);
3941 SETERRNO(0, SS_NORMAL);
3943 /* Assume success here to prevent recursive requirement. */
3944 /* name is never assigned to again, so len is still strlen(name) */
3945 /* Check whether a hook in @INC has already filled %INC */
3947 (void)hv_store(GvHVn(PL_incgv),
3948 unixname, unixlen, newSVpv(tryname,0),0);
3950 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3952 (void)hv_store(GvHVn(PL_incgv),
3953 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3956 ENTER_with_name("eval");
3958 SAVECOPFILE_FREE(&PL_compiling);
3959 CopFILE_set(&PL_compiling, tryname);
3960 lex_start(NULL, tryrsfp, 0);
3962 if (filter_sub || filter_cache) {
3963 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3964 than hanging another SV from it. In turn, filter_add() optionally
3965 takes the SV to use as the filter (or creates a new SV if passed
3966 NULL), so simply pass in whatever value filter_cache has. */
3967 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3968 IoLINES(datasv) = filter_has_file;
3969 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3970 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3973 /* switch to eval mode */
3974 PUSHBLOCK(cx, CXt_EVAL, SP);
3976 cx->blk_eval.retop = PL_op->op_next;
3978 SAVECOPLINE(&PL_compiling);
3979 CopLINE_set(&PL_compiling, 0);
3983 /* Store and reset encoding. */
3984 encoding = PL_encoding;
3987 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
3988 op = DOCATCH(PL_eval_start);
3990 op = PL_op->op_next;
3992 /* Restore encoding. */
3993 PL_encoding = encoding;
3998 /* This is a op added to hold the hints hash for
3999 pp_entereval. The hash can be modified by the code
4000 being eval'ed, so we return a copy instead. */
4006 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4014 register PERL_CONTEXT *cx;
4016 const I32 gimme = GIMME_V;
4017 const U32 was = PL_breakable_sub_gen;
4018 char tbuf[TYPE_DIGITS(long) + 12];
4019 bool saved_delete = FALSE;
4020 char *tmpbuf = tbuf;
4023 U32 seq, lex_flags = 0;
4024 HV *saved_hh = NULL;
4025 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4027 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4028 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4030 else if (PL_hints & HINT_LOCALIZE_HH || (
4031 PL_op->op_private & OPpEVAL_COPHH
4032 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4034 saved_hh = cop_hints_2hv(PL_curcop, 0);
4035 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4039 /* make sure we've got a plain PV (no overload etc) before testing
4040 * for taint. Making a copy here is probably overkill, but better
4041 * safe than sorry */
4043 const char * const p = SvPV_const(sv, len);
4045 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4046 lex_flags |= LEX_START_COPIED;
4048 if (bytes && SvUTF8(sv))
4049 SvPVbyte_force(sv, len);
4051 else if (bytes && SvUTF8(sv)) {
4052 /* Don't modify someone else's scalar */
4055 (void)sv_2mortal(sv);
4056 SvPVbyte_force(sv,len);
4057 lex_flags |= LEX_START_COPIED;
4060 TAINT_IF(SvTAINTED(sv));
4061 TAINT_PROPER("eval");
4063 ENTER_with_name("eval");
4064 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4065 ? LEX_IGNORE_UTF8_HINTS
4066 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4071 /* switch to eval mode */
4073 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4074 SV * const temp_sv = sv_newmortal();
4075 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4076 (unsigned long)++PL_evalseq,
4077 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4078 tmpbuf = SvPVX(temp_sv);
4079 len = SvCUR(temp_sv);
4082 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4083 SAVECOPFILE_FREE(&PL_compiling);
4084 CopFILE_set(&PL_compiling, tmpbuf+2);
4085 SAVECOPLINE(&PL_compiling);
4086 CopLINE_set(&PL_compiling, 1);
4087 /* special case: an eval '' executed within the DB package gets lexically
4088 * placed in the first non-DB CV rather than the current CV - this
4089 * allows the debugger to execute code, find lexicals etc, in the
4090 * scope of the code being debugged. Passing &seq gets find_runcv
4091 * to do the dirty work for us */
4092 runcv = find_runcv(&seq);
4094 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4096 cx->blk_eval.retop = PL_op->op_next;
4098 /* prepare to compile string */
4100 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4101 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4103 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4104 deleting the eval's FILEGV from the stash before gv_check() runs
4105 (i.e. before run-time proper). To work around the coredump that
4106 ensues, we always turn GvMULTI_on for any globals that were
4107 introduced within evals. See force_ident(). GSAR 96-10-12 */
4108 char *const safestr = savepvn(tmpbuf, len);
4109 SAVEDELETE(PL_defstash, safestr, len);
4110 saved_delete = TRUE;
4115 if (doeval(gimme, runcv, seq, saved_hh)) {
4116 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4117 ? (PERLDB_LINE || PERLDB_SAVESRC)
4118 : PERLDB_SAVESRC_NOSUBS) {
4119 /* Retain the filegv we created. */
4120 } else if (!saved_delete) {
4121 char *const safestr = savepvn(tmpbuf, len);
4122 SAVEDELETE(PL_defstash, safestr, len);
4124 return DOCATCH(PL_eval_start);
4126 /* We have already left the scope set up earlier thanks to the LEAVE
4128 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4129 ? (PERLDB_LINE || PERLDB_SAVESRC)
4130 : PERLDB_SAVESRC_INVALID) {
4131 /* Retain the filegv we created. */
4132 } else if (!saved_delete) {
4133 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4135 return PL_op->op_next;
4145 register PERL_CONTEXT *cx;
4147 const U8 save_flags = PL_op -> op_flags;
4155 namesv = cx->blk_eval.old_namesv;
4156 retop = cx->blk_eval.retop;
4157 evalcv = cx->blk_eval.cv;
4160 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4162 PL_curpm = newpm; /* Don't pop $1 et al till now */
4165 assert(CvDEPTH(evalcv) == 1);
4167 CvDEPTH(evalcv) = 0;
4169 if (optype == OP_REQUIRE &&
4170 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4172 /* Unassume the success we assumed earlier. */
4173 (void)hv_delete(GvHVn(PL_incgv),
4174 SvPVX_const(namesv),
4175 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4177 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4179 /* die_unwind() did LEAVE, or we won't be here */
4182 LEAVE_with_name("eval");
4183 if (!(save_flags & OPf_SPECIAL)) {
4191 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4192 close to the related Perl_create_eval_scope. */
4194 Perl_delete_eval_scope(pTHX)
4199 register PERL_CONTEXT *cx;
4205 LEAVE_with_name("eval_scope");
4206 PERL_UNUSED_VAR(newsp);
4207 PERL_UNUSED_VAR(gimme);
4208 PERL_UNUSED_VAR(optype);
4211 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4212 also needed by Perl_fold_constants. */
4214 Perl_create_eval_scope(pTHX_ U32 flags)
4217 const I32 gimme = GIMME_V;
4219 ENTER_with_name("eval_scope");
4222 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4225 PL_in_eval = EVAL_INEVAL;
4226 if (flags & G_KEEPERR)
4227 PL_in_eval |= EVAL_KEEPERR;
4230 if (flags & G_FAKINGEVAL) {
4231 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4239 PERL_CONTEXT * const cx = create_eval_scope(0);
4240 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4241 return DOCATCH(PL_op->op_next);
4250 register PERL_CONTEXT *cx;
4256 PERL_UNUSED_VAR(optype);
4259 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4260 PL_curpm = newpm; /* Don't pop $1 et al till now */
4262 LEAVE_with_name("eval_scope");
4270 register PERL_CONTEXT *cx;
4271 const I32 gimme = GIMME_V;
4273 ENTER_with_name("given");
4276 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4277 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4279 PUSHBLOCK(cx, CXt_GIVEN, SP);
4288 register PERL_CONTEXT *cx;
4292 PERL_UNUSED_CONTEXT;
4295 assert(CxTYPE(cx) == CXt_GIVEN);
4298 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4299 PL_curpm = newpm; /* Don't pop $1 et al till now */
4301 LEAVE_with_name("given");
4305 /* Helper routines used by pp_smartmatch */
4307 S_make_matcher(pTHX_ REGEXP *re)
4310 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4312 PERL_ARGS_ASSERT_MAKE_MATCHER;
4314 PM_SETRE(matcher, ReREFCNT_inc(re));
4316 SAVEFREEOP((OP *) matcher);
4317 ENTER_with_name("matcher"); SAVETMPS;
4323 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4328 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4330 PL_op = (OP *) matcher;
4333 (void) Perl_pp_match(aTHX);
4335 return (SvTRUEx(POPs));
4339 S_destroy_matcher(pTHX_ PMOP *matcher)
4343 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4344 PERL_UNUSED_ARG(matcher);
4347 LEAVE_with_name("matcher");
4350 /* Do a smart match */
4353 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4354 return do_smartmatch(NULL, NULL, 0);
4357 /* This version of do_smartmatch() implements the
4358 * table of smart matches that is found in perlsyn.
4361 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4366 bool object_on_left = FALSE;
4367 SV *e = TOPs; /* e is for 'expression' */
4368 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4370 /* Take care only to invoke mg_get() once for each argument.
4371 * Currently we do this by copying the SV if it's magical. */
4373 if (!copied && SvGMAGICAL(d))
4374 d = sv_mortalcopy(d);
4381 e = sv_mortalcopy(e);
4383 /* First of all, handle overload magic of the rightmost argument */
4386 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4387 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4389 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4396 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4399 SP -= 2; /* Pop the values */
4404 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4411 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4412 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4413 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4415 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4416 object_on_left = TRUE;
4419 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4421 if (object_on_left) {
4422 goto sm_any_sub; /* Treat objects like scalars */
4424 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4425 /* Test sub truth for each key */
4427 bool andedresults = TRUE;
4428 HV *hv = (HV*) SvRV(d);
4429 I32 numkeys = hv_iterinit(hv);
4430 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4433 while ( (he = hv_iternext(hv)) ) {
4434 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4435 ENTER_with_name("smartmatch_hash_key_test");
4438 PUSHs(hv_iterkeysv(he));
4440 c = call_sv(e, G_SCALAR);
4443 andedresults = FALSE;
4445 andedresults = SvTRUEx(POPs) && andedresults;
4447 LEAVE_with_name("smartmatch_hash_key_test");
4454 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4455 /* Test sub truth for each element */
4457 bool andedresults = TRUE;
4458 AV *av = (AV*) SvRV(d);
4459 const I32 len = av_len(av);
4460 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4463 for (i = 0; i <= len; ++i) {
4464 SV * const * const svp = av_fetch(av, i, FALSE);
4465 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4466 ENTER_with_name("smartmatch_array_elem_test");
4472 c = call_sv(e, G_SCALAR);
4475 andedresults = FALSE;
4477 andedresults = SvTRUEx(POPs) && andedresults;
4479 LEAVE_with_name("smartmatch_array_elem_test");
4488 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4489 ENTER_with_name("smartmatch_coderef");
4494 c = call_sv(e, G_SCALAR);
4498 else if (SvTEMP(TOPs))
4499 SvREFCNT_inc_void(TOPs);
4501 LEAVE_with_name("smartmatch_coderef");
4506 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4507 if (object_on_left) {
4508 goto sm_any_hash; /* Treat objects like scalars */
4510 else if (!SvOK(d)) {
4511 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4514 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4515 /* Check that the key-sets are identical */
4517 HV *other_hv = MUTABLE_HV(SvRV(d));
4519 bool other_tied = FALSE;
4520 U32 this_key_count = 0,
4521 other_key_count = 0;
4522 HV *hv = MUTABLE_HV(SvRV(e));
4524 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4525 /* Tied hashes don't know how many keys they have. */
4526 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4529 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4530 HV * const temp = other_hv;
4535 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4538 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4541 /* The hashes have the same number of keys, so it suffices
4542 to check that one is a subset of the other. */
4543 (void) hv_iterinit(hv);
4544 while ( (he = hv_iternext(hv)) ) {
4545 SV *key = hv_iterkeysv(he);
4547 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4550 if(!hv_exists_ent(other_hv, key, 0)) {
4551 (void) hv_iterinit(hv); /* reset iterator */
4557 (void) hv_iterinit(other_hv);
4558 while ( hv_iternext(other_hv) )
4562 other_key_count = HvUSEDKEYS(other_hv);
4564 if (this_key_count != other_key_count)
4569 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4570 AV * const other_av = MUTABLE_AV(SvRV(d));
4571 const I32 other_len = av_len(other_av) + 1;
4573 HV *hv = MUTABLE_HV(SvRV(e));
4575 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4576 for (i = 0; i < other_len; ++i) {
4577 SV ** const svp = av_fetch(other_av, i, FALSE);
4578 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4579 if (svp) { /* ??? When can this not happen? */
4580 if (hv_exists_ent(hv, *svp, 0))
4586 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4587 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4590 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4592 HV *hv = MUTABLE_HV(SvRV(e));
4594 (void) hv_iterinit(hv);
4595 while ( (he = hv_iternext(hv)) ) {
4596 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4597 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4598 (void) hv_iterinit(hv);
4599 destroy_matcher(matcher);
4603 destroy_matcher(matcher);
4609 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4610 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4617 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4618 if (object_on_left) {
4619 goto sm_any_array; /* Treat objects like scalars */
4621 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4622 AV * const other_av = MUTABLE_AV(SvRV(e));
4623 const I32 other_len = av_len(other_av) + 1;
4626 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4627 for (i = 0; i < other_len; ++i) {
4628 SV ** const svp = av_fetch(other_av, i, FALSE);
4630 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4631 if (svp) { /* ??? When can this not happen? */
4632 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4638 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4639 AV *other_av = MUTABLE_AV(SvRV(d));
4640 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4641 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4645 const I32 other_len = av_len(other_av);
4647 if (NULL == seen_this) {
4648 seen_this = newHV();
4649 (void) sv_2mortal(MUTABLE_SV(seen_this));
4651 if (NULL == seen_other) {
4652 seen_other = newHV();
4653 (void) sv_2mortal(MUTABLE_SV(seen_other));
4655 for(i = 0; i <= other_len; ++i) {
4656 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4657 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4659 if (!this_elem || !other_elem) {
4660 if ((this_elem && SvOK(*this_elem))
4661 || (other_elem && SvOK(*other_elem)))
4664 else if (hv_exists_ent(seen_this,
4665 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4666 hv_exists_ent(seen_other,
4667 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4669 if (*this_elem != *other_elem)
4673 (void)hv_store_ent(seen_this,
4674 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4676 (void)hv_store_ent(seen_other,
4677 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4683 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4684 (void) do_smartmatch(seen_this, seen_other, 0);
4686 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4695 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4696 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4699 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4700 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4703 for(i = 0; i <= this_len; ++i) {
4704 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4705 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4706 if (svp && matcher_matches_sv(matcher, *svp)) {
4707 destroy_matcher(matcher);
4711 destroy_matcher(matcher);
4715 else if (!SvOK(d)) {
4716 /* undef ~~ array */
4717 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4720 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4721 for (i = 0; i <= this_len; ++i) {
4722 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4723 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4724 if (!svp || !SvOK(*svp))
4733 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4735 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4736 for (i = 0; i <= this_len; ++i) {
4737 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4744 /* infinite recursion isn't supposed to happen here */
4745 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4746 (void) do_smartmatch(NULL, NULL, 1);
4748 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4757 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4758 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4759 SV *t = d; d = e; e = t;
4760 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4763 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4764 SV *t = d; d = e; e = t;
4765 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4766 goto sm_regex_array;
4769 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4771 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4773 PUSHs(matcher_matches_sv(matcher, d)
4776 destroy_matcher(matcher);
4781 /* See if there is overload magic on left */
4782 else if (object_on_left && SvAMAGIC(d)) {
4784 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4785 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4788 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4796 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4799 else if (!SvOK(d)) {
4800 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4801 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4806 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4807 DEBUG_M(if (SvNIOK(e))
4808 Perl_deb(aTHX_ " applying rule Any-Num\n");
4810 Perl_deb(aTHX_ " applying rule Num-numish\n");
4812 /* numeric comparison */
4815 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4816 (void) Perl_pp_i_eq(aTHX);
4818 (void) Perl_pp_eq(aTHX);
4826 /* As a last resort, use string comparison */
4827 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4830 return Perl_pp_seq(aTHX);
4836 register PERL_CONTEXT *cx;
4837 const I32 gimme = GIMME_V;
4839 /* This is essentially an optimization: if the match
4840 fails, we don't want to push a context and then
4841 pop it again right away, so we skip straight
4842 to the op that follows the leavewhen.
4843 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4845 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4846 RETURNOP(cLOGOP->op_other->op_next);
4848 ENTER_with_name("when");
4851 PUSHBLOCK(cx, CXt_WHEN, SP);
4861 register PERL_CONTEXT *cx;
4866 cxix = dopoptogiven(cxstack_ix);
4868 /* diag_listed_as: Can't "when" outside a topicalizer */
4869 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4870 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
4873 assert(CxTYPE(cx) == CXt_WHEN);
4876 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4877 PL_curpm = newpm; /* pop $1 et al */
4879 LEAVE_with_name("when");
4881 if (cxix < cxstack_ix)
4884 cx = &cxstack[cxix];
4886 if (CxFOREACH(cx)) {
4887 /* clear off anything above the scope we're re-entering */
4888 I32 inner = PL_scopestack_ix;
4891 if (PL_scopestack_ix < inner)
4892 leave_scope(PL_scopestack[PL_scopestack_ix]);
4893 PL_curcop = cx->blk_oldcop;
4895 return cx->blk_loop.my_op->op_nextop;
4898 RETURNOP(cx->blk_givwhen.leave_op);
4905 register PERL_CONTEXT *cx;
4910 PERL_UNUSED_VAR(gimme);
4912 cxix = dopoptowhen(cxstack_ix);
4914 DIE(aTHX_ "Can't \"continue\" outside a when block");
4916 if (cxix < cxstack_ix)
4920 assert(CxTYPE(cx) == CXt_WHEN);
4923 PL_curpm = newpm; /* pop $1 et al */
4925 LEAVE_with_name("when");
4926 RETURNOP(cx->blk_givwhen.leave_op->op_next);
4933 register PERL_CONTEXT *cx;
4935 cxix = dopoptogiven(cxstack_ix);
4937 DIE(aTHX_ "Can't \"break\" outside a given block");
4939 cx = &cxstack[cxix];
4941 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4943 if (cxix < cxstack_ix)
4946 /* Restore the sp at the time we entered the given block */
4949 return cx->blk_givwhen.leave_op;
4953 S_doparseform(pTHX_ SV *sv)
4956 register char *s = SvPV(sv, len);
4957 register char *send;
4958 register char *base = NULL; /* start of current field */
4959 register I32 skipspaces = 0; /* number of contiguous spaces seen */
4960 bool noblank = FALSE; /* ~ or ~~ seen on this line */
4961 bool repeat = FALSE; /* ~~ seen on this line */
4962 bool postspace = FALSE; /* a text field may need right padding */
4965 U32 *linepc = NULL; /* position of last FF_LINEMARK */
4967 bool ischop; /* it's a ^ rather than a @ */
4968 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
4969 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4973 PERL_ARGS_ASSERT_DOPARSEFORM;
4976 Perl_croak(aTHX_ "Null picture in formline");
4978 if (SvTYPE(sv) >= SVt_PVMG) {
4979 /* This might, of course, still return NULL. */
4980 mg = mg_find(sv, PERL_MAGIC_fm);
4982 sv_upgrade(sv, SVt_PVMG);
4986 /* still the same as previously-compiled string? */
4987 SV *old = mg->mg_obj;
4988 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
4989 && len == SvCUR(old)
4990 && strnEQ(SvPVX(old), SvPVX(sv), len)
4992 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
4996 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
4997 Safefree(mg->mg_ptr);
5003 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5004 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5007 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5008 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5012 /* estimate the buffer size needed */
5013 for (base = s; s <= send; s++) {
5014 if (*s == '\n' || *s == '@' || *s == '^')
5020 Newx(fops, maxops, U32);
5025 *fpc++ = FF_LINEMARK;
5026 noblank = repeat = FALSE;
5044 case ' ': case '\t':
5051 } /* else FALL THROUGH */
5059 *fpc++ = FF_LITERAL;
5067 *fpc++ = (U32)skipspaces;
5071 *fpc++ = FF_NEWLINE;
5075 arg = fpc - linepc + 1;
5082 *fpc++ = FF_LINEMARK;
5083 noblank = repeat = FALSE;
5092 ischop = s[-1] == '^';
5098 arg = (s - base) - 1;
5100 *fpc++ = FF_LITERAL;
5106 if (*s == '*') { /* @* or ^* */
5108 *fpc++ = 2; /* skip the @* or ^* */
5110 *fpc++ = FF_LINESNGL;
5113 *fpc++ = FF_LINEGLOB;
5115 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5116 arg = ischop ? FORM_NUM_BLANK : 0;
5121 const char * const f = ++s;
5124 arg |= FORM_NUM_POINT + (s - f);
5126 *fpc++ = s - base; /* fieldsize for FETCH */
5127 *fpc++ = FF_DECIMAL;
5129 unchopnum |= ! ischop;
5131 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5132 arg = ischop ? FORM_NUM_BLANK : 0;
5134 s++; /* skip the '0' first */
5138 const char * const f = ++s;
5141 arg |= FORM_NUM_POINT + (s - f);
5143 *fpc++ = s - base; /* fieldsize for FETCH */
5144 *fpc++ = FF_0DECIMAL;
5146 unchopnum |= ! ischop;
5148 else { /* text field */
5150 bool ismore = FALSE;
5153 while (*++s == '>') ;
5154 prespace = FF_SPACE;
5156 else if (*s == '|') {
5157 while (*++s == '|') ;
5158 prespace = FF_HALFSPACE;
5163 while (*++s == '<') ;
5166 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5170 *fpc++ = s - base; /* fieldsize for FETCH */
5172 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5175 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5189 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5192 mg->mg_ptr = (char *) fops;
5193 mg->mg_len = arg * sizeof(U32);
5194 mg->mg_obj = sv_copy;
5195 mg->mg_flags |= MGf_REFCOUNTED;
5197 if (unchopnum && repeat)
5198 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5205 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5207 /* Can value be printed in fldsize chars, using %*.*f ? */
5211 int intsize = fldsize - (value < 0 ? 1 : 0);
5213 if (frcsize & FORM_NUM_POINT)
5215 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5218 while (intsize--) pwr *= 10.0;
5219 while (frcsize--) eps /= 10.0;
5222 if (value + eps >= pwr)
5225 if (value - eps <= -pwr)
5232 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5235 SV * const datasv = FILTER_DATA(idx);
5236 const int filter_has_file = IoLINES(datasv);
5237 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5238 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5243 char *prune_from = NULL;
5244 bool read_from_cache = FALSE;
5248 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5250 assert(maxlen >= 0);
5253 /* I was having segfault trouble under Linux 2.2.5 after a
5254 parse error occured. (Had to hack around it with a test
5255 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5256 not sure where the trouble is yet. XXX */
5259 SV *const cache = datasv;
5262 const char *cache_p = SvPV(cache, cache_len);
5266 /* Running in block mode and we have some cached data already.
5268 if (cache_len >= umaxlen) {
5269 /* In fact, so much data we don't even need to call
5274 const char *const first_nl =
5275 (const char *)memchr(cache_p, '\n', cache_len);
5277 take = first_nl + 1 - cache_p;
5281 sv_catpvn(buf_sv, cache_p, take);
5282 sv_chop(cache, cache_p + take);
5283 /* Definitely not EOF */
5287 sv_catsv(buf_sv, cache);
5289 umaxlen -= cache_len;
5292 read_from_cache = TRUE;
5296 /* Filter API says that the filter appends to the contents of the buffer.
5297 Usually the buffer is "", so the details don't matter. But if it's not,
5298 then clearly what it contains is already filtered by this filter, so we
5299 don't want to pass it in a second time.
5300 I'm going to use a mortal in case the upstream filter croaks. */
5301 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5302 ? sv_newmortal() : buf_sv;
5303 SvUPGRADE(upstream, SVt_PV);
5305 if (filter_has_file) {
5306 status = FILTER_READ(idx+1, upstream, 0);
5309 if (filter_sub && status >= 0) {
5313 ENTER_with_name("call_filter_sub");
5318 DEFSV_set(upstream);
5322 PUSHs(filter_state);
5325 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5333 else if (SvTRUE(ERRSV)) {
5334 err = newSVsv(ERRSV);
5340 LEAVE_with_name("call_filter_sub");
5343 if(!err && SvOK(upstream)) {
5344 got_p = SvPV(upstream, got_len);
5346 if (got_len > umaxlen) {
5347 prune_from = got_p + umaxlen;
5350 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5351 if (first_nl && first_nl + 1 < got_p + got_len) {
5352 /* There's a second line here... */
5353 prune_from = first_nl + 1;
5357 if (!err && prune_from) {
5358 /* Oh. Too long. Stuff some in our cache. */
5359 STRLEN cached_len = got_p + got_len - prune_from;
5360 SV *const cache = datasv;
5363 /* Cache should be empty. */
5364 assert(!SvCUR(cache));
5367 sv_setpvn(cache, prune_from, cached_len);
5368 /* If you ask for block mode, you may well split UTF-8 characters.
5369 "If it breaks, you get to keep both parts"
5370 (Your code is broken if you don't put them back together again
5371 before something notices.) */
5372 if (SvUTF8(upstream)) {
5375 SvCUR_set(upstream, got_len - cached_len);
5377 /* Can't yet be EOF */
5382 /* If they are at EOF but buf_sv has something in it, then they may never
5383 have touched the SV upstream, so it may be undefined. If we naively
5384 concatenate it then we get a warning about use of uninitialised value.
5386 if (!err && upstream != buf_sv &&
5387 (SvOK(upstream) || SvGMAGICAL(upstream))) {
5388 sv_catsv(buf_sv, upstream);
5392 IoLINES(datasv) = 0;
5394 SvREFCNT_dec(filter_state);
5395 IoTOP_GV(datasv) = NULL;
5398 SvREFCNT_dec(filter_sub);
5399 IoBOTTOM_GV(datasv) = NULL;
5401 filter_del(S_run_user_filter);
5407 if (status == 0 && read_from_cache) {
5408 /* If we read some data from the cache (and by getting here it implies
5409 that we emptied the cache) then we aren't yet at EOF, and mustn't
5410 report that to our caller. */
5416 /* perhaps someone can come up with a better name for
5417 this? it is not really "absolute", per se ... */
5419 S_path_is_absolute(const char *name)
5421 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5423 if (PERL_FILE_IS_ABSOLUTE(name)
5425 || (*name == '.' && ((name[1] == '/' ||
5426 (name[1] == '.' && name[2] == '/'))
5427 || (name[1] == '\\' ||
5428 ( name[1] == '.' && name[2] == '\\')))
5431 || (*name == '.' && (name[1] == '/' ||
5432 (name[1] == '.' && name[2] == '/')))
5444 * c-indentation-style: bsd
5446 * indent-tabs-mode: nil
5449 * ex: set ts=8 sts=4 sw=4 et: