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
38 #define WORD_ALIGN sizeof(U32)
41 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
43 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
69 /* XXXX Should store the old value to allow for tie/overload - and
70 restore in regcomp, where marked with XXXX. */
80 register PMOP *pm = (PMOP*)cLOGOP->op_other;
84 /* prevent recompiling under /o and ithreads. */
85 #if defined(USE_ITHREADS)
86 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
87 if (PL_op->op_flags & OPf_STACKED) {
97 #define tryAMAGICregexp(rx) \
100 if (SvROK(rx) && SvAMAGIC(rx)) { \
101 SV *sv = AMG_CALLun(rx, regexp); \
105 if (SvTYPE(sv) != SVt_REGEXP) \
106 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
113 if (PL_op->op_flags & OPf_STACKED) {
114 /* multiple args; concatentate them */
116 tmpstr = PAD_SV(ARGTARG);
117 sv_setpvs(tmpstr, "");
118 while (++MARK <= SP) {
122 tryAMAGICregexp(msv);
124 if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
125 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
127 sv_setsv(tmpstr, sv);
130 sv_catsv_nomg(tmpstr, msv);
137 tryAMAGICregexp(tmpstr);
140 #undef tryAMAGICregexp
143 SV * const sv = SvRV(tmpstr);
144 if (SvTYPE(sv) == SVt_REGEXP)
147 else if (SvTYPE(tmpstr) == SVt_REGEXP)
148 re = (REGEXP*) tmpstr;
151 /* The match's LHS's get-magic might need to access this op's reg-
152 exp (as is sometimes the case with $'; see bug 70764). So we
153 must call get-magic now before we replace the regexp. Hopeful-
154 ly this hack can be replaced with the approach described at
155 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03
156 /msg122415.html some day. */
157 if(pm->op_type == OP_MATCH) {
159 const bool was_tainted = PL_tainted;
160 if (pm->op_flags & OPf_STACKED)
162 else if (pm->op_private & OPpTARGET_MY)
163 lhs = PAD_SV(pm->op_targ);
166 /* Restore the previous value of PL_tainted (which may have been
167 modified by get-magic), to avoid incorrectly setting the
168 RXf_TAINTED flag further down. */
169 PL_tainted = was_tainted;
172 re = reg_temp_copy(NULL, re);
173 ReREFCNT_dec(PM_GETRE(pm));
178 const char *t = SvOK(tmpstr) ? SvPV_nomg_const(tmpstr, len) : "";
181 assert (re != (REGEXP*) &PL_sv_undef);
183 /* Check against the last compiled regexp. */
184 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
185 memNE(RX_PRECOMP(re), t, len))
187 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
188 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
192 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
194 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
196 } else if (PL_curcop->cop_hints_hash) {
197 SV *ptr = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, 0,
199 if (ptr && SvIOK(ptr) && SvIV(ptr))
200 eng = INT2PTR(regexp_engine*,SvIV(ptr));
203 if (PL_op->op_flags & OPf_SPECIAL)
204 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
206 if (DO_UTF8(tmpstr)) {
207 assert (SvUTF8(tmpstr));
208 } else if (SvUTF8(tmpstr)) {
209 /* Not doing UTF-8, despite what the SV says. Is this only if
210 we're trapped in use 'bytes'? */
211 /* Make a copy of the octet sequence, but without the flag on,
212 as the compiler now honours the SvUTF8 flag on tmpstr. */
214 const char *const p = SvPV(tmpstr, len);
215 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
217 else if (SvAMAGIC(tmpstr)) {
218 /* make a copy to avoid extra stringifies */
219 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
222 /* If it is gmagical, create a mortal copy, but without calling
223 get-magic, as we have already done that. */
224 if(SvGMAGICAL(tmpstr)) {
225 SV *mortalcopy = sv_newmortal();
226 sv_setsv_flags(mortalcopy, tmpstr, 0);
231 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
233 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
235 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
236 inside tie/overload accessors. */
242 #ifndef INCOMPLETE_TAINTS
245 RX_EXTFLAGS(re) |= RXf_TAINTED;
247 RX_EXTFLAGS(re) &= ~RXf_TAINTED;
251 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
255 #if !defined(USE_ITHREADS)
256 /* can't change the optree at runtime either */
257 /* PMf_KEEP is handled differently under threads to avoid these problems */
258 if (pm->op_pmflags & PMf_KEEP) {
259 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
260 cLOGOP->op_first->op_next = PL_op->op_next;
270 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
271 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
272 register SV * const dstr = cx->sb_dstr;
273 register char *s = cx->sb_s;
274 register char *m = cx->sb_m;
275 char *orig = cx->sb_orig;
276 register REGEXP * const rx = cx->sb_rx;
278 REGEXP *old = PM_GETRE(pm);
285 PM_SETRE(pm,ReREFCNT_inc(rx));
288 rxres_restore(&cx->sb_rxres, rx);
289 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
291 if (cx->sb_iters++) {
292 const I32 saviters = cx->sb_iters;
293 if (cx->sb_iters > cx->sb_maxiters)
294 DIE(aTHX_ "Substitution loop");
296 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
298 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
299 cx->sb_rxtainted |= 2;
300 sv_catsv_nomg(dstr, POPs);
301 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
305 if (CxONCE(cx) || s < orig ||
306 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
307 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
308 ((cx->sb_rflags & REXEC_COPY_STR)
309 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
310 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
312 SV * const targ = cx->sb_targ;
314 assert(cx->sb_strend >= s);
315 if(cx->sb_strend > s) {
316 if (DO_UTF8(dstr) && !SvUTF8(targ))
317 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
319 sv_catpvn(dstr, s, cx->sb_strend - s);
321 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
323 #ifdef PERL_OLD_COPY_ON_WRITE
325 sv_force_normal_flags(targ, SV_COW_DROP_PV);
331 SvPV_set(targ, SvPVX(dstr));
332 SvCUR_set(targ, SvCUR(dstr));
333 SvLEN_set(targ, SvLEN(dstr));
336 SvPV_set(dstr, NULL);
338 TAINT_IF(cx->sb_rxtainted & 1);
339 if (pm->op_pmflags & PMf_NONDESTRUCT)
342 mPUSHi(saviters - 1);
344 (void)SvPOK_only_UTF8(targ);
345 TAINT_IF(cx->sb_rxtainted);
349 LEAVE_SCOPE(cx->sb_oldsave);
351 RETURNOP(pm->op_next);
353 cx->sb_iters = saviters;
355 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
358 cx->sb_orig = orig = RX_SUBBEG(rx);
360 cx->sb_strend = s + (cx->sb_strend - m);
362 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
364 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
365 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
367 sv_catpvn(dstr, s, m-s);
369 cx->sb_s = RX_OFFS(rx)[0].end + orig;
370 { /* Update the pos() information. */
371 SV * const sv = cx->sb_targ;
373 SvUPGRADE(sv, SVt_PVMG);
374 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
375 #ifdef PERL_OLD_COPY_ON_WRITE
377 sv_force_normal_flags(sv, 0);
379 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
382 mg->mg_len = m - orig;
385 (void)ReREFCNT_inc(rx);
386 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
387 rxres_save(&cx->sb_rxres, rx);
389 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
393 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
398 PERL_ARGS_ASSERT_RXRES_SAVE;
401 if (!p || p[1] < RX_NPARENS(rx)) {
402 #ifdef PERL_OLD_COPY_ON_WRITE
403 i = 7 + RX_NPARENS(rx) * 2;
405 i = 6 + RX_NPARENS(rx) * 2;
414 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
415 RX_MATCH_COPIED_off(rx);
417 #ifdef PERL_OLD_COPY_ON_WRITE
418 *p++ = PTR2UV(RX_SAVED_COPY(rx));
419 RX_SAVED_COPY(rx) = NULL;
422 *p++ = RX_NPARENS(rx);
424 *p++ = PTR2UV(RX_SUBBEG(rx));
425 *p++ = (UV)RX_SUBLEN(rx);
426 for (i = 0; i <= RX_NPARENS(rx); ++i) {
427 *p++ = (UV)RX_OFFS(rx)[i].start;
428 *p++ = (UV)RX_OFFS(rx)[i].end;
433 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
438 PERL_ARGS_ASSERT_RXRES_RESTORE;
441 RX_MATCH_COPY_FREE(rx);
442 RX_MATCH_COPIED_set(rx, *p);
445 #ifdef PERL_OLD_COPY_ON_WRITE
446 if (RX_SAVED_COPY(rx))
447 SvREFCNT_dec (RX_SAVED_COPY(rx));
448 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
452 RX_NPARENS(rx) = *p++;
454 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
455 RX_SUBLEN(rx) = (I32)(*p++);
456 for (i = 0; i <= RX_NPARENS(rx); ++i) {
457 RX_OFFS(rx)[i].start = (I32)(*p++);
458 RX_OFFS(rx)[i].end = (I32)(*p++);
463 S_rxres_free(pTHX_ void **rsp)
465 UV * const p = (UV*)*rsp;
467 PERL_ARGS_ASSERT_RXRES_FREE;
472 void *tmp = INT2PTR(char*,*p);
475 PoisonFree(*p, 1, sizeof(*p));
477 Safefree(INT2PTR(char*,*p));
479 #ifdef PERL_OLD_COPY_ON_WRITE
481 SvREFCNT_dec (INT2PTR(SV*,p[1]));
491 dVAR; dSP; dMARK; dORIGMARK;
492 register SV * const tmpForm = *++MARK;
497 register SV *sv = NULL;
498 const char *item = NULL;
502 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
503 const char *chophere = NULL;
504 char *linemark = NULL;
506 bool gotsome = FALSE;
508 const STRLEN fudge = SvPOK(tmpForm)
509 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
510 bool item_is_utf8 = FALSE;
511 bool targ_is_utf8 = FALSE;
513 OP * parseres = NULL;
516 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
517 if (SvREADONLY(tmpForm)) {
518 SvREADONLY_off(tmpForm);
519 parseres = doparseform(tmpForm);
520 SvREADONLY_on(tmpForm);
523 parseres = doparseform(tmpForm);
527 SvPV_force(PL_formtarget, len);
528 if (DO_UTF8(PL_formtarget))
530 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
532 f = SvPV_const(tmpForm, len);
533 /* need to jump to the next word */
534 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
538 const char *name = "???";
541 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
542 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
543 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
544 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
545 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
547 case FF_CHECKNL: name = "CHECKNL"; break;
548 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
549 case FF_SPACE: name = "SPACE"; break;
550 case FF_HALFSPACE: name = "HALFSPACE"; break;
551 case FF_ITEM: name = "ITEM"; break;
552 case FF_CHOP: name = "CHOP"; break;
553 case FF_LINEGLOB: name = "LINEGLOB"; break;
554 case FF_NEWLINE: name = "NEWLINE"; break;
555 case FF_MORE: name = "MORE"; break;
556 case FF_LINEMARK: name = "LINEMARK"; break;
557 case FF_END: name = "END"; break;
558 case FF_0DECIMAL: name = "0DECIMAL"; break;
559 case FF_LINESNGL: name = "LINESNGL"; break;
562 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
564 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
575 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
576 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
578 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
579 t = SvEND(PL_formtarget);
583 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
584 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
586 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC, fudge + 1);
587 t = SvEND(PL_formtarget);
607 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
614 const char *s = item = SvPV_const(sv, len);
617 itemsize = sv_len_utf8(sv);
618 if (itemsize != (I32)len) {
620 if (itemsize > fieldsize) {
621 itemsize = fieldsize;
622 itembytes = itemsize;
623 sv_pos_u2b(sv, &itembytes, 0);
627 send = chophere = s + itembytes;
637 sv_pos_b2u(sv, &itemsize);
641 item_is_utf8 = FALSE;
642 if (itemsize > fieldsize)
643 itemsize = fieldsize;
644 send = chophere = s + itemsize;
658 const char *s = item = SvPV_const(sv, len);
661 itemsize = sv_len_utf8(sv);
662 if (itemsize != (I32)len) {
664 if (itemsize <= fieldsize) {
665 const char *send = chophere = s + itemsize;
678 itemsize = fieldsize;
679 itembytes = itemsize;
680 sv_pos_u2b(sv, &itembytes, 0);
681 send = chophere = s + itembytes;
682 while (s < send || (s == send && isSPACE(*s))) {
692 if (strchr(PL_chopset, *s))
697 itemsize = chophere - item;
698 sv_pos_b2u(sv, &itemsize);
704 item_is_utf8 = FALSE;
705 if (itemsize <= fieldsize) {
706 const char *const send = chophere = s + itemsize;
719 itemsize = fieldsize;
720 send = chophere = s + itemsize;
721 while (s < send || (s == send && isSPACE(*s))) {
731 if (strchr(PL_chopset, *s))
736 itemsize = chophere - item;
742 arg = fieldsize - itemsize;
751 arg = fieldsize - itemsize;
762 const char *s = item;
766 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
768 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC,
770 t = SvEND(PL_formtarget);
774 if (UTF8_IS_CONTINUED(*s)) {
775 STRLEN skip = UTF8SKIP(s);
792 if ( !((*t++ = *s++) & ~31) )
798 if (targ_is_utf8 && !item_is_utf8) {
799 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
801 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
802 for (; t < SvEND(PL_formtarget); t++) {
815 const int ch = *t++ = *s++;
818 if ( !((*t++ = *s++) & ~31) )
827 const char *s = chophere;
841 const bool oneline = fpc[-1] == FF_LINESNGL;
842 const char *s = item = SvPV_const(sv, len);
843 item_is_utf8 = DO_UTF8(sv);
846 STRLEN to_copy = itemsize;
847 const char *const send = s + len;
848 const U8 *source = (const U8 *) s;
852 chophere = s + itemsize;
856 to_copy = s - SvPVX_const(sv) - 1;
868 if (targ_is_utf8 && !item_is_utf8) {
869 source = tmp = bytes_to_utf8(source, &to_copy);
870 SvCUR_set(PL_formtarget,
871 t - SvPVX_const(PL_formtarget));
873 if (item_is_utf8 && !targ_is_utf8) {
874 /* Upgrade targ to UTF8, and then we reduce it to
875 a problem we have a simple solution for. */
876 SvCUR_set(PL_formtarget,
877 t - SvPVX_const(PL_formtarget));
879 /* Don't need get magic. */
880 sv_utf8_upgrade_nomg(PL_formtarget);
882 SvCUR_set(PL_formtarget,
883 t - SvPVX_const(PL_formtarget));
886 /* Easy. They agree. */
887 assert (item_is_utf8 == targ_is_utf8);
889 SvGROW(PL_formtarget,
890 SvCUR(PL_formtarget) + to_copy + fudge + 1);
891 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
893 Copy(source, t, to_copy, char);
895 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
897 if (SvGMAGICAL(sv)) {
898 /* Mustn't call sv_pos_b2u() as it does a second
899 mg_get(). Is this a bug? Do we need a _flags()
901 itemsize = utf8_length(source, source + itemsize);
903 sv_pos_b2u(sv, &itemsize);
915 #if defined(USE_LONG_DOUBLE)
918 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
922 "%#0*.*f" : "%0*.*f");
927 #if defined(USE_LONG_DOUBLE)
929 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
932 ((arg & 256) ? "%#*.*f" : "%*.*f");
935 /* If the field is marked with ^ and the value is undefined,
937 if ((arg & 512) && !SvOK(sv)) {
945 /* overflow evidence */
946 if (num_overflow(value, fieldsize, arg)) {
952 /* Formats aren't yet marked for locales, so assume "yes". */
954 STORE_NUMERIC_STANDARD_SET_LOCAL();
955 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
956 RESTORE_NUMERIC_STANDARD();
963 while (t-- > linemark && *t == ' ') ;
971 if (arg) { /* repeat until fields exhausted? */
973 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
974 lines += FmLINES(PL_formtarget);
976 SvUTF8_on(PL_formtarget);
977 FmLINES(PL_formtarget) = lines;
979 RETURNOP(cLISTOP->op_first);
990 const char *s = chophere;
991 const char *send = item + len;
993 while (isSPACE(*s) && (s < send))
998 arg = fieldsize - itemsize;
1005 if (strnEQ(s1," ",3)) {
1006 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1017 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1019 SvUTF8_on(PL_formtarget);
1020 FmLINES(PL_formtarget) += lines;
1032 if (PL_stack_base + *PL_markstack_ptr == SP) {
1034 if (GIMME_V == G_SCALAR)
1036 RETURNOP(PL_op->op_next->op_next);
1038 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1039 pp_pushmark(); /* push dst */
1040 pp_pushmark(); /* push src */
1041 ENTER_with_name("grep"); /* enter outer scope */
1044 if (PL_op->op_private & OPpGREP_LEX)
1045 SAVESPTR(PAD_SVl(PL_op->op_targ));
1048 ENTER_with_name("grep_item"); /* enter inner scope */
1051 src = PL_stack_base[*PL_markstack_ptr];
1053 if (PL_op->op_private & OPpGREP_LEX)
1054 PAD_SVl(PL_op->op_targ) = src;
1059 if (PL_op->op_type == OP_MAPSTART)
1060 pp_pushmark(); /* push top */
1061 return ((LOGOP*)PL_op->op_next)->op_other;
1067 const I32 gimme = GIMME_V;
1068 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1074 /* first, move source pointer to the next item in the source list */
1075 ++PL_markstack_ptr[-1];
1077 /* if there are new items, push them into the destination list */
1078 if (items && gimme != G_VOID) {
1079 /* might need to make room back there first */
1080 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1081 /* XXX this implementation is very pessimal because the stack
1082 * is repeatedly extended for every set of items. Is possible
1083 * to do this without any stack extension or copying at all
1084 * by maintaining a separate list over which the map iterates
1085 * (like foreach does). --gsar */
1087 /* everything in the stack after the destination list moves
1088 * towards the end the stack by the amount of room needed */
1089 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1091 /* items to shift up (accounting for the moved source pointer) */
1092 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1094 /* This optimization is by Ben Tilly and it does
1095 * things differently from what Sarathy (gsar)
1096 * is describing. The downside of this optimization is
1097 * that leaves "holes" (uninitialized and hopefully unused areas)
1098 * to the Perl stack, but on the other hand this
1099 * shouldn't be a problem. If Sarathy's idea gets
1100 * implemented, this optimization should become
1101 * irrelevant. --jhi */
1103 shift = count; /* Avoid shifting too often --Ben Tilly */
1107 dst = (SP += shift);
1108 PL_markstack_ptr[-1] += shift;
1109 *PL_markstack_ptr += shift;
1113 /* copy the new items down to the destination list */
1114 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1115 if (gimme == G_ARRAY) {
1117 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1120 /* scalar context: we don't care about which values map returns
1121 * (we use undef here). And so we certainly don't want to do mortal
1122 * copies of meaningless values. */
1123 while (items-- > 0) {
1125 *dst-- = &PL_sv_undef;
1129 LEAVE_with_name("grep_item"); /* exit inner scope */
1132 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1134 (void)POPMARK; /* pop top */
1135 LEAVE_with_name("grep"); /* exit outer scope */
1136 (void)POPMARK; /* pop src */
1137 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1138 (void)POPMARK; /* pop dst */
1139 SP = PL_stack_base + POPMARK; /* pop original mark */
1140 if (gimme == G_SCALAR) {
1141 if (PL_op->op_private & OPpGREP_LEX) {
1142 SV* sv = sv_newmortal();
1143 sv_setiv(sv, items);
1151 else if (gimme == G_ARRAY)
1158 ENTER_with_name("grep_item"); /* enter inner scope */
1161 /* set $_ to the new source item */
1162 src = PL_stack_base[PL_markstack_ptr[-1]];
1164 if (PL_op->op_private & OPpGREP_LEX)
1165 PAD_SVl(PL_op->op_targ) = src;
1169 RETURNOP(cLOGOP->op_other);
1178 if (GIMME == G_ARRAY)
1180 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1181 return cLOGOP->op_other;
1191 if (GIMME == G_ARRAY) {
1192 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1196 SV * const targ = PAD_SV(PL_op->op_targ);
1199 if (PL_op->op_private & OPpFLIP_LINENUM) {
1200 if (GvIO(PL_last_in_gv)) {
1201 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1204 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1206 flip = SvIV(sv) == SvIV(GvSV(gv));
1212 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1213 if (PL_op->op_flags & OPf_SPECIAL) {
1221 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1224 sv_setpvs(TARG, "");
1230 /* This code tries to decide if "$left .. $right" should use the
1231 magical string increment, or if the range is numeric (we make
1232 an exception for .."0" [#18165]). AMS 20021031. */
1234 #define RANGE_IS_NUMERIC(left,right) ( \
1235 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1236 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1237 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1238 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1239 && (!SvOK(right) || looks_like_number(right))))
1245 if (GIMME == G_ARRAY) {
1251 if (RANGE_IS_NUMERIC(left,right)) {
1254 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1255 (SvOK(right) && SvNV(right) > IV_MAX))
1256 DIE(aTHX_ "Range iterator outside integer range");
1267 SV * const sv = sv_2mortal(newSViv(i++));
1272 SV * const final = sv_mortalcopy(right);
1274 const char * const tmps = SvPV_const(final, len);
1276 SV *sv = sv_mortalcopy(left);
1277 SvPV_force_nolen(sv);
1278 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1280 if (strEQ(SvPVX_const(sv),tmps))
1282 sv = sv_2mortal(newSVsv(sv));
1289 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1293 if (PL_op->op_private & OPpFLIP_LINENUM) {
1294 if (GvIO(PL_last_in_gv)) {
1295 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1298 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1299 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1307 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1308 sv_catpvs(targ, "E0");
1318 static const char * const context_name[] = {
1320 NULL, /* CXt_WHEN never actually needs "block" */
1321 NULL, /* CXt_BLOCK never actually needs "block" */
1322 NULL, /* CXt_GIVEN never actually needs "block" */
1323 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1324 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1325 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1326 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1334 S_dopoptolabel(pTHX_ const char *label)
1339 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1341 for (i = cxstack_ix; i >= 0; i--) {
1342 register const PERL_CONTEXT * const cx = &cxstack[i];
1343 switch (CxTYPE(cx)) {
1349 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1350 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1351 if (CxTYPE(cx) == CXt_NULL)
1354 case CXt_LOOP_LAZYIV:
1355 case CXt_LOOP_LAZYSV:
1357 case CXt_LOOP_PLAIN:
1359 const char *cx_label = CxLABEL(cx);
1360 if (!cx_label || strNE(label, cx_label) ) {
1361 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1362 (long)i, cx_label));
1365 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1376 Perl_dowantarray(pTHX)
1379 const I32 gimme = block_gimme();
1380 return (gimme == G_VOID) ? G_SCALAR : gimme;
1384 Perl_block_gimme(pTHX)
1387 const I32 cxix = dopoptosub(cxstack_ix);
1391 switch (cxstack[cxix].blk_gimme) {
1399 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1406 Perl_is_lvalue_sub(pTHX)
1409 const I32 cxix = dopoptosub(cxstack_ix);
1410 assert(cxix >= 0); /* We should only be called from inside subs */
1412 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1413 return CxLVAL(cxstack + cxix);
1419 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1424 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1426 for (i = startingblock; i >= 0; i--) {
1427 register const PERL_CONTEXT * const cx = &cxstk[i];
1428 switch (CxTYPE(cx)) {
1434 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1442 S_dopoptoeval(pTHX_ I32 startingblock)
1446 for (i = startingblock; i >= 0; i--) {
1447 register const PERL_CONTEXT *cx = &cxstack[i];
1448 switch (CxTYPE(cx)) {
1452 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1460 S_dopoptoloop(pTHX_ I32 startingblock)
1464 for (i = startingblock; i >= 0; i--) {
1465 register const PERL_CONTEXT * const cx = &cxstack[i];
1466 switch (CxTYPE(cx)) {
1472 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1473 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1474 if ((CxTYPE(cx)) == CXt_NULL)
1477 case CXt_LOOP_LAZYIV:
1478 case CXt_LOOP_LAZYSV:
1480 case CXt_LOOP_PLAIN:
1481 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1489 S_dopoptogiven(pTHX_ I32 startingblock)
1493 for (i = startingblock; i >= 0; i--) {
1494 register const PERL_CONTEXT *cx = &cxstack[i];
1495 switch (CxTYPE(cx)) {
1499 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1501 case CXt_LOOP_PLAIN:
1502 assert(!CxFOREACHDEF(cx));
1504 case CXt_LOOP_LAZYIV:
1505 case CXt_LOOP_LAZYSV:
1507 if (CxFOREACHDEF(cx)) {
1508 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1517 S_dopoptowhen(pTHX_ I32 startingblock)
1521 for (i = startingblock; i >= 0; i--) {
1522 register const PERL_CONTEXT *cx = &cxstack[i];
1523 switch (CxTYPE(cx)) {
1527 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1535 Perl_dounwind(pTHX_ I32 cxix)
1540 while (cxstack_ix > cxix) {
1542 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1543 DEBUG_CX("UNWIND"); \
1544 /* Note: we don't need to restore the base context info till the end. */
1545 switch (CxTYPE(cx)) {
1548 continue; /* not break */
1556 case CXt_LOOP_LAZYIV:
1557 case CXt_LOOP_LAZYSV:
1559 case CXt_LOOP_PLAIN:
1570 PERL_UNUSED_VAR(optype);
1574 Perl_qerror(pTHX_ SV *err)
1578 PERL_ARGS_ASSERT_QERROR;
1581 if (PL_in_eval & EVAL_KEEPERR) {
1582 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1583 SvPV_nolen_const(err));
1586 sv_catsv(ERRSV, err);
1589 sv_catsv(PL_errors, err);
1591 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1593 ++PL_parser->error_count;
1597 Perl_die_unwind(pTHX_ SV *msv)
1600 SV *exceptsv = sv_mortalcopy(msv);
1601 U8 in_eval = PL_in_eval;
1602 PERL_ARGS_ASSERT_DIE_UNWIND;
1608 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1609 && PL_curstackinfo->si_prev)
1618 register PERL_CONTEXT *cx;
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 if (gimme == G_SCALAR)
1636 *++newsp = &PL_sv_undef;
1637 PL_stack_sp = newsp;
1641 /* LEAVE could clobber PL_curcop (see save_re_context())
1642 * XXX it might be better to find a way to avoid messing with
1643 * PL_curcop in save_re_context() instead, but this is a more
1644 * minimal fix --GSAR */
1645 PL_curcop = cx->blk_oldcop;
1647 if (optype == OP_REQUIRE) {
1648 const char* const msg = SvPVx_nolen_const(exceptsv);
1649 (void)hv_store(GvHVn(PL_incgv),
1650 SvPVX_const(namesv), 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_ "%sCompilation failed in require",
1657 *msg ? msg : "Unknown error\n");
1659 if (in_eval & EVAL_KEEPERR) {
1660 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1661 SvPV_nolen_const(exceptsv));
1664 sv_setsv(ERRSV, exceptsv);
1666 assert(CxTYPE(cx) == CXt_EVAL);
1667 PL_restartjmpenv = cx->blk_eval.cur_top_env;
1668 PL_restartop = cx->blk_eval.retop;
1674 write_to_stderr(exceptsv);
1681 dVAR; dSP; dPOPTOPssrl;
1682 if (SvTRUE(left) != SvTRUE(right))
1689 =for apidoc caller_cx
1691 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1692 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1693 information returned to Perl by C<caller>. Note that XSUBs don't get a
1694 stack frame, so C<caller_cx(0, NULL)> will return information for the
1695 immediately-surrounding Perl code.
1697 This function skips over the automatic calls to C<&DB::sub> made on the
1698 behalf of the debugger. If the stack frame requested was a sub called by
1699 C<DB::sub>, the return value will be the frame for the call to
1700 C<DB::sub>, since that has the correct line number/etc. for the call
1701 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1702 frame for the sub call itself.
1707 const PERL_CONTEXT *
1708 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1710 register I32 cxix = dopoptosub(cxstack_ix);
1711 register const PERL_CONTEXT *cx;
1712 register const PERL_CONTEXT *ccstack = cxstack;
1713 const PERL_SI *top_si = PL_curstackinfo;
1716 /* we may be in a higher stacklevel, so dig down deeper */
1717 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1718 top_si = top_si->si_prev;
1719 ccstack = top_si->si_cxstack;
1720 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1724 /* caller() should not report the automatic calls to &DB::sub */
1725 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1726 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1730 cxix = dopoptosub_at(ccstack, cxix - 1);
1733 cx = &ccstack[cxix];
1734 if (dbcxp) *dbcxp = cx;
1736 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1737 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1738 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1739 field below is defined for any cx. */
1740 /* caller() should not report the automatic calls to &DB::sub */
1741 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1742 cx = &ccstack[dbcxix];
1752 register const PERL_CONTEXT *cx;
1753 const PERL_CONTEXT *dbcx;
1755 const char *stashname;
1761 cx = caller_cx(count, &dbcx);
1763 if (GIMME != G_ARRAY) {
1770 stashname = CopSTASHPV(cx->blk_oldcop);
1771 if (GIMME != G_ARRAY) {
1774 PUSHs(&PL_sv_undef);
1777 sv_setpv(TARG, stashname);
1786 PUSHs(&PL_sv_undef);
1788 mPUSHs(newSVpv(stashname, 0));
1789 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1790 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1793 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1794 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1795 /* So is ccstack[dbcxix]. */
1797 SV * const sv = newSV(0);
1798 gv_efullname3(sv, cvgv, NULL);
1800 PUSHs(boolSV(CxHASARGS(cx)));
1803 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1804 PUSHs(boolSV(CxHASARGS(cx)));
1808 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1811 gimme = (I32)cx->blk_gimme;
1812 if (gimme == G_VOID)
1813 PUSHs(&PL_sv_undef);
1815 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1816 if (CxTYPE(cx) == CXt_EVAL) {
1818 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1819 PUSHs(cx->blk_eval.cur_text);
1823 else if (cx->blk_eval.old_namesv) {
1824 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1827 /* eval BLOCK (try blocks have old_namesv == 0) */
1829 PUSHs(&PL_sv_undef);
1830 PUSHs(&PL_sv_undef);
1834 PUSHs(&PL_sv_undef);
1835 PUSHs(&PL_sv_undef);
1837 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1838 && CopSTASH_eq(PL_curcop, PL_debstash))
1840 AV * const ary = cx->blk_sub.argarray;
1841 const int off = AvARRAY(ary) - AvALLOC(ary);
1844 Perl_init_dbargs(aTHX);
1846 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1847 av_extend(PL_dbargs, AvFILLp(ary) + off);
1848 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1849 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1851 /* XXX only hints propagated via op_private are currently
1852 * visible (others are not easily accessible, since they
1853 * use the global PL_hints) */
1854 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1857 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1859 if (old_warnings == pWARN_NONE ||
1860 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1861 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1862 else if (old_warnings == pWARN_ALL ||
1863 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1864 /* Get the bit mask for $warnings::Bits{all}, because
1865 * it could have been extended by warnings::register */
1867 HV * const bits = get_hv("warnings::Bits", 0);
1868 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1869 mask = newSVsv(*bits_all);
1872 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1876 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1880 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1881 sv_2mortal(newRV_noinc(
1882 MUTABLE_SV(Perl_refcounted_he_chain_2hv(aTHX_
1883 cx->blk_oldcop->cop_hints_hash))))
1892 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1893 sv_reset(tmps, CopSTASH(PL_curcop));
1898 /* like pp_nextstate, but used instead when the debugger is active */
1903 PL_curcop = (COP*)PL_op;
1904 TAINT_NOT; /* Each statement is presumed innocent */
1905 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1910 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1911 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1914 register PERL_CONTEXT *cx;
1915 const I32 gimme = G_ARRAY;
1917 GV * const gv = PL_DBgv;
1918 register CV * const cv = GvCV(gv);
1921 DIE(aTHX_ "No DB::DB routine defined");
1923 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1924 /* don't do recursive DB::DB call */
1939 (void)(*CvXSUB(cv))(aTHX_ cv);
1946 PUSHBLOCK(cx, CXt_SUB, SP);
1948 cx->blk_sub.retop = PL_op->op_next;
1951 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1952 RETURNOP(CvSTART(cv));
1962 register PERL_CONTEXT *cx;
1963 const I32 gimme = GIMME_V;
1964 void *itervar; /* location of the iteration variable */
1965 U8 cxtype = CXt_LOOP_FOR;
1967 ENTER_with_name("loop1");
1970 if (PL_op->op_targ) { /* "my" variable */
1971 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1972 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1973 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1974 SVs_PADSTALE, SVs_PADSTALE);
1976 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1978 itervar = PL_comppad;
1980 itervar = &PAD_SVl(PL_op->op_targ);
1983 else { /* symbol table variable */
1984 GV * const gv = MUTABLE_GV(POPs);
1985 SV** svp = &GvSV(gv);
1986 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
1988 itervar = (void *)gv;
1991 if (PL_op->op_private & OPpITER_DEF)
1992 cxtype |= CXp_FOR_DEF;
1994 ENTER_with_name("loop2");
1996 PUSHBLOCK(cx, cxtype, SP);
1997 PUSHLOOP_FOR(cx, itervar, MARK);
1998 if (PL_op->op_flags & OPf_STACKED) {
1999 SV *maybe_ary = POPs;
2000 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2002 SV * const right = maybe_ary;
2005 if (RANGE_IS_NUMERIC(sv,right)) {
2006 cx->cx_type &= ~CXTYPEMASK;
2007 cx->cx_type |= CXt_LOOP_LAZYIV;
2008 /* Make sure that no-one re-orders cop.h and breaks our
2010 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2011 #ifdef NV_PRESERVES_UV
2012 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2013 (SvNV(sv) > (NV)IV_MAX)))
2015 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2016 (SvNV(right) < (NV)IV_MIN))))
2018 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2021 ((SvUV(sv) > (UV)IV_MAX) ||
2022 (SvNV(sv) > (NV)UV_MAX)))))
2024 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2026 ((SvNV(right) > 0) &&
2027 ((SvUV(right) > (UV)IV_MAX) ||
2028 (SvNV(right) > (NV)UV_MAX))))))
2030 DIE(aTHX_ "Range iterator outside integer range");
2031 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2032 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2034 /* for correct -Dstv display */
2035 cx->blk_oldsp = sp - PL_stack_base;
2039 cx->cx_type &= ~CXTYPEMASK;
2040 cx->cx_type |= CXt_LOOP_LAZYSV;
2041 /* Make sure that no-one re-orders cop.h and breaks our
2043 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2044 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2045 cx->blk_loop.state_u.lazysv.end = right;
2046 SvREFCNT_inc(right);
2047 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2048 /* This will do the upgrade to SVt_PV, and warn if the value
2049 is uninitialised. */
2050 (void) SvPV_nolen_const(right);
2051 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2052 to replace !SvOK() with a pointer to "". */
2054 SvREFCNT_dec(right);
2055 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2059 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2060 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2061 SvREFCNT_inc(maybe_ary);
2062 cx->blk_loop.state_u.ary.ix =
2063 (PL_op->op_private & OPpITER_REVERSED) ?
2064 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2068 else { /* iterating over items on the stack */
2069 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2070 if (PL_op->op_private & OPpITER_REVERSED) {
2071 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2074 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2084 register PERL_CONTEXT *cx;
2085 const I32 gimme = GIMME_V;
2087 ENTER_with_name("loop1");
2089 ENTER_with_name("loop2");
2091 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2092 PUSHLOOP_PLAIN(cx, SP);
2100 register PERL_CONTEXT *cx;
2107 assert(CxTYPE_is_LOOP(cx));
2109 newsp = PL_stack_base + cx->blk_loop.resetsp;
2112 if (gimme == G_VOID)
2114 else if (gimme == G_SCALAR) {
2116 *++newsp = sv_mortalcopy(*SP);
2118 *++newsp = &PL_sv_undef;
2122 *++newsp = sv_mortalcopy(*++mark);
2123 TAINT_NOT; /* Each item is independent */
2129 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2130 PL_curpm = newpm; /* ... and pop $1 et al */
2132 LEAVE_with_name("loop2");
2133 LEAVE_with_name("loop1");
2141 register PERL_CONTEXT *cx;
2142 bool popsub2 = FALSE;
2143 bool clear_errsv = FALSE;
2152 const I32 cxix = dopoptosub(cxstack_ix);
2155 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2156 * sort block, which is a CXt_NULL
2159 PL_stack_base[1] = *PL_stack_sp;
2160 PL_stack_sp = PL_stack_base + 1;
2164 DIE(aTHX_ "Can't return outside a subroutine");
2166 if (cxix < cxstack_ix)
2169 if (CxMULTICALL(&cxstack[cxix])) {
2170 gimme = cxstack[cxix].blk_gimme;
2171 if (gimme == G_VOID)
2172 PL_stack_sp = PL_stack_base;
2173 else if (gimme == G_SCALAR) {
2174 PL_stack_base[1] = *PL_stack_sp;
2175 PL_stack_sp = PL_stack_base + 1;
2181 switch (CxTYPE(cx)) {
2184 retop = cx->blk_sub.retop;
2185 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2188 if (!(PL_in_eval & EVAL_KEEPERR))
2191 namesv = cx->blk_eval.old_namesv;
2192 retop = cx->blk_eval.retop;
2196 if (optype == OP_REQUIRE &&
2197 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2199 /* Unassume the success we assumed earlier. */
2200 (void)hv_delete(GvHVn(PL_incgv),
2201 SvPVX_const(namesv), SvCUR(namesv),
2203 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2208 retop = cx->blk_sub.retop;
2211 DIE(aTHX_ "panic: return");
2215 if (gimme == G_SCALAR) {
2218 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2220 *++newsp = SvREFCNT_inc(*SP);
2225 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2227 *++newsp = sv_mortalcopy(sv);
2232 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2235 *++newsp = sv_mortalcopy(*SP);
2238 *++newsp = &PL_sv_undef;
2240 else if (gimme == G_ARRAY) {
2241 while (++MARK <= SP) {
2242 *++newsp = (popsub2 && SvTEMP(*MARK))
2243 ? *MARK : sv_mortalcopy(*MARK);
2244 TAINT_NOT; /* Each item is independent */
2247 PL_stack_sp = newsp;
2250 /* Stack values are safe: */
2253 POPSUB(cx,sv); /* release CV and @_ ... */
2257 PL_curpm = newpm; /* ... and pop $1 et al */
2270 register PERL_CONTEXT *cx;
2281 if (PL_op->op_flags & OPf_SPECIAL) {
2282 cxix = dopoptoloop(cxstack_ix);
2284 DIE(aTHX_ "Can't \"last\" outside a loop block");
2287 cxix = dopoptolabel(cPVOP->op_pv);
2289 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2291 if (cxix < cxstack_ix)
2295 cxstack_ix++; /* temporarily protect top context */
2297 switch (CxTYPE(cx)) {
2298 case CXt_LOOP_LAZYIV:
2299 case CXt_LOOP_LAZYSV:
2301 case CXt_LOOP_PLAIN:
2303 newsp = PL_stack_base + cx->blk_loop.resetsp;
2304 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2308 nextop = cx->blk_sub.retop;
2312 nextop = cx->blk_eval.retop;
2316 nextop = cx->blk_sub.retop;
2319 DIE(aTHX_ "panic: last");
2323 if (gimme == G_SCALAR) {
2325 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2326 ? *SP : sv_mortalcopy(*SP);
2328 *++newsp = &PL_sv_undef;
2330 else if (gimme == G_ARRAY) {
2331 while (++MARK <= SP) {
2332 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2333 ? *MARK : sv_mortalcopy(*MARK);
2334 TAINT_NOT; /* Each item is independent */
2342 /* Stack values are safe: */
2344 case CXt_LOOP_LAZYIV:
2345 case CXt_LOOP_PLAIN:
2346 case CXt_LOOP_LAZYSV:
2348 POPLOOP(cx); /* release loop vars ... */
2352 POPSUB(cx,sv); /* release CV and @_ ... */
2355 PL_curpm = newpm; /* ... and pop $1 et al */
2358 PERL_UNUSED_VAR(optype);
2359 PERL_UNUSED_VAR(gimme);
2367 register PERL_CONTEXT *cx;
2370 if (PL_op->op_flags & OPf_SPECIAL) {
2371 cxix = dopoptoloop(cxstack_ix);
2373 DIE(aTHX_ "Can't \"next\" outside a loop block");
2376 cxix = dopoptolabel(cPVOP->op_pv);
2378 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2380 if (cxix < cxstack_ix)
2383 /* clear off anything above the scope we're re-entering, but
2384 * save the rest until after a possible continue block */
2385 inner = PL_scopestack_ix;
2387 if (PL_scopestack_ix < inner)
2388 leave_scope(PL_scopestack[PL_scopestack_ix]);
2389 PL_curcop = cx->blk_oldcop;
2390 return (cx)->blk_loop.my_op->op_nextop;
2397 register PERL_CONTEXT *cx;
2401 if (PL_op->op_flags & OPf_SPECIAL) {
2402 cxix = dopoptoloop(cxstack_ix);
2404 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2407 cxix = dopoptolabel(cPVOP->op_pv);
2409 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2411 if (cxix < cxstack_ix)
2414 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2415 if (redo_op->op_type == OP_ENTER) {
2416 /* pop one less context to avoid $x being freed in while (my $x..) */
2418 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2419 redo_op = redo_op->op_next;
2423 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2424 LEAVE_SCOPE(oldsave);
2426 PL_curcop = cx->blk_oldcop;
2431 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2435 static const char too_deep[] = "Target of goto is too deeply nested";
2437 PERL_ARGS_ASSERT_DOFINDLABEL;
2440 Perl_croak(aTHX_ too_deep);
2441 if (o->op_type == OP_LEAVE ||
2442 o->op_type == OP_SCOPE ||
2443 o->op_type == OP_LEAVELOOP ||
2444 o->op_type == OP_LEAVESUB ||
2445 o->op_type == OP_LEAVETRY)
2447 *ops++ = cUNOPo->op_first;
2449 Perl_croak(aTHX_ too_deep);
2452 if (o->op_flags & OPf_KIDS) {
2454 /* First try all the kids at this level, since that's likeliest. */
2455 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2456 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2457 const char *kid_label = CopLABEL(kCOP);
2458 if (kid_label && strEQ(kid_label, label))
2462 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2463 if (kid == PL_lastgotoprobe)
2465 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2468 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2469 ops[-1]->op_type == OP_DBSTATE)
2474 if ((o = dofindlabel(kid, label, ops, oplimit)))
2487 register PERL_CONTEXT *cx;
2488 #define GOTO_DEPTH 64
2489 OP *enterops[GOTO_DEPTH];
2490 const char *label = NULL;
2491 const bool do_dump = (PL_op->op_type == OP_DUMP);
2492 static const char must_have_label[] = "goto must have label";
2494 if (PL_op->op_flags & OPf_STACKED) {
2495 SV * const sv = POPs;
2497 /* This egregious kludge implements goto &subroutine */
2498 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2500 register PERL_CONTEXT *cx;
2501 CV *cv = MUTABLE_CV(SvRV(sv));
2508 if (!CvROOT(cv) && !CvXSUB(cv)) {
2509 const GV * const gv = CvGV(cv);
2513 /* autoloaded stub? */
2514 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2516 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2517 GvNAMELEN(gv), FALSE);
2518 if (autogv && (cv = GvCV(autogv)))
2520 tmpstr = sv_newmortal();
2521 gv_efullname3(tmpstr, gv, NULL);
2522 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2524 DIE(aTHX_ "Goto undefined subroutine");
2527 /* First do some returnish stuff. */
2528 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2530 cxix = dopoptosub(cxstack_ix);
2532 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2533 if (cxix < cxstack_ix)
2537 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2538 if (CxTYPE(cx) == CXt_EVAL) {
2540 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2542 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2544 else if (CxMULTICALL(cx))
2545 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2546 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2547 /* put @_ back onto stack */
2548 AV* av = cx->blk_sub.argarray;
2550 items = AvFILLp(av) + 1;
2551 EXTEND(SP, items+1); /* @_ could have been extended. */
2552 Copy(AvARRAY(av), SP + 1, items, SV*);
2553 SvREFCNT_dec(GvAV(PL_defgv));
2554 GvAV(PL_defgv) = cx->blk_sub.savearray;
2556 /* abandon @_ if it got reified */
2561 av_extend(av, items-1);
2563 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2566 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2567 AV* const av = GvAV(PL_defgv);
2568 items = AvFILLp(av) + 1;
2569 EXTEND(SP, items+1); /* @_ could have been extended. */
2570 Copy(AvARRAY(av), SP + 1, items, SV*);
2574 if (CxTYPE(cx) == CXt_SUB &&
2575 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2576 SvREFCNT_dec(cx->blk_sub.cv);
2577 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2578 LEAVE_SCOPE(oldsave);
2580 /* Now do some callish stuff. */
2582 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2584 OP* const retop = cx->blk_sub.retop;
2589 for (index=0; index<items; index++)
2590 sv_2mortal(SP[-index]);
2593 /* XS subs don't have a CxSUB, so pop it */
2594 POPBLOCK(cx, PL_curpm);
2595 /* Push a mark for the start of arglist */
2598 (void)(*CvXSUB(cv))(aTHX_ cv);
2603 AV* const padlist = CvPADLIST(cv);
2604 if (CxTYPE(cx) == CXt_EVAL) {
2605 PL_in_eval = CxOLD_IN_EVAL(cx);
2606 PL_eval_root = cx->blk_eval.old_eval_root;
2607 cx->cx_type = CXt_SUB;
2609 cx->blk_sub.cv = cv;
2610 cx->blk_sub.olddepth = CvDEPTH(cv);
2613 if (CvDEPTH(cv) < 2)
2614 SvREFCNT_inc_simple_void_NN(cv);
2616 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2617 sub_crush_depth(cv);
2618 pad_push(padlist, CvDEPTH(cv));
2621 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2624 AV *const av = MUTABLE_AV(PAD_SVl(0));
2626 cx->blk_sub.savearray = GvAV(PL_defgv);
2627 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2628 CX_CURPAD_SAVE(cx->blk_sub);
2629 cx->blk_sub.argarray = av;
2631 if (items >= AvMAX(av) + 1) {
2632 SV **ary = AvALLOC(av);
2633 if (AvARRAY(av) != ary) {
2634 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2637 if (items >= AvMAX(av) + 1) {
2638 AvMAX(av) = items - 1;
2639 Renew(ary,items+1,SV*);
2645 Copy(mark,AvARRAY(av),items,SV*);
2646 AvFILLp(av) = items - 1;
2647 assert(!AvREAL(av));
2649 /* transfer 'ownership' of refcnts to new @_ */
2659 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2660 Perl_get_db_sub(aTHX_ NULL, cv);
2662 CV * const gotocv = get_cvs("DB::goto", 0);
2664 PUSHMARK( PL_stack_sp );
2665 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2670 RETURNOP(CvSTART(cv));
2674 label = SvPV_nolen_const(sv);
2675 if (!(do_dump || *label))
2676 DIE(aTHX_ must_have_label);
2679 else if (PL_op->op_flags & OPf_SPECIAL) {
2681 DIE(aTHX_ must_have_label);
2684 label = cPVOP->op_pv;
2688 if (label && *label) {
2689 OP *gotoprobe = NULL;
2690 bool leaving_eval = FALSE;
2691 bool in_block = FALSE;
2692 PERL_CONTEXT *last_eval_cx = NULL;
2696 PL_lastgotoprobe = NULL;
2698 for (ix = cxstack_ix; ix >= 0; ix--) {
2700 switch (CxTYPE(cx)) {
2702 leaving_eval = TRUE;
2703 if (!CxTRYBLOCK(cx)) {
2704 gotoprobe = (last_eval_cx ?
2705 last_eval_cx->blk_eval.old_eval_root :
2710 /* else fall through */
2711 case CXt_LOOP_LAZYIV:
2712 case CXt_LOOP_LAZYSV:
2714 case CXt_LOOP_PLAIN:
2717 gotoprobe = cx->blk_oldcop->op_sibling;
2723 gotoprobe = cx->blk_oldcop->op_sibling;
2726 gotoprobe = PL_main_root;
2729 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2730 gotoprobe = CvROOT(cx->blk_sub.cv);
2736 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2739 DIE(aTHX_ "panic: goto");
2740 gotoprobe = PL_main_root;
2744 retop = dofindlabel(gotoprobe, label,
2745 enterops, enterops + GOTO_DEPTH);
2749 PL_lastgotoprobe = gotoprobe;
2752 DIE(aTHX_ "Can't find label %s", label);
2754 /* if we're leaving an eval, check before we pop any frames
2755 that we're not going to punt, otherwise the error
2758 if (leaving_eval && *enterops && enterops[1]) {
2760 for (i = 1; enterops[i]; i++)
2761 if (enterops[i]->op_type == OP_ENTERITER)
2762 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2765 if (*enterops && enterops[1]) {
2766 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2768 deprecate("\"goto\" to jump into a construct");
2771 /* pop unwanted frames */
2773 if (ix < cxstack_ix) {
2780 oldsave = PL_scopestack[PL_scopestack_ix];
2781 LEAVE_SCOPE(oldsave);
2784 /* push wanted frames */
2786 if (*enterops && enterops[1]) {
2787 OP * const oldop = PL_op;
2788 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2789 for (; enterops[ix]; ix++) {
2790 PL_op = enterops[ix];
2791 /* Eventually we may want to stack the needed arguments
2792 * for each op. For now, we punt on the hard ones. */
2793 if (PL_op->op_type == OP_ENTERITER)
2794 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2795 PL_op->op_ppaddr(aTHX);
2803 if (!retop) retop = PL_main_start;
2805 PL_restartop = retop;
2806 PL_do_undump = TRUE;
2810 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2811 PL_do_undump = FALSE;
2828 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2830 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2833 PL_exit_flags |= PERL_EXIT_EXPECTED;
2835 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2836 if (anum || !(PL_minus_c && PL_madskills))
2841 PUSHs(&PL_sv_undef);
2848 S_save_lines(pTHX_ AV *array, SV *sv)
2850 const char *s = SvPVX_const(sv);
2851 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2854 PERL_ARGS_ASSERT_SAVE_LINES;
2856 while (s && s < send) {
2858 SV * const tmpstr = newSV_type(SVt_PVMG);
2860 t = (const char *)memchr(s, '\n', send - s);
2866 sv_setpvn(tmpstr, s, t - s);
2867 av_store(array, line++, tmpstr);
2875 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
2877 0 is used as continue inside eval,
2879 3 is used for a die caught by an inner eval - continue inner loop
2881 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
2882 establish a local jmpenv to handle exception traps.
2887 S_docatch(pTHX_ OP *o)
2891 OP * const oldop = PL_op;
2895 assert(CATCH_GET == TRUE);
2902 assert(cxstack_ix >= 0);
2903 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2904 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2909 /* die caught by an inner eval - continue inner loop */
2910 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
2911 PL_restartjmpenv = NULL;
2912 PL_op = PL_restartop;
2928 /* James Bond: Do you expect me to talk?
2929 Auric Goldfinger: No, Mr. Bond. I expect you to die.
2931 This code is an ugly hack, doesn't work with lexicals in subroutines that are
2932 called more than once, and is only used by regcomp.c, for (?{}) blocks.
2934 Currently it is not used outside the core code. Best if it stays that way.
2937 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2938 /* sv Text to convert to OP tree. */
2939 /* startop op_free() this to undo. */
2940 /* code Short string id of the caller. */
2942 dVAR; dSP; /* Make POPBLOCK work. */
2948 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2949 char *tmpbuf = tbuf;
2952 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2956 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2958 ENTER_with_name("eval");
2959 lex_start(sv, NULL, FALSE);
2961 /* switch to eval mode */
2963 if (IN_PERL_COMPILETIME) {
2964 SAVECOPSTASH_FREE(&PL_compiling);
2965 CopSTASH_set(&PL_compiling, PL_curstash);
2967 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2968 SV * const sv = sv_newmortal();
2969 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2970 code, (unsigned long)++PL_evalseq,
2971 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2976 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2977 (unsigned long)++PL_evalseq);
2978 SAVECOPFILE_FREE(&PL_compiling);
2979 CopFILE_set(&PL_compiling, tmpbuf+2);
2980 SAVECOPLINE(&PL_compiling);
2981 CopLINE_set(&PL_compiling, 1);
2982 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2983 deleting the eval's FILEGV from the stash before gv_check() runs
2984 (i.e. before run-time proper). To work around the coredump that
2985 ensues, we always turn GvMULTI_on for any globals that were
2986 introduced within evals. See force_ident(). GSAR 96-10-12 */
2987 safestr = savepvn(tmpbuf, len);
2988 SAVEDELETE(PL_defstash, safestr, len);
2990 #ifdef OP_IN_REGISTER
2996 /* we get here either during compilation, or via pp_regcomp at runtime */
2997 runtime = IN_PERL_RUNTIME;
2999 runcv = find_runcv(NULL);
3002 PL_op->op_type = OP_ENTEREVAL;
3003 PL_op->op_flags = 0; /* Avoid uninit warning. */
3004 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3006 need_catch = CATCH_GET;
3010 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3012 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3013 CATCH_SET(need_catch);
3014 POPBLOCK(cx,PL_curpm);
3017 (*startop)->op_type = OP_NULL;
3018 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3020 /* XXX DAPM do this properly one year */
3021 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3022 LEAVE_with_name("eval");
3023 if (IN_PERL_COMPILETIME)
3024 CopHINTS_set(&PL_compiling, PL_hints);
3025 #ifdef OP_IN_REGISTER
3028 PERL_UNUSED_VAR(newsp);
3029 PERL_UNUSED_VAR(optype);
3031 return PL_eval_start;
3036 =for apidoc find_runcv
3038 Locate the CV corresponding to the currently executing sub or eval.
3039 If db_seqp is non_null, skip CVs that are in the DB package and populate
3040 *db_seqp with the cop sequence number at the point that the DB:: code was
3041 entered. (allows debuggers to eval in the scope of the breakpoint rather
3042 than in the scope of the debugger itself).
3048 Perl_find_runcv(pTHX_ U32 *db_seqp)
3054 *db_seqp = PL_curcop->cop_seq;
3055 for (si = PL_curstackinfo; si; si = si->si_prev) {
3057 for (ix = si->si_cxix; ix >= 0; ix--) {
3058 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3059 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3060 CV * const cv = cx->blk_sub.cv;
3061 /* skip DB:: code */
3062 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3063 *db_seqp = cx->blk_oldcop->cop_seq;
3068 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3076 /* Run yyparse() in a setjmp wrapper. Returns:
3077 * 0: yyparse() successful
3078 * 1: yyparse() failed
3082 S_try_yyparse(pTHX_ int gramtype)
3087 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3091 ret = yyparse(gramtype) ? 1 : 0;
3105 /* Compile a require/do, an eval '', or a /(?{...})/.
3106 * In the last case, startop is non-null, and contains the address of
3107 * a pointer that should be set to the just-compiled code.
3108 * outside is the lexically enclosing CV (if any) that invoked us.
3109 * Returns a bool indicating whether the compile was successful; if so,
3110 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3111 * pushes undef (also croaks if startop != NULL).
3115 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3118 OP * const saveop = PL_op;
3119 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3122 PL_in_eval = (in_require
3123 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3128 SAVESPTR(PL_compcv);
3129 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3130 CvEVAL_on(PL_compcv);
3131 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3132 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3134 CvOUTSIDE_SEQ(PL_compcv) = seq;
3135 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3137 /* set up a scratch pad */
3139 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3140 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3144 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3146 /* make sure we compile in the right package */
3148 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3149 SAVESPTR(PL_curstash);
3150 PL_curstash = CopSTASH(PL_curcop);
3152 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3153 SAVESPTR(PL_beginav);
3154 PL_beginav = newAV();
3155 SAVEFREESV(PL_beginav);
3156 SAVESPTR(PL_unitcheckav);
3157 PL_unitcheckav = newAV();
3158 SAVEFREESV(PL_unitcheckav);
3161 SAVEBOOL(PL_madskills);
3165 /* try to compile it */
3167 PL_eval_root = NULL;
3168 PL_curcop = &PL_compiling;
3169 CopARYBASE_set(PL_curcop, 0);
3170 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3171 PL_in_eval |= EVAL_KEEPERR;
3175 CALL_BLOCK_HOOKS(eval, saveop);
3177 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3178 * so honour CATCH_GET and trap it here if necessary */
3180 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3182 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3183 SV **newsp; /* Used by POPBLOCK. */
3184 PERL_CONTEXT *cx = NULL;
3185 I32 optype; /* Used by POPEVAL. */
3189 PERL_UNUSED_VAR(newsp);
3190 PERL_UNUSED_VAR(optype);
3192 /* note that if yystatus == 3, then the EVAL CX block has already
3193 * been popped, and various vars restored */
3195 if (yystatus != 3) {
3197 op_free(PL_eval_root);
3198 PL_eval_root = NULL;
3200 SP = PL_stack_base + POPMARK; /* pop original mark */
3202 POPBLOCK(cx,PL_curpm);
3204 namesv = cx->blk_eval.old_namesv;
3209 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3211 msg = SvPVx_nolen_const(ERRSV);
3214 /* If cx is still NULL, it means that we didn't go in the
3215 * POPEVAL branch. */
3216 cx = &cxstack[cxstack_ix];
3217 assert(CxTYPE(cx) == CXt_EVAL);
3218 namesv = cx->blk_eval.old_namesv;
3220 (void)hv_store(GvHVn(PL_incgv),
3221 SvPVX_const(namesv), SvCUR(namesv),
3223 Perl_croak(aTHX_ "%sCompilation failed in require",
3224 *msg ? msg : "Unknown error\n");
3227 if (yystatus != 3) {
3228 POPBLOCK(cx,PL_curpm);
3231 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3232 (*msg ? msg : "Unknown error\n"));
3236 sv_setpvs(ERRSV, "Compilation error");
3239 PUSHs(&PL_sv_undef);
3243 CopLINE_set(&PL_compiling, 0);
3245 *startop = PL_eval_root;
3247 SAVEFREEOP(PL_eval_root);
3249 /* Set the context for this new optree.
3250 * Propagate the context from the eval(). */
3251 if ((gimme & G_WANT) == G_VOID)
3252 scalarvoid(PL_eval_root);
3253 else if ((gimme & G_WANT) == G_ARRAY)
3256 scalar(PL_eval_root);
3258 DEBUG_x(dump_eval());
3260 /* Register with debugger: */
3261 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3262 CV * const cv = get_cvs("DB::postponed", 0);
3266 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3268 call_sv(MUTABLE_SV(cv), G_DISCARD);
3272 if (PL_unitcheckav) {
3273 OP *es = PL_eval_start;
3274 call_list(PL_scopestack_ix, PL_unitcheckav);
3278 /* compiled okay, so do it */
3280 CvDEPTH(PL_compcv) = 1;
3281 SP = PL_stack_base + POPMARK; /* pop original mark */
3282 PL_op = saveop; /* The caller may need it. */
3283 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3290 S_check_type_and_open(pTHX_ const char *name)
3293 const int st_rc = PerlLIO_stat(name, &st);
3295 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3297 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3301 return PerlIO_open(name, PERL_SCRIPT_MODE);
3304 #ifndef PERL_DISABLE_PMC
3306 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3310 PERL_ARGS_ASSERT_DOOPEN_PM;
3312 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3313 SV *const pmcsv = newSV(namelen + 2);
3314 char *const pmc = SvPVX(pmcsv);
3317 memcpy(pmc, name, namelen);
3319 pmc[namelen + 1] = '\0';
3321 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3322 fp = check_type_and_open(name);
3325 fp = check_type_and_open(pmc);
3327 SvREFCNT_dec(pmcsv);
3330 fp = check_type_and_open(name);
3335 # define doopen_pm(name, namelen) check_type_and_open(name)
3336 #endif /* !PERL_DISABLE_PMC */
3341 register PERL_CONTEXT *cx;
3348 int vms_unixname = 0;
3350 const char *tryname = NULL;
3352 const I32 gimme = GIMME_V;
3353 int filter_has_file = 0;
3354 PerlIO *tryrsfp = NULL;
3355 SV *filter_cache = NULL;
3356 SV *filter_state = NULL;
3357 SV *filter_sub = NULL;
3363 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3364 sv = new_version(sv);
3365 if (!sv_derived_from(PL_patchlevel, "version"))
3366 upg_version(PL_patchlevel, TRUE);
3367 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3368 if ( vcmp(sv,PL_patchlevel) <= 0 )
3369 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3370 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3373 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3376 SV * const req = SvRV(sv);
3377 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3379 /* get the left hand term */
3380 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3382 first = SvIV(*av_fetch(lav,0,0));
3383 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3384 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3385 || av_len(lav) > 1 /* FP with > 3 digits */
3386 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3388 DIE(aTHX_ "Perl %"SVf" required--this is only "
3389 "%"SVf", stopped", SVfARG(vnormal(req)),
3390 SVfARG(vnormal(PL_patchlevel)));
3392 else { /* probably 'use 5.10' or 'use 5.8' */
3397 second = SvIV(*av_fetch(lav,1,0));
3399 second /= second >= 600 ? 100 : 10;
3400 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3401 (int)first, (int)second);
3402 upg_version(hintsv, TRUE);
3404 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3405 "--this is only %"SVf", stopped",
3406 SVfARG(vnormal(req)),
3407 SVfARG(vnormal(sv_2mortal(hintsv))),
3408 SVfARG(vnormal(PL_patchlevel)));
3413 /* We do this only with "use", not "require" or "no". */
3414 if (PL_compcv && !(cUNOP->op_first->op_private & OPpCONST_NOVER)) {
3415 /* If we request a version >= 5.9.5, load feature.pm with the
3416 * feature bundle that corresponds to the required version. */
3417 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3418 SV *const importsv = vnormal(sv);
3419 *SvPVX_mutable(importsv) = ':';
3420 ENTER_with_name("load_feature");
3421 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3422 LEAVE_with_name("load_feature");
3424 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3425 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3426 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
3432 name = SvPV_const(sv, len);
3433 if (!(name && len > 0 && *name))
3434 DIE(aTHX_ "Null filename used");
3435 TAINT_PROPER("require");
3439 /* The key in the %ENV hash is in the syntax of file passed as the argument
3440 * usually this is in UNIX format, but sometimes in VMS format, which
3441 * can result in a module being pulled in more than once.
3442 * To prevent this, the key must be stored in UNIX format if the VMS
3443 * name can be translated to UNIX.
3445 if ((unixname = tounixspec(name, NULL)) != NULL) {
3446 unixlen = strlen(unixname);
3452 /* if not VMS or VMS name can not be translated to UNIX, pass it
3455 unixname = (char *) name;
3458 if (PL_op->op_type == OP_REQUIRE) {
3459 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3460 unixname, unixlen, 0);
3462 if (*svp != &PL_sv_undef)
3465 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3466 "Compilation failed in require", unixname);
3470 /* prepare to compile file */
3472 if (path_is_absolute(name)) {
3474 tryrsfp = doopen_pm(name, len);
3477 AV * const ar = GvAVn(PL_incgv);
3483 namesv = newSV_type(SVt_PV);
3484 for (i = 0; i <= AvFILL(ar); i++) {
3485 SV * const dirsv = *av_fetch(ar, i, TRUE);
3487 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3494 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3495 && !sv_isobject(loader))
3497 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3500 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3501 PTR2UV(SvRV(dirsv)), name);
3502 tryname = SvPVX_const(namesv);
3505 ENTER_with_name("call_INC");
3513 if (sv_isobject(loader))
3514 count = call_method("INC", G_ARRAY);
3516 count = call_sv(loader, G_ARRAY);
3526 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3527 && !isGV_with_GP(SvRV(arg))) {
3528 filter_cache = SvRV(arg);
3529 SvREFCNT_inc_simple_void_NN(filter_cache);
3536 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3540 if (isGV_with_GP(arg)) {
3541 IO * const io = GvIO((const GV *)arg);
3546 tryrsfp = IoIFP(io);
3547 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3548 PerlIO_close(IoOFP(io));
3559 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3561 SvREFCNT_inc_simple_void_NN(filter_sub);
3564 filter_state = SP[i];
3565 SvREFCNT_inc_simple_void(filter_state);
3569 if (!tryrsfp && (filter_cache || filter_sub)) {
3570 tryrsfp = PerlIO_open(BIT_BUCKET,
3578 LEAVE_with_name("call_INC");
3580 /* Adjust file name if the hook has set an %INC entry.
3581 This needs to happen after the FREETMPS above. */
3582 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3584 tryname = SvPV_nolen_const(*svp);
3591 filter_has_file = 0;
3593 SvREFCNT_dec(filter_cache);
3594 filter_cache = NULL;
3597 SvREFCNT_dec(filter_state);
3598 filter_state = NULL;
3601 SvREFCNT_dec(filter_sub);
3606 if (!path_is_absolute(name)
3612 dir = SvPV_const(dirsv, dirlen);
3620 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3622 sv_setpv(namesv, unixdir);
3623 sv_catpv(namesv, unixname);
3625 # ifdef __SYMBIAN32__
3626 if (PL_origfilename[0] &&
3627 PL_origfilename[1] == ':' &&
3628 !(dir[0] && dir[1] == ':'))
3629 Perl_sv_setpvf(aTHX_ namesv,
3634 Perl_sv_setpvf(aTHX_ namesv,
3638 /* The equivalent of
3639 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3640 but without the need to parse the format string, or
3641 call strlen on either pointer, and with the correct
3642 allocation up front. */
3644 char *tmp = SvGROW(namesv, dirlen + len + 2);
3646 memcpy(tmp, dir, dirlen);
3649 /* name came from an SV, so it will have a '\0' at the
3650 end that we can copy as part of this memcpy(). */
3651 memcpy(tmp, name, len + 1);
3653 SvCUR_set(namesv, dirlen + len + 1);
3655 /* Don't even actually have to turn SvPOK_on() as we
3656 access it directly with SvPVX() below. */
3660 TAINT_PROPER("require");
3661 tryname = SvPVX_const(namesv);
3662 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3664 if (tryname[0] == '.' && tryname[1] == '/') {
3666 while (*++tryname == '/');
3670 else if (errno == EMFILE)
3671 /* no point in trying other paths if out of handles */
3679 SAVECOPFILE_FREE(&PL_compiling);
3680 CopFILE_set(&PL_compiling, tryname);
3682 SvREFCNT_dec(namesv);
3684 if (PL_op->op_type == OP_REQUIRE) {
3685 if(errno == EMFILE) {
3686 /* diag_listed_as: Can't locate %s */
3687 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
3689 if (namesv) { /* did we lookup @INC? */
3690 AV * const ar = GvAVn(PL_incgv);
3692 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3693 for (i = 0; i <= AvFILL(ar); i++) {
3694 sv_catpvs(inc, " ");
3695 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3698 /* diag_listed_as: Can't locate %s */
3700 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3702 (memEQ(name + len - 2, ".h", 3)
3703 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3704 (memEQ(name + len - 3, ".ph", 4)
3705 ? " (did you run h2ph?)" : ""),
3710 DIE(aTHX_ "Can't locate %s", name);
3716 SETERRNO(0, SS_NORMAL);
3718 /* Assume success here to prevent recursive requirement. */
3719 /* name is never assigned to again, so len is still strlen(name) */
3720 /* Check whether a hook in @INC has already filled %INC */
3722 (void)hv_store(GvHVn(PL_incgv),
3723 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3725 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3727 (void)hv_store(GvHVn(PL_incgv),
3728 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3731 ENTER_with_name("eval");
3733 lex_start(NULL, tryrsfp, TRUE);
3737 hv_clear(GvHV(PL_hintgv));
3739 SAVECOMPILEWARNINGS();
3740 if (PL_dowarn & G_WARN_ALL_ON)
3741 PL_compiling.cop_warnings = pWARN_ALL ;
3742 else if (PL_dowarn & G_WARN_ALL_OFF)
3743 PL_compiling.cop_warnings = pWARN_NONE ;
3745 PL_compiling.cop_warnings = pWARN_STD ;
3747 if (filter_sub || filter_cache) {
3748 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3749 than hanging another SV from it. In turn, filter_add() optionally
3750 takes the SV to use as the filter (or creates a new SV if passed
3751 NULL), so simply pass in whatever value filter_cache has. */
3752 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3753 IoLINES(datasv) = filter_has_file;
3754 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3755 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3758 /* switch to eval mode */
3759 PUSHBLOCK(cx, CXt_EVAL, SP);
3761 cx->blk_eval.retop = PL_op->op_next;
3763 SAVECOPLINE(&PL_compiling);
3764 CopLINE_set(&PL_compiling, 0);
3768 /* Store and reset encoding. */
3769 encoding = PL_encoding;
3772 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3773 op = DOCATCH(PL_eval_start);
3775 op = PL_op->op_next;
3777 /* Restore encoding. */
3778 PL_encoding = encoding;
3783 /* This is a op added to hold the hints hash for
3784 pp_entereval. The hash can be modified by the code
3785 being eval'ed, so we return a copy instead. */
3791 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
3799 register PERL_CONTEXT *cx;
3801 const I32 gimme = GIMME_V;
3802 const U32 was = PL_breakable_sub_gen;
3803 char tbuf[TYPE_DIGITS(long) + 12];
3804 char *tmpbuf = tbuf;
3808 HV *saved_hh = NULL;
3810 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3811 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3815 /* make sure we've got a plain PV (no overload etc) before testing
3816 * for taint. Making a copy here is probably overkill, but better
3817 * safe than sorry */
3819 const char * const p = SvPV_const(sv, len);
3821 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
3824 TAINT_IF(SvTAINTED(sv));
3825 TAINT_PROPER("eval");
3827 ENTER_with_name("eval");
3828 lex_start(sv, NULL, FALSE);
3831 /* switch to eval mode */
3833 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3834 SV * const temp_sv = sv_newmortal();
3835 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3836 (unsigned long)++PL_evalseq,
3837 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3838 tmpbuf = SvPVX(temp_sv);
3839 len = SvCUR(temp_sv);
3842 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3843 SAVECOPFILE_FREE(&PL_compiling);
3844 CopFILE_set(&PL_compiling, tmpbuf+2);
3845 SAVECOPLINE(&PL_compiling);
3846 CopLINE_set(&PL_compiling, 1);
3847 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3848 deleting the eval's FILEGV from the stash before gv_check() runs
3849 (i.e. before run-time proper). To work around the coredump that
3850 ensues, we always turn GvMULTI_on for any globals that were
3851 introduced within evals. See force_ident(). GSAR 96-10-12 */
3853 PL_hints = PL_op->op_targ;
3855 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3856 SvREFCNT_dec(GvHV(PL_hintgv));
3857 GvHV(PL_hintgv) = saved_hh;
3859 SAVECOMPILEWARNINGS();
3860 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3861 if (PL_compiling.cop_hints_hash) {
3862 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3864 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
3865 /* The label, if present, is the first entry on the chain. So rather
3866 than writing a blank label in front of it (which involves an
3867 allocation), just use the next entry in the chain. */
3868 PL_compiling.cop_hints_hash
3869 = PL_curcop->cop_hints_hash->refcounted_he_next;
3870 /* Check the assumption that this removed the label. */
3871 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3874 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3875 if (PL_compiling.cop_hints_hash) {
3877 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3878 HINTS_REFCNT_UNLOCK;
3880 /* special case: an eval '' executed within the DB package gets lexically
3881 * placed in the first non-DB CV rather than the current CV - this
3882 * allows the debugger to execute code, find lexicals etc, in the
3883 * scope of the code being debugged. Passing &seq gets find_runcv
3884 * to do the dirty work for us */
3885 runcv = find_runcv(&seq);
3887 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3889 cx->blk_eval.retop = PL_op->op_next;
3891 /* prepare to compile string */
3893 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3894 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3897 if (doeval(gimme, NULL, runcv, seq)) {
3898 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3899 ? (PERLDB_LINE || PERLDB_SAVESRC)
3900 : PERLDB_SAVESRC_NOSUBS) {
3901 /* Retain the filegv we created. */
3903 char *const safestr = savepvn(tmpbuf, len);
3904 SAVEDELETE(PL_defstash, safestr, len);
3906 return DOCATCH(PL_eval_start);
3908 /* We have already left the scope set up earler thanks to the LEAVE
3910 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3911 ? (PERLDB_LINE || PERLDB_SAVESRC)
3912 : PERLDB_SAVESRC_INVALID) {
3913 /* Retain the filegv we created. */
3915 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3917 return PL_op->op_next;
3928 register PERL_CONTEXT *cx;
3930 const U8 save_flags = PL_op -> op_flags;
3936 namesv = cx->blk_eval.old_namesv;
3937 retop = cx->blk_eval.retop;
3940 if (gimme == G_VOID)
3942 else if (gimme == G_SCALAR) {
3945 if (SvFLAGS(TOPs) & SVs_TEMP)
3948 *MARK = sv_mortalcopy(TOPs);
3952 *MARK = &PL_sv_undef;
3957 /* in case LEAVE wipes old return values */
3958 for (mark = newsp + 1; mark <= SP; mark++) {
3959 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3960 *mark = sv_mortalcopy(*mark);
3961 TAINT_NOT; /* Each item is independent */
3965 PL_curpm = newpm; /* Don't pop $1 et al till now */
3968 assert(CvDEPTH(PL_compcv) == 1);
3970 CvDEPTH(PL_compcv) = 0;
3973 if (optype == OP_REQUIRE &&
3974 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3976 /* Unassume the success we assumed earlier. */
3977 (void)hv_delete(GvHVn(PL_incgv),
3978 SvPVX_const(namesv), SvCUR(namesv),
3980 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
3982 /* die_unwind() did LEAVE, or we won't be here */
3985 LEAVE_with_name("eval");
3986 if (!(save_flags & OPf_SPECIAL)) {
3994 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3995 close to the related Perl_create_eval_scope. */
3997 Perl_delete_eval_scope(pTHX)
4002 register PERL_CONTEXT *cx;
4008 LEAVE_with_name("eval_scope");
4009 PERL_UNUSED_VAR(newsp);
4010 PERL_UNUSED_VAR(gimme);
4011 PERL_UNUSED_VAR(optype);
4014 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4015 also needed by Perl_fold_constants. */
4017 Perl_create_eval_scope(pTHX_ U32 flags)
4020 const I32 gimme = GIMME_V;
4022 ENTER_with_name("eval_scope");
4025 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4028 PL_in_eval = EVAL_INEVAL;
4029 if (flags & G_KEEPERR)
4030 PL_in_eval |= EVAL_KEEPERR;
4033 if (flags & G_FAKINGEVAL) {
4034 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4042 PERL_CONTEXT * const cx = create_eval_scope(0);
4043 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4044 return DOCATCH(PL_op->op_next);
4053 register PERL_CONTEXT *cx;
4058 PERL_UNUSED_VAR(optype);
4061 if (gimme == G_VOID)
4063 else if (gimme == G_SCALAR) {
4067 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4070 *MARK = sv_mortalcopy(TOPs);
4074 *MARK = &PL_sv_undef;
4079 /* in case LEAVE wipes old return values */
4081 for (mark = newsp + 1; mark <= SP; mark++) {
4082 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4083 *mark = sv_mortalcopy(*mark);
4084 TAINT_NOT; /* Each item is independent */
4088 PL_curpm = newpm; /* Don't pop $1 et al till now */
4090 LEAVE_with_name("eval_scope");
4098 register PERL_CONTEXT *cx;
4099 const I32 gimme = GIMME_V;
4101 ENTER_with_name("given");
4104 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
4106 PUSHBLOCK(cx, CXt_GIVEN, SP);
4115 register PERL_CONTEXT *cx;
4119 PERL_UNUSED_CONTEXT;
4122 assert(CxTYPE(cx) == CXt_GIVEN);
4125 if (gimme == G_VOID)
4127 else if (gimme == G_SCALAR) {
4131 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4134 *MARK = sv_mortalcopy(TOPs);
4138 *MARK = &PL_sv_undef;
4143 /* in case LEAVE wipes old return values */
4145 for (mark = newsp + 1; mark <= SP; mark++) {
4146 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4147 *mark = sv_mortalcopy(*mark);
4148 TAINT_NOT; /* Each item is independent */
4152 PL_curpm = newpm; /* Don't pop $1 et al till now */
4154 LEAVE_with_name("given");
4158 /* Helper routines used by pp_smartmatch */
4160 S_make_matcher(pTHX_ REGEXP *re)
4163 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4165 PERL_ARGS_ASSERT_MAKE_MATCHER;
4167 PM_SETRE(matcher, ReREFCNT_inc(re));
4169 SAVEFREEOP((OP *) matcher);
4170 ENTER_with_name("matcher"); SAVETMPS;
4176 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4181 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4183 PL_op = (OP *) matcher;
4188 return (SvTRUEx(POPs));
4192 S_destroy_matcher(pTHX_ PMOP *matcher)
4196 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4197 PERL_UNUSED_ARG(matcher);
4200 LEAVE_with_name("matcher");
4203 /* Do a smart match */
4206 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4207 return do_smartmatch(NULL, NULL);
4210 /* This version of do_smartmatch() implements the
4211 * table of smart matches that is found in perlsyn.
4214 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4219 bool object_on_left = FALSE;
4220 SV *e = TOPs; /* e is for 'expression' */
4221 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4223 /* Take care only to invoke mg_get() once for each argument.
4224 * Currently we do this by copying the SV if it's magical. */
4227 d = sv_mortalcopy(d);
4234 e = sv_mortalcopy(e);
4236 /* First of all, handle overload magic of the rightmost argument */
4239 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4240 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4242 tmpsv = amagic_call(d, e, smart_amg, 0);
4249 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4252 SP -= 2; /* Pop the values */
4257 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4264 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4265 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4266 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4268 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4269 object_on_left = TRUE;
4272 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4274 if (object_on_left) {
4275 goto sm_any_sub; /* Treat objects like scalars */
4277 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4278 /* Test sub truth for each key */
4280 bool andedresults = TRUE;
4281 HV *hv = (HV*) SvRV(d);
4282 I32 numkeys = hv_iterinit(hv);
4283 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4286 while ( (he = hv_iternext(hv)) ) {
4287 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4288 ENTER_with_name("smartmatch_hash_key_test");
4291 PUSHs(hv_iterkeysv(he));
4293 c = call_sv(e, G_SCALAR);
4296 andedresults = FALSE;
4298 andedresults = SvTRUEx(POPs) && andedresults;
4300 LEAVE_with_name("smartmatch_hash_key_test");
4307 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4308 /* Test sub truth for each element */
4310 bool andedresults = TRUE;
4311 AV *av = (AV*) SvRV(d);
4312 const I32 len = av_len(av);
4313 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4316 for (i = 0; i <= len; ++i) {
4317 SV * const * const svp = av_fetch(av, i, FALSE);
4318 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4319 ENTER_with_name("smartmatch_array_elem_test");
4325 c = call_sv(e, G_SCALAR);
4328 andedresults = FALSE;
4330 andedresults = SvTRUEx(POPs) && andedresults;
4332 LEAVE_with_name("smartmatch_array_elem_test");
4341 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4342 ENTER_with_name("smartmatch_coderef");
4347 c = call_sv(e, G_SCALAR);
4351 else if (SvTEMP(TOPs))
4352 SvREFCNT_inc_void(TOPs);
4354 LEAVE_with_name("smartmatch_coderef");
4359 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4360 if (object_on_left) {
4361 goto sm_any_hash; /* Treat objects like scalars */
4363 else if (!SvOK(d)) {
4364 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4367 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4368 /* Check that the key-sets are identical */
4370 HV *other_hv = MUTABLE_HV(SvRV(d));
4372 bool other_tied = FALSE;
4373 U32 this_key_count = 0,
4374 other_key_count = 0;
4375 HV *hv = MUTABLE_HV(SvRV(e));
4377 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4378 /* Tied hashes don't know how many keys they have. */
4379 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4382 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4383 HV * const temp = other_hv;
4388 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4391 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4394 /* The hashes have the same number of keys, so it suffices
4395 to check that one is a subset of the other. */
4396 (void) hv_iterinit(hv);
4397 while ( (he = hv_iternext(hv)) ) {
4398 SV *key = hv_iterkeysv(he);
4400 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4403 if(!hv_exists_ent(other_hv, key, 0)) {
4404 (void) hv_iterinit(hv); /* reset iterator */
4410 (void) hv_iterinit(other_hv);
4411 while ( hv_iternext(other_hv) )
4415 other_key_count = HvUSEDKEYS(other_hv);
4417 if (this_key_count != other_key_count)
4422 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4423 AV * const other_av = MUTABLE_AV(SvRV(d));
4424 const I32 other_len = av_len(other_av) + 1;
4426 HV *hv = MUTABLE_HV(SvRV(e));
4428 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4429 for (i = 0; i < other_len; ++i) {
4430 SV ** const svp = av_fetch(other_av, i, FALSE);
4431 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4432 if (svp) { /* ??? When can this not happen? */
4433 if (hv_exists_ent(hv, *svp, 0))
4439 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4440 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4443 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4445 HV *hv = MUTABLE_HV(SvRV(e));
4447 (void) hv_iterinit(hv);
4448 while ( (he = hv_iternext(hv)) ) {
4449 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4450 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4451 (void) hv_iterinit(hv);
4452 destroy_matcher(matcher);
4456 destroy_matcher(matcher);
4462 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4463 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4470 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4471 if (object_on_left) {
4472 goto sm_any_array; /* Treat objects like scalars */
4474 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4475 AV * const other_av = MUTABLE_AV(SvRV(e));
4476 const I32 other_len = av_len(other_av) + 1;
4479 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4480 for (i = 0; i < other_len; ++i) {
4481 SV ** const svp = av_fetch(other_av, i, FALSE);
4483 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4484 if (svp) { /* ??? When can this not happen? */
4485 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4491 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4492 AV *other_av = MUTABLE_AV(SvRV(d));
4493 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4494 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4498 const I32 other_len = av_len(other_av);
4500 if (NULL == seen_this) {
4501 seen_this = newHV();
4502 (void) sv_2mortal(MUTABLE_SV(seen_this));
4504 if (NULL == seen_other) {
4505 seen_other = newHV();
4506 (void) sv_2mortal(MUTABLE_SV(seen_other));
4508 for(i = 0; i <= other_len; ++i) {