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 ((struct regexp *)SvANY(new_re))->qr_anoncv
120 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
124 /* The match's LHS's get-magic might need to access this op's regexp
125 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
126 get-magic now before we replace the regexp. Hopefully this hack can
127 be replaced with the approach described at
128 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
130 if (pm->op_type == OP_MATCH) {
132 const bool was_tainted = PL_tainted;
133 if (pm->op_flags & OPf_STACKED)
135 else if (pm->op_private & OPpTARGET_MY)
136 lhs = PAD_SV(pm->op_targ);
139 /* Restore the previous value of PL_tainted (which may have been
140 modified by get-magic), to avoid incorrectly setting the
141 RXf_TAINTED flag further down. */
142 PL_tainted = was_tainted;
144 tmp = reg_temp_copy(NULL, new_re);
145 ReREFCNT_dec(new_re);
150 PM_SETRE(pm, new_re);
153 #ifndef INCOMPLETE_TAINTS
154 if (PL_tainting && PL_tainted) {
155 SvTAINTED_on((SV*)new_re);
156 RX_EXTFLAGS(new_re) |= RXf_TAINTED;
160 #if !defined(USE_ITHREADS)
161 /* can't change the optree at runtime either */
162 /* PMf_KEEP is handled differently under threads to avoid these problems */
163 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
165 if (pm->op_pmflags & PMf_KEEP) {
166 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
167 cLOGOP->op_first->op_next = PL_op->op_next;
180 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);
253 mPUSHi(saviters - 1);
255 (void)SvPOK_only_UTF8(targ);
258 /* update the taint state of various various variables in
259 * preparation for final exit.
260 * See "how taint works" above pp_subst() */
262 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
263 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
264 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
266 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
268 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
269 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
271 SvTAINTED_on(TOPs); /* taint return value */
272 /* needed for mg_set below */
273 PL_tainted = cBOOL(cx->sb_rxtainted &
274 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
277 /* PL_tainted must be correctly set for this mg_set */
280 LEAVE_SCOPE(cx->sb_oldsave);
282 RETURNOP(pm->op_next);
283 assert(0); /* NOTREACHED */
285 cx->sb_iters = saviters;
287 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
290 assert(!RX_SUBOFFSET(rx));
291 cx->sb_orig = orig = RX_SUBBEG(rx);
293 cx->sb_strend = s + (cx->sb_strend - m);
295 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
297 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
298 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
300 sv_catpvn_nomg(dstr, s, m-s);
302 cx->sb_s = RX_OFFS(rx)[0].end + orig;
303 { /* Update the pos() information. */
305 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
307 SvUPGRADE(sv, SVt_PVMG);
308 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
309 #ifdef PERL_OLD_COPY_ON_WRITE
311 sv_force_normal_flags(sv, 0);
313 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
316 mg->mg_len = m - orig;
319 (void)ReREFCNT_inc(rx);
320 /* update the taint state of various various variables in preparation
321 * for calling the code block.
322 * See "how taint works" above pp_subst() */
324 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
325 cx->sb_rxtainted |= SUBST_TAINT_PAT;
327 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
328 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
329 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
331 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
333 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
334 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
335 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
336 ? cx->sb_dstr : cx->sb_targ);
339 rxres_save(&cx->sb_rxres, rx);
341 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
345 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
350 PERL_ARGS_ASSERT_RXRES_SAVE;
353 if (!p || p[1] < RX_NPARENS(rx)) {
354 #ifdef PERL_OLD_COPY_ON_WRITE
355 i = 7 + (RX_NPARENS(rx)+1) * 2;
357 i = 6 + (RX_NPARENS(rx)+1) * 2;
366 /* what (if anything) to free on croak */
367 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
368 RX_MATCH_COPIED_off(rx);
370 #ifdef PERL_OLD_COPY_ON_WRITE
371 *p++ = PTR2UV(RX_SAVED_COPY(rx));
372 RX_SAVED_COPY(rx) = NULL;
375 *p++ = RX_NPARENS(rx);
376 *p++ = PTR2UV(RX_SUBBEG(rx));
377 *p++ = (UV)RX_SUBLEN(rx);
378 *p++ = (UV)RX_SUBOFFSET(rx);
379 *p++ = (UV)RX_SUBCOFFSET(rx);
380 for (i = 0; i <= RX_NPARENS(rx); ++i) {
381 *p++ = (UV)RX_OFFS(rx)[i].start;
382 *p++ = (UV)RX_OFFS(rx)[i].end;
387 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
392 PERL_ARGS_ASSERT_RXRES_RESTORE;
395 RX_MATCH_COPY_FREE(rx);
396 RX_MATCH_COPIED_set(rx, *p);
399 #ifdef PERL_OLD_COPY_ON_WRITE
400 if (RX_SAVED_COPY(rx))
401 SvREFCNT_dec (RX_SAVED_COPY(rx));
402 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
406 RX_NPARENS(rx) = *p++;
407 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
408 RX_SUBLEN(rx) = (I32)(*p++);
409 RX_SUBOFFSET(rx) = (I32)*p++;
410 RX_SUBCOFFSET(rx) = (I32)*p++;
411 for (i = 0; i <= RX_NPARENS(rx); ++i) {
412 RX_OFFS(rx)[i].start = (I32)(*p++);
413 RX_OFFS(rx)[i].end = (I32)(*p++);
418 S_rxres_free(pTHX_ void **rsp)
420 UV * const p = (UV*)*rsp;
422 PERL_ARGS_ASSERT_RXRES_FREE;
427 void *tmp = INT2PTR(char*,*p);
430 PoisonFree(*p, 1, sizeof(*p));
432 Safefree(INT2PTR(char*,*p));
434 #ifdef PERL_OLD_COPY_ON_WRITE
436 SvREFCNT_dec (INT2PTR(SV*,p[1]));
444 #define FORM_NUM_BLANK (1<<30)
445 #define FORM_NUM_POINT (1<<29)
449 dVAR; dSP; dMARK; dORIGMARK;
450 SV * const tmpForm = *++MARK;
451 SV *formsv; /* contains text of original format */
452 U32 *fpc; /* format ops program counter */
453 char *t; /* current append position in target string */
454 const char *f; /* current position in format string */
456 SV *sv = NULL; /* current item */
457 const char *item = NULL;/* string value of current item */
458 I32 itemsize = 0; /* length of current item, possibly truncated */
459 I32 fieldsize = 0; /* width of current field */
460 I32 lines = 0; /* number of lines that have been output */
461 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
462 const char *chophere = NULL; /* where to chop current item */
463 STRLEN linemark = 0; /* pos of start of line in output */
465 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
467 STRLEN linemax; /* estimate of output size in bytes */
468 bool item_is_utf8 = FALSE;
469 bool targ_is_utf8 = FALSE;
472 U8 *source; /* source of bytes to append */
473 STRLEN to_copy; /* how may bytes to append */
474 char trans; /* what chars to translate */
476 mg = doparseform(tmpForm);
478 fpc = (U32*)mg->mg_ptr;
479 /* the actual string the format was compiled from.
480 * with overload etc, this may not match tmpForm */
484 SvPV_force(PL_formtarget, len);
485 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
486 SvTAINTED_on(PL_formtarget);
487 if (DO_UTF8(PL_formtarget))
489 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
490 t = SvGROW(PL_formtarget, len + linemax + 1);
491 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
493 f = SvPV_const(formsv, len);
497 const char *name = "???";
500 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
501 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
502 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
503 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
504 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
506 case FF_CHECKNL: name = "CHECKNL"; break;
507 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
508 case FF_SPACE: name = "SPACE"; break;
509 case FF_HALFSPACE: name = "HALFSPACE"; break;
510 case FF_ITEM: name = "ITEM"; break;
511 case FF_CHOP: name = "CHOP"; break;
512 case FF_LINEGLOB: name = "LINEGLOB"; break;
513 case FF_NEWLINE: name = "NEWLINE"; break;
514 case FF_MORE: name = "MORE"; break;
515 case FF_LINEMARK: name = "LINEMARK"; break;
516 case FF_END: name = "END"; break;
517 case FF_0DECIMAL: name = "0DECIMAL"; break;
518 case FF_LINESNGL: name = "LINESNGL"; break;
521 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
523 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
527 linemark = t - SvPVX(PL_formtarget);
537 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
553 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
556 SvTAINTED_on(PL_formtarget);
562 const char *s = item = SvPV_const(sv, len);
565 itemsize = sv_len_utf8(sv);
566 if (itemsize != (I32)len) {
568 if (itemsize > fieldsize) {
569 itemsize = fieldsize;
570 itembytes = itemsize;
571 sv_pos_u2b(sv, &itembytes, 0);
575 send = chophere = s + itembytes;
585 sv_pos_b2u(sv, &itemsize);
589 item_is_utf8 = FALSE;
590 if (itemsize > fieldsize)
591 itemsize = fieldsize;
592 send = chophere = s + itemsize;
606 const char *s = item = SvPV_const(sv, len);
609 itemsize = sv_len_utf8(sv);
610 if (itemsize != (I32)len) {
612 if (itemsize <= fieldsize) {
613 const char *send = chophere = s + itemsize;
626 itemsize = fieldsize;
627 itembytes = itemsize;
628 sv_pos_u2b(sv, &itembytes, 0);
629 send = chophere = s + itembytes;
630 while (s < send || (s == send && isSPACE(*s))) {
640 if (strchr(PL_chopset, *s))
645 itemsize = chophere - item;
646 sv_pos_b2u(sv, &itemsize);
652 item_is_utf8 = FALSE;
653 if (itemsize <= fieldsize) {
654 const char *const send = chophere = s + itemsize;
667 itemsize = fieldsize;
668 send = chophere = s + itemsize;
669 while (s < send || (s == send && isSPACE(*s))) {
679 if (strchr(PL_chopset, *s))
684 itemsize = chophere - item;
690 arg = fieldsize - itemsize;
699 arg = fieldsize - itemsize;
713 /* convert to_copy from chars to bytes */
717 to_copy = s - source;
723 const char *s = chophere;
737 const bool oneline = fpc[-1] == FF_LINESNGL;
738 const char *s = item = SvPV_const(sv, len);
739 const char *const send = s + len;
741 item_is_utf8 = DO_UTF8(sv);
752 to_copy = s - SvPVX_const(sv) - 1;
766 /* append to_copy bytes from source to PL_formstring.
767 * item_is_utf8 implies source is utf8.
768 * if trans, translate certain characters during the copy */
773 SvCUR_set(PL_formtarget,
774 t - SvPVX_const(PL_formtarget));
776 if (targ_is_utf8 && !item_is_utf8) {
777 source = tmp = bytes_to_utf8(source, &to_copy);
779 if (item_is_utf8 && !targ_is_utf8) {
781 /* Upgrade targ to UTF8, and then we reduce it to
782 a problem we have a simple solution for.
783 Don't need get magic. */
784 sv_utf8_upgrade_nomg(PL_formtarget);
786 /* re-calculate linemark */
787 s = (U8*)SvPVX(PL_formtarget);
788 /* the bytes we initially allocated to append the
789 * whole line may have been gobbled up during the
790 * upgrade, so allocate a whole new line's worth
795 linemark = s - (U8*)SvPVX(PL_formtarget);
797 /* Easy. They agree. */
798 assert (item_is_utf8 == targ_is_utf8);
801 /* @* and ^* are the only things that can exceed
802 * the linemax, so grow by the output size, plus
803 * a whole new form's worth in case of any further
805 grow = linemax + to_copy;
807 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
808 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
810 Copy(source, t, to_copy, char);
812 /* blank out ~ or control chars, depending on trans.
813 * works on bytes not chars, so relies on not
814 * matching utf8 continuation bytes */
816 U8 *send = s + to_copy;
819 if (trans == '~' ? (ch == '~') :
832 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
840 #if defined(USE_LONG_DOUBLE)
842 ((arg & FORM_NUM_POINT) ?
843 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
846 ((arg & FORM_NUM_POINT) ?
847 "%#0*.*f" : "%0*.*f");
852 #if defined(USE_LONG_DOUBLE)
854 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
857 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
860 /* If the field is marked with ^ and the value is undefined,
862 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
870 /* overflow evidence */
871 if (num_overflow(value, fieldsize, arg)) {
877 /* Formats aren't yet marked for locales, so assume "yes". */
879 STORE_NUMERIC_STANDARD_SET_LOCAL();
880 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
881 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
882 RESTORE_NUMERIC_STANDARD();
889 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
897 if (arg) { /* repeat until fields exhausted? */
903 t = SvPVX(PL_formtarget) + linemark;
910 const char *s = chophere;
911 const char *send = item + len;
913 while (isSPACE(*s) && (s < send))
918 arg = fieldsize - itemsize;
925 if (strnEQ(s1," ",3)) {
926 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
937 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
939 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
941 SvUTF8_on(PL_formtarget);
942 FmLINES(PL_formtarget) += lines;
944 if (fpc[-1] == FF_BLANK)
945 RETURNOP(cLISTOP->op_first);
957 if (PL_stack_base + *PL_markstack_ptr == SP) {
959 if (GIMME_V == G_SCALAR)
961 RETURNOP(PL_op->op_next->op_next);
963 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
964 Perl_pp_pushmark(aTHX); /* push dst */
965 Perl_pp_pushmark(aTHX); /* push src */
966 ENTER_with_name("grep"); /* enter outer scope */
969 if (PL_op->op_private & OPpGREP_LEX)
970 SAVESPTR(PAD_SVl(PL_op->op_targ));
973 ENTER_with_name("grep_item"); /* enter inner scope */
976 src = PL_stack_base[*PL_markstack_ptr];
978 if (PL_op->op_private & OPpGREP_LEX)
979 PAD_SVl(PL_op->op_targ) = src;
984 if (PL_op->op_type == OP_MAPSTART)
985 Perl_pp_pushmark(aTHX); /* push top */
986 return ((LOGOP*)PL_op->op_next)->op_other;
992 const I32 gimme = GIMME_V;
993 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
999 /* first, move source pointer to the next item in the source list */
1000 ++PL_markstack_ptr[-1];
1002 /* if there are new items, push them into the destination list */
1003 if (items && gimme != G_VOID) {
1004 /* might need to make room back there first */
1005 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1006 /* XXX this implementation is very pessimal because the stack
1007 * is repeatedly extended for every set of items. Is possible
1008 * to do this without any stack extension or copying at all
1009 * by maintaining a separate list over which the map iterates
1010 * (like foreach does). --gsar */
1012 /* everything in the stack after the destination list moves
1013 * towards the end the stack by the amount of room needed */
1014 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1016 /* items to shift up (accounting for the moved source pointer) */
1017 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1019 /* This optimization is by Ben Tilly and it does
1020 * things differently from what Sarathy (gsar)
1021 * is describing. The downside of this optimization is
1022 * that leaves "holes" (uninitialized and hopefully unused areas)
1023 * to the Perl stack, but on the other hand this
1024 * shouldn't be a problem. If Sarathy's idea gets
1025 * implemented, this optimization should become
1026 * irrelevant. --jhi */
1028 shift = count; /* Avoid shifting too often --Ben Tilly */
1032 dst = (SP += shift);
1033 PL_markstack_ptr[-1] += shift;
1034 *PL_markstack_ptr += shift;
1038 /* copy the new items down to the destination list */
1039 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1040 if (gimme == G_ARRAY) {
1041 /* add returned items to the collection (making mortal copies
1042 * if necessary), then clear the current temps stack frame
1043 * *except* for those items. We do this splicing the items
1044 * into the start of the tmps frame (so some items may be on
1045 * the tmps stack twice), then moving PL_tmps_floor above
1046 * them, then freeing the frame. That way, the only tmps that
1047 * accumulate over iterations are the return values for map.
1048 * We have to do to this way so that everything gets correctly
1049 * freed if we die during the map.
1053 /* make space for the slice */
1054 EXTEND_MORTAL(items);
1055 tmpsbase = PL_tmps_floor + 1;
1056 Move(PL_tmps_stack + tmpsbase,
1057 PL_tmps_stack + tmpsbase + items,
1058 PL_tmps_ix - PL_tmps_floor,
1060 PL_tmps_ix += items;
1065 sv = sv_mortalcopy(sv);
1067 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1069 /* clear the stack frame except for the items */
1070 PL_tmps_floor += items;
1072 /* FREETMPS may have cleared the TEMP flag on some of the items */
1075 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1078 /* scalar context: we don't care about which values map returns
1079 * (we use undef here). And so we certainly don't want to do mortal
1080 * copies of meaningless values. */
1081 while (items-- > 0) {
1083 *dst-- = &PL_sv_undef;
1091 LEAVE_with_name("grep_item"); /* exit inner scope */
1094 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1096 (void)POPMARK; /* pop top */
1097 LEAVE_with_name("grep"); /* exit outer scope */
1098 (void)POPMARK; /* pop src */
1099 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1100 (void)POPMARK; /* pop dst */
1101 SP = PL_stack_base + POPMARK; /* pop original mark */
1102 if (gimme == G_SCALAR) {
1103 if (PL_op->op_private & OPpGREP_LEX) {
1104 SV* sv = sv_newmortal();
1105 sv_setiv(sv, items);
1113 else if (gimme == G_ARRAY)
1120 ENTER_with_name("grep_item"); /* enter inner scope */
1123 /* set $_ to the new source item */
1124 src = PL_stack_base[PL_markstack_ptr[-1]];
1126 if (PL_op->op_private & OPpGREP_LEX)
1127 PAD_SVl(PL_op->op_targ) = src;
1131 RETURNOP(cLOGOP->op_other);
1140 if (GIMME == G_ARRAY)
1142 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1143 return cLOGOP->op_other;
1153 if (GIMME == G_ARRAY) {
1154 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1158 SV * const targ = PAD_SV(PL_op->op_targ);
1161 if (PL_op->op_private & OPpFLIP_LINENUM) {
1162 if (GvIO(PL_last_in_gv)) {
1163 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1166 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1168 flip = SvIV(sv) == SvIV(GvSV(gv));
1174 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1175 if (PL_op->op_flags & OPf_SPECIAL) {
1183 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1186 sv_setpvs(TARG, "");
1192 /* This code tries to decide if "$left .. $right" should use the
1193 magical string increment, or if the range is numeric (we make
1194 an exception for .."0" [#18165]). AMS 20021031. */
1196 #define RANGE_IS_NUMERIC(left,right) ( \
1197 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1198 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1199 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1200 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1201 && (!SvOK(right) || looks_like_number(right))))
1207 if (GIMME == G_ARRAY) {
1213 if (RANGE_IS_NUMERIC(left,right)) {
1216 if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) ||
1217 (SvOK(right) && SvNV_nomg(right) > IV_MAX))
1218 DIE(aTHX_ "Range iterator outside integer range");
1219 i = SvIV_nomg(left);
1220 max = SvIV_nomg(right);
1229 SV * const sv = sv_2mortal(newSViv(i++));
1235 const char * const lpv = SvPV_nomg_const(left, llen);
1236 const char * const tmps = SvPV_nomg_const(right, len);
1238 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1239 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1241 if (strEQ(SvPVX_const(sv),tmps))
1243 sv = sv_2mortal(newSVsv(sv));
1250 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1254 if (PL_op->op_private & OPpFLIP_LINENUM) {
1255 if (GvIO(PL_last_in_gv)) {
1256 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1259 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1260 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1268 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1269 sv_catpvs(targ, "E0");
1279 static const char * const context_name[] = {
1281 NULL, /* CXt_WHEN never actually needs "block" */
1282 NULL, /* CXt_BLOCK never actually needs "block" */
1283 NULL, /* CXt_GIVEN never actually needs "block" */
1284 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1285 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1286 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1287 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1295 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1300 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1302 for (i = cxstack_ix; i >= 0; i--) {
1303 const PERL_CONTEXT * const cx = &cxstack[i];
1304 switch (CxTYPE(cx)) {
1310 /* diag_listed_as: Exiting subroutine via %s */
1311 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1312 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1313 if (CxTYPE(cx) == CXt_NULL)
1316 case CXt_LOOP_LAZYIV:
1317 case CXt_LOOP_LAZYSV:
1319 case CXt_LOOP_PLAIN:
1321 STRLEN cx_label_len = 0;
1322 U32 cx_label_flags = 0;
1323 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1325 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1328 (const U8*)cx_label, cx_label_len,
1329 (const U8*)label, len) == 0)
1331 (const U8*)label, len,
1332 (const U8*)cx_label, cx_label_len) == 0)
1333 : (len == cx_label_len && ((cx_label == label)
1334 || memEQ(cx_label, label, len))) )) {
1335 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1336 (long)i, cx_label));
1339 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1350 Perl_dowantarray(pTHX)
1353 const I32 gimme = block_gimme();
1354 return (gimme == G_VOID) ? G_SCALAR : gimme;
1358 Perl_block_gimme(pTHX)
1361 const I32 cxix = dopoptosub(cxstack_ix);
1365 switch (cxstack[cxix].blk_gimme) {
1373 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1374 assert(0); /* NOTREACHED */
1380 Perl_is_lvalue_sub(pTHX)
1383 const I32 cxix = dopoptosub(cxstack_ix);
1384 assert(cxix >= 0); /* We should only be called from inside subs */
1386 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1387 return CxLVAL(cxstack + cxix);
1392 /* only used by PUSHSUB */
1394 Perl_was_lvalue_sub(pTHX)
1397 const I32 cxix = dopoptosub(cxstack_ix-1);
1398 assert(cxix >= 0); /* We should only be called from inside subs */
1400 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1401 return CxLVAL(cxstack + cxix);
1407 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1412 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1414 for (i = startingblock; i >= 0; i--) {
1415 const PERL_CONTEXT * const cx = &cxstk[i];
1416 switch (CxTYPE(cx)) {
1422 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1430 S_dopoptoeval(pTHX_ I32 startingblock)
1434 for (i = startingblock; i >= 0; i--) {
1435 const PERL_CONTEXT *cx = &cxstack[i];
1436 switch (CxTYPE(cx)) {
1440 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1448 S_dopoptoloop(pTHX_ I32 startingblock)
1452 for (i = startingblock; i >= 0; i--) {
1453 const PERL_CONTEXT * const cx = &cxstack[i];
1454 switch (CxTYPE(cx)) {
1460 /* diag_listed_as: Exiting subroutine via %s */
1461 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1462 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1463 if ((CxTYPE(cx)) == CXt_NULL)
1466 case CXt_LOOP_LAZYIV:
1467 case CXt_LOOP_LAZYSV:
1469 case CXt_LOOP_PLAIN:
1470 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1478 S_dopoptogiven(pTHX_ I32 startingblock)
1482 for (i = startingblock; i >= 0; i--) {
1483 const PERL_CONTEXT *cx = &cxstack[i];
1484 switch (CxTYPE(cx)) {
1488 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1490 case CXt_LOOP_PLAIN:
1491 assert(!CxFOREACHDEF(cx));
1493 case CXt_LOOP_LAZYIV:
1494 case CXt_LOOP_LAZYSV:
1496 if (CxFOREACHDEF(cx)) {
1497 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1506 S_dopoptowhen(pTHX_ I32 startingblock)
1510 for (i = startingblock; i >= 0; i--) {
1511 const PERL_CONTEXT *cx = &cxstack[i];
1512 switch (CxTYPE(cx)) {
1516 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1524 Perl_dounwind(pTHX_ I32 cxix)
1529 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1532 while (cxstack_ix > cxix) {
1534 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1535 DEBUG_CX("UNWIND"); \
1536 /* Note: we don't need to restore the base context info till the end. */
1537 switch (CxTYPE(cx)) {
1540 continue; /* not break */
1548 case CXt_LOOP_LAZYIV:
1549 case CXt_LOOP_LAZYSV:
1551 case CXt_LOOP_PLAIN:
1562 PERL_UNUSED_VAR(optype);
1566 Perl_qerror(pTHX_ SV *err)
1570 PERL_ARGS_ASSERT_QERROR;
1573 if (PL_in_eval & EVAL_KEEPERR) {
1574 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1578 sv_catsv(ERRSV, err);
1581 sv_catsv(PL_errors, err);
1583 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1585 ++PL_parser->error_count;
1589 Perl_die_unwind(pTHX_ SV *msv)
1592 SV *exceptsv = sv_mortalcopy(msv);
1593 U8 in_eval = PL_in_eval;
1594 PERL_ARGS_ASSERT_DIE_UNWIND;
1601 * Historically, perl used to set ERRSV ($@) early in the die
1602 * process and rely on it not getting clobbered during unwinding.
1603 * That sucked, because it was liable to get clobbered, so the
1604 * setting of ERRSV used to emit the exception from eval{} has
1605 * been moved to much later, after unwinding (see just before
1606 * JMPENV_JUMP below). However, some modules were relying on the
1607 * early setting, by examining $@ during unwinding to use it as
1608 * a flag indicating whether the current unwinding was caused by
1609 * an exception. It was never a reliable flag for that purpose,
1610 * being totally open to false positives even without actual
1611 * clobberage, but was useful enough for production code to
1612 * semantically rely on it.
1614 * We'd like to have a proper introspective interface that
1615 * explicitly describes the reason for whatever unwinding
1616 * operations are currently in progress, so that those modules
1617 * work reliably and $@ isn't further overloaded. But we don't
1618 * have one yet. In its absence, as a stopgap measure, ERRSV is
1619 * now *additionally* set here, before unwinding, to serve as the
1620 * (unreliable) flag that it used to.
1622 * This behaviour is temporary, and should be removed when a
1623 * proper way to detect exceptional unwinding has been developed.
1624 * As of 2010-12, the authors of modules relying on the hack
1625 * are aware of the issue, because the modules failed on
1626 * perls 5.13.{1..7} which had late setting of $@ without this
1627 * early-setting hack.
1629 if (!(in_eval & EVAL_KEEPERR)) {
1630 SvTEMP_off(exceptsv);
1631 sv_setsv(ERRSV, exceptsv);
1634 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1635 && PL_curstackinfo->si_prev)
1647 JMPENV *restartjmpenv;
1650 if (cxix < cxstack_ix)
1653 POPBLOCK(cx,PL_curpm);
1654 if (CxTYPE(cx) != CXt_EVAL) {
1656 const char* message = SvPVx_const(exceptsv, msglen);
1657 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1658 PerlIO_write(Perl_error_log, message, msglen);
1662 namesv = cx->blk_eval.old_namesv;
1663 oldcop = cx->blk_oldcop;
1664 restartjmpenv = cx->blk_eval.cur_top_env;
1665 restartop = cx->blk_eval.retop;
1667 if (gimme == G_SCALAR)
1668 *++newsp = &PL_sv_undef;
1669 PL_stack_sp = newsp;
1673 /* LEAVE could clobber PL_curcop (see save_re_context())
1674 * XXX it might be better to find a way to avoid messing with
1675 * PL_curcop in save_re_context() instead, but this is a more
1676 * minimal fix --GSAR */
1679 if (optype == OP_REQUIRE) {
1680 (void)hv_store(GvHVn(PL_incgv),
1681 SvPVX_const(namesv),
1682 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1684 /* note that unlike pp_entereval, pp_require isn't
1685 * supposed to trap errors. So now that we've popped the
1686 * EVAL that pp_require pushed, and processed the error
1687 * message, rethrow the error */
1688 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1689 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1692 if (in_eval & EVAL_KEEPERR) {
1693 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1697 sv_setsv(ERRSV, exceptsv);
1699 PL_restartjmpenv = restartjmpenv;
1700 PL_restartop = restartop;
1702 assert(0); /* NOTREACHED */
1706 write_to_stderr(exceptsv);
1708 assert(0); /* NOTREACHED */
1713 dVAR; dSP; dPOPTOPssrl;
1714 if (SvTRUE(left) != SvTRUE(right))
1721 =for apidoc caller_cx
1723 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1724 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1725 information returned to Perl by C<caller>. Note that XSUBs don't get a
1726 stack frame, so C<caller_cx(0, NULL)> will return information for the
1727 immediately-surrounding Perl code.
1729 This function skips over the automatic calls to C<&DB::sub> made on the
1730 behalf of the debugger. If the stack frame requested was a sub called by
1731 C<DB::sub>, the return value will be the frame for the call to
1732 C<DB::sub>, since that has the correct line number/etc. for the call
1733 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1734 frame for the sub call itself.
1739 const PERL_CONTEXT *
1740 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1742 I32 cxix = dopoptosub(cxstack_ix);
1743 const PERL_CONTEXT *cx;
1744 const PERL_CONTEXT *ccstack = cxstack;
1745 const PERL_SI *top_si = PL_curstackinfo;
1748 /* we may be in a higher stacklevel, so dig down deeper */
1749 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1750 top_si = top_si->si_prev;
1751 ccstack = top_si->si_cxstack;
1752 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1756 /* caller() should not report the automatic calls to &DB::sub */
1757 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1758 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1762 cxix = dopoptosub_at(ccstack, cxix - 1);
1765 cx = &ccstack[cxix];
1766 if (dbcxp) *dbcxp = cx;
1768 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1769 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1770 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1771 field below is defined for any cx. */
1772 /* caller() should not report the automatic calls to &DB::sub */
1773 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1774 cx = &ccstack[dbcxix];
1784 const PERL_CONTEXT *cx;
1785 const PERL_CONTEXT *dbcx;
1787 const HEK *stash_hek;
1789 bool has_arg = MAXARG && TOPs;
1797 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1799 if (GIMME != G_ARRAY) {
1807 assert(CopSTASH(cx->blk_oldcop));
1808 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1809 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1811 if (GIMME != G_ARRAY) {
1814 PUSHs(&PL_sv_undef);
1817 sv_sethek(TARG, stash_hek);
1826 PUSHs(&PL_sv_undef);
1829 sv_sethek(TARG, stash_hek);
1832 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1833 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1836 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1837 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1838 /* So is ccstack[dbcxix]. */
1839 if (cvgv && isGV(cvgv)) {
1840 SV * const sv = newSV(0);
1841 gv_efullname3(sv, cvgv, NULL);
1843 PUSHs(boolSV(CxHASARGS(cx)));
1846 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1847 PUSHs(boolSV(CxHASARGS(cx)));
1851 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1854 gimme = (I32)cx->blk_gimme;
1855 if (gimme == G_VOID)
1856 PUSHs(&PL_sv_undef);
1858 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1859 if (CxTYPE(cx) == CXt_EVAL) {
1861 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1862 PUSHs(newSVpvn_flags(SvPVX(cx->blk_eval.cur_text),
1863 SvCUR(cx->blk_eval.cur_text)-2,
1864 SvUTF8(cx->blk_eval.cur_text)|SVs_TEMP));
1868 else if (cx->blk_eval.old_namesv) {
1869 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1872 /* eval BLOCK (try blocks have old_namesv == 0) */
1874 PUSHs(&PL_sv_undef);
1875 PUSHs(&PL_sv_undef);
1879 PUSHs(&PL_sv_undef);
1880 PUSHs(&PL_sv_undef);
1882 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1883 && CopSTASH_eq(PL_curcop, PL_debstash))
1885 AV * const ary = cx->blk_sub.argarray;
1886 const int off = AvARRAY(ary) - AvALLOC(ary);
1888 Perl_init_dbargs(aTHX);
1890 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1891 av_extend(PL_dbargs, AvFILLp(ary) + off);
1892 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1893 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1895 /* XXX only hints propagated via op_private are currently
1896 * visible (others are not easily accessible, since they
1897 * use the global PL_hints) */
1898 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1901 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1903 if (old_warnings == pWARN_NONE ||
1904 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1905 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1906 else if (old_warnings == pWARN_ALL ||
1907 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1908 /* Get the bit mask for $warnings::Bits{all}, because
1909 * it could have been extended by warnings::register */
1911 HV * const bits = get_hv("warnings::Bits", 0);
1912 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1913 mask = newSVsv(*bits_all);
1916 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1920 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1924 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1925 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1934 const char * const tmps =
1935 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
1936 sv_reset(tmps, CopSTASH(PL_curcop));
1941 /* like pp_nextstate, but used instead when the debugger is active */
1946 PL_curcop = (COP*)PL_op;
1947 TAINT_NOT; /* Each statement is presumed innocent */
1948 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1953 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1954 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1958 const I32 gimme = G_ARRAY;
1960 GV * const gv = PL_DBgv;
1961 CV * const cv = GvCV(gv);
1964 DIE(aTHX_ "No DB::DB routine defined");
1966 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1967 /* don't do recursive DB::DB call */
1981 (void)(*CvXSUB(cv))(aTHX_ cv);
1987 PUSHBLOCK(cx, CXt_SUB, SP);
1989 cx->blk_sub.retop = PL_op->op_next;
1992 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1993 RETURNOP(CvSTART(cv));
2001 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2004 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2006 if (flags & SVs_PADTMP) {
2007 flags &= ~SVs_PADTMP;
2010 if (gimme == G_SCALAR) {
2012 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2013 ? *SP : sv_mortalcopy(*SP);
2015 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2018 *++MARK = &PL_sv_undef;
2022 else if (gimme == G_ARRAY) {
2023 /* in case LEAVE wipes old return values */
2024 while (++MARK <= SP) {
2025 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2028 *++newsp = sv_mortalcopy(*MARK);
2029 TAINT_NOT; /* Each item is independent */
2032 /* When this function was called with MARK == newsp, we reach this
2033 * point with SP == newsp. */
2043 I32 gimme = GIMME_V;
2045 ENTER_with_name("block");
2048 PUSHBLOCK(cx, CXt_BLOCK, SP);
2061 if (PL_op->op_flags & OPf_SPECIAL) {
2062 cx = &cxstack[cxstack_ix];
2063 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2068 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2071 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2072 PL_curpm = newpm; /* Don't pop $1 et al till now */
2074 LEAVE_with_name("block");
2083 const I32 gimme = GIMME_V;
2084 void *itervar; /* location of the iteration variable */
2085 U8 cxtype = CXt_LOOP_FOR;
2087 ENTER_with_name("loop1");
2090 if (PL_op->op_targ) { /* "my" variable */
2091 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2092 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2093 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2094 SVs_PADSTALE, SVs_PADSTALE);
2096 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2098 itervar = PL_comppad;
2100 itervar = &PAD_SVl(PL_op->op_targ);
2103 else { /* symbol table variable */
2104 GV * const gv = MUTABLE_GV(POPs);
2105 SV** svp = &GvSV(gv);
2106 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2108 itervar = (void *)gv;
2111 if (PL_op->op_private & OPpITER_DEF)
2112 cxtype |= CXp_FOR_DEF;
2114 ENTER_with_name("loop2");
2116 PUSHBLOCK(cx, cxtype, SP);
2117 PUSHLOOP_FOR(cx, itervar, MARK);
2118 if (PL_op->op_flags & OPf_STACKED) {
2119 SV *maybe_ary = POPs;
2120 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2122 SV * const right = maybe_ary;
2125 if (RANGE_IS_NUMERIC(sv,right)) {
2126 cx->cx_type &= ~CXTYPEMASK;
2127 cx->cx_type |= CXt_LOOP_LAZYIV;
2128 /* Make sure that no-one re-orders cop.h and breaks our
2130 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2131 #ifdef NV_PRESERVES_UV
2132 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2133 (SvNV_nomg(sv) > (NV)IV_MAX)))
2135 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2136 (SvNV_nomg(right) < (NV)IV_MIN))))
2138 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2140 ((SvNV_nomg(sv) > 0) &&
2141 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2142 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2144 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2146 ((SvNV_nomg(right) > 0) &&
2147 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2148 (SvNV_nomg(right) > (NV)UV_MAX))
2151 DIE(aTHX_ "Range iterator outside integer range");
2152 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2153 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2155 /* for correct -Dstv display */
2156 cx->blk_oldsp = sp - PL_stack_base;
2160 cx->cx_type &= ~CXTYPEMASK;
2161 cx->cx_type |= CXt_LOOP_LAZYSV;
2162 /* Make sure that no-one re-orders cop.h and breaks our
2164 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2165 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2166 cx->blk_loop.state_u.lazysv.end = right;
2167 SvREFCNT_inc(right);
2168 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2169 /* This will do the upgrade to SVt_PV, and warn if the value
2170 is uninitialised. */
2171 (void) SvPV_nolen_const(right);
2172 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2173 to replace !SvOK() with a pointer to "". */
2175 SvREFCNT_dec(right);
2176 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2180 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2181 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2182 SvREFCNT_inc(maybe_ary);
2183 cx->blk_loop.state_u.ary.ix =
2184 (PL_op->op_private & OPpITER_REVERSED) ?
2185 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2189 else { /* iterating over items on the stack */
2190 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2191 if (PL_op->op_private & OPpITER_REVERSED) {
2192 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2195 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2206 const I32 gimme = GIMME_V;
2208 ENTER_with_name("loop1");
2210 ENTER_with_name("loop2");
2212 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2213 PUSHLOOP_PLAIN(cx, SP);
2228 assert(CxTYPE_is_LOOP(cx));
2230 newsp = PL_stack_base + cx->blk_loop.resetsp;
2233 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2236 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2237 PL_curpm = newpm; /* ... and pop $1 et al */
2239 LEAVE_with_name("loop2");
2240 LEAVE_with_name("loop1");
2246 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2247 PERL_CONTEXT *cx, PMOP *newpm)
2249 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2250 if (gimme == G_SCALAR) {
2251 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2253 const char *what = NULL;
2255 assert(MARK+1 == SP);
2256 if ((SvPADTMP(TOPs) ||
2257 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2260 !SvSMAGICAL(TOPs)) {
2262 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2263 : "a readonly value" : "a temporary";
2268 /* sub:lvalue{} will take us here. */
2277 "Can't return %s from lvalue subroutine", what
2282 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2283 if (!SvPADTMP(*SP)) {
2284 *++newsp = SvREFCNT_inc(*SP);
2289 /* FREETMPS could clobber it */
2290 SV *sv = SvREFCNT_inc(*SP);
2292 *++newsp = sv_mortalcopy(sv);
2299 ? sv_mortalcopy(*SP)
2301 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2306 *++newsp = &PL_sv_undef;
2308 if (CxLVAL(cx) & OPpDEREF) {
2311 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2315 else if (gimme == G_ARRAY) {
2316 assert (!(CxLVAL(cx) & OPpDEREF));
2317 if (ref || !CxLVAL(cx))
2318 while (++MARK <= SP)
2320 SvFLAGS(*MARK) & SVs_PADTMP
2321 ? sv_mortalcopy(*MARK)
2324 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2325 else while (++MARK <= SP) {
2326 if (*MARK != &PL_sv_undef
2328 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2333 /* Might be flattened array after $#array = */
2340 /* diag_listed_as: Can't return %s from lvalue subroutine */
2342 "Can't return a %s from lvalue subroutine",
2343 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2349 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2352 PL_stack_sp = newsp;
2359 bool popsub2 = FALSE;
2360 bool clear_errsv = FALSE;
2370 const I32 cxix = dopoptosub(cxstack_ix);
2373 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2374 * sort block, which is a CXt_NULL
2377 PL_stack_base[1] = *PL_stack_sp;
2378 PL_stack_sp = PL_stack_base + 1;
2382 DIE(aTHX_ "Can't return outside a subroutine");
2384 if (cxix < cxstack_ix)
2387 if (CxMULTICALL(&cxstack[cxix])) {
2388 gimme = cxstack[cxix].blk_gimme;
2389 if (gimme == G_VOID)
2390 PL_stack_sp = PL_stack_base;
2391 else if (gimme == G_SCALAR) {
2392 PL_stack_base[1] = *PL_stack_sp;
2393 PL_stack_sp = PL_stack_base + 1;
2399 switch (CxTYPE(cx)) {
2402 lval = !!CvLVALUE(cx->blk_sub.cv);
2403 retop = cx->blk_sub.retop;
2404 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2407 if (!(PL_in_eval & EVAL_KEEPERR))
2410 namesv = cx->blk_eval.old_namesv;
2411 retop = cx->blk_eval.retop;
2414 if (optype == OP_REQUIRE &&
2415 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2417 /* Unassume the success we assumed earlier. */
2418 (void)hv_delete(GvHVn(PL_incgv),
2419 SvPVX_const(namesv),
2420 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2422 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2427 retop = cx->blk_sub.retop;
2430 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2434 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2436 if (gimme == G_SCALAR) {
2439 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2440 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2441 && !SvMAGICAL(TOPs)) {
2442 *++newsp = SvREFCNT_inc(*SP);
2447 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2449 *++newsp = sv_mortalcopy(sv);
2453 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2454 && !SvMAGICAL(*SP)) {
2458 *++newsp = sv_mortalcopy(*SP);
2461 *++newsp = sv_mortalcopy(*SP);
2464 *++newsp = &PL_sv_undef;
2466 else if (gimme == G_ARRAY) {
2467 while (++MARK <= SP) {
2468 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2469 && !SvGMAGICAL(*MARK)
2470 ? *MARK : sv_mortalcopy(*MARK);
2471 TAINT_NOT; /* Each item is independent */
2474 PL_stack_sp = newsp;
2478 /* Stack values are safe: */
2481 POPSUB(cx,sv); /* release CV and @_ ... */
2485 PL_curpm = newpm; /* ... and pop $1 et al */
2494 /* This duplicates parts of pp_leavesub, so that it can share code with
2505 if (CxMULTICALL(&cxstack[cxstack_ix]))
2509 cxstack_ix++; /* temporarily protect top context */
2513 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2517 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2518 PL_curpm = newpm; /* ... and pop $1 et al */
2521 return cx->blk_sub.retop;
2525 S_unwind_loop(pTHX_ const char * const opname)
2529 if (PL_op->op_flags & OPf_SPECIAL) {
2530 cxix = dopoptoloop(cxstack_ix);
2532 /* diag_listed_as: Can't "last" outside a loop block */
2533 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2538 const char * const label =
2539 PL_op->op_flags & OPf_STACKED
2540 ? SvPV(TOPs,label_len)
2541 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2542 const U32 label_flags =
2543 PL_op->op_flags & OPf_STACKED
2545 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2547 cxix = dopoptolabel(label, label_len, label_flags);
2549 /* diag_listed_as: Label not found for "last %s" */
2550 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2552 SVfARG(PL_op->op_flags & OPf_STACKED
2553 && !SvGMAGICAL(TOPp1s)
2555 : newSVpvn_flags(label,
2557 label_flags | SVs_TEMP)));
2559 if (cxix < cxstack_ix)
2577 S_unwind_loop(aTHX_ "last");
2580 cxstack_ix++; /* temporarily protect top context */
2582 switch (CxTYPE(cx)) {
2583 case CXt_LOOP_LAZYIV:
2584 case CXt_LOOP_LAZYSV:
2586 case CXt_LOOP_PLAIN:
2588 newsp = PL_stack_base + cx->blk_loop.resetsp;
2589 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2593 nextop = cx->blk_sub.retop;
2597 nextop = cx->blk_eval.retop;
2601 nextop = cx->blk_sub.retop;
2604 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2608 PL_stack_sp = adjust_stack_on_leave(newsp, PL_stack_sp, MARK, gimme,
2609 pop2 == CXt_SUB ? SVs_TEMP : 0);
2613 /* Stack values are safe: */
2615 case CXt_LOOP_LAZYIV:
2616 case CXt_LOOP_PLAIN:
2617 case CXt_LOOP_LAZYSV:
2619 POPLOOP(cx); /* release loop vars ... */
2623 POPSUB(cx,sv); /* release CV and @_ ... */
2626 PL_curpm = newpm; /* ... and pop $1 et al */
2629 PERL_UNUSED_VAR(optype);
2630 PERL_UNUSED_VAR(gimme);
2638 const I32 inner = PL_scopestack_ix;
2640 S_unwind_loop(aTHX_ "next");
2642 /* clear off anything above the scope we're re-entering, but
2643 * save the rest until after a possible continue block */
2645 if (PL_scopestack_ix < inner)
2646 leave_scope(PL_scopestack[PL_scopestack_ix]);
2647 PL_curcop = cx->blk_oldcop;
2648 return (cx)->blk_loop.my_op->op_nextop;
2654 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2657 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2659 if (redo_op->op_type == OP_ENTER) {
2660 /* pop one less context to avoid $x being freed in while (my $x..) */
2662 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2663 redo_op = redo_op->op_next;
2667 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2668 LEAVE_SCOPE(oldsave);
2670 PL_curcop = cx->blk_oldcop;
2675 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2679 static const char too_deep[] = "Target of goto is too deeply nested";
2681 PERL_ARGS_ASSERT_DOFINDLABEL;
2684 Perl_croak(aTHX_ too_deep);
2685 if (o->op_type == OP_LEAVE ||
2686 o->op_type == OP_SCOPE ||
2687 o->op_type == OP_LEAVELOOP ||
2688 o->op_type == OP_LEAVESUB ||
2689 o->op_type == OP_LEAVETRY)
2691 *ops++ = cUNOPo->op_first;
2693 Perl_croak(aTHX_ too_deep);
2696 if (o->op_flags & OPf_KIDS) {
2698 /* First try all the kids at this level, since that's likeliest. */
2699 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2700 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2701 STRLEN kid_label_len;
2702 U32 kid_label_flags;
2703 const char *kid_label = CopLABEL_len_flags(kCOP,
2704 &kid_label_len, &kid_label_flags);
2706 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2709 (const U8*)kid_label, kid_label_len,
2710 (const U8*)label, len) == 0)
2712 (const U8*)label, len,
2713 (const U8*)kid_label, kid_label_len) == 0)
2714 : ( len == kid_label_len && ((kid_label == label)
2715 || memEQ(kid_label, label, len)))))
2719 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2720 if (kid == PL_lastgotoprobe)
2722 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2725 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2726 ops[-1]->op_type == OP_DBSTATE)
2731 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2745 #define GOTO_DEPTH 64
2746 OP *enterops[GOTO_DEPTH];
2747 const char *label = NULL;
2748 STRLEN label_len = 0;
2749 U32 label_flags = 0;
2750 const bool do_dump = (PL_op->op_type == OP_DUMP);
2751 static const char must_have_label[] = "goto must have label";
2753 if (PL_op->op_flags & OPf_STACKED) {
2754 SV * const sv = POPs;
2756 /* This egregious kludge implements goto &subroutine */
2757 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2760 CV *cv = MUTABLE_CV(SvRV(sv));
2767 if (!CvROOT(cv) && !CvXSUB(cv)) {
2768 const GV * const gv = CvGV(cv);
2772 /* autoloaded stub? */
2773 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2775 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2777 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2778 if (autogv && (cv = GvCV(autogv)))
2780 tmpstr = sv_newmortal();
2781 gv_efullname3(tmpstr, gv, NULL);
2782 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2784 DIE(aTHX_ "Goto undefined subroutine");
2787 /* First do some returnish stuff. */
2788 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2790 cxix = dopoptosub(cxstack_ix);
2792 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2793 if (cxix < cxstack_ix)
2797 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2798 if (CxTYPE(cx) == CXt_EVAL) {
2800 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2801 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2803 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2804 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2806 else if (CxMULTICALL(cx))
2807 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2808 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2809 /* put @_ back onto stack */
2810 AV* av = cx->blk_sub.argarray;
2812 items = AvFILLp(av) + 1;
2813 EXTEND(SP, items+1); /* @_ could have been extended. */
2814 Copy(AvARRAY(av), SP + 1, items, SV*);
2815 SvREFCNT_dec(GvAV(PL_defgv));
2816 GvAV(PL_defgv) = cx->blk_sub.savearray;
2818 /* abandon @_ if it got reified */
2823 av_extend(av, items-1);
2825 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2828 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2829 AV* const av = GvAV(PL_defgv);
2830 items = AvFILLp(av) + 1;
2831 EXTEND(SP, items+1); /* @_ could have been extended. */
2832 Copy(AvARRAY(av), SP + 1, items, SV*);
2836 if (CxTYPE(cx) == CXt_SUB &&
2837 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2838 SvREFCNT_dec(cx->blk_sub.cv);
2839 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2840 LEAVE_SCOPE(oldsave);
2842 /* A destructor called during LEAVE_SCOPE could have undefined
2843 * our precious cv. See bug #99850. */
2844 if (!CvROOT(cv) && !CvXSUB(cv)) {
2845 const GV * const gv = CvGV(cv);
2847 SV * const tmpstr = sv_newmortal();
2848 gv_efullname3(tmpstr, gv, NULL);
2849 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2852 DIE(aTHX_ "Goto undefined subroutine");
2855 /* Now do some callish stuff. */
2857 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2859 OP* const retop = cx->blk_sub.retop;
2860 SV **newsp PERL_UNUSED_DECL;
2861 I32 gimme PERL_UNUSED_DECL;
2864 for (index=0; index<items; index++)
2865 sv_2mortal(SP[-index]);
2868 /* XS subs don't have a CxSUB, so pop it */
2869 POPBLOCK(cx, PL_curpm);
2870 /* Push a mark for the start of arglist */
2873 (void)(*CvXSUB(cv))(aTHX_ cv);
2878 PADLIST * const padlist = CvPADLIST(cv);
2879 if (CxTYPE(cx) == CXt_EVAL) {
2880 PL_in_eval = CxOLD_IN_EVAL(cx);
2881 PL_eval_root = cx->blk_eval.old_eval_root;
2882 cx->cx_type = CXt_SUB;
2884 cx->blk_sub.cv = cv;
2885 cx->blk_sub.olddepth = CvDEPTH(cv);
2888 if (CvDEPTH(cv) < 2)
2889 SvREFCNT_inc_simple_void_NN(cv);
2891 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2892 sub_crush_depth(cv);
2893 pad_push(padlist, CvDEPTH(cv));
2895 PL_curcop = cx->blk_oldcop;
2897 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2900 AV *const av = MUTABLE_AV(PAD_SVl(0));
2902 cx->blk_sub.savearray = GvAV(PL_defgv);
2903 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2904 CX_CURPAD_SAVE(cx->blk_sub);
2905 cx->blk_sub.argarray = av;
2907 if (items >= AvMAX(av) + 1) {
2908 SV **ary = AvALLOC(av);
2909 if (AvARRAY(av) != ary) {
2910 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2913 if (items >= AvMAX(av) + 1) {
2914 AvMAX(av) = items - 1;
2915 Renew(ary,items+1,SV*);
2921 Copy(mark,AvARRAY(av),items,SV*);
2922 AvFILLp(av) = items - 1;
2923 assert(!AvREAL(av));
2925 /* transfer 'ownership' of refcnts to new @_ */
2935 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2936 Perl_get_db_sub(aTHX_ NULL, cv);
2938 CV * const gotocv = get_cvs("DB::goto", 0);
2940 PUSHMARK( PL_stack_sp );
2941 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2946 RETURNOP(CvSTART(cv));
2950 label = SvPV_const(sv, label_len);
2951 label_flags = SvUTF8(sv);
2954 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2955 label = cPVOP->op_pv;
2956 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2957 label_len = strlen(label);
2959 if (!(do_dump || label_len)) DIE(aTHX_ must_have_label);
2964 OP *gotoprobe = NULL;
2965 bool leaving_eval = FALSE;
2966 bool in_block = FALSE;
2967 PERL_CONTEXT *last_eval_cx = NULL;
2971 PL_lastgotoprobe = NULL;
2973 for (ix = cxstack_ix; ix >= 0; ix--) {
2975 switch (CxTYPE(cx)) {
2977 leaving_eval = TRUE;
2978 if (!CxTRYBLOCK(cx)) {
2979 gotoprobe = (last_eval_cx ?
2980 last_eval_cx->blk_eval.old_eval_root :
2985 /* else fall through */
2986 case CXt_LOOP_LAZYIV:
2987 case CXt_LOOP_LAZYSV:
2989 case CXt_LOOP_PLAIN:
2992 gotoprobe = cx->blk_oldcop->op_sibling;
2998 gotoprobe = cx->blk_oldcop->op_sibling;
3001 gotoprobe = PL_main_root;
3004 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3005 gotoprobe = CvROOT(cx->blk_sub.cv);
3011 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3014 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3015 CxTYPE(cx), (long) ix);
3016 gotoprobe = PL_main_root;
3020 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3021 enterops, enterops + GOTO_DEPTH);
3024 if (gotoprobe->op_sibling &&
3025 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3026 gotoprobe->op_sibling->op_sibling) {
3027 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3028 label, label_len, label_flags, enterops,
3029 enterops + GOTO_DEPTH);
3034 PL_lastgotoprobe = gotoprobe;
3037 DIE(aTHX_ "Can't find label %"SVf,
3038 SVfARG(newSVpvn_flags(label, label_len,
3039 SVs_TEMP | label_flags)));
3041 /* if we're leaving an eval, check before we pop any frames
3042 that we're not going to punt, otherwise the error
3045 if (leaving_eval && *enterops && enterops[1]) {
3047 for (i = 1; enterops[i]; i++)
3048 if (enterops[i]->op_type == OP_ENTERITER)
3049 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3052 if (*enterops && enterops[1]) {
3053 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3055 deprecate("\"goto\" to jump into a construct");
3058 /* pop unwanted frames */
3060 if (ix < cxstack_ix) {
3067 oldsave = PL_scopestack[PL_scopestack_ix];
3068 LEAVE_SCOPE(oldsave);
3071 /* push wanted frames */
3073 if (*enterops && enterops[1]) {
3074 OP * const oldop = PL_op;
3075 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3076 for (; enterops[ix]; ix++) {
3077 PL_op = enterops[ix];
3078 /* Eventually we may want to stack the needed arguments
3079 * for each op. For now, we punt on the hard ones. */
3080 if (PL_op->op_type == OP_ENTERITER)
3081 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3082 PL_op->op_ppaddr(aTHX);
3090 if (!retop) retop = PL_main_start;
3092 PL_restartop = retop;
3093 PL_do_undump = TRUE;
3097 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3098 PL_do_undump = FALSE;
3113 anum = 0; (void)POPs;
3118 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3120 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3123 PL_exit_flags |= PERL_EXIT_EXPECTED;
3125 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3126 if (anum || !(PL_minus_c && PL_madskills))
3131 PUSHs(&PL_sv_undef);
3138 S_save_lines(pTHX_ AV *array, SV *sv)
3140 const char *s = SvPVX_const(sv);
3141 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3144 PERL_ARGS_ASSERT_SAVE_LINES;
3146 while (s && s < send) {
3148 SV * const tmpstr = newSV_type(SVt_PVMG);
3150 t = (const char *)memchr(s, '\n', send - s);
3156 sv_setpvn(tmpstr, s, t - s);
3157 av_store(array, line++, tmpstr);
3165 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3167 0 is used as continue inside eval,
3169 3 is used for a die caught by an inner eval - continue inner loop
3171 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3172 establish a local jmpenv to handle exception traps.
3177 S_docatch(pTHX_ OP *o)
3181 OP * const oldop = PL_op;
3185 assert(CATCH_GET == TRUE);
3192 assert(cxstack_ix >= 0);
3193 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3194 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3199 /* die caught by an inner eval - continue inner loop */
3200 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3201 PL_restartjmpenv = NULL;
3202 PL_op = PL_restartop;
3211 assert(0); /* NOTREACHED */
3220 =for apidoc find_runcv
3222 Locate the CV corresponding to the currently executing sub or eval.
3223 If db_seqp is non_null, skip CVs that are in the DB package and populate
3224 *db_seqp with the cop sequence number at the point that the DB:: code was
3225 entered. (allows debuggers to eval in the scope of the breakpoint rather
3226 than in the scope of the debugger itself).
3232 Perl_find_runcv(pTHX_ U32 *db_seqp)
3234 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3237 /* If this becomes part of the API, it might need a better name. */
3239 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3246 *db_seqp = PL_curcop->cop_seq;
3247 for (si = PL_curstackinfo; si; si = si->si_prev) {
3249 for (ix = si->si_cxix; ix >= 0; ix--) {
3250 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3252 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3253 cv = cx->blk_sub.cv;
3254 /* skip DB:: code */
3255 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3256 *db_seqp = cx->blk_oldcop->cop_seq;
3260 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3261 cv = cx->blk_eval.cv;
3264 case FIND_RUNCV_padid_eq:
3266 || CvPADLIST(cv)->xpadl_id != (U32)arg) continue;
3268 case FIND_RUNCV_level_eq:
3269 if (level++ != arg) continue;
3277 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3281 /* Run yyparse() in a setjmp wrapper. Returns:
3282 * 0: yyparse() successful
3283 * 1: yyparse() failed
3287 S_try_yyparse(pTHX_ int gramtype)
3292 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3296 ret = yyparse(gramtype) ? 1 : 0;
3303 assert(0); /* NOTREACHED */
3310 /* Compile a require/do or an eval ''.
3312 * outside is the lexically enclosing CV (if any) that invoked us.
3313 * seq is the current COP scope value.
3314 * hh is the saved hints hash, if any.
3316 * Returns a bool indicating whether the compile was successful; if so,
3317 * PL_eval_start contains the first op of the compiled code; otherwise,
3320 * This function is called from two places: pp_require and pp_entereval.
3321 * These can be distinguished by whether PL_op is entereval.
3325 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3328 OP * const saveop = PL_op;
3329 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3330 COP * const oldcurcop = PL_curcop;
3331 bool in_require = (saveop->op_type == OP_REQUIRE);
3335 PL_in_eval = (in_require
3336 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3341 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3343 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3344 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3345 cxstack[cxstack_ix].blk_gimme = gimme;
3347 CvOUTSIDE_SEQ(evalcv) = seq;
3348 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3350 /* set up a scratch pad */
3352 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3353 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3357 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3359 /* make sure we compile in the right package */
3361 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3362 SAVEGENERICSV(PL_curstash);
3363 PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3365 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3366 SAVESPTR(PL_beginav);
3367 PL_beginav = newAV();
3368 SAVEFREESV(PL_beginav);
3369 SAVESPTR(PL_unitcheckav);
3370 PL_unitcheckav = newAV();
3371 SAVEFREESV(PL_unitcheckav);
3374 SAVEBOOL(PL_madskills);
3378 ENTER_with_name("evalcomp");
3379 SAVESPTR(PL_compcv);
3382 /* try to compile it */
3384 PL_eval_root = NULL;
3385 PL_curcop = &PL_compiling;
3386 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3387 PL_in_eval |= EVAL_KEEPERR;
3394 hv_clear(GvHV(PL_hintgv));
3397 PL_hints = saveop->op_private & OPpEVAL_COPHH
3398 ? oldcurcop->cop_hints : saveop->op_targ;
3400 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3401 SvREFCNT_dec(GvHV(PL_hintgv));
3402 GvHV(PL_hintgv) = hh;
3405 SAVECOMPILEWARNINGS();
3407 if (PL_dowarn & G_WARN_ALL_ON)
3408 PL_compiling.cop_warnings = pWARN_ALL ;
3409 else if (PL_dowarn & G_WARN_ALL_OFF)
3410 PL_compiling.cop_warnings = pWARN_NONE ;
3412 PL_compiling.cop_warnings = pWARN_STD ;
3415 PL_compiling.cop_warnings =
3416 DUP_WARNINGS(oldcurcop->cop_warnings);
3417 cophh_free(CopHINTHASH_get(&PL_compiling));
3418 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3419 /* The label, if present, is the first entry on the chain. So rather
3420 than writing a blank label in front of it (which involves an
3421 allocation), just use the next entry in the chain. */
3422 PL_compiling.cop_hints_hash
3423 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3424 /* Check the assumption that this removed the label. */
3425 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3428 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3431 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3433 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3434 * so honour CATCH_GET and trap it here if necessary */
3436 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3438 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3439 SV **newsp; /* Used by POPBLOCK. */
3441 I32 optype; /* Used by POPEVAL. */
3446 PERL_UNUSED_VAR(newsp);
3447 PERL_UNUSED_VAR(optype);
3449 /* note that if yystatus == 3, then the EVAL CX block has already
3450 * been popped, and various vars restored */
3452 if (yystatus != 3) {
3454 cv_forget_slab(evalcv);
3455 op_free(PL_eval_root);
3456 PL_eval_root = NULL;
3458 SP = PL_stack_base + POPMARK; /* pop original mark */
3459 POPBLOCK(cx,PL_curpm);
3461 namesv = cx->blk_eval.old_namesv;
3462 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3463 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3468 /* If cx is still NULL, it means that we didn't go in the
3469 * POPEVAL branch. */
3470 cx = &cxstack[cxstack_ix];
3471 assert(CxTYPE(cx) == CXt_EVAL);
3472 namesv = cx->blk_eval.old_namesv;
3474 (void)hv_store(GvHVn(PL_incgv),
3475 SvPVX_const(namesv),
3476 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3478 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3481 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3484 if (!*(SvPVx_nolen_const(ERRSV))) {
3485 sv_setpvs(ERRSV, "Compilation error");
3488 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3493 LEAVE_with_name("evalcomp");
3495 CopLINE_set(&PL_compiling, 0);
3496 SAVEFREEOP(PL_eval_root);
3497 cv_forget_slab(evalcv);
3499 DEBUG_x(dump_eval());
3501 /* Register with debugger: */
3502 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3503 CV * const cv = get_cvs("DB::postponed", 0);
3507 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3509 call_sv(MUTABLE_SV(cv), G_DISCARD);
3513 if (PL_unitcheckav) {
3514 OP *es = PL_eval_start;
3515 call_list(PL_scopestack_ix, PL_unitcheckav);
3519 /* compiled okay, so do it */
3521 CvDEPTH(evalcv) = 1;
3522 SP = PL_stack_base + POPMARK; /* pop original mark */
3523 PL_op = saveop; /* The caller may need it. */
3524 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3531 S_check_type_and_open(pTHX_ SV *name)
3534 const char *p = SvPV_nolen_const(name);
3535 const int st_rc = PerlLIO_stat(p, &st);
3537 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3539 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3543 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3544 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3546 return PerlIO_open(p, PERL_SCRIPT_MODE);
3550 #ifndef PERL_DISABLE_PMC
3552 S_doopen_pm(pTHX_ SV *name)
3555 const char *p = SvPV_const(name, namelen);
3557 PERL_ARGS_ASSERT_DOOPEN_PM;
3559 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3560 SV *const pmcsv = sv_newmortal();
3563 SvSetSV_nosteal(pmcsv,name);
3564 sv_catpvn(pmcsv, "c", 1);
3566 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3567 return check_type_and_open(pmcsv);
3569 return check_type_and_open(name);
3572 # define doopen_pm(name) check_type_and_open(name)
3573 #endif /* !PERL_DISABLE_PMC */
3585 int vms_unixname = 0;
3590 const char *tryname = NULL;
3592 const I32 gimme = GIMME_V;
3593 int filter_has_file = 0;
3594 PerlIO *tryrsfp = NULL;
3595 SV *filter_cache = NULL;
3596 SV *filter_state = NULL;
3597 SV *filter_sub = NULL;
3604 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3605 sv = sv_2mortal(new_version(sv));
3606 if (!sv_derived_from(PL_patchlevel, "version"))
3607 upg_version(PL_patchlevel, TRUE);
3608 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3609 if ( vcmp(sv,PL_patchlevel) <= 0 )
3610 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3611 SVfARG(sv_2mortal(vnormal(sv))),
3612 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3616 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3619 SV * const req = SvRV(sv);
3620 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3622 /* get the left hand term */
3623 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3625 first = SvIV(*av_fetch(lav,0,0));
3626 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3627 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3628 || av_len(lav) > 1 /* FP with > 3 digits */
3629 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3631 DIE(aTHX_ "Perl %"SVf" required--this is only "
3633 SVfARG(sv_2mortal(vnormal(req))),
3634 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3637 else { /* probably 'use 5.10' or 'use 5.8' */
3642 second = SvIV(*av_fetch(lav,1,0));
3644 second /= second >= 600 ? 100 : 10;
3645 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3646 (int)first, (int)second);
3647 upg_version(hintsv, TRUE);
3649 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3650 "--this is only %"SVf", stopped",
3651 SVfARG(sv_2mortal(vnormal(req))),
3652 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3653 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3661 name = SvPV_const(sv, len);
3662 if (!(name && len > 0 && *name))
3663 DIE(aTHX_ "Null filename used");
3664 TAINT_PROPER("require");
3668 /* The key in the %ENV hash is in the syntax of file passed as the argument
3669 * usually this is in UNIX format, but sometimes in VMS format, which
3670 * can result in a module being pulled in more than once.
3671 * To prevent this, the key must be stored in UNIX format if the VMS
3672 * name can be translated to UNIX.
3675 if ((unixnamebuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1))))
3676 && (unixname = tounixspec(name, unixnamebuf)) != NULL) {
3677 unixlen = strlen(unixname);
3683 /* if not VMS or VMS name can not be translated to UNIX, pass it
3686 unixname = (char *) name;
3689 if (PL_op->op_type == OP_REQUIRE) {
3690 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3691 unixname, unixlen, 0);
3693 if (*svp != &PL_sv_undef)
3696 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3697 "Compilation failed in require", unixname);
3701 LOADING_FILE_PROBE(unixname);
3703 /* prepare to compile file */
3705 if (path_is_absolute(name)) {
3706 /* At this point, name is SvPVX(sv) */
3708 tryrsfp = doopen_pm(sv);
3710 if (!tryrsfp && !(errno == EACCES && path_is_absolute(name))) {
3711 AV * const ar = GvAVn(PL_incgv);
3717 namesv = newSV_type(SVt_PV);
3718 for (i = 0; i <= AvFILL(ar); i++) {
3719 SV * const dirsv = *av_fetch(ar, i, TRUE);
3721 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3728 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3729 && !sv_isobject(loader))
3731 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3734 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3735 PTR2UV(SvRV(dirsv)), name);
3736 tryname = SvPVX_const(namesv);
3739 ENTER_with_name("call_INC");
3747 if (sv_isobject(loader))
3748 count = call_method("INC", G_ARRAY);
3750 count = call_sv(loader, G_ARRAY);
3760 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3761 && !isGV_with_GP(SvRV(arg))) {
3762 filter_cache = SvRV(arg);
3763 SvREFCNT_inc_simple_void_NN(filter_cache);
3770 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3774 if (isGV_with_GP(arg)) {
3775 IO * const io = GvIO((const GV *)arg);
3780 tryrsfp = IoIFP(io);
3781 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3782 PerlIO_close(IoOFP(io));
3793 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3795 SvREFCNT_inc_simple_void_NN(filter_sub);
3798 filter_state = SP[i];
3799 SvREFCNT_inc_simple_void(filter_state);
3803 if (!tryrsfp && (filter_cache || filter_sub)) {
3804 tryrsfp = PerlIO_open(BIT_BUCKET,
3812 LEAVE_with_name("call_INC");
3814 /* Adjust file name if the hook has set an %INC entry.
3815 This needs to happen after the FREETMPS above. */
3816 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3818 tryname = SvPV_nolen_const(*svp);
3825 filter_has_file = 0;
3827 SvREFCNT_dec(filter_cache);
3828 filter_cache = NULL;
3831 SvREFCNT_dec(filter_state);
3832 filter_state = NULL;
3835 SvREFCNT_dec(filter_sub);
3840 if (!path_is_absolute(name)
3846 dir = SvPV_const(dirsv, dirlen);
3853 if (((unixdirbuf = SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))) == NULL)
3854 || ((unixdir = tounixpath(dir, unixdirbuf)) == NULL))
3856 sv_setpv(namesv, unixdir);
3857 sv_catpv(namesv, unixname);
3859 # ifdef __SYMBIAN32__
3860 if (PL_origfilename[0] &&
3861 PL_origfilename[1] == ':' &&
3862 !(dir[0] && dir[1] == ':'))
3863 Perl_sv_setpvf(aTHX_ namesv,
3868 Perl_sv_setpvf(aTHX_ namesv,
3872 /* The equivalent of
3873 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3874 but without the need to parse the format string, or
3875 call strlen on either pointer, and with the correct
3876 allocation up front. */
3878 char *tmp = SvGROW(namesv, dirlen + len + 2);
3880 memcpy(tmp, dir, dirlen);
3883 /* name came from an SV, so it will have a '\0' at the
3884 end that we can copy as part of this memcpy(). */
3885 memcpy(tmp, name, len + 1);
3887 SvCUR_set(namesv, dirlen + len + 1);
3892 TAINT_PROPER("require");
3893 tryname = SvPVX_const(namesv);
3894 tryrsfp = doopen_pm(namesv);
3896 if (tryname[0] == '.' && tryname[1] == '/') {
3898 while (*++tryname == '/');
3902 else if (errno == EMFILE || errno == EACCES) {
3903 /* no point in trying other paths if out of handles;
3904 * on the other hand, if we couldn't open one of the
3905 * files, then going on with the search could lead to
3906 * unexpected results; see perl #113422
3915 saved_errno = errno; /* sv_2mortal can realloc things */
3918 if (PL_op->op_type == OP_REQUIRE) {
3919 if(saved_errno == EMFILE || saved_errno == EACCES) {
3920 /* diag_listed_as: Can't locate %s */
3921 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
3923 if (namesv) { /* did we lookup @INC? */
3924 AV * const ar = GvAVn(PL_incgv);
3926 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3927 for (i = 0; i <= AvFILL(ar); i++) {
3928 sv_catpvs(inc, " ");
3929 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3932 /* diag_listed_as: Can't locate %s */
3934 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3936 (len >= 2 && memEQ(name + len - 2, ".h", 3)
3937 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3938 (len >= 3 && memEQ(name + len - 3, ".ph", 4)
3939 ? " (did you run h2ph?)" : ""),
3944 DIE(aTHX_ "Can't locate %s", name);
3951 SETERRNO(0, SS_NORMAL);
3953 /* Assume success here to prevent recursive requirement. */
3954 /* name is never assigned to again, so len is still strlen(name) */
3955 /* Check whether a hook in @INC has already filled %INC */
3957 (void)hv_store(GvHVn(PL_incgv),
3958 unixname, unixlen, newSVpv(tryname,0),0);
3960 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3962 (void)hv_store(GvHVn(PL_incgv),
3963 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3966 ENTER_with_name("eval");
3968 SAVECOPFILE_FREE(&PL_compiling);
3969 CopFILE_set(&PL_compiling, tryname);
3970 lex_start(NULL, tryrsfp, 0);
3972 if (filter_sub || filter_cache) {
3973 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3974 than hanging another SV from it. In turn, filter_add() optionally
3975 takes the SV to use as the filter (or creates a new SV if passed
3976 NULL), so simply pass in whatever value filter_cache has. */
3977 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3978 IoLINES(datasv) = filter_has_file;
3979 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3980 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3983 /* switch to eval mode */
3984 PUSHBLOCK(cx, CXt_EVAL, SP);
3986 cx->blk_eval.retop = PL_op->op_next;
3988 SAVECOPLINE(&PL_compiling);
3989 CopLINE_set(&PL_compiling, 0);
3993 /* Store and reset encoding. */
3994 encoding = PL_encoding;
3997 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
3998 op = DOCATCH(PL_eval_start);
4000 op = PL_op->op_next;
4002 /* Restore encoding. */
4003 PL_encoding = encoding;
4005 LOADED_FILE_PROBE(unixname);
4010 /* This is a op added to hold the hints hash for
4011 pp_entereval. The hash can be modified by the code
4012 being eval'ed, so we return a copy instead. */
4018 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4028 const I32 gimme = GIMME_V;
4029 const U32 was = PL_breakable_sub_gen;
4030 char tbuf[TYPE_DIGITS(long) + 12];
4031 bool saved_delete = FALSE;
4032 char *tmpbuf = tbuf;
4035 U32 seq, lex_flags = 0;
4036 HV *saved_hh = NULL;
4037 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4039 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4040 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4042 else if (PL_hints & HINT_LOCALIZE_HH || (
4043 PL_op->op_private & OPpEVAL_COPHH
4044 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4046 saved_hh = cop_hints_2hv(PL_curcop, 0);
4047 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4051 /* make sure we've got a plain PV (no overload etc) before testing
4052 * for taint. Making a copy here is probably overkill, but better
4053 * safe than sorry */
4055 const char * const p = SvPV_const(sv, len);
4057 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4058 lex_flags |= LEX_START_COPIED;
4060 if (bytes && SvUTF8(sv))
4061 SvPVbyte_force(sv, len);
4063 else if (bytes && SvUTF8(sv)) {
4064 /* Don't modify someone else's scalar */
4067 (void)sv_2mortal(sv);
4068 SvPVbyte_force(sv,len);
4069 lex_flags |= LEX_START_COPIED;
4072 TAINT_IF(SvTAINTED(sv));
4073 TAINT_PROPER("eval");
4075 ENTER_with_name("eval");
4076 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4077 ? LEX_IGNORE_UTF8_HINTS
4078 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4083 /* switch to eval mode */
4085 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4086 SV * const temp_sv = sv_newmortal();
4087 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4088 (unsigned long)++PL_evalseq,
4089 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4090 tmpbuf = SvPVX(temp_sv);
4091 len = SvCUR(temp_sv);
4094 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4095 SAVECOPFILE_FREE(&PL_compiling);
4096 CopFILE_set(&PL_compiling, tmpbuf+2);
4097 SAVECOPLINE(&PL_compiling);
4098 CopLINE_set(&PL_compiling, 1);
4099 /* special case: an eval '' executed within the DB package gets lexically
4100 * placed in the first non-DB CV rather than the current CV - this
4101 * allows the debugger to execute code, find lexicals etc, in the
4102 * scope of the code being debugged. Passing &seq gets find_runcv
4103 * to do the dirty work for us */
4104 runcv = find_runcv(&seq);
4106 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4108 cx->blk_eval.retop = PL_op->op_next;
4110 /* prepare to compile string */
4112 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4113 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4115 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4116 deleting the eval's FILEGV from the stash before gv_check() runs
4117 (i.e. before run-time proper). To work around the coredump that
4118 ensues, we always turn GvMULTI_on for any globals that were
4119 introduced within evals. See force_ident(). GSAR 96-10-12 */
4120 char *const safestr = savepvn(tmpbuf, len);
4121 SAVEDELETE(PL_defstash, safestr, len);
4122 saved_delete = TRUE;
4127 if (doeval(gimme, runcv, seq, saved_hh)) {
4128 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4129 ? (PERLDB_LINE || PERLDB_SAVESRC)
4130 : PERLDB_SAVESRC_NOSUBS) {
4131 /* Retain the filegv we created. */
4132 } else if (!saved_delete) {
4133 char *const safestr = savepvn(tmpbuf, len);
4134 SAVEDELETE(PL_defstash, safestr, len);
4136 return DOCATCH(PL_eval_start);
4138 /* We have already left the scope set up earlier thanks to the LEAVE
4140 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4141 ? (PERLDB_LINE || PERLDB_SAVESRC)
4142 : PERLDB_SAVESRC_INVALID) {
4143 /* Retain the filegv we created. */
4144 } else if (!saved_delete) {
4145 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4147 return PL_op->op_next;
4159 const U8 save_flags = PL_op -> op_flags;
4167 namesv = cx->blk_eval.old_namesv;
4168 retop = cx->blk_eval.retop;
4169 evalcv = cx->blk_eval.cv;
4172 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4174 PL_curpm = newpm; /* Don't pop $1 et al till now */
4177 assert(CvDEPTH(evalcv) == 1);
4179 CvDEPTH(evalcv) = 0;
4181 if (optype == OP_REQUIRE &&
4182 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4184 /* Unassume the success we assumed earlier. */
4185 (void)hv_delete(GvHVn(PL_incgv),
4186 SvPVX_const(namesv),
4187 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4189 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4191 /* die_unwind() did LEAVE, or we won't be here */
4194 LEAVE_with_name("eval");
4195 if (!(save_flags & OPf_SPECIAL)) {
4203 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4204 close to the related Perl_create_eval_scope. */
4206 Perl_delete_eval_scope(pTHX)
4217 LEAVE_with_name("eval_scope");
4218 PERL_UNUSED_VAR(newsp);
4219 PERL_UNUSED_VAR(gimme);
4220 PERL_UNUSED_VAR(optype);
4223 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4224 also needed by Perl_fold_constants. */
4226 Perl_create_eval_scope(pTHX_ U32 flags)
4229 const I32 gimme = GIMME_V;
4231 ENTER_with_name("eval_scope");
4234 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4237 PL_in_eval = EVAL_INEVAL;
4238 if (flags & G_KEEPERR)
4239 PL_in_eval |= EVAL_KEEPERR;
4242 if (flags & G_FAKINGEVAL) {
4243 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4251 PERL_CONTEXT * const cx = create_eval_scope(0);
4252 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4253 return DOCATCH(PL_op->op_next);
4268 PERL_UNUSED_VAR(optype);
4271 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4272 PL_curpm = newpm; /* Don't pop $1 et al till now */
4274 LEAVE_with_name("eval_scope");
4283 const I32 gimme = GIMME_V;
4285 ENTER_with_name("given");
4288 if (PL_op->op_targ) {
4289 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4290 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4291 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4298 PUSHBLOCK(cx, CXt_GIVEN, SP);
4311 PERL_UNUSED_CONTEXT;
4314 assert(CxTYPE(cx) == CXt_GIVEN);
4317 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4318 PL_curpm = newpm; /* Don't pop $1 et al till now */
4320 LEAVE_with_name("given");
4324 /* Helper routines used by pp_smartmatch */
4326 S_make_matcher(pTHX_ REGEXP *re)
4329 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4331 PERL_ARGS_ASSERT_MAKE_MATCHER;
4333 PM_SETRE(matcher, ReREFCNT_inc(re));
4335 SAVEFREEOP((OP *) matcher);
4336 ENTER_with_name("matcher"); SAVETMPS;
4342 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4347 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4349 PL_op = (OP *) matcher;
4352 (void) Perl_pp_match(aTHX);
4354 return (SvTRUEx(POPs));
4358 S_destroy_matcher(pTHX_ PMOP *matcher)
4362 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4363 PERL_UNUSED_ARG(matcher);
4366 LEAVE_with_name("matcher");
4369 /* Do a smart match */
4372 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4373 return do_smartmatch(NULL, NULL, 0);
4376 /* This version of do_smartmatch() implements the
4377 * table of smart matches that is found in perlsyn.
4380 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4385 bool object_on_left = FALSE;
4386 SV *e = TOPs; /* e is for 'expression' */
4387 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4389 /* Take care only to invoke mg_get() once for each argument.
4390 * Currently we do this by copying the SV if it's magical. */
4392 if (!copied && SvGMAGICAL(d))
4393 d = sv_mortalcopy(d);
4400 e = sv_mortalcopy(e);
4402 /* First of all, handle overload magic of the rightmost argument */
4405 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4406 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4408 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4415 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4418 SP -= 2; /* Pop the values */
4423 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4430 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4431 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4432 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4434 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4435 object_on_left = TRUE;
4438 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4440 if (object_on_left) {
4441 goto sm_any_sub; /* Treat objects like scalars */
4443 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4444 /* Test sub truth for each key */
4446 bool andedresults = TRUE;
4447 HV *hv = (HV*) SvRV(d);
4448 I32 numkeys = hv_iterinit(hv);
4449 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4452 while ( (he = hv_iternext(hv)) ) {
4453 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4454 ENTER_with_name("smartmatch_hash_key_test");
4457 PUSHs(hv_iterkeysv(he));
4459 c = call_sv(e, G_SCALAR);
4462 andedresults = FALSE;
4464 andedresults = SvTRUEx(POPs) && andedresults;
4466 LEAVE_with_name("smartmatch_hash_key_test");
4473 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4474 /* Test sub truth for each element */
4476 bool andedresults = TRUE;
4477 AV *av = (AV*) SvRV(d);
4478 const I32 len = av_len(av);
4479 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4482 for (i = 0; i <= len; ++i) {
4483 SV * const * const svp = av_fetch(av, i, FALSE);
4484 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4485 ENTER_with_name("smartmatch_array_elem_test");
4491 c = call_sv(e, G_SCALAR);
4494 andedresults = FALSE;
4496 andedresults = SvTRUEx(POPs) && andedresults;
4498 LEAVE_with_name("smartmatch_array_elem_test");
4507 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4508 ENTER_with_name("smartmatch_coderef");
4513 c = call_sv(e, G_SCALAR);
4517 else if (SvTEMP(TOPs))
4518 SvREFCNT_inc_void(TOPs);
4520 LEAVE_with_name("smartmatch_coderef");
4525 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4526 if (object_on_left) {
4527 goto sm_any_hash; /* Treat objects like scalars */
4529 else if (!SvOK(d)) {
4530 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4533 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4534 /* Check that the key-sets are identical */
4536 HV *other_hv = MUTABLE_HV(SvRV(d));
4538 bool other_tied = FALSE;
4539 U32 this_key_count = 0,
4540 other_key_count = 0;
4541 HV *hv = MUTABLE_HV(SvRV(e));
4543 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4544 /* Tied hashes don't know how many keys they have. */
4545 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4548 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4549 HV * const temp = other_hv;
4554 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4557 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4560 /* The hashes have the same number of keys, so it suffices
4561 to check that one is a subset of the other. */
4562 (void) hv_iterinit(hv);
4563 while ( (he = hv_iternext(hv)) ) {
4564 SV *key = hv_iterkeysv(he);
4566 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4569 if(!hv_exists_ent(other_hv, key, 0)) {
4570 (void) hv_iterinit(hv); /* reset iterator */
4576 (void) hv_iterinit(other_hv);
4577 while ( hv_iternext(other_hv) )
4581 other_key_count = HvUSEDKEYS(other_hv);
4583 if (this_key_count != other_key_count)
4588 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4589 AV * const other_av = MUTABLE_AV(SvRV(d));
4590 const I32 other_len = av_len(other_av) + 1;
4592 HV *hv = MUTABLE_HV(SvRV(e));
4594 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4595 for (i = 0; i < other_len; ++i) {
4596 SV ** const svp = av_fetch(other_av, i, FALSE);
4597 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4598 if (svp) { /* ??? When can this not happen? */
4599 if (hv_exists_ent(hv, *svp, 0))
4605 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4606 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4609 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4611 HV *hv = MUTABLE_HV(SvRV(e));
4613 (void) hv_iterinit(hv);
4614 while ( (he = hv_iternext(hv)) ) {
4615 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4616 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4617 (void) hv_iterinit(hv);
4618 destroy_matcher(matcher);
4622 destroy_matcher(matcher);
4628 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4629 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4636 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4637 if (object_on_left) {
4638 goto sm_any_array; /* Treat objects like scalars */
4640 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4641 AV * const other_av = MUTABLE_AV(SvRV(e));
4642 const I32 other_len = av_len(other_av) + 1;
4645 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4646 for (i = 0; i < other_len; ++i) {
4647 SV ** const svp = av_fetch(other_av, i, FALSE);
4649 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4650 if (svp) { /* ??? When can this not happen? */
4651 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4657 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4658 AV *other_av = MUTABLE_AV(SvRV(d));
4659 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4660 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4664 const I32 other_len = av_len(other_av);
4666 if (NULL == seen_this) {
4667 seen_this = newHV();
4668 (void) sv_2mortal(MUTABLE_SV(seen_this));
4670 if (NULL == seen_other) {
4671 seen_other = newHV();
4672 (void) sv_2mortal(MUTABLE_SV(seen_other));
4674 for(i = 0; i <= other_len; ++i) {
4675 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4676 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4678 if (!this_elem || !other_elem) {
4679 if ((this_elem && SvOK(*this_elem))
4680 || (other_elem && SvOK(*other_elem)))
4683 else if (hv_exists_ent(seen_this,
4684 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4685 hv_exists_ent(seen_other,
4686 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4688 if (*this_elem != *other_elem)
4692 (void)hv_store_ent(seen_this,
4693 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4695 (void)hv_store_ent(seen_other,
4696 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4702 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4703 (void) do_smartmatch(seen_this, seen_other, 0);
4705 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4714 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4715 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4718 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4719 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4722 for(i = 0; i <= this_len; ++i) {
4723 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4724 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4725 if (svp && matcher_matches_sv(matcher, *svp)) {
4726 destroy_matcher(matcher);
4730 destroy_matcher(matcher);
4734 else if (!SvOK(d)) {
4735 /* undef ~~ array */
4736 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4739 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4740 for (i = 0; i <= this_len; ++i) {
4741 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4742 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4743 if (!svp || !SvOK(*svp))
4752 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4754 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4755 for (i = 0; i <= this_len; ++i) {
4756 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4763 /* infinite recursion isn't supposed to happen here */
4764 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4765 (void) do_smartmatch(NULL, NULL, 1);
4767 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4776 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4777 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4778 SV *t = d; d = e; e = t;
4779 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4782 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4783 SV *t = d; d = e; e = t;
4784 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4785 goto sm_regex_array;
4788 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4790 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4792 PUSHs(matcher_matches_sv(matcher, d)
4795 destroy_matcher(matcher);
4800 /* See if there is overload magic on left */
4801 else if (object_on_left && SvAMAGIC(d)) {
4803 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4804 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4807 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4815 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4818 else if (!SvOK(d)) {
4819 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4820 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4825 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4826 DEBUG_M(if (SvNIOK(e))
4827 Perl_deb(aTHX_ " applying rule Any-Num\n");
4829 Perl_deb(aTHX_ " applying rule Num-numish\n");
4831 /* numeric comparison */
4834 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4835 (void) Perl_pp_i_eq(aTHX);
4837 (void) Perl_pp_eq(aTHX);
4845 /* As a last resort, use string comparison */
4846 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4849 return Perl_pp_seq(aTHX);
4856 const I32 gimme = GIMME_V;
4858 /* This is essentially an optimization: if the match
4859 fails, we don't want to push a context and then
4860 pop it again right away, so we skip straight
4861 to the op that follows the leavewhen.
4862 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4864 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4865 RETURNOP(cLOGOP->op_other->op_next);
4867 ENTER_with_name("when");
4870 PUSHBLOCK(cx, CXt_WHEN, SP);
4885 cxix = dopoptogiven(cxstack_ix);
4887 /* diag_listed_as: Can't "when" outside a topicalizer */
4888 DIE(aTHX_ "Can't \"%s\" outside a topicalizer",
4889 PL_op->op_flags & OPf_SPECIAL ? "default" : "when");
4892 assert(CxTYPE(cx) == CXt_WHEN);
4895 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4896 PL_curpm = newpm; /* pop $1 et al */
4898 LEAVE_with_name("when");
4900 if (cxix < cxstack_ix)
4903 cx = &cxstack[cxix];
4905 if (CxFOREACH(cx)) {
4906 /* clear off anything above the scope we're re-entering */
4907 I32 inner = PL_scopestack_ix;
4910 if (PL_scopestack_ix < inner)
4911 leave_scope(PL_scopestack[PL_scopestack_ix]);
4912 PL_curcop = cx->blk_oldcop;
4914 return cx->blk_loop.my_op->op_nextop;
4917 RETURNOP(cx->blk_givwhen.leave_op);
4929 PERL_UNUSED_VAR(gimme);
4931 cxix = dopoptowhen(cxstack_ix);
4933 DIE(aTHX_ "Can't \"continue\" outside a when block");
4935 if (cxix < cxstack_ix)
4939 assert(CxTYPE(cx) == CXt_WHEN);
4942 PL_curpm = newpm; /* pop $1 et al */
4944 LEAVE_with_name("when");
4945 RETURNOP(cx->blk_givwhen.leave_op->op_next);
4954 cxix = dopoptogiven(cxstack_ix);
4956 DIE(aTHX_ "Can't \"break\" outside a given block");
4958 cx = &cxstack[cxix];
4960 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4962 if (cxix < cxstack_ix)
4965 /* Restore the sp at the time we entered the given block */
4968 return cx->blk_givwhen.leave_op;
4972 S_doparseform(pTHX_ SV *sv)
4975 char *s = SvPV(sv, len);
4977 char *base = NULL; /* start of current field */
4978 I32 skipspaces = 0; /* number of contiguous spaces seen */
4979 bool noblank = FALSE; /* ~ or ~~ seen on this line */
4980 bool repeat = FALSE; /* ~~ seen on this line */
4981 bool postspace = FALSE; /* a text field may need right padding */
4984 U32 *linepc = NULL; /* position of last FF_LINEMARK */
4986 bool ischop; /* it's a ^ rather than a @ */
4987 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
4988 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4992 PERL_ARGS_ASSERT_DOPARSEFORM;
4995 Perl_croak(aTHX_ "Null picture in formline");
4997 if (SvTYPE(sv) >= SVt_PVMG) {
4998 /* This might, of course, still return NULL. */
4999 mg = mg_find(sv, PERL_MAGIC_fm);
5001 sv_upgrade(sv, SVt_PVMG);
5005 /* still the same as previously-compiled string? */
5006 SV *old = mg->mg_obj;
5007 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5008 && len == SvCUR(old)
5009 && strnEQ(SvPVX(old), SvPVX(sv), len)
5011 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5015 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5016 Safefree(mg->mg_ptr);
5022 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5023 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5026 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5027 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5031 /* estimate the buffer size needed */
5032 for (base = s; s <= send; s++) {
5033 if (*s == '\n' || *s == '@' || *s == '^')
5039 Newx(fops, maxops, U32);
5044 *fpc++ = FF_LINEMARK;
5045 noblank = repeat = FALSE;
5063 case ' ': case '\t':
5070 } /* else FALL THROUGH */
5078 *fpc++ = FF_LITERAL;
5086 *fpc++ = (U32)skipspaces;
5090 *fpc++ = FF_NEWLINE;
5094 arg = fpc - linepc + 1;
5101 *fpc++ = FF_LINEMARK;
5102 noblank = repeat = FALSE;
5111 ischop = s[-1] == '^';
5117 arg = (s - base) - 1;
5119 *fpc++ = FF_LITERAL;
5125 if (*s == '*') { /* @* or ^* */
5127 *fpc++ = 2; /* skip the @* or ^* */
5129 *fpc++ = FF_LINESNGL;
5132 *fpc++ = FF_LINEGLOB;
5134 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5135 arg = ischop ? FORM_NUM_BLANK : 0;
5140 const char * const f = ++s;
5143 arg |= FORM_NUM_POINT + (s - f);
5145 *fpc++ = s - base; /* fieldsize for FETCH */
5146 *fpc++ = FF_DECIMAL;
5148 unchopnum |= ! ischop;
5150 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5151 arg = ischop ? FORM_NUM_BLANK : 0;
5153 s++; /* skip the '0' first */
5157 const char * const f = ++s;
5160 arg |= FORM_NUM_POINT + (s - f);
5162 *fpc++ = s - base; /* fieldsize for FETCH */
5163 *fpc++ = FF_0DECIMAL;
5165 unchopnum |= ! ischop;
5167 else { /* text field */
5169 bool ismore = FALSE;
5172 while (*++s == '>') ;
5173 prespace = FF_SPACE;
5175 else if (*s == '|') {
5176 while (*++s == '|') ;
5177 prespace = FF_HALFSPACE;
5182 while (*++s == '<') ;
5185 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5189 *fpc++ = s - base; /* fieldsize for FETCH */
5191 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5194 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5208 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5211 mg->mg_ptr = (char *) fops;
5212 mg->mg_len = arg * sizeof(U32);
5213 mg->mg_obj = sv_copy;
5214 mg->mg_flags |= MGf_REFCOUNTED;
5216 if (unchopnum && repeat)
5217 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5224 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5226 /* Can value be printed in fldsize chars, using %*.*f ? */
5230 int intsize = fldsize - (value < 0 ? 1 : 0);
5232 if (frcsize & FORM_NUM_POINT)
5234 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5237 while (intsize--) pwr *= 10.0;
5238 while (frcsize--) eps /= 10.0;
5241 if (value + eps >= pwr)
5244 if (value - eps <= -pwr)
5251 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5254 SV * const datasv = FILTER_DATA(idx);
5255 const int filter_has_file = IoLINES(datasv);
5256 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5257 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5262 char *prune_from = NULL;
5263 bool read_from_cache = FALSE;
5267 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5269 assert(maxlen >= 0);
5272 /* I was having segfault trouble under Linux 2.2.5 after a
5273 parse error occured. (Had to hack around it with a test
5274 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5275 not sure where the trouble is yet. XXX */
5278 SV *const cache = datasv;
5281 const char *cache_p = SvPV(cache, cache_len);
5285 /* Running in block mode and we have some cached data already.
5287 if (cache_len >= umaxlen) {
5288 /* In fact, so much data we don't even need to call
5293 const char *const first_nl =
5294 (const char *)memchr(cache_p, '\n', cache_len);
5296 take = first_nl + 1 - cache_p;
5300 sv_catpvn(buf_sv, cache_p, take);
5301 sv_chop(cache, cache_p + take);
5302 /* Definitely not EOF */
5306 sv_catsv(buf_sv, cache);
5308 umaxlen -= cache_len;
5311 read_from_cache = TRUE;
5315 /* Filter API says that the filter appends to the contents of the buffer.
5316 Usually the buffer is "", so the details don't matter. But if it's not,
5317 then clearly what it contains is already filtered by this filter, so we
5318 don't want to pass it in a second time.
5319 I'm going to use a mortal in case the upstream filter croaks. */
5320 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5321 ? sv_newmortal() : buf_sv;
5322 SvUPGRADE(upstream, SVt_PV);
5324 if (filter_has_file) {
5325 status = FILTER_READ(idx+1, upstream, 0);
5328 if (filter_sub && status >= 0) {
5332 ENTER_with_name("call_filter_sub");
5337 DEFSV_set(upstream);
5341 PUSHs(filter_state);
5344 count = call_sv(filter_sub, G_SCALAR|G_EVAL);
5352 else if (SvTRUE(ERRSV)) {
5353 err = newSVsv(ERRSV);
5359 LEAVE_with_name("call_filter_sub");
5362 if(!err && SvOK(upstream)) {
5363 got_p = SvPV(upstream, got_len);
5365 if (got_len > umaxlen) {
5366 prune_from = got_p + umaxlen;
5369 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5370 if (first_nl && first_nl + 1 < got_p + got_len) {
5371 /* There's a second line here... */
5372 prune_from = first_nl + 1;
5376 if (!err && prune_from) {
5377 /* Oh. Too long. Stuff some in our cache. */
5378 STRLEN cached_len = got_p + got_len - prune_from;
5379 SV *const cache = datasv;
5382 /* Cache should be empty. */
5383 assert(!SvCUR(cache));
5386 sv_setpvn(cache, prune_from, cached_len);
5387 /* If you ask for block mode, you may well split UTF-8 characters.
5388 "If it breaks, you get to keep both parts"
5389 (Your code is broken if you don't put them back together again
5390 before something notices.) */
5391 if (SvUTF8(upstream)) {
5394 SvCUR_set(upstream, got_len - cached_len);
5396 /* Can't yet be EOF */
5401 /* If they are at EOF but buf_sv has something in it, then they may never
5402 have touched the SV upstream, so it may be undefined. If we naively
5403 concatenate it then we get a warning about use of uninitialised value.
5405 if (!err && upstream != buf_sv &&
5406 (SvOK(upstream) || SvGMAGICAL(upstream))) {
5407 sv_catsv(buf_sv, upstream);
5411 IoLINES(datasv) = 0;
5413 SvREFCNT_dec(filter_state);
5414 IoTOP_GV(datasv) = NULL;
5417 SvREFCNT_dec(filter_sub);
5418 IoBOTTOM_GV(datasv) = NULL;
5420 filter_del(S_run_user_filter);
5426 if (status == 0 && read_from_cache) {
5427 /* If we read some data from the cache (and by getting here it implies
5428 that we emptied the cache) then we aren't yet at EOF, and mustn't
5429 report that to our caller. */
5435 /* perhaps someone can come up with a better name for
5436 this? it is not really "absolute", per se ... */
5438 S_path_is_absolute(const char *name)
5440 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5442 if (PERL_FILE_IS_ABSOLUTE(name)
5444 || (*name == '.' && ((name[1] == '/' ||
5445 (name[1] == '.' && name[2] == '/'))
5446 || (name[1] == '\\' ||
5447 ( name[1] == '.' && name[2] == '\\')))
5450 || (*name == '.' && (name[1] == '/' ||
5451 (name[1] == '.' && name[2] == '/')))
5463 * c-indentation-style: bsd
5465 * indent-tabs-mode: nil
5468 * ex: set ts=8 sts=4 sw=4 et: