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 sv_catsv(ERRSV, err);
1583 sv_catsv(PL_errors, err);
1585 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1587 ++PL_parser->error_count;
1591 Perl_die_unwind(pTHX_ SV *msv)
1594 SV *exceptsv = sv_mortalcopy(msv);
1595 U8 in_eval = PL_in_eval;
1596 PERL_ARGS_ASSERT_DIE_UNWIND;
1602 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1603 && PL_curstackinfo->si_prev)
1612 register PERL_CONTEXT *cx;
1615 if (cxix < cxstack_ix)
1618 POPBLOCK(cx,PL_curpm);
1619 if (CxTYPE(cx) != CXt_EVAL) {
1621 const char* message = SvPVx_const(exceptsv, msglen);
1622 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1623 PerlIO_write(Perl_error_log, message, msglen);
1627 namesv = cx->blk_eval.old_namesv;
1629 if (gimme == G_SCALAR)
1630 *++newsp = &PL_sv_undef;
1631 PL_stack_sp = newsp;
1635 /* LEAVE could clobber PL_curcop (see save_re_context())
1636 * XXX it might be better to find a way to avoid messing with
1637 * PL_curcop in save_re_context() instead, but this is a more
1638 * minimal fix --GSAR */
1639 PL_curcop = cx->blk_oldcop;
1641 if (optype == OP_REQUIRE) {
1642 const char* const msg = SvPVx_nolen_const(exceptsv);
1643 (void)hv_store(GvHVn(PL_incgv),
1644 SvPVX_const(namesv), SvCUR(namesv),
1646 /* note that unlike pp_entereval, pp_require isn't
1647 * supposed to trap errors. So now that we've popped the
1648 * EVAL that pp_require pushed, and processed the error
1649 * message, rethrow the error */
1650 Perl_croak(aTHX_ "%sCompilation failed in require",
1651 *msg ? msg : "Unknown error\n");
1653 if (in_eval & EVAL_KEEPERR) {
1654 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1655 SvPV_nolen_const(exceptsv));
1658 sv_setsv(ERRSV, exceptsv);
1660 assert(CxTYPE(cx) == CXt_EVAL);
1661 PL_restartjmpenv = cx->blk_eval.cur_top_env;
1662 PL_restartop = cx->blk_eval.retop;
1668 write_to_stderr(exceptsv);
1675 dVAR; dSP; dPOPTOPssrl;
1676 if (SvTRUE(left) != SvTRUE(right))
1683 =for apidoc caller_cx
1685 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1686 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1687 information returned to Perl by C<caller>. Note that XSUBs don't get a
1688 stack frame, so C<caller_cx(0, NULL)> will return information for the
1689 immediately-surrounding Perl code.
1691 This function skips over the automatic calls to C<&DB::sub> made on the
1692 behalf of the debugger. If the stack frame requested was a sub called by
1693 C<DB::sub>, the return value will be the frame for the call to
1694 C<DB::sub>, since that has the correct line number/etc. for the call
1695 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1696 frame for the sub call itself.
1701 const PERL_CONTEXT *
1702 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1704 register I32 cxix = dopoptosub(cxstack_ix);
1705 register const PERL_CONTEXT *cx;
1706 register const PERL_CONTEXT *ccstack = cxstack;
1707 const PERL_SI *top_si = PL_curstackinfo;
1710 /* we may be in a higher stacklevel, so dig down deeper */
1711 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1712 top_si = top_si->si_prev;
1713 ccstack = top_si->si_cxstack;
1714 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1718 /* caller() should not report the automatic calls to &DB::sub */
1719 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1720 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1724 cxix = dopoptosub_at(ccstack, cxix - 1);
1727 cx = &ccstack[cxix];
1728 if (dbcxp) *dbcxp = cx;
1730 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1731 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1732 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1733 field below is defined for any cx. */
1734 /* caller() should not report the automatic calls to &DB::sub */
1735 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1736 cx = &ccstack[dbcxix];
1746 register const PERL_CONTEXT *cx;
1747 const PERL_CONTEXT *dbcx;
1749 const char *stashname;
1755 cx = caller_cx(count, &dbcx);
1757 if (GIMME != G_ARRAY) {
1764 stashname = CopSTASHPV(cx->blk_oldcop);
1765 if (GIMME != G_ARRAY) {
1768 PUSHs(&PL_sv_undef);
1771 sv_setpv(TARG, stashname);
1780 PUSHs(&PL_sv_undef);
1782 mPUSHs(newSVpv(stashname, 0));
1783 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1784 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1787 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1788 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1789 /* So is ccstack[dbcxix]. */
1791 SV * const sv = newSV(0);
1792 gv_efullname3(sv, cvgv, NULL);
1794 PUSHs(boolSV(CxHASARGS(cx)));
1797 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1798 PUSHs(boolSV(CxHASARGS(cx)));
1802 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1805 gimme = (I32)cx->blk_gimme;
1806 if (gimme == G_VOID)
1807 PUSHs(&PL_sv_undef);
1809 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1810 if (CxTYPE(cx) == CXt_EVAL) {
1812 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1813 PUSHs(cx->blk_eval.cur_text);
1817 else if (cx->blk_eval.old_namesv) {
1818 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1821 /* eval BLOCK (try blocks have old_namesv == 0) */
1823 PUSHs(&PL_sv_undef);
1824 PUSHs(&PL_sv_undef);
1828 PUSHs(&PL_sv_undef);
1829 PUSHs(&PL_sv_undef);
1831 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1832 && CopSTASH_eq(PL_curcop, PL_debstash))
1834 AV * const ary = cx->blk_sub.argarray;
1835 const int off = AvARRAY(ary) - AvALLOC(ary);
1838 Perl_init_dbargs(aTHX);
1840 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1841 av_extend(PL_dbargs, AvFILLp(ary) + off);
1842 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1843 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1845 /* XXX only hints propagated via op_private are currently
1846 * visible (others are not easily accessible, since they
1847 * use the global PL_hints) */
1848 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1851 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1853 if (old_warnings == pWARN_NONE ||
1854 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1855 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1856 else if (old_warnings == pWARN_ALL ||
1857 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1858 /* Get the bit mask for $warnings::Bits{all}, because
1859 * it could have been extended by warnings::register */
1861 HV * const bits = get_hv("warnings::Bits", 0);
1862 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1863 mask = newSVsv(*bits_all);
1866 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1870 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1874 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1875 sv_2mortal(newRV_noinc(
1876 MUTABLE_SV(Perl_refcounted_he_chain_2hv(aTHX_
1877 cx->blk_oldcop->cop_hints_hash))))
1886 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1887 sv_reset(tmps, CopSTASH(PL_curcop));
1892 /* like pp_nextstate, but used instead when the debugger is active */
1897 PL_curcop = (COP*)PL_op;
1898 TAINT_NOT; /* Each statement is presumed innocent */
1899 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1904 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1905 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1908 register PERL_CONTEXT *cx;
1909 const I32 gimme = G_ARRAY;
1911 GV * const gv = PL_DBgv;
1912 register CV * const cv = GvCV(gv);
1915 DIE(aTHX_ "No DB::DB routine defined");
1917 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1918 /* don't do recursive DB::DB call */
1933 (void)(*CvXSUB(cv))(aTHX_ cv);
1940 PUSHBLOCK(cx, CXt_SUB, SP);
1942 cx->blk_sub.retop = PL_op->op_next;
1945 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1946 RETURNOP(CvSTART(cv));
1956 register PERL_CONTEXT *cx;
1957 const I32 gimme = GIMME_V;
1958 void *itervar; /* location of the iteration variable */
1959 U8 cxtype = CXt_LOOP_FOR;
1961 ENTER_with_name("loop1");
1964 if (PL_op->op_targ) { /* "my" variable */
1965 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1966 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1967 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1968 SVs_PADSTALE, SVs_PADSTALE);
1970 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1972 itervar = PL_comppad;
1974 itervar = &PAD_SVl(PL_op->op_targ);
1977 else { /* symbol table variable */
1978 GV * const gv = MUTABLE_GV(POPs);
1979 SV** svp = &GvSV(gv);
1980 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
1982 itervar = (void *)gv;
1985 if (PL_op->op_private & OPpITER_DEF)
1986 cxtype |= CXp_FOR_DEF;
1988 ENTER_with_name("loop2");
1990 PUSHBLOCK(cx, cxtype, SP);
1991 PUSHLOOP_FOR(cx, itervar, MARK);
1992 if (PL_op->op_flags & OPf_STACKED) {
1993 SV *maybe_ary = POPs;
1994 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1996 SV * const right = maybe_ary;
1999 if (RANGE_IS_NUMERIC(sv,right)) {
2000 cx->cx_type &= ~CXTYPEMASK;
2001 cx->cx_type |= CXt_LOOP_LAZYIV;
2002 /* Make sure that no-one re-orders cop.h and breaks our
2004 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2005 #ifdef NV_PRESERVES_UV
2006 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2007 (SvNV(sv) > (NV)IV_MAX)))
2009 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2010 (SvNV(right) < (NV)IV_MIN))))
2012 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2015 ((SvUV(sv) > (UV)IV_MAX) ||
2016 (SvNV(sv) > (NV)UV_MAX)))))
2018 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2020 ((SvNV(right) > 0) &&
2021 ((SvUV(right) > (UV)IV_MAX) ||
2022 (SvNV(right) > (NV)UV_MAX))))))
2024 DIE(aTHX_ "Range iterator outside integer range");
2025 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2026 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2028 /* for correct -Dstv display */
2029 cx->blk_oldsp = sp - PL_stack_base;
2033 cx->cx_type &= ~CXTYPEMASK;
2034 cx->cx_type |= CXt_LOOP_LAZYSV;
2035 /* Make sure that no-one re-orders cop.h and breaks our
2037 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2038 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2039 cx->blk_loop.state_u.lazysv.end = right;
2040 SvREFCNT_inc(right);
2041 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2042 /* This will do the upgrade to SVt_PV, and warn if the value
2043 is uninitialised. */
2044 (void) SvPV_nolen_const(right);
2045 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2046 to replace !SvOK() with a pointer to "". */
2048 SvREFCNT_dec(right);
2049 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2053 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2054 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2055 SvREFCNT_inc(maybe_ary);
2056 cx->blk_loop.state_u.ary.ix =
2057 (PL_op->op_private & OPpITER_REVERSED) ?
2058 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2062 else { /* iterating over items on the stack */
2063 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2064 if (PL_op->op_private & OPpITER_REVERSED) {
2065 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2068 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2078 register PERL_CONTEXT *cx;
2079 const I32 gimme = GIMME_V;
2081 ENTER_with_name("loop1");
2083 ENTER_with_name("loop2");
2085 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2086 PUSHLOOP_PLAIN(cx, SP);
2094 register PERL_CONTEXT *cx;
2101 assert(CxTYPE_is_LOOP(cx));
2103 newsp = PL_stack_base + cx->blk_loop.resetsp;
2106 if (gimme == G_VOID)
2108 else if (gimme == G_SCALAR) {
2110 *++newsp = sv_mortalcopy(*SP);
2112 *++newsp = &PL_sv_undef;
2116 *++newsp = sv_mortalcopy(*++mark);
2117 TAINT_NOT; /* Each item is independent */
2123 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2124 PL_curpm = newpm; /* ... and pop $1 et al */
2126 LEAVE_with_name("loop2");
2127 LEAVE_with_name("loop1");
2135 register PERL_CONTEXT *cx;
2136 bool popsub2 = FALSE;
2137 bool clear_errsv = FALSE;
2146 const I32 cxix = dopoptosub(cxstack_ix);
2149 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2150 * sort block, which is a CXt_NULL
2153 PL_stack_base[1] = *PL_stack_sp;
2154 PL_stack_sp = PL_stack_base + 1;
2158 DIE(aTHX_ "Can't return outside a subroutine");
2160 if (cxix < cxstack_ix)
2163 if (CxMULTICALL(&cxstack[cxix])) {
2164 gimme = cxstack[cxix].blk_gimme;
2165 if (gimme == G_VOID)
2166 PL_stack_sp = PL_stack_base;
2167 else if (gimme == G_SCALAR) {
2168 PL_stack_base[1] = *PL_stack_sp;
2169 PL_stack_sp = PL_stack_base + 1;
2175 switch (CxTYPE(cx)) {
2178 retop = cx->blk_sub.retop;
2179 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2182 if (!(PL_in_eval & EVAL_KEEPERR))
2185 namesv = cx->blk_eval.old_namesv;
2186 retop = cx->blk_eval.retop;
2190 if (optype == OP_REQUIRE &&
2191 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2193 /* Unassume the success we assumed earlier. */
2194 (void)hv_delete(GvHVn(PL_incgv),
2195 SvPVX_const(namesv), SvCUR(namesv),
2197 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2202 retop = cx->blk_sub.retop;
2205 DIE(aTHX_ "panic: return");
2209 if (gimme == G_SCALAR) {
2212 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2214 *++newsp = SvREFCNT_inc(*SP);
2219 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2221 *++newsp = sv_mortalcopy(sv);
2226 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2229 *++newsp = sv_mortalcopy(*SP);
2232 *++newsp = &PL_sv_undef;
2234 else if (gimme == G_ARRAY) {
2235 while (++MARK <= SP) {
2236 *++newsp = (popsub2 && SvTEMP(*MARK))
2237 ? *MARK : sv_mortalcopy(*MARK);
2238 TAINT_NOT; /* Each item is independent */
2241 PL_stack_sp = newsp;
2244 /* Stack values are safe: */
2247 POPSUB(cx,sv); /* release CV and @_ ... */
2251 PL_curpm = newpm; /* ... and pop $1 et al */
2264 register PERL_CONTEXT *cx;
2275 if (PL_op->op_flags & OPf_SPECIAL) {
2276 cxix = dopoptoloop(cxstack_ix);
2278 DIE(aTHX_ "Can't \"last\" outside a loop block");
2281 cxix = dopoptolabel(cPVOP->op_pv);
2283 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2285 if (cxix < cxstack_ix)
2289 cxstack_ix++; /* temporarily protect top context */
2291 switch (CxTYPE(cx)) {
2292 case CXt_LOOP_LAZYIV:
2293 case CXt_LOOP_LAZYSV:
2295 case CXt_LOOP_PLAIN:
2297 newsp = PL_stack_base + cx->blk_loop.resetsp;
2298 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2302 nextop = cx->blk_sub.retop;
2306 nextop = cx->blk_eval.retop;
2310 nextop = cx->blk_sub.retop;
2313 DIE(aTHX_ "panic: last");
2317 if (gimme == G_SCALAR) {
2319 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2320 ? *SP : sv_mortalcopy(*SP);
2322 *++newsp = &PL_sv_undef;
2324 else if (gimme == G_ARRAY) {
2325 while (++MARK <= SP) {
2326 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2327 ? *MARK : sv_mortalcopy(*MARK);
2328 TAINT_NOT; /* Each item is independent */
2336 /* Stack values are safe: */
2338 case CXt_LOOP_LAZYIV:
2339 case CXt_LOOP_PLAIN:
2340 case CXt_LOOP_LAZYSV:
2342 POPLOOP(cx); /* release loop vars ... */
2346 POPSUB(cx,sv); /* release CV and @_ ... */
2349 PL_curpm = newpm; /* ... and pop $1 et al */
2352 PERL_UNUSED_VAR(optype);
2353 PERL_UNUSED_VAR(gimme);
2361 register PERL_CONTEXT *cx;
2364 if (PL_op->op_flags & OPf_SPECIAL) {
2365 cxix = dopoptoloop(cxstack_ix);
2367 DIE(aTHX_ "Can't \"next\" outside a loop block");
2370 cxix = dopoptolabel(cPVOP->op_pv);
2372 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2374 if (cxix < cxstack_ix)
2377 /* clear off anything above the scope we're re-entering, but
2378 * save the rest until after a possible continue block */
2379 inner = PL_scopestack_ix;
2381 if (PL_scopestack_ix < inner)
2382 leave_scope(PL_scopestack[PL_scopestack_ix]);
2383 PL_curcop = cx->blk_oldcop;
2384 return (cx)->blk_loop.my_op->op_nextop;
2391 register PERL_CONTEXT *cx;
2395 if (PL_op->op_flags & OPf_SPECIAL) {
2396 cxix = dopoptoloop(cxstack_ix);
2398 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2401 cxix = dopoptolabel(cPVOP->op_pv);
2403 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2405 if (cxix < cxstack_ix)
2408 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2409 if (redo_op->op_type == OP_ENTER) {
2410 /* pop one less context to avoid $x being freed in while (my $x..) */
2412 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2413 redo_op = redo_op->op_next;
2417 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2418 LEAVE_SCOPE(oldsave);
2420 PL_curcop = cx->blk_oldcop;
2425 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2429 static const char too_deep[] = "Target of goto is too deeply nested";
2431 PERL_ARGS_ASSERT_DOFINDLABEL;
2434 Perl_croak(aTHX_ too_deep);
2435 if (o->op_type == OP_LEAVE ||
2436 o->op_type == OP_SCOPE ||
2437 o->op_type == OP_LEAVELOOP ||
2438 o->op_type == OP_LEAVESUB ||
2439 o->op_type == OP_LEAVETRY)
2441 *ops++ = cUNOPo->op_first;
2443 Perl_croak(aTHX_ too_deep);
2446 if (o->op_flags & OPf_KIDS) {
2448 /* First try all the kids at this level, since that's likeliest. */
2449 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2450 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2451 const char *kid_label = CopLABEL(kCOP);
2452 if (kid_label && strEQ(kid_label, label))
2456 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2457 if (kid == PL_lastgotoprobe)
2459 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2462 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2463 ops[-1]->op_type == OP_DBSTATE)
2468 if ((o = dofindlabel(kid, label, ops, oplimit)))
2481 register PERL_CONTEXT *cx;
2482 #define GOTO_DEPTH 64
2483 OP *enterops[GOTO_DEPTH];
2484 const char *label = NULL;
2485 const bool do_dump = (PL_op->op_type == OP_DUMP);
2486 static const char must_have_label[] = "goto must have label";
2488 if (PL_op->op_flags & OPf_STACKED) {
2489 SV * const sv = POPs;
2491 /* This egregious kludge implements goto &subroutine */
2492 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2494 register PERL_CONTEXT *cx;
2495 CV *cv = MUTABLE_CV(SvRV(sv));
2502 if (!CvROOT(cv) && !CvXSUB(cv)) {
2503 const GV * const gv = CvGV(cv);
2507 /* autoloaded stub? */
2508 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2510 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2511 GvNAMELEN(gv), FALSE);
2512 if (autogv && (cv = GvCV(autogv)))
2514 tmpstr = sv_newmortal();
2515 gv_efullname3(tmpstr, gv, NULL);
2516 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2518 DIE(aTHX_ "Goto undefined subroutine");
2521 /* First do some returnish stuff. */
2522 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2524 cxix = dopoptosub(cxstack_ix);
2526 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2527 if (cxix < cxstack_ix)
2531 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2532 if (CxTYPE(cx) == CXt_EVAL) {
2534 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2536 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2538 else if (CxMULTICALL(cx))
2539 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2540 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2541 /* put @_ back onto stack */
2542 AV* av = cx->blk_sub.argarray;
2544 items = AvFILLp(av) + 1;
2545 EXTEND(SP, items+1); /* @_ could have been extended. */
2546 Copy(AvARRAY(av), SP + 1, items, SV*);
2547 SvREFCNT_dec(GvAV(PL_defgv));
2548 GvAV(PL_defgv) = cx->blk_sub.savearray;
2550 /* abandon @_ if it got reified */
2555 av_extend(av, items-1);
2557 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2560 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2561 AV* const av = GvAV(PL_defgv);
2562 items = AvFILLp(av) + 1;
2563 EXTEND(SP, items+1); /* @_ could have been extended. */
2564 Copy(AvARRAY(av), SP + 1, items, SV*);
2568 if (CxTYPE(cx) == CXt_SUB &&
2569 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2570 SvREFCNT_dec(cx->blk_sub.cv);
2571 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2572 LEAVE_SCOPE(oldsave);
2574 /* Now do some callish stuff. */
2576 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2578 OP* const retop = cx->blk_sub.retop;
2583 for (index=0; index<items; index++)
2584 sv_2mortal(SP[-index]);
2587 /* XS subs don't have a CxSUB, so pop it */
2588 POPBLOCK(cx, PL_curpm);
2589 /* Push a mark for the start of arglist */
2592 (void)(*CvXSUB(cv))(aTHX_ cv);
2597 AV* const padlist = CvPADLIST(cv);
2598 if (CxTYPE(cx) == CXt_EVAL) {
2599 PL_in_eval = CxOLD_IN_EVAL(cx);
2600 PL_eval_root = cx->blk_eval.old_eval_root;
2601 cx->cx_type = CXt_SUB;
2603 cx->blk_sub.cv = cv;
2604 cx->blk_sub.olddepth = CvDEPTH(cv);
2607 if (CvDEPTH(cv) < 2)
2608 SvREFCNT_inc_simple_void_NN(cv);
2610 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2611 sub_crush_depth(cv);
2612 pad_push(padlist, CvDEPTH(cv));
2615 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2618 AV *const av = MUTABLE_AV(PAD_SVl(0));
2620 cx->blk_sub.savearray = GvAV(PL_defgv);
2621 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2622 CX_CURPAD_SAVE(cx->blk_sub);
2623 cx->blk_sub.argarray = av;
2625 if (items >= AvMAX(av) + 1) {
2626 SV **ary = AvALLOC(av);
2627 if (AvARRAY(av) != ary) {
2628 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2631 if (items >= AvMAX(av) + 1) {
2632 AvMAX(av) = items - 1;
2633 Renew(ary,items+1,SV*);
2639 Copy(mark,AvARRAY(av),items,SV*);
2640 AvFILLp(av) = items - 1;
2641 assert(!AvREAL(av));
2643 /* transfer 'ownership' of refcnts to new @_ */
2653 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2654 Perl_get_db_sub(aTHX_ NULL, cv);
2656 CV * const gotocv = get_cvs("DB::goto", 0);
2658 PUSHMARK( PL_stack_sp );
2659 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2664 RETURNOP(CvSTART(cv));
2668 label = SvPV_nolen_const(sv);
2669 if (!(do_dump || *label))
2670 DIE(aTHX_ must_have_label);
2673 else if (PL_op->op_flags & OPf_SPECIAL) {
2675 DIE(aTHX_ must_have_label);
2678 label = cPVOP->op_pv;
2682 if (label && *label) {
2683 OP *gotoprobe = NULL;
2684 bool leaving_eval = FALSE;
2685 bool in_block = FALSE;
2686 PERL_CONTEXT *last_eval_cx = NULL;
2690 PL_lastgotoprobe = NULL;
2692 for (ix = cxstack_ix; ix >= 0; ix--) {
2694 switch (CxTYPE(cx)) {
2696 leaving_eval = TRUE;
2697 if (!CxTRYBLOCK(cx)) {
2698 gotoprobe = (last_eval_cx ?
2699 last_eval_cx->blk_eval.old_eval_root :
2704 /* else fall through */
2705 case CXt_LOOP_LAZYIV:
2706 case CXt_LOOP_LAZYSV:
2708 case CXt_LOOP_PLAIN:
2711 gotoprobe = cx->blk_oldcop->op_sibling;
2717 gotoprobe = cx->blk_oldcop->op_sibling;
2720 gotoprobe = PL_main_root;
2723 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2724 gotoprobe = CvROOT(cx->blk_sub.cv);
2730 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2733 DIE(aTHX_ "panic: goto");
2734 gotoprobe = PL_main_root;
2738 retop = dofindlabel(gotoprobe, label,
2739 enterops, enterops + GOTO_DEPTH);
2743 PL_lastgotoprobe = gotoprobe;
2746 DIE(aTHX_ "Can't find label %s", label);
2748 /* if we're leaving an eval, check before we pop any frames
2749 that we're not going to punt, otherwise the error
2752 if (leaving_eval && *enterops && enterops[1]) {
2754 for (i = 1; enterops[i]; i++)
2755 if (enterops[i]->op_type == OP_ENTERITER)
2756 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2759 if (*enterops && enterops[1]) {
2760 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2762 deprecate("\"goto\" to jump into a construct");
2765 /* pop unwanted frames */
2767 if (ix < cxstack_ix) {
2774 oldsave = PL_scopestack[PL_scopestack_ix];
2775 LEAVE_SCOPE(oldsave);
2778 /* push wanted frames */
2780 if (*enterops && enterops[1]) {
2781 OP * const oldop = PL_op;
2782 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2783 for (; enterops[ix]; ix++) {
2784 PL_op = enterops[ix];
2785 /* Eventually we may want to stack the needed arguments
2786 * for each op. For now, we punt on the hard ones. */
2787 if (PL_op->op_type == OP_ENTERITER)
2788 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2789 PL_op->op_ppaddr(aTHX);
2797 if (!retop) retop = PL_main_start;
2799 PL_restartop = retop;
2800 PL_do_undump = TRUE;
2804 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2805 PL_do_undump = FALSE;
2822 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2824 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2827 PL_exit_flags |= PERL_EXIT_EXPECTED;
2829 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2830 if (anum || !(PL_minus_c && PL_madskills))
2835 PUSHs(&PL_sv_undef);
2842 S_save_lines(pTHX_ AV *array, SV *sv)
2844 const char *s = SvPVX_const(sv);
2845 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2848 PERL_ARGS_ASSERT_SAVE_LINES;
2850 while (s && s < send) {
2852 SV * const tmpstr = newSV_type(SVt_PVMG);
2854 t = (const char *)memchr(s, '\n', send - s);
2860 sv_setpvn(tmpstr, s, t - s);
2861 av_store(array, line++, tmpstr);
2869 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
2871 0 is used as continue inside eval,
2873 3 is used for a die caught by an inner eval - continue inner loop
2875 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
2876 establish a local jmpenv to handle exception traps.
2881 S_docatch(pTHX_ OP *o)
2885 OP * const oldop = PL_op;
2889 assert(CATCH_GET == TRUE);
2896 assert(cxstack_ix >= 0);
2897 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2898 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2903 /* die caught by an inner eval - continue inner loop */
2904 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
2905 PL_restartjmpenv = NULL;
2906 PL_op = PL_restartop;
2922 /* James Bond: Do you expect me to talk?
2923 Auric Goldfinger: No, Mr. Bond. I expect you to die.
2925 This code is an ugly hack, doesn't work with lexicals in subroutines that are
2926 called more than once, and is only used by regcomp.c, for (?{}) blocks.
2928 Currently it is not used outside the core code. Best if it stays that way.
2931 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2932 /* sv Text to convert to OP tree. */
2933 /* startop op_free() this to undo. */
2934 /* code Short string id of the caller. */
2936 dVAR; dSP; /* Make POPBLOCK work. */
2942 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2943 char *tmpbuf = tbuf;
2946 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2950 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2952 ENTER_with_name("eval");
2953 lex_start(sv, NULL, FALSE);
2955 /* switch to eval mode */
2957 if (IN_PERL_COMPILETIME) {
2958 SAVECOPSTASH_FREE(&PL_compiling);
2959 CopSTASH_set(&PL_compiling, PL_curstash);
2961 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2962 SV * const sv = sv_newmortal();
2963 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2964 code, (unsigned long)++PL_evalseq,
2965 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2970 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2971 (unsigned long)++PL_evalseq);
2972 SAVECOPFILE_FREE(&PL_compiling);
2973 CopFILE_set(&PL_compiling, tmpbuf+2);
2974 SAVECOPLINE(&PL_compiling);
2975 CopLINE_set(&PL_compiling, 1);
2976 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2977 deleting the eval's FILEGV from the stash before gv_check() runs
2978 (i.e. before run-time proper). To work around the coredump that
2979 ensues, we always turn GvMULTI_on for any globals that were
2980 introduced within evals. See force_ident(). GSAR 96-10-12 */
2981 safestr = savepvn(tmpbuf, len);
2982 SAVEDELETE(PL_defstash, safestr, len);
2984 #ifdef OP_IN_REGISTER
2990 /* we get here either during compilation, or via pp_regcomp at runtime */
2991 runtime = IN_PERL_RUNTIME;
2993 runcv = find_runcv(NULL);
2996 PL_op->op_type = OP_ENTEREVAL;
2997 PL_op->op_flags = 0; /* Avoid uninit warning. */
2998 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3000 need_catch = CATCH_GET;
3004 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3006 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3007 CATCH_SET(need_catch);
3008 POPBLOCK(cx,PL_curpm);
3011 (*startop)->op_type = OP_NULL;
3012 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3014 /* XXX DAPM do this properly one year */
3015 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3016 LEAVE_with_name("eval");
3017 if (IN_PERL_COMPILETIME)
3018 CopHINTS_set(&PL_compiling, PL_hints);
3019 #ifdef OP_IN_REGISTER
3022 PERL_UNUSED_VAR(newsp);
3023 PERL_UNUSED_VAR(optype);
3025 return PL_eval_start;
3030 =for apidoc find_runcv
3032 Locate the CV corresponding to the currently executing sub or eval.
3033 If db_seqp is non_null, skip CVs that are in the DB package and populate
3034 *db_seqp with the cop sequence number at the point that the DB:: code was
3035 entered. (allows debuggers to eval in the scope of the breakpoint rather
3036 than in the scope of the debugger itself).
3042 Perl_find_runcv(pTHX_ U32 *db_seqp)
3048 *db_seqp = PL_curcop->cop_seq;
3049 for (si = PL_curstackinfo; si; si = si->si_prev) {
3051 for (ix = si->si_cxix; ix >= 0; ix--) {
3052 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3053 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3054 CV * const cv = cx->blk_sub.cv;
3055 /* skip DB:: code */
3056 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3057 *db_seqp = cx->blk_oldcop->cop_seq;
3062 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3070 /* Run yyparse() in a setjmp wrapper. Returns:
3071 * 0: yyparse() successful
3072 * 1: yyparse() failed
3076 S_try_yyparse(pTHX_ int gramtype)
3081 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3085 ret = yyparse(gramtype) ? 1 : 0;
3099 /* Compile a require/do, an eval '', or a /(?{...})/.
3100 * In the last case, startop is non-null, and contains the address of
3101 * a pointer that should be set to the just-compiled code.
3102 * outside is the lexically enclosing CV (if any) that invoked us.
3103 * Returns a bool indicating whether the compile was successful; if so,
3104 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3105 * pushes undef (also croaks if startop != NULL).
3109 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3112 OP * const saveop = PL_op;
3113 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3116 PL_in_eval = (in_require
3117 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3122 SAVESPTR(PL_compcv);
3123 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3124 CvEVAL_on(PL_compcv);
3125 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3126 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3128 CvOUTSIDE_SEQ(PL_compcv) = seq;
3129 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3131 /* set up a scratch pad */
3133 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3134 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3138 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3140 /* make sure we compile in the right package */
3142 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3143 SAVESPTR(PL_curstash);
3144 PL_curstash = CopSTASH(PL_curcop);
3146 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3147 SAVESPTR(PL_beginav);
3148 PL_beginav = newAV();
3149 SAVEFREESV(PL_beginav);
3150 SAVESPTR(PL_unitcheckav);
3151 PL_unitcheckav = newAV();
3152 SAVEFREESV(PL_unitcheckav);
3155 SAVEBOOL(PL_madskills);
3159 /* try to compile it */
3161 PL_eval_root = NULL;
3162 PL_curcop = &PL_compiling;
3163 CopARYBASE_set(PL_curcop, 0);
3164 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3165 PL_in_eval |= EVAL_KEEPERR;
3169 CALL_BLOCK_HOOKS(eval, saveop);
3171 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3172 * so honour CATCH_GET and trap it here if necessary */
3174 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3176 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3177 SV **newsp; /* Used by POPBLOCK. */
3178 PERL_CONTEXT *cx = NULL;
3179 I32 optype; /* Used by POPEVAL. */
3183 PERL_UNUSED_VAR(newsp);
3184 PERL_UNUSED_VAR(optype);
3186 /* note that if yystatus == 3, then the EVAL CX block has already
3187 * been popped, and various vars restored */
3189 if (yystatus != 3) {
3191 op_free(PL_eval_root);
3192 PL_eval_root = NULL;
3194 SP = PL_stack_base + POPMARK; /* pop original mark */
3196 POPBLOCK(cx,PL_curpm);
3198 namesv = cx->blk_eval.old_namesv;
3203 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3205 msg = SvPVx_nolen_const(ERRSV);
3208 /* If cx is still NULL, it means that we didn't go in the
3209 * POPEVAL branch. */
3210 cx = &cxstack[cxstack_ix];
3211 assert(CxTYPE(cx) == CXt_EVAL);
3212 namesv = cx->blk_eval.old_namesv;
3214 (void)hv_store(GvHVn(PL_incgv),
3215 SvPVX_const(namesv), SvCUR(namesv),
3217 Perl_croak(aTHX_ "%sCompilation failed in require",
3218 *msg ? msg : "Unknown error\n");
3221 if (yystatus != 3) {
3222 POPBLOCK(cx,PL_curpm);
3225 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3226 (*msg ? msg : "Unknown error\n"));
3230 sv_setpvs(ERRSV, "Compilation error");
3233 PUSHs(&PL_sv_undef);
3237 CopLINE_set(&PL_compiling, 0);
3239 *startop = PL_eval_root;
3241 SAVEFREEOP(PL_eval_root);
3243 /* Set the context for this new optree.
3244 * Propagate the context from the eval(). */
3245 if ((gimme & G_WANT) == G_VOID)
3246 scalarvoid(PL_eval_root);
3247 else if ((gimme & G_WANT) == G_ARRAY)
3250 scalar(PL_eval_root);
3252 DEBUG_x(dump_eval());
3254 /* Register with debugger: */
3255 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3256 CV * const cv = get_cvs("DB::postponed", 0);
3260 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3262 call_sv(MUTABLE_SV(cv), G_DISCARD);
3266 if (PL_unitcheckav) {
3267 OP *es = PL_eval_start;
3268 call_list(PL_scopestack_ix, PL_unitcheckav);
3272 /* compiled okay, so do it */
3274 CvDEPTH(PL_compcv) = 1;
3275 SP = PL_stack_base + POPMARK; /* pop original mark */
3276 PL_op = saveop; /* The caller may need it. */
3277 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3284 S_check_type_and_open(pTHX_ const char *name)
3287 const int st_rc = PerlLIO_stat(name, &st);
3289 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3291 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3295 return PerlIO_open(name, PERL_SCRIPT_MODE);
3298 #ifndef PERL_DISABLE_PMC
3300 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3304 PERL_ARGS_ASSERT_DOOPEN_PM;
3306 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3307 SV *const pmcsv = newSV(namelen + 2);
3308 char *const pmc = SvPVX(pmcsv);
3311 memcpy(pmc, name, namelen);
3313 pmc[namelen + 1] = '\0';
3315 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3316 fp = check_type_and_open(name);
3319 fp = check_type_and_open(pmc);
3321 SvREFCNT_dec(pmcsv);
3324 fp = check_type_and_open(name);
3329 # define doopen_pm(name, namelen) check_type_and_open(name)
3330 #endif /* !PERL_DISABLE_PMC */
3335 register PERL_CONTEXT *cx;
3342 int vms_unixname = 0;
3344 const char *tryname = NULL;
3346 const I32 gimme = GIMME_V;
3347 int filter_has_file = 0;
3348 PerlIO *tryrsfp = NULL;
3349 SV *filter_cache = NULL;
3350 SV *filter_state = NULL;
3351 SV *filter_sub = NULL;
3357 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3358 sv = new_version(sv);
3359 if (!sv_derived_from(PL_patchlevel, "version"))
3360 upg_version(PL_patchlevel, TRUE);
3361 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3362 if ( vcmp(sv,PL_patchlevel) <= 0 )
3363 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3364 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3367 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3370 SV * const req = SvRV(sv);
3371 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3373 /* get the left hand term */
3374 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3376 first = SvIV(*av_fetch(lav,0,0));
3377 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3378 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3379 || av_len(lav) > 1 /* FP with > 3 digits */
3380 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3382 DIE(aTHX_ "Perl %"SVf" required--this is only "
3383 "%"SVf", stopped", SVfARG(vnormal(req)),
3384 SVfARG(vnormal(PL_patchlevel)));
3386 else { /* probably 'use 5.10' or 'use 5.8' */
3391 second = SvIV(*av_fetch(lav,1,0));
3393 second /= second >= 600 ? 100 : 10;
3394 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3395 (int)first, (int)second);
3396 upg_version(hintsv, TRUE);
3398 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3399 "--this is only %"SVf", stopped",
3400 SVfARG(vnormal(req)),
3401 SVfARG(vnormal(sv_2mortal(hintsv))),
3402 SVfARG(vnormal(PL_patchlevel)));
3407 /* We do this only with "use", not "require" or "no". */
3408 if (PL_compcv && !(cUNOP->op_first->op_private & OPpCONST_NOVER)) {
3409 /* If we request a version >= 5.9.5, load feature.pm with the
3410 * feature bundle that corresponds to the required version. */
3411 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3412 SV *const importsv = vnormal(sv);
3413 *SvPVX_mutable(importsv) = ':';
3414 ENTER_with_name("load_feature");
3415 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3416 LEAVE_with_name("load_feature");
3418 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3419 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3420 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
3426 name = SvPV_const(sv, len);
3427 if (!(name && len > 0 && *name))
3428 DIE(aTHX_ "Null filename used");
3429 TAINT_PROPER("require");
3433 /* The key in the %ENV hash is in the syntax of file passed as the argument
3434 * usually this is in UNIX format, but sometimes in VMS format, which
3435 * can result in a module being pulled in more than once.
3436 * To prevent this, the key must be stored in UNIX format if the VMS
3437 * name can be translated to UNIX.
3439 if ((unixname = tounixspec(name, NULL)) != NULL) {
3440 unixlen = strlen(unixname);
3446 /* if not VMS or VMS name can not be translated to UNIX, pass it
3449 unixname = (char *) name;
3452 if (PL_op->op_type == OP_REQUIRE) {
3453 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3454 unixname, unixlen, 0);
3456 if (*svp != &PL_sv_undef)
3459 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3460 "Compilation failed in require", unixname);
3464 /* prepare to compile file */
3466 if (path_is_absolute(name)) {
3468 tryrsfp = doopen_pm(name, len);
3471 AV * const ar = GvAVn(PL_incgv);
3477 namesv = newSV_type(SVt_PV);
3478 for (i = 0; i <= AvFILL(ar); i++) {
3479 SV * const dirsv = *av_fetch(ar, i, TRUE);
3481 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3488 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3489 && !sv_isobject(loader))
3491 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3494 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3495 PTR2UV(SvRV(dirsv)), name);
3496 tryname = SvPVX_const(namesv);
3499 ENTER_with_name("call_INC");
3507 if (sv_isobject(loader))
3508 count = call_method("INC", G_ARRAY);
3510 count = call_sv(loader, G_ARRAY);
3520 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3521 && !isGV_with_GP(SvRV(arg))) {
3522 filter_cache = SvRV(arg);
3523 SvREFCNT_inc_simple_void_NN(filter_cache);
3530 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3534 if (isGV_with_GP(arg)) {
3535 IO * const io = GvIO((const GV *)arg);
3540 tryrsfp = IoIFP(io);
3541 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3542 PerlIO_close(IoOFP(io));
3553 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3555 SvREFCNT_inc_simple_void_NN(filter_sub);
3558 filter_state = SP[i];
3559 SvREFCNT_inc_simple_void(filter_state);
3563 if (!tryrsfp && (filter_cache || filter_sub)) {
3564 tryrsfp = PerlIO_open(BIT_BUCKET,
3572 LEAVE_with_name("call_INC");
3574 /* Adjust file name if the hook has set an %INC entry.
3575 This needs to happen after the FREETMPS above. */
3576 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3578 tryname = SvPV_nolen_const(*svp);
3585 filter_has_file = 0;
3587 SvREFCNT_dec(filter_cache);
3588 filter_cache = NULL;
3591 SvREFCNT_dec(filter_state);
3592 filter_state = NULL;
3595 SvREFCNT_dec(filter_sub);
3600 if (!path_is_absolute(name)
3606 dir = SvPV_const(dirsv, dirlen);
3614 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3616 sv_setpv(namesv, unixdir);
3617 sv_catpv(namesv, unixname);
3619 # ifdef __SYMBIAN32__
3620 if (PL_origfilename[0] &&
3621 PL_origfilename[1] == ':' &&
3622 !(dir[0] && dir[1] == ':'))
3623 Perl_sv_setpvf(aTHX_ namesv,
3628 Perl_sv_setpvf(aTHX_ namesv,
3632 /* The equivalent of
3633 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3634 but without the need to parse the format string, or
3635 call strlen on either pointer, and with the correct
3636 allocation up front. */
3638 char *tmp = SvGROW(namesv, dirlen + len + 2);
3640 memcpy(tmp, dir, dirlen);
3643 /* name came from an SV, so it will have a '\0' at the
3644 end that we can copy as part of this memcpy(). */
3645 memcpy(tmp, name, len + 1);
3647 SvCUR_set(namesv, dirlen + len + 1);
3649 /* Don't even actually have to turn SvPOK_on() as we
3650 access it directly with SvPVX() below. */
3654 TAINT_PROPER("require");
3655 tryname = SvPVX_const(namesv);
3656 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3658 if (tryname[0] == '.' && tryname[1] == '/') {
3660 while (*++tryname == '/');
3664 else if (errno == EMFILE)
3665 /* no point in trying other paths if out of handles */
3673 SAVECOPFILE_FREE(&PL_compiling);
3674 CopFILE_set(&PL_compiling, tryname);
3676 SvREFCNT_dec(namesv);
3678 if (PL_op->op_type == OP_REQUIRE) {
3679 if(errno == EMFILE) {
3680 /* diag_listed_as: Can't locate %s */
3681 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
3683 if (namesv) { /* did we lookup @INC? */
3684 AV * const ar = GvAVn(PL_incgv);
3686 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3687 for (i = 0; i <= AvFILL(ar); i++) {
3688 sv_catpvs(inc, " ");
3689 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3692 /* diag_listed_as: Can't locate %s */
3694 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3696 (memEQ(name + len - 2, ".h", 3)
3697 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3698 (memEQ(name + len - 3, ".ph", 4)
3699 ? " (did you run h2ph?)" : ""),
3704 DIE(aTHX_ "Can't locate %s", name);
3710 SETERRNO(0, SS_NORMAL);
3712 /* Assume success here to prevent recursive requirement. */
3713 /* name is never assigned to again, so len is still strlen(name) */
3714 /* Check whether a hook in @INC has already filled %INC */
3716 (void)hv_store(GvHVn(PL_incgv),
3717 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3719 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3721 (void)hv_store(GvHVn(PL_incgv),
3722 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3725 ENTER_with_name("eval");
3727 lex_start(NULL, tryrsfp, TRUE);
3731 hv_clear(GvHV(PL_hintgv));
3733 SAVECOMPILEWARNINGS();
3734 if (PL_dowarn & G_WARN_ALL_ON)
3735 PL_compiling.cop_warnings = pWARN_ALL ;
3736 else if (PL_dowarn & G_WARN_ALL_OFF)
3737 PL_compiling.cop_warnings = pWARN_NONE ;
3739 PL_compiling.cop_warnings = pWARN_STD ;
3741 if (filter_sub || filter_cache) {
3742 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3743 than hanging another SV from it. In turn, filter_add() optionally
3744 takes the SV to use as the filter (or creates a new SV if passed
3745 NULL), so simply pass in whatever value filter_cache has. */
3746 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3747 IoLINES(datasv) = filter_has_file;
3748 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3749 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3752 /* switch to eval mode */
3753 PUSHBLOCK(cx, CXt_EVAL, SP);
3755 cx->blk_eval.retop = PL_op->op_next;
3757 SAVECOPLINE(&PL_compiling);
3758 CopLINE_set(&PL_compiling, 0);
3762 /* Store and reset encoding. */
3763 encoding = PL_encoding;
3766 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3767 op = DOCATCH(PL_eval_start);
3769 op = PL_op->op_next;
3771 /* Restore encoding. */
3772 PL_encoding = encoding;
3777 /* This is a op added to hold the hints hash for
3778 pp_entereval. The hash can be modified by the code
3779 being eval'ed, so we return a copy instead. */
3785 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
3793 register PERL_CONTEXT *cx;
3795 const I32 gimme = GIMME_V;
3796 const U32 was = PL_breakable_sub_gen;
3797 char tbuf[TYPE_DIGITS(long) + 12];
3798 char *tmpbuf = tbuf;
3802 HV *saved_hh = NULL;
3804 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3805 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3809 /* make sure we've got a plain PV (no overload etc) before testing
3810 * for taint. Making a copy here is probably overkill, but better
3811 * safe than sorry */
3813 const char * const p = SvPV_const(sv, len);
3815 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
3818 TAINT_IF(SvTAINTED(sv));
3819 TAINT_PROPER("eval");
3821 ENTER_with_name("eval");
3822 lex_start(sv, NULL, FALSE);
3825 /* switch to eval mode */
3827 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3828 SV * const temp_sv = sv_newmortal();
3829 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3830 (unsigned long)++PL_evalseq,
3831 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3832 tmpbuf = SvPVX(temp_sv);
3833 len = SvCUR(temp_sv);
3836 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3837 SAVECOPFILE_FREE(&PL_compiling);
3838 CopFILE_set(&PL_compiling, tmpbuf+2);
3839 SAVECOPLINE(&PL_compiling);
3840 CopLINE_set(&PL_compiling, 1);
3841 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3842 deleting the eval's FILEGV from the stash before gv_check() runs
3843 (i.e. before run-time proper). To work around the coredump that
3844 ensues, we always turn GvMULTI_on for any globals that were
3845 introduced within evals. See force_ident(). GSAR 96-10-12 */
3847 PL_hints = PL_op->op_targ;
3849 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3850 SvREFCNT_dec(GvHV(PL_hintgv));
3851 GvHV(PL_hintgv) = saved_hh;
3853 SAVECOMPILEWARNINGS();
3854 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3855 if (PL_compiling.cop_hints_hash) {
3856 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3858 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
3859 /* The label, if present, is the first entry on the chain. So rather
3860 than writing a blank label in front of it (which involves an
3861 allocation), just use the next entry in the chain. */
3862 PL_compiling.cop_hints_hash
3863 = PL_curcop->cop_hints_hash->refcounted_he_next;
3864 /* Check the assumption that this removed the label. */
3865 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3868 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3869 if (PL_compiling.cop_hints_hash) {
3871 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3872 HINTS_REFCNT_UNLOCK;
3874 /* special case: an eval '' executed within the DB package gets lexically
3875 * placed in the first non-DB CV rather than the current CV - this
3876 * allows the debugger to execute code, find lexicals etc, in the
3877 * scope of the code being debugged. Passing &seq gets find_runcv
3878 * to do the dirty work for us */
3879 runcv = find_runcv(&seq);
3881 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3883 cx->blk_eval.retop = PL_op->op_next;
3885 /* prepare to compile string */
3887 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3888 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3891 if (doeval(gimme, NULL, runcv, seq)) {
3892 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3893 ? (PERLDB_LINE || PERLDB_SAVESRC)
3894 : PERLDB_SAVESRC_NOSUBS) {
3895 /* Retain the filegv we created. */
3897 char *const safestr = savepvn(tmpbuf, len);
3898 SAVEDELETE(PL_defstash, safestr, len);
3900 return DOCATCH(PL_eval_start);
3902 /* We have already left the scope set up earler thanks to the LEAVE
3904 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3905 ? (PERLDB_LINE || PERLDB_SAVESRC)
3906 : PERLDB_SAVESRC_INVALID) {
3907 /* Retain the filegv we created. */
3909 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3911 return PL_op->op_next;
3922 register PERL_CONTEXT *cx;
3924 const U8 save_flags = PL_op -> op_flags;
3930 namesv = cx->blk_eval.old_namesv;
3931 retop = cx->blk_eval.retop;
3934 if (gimme == G_VOID)
3936 else if (gimme == G_SCALAR) {
3939 if (SvFLAGS(TOPs) & SVs_TEMP)
3942 *MARK = sv_mortalcopy(TOPs);
3946 *MARK = &PL_sv_undef;
3951 /* in case LEAVE wipes old return values */
3952 for (mark = newsp + 1; mark <= SP; mark++) {
3953 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3954 *mark = sv_mortalcopy(*mark);
3955 TAINT_NOT; /* Each item is independent */
3959 PL_curpm = newpm; /* Don't pop $1 et al till now */
3962 assert(CvDEPTH(PL_compcv) == 1);
3964 CvDEPTH(PL_compcv) = 0;
3967 if (optype == OP_REQUIRE &&
3968 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3970 /* Unassume the success we assumed earlier. */
3971 (void)hv_delete(GvHVn(PL_incgv),
3972 SvPVX_const(namesv), SvCUR(namesv),
3974 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
3976 /* die_unwind() did LEAVE, or we won't be here */
3979 LEAVE_with_name("eval");
3980 if (!(save_flags & OPf_SPECIAL)) {
3988 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3989 close to the related Perl_create_eval_scope. */
3991 Perl_delete_eval_scope(pTHX)
3996 register PERL_CONTEXT *cx;
4002 LEAVE_with_name("eval_scope");
4003 PERL_UNUSED_VAR(newsp);
4004 PERL_UNUSED_VAR(gimme);
4005 PERL_UNUSED_VAR(optype);
4008 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4009 also needed by Perl_fold_constants. */
4011 Perl_create_eval_scope(pTHX_ U32 flags)
4014 const I32 gimme = GIMME_V;
4016 ENTER_with_name("eval_scope");
4019 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4022 PL_in_eval = EVAL_INEVAL;
4023 if (flags & G_KEEPERR)
4024 PL_in_eval |= EVAL_KEEPERR;
4027 if (flags & G_FAKINGEVAL) {
4028 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4036 PERL_CONTEXT * const cx = create_eval_scope(0);
4037 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4038 return DOCATCH(PL_op->op_next);
4047 register PERL_CONTEXT *cx;
4052 PERL_UNUSED_VAR(optype);
4055 if (gimme == G_VOID)
4057 else if (gimme == G_SCALAR) {
4061 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4064 *MARK = sv_mortalcopy(TOPs);
4068 *MARK = &PL_sv_undef;
4073 /* in case LEAVE wipes old return values */
4075 for (mark = newsp + 1; mark <= SP; mark++) {
4076 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4077 *mark = sv_mortalcopy(*mark);
4078 TAINT_NOT; /* Each item is independent */
4082 PL_curpm = newpm; /* Don't pop $1 et al till now */
4084 LEAVE_with_name("eval_scope");
4092 register PERL_CONTEXT *cx;
4093 const I32 gimme = GIMME_V;
4095 ENTER_with_name("given");
4098 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
4100 PUSHBLOCK(cx, CXt_GIVEN, SP);
4109 register PERL_CONTEXT *cx;
4113 PERL_UNUSED_CONTEXT;
4116 assert(CxTYPE(cx) == CXt_GIVEN);
4119 if (gimme == G_VOID)
4121 else if (gimme == G_SCALAR) {
4125 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4128 *MARK = sv_mortalcopy(TOPs);
4132 *MARK = &PL_sv_undef;
4137 /* in case LEAVE wipes old return values */
4139 for (mark = newsp + 1; mark <= SP; mark++) {
4140 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4141 *mark = sv_mortalcopy(*mark);
4142 TAINT_NOT; /* Each item is independent */
4146 PL_curpm = newpm; /* Don't pop $1 et al till now */
4148 LEAVE_with_name("given");
4152 /* Helper routines used by pp_smartmatch */
4154 S_make_matcher(pTHX_ REGEXP *re)
4157 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4159 PERL_ARGS_ASSERT_MAKE_MATCHER;
4161 PM_SETRE(matcher, ReREFCNT_inc(re));
4163 SAVEFREEOP((OP *) matcher);
4164 ENTER_with_name("matcher"); SAVETMPS;
4170 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4175 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4177 PL_op = (OP *) matcher;
4182 return (SvTRUEx(POPs));
4186 S_destroy_matcher(pTHX_ PMOP *matcher)
4190 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4191 PERL_UNUSED_ARG(matcher);
4194 LEAVE_with_name("matcher");
4197 /* Do a smart match */
4200 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4201 return do_smartmatch(NULL, NULL);
4204 /* This version of do_smartmatch() implements the
4205 * table of smart matches that is found in perlsyn.
4208 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4213 bool object_on_left = FALSE;
4214 SV *e = TOPs; /* e is for 'expression' */
4215 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4217 /* Take care only to invoke mg_get() once for each argument.
4218 * Currently we do this by copying the SV if it's magical. */
4221 d = sv_mortalcopy(d);
4228 e = sv_mortalcopy(e);
4230 /* First of all, handle overload magic of the rightmost argument */
4233 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4234 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4236 tmpsv = amagic_call(d, e, smart_amg, 0);
4243 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4246 SP -= 2; /* Pop the values */
4251 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4258 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4259 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4260 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4262 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4263 object_on_left = TRUE;
4266 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4268 if (object_on_left) {
4269 goto sm_any_sub; /* Treat objects like scalars */
4271 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4272 /* Test sub truth for each key */
4274 bool andedresults = TRUE;
4275 HV *hv = (HV*) SvRV(d);
4276 I32 numkeys = hv_iterinit(hv);
4277 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4280 while ( (he = hv_iternext(hv)) ) {
4281 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4282 ENTER_with_name("smartmatch_hash_key_test");
4285 PUSHs(hv_iterkeysv(he));
4287 c = call_sv(e, G_SCALAR);
4290 andedresults = FALSE;
4292 andedresults = SvTRUEx(POPs) && andedresults;
4294 LEAVE_with_name("smartmatch_hash_key_test");
4301 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4302 /* Test sub truth for each element */
4304 bool andedresults = TRUE;
4305 AV *av = (AV*) SvRV(d);
4306 const I32 len = av_len(av);
4307 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4310 for (i = 0; i <= len; ++i) {
4311 SV * const * const svp = av_fetch(av, i, FALSE);
4312 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4313 ENTER_with_name("smartmatch_array_elem_test");
4319 c = call_sv(e, G_SCALAR);
4322 andedresults = FALSE;
4324 andedresults = SvTRUEx(POPs) && andedresults;
4326 LEAVE_with_name("smartmatch_array_elem_test");
4335 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4336 ENTER_with_name("smartmatch_coderef");
4341 c = call_sv(e, G_SCALAR);
4345 else if (SvTEMP(TOPs))
4346 SvREFCNT_inc_void(TOPs);
4348 LEAVE_with_name("smartmatch_coderef");
4353 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4354 if (object_on_left) {
4355 goto sm_any_hash; /* Treat objects like scalars */
4357 else if (!SvOK(d)) {
4358 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4361 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4362 /* Check that the key-sets are identical */
4364 HV *other_hv = MUTABLE_HV(SvRV(d));
4366 bool other_tied = FALSE;
4367 U32 this_key_count = 0,
4368 other_key_count = 0;
4369 HV *hv = MUTABLE_HV(SvRV(e));
4371 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4372 /* Tied hashes don't know how many keys they have. */
4373 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4376 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4377 HV * const temp = other_hv;
4382 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4385 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4388 /* The hashes have the same number of keys, so it suffices
4389 to check that one is a subset of the other. */
4390 (void) hv_iterinit(hv);
4391 while ( (he = hv_iternext(hv)) ) {
4392 SV *key = hv_iterkeysv(he);
4394 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4397 if(!hv_exists_ent(other_hv, key, 0)) {
4398 (void) hv_iterinit(hv); /* reset iterator */
4404 (void) hv_iterinit(other_hv);
4405 while ( hv_iternext(other_hv) )
4409 other_key_count = HvUSEDKEYS(other_hv);
4411 if (this_key_count != other_key_count)
4416 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4417 AV * const other_av = MUTABLE_AV(SvRV(d));
4418 const I32 other_len = av_len(other_av) + 1;
4420 HV *hv = MUTABLE_HV(SvRV(e));
4422 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4423 for (i = 0; i < other_len; ++i) {
4424 SV ** const svp = av_fetch(other_av, i, FALSE);
4425 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4426 if (svp) { /* ??? When can this not happen? */
4427 if (hv_exists_ent(hv, *svp, 0))
4433 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4434 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4437 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4439 HV *hv = MUTABLE_HV(SvRV(e));
4441 (void) hv_iterinit(hv);
4442 while ( (he = hv_iternext(hv)) ) {
4443 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4444 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4445 (void) hv_iterinit(hv);
4446 destroy_matcher(matcher);
4450 destroy_matcher(matcher);
4456 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4457 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4464 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4465 if (object_on_left) {
4466 goto sm_any_array; /* Treat objects like scalars */
4468 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4469 AV * const other_av = MUTABLE_AV(SvRV(e));
4470 const I32 other_len = av_len(other_av) + 1;
4473 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4474 for (i = 0; i < other_len; ++i) {
4475 SV ** const svp = av_fetch(other_av, i, FALSE);
4477 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4478 if (svp) { /* ??? When can this not happen? */
4479 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4485 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4486 AV *other_av = MUTABLE_AV(SvRV(d));
4487 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4488 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4492 const I32 other_len = av_len(other_av);
4494 if (NULL == seen_this) {