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_private & OPpTARGET_MY)
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 I32 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 assert(0); /* 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;
315 if (!(mg = mg_find_mglob(sv))) {
316 mg = sv_magicext_mglob(sv);
319 MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
322 (void)ReREFCNT_inc(rx);
323 /* update the taint state of various various variables in preparation
324 * for calling the code block.
325 * See "how taint works" above pp_subst() */
327 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
328 cx->sb_rxtainted |= SUBST_TAINT_PAT;
330 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
331 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
332 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
334 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
336 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
337 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
338 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
339 ? cx->sb_dstr : cx->sb_targ);
342 rxres_save(&cx->sb_rxres, rx);
344 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
348 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
353 PERL_ARGS_ASSERT_RXRES_SAVE;
356 if (!p || p[1] < RX_NPARENS(rx)) {
358 i = 7 + (RX_NPARENS(rx)+1) * 2;
360 i = 6 + (RX_NPARENS(rx)+1) * 2;
369 /* what (if anything) to free on croak */
370 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
371 RX_MATCH_COPIED_off(rx);
372 *p++ = RX_NPARENS(rx);
375 *p++ = PTR2UV(RX_SAVED_COPY(rx));
376 RX_SAVED_COPY(rx) = NULL;
379 *p++ = PTR2UV(RX_SUBBEG(rx));
380 *p++ = (UV)RX_SUBLEN(rx);
381 *p++ = (UV)RX_SUBOFFSET(rx);
382 *p++ = (UV)RX_SUBCOFFSET(rx);
383 for (i = 0; i <= RX_NPARENS(rx); ++i) {
384 *p++ = (UV)RX_OFFS(rx)[i].start;
385 *p++ = (UV)RX_OFFS(rx)[i].end;
390 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
395 PERL_ARGS_ASSERT_RXRES_RESTORE;
398 RX_MATCH_COPY_FREE(rx);
399 RX_MATCH_COPIED_set(rx, *p);
401 RX_NPARENS(rx) = *p++;
404 if (RX_SAVED_COPY(rx))
405 SvREFCNT_dec (RX_SAVED_COPY(rx));
406 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
410 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
411 RX_SUBLEN(rx) = (I32)(*p++);
412 RX_SUBOFFSET(rx) = (I32)*p++;
413 RX_SUBCOFFSET(rx) = (I32)*p++;
414 for (i = 0; i <= RX_NPARENS(rx); ++i) {
415 RX_OFFS(rx)[i].start = (I32)(*p++);
416 RX_OFFS(rx)[i].end = (I32)(*p++);
421 S_rxres_free(pTHX_ void **rsp)
423 UV * const p = (UV*)*rsp;
425 PERL_ARGS_ASSERT_RXRES_FREE;
429 void *tmp = INT2PTR(char*,*p);
432 U32 i = 9 + p[1] * 2;
434 U32 i = 8 + p[1] * 2;
439 SvREFCNT_dec (INT2PTR(SV*,p[2]));
442 PoisonFree(p, i, sizeof(UV));
451 #define FORM_NUM_BLANK (1<<30)
452 #define FORM_NUM_POINT (1<<29)
456 dSP; dMARK; dORIGMARK;
457 SV * const tmpForm = *++MARK;
458 SV *formsv; /* contains text of original format */
459 U32 *fpc; /* format ops program counter */
460 char *t; /* current append position in target string */
461 const char *f; /* current position in format string */
463 SV *sv = NULL; /* current item */
464 const char *item = NULL;/* string value of current item */
465 I32 itemsize = 0; /* length (chars) of item, possibly truncated */
466 I32 itembytes = 0; /* as itemsize, but length in bytes */
467 I32 fieldsize = 0; /* width of current field */
468 I32 lines = 0; /* number of lines that have been output */
469 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
470 const char *chophere = NULL; /* where to chop current item */
471 STRLEN linemark = 0; /* pos of start of line in output */
473 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
474 STRLEN len; /* length of current sv */
475 STRLEN linemax; /* estimate of output size in bytes */
476 bool item_is_utf8 = FALSE;
477 bool targ_is_utf8 = FALSE;
480 U8 *source; /* source of bytes to append */
481 STRLEN to_copy; /* how may bytes to append */
482 char trans; /* what chars to translate */
484 mg = doparseform(tmpForm);
486 fpc = (U32*)mg->mg_ptr;
487 /* the actual string the format was compiled from.
488 * with overload etc, this may not match tmpForm */
492 SvPV_force(PL_formtarget, len);
493 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
494 SvTAINTED_on(PL_formtarget);
495 if (DO_UTF8(PL_formtarget))
497 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
498 t = SvGROW(PL_formtarget, len + linemax + 1);
499 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
501 f = SvPV_const(formsv, len);
505 const char *name = "???";
508 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
509 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
510 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
511 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
512 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
514 case FF_CHECKNL: name = "CHECKNL"; break;
515 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
516 case FF_SPACE: name = "SPACE"; break;
517 case FF_HALFSPACE: name = "HALFSPACE"; break;
518 case FF_ITEM: name = "ITEM"; break;
519 case FF_CHOP: name = "CHOP"; break;
520 case FF_LINEGLOB: name = "LINEGLOB"; break;
521 case FF_NEWLINE: name = "NEWLINE"; break;
522 case FF_MORE: name = "MORE"; break;
523 case FF_LINEMARK: name = "LINEMARK"; break;
524 case FF_END: name = "END"; break;
525 case FF_0DECIMAL: name = "0DECIMAL"; break;
526 case FF_LINESNGL: name = "LINESNGL"; break;
529 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
531 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
534 case FF_LINEMARK: /* start (or end) of a line */
535 linemark = t - SvPVX(PL_formtarget);
540 case FF_LITERAL: /* append <arg> literal chars */
545 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
548 case FF_SKIP: /* skip <arg> chars in format */
552 case FF_FETCH: /* get next item and set field size to <arg> */
561 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
564 SvTAINTED_on(PL_formtarget);
567 case FF_CHECKNL: /* find max len of item (up to \n) that fits field */
569 const char *s = item = SvPV_const(sv, len);
570 const char *send = s + len;
573 item_is_utf8 = DO_UTF8(sv);
585 if (itemsize == fieldsize)
588 itembytes = s - item;
592 case FF_CHECKCHOP: /* like CHECKNL, but up to highest split point */
594 const char *s = item = SvPV_const(sv, len);
595 const char *send = s + len;
599 item_is_utf8 = DO_UTF8(sv);
601 /* look for a legal split position */
609 /* provisional split point */
613 /* we delay testing fieldsize until after we've
614 * processed the possible split char directly
615 * following the last field char; so if fieldsize=3
616 * and item="a b cdef", we consume "a b", not "a".
617 * Ditto further down.
619 if (size == fieldsize)
623 if (strchr(PL_chopset, *s)) {
624 /* provisional split point */
625 /* for a non-space split char, we include
626 * the split char; hence the '+1' */
630 if (size == fieldsize)
642 if (!chophere || s == send) {
646 itembytes = chophere - item;
651 case FF_SPACE: /* append padding space (diff of field, item size) */
652 arg = fieldsize - itemsize;
660 case FF_HALFSPACE: /* like FF_SPACE, but only append half as many */
661 arg = fieldsize - itemsize;
670 case FF_ITEM: /* append a text item, while blanking ctrl chars */
676 case FF_CHOP: /* (for ^*) chop the current item */
678 const char *s = chophere;
686 /* tied, overloaded or similar strangeness.
687 * Do it the hard way */
688 sv_setpvn(sv, s, len - (s-item));
693 case FF_LINESNGL: /* process ^* */
697 case FF_LINEGLOB: /* process @* */
699 const bool oneline = fpc[-1] == FF_LINESNGL;
700 const char *s = item = SvPV_const(sv, len);
701 const char *const send = s + len;
703 item_is_utf8 = DO_UTF8(sv);
714 to_copy = s - item - 1;
728 /* append to_copy bytes from source to PL_formstring.
729 * item_is_utf8 implies source is utf8.
730 * if trans, translate certain characters during the copy */
735 SvCUR_set(PL_formtarget,
736 t - SvPVX_const(PL_formtarget));
738 if (targ_is_utf8 && !item_is_utf8) {
739 source = tmp = bytes_to_utf8(source, &to_copy);
741 if (item_is_utf8 && !targ_is_utf8) {
743 /* Upgrade targ to UTF8, and then we reduce it to
744 a problem we have a simple solution for.
745 Don't need get magic. */
746 sv_utf8_upgrade_nomg(PL_formtarget);
748 /* re-calculate linemark */
749 s = (U8*)SvPVX(PL_formtarget);
750 /* the bytes we initially allocated to append the
751 * whole line may have been gobbled up during the
752 * upgrade, so allocate a whole new line's worth
757 linemark = s - (U8*)SvPVX(PL_formtarget);
759 /* Easy. They agree. */
760 assert (item_is_utf8 == targ_is_utf8);
763 /* @* and ^* are the only things that can exceed
764 * the linemax, so grow by the output size, plus
765 * a whole new form's worth in case of any further
767 grow = linemax + to_copy;
769 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
770 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
772 Copy(source, t, to_copy, char);
774 /* blank out ~ or control chars, depending on trans.
775 * works on bytes not chars, so relies on not
776 * matching utf8 continuation bytes */
778 U8 *send = s + to_copy;
781 if (trans == '~' ? (ch == '~') : isCNTRL(ch))
788 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
794 case FF_0DECIMAL: /* like FF_DECIMAL but for 0### */
797 ((arg & FORM_NUM_POINT) ? "%#0*.*" NVff : "%0*.*" NVff);
800 case FF_DECIMAL: /* do @##, ^##, where <arg>=(precision|flags) */
803 ((arg & FORM_NUM_POINT) ? "%#*.*" NVff : "%*.*" NVff);
805 /* If the field is marked with ^ and the value is undefined,
807 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
815 /* overflow evidence */
816 if (num_overflow(value, fieldsize, arg)) {
822 /* Formats aren't yet marked for locales, so assume "yes". */
824 Size_t max = SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget));
826 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
827 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
828 /* we generate fmt ourselves so it is safe */
829 GCC_DIAG_IGNORE(-Wformat-nonliteral);
830 len = my_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
831 PERL_MY_SNPRINTF_POST_GUARD(len, max);
833 RESTORE_LC_NUMERIC();
838 case FF_NEWLINE: /* delete trailing spaces, then append \n */
840 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
845 case FF_BLANK: /* for arg==0: do '~'; for arg>0 : do '~~' */
848 if (arg) { /* repeat until fields exhausted? */
854 t = SvPVX(PL_formtarget) + linemark;
859 case FF_MORE: /* replace long end of string with '...' */
861 const char *s = chophere;
862 const char *send = item + len;
864 while (isSPACE(*s) && (s < send))
869 arg = fieldsize - itemsize;
876 if (strnEQ(s1," ",3)) {
877 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
887 case FF_END: /* tidy up, then return */
889 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
891 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
893 SvUTF8_on(PL_formtarget);
894 FmLINES(PL_formtarget) += lines;
896 if (fpc[-1] == FF_BLANK)
897 RETURNOP(cLISTOP->op_first);
909 if (PL_stack_base + *PL_markstack_ptr == SP) {
911 if (GIMME_V == G_SCALAR)
913 RETURNOP(PL_op->op_next->op_next);
915 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
916 Perl_pp_pushmark(aTHX); /* push dst */
917 Perl_pp_pushmark(aTHX); /* push src */
918 ENTER_with_name("grep"); /* enter outer scope */
921 if (PL_op->op_private & OPpGREP_LEX)
922 SAVESPTR(PAD_SVl(PL_op->op_targ));
925 ENTER_with_name("grep_item"); /* enter inner scope */
928 src = PL_stack_base[*PL_markstack_ptr];
930 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
934 if (PL_op->op_private & OPpGREP_LEX)
935 PAD_SVl(PL_op->op_targ) = src;
940 if (PL_op->op_type == OP_MAPSTART)
941 Perl_pp_pushmark(aTHX); /* push top */
942 return ((LOGOP*)PL_op->op_next)->op_other;
948 const I32 gimme = GIMME_V;
949 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
955 /* first, move source pointer to the next item in the source list */
956 ++PL_markstack_ptr[-1];
958 /* if there are new items, push them into the destination list */
959 if (items && gimme != G_VOID) {
960 /* might need to make room back there first */
961 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
962 /* XXX this implementation is very pessimal because the stack
963 * is repeatedly extended for every set of items. Is possible
964 * to do this without any stack extension or copying at all
965 * by maintaining a separate list over which the map iterates
966 * (like foreach does). --gsar */
968 /* everything in the stack after the destination list moves
969 * towards the end the stack by the amount of room needed */
970 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
972 /* items to shift up (accounting for the moved source pointer) */
973 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
975 /* This optimization is by Ben Tilly and it does
976 * things differently from what Sarathy (gsar)
977 * is describing. The downside of this optimization is
978 * that leaves "holes" (uninitialized and hopefully unused areas)
979 * to the Perl stack, but on the other hand this
980 * shouldn't be a problem. If Sarathy's idea gets
981 * implemented, this optimization should become
982 * irrelevant. --jhi */
984 shift = count; /* Avoid shifting too often --Ben Tilly */
989 PL_markstack_ptr[-1] += shift;
990 *PL_markstack_ptr += shift;
994 /* copy the new items down to the destination list */
995 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
996 if (gimme == G_ARRAY) {
997 /* add returned items to the collection (making mortal copies
998 * if necessary), then clear the current temps stack frame
999 * *except* for those items. We do this splicing the items
1000 * into the start of the tmps frame (so some items may be on
1001 * the tmps stack twice), then moving PL_tmps_floor above
1002 * them, then freeing the frame. That way, the only tmps that
1003 * accumulate over iterations are the return values for map.
1004 * We have to do to this way so that everything gets correctly
1005 * freed if we die during the map.
1009 /* make space for the slice */
1010 EXTEND_MORTAL(items);
1011 tmpsbase = PL_tmps_floor + 1;
1012 Move(PL_tmps_stack + tmpsbase,
1013 PL_tmps_stack + tmpsbase + items,
1014 PL_tmps_ix - PL_tmps_floor,
1016 PL_tmps_ix += items;
1021 sv = sv_mortalcopy(sv);
1023 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1025 /* clear the stack frame except for the items */
1026 PL_tmps_floor += items;
1028 /* FREETMPS may have cleared the TEMP flag on some of the items */
1031 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1034 /* scalar context: we don't care about which values map returns
1035 * (we use undef here). And so we certainly don't want to do mortal
1036 * copies of meaningless values. */
1037 while (items-- > 0) {
1039 *dst-- = &PL_sv_undef;
1047 LEAVE_with_name("grep_item"); /* exit inner scope */
1050 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1052 (void)POPMARK; /* pop top */
1053 LEAVE_with_name("grep"); /* exit outer scope */
1054 (void)POPMARK; /* pop src */
1055 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1056 (void)POPMARK; /* pop dst */
1057 SP = PL_stack_base + POPMARK; /* pop original mark */
1058 if (gimme == G_SCALAR) {
1059 if (PL_op->op_private & OPpGREP_LEX) {
1060 SV* sv = sv_newmortal();
1061 sv_setiv(sv, items);
1069 else if (gimme == G_ARRAY)
1076 ENTER_with_name("grep_item"); /* enter inner scope */
1079 /* set $_ to the new source item */
1080 src = PL_stack_base[PL_markstack_ptr[-1]];
1081 if (SvPADTMP(src)) {
1082 src = sv_mortalcopy(src);
1085 if (PL_op->op_private & OPpGREP_LEX)
1086 PAD_SVl(PL_op->op_targ) = src;
1090 RETURNOP(cLOGOP->op_other);
1098 if (GIMME == G_ARRAY)
1100 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1101 return cLOGOP->op_other;
1110 if (GIMME == G_ARRAY) {
1111 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1115 SV * const targ = PAD_SV(PL_op->op_targ);
1118 if (PL_op->op_private & OPpFLIP_LINENUM) {
1119 if (GvIO(PL_last_in_gv)) {
1120 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1123 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1125 flip = SvIV(sv) == SvIV(GvSV(gv));
1131 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1132 if (PL_op->op_flags & OPf_SPECIAL) {
1140 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1143 sv_setpvs(TARG, "");
1149 /* This code tries to decide if "$left .. $right" should use the
1150 magical string increment, or if the range is numeric (we make
1151 an exception for .."0" [#18165]). AMS 20021031. */
1153 #define RANGE_IS_NUMERIC(left,right) ( \
1154 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1155 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1156 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1157 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1158 && (!SvOK(right) || looks_like_number(right))))
1164 if (GIMME == G_ARRAY) {
1170 if (RANGE_IS_NUMERIC(left,right)) {
1172 if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) ||
1173 (SvOK(right) && (SvIOK(right)
1174 ? SvIsUV(right) && SvUV(right) > IV_MAX
1175 : SvNV_nomg(right) > IV_MAX)))
1176 DIE(aTHX_ "Range iterator outside integer range");
1177 i = SvIV_nomg(left);
1178 j = SvIV_nomg(right);
1180 /* Dance carefully around signed max. */
1181 bool overflow = (i <= 0 && j > SSize_t_MAX + i - 1);
1184 /* The wraparound of signed integers is undefined
1185 * behavior, but here we aim for count >=1, and
1186 * negative count is just wrong. */
1191 Perl_croak(aTHX_ "Out of memory during list extend");
1198 SV * const sv = sv_2mortal(newSViv(i++));
1204 const char * const lpv = SvPV_nomg_const(left, llen);
1205 const char * const tmps = SvPV_nomg_const(right, len);
1207 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1208 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1210 if (strEQ(SvPVX_const(sv),tmps))
1212 sv = sv_2mortal(newSVsv(sv));
1219 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1223 if (PL_op->op_private & OPpFLIP_LINENUM) {
1224 if (GvIO(PL_last_in_gv)) {
1225 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1228 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1229 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1237 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1238 sv_catpvs(targ, "E0");
1248 static const char * const context_name[] = {
1250 NULL, /* CXt_WHEN never actually needs "block" */
1251 NULL, /* CXt_BLOCK never actually needs "block" */
1252 NULL, /* CXt_GIVEN never actually needs "block" */
1253 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1254 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1255 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1256 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1264 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
1268 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1270 for (i = cxstack_ix; i >= 0; i--) {
1271 const PERL_CONTEXT * const cx = &cxstack[i];
1272 switch (CxTYPE(cx)) {
1278 /* diag_listed_as: Exiting subroutine via %s */
1279 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1280 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1281 if (CxTYPE(cx) == CXt_NULL)
1284 case CXt_LOOP_LAZYIV:
1285 case CXt_LOOP_LAZYSV:
1287 case CXt_LOOP_PLAIN:
1289 STRLEN cx_label_len = 0;
1290 U32 cx_label_flags = 0;
1291 const char *cx_label = CxLABEL_len_flags(cx, &cx_label_len, &cx_label_flags);
1293 ( (cx_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
1296 (const U8*)cx_label, cx_label_len,
1297 (const U8*)label, len) == 0)
1299 (const U8*)label, len,
1300 (const U8*)cx_label, cx_label_len) == 0)
1301 : (len == cx_label_len && ((cx_label == label)
1302 || memEQ(cx_label, label, len))) )) {
1303 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1304 (long)i, cx_label));
1307 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1318 Perl_dowantarray(pTHX)
1320 const I32 gimme = block_gimme();
1321 return (gimme == G_VOID) ? G_SCALAR : gimme;
1325 Perl_block_gimme(pTHX)
1327 const I32 cxix = dopoptosub(cxstack_ix);
1331 switch (cxstack[cxix].blk_gimme) {
1339 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1341 NOT_REACHED; /* NOTREACHED */
1345 Perl_is_lvalue_sub(pTHX)
1347 const I32 cxix = dopoptosub(cxstack_ix);
1348 assert(cxix >= 0); /* We should only be called from inside subs */
1350 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1351 return CxLVAL(cxstack + cxix);
1356 /* only used by PUSHSUB */
1358 Perl_was_lvalue_sub(pTHX)
1360 const I32 cxix = dopoptosub(cxstack_ix-1);
1361 assert(cxix >= 0); /* We should only be called from inside subs */
1363 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1364 return CxLVAL(cxstack + cxix);
1370 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1374 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1376 PERL_UNUSED_CONTEXT;
1379 for (i = startingblock; i >= 0; i--) {
1380 const PERL_CONTEXT * const cx = &cxstk[i];
1381 switch (CxTYPE(cx)) {
1385 /* in sub foo { /(?{...})/ }, foo ends up on the CX stack
1386 * twice; the first for the normal foo() call, and the second
1387 * for a faked up re-entry into the sub to execute the
1388 * code block. Hide this faked entry from the world. */
1389 if (cx->cx_type & CXp_SUB_RE_FAKE)
1394 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1402 S_dopoptoeval(pTHX_ I32 startingblock)
1405 for (i = startingblock; i >= 0; i--) {
1406 const PERL_CONTEXT *cx = &cxstack[i];
1407 switch (CxTYPE(cx)) {
1411 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1419 S_dopoptoloop(pTHX_ I32 startingblock)
1422 for (i = startingblock; i >= 0; i--) {
1423 const PERL_CONTEXT * const cx = &cxstack[i];
1424 switch (CxTYPE(cx)) {
1430 /* diag_listed_as: Exiting subroutine via %s */
1431 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1432 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1433 if ((CxTYPE(cx)) == CXt_NULL)
1436 case CXt_LOOP_LAZYIV:
1437 case CXt_LOOP_LAZYSV:
1439 case CXt_LOOP_PLAIN:
1440 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1448 S_dopoptogiven(pTHX_ I32 startingblock)
1451 for (i = startingblock; i >= 0; i--) {
1452 const PERL_CONTEXT *cx = &cxstack[i];
1453 switch (CxTYPE(cx)) {
1457 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1459 case CXt_LOOP_PLAIN:
1460 assert(!CxFOREACHDEF(cx));
1462 case CXt_LOOP_LAZYIV:
1463 case CXt_LOOP_LAZYSV:
1465 if (CxFOREACHDEF(cx)) {
1466 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1475 S_dopoptowhen(pTHX_ I32 startingblock)
1478 for (i = startingblock; i >= 0; i--) {
1479 const PERL_CONTEXT *cx = &cxstack[i];
1480 switch (CxTYPE(cx)) {
1484 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1492 Perl_dounwind(pTHX_ I32 cxix)
1496 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1499 while (cxstack_ix > cxix) {
1501 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1502 DEBUG_CX("UNWIND"); \
1503 /* Note: we don't need to restore the base context info till the end. */
1504 switch (CxTYPE(cx)) {
1507 continue; /* not break */
1515 case CXt_LOOP_LAZYIV:
1516 case CXt_LOOP_LAZYSV:
1518 case CXt_LOOP_PLAIN:
1529 PERL_UNUSED_VAR(optype);
1533 Perl_qerror(pTHX_ SV *err)
1535 PERL_ARGS_ASSERT_QERROR;
1538 if (PL_in_eval & EVAL_KEEPERR) {
1539 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1543 sv_catsv(ERRSV, err);
1546 sv_catsv(PL_errors, err);
1548 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1550 ++PL_parser->error_count;
1554 Perl_die_unwind(pTHX_ SV *msv)
1556 SV *exceptsv = sv_mortalcopy(msv);
1557 U8 in_eval = PL_in_eval;
1558 PERL_ARGS_ASSERT_DIE_UNWIND;
1565 * Historically, perl used to set ERRSV ($@) early in the die
1566 * process and rely on it not getting clobbered during unwinding.
1567 * That sucked, because it was liable to get clobbered, so the
1568 * setting of ERRSV used to emit the exception from eval{} has
1569 * been moved to much later, after unwinding (see just before
1570 * JMPENV_JUMP below). However, some modules were relying on the
1571 * early setting, by examining $@ during unwinding to use it as
1572 * a flag indicating whether the current unwinding was caused by
1573 * an exception. It was never a reliable flag for that purpose,
1574 * being totally open to false positives even without actual
1575 * clobberage, but was useful enough for production code to
1576 * semantically rely on it.
1578 * We'd like to have a proper introspective interface that
1579 * explicitly describes the reason for whatever unwinding
1580 * operations are currently in progress, so that those modules
1581 * work reliably and $@ isn't further overloaded. But we don't
1582 * have one yet. In its absence, as a stopgap measure, ERRSV is
1583 * now *additionally* set here, before unwinding, to serve as the
1584 * (unreliable) flag that it used to.
1586 * This behaviour is temporary, and should be removed when a
1587 * proper way to detect exceptional unwinding has been developed.
1588 * As of 2010-12, the authors of modules relying on the hack
1589 * are aware of the issue, because the modules failed on
1590 * perls 5.13.{1..7} which had late setting of $@ without this
1591 * early-setting hack.
1593 if (!(in_eval & EVAL_KEEPERR)) {
1594 SvTEMP_off(exceptsv);
1595 sv_setsv(ERRSV, exceptsv);
1598 if (in_eval & EVAL_KEEPERR) {
1599 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1603 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1604 && PL_curstackinfo->si_prev)
1618 JMPENV *restartjmpenv;
1621 if (cxix < cxstack_ix)
1624 POPBLOCK(cx,PL_curpm);
1625 if (CxTYPE(cx) != CXt_EVAL) {
1627 const char* message = SvPVx_const(exceptsv, msglen);
1628 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1629 PerlIO_write(Perl_error_log, message, msglen);
1633 namesv = cx->blk_eval.old_namesv;
1635 oldcop = cx->blk_oldcop;
1637 restartjmpenv = cx->blk_eval.cur_top_env;
1638 restartop = cx->blk_eval.retop;
1640 if (gimme == G_SCALAR)
1641 *++newsp = &PL_sv_undef;
1642 PL_stack_sp = newsp;
1646 if (optype == OP_REQUIRE) {
1647 assert (PL_curcop == oldcop);
1648 (void)hv_store(GvHVn(PL_incgv),
1649 SvPVX_const(namesv),
1650 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1652 /* note that unlike pp_entereval, pp_require isn't
1653 * supposed to trap errors. So now that we've popped the
1654 * EVAL that pp_require pushed, and processed the error
1655 * message, rethrow the error */
1656 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1657 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1660 if (!(in_eval & EVAL_KEEPERR))
1661 sv_setsv(ERRSV, exceptsv);
1662 PL_restartjmpenv = restartjmpenv;
1663 PL_restartop = restartop;
1665 assert(0); /* NOTREACHED */
1669 write_to_stderr(exceptsv);
1671 assert(0); /* NOTREACHED */
1677 if (SvTRUE(left) != SvTRUE(right))
1685 =head1 CV Manipulation Functions
1687 =for apidoc caller_cx
1689 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1690 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1691 information returned to Perl by C<caller>. Note that XSUBs don't get a
1692 stack frame, so C<caller_cx(0, NULL)> will return information for the
1693 immediately-surrounding Perl code.
1695 This function skips over the automatic calls to C<&DB::sub> made on the
1696 behalf of the debugger. If the stack frame requested was a sub called by
1697 C<DB::sub>, the return value will be the frame for the call to
1698 C<DB::sub>, since that has the correct line number/etc. for the call
1699 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1700 frame for the sub call itself.
1705 const PERL_CONTEXT *
1706 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1708 I32 cxix = dopoptosub(cxstack_ix);
1709 const PERL_CONTEXT *cx;
1710 const PERL_CONTEXT *ccstack = cxstack;
1711 const PERL_SI *top_si = PL_curstackinfo;
1714 /* we may be in a higher stacklevel, so dig down deeper */
1715 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1716 top_si = top_si->si_prev;
1717 ccstack = top_si->si_cxstack;
1718 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1722 /* caller() should not report the automatic calls to &DB::sub */
1723 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1724 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1728 cxix = dopoptosub_at(ccstack, cxix - 1);
1731 cx = &ccstack[cxix];
1732 if (dbcxp) *dbcxp = cx;
1734 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1735 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1736 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1737 field below is defined for any cx. */
1738 /* caller() should not report the automatic calls to &DB::sub */
1739 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1740 cx = &ccstack[dbcxix];
1749 const PERL_CONTEXT *cx;
1750 const PERL_CONTEXT *dbcx;
1752 const HEK *stash_hek;
1754 bool has_arg = MAXARG && TOPs;
1763 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1765 if (GIMME != G_ARRAY) {
1773 assert(CopSTASH(cx->blk_oldcop));
1774 stash_hek = SvTYPE(CopSTASH(cx->blk_oldcop)) == SVt_PVHV
1775 ? HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop))
1777 if (GIMME != G_ARRAY) {
1780 PUSHs(&PL_sv_undef);
1783 sv_sethek(TARG, stash_hek);
1792 PUSHs(&PL_sv_undef);
1795 sv_sethek(TARG, stash_hek);
1798 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1799 lcop = closest_cop(cx->blk_oldcop, OP_SIBLING(cx->blk_oldcop),
1800 cx->blk_sub.retop, TRUE);
1802 lcop = cx->blk_oldcop;
1803 mPUSHi((I32)CopLINE(lcop));
1806 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1807 /* So is ccstack[dbcxix]. */
1808 if (CvHASGV(dbcx->blk_sub.cv)) {
1809 PUSHs(cv_name(dbcx->blk_sub.cv, 0));
1810 PUSHs(boolSV(CxHASARGS(cx)));
1813 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1814 PUSHs(boolSV(CxHASARGS(cx)));
1818 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1821 gimme = (I32)cx->blk_gimme;
1822 if (gimme == G_VOID)
1823 PUSHs(&PL_sv_undef);
1825 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1826 if (CxTYPE(cx) == CXt_EVAL) {
1828 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1829 SV *cur_text = cx->blk_eval.cur_text;
1830 if (SvCUR(cur_text) >= 2) {
1831 PUSHs(newSVpvn_flags(SvPVX(cur_text), SvCUR(cur_text)-2,
1832 SvUTF8(cur_text)|SVs_TEMP));
1835 /* I think this is will always be "", but be sure */
1836 PUSHs(sv_2mortal(newSVsv(cur_text)));
1842 else if (cx->blk_eval.old_namesv) {
1843 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1846 /* eval BLOCK (try blocks have old_namesv == 0) */
1848 PUSHs(&PL_sv_undef);
1849 PUSHs(&PL_sv_undef);
1853 PUSHs(&PL_sv_undef);
1854 PUSHs(&PL_sv_undef);
1856 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1857 && CopSTASH_eq(PL_curcop, PL_debstash))
1859 AV * const ary = cx->blk_sub.argarray;
1860 const SSize_t off = AvARRAY(ary) - AvALLOC(ary);
1862 Perl_init_dbargs(aTHX);
1864 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1865 av_extend(PL_dbargs, AvFILLp(ary) + off);
1866 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1867 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1869 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1872 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1874 if (old_warnings == pWARN_NONE)
1875 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1876 else if (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)
1877 mask = &PL_sv_undef ;
1878 else if (old_warnings == pWARN_ALL ||
1879 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1880 /* Get the bit mask for $warnings::Bits{all}, because
1881 * it could have been extended by warnings::register */
1883 HV * const bits = get_hv("warnings::Bits", 0);
1884 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1885 mask = newSVsv(*bits_all);
1888 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1892 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1896 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1897 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1907 if (MAXARG < 1 || (!TOPs && !POPs))
1908 tmps = NULL, len = 0;
1910 tmps = SvPVx_const(POPs, len);
1911 sv_resetpvn(tmps, len, CopSTASH(PL_curcop));
1916 /* like pp_nextstate, but used instead when the debugger is active */
1920 PL_curcop = (COP*)PL_op;
1921 TAINT_NOT; /* Each statement is presumed innocent */
1922 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1927 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1928 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1932 const I32 gimme = G_ARRAY;
1934 GV * const gv = PL_DBgv;
1937 if (gv && isGV_with_GP(gv))
1940 if (!cv || (!CvROOT(cv) && !CvXSUB(cv)))
1941 DIE(aTHX_ "No DB::DB routine defined");
1943 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1944 /* don't do recursive DB::DB call */
1958 (void)(*CvXSUB(cv))(aTHX_ cv);
1964 PUSHBLOCK(cx, CXt_SUB, SP);
1966 cx->blk_sub.retop = PL_op->op_next;
1968 if (CvDEPTH(cv) >= 2) {
1969 PERL_STACK_OVERFLOW_CHECK();
1970 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1973 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1974 RETURNOP(CvSTART(cv));
1981 /* SVs on the stack that have any of the flags passed in are left as is.
1982 Other SVs are protected via the mortals stack if lvalue is true, and
1983 copied otherwise. */
1986 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme,
1987 U32 flags, bool lvalue)
1990 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
1993 if (flags & SVs_PADTMP) {
1994 flags &= ~SVs_PADTMP;
1997 if (gimme == G_SCALAR) {
1999 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2002 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2003 : sv_mortalcopy(*SP);
2005 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2008 *++MARK = &PL_sv_undef;
2012 else if (gimme == G_ARRAY) {
2013 /* in case LEAVE wipes old return values */
2014 while (++MARK <= SP) {
2015 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2019 ? sv_2mortal(SvREFCNT_inc_simple_NN(*MARK))
2020 : sv_mortalcopy(*MARK);
2021 TAINT_NOT; /* Each item is independent */
2024 /* When this function was called with MARK == newsp, we reach this
2025 * point with SP == newsp. */
2035 I32 gimme = GIMME_V;
2037 ENTER_with_name("block");
2040 PUSHBLOCK(cx, CXt_BLOCK, SP);
2053 if (PL_op->op_flags & OPf_SPECIAL) {
2054 cx = &cxstack[cxstack_ix];
2055 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2060 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2062 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP,
2063 PL_op->op_private & OPpLVALUE);
2064 PL_curpm = newpm; /* Don't pop $1 et al till now */
2066 LEAVE_with_name("block");
2075 const I32 gimme = GIMME_V;
2076 void *itervar; /* location of the iteration variable */
2077 U8 cxtype = CXt_LOOP_FOR;
2079 ENTER_with_name("loop1");
2082 if (PL_op->op_targ) { /* "my" variable */
2083 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2084 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2085 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2086 SVs_PADSTALE, SVs_PADSTALE);
2088 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2090 itervar = PL_comppad;
2092 itervar = &PAD_SVl(PL_op->op_targ);
2095 else { /* symbol table variable */
2096 GV * const gv = MUTABLE_GV(POPs);
2097 SV** svp = &GvSV(gv);
2098 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2100 itervar = (void *)gv;
2103 if (PL_op->op_private & OPpITER_DEF)
2104 cxtype |= CXp_FOR_DEF;
2106 ENTER_with_name("loop2");
2108 PUSHBLOCK(cx, cxtype, SP);
2109 PUSHLOOP_FOR(cx, itervar, MARK);
2110 if (PL_op->op_flags & OPf_STACKED) {
2111 SV *maybe_ary = POPs;
2112 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2114 SV * const right = maybe_ary;
2117 if (RANGE_IS_NUMERIC(sv,right)) {
2118 cx->cx_type &= ~CXTYPEMASK;
2119 cx->cx_type |= CXt_LOOP_LAZYIV;
2120 /* Make sure that no-one re-orders cop.h and breaks our
2122 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2123 #ifdef NV_PRESERVES_UV
2124 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2125 (SvNV_nomg(sv) > (NV)IV_MAX)))
2127 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2128 (SvNV_nomg(right) < (NV)IV_MIN))))
2130 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2132 ((SvNV_nomg(sv) > 0) &&
2133 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2134 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2136 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2138 ((SvNV_nomg(right) > 0) &&
2139 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2140 (SvNV_nomg(right) > (NV)UV_MAX))
2143 DIE(aTHX_ "Range iterator outside integer range");
2144 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2145 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2147 /* for correct -Dstv display */
2148 cx->blk_oldsp = sp - PL_stack_base;
2152 cx->cx_type &= ~CXTYPEMASK;
2153 cx->cx_type |= CXt_LOOP_LAZYSV;
2154 /* Make sure that no-one re-orders cop.h and breaks our
2156 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2157 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2158 cx->blk_loop.state_u.lazysv.end = right;
2159 SvREFCNT_inc(right);
2160 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2161 /* This will do the upgrade to SVt_PV, and warn if the value
2162 is uninitialised. */
2163 (void) SvPV_nolen_const(right);
2164 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2165 to replace !SvOK() with a pointer to "". */
2167 SvREFCNT_dec(right);
2168 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2172 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2173 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2174 SvREFCNT_inc(maybe_ary);
2175 cx->blk_loop.state_u.ary.ix =
2176 (PL_op->op_private & OPpITER_REVERSED) ?
2177 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2181 else { /* iterating over items on the stack */
2182 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2183 if (PL_op->op_private & OPpITER_REVERSED) {
2184 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2187 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2198 const I32 gimme = GIMME_V;
2200 ENTER_with_name("loop1");
2202 ENTER_with_name("loop2");
2204 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2205 PUSHLOOP_PLAIN(cx, SP);
2220 assert(CxTYPE_is_LOOP(cx));
2222 newsp = PL_stack_base + cx->blk_loop.resetsp;
2224 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0,
2225 PL_op->op_private & OPpLVALUE);
2228 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2229 PL_curpm = newpm; /* ... and pop $1 et al */
2231 LEAVE_with_name("loop2");
2232 LEAVE_with_name("loop1");
2238 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2239 PERL_CONTEXT *cx, PMOP *newpm)
2241 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2242 if (gimme == G_SCALAR) {
2243 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2245 const char *what = NULL;
2247 assert(MARK+1 == SP);
2248 if ((SvPADTMP(TOPs) ||
2249 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2252 !SvSMAGICAL(TOPs)) {
2254 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2255 : "a readonly value" : "a temporary";
2260 /* sub:lvalue{} will take us here. */
2269 "Can't return %s from lvalue subroutine", what
2274 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2275 if (!SvPADTMP(*SP)) {
2276 *++newsp = SvREFCNT_inc(*SP);
2281 /* FREETMPS could clobber it */
2282 SV *sv = SvREFCNT_inc(*SP);
2284 *++newsp = sv_mortalcopy(sv);
2291 ? sv_mortalcopy(*SP)
2293 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2298 *++newsp = &PL_sv_undef;
2300 if (CxLVAL(cx) & OPpDEREF) {
2303 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2307 else if (gimme == G_ARRAY) {
2308 assert (!(CxLVAL(cx) & OPpDEREF));
2309 if (ref || !CxLVAL(cx))
2310 while (++MARK <= SP)
2312 SvFLAGS(*MARK) & SVs_PADTMP
2313 ? sv_mortalcopy(*MARK)
2316 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2317 else while (++MARK <= SP) {
2318 if (*MARK != &PL_sv_undef
2320 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2325 /* Might be flattened array after $#array = */
2332 /* diag_listed_as: Can't return %s from lvalue subroutine */
2334 "Can't return a %s from lvalue subroutine",
2335 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2341 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2344 PL_stack_sp = newsp;
2351 bool popsub2 = FALSE;
2352 bool clear_errsv = FALSE;
2362 const I32 cxix = dopoptosub(cxstack_ix);
2365 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2366 * sort block, which is a CXt_NULL
2369 PL_stack_base[1] = *PL_stack_sp;
2370 PL_stack_sp = PL_stack_base + 1;
2374 DIE(aTHX_ "Can't return outside a subroutine");
2376 if (cxix < cxstack_ix)
2379 if (CxMULTICALL(&cxstack[cxix])) {
2380 gimme = cxstack[cxix].blk_gimme;
2381 if (gimme == G_VOID)
2382 PL_stack_sp = PL_stack_base;
2383 else if (gimme == G_SCALAR) {
2384 PL_stack_base[1] = *PL_stack_sp;
2385 PL_stack_sp = PL_stack_base + 1;
2391 switch (CxTYPE(cx)) {
2394 lval = !!CvLVALUE(cx->blk_sub.cv);
2395 retop = cx->blk_sub.retop;
2396 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2399 if (!(PL_in_eval & EVAL_KEEPERR))
2402 namesv = cx->blk_eval.old_namesv;
2403 retop = cx->blk_eval.retop;
2406 if (optype == OP_REQUIRE &&
2407 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2409 /* Unassume the success we assumed earlier. */
2410 (void)hv_delete(GvHVn(PL_incgv),
2411 SvPVX_const(namesv),
2412 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2414 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2418 retop = cx->blk_sub.retop;
2422 DIE(aTHX_ "panic: return, type=%u", (unsigned) CxTYPE(cx));
2426 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2428 if (gimme == G_SCALAR) {
2431 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2432 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2433 && !SvMAGICAL(TOPs)) {
2434 *++newsp = SvREFCNT_inc(*SP);
2439 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2441 *++newsp = sv_mortalcopy(sv);
2445 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1
2446 && !SvMAGICAL(*SP)) {
2450 *++newsp = sv_mortalcopy(*SP);
2453 *++newsp = sv_mortalcopy(*SP);
2456 *++newsp = &PL_sv_undef;
2458 else if (gimme == G_ARRAY) {
2459 while (++MARK <= SP) {
2460 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2461 && !SvGMAGICAL(*MARK)
2462 ? *MARK : sv_mortalcopy(*MARK);
2463 TAINT_NOT; /* Each item is independent */
2466 PL_stack_sp = newsp;
2470 /* Stack values are safe: */
2473 POPSUB(cx,sv); /* release CV and @_ ... */
2477 PL_curpm = newpm; /* ... and pop $1 et al */
2486 /* This duplicates parts of pp_leavesub, so that it can share code with
2497 if (CxMULTICALL(&cxstack[cxstack_ix]))
2501 cxstack_ix++; /* temporarily protect top context */
2505 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2508 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2510 PL_curpm = newpm; /* ... and pop $1 et al */
2513 return cx->blk_sub.retop;
2517 S_unwind_loop(pTHX_ const char * const opname)
2520 if (PL_op->op_flags & OPf_SPECIAL) {
2521 cxix = dopoptoloop(cxstack_ix);
2523 /* diag_listed_as: Can't "last" outside a loop block */
2524 Perl_croak(aTHX_ "Can't \"%s\" outside a loop block", opname);
2529 const char * const label =
2530 PL_op->op_flags & OPf_STACKED
2531 ? SvPV(TOPs,label_len)
2532 : (label_len = strlen(cPVOP->op_pv), cPVOP->op_pv);
2533 const U32 label_flags =
2534 PL_op->op_flags & OPf_STACKED
2536 : (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2538 cxix = dopoptolabel(label, label_len, label_flags);
2540 /* diag_listed_as: Label not found for "last %s" */
2541 Perl_croak(aTHX_ "Label not found for \"%s %"SVf"\"",
2543 SVfARG(PL_op->op_flags & OPf_STACKED
2544 && !SvGMAGICAL(TOPp1s)
2546 : newSVpvn_flags(label,
2548 label_flags | SVs_TEMP)));
2550 if (cxix < cxstack_ix)
2566 S_unwind_loop(aTHX_ "last");
2569 cxstack_ix++; /* temporarily protect top context */
2570 switch (CxTYPE(cx)) {
2571 case CXt_LOOP_LAZYIV:
2572 case CXt_LOOP_LAZYSV:
2574 case CXt_LOOP_PLAIN:
2576 newsp = PL_stack_base + cx->blk_loop.resetsp;
2577 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2581 nextop = cx->blk_sub.retop;
2585 nextop = cx->blk_eval.retop;
2589 nextop = cx->blk_sub.retop;
2592 DIE(aTHX_ "panic: last, type=%u", (unsigned) CxTYPE(cx));
2596 PL_stack_sp = newsp;
2600 /* Stack values are safe: */
2602 case CXt_LOOP_LAZYIV:
2603 case CXt_LOOP_PLAIN:
2604 case CXt_LOOP_LAZYSV:
2606 POPLOOP(cx); /* release loop vars ... */
2610 POPSUB(cx,sv); /* release CV and @_ ... */
2613 PL_curpm = newpm; /* ... and pop $1 et al */
2616 PERL_UNUSED_VAR(optype);
2617 PERL_UNUSED_VAR(gimme);
2624 const I32 inner = PL_scopestack_ix;
2626 S_unwind_loop(aTHX_ "next");
2628 /* clear off anything above the scope we're re-entering, but
2629 * save the rest until after a possible continue block */
2631 if (PL_scopestack_ix < inner)
2632 leave_scope(PL_scopestack[PL_scopestack_ix]);
2633 PL_curcop = cx->blk_oldcop;
2635 return (cx)->blk_loop.my_op->op_nextop;
2640 const I32 cxix = S_unwind_loop(aTHX_ "redo");
2643 OP* redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2645 if (redo_op->op_type == OP_ENTER) {
2646 /* pop one less context to avoid $x being freed in while (my $x..) */
2648 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2649 redo_op = redo_op->op_next;
2653 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2654 LEAVE_SCOPE(oldsave);
2656 PL_curcop = cx->blk_oldcop;
2662 S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
2665 static const char* const too_deep = "Target of goto is too deeply nested";
2667 PERL_ARGS_ASSERT_DOFINDLABEL;
2670 Perl_croak(aTHX_ "%s", too_deep);
2671 if (o->op_type == OP_LEAVE ||
2672 o->op_type == OP_SCOPE ||
2673 o->op_type == OP_LEAVELOOP ||
2674 o->op_type == OP_LEAVESUB ||
2675 o->op_type == OP_LEAVETRY)
2677 *ops++ = cUNOPo->op_first;
2679 Perl_croak(aTHX_ "%s", too_deep);
2682 if (o->op_flags & OPf_KIDS) {
2684 /* First try all the kids at this level, since that's likeliest. */
2685 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2686 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2687 STRLEN kid_label_len;
2688 U32 kid_label_flags;
2689 const char *kid_label = CopLABEL_len_flags(kCOP,
2690 &kid_label_len, &kid_label_flags);
2692 ( (kid_label_flags & SVf_UTF8) != (flags & SVf_UTF8) ) ?
2695 (const U8*)kid_label, kid_label_len,
2696 (const U8*)label, len) == 0)
2698 (const U8*)label, len,
2699 (const U8*)kid_label, kid_label_len) == 0)
2700 : ( len == kid_label_len && ((kid_label == label)
2701 || memEQ(kid_label, label, len)))))
2705 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2706 if (kid == PL_lastgotoprobe)
2708 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2711 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2712 ops[-1]->op_type == OP_DBSTATE)
2717 if ((o = dofindlabel(kid, label, len, flags, ops, oplimit)))
2725 PP(pp_goto) /* also pp_dump */
2731 #define GOTO_DEPTH 64
2732 OP *enterops[GOTO_DEPTH];
2733 const char *label = NULL;
2734 STRLEN label_len = 0;
2735 U32 label_flags = 0;
2736 const bool do_dump = (PL_op->op_type == OP_DUMP);
2737 static const char* const must_have_label = "goto must have label";
2739 if (PL_op->op_flags & OPf_STACKED) {
2740 /* goto EXPR or goto &foo */
2742 SV * const sv = POPs;
2745 /* This egregious kludge implements goto &subroutine */
2746 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2749 CV *cv = MUTABLE_CV(SvRV(sv));
2750 AV *arg = GvAV(PL_defgv);
2754 if (!CvROOT(cv) && !CvXSUB(cv)) {
2755 const GV * const gv = CvGV(cv);
2759 /* autoloaded stub? */
2760 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2762 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2764 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2765 if (autogv && (cv = GvCV(autogv)))
2767 tmpstr = sv_newmortal();
2768 gv_efullname3(tmpstr, gv, NULL);
2769 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2771 DIE(aTHX_ "Goto undefined subroutine");
2774 /* First do some returnish stuff. */
2775 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2777 cxix = dopoptosub(cxstack_ix);
2778 if (cxix < cxstack_ix) {
2781 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2787 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2788 if (CxTYPE(cx) == CXt_EVAL) {
2791 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2792 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2794 /* diag_listed_as: Can't goto subroutine from an eval-%s */
2795 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2797 else if (CxMULTICALL(cx))
2800 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2802 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2803 AV* av = cx->blk_sub.argarray;
2805 /* abandon the original @_ if it got reified or if it is
2806 the same as the current @_ */
2807 if (AvREAL(av) || av == arg) {
2811 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2813 else CLEAR_ARGARRAY(av);
2815 /* We donate this refcount later to the callee’s pad. */
2816 SvREFCNT_inc_simple_void(arg);
2817 if (CxTYPE(cx) == CXt_SUB &&
2818 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2819 SvREFCNT_dec(cx->blk_sub.cv);
2820 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2821 LEAVE_SCOPE(oldsave);
2823 /* A destructor called during LEAVE_SCOPE could have undefined
2824 * our precious cv. See bug #99850. */
2825 if (!CvROOT(cv) && !CvXSUB(cv)) {
2826 const GV * const gv = CvGV(cv);
2829 SV * const tmpstr = sv_newmortal();
2830 gv_efullname3(tmpstr, gv, NULL);
2831 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2834 DIE(aTHX_ "Goto undefined subroutine");
2837 /* Now do some callish stuff. */
2839 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2841 OP* const retop = cx->blk_sub.retop;
2844 const SSize_t items = arg ? AvFILL(arg) + 1 : 0;
2845 const bool m = arg ? cBOOL(SvRMAGICAL(arg)) : 0;
2848 PERL_UNUSED_VAR(newsp);
2849 PERL_UNUSED_VAR(gimme);
2851 /* put GvAV(defgv) back onto stack */
2853 EXTEND(SP, items+1); /* @_ could have been extended. */
2858 bool r = cBOOL(AvREAL(arg));
2859 for (index=0; index<items; index++)
2863 SV ** const svp = av_fetch(arg, index, 0);
2864 sv = svp ? *svp : NULL;
2866 else sv = AvARRAY(arg)[index];
2868 ? r ? SvREFCNT_inc_NN(sv_2mortal(sv)) : sv
2869 : sv_2mortal(newSVavdefelem(arg, index, 1));
2874 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2875 /* Restore old @_ */
2876 arg = GvAV(PL_defgv);
2877 GvAV(PL_defgv) = cx->blk_sub.savearray;
2881 /* XS subs don't have a CxSUB, so pop it */
2882 POPBLOCK(cx, PL_curpm);
2883 /* Push a mark for the start of arglist */
2886 (void)(*CvXSUB(cv))(aTHX_ cv);
2892 PADLIST * const padlist = CvPADLIST(cv);
2893 cx->blk_sub.cv = cv;
2894 cx->blk_sub.olddepth = CvDEPTH(cv);
2897 if (CvDEPTH(cv) < 2)
2898 SvREFCNT_inc_simple_void_NN(cv);
2900 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2901 sub_crush_depth(cv);
2902 pad_push(padlist, CvDEPTH(cv));
2904 PL_curcop = cx->blk_oldcop;
2906 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2909 CX_CURPAD_SAVE(cx->blk_sub);
2911 /* cx->blk_sub.argarray has no reference count, so we
2912 need something to hang on to our argument array so
2913 that cx->blk_sub.argarray does not end up pointing
2914 to freed memory as the result of undef *_. So put
2915 it in the callee’s pad, donating our refer-
2918 SvREFCNT_dec(PAD_SVl(0));
2919 PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg);
2922 /* GvAV(PL_defgv) might have been modified on scope
2923 exit, so restore it. */
2924 if (arg != GvAV(PL_defgv)) {
2925 AV * const av = GvAV(PL_defgv);
2926 GvAV(PL_defgv) = (AV *)SvREFCNT_inc_simple(arg);
2930 else SvREFCNT_dec(arg);
2931 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2932 Perl_get_db_sub(aTHX_ NULL, cv);
2934 CV * const gotocv = get_cvs("DB::goto", 0);
2936 PUSHMARK( PL_stack_sp );
2937 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2943 RETURNOP(CvSTART(cv));
2948 label = SvPV_nomg_const(sv, label_len);
2949 label_flags = SvUTF8(sv);
2952 else if (!(PL_op->op_flags & OPf_SPECIAL)) {
2953 /* goto LABEL or dump LABEL */
2954 label = cPVOP->op_pv;
2955 label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
2956 label_len = strlen(label);
2958 if (!(do_dump || label_len)) DIE(aTHX_ "%s", must_have_label);
2963 OP *gotoprobe = NULL;
2964 bool leaving_eval = FALSE;
2965 bool in_block = FALSE;
2966 PERL_CONTEXT *last_eval_cx = NULL;
2970 PL_lastgotoprobe = NULL;
2972 for (ix = cxstack_ix; ix >= 0; ix--) {
2974 switch (CxTYPE(cx)) {
2976 leaving_eval = TRUE;
2977 if (!CxTRYBLOCK(cx)) {
2978 gotoprobe = (last_eval_cx ?
2979 last_eval_cx->blk_eval.old_eval_root :
2984 /* else fall through */
2985 case CXt_LOOP_LAZYIV:
2986 case CXt_LOOP_LAZYSV:
2988 case CXt_LOOP_PLAIN:
2991 gotoprobe = OP_SIBLING(cx->blk_oldcop);
2997 gotoprobe = OP_SIBLING(cx->blk_oldcop);
3000 gotoprobe = PL_main_root;
3003 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3004 gotoprobe = CvROOT(cx->blk_sub.cv);
3010 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3013 DIE(aTHX_ "panic: goto, type=%u, ix=%ld",
3014 CxTYPE(cx), (long) ix);
3015 gotoprobe = PL_main_root;
3021 retop = dofindlabel(gotoprobe, label, label_len, label_flags,
3022 enterops, enterops + GOTO_DEPTH);
3025 if ( (sibl1 = OP_SIBLING(gotoprobe)) &&
3026 sibl1->op_type == OP_UNSTACK &&
3027 (sibl2 = OP_SIBLING(sibl1)))
3029 retop = dofindlabel(sibl2,
3030 label, label_len, label_flags, enterops,
3031 enterops + GOTO_DEPTH);
3036 PL_lastgotoprobe = gotoprobe;
3039 DIE(aTHX_ "Can't find label %"UTF8f,
3040 UTF8fARG(label_flags, label_len, label));
3042 /* if we're leaving an eval, check before we pop any frames
3043 that we're not going to punt, otherwise the error
3046 if (leaving_eval && *enterops && enterops[1]) {
3048 for (i = 1; enterops[i]; i++)
3049 if (enterops[i]->op_type == OP_ENTERITER)
3050 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3053 if (*enterops && enterops[1]) {
3054 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3056 deprecate("\"goto\" to jump into a construct");
3059 /* pop unwanted frames */
3061 if (ix < cxstack_ix) {
3065 DIE(aTHX_ "panic: docatch: illegal ix=%ld", (long)ix);
3068 oldsave = PL_scopestack[PL_scopestack_ix];
3069 LEAVE_SCOPE(oldsave);
3072 /* push wanted frames */
3074 if (*enterops && enterops[1]) {
3075 OP * const oldop = PL_op;
3076 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3077 for (; enterops[ix]; ix++) {
3078 PL_op = enterops[ix];
3079 /* Eventually we may want to stack the needed arguments
3080 * for each op. For now, we punt on the hard ones. */
3081 if (PL_op->op_type == OP_ENTERITER)
3082 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3083 PL_op->op_ppaddr(aTHX);
3091 if (!retop) retop = PL_main_start;
3093 PL_restartop = retop;
3094 PL_do_undump = TRUE;
3098 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3099 PL_do_undump = FALSE;
3114 anum = 0; (void)POPs;
3120 && SvTRUE(cop_hints_fetch_pvs(PL_curcop, "vmsish_exit", 0)))
3123 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
3126 PL_exit_flags |= PERL_EXIT_EXPECTED;
3128 PUSHs(&PL_sv_undef);
3135 S_save_lines(pTHX_ AV *array, SV *sv)
3137 const char *s = SvPVX_const(sv);
3138 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3141 PERL_ARGS_ASSERT_SAVE_LINES;
3143 while (s && s < send) {
3145 SV * const tmpstr = newSV_type(SVt_PVMG);
3147 t = (const char *)memchr(s, '\n', send - s);
3153 sv_setpvn(tmpstr, s, t - s);
3154 av_store(array, line++, tmpstr);
3162 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3164 0 is used as continue inside eval,
3166 3 is used for a die caught by an inner eval - continue inner loop
3168 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3169 establish a local jmpenv to handle exception traps.
3174 S_docatch(pTHX_ OP *o)
3177 OP * const oldop = PL_op;
3181 assert(CATCH_GET == TRUE);
3188 assert(cxstack_ix >= 0);
3189 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3190 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3195 /* die caught by an inner eval - continue inner loop */
3196 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3197 PL_restartjmpenv = NULL;
3198 PL_op = PL_restartop;
3207 assert(0); /* NOTREACHED */
3216 =for apidoc find_runcv
3218 Locate the CV corresponding to the currently executing sub or eval.
3219 If db_seqp is non_null, skip CVs that are in the DB package and populate
3220 *db_seqp with the cop sequence number at the point that the DB:: code was
3221 entered. (This allows debuggers to eval in the scope of the breakpoint
3222 rather than in the scope of the debugger itself.)
3228 Perl_find_runcv(pTHX_ U32 *db_seqp)
3230 return Perl_find_runcv_where(aTHX_ 0, 0, db_seqp);
3233 /* If this becomes part of the API, it might need a better name. */
3235 Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
3242 PL_curcop == &PL_compiling
3244 : PL_curcop->cop_seq;
3246 for (si = PL_curstackinfo; si; si = si->si_prev) {
3248 for (ix = si->si_cxix; ix >= 0; ix--) {
3249 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3251 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3252 cv = cx->blk_sub.cv;
3253 /* skip DB:: code */
3254 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3255 *db_seqp = cx->blk_oldcop->cop_seq;
3258 if (cx->cx_type & CXp_SUB_RE)
3261 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3262 cv = cx->blk_eval.cv;
3265 case FIND_RUNCV_padid_eq:
3267 || PadlistNAMES(CvPADLIST(cv)) != INT2PTR(PADNAMELIST *, arg))
3270 case FIND_RUNCV_level_eq:
3271 if (level++ != arg) continue;
3279 return cond == FIND_RUNCV_padid_eq ? NULL : PL_main_cv;
3283 /* Run yyparse() in a setjmp wrapper. Returns:
3284 * 0: yyparse() successful
3285 * 1: yyparse() failed
3289 S_try_yyparse(pTHX_ int gramtype)
3294 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3298 ret = yyparse(gramtype) ? 1 : 0;
3305 assert(0); /* NOTREACHED */
3312 /* Compile a require/do or an eval ''.
3314 * outside is the lexically enclosing CV (if any) that invoked us.
3315 * seq is the current COP scope value.
3316 * hh is the saved hints hash, if any.
3318 * Returns a bool indicating whether the compile was successful; if so,
3319 * PL_eval_start contains the first op of the compiled code; otherwise,
3322 * This function is called from two places: pp_require and pp_entereval.
3323 * These can be distinguished by whether PL_op is entereval.
3327 S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
3330 OP * const saveop = PL_op;
3331 bool clear_hints = saveop->op_type != OP_ENTEREVAL;
3332 COP * const oldcurcop = PL_curcop;
3333 bool in_require = (saveop->op_type == OP_REQUIRE);
3337 PL_in_eval = (in_require
3338 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3340 ((PL_op->op_private & OPpEVAL_RE_REPARSING)
3341 ? EVAL_RE_REPARSING : 0)));
3345 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3347 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3348 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3349 cxstack[cxstack_ix].blk_gimme = gimme;
3351 CvOUTSIDE_SEQ(evalcv) = seq;
3352 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3354 /* set up a scratch pad */
3356 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3357 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3360 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3362 /* make sure we compile in the right package */
3364 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3365 SAVEGENERICSV(PL_curstash);
3366 PL_curstash = (HV *)CopSTASH(PL_curcop);
3367 if (SvTYPE(PL_curstash) != SVt_PVHV) PL_curstash = NULL;
3368 else SvREFCNT_inc_simple_void(PL_curstash);
3370 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3371 SAVESPTR(PL_beginav);
3372 PL_beginav = newAV();
3373 SAVEFREESV(PL_beginav);
3374 SAVESPTR(PL_unitcheckav);
3375 PL_unitcheckav = newAV();
3376 SAVEFREESV(PL_unitcheckav);
3379 ENTER_with_name("evalcomp");
3380 SAVESPTR(PL_compcv);
3383 /* try to compile it */
3385 PL_eval_root = NULL;
3386 PL_curcop = &PL_compiling;
3387 if ((saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3388 PL_in_eval |= EVAL_KEEPERR;
3395 hv_clear(GvHV(PL_hintgv));
3398 PL_hints = saveop->op_private & OPpEVAL_COPHH
3399 ? oldcurcop->cop_hints : saveop->op_targ;
3401 /* making 'use re eval' not be in scope when compiling the
3402 * qr/mabye_has_runtime_code_block/ ensures that we don't get
3403 * infinite recursion when S_has_runtime_code() gives a false
3404 * positive: the second time round, HINT_RE_EVAL isn't set so we
3405 * don't bother calling S_has_runtime_code() */
3406 if (PL_in_eval & EVAL_RE_REPARSING)
3407 PL_hints &= ~HINT_RE_EVAL;
3410 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3411 SvREFCNT_dec(GvHV(PL_hintgv));
3412 GvHV(PL_hintgv) = hh;
3415 SAVECOMPILEWARNINGS();
3417 if (PL_dowarn & G_WARN_ALL_ON)
3418 PL_compiling.cop_warnings = pWARN_ALL ;
3419 else if (PL_dowarn & G_WARN_ALL_OFF)
3420 PL_compiling.cop_warnings = pWARN_NONE ;
3422 PL_compiling.cop_warnings = pWARN_STD ;
3425 PL_compiling.cop_warnings =
3426 DUP_WARNINGS(oldcurcop->cop_warnings);
3427 cophh_free(CopHINTHASH_get(&PL_compiling));
3428 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3429 /* The label, if present, is the first entry on the chain. So rather
3430 than writing a blank label in front of it (which involves an
3431 allocation), just use the next entry in the chain. */
3432 PL_compiling.cop_hints_hash
3433 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3434 /* Check the assumption that this removed the label. */
3435 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3438 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3441 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3443 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3444 * so honour CATCH_GET and trap it here if necessary */
3446 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3448 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3449 SV **newsp; /* Used by POPBLOCK. */
3451 I32 optype; /* Used by POPEVAL. */
3457 PERL_UNUSED_VAR(newsp);
3458 PERL_UNUSED_VAR(optype);
3460 /* note that if yystatus == 3, then the EVAL CX block has already
3461 * been popped, and various vars restored */
3463 if (yystatus != 3) {
3465 op_free(PL_eval_root);
3466 PL_eval_root = NULL;
3468 SP = PL_stack_base + POPMARK; /* pop original mark */
3469 POPBLOCK(cx,PL_curpm);
3471 namesv = cx->blk_eval.old_namesv;
3472 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3473 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3479 /* If cx is still NULL, it means that we didn't go in the
3480 * POPEVAL branch. */
3481 cx = &cxstack[cxstack_ix];
3482 assert(CxTYPE(cx) == CXt_EVAL);
3483 namesv = cx->blk_eval.old_namesv;
3485 (void)hv_store(GvHVn(PL_incgv),
3486 SvPVX_const(namesv),
3487 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3489 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3492 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3495 if (!*(SvPV_nolen_const(errsv))) {
3496 sv_setpvs(errsv, "Compilation error");
3499 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3504 LEAVE_with_name("evalcomp");
3506 CopLINE_set(&PL_compiling, 0);
3507 SAVEFREEOP(PL_eval_root);
3508 cv_forget_slab(evalcv);
3510 DEBUG_x(dump_eval());
3512 /* Register with debugger: */
3513 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3514 CV * const cv = get_cvs("DB::postponed", 0);
3518 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3520 call_sv(MUTABLE_SV(cv), G_DISCARD);
3524 if (PL_unitcheckav) {
3525 OP *es = PL_eval_start;
3526 call_list(PL_scopestack_ix, PL_unitcheckav);
3530 /* compiled okay, so do it */
3532 CvDEPTH(evalcv) = 1;
3533 SP = PL_stack_base + POPMARK; /* pop original mark */
3534 PL_op = saveop; /* The caller may need it. */
3535 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3542 S_check_type_and_open(pTHX_ SV *name)
3546 const char *p = SvPV_const(name, len);
3549 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3551 /* checking here captures a reasonable error message when
3552 * PERL_DISABLE_PMC is true, but when PMC checks are enabled, the
3553 * user gets a confusing message about looking for the .pmc file
3554 * rather than for the .pm file.
3555 * This check prevents a \0 in @INC causing problems.
3557 if (!IS_SAFE_PATHNAME(p, len, "require"))
3560 /* we use the value of errno later to see how stat() or open() failed.
3561 * We don't want it set if the stat succeeded but we still failed,
3562 * such as if the name exists, but is a directory */
3565 st_rc = PerlLIO_stat(p, &st);
3567 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3571 #if !defined(PERLIO_IS_STDIO)
3572 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3574 return PerlIO_open(p, PERL_SCRIPT_MODE);
3578 #ifndef PERL_DISABLE_PMC
3580 S_doopen_pm(pTHX_ SV *name)
3583 const char *p = SvPV_const(name, namelen);
3585 PERL_ARGS_ASSERT_DOOPEN_PM;
3587 /* check the name before trying for the .pmc name to avoid the
3588 * warning referring to the .pmc which the user probably doesn't
3589 * know or care about
3591 if (!IS_SAFE_PATHNAME(p, namelen, "require"))
3594 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3595 SV *const pmcsv = sv_newmortal();
3598 SvSetSV_nosteal(pmcsv,name);
3599 sv_catpvs(pmcsv, "c");
3601 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3602 return check_type_and_open(pmcsv);
3604 return check_type_and_open(name);
3607 # define doopen_pm(name) check_type_and_open(name)
3608 #endif /* !PERL_DISABLE_PMC */
3610 /* require doesn't search for absolute names, or when the name is
3611 explicity relative the current directory */
3612 PERL_STATIC_INLINE bool
3613 S_path_is_searchable(const char *name)
3615 PERL_ARGS_ASSERT_PATH_IS_SEARCHABLE;
3617 if (PERL_FILE_IS_ABSOLUTE(name)
3619 || (*name == '.' && ((name[1] == '/' ||
3620 (name[1] == '.' && name[2] == '/'))
3621 || (name[1] == '\\' ||
3622 ( name[1] == '.' && name[2] == '\\')))
3625 || (*name == '.' && (name[1] == '/' ||
3626 (name[1] == '.' && name[2] == '/')))
3646 int vms_unixname = 0;
3649 const char *tryname = NULL;
3651 const I32 gimme = GIMME_V;
3652 int filter_has_file = 0;
3653 PerlIO *tryrsfp = NULL;
3654 SV *filter_cache = NULL;
3655 SV *filter_state = NULL;
3656 SV *filter_sub = NULL;
3661 bool path_searchable;
3665 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3666 sv = sv_2mortal(new_version(sv));
3667 if (!Perl_sv_derived_from_pvn(aTHX_ PL_patchlevel, STR_WITH_LEN("version"), 0))
3668 upg_version(PL_patchlevel, TRUE);
3669 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3670 if ( vcmp(sv,PL_patchlevel) <= 0 )
3671 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3672 SVfARG(sv_2mortal(vnormal(sv))),
3673 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3677 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3680 SV * const req = SvRV(sv);
3681 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3683 /* get the left hand term */
3684 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3686 first = SvIV(*av_fetch(lav,0,0));
3687 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3688 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3689 || av_tindex(lav) > 1 /* FP with > 3 digits */
3690 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3692 DIE(aTHX_ "Perl %"SVf" required--this is only "
3694 SVfARG(sv_2mortal(vnormal(req))),
3695 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3698 else { /* probably 'use 5.10' or 'use 5.8' */
3702 if (av_tindex(lav)>=1)
3703 second = SvIV(*av_fetch(lav,1,0));
3705 second /= second >= 600 ? 100 : 10;
3706 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3707 (int)first, (int)second);
3708 upg_version(hintsv, TRUE);
3710 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3711 "--this is only %"SVf", stopped",
3712 SVfARG(sv_2mortal(vnormal(req))),
3713 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3714 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3723 DIE(aTHX_ "Missing or undefined argument to require");
3724 name = SvPV_nomg_const(sv, len);
3725 if (!(name && len > 0 && *name))
3726 DIE(aTHX_ "Missing or undefined argument to require");
3728 if (!IS_SAFE_PATHNAME(name, len, "require")) {
3729 DIE(aTHX_ "Can't locate %s: %s",
3730 pv_escape(newSVpvs_flags("",SVs_TEMP),SvPVX(sv),SvCUR(sv),
3731 SvCUR(sv)*2,NULL, SvUTF8(sv)?PERL_PV_ESCAPE_UNI:0),
3734 TAINT_PROPER("require");
3736 path_searchable = path_is_searchable(name);
3739 /* The key in the %ENV hash is in the syntax of file passed as the argument
3740 * usually this is in UNIX format, but sometimes in VMS format, which
3741 * can result in a module being pulled in more than once.
3742 * To prevent this, the key must be stored in UNIX format if the VMS
3743 * name can be translated to UNIX.
3747 tounixspec(name, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3749 unixlen = strlen(unixname);
3755 /* if not VMS or VMS name can not be translated to UNIX, pass it
3758 unixname = (char *) name;
3761 if (PL_op->op_type == OP_REQUIRE) {
3762 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3763 unixname, unixlen, 0);
3765 if (*svp != &PL_sv_undef)
3768 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3769 "Compilation failed in require", unixname);
3773 LOADING_FILE_PROBE(unixname);
3775 /* prepare to compile file */
3777 if (!path_searchable) {
3778 /* At this point, name is SvPVX(sv) */
3780 tryrsfp = doopen_pm(sv);
3782 if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
3783 AV * const ar = GvAVn(PL_incgv);
3790 namesv = newSV_type(SVt_PV);
3791 for (i = 0; i <= AvFILL(ar); i++) {
3792 SV * const dirsv = *av_fetch(ar, i, TRUE);
3800 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3801 && !SvOBJECT(SvRV(loader)))
3803 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3807 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3808 PTR2UV(SvRV(dirsv)), name);
3809 tryname = SvPVX_const(namesv);
3812 if (SvPADTMP(nsv)) {
3813 nsv = sv_newmortal();
3814 SvSetSV_nosteal(nsv,sv);
3817 ENTER_with_name("call_INC");
3825 if (SvGMAGICAL(loader)) {
3826 SV *l = sv_newmortal();
3827 sv_setsv_nomg(l, loader);
3830 if (sv_isobject(loader))
3831 count = call_method("INC", G_ARRAY);
3833 count = call_sv(loader, G_ARRAY);
3843 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3844 && !isGV_with_GP(SvRV(arg))) {
3845 filter_cache = SvRV(arg);
3852 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3856 if (isGV_with_GP(arg)) {
3857 IO * const io = GvIO((const GV *)arg);
3862 tryrsfp = IoIFP(io);
3863 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3864 PerlIO_close(IoOFP(io));
3875 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3877 SvREFCNT_inc_simple_void_NN(filter_sub);
3880 filter_state = SP[i];
3881 SvREFCNT_inc_simple_void(filter_state);
3885 if (!tryrsfp && (filter_cache || filter_sub)) {
3886 tryrsfp = PerlIO_open(BIT_BUCKET,
3892 /* FREETMPS may free our filter_cache */
3893 SvREFCNT_inc_simple_void(filter_cache);
3897 LEAVE_with_name("call_INC");
3899 /* Now re-mortalize it. */
3900 sv_2mortal(filter_cache);
3902 /* Adjust file name if the hook has set an %INC entry.
3903 This needs to happen after the FREETMPS above. */
3904 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3906 tryname = SvPV_nolen_const(*svp);
3913 filter_has_file = 0;
3914 filter_cache = NULL;
3916 SvREFCNT_dec_NN(filter_state);
3917 filter_state = NULL;
3920 SvREFCNT_dec_NN(filter_sub);
3925 if (path_searchable) {
3930 dir = SvPV_nomg_const(dirsv, dirlen);
3936 if (!IS_SAFE_SYSCALL(dir, dirlen, "@INC entry", "require"))
3940 tounixpath(dir, SvPVX(sv_2mortal(newSVpv("", VMS_MAXRSS-1)))))
3943 sv_setpv(namesv, unixdir);
3944 sv_catpv(namesv, unixname);
3946 # ifdef __SYMBIAN32__
3947 if (PL_origfilename[0] &&
3948 PL_origfilename[1] == ':' &&
3949 !(dir[0] && dir[1] == ':'))
3950 Perl_sv_setpvf(aTHX_ namesv,
3955 Perl_sv_setpvf(aTHX_ namesv,
3959 /* The equivalent of
3960 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3961 but without the need to parse the format string, or
3962 call strlen on either pointer, and with the correct
3963 allocation up front. */
3965 char *tmp = SvGROW(namesv, dirlen + len + 2);
3967 memcpy(tmp, dir, dirlen);
3970 /* Avoid '<dir>//<file>' */
3971 if (!dirlen || *(tmp-1) != '/') {
3974 /* So SvCUR_set reports the correct length below */
3978 /* name came from an SV, so it will have a '\0' at the
3979 end that we can copy as part of this memcpy(). */
3980 memcpy(tmp, name, len + 1);
3982 SvCUR_set(namesv, dirlen + len + 1);
3987 TAINT_PROPER("require");
3988 tryname = SvPVX_const(namesv);
3989 tryrsfp = doopen_pm(namesv);
3991 if (tryname[0] == '.' && tryname[1] == '/') {
3993 while (*++tryname == '/') {}
3997 else if (errno == EMFILE || errno == EACCES) {
3998 /* no point in trying other paths if out of handles;
3999 * on the other hand, if we couldn't open one of the
4000 * files, then going on with the search could lead to
4001 * unexpected results; see perl #113422
4010 saved_errno = errno; /* sv_2mortal can realloc things */
4013 if (PL_op->op_type == OP_REQUIRE) {
4014 if(saved_errno == EMFILE || saved_errno == EACCES) {
4015 /* diag_listed_as: Can't locate %s */
4016 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(saved_errno));
4018 if (namesv) { /* did we lookup @INC? */
4019 AV * const ar = GvAVn(PL_incgv);
4021 SV *const msg = newSVpvs_flags("", SVs_TEMP);
4022 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4023 for (i = 0; i <= AvFILL(ar); i++) {
4024 sv_catpvs(inc, " ");
4025 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4027 if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
4028 const char *c, *e = name + len - 3;
4029 sv_catpv(msg, " (you may need to install the ");
4030 for (c = name; c < e; c++) {
4032 sv_catpvs(msg, "::");
4035 sv_catpvn(msg, c, 1);
4038 sv_catpv(msg, " module)");
4040 else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
4041 sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
4043 else if (len >= 3 && memEQ(name + len - 3, ".ph", 4)) {
4044 sv_catpv(msg, " (did you run h2ph?)");
4047 /* diag_listed_as: Can't locate %s */
4049 "Can't locate %s in @INC%" SVf " (@INC contains:%" SVf ")",
4053 DIE(aTHX_ "Can't locate %s", name);
4060 SETERRNO(0, SS_NORMAL);
4062 /* Assume success here to prevent recursive requirement. */
4063 /* name is never assigned to again, so len is still strlen(name) */
4064 /* Check whether a hook in @INC has already filled %INC */
4066 (void)hv_store(GvHVn(PL_incgv),
4067 unixname, unixlen, newSVpv(tryname,0),0);
4069 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4071 (void)hv_store(GvHVn(PL_incgv),
4072 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4075 ENTER_with_name("eval");
4077 SAVECOPFILE_FREE(&PL_compiling);
4078 CopFILE_set(&PL_compiling, tryname);
4079 lex_start(NULL, tryrsfp, 0);
4081 if (filter_sub || filter_cache) {
4082 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4083 than hanging another SV from it. In turn, filter_add() optionally
4084 takes the SV to use as the filter (or creates a new SV if passed
4085 NULL), so simply pass in whatever value filter_cache has. */
4086 SV * const fc = filter_cache ? newSV(0) : NULL;
4088 if (fc) sv_copypv(fc, filter_cache);
4089 datasv = filter_add(S_run_user_filter, fc);
4090 IoLINES(datasv) = filter_has_file;
4091 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4092 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4095 /* switch to eval mode */
4096 PUSHBLOCK(cx, CXt_EVAL, SP);
4098 cx->blk_eval.retop = PL_op->op_next;
4100 SAVECOPLINE(&PL_compiling);
4101 CopLINE_set(&PL_compiling, 0);
4105 /* Store and reset encoding. */
4106 encoding = PL_encoding;
4109 if (doeval(gimme, NULL, PL_curcop->cop_seq, NULL))
4110 op = DOCATCH(PL_eval_start);
4112 op = PL_op->op_next;
4114 /* Restore encoding. */
4115 PL_encoding = encoding;
4117 LOADED_FILE_PROBE(unixname);
4122 /* This is a op added to hold the hints hash for
4123 pp_entereval. The hash can be modified by the code
4124 being eval'ed, so we return a copy instead. */
4129 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4139 const I32 gimme = GIMME_V;
4140 const U32 was = PL_breakable_sub_gen;
4141 char tbuf[TYPE_DIGITS(long) + 12];
4142 bool saved_delete = FALSE;
4143 char *tmpbuf = tbuf;
4146 U32 seq, lex_flags = 0;
4147 HV *saved_hh = NULL;
4148 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4150 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4151 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4153 else if (PL_hints & HINT_LOCALIZE_HH || (
4154 PL_op->op_private & OPpEVAL_COPHH
4155 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4157 saved_hh = cop_hints_2hv(PL_curcop, 0);
4158 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4162 /* make sure we've got a plain PV (no overload etc) before testing
4163 * for taint. Making a copy here is probably overkill, but better
4164 * safe than sorry */
4166 const char * const p = SvPV_const(sv, len);
4168 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4169 lex_flags |= LEX_START_COPIED;
4171 if (bytes && SvUTF8(sv))
4172 SvPVbyte_force(sv, len);
4174 else if (bytes && SvUTF8(sv)) {
4175 /* Don't modify someone else's scalar */
4178 (void)sv_2mortal(sv);
4179 SvPVbyte_force(sv,len);
4180 lex_flags |= LEX_START_COPIED;
4183 TAINT_IF(SvTAINTED(sv));
4184 TAINT_PROPER("eval");
4186 ENTER_with_name("eval");
4187 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4188 ? LEX_IGNORE_UTF8_HINTS
4189 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4194 /* switch to eval mode */
4196 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4197 SV * const temp_sv = sv_newmortal();
4198 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4199 (unsigned long)++PL_evalseq,
4200 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4201 tmpbuf = SvPVX(temp_sv);
4202 len = SvCUR(temp_sv);
4205 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4206 SAVECOPFILE_FREE(&PL_compiling);
4207 CopFILE_set(&PL_compiling, tmpbuf+2);
4208 SAVECOPLINE(&PL_compiling);
4209 CopLINE_set(&PL_compiling, 1);
4210 /* special case: an eval '' executed within the DB package gets lexically
4211 * placed in the first non-DB CV rather than the current CV - this
4212 * allows the debugger to execute code, find lexicals etc, in the
4213 * scope of the code being debugged. Passing &seq gets find_runcv
4214 * to do the dirty work for us */
4215 runcv = find_runcv(&seq);
4217 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4219 cx->blk_eval.retop = PL_op->op_next;
4221 /* prepare to compile string */
4223 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4224 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4226 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4227 deleting the eval's FILEGV from the stash before gv_check() runs
4228 (i.e. before run-time proper). To work around the coredump that
4229 ensues, we always turn GvMULTI_on for any globals that were
4230 introduced within evals. See force_ident(). GSAR 96-10-12 */
4231 char *const safestr = savepvn(tmpbuf, len);
4232 SAVEDELETE(PL_defstash, safestr, len);
4233 saved_delete = TRUE;
4238 if (doeval(gimme, runcv, seq, saved_hh)) {
4239 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4240 ? (PERLDB_LINE || PERLDB_SAVESRC)
4241 : PERLDB_SAVESRC_NOSUBS) {
4242 /* Retain the filegv we created. */
4243 } else if (!saved_delete) {
4244 char *const safestr = savepvn(tmpbuf, len);
4245 SAVEDELETE(PL_defstash, safestr, len);
4247 return DOCATCH(PL_eval_start);
4249 /* We have already left the scope set up earlier thanks to the LEAVE
4251 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4252 ? (PERLDB_LINE || PERLDB_SAVESRC)
4253 : PERLDB_SAVESRC_INVALID) {
4254 /* Retain the filegv we created. */
4255 } else if (!saved_delete) {
4256 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4258 return PL_op->op_next;
4270 const U8 save_flags = PL_op -> op_flags;
4278 namesv = cx->blk_eval.old_namesv;
4279 retop = cx->blk_eval.retop;
4280 evalcv = cx->blk_eval.cv;
4282 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4283 gimme, SVs_TEMP, FALSE);
4284 PL_curpm = newpm; /* Don't pop $1 et al till now */
4287 assert(CvDEPTH(evalcv) == 1);
4289 CvDEPTH(evalcv) = 0;
4291 if (optype == OP_REQUIRE &&
4292 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4294 /* Unassume the success we assumed earlier. */
4295 (void)hv_delete(GvHVn(PL_incgv),
4296 SvPVX_const(namesv),
4297 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4299 Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
4300 NOT_REACHED; /* NOTREACHED */
4301 /* die_unwind() did LEAVE, or we won't be here */
4304 LEAVE_with_name("eval");
4305 if (!(save_flags & OPf_SPECIAL)) {
4313 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4314 close to the related Perl_create_eval_scope. */
4316 Perl_delete_eval_scope(pTHX)
4327 LEAVE_with_name("eval_scope");
4328 PERL_UNUSED_VAR(newsp);
4329 PERL_UNUSED_VAR(gimme);
4330 PERL_UNUSED_VAR(optype);
4333 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4334 also needed by Perl_fold_constants. */
4336 Perl_create_eval_scope(pTHX_ U32 flags)
4339 const I32 gimme = GIMME_V;
4341 ENTER_with_name("eval_scope");
4344 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4347 PL_in_eval = EVAL_INEVAL;
4348 if (flags & G_KEEPERR)
4349 PL_in_eval |= EVAL_KEEPERR;
4352 if (flags & G_FAKINGEVAL) {
4353 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4360 PERL_CONTEXT * const cx = create_eval_scope(0);
4361 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4362 return DOCATCH(PL_op->op_next);
4377 PERL_UNUSED_VAR(optype);
4379 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4380 SVs_PADTMP|SVs_TEMP, FALSE);
4381 PL_curpm = newpm; /* Don't pop $1 et al till now */
4383 LEAVE_with_name("eval_scope");
4392 const I32 gimme = GIMME_V;
4394 ENTER_with_name("given");
4397 if (PL_op->op_targ) {
4398 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
4399 SvREFCNT_dec(PAD_SVl(PL_op->op_targ));
4400 PAD_SVl(PL_op->op_targ) = SvREFCNT_inc_NN(POPs);
4407 PUSHBLOCK(cx, CXt_GIVEN, SP);
4420 PERL_UNUSED_CONTEXT;
4423 assert(CxTYPE(cx) == CXt_GIVEN);
4425 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme,
4426 SVs_PADTMP|SVs_TEMP, FALSE);
4427 PL_curpm = newpm; /* Don't pop $1 et al till now */
4429 LEAVE_with_name("given");
4433 /* Helper routines used by pp_smartmatch */
4435 S_make_matcher(pTHX_ REGEXP *re)
4437 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4439 PERL_ARGS_ASSERT_MAKE_MATCHER;
4441 PM_SETRE(matcher, ReREFCNT_inc(re));
4443 SAVEFREEOP((OP *) matcher);
4444 ENTER_with_name("matcher"); SAVETMPS;
4450 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4454 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4456 PL_op = (OP *) matcher;
4459 (void) Perl_pp_match(aTHX);
4461 return (SvTRUEx(POPs));
4465 S_destroy_matcher(pTHX_ PMOP *matcher)
4467 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4468 PERL_UNUSED_ARG(matcher);
4471 LEAVE_with_name("matcher");
4474 /* Do a smart match */
4477 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4478 return do_smartmatch(NULL, NULL, 0);
4481 /* This version of do_smartmatch()&n