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))
45 const PERL_CONTEXT *cx;
48 if (PL_op->op_private & OPpOFFBYONE) {
49 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
52 cxix = dopoptosub(cxstack_ix);
58 switch (cx->blk_gimme) {
77 PMOP *pm = (PMOP*)cLOGOP->op_other;
82 const regexp_engine *eng;
83 bool is_bare_re= FALSE;
85 if (PL_op->op_flags & OPf_STACKED) {
95 /* prevent recompiling under /o and ithreads. */
96 #if defined(USE_ITHREADS)
97 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
104 assert (re != (REGEXP*) &PL_sv_undef);
105 eng = re ? RX_ENGINE(re) : current_re_engine();
108 In the below logic: these are basically the same - check if this regcomp is part of a split.
110 (PL_op->op_pmflags & PMf_split )
111 (PL_op->op_next->op_type == OP_PUSHRE)
113 We could add a new mask for this and copy the PMf_split, if we did
114 some bit definition fiddling first.
116 For now we leave this
119 new_re = (eng->op_comp
121 : &Perl_re_op_compile
122 )(aTHX_ args, nargs, pm->op_code_list, eng, re,
124 (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK),
126 (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
128 if (pm->op_pmflags & PMf_HAS_CV)
129 ReANY(new_re)->qr_anoncv
130 = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
134 /* The match's LHS's get-magic might need to access this op's regexp
135 (e.g. $' =~ /$re/ while foo; see bug 70764). So we must call
136 get-magic now before we replace the regexp. Hopefully this hack can
137 be replaced with the approach described at
138 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03/msg122415.html
140 if (pm->op_type == OP_MATCH) {
142 const bool was_tainted = TAINT_get;
143 if (pm->op_flags & OPf_STACKED)
145 else if (pm->op_targ)
146 lhs = PAD_SV(pm->op_targ);
149 /* Restore the previous value of PL_tainted (which may have been
150 modified by get-magic), to avoid incorrectly setting the
151 RXf_TAINTED flag with RX_TAINT_on further down. */
152 TAINT_set(was_tainted);
153 #ifdef NO_TAINT_SUPPORT
154 PERL_UNUSED_VAR(was_tainted);
157 tmp = reg_temp_copy(NULL, new_re);
158 ReREFCNT_dec(new_re);
164 PM_SETRE(pm, new_re);
168 if (TAINTING_get && TAINT_get) {
169 SvTAINTED_on((SV*)new_re);
173 #if !defined(USE_ITHREADS)
174 /* can't change the optree at runtime either */
175 /* PMf_KEEP is handled differently under threads to avoid these problems */
176 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
178 if (pm->op_pmflags & PMf_KEEP) {
179 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
180 cLOGOP->op_first->op_next = PL_op->op_next;
192 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
193 PMOP * const pm = (PMOP*) cLOGOP->op_other;
194 SV * const dstr = cx->sb_dstr;
197 char *orig = cx->sb_orig;
198 REGEXP * const rx = cx->sb_rx;
200 REGEXP *old = PM_GETRE(pm);
207 PM_SETRE(pm,ReREFCNT_inc(rx));
210 rxres_restore(&cx->sb_rxres, rx);
212 if (cx->sb_iters++) {
213 const SSize_t saviters = cx->sb_iters;
214 if (cx->sb_iters > cx->sb_maxiters)
215 DIE(aTHX_ "Substitution loop");
217 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
219 /* See "how taint works" above pp_subst() */
221 cx->sb_rxtainted |= SUBST_TAINT_REPL;
222 sv_catsv_nomg(dstr, POPs);
223 if (CxONCE(cx) || s < orig ||
224 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
225 (s == m), cx->sb_targ, NULL,
226 (REXEC_IGNOREPOS|REXEC_NOT_FIRST|REXEC_FAIL_ON_UNDERFLOW)))
228 SV *targ = cx->sb_targ;
230 assert(cx->sb_strend >= s);
231 if(cx->sb_strend > s) {
232 if (DO_UTF8(dstr) && !SvUTF8(targ))
233 sv_catpvn_nomg_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
235 sv_catpvn_nomg(dstr, s, cx->sb_strend - s);
237 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
238 cx->sb_rxtainted |= SUBST_TAINT_PAT;
240 if (pm->op_pmflags & PMf_NONDESTRUCT) {
242 /* From here on down we're using the copy, and leaving the
243 original untouched. */
247 SV_CHECK_THINKFIRST_COW_DROP(targ);
248 if (isGV(targ)) Perl_croak_no_modify();
250 SvPV_set(targ, SvPVX(dstr));
251 SvCUR_set(targ, SvCUR(dstr));
252 SvLEN_set(targ, SvLEN(dstr));
255 SvPV_set(dstr, NULL);
258 mPUSHi(saviters - 1);
260 (void)SvPOK_only_UTF8(targ);
263 /* update the taint state of various various variables in
264 * preparation for final exit.
265 * See "how taint works" above pp_subst() */
267 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
268 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
269 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
271 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
273 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
274 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
276 SvTAINTED_on(TOPs); /* taint return value */
277 /* needed for mg_set below */
279 cBOOL(cx->sb_rxtainted &
280 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
284 /* PL_tainted must be correctly set for this mg_set */
287 LEAVE_SCOPE(cx->sb_oldsave);
290 RETURNOP(pm->op_next);
291 NOT_REACHED; /* NOTREACHED */
293 cx->sb_iters = saviters;
295 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
298 assert(!RX_SUBOFFSET(rx));
299 cx->sb_orig = orig = RX_SUBBEG(rx);
301 cx->sb_strend = s + (cx->sb_strend - m);
303 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
305 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
306 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
308 sv_catpvn_nomg(dstr, s, m-s);
310 cx->sb_s = RX_OFFS(rx)[0].end + orig;
311 { /* Update the pos() information. */
313 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
316 /* the string being matched against may no longer be a string,
317 * e.g. $_=0; s/.../$_++/ge */
320 SvPV_force_nomg_nolen(sv);
322 if (!(mg = mg_find_mglob(sv))) {
323 mg = sv_magicext_mglob(sv);
325 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
328 (void)ReREFCNT_inc(rx);
329 /* update the taint state of various various variables in preparation
330 * for calling the code block.
331 * See "how taint works" above pp_subst() */
333 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
334 cx->sb_rxtainted |= SUBST_TAINT_PAT;
336 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
337 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
338 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
340 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
342 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
343 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
344 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
345 ? cx->sb_dstr : cx->sb_targ);
348 rxres_save(&cx->sb_rxres, rx);
350 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
354 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
359 PERL_ARGS_ASSERT_RXRES_SAVE;
362 if (!p || p[1] < RX_NPARENS(rx)) {
364 i = 7 + (RX_NPARENS(rx)+1) * 2;
366 i = 6 + (RX_NPARENS(rx)+1) * 2;
375 /* what (if anything) to free on croak */
376 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
377 RX_MATCH_COPIED_off(rx);
378 *p++ = RX_NPARENS(rx);
381 *p++ = PTR2UV(RX_SAVED_COPY(rx));
382 RX_SAVED_COPY(rx) = NULL;
385 *p++ = PTR2UV(RX_SUBBEG(rx));
386 *p++ = (UV)RX_SUBLEN(rx);
387 *p++ = (UV)RX_SUBOFFSET(rx);
388 *p++ = (UV)RX_SUBCOFFSET(rx);
389 for (i = 0; i <= RX_NPARENS(rx); ++i) {
390 *p++ = (UV)RX_OFFS(rx)[i].start;
391 *p++ = (UV)RX_OFFS(rx)[i].end;
396 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
401 PERL_ARGS_ASSERT_RXRES_RESTORE;
404 RX_MATCH_COPY_FREE(rx);
405 RX_MATCH_COPIED_set(rx, *p);
407 RX_NPARENS(rx) = *p++;
410 if (RX_SAVED_COPY(rx))
411 SvREFCNT_dec (RX_SAVED_COPY(rx));
412 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
416 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
417 RX_SUBLEN(rx) = (I32)(*p++);
418 RX_SUBOFFSET(rx) = (I32)*p++;
419 RX_SUBCOFFSET(rx) = (I32)*p++;
420 for (i = 0; i <= RX_NPARENS(rx); ++i) {
421 RX_OFFS(rx)[i].start = (I32)(*p++);
422 RX_OFFS(rx)[i].end = (I32)(*p++);
427 S_rxres_free(pTHX_ void **rsp)
429 UV * const p = (UV*)*rsp;
431 PERL_ARGS_ASSERT_RXRES_FREE;
435 void *tmp = INT2PTR(char*,*p);
438 U32 i = 9 + p[1] * 2;
440 U32 i = 8 + p[1] * 2;
445 SvREFCNT_dec (INT2PTR(SV*,p[2]));
448 PoisonFree(p, i, sizeof(UV));
457 #define FORM_NUM_BLANK (1<<30)
458 #define FORM_NUM_POINT (1<<29)
462 dSP; dMARK; dORIGMARK;
463 SV * const tmpForm = *++MARK;
464 SV *formsv; /* contains text of original format */
465 U32 *fpc; /* format ops program counter */
466 char *t; /* current append position in target string */
467 const char *f; /* current position in format string */
469 SV *sv = NULL; /* current item */
470 const char *item = NULL;/* string value of current item */
471 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
472 I32 itembytes = 0; /* as itemsize, but length in bytes */
473 I32 fieldsize = 0; /* width of current field */
474 I32 lines = 0; /* number of lines that have been output */
475 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
476 const char *chophere = NULL; /* where to chop current item */
477 STRLEN linemark = 0; /* pos of start of line in output */
479 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
480 STRLEN len; /* length of current sv */
481 STRLEN linemax; /* estimate of output size in bytes */
482 bool item_is_utf8 = FALSE;
483 bool targ_is_utf8 = FALSE;
486 U8 *source; /* source of bytes to append */
487 STRLEN to_copy; /* how may bytes to append */
488 char trans; /* what chars to translate */
490 mg = doparseform(tmpForm);
492 fpc = (U32*)mg->mg_ptr;
493 /* the actual string the format was compiled from.
494 * with overload etc, this may not match tmpForm */
498 SvPV_force(PL_formtarget, len);
499 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
500 SvTAINTED_on(PL_formtarget);
501 if (DO_UTF8(PL_formtarget))
503 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
504 t = SvGROW(PL_formtarget, len + linemax + 1);
505 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
507 f = SvPV_const(formsv, len);
511 const char *name = "???";
514 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
515 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
516 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
517 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
518 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
520 case FF_CHECKNL: name = "CHECKNL"; break;
521 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
522 case FF_SPACE: name = "SPACE"; break;
523 case FF_HALFSPACE: name = "HALFSPACE"; break;
524 case FF_ITEM: name = "ITEM"; break;
525 case FF_CHOP: name = "CHOP"; break;
526 case FF_LINEGLOB: name = "LINEGLOB"; break;
527 case FF_NEWLINE: name = "NEWLINE"; break;
528 case FF_MORE: name = "MORE"; break;
529 case FF_LINEMARK: name = "LINEMARK"; break;
530 case FF_END: name = "END"; break;
531 case FF_0DECIMAL: name = "0DECIMAL"; break;
532 case FF_LINESNGL: name = "LINESNGL"; break;
535 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
537 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
540 case FF_LINEMARK: /* start (or end) of a line */
541 linemark = t - SvPVX(PL_formtarget);
546 case FF_LITERAL: /* append <arg> literal chars */
551 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
554 case FF_SKIP: /* skip <arg> chars in format */
558 case FF_FETCH: /* get next item and set field size to <arg> */
567 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
570 SvTAINTED_on(PL_formtarget);
573 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
575 const char *s = item = SvPV_const(sv, len);
576 const char *send = s + len;
579 item_is_utf8 = DO_UTF8(sv);
591 if (itemsize == fieldsize)
594 itembytes = s - item;
599 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
601 const char *s = item = SvPV_const(sv, len);
602 const char *send = s + len;
606 item_is_utf8 = DO_UTF8(sv);
608 /* look for a legal split position */
616 /* provisional split point */
620 /* we delay testing fieldsize until after we've
621 * processed the possible split char directly
622 * following the last field char; so if fieldsize=3
623 * and item="a b cdef", we consume "a b", not "a".
624 * Ditto further down.
626 if (size == fieldsize)
630 if (strchr(PL_chopset, *s)) {
631 /* provisional split point */
632 /* for a non-space split char, we include
633 * the split char; hence the '+1' */
637 if (size == fieldsize)
649 if (!chophere || s == send) {
653 itembytes = chophere - item;
658 case FF_SPACE: /* append padding space (diff of field, item size) */
659 arg = fieldsize - itemsize;
667 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
668 arg = fieldsize - itemsize;
677 case FF_ITEM: /* append a text item, while blanking ctrl chars */
683 case FF_CHOP: /* (for ^*) chop the current item */
684 if (sv != &PL_sv_no) {
685 const char *s = chophere;
693 /* tied, overloaded or similar strangeness.
694 * Do it the hard way */
695 sv_setpvn(sv, s, len - (s-item));
700 case FF_LINESNGL: /* process ^* */
704 case FF_LINEGLOB: /* process @* */
706 const bool oneline = fpc[-1] == FF_LINESNGL;
707 const char *s = item = SvPV_const(sv, len);
708 const char *const send = s + len;
710 item_is_utf8 = DO_UTF8(sv);
721 to_copy = s - item - 1;
735 /* append to_copy bytes from source to PL_formstring.
736 * item_is_utf8 implies source is utf8.
737 * if trans, translate certain characters during the copy */
742 SvCUR_set(PL_formtarget,
743 t - SvPVX_const(PL_formtarget));
745 if (targ_is_utf8 && !item_is_utf8) {
746 source = tmp = bytes_to_utf8(source, &to_copy);
748 if (item_is_utf8 && !targ_is_utf8) {
750 /* Upgrade targ to UTF8, and then we reduce it to
751 a problem we have a simple solution for.
752 Don't need get magic. */
753 sv_utf8_upgrade_nomg(PL_formtarget);
755 /* re-calculate linemark */
756 s = (U8*)SvPVX(PL_formtarget);
757 /* the bytes we initially allocated to append the
758 * whole line may have been gobbled up during the
759 * upgrade, so allocate a whole new line's worth
764 linemark = s - (U8*)SvPVX(PL_formtarget);
766 /* Easy. They agree. */
767 assert (item_is_utf8 == targ_is_utf8);
770 /* @* and ^* are the only things that can exceed
771 * the linemax, so grow by the output size, plus
772 * a whole new form's worth in case of any further
774 grow = linemax + to_copy;
776 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
777 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
779 Copy(source, t, to_copy, char);
781 /* blank out ~ or control chars, depending on trans.
782 * works on bytes not chars, so relies on not
783 * matching utf8 continuation bytes */
785 U8 *send = s + to_copy;
788 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
795 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
801 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
804 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
807 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
810 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
812 /* If the field is marked with ^ and the value is undefined,
814 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
822 /* overflow evidence */
823 if (num_overflow(value, fieldsize, arg)) {
829 /* Formats aren't yet marked for locales, so assume "yes". */
831 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
833 DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
834 STORE_LC_NUMERIC_SET_TO_NEEDED();
835 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
838 const char* qfmt = quadmath_format_single(fmt);
841 Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
842 len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
844 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
849 /* we generate fmt ourselves so it is safe */
850 GCC_DIAG_IGNORE(-Wformat-nonliteral);
851 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
854 PERL_MY_SNPRINTF_POST_GUARD(len, max);
855 RESTORE_LC_NUMERIC();
860 case FF_NEWLINE: /* delete trailing spaces, then append \n */
862 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
867 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
870 if (arg) { /* repeat until fields exhausted? */
876 t = SvPVX(PL_formtarget) + linemark;
881 case FF_MORE: /* replace long end of string with '...' */
883 const char *s = chophere;
884 const char *send = item + len;
886 while (isSPACE(*s) && (s < send))
891 arg = fieldsize - itemsize;
898 if (strnEQ(s1," ",3)) {
899 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
909 case FF_END: /* tidy up, then return */
911 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
913 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
915 SvUTF8_on(PL_formtarget);
916 FmLINES(PL_formtarget) += lines;
918 if (fpc[-1] == FF_BLANK)
919 RETURNOP(cLISTOP->op_first);
931 if (PL_stack_base + *PL_markstack_ptr == SP) {
933 if (GIMME_V == G_SCALAR)
935 RETURNOP(PL_op->op_next->op_next);
937 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
938 Perl_pp_pushmark(aTHX); /* push dst */
939 Perl_pp_pushmark(aTHX); /* push src */
940 ENTER_with_name("grep"); /* enter outer scope */
943 if (PL_op->op_private & OPpGREP_LEX)
944 SAVESPTR(PAD_SVl(PL_op->op_targ));
947 ENTER_with_name("grep_item"); /* enter inner scope */
950 src = PL_stack_base[*PL_markstack_ptr];
952 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
956 if (PL_op->op_private & OPpGREP_LEX)
957 PAD_SVl(PL_op->op_targ) = src;
962 if (PL_op->op_type == OP_MAPSTART)
963 Perl_pp_pushmark(aTHX); /* push top */
964 return ((LOGOP*)PL_op->op_next)->op_other;
970 const I32 gimme = GIMME_V;
971 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
977 /* first, move source pointer to the next item in the source list */
978 ++PL_markstack_ptr[-1];
980 /* if there are new items, push them into the destination list */
981 if (items && gimme != G_VOID) {
982 /* might need to make room back there first */
983 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
984 /* XXX this implementation is very pessimal because the stack
985 * is repeatedly extended for every set of items. Is possible
986 * to do this without any stack extension or copying at all
987 * by maintaining a separate list over which the map iterates
988 * (like foreach does). --gsar */
990 /* everything in the stack after the destination list moves
991 * towards the end the stack by the amount of room needed */
992 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
994 /* items to shift up (accounting for the moved source pointer) */
995 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
997 /* This optimization is by Ben Tilly and it does
998 * things differently from what Sarathy (gsar)
999 * is describing. The downside of this optimization is
1000 * that leaves "holes" (uninitialized and hopefully unused areas)
1001 * to the Perl stack, but on the other hand this
1002 * shouldn't be a problem. If Sarathy's idea gets
1003 * implemented, this optimization should become
1004 * irrelevant. --jhi */
1006 shift = count; /* Avoid shifting too often --Ben Tilly */
1010 dst = (SP += shift);
1011 PL_markstack_ptr[-1] += shift;
1012 *PL_markstack_ptr += shift;
1016 /* copy the new items down to the destination list */
1017 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1018 if (gimme == G_ARRAY) {
1019 /* add returned items to the collection (making mortal copies
1020 * if necessary), then clear the current temps stack frame
1021 * *except* for those items. We do this splicing the items
1022 * into the start of the tmps frame (so some items may be on
1023 * the tmps stack twice), then moving PL_tmps_floor above
1024 * them, then freeing the frame. That way, the only tmps that
1025 * accumulate over iterations are the return values for map.
1026 * We have to do to this way so that everything gets correctly
1027 * freed if we die during the map.
1031 /* make space for the slice */
1032 EXTEND_MORTAL(items);
1033 tmpsbase = PL_tmps_floor + 1;
1034 Move(PL_tmps_stack + tmpsbase,
1035 PL_tmps_stack + tmpsbase + items,
1036 PL_tmps_ix - PL_tmps_floor,
1038 PL_tmps_ix += items;
1043 sv = sv_mortalcopy(sv);
1045 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1047 /* clear the stack frame except for the items */
1048 PL_tmps_floor += items;
1050 /* FREETMPS may have cleared the TEMP flag on some of the items */
1053 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1056 /* scalar context: we don't care about which values map returns
1057 * (we use undef here). And so we certainly don't want to do mortal
1058 * copies of meaningless values. */
1059 while (items-- > 0) {
1061 *dst-- = &PL_sv_undef;
1069 LEAVE_with_name("grep_item"); /* exit inner scope */
1072 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1074 (void)POPMARK; /* pop top */
1075 LEAVE_with_name("grep"); /* exit outer scope */
1076 (void)POPMARK; /* pop src */
1077 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1078 (void)POPMARK; /* pop dst */
1079 SP = PL_stack_base + POPMARK; /* pop original mark */
1080 if (gimme == G_SCALAR) {
1081 if (PL_op->op_private & OPpGREP_LEX) {
1082 SV* sv = sv_newmortal();
1083 sv_setiv(sv, items);
1091 else if (gimme == G_ARRAY)
1098 ENTER_with_name("grep_item"); /* enter inner scope */
1101 /* set $_ to the new source item */
1102 src = PL_stack_base[PL_markstack_ptr[-1]];
1103 if (SvPADTMP(src)) {
1104 src = sv_mortalcopy(src);
1107 if (PL_op->op_private & OPpGREP_LEX)
1108 PAD_SVl(PL_op->op_targ) = src;
1112 RETURNOP(cLOGOP->op_other);
1120 if (GIMME_V == G_ARRAY)
1122 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1123 return cLOGOP->op_other;
1132 if (GIMME_V == G_ARRAY) {
1133 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1137 SV * const targ = PAD_SV(PL_op->op_targ);
1140 if (PL_op->op_private & OPpFLIP_LINENUM) {
1141 if (GvIO(PL_last_in_gv)) {
1142 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1145 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1147 flip = SvIV(sv) == SvIV(GvSV(gv));
1153 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1154 if (PL_op->op_flags & OPf_SPECIAL) {
1162 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1165 sv_setpvs(TARG, "");
1171 /* This code tries to decide if "$left .. $right" should use the
1172 magical string increment, or if the range is numeric (we make
1173 an exception for .."0" [#18165]). AMS 20021031. */
1175 #define RANGE_IS_NUMERIC(left,right) ( \
1176 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1177 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1178 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1179 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1180 && (!SvOK(right) || looks_like_number(right))))
1186 if (GIMME_V == G_ARRAY) {
1192 if (RANGE_IS_NUMERIC(left,right)) {
1194 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1195 (SvOK(right) && (SvIOK(right)
1196 ? SvIsUV(right) && SvUV(right) > IV_MAX
1197 : SvNV_nomg(right) > IV_MAX)))
1198 DIE(aTHX_ "Range iterator outside integer range");
1199 i = SvIV_nomg(left);
1200 j = SvIV_nomg(right);
1202 /* Dance carefully around signed max. */
1203 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1206 /* The wraparound of signed integers is undefined
1207 * behavior, but here we aim for count >=1, and
1208 * negative count is just wrong. */
1210 #if IVSIZE > Size_t_size
1217 Perl_croak(aTHX_ "Out of memory during list extend");
1224 SV * const sv = sv_2mortal(newSViv(i));
1226 if (n) /* avoid incrementing above IV_MAX */
1232 const char * const lpv = SvPV_nomg_const(left, llen);
1233 const char * const tmps = SvPV_nomg_const(right, len);
1235 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1236 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1238 if (strEQ(SvPVX_const(sv),tmps))
1240 sv = sv_2mortal(newSVsv(sv));
1247 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1251 if (PL_op->op_private & OPpFLIP_LINENUM) {
1252 if (GvIO(PL_last_in_gv)) {
1253 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1256 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1257 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1265 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1266 sv_catpvs(targ, "E0");
1276 static const char * const context_name[] = {
1278 NULL, /* CXt_WHEN never actually needs "block" */
1279 NULL, /* CXt_BLOCK never actually needs "block" */
1280 NULL, /* CXt_GIVEN never actually needs "block" */
1281 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1282 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1283 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1284 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1292 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1296 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1298 for (i = cxstack_ix; i >= 0; i--) {
1299 const PERL_CONTEXT * const cx = &cxstack[i];
1300 switch (CxTYPE(cx)) {
1306 /* diag_listed_as: Exiting subroutine via %s */
1307 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1308 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1309 if (CxTYPE(cx) == CXt_NULL)
1312 case CXt_LOOP_LAZYIV:
1313 case CXt_LOOP_LAZYSV:
1315 case CXt_LOOP_PLAIN:
1317 STRLEN cx_label_len = 0;
1318 U32 cx_label_flags = 0;
1319 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1321 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1324 (const U8*)cx_label, cx_label_len,
1325 (const U8*)label, len) == 0)
1327 (const U8*)label, len,
1328 (const U8*)cx_label, cx_label_len) == 0)
1329 : (len == cx_label_len && ((cx_label == label)
1330 || memEQ(cx_label, label, len))) )) {
1331 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1332 (long)i, cx_label));
1335 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1346 Perl_dowantarray(pTHX)
1348 const I32 gimme = block_gimme();
1349 return (gimme == G_VOID) ? G_SCALAR : gimme;
1353 Perl_block_gimme(pTHX)
1355 const I32 cxix = dopoptosub(cxstack_ix);
1360 gimme = (cxstack[cxix].blk_gimme & G_WANT);
1362 Perl_croak(aTHX_ "panic: bad gimme: %d\n", gimme);
1368 Perl_is_lvalue_sub(pTHX)
1370 const I32 cxix = dopoptosub(cxstack_ix);
1371 assert(cxix >= 0); /* We should only be called from inside subs */
1373 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1374 return CxLVAL(cxstack + cxix);
1379 /* only used by PUSHSUB */
1381 Perl_was_lvalue_sub(pTHX)
1383 const I32 cxix = dopoptosub(cxstack_ix-1);
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);
1393 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1397 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1399 PERL_UNUSED_CONTEXT;
1402 for (i = startingblock; i >= 0; i--) {
1403 const PERL_CONTEXT * const cx = &cxstk[i];
1404 switch (CxTYPE(cx)) {
1408 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1409 * twice; the first for the normal foo() call, and the second
1410 * for a faked up re-entry into the sub to execute the
1411 * code block. Hide this faked entry from the world. */
1412 if (cx->cx_type & CXp_SUB_RE_FAKE)
1417 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1425 S_dopoptoeval(pTHX_ I32 startingblock)
1428 for (i = startingblock; i >= 0; i--) {
1429 const PERL_CONTEXT *cx = &cxstack[i];
1430 switch (CxTYPE(cx)) {
1434 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1442 S_dopoptoloop(pTHX_ I32 startingblock)
1445 for (i = startingblock; i >= 0; i--) {
1446 const PERL_CONTEXT * const cx = &cxstack[i];
1447 switch (CxTYPE(cx)) {
1453 /* diag_listed_as: Exiting subroutine via %s */
1454 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1455 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1456 if ((CxTYPE(cx)) == CXt_NULL)
1459 case CXt_LOOP_LAZYIV:
1460 case CXt_LOOP_LAZYSV:
1462 case CXt_LOOP_PLAIN:
1463 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1471 S_dopoptogiven(pTHX_ I32 startingblock)
1474 for (i = startingblock; i >= 0; i--) {
1475 const PERL_CONTEXT *cx = &cxstack[i];
1476 switch (CxTYPE(cx)) {
1480 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1482 case CXt_LOOP_PLAIN:
1483 assert(!CxFOREACHDEF(cx));
1485 case CXt_LOOP_LAZYIV:
1486 case CXt_LOOP_LAZYSV:
1488 if (CxFOREACHDEF(cx)) {
1489 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1498 S_dopoptowhen(pTHX_ I32 startingblock)
1501 for (i = startingblock; i >= 0; i--) {
1502 const PERL_CONTEXT *cx = &cxstack[i];
1503 switch (CxTYPE(cx)) {
1507 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1515 Perl_dounwind(pTHX_ I32 cxix)
1519 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1522 while (cxstack_ix > cxix) {
1524 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1525 DEBUG_CX("UNWIND"); \
1526 /* Note: we don't need to restore the base context info till the end. */
1527 switch (CxTYPE(cx)) {
1530 continue; /* not break */
1538 case CXt_LOOP_LAZYIV:
1539 case CXt_LOOP_LAZYSV:
1541 case CXt_LOOP_PLAIN:
1552 PERL_UNUSED_VAR(optype);
1556 Perl_qerror(pTHX_ SV *err)
1558 PERL_ARGS_ASSERT_QERROR;
1561 if (PL_in_eval & EVAL_KEEPERR) {
1562 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1566 sv_catsv(ERRSV, err);
1569 sv_catsv(PL_errors, err);
1571 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1573 ++PL_parser->error_count;
1577 Perl_die_unwind(pTHX_ SV *msv)
1579 SV *exceptsv = sv_mortalcopy(msv);
1580 U8 in_eval = PL_in_eval;
1581 PERL_ARGS_ASSERT_DIE_UNWIND;
1588 * Historically, perl used to set ERRSV ($@) early in the die
1589 * process and rely on it not getting clobbered during unwinding.
1590 * That sucked, because it was liable to get clobbered, so the
1591 * setting of ERRSV used to emit the exception from eval{} has
1592 * been moved to much later, after unwinding (see just before
1593 * JMPENV_JUMP below). However, some modules were relying on the
1594 * early setting, by examining $@ during unwinding to use it as
1595 * a flag indicating whether the current unwinding was caused by
1596 * an exception. It was never a reliable flag for that purpose,
1597 * being totally open to false positives even without actual
1598 * clobberage, but was useful enough for production code to
1599 * semantically rely on it.
1601 * We'd like to have a proper introspective interface that
1602 * explicitly describes the reason for whatever unwinding
1603 * operations are currently in progress, so that those modules
1604 * work reliably and $@ isn't further overloaded. But we don't
1605 * have one yet. In its absence, as a stopgap measure, ERRSV is
1606 * now *additionally* set here, before unwinding, to serve as the
1607 * (unreliable) flag that it used to.
1609 * This behaviour is temporary, and should be removed when a
1610 * proper way to detect exceptional unwinding has been developed.
1611 * As of 2010-12, the authors of modules relying on the hack
1612 * are aware of the issue, because the modules failed on
1613 * perls 5.13.{1..7} which had late setting of $@ without this
1614 * early-setting hack.
1616 if (!(in_eval & EVAL_KEEPERR)) {
1617 SvTEMP_off(exceptsv);
1618 sv_setsv(ERRSV, exceptsv);
1621 if (in_eval & EVAL_KEEPERR) {
1622 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1626 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1627 && PL_curstackinfo->si_prev)
1641 JMPENV *restartjmpenv;
1644 if (cxix < cxstack_ix)
1647 POPBLOCK(cx,PL_curpm);
1648 if (CxTYPE(cx) != CXt_EVAL) {
1650 const char* message = SvPVx_const(exceptsv, msglen);
1651 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1652 PerlIO_write(Perl_error_log, message, msglen);
1656 namesv = cx->blk_eval.old_namesv;
1658 oldcop = cx->blk_oldcop;
1660 restartjmpenv = cx->blk_eval.cur_top_env;
1661 restartop = cx->blk_eval.retop;
1663 if (gimme == G_SCALAR)
1664 *++newsp = &PL_sv_undef;
1665 PL_stack_sp = newsp;
1669 if (optype == OP_REQUIRE) {
1670 assert (PL_curcop == oldcop);
1671 (void)hv_store(GvHVn(PL_incgv),
1672 SvPVX_const(namesv),
1673 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1675 /* note that unlike pp_entereval, pp_require isn't
1676 * supposed to trap errors. So now that we've popped the
1677 * EVAL that pp_require pushed, and processed the error
1678 * message, rethrow the error */
1679 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1680 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1683 if (!(in_eval & EVAL_KEEPERR))
1684 sv_setsv(ERRSV, exceptsv);
1685 PL_restartjmpenv = restartjmpenv;
1686 PL_restartop = restartop;
1688 NOT_REACHED; /* NOTREACHED */
1692 write_to_stderr(exceptsv);
1694 NOT_REACHED; /* NOTREACHED */
1700 if (SvTRUE(left) != SvTRUE(right))
1708 =head1 CV Manipulation Functions
1710 =for apidoc caller_cx
1712 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1713 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1714 information returned to Perl by C<caller>. Note that XSUBs don't get a
1715 stack frame, so C<caller_cx(0, NULL)> will return information for the
1716 immediately-surrounding Perl code.
1718 This function skips over the automatic calls to C<&DB::sub> made on the
1719 behalf of the debugger. If the stack frame requested was a sub called by
1720 C<DB::sub>, the return value will be the frame for the call to
1721 C<DB::sub>, since that has the correct line number/etc. for the call
1722 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1723 frame for the sub call itself.
1728 const PERL_CONTEXT *
1729 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1731 I32 cxix = dopoptosub(cxstack_ix);
1732 const PERL_CONTEXT *cx;
1733 const PERL_CONTEXT *ccstack = cxstack;
1734 const PERL_SI *top_si = PL_curstackinfo;
1737 /* we may be in a higher stacklevel, so dig down deeper */
1738 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1739 top_si = top_si->si_prev;
1740 ccstack = top_si->si_cxstack;
1741 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1745 /* caller() should not report the automatic calls to &DB::sub */
1746 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1747 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1751 cxix = dopoptosub_at(ccstack, cxix - 1);
1754 cx = &ccstack[cxix];
1755 if (dbcxp) *dbcxp = cx;
1757 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1758 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1759 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1760 field below is defined for any cx. */
1761 /* caller() should not report the automatic calls to &DB::sub */
1762 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1763 cx = &ccstack[dbcxix];
1772 const PERL_CONTEXT *cx;
1773 const PERL_CONTEXT *dbcx;
1774 I32 gimme = GIMME_V;
1775 const HEK *stash_hek;
1777 bool has_arg = MAXARG && TOPs;
1786 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1788 if (gimme != G_ARRAY) {
1796 assert(CopSTASH(cx->blk_oldcop));
1797 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1798 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1800 if (gimme != G_ARRAY) {
1803 PUSHs(&PL_sv_undef);
1806 sv_sethek(TARG, stash_hek);
1815 PUSHs(&PL_sv_undef);
1818 sv_sethek(TARG, stash_hek);
1821 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1822 lcop = closest_cop(cx->blk_oldcop, OpSIBLING(cx->blk_oldcop),
1823 cx->blk_sub.retop, TRUE);
1825 lcop = cx->blk_oldcop;
1826 mPUSHi((I32)CopLINE(lcop));
1829 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1830 /* So is ccstack[dbcxix]. */
1831 if (CvHASGV(dbcx->blk_sub.cv)) {
1832 PUSHs(cv_name(dbcx->blk_sub.cv, 0, 0));
1833 PUSHs(boolSV(CxHASARGS(cx)));
1836 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1837 PUSHs(boolSV(CxHASARGS(cx)));
1841 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1844 gimme = (I32)cx->blk_gimme;
1845 if (gimme == G_VOID)
1846 PUSHs(&PL_sv_undef);
1848 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1849 if (CxTYPE(cx) == CXt_EVAL) {
1851 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1852 SV *cur_text = cx->blk_eval.cur_text;
1853 if (SvCUR(cur_text) >= 2) {
1854 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1855 SvUTF8(cur_text)|SVs_TEMP));
1858 /* I think this is will always be "", but be sure */
1859 PUSHs(sv_2mortal(newSVsv(cur_text)));
1865 else if (cx->blk_eval.old_namesv) {
1866 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1869 /* eval BLOCK (try blocks have old_namesv == 0) */
1871 PUSHs(&PL_sv_undef);
1872 PUSHs(&PL_sv_undef);
1876 PUSHs(&PL_sv_undef);
1877 PUSHs(&PL_sv_undef);
1879 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1880 && CopSTASH_eq(PL_curcop, PL_debstash))
1882 AV * const ary = cx->blk_sub.argarray;
1883 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1885 Perl_init_dbargs(aTHX);
1887 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1888 av_extend(PL_dbargs, AvFILLp(ary) + off);
1889 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1890 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1892 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1895 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1897 if (old_warnings == pWARN_NONE)
1898 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1899 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1900 mask = &PL_sv_undef ;
1901 else if (old_warnings == pWARN_ALL ||
1902 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1903 /* Get the bit mask for $warnings::Bits{all}, because
1904 * it could have been extended by warnings::register */
1906 HV * const bits = get_hv("warnings::Bits", 0);
1907 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1908 mask = newSVsv(*bits_all);
1911 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1915 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1919 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1920 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1930 if (MAXARG < 1 || (!TOPs && !POPs))
1931 tmps = NULL, len = 0;
1933 tmps = SvPVx_const(POPs, len);
1934 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1939 /* like pp_nextstate, but used instead when the debugger is active */
1943 PL_curcop = (COP*)PL_op;
1944 TAINT_NOT; /* Each statement is presumed innocent */
1945 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1950 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1951 || PL_DBsingle_iv || PL_DBsignal_iv || PL_DBtrace_iv)
1955 const I32 gimme = G_ARRAY;
1957 GV * const gv = PL_DBgv;
1960 if (gv && isGV_with_GP(gv))
1963 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
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;
1991 if (CvDEPTH(cv) >= 2) {
1992 PERL_STACK_OVERFLOW_CHECK();
1993 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1996 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1997 RETURNOP(CvSTART(cv));
2004 /* S_leave_common: Common code that many functions in this file use on
2007 /* SVs on the stack that have any of the flags passed in are left as is.
2008 Other SVs are protected via the mortals stack if lvalue is true, and
2011 Also, taintedness is cleared.
2015 S_leave_common(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
2016 U32 flags, bool lvalue)
2019 PERL_ARGS_ASSERT_LEAVE_COMMON;
2022 if (flags & SVs_PADTMP) {
2023 flags &= ~SVs_PADTMP;
2026 if (gimme == G_SCALAR) {
2028 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2031 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2032 : sv_mortalcopy(*SP);
2034 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2037 *++MARK = &PL_sv_undef;
2041 else if (gimme == G_ARRAY) {
2042 /* in case LEAVE wipes old return values */
2043 while (++MARK <= SP) {
2044 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2048 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2049 : sv_mortalcopy(*MARK);
2050 TAINT_NOT; /* Each item is independent */
2053 /* When this function was called with MARK == newsp, we reach this
2054 * point with SP == newsp. */
2064 I32 gimme = GIMME_V;
2066 ENTER_with_name("block");
2069 PUSHBLOCK(cx, CXt_BLOCK, SP);
2082 if (PL_op->op_flags & OPf_SPECIAL) {
2083 cx = &cxstack[cxstack_ix];
2084 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2089 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2091 SP = leave_common(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2092 PL_op->op_private & OPpLVALUE);
2093 PL_curpm = newpm; /* Don't pop $1 et al till now */
2095 LEAVE_with_name("block");
2101 S_outside_integer(pTHX_ SV *sv)
2104 const NV nv = SvNV_nomg(sv);
2105 if (Perl_isinfnan(nv))
2107 #ifdef NV_PRESERVES_UV
2108 if (nv < (NV)IV_MIN || nv > (NV)IV_MAX)
2111 if (nv <= (NV)IV_MIN)
2114 ((nv > (NV)UV_MAX ||
2115 SvUV_nomg(sv) > (UV)IV_MAX)))
2126 const I32 gimme = GIMME_V;
2127 void *itervar; /* location of the iteration variable */
2128 U8 cxtype = CXt_LOOP_FOR;
2130 ENTER_with_name("loop1");
2133 if (PL_op->op_targ) { /* "my" variable */
2134 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2135 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2136 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2137 SVs_PADSTALE, SVs_PADSTALE);
2139 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2141 itervar = PL_comppad;
2143 itervar = &PAD_SVl(PL_op->op_targ);
2146 else if (LIKELY(isGV(TOPs))) { /* symbol table variable */
2147 GV * const gv = MUTABLE_GV(POPs);
2148 SV** svp = &GvSV(gv);
2149 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2151 itervar = (void *)gv;
2154 SV * const sv = POPs;
2155 assert(SvTYPE(sv) == SVt_PVMG);
2156 assert(SvMAGIC(sv));
2157 assert(SvMAGIC(sv)->mg_type == PERL_MAGIC_lvref);
2158 itervar = (void *)sv;
2159 cxtype |= CXp_FOR_LVREF;
2162 if (PL_op->op_private & OPpITER_DEF)
2163 cxtype |= CXp_FOR_DEF;
2165 ENTER_with_name("loop2");
2167 PUSHBLOCK(cx, cxtype, SP);
2168 PUSHLOOP_FOR(cx, itervar, MARK);
2169 if (PL_op->op_flags & OPf_STACKED) {
2170 SV *maybe_ary = POPs;
2171 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2173 SV * const right = maybe_ary;
2174 if (UNLIKELY(cxtype & CXp_FOR_LVREF))
2175 DIE(aTHX_ "Assigned value is not a reference");
2178 if (RANGE_IS_NUMERIC(sv,right)) {
2179 cx->cx_type &= ~CXTYPEMASK;
2180 cx->cx_type |= CXt_LOOP_LAZYIV;
2181 /* Make sure that no-one re-orders cop.h and breaks our
2183 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2184 if (S_outside_integer(aTHX_ sv) ||
2185 S_outside_integer(aTHX_ right))
2186 DIE(aTHX_ "Range iterator outside integer range");
2187 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2188 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2190 /* for correct -Dstv display */
2191 cx->blk_oldsp = sp - PL_stack_base;
2195 cx->cx_type &= ~CXTYPEMASK;
2196 cx->cx_type |= CXt_LOOP_LAZYSV;
2197 /* Make sure that no-one re-orders cop.h and breaks our
2199 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2200 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2201 cx->blk_loop.state_u.lazysv.end = right;
2202 SvREFCNT_inc(right);
2203 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2204 /* This will do the upgrade to SVt_PV, and warn if the value
2205 is uninitialised. */
2206 (void) SvPV_nolen_const(right);
2207 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2208 to replace !SvOK() with a pointer to "". */
2210 SvREFCNT_dec(right);
2211 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2215 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2216 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2217 SvREFCNT_inc(maybe_ary);
2218 cx->blk_loop.state_u.ary.ix =
2219 (PL_op->op_private & OPpITER_REVERSED) ?
2220 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2224 else { /* iterating over items on the stack */
2225 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2226 if (PL_op->op_private & OPpITER_REVERSED) {
2227 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2230 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2241 const I32 gimme = GIMME_V;
2243 ENTER_with_name("loop1");
2245 ENTER_with_name("loop2");
2247 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2248 PUSHLOOP_PLAIN(cx, SP);
2263 assert(CxTYPE_is_LOOP(cx));
2265 newsp = PL_stack_base + cx->blk_loop.resetsp;
2267 SP = leave_common(newsp, SP, MARK, gimme, 0,
2268 PL_op->op_private & OPpLVALUE);
2271 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2272 PL_curpm = newpm; /* ... and pop $1 et al */
2274 LEAVE_with_name("loop2");
2275 LEAVE_with_name("loop1");
2281 /* This duplicates most of pp_leavesub, but with additional code to handle
2282 * return args in lvalue context. It was forked from pp_leavesub to
2283 * avoid slowing down that function any further.
2285 * Any changes made to this function may need to be copied to pp_leavesub
2299 const char *what = NULL;
2301 if (CxMULTICALL(&cxstack[cxstack_ix])) {
2302 /* entry zero of a stack is always PL_sv_undef, which
2303 * simplifies converting a '()' return into undef in scalar context */
2304 assert(PL_stack_sp > PL_stack_base || *PL_stack_base == &PL_sv_undef);
2309 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2314 ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2315 if (gimme == G_SCALAR) {
2316 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2320 if ((SvPADTMP(TOPs) || SvREADONLY(TOPs)) &&
2321 !SvSMAGICAL(TOPs)) {
2323 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2324 : "a readonly value" : "a temporary";
2329 /* sub:lvalue{} will take us here. */
2339 "Can't return %s from lvalue subroutine", what
2344 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2345 if (!SvPADTMP(*SP)) {
2346 *MARK = SvREFCNT_inc(*SP);
2351 /* FREETMPS could clobber it */
2352 SV *sv = SvREFCNT_inc(*SP);
2354 *MARK = sv_mortalcopy(sv);
2361 ? sv_mortalcopy(*SP)
2363 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2368 *MARK = &PL_sv_undef;
2372 if (CxLVAL(cx) & OPpDEREF) {
2375 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2379 else if (gimme == G_ARRAY) {
2380 assert (!(CxLVAL(cx) & OPpDEREF));
2381 if (ref || !CxLVAL(cx))
2382 for (; MARK <= SP; MARK++)
2384 SvFLAGS(*MARK) & SVs_PADTMP
2385 ? sv_mortalcopy(*MARK)
2388 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2389 else for (; MARK <= SP; MARK++) {
2390 if (*MARK != &PL_sv_undef
2391 && (SvPADTMP(*MARK) || SvREADONLY(*MARK))
2393 /* Might be flattened array after $#array = */
2394 what = SvREADONLY(*MARK)
2395 ? "a readonly value" : "a temporary";
2398 else if (!SvTEMP(*MARK))
2399 *MARK = sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2405 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2407 PL_curpm = newpm; /* ... and pop $1 et al */
2410 return cx->blk_sub.retop;
2419 const I32 cxix = dopoptosub(cxstack_ix);
2421 assert(cxstack_ix >= 0);
2422 if (cxix < cxstack_ix) {
2424 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2425 * sort block, which is a CXt_NULL
2428 /* if we were in list context, we would have to splice out
2429 * any junk before the return args, like we do in the general
2430 * pp_return case, e.g.
2431 * sub f { for (junk1, junk2) { return arg1, arg2 }}
2433 assert(cxstack[0].blk_gimme == G_SCALAR);
2437 DIE(aTHX_ "Can't return outside a subroutine");
2442 cx = &cxstack[cxix];
2444 oldsp = PL_stack_base + cx->blk_oldsp;
2445 if (oldsp != MARK) {
2446 /* Handle extra junk on the stack. For example,
2447 * for (1,2) { return 3,4 }
2448 * leaves 1,2,3,4 on the stack. In list context we
2449 * have to splice out the 1,2; In scalar context for
2450 * for (1,2) { return }
2451 * we need to set sp = oldsp so that pp_leavesub knows
2452 * to push &PL_sv_undef onto the stack.
2453 * Note that in pp_return we only do the extra processing
2454 * required to handle junk; everything else we leave to
2457 SSize_t nargs = SP - MARK;
2459 if (cx->blk_gimme == G_ARRAY) {
2460 /* shift return args to base of call stack frame */
2461 Move(MARK + 1, oldsp + 1, nargs, SV*);
2462 PL_stack_sp = oldsp + nargs;
2466 PL_stack_sp = oldsp;
2469 /* fall through to a normal exit */
2470 switch (CxTYPE(cx)) {
2472 return CxTRYBLOCK(cx)
2473 ? Perl_pp_leavetry(aTHX)
2474 : Perl_pp_leaveeval(aTHX);
2476 return CvLVALUE(cx->blk_sub.cv)
2477 ? Perl_pp_leavesublv(aTHX)
2478 : Perl_pp_leavesub(aTHX);
2480 return Perl_pp_leavewrite(aTHX);
2482 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2488 S_unwind_loop(pTHX_ const char * const opname)
2491 if (PL_op->op_flags & OPf_SPECIAL) {
2492 cxix = dopoptoloop(cxstack_ix);
2494 /* diag_listed_as: Can't "last" outside a loop block */
2495 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2500 const char * const label =
2501 PL_op->op_flags & OPf_STACKED
2502 ? SvPV(TOPs,label_len)
2503 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2504 const U32 label_flags =
2505 PL_op->op_flags & OPf_STACKED
2507 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2509 cxix = dopoptolabel(label, label_len, label_flags);
2511 /* diag_listed_as: Label not found for "last %s" */
2512 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2514 SVfARG(PL_op->op_flags & OPf_STACKED
2515 && !SvGMAGICAL(TOPp1s)
2517 : newSVpvn_flags(label,
2519 label_flags | SVs_TEMP)));
2521 if (cxix < cxstack_ix)
2534 S_unwind_loop(aTHX_ "last");
2537 cxstack_ix++; /* temporarily protect top context */
2539 CxTYPE(cx) == CXt_LOOP_LAZYIV
2540 || CxTYPE(cx) == CXt_LOOP_LAZYSV
2541 || CxTYPE(cx) == CXt_LOOP_FOR
2542 || CxTYPE(cx) == CXt_LOOP_PLAIN
2544 newsp = PL_stack_base + cx->blk_loop.resetsp;
2545 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2548 PL_stack_sp = newsp;
2552 /* Stack values are safe: */
2553 POPLOOP(cx); /* release loop vars ... */
2555 PL_curpm = newpm; /* ... and pop $1 et al */
2557 PERL_UNUSED_VAR(gimme);
2564 const I32 inner = PL_scopestack_ix;
2566 S_unwind_loop(aTHX_ "next");
2568 /* clear off anything above the scope we're re-entering, but
2569 * save the rest until after a possible continue block */
2571 if (PL_scopestack_ix < inner)
2572 leave_scope(PL_scopestack[PL_scopestack_ix]);
2573 PL_curcop = cx->blk_oldcop;
2575 return (cx)->blk_loop.my_op->op_nextop;
2580 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2583 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2585 if (redo_op->op_type == OP_ENTER) {
2586 /* pop one less context to avoid $x being freed in while (my $x..) */
2588 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2589 redo_op = redo_op->op_next;
2593 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2594 LEAVE_SCOPE(oldsave);
2596 PL_curcop = cx->blk_oldcop;
2602 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2605 static const char* const too_deep = "Target of goto is too deeply nested";
2607 PERL_ARGS_ASSERT_DOFINDLABEL;
2610 Perl_croak(aTHX_ "%s", too_deep);
2611 if (o->op_type == OP_LEAVE ||
2612 o->op_type == OP_SCOPE ||
2613 o->op_type == OP_LEAVELOOP ||
2614 o->op_type == OP_LEAVESUB ||
2615 o->op_type == OP_LEAVETRY)
2617 *ops++ = cUNOPo->op_first;
2619 Perl_croak(aTHX_ "%s", too_deep);
2622 if (o->op_flags & OPf_KIDS) {
2624 /* First try all the kids at this level, since that's likeliest. */
2625 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2626 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2627 STRLEN kid_label_len;
2628 U32 kid_label_flags;
2629 const char *kid_label = CopLABEL_len_flags(kCOP,
2630 &kid_label_len, &kid_label_flags);
2632 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2635 (const U8*)kid_label, kid_label_len,
2636 (const U8*)label, len) == 0)
2638 (const U8*)label, len,
2639 (const U8*)kid_label, kid_label_len) == 0)
2640 : ( len == kid_label_len && ((kid_label == label)
2641 || memEQ(kid_label, label, len)))))
2645 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2646 if (kid == PL_lastgotoprobe)
2648 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2651 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2652 ops[-1]->op_type == OP_DBSTATE)
2657 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2666 /* also used for: pp_dump() */
2674 #define GOTO_DEPTH 64
2675 OP *enterops[GOTO_DEPTH];
2676 const char *label = NULL;
2677 STRLEN label_len = 0;
2678 U32 label_flags = 0;
2679 const bool do_dump = (PL_op->op_type == OP_DUMP);
2680 static const char* const must_have_label = "goto must have label";
2682 if (PL_op->op_flags & OPf_STACKED) {
2683 /* goto EXPR or goto &foo */
2685 SV * const sv = POPs;
2688 /* This egregious kludge implements goto &subroutine */
2689 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2692 CV *cv = MUTABLE_CV(SvRV(sv));
2693 AV *arg = GvAV(PL_defgv);
2697 if (!CvROOT(cv) && !CvXSUB(cv)) {
2698 const GV * const gv = CvGV(cv);
2702 /* autoloaded stub? */
2703 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2705 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2707 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2708 if (autogv && (cv = GvCV(autogv)))
2710 tmpstr = sv_newmortal();
2711 gv_efullname3(tmpstr, gv, NULL);
2712 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2714 DIE(aTHX_ "Goto undefined subroutine");
2717 /* First do some returnish stuff. */
2718 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2720 cxix = dopoptosub(cxstack_ix);
2721 if (cxix < cxstack_ix) {
2724 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2730 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2731 if (CxTYPE(cx) == CXt_EVAL) {
2734 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2735 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2737 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2738 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2740 else if (CxMULTICALL(cx))
2743 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2745 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2746 AV* av = cx->blk_sub.argarray;
2748 /* abandon the original @_ if it got reified or if it is
2749 the same as the current @_ */
2750 if (AvREAL(av) || av == arg) {
2754 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2756 else CLEAR_ARGARRAY(av);
2758 /* We donate this refcount later to the callee’s pad. */
2759 SvREFCNT_inc_simple_void(arg);
2760 if (CxTYPE(cx) == CXt_SUB &&
2761 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2762 SvREFCNT_dec(cx->blk_sub.cv);
2763 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2764 LEAVE_SCOPE(oldsave);
2766 /* A destructor called during LEAVE_SCOPE could have undefined
2767 * our precious cv. See bug #99850. */
2768 if (!CvROOT(cv) && !CvXSUB(cv)) {
2769 const GV * const gv = CvGV(cv);
2772 SV * const tmpstr = sv_newmortal();
2773 gv_efullname3(tmpstr, gv, NULL);
2774 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2777 DIE(aTHX_ "Goto undefined subroutine");
2780 /* Now do some callish stuff. */
2782 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2786 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2787 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2790 PERL_UNUSED_VAR(newsp);
2791 PERL_UNUSED_VAR(gimme);
2793 /* put GvAV(defgv) back onto stack */
2795 EXTEND(SP, items+1); /* @_ could have been extended. */
2800 bool r = cBOOL(AvREAL(arg));
2801 for (index=0; index<items; index++)
2805 SV ** const svp = av_fetch(arg, index, 0);
2806 sv = svp ? *svp : NULL;
2808 else sv = AvARRAY(arg)[index];
2810 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2811 : sv_2mortal(newSVavdefelem(arg, index, 1));
2816 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2817 /* Restore old @_ */
2818 arg = GvAV(PL_defgv);
2819 GvAV(PL_defgv) = cx->blk_sub.savearray;
2823 retop = cx->blk_sub.retop;
2824 /* XS subs don't have a CxSUB, so pop it */
2825 POPBLOCK(cx, PL_curpm);
2826 /* Push a mark for the start of arglist */
2829 (void)(*CvXSUB(cv))(aTHX_ cv);
2834 PADLIST * const padlist = CvPADLIST(cv);
2835 cx->blk_sub.cv = cv;
2836 cx->blk_sub.olddepth = CvDEPTH(cv);
2839 if (CvDEPTH(cv) < 2)
2840 SvREFCNT_inc_simple_void_NN(cv);
2842 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2843 sub_crush_depth(cv);
2844 pad_push(padlist, CvDEPTH(cv));
2846 PL_curcop = cx->blk_oldcop;
2848 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2851 CX_CURPAD_SAVE(cx->blk_sub);
2853 /* cx->blk_sub.argarray has no reference count, so we
2854 need something to hang on to our argument array so
2855 that cx->blk_sub.argarray does not end up pointing
2856 to freed memory as the result of undef *_. So put
2857 it in the callee’s pad, donating our refer-
2860 SvREFCNT_dec(PAD_SVl(0));
2861 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2864 /* GvAV(PL_defgv) might have been modified on scope
2865 exit, so restore it. */
2866 if (arg != GvAV(PL_defgv)) {
2867 AV * const av = GvAV(PL_defgv);
2868 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2872 else SvREFCNT_dec(arg);
2873 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2874 Perl_get_db_sub(aTHX_ NULL, cv);
2876 CV * const gotocv = get_cvs("DB::goto", 0);
2878 PUSHMARK( PL_stack_sp );
2879 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2884 retop = CvSTART(cv);
2885 goto putback_return;
2890 label = SvPV_nomg_const(sv, label_len);
2891 label_flags = SvUTF8(sv);
2894 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2895 /* goto LABEL or dump LABEL */
2896 label = cPVOP->op_pv;
2897 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2898 label_len = strlen(label);
2900 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2905 OP *gotoprobe = NULL;
2906 bool leaving_eval = FALSE;
2907 bool in_block = FALSE;
2908 PERL_CONTEXT *last_eval_cx = NULL;
2912 PL_lastgotoprobe = NULL;
2914 for (ix = cxstack_ix; ix >= 0; ix--) {
2916 switch (CxTYPE(cx)) {
2918 leaving_eval = TRUE;
2919 if (!CxTRYBLOCK(cx)) {
2920 gotoprobe = (last_eval_cx ?
2921 last_eval_cx->blk_eval.old_eval_root :
2926 /* else fall through */
2927 case CXt_LOOP_LAZYIV:
2928 case CXt_LOOP_LAZYSV:
2930 case CXt_LOOP_PLAIN:
2933 gotoprobe = OpSIBLING(cx->blk_oldcop);
2939 gotoprobe = OpSIBLING(cx->blk_oldcop);
2942 gotoprobe = PL_main_root;
2945 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2946 gotoprobe = CvROOT(cx->blk_sub.cv);
2952 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2955 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
2956 CxTYPE(cx), (long) ix);
2957 gotoprobe = PL_main_root;
2963 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
2964 enterops, enterops + GOTO_DEPTH);
2967 if ( (sibl1 = OpSIBLING(gotoprobe)) &&
2968 sibl1->op_type == OP_UNSTACK &&
2969 (sibl2 = OpSIBLING(sibl1)))
2971 retop = dofindlabel(sibl2,
2972 label, label_len, label_flags, enterops,
2973 enterops + GOTO_DEPTH);
2978 PL_lastgotoprobe = gotoprobe;
2981 DIE(aTHX_ "Can't find label %"UTF8f,
2982 UTF8fARG(label_flags, label_len, label));
2984 /* if we're leaving an eval, check before we pop any frames
2985 that we're not going to punt, otherwise the error
2988 if (leaving_eval && *enterops && enterops[1]) {
2990 for (i = 1; enterops[i]; i++)
2991 if (enterops[i]->op_type == OP_ENTERITER)
2992 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2995 if (*enterops && enterops[1]) {
2996 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2998 deprecate("\"goto\" to jump into a construct");
3001 /* pop unwanted frames */
3003 if (ix < cxstack_ix) {
3007 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3010 oldsave = PL_scopestack[PL_scopestack_ix];
3011 LEAVE_SCOPE(oldsave);
3014 /* push wanted frames */
3016 if (*enterops && enterops[1]) {
3017 OP * const oldop = PL_op;
3018 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3019 for (; enterops[ix]; ix++) {
3020 PL_op = enterops[ix];
3021 /* Eventually we may want to stack the needed arguments
3022 * for each op. For now, we punt on the hard ones. */
3023 if (PL_op->op_type == OP_ENTERITER)
3024 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3025 PL_op->op_ppaddr(aTHX);
3033 if (!retop) retop = PL_main_start;
3035 PL_restartop = retop;
3036 PL_do_undump = TRUE;
3040 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3041 PL_do_undump = FALSE;
3059 anum = 0; (void)POPs;
3065 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3068 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3071 PL_exit_flags |= PERL_EXIT_EXPECTED;
3073 PUSHs(&PL_sv_undef);
3080 S_save_lines(pTHX_ AV *array, SV *sv)
3082 const char *s = SvPVX_const(sv);
3083 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3086 PERL_ARGS_ASSERT_SAVE_LINES;
3088 while (s && s < send) {
3090 SV * const tmpstr = newSV_type(SVt_PVMG);
3092 t = (const char *)memchr(s, '\n', send - s);
3098 sv_setpvn(tmpstr, s, t - s);
3099 av_store(array, line++, tmpstr);
3107 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3109 0 is used as continue inside eval,
3111 3 is used for a die caught by an inner eval - continue inner loop
3113 See F<cop.h>: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3114 establish a local jmpenv to handle exception traps.
3119 S_docatch(pTHX_ OP *o)
3122 OP * const oldop = PL_op;
3126 assert(CATCH_GET == TRUE);
3133 assert(cxstack_ix >= 0);
3134 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3135 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3140 /* die caught by an inner eval - continue inner loop */
3141 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3142 PL_restartjmpenv = NULL;
3143 PL_op = PL_restartop;
3152 NOT_REACHED; /* NOTREACHED */
3161 =for apidoc find_runcv
3163 Locate the CV corresponding to the currently executing sub or eval.
3164 If db_seqp is non_null, skip CVs that are in the DB package and populate
3165 *db_seqp with the cop sequence number at the point that the DB:: code was
3166 entered. (This allows debuggers to eval in the scope of the breakpoint
3167 rather than in the scope of the debugger itself.)
3173 Perl_find_runcv(pTHX_ U32 *db_seqp)
3175 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3178 /* If this becomes part of the API, it might need a better name. */
3180 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3187 PL_curcop == &PL_compiling
3189 : PL_curcop->cop_seq;
3191 for (si = PL_curstackinfo; si; si = si->si_prev) {
3193 for (ix = si->si_cxix; ix >= 0; ix--) {
3194 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3196 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3197 cv = cx->blk_sub.cv;
3198 /* skip DB:: code */
3199 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3200 *db_seqp = cx->blk_oldcop->cop_seq;
3203 if (cx->cx_type & CXp_SUB_RE)
3206 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3207 cv = cx->blk_eval.cv;
3210 case FIND_RUNCV_padid_eq:
3212 || CvPADLIST(cv)->xpadl_id != (U32)arg)
3215 case FIND_RUNCV_level_eq:
3216 if (level++ != arg) continue;
3224 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3228 /* Run yyparse() in a setjmp wrapper. Returns:
3229 * 0: yyparse() successful
3230 * 1: yyparse() failed
3234 S_try_yyparse(pTHX_ int gramtype)
3239 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3243 ret = yyparse(gramtype) ? 1 : 0;
3250 NOT_REACHED; /* NOTREACHED */
3257 /* Compile a require/do or an eval ''.
3259 * outside is the lexically enclosing CV (if any) that invoked us.
3260 * seq is the current COP scope value.
3261 * hh is the saved hints hash, if any.
3263 * Returns a bool indicating whether the compile was successful; if so,
3264 * PL_eval_start contains the first op of the compiled code; otherwise,
3267 * This function is called from two places: pp_require and pp_entereval.
3268 * These can be distinguished by whether PL_op is entereval.
3272 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3275 OP * const saveop = PL_op;
3276 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3277 COP * const oldcurcop = PL_curcop;
3278 bool in_require = (saveop->op_type == OP_REQUIRE);
3282 PL_in_eval = (in_require
3283 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3285 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3286 ? EVAL_RE_REPARSING : 0)));
3290 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3292 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3293 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3294 cxstack[cxstack_ix].blk_gimme = gimme;
3296 CvOUTSIDE_SEQ(evalcv) = seq;
3297 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3299 /* set up a scratch pad */
3301 CvPADLIST_set(evalcv, pad_new(padnew_SAVE));
3302 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3305 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3307 /* make sure we compile in the right package */
3309 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3310 SAVEGENERICSV(PL_curstash);
3311 PL_curstash = (HV *)CopSTASH(PL_curcop);
3312 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3313 else SvREFCNT_inc_simple_void(PL_curstash);
3315 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3316 SAVESPTR(PL_beginav);
3317 PL_beginav = newAV();
3318 SAVEFREESV(PL_beginav);
3319 SAVESPTR(PL_unitcheckav);
3320 PL_unitcheckav = newAV();
3321 SAVEFREESV(PL_unitcheckav);
3324 ENTER_with_name("evalcomp");
3325 SAVESPTR(PL_compcv);
3328 /* try to compile it */
3330 PL_eval_root = NULL;
3331 PL_curcop = &PL_compiling;
3332 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3333 PL_in_eval |= EVAL_KEEPERR;
3340 hv_clear(GvHV(PL_hintgv));
3343 PL_hints = saveop->op_private & OPpEVAL_COPHH
3344 ? oldcurcop->cop_hints : saveop->op_targ;
3346 /* making 'use re eval' not be in scope when compiling the
3347 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3348 * infinite recursion when S_has_runtime_code() gives a false
3349 * positive: the second time round, HINT_RE_EVAL isn't set so we
3350 * don't bother calling S_has_runtime_code() */
3351 if (PL_in_eval & EVAL_RE_REPARSING)
3352 PL_hints &= ~HINT_RE_EVAL;
3355 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3356 SvREFCNT_dec(GvHV(PL_hintgv));
3357 GvHV(PL_hintgv) = hh;
3360 SAVECOMPILEWARNINGS();
3362 if (PL_dowarn & G_WARN_ALL_ON)
3363 PL_compiling.cop_warnings = pWARN_ALL ;
3364 else if (PL_dowarn & G_WARN_ALL_OFF)
3365 PL_compiling.cop_warnings = pWARN_NONE ;
3367 PL_compiling.cop_warnings = pWARN_STD ;
3370 PL_compiling.cop_warnings =
3371 DUP_WARNINGS(oldcurcop->cop_warnings);
3372 cophh_free(CopHINTHASH_get(&PL_compiling));
3373 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3374 /* The label, if present, is the first entry on the chain. So rather
3375 than writing a blank label in front of it (which involves an
3376 allocation), just use the next entry in the chain. */
3377 PL_compiling.cop_hints_hash
3378 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3379 /* Check the assumption that this removed the label. */
3380 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3383 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3386 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3388 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3389 * so honour CATCH_GET and trap it here if necessary */
3391 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3393 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3394 SV **newsp; /* Used by POPBLOCK. */
3396 I32 optype; /* Used by POPEVAL. */
3402 PERL_UNUSED_VAR(newsp);
3403 PERL_UNUSED_VAR(optype);
3405 /* note that if yystatus == 3, then the EVAL CX block has already
3406 * been popped, and various vars restored */
3408 if (yystatus != 3) {
3410 op_free(PL_eval_root);
3411 PL_eval_root = NULL;
3413 SP = PL_stack_base + POPMARK; /* pop original mark */
3414 POPBLOCK(cx,PL_curpm);
3416 namesv = cx->blk_eval.old_namesv;
3417 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3418 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3424 /* If cx is still NULL, it means that we didn't go in the
3425 * POPEVAL branch. */
3426 cx = &cxstack[cxstack_ix];
3427 assert(CxTYPE(cx) == CXt_EVAL);
3428 namesv = cx->blk_eval.old_namesv;
3430 (void)hv_store(GvHVn(PL_incgv),
3431 SvPVX_const(namesv),
3432 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3434 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3437 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3440 if (!*(SvPV_nolen_const(errsv))) {
3441 sv_setpvs(errsv, "Compilation error");
3444 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3449 LEAVE_with_name("evalcomp");
3451 CopLINE_set(&PL_compiling, 0);
3452 SAVEFREEOP(PL_eval_root);
3453 cv_forget_slab(evalcv);
3455 DEBUG_x(dump_eval());
3457 /* Register with debugger: */
3458 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3459 CV * const cv = get_cvs("DB::postponed", 0);
3463 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3465 call_sv(MUTABLE_SV(cv), G_DISCARD);
3469 if (PL_unitcheckav) {
3470 OP *es = PL_eval_start;
3471 call_list(PL_scopestack_ix, PL_unitcheckav);
3475 /* compiled okay, so do it */
3477 CvDEPTH(evalcv) = 1;
3478 SP = PL_stack_base + POPMARK; /* pop original mark */
3479 PL_op = saveop; /* The caller may need it. */
3480 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3487 S_check_type_and_open(pTHX_ SV *name)
3492 const char *p = SvPV_const(name, len);
3495 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3497 /* checking here captures a reasonable error message when
3498 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3499 * user gets a confusing message about looking for the .pmc file
3500 * rather than for the .pm file.
3501 * This check prevents a \0 in @INC causing problems.
3503 if (!IS_SAFE_PATHNAME(p, len, "require"))
3506 /* on Win32 stat is expensive (it does an open() and close() twice and
3507 a couple other IO calls), the open will fail with a dir on its own with
3508 errno EACCES, so only do a stat to separate a dir from a real EACCES
3509 caused by user perms */
3511 /* we use the value of errno later to see how stat() or open() failed.
3512 * We don't want it set if the stat succeeded but we still failed,
3513 * such as if the name exists, but is a directory */
3516 st_rc = PerlLIO_stat(p, &st);
3518 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3523 retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3525 /* EACCES stops the INC search early in pp_require to implement
3526 feature RT #113422 */
3527 if(!retio && errno == EACCES) { /* exists but probably a directory */
3529 st_rc = PerlLIO_stat(p, &st);
3531 if(S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
3542 #ifndef PERL_DISABLE_PMC
3544 S_doopen_pm(pTHX_ SV *name)
3547 const char *p = SvPV_const(name, namelen);
3549 PERL_ARGS_ASSERT_DOOPEN_PM;
3551 /* check the name before trying for the .pmc name to avoid the
3552 * warning referring to the .pmc which the user probably doesn't
3553 * know or care about
3555 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3558 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3559 SV *const pmcsv = sv_newmortal();
3562 SvSetSV_nosteal(pmcsv,name);
3563 sv_catpvs(pmcsv, "c");
3565 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3566 return check_type_and_open(pmcsv);
3568 return check_type_and_open(name);
3571 # define doopen_pm(name) check_type_and_open(name)
3572 #endif /* !PERL_DISABLE_PMC */
3574 /* require doesn't search for absolute names, or when the name is
3575 explicitly relative the current directory */
3576 PERL_STATIC_INLINE bool
3577 S_path_is_searchable(const char *name)
3579 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3581 if (PERL_FILE_IS_ABSOLUTE(name)
3583 || (*name == '.' && ((name[1] == '/' ||
3584 (name[1] == '.' && name[2] == '/'))
3585 || (name[1] == '\\' ||
3586 ( name[1] == '.' && name[2] == '\\')))
3589 || (*name == '.' && (name[1] == '/' ||
3590 (name[1] == '.' && name[2] == '/')))
3601 /* also used for: pp_dofile() */
3613 int vms_unixname = 0;
3616 const char *tryname = NULL;
3618 const I32 gimme = GIMME_V;
3619 int filter_has_file = 0;
3620 PerlIO *tryrsfp = NULL;
3621 SV *filter_cache = NULL;
3622 SV *filter_state = NULL;
3623 SV *filter_sub = NULL;
3627 bool path_searchable;
3631 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3632 sv = sv_2mortal(new_version(sv));
3633 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3634 upg_version(PL_patchlevel, TRUE);
3635 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3636 if ( vcmp(sv,PL_patchlevel) <= 0 )
3637 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3638 SVfARG(sv_2mortal(vnormal(sv))),
3639 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3643 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3646 SV * const req = SvRV(sv);
3647 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3649 /* get the left hand term */
3650 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3652 first = SvIV(*av_fetch(lav,0,0));
3653 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3654 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3655 || av_tindex(lav) > 1 /* FP with > 3 digits */
3656 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3658 DIE(aTHX_ "Perl %"SVf" required--this is only "
3660 SVfARG(sv_2mortal(vnormal(req))),
3661 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3664 else { /* probably 'use 5.10' or 'use 5.8' */
3668 if (av_tindex(lav)>=1)
3669 second = SvIV(*av_fetch(lav,1,0));
3671 second /= second >= 600 ? 100 : 10;
3672 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3673 (int)first, (int)second);
3674 upg_version(hintsv, TRUE);
3676 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3677 "--this is only %"SVf", stopped",
3678 SVfARG(sv_2mortal(vnormal(req))),
3679 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3680 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3689 DIE(aTHX_ "Missing or undefined argument to require");
3690 name = SvPV_nomg_const(sv, len);
3691 if (!(name && len > 0 && *name))
3692 DIE(aTHX_ "Missing or undefined argument to require");
3694 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3695 DIE(aTHX_ "Can't locate %s: %s",
3696 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3697 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3700 TAINT_PROPER("require");
3702 path_searchable = path_is_searchable(name);
3705 /* The key in the %ENV hash is in the syntax of file passed as the argument
3706 * usually this is in UNIX format, but sometimes in VMS format, which
3707 * can result in a module being pulled in more than once.
3708 * To prevent this, the key must be stored in UNIX format if the VMS
3709 * name can be translated to UNIX.
3713 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3715 unixlen = strlen(unixname);
3721 /* if not VMS or VMS name can not be translated to UNIX, pass it
3724 unixname = (char *) name;
3727 if (PL_op->op_type == OP_REQUIRE) {
3728 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3729 unixname, unixlen, 0);
3731 if (*svp != &PL_sv_undef)
3734 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3735 "Compilation failed in require", unixname);
3739 LOADING_FILE_PROBE(unixname);
3741 /* prepare to compile file */
3743 if (!path_searchable) {
3744 /* At this point, name is SvPVX(sv) */
3746 tryrsfp = doopen_pm(sv);
3748 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3749 AV * const ar = GvAVn(PL_incgv);
3756 namesv = newSV_type(SVt_PV);
3757 for (i = 0; i <= AvFILL(ar); i++) {
3758 SV * const dirsv = *av_fetch(ar, i, TRUE);
3766 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3767 && !SvOBJECT(SvRV(loader)))
3769 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3773 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3774 PTR2UV(SvRV(dirsv)), name);
3775 tryname = SvPVX_const(namesv);
3778 if (SvPADTMP(nsv)) {
3779 nsv = sv_newmortal();
3780 SvSetSV_nosteal(nsv,sv);
3783 ENTER_with_name("call_INC");
3791 if (SvGMAGICAL(loader)) {
3792 SV *l = sv_newmortal();
3793 sv_setsv_nomg(l, loader);
3796 if (sv_isobject(loader))
3797 count = call_method("INC", G_ARRAY);
3799 count = call_sv(loader, G_ARRAY);
3809 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3810 && !isGV_with_GP(SvRV(arg))) {
3811 filter_cache = SvRV(arg);
3818 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3822 if (isGV_with_GP(arg)) {
3823 IO * const io = GvIO((const GV *)arg);
3828 tryrsfp = IoIFP(io);
3829 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3830 PerlIO_close(IoOFP(io));
3841 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3843 SvREFCNT_inc_simple_void_NN(filter_sub);
3846 filter_state = SP[i];
3847 SvREFCNT_inc_simple_void(filter_state);
3851 if (!tryrsfp && (filter_cache || filter_sub)) {
3852 tryrsfp = PerlIO_open(BIT_BUCKET,
3858 /* FREETMPS may free our filter_cache */
3859 SvREFCNT_inc_simple_void(filter_cache);
3863 LEAVE_with_name("call_INC");
3865 /* Now re-mortalize it. */
3866 sv_2mortal(filter_cache);
3868 /* Adjust file name if the hook has set an %INC entry.
3869 This needs to happen after the FREETMPS above. */
3870 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3872 tryname = SvPV_nolen_const(*svp);
3879 filter_has_file = 0;
3880 filter_cache = NULL;
3882 SvREFCNT_dec_NN(filter_state);
3883 filter_state = NULL;
3886 SvREFCNT_dec_NN(filter_sub);
3891 if (path_searchable) {
3896 dir = SvPV_nomg_const(dirsv, dirlen);
3902 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3906 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3909 sv_setpv(namesv, unixdir);
3910 sv_catpv(namesv, unixname);
3912 # ifdef __SYMBIAN32__
3913 if (PL_origfilename[0] &&
3914 PL_origfilename[1] == ':' &&
3915 !(dir[0] && dir[1] == ':'))
3916 Perl_sv_setpvf(aTHX_ namesv,
3921 Perl_sv_setpvf(aTHX_ namesv,
3925 /* The equivalent of
3926 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3927 but without the need to parse the format string, or
3928 call strlen on either pointer, and with the correct
3929 allocation up front. */
3931 char *tmp = SvGROW(namesv, dirlen + len + 2);
3933 memcpy(tmp, dir, dirlen);
3936 /* Avoid '<dir>//<file>' */
3937 if (!dirlen || *(tmp-1) != '/') {
3940 /* So SvCUR_set reports the correct length below */
3944 /* name came from an SV, so it will have a '\0' at the
3945 end that we can copy as part of this memcpy(). */
3946 memcpy(tmp, name, len + 1);
3948 SvCUR_set(namesv, dirlen + len + 1);
3953 TAINT_PROPER("require");
3954 tryname = SvPVX_const(namesv);
3955 tryrsfp = doopen_pm(namesv);
3957 if (tryname[0] == '.' && tryname[1] == '/') {
3959 while (*++tryname == '/') {}
3963 else if (errno == EMFILE || errno == EACCES) {
3964 /* no point in trying other paths if out of handles;
3965 * on the other hand, if we couldn't open one of the
3966 * files, then going on with the search could lead to
3967 * unexpected results; see perl #113422
3976 saved_errno = errno; /* sv_2mortal can realloc things */
3979 if (PL_op->op_type == OP_REQUIRE) {
3980 if(saved_errno == EMFILE || saved_errno == EACCES) {
3981 /* diag_listed_as: Can't locate %s */
3982 DIE(aTHX_ "Can't locate %s: %s: %s",
3983 name, tryname, Strerror(saved_errno));
3985 if (namesv) { /* did we lookup @INC? */
3986 AV * const ar = GvAVn(PL_incgv);
3988 SV *const msg = newSVpvs_flags("", SVs_TEMP);
3989 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3990 for (i = 0; i <= AvFILL(ar); i++) {
3991 sv_catpvs(inc, " ");
3992 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3994 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
3995 const char *c, *e = name + len - 3;
3996 sv_catpv(msg, " (you may need to install the ");
3997 for (c = name; c < e; c++) {
3999 sv_catpvs(msg, "::");
4002 sv_catpvn(msg, c, 1);
4005 sv_catpv(msg, " module)");
4007 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4008 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4010 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4011 sv_catpv(msg, " (did you run h2ph?)");
4014 /* diag_listed_as: Can't locate %s */
4016 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4020 DIE(aTHX_ "Can't locate %s", name);
4027 SETERRNO(0, SS_NORMAL);
4029 /* Assume success here to prevent recursive requirement. */
4030 /* name is never assigned to again, so len is still strlen(name) */
4031 /* Check whether a hook in @INC has already filled %INC */
4033 (void)hv_store(GvHVn(PL_incgv),
4034 unixname, unixlen, newSVpv(tryname,0),0);
4036 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4038 (void)hv_store(GvHVn(PL_incgv),
4039 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4042 ENTER_with_name("eval");
4044 SAVECOPFILE_FREE(&PL_compiling);
4045 CopFILE_set(&PL_compiling, tryname);
4046 lex_start(NULL, tryrsfp, 0);
4048 if (filter_sub || filter_cache) {
4049 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4050 than hanging another SV from it. In turn, filter_add() optionally
4051 takes the SV to use as the filter (or creates a new SV if passed
4052 NULL), so simply pass in whatever value filter_cache has. */
4053 SV * const fc = filter_cache ? newSV(0) : NULL;
4055 if (fc) sv_copypv(fc, filter_cache);
4056 datasv = filter_add(S_run_user_filter, fc);
4057 IoLINES(datasv) = filter_has_file;
4058 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4059 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4062 /* switch to eval mode */
4063 PUSHBLOCK(cx, CXt_EVAL, SP);
4065 cx->blk_eval.retop = PL_op->op_next;
4067 SAVECOPLINE(&PL_compiling);
4068 CopLINE_set(&PL_compiling, 0);
4072 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4073 op = DOCATCH(PL_eval_start);
4075 op = PL_op->op_next;
4077 LOADED_FILE_PROBE(unixname);
4082 /* This is a op added to hold the hints hash for
4083 pp_entereval. The hash can be modified by the code
4084 being eval'ed, so we return a copy instead. */
4089 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4099 const I32 gimme = GIMME_V;
4100 const U32 was = PL_breakable_sub_gen;
4101 char tbuf[TYPE_DIGITS(long) + 12];
4102 bool saved_delete = FALSE;
4103 char *tmpbuf = tbuf;
4106 U32 seq, lex_flags = 0;
4107 HV *saved_hh = NULL;
4108 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4110 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4111 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4113 else if (PL_hints & HINT_LOCALIZE_HH || (
4114 PL_op->op_private & OPpEVAL_COPHH
4115 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4117 saved_hh = cop_hints_2hv(PL_curcop, 0);
4118 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4122 /* make sure we've got a plain PV (no overload etc) before testing
4123 * for taint. Making a copy here is probably overkill, but better
4124 * safe than sorry */
4126 const char * const p = SvPV_const(sv, len);
4128 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4129 lex_flags |= LEX_START_COPIED;
4131 if (bytes && SvUTF8(sv))
4132 SvPVbyte_force(sv, len);
4134 else if (bytes && SvUTF8(sv)) {
4135 /* Don't modify someone else's scalar */
4138 (void)sv_2mortal(sv);
4139 SvPVbyte_force(sv,len);
4140 lex_flags |= LEX_START_COPIED;
4143 TAINT_IF(SvTAINTED(sv));
4144 TAINT_PROPER("eval");
4146 ENTER_with_name("eval");
4147 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4148 ? LEX_IGNORE_UTF8_HINTS
4149 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4154 /* switch to eval mode */
4156 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4157 SV * const temp_sv = sv_newmortal();
4158 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4159 (unsigned long)++PL_evalseq,
4160 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4161 tmpbuf = SvPVX(temp_sv);
4162 len = SvCUR(temp_sv);
4165 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4166 SAVECOPFILE_FREE(&PL_compiling);
4167 CopFILE_set(&PL_compiling, tmpbuf+2);
4168 SAVECOPLINE(&PL_compiling);
4169 CopLINE_set(&PL_compiling, 1);
4170 /* special case: an eval '' executed within the DB package gets lexically
4171 * placed in the first non-DB CV rather than the current CV - this
4172 * allows the debugger to execute code, find lexicals etc, in the
4173 * scope of the code being debugged. Passing &seq gets find_runcv
4174 * to do the dirty work for us */
4175 runcv = find_runcv(&seq);
4177 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4179 cx->blk_eval.retop = PL_op->op_next;
4181 /* prepare to compile string */
4183 if (PERLDB_LINE_OR_SAVESRC && PL_curstash != PL_debstash)
4184 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4186 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4187 deleting the eval's FILEGV from the stash before gv_check() runs
4188 (i.e. before run-time proper). To work around the coredump that
4189 ensues, we always turn GvMULTI_on for any globals that were
4190 introduced within evals. See force_ident(). GSAR 96-10-12 */
4191 char *const safestr = savepvn(tmpbuf, len);
4192 SAVEDELETE(PL_defstash, safestr, len);
4193 saved_delete = TRUE;
4198 if (doeval(gimme, runcv, seq, saved_hh)) {
4199 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4200 ? PERLDB_LINE_OR_SAVESRC
4201 : PERLDB_SAVESRC_NOSUBS) {
4202 /* Retain the filegv we created. */
4203 } else if (!saved_delete) {
4204 char *const safestr = savepvn(tmpbuf, len);
4205 SAVEDELETE(PL_defstash, safestr, len);
4207 return DOCATCH(PL_eval_start);
4209 /* We have already left the scope set up earlier thanks to the LEAVE
4211 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4212 ? PERLDB_LINE_OR_SAVESRC
4213 : PERLDB_SAVESRC_INVALID) {
4214 /* Retain the filegv we created. */
4215 } else if (!saved_delete) {
4216 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4218 return PL_op->op_next;
4233 /* grab this value before POPEVAL restores old PL_in_eval */
4234 bool keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
4239 namesv = cx->blk_eval.old_namesv;
4240 retop = cx->blk_eval.retop;
4241 evalcv = cx->blk_eval.cv;
4243 SP = leave_common((gimme == G_VOID) ? SP : newsp, SP, newsp,
4244 gimme, SVs_TEMP, FALSE);
4245 PL_curpm = newpm; /* Don't pop $1 et al till now */
4248 assert(CvDEPTH(evalcv) == 1);
4250 CvDEPTH(evalcv) = 0;
4252 if (optype == OP_REQUIRE &&
4253 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4255 /* Unassume the success we assumed earlier. */
4256 (void)hv_delete(GvHVn(PL_incgv),
4257 SvPVX_const(namesv),
4258 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4260 Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
4261 NOT_REACHED; /* NOTREACHED */
4262 /* die_unwind() did LEAVE, or we won't be here */
4265 LEAVE_with_name("eval");
4273 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4274 close to the related Perl_create_eval_scope. */
4276 Perl_delete_eval_scope(pTHX)
4287 LEAVE_with_name("eval_scope");
4288 PERL_UNUSED_VAR(newsp);
4289 PERL_UNUSED_VAR(gimme);
4290 PERL_UNUSED_VAR(optype);
4293 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4294 also needed by Perl_fold_constants. */
4296 Perl_create_eval_scope(pTHX_ U32 flags)
4299 const I32 gimme = GIMME_V;
4301 ENTER_with_name("eval_scope");
4304 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4307 PL_in_eval = EVAL_INEVAL;
4308 if (flags & G_KEEPERR)
4309 PL_in_eval |= EVAL_KEEPERR;
4312 if (flags & G_FAKINGEVAL) {
4313 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4320 PERL_CONTEXT * const cx = create_eval_scope(0);
4321 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4322 return DOCATCH(PL_op->op_next);
4337 retop = cx->blk_eval.retop;
4339 PERL_UNUSED_VAR(optype);
4341 SP = leave_common(newsp, SP, newsp, gimme,
4342 SVs_PADTMP|SVs_TEMP, FALSE);
4343 PL_curpm = newpm; /* Don't pop $1 et al till now */
4345 LEAVE_with_name("eval_scope");
4354 const I32 gimme = GIMME_V;
4356 ENTER_with_name("given");
4359 if (PL_op->op_targ) {
4360 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4361 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4362 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4369 PUSHBLOCK(cx, CXt_GIVEN, SP);
4382 PERL_UNUSED_CONTEXT;
4385 assert(CxTYPE(cx) == CXt_GIVEN);
4387 SP = leave_common(newsp, SP, newsp, gimme,
4388 SVs_PADTMP|SVs_TEMP, FALSE);
4389 PL_curpm = newpm; /* Don't pop $1 et al till now */
4391 LEAVE_with_name("given");
4395 /* Helper routines used by pp_smartmatch */
4397 S_make_matcher(pTHX_ REGEXP *re)
4399 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4401 PERL_ARGS_ASSERT_MAKE_MATCHER;
4403 PM_SETRE(matcher, ReREFCNT_inc(re));
4405 SAVEFREEOP((OP *) matcher);
4406 ENTER_with_name("matcher"); SAVETMPS;
4412 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4417 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4419 PL_op = (OP *) matcher;
4422 (void) Perl_pp_match(aTHX);
4424 result = SvTRUEx(POPs);
4431 S_destroy_matcher(pTHX_ PMOP *matcher)
4433 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4434 PERL_UNUSED_ARG(matcher);
4437 LEAVE_with_name("matcher");
4440 /* Do a smart match */
4443 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4444 return do_smartmatch(NULL, NULL, 0);
4447 /* This version of do_smartmatch() implements the
4448 * table of smart matches that is found in perlsyn.
4451 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4455 bool object_on_left = FALSE;
4456 SV *e = TOPs; /* e is for 'expression' */
4457 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4459 /* Take care only to invoke mg_get() once for each argument.
4460 * Currently we do this by copying the SV if it's magical. */
4462 if (!copied && SvGMAGICAL(d))
4463 d = sv_mortalcopy(d);
4470 e = sv_mortalcopy(e);
4472 /* First of all, handle overload magic of the rightmost argument */
4475 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4476 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4478 tmpsv = amagic_call(d, e, smart_amg, AMGf_noleft);
4485 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4488 SP -= 2; /* Pop the values */
4493 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));