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 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 ReANY(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 = TAINT_get;
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 with RX_TAINT_on further down. */
142 TAINT_set(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 (TAINTING_get && TAINT_get) {
155 SvTAINTED_on((SV*)new_re);
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 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
181 PMOP * const pm = (PMOP*) cLOGOP->op_other;
182 SV * const dstr = cx->sb_dstr;
185 char *orig = cx->sb_orig;
186 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 (REXEC_IGNOREPOS|REXEC_NOT_FIRST)))
221 SV *targ = cx->sb_targ;
223 assert(cx->sb_strend >= s);
224 if(cx->sb_strend > s) {
225 if (DO_UTF8(dstr) && !SvUTF8(targ))
226 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
228 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
230 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
231 cx->sb_rxtainted |= SUBST_TAINT_PAT;
233 if (pm->op_pmflags & PMf_NONDESTRUCT) {
235 /* From here on down we're using the copy, and leaving the
236 original untouched. */
241 sv_force_normal_flags(targ, SV_COW_DROP_PV);
246 SvPV_set(targ, SvPVX(dstr));
247 SvCUR_set(targ, SvCUR(dstr));
248 SvLEN_set(targ, SvLEN(dstr));
251 SvPV_set(dstr, NULL);
254 mPUSHi(saviters - 1);
256 (void)SvPOK_only_UTF8(targ);
259 /* update the taint state of various various variables in
260 * preparation for final exit.
261 * See "how taint works" above pp_subst() */
263 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
264 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
265 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
267 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
269 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
270 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
272 SvTAINTED_on(TOPs); /* taint return value */
273 /* needed for mg_set below */
275 cBOOL(cx->sb_rxtainted &
276 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
280 /* PL_tainted must be correctly set for this mg_set */
283 LEAVE_SCOPE(cx->sb_oldsave);
285 RETURNOP(pm->op_next);
286 assert(0); /* NOTREACHED */
288 cx->sb_iters = saviters;
290 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
293 assert(!RX_SUBOFFSET(rx));
294 cx->sb_orig = orig = RX_SUBBEG(rx);
296 cx->sb_strend = s + (cx->sb_strend - m);
298 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
300 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
301 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
303 sv_catpvn_nomg(dstr, s, m-s);
305 cx->sb_s = RX_OFFS(rx)[0].end + orig;
306 { /* Update the pos() information. */
308 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
310 SvUPGRADE(sv, SVt_PVMG);
311 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
312 #ifdef PERL_OLD_COPY_ON_WRITE
314 sv_force_normal_flags(sv, 0);
316 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
319 mg->mg_len = m - orig;
322 (void)ReREFCNT_inc(rx);
323 /* update the taint state of various various variables in preparation
324 * for calling the code block.
325 * See "how taint works" above pp_subst() */
327 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
328 cx->sb_rxtainted |= SUBST_TAINT_PAT;
330 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
331 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
332 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
334 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
336 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
337 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
338 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
339 ? cx->sb_dstr : cx->sb_targ);
342 rxres_save(&cx->sb_rxres, rx);
344 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
348 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
353 PERL_ARGS_ASSERT_RXRES_SAVE;
356 if (!p || p[1] < RX_NPARENS(rx)) {
358 i = 7 + (RX_NPARENS(rx)+1) * 2;
360 i = 6 + (RX_NPARENS(rx)+1) * 2;
369 /* what (if anything) to free on croak */
370 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
371 RX_MATCH_COPIED_off(rx);
372 *p++ = RX_NPARENS(rx);
375 *p++ = PTR2UV(RX_SAVED_COPY(rx));
376 RX_SAVED_COPY(rx) = NULL;
379 *p++ = PTR2UV(RX_SUBBEG(rx));
380 *p++ = (UV)RX_SUBLEN(rx);
381 *p++ = (UV)RX_SUBOFFSET(rx);
382 *p++ = (UV)RX_SUBCOFFSET(rx);
383 for (i = 0; i <= RX_NPARENS(rx); ++i) {
384 *p++ = (UV)RX_OFFS(rx)[i].start;
385 *p++ = (UV)RX_OFFS(rx)[i].end;
390 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
395 PERL_ARGS_ASSERT_RXRES_RESTORE;
398 RX_MATCH_COPY_FREE(rx);
399 RX_MATCH_COPIED_set(rx, *p);
401 RX_NPARENS(rx) = *p++;
404 if (RX_SAVED_COPY(rx))
405 SvREFCNT_dec (RX_SAVED_COPY(rx));
406 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
410 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
411 RX_SUBLEN(rx) = (I32)(*p++);
412 RX_SUBOFFSET(rx) = (I32)*p++;
413 RX_SUBCOFFSET(rx) = (I32)*p++;
414 for (i = 0; i <= RX_NPARENS(rx); ++i) {
415 RX_OFFS(rx)[i].start = (I32)(*p++);
416 RX_OFFS(rx)[i].end = (I32)(*p++);
421 S_rxres_free(pTHX_ void **rsp)
423 UV * const p = (UV*)*rsp;
425 PERL_ARGS_ASSERT_RXRES_FREE;
429 void *tmp = INT2PTR(char*,*p);
432 U32 i = 9 + p[1] * 2;
434 U32 i = 8 + p[1] * 2;
439 SvREFCNT_dec (INT2PTR(SV*,p[2]));
442 PoisonFree(p, i, sizeof(UV));
451 #define FORM_NUM_BLANK (1<<30)
452 #define FORM_NUM_POINT (1<<29)
456 dVAR; dSP; dMARK; dORIGMARK;
457 SV * const tmpForm = *++MARK;
458 SV *formsv; /* contains text of original format */
459 U32 *fpc; /* format ops program counter */
460 char *t; /* current append position in target string */
461 const char *f; /* current position in format string */
463 SV *sv = NULL; /* current item */
464 const char *item = NULL;/* string value of current item */
465 I32 itemsize = 0; /* length of current item, possibly truncated */
466 I32 fieldsize = 0; /* width of current field */
467 I32 lines = 0; /* number of lines that have been output */
468 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
469 const char *chophere = NULL; /* where to chop current item */
470 STRLEN linemark = 0; /* pos of start of line in output */
472 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
474 STRLEN linemax; /* estimate of output size in bytes */
475 bool item_is_utf8 = FALSE;
476 bool targ_is_utf8 = FALSE;
479 U8 *source; /* source of bytes to append */
480 STRLEN to_copy; /* how may bytes to append */
481 char trans; /* what chars to translate */
483 mg = doparseform(tmpForm);
485 fpc = (U32*)mg->mg_ptr;
486 /* the actual string the format was compiled from.
487 * with overload etc, this may not match tmpForm */
491 SvPV_force(PL_formtarget, len);
492 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
493 SvTAINTED_on(PL_formtarget);
494 if (DO_UTF8(PL_formtarget))
496 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
497 t = SvGROW(PL_formtarget, len + linemax + 1);
498 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
500 f = SvPV_const(formsv, len);
504 const char *name = "???";
507 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
508 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
509 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
510 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
511 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
513 case FF_CHECKNL: name = "CHECKNL"; break;
514 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
515 case FF_SPACE: name = "SPACE"; break;
516 case FF_HALFSPACE: name = "HALFSPACE"; break;
517 case FF_ITEM: name = "ITEM"; break;
518 case FF_CHOP: name = "CHOP"; break;
519 case FF_LINEGLOB: name = "LINEGLOB"; break;
520 case FF_NEWLINE: name = "NEWLINE"; break;
521 case FF_MORE: name = "MORE"; break;
522 case FF_LINEMARK: name = "LINEMARK"; break;
523 case FF_END: name = "END"; break;
524 case FF_0DECIMAL: name = "0DECIMAL"; break;
525 case FF_LINESNGL: name = "LINESNGL"; break;
528 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
530 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
534 linemark = t - SvPVX(PL_formtarget);
544 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
560 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
563 SvTAINTED_on(PL_formtarget);
569 const char *s = item = SvPV_const(sv, len);
572 itemsize = sv_len_utf8(sv);
573 if (itemsize != (I32)len) {
575 if (itemsize > fieldsize) {
576 itemsize = fieldsize;
577 itembytes = itemsize;
578 sv_pos_u2b(sv, &itembytes, 0);
582 send = chophere = s + itembytes;
592 sv_pos_b2u(sv, &itemsize);
596 item_is_utf8 = FALSE;
597 if (itemsize > fieldsize)
598 itemsize = fieldsize;
599 send = chophere = s + itemsize;
613 const char *s = item = SvPV_const(sv, len);
616 itemsize = sv_len_utf8(sv);
617 if (itemsize != (I32)len) {
619 if (itemsize <= fieldsize) {
620 const char *send = chophere = s + itemsize;
633 itemsize = fieldsize;
634 itembytes = itemsize;
635 sv_pos_u2b(sv, &itembytes, 0);
636 send = chophere = s + itembytes;
637 while (s < send || (s == send && isSPACE(*s))) {
647 if (strchr(PL_chopset, *s))
652 itemsize = chophere - item;
653 sv_pos_b2u(sv, &itemsize);
659 item_is_utf8 = FALSE;
660 if (itemsize <= fieldsize) {
661 const char *const send = chophere = s + itemsize;
674 itemsize = fieldsize;
675 send = chophere = s + itemsize;
676 while (s < send || (s == send && isSPACE(*s))) {
686 if (strchr(PL_chopset, *s))
691 itemsize = chophere - item;
697 arg = fieldsize - itemsize;
706 arg = fieldsize - itemsize;
720 /* convert to_copy from chars to bytes */
724 to_copy = s - source;
730 const char *s = chophere;
744 const bool oneline = fpc[-1] == FF_LINESNGL;
745 const char *s = item = SvPV_const(sv, len);
746 const char *const send = s + len;
748 item_is_utf8 = DO_UTF8(sv);
759 to_copy = s - SvPVX_const(sv) - 1;
773 /* append to_copy bytes from source to PL_formstring.
774 * item_is_utf8 implies source is utf8.
775 * if trans, translate certain characters during the copy */
780 SvCUR_set(PL_formtarget,
781 t - SvPVX_const(PL_formtarget));
783 if (targ_is_utf8 && !item_is_utf8) {
784 source = tmp = bytes_to_utf8(source, &to_copy);
786 if (item_is_utf8 && !targ_is_utf8) {
788 /* Upgrade targ to UTF8, and then we reduce it to
789 a problem we have a simple solution for.
790 Don't need get magic. */
791 sv_utf8_upgrade_nomg(PL_formtarget);
793 /* re-calculate linemark */
794 s = (U8*)SvPVX(PL_formtarget);
795 /* the bytes we initially allocated to append the
796 * whole line may have been gobbled up during the
797 * upgrade, so allocate a whole new line's worth
802 linemark = s - (U8*)SvPVX(PL_formtarget);
804 /* Easy. They agree. */
805 assert (item_is_utf8 == targ_is_utf8);
808 /* @* and ^* are the only things that can exceed
809 * the linemax, so grow by the output size, plus
810 * a whole new form's worth in case of any further
812 grow = linemax + to_copy;
814 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
815 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
817 Copy(source, t, to_copy, char);
819 /* blank out ~ or control chars, depending on trans.
820 * works on bytes not chars, so relies on not
821 * matching utf8 continuation bytes */
823 U8 *send = s + to_copy;
826 if (trans == '~' ? (ch == '~') :
839 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
847 #if defined(USE_LONG_DOUBLE)
849 ((arg & FORM_NUM_POINT) ?
850 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
853 ((arg & FORM_NUM_POINT) ?
854 "%#0*.*f" : "%0*.*f");
859 #if defined(USE_LONG_DOUBLE)
861 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
864 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
867 /* If the field is marked with ^ and the value is undefined,
869 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
877 /* overflow evidence */
878 if (num_overflow(value, fieldsize, arg)) {
884 /* Formats aren't yet marked for locales, so assume "yes". */
886 STORE_NUMERIC_STANDARD_SET_LOCAL();
887 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
888 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
889 RESTORE_NUMERIC_STANDARD();
896 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
904 if (arg) { /* repeat until fields exhausted? */
910 t = SvPVX(PL_formtarget) + linemark;
917 const char *s = chophere;
918 const char *send = item + len;
920 while (isSPACE(*s) && (s < send))
925 arg = fieldsize - itemsize;
932 if (strnEQ(s1," ",3)) {
933 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
944 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
946 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
948 SvUTF8_on(PL_formtarget);
949 FmLINES(PL_formtarget) += lines;
951 if (fpc[-1] == FF_BLANK)
952 RETURNOP(cLISTOP->op_first);
964 if (PL_stack_base + *PL_markstack_ptr == SP) {
966 if (GIMME_V == G_SCALAR)
968 RETURNOP(PL_op->op_next->op_next);
970 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
971 Perl_pp_pushmark(aTHX); /* push dst */
972 Perl_pp_pushmark(aTHX); /* push src */
973 ENTER_with_name("grep"); /* enter outer scope */
976 if (PL_op->op_private & OPpGREP_LEX)
977 SAVESPTR(PAD_SVl(PL_op->op_targ));
980 ENTER_with_name("grep_item"); /* enter inner scope */
983 src = PL_stack_base[*PL_markstack_ptr];
985 if (PL_op->op_private & OPpGREP_LEX)
986 PAD_SVl(PL_op->op_targ) = src;
991 if (PL_op->op_type == OP_MAPSTART)
992 Perl_pp_pushmark(aTHX); /* push top */
993 return ((LOGOP*)PL_op->op_next)->op_other;
999 const I32 gimme = GIMME_V;
1000 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1006 /* first, move source pointer to the next item in the source list */
1007 ++PL_markstack_ptr[-1];
1009 /* if there are new items, push them into the destination list */
1010 if (items && gimme != G_VOID) {
1011 /* might need to make room back there first */
1012 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1013 /* XXX this implementation is very pessimal because the stack
1014 * is repeatedly extended for every set of items. Is possible
1015 * to do this without any stack extension or copying at all
1016 * by maintaining a separate list over which the map iterates
1017 * (like foreach does). --gsar */
1019 /* everything in the stack after the destination list moves
1020 * towards the end the stack by the amount of room needed */
1021 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1023 /* items to shift up (accounting for the moved source pointer) */
1024 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1026 /* This optimization is by Ben Tilly and it does
1027 * things differently from what Sarathy (gsar)
1028 * is describing. The downside of this optimization is
1029 * that leaves "holes" (uninitialized and hopefully unused areas)
1030 * to the Perl stack, but on the other hand this
1031 * shouldn't be a problem. If Sarathy's idea gets
1032 * implemented, this optimization should become
1033 * irrelevant. --jhi */
1035 shift = count; /* Avoid shifting too often --Ben Tilly */
1039 dst = (SP += shift);
1040 PL_markstack_ptr[-1] += shift;
1041 *PL_markstack_ptr += shift;
1045 /* copy the new items down to the destination list */
1046 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1047 if (gimme == G_ARRAY) {
1048 /* add returned items to the collection (making mortal copies
1049 * if necessary), then clear the current temps stack frame
1050 * *except* for those items. We do this splicing the items
1051 * into the start of the tmps frame (so some items may be on
1052 * the tmps stack twice), then moving PL_tmps_floor above
1053 * them, then freeing the frame. That way, the only tmps that
1054 * accumulate over iterations are the return values for map.
1055 * We have to do to this way so that everything gets correctly
1056 * freed if we die during the map.
1060 /* make space for the slice */
1061 EXTEND_MORTAL(items);
1062 tmpsbase = PL_tmps_floor + 1;
1063 Move(PL_tmps_stack + tmpsbase,
1064 PL_tmps_stack + tmpsbase + items,
1065 PL_tmps_ix - PL_tmps_floor,
1067 PL_tmps_ix += items;
1072 sv = sv_mortalcopy(sv);
1074 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1076 /* clear the stack frame except for the items */
1077 PL_tmps_floor += items;
1079 /* FREETMPS may have cleared the TEMP flag on some of the items */
1082 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1085 /* scalar context: we don't care about which values map returns
1086 * (we use undef here). And so we certainly don't want to do mortal
1087 * copies of meaningless values. */
1088 while (items-- > 0) {
1090 *dst-- = &PL_sv_undef;
1098 LEAVE_with_name("grep_item"); /* exit inner scope */
1101 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1103 (void)POPMARK; /* pop top */
1104 LEAVE_with_name("grep"); /* exit outer scope */
1105 (void)POPMARK; /* pop src */
1106 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1107 (void)POPMARK; /* pop dst */
1108 SP = PL_stack_base + POPMARK; /* pop original mark */
1109 if (gimme == G_SCALAR) {
1110 if (PL_op->op_private & OPpGREP_LEX) {
1111 SV* sv = sv_newmortal();
1112 sv_setiv(sv, items);
1120 else if (gimme == G_ARRAY)
1127 ENTER_with_name("grep_item"); /* enter inner scope */
1130 /* set $_ to the new source item */
1131 src = PL_stack_base[PL_markstack_ptr[-1]];
1133 if (PL_op->op_private & OPpGREP_LEX)
1134 PAD_SVl(PL_op->op_targ) = src;
1138 RETURNOP(cLOGOP->op_other);
1147 if (GIMME == G_ARRAY)
1149 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1150 return cLOGOP->op_other;
1160 if (GIMME == G_ARRAY) {
1161 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1165 SV * const targ = PAD_SV(PL_op->op_targ);
1168 if (PL_op->op_private & OPpFLIP_LINENUM) {
1169 if (GvIO(PL_last_in_gv)) {
1170 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1173 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1175 flip = SvIV(sv) == SvIV(GvSV(gv));
1181 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1182 if (PL_op->op_flags & OPf_SPECIAL) {
1190 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1193 sv_setpvs(TARG, "");
1199 /* This code tries to decide if "$left .. $right" should use the
1200 magical string increment, or if the range is numeric (we make
1201 an exception for .."0" [#18165]). AMS 20021031. */
1203 #define RANGE_IS_NUMERIC(left,right) ( \
1204 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1205 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1206 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1207 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1208 && (!SvOK(right) || looks_like_number(right))))
1214 if (GIMME == G_ARRAY) {
1220 if (RANGE_IS_NUMERIC(left,right)) {
1223 if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) ||
1224 (SvOK(right) && SvNV_nomg(right) > IV_MAX))
1225 DIE(aTHX_ "Range iterator outside integer range");
1226 i = SvIV_nomg(left);
1227 max = SvIV_nomg(right);
1236 SV * const sv = sv_2mortal(newSViv(i++));
1242 const char * const lpv = SvPV_nomg_const(left, llen);
1243 const char * const tmps = SvPV_nomg_const(right, len);
1245 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1246 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1248 if (strEQ(SvPVX_const(sv),tmps))
1250 sv = sv_2mortal(newSVsv(sv));
1257 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1261 if (PL_op->op_private & OPpFLIP_LINENUM) {
1262 if (GvIO(PL_last_in_gv)) {
1263 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1266 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1267 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1275 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1276 sv_catpvs(targ, "E0");
1286 static const char * const context_name[] = {
1288 NULL, /* CXt_WHEN never actually needs "block" */
1289 NULL, /* CXt_BLOCK never actually needs "block" */
1290 NULL, /* CXt_GIVEN never actually needs "block" */
1291 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1292 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1293 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1294 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1302 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1307 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1309 for (i = cxstack_ix; i >= 0; i--) {
1310 const PERL_CONTEXT * const cx = &cxstack[i];
1311 switch (CxTYPE(cx)) {
1317 /* diag_listed_as: Exiting subroutine via %s */
1318 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1319 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1320 if (CxTYPE(cx) == CXt_NULL)
1323 case CXt_LOOP_LAZYIV:
1324 case CXt_LOOP_LAZYSV:
1326 case CXt_LOOP_PLAIN:
1328 STRLEN cx_label_len = 0;
1329 U32 cx_label_flags = 0;
1330 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1332 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1335 (const U8*)cx_label, cx_label_len,
1336 (const U8*)label, len) == 0)
1338 (const U8*)label, len,
1339 (const U8*)cx_label, cx_label_len) == 0)
1340 : (len == cx_label_len && ((cx_label == label)
1341 || memEQ(cx_label, label, len))) )) {
1342 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1343 (long)i, cx_label));
1346 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1357 Perl_dowantarray(pTHX)
1360 const I32 gimme = block_gimme();
1361 return (gimme == G_VOID) ? G_SCALAR : gimme;
1365 Perl_block_gimme(pTHX)
1368 const I32 cxix = dopoptosub(cxstack_ix);
1372 switch (cxstack[cxix].blk_gimme) {
1380 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1381 assert(0); /* NOTREACHED */
1387 Perl_is_lvalue_sub(pTHX)
1390 const I32 cxix = dopoptosub(cxstack_ix);
1391 assert(cxix >= 0); /* We should only be called from inside subs */
1393 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1394 return CxLVAL(cxstack + cxix);
1399 /* only used by PUSHSUB */
1401 Perl_was_lvalue_sub(pTHX)
1404 const I32 cxix = dopoptosub(cxstack_ix-1);
1405 assert(cxix >= 0); /* We should only be called from inside subs */
1407 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1408 return CxLVAL(cxstack + cxix);
1414 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1419 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1421 for (i = startingblock; i >= 0; i--) {
1422 const PERL_CONTEXT * const cx = &cxstk[i];
1423 switch (CxTYPE(cx)) {
1429 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1437 S_dopoptoeval(pTHX_ I32 startingblock)
1441 for (i = startingblock; i >= 0; i--) {
1442 const PERL_CONTEXT *cx = &cxstack[i];
1443 switch (CxTYPE(cx)) {
1447 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1455 S_dopoptoloop(pTHX_ I32 startingblock)
1459 for (i = startingblock; i >= 0; i--) {
1460 const PERL_CONTEXT * const cx = &cxstack[i];
1461 switch (CxTYPE(cx)) {
1467 /* diag_listed_as: Exiting subroutine via %s */
1468 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1469 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1470 if ((CxTYPE(cx)) == CXt_NULL)
1473 case CXt_LOOP_LAZYIV:
1474 case CXt_LOOP_LAZYSV:
1476 case CXt_LOOP_PLAIN:
1477 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1485 S_dopoptogiven(pTHX_ I32 startingblock)
1489 for (i = startingblock; i >= 0; i--) {
1490 const PERL_CONTEXT *cx = &cxstack[i];
1491 switch (CxTYPE(cx)) {
1495 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1497 case CXt_LOOP_PLAIN:
1498 assert(!CxFOREACHDEF(cx));
1500 case CXt_LOOP_LAZYIV:
1501 case CXt_LOOP_LAZYSV:
1503 if (CxFOREACHDEF(cx)) {
1504 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1513 S_dopoptowhen(pTHX_ I32 startingblock)
1517 for (i = startingblock; i >= 0; i--) {
1518 const PERL_CONTEXT *cx = &cxstack[i];
1519 switch (CxTYPE(cx)) {
1523 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1531 Perl_dounwind(pTHX_ I32 cxix)
1536 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1539 while (cxstack_ix > cxix) {
1541 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1542 DEBUG_CX("UNWIND"); \
1543 /* Note: we don't need to restore the base context info till the end. */
1544 switch (CxTYPE(cx)) {
1547 continue; /* not break */
1555 case CXt_LOOP_LAZYIV:
1556 case CXt_LOOP_LAZYSV:
1558 case CXt_LOOP_PLAIN:
1569 PERL_UNUSED_VAR(optype);
1573 Perl_qerror(pTHX_ SV *err)
1577 PERL_ARGS_ASSERT_QERROR;
1580 if (PL_in_eval & EVAL_KEEPERR) {
1581 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1585 sv_catsv(ERRSV, err);
1588 sv_catsv(PL_errors, err);
1590 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1592 ++PL_parser->error_count;
1596 Perl_die_unwind(pTHX_ SV *msv)
1599 SV *exceptsv = sv_mortalcopy(msv);
1600 U8 in_eval = PL_in_eval;
1601 PERL_ARGS_ASSERT_DIE_UNWIND;
1608 * Historically, perl used to set ERRSV ($@) early in the die
1609 * process and rely on it not getting clobbered during unwinding.
1610 * That sucked, because it was liable to get clobbered, so the
1611 * setting of ERRSV used to emit the exception from eval{} has
1612 * been moved to much later, after unwinding (see just before
1613 * JMPENV_JUMP below). However, some modules were relying on the
1614 * early setting, by examining $@ during unwinding to use it as
1615 * a flag indicating whether the current unwinding was caused by
1616 * an exception. It was never a reliable flag for that purpose,
1617 * being totally open to false positives even without actual
1618 * clobberage, but was useful enough for production code to
1619 * semantically rely on it.
1621 * We'd like to have a proper introspective interface that
1622 * explicitly describes the reason for whatever unwinding
1623 * operations are currently in progress, so that those modules
1624 * work reliably and $@ isn't further overloaded. But we don't
1625 * have one yet. In its absence, as a stopgap measure, ERRSV is
1626 * now *additionally* set here, before unwinding, to serve as the
1627 * (unreliable) flag that it used to.
1629 * This behaviour is temporary, and should be removed when a
1630 * proper way to detect exceptional unwinding has been developed.
1631 * As of 2010-12, the authors of modules relying on the hack
1632 * are aware of the issue, because the modules failed on
1633 * perls 5.13.{1..7} which had late setting of $@ without this
1634 * early-setting hack.
1636 if (!(in_eval & EVAL_KEEPERR)) {
1637 SvTEMP_off(exceptsv);
1638 sv_setsv(ERRSV, exceptsv);
1641 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1642 && PL_curstackinfo->si_prev)
1654 JMPENV *restartjmpenv;
1657 if (cxix < cxstack_ix)
1660 POPBLOCK(cx,PL_curpm);
1661 if (CxTYPE(cx) != CXt_EVAL) {
1663 const char* message = SvPVx_const(exceptsv, msglen);
1664 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1665 PerlIO_write(Perl_error_log, message, msglen);
1669 namesv = cx->blk_eval.old_namesv;
1670 oldcop = cx->blk_oldcop;
1671 restartjmpenv = cx->blk_eval.cur_top_env;
1672 restartop = cx->blk_eval.retop;
1674 if (gimme == G_SCALAR)
1675 *++newsp = &PL_sv_undef;
1676 PL_stack_sp = newsp;
1680 /* LEAVE could clobber PL_curcop (see save_re_context())
1681 * XXX it might be better to find a way to avoid messing with
1682 * PL_curcop in save_re_context() instead, but this is a more
1683 * minimal fix --GSAR */
1686 if (optype == OP_REQUIRE) {
1687 (void)hv_store(GvHVn(PL_incgv),
1688 SvPVX_const(namesv),
1689 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1691 /* note that unlike pp_entereval, pp_require isn't
1692 * supposed to trap errors. So now that we've popped the
1693 * EVAL that pp_require pushed, and processed the error
1694 * message, rethrow the error */
1695 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1696 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1699 if (in_eval & EVAL_KEEPERR) {
1700 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1704 sv_setsv(ERRSV, exceptsv);
1706 PL_restartjmpenv = restartjmpenv;
1707 PL_restartop = restartop;
1709 assert(0); /* NOTREACHED */
1713 write_to_stderr(exceptsv);
1715 assert(0); /* NOTREACHED */
1720 dVAR; dSP; dPOPTOPssrl;
1721 if (SvTRUE(left) != SvTRUE(right))
1728 =for apidoc caller_cx
1730 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1731 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1732 information returned to Perl by C<caller>. Note that XSUBs don't get a
1733 stack frame, so C<caller_cx(0, NULL)> will return information for the
1734 immediately-surrounding Perl code.
1736 This function skips over the automatic calls to C<&DB::sub> made on the
1737 behalf of the debugger. If the stack frame requested was a sub called by
1738 C<DB::sub>, the return value will be the frame for the call to
1739 C<DB::sub>, since that has the correct line number/etc. for the call
1740 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1741 frame for the sub call itself.
1746 const PERL_CONTEXT *
1747 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1749 I32 cxix = dopoptosub(cxstack_ix);
1750 const PERL_CONTEXT *cx;
1751 const PERL_CONTEXT *ccstack = cxstack;
1752 const PERL_SI *top_si = PL_curstackinfo;
1755 /* we may be in a higher stacklevel, so dig down deeper */
1756 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1757 top_si = top_si->si_prev;
1758 ccstack = top_si->si_cxstack;
1759 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1763 /* caller() should not report the automatic calls to &DB::sub */
1764 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1765 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1769 cxix = dopoptosub_at(ccstack, cxix - 1);
1772 cx = &ccstack[cxix];
1773 if (dbcxp) *dbcxp = cx;
1775 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1776 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1777 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1778 field below is defined for any cx. */
1779 /* caller() should not report the automatic calls to &DB::sub */
1780 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1781 cx = &ccstack[dbcxix];
1791 const PERL_CONTEXT *cx;
1792 const PERL_CONTEXT *dbcx;
1794 const HEK *stash_hek;
1796 bool has_arg = MAXARG && TOPs;
1804 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1806 if (GIMME != G_ARRAY) {
1814 assert(CopSTASH(cx->blk_oldcop));
1815 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1816 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1818 if (GIMME != G_ARRAY) {
1821 PUSHs(&PL_sv_undef);
1824 sv_sethek(TARG, stash_hek);
1833 PUSHs(&PL_sv_undef);
1836 sv_sethek(TARG, stash_hek);
1839 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1840 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1843 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1844 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1845 /* So is ccstack[dbcxix]. */
1846 if (cvgv && isGV(cvgv)) {
1847 SV * const sv = newSV(0);
1848 gv_efullname3(sv, cvgv, NULL);
1850 PUSHs(boolSV(CxHASARGS(cx)));
1853 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1854 PUSHs(boolSV(CxHASARGS(cx)));
1858 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1861 gimme = (I32)cx->blk_gimme;
1862 if (gimme == G_VOID)
1863 PUSHs(&PL_sv_undef);
1865 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1866 if (CxTYPE(cx) == CXt_EVAL) {
1868 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1869 PUSHs(newSVpvn_flags(SvPVX(cx->blk_eval.cur_text),
1870 SvCUR(cx->blk_eval.cur_text)-2,
1871 SvUTF8(cx->blk_eval.cur_text)|SVs_TEMP));
1875 else if (cx->blk_eval.old_namesv) {
1876 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1879 /* eval BLOCK (try blocks have old_namesv == 0) */
1881 PUSHs(&PL_sv_undef);
1882 PUSHs(&PL_sv_undef);
1886 PUSHs(&PL_sv_undef);
1887 PUSHs(&PL_sv_undef);
1889 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1890 && CopSTASH_eq(PL_curcop, PL_debstash))
1892 AV * const ary = cx->blk_sub.argarray;
1893 const int off = AvARRAY(ary) - AvALLOC(ary);
1895 Perl_init_dbargs(aTHX);
1897 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1898 av_extend(PL_dbargs, AvFILLp(ary) + off);
1899 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1900 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1902 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1905 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1907 if (old_warnings == pWARN_NONE)
1908 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1909 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1910 mask = &PL_sv_undef ;
1911 else if (old_warnings == pWARN_ALL ||
1912 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1913 /* Get the bit mask for $warnings::Bits{all}, because
1914 * it could have been extended by warnings::register */
1916 HV * const bits = get_hv("warnings::Bits", 0);
1917 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1918 mask = newSVsv(*bits_all);
1921 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1925 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1929 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1930 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1941 if (MAXARG < 1 || (!TOPs && !POPs))
1942 tmps = NULL, len = 0;
1944 tmps = SvPVx_const(POPs, len);
1945 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1950 /* like pp_nextstate, but used instead when the debugger is active */
1955 PL_curcop = (COP*)PL_op;
1956 TAINT_NOT; /* Each statement is presumed innocent */
1957 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1962 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1963 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1967 const I32 gimme = G_ARRAY;
1969 GV * const gv = PL_DBgv;
1972 if (gv && isGV_with_GP(gv))
1975 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1976 DIE(aTHX_ "No DB::DB routine defined");
1978 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1979 /* don't do recursive DB::DB call */
1993 (void)(*CvXSUB(cv))(aTHX_ cv);
1999 PUSHBLOCK(cx, CXt_SUB, SP);
2001 cx->blk_sub.retop = PL_op->op_next;
2003 if (CvDEPTH(cv) >= 2) {
2004 PERL_STACK_OVERFLOW_CHECK();
2005 pad_push(CvPADLIST(cv), CvDEPTH(cv));
2008 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
2009 RETURNOP(CvSTART(cv));
2017 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2020 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2022 if (flags & SVs_PADTMP) {
2023 flags &= ~SVs_PADTMP;
2026 if (gimme == G_SCALAR) {
2028 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2029 ? *SP : sv_mortalcopy(*SP);
2031 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2034 *++MARK = &PL_sv_undef;
2038 else if (gimme == G_ARRAY) {
2039 /* in case LEAVE wipes old return values */
2040 while (++MARK <= SP) {
2041 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2044 *++newsp = sv_mortalcopy(*MARK);
2045 TAINT_NOT; /* Each item is independent */
2048 /* When this function was called with MARK == newsp, we reach this
2049 * point with SP == newsp. */
2059 I32 gimme = GIMME_V;
2061 ENTER_with_name("block");
2064 PUSHBLOCK(cx, CXt_BLOCK, SP);
2077 if (PL_op->op_flags & OPf_SPECIAL) {
2078 cx = &cxstack[cxstack_ix];
2079 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2084 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2087 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2088 PL_curpm = newpm; /* Don't pop $1 et al till now */
2090 LEAVE_with_name("block");
2099 const I32 gimme = GIMME_V;
2100 void *itervar; /* location of the iteration variable */
2101 U8 cxtype = CXt_LOOP_FOR;
2103 ENTER_with_name("loop1");
2106 if (PL_op->op_targ) { /* "my" variable */
2107 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2108 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2109 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2110 SVs_PADSTALE, SVs_PADSTALE);
2112 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2114 itervar = PL_comppad;
2116 itervar = &PAD_SVl(PL_op->op_targ);
2119 else { /* symbol table variable */
2120 GV * const gv = MUTABLE_GV(POPs);
2121 SV** svp = &GvSV(gv);
2122 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2124 itervar = (void *)gv;
2127 if (PL_op->op_private & OPpITER_DEF)
2128 cxtype |= CXp_FOR_DEF;
2130 ENTER_with_name("loop2");
2132 PUSHBLOCK(cx, cxtype, SP);
2133 PUSHLOOP_FOR(cx, itervar, MARK);
2134 if (PL_op->op_flags & OPf_STACKED) {
2135 SV *maybe_ary = POPs;
2136 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2138 SV * const right = maybe_ary;
2141 if (RANGE_IS_NUMERIC(sv,right)) {
2142 cx->cx_type &= ~CXTYPEMASK;
2143 cx->cx_type |= CXt_LOOP_LAZYIV;
2144 /* Make sure that no-one re-orders cop.h and breaks our
2146 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2147 #ifdef NV_PRESERVES_UV
2148 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2149 (SvNV_nomg(sv) > (NV)IV_MAX)))
2151 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2152 (SvNV_nomg(right) < (NV)IV_MIN))))
2154 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2156 ((SvNV_nomg(sv) > 0) &&
2157 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2158 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2160 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2162 ((SvNV_nomg(right) > 0) &&
2163 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2164 (SvNV_nomg(right) > (NV)UV_MAX))
2167 DIE(aTHX_ "Range iterator outside integer range");
2168 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2169 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2171 /* for correct -Dstv display */
2172 cx->blk_oldsp = sp - PL_stack_base;
2176 cx->cx_type &= ~CXTYPEMASK;
2177 cx->cx_type |= CXt_LOOP_LAZYSV;
2178 /* Make sure that no-one re-orders cop.h and breaks our
2180 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2181 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2182 cx->blk_loop.state_u.lazysv.end = right;
2183 SvREFCNT_inc(right);
2184 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2185 /* This will do the upgrade to SVt_PV, and warn if the value
2186 is uninitialised. */
2187 (void) SvPV_nolen_const(right);
2188 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2189 to replace !SvOK() with a pointer to "". */
2191 SvREFCNT_dec(right);
2192 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2196 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2197 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2198 SvREFCNT_inc(maybe_ary);
2199 cx->blk_loop.state_u.ary.ix =
2200 (PL_op->op_private & OPpITER_REVERSED) ?
2201 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2205 else { /* iterating over items on the stack */
2206 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2207 if (PL_op->op_private & OPpITER_REVERSED) {
2208 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2211 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2222 const I32 gimme = GIMME_V;
2224 ENTER_with_name("loop1");
2226 ENTER_with_name("loop2");
2228 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2229 PUSHLOOP_PLAIN(cx, SP);
2244 assert(CxTYPE_is_LOOP(cx));
2246 newsp = PL_stack_base + cx->blk_loop.resetsp;
2249 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2252 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2253 PL_curpm = newpm; /* ... and pop $1 et al */
2255 LEAVE_with_name("loop2");
2256 LEAVE_with_name("loop1");
2262 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2263 PERL_CONTEXT *cx, PMOP *newpm)
2265 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2266 if (gimme == G_SCALAR) {
2267 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2269 const char *what = NULL;
2271 assert(MARK+1 == SP);
2272 if ((SvPADTMP(TOPs) ||
2273 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2276 !SvSMAGICAL(TOPs)) {
2278 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2279 : "a readonly value" : "a temporary";
2284 /* sub:lvalue{} will take us here. */
2293 "Can't return %s from lvalue subroutine", what
2298 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2299 if (!SvPADTMP(*SP)) {
2300 *++newsp = SvREFCNT_inc(*SP);
2305 /* FREETMPS could clobber it */
2306 SV *sv = SvREFCNT_inc(*SP);
2308 *++newsp = sv_mortalcopy(sv);
2315 ? sv_mortalcopy(*SP)
2317 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2322 *++newsp = &PL_sv_undef;
2324 if (CxLVAL(cx) & OPpDEREF) {
2327 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2331 else if (gimme == G_ARRAY) {
2332 assert (!(CxLVAL(cx) & OPpDEREF));
2333 if (ref || !CxLVAL(cx))
2334 while (++MARK <= SP)
2336 SvFLAGS(*MARK) & SVs_PADTMP
2337 ? sv_mortalcopy(*MARK)
2340 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2341 else while (++MARK <= SP) {
2342 if (*MARK != &PL_sv_undef
2344 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2349 /* Might be flattened array after $#array = */
2356 /* diag_listed_as: Can't return %s from lvalue subroutine */
2358 "Can't return a %s from lvalue subroutine",
2359 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2365 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2368 PL_stack_sp = newsp;
2375 bool popsub2 = FALSE;
2376 bool clear_errsv = FALSE;
2386 const I32 cxix = dopoptosub(cxstack_ix);
2389 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2390 * sort block, which is a CXt_NULL
2393 PL_stack_base[1] = *PL_stack_sp;
2394 PL_stack_sp = PL_stack_base + 1;
2398 DIE(aTHX_ "Can't return outside a subroutine");
2400 if (cxix < cxstack_ix)
2403 if (CxMULTICALL(&cxstack[cxix])) {
2404 gimme = cxstack[cxix].blk_gimme;
2405 if (gimme == G_VOID)
2406 PL_stack_sp = PL_stack_base;
2407 else if (gimme == G_SCALAR) {
2408 PL_stack_base[1] = *PL_stack_sp;
2409 PL_stack_sp = PL_stack_base + 1;
2415 switch (CxTYPE(cx)) {
2418 lval = !!CvLVALUE(cx->blk_sub.cv);
2419 retop = cx->blk_sub.retop;
2420 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2423 if (!(PL_in_eval & EVAL_KEEPERR))
2426 namesv = cx->blk_eval.old_namesv;
2427 retop = cx->blk_eval.retop;
2430 if (optype == OP_REQUIRE &&
2431 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2433 /* Unassume the success we assumed earlier. */
2434 (void)hv_delete(GvHVn(PL_incgv),
2435 SvPVX_const(namesv),
2436 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2438 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2443 retop = cx->blk_sub.retop;
2446 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2450 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2452 if (gimme == G_SCALAR) {
2455 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2456 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2457 && !SvMAGICAL(TOPs)) {
2458 *++newsp = SvREFCNT_inc(*SP);
2463 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2465 *++newsp = sv_mortalcopy(sv);
2469 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2470 && !SvMAGICAL(*SP)) {
2474 *++newsp = sv_mortalcopy(*SP);
2477 *++newsp = sv_mortalcopy(*SP);
2480 *++newsp = &PL_sv_undef;
2482 else if (gimme == G_ARRAY) {
2483 while (++MARK <= SP) {
2484 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2485 && !SvGMAGICAL(*MARK)
2486 ? *MARK : sv_mortalcopy(*MARK);
2487 TAINT_NOT; /* Each item is independent */
2490 PL_stack_sp = newsp;
2494 /* Stack values are safe: */
2497 POPSUB(cx,sv); /* release CV and @_ ... */
2501 PL_curpm = newpm; /* ... and pop $1 et al */
2510 /* This duplicates parts of pp_leavesub, so that it can share code with
2521 if (CxMULTICALL(&cxstack[cxstack_ix]))
2525 cxstack_ix++; /* temporarily protect top context */
2529 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2533 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2534 PL_curpm = newpm; /* ... and pop $1 et al */
2537 return cx->blk_sub.retop;
2541 S_unwind_loop(pTHX_ const char * const opname)
2545 if (PL_op->op_flags & OPf_SPECIAL) {
2546 cxix = dopoptoloop(cxstack_ix);
2548 /* diag_listed_as: Can't "last" outside a loop block */
2549 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2554 const char * const label =
2555 PL_op->op_flags & OPf_STACKED
2556 ? SvPV(TOPs,label_len)
2557 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2558 const U32 label_flags =
2559 PL_op->op_flags & OPf_STACKED
2561 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2563 cxix = dopoptolabel(label, label_len, label_flags);
2565 /* diag_listed_as: Label not found for "last %s" */
2566 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2568 SVfARG(PL_op->op_flags & OPf_STACKED
2569 && !SvGMAGICAL(TOPp1s)
2571 : newSVpvn_flags(label,
2573 label_flags | SVs_TEMP)));
2575 if (cxix < cxstack_ix)
2593 S_unwind_loop(aTHX_ "last");
2596 cxstack_ix++; /* temporarily protect top context */
2598 switch (CxTYPE(cx)) {
2599 case CXt_LOOP_LAZYIV:
2600 case CXt_LOOP_LAZYSV:
2602 case CXt_LOOP_PLAIN:
2604 newsp = PL_stack_base + cx->blk_loop.resetsp;
2605 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2609 nextop = cx->blk_sub.retop;
2613 nextop = cx->blk_eval.retop;
2617 nextop = cx->blk_sub.retop;
2620 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2624 PL_stack_sp = adjust_stack_on_leave(newsp, PL_stack_sp, MARK, gimme,
2625 pop2 == CXt_SUB ? SVs_TEMP : 0);
2629 /* Stack values are safe: */
2631 case CXt_LOOP_LAZYIV:
2632 case CXt_LOOP_PLAIN:
2633 case CXt_LOOP_LAZYSV:
2635 POPLOOP(cx); /* release loop vars ... */
2639 POPSUB(cx,sv); /* release CV and @_ ... */
2642 PL_curpm = newpm; /* ... and pop $1 et al */
2645 PERL_UNUSED_VAR(optype);
2646 PERL_UNUSED_VAR(gimme);
2654 const I32 inner = PL_scopestack_ix;
2656 S_unwind_loop(aTHX_ "next");
2658 /* clear off anything above the scope we're re-entering, but
2659 * save the rest until after a possible continue block */
2661 if (PL_scopestack_ix < inner)
2662 leave_scope(PL_scopestack[PL_scopestack_ix]);
2663 PL_curcop = cx->blk_oldcop;
2664 return (cx)->blk_loop.my_op->op_nextop;
2670 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2673 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2675 if (redo_op->op_type == OP_ENTER) {
2676 /* pop one less context to avoid $x being freed in while (my $x..) */
2678 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2679 redo_op = redo_op->op_next;
2683 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2684 LEAVE_SCOPE(oldsave);
2686 PL_curcop = cx->blk_oldcop;
2691 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2695 static const char* const too_deep = "Target of goto is too deeply nested";
2697 PERL_ARGS_ASSERT_DOFINDLABEL;
2700 Perl_croak(aTHX_ too_deep);
2701 if (o->op_type == OP_LEAVE ||
2702 o->op_type == OP_SCOPE ||
2703 o->op_type == OP_LEAVELOOP ||
2704 o->op_type == OP_LEAVESUB ||
2705 o->op_type == OP_LEAVETRY)
2707 *ops++ = cUNOPo->op_first;
2709 Perl_croak(aTHX_ too_deep);
2712 if (o->op_flags & OPf_KIDS) {
2714 /* First try all the kids at this level, since that's likeliest. */
2715 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2716 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2717 STRLEN kid_label_len;
2718 U32 kid_label_flags;
2719 const char *kid_label = CopLABEL_len_flags(kCOP,
2720 &kid_label_len, &kid_label_flags);
2722 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2725 (const U8*)kid_label, kid_label_len,
2726 (const U8*)label, len) == 0)
2728 (const U8*)label, len,
2729 (const U8*)kid_label, kid_label_len) == 0)
2730 : ( len == kid_label_len && ((kid_label == label)
2731 || memEQ(kid_label, label, len)))))
2735 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2736 if (kid == PL_lastgotoprobe)
2738 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2741 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2742 ops[-1]->op_type == OP_DBSTATE)
2747 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2761 #define GOTO_DEPTH 64
2762 OP *enterops[GOTO_DEPTH];
2763 const char *label = NULL;
2764 STRLEN label_len = 0;
2765 U32 label_flags = 0;
2766 const bool do_dump = (PL_op->op_type == OP_DUMP);
2767 static const char* const must_have_label = "goto must have label";
2769 if (PL_op->op_flags & OPf_STACKED) {
2770 SV * const sv = POPs;
2773 /* This egregious kludge implements goto &subroutine */
2774 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2777 CV *cv = MUTABLE_CV(SvRV(sv));
2778 AV *arg = GvAV(PL_defgv);
2782 if (!CvROOT(cv) && !CvXSUB(cv)) {
2783 const GV * const gv = CvGV(cv);
2787 /* autoloaded stub? */
2788 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2790 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2792 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2793 if (autogv && (cv = GvCV(autogv)))
2795 tmpstr = sv_newmortal();
2796 gv_efullname3(tmpstr, gv, NULL);
2797 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2799 DIE(aTHX_ "Goto undefined subroutine");
2802 /* First do some returnish stuff. */
2803 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2805 cxix = dopoptosub(cxstack_ix);
2809 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2811 if (cxix < cxstack_ix)
2815 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2816 if (CxTYPE(cx) == CXt_EVAL) {
2819 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2820 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2822 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2823 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2825 else if (CxMULTICALL(cx))
2828 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2830 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2831 AV* av = cx->blk_sub.argarray;
2833 /* abandon the original @_ if it got reified or if it is
2834 the same as the current @_ */
2835 if (AvREAL(av) || av == arg) {
2839 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2841 else CLEAR_ARGARRAY(av);
2843 /* We donate this refcount later to the callee’s pad. */
2844 SvREFCNT_inc_simple_void(arg);
2845 if (CxTYPE(cx) == CXt_SUB &&
2846 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2847 SvREFCNT_dec(cx->blk_sub.cv);
2848 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2849 LEAVE_SCOPE(oldsave);
2851 /* A destructor called during LEAVE_SCOPE could have undefined
2852 * our precious cv. See bug #99850. */
2853 if (!CvROOT(cv) && !CvXSUB(cv)) {
2854 const GV * const gv = CvGV(cv);
2857 SV * const tmpstr = sv_newmortal();
2858 gv_efullname3(tmpstr, gv, NULL);
2859 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2862 DIE(aTHX_ "Goto undefined subroutine");
2865 /* Now do some callish stuff. */
2867 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2869 OP* const retop = cx->blk_sub.retop;
2870 SV **newsp PERL_UNUSED_DECL;
2871 I32 gimme PERL_UNUSED_DECL;
2872 const SSize_t items = AvFILLp(arg) + 1;
2875 /* put GvAV(defgv) back onto stack */
2876 EXTEND(SP, items+1); /* @_ could have been extended. */
2877 Copy(AvARRAY(arg), SP + 1, items, SV*);
2882 for (index=0; index<items; index++)
2883 SvREFCNT_inc_void(sv_2mortal(SP[-index]));
2886 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2887 /* Restore old @_ */
2888 arg = GvAV(PL_defgv);
2889 GvAV(PL_defgv) = cx->blk_sub.savearray;
2893 /* XS subs don't have a CxSUB, so pop it */
2894 POPBLOCK(cx, PL_curpm);
2895 /* Push a mark for the start of arglist */
2898 (void)(*CvXSUB(cv))(aTHX_ cv);
2903 PADLIST * const padlist = CvPADLIST(cv);
2904 cx->blk_sub.cv = cv;
2905 cx->blk_sub.olddepth = CvDEPTH(cv);
2908 if (CvDEPTH(cv) < 2)
2909 SvREFCNT_inc_simple_void_NN(cv);
2911 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2912 sub_crush_depth(cv);
2913 pad_push(padlist, CvDEPTH(cv));
2915 PL_curcop = cx->blk_oldcop;
2917 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2920 CX_CURPAD_SAVE(cx->blk_sub);
2922 /* cx->blk_sub.argarray has no reference count, so we
2923 need something to hang on to our argument array so
2924 that cx->blk_sub.argarray does not end up pointing
2925 to freed memory as the result of undef *_. So put
2926 it in the callee’s pad, donating our refer-
2928 SvREFCNT_dec(PAD_SVl(0));
2929 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2931 /* GvAV(PL_defgv) might have been modified on scope
2932 exit, so restore it. */
2933 if (arg != GvAV(PL_defgv)) {
2934 AV * const av = GvAV(PL_defgv);
2935 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2939 else SvREFCNT_dec(arg);
2940 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2941 Perl_get_db_sub(aTHX_ NULL, cv);
2943 CV * const gotocv = get_cvs("DB::goto", 0);
2945 PUSHMARK( PL_stack_sp );
2946 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2951 RETURNOP(CvSTART(cv));
2955 label = SvPV_nomg_const(sv, label_len);
2956 label_flags = SvUTF8(sv);
2959 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2960 label = cPVOP->op_pv;
2961 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2962 label_len = strlen(label);
2964 if (!(do_dump || label_len)) DIE(aTHX_ must_have_label);
2969 OP *gotoprobe = NULL;
2970 bool leaving_eval = FALSE;
2971 bool in_block = FALSE;
2972 PERL_CONTEXT *last_eval_cx = NULL;
2976 PL_lastgotoprobe = NULL;
2978 for (ix = cxstack_ix; ix >= 0; ix--) {
2980 switch (CxTYPE(cx)) {
2982 leaving_eval = TRUE;
2983 if (!CxTRYBLOCK(cx)) {
2984 gotoprobe = (last_eval_cx ?
2985 last_eval_cx->blk_eval.old_eval_root :
2990 /* else fall through */
2991 case CXt_LOOP_LAZYIV:
2992 case CXt_LOOP_LAZYSV:
2994 case CXt_LOOP_PLAIN:
2997 gotoprobe = cx->blk_oldcop->op_sibling;
3003 gotoprobe = cx->blk_oldcop->op_sibling;
3006 gotoprobe = PL_main_root;
3009 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3010 gotoprobe = CvROOT(cx->blk_sub.cv);
3016 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3019 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3020 CxTYPE(cx), (long) ix);
3021 gotoprobe = PL_main_root;
3025 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3026 enterops, enterops + GOTO_DEPTH);
3029 if (gotoprobe->op_sibling &&
3030 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3031 gotoprobe->op_sibling->op_sibling) {
3032 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3033 label, label_len, label_flags, enterops,
3034 enterops + GOTO_DEPTH);
3039 PL_lastgotoprobe = gotoprobe;
3042 DIE(aTHX_ "Can't find label %"SVf,
3043 SVfARG(newSVpvn_flags(label, label_len,
3044 SVs_TEMP | label_flags)));
3046 /* if we're leaving an eval, check before we pop any frames
3047 that we're not going to punt, otherwise the error
3050 if (leaving_eval && *enterops && enterops[1]) {
3052 for (i = 1; enterops[i]; i++)
3053 if (enterops[i]->op_type == OP_ENTERITER)
3054 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3057 if (*enterops && enterops[1]) {
3058 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3060 deprecate("\"goto\" to jump into a construct");
3063 /* pop unwanted frames */
3065 if (ix < cxstack_ix) {
3072 oldsave = PL_scopestack[PL_scopestack_ix];
3073 LEAVE_SCOPE(oldsave);
3076 /* push wanted frames */
3078 if (*enterops && enterops[1]) {
3079 OP * const oldop = PL_op;
3080 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3081 for (; enterops[ix]; ix++) {
3082 PL_op = enterops[ix];
3083 /* Eventually we may want to stack the needed arguments
3084 * for each op. For now, we punt on the hard ones. */
3085 if (PL_op->op_type == OP_ENTERITER)
3086 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3087 PL_op->op_ppaddr(aTHX);
3095 if (!retop) retop = PL_main_start;
3097 PL_restartop = retop;
3098 PL_do_undump = TRUE;
3102 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3103 PL_do_undump = FALSE;
3118 anum = 0; (void)POPs;
3123 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3125 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3128 PL_exit_flags |= PERL_EXIT_EXPECTED;
3130 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3131 if (anum || !(PL_minus_c && PL_madskills))
3136 PUSHs(&PL_sv_undef);
3143 S_save_lines(pTHX_ AV *array, SV *sv)
3145 const char *s = SvPVX_const(sv);
3146 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3149 PERL_ARGS_ASSERT_SAVE_LINES;
3151 while (s && s < send) {
3153 SV * const tmpstr = newSV_type(SVt_PVMG);
3155 t = (const char *)memchr(s, '\n', send - s);
3161 sv_setpvn(tmpstr, s, t - s);
3162 av_store(array, line++, tmpstr);
3170 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3172 0 is used as continue inside eval,
3174 3 is used for a die caught by an inner eval - continue inner loop
3176 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3177 establish a local jmpenv to handle exception traps.
3182 S_docatch(pTHX_ OP *o)
3186 OP * const oldop = PL_op;
3190 assert(CATCH_GET == TRUE);
3197 assert(cxstack_ix >= 0);
3198 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3199 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3204 /* die caught by an inner eval - continue inner loop */
3205 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3206 PL_restartjmpenv = NULL;
3207 PL_op = PL_restartop;
3216 assert(0); /* NOTREACHED */
3225 =for apidoc find_runcv
3227 Locate the CV corresponding to the currently executing sub or eval.
3228 If db_seqp is non_null, skip CVs that are in the DB package and populate
3229 *db_seqp with the cop sequence number at the point that the DB:: code was
3230 entered. (allows debuggers to eval in the scope of the breakpoint rather
3231 than in the scope of the debugger itself).
3237 Perl_find_runcv(pTHX_ U32 *db_seqp)
3239 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3242 /* If this becomes part of the API, it might need a better name. */
3244 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3251 *db_seqp = PL_curcop->cop_seq;
3252 for (si = PL_curstackinfo; si; si = si->si_prev) {
3254 for (ix = si->si_cxix; ix >= 0; ix--) {
3255 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3257 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3258 cv = cx->blk_sub.cv;
3259 /* skip DB:: code */
3260 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3261 *db_seqp = cx->blk_oldcop->cop_seq;
3265 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3266 cv = cx->blk_eval.cv;
3269 case FIND_RUNCV_padid_eq:
3271 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3274 case FIND_RUNCV_level_eq:
3275 if (level++ != arg) continue;
3283 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3287 /* Run yyparse() in a setjmp wrapper. Returns:
3288 * 0: yyparse() successful
3289 * 1: yyparse() failed
3293 S_try_yyparse(pTHX_ int gramtype)
3298 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3302 ret = yyparse(gramtype) ? 1 : 0;
3309 assert(0); /* NOTREACHED */
3316 /* Compile a require/do or an eval ''.
3318 * outside is the lexically enclosing CV (if any) that invoked us.
3319 * seq is the current COP scope value.
3320 * hh is the saved hints hash, if any.
3322 * Returns a bool indicating whether the compile was successful; if so,
3323 * PL_eval_start contains the first op of the compiled code; otherwise,
3326 * This function is called from two places: pp_require and pp_entereval.
3327 * These can be distinguished by whether PL_op is entereval.
3331 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3334 OP * const saveop = PL_op;
3335 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3336 COP * const oldcurcop = PL_curcop;
3337 bool in_require = (saveop->op_type == OP_REQUIRE);
3341 PL_in_eval = (in_require
3342 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3347 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3349 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3350 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3351 cxstack[cxstack_ix].blk_gimme = gimme;
3353 CvOUTSIDE_SEQ(evalcv) = seq;
3354 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3356 /* set up a scratch pad */
3358 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3359 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3363 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3365 /* make sure we compile in the right package */
3367 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3368 SAVEGENERICSV(PL_curstash);
3369 PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3371 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3372 SAVESPTR(PL_beginav);
3373 PL_beginav = newAV();
3374 SAVEFREESV(PL_beginav);
3375 SAVESPTR(PL_unitcheckav);
3376 PL_unitcheckav = newAV();
3377 SAVEFREESV(PL_unitcheckav);
3380 SAVEBOOL(PL_madskills);
3384 ENTER_with_name("evalcomp");
3385 SAVESPTR(PL_compcv);
3388 /* try to compile it */
3390 PL_eval_root = NULL;
3391 PL_curcop = &PL_compiling;
3392 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3393 PL_in_eval |= EVAL_KEEPERR;
3400 hv_clear(GvHV(PL_hintgv));
3403 PL_hints = saveop->op_private & OPpEVAL_COPHH
3404 ? oldcurcop->cop_hints : saveop->op_targ;
3406 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3407 SvREFCNT_dec(GvHV(PL_hintgv));
3408 GvHV(PL_hintgv) = hh;
3411 SAVECOMPILEWARNINGS();
3413 if (PL_dowarn & G_WARN_ALL_ON)
3414 PL_compiling.cop_warnings = pWARN_ALL ;
3415 else if (PL_dowarn & G_WARN_ALL_OFF)
3416 PL_compiling.cop_warnings = pWARN_NONE ;
3418 PL_compiling.cop_warnings = pWARN_STD ;
3421 PL_compiling.cop_warnings =
3422 DUP_WARNINGS(oldcurcop->cop_warnings);
3423 cophh_free(CopHINTHASH_get(&PL_compiling));
3424 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3425 /* The label, if present, is the first entry on the chain. So rather
3426 than writing a blank label in front of it (which involves an
3427 allocation), just use the next entry in the chain. */
3428 PL_compiling.cop_hints_hash
3429 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3430 /* Check the assumption that this removed the label. */
3431 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3434 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3437 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3439 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3440 * so honour CATCH_GET and trap it here if necessary */
3442 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3444 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3445 SV **newsp; /* Used by POPBLOCK. */
3447 I32 optype; /* Used by POPEVAL. */
3453 PERL_UNUSED_VAR(newsp);
3454 PERL_UNUSED_VAR(optype);
3456 /* note that if yystatus == 3, then the EVAL CX block has already
3457 * been popped, and various vars restored */
3459 if (yystatus != 3) {
3461 op_free(PL_eval_root);
3462 PL_eval_root = NULL;
3464 SP = PL_stack_base + POPMARK; /* pop original mark */
3465 POPBLOCK(cx,PL_curpm);
3467 namesv = cx->blk_eval.old_namesv;
3468 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3469 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3475 /* If cx is still NULL, it means that we didn't go in the
3476 * POPEVAL branch. */
3477 cx = &cxstack[cxstack_ix];
3478 assert(CxTYPE(cx) == CXt_EVAL);
3479 namesv = cx->blk_eval.old_namesv;
3481 (void)hv_store(GvHVn(PL_incgv),
3482 SvPVX_const(namesv),
3483 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3485 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3488 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3491 if (!*(SvPV_nolen_const(errsv))) {
3492 sv_setpvs(errsv, "Compilation error");
3495 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3500 LEAVE_with_name("evalcomp");
3502 CopLINE_set(&PL_compiling, 0);
3503 SAVEFREEOP(PL_eval_root);
3504 cv_forget_slab(evalcv);
3506 DEBUG_x(dump_eval());
3508 /* Register with debugger: */
3509 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3510 CV * const cv = get_cvs("DB::postponed", 0);
3514 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3516 call_sv(MUTABLE_SV(cv), G_DISCARD);
3520 if (PL_unitcheckav) {
3521 OP *es = PL_eval_start;
3522 call_list(PL_scopestack_ix, PL_unitcheckav);
3526 /* compiled okay, so do it */
3528 CvDEPTH(evalcv) = 1;
3529 SP = PL_stack_base + POPMARK; /* pop original mark */
3530 PL_op = saveop; /* The caller may need it. */
3531 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3538 S_check_type_and_open(pTHX_ SV *name)
3541 const char *p = SvPV_nolen_const(name);
3542 const int st_rc = PerlLIO_stat(p, &st);
3544 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3546 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3550 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3551 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3553 return PerlIO_open(p, PERL_SCRIPT_MODE);
3557 #ifndef PERL_DISABLE_PMC
3559 S_doopen_pm(pTHX_ SV *name)
3562 const char *p = SvPV_const(name, namelen);
3564 PERL_ARGS_ASSERT_DOOPEN_PM;
3566 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3567 SV *const pmcsv = sv_newmortal();
3570 SvSetSV_nosteal(pmcsv,name);
3571 sv_catpvn(pmcsv, "c", 1);
3573 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3574 return check_type_and_open(pmcsv);
3576 return check_type_and_open(name);
3579 # define doopen_pm(name) check_type_and_open(name)
3580 #endif /* !PERL_DISABLE_PMC */
3592 int vms_unixname = 0;
3597 const char *tryname = NULL;
3599 const I32 gimme = GIMME_V;
3600 int filter_has_file = 0;
3601 PerlIO *tryrsfp = NULL;
3602 SV *filter_cache = NULL;
3603 SV *filter_state = NULL;
3604 SV *filter_sub = NULL;
3611 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3612 sv = sv_2mortal(new_version(sv));
3613 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3614 upg_version(PL_patchlevel, TRUE);
3615 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3616 if ( vcmp(sv,PL_patchlevel) <= 0 )
3617 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3618 SVfARG(sv_2mortal(vnormal(sv))),
3619 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3623 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3626 SV * const req = SvRV(sv);
3627 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3629 /* get the left hand term */
3630 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3632 first = SvIV(*av_fetch(lav,0,0));
3633 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3634 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3635 || av_len(lav) > 1 /* FP with > 3 digits */
3636 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3638 DIE(aTHX_ "Perl %"SVf" required--this is only "
3640 SVfARG(sv_2mortal(vnormal(req))),
3641 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3644 else { /* probably 'use 5.10' or 'use 5.8' */
3649 second = SvIV(*av_fetch(lav,1,0));
3651 second /= second >= 600 ? 100 : 10;
3652 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3653 (int)first, (int)second);
3654 upg_version(hintsv, TRUE);
3656 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3657 "--this is only %"SVf", stopped",
3658 SVfARG(sv_2mortal(vnormal(req))),
3659 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3660 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3668 name = SvPV_const(sv, len);
3669 if (!(name && len > 0 && *name))
3670 DIE(aTHX_ "Null filename used");
3671 TAINT_PROPER("require");
3675 /* The key in the %ENV hash is in the syntax of file passed as the argument
3676 * usually this is in UNIX format, but sometimes in VMS format, which
3677 * can result in a module being pulled in more than once.
3678 * To prevent this, the key must be stored in UNIX format if the VMS
3679 * name can be translated to UNIX.
3682 if ((unixnamebuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1))))
3683 && (unixname = tounixspec(name, unixnamebuf)) != NULL) {
3684 unixlen = strlen(unixname);
3690 /* if not VMS or VMS name can not be translated to UNIX, pass it
3693 unixname = (char *) name;
3696 if (PL_op->op_type == OP_REQUIRE) {
3697 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3698 unixname, unixlen, 0);
3700 if (*svp != &PL_sv_undef)
3703 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3704 "Compilation failed in require", unixname);
3708 LOADING_FILE_PROBE(unixname);
3710 /* prepare to compile file */
3712 if (path_is_absolute(name)) {
3713 /* At this point, name is SvPVX(sv) */
3715 tryrsfp = doopen_pm(sv);
3717 if (!tryrsfp && !(errno == EACCES && path_is_absolute(name))) {
3718 AV * const ar = GvAVn(PL_incgv);
3724 namesv = newSV_type(SVt_PV);
3725 for (i = 0; i <= AvFILL(ar); i++) {
3726 SV * const dirsv = *av_fetch(ar, i, TRUE);
3728 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3735 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3736 && !sv_isobject(loader))
3738 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3741 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3742 PTR2UV(SvRV(dirsv)), name);
3743 tryname = SvPVX_const(namesv);
3746 ENTER_with_name("call_INC");
3754 if (sv_isobject(loader))
3755 count = call_method("INC", G_ARRAY);
3757 count = call_sv(loader, G_ARRAY);
3767 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3768 && !isGV_with_GP(SvRV(arg))) {
3769 filter_cache = SvRV(arg);
3770 SvREFCNT_inc_simple_void_NN(filter_cache);
3777 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3781 if (isGV_with_GP(arg)) {
3782 IO * const io = GvIO((const GV *)arg);
3787 tryrsfp = IoIFP(io);
3788 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3789 PerlIO_close(IoOFP(io));
3800 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3802 SvREFCNT_inc_simple_void_NN(filter_sub);
3805 filter_state = SP[i];
3806 SvREFCNT_inc_simple_void(filter_state);
3810 if (!tryrsfp && (filter_cache || filter_sub)) {
3811 tryrsfp = PerlIO_open(BIT_BUCKET,
3819 LEAVE_with_name("call_INC");
3821 /* Adjust file name if the hook has set an %INC entry.
3822 This needs to happen after the FREETMPS above. */
3823 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3825 tryname = SvPV_nolen_const(*svp);
3832 filter_has_file = 0;
3834 SvREFCNT_dec(filter_cache);
3835 filter_cache = NULL;
3838 SvREFCNT_dec(filter_state);
3839 filter_state = NULL;
3842 SvREFCNT_dec(filter_sub);
3847 if (!path_is_absolute(name)
3853 dir = SvPV_const(dirsv, dirlen);
3860 if (((unixdirbuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))) == NULL)
3861 || ((unixdir = tounixpath(dir, unixdirbuf)) == NULL))
3863 sv_setpv(namesv, unixdir);
3864 sv_catpv(namesv, unixname);
3866 # ifdef __SYMBIAN32__
3867 if (PL_origfilename[0] &&
3868 PL_origfilename[1] == ':' &&
3869 !(dir[0] && dir[1] == ':'))
3870 Perl_sv_setpvf(aTHX_ namesv,
3875 Perl_sv_setpvf(aTHX_ namesv,
3879 /* The equivalent of
3880 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3881 but without the need to parse the format string, or
3882 call strlen on either pointer, and with the correct
3883 allocation up front. */
3885 char *tmp = SvGROW(namesv, dirlen + len + 2);
3887 memcpy(tmp, dir, dirlen);
3890 /* name came from an SV, so it will have a '\0' at the
3891 end that we can copy as part of this memcpy(). */
3892 memcpy(tmp, name, len + 1);
3894 SvCUR_set(namesv, dirlen + len + 1);
3899 TAINT_PROPER("require");
3900 tryname = SvPVX_const(namesv);
3901 tryrsfp = doopen_pm(namesv);
3903 if (tryname[0] == '.' && tryname[1] == '/') {
3905 while (*++tryname == '/');
3909 else if (errno == EMFILE || errno == EACCES) {
3910 /* no point in trying other paths if out of handles;
3911 * on the other hand, if we couldn't open one of the
3912 * files, then going on with the search could lead to
3913 * unexpected results; see perl #113422
3922 saved_errno = errno; /* sv_2mortal can realloc things */
3925 if (PL_op->op_type == OP_REQUIRE) {
3926 if(saved_errno == EMFILE || saved_errno == EACCES) {
3927 /* diag_listed_as: Can't locate %s */
3928 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
3930 if (namesv) { /* did we lookup @INC? */
3931 AV * const ar = GvAVn(PL_incgv);
3933 SV *const msg = newSVpvs_flags("", SVs_TEMP);
3934 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3935 for (i = 0; i <= AvFILL(ar); i++) {
3936 sv_catpvs(inc, " ");
3937 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3939 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
3940 const char *c, *e = name + len - 3;
3941 sv_catpv(msg, " (you may need to install the ");
3942 for (c = name; c < e; c++) {
3944 sv_catpvn(msg, "::", 2);
3947 sv_catpvn(msg, c, 1);
3950 sv_catpv(msg, " module)");
3952 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
3953 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
3955 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
3956 sv_catpv(msg, " (did you run h2ph?)");
3959 /* diag_listed_as: Can't locate %s */
3961 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
3965 DIE(aTHX_ "Can't locate %s", name);
3972 SETERRNO(0, SS_NORMAL);
3974 /* Assume success here to prevent recursive requirement. */
3975 /* name is never assigned to again, so len is still strlen(name) */
3976 /* Check whether a hook in @INC has already filled %INC */
3978 (void)hv_store(GvHVn(PL_incgv),
3979 unixname, unixlen, newSVpv(tryname,0),0);
3981 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3983 (void)hv_store(GvHVn(PL_incgv),
3984 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3987 ENTER_with_name("eval");
3989 SAVECOPFILE_FREE(&PL_compiling);
3990 CopFILE_set(&PL_compiling, tryname);
3991 lex_start(NULL, tryrsfp, 0);
3993 if (filter_sub || filter_cache) {
3994 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3995 than hanging another SV from it. In turn, filter_add() optionally
3996 takes the SV to use as the filter (or creates a new SV if passed
3997 NULL), so simply pass in whatever value filter_cache has. */
3998 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3999 IoLINES(datasv) = filter_has_file;
4000 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4001 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4004 /* switch to eval mode */
4005 PUSHBLOCK(cx, CXt_EVAL, SP);
4007 cx->blk_eval.retop = PL_op->op_next;
4009 SAVECOPLINE(&PL_compiling);
4010 CopLINE_set(&PL_compiling, 0);
4014 /* Store and reset encoding. */
4015 encoding = PL_encoding;
4018 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4019 op = DOCATCH(PL_eval_start);
4021 op = PL_op->op_next;
4023 /* Restore encoding. */
4024 PL_encoding = encoding;
4026 LOADED_FILE_PROBE(unixname);
4031 /* This is a op added to hold the hints hash for
4032 pp_entereval. The hash can be modified by the code
4033 being eval'ed, so we return a copy instead. */
4039 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4049 const I32 gimme = GIMME_V;
4050 const U32 was = PL_breakable_sub_gen;
4051 char tbuf[TYPE_DIGITS(long) + 12];
4052 bool saved_delete = FALSE;
4053 char *tmpbuf = tbuf;
4056 U32 seq, lex_flags = 0;
4057 HV *saved_hh = NULL;
4058 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4060 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4061 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4063 else if (PL_hints & HINT_LOCALIZE_HH || (
4064 PL_op->op_private & OPpEVAL_COPHH
4065 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4067 saved_hh = cop_hints_2hv(PL_curcop, 0);
4068 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4072 /* make sure we've got a plain PV (no overload etc) before testing
4073 * for taint. Making a copy here is probably overkill, but better
4074 * safe than sorry */
4076 const char * const p = SvPV_const(sv, len);
4078 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4079 lex_flags |= LEX_START_COPIED;
4081 if (bytes && SvUTF8(sv))
4082 SvPVbyte_force(sv, len);
4084 else if (bytes && SvUTF8(sv)) {
4085 /* Don't modify someone else's scalar */
4088 (void)sv_2mortal(sv);
4089 SvPVbyte_force(sv,len);
4090 lex_flags |= LEX_START_COPIED;
4093 TAINT_IF(SvTAINTED(sv));
4094 TAINT_PROPER("eval");
4096 ENTER_with_name("eval");
4097 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4098 ? LEX_IGNORE_UTF8_HINTS
4099 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4104 /* switch to eval mode */
4106 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4107 SV * const temp_sv = sv_newmortal();
4108 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4109 (unsigned long)++PL_evalseq,
4110 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4111 tmpbuf = SvPVX(temp_sv);
4112 len = SvCUR(temp_sv);
4115 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4116 SAVECOPFILE_FREE(&PL_compiling);
4117 CopFILE_set(&PL_compiling, tmpbuf+2);
4118 SAVECOPLINE(&PL_compiling);
4119 CopLINE_set(&PL_compiling, 1);
4120 /* special case: an eval '' executed within the DB package gets lexically
4121 * placed in the first non-DB CV rather than the current CV - this
4122 * allows the debugger to execute code, find lexicals etc, in the
4123 * scope of the code being debugged. Passing &seq gets find_runcv
4124 * to do the dirty work for us */
4125 runcv = find_runcv(&seq);
4127 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4129 cx->blk_eval.retop = PL_op->op_next;
4131 /* prepare to compile string */
4133 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4134 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4136 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4137 deleting the eval's FILEGV from the stash before gv_check() runs
4138 (i.e. before run-time proper). To work around the coredump that
4139 ensues, we always turn GvMULTI_on for any globals that were
4140 introduced within evals. See force_ident(). GSAR 96-10-12 */
4141 char *const safestr = savepvn(tmpbuf, len);
4142 SAVEDELETE(PL_defstash, safestr, len);
4143 saved_delete = TRUE;
4148 if (doeval(gimme, runcv, seq, saved_hh)) {
4149 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4150 ? (PERLDB_LINE || PERLDB_SAVESRC)
4151 : PERLDB_SAVESRC_NOSUBS) {
4152 /* Retain the filegv we created. */
4153 } else if (!saved_delete) {
4154 char *const safestr = savepvn(tmpbuf, len);
4155 SAVEDELETE(PL_defstash, safestr, len);
4157 return DOCATCH(PL_eval_start);
4159 /* We have already left the scope set up earlier thanks to the LEAVE
4161 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4162 ? (PERLDB_LINE || PERLDB_SAVESRC)
4163 : PERLDB_SAVESRC_INVALID) {
4164 /* Retain the filegv we created. */
4165 } else if (!saved_delete) {
4166 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4168 return PL_op->op_next;
4180 const U8 save_flags = PL_op -> op_flags;
4188 namesv = cx->blk_eval.old_namesv;
4189 retop = cx->blk_eval.retop;
4190 evalcv = cx->blk_eval.cv;
4193 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4195 PL_curpm = newpm; /* Don't pop $1 et al till now */
4198 assert(CvDEPTH(evalcv) == 1);
4200 CvDEPTH(evalcv) = 0;
4202 if (optype == OP_REQUIRE &&
4203 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4205 /* Unassume the success we assumed earlier. */
4206 (void)hv_delete(GvHVn(PL_incgv),
4207 SvPVX_const(namesv),
4208 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4210 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4212 /* die_unwind() did LEAVE, or we won't be here */
4215 LEAVE_with_name("eval");
4216 if (!(save_flags & OPf_SPECIAL)) {
4224 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4225 close to the related Perl_create_eval_scope. */
4227 Perl_delete_eval_scope(pTHX)
4238 LEAVE_with_name("eval_scope");
4239 PERL_UNUSED_VAR(newsp);
4240 PERL_UNUSED_VAR(gimme);
4241 PERL_UNUSED_VAR(optype);
4244 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4245 also needed by Perl_fold_constants. */
4247 Perl_create_eval_scope(pTHX_ U32 flags)
4250 const I32 gimme = GIMME_V;
4252 ENTER_with_name("eval_scope");
4255 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4258 PL_in_eval = EVAL_INEVAL;
4259 if (flags & G_KEEPERR)
4260 PL_in_eval |= EVAL_KEEPERR;
4263 if (flags & G_FAKINGEVAL) {
4264 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4272 PERL_CONTEXT * const cx = create_eval_scope(0);
4273 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4274 return DOCATCH(PL_op->op_next);
4289 PERL_UNUSED_VAR(optype);
4292 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4293 PL_curpm = newpm; /* Don't pop $1 et al till now */
4295 LEAVE_with_name("eval_scope");
4304 const I32 gimme = GIMME_V;
4306 ENTER_with_name("given");
4309 if (PL_op->op_targ) {
4310 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4311 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4312 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4319 PUSHBLOCK(cx, CXt_GIVEN, SP);
4332 PERL_UNUSED_CONTEXT;
4335 assert(CxTYPE(cx) == CXt_GIVEN);
4338 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4339 PL_curpm = newpm; /* Don't pop $1 et al till now */
4341 LEAVE_with_name("given");
4345 /* Helper routines used by pp_smartmatch */
4347 S_make_matcher(pTHX_ REGEXP *re)
4350 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4352 PERL_ARGS_ASSERT_MAKE_MATCHER;
4354 PM_SETRE(matcher, ReREFCNT_inc(re));
4356 SAVEFREEOP((OP *) matcher);
4357 ENTER_with_name("matcher"); SAVETMPS;
4363 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4368 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4370 PL_op = (OP *) matcher;
4373 (void) Perl_pp_match(aTHX);
4375 return (SvTRUEx(POPs));
4379 S_destroy_matcher(pTHX_ PMOP *matcher)
4383 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4384 PERL_UNUSED_ARG(matcher);
4387 LEAVE_with_name("matcher");
4390 /* Do a smart match */
4393 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4394 return do_smartmatch(NULL, NULL, 0);
4397 /* This version of do_smartmatch() implements the
4398 * table of smart matches that is found in perlsyn.
4401 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4406 bool object_on_left = FALSE;
4407 SV *e = TOPs; /* e is for 'expression' */
4408 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4410 /* Take care only to invoke mg_get() once for each argument.
4411 * Currently we do this by copying the SV if it's magical. */
4413 if (!copied && SvGMAGICAL(d))
4414 d = sv_mortalcopy(d);
4421 e = sv_mortalcopy(e);
4423 /* First of all, handle overload magic of the rightmost argument */
4426 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4427 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4429 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4436 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4439 SP -= 2; /* Pop the values */
4444 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4451 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4452 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4453 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4455 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4456 object_on_left = TRUE;
4459 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4461 if (object_on_left) {
4462 goto sm_any_sub; /* Treat objects like scalars */
4464 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4465 /* Test sub truth for each key */
4467 bool andedresults = TRUE;
4468 HV *hv = (HV*) SvRV(d);
4469 I32 numkeys = hv_iterinit(hv);
4470 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4473 while ( (he = hv_iternext(hv)) ) {
4474 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4475 ENTER_with_name("smartmatch_hash_key_test");
4478 PUSHs(hv_iterkeysv(he));
4480 c = call_sv(e, G_SCALAR);
4483 andedresults = FALSE;
4485 andedresults = SvTRUEx(POPs) && andedresults;
4487 LEAVE_with_name("smartmatch_hash_key_test");
4494 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4495 /* Test sub truth for each element */
4497 bool andedresults = TRUE;
4498 AV *av = (AV*) SvRV(d);
4499 const I32 len = av_len(av);
4500 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4503 for (i = 0; i <= len; ++i) {
4504 SV * const * const svp = av_fetch(av, i, FALSE);
4505 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4506 ENTER_with_name("smartmatch_array_elem_test");
4512 c = call_sv(e, G_SCALAR);
4515 andedresults = FALSE;
4517 andedresults = SvTRUEx(POPs) && andedresults;
4519 LEAVE_with_name("smartmatch_array_elem_test");
4528 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4529 ENTER_with_name("smartmatch_coderef");
4534 c = call_sv(e, G_SCALAR);
4538 else if (SvTEMP(TOPs))
4539 SvREFCNT_inc_void(TOPs);
4541 LEAVE_with_name("smartmatch_coderef");
4546 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4547 if (object_on_left) {
4548 goto sm_any_hash; /* Treat objects like scalars */
4550 else if (!SvOK(d)) {
4551 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4554 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4555 /* Check that the key-sets are identical */
4557 HV *other_hv = MUTABLE_HV(SvRV(d));
4559 bool other_tied = FALSE;
4560 U32 this_key_count = 0,
4561 other_key_count = 0;
4562 HV *hv = MUTABLE_HV(SvRV(e));
4564 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4565 /* Tied hashes don't know how many keys they have. */
4566 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4569 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4570 HV * const temp = other_hv;
4575 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4578 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4581 /* The hashes have the same number of keys, so it suffices
4582 to check that one is a subset of the other. */
4583 (void) hv_iterinit(hv);
4584 while ( (he = hv_iternext(hv)) ) {
4585 SV *key = hv_iterkeysv(he);
4587 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4590 if(!hv_exists_ent(other_hv, key, 0)) {
4591 (void) hv_iterinit(hv); /* reset iterator */
4597 (void) hv_iterinit(other_hv);
4598 while ( hv_iternext(other_hv) )
4602 other_key_count = HvUSEDKEYS(other_hv);
4604 if (this_key_count != other_key_count)
4609 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4610 AV * const other_av = MUTABLE_AV(SvRV(d));
4611 const I32 other_len = av_len(other_av) + 1;
4613 HV *hv = MUTABLE_HV(SvRV(e));
4615 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4616 for (i = 0; i < other_len; ++i) {
4617 SV ** const svp = av_fetch(other_av, i, FALSE);
4618 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4619 if (svp) { /* ??? When can this not happen? */
4620 if (hv_exists_ent(hv, *svp, 0))
4626 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4627 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4630 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4632 HV *hv = MUTABLE_HV(SvRV(e));
4634 (void) hv_iterinit(hv);
4635 while ( (he = hv_iternext(hv)) ) {
4636 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4637 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4638 (void) hv_iterinit(hv);
4639 destroy_matcher(matcher);
4643 destroy_matcher(matcher);
4649 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4650 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4657 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4658 if (object_on_left) {
4659 goto sm_any_array; /* Treat objects like scalars */
4661 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4662 AV * const other_av = MUTABLE_AV(SvRV(e));
4663 const I32 other_len = av_len(other_av) + 1;
4666 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4667 for (i = 0; i < other_len; ++i) {
4668 SV ** const svp = av_fetch(other_av, i, FALSE);
4670 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4671 if (svp) { /* ??? When can this not happen? */
4672 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4678 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4679 AV *other_av = MUTABLE_AV(SvRV(d));
4680 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4681 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4685 const I32 other_len = av_len(other_av);
4687 if (NULL == seen_this) {
4688 seen_this = newHV();
4689 (void) sv_2mortal(MUTABLE_SV(seen_this));
4691 if (NULL == seen_other) {
4692 seen_other = newHV();
4693 (void) sv_2mortal(MUTABLE_SV(seen_other));
4695 for(i = 0; i <= other_len; ++i) {
4696 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4697 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4699 if (!this_elem || !other_elem) {
4700 if ((this_elem && SvOK(*this_elem))
4701 || (other_elem && SvOK(*other_elem)))
4704 else if (hv_exists_ent(seen_this,
4705 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4706 hv_exists_ent(seen_other,
4707 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4709 if (*this_elem != *other_elem)
4713 (void)hv_store_ent(seen_this,
4714 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4716 (void)hv_store_ent(seen_other,
4717 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4723 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4724 (void) do_smartmatch(seen_this, seen_other, 0);
4726 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4735 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4736 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4739 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4740 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4743 for(i = 0; i <= this_len; ++i) {
4744 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4745 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4746 if (svp && matcher_matches_sv(matcher, *svp)) {
4747 destroy_matcher(matcher);
4751 destroy_matcher(matcher);
4755 else if (!SvOK(d)) {
4756 /* undef ~~ array */
4757 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4760 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4761 for (i = 0; i <= this_len; ++i) {
4762 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4763 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4764 if (!svp || !SvOK(*svp))
4773 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4775 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4776 for (i = 0; i <= this_len; ++i) {
4777 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4784 /* infinite recursion isn't supposed to happen here */
4785 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4786 (void) do_smartmatch(NULL, NULL, 1);
4788 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4797 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4798 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4799 SV *t = d; d = e; e = t;
4800 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4803 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4804 SV *t = d; d = e; e = t;
4805 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4806 goto sm_regex_array;
4809 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4811 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4813 PUSHs(matcher_matches_sv(matcher, d)
4816 destroy_matcher(matcher);
4821 /* See if there is overload magic on left */
4822 else if (object_on_left && SvAMAGIC(d)) {
4824 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4825 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4828 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4836 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4839 else if (!SvOK(d)) {
4840 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4841 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4846 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4847 DEBUG_M(if (SvNIOK(e))
4848 Perl_deb(aTHX_ " applying rule Any-Num\n");
4850 Perl_deb(aTHX_ " applying rule Num-numish\n");
4852 /* numeric comparison */
4855 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4856 (void) Perl_pp_i_eq(aTHX);
4858 (void) Perl_pp_eq(aTHX);
4866 /* As a last resort, use string comparison */
4867 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4870 return Perl_pp_seq(aTHX);
4877 const I32 gimme = GIMME_V;
4879 /* This is essentially an optimization: if the match
4880 fails, we don't want to push a context and then
4881 pop it again right away, so we skip straight
4882 to the op that follows the leavewhen.
4883 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4885 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4886 RETURNOP(cLOGOP->op_other->op_next);
4888 ENTER_with_name("when");
4891 PUSHBLOCK(cx, CXt_WHEN, SP);
4906 cxix = dopoptogiven(cxstack_ix);
4908 /* diag_listed_as: Can't "when" outside a topicalizer */
4909 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4910 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
4913 assert(CxTYPE(cx) == CXt_WHEN);
4916 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4917 PL_curpm = newpm; /* pop $1 et al */
4919 LEAVE_with_name("when");
4921 if (cxix < cxstack_ix)
4924 cx = &cxstack[cxix];
4926 if (CxFOREACH(cx)) {
4927 /* clear off anything above the scope we're re-entering */
4928 I32 inner = PL_scopestack_ix;
4931 if (PL_scopestack_ix < inner)
4932 leave_scope(PL_scopestack[PL_scopestack_ix]);
4933 PL_curcop = cx->blk_oldcop;
4935 return cx->blk_loop.my_op->op_nextop;
4938 RETURNOP(cx->blk_givwhen.leave_op);
4950 PERL_UNUSED_VAR(gimme);
4952 cxix = dopoptowhen(cxstack_ix);
4954 DIE(aTHX_ "Can't \"continue\" outside a when block");
4956 if (cxix < cxstack_ix)
4960 assert(CxTYPE(cx) == CXt_WHEN);
4963 PL_curpm = newpm; /* pop $1 et al */
4965 LEAVE_with_name("when");
4966 RETURNOP(cx->blk_givwhen.leave_op->op_next);
4975 cxix = dopoptogiven(cxstack_ix);
4977 DIE(aTHX_ "Can't \"break\" outside a given block");
4979 cx = &cxstack[cxix];
4981 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4983 if (cxix < cxstack_ix)
4986 /* Restore the sp at the time we entered the given block */
4989 return cx->blk_givwhen.leave_op;
4993 S_doparseform(pTHX_ SV *sv)
4996 char *s = SvPV(sv, len);
4998 char *base = NULL; /* start of current field */
4999 I32 skipspaces = 0; /* number of contiguous spaces seen */
5000 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5001 bool repeat = FALSE; /* ~~ seen on this line */
5002 bool postspace = FALSE; /* a text field may need right padding */
5005 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5007 bool ischop; /* it's a ^ rather than a @ */
5008 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5009 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5013 PERL_ARGS_ASSERT_DOPARSEFORM;
5016 Perl_croak(aTHX_ "Null picture in formline");
5018 if (SvTYPE(sv) >= SVt_PVMG) {
5019 /* This might, of course, still return NULL. */
5020 mg = mg_find(sv, PERL_MAGIC_fm);
5022 sv_upgrade(sv, SVt_PVMG);
5026 /* still the same as previously-compiled string? */
5027 SV *old = mg->mg_obj;
5028 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5029 && len == SvCUR(old)
5030 && strnEQ(SvPVX(old), SvPVX(sv), len)
5032 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5036 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5037 Safefree(mg->mg_ptr);
5043 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5044 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5047 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5048 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5052 /* estimate the buffer size needed */
5053 for (base = s; s <= send; s++) {
5054 if (*s == '\n' || *s == '@' || *s == '^')
5060 Newx(fops, maxops, U32);
5065 *fpc++ = FF_LINEMARK;
5066 noblank = repeat = FALSE;
5084 case ' ': case '\t':
5091 } /* else FALL THROUGH */
5099 *fpc++ = FF_LITERAL;
5107 *fpc++ = (U32)skipspaces;
5111 *fpc++ = FF_NEWLINE;
5115 arg = fpc - linepc + 1;
5122 *fpc++ = FF_LINEMARK;
5123 noblank = repeat = FALSE;
5132 ischop = s[-1] == '^';
5138 arg = (s - base) - 1;
5140 *fpc++ = FF_LITERAL;
5146 if (*s == '*') { /* @* or ^* */
5148 *fpc++ = 2; /* skip the @* or ^* */
5150 *fpc++ = FF_LINESNGL;
5153 *fpc++ = FF_LINEGLOB;
5155 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5156 arg = ischop ? FORM_NUM_BLANK : 0;
5161 const char * const f = ++s;
5164 arg |= FORM_NUM_POINT + (s - f);
5166 *fpc++ = s - base; /* fieldsize for FETCH */
5167 *fpc++ = FF_DECIMAL;
5169 unchopnum |= ! ischop;
5171 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5172 arg = ischop ? FORM_NUM_BLANK : 0;
5174 s++; /* skip the '0' first */
5178 const char * const f = ++s;
5181 arg |= FORM_NUM_POINT + (s - f);
5183 *fpc++ = s - base; /* fieldsize for FETCH */
5184 *fpc++ = FF_0DECIMAL;
5186 unchopnum |= ! ischop;
5188 else { /* text field */
5190 bool ismore = FALSE;
5193 while (*++s == '>') ;
5194 prespace = FF_SPACE;
5196 else if (*s == '|') {
5197 while (*++s == '|') ;
5198 prespace = FF_HALFSPACE;
5203 while (*++s == '<') ;
5206 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5210 *fpc++ = s - base; /* fieldsize for FETCH */
5212 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5215 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5229 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5232 mg->mg_ptr = (char *) fops;
5233 mg->mg_len = arg * sizeof(U32);
5234 mg->mg_obj = sv_copy;
5235 mg->mg_flags |= MGf_REFCOUNTED;
5237 if (unchopnum && repeat)
5238 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5245 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5247 /* Can value be printed in fldsize chars, using %*.*f ? */
5251 int intsize = fldsize - (value < 0 ? 1 : 0);
5253 if (frcsize & FORM_NUM_POINT)
5255 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5258 while (intsize--) pwr *= 10.0;
5259 while (frcsize--) eps /= 10.0;
5262 if (value + eps >= pwr)
5265 if (value - eps <= -pwr)
5272 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5275 SV * const datasv = FILTER_DATA(idx);
5276 const int filter_has_file = IoLINES(datasv);
5277 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5278 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5283 char *prune_from = NULL;
5284 bool read_from_cache = FALSE;
5288 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5290 assert(maxlen >= 0);
5293 /* I was having segfault trouble under Linux 2.2.5 after a
5294 parse error occured. (Had to hack around it with a test
5295 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5296 not sure where the trouble is yet. XXX */
5299 SV *const cache = datasv;
5302 const char *cache_p = SvPV(cache, cache_len);
5306 /* Running in block mode and we have some cached data already.
5308 if (cache_len >= umaxlen) {
5309 /* In fact, so much data we don't even need to call
5314 const char *const first_nl =
5315 (const char *)memchr(cache_p, '\n', cache_len);
5317 take = first_nl + 1 - cache_p;
5321 sv_catpvn(buf_sv, cache_p, take);
5322 sv_chop(cache, cache_p + take);
5323 /* Definitely not EOF */
5327 sv_catsv(buf_sv, cache);
5329 umaxlen -= cache_len;
5332 read_from_cache = TRUE;
5336 /* Filter API says that the filter appends to the contents of the buffer.
5337 Usually the buffer is "", so the details don't matter. But if it's not,
5338 then clearly what it contains is already filtered by this filter, so we
5339 don't want to pass it in a second time.
5340 I'm going to use a mortal in case the upstream filter croaks. */
5341 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5342 ? sv_newmortal() : buf_sv;
5343 SvUPGRADE(upstream, SVt_PV);
5345 if (filter_has_file) {
5346 status = FILTER_READ(idx+1, upstream, 0);
5349 if (filter_sub && status >= 0) {
5353 ENTER_with_name("call_filter_sub");
5358 DEFSV_set(upstream);
5362 PUSHs(filter_state);
5365 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5374 SV * const errsv = ERRSV;
5375 if (SvTRUE_NN(errsv))
5376 err = newSVsv(errsv);
5382 LEAVE_with_name("call_filter_sub");
5385 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5386 if(!err && SvOK(upstream)) {
5387 got_p = SvPV(upstream, got_len);
5389 if (got_len > umaxlen) {
5390 prune_from = got_p + umaxlen;
5393 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5394 if (first_nl && first_nl + 1 < got_p + got_len) {
5395 /* There's a second line here... */
5396 prune_from = first_nl + 1;
5400 if (!err && prune_from) {
5401 /* Oh. Too long. Stuff some in our cache. */
5402 STRLEN cached_len = got_p + got_len - prune_from;
5403 SV *const cache = datasv;
5406 /* Cache should be empty. */
5407 assert(!SvCUR(cache));
5410 sv_setpvn(cache, prune_from, cached_len);
5411 /* If you ask for block mode, you may well split UTF-8 characters.
5412 "If it breaks, you get to keep both parts"
5413 (Your code is broken if you don't put them back together again
5414 before something notices.) */
5415 if (SvUTF8(upstream)) {
5418 SvCUR_set(upstream, got_len - cached_len);
5420 /* Can't yet be EOF */
5425 /* If they are at EOF but buf_sv has something in it, then they may never
5426 have touched the SV upstream, so it may be undefined. If we naively
5427 concatenate it then we get a warning about use of uninitialised value.
5429 if (!err && upstream != buf_sv &&
5430 (SvOK(upstream) || SvGMAGICAL(upstream))) {
5431 sv_catsv(buf_sv, upstream);
5435 IoLINES(datasv) = 0;
5437 SvREFCNT_dec(filter_state);
5438 IoTOP_GV(datasv) = NULL;
5441 SvREFCNT_dec(filter_sub);
5442 IoBOTTOM_GV(datasv) = NULL;
5444 filter_del(S_run_user_filter);
5450 if (status == 0 && read_from_cache) {
5451 /* If we read some data from the cache (and by getting here it implies
5452 that we emptied the cache) then we aren't yet at EOF, and mustn't
5453 report that to our caller. */
5459 /* perhaps someone can come up with a better name for
5460 this? it is not really "absolute", per se ... */
5462 S_path_is_absolute(const char *name)
5464 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5466 if (PERL_FILE_IS_ABSOLUTE(name)
5468 || (*name == '.' && ((name[1] == '/' ||
5469 (name[1] == '.' && name[2] == '/'))
5470 || (name[1] == '\\' ||
5471 ( name[1] == '.' && name[2] == '\\')))
5474 || (*name == '.' && (name[1] == '/' ||
5475 (name[1] == '.' && name[2] == '/')))
5487 * c-indentation-style: bsd
5489 * indent-tabs-mode: nil
5492 * ex: set ts=8 sts=4 sw=4 et: