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(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));
223 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
225 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
227 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
228 inside tie/overload accessors. */
234 #ifndef INCOMPLETE_TAINTS
237 RX_EXTFLAGS(re) |= RXf_TAINTED;
239 RX_EXTFLAGS(re) &= ~RXf_TAINTED;
243 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
247 #if !defined(USE_ITHREADS)
248 /* can't change the optree at runtime either */
249 /* PMf_KEEP is handled differently under threads to avoid these problems */
250 if (pm->op_pmflags & PMf_KEEP) {
251 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
252 cLOGOP->op_first->op_next = PL_op->op_next;
262 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
263 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
264 register SV * const dstr = cx->sb_dstr;
265 register char *s = cx->sb_s;
266 register char *m = cx->sb_m;
267 char *orig = cx->sb_orig;
268 register REGEXP * const rx = cx->sb_rx;
270 REGEXP *old = PM_GETRE(pm);
277 PM_SETRE(pm,ReREFCNT_inc(rx));
280 rxres_restore(&cx->sb_rxres, rx);
281 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
283 if (cx->sb_iters++) {
284 const I32 saviters = cx->sb_iters;
285 if (cx->sb_iters > cx->sb_maxiters)
286 DIE(aTHX_ "Substitution loop");
288 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
290 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
291 cx->sb_rxtainted |= 2;
292 sv_catsv_nomg(dstr, POPs);
293 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
297 if (CxONCE(cx) || s < orig ||
298 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
299 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
300 ((cx->sb_rflags & REXEC_COPY_STR)
301 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
302 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
304 SV * const targ = cx->sb_targ;
306 assert(cx->sb_strend >= s);
307 if(cx->sb_strend > s) {
308 if (DO_UTF8(dstr) && !SvUTF8(targ))
309 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
311 sv_catpvn(dstr, s, cx->sb_strend - s);
313 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
315 #ifdef PERL_OLD_COPY_ON_WRITE
317 sv_force_normal_flags(targ, SV_COW_DROP_PV);
323 SvPV_set(targ, SvPVX(dstr));
324 SvCUR_set(targ, SvCUR(dstr));
325 SvLEN_set(targ, SvLEN(dstr));
328 SvPV_set(dstr, NULL);
330 TAINT_IF(cx->sb_rxtainted & 1);
331 if (pm->op_pmflags & PMf_NONDESTRUCT)
334 mPUSHi(saviters - 1);
336 (void)SvPOK_only_UTF8(targ);
337 TAINT_IF(cx->sb_rxtainted);
341 LEAVE_SCOPE(cx->sb_oldsave);
343 RETURNOP(pm->op_next);
345 cx->sb_iters = saviters;
347 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
350 cx->sb_orig = orig = RX_SUBBEG(rx);
352 cx->sb_strend = s + (cx->sb_strend - m);
354 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
356 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
357 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
359 sv_catpvn(dstr, s, m-s);
361 cx->sb_s = RX_OFFS(rx)[0].end + orig;
362 { /* Update the pos() information. */
363 SV * const sv = cx->sb_targ;
365 SvUPGRADE(sv, SVt_PVMG);
366 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
367 #ifdef PERL_OLD_COPY_ON_WRITE
369 sv_force_normal_flags(sv, 0);
371 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
374 mg->mg_len = m - orig;
377 (void)ReREFCNT_inc(rx);
378 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
379 rxres_save(&cx->sb_rxres, rx);
380 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
384 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
389 PERL_ARGS_ASSERT_RXRES_SAVE;
392 if (!p || p[1] < RX_NPARENS(rx)) {
393 #ifdef PERL_OLD_COPY_ON_WRITE
394 i = 7 + RX_NPARENS(rx) * 2;
396 i = 6 + RX_NPARENS(rx) * 2;
405 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
406 RX_MATCH_COPIED_off(rx);
408 #ifdef PERL_OLD_COPY_ON_WRITE
409 *p++ = PTR2UV(RX_SAVED_COPY(rx));
410 RX_SAVED_COPY(rx) = NULL;
413 *p++ = RX_NPARENS(rx);
415 *p++ = PTR2UV(RX_SUBBEG(rx));
416 *p++ = (UV)RX_SUBLEN(rx);
417 for (i = 0; i <= RX_NPARENS(rx); ++i) {
418 *p++ = (UV)RX_OFFS(rx)[i].start;
419 *p++ = (UV)RX_OFFS(rx)[i].end;
424 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
429 PERL_ARGS_ASSERT_RXRES_RESTORE;
432 RX_MATCH_COPY_FREE(rx);
433 RX_MATCH_COPIED_set(rx, *p);
436 #ifdef PERL_OLD_COPY_ON_WRITE
437 if (RX_SAVED_COPY(rx))
438 SvREFCNT_dec (RX_SAVED_COPY(rx));
439 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
443 RX_NPARENS(rx) = *p++;
445 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
446 RX_SUBLEN(rx) = (I32)(*p++);
447 for (i = 0; i <= RX_NPARENS(rx); ++i) {
448 RX_OFFS(rx)[i].start = (I32)(*p++);
449 RX_OFFS(rx)[i].end = (I32)(*p++);
454 S_rxres_free(pTHX_ void **rsp)
456 UV * const p = (UV*)*rsp;
458 PERL_ARGS_ASSERT_RXRES_FREE;
463 void *tmp = INT2PTR(char*,*p);
466 PoisonFree(*p, 1, sizeof(*p));
468 Safefree(INT2PTR(char*,*p));
470 #ifdef PERL_OLD_COPY_ON_WRITE
472 SvREFCNT_dec (INT2PTR(SV*,p[1]));
482 dVAR; dSP; dMARK; dORIGMARK;
483 register SV * const tmpForm = *++MARK;
488 register SV *sv = NULL;
489 const char *item = NULL;
493 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
494 const char *chophere = NULL;
495 char *linemark = NULL;
497 bool gotsome = FALSE;
499 const STRLEN fudge = SvPOK(tmpForm)
500 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
501 bool item_is_utf8 = FALSE;
502 bool targ_is_utf8 = FALSE;
504 OP * parseres = NULL;
507 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
508 if (SvREADONLY(tmpForm)) {
509 SvREADONLY_off(tmpForm);
510 parseres = doparseform(tmpForm);
511 SvREADONLY_on(tmpForm);
514 parseres = doparseform(tmpForm);
518 SvPV_force(PL_formtarget, len);
519 if (DO_UTF8(PL_formtarget))
521 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
523 f = SvPV_const(tmpForm, len);
524 /* need to jump to the next word */
525 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
529 const char *name = "???";
532 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
533 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
534 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
535 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
536 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
538 case FF_CHECKNL: name = "CHECKNL"; break;
539 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
540 case FF_SPACE: name = "SPACE"; break;
541 case FF_HALFSPACE: name = "HALFSPACE"; break;
542 case FF_ITEM: name = "ITEM"; break;
543 case FF_CHOP: name = "CHOP"; break;
544 case FF_LINEGLOB: name = "LINEGLOB"; break;
545 case FF_NEWLINE: name = "NEWLINE"; break;
546 case FF_MORE: name = "MORE"; break;
547 case FF_LINEMARK: name = "LINEMARK"; break;
548 case FF_END: name = "END"; break;
549 case FF_0DECIMAL: name = "0DECIMAL"; break;
550 case FF_LINESNGL: name = "LINESNGL"; break;
553 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
555 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
566 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
567 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
569 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
570 t = SvEND(PL_formtarget);
574 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
575 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
577 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC, fudge + 1);
578 t = SvEND(PL_formtarget);
598 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
605 const char *s = item = SvPV_const(sv, len);
608 itemsize = sv_len_utf8(sv);
609 if (itemsize != (I32)len) {
611 if (itemsize > fieldsize) {
612 itemsize = fieldsize;
613 itembytes = itemsize;
614 sv_pos_u2b(sv, &itembytes, 0);
618 send = chophere = s + itembytes;
628 sv_pos_b2u(sv, &itemsize);
632 item_is_utf8 = FALSE;
633 if (itemsize > fieldsize)
634 itemsize = fieldsize;
635 send = chophere = s + itemsize;
649 const char *s = item = SvPV_const(sv, len);
652 itemsize = sv_len_utf8(sv);
653 if (itemsize != (I32)len) {
655 if (itemsize <= fieldsize) {
656 const char *send = chophere = s + itemsize;
669 itemsize = fieldsize;
670 itembytes = itemsize;
671 sv_pos_u2b(sv, &itembytes, 0);
672 send = chophere = s + itembytes;
673 while (s < send || (s == send && isSPACE(*s))) {
683 if (strchr(PL_chopset, *s))
688 itemsize = chophere - item;
689 sv_pos_b2u(sv, &itemsize);
695 item_is_utf8 = FALSE;
696 if (itemsize <= fieldsize) {
697 const char *const send = chophere = s + itemsize;
710 itemsize = fieldsize;
711 send = chophere = s + itemsize;
712 while (s < send || (s == send && isSPACE(*s))) {
722 if (strchr(PL_chopset, *s))
727 itemsize = chophere - item;
733 arg = fieldsize - itemsize;
742 arg = fieldsize - itemsize;
753 const char *s = item;
757 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
759 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC,
761 t = SvEND(PL_formtarget);
765 if (UTF8_IS_CONTINUED(*s)) {
766 STRLEN skip = UTF8SKIP(s);
783 if ( !((*t++ = *s++) & ~31) )
789 if (targ_is_utf8 && !item_is_utf8) {
790 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
792 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
793 for (; t < SvEND(PL_formtarget); t++) {
806 const int ch = *t++ = *s++;
809 if ( !((*t++ = *s++) & ~31) )
818 const char *s = chophere;
832 const bool oneline = fpc[-1] == FF_LINESNGL;
833 const char *s = item = SvPV_const(sv, len);
834 item_is_utf8 = DO_UTF8(sv);
837 STRLEN to_copy = itemsize;
838 const char *const send = s + len;
839 const U8 *source = (const U8 *) s;
843 chophere = s + itemsize;
847 to_copy = s - SvPVX_const(sv) - 1;
859 if (targ_is_utf8 && !item_is_utf8) {
860 source = tmp = bytes_to_utf8(source, &to_copy);
861 SvCUR_set(PL_formtarget,
862 t - SvPVX_const(PL_formtarget));
864 if (item_is_utf8 && !targ_is_utf8) {
865 /* Upgrade targ to UTF8, and then we reduce it to
866 a problem we have a simple solution for. */
867 SvCUR_set(PL_formtarget,
868 t - SvPVX_const(PL_formtarget));
870 /* Don't need get magic. */
871 sv_utf8_upgrade_nomg(PL_formtarget);
873 SvCUR_set(PL_formtarget,
874 t - SvPVX_const(PL_formtarget));
877 /* Easy. They agree. */
878 assert (item_is_utf8 == targ_is_utf8);
880 SvGROW(PL_formtarget,
881 SvCUR(PL_formtarget) + to_copy + fudge + 1);
882 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
884 Copy(source, t, to_copy, char);
886 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
888 if (SvGMAGICAL(sv)) {
889 /* Mustn't call sv_pos_b2u() as it does a second
890 mg_get(). Is this a bug? Do we need a _flags()
892 itemsize = utf8_length(source, source + itemsize);
894 sv_pos_b2u(sv, &itemsize);
906 #if defined(USE_LONG_DOUBLE)
909 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
913 "%#0*.*f" : "%0*.*f");
918 #if defined(USE_LONG_DOUBLE)
920 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
923 ((arg & 256) ? "%#*.*f" : "%*.*f");
926 /* If the field is marked with ^ and the value is undefined,
928 if ((arg & 512) && !SvOK(sv)) {
936 /* overflow evidence */
937 if (num_overflow(value, fieldsize, arg)) {
943 /* Formats aren't yet marked for locales, so assume "yes". */
945 STORE_NUMERIC_STANDARD_SET_LOCAL();
946 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
947 RESTORE_NUMERIC_STANDARD();
954 while (t-- > linemark && *t == ' ') ;
962 if (arg) { /* repeat until fields exhausted? */
964 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
965 lines += FmLINES(PL_formtarget);
967 SvUTF8_on(PL_formtarget);
968 FmLINES(PL_formtarget) = lines;
970 RETURNOP(cLISTOP->op_first);
981 const char *s = chophere;
982 const char *send = item + len;
984 while (isSPACE(*s) && (s < send))
989 arg = fieldsize - itemsize;
996 if (strnEQ(s1," ",3)) {
997 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1008 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1010 SvUTF8_on(PL_formtarget);
1011 FmLINES(PL_formtarget) += lines;
1023 if (PL_stack_base + *PL_markstack_ptr == SP) {
1025 if (GIMME_V == G_SCALAR)
1027 RETURNOP(PL_op->op_next->op_next);
1029 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1030 pp_pushmark(); /* push dst */
1031 pp_pushmark(); /* push src */
1032 ENTER_with_name("grep"); /* enter outer scope */
1035 if (PL_op->op_private & OPpGREP_LEX)
1036 SAVESPTR(PAD_SVl(PL_op->op_targ));
1039 ENTER_with_name("grep_item"); /* enter inner scope */
1042 src = PL_stack_base[*PL_markstack_ptr];
1044 if (PL_op->op_private & OPpGREP_LEX)
1045 PAD_SVl(PL_op->op_targ) = src;
1050 if (PL_op->op_type == OP_MAPSTART)
1051 pp_pushmark(); /* push top */
1052 return ((LOGOP*)PL_op->op_next)->op_other;
1058 const I32 gimme = GIMME_V;
1059 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1065 /* first, move source pointer to the next item in the source list */
1066 ++PL_markstack_ptr[-1];
1068 /* if there are new items, push them into the destination list */
1069 if (items && gimme != G_VOID) {
1070 /* might need to make room back there first */
1071 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1072 /* XXX this implementation is very pessimal because the stack
1073 * is repeatedly extended for every set of items. Is possible
1074 * to do this without any stack extension or copying at all
1075 * by maintaining a separate list over which the map iterates
1076 * (like foreach does). --gsar */
1078 /* everything in the stack after the destination list moves
1079 * towards the end the stack by the amount of room needed */
1080 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1082 /* items to shift up (accounting for the moved source pointer) */
1083 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1085 /* This optimization is by Ben Tilly and it does
1086 * things differently from what Sarathy (gsar)
1087 * is describing. The downside of this optimization is
1088 * that leaves "holes" (uninitialized and hopefully unused areas)
1089 * to the Perl stack, but on the other hand this
1090 * shouldn't be a problem. If Sarathy's idea gets
1091 * implemented, this optimization should become
1092 * irrelevant. --jhi */
1094 shift = count; /* Avoid shifting too often --Ben Tilly */
1098 dst = (SP += shift);
1099 PL_markstack_ptr[-1] += shift;
1100 *PL_markstack_ptr += shift;
1104 /* copy the new items down to the destination list */
1105 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1106 if (gimme == G_ARRAY) {
1108 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1111 /* scalar context: we don't care about which values map returns
1112 * (we use undef here). And so we certainly don't want to do mortal
1113 * copies of meaningless values. */
1114 while (items-- > 0) {
1116 *dst-- = &PL_sv_undef;
1120 LEAVE_with_name("grep_item"); /* exit inner scope */
1123 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1125 (void)POPMARK; /* pop top */
1126 LEAVE_with_name("grep"); /* exit outer scope */
1127 (void)POPMARK; /* pop src */
1128 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1129 (void)POPMARK; /* pop dst */
1130 SP = PL_stack_base + POPMARK; /* pop original mark */
1131 if (gimme == G_SCALAR) {
1132 if (PL_op->op_private & OPpGREP_LEX) {
1133 SV* sv = sv_newmortal();
1134 sv_setiv(sv, items);
1142 else if (gimme == G_ARRAY)
1149 ENTER_with_name("grep_item"); /* enter inner scope */
1152 /* set $_ to the new source item */
1153 src = PL_stack_base[PL_markstack_ptr[-1]];
1155 if (PL_op->op_private & OPpGREP_LEX)
1156 PAD_SVl(PL_op->op_targ) = src;
1160 RETURNOP(cLOGOP->op_other);
1169 if (GIMME == G_ARRAY)
1171 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1172 return cLOGOP->op_other;
1182 if (GIMME == G_ARRAY) {
1183 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1187 SV * const targ = PAD_SV(PL_op->op_targ);
1190 if (PL_op->op_private & OPpFLIP_LINENUM) {
1191 if (GvIO(PL_last_in_gv)) {
1192 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1195 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1197 flip = SvIV(sv) == SvIV(GvSV(gv));
1203 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1204 if (PL_op->op_flags & OPf_SPECIAL) {
1212 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1215 sv_setpvs(TARG, "");
1221 /* This code tries to decide if "$left .. $right" should use the
1222 magical string increment, or if the range is numeric (we make
1223 an exception for .."0" [#18165]). AMS 20021031. */
1225 #define RANGE_IS_NUMERIC(left,right) ( \
1226 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1227 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1228 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1229 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1230 && (!SvOK(right) || looks_like_number(right))))
1236 if (GIMME == G_ARRAY) {
1242 if (RANGE_IS_NUMERIC(left,right)) {
1245 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1246 (SvOK(right) && SvNV(right) > IV_MAX))
1247 DIE(aTHX_ "Range iterator outside integer range");
1258 SV * const sv = sv_2mortal(newSViv(i++));
1263 SV * const final = sv_mortalcopy(right);
1265 const char * const tmps = SvPV_const(final, len);
1267 SV *sv = sv_mortalcopy(left);
1268 SvPV_force_nolen(sv);
1269 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1271 if (strEQ(SvPVX_const(sv),tmps))
1273 sv = sv_2mortal(newSVsv(sv));
1280 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1284 if (PL_op->op_private & OPpFLIP_LINENUM) {
1285 if (GvIO(PL_last_in_gv)) {
1286 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1289 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1290 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1298 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1299 sv_catpvs(targ, "E0");
1309 static const char * const context_name[] = {
1311 NULL, /* CXt_WHEN never actually needs "block" */
1312 NULL, /* CXt_BLOCK never actually needs "block" */
1313 NULL, /* CXt_GIVEN never actually needs "block" */
1314 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1315 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1316 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1317 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1325 S_dopoptolabel(pTHX_ const char *label)
1330 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1332 for (i = cxstack_ix; i >= 0; i--) {
1333 register const PERL_CONTEXT * const cx = &cxstack[i];
1334 switch (CxTYPE(cx)) {
1340 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1341 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1342 if (CxTYPE(cx) == CXt_NULL)
1345 case CXt_LOOP_LAZYIV:
1346 case CXt_LOOP_LAZYSV:
1348 case CXt_LOOP_PLAIN:
1350 const char *cx_label = CxLABEL(cx);
1351 if (!cx_label || strNE(label, cx_label) ) {
1352 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1353 (long)i, cx_label));
1356 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1367 Perl_dowantarray(pTHX)
1370 const I32 gimme = block_gimme();
1371 return (gimme == G_VOID) ? G_SCALAR : gimme;
1375 Perl_block_gimme(pTHX)
1378 const I32 cxix = dopoptosub(cxstack_ix);
1382 switch (cxstack[cxix].blk_gimme) {
1390 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1397 Perl_is_lvalue_sub(pTHX)
1400 const I32 cxix = dopoptosub(cxstack_ix);
1401 assert(cxix >= 0); /* We should only be called from inside subs */
1403 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1404 return CxLVAL(cxstack + cxix);
1410 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1415 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1417 for (i = startingblock; i >= 0; i--) {
1418 register const PERL_CONTEXT * const cx = &cxstk[i];
1419 switch (CxTYPE(cx)) {
1425 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1433 S_dopoptoeval(pTHX_ I32 startingblock)
1437 for (i = startingblock; i >= 0; i--) {
1438 register const PERL_CONTEXT *cx = &cxstack[i];
1439 switch (CxTYPE(cx)) {
1443 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1451 S_dopoptoloop(pTHX_ I32 startingblock)
1455 for (i = startingblock; i >= 0; i--) {
1456 register const PERL_CONTEXT * const cx = &cxstack[i];
1457 switch (CxTYPE(cx)) {
1463 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1464 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1465 if ((CxTYPE(cx)) == CXt_NULL)
1468 case CXt_LOOP_LAZYIV:
1469 case CXt_LOOP_LAZYSV:
1471 case CXt_LOOP_PLAIN:
1472 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1480 S_dopoptogiven(pTHX_ I32 startingblock)
1484 for (i = startingblock; i >= 0; i--) {
1485 register const PERL_CONTEXT *cx = &cxstack[i];
1486 switch (CxTYPE(cx)) {
1490 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1492 case CXt_LOOP_PLAIN:
1493 assert(!CxFOREACHDEF(cx));
1495 case CXt_LOOP_LAZYIV:
1496 case CXt_LOOP_LAZYSV:
1498 if (CxFOREACHDEF(cx)) {
1499 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1508 S_dopoptowhen(pTHX_ I32 startingblock)
1512 for (i = startingblock; i >= 0; i--) {
1513 register const PERL_CONTEXT *cx = &cxstack[i];
1514 switch (CxTYPE(cx)) {
1518 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1526 Perl_dounwind(pTHX_ I32 cxix)
1531 while (cxstack_ix > cxix) {
1533 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1534 DEBUG_CX("UNWIND"); \
1535 /* Note: we don't need to restore the base context info till the end. */
1536 switch (CxTYPE(cx)) {
1539 continue; /* not break */
1547 case CXt_LOOP_LAZYIV:
1548 case CXt_LOOP_LAZYSV:
1550 case CXt_LOOP_PLAIN:
1561 PERL_UNUSED_VAR(optype);
1565 Perl_qerror(pTHX_ SV *err)
1569 PERL_ARGS_ASSERT_QERROR;
1572 sv_catsv(ERRSV, err);
1574 sv_catsv(PL_errors, err);
1576 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1578 ++PL_parser->error_count;
1582 Perl_die_unwind(pTHX_ SV *msv)
1585 SV *exceptsv = sv_mortalcopy(msv);
1586 U8 in_eval = PL_in_eval;
1587 PERL_ARGS_ASSERT_DIE_UNWIND;
1593 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1594 && PL_curstackinfo->si_prev)
1603 register PERL_CONTEXT *cx;
1606 if (cxix < cxstack_ix)
1609 POPBLOCK(cx,PL_curpm);
1610 if (CxTYPE(cx) != CXt_EVAL) {
1612 const char* message = SvPVx_const(exceptsv, msglen);
1613 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1614 PerlIO_write(Perl_error_log, message, msglen);
1618 namesv = cx->blk_eval.old_namesv;
1620 if (gimme == G_SCALAR)
1621 *++newsp = &PL_sv_undef;
1622 PL_stack_sp = newsp;
1626 /* LEAVE could clobber PL_curcop (see save_re_context())
1627 * XXX it might be better to find a way to avoid messing with
1628 * PL_curcop in save_re_context() instead, but this is a more
1629 * minimal fix --GSAR */
1630 PL_curcop = cx->blk_oldcop;
1632 if (optype == OP_REQUIRE) {
1633 const char* const msg = SvPVx_nolen_const(exceptsv);
1634 (void)hv_store(GvHVn(PL_incgv),
1635 SvPVX_const(namesv), SvCUR(namesv),
1637 /* note that unlike pp_entereval, pp_require isn't
1638 * supposed to trap errors. So now that we've popped the
1639 * EVAL that pp_require pushed, and processed the error
1640 * message, rethrow the error */
1641 Perl_croak(aTHX_ "%sCompilation failed in require",
1642 *msg ? msg : "Unknown error\n");
1644 if (in_eval & EVAL_KEEPERR) {
1645 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %s",
1646 SvPV_nolen_const(exceptsv));
1649 sv_setsv(ERRSV, exceptsv);
1651 assert(CxTYPE(cx) == CXt_EVAL);
1652 PL_restartjmpenv = cx->blk_eval.cur_top_env;
1653 PL_restartop = cx->blk_eval.retop;
1659 write_to_stderr(exceptsv);
1666 dVAR; dSP; dPOPTOPssrl;
1667 if (SvTRUE(left) != SvTRUE(right))
1674 =for apidoc caller_cx
1676 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1677 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1678 information returned to Perl by C<caller>. Note that XSUBs don't get a
1679 stack frame, so C<caller_cx(0, NULL)> will return information for the
1680 immediately-surrounding Perl code.
1682 This function skips over the automatic calls to C<&DB::sub> made on the
1683 behalf of the debugger. If the stack frame requested was a sub called by
1684 C<DB::sub>, the return value will be the frame for the call to
1685 C<DB::sub>, since that has the correct line number/etc. for the call
1686 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1687 frame for the sub call itself.
1692 const PERL_CONTEXT *
1693 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1695 register I32 cxix = dopoptosub(cxstack_ix);
1696 register const PERL_CONTEXT *cx;
1697 register const PERL_CONTEXT *ccstack = cxstack;
1698 const PERL_SI *top_si = PL_curstackinfo;
1701 /* we may be in a higher stacklevel, so dig down deeper */
1702 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1703 top_si = top_si->si_prev;
1704 ccstack = top_si->si_cxstack;
1705 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1709 /* caller() should not report the automatic calls to &DB::sub */
1710 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1711 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1715 cxix = dopoptosub_at(ccstack, cxix - 1);
1718 cx = &ccstack[cxix];
1719 if (dbcxp) *dbcxp = cx;
1721 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1722 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1723 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1724 field below is defined for any cx. */
1725 /* caller() should not report the automatic calls to &DB::sub */
1726 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1727 cx = &ccstack[dbcxix];
1737 register const PERL_CONTEXT *cx;
1738 const PERL_CONTEXT *dbcx;
1740 const char *stashname;
1746 cx = caller_cx(count, &dbcx);
1748 if (GIMME != G_ARRAY) {
1755 stashname = CopSTASHPV(cx->blk_oldcop);
1756 if (GIMME != G_ARRAY) {
1759 PUSHs(&PL_sv_undef);
1762 sv_setpv(TARG, stashname);
1771 PUSHs(&PL_sv_undef);
1773 mPUSHs(newSVpv(stashname, 0));
1774 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1775 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1778 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1779 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1780 /* So is ccstack[dbcxix]. */
1782 SV * const sv = newSV(0);
1783 gv_efullname3(sv, cvgv, NULL);
1785 PUSHs(boolSV(CxHASARGS(cx)));
1788 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1789 PUSHs(boolSV(CxHASARGS(cx)));
1793 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1796 gimme = (I32)cx->blk_gimme;
1797 if (gimme == G_VOID)
1798 PUSHs(&PL_sv_undef);
1800 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1801 if (CxTYPE(cx) == CXt_EVAL) {
1803 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1804 PUSHs(cx->blk_eval.cur_text);
1808 else if (cx->blk_eval.old_namesv) {
1809 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1812 /* eval BLOCK (try blocks have old_namesv == 0) */
1814 PUSHs(&PL_sv_undef);
1815 PUSHs(&PL_sv_undef);
1819 PUSHs(&PL_sv_undef);
1820 PUSHs(&PL_sv_undef);
1822 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1823 && CopSTASH_eq(PL_curcop, PL_debstash))
1825 AV * const ary = cx->blk_sub.argarray;
1826 const int off = AvARRAY(ary) - AvALLOC(ary);
1829 Perl_init_dbargs(aTHX);
1831 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1832 av_extend(PL_dbargs, AvFILLp(ary) + off);
1833 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1834 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1836 /* XXX only hints propagated via op_private are currently
1837 * visible (others are not easily accessible, since they
1838 * use the global PL_hints) */
1839 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1842 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1844 if (old_warnings == pWARN_NONE ||
1845 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1846 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1847 else if (old_warnings == pWARN_ALL ||
1848 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1849 /* Get the bit mask for $warnings::Bits{all}, because
1850 * it could have been extended by warnings::register */
1852 HV * const bits = get_hv("warnings::Bits", 0);
1853 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1854 mask = newSVsv(*bits_all);
1857 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1861 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1865 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1866 sv_2mortal(newRV_noinc(
1867 MUTABLE_SV(Perl_refcounted_he_chain_2hv(aTHX_
1868 cx->blk_oldcop->cop_hints_hash))))
1877 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1878 sv_reset(tmps, CopSTASH(PL_curcop));
1883 /* like pp_nextstate, but used instead when the debugger is active */
1888 PL_curcop = (COP*)PL_op;
1889 TAINT_NOT; /* Each statement is presumed innocent */
1890 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1895 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1896 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1899 register PERL_CONTEXT *cx;
1900 const I32 gimme = G_ARRAY;
1902 GV * const gv = PL_DBgv;
1903 register CV * const cv = GvCV(gv);
1906 DIE(aTHX_ "No DB::DB routine defined");
1908 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1909 /* don't do recursive DB::DB call */
1924 (void)(*CvXSUB(cv))(aTHX_ cv);
1931 PUSHBLOCK(cx, CXt_SUB, SP);
1933 cx->blk_sub.retop = PL_op->op_next;
1936 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1937 RETURNOP(CvSTART(cv));
1947 register PERL_CONTEXT *cx;
1948 const I32 gimme = GIMME_V;
1950 U8 cxtype = CXt_LOOP_FOR;
1955 ENTER_with_name("loop1");
1958 if (PL_op->op_targ) {
1959 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1960 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1961 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1962 SVs_PADSTALE, SVs_PADSTALE);
1964 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1965 #ifndef USE_ITHREADS
1966 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1972 GV * const gv = MUTABLE_GV(POPs);
1973 svp = &GvSV(gv); /* symbol table variable */
1974 SAVEGENERICSV(*svp);
1977 iterdata = (PAD*)gv;
1981 if (PL_op->op_private & OPpITER_DEF)
1982 cxtype |= CXp_FOR_DEF;
1984 ENTER_with_name("loop2");
1986 PUSHBLOCK(cx, cxtype, SP);
1988 PUSHLOOP_FOR(cx, iterdata, MARK, PL_op->op_targ);
1990 PUSHLOOP_FOR(cx, svp, MARK, 0);
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);
3267 call_list(PL_scopestack_ix, PL_unitcheckav);
3269 /* compiled okay, so do it */
3271 CvDEPTH(PL_compcv) = 1;
3272 SP = PL_stack_base + POPMARK; /* pop original mark */
3273 PL_op = saveop; /* The caller may need it. */
3274 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3281 S_check_type_and_open(pTHX_ const char *name)
3284 const int st_rc = PerlLIO_stat(name, &st);
3286 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3288 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3292 return PerlIO_open(name, PERL_SCRIPT_MODE);
3295 #ifndef PERL_DISABLE_PMC
3297 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3301 PERL_ARGS_ASSERT_DOOPEN_PM;
3303 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3304 SV *const pmcsv = newSV(namelen + 2);
3305 char *const pmc = SvPVX(pmcsv);
3308 memcpy(pmc, name, namelen);
3310 pmc[namelen + 1] = '\0';
3312 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3313 fp = check_type_and_open(name);
3316 fp = check_type_and_open(pmc);
3318 SvREFCNT_dec(pmcsv);
3321 fp = check_type_and_open(name);
3326 # define doopen_pm(name, namelen) check_type_and_open(name)
3327 #endif /* !PERL_DISABLE_PMC */
3332 register PERL_CONTEXT *cx;
3339 int vms_unixname = 0;
3341 const char *tryname = NULL;
3343 const I32 gimme = GIMME_V;
3344 int filter_has_file = 0;
3345 PerlIO *tryrsfp = NULL;
3346 SV *filter_cache = NULL;
3347 SV *filter_state = NULL;
3348 SV *filter_sub = NULL;
3354 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3355 sv = new_version(sv);
3356 if (!sv_derived_from(PL_patchlevel, "version"))
3357 upg_version(PL_patchlevel, TRUE);
3358 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3359 if ( vcmp(sv,PL_patchlevel) <= 0 )
3360 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3361 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3364 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3367 SV * const req = SvRV(sv);
3368 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3370 /* get the left hand term */
3371 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3373 first = SvIV(*av_fetch(lav,0,0));
3374 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3375 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3376 || av_len(lav) > 1 /* FP with > 3 digits */
3377 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3379 DIE(aTHX_ "Perl %"SVf" required--this is only "
3380 "%"SVf", stopped", SVfARG(vnormal(req)),
3381 SVfARG(vnormal(PL_patchlevel)));
3383 else { /* probably 'use 5.10' or 'use 5.8' */
3388 second = SvIV(*av_fetch(lav,1,0));
3390 second /= second >= 600 ? 100 : 10;
3391 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3392 (int)first, (int)second);
3393 upg_version(hintsv, TRUE);
3395 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3396 "--this is only %"SVf", stopped",
3397 SVfARG(vnormal(req)),
3398 SVfARG(vnormal(sv_2mortal(hintsv))),
3399 SVfARG(vnormal(PL_patchlevel)));
3404 /* We do this only with "use", not "require" or "no". */
3405 if (PL_compcv && !(cUNOP->op_first->op_private & OPpCONST_NOVER)) {
3406 /* If we request a version >= 5.9.5, load feature.pm with the
3407 * feature bundle that corresponds to the required version. */
3408 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3409 SV *const importsv = vnormal(sv);
3410 *SvPVX_mutable(importsv) = ':';
3411 ENTER_with_name("load_feature");
3412 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3413 LEAVE_with_name("load_feature");
3415 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3416 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3417 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
3423 name = SvPV_const(sv, len);
3424 if (!(name && len > 0 && *name))
3425 DIE(aTHX_ "Null filename used");
3426 TAINT_PROPER("require");
3430 /* The key in the %ENV hash is in the syntax of file passed as the argument
3431 * usually this is in UNIX format, but sometimes in VMS format, which
3432 * can result in a module being pulled in more than once.
3433 * To prevent this, the key must be stored in UNIX format if the VMS
3434 * name can be translated to UNIX.
3436 if ((unixname = tounixspec(name, NULL)) != NULL) {
3437 unixlen = strlen(unixname);
3443 /* if not VMS or VMS name can not be translated to UNIX, pass it
3446 unixname = (char *) name;
3449 if (PL_op->op_type == OP_REQUIRE) {
3450 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3451 unixname, unixlen, 0);
3453 if (*svp != &PL_sv_undef)
3456 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3457 "Compilation failed in require", unixname);
3461 /* prepare to compile file */
3463 if (path_is_absolute(name)) {
3465 tryrsfp = doopen_pm(name, len);
3468 AV * const ar = GvAVn(PL_incgv);
3474 namesv = newSV_type(SVt_PV);
3475 for (i = 0; i <= AvFILL(ar); i++) {
3476 SV * const dirsv = *av_fetch(ar, i, TRUE);
3478 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3485 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3486 && !sv_isobject(loader))
3488 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3491 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3492 PTR2UV(SvRV(dirsv)), name);
3493 tryname = SvPVX_const(namesv);
3496 ENTER_with_name("call_INC");
3504 if (sv_isobject(loader))
3505 count = call_method("INC", G_ARRAY);
3507 count = call_sv(loader, G_ARRAY);
3517 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3518 && !isGV_with_GP(SvRV(arg))) {
3519 filter_cache = SvRV(arg);
3520 SvREFCNT_inc_simple_void_NN(filter_cache);
3527 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3531 if (isGV_with_GP(arg)) {
3532 IO * const io = GvIO((const GV *)arg);
3537 tryrsfp = IoIFP(io);
3538 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3539 PerlIO_close(IoOFP(io));
3550 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3552 SvREFCNT_inc_simple_void_NN(filter_sub);
3555 filter_state = SP[i];
3556 SvREFCNT_inc_simple_void(filter_state);
3560 if (!tryrsfp && (filter_cache || filter_sub)) {
3561 tryrsfp = PerlIO_open(BIT_BUCKET,
3569 LEAVE_with_name("call_INC");
3571 /* Adjust file name if the hook has set an %INC entry.
3572 This needs to happen after the FREETMPS above. */
3573 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3575 tryname = SvPV_nolen_const(*svp);
3582 filter_has_file = 0;
3584 SvREFCNT_dec(filter_cache);
3585 filter_cache = NULL;
3588 SvREFCNT_dec(filter_state);
3589 filter_state = NULL;
3592 SvREFCNT_dec(filter_sub);
3597 if (!path_is_absolute(name)
3603 dir = SvPV_const(dirsv, dirlen);
3611 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3613 sv_setpv(namesv, unixdir);
3614 sv_catpv(namesv, unixname);
3616 # ifdef __SYMBIAN32__
3617 if (PL_origfilename[0] &&
3618 PL_origfilename[1] == ':' &&
3619 !(dir[0] && dir[1] == ':'))
3620 Perl_sv_setpvf(aTHX_ namesv,
3625 Perl_sv_setpvf(aTHX_ namesv,
3629 /* The equivalent of
3630 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3631 but without the need to parse the format string, or
3632 call strlen on either pointer, and with the correct
3633 allocation up front. */
3635 char *tmp = SvGROW(namesv, dirlen + len + 2);
3637 memcpy(tmp, dir, dirlen);
3640 /* name came from an SV, so it will have a '\0' at the
3641 end that we can copy as part of this memcpy(). */
3642 memcpy(tmp, name, len + 1);
3644 SvCUR_set(namesv, dirlen + len + 1);
3646 /* Don't even actually have to turn SvPOK_on() as we
3647 access it directly with SvPVX() below. */
3651 TAINT_PROPER("require");
3652 tryname = SvPVX_const(namesv);
3653 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3655 if (tryname[0] == '.' && tryname[1] == '/') {
3657 while (*++tryname == '/');
3661 else if (errno == EMFILE)
3662 /* no point in trying other paths if out of handles */
3670 SAVECOPFILE_FREE(&PL_compiling);
3671 CopFILE_set(&PL_compiling, tryname);
3673 SvREFCNT_dec(namesv);
3675 if (PL_op->op_type == OP_REQUIRE) {
3676 if(errno == EMFILE) {
3677 /* diag_listed_as: Can't locate %s */
3678 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
3680 if (namesv) { /* did we lookup @INC? */
3681 AV * const ar = GvAVn(PL_incgv);
3683 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3684 for (i = 0; i <= AvFILL(ar); i++) {
3685 sv_catpvs(inc, " ");
3686 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3689 /* diag_listed_as: Can't locate %s */
3691 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3693 (memEQ(name + len - 2, ".h", 3)
3694 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3695 (memEQ(name + len - 3, ".ph", 4)
3696 ? " (did you run h2ph?)" : ""),
3701 DIE(aTHX_ "Can't locate %s", name);
3707 SETERRNO(0, SS_NORMAL);
3709 /* Assume success here to prevent recursive requirement. */
3710 /* name is never assigned to again, so len is still strlen(name) */
3711 /* Check whether a hook in @INC has already filled %INC */
3713 (void)hv_store(GvHVn(PL_incgv),
3714 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3716 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3718 (void)hv_store(GvHVn(PL_incgv),
3719 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3722 ENTER_with_name("eval");
3724 lex_start(NULL, tryrsfp, TRUE);
3728 hv_clear(GvHV(PL_hintgv));
3730 SAVECOMPILEWARNINGS();
3731 if (PL_dowarn & G_WARN_ALL_ON)
3732 PL_compiling.cop_warnings = pWARN_ALL ;
3733 else if (PL_dowarn & G_WARN_ALL_OFF)
3734 PL_compiling.cop_warnings = pWARN_NONE ;
3736 PL_compiling.cop_warnings = pWARN_STD ;
3738 if (filter_sub || filter_cache) {
3739 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3740 than hanging another SV from it. In turn, filter_add() optionally
3741 takes the SV to use as the filter (or creates a new SV if passed
3742 NULL), so simply pass in whatever value filter_cache has. */
3743 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3744 IoLINES(datasv) = filter_has_file;
3745 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3746 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3749 /* switch to eval mode */
3750 PUSHBLOCK(cx, CXt_EVAL, SP);
3752 cx->blk_eval.retop = PL_op->op_next;
3754 SAVECOPLINE(&PL_compiling);
3755 CopLINE_set(&PL_compiling, 0);
3759 /* Store and reset encoding. */
3760 encoding = PL_encoding;
3763 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3764 op = DOCATCH(PL_eval_start);
3766 op = PL_op->op_next;
3768 /* Restore encoding. */
3769 PL_encoding = encoding;
3774 /* This is a op added to hold the hints hash for
3775 pp_entereval. The hash can be modified by the code
3776 being eval'ed, so we return a copy instead. */
3782 mXPUSHs(MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ MUTABLE_HV(cSVOP_sv))));
3790 register PERL_CONTEXT *cx;
3792 const I32 gimme = GIMME_V;
3793 const U32 was = PL_breakable_sub_gen;
3794 char tbuf[TYPE_DIGITS(long) + 12];
3795 char *tmpbuf = tbuf;
3799 HV *saved_hh = NULL;
3801 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3802 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3806 /* make sure we've got a plain PV (no overload etc) before testing
3807 * for taint. Making a copy here is probably overkill, but better
3808 * safe than sorry */
3810 const char * const p = SvPV_const(sv, len);
3812 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
3815 TAINT_IF(SvTAINTED(sv));
3816 TAINT_PROPER("eval");
3818 ENTER_with_name("eval");
3819 lex_start(sv, NULL, FALSE);
3822 /* switch to eval mode */
3824 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3825 SV * const temp_sv = sv_newmortal();
3826 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3827 (unsigned long)++PL_evalseq,
3828 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3829 tmpbuf = SvPVX(temp_sv);
3830 len = SvCUR(temp_sv);
3833 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3834 SAVECOPFILE_FREE(&PL_compiling);
3835 CopFILE_set(&PL_compiling, tmpbuf+2);
3836 SAVECOPLINE(&PL_compiling);
3837 CopLINE_set(&PL_compiling, 1);
3838 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3839 deleting the eval's FILEGV from the stash before gv_check() runs
3840 (i.e. before run-time proper). To work around the coredump that
3841 ensues, we always turn GvMULTI_on for any globals that were
3842 introduced within evals. See force_ident(). GSAR 96-10-12 */
3844 PL_hints = PL_op->op_targ;
3846 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3847 SvREFCNT_dec(GvHV(PL_hintgv));
3848 GvHV(PL_hintgv) = saved_hh;
3850 SAVECOMPILEWARNINGS();
3851 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3852 if (PL_compiling.cop_hints_hash) {
3853 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3855 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
3856 /* The label, if present, is the first entry on the chain. So rather
3857 than writing a blank label in front of it (which involves an
3858 allocation), just use the next entry in the chain. */
3859 PL_compiling.cop_hints_hash
3860 = PL_curcop->cop_hints_hash->refcounted_he_next;
3861 /* Check the assumption that this removed the label. */
3862 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3865 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3866 if (PL_compiling.cop_hints_hash) {
3868 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3869 HINTS_REFCNT_UNLOCK;
3871 /* special case: an eval '' executed within the DB package gets lexically
3872 * placed in the first non-DB CV rather than the current CV - this
3873 * allows the debugger to execute code, find lexicals etc, in the
3874 * scope of the code being debugged. Passing &seq gets find_runcv
3875 * to do the dirty work for us */
3876 runcv = find_runcv(&seq);
3878 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3880 cx->blk_eval.retop = PL_op->op_next;
3882 /* prepare to compile string */
3884 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3885 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3888 if (doeval(gimme, NULL, runcv, seq)) {
3889 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3890 ? (PERLDB_LINE || PERLDB_SAVESRC)
3891 : PERLDB_SAVESRC_NOSUBS) {
3892 /* Retain the filegv we created. */
3894 char *const safestr = savepvn(tmpbuf, len);
3895 SAVEDELETE(PL_defstash, safestr, len);
3897 return DOCATCH(PL_eval_start);
3899 /* We have already left the scope set up earler thanks to the LEAVE
3901 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3902 ? (PERLDB_LINE || PERLDB_SAVESRC)
3903 : PERLDB_SAVESRC_INVALID) {
3904 /* Retain the filegv we created. */
3906 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3908 return PL_op->op_next;
3919 register PERL_CONTEXT *cx;
3921 const U8 save_flags = PL_op -> op_flags;
3927 namesv = cx->blk_eval.old_namesv;
3928 retop = cx->blk_eval.retop;
3931 if (gimme == G_VOID)
3933 else if (gimme == G_SCALAR) {
3936 if (SvFLAGS(TOPs) & SVs_TEMP)
3939 *MARK = sv_mortalcopy(TOPs);
3943 *MARK = &PL_sv_undef;
3948 /* in case LEAVE wipes old return values */
3949 for (mark = newsp + 1; mark <= SP; mark++) {
3950 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3951 *mark = sv_mortalcopy(*mark);
3952 TAINT_NOT; /* Each item is independent */
3956 PL_curpm = newpm; /* Don't pop $1 et al till now */
3959 assert(CvDEPTH(PL_compcv) == 1);
3961 CvDEPTH(PL_compcv) = 0;
3964 if (optype == OP_REQUIRE &&
3965 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3967 /* Unassume the success we assumed earlier. */
3968 (void)hv_delete(GvHVn(PL_incgv),
3969 SvPVX_const(namesv), SvCUR(namesv),
3971 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
3973 /* die_unwind() did LEAVE, or we won't be here */
3976 LEAVE_with_name("eval");
3977 if (!(save_flags & OPf_SPECIAL)) {
3985 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3986 close to the related Perl_create_eval_scope. */
3988 Perl_delete_eval_scope(pTHX)
3993 register PERL_CONTEXT *cx;
3999 LEAVE_with_name("eval_scope");
4000 PERL_UNUSED_VAR(newsp);
4001 PERL_UNUSED_VAR(gimme);
4002 PERL_UNUSED_VAR(optype);
4005 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4006 also needed by Perl_fold_constants. */
4008 Perl_create_eval_scope(pTHX_ U32 flags)
4011 const I32 gimme = GIMME_V;
4013 ENTER_with_name("eval_scope");
4016 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4019 PL_in_eval = EVAL_INEVAL;
4020 if (flags & G_KEEPERR)
4021 PL_in_eval |= EVAL_KEEPERR;
4024 if (flags & G_FAKINGEVAL) {
4025 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4033 PERL_CONTEXT * const cx = create_eval_scope(0);
4034 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4035 return DOCATCH(PL_op->op_next);
4044 register PERL_CONTEXT *cx;
4049 PERL_UNUSED_VAR(optype);
4052 if (gimme == G_VOID)
4054 else if (gimme == G_SCALAR) {
4058 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4061 *MARK = sv_mortalcopy(TOPs);
4065 *MARK = &PL_sv_undef;
4070 /* in case LEAVE wipes old return values */
4072 for (mark = newsp + 1; mark <= SP; mark++) {
4073 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4074 *mark = sv_mortalcopy(*mark);
4075 TAINT_NOT; /* Each item is independent */
4079 PL_curpm = newpm; /* Don't pop $1 et al till now */
4081 LEAVE_with_name("eval_scope");
4089 register PERL_CONTEXT *cx;
4090 const I32 gimme = GIMME_V;
4092 ENTER_with_name("given");
4095 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
4097 PUSHBLOCK(cx, CXt_GIVEN, SP);
4106 register PERL_CONTEXT *cx;
4110 PERL_UNUSED_CONTEXT;
4113 assert(CxTYPE(cx) == CXt_GIVEN);
4116 if (gimme == G_VOID)
4118 else if (gimme == G_SCALAR) {
4122 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4125 *MARK = sv_mortalcopy(TOPs);
4129 *MARK = &PL_sv_undef;
4134 /* in case LEAVE wipes old return values */
4136 for (mark = newsp + 1; mark <= SP; mark++) {
4137 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4138 *mark = sv_mortalcopy(*mark);
4139 TAINT_NOT; /* Each item is independent */
4143 PL_curpm = newpm; /* Don't pop $1 et al till now */
4145 LEAVE_with_name("given");
4149 /* Helper routines used by pp_smartmatch */
4151 S_make_matcher(pTHX_ REGEXP *re)
4154 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4156 PERL_ARGS_ASSERT_MAKE_MATCHER;
4158 PM_SETRE(matcher, ReREFCNT_inc(re));
4160 SAVEFREEOP((OP *) matcher);
4161 ENTER_with_name("matcher"); SAVETMPS;
4167 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4172 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4174 PL_op = (OP *) matcher;
4179 return (SvTRUEx(POPs));
4183 S_destroy_matcher(pTHX_ PMOP *matcher)
4187 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4188 PERL_UNUSED_ARG(matcher);
4191 LEAVE_with_name("matcher");
4194 /* Do a smart match */
4197 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4198 return do_smartmatch(NULL, NULL);
4201 /* This version of do_smartmatch() implements the
4202 * table of smart matches that is found in perlsyn.
4205 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4210 bool object_on_left = FALSE;
4211 SV *e = TOPs; /* e is for 'expression' */
4212 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4214 /* Take care only to invoke mg_get() once for each argument.
4215 * Currently we do this by copying the SV if it's magical. */
4218 d = sv_mortalcopy(d);
4225 e = sv_mortalcopy(e);
4227 /* First of all, handle overload magic of the rightmost argument */
4230 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4231 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4233 tmpsv = amagic_call(d, e, smart_amg, 0);
4240 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4243 SP -= 2; /* Pop the values */
4248 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4255 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4256 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4257 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4259 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4260 object_on_left = TRUE;
4263 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4265 if (object_on_left) {
4266 goto sm_any_sub; /* Treat objects like scalars */
4268 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4269 /* Test sub truth for each key */
4271 bool andedresults = TRUE;
4272 HV *hv = (HV*) SvRV(d);
4273 I32 numkeys = hv_iterinit(hv);
4274 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4277 while ( (he = hv_iternext(hv)) ) {
4278 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4279 ENTER_with_name("smartmatch_hash_key_test");
4282 PUSHs(hv_iterkeysv(he));
4284 c = call_sv(e, G_SCALAR);
4287 andedresults = FALSE;
4289 andedresults = SvTRUEx(POPs) && andedresults;
4291 LEAVE_with_name("smartmatch_hash_key_test");
4298 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4299 /* Test sub truth for each element */
4301 bool andedresults = TRUE;
4302 AV *av = (AV*) SvRV(d);
4303 const I32 len = av_len(av);
4304 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4307 for (i = 0; i <= len; ++i) {
4308 SV * const * const svp = av_fetch(av, i, FALSE);
4309 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4310 ENTER_with_name("smartmatch_array_elem_test");
4316 c = call_sv(e, G_SCALAR);
4319 andedresults = FALSE;
4321 andedresults = SvTRUEx(POPs) && andedresults;
4323 LEAVE_with_name("smartmatch_array_elem_test");
4332 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4333 ENTER_with_name("smartmatch_coderef");
4338 c = call_sv(e, G_SCALAR);
4342 else if (SvTEMP(TOPs))
4343 SvREFCNT_inc_void(TOPs);
4345 LEAVE_with_name("smartmatch_coderef");
4350 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4351 if (object_on_left) {
4352 goto sm_any_hash; /* Treat objects like scalars */
4354 else if (!SvOK(d)) {
4355 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4358 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4359 /* Check that the key-sets are identical */
4361 HV *other_hv = MUTABLE_HV(SvRV(d));
4363 bool other_tied = FALSE;
4364 U32 this_key_count = 0,
4365 other_key_count = 0;
4366 HV *hv = MUTABLE_HV(SvRV(e));
4368 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4369 /* Tied hashes don't know how many keys they have. */
4370 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4373 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4374 HV * const temp = other_hv;
4379 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4382 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4385 /* The hashes have the same number of keys, so it suffices
4386 to check that one is a subset of the other. */
4387 (void) hv_iterinit(hv);
4388 while ( (he = hv_iternext(hv)) ) {
4389 SV *key = hv_iterkeysv(he);
4391 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4394 if(!hv_exists_ent(other_hv, key, 0)) {
4395 (void) hv_iterinit(hv); /* reset iterator */
4401 (void) hv_iterinit(other_hv);
4402 while ( hv_iternext(other_hv) )
4406 other_key_count = HvUSEDKEYS(other_hv);
4408 if (this_key_count != other_key_count)
4413 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4414 AV * const other_av = MUTABLE_AV(SvRV(d));
4415 const I32 other_len = av_len(other_av) + 1;
4417 HV *hv = MUTABLE_HV(SvRV(e));
4419 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4420 for (i = 0; i < other_len; ++i) {
4421 SV ** const svp = av_fetch(other_av, i, FALSE);
4422 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4423 if (svp) { /* ??? When can this not happen? */
4424 if (hv_exists_ent(hv, *svp, 0))
4430 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4431 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4434 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4436 HV *hv = MUTABLE_HV(SvRV(e));
4438 (void) hv_iterinit(hv);
4439 while ( (he = hv_iternext(hv)) ) {
4440 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4441 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4442 (void) hv_iterinit(hv);
4443 destroy_matcher(matcher);
4447 destroy_matcher(matcher);
4453 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4454 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4461 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4462 if (object_on_left) {
4463 goto sm_any_array; /* Treat objects like scalars */
4465 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4466 AV * const other_av = MUTABLE_AV(SvRV(e));
4467 const I32 other_len = av_len(other_av) + 1;
4470 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4471 for (i = 0; i < other_len; ++i) {
4472 SV ** const svp = av_fetch(other_av, i, FALSE);
4474 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4475 if (svp) { /* ??? When can this not happen? */
4476 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4482 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4483 AV *other_av = MUTABLE_AV(SvRV(d));
4484 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4485 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4489 const I32 other_len = av_len(other_av);
4491 if (NULL == seen_this) {
4492 seen_this = newHV();
4493 (void) sv_2mortal(MUTABLE_SV(seen_this));
4495 if (NULL == seen_other) {
4496 seen_other = newHV();
4497 (void) sv_2mortal(MUTABLE_SV(seen_other));