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);
2806 if (cxix < cxstack_ix) {
2809 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
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;
2872 const SSize_t items = AvFILLp(arg) + 1;
2875 PERL_UNUSED_VAR(newsp);
2876 PERL_UNUSED_VAR(gimme);
2878 /* put GvAV(defgv) back onto stack */
2879 EXTEND(SP, items+1); /* @_ could have been extended. */
2880 Copy(AvARRAY(arg), SP + 1, items, SV*);
2885 for (index=0; index<items; index++)
2886 SvREFCNT_inc_void(sv_2mortal(SP[-index]));
2889 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2890 /* Restore old @_ */
2891 arg = GvAV(PL_defgv);
2892 GvAV(PL_defgv) = cx->blk_sub.savearray;
2896 /* XS subs don't have a CxSUB, so pop it */
2897 POPBLOCK(cx, PL_curpm);
2898 /* Push a mark for the start of arglist */
2901 (void)(*CvXSUB(cv))(aTHX_ cv);
2906 PADLIST * const padlist = CvPADLIST(cv);
2907 cx->blk_sub.cv = cv;
2908 cx->blk_sub.olddepth = CvDEPTH(cv);
2911 if (CvDEPTH(cv) < 2)
2912 SvREFCNT_inc_simple_void_NN(cv);
2914 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2915 sub_crush_depth(cv);
2916 pad_push(padlist, CvDEPTH(cv));
2918 PL_curcop = cx->blk_oldcop;
2920 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2923 CX_CURPAD_SAVE(cx->blk_sub);
2925 /* cx->blk_sub.argarray has no reference count, so we
2926 need something to hang on to our argument array so
2927 that cx->blk_sub.argarray does not end up pointing
2928 to freed memory as the result of undef *_. So put
2929 it in the callee’s pad, donating our refer-
2931 SvREFCNT_dec(PAD_SVl(0));
2932 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2934 /* GvAV(PL_defgv) might have been modified on scope
2935 exit, so restore it. */
2936 if (arg != GvAV(PL_defgv)) {
2937 AV * const av = GvAV(PL_defgv);
2938 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2942 else SvREFCNT_dec(arg);
2943 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2944 Perl_get_db_sub(aTHX_ NULL, cv);
2946 CV * const gotocv = get_cvs("DB::goto", 0);
2948 PUSHMARK( PL_stack_sp );
2949 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2954 RETURNOP(CvSTART(cv));
2958 label = SvPV_nomg_const(sv, label_len);
2959 label_flags = SvUTF8(sv);
2962 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2963 label = cPVOP->op_pv;
2964 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2965 label_len = strlen(label);
2967 if (!(do_dump || label_len)) DIE(aTHX_ must_have_label);
2972 OP *gotoprobe = NULL;
2973 bool leaving_eval = FALSE;
2974 bool in_block = FALSE;
2975 PERL_CONTEXT *last_eval_cx = NULL;
2979 PL_lastgotoprobe = NULL;
2981 for (ix = cxstack_ix; ix >= 0; ix--) {
2983 switch (CxTYPE(cx)) {
2985 leaving_eval = TRUE;
2986 if (!CxTRYBLOCK(cx)) {
2987 gotoprobe = (last_eval_cx ?
2988 last_eval_cx->blk_eval.old_eval_root :
2993 /* else fall through */
2994 case CXt_LOOP_LAZYIV:
2995 case CXt_LOOP_LAZYSV:
2997 case CXt_LOOP_PLAIN:
3000 gotoprobe = cx->blk_oldcop->op_sibling;
3006 gotoprobe = cx->blk_oldcop->op_sibling;
3009 gotoprobe = PL_main_root;
3012 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3013 gotoprobe = CvROOT(cx->blk_sub.cv);
3019 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3022 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3023 CxTYPE(cx), (long) ix);
3024 gotoprobe = PL_main_root;
3028 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3029 enterops, enterops + GOTO_DEPTH);
3032 if (gotoprobe->op_sibling &&
3033 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3034 gotoprobe->op_sibling->op_sibling) {
3035 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3036 label, label_len, label_flags, enterops,
3037 enterops + GOTO_DEPTH);
3042 PL_lastgotoprobe = gotoprobe;
3045 DIE(aTHX_ "Can't find label %"SVf,
3046 SVfARG(newSVpvn_flags(label, label_len,
3047 SVs_TEMP | label_flags)));
3049 /* if we're leaving an eval, check before we pop any frames
3050 that we're not going to punt, otherwise the error
3053 if (leaving_eval && *enterops && enterops[1]) {
3055 for (i = 1; enterops[i]; i++)
3056 if (enterops[i]->op_type == OP_ENTERITER)
3057 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3060 if (*enterops && enterops[1]) {
3061 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3063 deprecate("\"goto\" to jump into a construct");
3066 /* pop unwanted frames */
3068 if (ix < cxstack_ix) {
3075 oldsave = PL_scopestack[PL_scopestack_ix];
3076 LEAVE_SCOPE(oldsave);
3079 /* push wanted frames */
3081 if (*enterops && enterops[1]) {
3082 OP * const oldop = PL_op;
3083 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3084 for (; enterops[ix]; ix++) {
3085 PL_op = enterops[ix];
3086 /* Eventually we may want to stack the needed arguments
3087 * for each op. For now, we punt on the hard ones. */
3088 if (PL_op->op_type == OP_ENTERITER)
3089 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3090 PL_op->op_ppaddr(aTHX);
3098 if (!retop) retop = PL_main_start;
3100 PL_restartop = retop;
3101 PL_do_undump = TRUE;
3105 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3106 PL_do_undump = FALSE;
3121 anum = 0; (void)POPs;
3126 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3128 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3131 PL_exit_flags |= PERL_EXIT_EXPECTED;
3133 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3134 if (anum || !(PL_minus_c && PL_madskills))
3139 PUSHs(&PL_sv_undef);
3146 S_save_lines(pTHX_ AV *array, SV *sv)
3148 const char *s = SvPVX_const(sv);
3149 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3152 PERL_ARGS_ASSERT_SAVE_LINES;
3154 while (s && s < send) {
3156 SV * const tmpstr = newSV_type(SVt_PVMG);
3158 t = (const char *)memchr(s, '\n', send - s);
3164 sv_setpvn(tmpstr, s, t - s);
3165 av_store(array, line++, tmpstr);
3173 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3175 0 is used as continue inside eval,
3177 3 is used for a die caught by an inner eval - continue inner loop
3179 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3180 establish a local jmpenv to handle exception traps.
3185 S_docatch(pTHX_ OP *o)
3189 OP * const oldop = PL_op;
3193 assert(CATCH_GET == TRUE);
3200 assert(cxstack_ix >= 0);
3201 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3202 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3207 /* die caught by an inner eval - continue inner loop */
3208 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3209 PL_restartjmpenv = NULL;
3210 PL_op = PL_restartop;
3219 assert(0); /* NOTREACHED */
3228 =for apidoc find_runcv
3230 Locate the CV corresponding to the currently executing sub or eval.
3231 If db_seqp is non_null, skip CVs that are in the DB package and populate
3232 *db_seqp with the cop sequence number at the point that the DB:: code was
3233 entered. (allows debuggers to eval in the scope of the breakpoint rather
3234 than in the scope of the debugger itself).
3240 Perl_find_runcv(pTHX_ U32 *db_seqp)
3242 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3245 /* If this becomes part of the API, it might need a better name. */
3247 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3254 *db_seqp = PL_curcop->cop_seq;
3255 for (si = PL_curstackinfo; si; si = si->si_prev) {
3257 for (ix = si->si_cxix; ix >= 0; ix--) {
3258 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3260 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3261 cv = cx->blk_sub.cv;
3262 /* skip DB:: code */
3263 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3264 *db_seqp = cx->blk_oldcop->cop_seq;
3268 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3269 cv = cx->blk_eval.cv;
3272 case FIND_RUNCV_padid_eq:
3274 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3277 case FIND_RUNCV_level_eq:
3278 if (level++ != arg) continue;
3286 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3290 /* Run yyparse() in a setjmp wrapper. Returns:
3291 * 0: yyparse() successful
3292 * 1: yyparse() failed
3296 S_try_yyparse(pTHX_ int gramtype)
3301 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3305 ret = yyparse(gramtype) ? 1 : 0;
3312 assert(0); /* NOTREACHED */
3319 /* Compile a require/do or an eval ''.
3321 * outside is the lexically enclosing CV (if any) that invoked us.
3322 * seq is the current COP scope value.
3323 * hh is the saved hints hash, if any.
3325 * Returns a bool indicating whether the compile was successful; if so,
3326 * PL_eval_start contains the first op of the compiled code; otherwise,
3329 * This function is called from two places: pp_require and pp_entereval.
3330 * These can be distinguished by whether PL_op is entereval.
3334 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3337 OP * const saveop = PL_op;
3338 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3339 COP * const oldcurcop = PL_curcop;
3340 bool in_require = (saveop->op_type == OP_REQUIRE);
3344 PL_in_eval = (in_require
3345 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3350 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3352 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3353 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3354 cxstack[cxstack_ix].blk_gimme = gimme;
3356 CvOUTSIDE_SEQ(evalcv) = seq;
3357 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3359 /* set up a scratch pad */
3361 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3362 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3366 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3368 /* make sure we compile in the right package */
3370 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3371 SAVEGENERICSV(PL_curstash);
3372 PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3374 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3375 SAVESPTR(PL_beginav);
3376 PL_beginav = newAV();
3377 SAVEFREESV(PL_beginav);
3378 SAVESPTR(PL_unitcheckav);
3379 PL_unitcheckav = newAV();
3380 SAVEFREESV(PL_unitcheckav);
3383 SAVEBOOL(PL_madskills);
3387 ENTER_with_name("evalcomp");
3388 SAVESPTR(PL_compcv);
3391 /* try to compile it */
3393 PL_eval_root = NULL;
3394 PL_curcop = &PL_compiling;
3395 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3396 PL_in_eval |= EVAL_KEEPERR;
3403 hv_clear(GvHV(PL_hintgv));
3406 PL_hints = saveop->op_private & OPpEVAL_COPHH
3407 ? oldcurcop->cop_hints : saveop->op_targ;
3409 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3410 SvREFCNT_dec(GvHV(PL_hintgv));
3411 GvHV(PL_hintgv) = hh;
3414 SAVECOMPILEWARNINGS();
3416 if (PL_dowarn & G_WARN_ALL_ON)
3417 PL_compiling.cop_warnings = pWARN_ALL ;
3418 else if (PL_dowarn & G_WARN_ALL_OFF)
3419 PL_compiling.cop_warnings = pWARN_NONE ;
3421 PL_compiling.cop_warnings = pWARN_STD ;
3424 PL_compiling.cop_warnings =
3425 DUP_WARNINGS(oldcurcop->cop_warnings);
3426 cophh_free(CopHINTHASH_get(&PL_compiling));
3427 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3428 /* The label, if present, is the first entry on the chain. So rather
3429 than writing a blank label in front of it (which involves an
3430 allocation), just use the next entry in the chain. */
3431 PL_compiling.cop_hints_hash
3432 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3433 /* Check the assumption that this removed the label. */
3434 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3437 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3440 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3442 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3443 * so honour CATCH_GET and trap it here if necessary */
3445 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3447 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3448 SV **newsp; /* Used by POPBLOCK. */
3450 I32 optype; /* Used by POPEVAL. */
3456 PERL_UNUSED_VAR(newsp);
3457 PERL_UNUSED_VAR(optype);
3459 /* note that if yystatus == 3, then the EVAL CX block has already
3460 * been popped, and various vars restored */
3462 if (yystatus != 3) {
3464 op_free(PL_eval_root);
3465 PL_eval_root = NULL;
3467 SP = PL_stack_base + POPMARK; /* pop original mark */
3468 POPBLOCK(cx,PL_curpm);
3470 namesv = cx->blk_eval.old_namesv;
3471 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3472 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3478 /* If cx is still NULL, it means that we didn't go in the
3479 * POPEVAL branch. */
3480 cx = &cxstack[cxstack_ix];
3481 assert(CxTYPE(cx) == CXt_EVAL);
3482 namesv = cx->blk_eval.old_namesv;
3484 (void)hv_store(GvHVn(PL_incgv),
3485 SvPVX_const(namesv),
3486 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3488 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3491 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3494 if (!*(SvPV_nolen_const(errsv))) {
3495 sv_setpvs(errsv, "Compilation error");
3498 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3503 LEAVE_with_name("evalcomp");
3505 CopLINE_set(&PL_compiling, 0);
3506 SAVEFREEOP(PL_eval_root);
3507 cv_forget_slab(evalcv);
3509 DEBUG_x(dump_eval());
3511 /* Register with debugger: */
3512 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3513 CV * const cv = get_cvs("DB::postponed", 0);
3517 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3519 call_sv(MUTABLE_SV(cv), G_DISCARD);
3523 if (PL_unitcheckav) {
3524 OP *es = PL_eval_start;
3525 call_list(PL_scopestack_ix, PL_unitcheckav);
3529 /* compiled okay, so do it */
3531 CvDEPTH(evalcv) = 1;
3532 SP = PL_stack_base + POPMARK; /* pop original mark */
3533 PL_op = saveop; /* The caller may need it. */
3534 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3541 S_check_type_and_open(pTHX_ SV *name)
3544 const char *p = SvPV_nolen_const(name);
3545 const int st_rc = PerlLIO_stat(p, &st);
3547 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3549 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3553 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3554 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3556 return PerlIO_open(p, PERL_SCRIPT_MODE);
3560 #ifndef PERL_DISABLE_PMC
3562 S_doopen_pm(pTHX_ SV *name)
3565 const char *p = SvPV_const(name, namelen);
3567 PERL_ARGS_ASSERT_DOOPEN_PM;
3569 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3570 SV *const pmcsv = sv_newmortal();
3573 SvSetSV_nosteal(pmcsv,name);
3574 sv_catpvn(pmcsv, "c", 1);
3576 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3577 return check_type_and_open(pmcsv);
3579 return check_type_and_open(name);
3582 # define doopen_pm(name) check_type_and_open(name)
3583 #endif /* !PERL_DISABLE_PMC */
3595 int vms_unixname = 0;
3600 const char *tryname = NULL;
3602 const I32 gimme = GIMME_V;
3603 int filter_has_file = 0;
3604 PerlIO *tryrsfp = NULL;
3605 SV *filter_cache = NULL;
3606 SV *filter_state = NULL;
3607 SV *filter_sub = NULL;
3614 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3615 sv = sv_2mortal(new_version(sv));
3616 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3617 upg_version(PL_patchlevel, TRUE);
3618 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3619 if ( vcmp(sv,PL_patchlevel) <= 0 )
3620 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3621 SVfARG(sv_2mortal(vnormal(sv))),
3622 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3626 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3629 SV * const req = SvRV(sv);
3630 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3632 /* get the left hand term */
3633 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3635 first = SvIV(*av_fetch(lav,0,0));
3636 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3637 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3638 || av_len(lav) > 1 /* FP with > 3 digits */
3639 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3641 DIE(aTHX_ "Perl %"SVf" required--this is only "
3643 SVfARG(sv_2mortal(vnormal(req))),
3644 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3647 else { /* probably 'use 5.10' or 'use 5.8' */
3652 second = SvIV(*av_fetch(lav,1,0));
3654 second /= second >= 600 ? 100 : 10;
3655 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3656 (int)first, (int)second);
3657 upg_version(hintsv, TRUE);
3659 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3660 "--this is only %"SVf", stopped",
3661 SVfARG(sv_2mortal(vnormal(req))),
3662 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3663 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3671 name = SvPV_const(sv, len);
3672 if (!(name && len > 0 && *name))
3673 DIE(aTHX_ "Null filename used");
3674 TAINT_PROPER("require");
3678 /* The key in the %ENV hash is in the syntax of file passed as the argument
3679 * usually this is in UNIX format, but sometimes in VMS format, which
3680 * can result in a module being pulled in more than once.
3681 * To prevent this, the key must be stored in UNIX format if the VMS
3682 * name can be translated to UNIX.
3685 if ((unixnamebuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1))))
3686 && (unixname = tounixspec(name, unixnamebuf)) != NULL) {
3687 unixlen = strlen(unixname);
3693 /* if not VMS or VMS name can not be translated to UNIX, pass it
3696 unixname = (char *) name;
3699 if (PL_op->op_type == OP_REQUIRE) {
3700 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3701 unixname, unixlen, 0);
3703 if (*svp != &PL_sv_undef)
3706 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3707 "Compilation failed in require", unixname);
3711 LOADING_FILE_PROBE(unixname);
3713 /* prepare to compile file */
3715 if (path_is_absolute(name)) {
3716 /* At this point, name is SvPVX(sv) */
3718 tryrsfp = doopen_pm(sv);
3720 if (!tryrsfp && !(errno == EACCES && path_is_absolute(name))) {
3721 AV * const ar = GvAVn(PL_incgv);
3727 namesv = newSV_type(SVt_PV);
3728 for (i = 0; i <= AvFILL(ar); i++) {
3729 SV * const dirsv = *av_fetch(ar, i, TRUE);
3731 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3738 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3739 && !sv_isobject(loader))
3741 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3744 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3745 PTR2UV(SvRV(dirsv)), name);
3746 tryname = SvPVX_const(namesv);
3749 ENTER_with_name("call_INC");
3757 if (sv_isobject(loader))
3758 count = call_method("INC", G_ARRAY);
3760 count = call_sv(loader, G_ARRAY);
3770 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3771 && !isGV_with_GP(SvRV(arg))) {
3772 filter_cache = SvRV(arg);
3773 SvREFCNT_inc_simple_void_NN(filter_cache);
3780 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3784 if (isGV_with_GP(arg)) {
3785 IO * const io = GvIO((const GV *)arg);
3790 tryrsfp = IoIFP(io);
3791 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3792 PerlIO_close(IoOFP(io));
3803 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3805 SvREFCNT_inc_simple_void_NN(filter_sub);
3808 filter_state = SP[i];
3809 SvREFCNT_inc_simple_void(filter_state);
3813 if (!tryrsfp && (filter_cache || filter_sub)) {
3814 tryrsfp = PerlIO_open(BIT_BUCKET,
3822 LEAVE_with_name("call_INC");
3824 /* Adjust file name if the hook has set an %INC entry.
3825 This needs to happen after the FREETMPS above. */
3826 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3828 tryname = SvPV_nolen_const(*svp);
3835 filter_has_file = 0;
3837 SvREFCNT_dec(filter_cache);
3838 filter_cache = NULL;
3841 SvREFCNT_dec(filter_state);
3842 filter_state = NULL;
3845 SvREFCNT_dec(filter_sub);
3850 if (!path_is_absolute(name)
3856 dir = SvPV_const(dirsv, dirlen);
3863 if (((unixdirbuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))) == NULL)
3864 || ((unixdir = tounixpath(dir, unixdirbuf)) == NULL))
3866 sv_setpv(namesv, unixdir);
3867 sv_catpv(namesv, unixname);
3869 # ifdef __SYMBIAN32__
3870 if (PL_origfilename[0] &&
3871 PL_origfilename[1] == ':' &&
3872 !(dir[0] && dir[1] == ':'))
3873 Perl_sv_setpvf(aTHX_ namesv,
3878 Perl_sv_setpvf(aTHX_ namesv,
3882 /* The equivalent of
3883 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3884 but without the need to parse the format string, or
3885 call strlen on either pointer, and with the correct
3886 allocation up front. */
3888 char *tmp = SvGROW(namesv, dirlen + len + 2);
3890 memcpy(tmp, dir, dirlen);
3893 /* Avoid '<dir>//<file>' */
3894 if (!dirlen || *(tmp-1) != '/') {
3898 /* name came from an SV, so it will have a '\0' at the
3899 end that we can copy as part of this memcpy(). */
3900 memcpy(tmp, name, len + 1);
3902 SvCUR_set(namesv, dirlen + len + 1);
3907 TAINT_PROPER("require");
3908 tryname = SvPVX_const(namesv);
3909 tryrsfp = doopen_pm(namesv);
3911 if (tryname[0] == '.' && tryname[1] == '/') {
3913 while (*++tryname == '/') {}
3917 else if (errno == EMFILE || errno == EACCES) {
3918 /* no point in trying other paths if out of handles;
3919 * on the other hand, if we couldn't open one of the
3920 * files, then going on with the search could lead to
3921 * unexpected results; see perl #113422
3930 saved_errno = errno; /* sv_2mortal can realloc things */
3933 if (PL_op->op_type == OP_REQUIRE) {
3934 if(saved_errno == EMFILE || saved_errno == EACCES) {
3935 /* diag_listed_as: Can't locate %s */
3936 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
3938 if (namesv) { /* did we lookup @INC? */
3939 AV * const ar = GvAVn(PL_incgv);
3941 SV *const msg = newSVpvs_flags("", SVs_TEMP);
3942 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3943 for (i = 0; i <= AvFILL(ar); i++) {
3944 sv_catpvs(inc, " ");
3945 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3947 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
3948 const char *c, *e = name + len - 3;
3949 sv_catpv(msg, " (you may need to install the ");
3950 for (c = name; c < e; c++) {
3952 sv_catpvn(msg, "::", 2);
3955 sv_catpvn(msg, c, 1);
3958 sv_catpv(msg, " module)");
3960 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
3961 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
3963 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
3964 sv_catpv(msg, " (did you run h2ph?)");
3967 /* diag_listed_as: Can't locate %s */
3969 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
3973 DIE(aTHX_ "Can't locate %s", name);
3980 SETERRNO(0, SS_NORMAL);
3982 /* Assume success here to prevent recursive requirement. */
3983 /* name is never assigned to again, so len is still strlen(name) */
3984 /* Check whether a hook in @INC has already filled %INC */
3986 (void)hv_store(GvHVn(PL_incgv),
3987 unixname, unixlen, newSVpv(tryname,0),0);
3989 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3991 (void)hv_store(GvHVn(PL_incgv),
3992 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3995 ENTER_with_name("eval");
3997 SAVECOPFILE_FREE(&PL_compiling);
3998 CopFILE_set(&PL_compiling, tryname);
3999 lex_start(NULL, tryrsfp, 0);
4001 if (filter_sub || filter_cache) {
4002 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4003 than hanging another SV from it. In turn, filter_add() optionally
4004 takes the SV to use as the filter (or creates a new SV if passed
4005 NULL), so simply pass in whatever value filter_cache has. */
4006 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4007 IoLINES(datasv) = filter_has_file;
4008 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4009 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4012 /* switch to eval mode */
4013 PUSHBLOCK(cx, CXt_EVAL, SP);
4015 cx->blk_eval.retop = PL_op->op_next;
4017 SAVECOPLINE(&PL_compiling);
4018 CopLINE_set(&PL_compiling, 0);
4022 /* Store and reset encoding. */
4023 encoding = PL_encoding;
4026 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4027 op = DOCATCH(PL_eval_start);
4029 op = PL_op->op_next;
4031 /* Restore encoding. */
4032 PL_encoding = encoding;
4034 LOADED_FILE_PROBE(unixname);
4039 /* This is a op added to hold the hints hash for
4040 pp_entereval. The hash can be modified by the code
4041 being eval'ed, so we return a copy instead. */
4047 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4057 const I32 gimme = GIMME_V;
4058 const U32 was = PL_breakable_sub_gen;
4059 char tbuf[TYPE_DIGITS(long) + 12];
4060 bool saved_delete = FALSE;
4061 char *tmpbuf = tbuf;
4064 U32 seq, lex_flags = 0;
4065 HV *saved_hh = NULL;
4066 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4068 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4069 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4071 else if (PL_hints & HINT_LOCALIZE_HH || (
4072 PL_op->op_private & OPpEVAL_COPHH
4073 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4075 saved_hh = cop_hints_2hv(PL_curcop, 0);
4076 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4080 /* make sure we've got a plain PV (no overload etc) before testing
4081 * for taint. Making a copy here is probably overkill, but better
4082 * safe than sorry */
4084 const char * const p = SvPV_const(sv, len);
4086 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4087 lex_flags |= LEX_START_COPIED;
4089 if (bytes && SvUTF8(sv))
4090 SvPVbyte_force(sv, len);
4092 else if (bytes && SvUTF8(sv)) {
4093 /* Don't modify someone else's scalar */
4096 (void)sv_2mortal(sv);
4097 SvPVbyte_force(sv,len);
4098 lex_flags |= LEX_START_COPIED;
4101 TAINT_IF(SvTAINTED(sv));
4102 TAINT_PROPER("eval");
4104 ENTER_with_name("eval");
4105 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4106 ? LEX_IGNORE_UTF8_HINTS
4107 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4112 /* switch to eval mode */
4114 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4115 SV * const temp_sv = sv_newmortal();
4116 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4117 (unsigned long)++PL_evalseq,
4118 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4119 tmpbuf = SvPVX(temp_sv);
4120 len = SvCUR(temp_sv);
4123 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4124 SAVECOPFILE_FREE(&PL_compiling);
4125 CopFILE_set(&PL_compiling, tmpbuf+2);
4126 SAVECOPLINE(&PL_compiling);
4127 CopLINE_set(&PL_compiling, 1);
4128 /* special case: an eval '' executed within the DB package gets lexically
4129 * placed in the first non-DB CV rather than the current CV - this
4130 * allows the debugger to execute code, find lexicals etc, in the
4131 * scope of the code being debugged. Passing &seq gets find_runcv
4132 * to do the dirty work for us */
4133 runcv = find_runcv(&seq);
4135 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4137 cx->blk_eval.retop = PL_op->op_next;
4139 /* prepare to compile string */
4141 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4142 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4144 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4145 deleting the eval's FILEGV from the stash before gv_check() runs
4146 (i.e. before run-time proper). To work around the coredump that
4147 ensues, we always turn GvMULTI_on for any globals that were
4148 introduced within evals. See force_ident(). GSAR 96-10-12 */
4149 char *const safestr = savepvn(tmpbuf, len);
4150 SAVEDELETE(PL_defstash, safestr, len);
4151 saved_delete = TRUE;
4156 if (doeval(gimme, runcv, seq, saved_hh)) {
4157 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4158 ? (PERLDB_LINE || PERLDB_SAVESRC)
4159 : PERLDB_SAVESRC_NOSUBS) {
4160 /* Retain the filegv we created. */
4161 } else if (!saved_delete) {
4162 char *const safestr = savepvn(tmpbuf, len);
4163 SAVEDELETE(PL_defstash, safestr, len);
4165 return DOCATCH(PL_eval_start);
4167 /* We have already left the scope set up earlier thanks to the LEAVE
4169 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4170 ? (PERLDB_LINE || PERLDB_SAVESRC)
4171 : PERLDB_SAVESRC_INVALID) {
4172 /* Retain the filegv we created. */
4173 } else if (!saved_delete) {
4174 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4176 return PL_op->op_next;
4188 const U8 save_flags = PL_op -> op_flags;
4196 namesv = cx->blk_eval.old_namesv;
4197 retop = cx->blk_eval.retop;
4198 evalcv = cx->blk_eval.cv;
4201 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4203 PL_curpm = newpm; /* Don't pop $1 et al till now */
4206 assert(CvDEPTH(evalcv) == 1);
4208 CvDEPTH(evalcv) = 0;
4210 if (optype == OP_REQUIRE &&
4211 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4213 /* Unassume the success we assumed earlier. */
4214 (void)hv_delete(GvHVn(PL_incgv),
4215 SvPVX_const(namesv),
4216 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4218 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4220 /* die_unwind() did LEAVE, or we won't be here */
4223 LEAVE_with_name("eval");
4224 if (!(save_flags & OPf_SPECIAL)) {
4232 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4233 close to the related Perl_create_eval_scope. */
4235 Perl_delete_eval_scope(pTHX)
4246 LEAVE_with_name("eval_scope");
4247 PERL_UNUSED_VAR(newsp);
4248 PERL_UNUSED_VAR(gimme);
4249 PERL_UNUSED_VAR(optype);
4252 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4253 also needed by Perl_fold_constants. */
4255 Perl_create_eval_scope(pTHX_ U32 flags)
4258 const I32 gimme = GIMME_V;
4260 ENTER_with_name("eval_scope");
4263 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4266 PL_in_eval = EVAL_INEVAL;
4267 if (flags & G_KEEPERR)
4268 PL_in_eval |= EVAL_KEEPERR;
4271 if (flags & G_FAKINGEVAL) {
4272 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4280 PERL_CONTEXT * const cx = create_eval_scope(0);
4281 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4282 return DOCATCH(PL_op->op_next);
4297 PERL_UNUSED_VAR(optype);
4300 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4301 PL_curpm = newpm; /* Don't pop $1 et al till now */
4303 LEAVE_with_name("eval_scope");
4312 const I32 gimme = GIMME_V;
4314 ENTER_with_name("given");
4317 if (PL_op->op_targ) {
4318 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4319 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4320 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4327 PUSHBLOCK(cx, CXt_GIVEN, SP);
4340 PERL_UNUSED_CONTEXT;
4343 assert(CxTYPE(cx) == CXt_GIVEN);
4346 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4347 PL_curpm = newpm; /* Don't pop $1 et al till now */
4349 LEAVE_with_name("given");
4353 /* Helper routines used by pp_smartmatch */
4355 S_make_matcher(pTHX_ REGEXP *re)
4358 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4360 PERL_ARGS_ASSERT_MAKE_MATCHER;
4362 PM_SETRE(matcher, ReREFCNT_inc(re));
4364 SAVEFREEOP((OP *) matcher);
4365 ENTER_with_name("matcher"); SAVETMPS;
4371 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4376 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4378 PL_op = (OP *) matcher;
4381 (void) Perl_pp_match(aTHX);
4383 return (SvTRUEx(POPs));
4387 S_destroy_matcher(pTHX_ PMOP *matcher)
4391 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4392 PERL_UNUSED_ARG(matcher);
4395 LEAVE_with_name("matcher");
4398 /* Do a smart match */
4401 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4402 return do_smartmatch(NULL, NULL, 0);
4405 /* This version of do_smartmatch() implements the
4406 * table of smart matches that is found in perlsyn.
4409 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4414 bool object_on_left = FALSE;
4415 SV *e = TOPs; /* e is for 'expression' */
4416 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4418 /* Take care only to invoke mg_get() once for each argument.
4419 * Currently we do this by copying the SV if it's magical. */
4421 if (!copied && SvGMAGICAL(d))
4422 d = sv_mortalcopy(d);
4429 e = sv_mortalcopy(e);
4431 /* First of all, handle overload magic of the rightmost argument */
4434 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4435 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4437 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4444 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4447 SP -= 2; /* Pop the values */
4452 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4459 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4460 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4461 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4463 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4464 object_on_left = TRUE;
4467 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4469 if (object_on_left) {
4470 goto sm_any_sub; /* Treat objects like scalars */
4472 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4473 /* Test sub truth for each key */
4475 bool andedresults = TRUE;
4476 HV *hv = (HV*) SvRV(d);
4477 I32 numkeys = hv_iterinit(hv);
4478 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4481 while ( (he = hv_iternext(hv)) ) {
4482 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4483 ENTER_with_name("smartmatch_hash_key_test");
4486 PUSHs(hv_iterkeysv(he));
4488 c = call_sv(e, G_SCALAR);
4491 andedresults = FALSE;
4493 andedresults = SvTRUEx(POPs) && andedresults;
4495 LEAVE_with_name("smartmatch_hash_key_test");
4502 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4503 /* Test sub truth for each element */
4505 bool andedresults = TRUE;
4506 AV *av = (AV*) SvRV(d);
4507 const I32 len = av_len(av);
4508 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4511 for (i = 0; i <= len; ++i) {
4512 SV * const * const svp = av_fetch(av, i, FALSE);
4513 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4514 ENTER_with_name("smartmatch_array_elem_test");
4520 c = call_sv(e, G_SCALAR);
4523 andedresults = FALSE;
4525 andedresults = SvTRUEx(POPs) && andedresults;
4527 LEAVE_with_name("smartmatch_array_elem_test");
4536 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4537 ENTER_with_name("smartmatch_coderef");
4542 c = call_sv(e, G_SCALAR);
4546 else if (SvTEMP(TOPs))
4547 SvREFCNT_inc_void(TOPs);
4549 LEAVE_with_name("smartmatch_coderef");
4554 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4555 if (object_on_left) {
4556 goto sm_any_hash; /* Treat objects like scalars */
4558 else if (!SvOK(d)) {
4559 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4562 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4563 /* Check that the key-sets are identical */
4565 HV *other_hv = MUTABLE_HV(SvRV(d));
4567 bool other_tied = FALSE;
4568 U32 this_key_count = 0,
4569 other_key_count = 0;
4570 HV *hv = MUTABLE_HV(SvRV(e));
4572 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4573 /* Tied hashes don't know how many keys they have. */
4574 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4577 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4578 HV * const temp = other_hv;
4583 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4586 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4589 /* The hashes have the same number of keys, so it suffices
4590 to check that one is a subset of the other. */
4591 (void) hv_iterinit(hv);
4592 while ( (he = hv_iternext(hv)) ) {
4593 SV *key = hv_iterkeysv(he);
4595 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4598 if(!hv_exists_ent(other_hv, key, 0)) {
4599 (void) hv_iterinit(hv); /* reset iterator */
4605 (void) hv_iterinit(other_hv);
4606 while ( hv_iternext(other_hv) )
4610 other_key_count = HvUSEDKEYS(other_hv);
4612 if (this_key_count != other_key_count)
4617 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4618 AV * const other_av = MUTABLE_AV(SvRV(d));
4619 const I32 other_len = av_len(other_av) + 1;
4621 HV *hv = MUTABLE_HV(SvRV(e));
4623 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4624 for (i = 0; i < other_len; ++i) {
4625 SV ** const svp = av_fetch(other_av, i, FALSE);
4626 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4627 if (svp) { /* ??? When can this not happen? */
4628 if (hv_exists_ent(hv, *svp, 0))
4634 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4635 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4638 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4640 HV *hv = MUTABLE_HV(SvRV(e));
4642 (void) hv_iterinit(hv);
4643 while ( (he = hv_iternext(hv)) ) {
4644 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4645 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4646 (void) hv_iterinit(hv);
4647 destroy_matcher(matcher);
4651 destroy_matcher(matcher);
4657 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4658 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4665 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4666 if (object_on_left) {
4667 goto sm_any_array; /* Treat objects like scalars */
4669 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4670 AV * const other_av = MUTABLE_AV(SvRV(e));
4671 const I32 other_len = av_len(other_av) + 1;
4674 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4675 for (i = 0; i < other_len; ++i) {
4676 SV ** const svp = av_fetch(other_av, i, FALSE);
4678 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4679 if (svp) { /* ??? When can this not happen? */
4680 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4686 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4687 AV *other_av = MUTABLE_AV(SvRV(d));
4688 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4689 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4693 const I32 other_len = av_len(other_av);
4695 if (NULL == seen_this) {
4696 seen_this = newHV();
4697 (void) sv_2mortal(MUTABLE_SV(seen_this));
4699 if (NULL == seen_other) {
4700 seen_other = newHV();
4701 (void) sv_2mortal(MUTABLE_SV(seen_other));
4703 for(i = 0; i <= other_len; ++i) {
4704 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4705 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4707 if (!this_elem || !other_elem) {
4708 if ((this_elem && SvOK(*this_elem))
4709 || (other_elem && SvOK(*other_elem)))
4712 else if (hv_exists_ent(seen_this,
4713 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4714 hv_exists_ent(seen_other,
4715 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4717 if (*this_elem != *other_elem)
4721 (void)hv_store_ent(seen_this,
4722 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4724 (void)hv_store_ent(seen_other,
4725 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4731 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4732 (void) do_smartmatch(seen_this, seen_other, 0);
4734 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4743 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4744 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4747 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4748 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4751 for(i = 0; i <= this_len; ++i) {
4752 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4753 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4754 if (svp && matcher_matches_sv(matcher, *svp)) {
4755 destroy_matcher(matcher);
4759 destroy_matcher(matcher);
4763 else if (!SvOK(d)) {
4764 /* undef ~~ array */
4765 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4768 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4769 for (i = 0; i <= this_len; ++i) {
4770 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4771 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4772 if (!svp || !SvOK(*svp))
4781 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4783 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4784 for (i = 0; i <= this_len; ++i) {
4785 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4792 /* infinite recursion isn't supposed to happen here */
4793 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4794 (void) do_smartmatch(NULL, NULL, 1);
4796 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4805 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4806 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4807 SV *t = d; d = e; e = t;
4808 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4811 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4812 SV *t = d; d = e; e = t;
4813 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4814 goto sm_regex_array;
4817 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4819 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4821 PUSHs(matcher_matches_sv(matcher, d)
4824 destroy_matcher(matcher);
4829 /* See if there is overload magic on left */
4830 else if (object_on_left && SvAMAGIC(d)) {
4832 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4833 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4836 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4844 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4847 else if (!SvOK(d)) {
4848 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4849 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4854 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4855 DEBUG_M(if (SvNIOK(e))
4856 Perl_deb(aTHX_ " applying rule Any-Num\n");
4858 Perl_deb(aTHX_ " applying rule Num-numish\n");
4860 /* numeric comparison */
4863 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4864 (void) Perl_pp_i_eq(aTHX);
4866 (void) Perl_pp_eq(aTHX);
4874 /* As a last resort, use string comparison */
4875 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4878 return Perl_pp_seq(aTHX);
4885 const I32 gimme = GIMME_V;
4887 /* This is essentially an optimization: if the match
4888 fails, we don't want to push a context and then
4889 pop it again right away, so we skip straight
4890 to the op that follows the leavewhen.
4891 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4893 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4894 RETURNOP(cLOGOP->op_other->op_next);
4896 ENTER_with_name("when");
4899 PUSHBLOCK(cx, CXt_WHEN, SP);
4914 cxix = dopoptogiven(cxstack_ix);
4916 /* diag_listed_as: Can't "when" outside a topicalizer */
4917 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4918 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
4921 assert(CxTYPE(cx) == CXt_WHEN);
4924 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4925 PL_curpm = newpm; /* pop $1 et al */
4927 LEAVE_with_name("when");
4929 if (cxix < cxstack_ix)
4932 cx = &cxstack[cxix];
4934 if (CxFOREACH(cx)) {
4935 /* clear off anything above the scope we're re-entering */
4936 I32 inner = PL_scopestack_ix;
4939 if (PL_scopestack_ix < inner)
4940 leave_scope(PL_scopestack[PL_scopestack_ix]);
4941 PL_curcop = cx->blk_oldcop;
4943 return cx->blk_loop.my_op->op_nextop;
4946 RETURNOP(cx->blk_givwhen.leave_op);
4958 PERL_UNUSED_VAR(gimme);
4960 cxix = dopoptowhen(cxstack_ix);
4962 DIE(aTHX_ "Can't \"continue\" outside a when block");
4964 if (cxix < cxstack_ix)
4968 assert(CxTYPE(cx) == CXt_WHEN);
4971 PL_curpm = newpm; /* pop $1 et al */
4973 LEAVE_with_name("when");
4974 RETURNOP(cx->blk_givwhen.leave_op->op_next);
4983 cxix = dopoptogiven(cxstack_ix);
4985 DIE(aTHX_ "Can't \"break\" outside a given block");
4987 cx = &cxstack[cxix];
4989 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4991 if (cxix < cxstack_ix)
4994 /* Restore the sp at the time we entered the given block */
4997 return cx->blk_givwhen.leave_op;
5001 S_doparseform(pTHX_ SV *sv)
5004 char *s = SvPV(sv, len);
5006 char *base = NULL; /* start of current field */
5007 I32 skipspaces = 0; /* number of contiguous spaces seen */
5008 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5009 bool repeat = FALSE; /* ~~ seen on this line */
5010 bool postspace = FALSE; /* a text field may need right padding */
5013 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5015 bool ischop; /* it's a ^ rather than a @ */
5016 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5017 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5021 PERL_ARGS_ASSERT_DOPARSEFORM;
5024 Perl_croak(aTHX_ "Null picture in formline");
5026 if (SvTYPE(sv) >= SVt_PVMG) {
5027 /* This might, of course, still return NULL. */
5028 mg = mg_find(sv, PERL_MAGIC_fm);
5030 sv_upgrade(sv, SVt_PVMG);
5034 /* still the same as previously-compiled string? */
5035 SV *old = mg->mg_obj;
5036 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5037 && len == SvCUR(old)
5038 && strnEQ(SvPVX(old), SvPVX(sv), len)
5040 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5044 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5045 Safefree(mg->mg_ptr);
5051 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5052 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5055 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5056 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5060 /* estimate the buffer size needed */
5061 for (base = s; s <= send; s++) {
5062 if (*s == '\n' || *s == '@' || *s == '^')
5068 Newx(fops, maxops, U32);
5073 *fpc++ = FF_LINEMARK;
5074 noblank = repeat = FALSE;
5092 case ' ': case '\t':
5099 } /* else FALL THROUGH */
5107 *fpc++ = FF_LITERAL;
5115 *fpc++ = (U32)skipspaces;
5119 *fpc++ = FF_NEWLINE;
5123 arg = fpc - linepc + 1;
5130 *fpc++ = FF_LINEMARK;
5131 noblank = repeat = FALSE;
5140 ischop = s[-1] == '^';
5146 arg = (s - base) - 1;
5148 *fpc++ = FF_LITERAL;
5154 if (*s == '*') { /* @* or ^* */
5156 *fpc++ = 2; /* skip the @* or ^* */
5158 *fpc++ = FF_LINESNGL;
5161 *fpc++ = FF_LINEGLOB;
5163 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5164 arg = ischop ? FORM_NUM_BLANK : 0;
5169 const char * const f = ++s;
5172 arg |= FORM_NUM_POINT + (s - f);
5174 *fpc++ = s - base; /* fieldsize for FETCH */
5175 *fpc++ = FF_DECIMAL;
5177 unchopnum |= ! ischop;
5179 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5180 arg = ischop ? FORM_NUM_BLANK : 0;
5182 s++; /* skip the '0' first */
5186 const char * const f = ++s;
5189 arg |= FORM_NUM_POINT + (s - f);
5191 *fpc++ = s - base; /* fieldsize for FETCH */
5192 *fpc++ = FF_0DECIMAL;
5194 unchopnum |= ! ischop;
5196 else { /* text field */
5198 bool ismore = FALSE;
5201 while (*++s == '>') ;
5202 prespace = FF_SPACE;
5204 else if (*s == '|') {
5205 while (*++s == '|') ;
5206 prespace = FF_HALFSPACE;
5211 while (*++s == '<') ;
5214 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5218 *fpc++ = s - base; /* fieldsize for FETCH */
5220 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5223 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5237 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5240 mg->mg_ptr = (char *) fops;
5241 mg->mg_len = arg * sizeof(U32);
5242 mg->mg_obj = sv_copy;
5243 mg->mg_flags |= MGf_REFCOUNTED;
5245 if (unchopnum && repeat)
5246 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5253 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5255 /* Can value be printed in fldsize chars, using %*.*f ? */
5259 int intsize = fldsize - (value < 0 ? 1 : 0);
5261 if (frcsize & FORM_NUM_POINT)
5263 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5266 while (intsize--) pwr *= 10.0;
5267 while (frcsize--) eps /= 10.0;
5270 if (value + eps >= pwr)
5273 if (value - eps <= -pwr)
5280 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5283 SV * const datasv = FILTER_DATA(idx);
5284 const int filter_has_file = IoLINES(datasv);
5285 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5286 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5291 char *prune_from = NULL;
5292 bool read_from_cache = FALSE;
5296 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5298 assert(maxlen >= 0);
5301 /* I was having segfault trouble under Linux 2.2.5 after a
5302 parse error occured. (Had to hack around it with a test
5303 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5304 not sure where the trouble is yet. XXX */
5307 SV *const cache = datasv;
5310 const char *cache_p = SvPV(cache, cache_len);
5314 /* Running in block mode and we have some cached data already.
5316 if (cache_len >= umaxlen) {
5317 /* In fact, so much data we don't even need to call
5322 const char *const first_nl =
5323 (const char *)memchr(cache_p, '\n', cache_len);
5325 take = first_nl + 1 - cache_p;
5329 sv_catpvn(buf_sv, cache_p, take);
5330 sv_chop(cache, cache_p + take);
5331 /* Definitely not EOF */
5335 sv_catsv(buf_sv, cache);
5337 umaxlen -= cache_len;
5340 read_from_cache = TRUE;
5344 /* Filter API says that the filter appends to the contents of the buffer.
5345 Usually the buffer is "", so the details don't matter. But if it's not,
5346 then clearly what it contains is already filtered by this filter, so we
5347 don't want to pass it in a second time.
5348 I'm going to use a mortal in case the upstream filter croaks. */
5349 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5350 ? sv_newmortal() : buf_sv;
5351 SvUPGRADE(upstream, SVt_PV);
5353 if (filter_has_file) {
5354 status = FILTER_READ(idx+1, upstream, 0);
5357 if (filter_sub && status >= 0) {
5361 ENTER_with_name("call_filter_sub");
5366 DEFSV_set(upstream);
5370 PUSHs(filter_state);
5373 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5382 SV * const errsv = ERRSV;
5383 if (SvTRUE_NN(errsv))
5384 err = newSVsv(errsv);
5390 LEAVE_with_name("call_filter_sub");
5393 if (SvIsCOW(upstream)) sv_force_normal(upstream);
5394 if(!err && SvOK(upstream)) {
5395 got_p = SvPV(upstream, got_len);
5397 if (got_len > umaxlen) {
5398 prune_from = got_p + umaxlen;
5401 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5402 if (first_nl && first_nl + 1 < got_p + got_len) {
5403 /* There's a second line here... */
5404 prune_from = first_nl + 1;
5408 if (!err && prune_from) {
5409 /* Oh. Too long. Stuff some in our cache. */
5410 STRLEN cached_len = got_p + got_len - prune_from;
5411 SV *const cache = datasv;
5414 /* Cache should be empty. */
5415 assert(!SvCUR(cache));
5418 sv_setpvn(cache, prune_from, cached_len);
5419 /* If you ask for block mode, you may well split UTF-8 characters.
5420 "If it breaks, you get to keep both parts"
5421 (Your code is broken if you don't put them back together again
5422 before something notices.) */
5423 if (SvUTF8(upstream)) {
5426 SvCUR_set(upstream, got_len - cached_len);
5428 /* Can't yet be EOF */
5433 /* If they are at EOF but buf_sv has something in it, then they may never
5434 have touched the SV upstream, so it may be undefined. If we naively
5435 concatenate it then we get a warning about use of uninitialised value.
5437 if (!err && upstream != buf_sv &&
5438 (SvOK(upstream) || SvGMAGICAL(upstream))) {
5439 sv_catsv(buf_sv, upstream);
5443 IoLINES(datasv) = 0;
5445 SvREFCNT_dec(filter_state);
5446 IoTOP_GV(datasv) = NULL;
5449 SvREFCNT_dec(filter_sub);
5450 IoBOTTOM_GV(datasv) = NULL;
5452 filter_del(S_run_user_filter);
5458 if (status == 0 && read_from_cache) {
5459 /* If we read some data from the cache (and by getting here it implies
5460 that we emptied the cache) then we aren't yet at EOF, and mustn't
5461 report that to our caller. */
5467 /* perhaps someone can come up with a better name for
5468 this? it is not really "absolute", per se ... */
5470 S_path_is_absolute(const char *name)
5472 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5474 if (PERL_FILE_IS_ABSOLUTE(name)
5476 || (*name == '.' && ((name[1] == '/' ||
5477 (name[1] == '.' && name[2] == '/'))
5478 || (name[1] == '\\' ||
5479 ( name[1] == '.' && name[2] == '\\')))
5482 || (*name == '.' && (name[1] == '/' ||
5483 (name[1] == '.' && name[2] == '/')))
5495 * c-indentation-style: bsd
5497 * indent-tabs-mode: nil
5500 * ex: set ts=8 sts=4 sw=4 et: