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))
1677 register I32 cxix = dopoptosub(cxstack_ix);
1678 register const PERL_CONTEXT *cx;
1679 register const PERL_CONTEXT *ccstack = cxstack;
1680 const PERL_SI *top_si = PL_curstackinfo;
1682 const char *stashname;
1689 /* we may be in a higher stacklevel, so dig down deeper */
1690 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1691 top_si = top_si->si_prev;
1692 ccstack = top_si->si_cxstack;
1693 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1696 if (GIMME != G_ARRAY) {
1702 /* caller() should not report the automatic calls to &DB::sub */
1703 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1704 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1708 cxix = dopoptosub_at(ccstack, cxix - 1);
1711 cx = &ccstack[cxix];
1712 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1713 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1714 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1715 field below is defined for any cx. */
1716 /* caller() should not report the automatic calls to &DB::sub */
1717 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1718 cx = &ccstack[dbcxix];
1721 stashname = CopSTASHPV(cx->blk_oldcop);
1722 if (GIMME != G_ARRAY) {
1725 PUSHs(&PL_sv_undef);
1728 sv_setpv(TARG, stashname);
1737 PUSHs(&PL_sv_undef);
1739 mPUSHs(newSVpv(stashname, 0));
1740 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1741 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1744 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1745 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1746 /* So is ccstack[dbcxix]. */
1748 SV * const sv = newSV(0);
1749 gv_efullname3(sv, cvgv, NULL);
1751 PUSHs(boolSV(CxHASARGS(cx)));
1754 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1755 PUSHs(boolSV(CxHASARGS(cx)));
1759 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1762 gimme = (I32)cx->blk_gimme;
1763 if (gimme == G_VOID)
1764 PUSHs(&PL_sv_undef);
1766 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1767 if (CxTYPE(cx) == CXt_EVAL) {
1769 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1770 PUSHs(cx->blk_eval.cur_text);
1774 else if (cx->blk_eval.old_namesv) {
1775 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1778 /* eval BLOCK (try blocks have old_namesv == 0) */
1780 PUSHs(&PL_sv_undef);
1781 PUSHs(&PL_sv_undef);
1785 PUSHs(&PL_sv_undef);
1786 PUSHs(&PL_sv_undef);
1788 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1789 && CopSTASH_eq(PL_curcop, PL_debstash))
1791 AV * const ary = cx->blk_sub.argarray;
1792 const int off = AvARRAY(ary) - AvALLOC(ary);
1795 PL_dbargs = GvAV(gv_AVadd(gv_fetchpvs("DB::args", GV_ADDMULTI,
1797 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1800 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1801 av_extend(PL_dbargs, AvFILLp(ary) + off);
1802 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1803 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1805 /* XXX only hints propagated via op_private are currently
1806 * visible (others are not easily accessible, since they
1807 * use the global PL_hints) */
1808 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1811 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1813 if (old_warnings == pWARN_NONE ||
1814 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1815 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1816 else if (old_warnings == pWARN_ALL ||
1817 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1818 /* Get the bit mask for $warnings::Bits{all}, because
1819 * it could have been extended by warnings::register */
1821 HV * const bits = get_hv("warnings::Bits", 0);
1822 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1823 mask = newSVsv(*bits_all);
1826 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1830 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1834 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1835 sv_2mortal(newRV_noinc(
1836 MUTABLE_SV(Perl_refcounted_he_chain_2hv(aTHX_
1837 cx->blk_oldcop->cop_hints_hash))))
1846 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1847 sv_reset(tmps, CopSTASH(PL_curcop));
1852 /* like pp_nextstate, but used instead when the debugger is active */
1857 PL_curcop = (COP*)PL_op;
1858 TAINT_NOT; /* Each statement is presumed innocent */
1859 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1864 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1865 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1868 register PERL_CONTEXT *cx;
1869 const I32 gimme = G_ARRAY;
1871 GV * const gv = PL_DBgv;
1872 register CV * const cv = GvCV(gv);
1875 DIE(aTHX_ "No DB::DB routine defined");
1877 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1878 /* don't do recursive DB::DB call */
1893 (void)(*CvXSUB(cv))(aTHX_ cv);
1900 PUSHBLOCK(cx, CXt_SUB, SP);
1902 cx->blk_sub.retop = PL_op->op_next;
1905 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1906 RETURNOP(CvSTART(cv));
1916 register PERL_CONTEXT *cx;
1917 const I32 gimme = GIMME_V;
1919 U8 cxtype = CXt_LOOP_FOR;
1924 ENTER_with_name("loop1");
1927 if (PL_op->op_targ) {
1928 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1929 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1930 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1931 SVs_PADSTALE, SVs_PADSTALE);
1933 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1934 #ifndef USE_ITHREADS
1935 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1941 GV * const gv = MUTABLE_GV(POPs);
1942 svp = &GvSV(gv); /* symbol table variable */
1943 SAVEGENERICSV(*svp);
1946 iterdata = (PAD*)gv;
1950 if (PL_op->op_private & OPpITER_DEF)
1951 cxtype |= CXp_FOR_DEF;
1953 ENTER_with_name("loop2");
1955 PUSHBLOCK(cx, cxtype, SP);
1957 PUSHLOOP_FOR(cx, iterdata, MARK, PL_op->op_targ);
1959 PUSHLOOP_FOR(cx, svp, MARK, 0);
1961 if (PL_op->op_flags & OPf_STACKED) {
1962 SV *maybe_ary = POPs;
1963 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1965 SV * const right = maybe_ary;
1968 if (RANGE_IS_NUMERIC(sv,right)) {
1969 cx->cx_type &= ~CXTYPEMASK;
1970 cx->cx_type |= CXt_LOOP_LAZYIV;
1971 /* Make sure that no-one re-orders cop.h and breaks our
1973 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
1974 #ifdef NV_PRESERVES_UV
1975 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1976 (SvNV(sv) > (NV)IV_MAX)))
1978 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1979 (SvNV(right) < (NV)IV_MIN))))
1981 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1984 ((SvUV(sv) > (UV)IV_MAX) ||
1985 (SvNV(sv) > (NV)UV_MAX)))))
1987 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1989 ((SvNV(right) > 0) &&
1990 ((SvUV(right) > (UV)IV_MAX) ||
1991 (SvNV(right) > (NV)UV_MAX))))))
1993 DIE(aTHX_ "Range iterator outside integer range");
1994 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
1995 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
1997 /* for correct -Dstv display */
1998 cx->blk_oldsp = sp - PL_stack_base;
2002 cx->cx_type &= ~CXTYPEMASK;
2003 cx->cx_type |= CXt_LOOP_LAZYSV;
2004 /* Make sure that no-one re-orders cop.h and breaks our
2006 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2007 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2008 cx->blk_loop.state_u.lazysv.end = right;
2009 SvREFCNT_inc(right);
2010 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2011 /* This will do the upgrade to SVt_PV, and warn if the value
2012 is uninitialised. */
2013 (void) SvPV_nolen_const(right);
2014 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2015 to replace !SvOK() with a pointer to "". */
2017 SvREFCNT_dec(right);
2018 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2022 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2023 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2024 SvREFCNT_inc(maybe_ary);
2025 cx->blk_loop.state_u.ary.ix =
2026 (PL_op->op_private & OPpITER_REVERSED) ?
2027 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2031 else { /* iterating over items on the stack */
2032 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2033 if (PL_op->op_private & OPpITER_REVERSED) {
2034 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2037 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2047 register PERL_CONTEXT *cx;
2048 const I32 gimme = GIMME_V;
2050 ENTER_with_name("loop1");
2052 ENTER_with_name("loop2");
2054 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2055 PUSHLOOP_PLAIN(cx, SP);
2063 register PERL_CONTEXT *cx;
2070 assert(CxTYPE_is_LOOP(cx));
2072 newsp = PL_stack_base + cx->blk_loop.resetsp;
2075 if (gimme == G_VOID)
2077 else if (gimme == G_SCALAR) {
2079 *++newsp = sv_mortalcopy(*SP);
2081 *++newsp = &PL_sv_undef;
2085 *++newsp = sv_mortalcopy(*++mark);
2086 TAINT_NOT; /* Each item is independent */
2092 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2093 PL_curpm = newpm; /* ... and pop $1 et al */
2095 LEAVE_with_name("loop2");
2096 LEAVE_with_name("loop1");
2104 register PERL_CONTEXT *cx;
2105 bool popsub2 = FALSE;
2106 bool clear_errsv = FALSE;
2115 const I32 cxix = dopoptosub(cxstack_ix);
2118 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2119 * sort block, which is a CXt_NULL
2122 PL_stack_base[1] = *PL_stack_sp;
2123 PL_stack_sp = PL_stack_base + 1;
2127 DIE(aTHX_ "Can't return outside a subroutine");
2129 if (cxix < cxstack_ix)
2132 if (CxMULTICALL(&cxstack[cxix])) {
2133 gimme = cxstack[cxix].blk_gimme;
2134 if (gimme == G_VOID)
2135 PL_stack_sp = PL_stack_base;
2136 else if (gimme == G_SCALAR) {
2137 PL_stack_base[1] = *PL_stack_sp;
2138 PL_stack_sp = PL_stack_base + 1;
2144 switch (CxTYPE(cx)) {
2147 retop = cx->blk_sub.retop;
2148 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2151 if (!(PL_in_eval & EVAL_KEEPERR))
2154 namesv = cx->blk_eval.old_namesv;
2155 retop = cx->blk_eval.retop;
2159 if (optype == OP_REQUIRE &&
2160 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2162 /* Unassume the success we assumed earlier. */
2163 (void)hv_delete(GvHVn(PL_incgv),
2164 SvPVX_const(namesv), SvCUR(namesv),
2166 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2171 retop = cx->blk_sub.retop;
2174 DIE(aTHX_ "panic: return");
2178 if (gimme == G_SCALAR) {
2181 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2183 *++newsp = SvREFCNT_inc(*SP);
2188 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2190 *++newsp = sv_mortalcopy(sv);
2195 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2198 *++newsp = sv_mortalcopy(*SP);
2201 *++newsp = &PL_sv_undef;
2203 else if (gimme == G_ARRAY) {
2204 while (++MARK <= SP) {
2205 *++newsp = (popsub2 && SvTEMP(*MARK))
2206 ? *MARK : sv_mortalcopy(*MARK);
2207 TAINT_NOT; /* Each item is independent */
2210 PL_stack_sp = newsp;
2213 /* Stack values are safe: */
2216 POPSUB(cx,sv); /* release CV and @_ ... */
2220 PL_curpm = newpm; /* ... and pop $1 et al */
2233 register PERL_CONTEXT *cx;
2244 if (PL_op->op_flags & OPf_SPECIAL) {
2245 cxix = dopoptoloop(cxstack_ix);
2247 DIE(aTHX_ "Can't \"last\" outside a loop block");
2250 cxix = dopoptolabel(cPVOP->op_pv);
2252 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2254 if (cxix < cxstack_ix)
2258 cxstack_ix++; /* temporarily protect top context */
2260 switch (CxTYPE(cx)) {
2261 case CXt_LOOP_LAZYIV:
2262 case CXt_LOOP_LAZYSV:
2264 case CXt_LOOP_PLAIN:
2266 newsp = PL_stack_base + cx->blk_loop.resetsp;
2267 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2271 nextop = cx->blk_sub.retop;
2275 nextop = cx->blk_eval.retop;
2279 nextop = cx->blk_sub.retop;
2282 DIE(aTHX_ "panic: last");
2286 if (gimme == G_SCALAR) {
2288 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2289 ? *SP : sv_mortalcopy(*SP);
2291 *++newsp = &PL_sv_undef;
2293 else if (gimme == G_ARRAY) {
2294 while (++MARK <= SP) {
2295 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2296 ? *MARK : sv_mortalcopy(*MARK);
2297 TAINT_NOT; /* Each item is independent */
2305 /* Stack values are safe: */
2307 case CXt_LOOP_LAZYIV:
2308 case CXt_LOOP_PLAIN:
2309 case CXt_LOOP_LAZYSV:
2311 POPLOOP(cx); /* release loop vars ... */
2315 POPSUB(cx,sv); /* release CV and @_ ... */
2318 PL_curpm = newpm; /* ... and pop $1 et al */
2321 PERL_UNUSED_VAR(optype);
2322 PERL_UNUSED_VAR(gimme);
2330 register PERL_CONTEXT *cx;
2333 if (PL_op->op_flags & OPf_SPECIAL) {
2334 cxix = dopoptoloop(cxstack_ix);
2336 DIE(aTHX_ "Can't \"next\" outside a loop block");
2339 cxix = dopoptolabel(cPVOP->op_pv);
2341 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2343 if (cxix < cxstack_ix)
2346 /* clear off anything above the scope we're re-entering, but
2347 * save the rest until after a possible continue block */
2348 inner = PL_scopestack_ix;
2350 if (PL_scopestack_ix < inner)
2351 leave_scope(PL_scopestack[PL_scopestack_ix]);
2352 PL_curcop = cx->blk_oldcop;
2353 return CX_LOOP_NEXTOP_GET(cx);
2360 register PERL_CONTEXT *cx;
2364 if (PL_op->op_flags & OPf_SPECIAL) {
2365 cxix = dopoptoloop(cxstack_ix);
2367 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2370 cxix = dopoptolabel(cPVOP->op_pv);
2372 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2374 if (cxix < cxstack_ix)
2377 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2378 if (redo_op->op_type == OP_ENTER) {
2379 /* pop one less context to avoid $x being freed in while (my $x..) */
2381 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2382 redo_op = redo_op->op_next;
2386 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2387 LEAVE_SCOPE(oldsave);
2389 PL_curcop = cx->blk_oldcop;
2394 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2398 static const char too_deep[] = "Target of goto is too deeply nested";
2400 PERL_ARGS_ASSERT_DOFINDLABEL;
2403 Perl_croak(aTHX_ too_deep);
2404 if (o->op_type == OP_LEAVE ||
2405 o->op_type == OP_SCOPE ||
2406 o->op_type == OP_LEAVELOOP ||
2407 o->op_type == OP_LEAVESUB ||
2408 o->op_type == OP_LEAVETRY)
2410 *ops++ = cUNOPo->op_first;
2412 Perl_croak(aTHX_ too_deep);
2415 if (o->op_flags & OPf_KIDS) {
2417 /* First try all the kids at this level, since that's likeliest. */
2418 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2419 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2420 const char *kid_label = CopLABEL(kCOP);
2421 if (kid_label && strEQ(kid_label, label))
2425 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2426 if (kid == PL_lastgotoprobe)
2428 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2431 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2432 ops[-1]->op_type == OP_DBSTATE)
2437 if ((o = dofindlabel(kid, label, ops, oplimit)))
2450 register PERL_CONTEXT *cx;
2451 #define GOTO_DEPTH 64
2452 OP *enterops[GOTO_DEPTH];
2453 const char *label = NULL;
2454 const bool do_dump = (PL_op->op_type == OP_DUMP);
2455 static const char must_have_label[] = "goto must have label";
2457 if (PL_op->op_flags & OPf_STACKED) {
2458 SV * const sv = POPs;
2460 /* This egregious kludge implements goto &subroutine */
2461 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2463 register PERL_CONTEXT *cx;
2464 CV *cv = MUTABLE_CV(SvRV(sv));
2471 if (!CvROOT(cv) && !CvXSUB(cv)) {
2472 const GV * const gv = CvGV(cv);
2476 /* autoloaded stub? */
2477 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2479 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2480 GvNAMELEN(gv), FALSE);
2481 if (autogv && (cv = GvCV(autogv)))
2483 tmpstr = sv_newmortal();
2484 gv_efullname3(tmpstr, gv, NULL);
2485 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2487 DIE(aTHX_ "Goto undefined subroutine");
2490 /* First do some returnish stuff. */
2491 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2493 cxix = dopoptosub(cxstack_ix);
2495 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2496 if (cxix < cxstack_ix)
2500 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2501 if (CxTYPE(cx) == CXt_EVAL) {
2503 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2505 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2507 else if (CxMULTICALL(cx))
2508 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2509 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2510 /* put @_ back onto stack */
2511 AV* av = cx->blk_sub.argarray;
2513 items = AvFILLp(av) + 1;
2514 EXTEND(SP, items+1); /* @_ could have been extended. */
2515 Copy(AvARRAY(av), SP + 1, items, SV*);
2516 SvREFCNT_dec(GvAV(PL_defgv));
2517 GvAV(PL_defgv) = cx->blk_sub.savearray;
2519 /* abandon @_ if it got reified */
2524 av_extend(av, items-1);
2526 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2529 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2530 AV* const av = GvAV(PL_defgv);
2531 items = AvFILLp(av) + 1;
2532 EXTEND(SP, items+1); /* @_ could have been extended. */
2533 Copy(AvARRAY(av), SP + 1, items, SV*);
2537 if (CxTYPE(cx) == CXt_SUB &&
2538 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2539 SvREFCNT_dec(cx->blk_sub.cv);
2540 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2541 LEAVE_SCOPE(oldsave);
2543 /* Now do some callish stuff. */
2545 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2547 OP* const retop = cx->blk_sub.retop;
2552 for (index=0; index<items; index++)
2553 sv_2mortal(SP[-index]);
2556 /* XS subs don't have a CxSUB, so pop it */
2557 POPBLOCK(cx, PL_curpm);
2558 /* Push a mark for the start of arglist */
2561 (void)(*CvXSUB(cv))(aTHX_ cv);
2566 AV* const padlist = CvPADLIST(cv);
2567 if (CxTYPE(cx) == CXt_EVAL) {
2568 PL_in_eval = CxOLD_IN_EVAL(cx);
2569 PL_eval_root = cx->blk_eval.old_eval_root;
2570 cx->cx_type = CXt_SUB;
2572 cx->blk_sub.cv = cv;
2573 cx->blk_sub.olddepth = CvDEPTH(cv);
2576 if (CvDEPTH(cv) < 2)
2577 SvREFCNT_inc_simple_void_NN(cv);
2579 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2580 sub_crush_depth(cv);
2581 pad_push(padlist, CvDEPTH(cv));
2584 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2587 AV *const av = MUTABLE_AV(PAD_SVl(0));
2589 cx->blk_sub.savearray = GvAV(PL_defgv);
2590 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2591 CX_CURPAD_SAVE(cx->blk_sub);
2592 cx->blk_sub.argarray = av;
2594 if (items >= AvMAX(av) + 1) {
2595 SV **ary = AvALLOC(av);
2596 if (AvARRAY(av) != ary) {
2597 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2600 if (items >= AvMAX(av) + 1) {
2601 AvMAX(av) = items - 1;
2602 Renew(ary,items+1,SV*);
2608 Copy(mark,AvARRAY(av),items,SV*);
2609 AvFILLp(av) = items - 1;
2610 assert(!AvREAL(av));
2612 /* transfer 'ownership' of refcnts to new @_ */
2622 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2623 Perl_get_db_sub(aTHX_ NULL, cv);
2625 CV * const gotocv = get_cvs("DB::goto", 0);
2627 PUSHMARK( PL_stack_sp );
2628 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2633 RETURNOP(CvSTART(cv));
2637 label = SvPV_nolen_const(sv);
2638 if (!(do_dump || *label))
2639 DIE(aTHX_ must_have_label);
2642 else if (PL_op->op_flags & OPf_SPECIAL) {
2644 DIE(aTHX_ must_have_label);
2647 label = cPVOP->op_pv;
2651 if (label && *label) {
2652 OP *gotoprobe = NULL;
2653 bool leaving_eval = FALSE;
2654 bool in_block = FALSE;
2655 PERL_CONTEXT *last_eval_cx = NULL;
2659 PL_lastgotoprobe = NULL;
2661 for (ix = cxstack_ix; ix >= 0; ix--) {
2663 switch (CxTYPE(cx)) {
2665 leaving_eval = TRUE;
2666 if (!CxTRYBLOCK(cx)) {
2667 gotoprobe = (last_eval_cx ?
2668 last_eval_cx->blk_eval.old_eval_root :
2673 /* else fall through */
2674 case CXt_LOOP_LAZYIV:
2675 case CXt_LOOP_LAZYSV:
2677 case CXt_LOOP_PLAIN:
2680 gotoprobe = cx->blk_oldcop->op_sibling;
2686 gotoprobe = cx->blk_oldcop->op_sibling;
2689 gotoprobe = PL_main_root;
2692 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2693 gotoprobe = CvROOT(cx->blk_sub.cv);
2699 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2702 DIE(aTHX_ "panic: goto");
2703 gotoprobe = PL_main_root;
2707 retop = dofindlabel(gotoprobe, label,
2708 enterops, enterops + GOTO_DEPTH);
2712 PL_lastgotoprobe = gotoprobe;
2715 DIE(aTHX_ "Can't find label %s", label);
2717 /* if we're leaving an eval, check before we pop any frames
2718 that we're not going to punt, otherwise the error
2721 if (leaving_eval && *enterops && enterops[1]) {
2723 for (i = 1; enterops[i]; i++)
2724 if (enterops[i]->op_type == OP_ENTERITER)
2725 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2728 if (*enterops && enterops[1]) {
2729 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2731 deprecate("\"goto\" to jump into a construct");
2734 /* pop unwanted frames */
2736 if (ix < cxstack_ix) {
2743 oldsave = PL_scopestack[PL_scopestack_ix];
2744 LEAVE_SCOPE(oldsave);
2747 /* push wanted frames */
2749 if (*enterops && enterops[1]) {
2750 OP * const oldop = PL_op;
2751 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2752 for (; enterops[ix]; ix++) {
2753 PL_op = enterops[ix];
2754 /* Eventually we may want to stack the needed arguments
2755 * for each op. For now, we punt on the hard ones. */
2756 if (PL_op->op_type == OP_ENTERITER)
2757 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2758 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2766 if (!retop) retop = PL_main_start;
2768 PL_restartop = retop;
2769 PL_do_undump = TRUE;
2773 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2774 PL_do_undump = FALSE;
2791 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2793 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2796 PL_exit_flags |= PERL_EXIT_EXPECTED;
2798 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2799 if (anum || !(PL_minus_c && PL_madskills))
2804 PUSHs(&PL_sv_undef);
2811 S_save_lines(pTHX_ AV *array, SV *sv)
2813 const char *s = SvPVX_const(sv);
2814 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2817 PERL_ARGS_ASSERT_SAVE_LINES;
2819 while (s && s < send) {
2821 SV * const tmpstr = newSV_type(SVt_PVMG);
2823 t = (const char *)memchr(s, '\n', send - s);
2829 sv_setpvn(tmpstr, s, t - s);
2830 av_store(array, line++, tmpstr);
2838 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
2840 0 is used as continue inside eval,
2842 3 is used for a die caught by an inner eval - continue inner loop
2844 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
2845 establish a local jmpenv to handle exception traps.
2850 S_docatch(pTHX_ OP *o)
2854 OP * const oldop = PL_op;
2858 assert(CATCH_GET == TRUE);
2865 assert(cxstack_ix >= 0);
2866 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2867 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2872 /* die caught by an inner eval - continue inner loop */
2873 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
2874 PL_restartjmpenv = NULL;
2875 PL_op = PL_restartop;
2891 /* James Bond: Do you expect me to talk?
2892 Auric Goldfinger: No, Mr. Bond. I expect you to die.
2894 This code is an ugly hack, doesn't work with lexicals in subroutines that are
2895 called more than once, and is only used by regcomp.c, for (?{}) blocks.
2897 Currently it is not used outside the core code. Best if it stays that way.
2900 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2901 /* sv Text to convert to OP tree. */
2902 /* startop op_free() this to undo. */
2903 /* code Short string id of the caller. */
2905 dVAR; dSP; /* Make POPBLOCK work. */
2911 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2912 char *tmpbuf = tbuf;
2915 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2918 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2920 ENTER_with_name("eval");
2921 lex_start(sv, NULL, FALSE);
2923 /* switch to eval mode */
2925 if (IN_PERL_COMPILETIME) {
2926 SAVECOPSTASH_FREE(&PL_compiling);
2927 CopSTASH_set(&PL_compiling, PL_curstash);
2929 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2930 SV * const sv = sv_newmortal();
2931 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2932 code, (unsigned long)++PL_evalseq,
2933 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2938 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2939 (unsigned long)++PL_evalseq);
2940 SAVECOPFILE_FREE(&PL_compiling);
2941 CopFILE_set(&PL_compiling, tmpbuf+2);
2942 SAVECOPLINE(&PL_compiling);
2943 CopLINE_set(&PL_compiling, 1);
2944 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2945 deleting the eval's FILEGV from the stash before gv_check() runs
2946 (i.e. before run-time proper). To work around the coredump that
2947 ensues, we always turn GvMULTI_on for any globals that were
2948 introduced within evals. See force_ident(). GSAR 96-10-12 */
2949 safestr = savepvn(tmpbuf, len);
2950 SAVEDELETE(PL_defstash, safestr, len);
2952 #ifdef OP_IN_REGISTER
2958 /* we get here either during compilation, or via pp_regcomp at runtime */
2959 runtime = IN_PERL_RUNTIME;
2961 runcv = find_runcv(NULL);
2964 PL_op->op_type = OP_ENTEREVAL;
2965 PL_op->op_flags = 0; /* Avoid uninit warning. */
2966 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2970 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2972 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2973 POPBLOCK(cx,PL_curpm);
2976 (*startop)->op_type = OP_NULL;
2977 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2979 /* XXX DAPM do this properly one year */
2980 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
2981 LEAVE_with_name("eval");
2982 if (IN_PERL_COMPILETIME)
2983 CopHINTS_set(&PL_compiling, PL_hints);
2984 #ifdef OP_IN_REGISTER
2987 PERL_UNUSED_VAR(newsp);
2988 PERL_UNUSED_VAR(optype);
2990 return PL_eval_start;
2995 =for apidoc find_runcv
2997 Locate the CV corresponding to the currently executing sub or eval.
2998 If db_seqp is non_null, skip CVs that are in the DB package and populate
2999 *db_seqp with the cop sequence number at the point that the DB:: code was
3000 entered. (allows debuggers to eval in the scope of the breakpoint rather
3001 than in the scope of the debugger itself).
3007 Perl_find_runcv(pTHX_ U32 *db_seqp)
3013 *db_seqp = PL_curcop->cop_seq;
3014 for (si = PL_curstackinfo; si; si = si->si_prev) {
3016 for (ix = si->si_cxix; ix >= 0; ix--) {
3017 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3018 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3019 CV * const cv = cx->blk_sub.cv;
3020 /* skip DB:: code */
3021 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3022 *db_seqp = cx->blk_oldcop->cop_seq;
3027 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3035 /* Run yyparse() in a setjmp wrapper. Returns:
3036 * 0: yyparse() successful
3037 * 1: yyparse() failed
3046 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3050 ret = yyparse() ? 1 : 0;
3064 /* Compile a require/do, an eval '', or a /(?{...})/.
3065 * In the last case, startop is non-null, and contains the address of
3066 * a pointer that should be set to the just-compiled code.
3067 * outside is the lexically enclosing CV (if any) that invoked us.
3068 * Returns a bool indicating whether the compile was successful; if so,
3069 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3070 * pushes undef (also croaks if startop != NULL).
3074 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3077 OP * const saveop = PL_op;
3078 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3081 PL_in_eval = (in_require
3082 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3087 SAVESPTR(PL_compcv);
3088 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3089 CvEVAL_on(PL_compcv);
3090 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3091 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3093 CvOUTSIDE_SEQ(PL_compcv) = seq;
3094 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3096 /* set up a scratch pad */
3098 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3099 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3103 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3105 /* make sure we compile in the right package */
3107 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3108 SAVESPTR(PL_curstash);
3109 PL_curstash = CopSTASH(PL_curcop);
3111 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3112 SAVESPTR(PL_beginav);
3113 PL_beginav = newAV();
3114 SAVEFREESV(PL_beginav);
3115 SAVESPTR(PL_unitcheckav);
3116 PL_unitcheckav = newAV();
3117 SAVEFREESV(PL_unitcheckav);
3120 SAVEBOOL(PL_madskills);
3124 /* try to compile it */
3126 PL_eval_root = NULL;
3127 PL_curcop = &PL_compiling;
3128 CopARYBASE_set(PL_curcop, 0);
3129 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3130 PL_in_eval |= EVAL_KEEPERR;
3134 CALL_BLOCK_HOOKS(eval, saveop);
3136 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3137 * so honour CATCH_GET and trap it here if necessary */
3139 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX) : yyparse();
3141 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3142 SV **newsp; /* Used by POPBLOCK. */
3143 PERL_CONTEXT *cx = NULL;
3144 I32 optype; /* Used by POPEVAL. */
3148 PERL_UNUSED_VAR(newsp);
3149 PERL_UNUSED_VAR(optype);
3151 /* note that if yystatus == 3, then the EVAL CX block has already
3152 * been popped, and various vars restored */
3154 if (yystatus != 3) {
3156 op_free(PL_eval_root);
3157 PL_eval_root = NULL;
3159 SP = PL_stack_base + POPMARK; /* pop original mark */
3161 POPBLOCK(cx,PL_curpm);
3163 namesv = cx->blk_eval.old_namesv;
3168 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3170 msg = SvPVx_nolen_const(ERRSV);
3173 /* If cx is still NULL, it means that we didn't go in the
3174 * POPEVAL branch. */
3175 cx = &cxstack[cxstack_ix];
3176 assert(CxTYPE(cx) == CXt_EVAL);
3177 namesv = cx->blk_eval.old_namesv;
3179 (void)hv_store(GvHVn(PL_incgv),
3180 SvPVX_const(namesv), SvCUR(namesv),
3182 Perl_croak(aTHX_ "%sCompilation failed in require",
3183 *msg ? msg : "Unknown error\n");
3186 if (yystatus != 3) {
3187 POPBLOCK(cx,PL_curpm);
3190 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3191 (*msg ? msg : "Unknown error\n"));
3195 sv_setpvs(ERRSV, "Compilation error");
3198 PUSHs(&PL_sv_undef);
3202 CopLINE_set(&PL_compiling, 0);
3204 *startop = PL_eval_root;
3206 SAVEFREEOP(PL_eval_root);
3208 /* Set the context for this new optree.
3209 * Propagate the context from the eval(). */
3210 if ((gimme & G_WANT) == G_VOID)
3211 scalarvoid(PL_eval_root);
3212 else if ((gimme & G_WANT) == G_ARRAY)
3215 scalar(PL_eval_root);
3217 DEBUG_x(dump_eval());
3219 /* Register with debugger: */
3220 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3221 CV * const cv = get_cvs("DB::postponed", 0);
3225 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3227 call_sv(MUTABLE_SV(cv), G_DISCARD);
3232 call_list(PL_scopestack_ix, PL_unitcheckav);
3234 /* compiled okay, so do it */
3236 CvDEPTH(PL_compcv) = 1;
3237 SP = PL_stack_base + POPMARK; /* pop original mark */
3238 PL_op = saveop; /* The caller may need it. */
3239 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3246 S_check_type_and_open(pTHX_ const char *name)
3249 const int st_rc = PerlLIO_stat(name, &st);
3251 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3253 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3257 return PerlIO_open(name, PERL_SCRIPT_MODE);
3260 #ifndef PERL_DISABLE_PMC
3262 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3266 PERL_ARGS_ASSERT_DOOPEN_PM;
3268 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3269 SV *const pmcsv = newSV(namelen + 2);
3270 char *const pmc = SvPVX(pmcsv);
3273 memcpy(pmc, name, namelen);
3275 pmc[namelen + 1] = '\0';
3277 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3278 fp = check_type_and_open(name);
3281 fp = check_type_and_open(pmc);
3283 SvREFCNT_dec(pmcsv);
3286 fp = check_type_and_open(name);
3291 # define doopen_pm(name, namelen) check_type_and_open(name)
3292 #endif /* !PERL_DISABLE_PMC */
3297 register PERL_CONTEXT *cx;
3304 int vms_unixname = 0;
3306 const char *tryname = NULL;
3308 const I32 gimme = GIMME_V;
3309 int filter_has_file = 0;
3310 PerlIO *tryrsfp = NULL;
3311 SV *filter_cache = NULL;
3312 SV *filter_state = NULL;
3313 SV *filter_sub = NULL;
3319 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3320 sv = new_version(sv);
3321 if (!sv_derived_from(PL_patchlevel, "version"))
3322 upg_version(PL_patchlevel, TRUE);
3323 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3324 if ( vcmp(sv,PL_patchlevel) <= 0 )
3325 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3326 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3329 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3332 SV * const req = SvRV(sv);
3333 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3335 /* get the left hand term */
3336 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3338 first = SvIV(*av_fetch(lav,0,0));
3339 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3340 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3341 || av_len(lav) > 1 /* FP with > 3 digits */
3342 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3344 DIE(aTHX_ "Perl %"SVf" required--this is only "
3345 "%"SVf", stopped", SVfARG(vnormal(req)),
3346 SVfARG(vnormal(PL_patchlevel)));
3348 else { /* probably 'use 5.10' or 'use 5.8' */
3353 second = SvIV(*av_fetch(lav,1,0));
3355 second /= second >= 600 ? 100 : 10;
3356 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3357 (int)first, (int)second);
3358 upg_version(hintsv, TRUE);
3360 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3361 "--this is only %"SVf", stopped",
3362 SVfARG(vnormal(req)),
3363 SVfARG(vnormal(sv_2mortal(hintsv))),
3364 SVfARG(vnormal(PL_patchlevel)));
3369 /* We do this only with "use", not "require" or "no". */
3370 if (PL_compcv && !(cUNOP->op_first->op_private & OPpCONST_NOVER)) {
3371 /* If we request a version >= 5.9.5, load feature.pm with the
3372 * feature bundle that corresponds to the required version. */
3373 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3374 SV *const importsv = vnormal(sv);
3375 *SvPVX_mutable(importsv) = ':';
3376 ENTER_with_name("load_feature");
3377 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3378 LEAVE_with_name("load_feature");
3380 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3381 if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3382 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
3388 name = SvPV_const(sv, len);
3389 if (!(name && len > 0 && *name))
3390 DIE(aTHX_ "Null filename used");
3391 TAINT_PROPER("require");
3395 /* The key in the %ENV hash is in the syntax of file passed as the argument
3396 * usually this is in UNIX format, but sometimes in VMS format, which
3397 * can result in a module being pulled in more than once.
3398 * To prevent this, the key must be stored in UNIX format if the VMS
3399 * name can be translated to UNIX.
3401 if ((unixname = tounixspec(name, NULL)) != NULL) {
3402 unixlen = strlen(unixname);
3408 /* if not VMS or VMS name can not be translated to UNIX, pass it
3411 unixname = (char *) name;
3414 if (PL_op->op_type == OP_REQUIRE) {
3415 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3416 unixname, unixlen, 0);
3418 if (*svp != &PL_sv_undef)
3421 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3422 "Compilation failed in require", unixname);
3426 /* prepare to compile file */
3428 if (path_is_absolute(name)) {
3430 tryrsfp = doopen_pm(name, len);
3433 AV * const ar = GvAVn(PL_incgv);
3439 namesv = newSV_type(SVt_PV);
3440 for (i = 0; i <= AvFILL(ar); i++) {
3441 SV * const dirsv = *av_fetch(ar, i, TRUE);
3443 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3450 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3451 && !sv_isobject(loader))
3453 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3456 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3457 PTR2UV(SvRV(dirsv)), name);
3458 tryname = SvPVX_const(namesv);
3461 ENTER_with_name("call_INC");
3469 if (sv_isobject(loader))
3470 count = call_method("INC", G_ARRAY);
3472 count = call_sv(loader, G_ARRAY);
3482 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3483 && !isGV_with_GP(SvRV(arg))) {
3484 filter_cache = SvRV(arg);
3485 SvREFCNT_inc_simple_void_NN(filter_cache);
3492 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3496 if (isGV_with_GP(arg)) {
3497 IO * const io = GvIO((const GV *)arg);
3502 tryrsfp = IoIFP(io);
3503 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3504 PerlIO_close(IoOFP(io));
3515 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3517 SvREFCNT_inc_simple_void_NN(filter_sub);
3520 filter_state = SP[i];
3521 SvREFCNT_inc_simple_void(filter_state);
3525 if (!tryrsfp && (filter_cache || filter_sub)) {
3526 tryrsfp = PerlIO_open(BIT_BUCKET,
3534 LEAVE_with_name("call_INC");
3536 /* Adjust file name if the hook has set an %INC entry.
3537 This needs to happen after the FREETMPS above. */
3538 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3540 tryname = SvPV_nolen_const(*svp);
3547 filter_has_file = 0;
3549 SvREFCNT_dec(filter_cache);
3550 filter_cache = NULL;
3553 SvREFCNT_dec(filter_state);
3554 filter_state = NULL;
3557 SvREFCNT_dec(filter_sub);
3562 if (!path_is_absolute(name)
3568 dir = SvPV_const(dirsv, dirlen);
3576 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3578 sv_setpv(namesv, unixdir);
3579 sv_catpv(namesv, unixname);
3581 # ifdef __SYMBIAN32__
3582 if (PL_origfilename[0] &&
3583 PL_origfilename[1] == ':' &&
3584 !(dir[0] && dir[1] == ':'))
3585 Perl_sv_setpvf(aTHX_ namesv,
3590 Perl_sv_setpvf(aTHX_ namesv,
3594 /* The equivalent of
3595 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3596 but without the need to parse the format string, or
3597 call strlen on either pointer, and with the correct
3598 allocation up front. */
3600 char *tmp = SvGROW(namesv, dirlen + len + 2);
3602 memcpy(tmp, dir, dirlen);
3605 /* name came from an SV, so it will have a '\0' at the
3606 end that we can copy as part of this memcpy(). */
3607 memcpy(tmp, name, len + 1);
3609 SvCUR_set(namesv, dirlen + len + 1);
3611 /* Don't even actually have to turn SvPOK_on() as we
3612 access it directly with SvPVX() below. */
3616 TAINT_PROPER("require");
3617 tryname = SvPVX_const(namesv);
3618 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3620 if (tryname[0] == '.' && tryname[1] == '/') {
3622 while (*++tryname == '/');
3626 else if (errno == EMFILE)
3627 /* no point in trying other paths if out of handles */
3635 SAVECOPFILE_FREE(&PL_compiling);
3636 CopFILE_set(&PL_compiling, tryname);
3638 SvREFCNT_dec(namesv);
3640 if (PL_op->op_type == OP_REQUIRE) {
3641 if(errno == EMFILE) {
3642 /* diag_listed_as: Can't locate %s */
3643 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
3645 if (namesv) { /* did we lookup @INC? */
3646 AV * const ar = GvAVn(PL_incgv);
3648 SV *const inc = newSVpvs_flags("", SVs_TEMP);
3649 for (i = 0; i <= AvFILL(ar); i++) {
3650 sv_catpvs(inc, " ");
3651 sv_catsv(inc, *av_fetch(ar, i, TRUE));
3654 /* diag_listed_as: Can't locate %s */
3656 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
3658 (memEQ(name + len - 2, ".h", 3)
3659 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
3660 (memEQ(name + len - 3, ".ph", 4)
3661 ? " (did you run h2ph?)" : ""),
3666 DIE(aTHX_ "Can't locate %s", name);
3672 SETERRNO(0, SS_NORMAL);
3674 /* Assume success here to prevent recursive requirement. */
3675 /* name is never assigned to again, so len is still strlen(name) */
3676 /* Check whether a hook in @INC has already filled %INC */
3678 (void)hv_store(GvHVn(PL_incgv),
3679 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3681 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3683 (void)hv_store(GvHVn(PL_incgv),
3684 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3687 ENTER_with_name("eval");
3689 lex_start(NULL, tryrsfp, TRUE);
3693 hv_clear(GvHV(PL_hintgv));
3695 SAVECOMPILEWARNINGS();
3696 if (PL_dowarn & G_WARN_ALL_ON)
3697 PL_compiling.cop_warnings = pWARN_ALL ;
3698 else if (PL_dowarn & G_WARN_ALL_OFF)
3699 PL_compiling.cop_warnings = pWARN_NONE ;
3701 PL_compiling.cop_warnings = pWARN_STD ;
3703 if (filter_sub || filter_cache) {
3704 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3705 than hanging another SV from it. In turn, filter_add() optionally
3706 takes the SV to use as the filter (or creates a new SV if passed
3707 NULL), so simply pass in whatever value filter_cache has. */
3708 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3709 IoLINES(datasv) = filter_has_file;
3710 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3711 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3714 /* switch to eval mode */
3715 PUSHBLOCK(cx, CXt_EVAL, SP);
3717 cx->blk_eval.retop = PL_op->op_next;
3719 SAVECOPLINE(&PL_compiling);
3720 CopLINE_set(&PL_compiling, 0);
3724 /* Store and reset encoding. */
3725 encoding = PL_encoding;
3728 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3729 op = DOCATCH(PL_eval_start);
3731 op = PL_op->op_next;
3733 /* Restore encoding. */
3734 PL_encoding = encoding;
3739 /* This is a op added to hold the hints hash for
3740 pp_entereval. The hash can be modified by the code
3741 being eval'ed, so we return a copy instead. */
3747 mXPUSHs(MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ MUTABLE_HV(cSVOP_sv))));
3755 register PERL_CONTEXT *cx;
3757 const I32 gimme = GIMME_V;
3758 const U32 was = PL_breakable_sub_gen;
3759 char tbuf[TYPE_DIGITS(long) + 12];
3760 char *tmpbuf = tbuf;
3764 HV *saved_hh = NULL;
3766 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3767 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3771 /* make sure we've got a plain PV (no overload etc) before testing
3772 * for taint. Making a copy here is probably overkill, but better
3773 * safe than sorry */
3775 const char * const p = SvPV_const(sv, len);
3777 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
3780 TAINT_IF(SvTAINTED(sv));
3781 TAINT_PROPER("eval");
3783 ENTER_with_name("eval");
3784 lex_start(sv, NULL, FALSE);
3787 /* switch to eval mode */
3789 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3790 SV * const temp_sv = sv_newmortal();
3791 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3792 (unsigned long)++PL_evalseq,
3793 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3794 tmpbuf = SvPVX(temp_sv);
3795 len = SvCUR(temp_sv);
3798 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3799 SAVECOPFILE_FREE(&PL_compiling);
3800 CopFILE_set(&PL_compiling, tmpbuf+2);
3801 SAVECOPLINE(&PL_compiling);
3802 CopLINE_set(&PL_compiling, 1);
3803 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3804 deleting the eval's FILEGV from the stash before gv_check() runs
3805 (i.e. before run-time proper). To work around the coredump that
3806 ensues, we always turn GvMULTI_on for any globals that were
3807 introduced within evals. See force_ident(). GSAR 96-10-12 */
3809 PL_hints = PL_op->op_targ;
3811 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3812 SvREFCNT_dec(GvHV(PL_hintgv));
3813 GvHV(PL_hintgv) = saved_hh;
3815 SAVECOMPILEWARNINGS();
3816 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3817 if (PL_compiling.cop_hints_hash) {
3818 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3820 if (Perl_fetch_cop_label(aTHX_ PL_curcop->cop_hints_hash, NULL, NULL)) {
3821 /* The label, if present, is the first entry on the chain. So rather
3822 than writing a blank label in front of it (which involves an
3823 allocation), just use the next entry in the chain. */
3824 PL_compiling.cop_hints_hash
3825 = PL_curcop->cop_hints_hash->refcounted_he_next;
3826 /* Check the assumption that this removed the label. */
3827 assert(Perl_fetch_cop_label(aTHX_ PL_compiling.cop_hints_hash, NULL,
3831 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3832 if (PL_compiling.cop_hints_hash) {
3834 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3835 HINTS_REFCNT_UNLOCK;
3837 /* special case: an eval '' executed within the DB package gets lexically
3838 * placed in the first non-DB CV rather than the current CV - this
3839 * allows the debugger to execute code, find lexicals etc, in the
3840 * scope of the code being debugged. Passing &seq gets find_runcv
3841 * to do the dirty work for us */
3842 runcv = find_runcv(&seq);
3844 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3846 cx->blk_eval.retop = PL_op->op_next;
3848 /* prepare to compile string */
3850 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3851 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3854 if (doeval(gimme, NULL, runcv, seq)) {
3855 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3856 ? (PERLDB_LINE || PERLDB_SAVESRC)
3857 : PERLDB_SAVESRC_NOSUBS) {
3858 /* Retain the filegv we created. */
3860 char *const safestr = savepvn(tmpbuf, len);
3861 SAVEDELETE(PL_defstash, safestr, len);
3863 return DOCATCH(PL_eval_start);
3865 /* We have already left the scope set up earler thanks to the LEAVE
3867 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3868 ? (PERLDB_LINE || PERLDB_SAVESRC)
3869 : PERLDB_SAVESRC_INVALID) {
3870 /* Retain the filegv we created. */
3872 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3874 return PL_op->op_next;
3885 register PERL_CONTEXT *cx;
3887 const U8 save_flags = PL_op -> op_flags;
3893 namesv = cx->blk_eval.old_namesv;
3894 retop = cx->blk_eval.retop;
3897 if (gimme == G_VOID)
3899 else if (gimme == G_SCALAR) {
3902 if (SvFLAGS(TOPs) & SVs_TEMP)
3905 *MARK = sv_mortalcopy(TOPs);
3909 *MARK = &PL_sv_undef;
3914 /* in case LEAVE wipes old return values */
3915 for (mark = newsp + 1; mark <= SP; mark++) {
3916 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3917 *mark = sv_mortalcopy(*mark);
3918 TAINT_NOT; /* Each item is independent */
3922 PL_curpm = newpm; /* Don't pop $1 et al till now */
3925 assert(CvDEPTH(PL_compcv) == 1);
3927 CvDEPTH(PL_compcv) = 0;
3930 if (optype == OP_REQUIRE &&
3931 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3933 /* Unassume the success we assumed earlier. */
3934 (void)hv_delete(GvHVn(PL_incgv),
3935 SvPVX_const(namesv), SvCUR(namesv),
3937 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
3939 /* die_unwind() did LEAVE, or we won't be here */
3942 LEAVE_with_name("eval");
3943 if (!(save_flags & OPf_SPECIAL)) {
3951 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3952 close to the related Perl_create_eval_scope. */
3954 Perl_delete_eval_scope(pTHX)
3959 register PERL_CONTEXT *cx;
3965 LEAVE_with_name("eval_scope");
3966 PERL_UNUSED_VAR(newsp);
3967 PERL_UNUSED_VAR(gimme);
3968 PERL_UNUSED_VAR(optype);
3971 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3972 also needed by Perl_fold_constants. */
3974 Perl_create_eval_scope(pTHX_ U32 flags)
3977 const I32 gimme = GIMME_V;
3979 ENTER_with_name("eval_scope");
3982 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3985 PL_in_eval = EVAL_INEVAL;
3986 if (flags & G_KEEPERR)
3987 PL_in_eval |= EVAL_KEEPERR;
3990 if (flags & G_FAKINGEVAL) {
3991 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3999 PERL_CONTEXT * const cx = create_eval_scope(0);
4000 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4001 return DOCATCH(PL_op->op_next);
4010 register PERL_CONTEXT *cx;
4015 PERL_UNUSED_VAR(optype);
4018 if (gimme == G_VOID)
4020 else if (gimme == G_SCALAR) {
4024 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4027 *MARK = sv_mortalcopy(TOPs);
4031 *MARK = &PL_sv_undef;
4036 /* in case LEAVE wipes old return values */
4038 for (mark = newsp + 1; mark <= SP; mark++) {
4039 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4040 *mark = sv_mortalcopy(*mark);
4041 TAINT_NOT; /* Each item is independent */
4045 PL_curpm = newpm; /* Don't pop $1 et al till now */
4047 LEAVE_with_name("eval_scope");
4055 register PERL_CONTEXT *cx;
4056 const I32 gimme = GIMME_V;
4058 ENTER_with_name("given");
4061 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
4063 PUSHBLOCK(cx, CXt_GIVEN, SP);
4072 register PERL_CONTEXT *cx;
4076 PERL_UNUSED_CONTEXT;
4079 assert(CxTYPE(cx) == CXt_GIVEN);
4082 if (gimme == G_VOID)
4084 else if (gimme == G_SCALAR) {
4088 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
4091 *MARK = sv_mortalcopy(TOPs);
4095 *MARK = &PL_sv_undef;
4100 /* in case LEAVE wipes old return values */
4102 for (mark = newsp + 1; mark <= SP; mark++) {
4103 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
4104 *mark = sv_mortalcopy(*mark);
4105 TAINT_NOT; /* Each item is independent */
4109 PL_curpm = newpm; /* Don't pop $1 et al till now */
4111 LEAVE_with_name("given");
4115 /* Helper routines used by pp_smartmatch */
4117 S_make_matcher(pTHX_ REGEXP *re)
4120 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4122 PERL_ARGS_ASSERT_MAKE_MATCHER;
4124 PM_SETRE(matcher, ReREFCNT_inc(re));
4126 SAVEFREEOP((OP *) matcher);
4127 ENTER_with_name("matcher"); SAVETMPS;
4133 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4138 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4140 PL_op = (OP *) matcher;
4145 return (SvTRUEx(POPs));
4149 S_destroy_matcher(pTHX_ PMOP *matcher)
4153 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4154 PERL_UNUSED_ARG(matcher);
4157 LEAVE_with_name("matcher");
4160 /* Do a smart match */
4163 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4164 return do_smartmatch(NULL, NULL);
4167 /* This version of do_smartmatch() implements the
4168 * table of smart matches that is found in perlsyn.
4171 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4176 bool object_on_left = FALSE;
4177 SV *e = TOPs; /* e is for 'expression' */
4178 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4180 /* Take care only to invoke mg_get() once for each argument.
4181 * Currently we do this by copying the SV if it's magical. */
4184 d = sv_mortalcopy(d);
4191 e = sv_mortalcopy(e);
4193 /* First of all, handle overload magic of the rightmost argument */
4196 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4197 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4199 tmpsv = amagic_call(d, e, smart_amg, 0);
4206 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4209 SP -= 2; /* Pop the values */
4214 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4221 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4222 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4223 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4225 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4226 object_on_left = TRUE;
4229 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4231 if (object_on_left) {
4232 goto sm_any_sub; /* Treat objects like scalars */
4234 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4235 /* Test sub truth for each key */
4237 bool andedresults = TRUE;
4238 HV *hv = (HV*) SvRV(d);
4239 I32 numkeys = hv_iterinit(hv);
4240 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4243 while ( (he = hv_iternext(hv)) ) {
4244 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4245 ENTER_with_name("smartmatch_hash_key_test");
4248 PUSHs(hv_iterkeysv(he));
4250 c = call_sv(e, G_SCALAR);
4253 andedresults = FALSE;
4255 andedresults = SvTRUEx(POPs) && andedresults;
4257 LEAVE_with_name("smartmatch_hash_key_test");
4264 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4265 /* Test sub truth for each element */
4267 bool andedresults = TRUE;
4268 AV *av = (AV*) SvRV(d);
4269 const I32 len = av_len(av);
4270 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4273 for (i = 0; i <= len; ++i) {
4274 SV * const * const svp = av_fetch(av, i, FALSE);
4275 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4276 ENTER_with_name("smartmatch_array_elem_test");
4282 c = call_sv(e, G_SCALAR);
4285 andedresults = FALSE;
4287 andedresults = SvTRUEx(POPs) && andedresults;
4289 LEAVE_with_name("smartmatch_array_elem_test");
4298 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4299 ENTER_with_name("smartmatch_coderef");
4304 c = call_sv(e, G_SCALAR);
4308 else if (SvTEMP(TOPs))
4309 SvREFCNT_inc_void(TOPs);
4311 LEAVE_with_name("smartmatch_coderef");
4316 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4317 if (object_on_left) {
4318 goto sm_any_hash; /* Treat objects like scalars */
4320 else if (!SvOK(d)) {
4321 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4324 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4325 /* Check that the key-sets are identical */
4327 HV *other_hv = MUTABLE_HV(SvRV(d));
4329 bool other_tied = FALSE;
4330 U32 this_key_count = 0,
4331 other_key_count = 0;
4332 HV *hv = MUTABLE_HV(SvRV(e));
4334 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4335 /* Tied hashes don't know how many keys they have. */
4336 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4339 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4340 HV * const temp = other_hv;
4345 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4348 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4351 /* The hashes have the same number of keys, so it suffices
4352 to check that one is a subset of the other. */
4353 (void) hv_iterinit(hv);
4354 while ( (he = hv_iternext(hv)) ) {
4355 SV *key = hv_iterkeysv(he);
4357 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4360 if(!hv_exists_ent(other_hv, key, 0)) {
4361 (void) hv_iterinit(hv); /* reset iterator */
4367 (void) hv_iterinit(other_hv);
4368 while ( hv_iternext(other_hv) )
4372 other_key_count = HvUSEDKEYS(other_hv);
4374 if (this_key_count != other_key_count)
4379 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4380 AV * const other_av = MUTABLE_AV(SvRV(d));
4381 const I32 other_len = av_len(other_av) + 1;
4383 HV *hv = MUTABLE_HV(SvRV(e));
4385 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4386 for (i = 0; i < other_len; ++i) {
4387 SV ** const svp = av_fetch(other_av, i, FALSE);
4388 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4389 if (svp) { /* ??? When can this not happen? */
4390 if (hv_exists_ent(hv, *svp, 0))
4396 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4397 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4400 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4402 HV *hv = MUTABLE_HV(SvRV(e));
4404 (void) hv_iterinit(hv);
4405 while ( (he = hv_iternext(hv)) ) {
4406 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4407 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4408 (void) hv_iterinit(hv);
4409 destroy_matcher(matcher);
4413 destroy_matcher(matcher);
4419 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4420 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4427 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4428 if (object_on_left) {
4429 goto sm_any_array; /* Treat objects like scalars */
4431 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4432 AV * const other_av = MUTABLE_AV(SvRV(e));
4433 const I32 other_len = av_len(other_av) + 1;
4436 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4437 for (i = 0; i < other_len; ++i) {
4438 SV ** const svp = av_fetch(other_av, i, FALSE);
4440 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4441 if (svp) { /* ??? When can this not happen? */
4442 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4448 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4449 AV *other_av = MUTABLE_AV(SvRV(d));
4450 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4451 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4455 const I32 other_len = av_len(other_av);
4457 if (NULL == seen_this) {
4458 seen_this = newHV();
4459 (void) sv_2mortal(MUTABLE_SV(seen_this));
4461 if (NULL == seen_other) {
4462 seen_other = newHV();
4463 (void) sv_2mortal(MUTABLE_SV(seen_other));
4465 for(i = 0; i <= other_len; ++i) {
4466 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4467 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4469 if (!this_elem || !other_elem) {
4470 if ((this_elem && SvOK(*this_elem))
4471 || (other_elem && SvOK(*other_elem)))
4474 else if (hv_exists_ent(seen_this,
4475 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4476 hv_exists_ent(seen_other,
4477 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4479 if (*this_elem != *other_elem)
4483 (void)hv_store_ent(seen_this,
4484 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4486 (void)hv_store_ent(seen_other,
4487 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4493 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4494 (void) do_smartmatch(seen_this, seen_other);
4496 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4505 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4506 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4509 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4510 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4513 for(i = 0; i <= this_len; ++i) {
4514 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4515 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4516 if (svp && matcher_matches_sv(matcher, *svp)) {
4517 destroy_matcher(matcher);
4521 destroy_matcher(matcher);
4525 else if (!SvOK(d)) {
4526 /* undef ~~ array */
4527 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4530 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4531 for (i = 0; i <= this_len; ++i) {
4532 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4533 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4534 if (!svp || !SvOK(*svp))
4543 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4545 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4546 for (i = 0; i <= this_len; ++i) {
4547 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4554 /* infinite recursion isn't supposed to happen here */
4555 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4556 (void) do_smartmatch(NULL, NULL);
4558 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4567 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4568 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4569 SV *t = d; d = e; e = t;
4570 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4573 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4574 SV *t = d; d = e; e = t;
4575 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4576 goto sm_regex_array;
4579 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4581 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4583 PUSHs(matcher_matches_sv(matcher, d)
4586 destroy_matcher(matcher);
4591 /* See if there is overload magic on left */
4592 else if (object_on_left && SvAMAGIC(d)) {
4594 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4595 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4598 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4606 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4609 else if (!SvOK(d)) {
4610 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4611 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4616 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4617 DEBUG_M(if (SvNIOK(e))
4618 Perl_deb(aTHX_ " applying rule Any-Num\n");
4620 Perl_deb(aTHX_ " applying rule Num-numish\n");
4622 /* numeric comparison */
4625 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4636 /* As a last resort, use string comparison */
4637 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4646 register PERL_CONTEXT *cx;
4647 const I32 gimme = GIMME_V;
4649 /* This is essentially an optimization: if the match
4650 fails, we don't want to push a context and then
4651 pop it again right away, so we skip straight
4652 to the op that follows the leavewhen.
4653 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4655 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4656 RETURNOP(cLOGOP->op_other->op_next);
4658 ENTER_with_name("eval");
4661 PUSHBLOCK(cx, CXt_WHEN, SP);
4670 register PERL_CONTEXT *cx;
4676 assert(CxTYPE(cx) == CXt_WHEN);
4681 PL_curpm = newpm; /* pop $1 et al */
4683 LEAVE_with_name("eval");
4691 register PERL_CONTEXT *cx;
4694 cxix = dopoptowhen(cxstack_ix);
4696 DIE(aTHX_ "Can't \"continue\" outside a when block");
4697 if (cxix < cxstack_ix)
4700 /* clear off anything above the scope we're re-entering */
4701 inner = PL_scopestack_ix;
4703 if (PL_scopestack_ix < inner)
4704 leave_scope(PL_scopestack[PL_scopestack_ix]);
4705 PL_curcop = cx->blk_oldcop;
4706 return cx->blk_givwhen.leave_op;
4713 register PERL_CONTEXT *cx;
4717 cxix = dopoptogiven(cxstack_ix);
4719 if (PL_op->op_flags & OPf_SPECIAL)
4720 DIE(aTHX_ "Can't use when() outside a topicalizer");
4722 DIE(aTHX_ "Can't \"break\" outside a given block");
4724 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4725 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4727 if (cxix < cxstack_ix)
4730 /* clear off anything above the scope we're re-entering */
4731 inner = PL_scopestack_ix;
4733 if (PL_scopestack_ix < inner)
4734 leave_scope(PL_scopestack[PL_scopestack_ix]);
4735 PL_curcop = cx->blk_oldcop;
4738 return CX_LOOP_NEXTOP_GET(cx);
4740 /* RETURNOP calls PUTBACK which restores the old old sp */
4741 RETURNOP(cx->blk_givwhen.leave_op);
4745 S_doparseform(pTHX_ SV *sv)
4748 register char *s = SvPV_force(sv, len);
4749 register char * const send = s + len;
4750 register char *base = NULL;
4751 register I32 skipspaces = 0;
4752 bool noblank = FALSE;
4753 bool repeat = FALSE;
4754 bool postspace = FALSE;
4760 bool unchopnum = FALSE;
4761 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4763 PERL_ARGS_ASSERT_DOPARSEFORM;
4766 Perl_croak(aTHX_ "Null picture in formline");
4768 /* estimate the buffer size needed */
4769 for (base = s; s <= send; s++) {
4770 if (*s == '\n' || *s == '@' || *s == '^')
4776 Newx(fops, maxops, U32);
4781 *fpc++ = FF_LINEMARK;
4782 noblank = repeat = FALSE;
4800 case ' ': case '\t':
4807 } /* else FALL THROUGH */
4815 *fpc++ = FF_LITERAL;
4823 *fpc++ = (U16)skipspaces;
4827 *fpc++ = FF_NEWLINE;
4831 arg = fpc - linepc + 1;
4838 *fpc++ = FF_LINEMARK;
4839 noblank = repeat = FALSE;
4848 ischop = s[-1] == '^';
4854 arg = (s - base) - 1;
4856 *fpc++ = FF_LITERAL;
4864 *fpc++ = 2; /* skip the @* or ^* */
4866 *fpc++ = FF_LINESNGL;
4869 *fpc++ = FF_LINEGLOB;
4871 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4872 arg = ischop ? 512 : 0;
4877 const char * const f = ++s;
4880 arg |= 256 + (s - f);
4882 *fpc++ = s - base; /* fieldsize for FETCH */
4883 *fpc++ = FF_DECIMAL;
4885 unchopnum |= ! ischop;
4887 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4888 arg = ischop ? 512 : 0;
4890 s++; /* skip the '0' first */
4894 const char * const f = ++s;
4897 arg |= 256 + (s - f);
4899 *fpc++ = s - base; /* fieldsize for FETCH */
4900 *fpc++ = FF_0DECIMAL;
4902 unchopnum |= ! ischop;
4906 bool ismore = FALSE;
4909 while (*++s == '>') ;
4910 prespace = FF_SPACE;
4912 else if (*s == '|') {
4913 while (*++s == '|') ;
4914 prespace = FF_HALFSPACE;
4919 while (*++s == '<') ;
4922 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4926 *fpc++ = s - base; /* fieldsize for FETCH */
4928 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4931 *fpc++ = (U16)prespace;
4945 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4947 { /* need to jump to the next word */
4949 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4950 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4951 s = SvPVX(sv) + SvCUR(sv) + z;
4953 Copy(fops, s, arg, U32);
4955 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4958 if (unchopnum && repeat)
4959 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4965 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4967 /* Can value be printed in fldsize chars, using %*.*f ? */
4971 int intsize = fldsize - (value < 0 ? 1 : 0);
4978 while (intsize--) pwr *= 10.0;
4979 while (frcsize--) eps /= 10.0;
4982 if (value + eps >= pwr)
4985 if (value - eps <= -pwr)
4992 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4995 SV * const datasv = FILTER_DATA(idx);
4996 const int filter_has_file = IoLINES(datasv);
4997 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
4998 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5003 char *prune_from = NULL;
5004 bool read_from_cache = FALSE;
5007 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5009 assert(maxlen >= 0);
5012 /* I was having segfault trouble under Linux 2.2.5 after a
5013 parse error occured. (Had to hack around it with a test
5014 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5015 not sure where the trouble is yet. XXX */
5018 SV *const cache = datasv;
5021 const char *cache_p = SvPV(cache, cache_len);
5025 /* Running in block mode and we have some cached data already.
5027 if (cache_len >= umaxlen) {
5028 /* In fact, so much data we don't even need to call
5033 const char *const first_nl =
5034 (const char *)memchr(cache_p, '\n', cache_len);
5036 take = first_nl + 1 - cache_p;
5040 sv_catpvn(buf_sv, cache_p, take);
5041 sv_chop(cache, cache_p + take);
5042 /* Definately not EOF */
5046 sv_catsv(buf_sv, cache);
5048 umaxlen -= cache_len;
5051 read_from_cache = TRUE;
5055 /* Filter API says that the filter appends to the contents of the buffer.
5056 Usually the buffer is "", so the details don't matter. But if it's not,
5057 then clearly what it contains is already filtered by this filter, so we
5058 don't want to pass it in a second time.
5059 I'm going to use a mortal in case the upstream filter croaks. */
5060 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5061 ? sv_newmortal() : buf_sv;
5062 SvUPGRADE(upstream, SVt_PV);
5064 if (filter_has_file) {
5065 status = FILTER_READ(idx+1, upstream, 0);
5068 if (filter_sub && status >= 0) {
5072 ENTER_with_name("call_filter_sub");
5077 DEFSV_set(upstream);
5081 PUSHs(filter_state);
5084 count = call_sv(filter_sub, G_SCALAR);
5096 LEAVE_with_name("call_filter_sub");
5099 if(SvOK(upstream)) {
5100 got_p = SvPV(upstream, got_len);
5102 if (got_len > umaxlen) {
5103 prune_from = got_p + umaxlen;
5106 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5107 if (first_nl && first_nl + 1 < got_p + got_len) {
5108 /* There's a second line here... */
5109 prune_from = first_nl + 1;
5114 /* Oh. Too long. Stuff some in our cache. */
5115 STRLEN cached_len = got_p + got_len - prune_from;
5116 SV *const cache = datasv;
5119 /* Cache should be empty. */
5120 assert(!SvCUR(cache));
5123 sv_setpvn(cache, prune_from, cached_len);
5124 /* If you ask for block mode, you may well split UTF-8 characters.
5125 "If it breaks, you get to keep both parts"
5126 (Your code is broken if you don't put them back together again
5127 before something notices.) */
5128 if (SvUTF8(upstream)) {
5131 SvCUR_set(upstream, got_len - cached_len);
5133 /* Can't yet be EOF */
5138 /* If they are at EOF but buf_sv has something in it, then they may never
5139 have touched the SV upstream, so it may be undefined. If we naively
5140 concatenate it then we get a warning about use of uninitialised value.
5142 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5143 sv_catsv(buf_sv, upstream);
5147 IoLINES(datasv) = 0;
5149 SvREFCNT_dec(filter_state);
5150 IoTOP_GV(datasv) = NULL;
5153 SvREFCNT_dec(filter_sub);
5154 IoBOTTOM_GV(datasv) = NULL;
5156 filter_del(S_run_user_filter);
5158 if (status == 0 && read_from_cache) {
5159 /* If we read some data from the cache (and by getting here it implies
5160 that we emptied the cache) then we aren't yet at EOF, and mustn't
5161 report that to our caller. */
5167 /* perhaps someone can come up with a better name for
5168 this? it is not really "absolute", per se ... */
5170 S_path_is_absolute(const char *name)
5172 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5174 if (PERL_FILE_IS_ABSOLUTE(name)
5176 || (*name == '.' && ((name[1] == '/' ||
5177 (name[1] == '.' && name[2] == '/'))
5178 || (name[1] == '\\' ||
5179 ( name[1] == '.' && name[2] == '\\')))
5182 || (*name == '.' && (name[1] == '/' ||
5183 (name[1] == '.' && name[2] == '/')))
5195 * c-indentation-style: bsd
5197 * indent-tabs-mode: t
5200 * ex: set ts=8 sts=4 sw=4 noet: