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;
1949 void *itervar; /* location of the iteration variable */
1950 U8 cxtype = CXt_LOOP_FOR;
1952 ENTER_with_name("loop1");
1955 if (PL_op->op_targ) {
1956 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1957 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1958 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1959 SVs_PADSTALE, SVs_PADSTALE);
1961 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1962 #ifndef USE_ITHREADS
1963 itervar = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1965 itervar = PL_comppad;
1969 GV * const gv = MUTABLE_GV(POPs);
1970 SV** svp = &GvSV(gv); /* symbol table variable */
1971 SAVEGENERICSV(*svp);
1974 itervar = (void *)gv;
1976 itervar = (void *)svp;
1980 if (PL_op->op_private & OPpITER_DEF)
1981 cxtype |= CXp_FOR_DEF;
1983 ENTER_with_name("loop2");
1985 PUSHBLOCK(cx, cxtype, SP);
1986 PUSHLOOP_FOR(cx, itervar, MARK);
1987 if (PL_op->op_flags & OPf_STACKED) {
1988 SV *maybe_ary = POPs;
1989 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1991 SV * const right = maybe_ary;
1994 if (RANGE_IS_NUMERIC(sv,right)) {
1995 cx->cx_type &= ~CXTYPEMASK;
1996 cx->cx_type |= CXt_LOOP_LAZYIV;
1997 /* Make sure that no-one re-orders cop.h and breaks our
1999 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2000 #ifdef NV_PRESERVES_UV
2001 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
2002 (SvNV(sv) > (NV)IV_MAX)))
2004 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
2005 (SvNV(right) < (NV)IV_MIN))))
2007 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
2010 ((SvUV(sv) > (UV)IV_MAX) ||
2011 (SvNV(sv) > (NV)UV_MAX)))))
2013 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
2015 ((SvNV(right) > 0) &&
2016 ((SvUV(right) > (UV)IV_MAX) ||
2017 (SvNV(right) > (NV)UV_MAX))))))
2019 DIE(aTHX_ "Range iterator outside integer range");
2020 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2021 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2023 /* for correct -Dstv display */
2024 cx->blk_oldsp = sp - PL_stack_base;
2028 cx->cx_type &= ~CXTYPEMASK;
2029 cx->cx_type |= CXt_LOOP_LAZYSV;
2030 /* Make sure that no-one re-orders cop.h and breaks our
2032 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2033 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2034 cx->blk_loop.state_u.lazysv.end = right;
2035 SvREFCNT_inc(right);
2036 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2037 /* This will do the upgrade to SVt_PV, and warn if the value
2038 is uninitialised. */
2039 (void) SvPV_nolen_const(right);
2040 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2041 to replace !SvOK() with a pointer to "". */
2043 SvREFCNT_dec(right);
2044 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2048 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2049 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2050 SvREFCNT_inc(maybe_ary);
2051 cx->blk_loop.state_u.ary.ix =
2052 (PL_op->op_private & OPpITER_REVERSED) ?
2053 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2057 else { /* iterating over items on the stack */
2058 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2059 if (PL_op->op_private & OPpITER_REVERSED) {
2060 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2063 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2073 register PERL_CONTEXT *cx;
2074 const I32 gimme = GIMME_V;
2076 ENTER_with_name("loop1");
2078 ENTER_with_name("loop2");
2080 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2081 PUSHLOOP_PLAIN(cx, SP);
2089 register PERL_CONTEXT *cx;
2096 assert(CxTYPE_is_LOOP(cx));
2098 newsp = PL_stack_base + cx->blk_loop.resetsp;
2101 if (gimme == G_VOID)
2103 else if (gimme == G_SCALAR) {
2105 *++newsp = sv_mortalcopy(*SP);
2107 *++newsp = &PL_sv_undef;
2111 *++newsp = sv_mortalcopy(*++mark);
2112 TAINT_NOT; /* Each item is independent */
2118 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2119 PL_curpm = newpm; /* ... and pop $1 et al */
2121 LEAVE_with_name("loop2");
2122 LEAVE_with_name("loop1");
2130 register PERL_CONTEXT *cx;
2131 bool popsub2 = FALSE;
2132 bool clear_errsv = FALSE;
2141 const I32 cxix = dopoptosub(cxstack_ix);
2144 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2145 * sort block, which is a CXt_NULL
2148 PL_stack_base[1] = *PL_stack_sp;
2149 PL_stack_sp = PL_stack_base + 1;
2153 DIE(aTHX_ "Can't return outside a subroutine");
2155 if (cxix < cxstack_ix)
2158 if (CxMULTICALL(&cxstack[cxix])) {
2159 gimme = cxstack[cxix].blk_gimme;
2160 if (gimme == G_VOID)
2161 PL_stack_sp = PL_stack_base;
2162 else if (gimme == G_SCALAR) {
2163 PL_stack_base[1] = *PL_stack_sp;
2164 PL_stack_sp = PL_stack_base + 1;
2170 switch (CxTYPE(cx)) {
2173 retop = cx->blk_sub.retop;
2174 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2177 if (!(PL_in_eval & EVAL_KEEPERR))
2180 namesv = cx->blk_eval.old_namesv;
2181 retop = cx->blk_eval.retop;
2185 if (optype == OP_REQUIRE &&
2186 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2188 /* Unassume the success we assumed earlier. */
2189 (void)hv_delete(GvHVn(PL_incgv),
2190 SvPVX_const(namesv), SvCUR(namesv),
2192 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2197 retop = cx->blk_sub.retop;
2200 DIE(aTHX_ "panic: return");
2204 if (gimme == G_SCALAR) {
2207 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2209 *++newsp = SvREFCNT_inc(*SP);
2214 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2216 *++newsp = sv_mortalcopy(sv);
2221 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2224 *++newsp = sv_mortalcopy(*SP);
2227 *++newsp = &PL_sv_undef;
2229 else if (gimme == G_ARRAY) {
2230 while (++MARK <= SP) {
2231 *++newsp = (popsub2 && SvTEMP(*MARK))
2232 ? *MARK : sv_mortalcopy(*MARK);
2233 TAINT_NOT; /* Each item is independent */
2236 PL_stack_sp = newsp;
2239 /* Stack values are safe: */
2242 POPSUB(cx,sv); /* release CV and @_ ... */
2246 PL_curpm = newpm; /* ... and pop $1 et al */
2259 register PERL_CONTEXT *cx;
2270 if (PL_op->op_flags & OPf_SPECIAL) {
2271 cxix = dopoptoloop(cxstack_ix);
2273 DIE(aTHX_ "Can't \"last\" outside a loop block");
2276 cxix = dopoptolabel(cPVOP->op_pv);
2278 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2280 if (cxix < cxstack_ix)
2284 cxstack_ix++; /* temporarily protect top context */
2286 switch (CxTYPE(cx)) {
2287 case CXt_LOOP_LAZYIV:
2288 case CXt_LOOP_LAZYSV:
2290 case CXt_LOOP_PLAIN:
2292 newsp = PL_stack_base + cx->blk_loop.resetsp;
2293 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2297 nextop = cx->blk_sub.retop;
2301 nextop = cx->blk_eval.retop;
2305 nextop = cx->blk_sub.retop;
2308 DIE(aTHX_ "panic: last");
2312 if (gimme == G_SCALAR) {
2314 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2315 ? *SP : sv_mortalcopy(*SP);
2317 *++newsp = &PL_sv_undef;
2319 else if (gimme == G_ARRAY) {
2320 while (++MARK <= SP) {
2321 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2322 ? *MARK : sv_mortalcopy(*MARK);
2323 TAINT_NOT; /* Each item is independent */
2331 /* Stack values are safe: */
2333 case CXt_LOOP_LAZYIV:
2334 case CXt_LOOP_PLAIN:
2335 case CXt_LOOP_LAZYSV:
2337 POPLOOP(cx); /* release loop vars ... */
2341 POPSUB(cx,sv); /* release CV and @_ ... */
2344 PL_curpm = newpm; /* ... and pop $1 et al */
2347 PERL_UNUSED_VAR(optype);
2348 PERL_UNUSED_VAR(gimme);
2356 register PERL_CONTEXT *cx;
2359 if (PL_op->op_flags & OPf_SPECIAL) {
2360 cxix = dopoptoloop(cxstack_ix);
2362 DIE(aTHX_ "Can't \"next\" outside a loop block");
2365 cxix = dopoptolabel(cPVOP->op_pv);
2367 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2369 if (cxix < cxstack_ix)
2372 /* clear off anything above the scope we're re-entering, but
2373 * save the rest until after a possible continue block */
2374 inner = PL_scopestack_ix;
2376 if (PL_scopestack_ix < inner)
2377 leave_scope(PL_scopestack[PL_scopestack_ix]);
2378 PL_curcop = cx->blk_oldcop;
2379 return (cx)->blk_loop.my_op->op_nextop;
2386 register PERL_CONTEXT *cx;
2390 if (PL_op->op_flags & OPf_SPECIAL) {
2391 cxix = dopoptoloop(cxstack_ix);
2393 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2396 cxix = dopoptolabel(cPVOP->op_pv);
2398 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2400 if (cxix < cxstack_ix)
2403 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2404 if (redo_op->op_type == OP_ENTER) {
2405 /* pop one less context to avoid $x being freed in while (my $x..) */
2407 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2408 redo_op = redo_op->op_next;
2412 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2413 LEAVE_SCOPE(oldsave);
2415 PL_curcop = cx->blk_oldcop;
2420 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2424 static const char too_deep[] = "Target of goto is too deeply nested";
2426 PERL_ARGS_ASSERT_DOFINDLABEL;
2429 Perl_croak(aTHX_ too_deep);
2430 if (o->op_type == OP_LEAVE ||
2431 o->op_type == OP_SCOPE ||
2432 o->op_type == OP_LEAVELOOP ||
2433 o->op_type == OP_LEAVESUB ||
2434 o->op_type == OP_LEAVETRY)
2436 *ops++ = cUNOPo->op_first;
2438 Perl_croak(aTHX_ too_deep);
2441 if (o->op_flags & OPf_KIDS) {
2443 /* First try all the kids at this level, since that's likeliest. */
2444 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2445 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2446 const char *kid_label = CopLABEL(kCOP);
2447 if (kid_label && strEQ(kid_label, label))
2451 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2452 if (kid == PL_lastgotoprobe)
2454 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2457 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2458 ops[-1]->op_type == OP_DBSTATE)
2463 if ((o = dofindlabel(kid, label, ops, oplimit)))
2476 register PERL_CONTEXT *cx;
2477 #define GOTO_DEPTH 64
2478 OP *enterops[GOTO_DEPTH];
2479 const char *label = NULL;
2480 const bool do_dump = (PL_op->op_type == OP_DUMP);
2481 static const char must_have_label[] = "goto must have label";
2483 if (PL_op->op_flags & OPf_STACKED) {
2484 SV * const sv = POPs;
2486 /* This egregious kludge implements goto &subroutine */
2487 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2489 register PERL_CONTEXT *cx;
2490 CV *cv = MUTABLE_CV(SvRV(sv));
2497 if (!CvROOT(cv) && !CvXSUB(cv)) {
2498 const GV * const gv = CvGV(cv);
2502 /* autoloaded stub? */
2503 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2505 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2506 GvNAMELEN(gv), FALSE);
2507 if (autogv && (cv = GvCV(autogv)))
2509 tmpstr = sv_newmortal();
2510 gv_efullname3(tmpstr, gv, NULL);
2511 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2513 DIE(aTHX_ "Goto undefined subroutine");
2516 /* First do some returnish stuff. */
2517 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2519 cxix = dopoptosub(cxstack_ix);
2521 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2522 if (cxix < cxstack_ix)
2526 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2527 if (CxTYPE(cx) == CXt_EVAL) {
2529 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2531 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2533 else if (CxMULTICALL(cx))
2534 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2535 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2536 /* put @_ back onto stack */
2537 AV* av = cx->blk_sub.argarray;
2539 items = AvFILLp(av) + 1;
2540 EXTEND(SP, items+1); /* @_ could have been extended. */
2541 Copy(AvARRAY(av), SP + 1, items, SV*);
2542 SvREFCNT_dec(GvAV(PL_defgv));
2543 GvAV(PL_defgv) = cx->blk_sub.savearray;
2545 /* abandon @_ if it got reified */
2550 av_extend(av, items-1);
2552 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2555 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2556 AV* const av = GvAV(PL_defgv);
2557 items = AvFILLp(av) + 1;
2558 EXTEND(SP, items+1); /* @_ could have been extended. */
2559 Copy(AvARRAY(av), SP + 1, items, SV*);
2563 if (CxTYPE(cx) == CXt_SUB &&
2564 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2565 SvREFCNT_dec(cx->blk_sub.cv);
2566 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2567 LEAVE_SCOPE(oldsave);
2569 /* Now do some callish stuff. */
2571 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2573 OP* const retop = cx->blk_sub.retop;
2578 for (index=0; index<items; index++)
2579 sv_2mortal(SP[-index]);
2582 /* XS subs don't have a CxSUB, so pop it */
2583 POPBLOCK(cx, PL_curpm);
2584 /* Push a mark for the start of arglist */
2587 (void)(*CvXSUB(cv))(aTHX_ cv);
2592 AV* const padlist = CvPADLIST(cv);
2593 if (CxTYPE(cx) == CXt_EVAL) {
2594 PL_in_eval = CxOLD_IN_EVAL(cx);
2595 PL_eval_root = cx->blk_eval.old_eval_root;
2596 cx->cx_type = CXt_SUB;
2598 cx->blk_sub.cv = cv;
2599 cx->blk_sub.olddepth = CvDEPTH(cv);
2602 if (CvDEPTH(cv) < 2)
2603 SvREFCNT_inc_simple_void_NN(cv);
2605 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2606 sub_crush_depth(cv);
2607 pad_push(padlist, CvDEPTH(cv));
2610 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2613 AV *const av = MUTABLE_AV(PAD_SVl(0));
2615 cx->blk_sub.savearray = GvAV(PL_defgv);
2616 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2617 CX_CURPAD_SAVE(cx->blk_sub);
2618 cx->blk_sub.argarray = av;
2620 if (items >= AvMAX(av) + 1) {
2621 SV **ary = AvALLOC(av);
2622 if (AvARRAY(av) != ary) {
2623 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2626 if (items >= AvMAX(av) + 1) {
2627 AvMAX(av) = items - 1;
2628 Renew(ary,items+1,SV*);
2634 Copy(mark,AvARRAY(av),items,SV*);
2635 AvFILLp(av) = items - 1;
2636 assert(!AvREAL(av));
2638 /* transfer 'ownership' of refcnts to new @_ */
2648 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2649 Perl_get_db_sub(aTHX_ NULL, cv);
2651 CV * const gotocv = get_cvs("DB::goto", 0);
2653 PUSHMARK( PL_stack_sp );
2654 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2659 RETURNOP(CvSTART(cv));
2663 label = SvPV_nolen_const(sv);
2664 if (!(do_dump || *label))
2665 DIE(aTHX_ must_have_label);
2668 else if (PL_op->op_flags & OPf_SPECIAL) {
2670 DIE(aTHX_ must_have_label);
2673 label = cPVOP->op_pv;
2677 if (label && *label) {
2678 OP *gotoprobe = NULL;
2679 bool leaving_eval = FALSE;
2680 bool in_block = FALSE;
2681 PERL_CONTEXT *last_eval_cx = NULL;
2685 PL_lastgotoprobe = NULL;
2687 for (ix = cxstack_ix; ix >= 0; ix--) {
2689 switch (CxTYPE(cx)) {
2691 leaving_eval = TRUE;
2692 if (!CxTRYBLOCK(cx)) {
2693 gotoprobe = (last_eval_cx ?
2694 last_eval_cx->blk_eval.old_eval_root :
2699 /* else fall through */
2700 case CXt_LOOP_LAZYIV:
2701 case CXt_LOOP_LAZYSV:
2703 case CXt_LOOP_PLAIN:
2706 gotoprobe = cx->blk_oldcop->op_sibling;
2712 gotoprobe = cx->blk_oldcop->op_sibling;
2715 gotoprobe = PL_main_root;
2718 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2719 gotoprobe = CvROOT(cx->blk_sub.cv);
2725 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2728 DIE(aTHX_ "panic: goto");
2729 gotoprobe = PL_main_root;
2733 retop = dofindlabel(gotoprobe, label,
2734 enterops, enterops + GOTO_DEPTH);
2738 PL_lastgotoprobe = gotoprobe;
2741 DIE(aTHX_ "Can't find label %s", label);
2743 /* if we're leaving an eval, check before we pop any frames
2744 that we're not going to punt, otherwise the error
2747 if (leaving_eval && *enterops && enterops[1]) {
2749 for (i = 1; enterops[i]; i++)
2750 if (enterops[i]->op_type == OP_ENTERITER)
2751 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2754 if (*enterops && enterops[1]) {
2755 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2757 deprecate("\"goto\" to jump into a construct");
2760 /* pop unwanted frames */
2762 if (ix < cxstack_ix) {
2769 oldsave = PL_scopestack[PL_scopestack_ix];
2770 LEAVE_SCOPE(oldsave);
2773 /* push wanted frames */
2775 if (*enterops && enterops[1]) {
2776 OP * const oldop = PL_op;
2777 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2778 for (; enterops[ix]; ix++) {
2779 PL_op = enterops[ix];
2780 /* Eventually we may want to stack the needed arguments
2781 * for each op. For now, we punt on the hard ones. */
2782 if (PL_op->op_type == OP_ENTERITER)
2783 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2784 PL_op->op_ppaddr(aTHX);
2792 if (!retop) retop = PL_main_start;
2794 PL_restartop = retop;
2795 PL_do_undump = TRUE;
2799 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2800 PL_do_undump = FALSE;
2817 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2819 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2822 PL_exit_flags |= PERL_EXIT_EXPECTED;
2824 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2825 if (anum || !(PL_minus_c && PL_madskills))
2830 PUSHs(&PL_sv_undef);
2837 S_save_lines(pTHX_ AV *array, SV *sv)
2839 const char *s = SvPVX_const(sv);
2840 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2843 PERL_ARGS_ASSERT_SAVE_LINES;
2845 while (s && s < send) {
2847 SV * const tmpstr = newSV_type(SVt_PVMG);
2849 t = (const char *)memchr(s, '\n', send - s);
2855 sv_setpvn(tmpstr, s, t - s);
2856 av_store(array, line++, tmpstr);
2864 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
2866 0 is used as continue inside eval,
2868 3 is used for a die caught by an inner eval - continue inner loop
2870 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
2871 establish a local jmpenv to handle exception traps.
2876 S_docatch(pTHX_ OP *o)
2880 OP * const oldop = PL_op;
2884 assert(CATCH_GET == TRUE);
2891 assert(cxstack_ix >= 0);
2892 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2893 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2898 /* die caught by an inner eval - continue inner loop */
2899 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
2900 PL_restartjmpenv = NULL;
2901 PL_op = PL_restartop;
2917 /* James Bond: Do you expect me to talk?
2918 Auric Goldfinger: No, Mr. Bond. I expect you to die.
2920 This code is an ugly hack, doesn't work with lexicals in subroutines that are
2921 called more than once, and is only used by regcomp.c, for (?{}) blocks.
2923 Currently it is not used outside the core code. Best if it stays that way.
2926 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2927 /* sv Text to convert to OP tree. */
2928 /* startop op_free() this to undo. */
2929 /* code Short string id of the caller. */
2931 dVAR; dSP; /* Make POPBLOCK work. */
2937 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2938 char *tmpbuf = tbuf;
2941 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2945 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2947 ENTER_with_name("eval");
2948 lex_start(sv, NULL, FALSE);
2950 /* switch to eval mode */
2952 if (IN_PERL_COMPILETIME) {
2953 SAVECOPSTASH_FREE(&PL_compiling);
2954 CopSTASH_set(&PL_compiling, PL_curstash);
2956 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2957 SV * const sv = sv_newmortal();
2958 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2959 code, (unsigned long)++PL_evalseq,
2960 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2965 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2966 (unsigned long)++PL_evalseq);
2967 SAVECOPFILE_FREE(&PL_compiling);
2968 CopFILE_set(&PL_compiling, tmpbuf+2);
2969 SAVECOPLINE(&PL_compiling);
2970 CopLINE_set(&PL_compiling, 1);
2971 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2972 deleting the eval's FILEGV from the stash before gv_check() runs
2973 (i.e. before run-time proper). To work around the coredump that
2974 ensues, we always turn GvMULTI_on for any globals that were
2975 introduced within evals. See force_ident(). GSAR 96-10-12 */
2976 safestr = savepvn(tmpbuf, len);
2977 SAVEDELETE(PL_defstash, safestr, len);
2979 #ifdef OP_IN_REGISTER
2985 /* we get here either during compilation, or via pp_regcomp at runtime */
2986 runtime = IN_PERL_RUNTIME;
2988 runcv = find_runcv(NULL);
2991 PL_op->op_type = OP_ENTEREVAL;
2992 PL_op->op_flags = 0; /* Avoid uninit warning. */
2993 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2995 need_catch = CATCH_GET;
2999 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3001 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3002 CATCH_SET(need_catch);
3003 POPBLOCK(cx,PL_curpm);
3006 (*startop)->op_type = OP_NULL;
3007 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3009 /* XXX DAPM do this properly one year */
3010 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3011 LEAVE_with_name("eval");
3012 if (IN_PERL_COMPILETIME)
3013 CopHINTS_set(&PL_compiling, PL_hints);
3014 #ifdef OP_IN_REGISTER
3017 PERL_UNUSED_VAR(newsp);
3018 PERL_UNUSED_VAR(optype);
3020 return PL_eval_start;
3025 =for apidoc find_runcv
3027 Locate the CV corresponding to the currently executing sub or eval.
3028 If db_seqp is non_null, skip CVs that are in the DB package and populate
3029 *db_seqp with the cop sequence number at the point that the DB:: code was
3030 entered. (allows debuggers to eval in the scope of the breakpoint rather
3031 than in the scope of the debugger itself).
3037 Perl_find_runcv(pTHX_ U32 *db_seqp)
3043 *db_seqp = PL_curcop->cop_seq;
3044 for (si = PL_curstackinfo; si; si = si->si_prev) {
3046 for (ix = si->si_cxix; ix >= 0; ix--) {
3047 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3048 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3049 CV * const cv = cx->blk_sub.cv;
3050 /* skip DB:: code */
3051 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3052 *db_seqp = cx->blk_oldcop->cop_seq;
3057 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3065 /* Run yyparse() in a setjmp wrapper. Returns:
3066 * 0: yyparse() successful
3067 * 1: yyparse() failed
3071 S_try_yyparse(pTHX_ int gramtype)
3076 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3080 ret = yyparse(gramtype) ? 1 : 0;
3094 /* Compile a require/do, an eval '', or a /(?{...})/.
3095 * In the last case, startop is non-null, and contains the address of
3096 * a pointer that should be set to the just-compiled code.
3097 * outside is the lexically enclosing CV (if any) that invoked us.
3098 * Returns a bool indicating whether the compile was successful; if so,
3099 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3100 * pushes undef (also croaks if startop != NULL).
3104 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3107 OP * const saveop = PL_op;
3108 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3111 PL_in_eval = (in_require
3112 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3117 SAVESPTR(PL_compcv);
3118 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3119 CvEVAL_on(PL_compcv);
3120 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3121 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3123 CvOUTSIDE_SEQ(PL_compcv) = seq;
3124 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3126 /* set up a scratch pad */
3128 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3129 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3133 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3135 /* make sure we compile in the right package */
3137 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3138 SAVESPTR(PL_curstash);
3139 PL_curstash = CopSTASH(PL_curcop);
3141 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3142 SAVESPTR(PL_beginav);
3143 PL_beginav = newAV();
3144 SAVEFREESV(PL_beginav);
3145 SAVESPTR(PL_unitcheckav);
3146 PL_unitcheckav = newAV();
3147 SAVEFREESV(PL_unitcheckav);
3150 SAVEBOOL(PL_madskills);
3154 /* try to compile it */
3156 PL_eval_root = NULL;
3157 PL_curcop = &PL_compiling;
3158 CopARYBASE_set(PL_curcop, 0);
3159 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3160 PL_in_eval |= EVAL_KEEPERR;
3164 CALL_BLOCK_HOOKS(eval, saveop);
3166 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3167 * so honour CATCH_GET and trap it here if necessary */
3169 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3171 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3172 SV **newsp; /* Used by POPBLOCK. */
3173 PERL_CONTEXT *cx = NULL;
3174 I32 optype; /* Used by POPEVAL. */
3178 PERL_UNUSED_VAR(newsp);
3179 PERL_UNUSED_VAR(optype);
3181 /* note that if yystatus == 3, then the EVAL CX block has already
3182 * been popped, and various vars restored */
3184 if (yystatus != 3) {
3186 op_free(PL_eval_root);
3187 PL_eval_root = NULL;
3189 SP = PL_stack_base + POPMARK; /* pop original mark */
3191 POPBLOCK(cx,PL_curpm);
3193 namesv = cx->blk_eval.old_namesv;
3198 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3200 msg = SvPVx_nolen_const(ERRSV);
3203 /* If cx is still NULL, it means that we didn't go in the
3204 * POPEVAL branch. */
3205 cx = &cxstack[cxstack_ix];
3206 assert(CxTYPE(cx) == CXt_EVAL);
3207 namesv = cx->blk_eval.old_namesv;
3209 (void)hv_store(GvHVn(PL_incgv),
3210 SvPVX_const(namesv), SvCUR(namesv),
3212 Perl_croak(aTHX_ "%sCompilation failed in require",
3213 *msg ? msg : "Unknown error\n");
3216 if (yystatus != 3) {
3217 POPBLOCK(cx,PL_curpm);
3220 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3221 (*msg ? msg : "Unknown error\n"));
3225 sv_setpvs(ERRSV, "Compilation error");
3228 PUSHs(&PL_sv_undef);
3232 CopLINE_set(&PL_compiling, 0);
3234 *startop = PL_eval_root;
3236 SAVEFREEOP(PL_eval_root);
3238 /* Set the context for this new optree.
3239 * Propagate the context from the eval(). */
3240 if ((gimme & G_WANT) == G_VOID)
3241 scalarvoid(PL_eval_root);
3242 else if ((gimme & G_WANT) == G_ARRAY)
3245 scalar(PL_eval_root);
3247 DEBUG_x(dump_eval());
3249 /* Register with debugger: */
3250 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3251 CV * const cv = get_cvs("DB::postponed", 0);
3255 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3257 call_sv(MUTABLE_SV(cv), G_DISCARD);
3262 call_list(PL_scopestack_ix, PL_unitcheckav);
3264 /* compiled okay, so do it */
3266 CvDEPTH(PL_compcv) = 1;
3267 SP = PL_stack_base + POPMARK; /* pop original mark */
3268 PL_op = saveop; /* The caller may need it. */
3269 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3276 S_check_type_and_open(pTHX_ const char *name)
3279 const int st_rc = PerlLIO_stat(name, &st);
3281 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3283 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3287 return PerlIO_open(name, PERL_SCRIPT_MODE);
3290 #ifndef PERL_DISABLE_PMC
3292 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3296 PERL_ARGS_ASSERT_DOOPEN_PM;
3298 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3299 SV *const pmcsv = newSV(namelen + 2);
3300 char *const pmc = SvPVX(pmcsv);
3303 memcpy(pmc, name, namelen);
3305 pmc[namelen + 1] = '\0';
3307 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3308 fp = check_type_and_open(name);
3311 fp = check_type_and_open(pmc);
3313 SvREFCNT_dec(pmcsv);
3316 fp = check_type_and_open(name);
3321 # define doopen_pm(name, namelen) check_type_and_open(name)
3322 #endif /* !PERL_DISABLE_PMC */
3327 register PERL_CONTEXT *cx;
3334 int vms_unixname = 0;
3336 const char *tryname = NULL;
3338 const I32 gimme = GIMME_V;
3339 int filter_has_file = 0;
3340 PerlIO *tryrsfp = NULL;
3341 SV *filter_cache = NULL;
3342 SV *filter_state = NULL;
3343 SV *filter_sub = NULL;
3349 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3350 sv = new_version(sv);
3351 if (!sv_derived_from(PL_patchlevel, "version"))
3352 upg_version(PL_patchlevel, TRUE);
3353 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3354 if ( vcmp(sv,PL_patchlevel) <= 0 )
3355 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3356 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3359 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3362 SV * const req = SvRV(sv);
3363 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3365 /* get the left hand term */
3366 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3368 first = SvIV(*av_fetch(lav,0,0));
3369 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3370 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3371 || av_len(lav) > 1 /* FP with > 3 digits */
3372 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3374 DIE(aTHX_ "Perl %"SVf" required--this is only "
3375 "%"SVf", stopped", SVfARG(vnormal(req)),
3376 SVfARG(vnormal(PL_patchlevel)));
3378 else { /* probably 'use 5.10' or 'use 5.8' */
3383 second = SvIV(*av_fetch(lav,1,0));
3385 second /= second >= 600 ? 100 : 10;
3386 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3387 (int)first, (int)second);
3388 upg_version(hintsv, TRUE);
3390 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3391 "--this is only %"SVf", stopped",
3392 SVfARG(vnormal(req)),
3393 SVfARG(vnormal(sv_2mortal(hintsv))),
3394 SVfARG(vnormal(PL_patchlevel)));
3399 /* We do this only with "use", not "require" or "no". */
3400 if (PL_compcv && !(cUNOP->op_first->op_private & OPpCONST_NOVER)) {
3401 /* If we request a version >= 5.9.5, load feature.pm with the
3402 * feature bundle that corresponds to the required version. */
3403 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3404 SV *const importsv = vnormal(sv);
3405 *SvPVX_mutable(importsv) = ':';
3406 ENTER_with_name("load_feature");
3407 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3408 LEAVE_with_name("load_feature");
3410 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3411 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3412 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
3418 name = SvPV_const(sv, len);
3419 if (!(name && len > 0 && *name))
3420 DIE(aTHX_ "Null filename used");
3421 TAINT_PROPER("require");
3425 /* The key in the %ENV hash is in the syntax of file passed as the argument
3426 * usually this is in UNIX format, but sometimes in VMS format, which
3427 * can result in a module being pulled in more than once.
3428 * To prevent this, the key must be stored in UNIX format if the VMS
3429 * name can be translated to UNIX.
3431 if ((unixname = tounixspec(name, NULL)) != NULL) {
3432 unixlen = strlen(unixname);
3438 /* if not VMS or VMS name can not be translated to UNIX, pass it
3441 unixname = (char *) name;
3444 if (PL_op->op_type == OP_REQUIRE) {
3445 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3446 unixname, unixlen, 0);
3448 if (*svp != &PL_sv_undef)
3451 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3452 "Compilation failed in require", unixname);
3456 /* prepare to compile file */
3458 if (path_is_absolute(name)) {
3460 tryrsfp = doopen_pm(name, len);
3463 AV * const ar = GvAVn(PL_incgv);
3469 namesv = newSV_type(SVt_PV);
3470 for (i = 0; i <= AvFILL(ar); i++) {
3471 SV * const dirsv = *av_fetch(ar, i, TRUE);
3473 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3480 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3481 && !sv_isobject(loader))
3483 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3486 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3487 PTR2UV(SvRV(dirsv)), name);
3488 tryname = SvPVX_const(namesv);
3491 ENTER_with_name("call_INC");
3499 if (sv_isobject(loader))
3500 count = call_method("INC", G_ARRAY);
3502 count = call_sv(loader, G_ARRAY);
3512 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3513 && !isGV_with_GP(SvRV(arg))) {
3514 filter_cache = SvRV(arg);
3515 SvREFCNT_inc_simple_void_NN(filter_cache);
3522 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3526 if (isGV_with_GP(arg)) {
3527 IO * const io = GvIO((const GV *)arg);
3532 tryrsfp = IoIFP(io);
3533 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3534 PerlIO_close(IoOFP(io));
3545 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3547 SvREFCNT_inc_simple_void_NN(filter_sub);
3550 filter_state = SP[i];
3551 SvREFCNT_inc_simple_void(filter_state);
3555 if (!tryrsfp && (filter_cache || filter_sub)) {
3556 tryrsfp = PerlIO_open(BIT_BUCKET,
3564 LEAVE_with_name("call_INC");
3566 /* Adjust file name if the hook has set an %INC entry.
3567 This needs to happen after the FREETMPS above. */
3568 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3570 tryname = SvPV_nolen_const(*svp);
3577 filter_has_file = 0;
3579 SvREFCNT_dec(filter_cache);
3580 filter_cache = NULL;
3583 SvREFCNT_dec(filter_state);
3584 filter_state = NULL;
3587 SvREFCNT_dec(filter_sub);
3592 if (!path_is_absolute(name)
3598 dir = SvPV_const(dirsv, dirlen);
3606 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3608 sv_setpv(namesv, unixdir);
3609 sv_catpv(namesv, unixname);
3611 # ifdef __SYMBIAN32__
3612 if (PL_origfilename[0] &&
3613 PL_origfilename[1] == ':' &&
3614 !(dir[0] && dir[1] == ':'))
3615 Perl_sv_setpvf(aTHX_ namesv,
3620 Perl_sv_setpvf(aTHX_ namesv,
3624 /* The equivalent of
3625 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3626 but without the need to parse the format string, or
3627 call strlen on either pointer, and with the correct
3628 allocation up front. */
3630 char *tmp = SvGROW(namesv, dirlen + len + 2);
3632 memcpy(tmp, dir, dirlen);
3635 /* name came from an SV, so it will have a '\0' at the
3636 end that we can copy as part of this memcpy(). */
3637 memcpy(tmp, name, len + 1);
3639 SvCUR_set(namesv, dirlen + len + 1);
3641 /* Don't even actually have to turn SvPOK_on() as we
3642 access it directly with SvPVX() below. */
3646 TAINT_PROPER("require");
3647 tryname = SvPVX_const(namesv);
3648 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3650 if (tryname[0] == '.' && tryname[1] == '/') {
3652 while (*++tryname == '/');
3656 else if (errno == EMFILE)
3657 /* no point in trying other paths if out of handles */
3665 SAVECOPFILE_FREE(&PL_compiling);
3666 CopFILE_set(&PL_compiling, tryname);
3668 SvREFCNT_dec(namesv);
3670 if (PL_op->op_type == OP_REQUIRE) {
3671 if(errno == EMFILE) {
3672 /* diag_listed_as: Can't locate %s */
3673 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
3675 if (namesv) { /* did we lookup @INC? */
3676 AV * const ar = GvAVn(PL_incgv);
3678 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3679 for (i = 0; i <= AvFILL(ar); i++) {
3680 sv_catpvs(inc, " ");
3681 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3684 /* diag_listed_as: Can't locate %s */
3686 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3688 (memEQ(name + len - 2, ".h", 3)
3689 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3690 (memEQ(name + len - 3, ".ph", 4)
3691 ? " (did you run h2ph?)" : ""),
3696 DIE(aTHX_ "Can't locate %s", name);
3702 SETERRNO(0, SS_NORMAL);
3704 /* Assume success here to prevent recursive requirement. */
3705 /* name is never assigned to again, so len is still strlen(name) */
3706 /* Check whether a hook in @INC has already filled %INC */
3708 (void)hv_store(GvHVn(PL_incgv),
3709 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3711 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3713 (void)hv_store(GvHVn(PL_incgv),
3714 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3717 ENTER_with_name("eval");
3719 lex_start(NULL, tryrsfp, TRUE);
3723 hv_clear(GvHV(PL_hintgv));
3725 SAVECOMPILEWARNINGS();
3726 if (PL_dowarn & G_WARN_ALL_ON)
3727 PL_compiling.cop_warnings = pWARN_ALL ;
3728 else if (PL_dowarn & G_WARN_ALL_OFF)
3729 PL_compiling.cop_warnings = pWARN_NONE ;
3731 PL_compiling.cop_warnings = pWARN_STD ;
3733 if (filter_sub || filter_cache) {
3734 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3735 than hanging another SV from it. In turn, filter_add() optionally
3736 takes the SV to use as the filter (or creates a new SV if passed
3737 NULL), so simply pass in whatever value filter_cache has. */
3738 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3739 IoLINES(datasv) = filter_has_file;
3740 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3741 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3744 /* switch to eval mode */
3745 PUSHBLOCK(cx, CXt_EVAL, SP);
3747 cx->blk_eval.retop = PL_op->op_next;
3749 SAVECOPLINE(&PL_compiling);
3750 CopLINE_set(&PL_compiling, 0);
3754 /* Store and reset encoding. */
3755 encoding = PL_encoding;
3758 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3759 op = DOCATCH(PL_eval_start);
3761 op = PL_op->op_next;
3763 /* Restore encoding. */
3764 PL_encoding = encoding;
3769 /* This is a op added to hold the hints hash for
3770 pp_entereval. The hash can be modified by the code
3771 being eval'ed, so we return a copy instead. */
3777 mXPUSHs(MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ MUTABLE_HV(cSVOP_sv))));
3785 register PERL_CONTEXT *cx;
3787 const I32 gimme = GIMME_V;
3788 const U32 was = PL_breakable_sub_gen;
3789 char tbuf[TYPE_DIGITS(long) + 12];
3790 char *tmpbuf = tbuf;
3794 HV *saved_hh = NULL;
3796 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3797 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3801 /* make sure we've got a plain PV (no overload etc) before testing
3802 * for taint. Making a copy here is probably overkill, but better
3803 * safe than sorry */
3805 const char * const p = SvPV_const(sv, len);
3807 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
3810 TAINT_IF(SvTAINTED(sv));
3811 TAINT_PROPER("eval");
3813 ENTER_with_name("eval");
3814 lex_start(sv, NULL, FALSE);
3817 /* switch to eval mode */
3819 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3820 SV * const temp_sv = sv_newmortal();
3821 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3822 (unsigned long)++PL_evalseq,
3823 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3824 tmpbuf = SvPVX(temp_sv);
3825 len = SvCUR(temp_sv);
3828 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3829 SAVECOPFILE_FREE(&PL_compiling);
3830 CopFILE_set(&PL_compiling, tmpbuf+2);
3831 SAVECOPLINE(&PL_compiling);
3832 CopLINE_set(&PL_compiling, 1);
3833 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3834 deleting the eval's FILEGV from the stash before gv_check() runs
3835 (i.e. before run-time proper). To work around the coredump that
3836 ensues, we always turn GvMULTI_on for any globals that were
3837 introduced within evals. See force_ident(). GSAR 96-10-12 */
3839 PL_hints = PL_op->op_targ;
3841 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3842 SvREFCNT_dec(GvHV(PL_hintgv));
3843 GvHV(PL_hintgv) = saved_hh;
3845 SAVECOMPILEWARNINGS();
3846 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3847 if (PL_compiling.cop_hints_hash) {
3848 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3850 if (Perl_fetch_cop_label(aTHX_ PL_curcop, NULL, NULL)) {
3851 /* The label, if present, is the first entry on the chain. So rather
3852 than writing a blank label in front of it (which involves an
3853 allocation), just use the next entry in the chain. */
3854 PL_compiling.cop_hints_hash
3855 = PL_curcop->cop_hints_hash->refcounted_he_next;
3856 /* Check the assumption that this removed the label. */
3857 assert(Perl_fetch_cop_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3860 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3861 if (PL_compiling.cop_hints_hash) {
3863 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3864 HINTS_REFCNT_UNLOCK;
3866 /* special case: an eval '' executed within the DB package gets lexically
3867 * placed in the first non-DB CV rather than the current CV - this
3868 * allows the debugger to execute code, find lexicals etc, in the
3869 * scope of the code being debugged. Passing &seq gets find_runcv
3870 * to do the dirty work for us */
3871 runcv = find_runcv(&seq);
3873 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3875 cx->blk_eval.retop = PL_op->op_next;
3877 /* prepare to compile string */
3879 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3880 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3883 if (doeval(gimme, NULL, runcv, seq)) {
3884 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3885 ? (PERLDB_LINE || PERLDB_SAVESRC)
3886 : PERLDB_SAVESRC_NOSUBS) {
3887 /* Retain the filegv we created. */
3889 char *const safestr = savepvn(tmpbuf, len);
3890 SAVEDELETE(PL_defstash, safestr, len);
3892 return DOCATCH(PL_eval_start);
3894 /* We have already left the scope set up earler thanks to the LEAVE
3896 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3897 ? (PERLDB_LINE || PERLDB_SAVESRC)
3898 : PERLDB_SAVESRC_INVALID) {
3899 /* Retain the filegv we created. */
3901 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3903 return PL_op->op_next;
3914 register PERL_CONTEXT *cx;
3916 const U8 save_flags = PL_op -> op_flags;
3922 namesv = cx->blk_eval.old_namesv;
3923 retop = cx->blk_eval.retop;
3926 if (gimme == G_VOID)
3928 else if (gimme == G_SCALAR) {
3931 if (SvFLAGS(TOPs) & SVs_TEMP)
3934 *MARK = sv_mortalcopy(TOPs);
3938 *MARK = &PL_sv_undef;
3943 /* in case LEAVE wipes old return values */
3944 for (mark = newsp + 1; mark <= SP; mark++) {
3945 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3946 *mark = sv_mortalcopy(*mark);
3947 TAINT_NOT; /* Each item is independent */
3951 PL_curpm = newpm; /* Don't pop $1 et al till now */
3954 assert(CvDEPTH(PL_compcv) == 1);
3956 CvDEPTH(PL_compcv) = 0;
3959 if (optype == OP_REQUIRE &&
3960 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3962 /* Unassume the success we assumed earlier. */
3963 (void)hv_delete(GvHVn(PL_incgv),
3964 SvPVX_const(namesv), SvCUR(namesv),
3966 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
3968 /* die_unwind() did LEAVE, or we won't be here */
3971 LEAVE_with_name("eval");
3972 if (!(save_flags & OPf_SPECIAL)) {
3980 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3981 close to the related Perl_create_eval_scope. */
3983 Perl_delete_eval_scope(pTHX)
3988 register PERL_CONTEXT *cx;
3994 LEAVE_with_name("eval_scope");
3995 PERL_UNUSED_VAR(newsp);
3996 PERL_UNUSED_VAR(gimme);
3997 PERL_UNUSED_VAR(optype);
4000 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4001 also needed by Perl_fold_constants. */
4003 Perl_create_eval_scope(pTHX_ U32 flags)
4006 const I32 gimme = GIMME_V;
4008 ENTER_with_name("eval_scope");
4011 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4014 PL_in_eval = EVAL_INEVAL;
4015 if (flags & G_KEEPERR)
4016 PL_in_eval |= EVAL_KEEPERR;
4019 if (flags & G_FAKINGEVAL) {
4020 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4028 PERL_CONTEXT * const cx = create_eval_scope(0);
4029 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4030 return DOCATCH(PL_op->op_next);
4039 register PERL_CONTEXT *cx;
4044 PERL_UNUSED_VAR(optype);
4047 if (gimme == G_VOID)
4049 else if (gimme == G_SCALAR) {
4053 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4056 *MARK = sv_mortalcopy(TOPs);
4060 *MARK = &PL_sv_undef;
4065 /* in case LEAVE wipes old return values */
4067 for (mark = newsp + 1; mark <= SP; mark++) {
4068 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4069 *mark = sv_mortalcopy(*mark);
4070 TAINT_NOT; /* Each item is independent */
4074 PL_curpm = newpm; /* Don't pop $1 et al till now */
4076 LEAVE_with_name("eval_scope");
4084 register PERL_CONTEXT *cx;
4085 const I32 gimme = GIMME_V;
4087 ENTER_with_name("given");
4090 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
4092 PUSHBLOCK(cx, CXt_GIVEN, SP);
4101 register PERL_CONTEXT *cx;
4105 PERL_UNUSED_CONTEXT;
4108 assert(CxTYPE(cx) == CXt_GIVEN);
4111 if (gimme == G_VOID)
4113 else if (gimme == G_SCALAR) {
4117 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4120 *MARK = sv_mortalcopy(TOPs);
4124 *MARK = &PL_sv_undef;
4129 /* in case LEAVE wipes old return values */
4131 for (mark = newsp + 1; mark <= SP; mark++) {
4132 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4133 *mark = sv_mortalcopy(*mark);
4134 TAINT_NOT; /* Each item is independent */
4138 PL_curpm = newpm; /* Don't pop $1 et al till now */
4140 LEAVE_with_name("given");
4144 /* Helper routines used by pp_smartmatch */
4146 S_make_matcher(pTHX_ REGEXP *re)
4149 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4151 PERL_ARGS_ASSERT_MAKE_MATCHER;
4153 PM_SETRE(matcher, ReREFCNT_inc(re));
4155 SAVEFREEOP((OP *) matcher);
4156 ENTER_with_name("matcher"); SAVETMPS;
4162 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4167 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4169 PL_op = (OP *) matcher;
4174 return (SvTRUEx(POPs));
4178 S_destroy_matcher(pTHX_ PMOP *matcher)
4182 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4183 PERL_UNUSED_ARG(matcher);
4186 LEAVE_with_name("matcher");
4189 /* Do a smart match */
4192 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4193 return do_smartmatch(NULL, NULL);
4196 /* This version of do_smartmatch() implements the
4197 * table of smart matches that is found in perlsyn.
4200 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4205 bool object_on_left = FALSE;
4206 SV *e = TOPs; /* e is for 'expression' */
4207 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4209 /* Take care only to invoke mg_get() once for each argument.
4210 * Currently we do this by copying the SV if it's magical. */
4213 d = sv_mortalcopy(d);
4220 e = sv_mortalcopy(e);
4222 /* First of all, handle overload magic of the rightmost argument */
4225 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4226 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4228 tmpsv = amagic_call(d, e, smart_amg, 0);
4235 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4238 SP -= 2; /* Pop the values */
4243 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4250 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4251 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4252 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4254 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4255 object_on_left = TRUE;
4258 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4260 if (object_on_left) {
4261 goto sm_any_sub; /* Treat objects like scalars */
4263 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4264 /* Test sub truth for each key */
4266 bool andedresults = TRUE;
4267 HV *hv = (HV*) SvRV(d);
4268 I32 numkeys = hv_iterinit(hv);
4269 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4272 while ( (he = hv_iternext(hv)) ) {
4273 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4274 ENTER_with_name("smartmatch_hash_key_test");
4277 PUSHs(hv_iterkeysv(he));
4279 c = call_sv(e, G_SCALAR);
4282 andedresults = FALSE;
4284 andedresults = SvTRUEx(POPs) && andedresults;
4286 LEAVE_with_name("smartmatch_hash_key_test");
4293 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4294 /* Test sub truth for each element */
4296 bool andedresults = TRUE;
4297 AV *av = (AV*) SvRV(d);
4298 const I32 len = av_len(av);
4299 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4302 for (i = 0; i <= len; ++i) {
4303 SV * const * const svp = av_fetch(av, i, FALSE);
4304 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4305 ENTER_with_name("smartmatch_array_elem_test");
4311 c = call_sv(e, G_SCALAR);
4314 andedresults = FALSE;
4316 andedresults = SvTRUEx(POPs) && andedresults;
4318 LEAVE_with_name("smartmatch_array_elem_test");
4327 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4328 ENTER_with_name("smartmatch_coderef");
4333 c = call_sv(e, G_SCALAR);
4337 else if (SvTEMP(TOPs))
4338 SvREFCNT_inc_void(TOPs);
4340 LEAVE_with_name("smartmatch_coderef");
4345 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4346 if (object_on_left) {
4347 goto sm_any_hash; /* Treat objects like scalars */
4349 else if (!SvOK(d)) {
4350 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4353 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4354 /* Check that the key-sets are identical */
4356 HV *other_hv = MUTABLE_HV(SvRV(d));
4358 bool other_tied = FALSE;
4359 U32 this_key_count = 0,
4360 other_key_count = 0;
4361 HV *hv = MUTABLE_HV(SvRV(e));
4363 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4364 /* Tied hashes don't know how many keys they have. */
4365 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4368 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4369 HV * const temp = other_hv;
4374 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4377 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4380 /* The hashes have the same number of keys, so it suffices
4381 to check that one is a subset of the other. */
4382 (void) hv_iterinit(hv);
4383 while ( (he = hv_iternext(hv)) ) {
4384 SV *key = hv_iterkeysv(he);
4386 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4389 if(!hv_exists_ent(other_hv, key, 0)) {
4390 (void) hv_iterinit(hv); /* reset iterator */
4396 (void) hv_iterinit(other_hv);
4397 while ( hv_iternext(other_hv) )
4401 other_key_count = HvUSEDKEYS(other_hv);
4403 if (this_key_count != other_key_count)
4408 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4409 AV * const other_av = MUTABLE_AV(SvRV(d));
4410 const I32 other_len = av_len(other_av) + 1;
4412 HV *hv = MUTABLE_HV(SvRV(e));
4414 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4415 for (i = 0; i < other_len; ++i) {
4416 SV ** const svp = av_fetch(other_av, i, FALSE);
4417 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4418 if (svp) { /* ??? When can this not happen? */
4419 if (hv_exists_ent(hv, *svp, 0))
4425 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4426 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4429 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4431 HV *hv = MUTABLE_HV(SvRV(e));
4433 (void) hv_iterinit(hv);
4434 while ( (he = hv_iternext(hv)) ) {
4435 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4436 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4437 (void) hv_iterinit(hv);
4438 destroy_matcher(matcher);
4442 destroy_matcher(matcher);
4448 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4449 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4456 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4457 if (object_on_left) {
4458 goto sm_any_array; /* Treat objects like scalars */
4460 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4461 AV * const other_av = MUTABLE_AV(SvRV(e));
4462 const I32 other_len = av_len(other_av) + 1;
4465 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4466 for (i = 0; i < other_len; ++i) {
4467 SV ** const svp = av_fetch(other_av, i, FALSE);
4469 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4470 if (svp) { /* ??? When can this not happen? */
4471 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4477 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4478 AV *other_av = MUTABLE_AV(SvRV(d));
4479 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4480 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4484 const I32 other_len = av_len(other_av);
4486 if (NULL == seen_this) {
4487 seen_this = newHV();
4488 (void) sv_2mortal(MUTABLE_SV(seen_this));
4490 if (NULL == seen_other) {
4491 seen_other = newHV();
4492 (void) sv_2mortal(MUTABLE_SV(seen_other));
4494 for(i = 0; i <= other_len; ++i) {
4495 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4496 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4498 if (!this_elem || !other_elem) {
4499 if ((this_elem && SvOK(*this_elem))
4500 || (other_elem && SvOK(*other_elem)))
4503 else if (hv_exists_ent(seen_this,
4504 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4505 hv_exists_ent(seen_other,
4506 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))