3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 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.
20 /* This file contains control-oriented pp ("push/pop") functions that
21 * execute the opcodes that make up a perl program. A typical pp function
22 * expects to find its arguments on the stack, and usually pushes its
23 * results onto the stack, hence the 'pp' terminology. Each OP structure
24 * contains a pointer to the relevant pp_foo() function.
26 * Control-oriented means things like pp_enteriter() and pp_next(), which
27 * alter the flow of control of the program.
32 #define PERL_IN_PP_CTL_C
36 #define WORD_ALIGN sizeof(U32)
39 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
41 static I32 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen);
49 cxix = dopoptosub(cxstack_ix);
53 switch (cxstack[cxix].blk_gimme) {
65 /* XXXX Should store the old value to allow for tie/overload - and
66 restore in regcomp, where marked with XXXX. */
75 register PMOP *pm = (PMOP*)cLOGOP->op_other;
77 MAGIC *mg = Null(MAGIC*);
79 /* prevent recompiling under /o and ithreads. */
80 #if defined(USE_ITHREADS)
81 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
82 if (PL_op->op_flags & OPf_STACKED) {
91 if (PL_op->op_flags & OPf_STACKED) {
92 /* multiple args; concatentate them */
94 tmpstr = PAD_SV(ARGTARG);
95 sv_setpvn(tmpstr, "", 0);
96 while (++MARK <= SP) {
97 if (PL_amagic_generation) {
99 if ((SvAMAGIC(tmpstr) || SvAMAGIC(*MARK)) &&
100 (sv = amagic_call(tmpstr, *MARK, concat_amg, AMGf_assign)))
102 sv_setsv(tmpstr, sv);
106 sv_catsv(tmpstr, *MARK);
115 SV *sv = SvRV(tmpstr);
117 mg = mg_find(sv, PERL_MAGIC_qr);
120 regexp * const re = (regexp *)mg->mg_obj;
121 ReREFCNT_dec(PM_GETRE(pm));
122 PM_SETRE(pm, ReREFCNT_inc(re));
126 const char *t = SvPV_const(tmpstr, len);
128 /* Check against the last compiled regexp. */
129 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
130 PM_GETRE(pm)->prelen != (I32)len ||
131 memNE(PM_GETRE(pm)->precomp, t, len))
134 ReREFCNT_dec(PM_GETRE(pm));
135 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
137 if (PL_op->op_flags & OPf_SPECIAL)
138 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
140 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
142 pm->op_pmdynflags |= PMdf_DYN_UTF8;
144 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
145 if (pm->op_pmdynflags & PMdf_UTF8)
146 t = (char*)bytes_to_utf8((U8*)t, &len);
148 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char *)t, (char *)t + len, pm));
149 if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
151 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
152 inside tie/overload accessors. */
156 #ifndef INCOMPLETE_TAINTS
159 pm->op_pmdynflags |= PMdf_TAINTED;
161 pm->op_pmdynflags &= ~PMdf_TAINTED;
165 if (!PM_GETRE(pm)->prelen && PL_curpm)
167 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
168 pm->op_pmflags |= PMf_WHITE;
170 pm->op_pmflags &= ~PMf_WHITE;
172 /* XXX runtime compiled output needs to move to the pad */
173 if (pm->op_pmflags & PMf_KEEP) {
174 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
175 #if !defined(USE_ITHREADS)
176 /* XXX can't change the optree at runtime either */
177 cLOGOP->op_first->op_next = PL_op->op_next;
186 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
187 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
188 register SV * const dstr = cx->sb_dstr;
189 register char *s = cx->sb_s;
190 register char *m = cx->sb_m;
191 char *orig = cx->sb_orig;
192 register REGEXP * const rx = cx->sb_rx;
194 REGEXP *old = PM_GETRE(pm);
201 rxres_restore(&cx->sb_rxres, rx);
202 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
204 if (cx->sb_iters++) {
205 const I32 saviters = cx->sb_iters;
206 if (cx->sb_iters > cx->sb_maxiters)
207 DIE(aTHX_ "Substitution loop");
209 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
210 cx->sb_rxtainted |= 2;
211 sv_catsv(dstr, POPs);
214 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
215 s == m, cx->sb_targ, NULL,
216 ((cx->sb_rflags & REXEC_COPY_STR)
217 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
218 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
220 SV * const targ = cx->sb_targ;
222 assert(cx->sb_strend >= s);
223 if(cx->sb_strend > s) {
224 if (DO_UTF8(dstr) && !SvUTF8(targ))
225 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
227 sv_catpvn(dstr, s, cx->sb_strend - s);
229 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
231 #ifdef PERL_OLD_COPY_ON_WRITE
233 sv_force_normal_flags(targ, SV_COW_DROP_PV);
239 SvPV_set(targ, SvPVX(dstr));
240 SvCUR_set(targ, SvCUR(dstr));
241 SvLEN_set(targ, SvLEN(dstr));
244 SvPV_set(dstr, (char*)0);
247 TAINT_IF(cx->sb_rxtainted & 1);
248 PUSHs(sv_2mortal(newSViv(saviters - 1)));
250 (void)SvPOK_only_UTF8(targ);
251 TAINT_IF(cx->sb_rxtainted);
255 LEAVE_SCOPE(cx->sb_oldsave);
258 RETURNOP(pm->op_next);
260 cx->sb_iters = saviters;
262 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
265 cx->sb_orig = orig = rx->subbeg;
267 cx->sb_strend = s + (cx->sb_strend - m);
269 cx->sb_m = m = rx->startp[0] + orig;
271 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
272 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
274 sv_catpvn(dstr, s, m-s);
276 cx->sb_s = rx->endp[0] + orig;
277 { /* Update the pos() information. */
278 SV * const sv = cx->sb_targ;
281 if (SvTYPE(sv) < SVt_PVMG)
282 SvUPGRADE(sv, SVt_PVMG);
283 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
284 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
285 mg = mg_find(sv, PERL_MAGIC_regex_global);
293 (void)ReREFCNT_inc(rx);
294 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
295 rxres_save(&cx->sb_rxres, rx);
296 RETURNOP(pm->op_pmreplstart);
300 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
305 if (!p || p[1] < rx->nparens) {
306 #ifdef PERL_OLD_COPY_ON_WRITE
307 i = 7 + rx->nparens * 2;
309 i = 6 + rx->nparens * 2;
318 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
319 RX_MATCH_COPIED_off(rx);
321 #ifdef PERL_OLD_COPY_ON_WRITE
322 *p++ = PTR2UV(rx->saved_copy);
323 rx->saved_copy = Nullsv;
328 *p++ = PTR2UV(rx->subbeg);
329 *p++ = (UV)rx->sublen;
330 for (i = 0; i <= rx->nparens; ++i) {
331 *p++ = (UV)rx->startp[i];
332 *p++ = (UV)rx->endp[i];
337 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
342 RX_MATCH_COPY_FREE(rx);
343 RX_MATCH_COPIED_set(rx, *p);
346 #ifdef PERL_OLD_COPY_ON_WRITE
348 SvREFCNT_dec (rx->saved_copy);
349 rx->saved_copy = INT2PTR(SV*,*p);
355 rx->subbeg = INT2PTR(char*,*p++);
356 rx->sublen = (I32)(*p++);
357 for (i = 0; i <= rx->nparens; ++i) {
358 rx->startp[i] = (I32)(*p++);
359 rx->endp[i] = (I32)(*p++);
364 Perl_rxres_free(pTHX_ void **rsp)
366 UV * const p = (UV*)*rsp;
370 void *tmp = INT2PTR(char*,*p);
373 Poison(*p, 1, sizeof(*p));
375 Safefree(INT2PTR(char*,*p));
377 #ifdef PERL_OLD_COPY_ON_WRITE
379 SvREFCNT_dec (INT2PTR(SV*,p[1]));
389 dSP; dMARK; dORIGMARK;
390 register SV * const tmpForm = *++MARK;
395 register SV *sv = Nullsv;
396 const char *item = Nullch;
400 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
401 const char *chophere = Nullch;
402 char *linemark = Nullch;
404 bool gotsome = FALSE;
406 const STRLEN fudge = SvPOK(tmpForm)
407 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
408 bool item_is_utf8 = FALSE;
409 bool targ_is_utf8 = FALSE;
415 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
416 if (SvREADONLY(tmpForm)) {
417 SvREADONLY_off(tmpForm);
418 parseres = doparseform(tmpForm);
419 SvREADONLY_on(tmpForm);
422 parseres = doparseform(tmpForm);
426 SvPV_force(PL_formtarget, len);
427 if (DO_UTF8(PL_formtarget))
429 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
431 f = SvPV_const(tmpForm, len);
432 /* need to jump to the next word */
433 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
437 const char *name = "???";
440 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
441 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
442 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
443 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
444 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
446 case FF_CHECKNL: name = "CHECKNL"; break;
447 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
448 case FF_SPACE: name = "SPACE"; break;
449 case FF_HALFSPACE: name = "HALFSPACE"; break;
450 case FF_ITEM: name = "ITEM"; break;
451 case FF_CHOP: name = "CHOP"; break;
452 case FF_LINEGLOB: name = "LINEGLOB"; break;
453 case FF_NEWLINE: name = "NEWLINE"; break;
454 case FF_MORE: name = "MORE"; break;
455 case FF_LINEMARK: name = "LINEMARK"; break;
456 case FF_END: name = "END"; break;
457 case FF_0DECIMAL: name = "0DECIMAL"; break;
458 case FF_LINESNGL: name = "LINESNGL"; break;
461 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
463 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
474 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
475 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
477 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
478 t = SvEND(PL_formtarget);
481 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
482 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
484 sv_utf8_upgrade(PL_formtarget);
485 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
486 t = SvEND(PL_formtarget);
506 if (ckWARN(WARN_SYNTAX))
507 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
514 const char *s = item = SvPV_const(sv, len);
517 itemsize = sv_len_utf8(sv);
518 if (itemsize != (I32)len) {
520 if (itemsize > fieldsize) {
521 itemsize = fieldsize;
522 itembytes = itemsize;
523 sv_pos_u2b(sv, &itembytes, 0);
527 send = chophere = s + itembytes;
537 sv_pos_b2u(sv, &itemsize);
541 item_is_utf8 = FALSE;
542 if (itemsize > fieldsize)
543 itemsize = fieldsize;
544 send = chophere = s + itemsize;
558 const char *s = item = SvPV_const(sv, len);
561 itemsize = sv_len_utf8(sv);
562 if (itemsize != (I32)len) {
564 if (itemsize <= fieldsize) {
565 const char *send = chophere = s + itemsize;
578 itemsize = fieldsize;
579 itembytes = itemsize;
580 sv_pos_u2b(sv, &itembytes, 0);
581 send = chophere = s + itembytes;
582 while (s < send || (s == send && isSPACE(*s))) {
592 if (strchr(PL_chopset, *s))
597 itemsize = chophere - item;
598 sv_pos_b2u(sv, &itemsize);
604 item_is_utf8 = FALSE;
605 if (itemsize <= fieldsize) {
606 const char *const send = chophere = s + itemsize;
619 itemsize = fieldsize;
620 send = chophere = s + itemsize;
621 while (s < send || (s == send && isSPACE(*s))) {
631 if (strchr(PL_chopset, *s))
636 itemsize = chophere - item;
642 arg = fieldsize - itemsize;
651 arg = fieldsize - itemsize;
662 const char *s = item;
666 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
668 sv_utf8_upgrade(PL_formtarget);
669 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
670 t = SvEND(PL_formtarget);
674 if (UTF8_IS_CONTINUED(*s)) {
675 STRLEN skip = UTF8SKIP(s);
692 if ( !((*t++ = *s++) & ~31) )
698 if (targ_is_utf8 && !item_is_utf8) {
699 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
701 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
702 for (; t < SvEND(PL_formtarget); t++) {
715 const int ch = *t++ = *s++;
718 if ( !((*t++ = *s++) & ~31) )
727 const char *s = chophere;
729 while (*s && isSPACE(*s))
745 const char *s = item = SvPV_const(sv, len);
747 if ((item_is_utf8 = DO_UTF8(sv)))
748 itemsize = sv_len_utf8(sv);
750 bool chopped = FALSE;
751 const char *const send = s + len;
753 chophere = s + itemsize;
769 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
771 SvUTF8_on(PL_formtarget);
773 SvCUR_set(sv, chophere - item);
774 sv_catsv(PL_formtarget, sv);
775 SvCUR_set(sv, itemsize);
777 sv_catsv(PL_formtarget, sv);
779 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
780 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
781 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
790 #if defined(USE_LONG_DOUBLE)
791 fmt = (arg & 256) ? "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl;
793 fmt = (arg & 256) ? "%#0*.*f" : "%0*.*f";
798 #if defined(USE_LONG_DOUBLE)
799 fmt = (arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl;
801 fmt = (arg & 256) ? "%#*.*f" : "%*.*f";
804 /* If the field is marked with ^ and the value is undefined,
806 if ((arg & 512) && !SvOK(sv)) {
814 /* overflow evidence */
815 if (num_overflow(value, fieldsize, arg)) {
821 /* Formats aren't yet marked for locales, so assume "yes". */
823 STORE_NUMERIC_STANDARD_SET_LOCAL();
824 sprintf(t, fmt, (int) fieldsize, (int) arg & 255, value);
825 RESTORE_NUMERIC_STANDARD();
832 while (t-- > linemark && *t == ' ') ;
840 if (arg) { /* repeat until fields exhausted? */
842 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
843 lines += FmLINES(PL_formtarget);
846 if (strnEQ(linemark, linemark - arg, arg))
847 DIE(aTHX_ "Runaway format");
850 SvUTF8_on(PL_formtarget);
851 FmLINES(PL_formtarget) = lines;
853 RETURNOP(cLISTOP->op_first);
864 const char *s = chophere;
865 const char *send = item + len;
867 while (*s && isSPACE(*s) && s < send)
872 arg = fieldsize - itemsize;
879 if (strnEQ(s1," ",3)) {
880 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
891 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
893 SvUTF8_on(PL_formtarget);
894 FmLINES(PL_formtarget) += lines;
906 if (PL_stack_base + *PL_markstack_ptr == SP) {
908 if (GIMME_V == G_SCALAR)
909 XPUSHs(sv_2mortal(newSViv(0)));
910 RETURNOP(PL_op->op_next->op_next);
912 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
913 pp_pushmark(); /* push dst */
914 pp_pushmark(); /* push src */
915 ENTER; /* enter outer scope */
918 if (PL_op->op_private & OPpGREP_LEX)
919 SAVESPTR(PAD_SVl(PL_op->op_targ));
922 ENTER; /* enter inner scope */
925 src = PL_stack_base[*PL_markstack_ptr];
927 if (PL_op->op_private & OPpGREP_LEX)
928 PAD_SVl(PL_op->op_targ) = src;
933 if (PL_op->op_type == OP_MAPSTART)
934 pp_pushmark(); /* push top */
935 return ((LOGOP*)PL_op->op_next)->op_other;
941 const I32 gimme = GIMME_V;
942 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
948 /* first, move source pointer to the next item in the source list */
949 ++PL_markstack_ptr[-1];
951 /* if there are new items, push them into the destination list */
952 if (items && gimme != G_VOID) {
953 /* might need to make room back there first */
954 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
955 /* XXX this implementation is very pessimal because the stack
956 * is repeatedly extended for every set of items. Is possible
957 * to do this without any stack extension or copying at all
958 * by maintaining a separate list over which the map iterates
959 * (like foreach does). --gsar */
961 /* everything in the stack after the destination list moves
962 * towards the end the stack by the amount of room needed */
963 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
965 /* items to shift up (accounting for the moved source pointer) */
966 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
968 /* This optimization is by Ben Tilly and it does
969 * things differently from what Sarathy (gsar)
970 * is describing. The downside of this optimization is
971 * that leaves "holes" (uninitialized and hopefully unused areas)
972 * to the Perl stack, but on the other hand this
973 * shouldn't be a problem. If Sarathy's idea gets
974 * implemented, this optimization should become
975 * irrelevant. --jhi */
977 shift = count; /* Avoid shifting too often --Ben Tilly */
982 PL_markstack_ptr[-1] += shift;
983 *PL_markstack_ptr += shift;
987 /* copy the new items down to the destination list */
988 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
989 if (gimme == G_ARRAY) {
991 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
994 /* scalar context: we don't care about which values map returns
995 * (we use undef here). And so we certainly don't want to do mortal
996 * copies of meaningless values. */
997 while (items-- > 0) {
999 *dst-- = &PL_sv_undef;
1003 LEAVE; /* exit inner scope */
1006 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1008 (void)POPMARK; /* pop top */
1009 LEAVE; /* exit outer scope */
1010 (void)POPMARK; /* pop src */
1011 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1012 (void)POPMARK; /* pop dst */
1013 SP = PL_stack_base + POPMARK; /* pop original mark */
1014 if (gimme == G_SCALAR) {
1015 if (PL_op->op_private & OPpGREP_LEX) {
1016 SV* sv = sv_newmortal();
1017 sv_setiv(sv, items);
1025 else if (gimme == G_ARRAY)
1032 ENTER; /* enter inner scope */
1035 /* set $_ to the new source item */
1036 src = PL_stack_base[PL_markstack_ptr[-1]];
1038 if (PL_op->op_private & OPpGREP_LEX)
1039 PAD_SVl(PL_op->op_targ) = src;
1043 RETURNOP(cLOGOP->op_other);
1051 if (GIMME == G_ARRAY)
1053 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1054 return cLOGOP->op_other;
1063 if (GIMME == G_ARRAY) {
1064 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1068 SV * const targ = PAD_SV(PL_op->op_targ);
1071 if (PL_op->op_private & OPpFLIP_LINENUM) {
1072 if (GvIO(PL_last_in_gv)) {
1073 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1076 GV * const gv = gv_fetchpv(".", TRUE, SVt_PV);
1078 flip = SvIV(sv) == SvIV(GvSV(gv));
1084 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1085 if (PL_op->op_flags & OPf_SPECIAL) {
1093 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1096 sv_setpvn(TARG, "", 0);
1102 /* This code tries to decide if "$left .. $right" should use the
1103 magical string increment, or if the range is numeric (we make
1104 an exception for .."0" [#18165]). AMS 20021031. */
1106 #define RANGE_IS_NUMERIC(left,right) ( \
1107 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1108 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1109 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1110 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1111 && (!SvOK(right) || looks_like_number(right))))
1117 if (GIMME == G_ARRAY) {
1123 if (RANGE_IS_NUMERIC(left,right)) {
1126 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1127 (SvOK(right) && SvNV(right) > IV_MAX))
1128 DIE(aTHX_ "Range iterator outside integer range");
1139 SV * const sv = sv_2mortal(newSViv(i++));
1144 SV * const final = sv_mortalcopy(right);
1146 const char * const tmps = SvPV_const(final, len);
1148 SV *sv = sv_mortalcopy(left);
1149 SvPV_force_nolen(sv);
1150 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1152 if (strEQ(SvPVX_const(sv),tmps))
1154 sv = sv_2mortal(newSVsv(sv));
1161 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1165 if (PL_op->op_private & OPpFLIP_LINENUM) {
1166 if (GvIO(PL_last_in_gv)) {
1167 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1170 GV * const gv = gv_fetchpv(".", TRUE, SVt_PV);
1171 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1179 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1180 sv_catpvn(targ, "E0", 2);
1190 static const char * const context_name[] = {
1201 S_dopoptolabel(pTHX_ const char *label)
1205 for (i = cxstack_ix; i >= 0; i--) {
1206 register const PERL_CONTEXT * const cx = &cxstack[i];
1207 switch (CxTYPE(cx)) {
1213 if (ckWARN(WARN_EXITING))
1214 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1215 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1216 if (CxTYPE(cx) == CXt_NULL)
1220 if ( !cx->blk_loop.label || strNE(label, cx->blk_loop.label) ) {
1221 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1222 (long)i, cx->blk_loop.label));
1225 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1233 Perl_dowantarray(pTHX)
1235 const I32 gimme = block_gimme();
1236 return (gimme == G_VOID) ? G_SCALAR : gimme;
1240 Perl_block_gimme(pTHX)
1242 const I32 cxix = dopoptosub(cxstack_ix);
1246 switch (cxstack[cxix].blk_gimme) {
1254 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1261 Perl_is_lvalue_sub(pTHX)
1263 const I32 cxix = dopoptosub(cxstack_ix);
1264 assert(cxix >= 0); /* We should only be called from inside subs */
1266 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1267 return cxstack[cxix].blk_sub.lval;
1273 S_dopoptosub(pTHX_ I32 startingblock)
1275 return dopoptosub_at(cxstack, startingblock);
1279 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1282 for (i = startingblock; i >= 0; i--) {
1283 register const PERL_CONTEXT * const cx = &cxstk[i];
1284 switch (CxTYPE(cx)) {
1290 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1298 S_dopoptoeval(pTHX_ I32 startingblock)
1301 for (i = startingblock; i >= 0; i--) {
1302 register const PERL_CONTEXT *cx = &cxstack[i];
1303 switch (CxTYPE(cx)) {
1307 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1315 S_dopoptoloop(pTHX_ I32 startingblock)
1318 for (i = startingblock; i >= 0; i--) {
1319 register const PERL_CONTEXT * const cx = &cxstack[i];
1320 switch (CxTYPE(cx)) {
1326 if (ckWARN(WARN_EXITING))
1327 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1328 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1329 if ((CxTYPE(cx)) == CXt_NULL)
1333 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1341 Perl_dounwind(pTHX_ I32 cxix)
1345 while (cxstack_ix > cxix) {
1347 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1348 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1349 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1350 /* Note: we don't need to restore the base context info till the end. */
1351 switch (CxTYPE(cx)) {
1354 continue; /* not break */
1373 PERL_UNUSED_VAR(optype);
1377 Perl_qerror(pTHX_ SV *err)
1380 sv_catsv(ERRSV, err);
1382 sv_catsv(PL_errors, err);
1384 Perl_warn(aTHX_ "%"SVf, err);
1389 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1398 if (PL_in_eval & EVAL_KEEPERR) {
1399 static const char prefix[] = "\t(in cleanup) ";
1400 SV * const err = ERRSV;
1401 const char *e = Nullch;
1403 sv_setpvn(err,"",0);
1404 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1406 e = SvPV_const(err, len);
1408 if (*e != *message || strNE(e,message))
1412 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1413 sv_catpvn(err, prefix, sizeof(prefix)-1);
1414 sv_catpvn(err, message, msglen);
1415 if (ckWARN(WARN_MISC)) {
1416 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1417 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1422 sv_setpvn(ERRSV, message, msglen);
1426 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1427 && PL_curstackinfo->si_prev)
1435 register PERL_CONTEXT *cx;
1438 if (cxix < cxstack_ix)
1441 POPBLOCK(cx,PL_curpm);
1442 if (CxTYPE(cx) != CXt_EVAL) {
1444 message = SvPVx_const(ERRSV, msglen);
1445 PerlIO_write(Perl_error_log, "panic: die ", 11);
1446 PerlIO_write(Perl_error_log, message, msglen);
1451 if (gimme == G_SCALAR)
1452 *++newsp = &PL_sv_undef;
1453 PL_stack_sp = newsp;
1457 /* LEAVE could clobber PL_curcop (see save_re_context())
1458 * XXX it might be better to find a way to avoid messing with
1459 * PL_curcop in save_re_context() instead, but this is a more
1460 * minimal fix --GSAR */
1461 PL_curcop = cx->blk_oldcop;
1463 if (optype == OP_REQUIRE) {
1464 const char* const msg = SvPVx_nolen_const(ERRSV);
1465 SV * const nsv = cx->blk_eval.old_namesv;
1466 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1468 DIE(aTHX_ "%sCompilation failed in require",
1469 *msg ? msg : "Unknown error\n");
1471 assert(CxTYPE(cx) == CXt_EVAL);
1472 return cx->blk_eval.retop;
1476 message = SvPVx_const(ERRSV, msglen);
1478 write_to_stderr(message, msglen);
1487 if (SvTRUE(left) != SvTRUE(right))
1499 RETURNOP(cLOGOP->op_other);
1508 RETURNOP(cLOGOP->op_other);
1517 if (!sv || !SvANY(sv)) {
1518 RETURNOP(cLOGOP->op_other);
1521 switch (SvTYPE(sv)) {
1523 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1527 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1531 if (CvROOT(sv) || CvXSUB(sv))
1540 RETURNOP(cLOGOP->op_other);
1546 register I32 cxix = dopoptosub(cxstack_ix);
1547 register const PERL_CONTEXT *cx;
1548 register const PERL_CONTEXT *ccstack = cxstack;
1549 const PERL_SI *top_si = PL_curstackinfo;
1551 const char *stashname;
1558 /* we may be in a higher stacklevel, so dig down deeper */
1559 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1560 top_si = top_si->si_prev;
1561 ccstack = top_si->si_cxstack;
1562 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1565 if (GIMME != G_ARRAY) {
1571 /* caller() should not report the automatic calls to &DB::sub */
1572 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1573 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1577 cxix = dopoptosub_at(ccstack, cxix - 1);
1580 cx = &ccstack[cxix];
1581 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1582 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1583 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1584 field below is defined for any cx. */
1585 /* caller() should not report the automatic calls to &DB::sub */
1586 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1587 cx = &ccstack[dbcxix];
1590 stashname = CopSTASHPV(cx->blk_oldcop);
1591 if (GIMME != G_ARRAY) {
1594 PUSHs(&PL_sv_undef);
1597 sv_setpv(TARG, stashname);
1606 PUSHs(&PL_sv_undef);
1608 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1609 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1610 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1613 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1614 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1615 /* So is ccstack[dbcxix]. */
1617 SV * const sv = NEWSV(49, 0);
1618 gv_efullname3(sv, cvgv, Nullch);
1619 PUSHs(sv_2mortal(sv));
1620 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1623 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1624 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1628 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1629 PUSHs(sv_2mortal(newSViv(0)));
1631 gimme = (I32)cx->blk_gimme;
1632 if (gimme == G_VOID)
1633 PUSHs(&PL_sv_undef);
1635 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1636 if (CxTYPE(cx) == CXt_EVAL) {
1638 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1639 PUSHs(cx->blk_eval.cur_text);
1643 else if (cx->blk_eval.old_namesv) {
1644 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1647 /* eval BLOCK (try blocks have old_namesv == 0) */
1649 PUSHs(&PL_sv_undef);
1650 PUSHs(&PL_sv_undef);
1654 PUSHs(&PL_sv_undef);
1655 PUSHs(&PL_sv_undef);
1657 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1658 && CopSTASH_eq(PL_curcop, PL_debstash))
1660 AV * const ary = cx->blk_sub.argarray;
1661 const int off = AvARRAY(ary) - AvALLOC(ary);
1665 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1668 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1671 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1672 av_extend(PL_dbargs, AvFILLp(ary) + off);
1673 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1674 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1676 /* XXX only hints propagated via op_private are currently
1677 * visible (others are not easily accessible, since they
1678 * use the global PL_hints) */
1679 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1680 HINT_PRIVATE_MASK)));
1683 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1685 if (old_warnings == pWARN_NONE ||
1686 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1687 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1688 else if (old_warnings == pWARN_ALL ||
1689 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1690 /* Get the bit mask for $warnings::Bits{all}, because
1691 * it could have been extended by warnings::register */
1693 HV *bits = get_hv("warnings::Bits", FALSE);
1694 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1695 mask = newSVsv(*bits_all);
1698 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1702 mask = newSVsv(old_warnings);
1703 PUSHs(sv_2mortal(mask));
1717 sv_reset(tmps, CopSTASH(PL_curcop));
1722 /* like pp_nextstate, but used instead when the debugger is active */
1727 PL_curcop = (COP*)PL_op;
1728 TAINT_NOT; /* Each statement is presumed innocent */
1729 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1732 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1733 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1737 register PERL_CONTEXT *cx;
1738 const I32 gimme = G_ARRAY;
1745 DIE(aTHX_ "No DB::DB routine defined");
1747 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1748 /* don't do recursive DB::DB call */
1763 (void)(*CvXSUB(cv))(aTHX_ cv);
1770 PUSHBLOCK(cx, CXt_SUB, SP);
1772 cx->blk_sub.retop = PL_op->op_next;
1775 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1776 RETURNOP(CvSTART(cv));
1786 register PERL_CONTEXT *cx;
1787 const I32 gimme = GIMME_V;
1789 U32 cxtype = CXt_LOOP;
1797 if (PL_op->op_targ) {
1798 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1799 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1800 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1801 SVs_PADSTALE, SVs_PADSTALE);
1803 #ifndef USE_ITHREADS
1804 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1807 SAVEPADSV(PL_op->op_targ);
1808 iterdata = INT2PTR(void*, PL_op->op_targ);
1809 cxtype |= CXp_PADVAR;
1814 svp = &GvSV(gv); /* symbol table variable */
1815 SAVEGENERICSV(*svp);
1818 iterdata = (void*)gv;
1824 PUSHBLOCK(cx, cxtype, SP);
1826 PUSHLOOP(cx, iterdata, MARK);
1828 PUSHLOOP(cx, svp, MARK);
1830 if (PL_op->op_flags & OPf_STACKED) {
1831 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1832 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1834 SV *right = (SV*)cx->blk_loop.iterary;
1837 if (RANGE_IS_NUMERIC(sv,right)) {
1838 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1839 (SvOK(right) && SvNV(right) >= IV_MAX))
1840 DIE(aTHX_ "Range iterator outside integer range");
1841 cx->blk_loop.iterix = SvIV(sv);
1842 cx->blk_loop.itermax = SvIV(right);
1844 /* for correct -Dstv display */
1845 cx->blk_oldsp = sp - PL_stack_base;
1849 cx->blk_loop.iterlval = newSVsv(sv);
1850 (void) SvPV_force_nolen(cx->blk_loop.iterlval);
1851 (void) SvPV_nolen_const(right);
1854 else if (PL_op->op_private & OPpITER_REVERSED) {
1855 cx->blk_loop.itermax = -1;
1856 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1861 cx->blk_loop.iterary = PL_curstack;
1862 AvFILLp(PL_curstack) = SP - PL_stack_base;
1863 if (PL_op->op_private & OPpITER_REVERSED) {
1864 cx->blk_loop.itermax = MARK - PL_stack_base;
1865 cx->blk_loop.iterix = cx->blk_oldsp;
1868 cx->blk_loop.iterix = MARK - PL_stack_base;
1878 register PERL_CONTEXT *cx;
1879 const I32 gimme = GIMME_V;
1885 PUSHBLOCK(cx, CXt_LOOP, SP);
1886 PUSHLOOP(cx, 0, SP);
1894 register PERL_CONTEXT *cx;
1901 assert(CxTYPE(cx) == CXt_LOOP);
1903 newsp = PL_stack_base + cx->blk_loop.resetsp;
1906 if (gimme == G_VOID)
1908 else if (gimme == G_SCALAR) {
1910 *++newsp = sv_mortalcopy(*SP);
1912 *++newsp = &PL_sv_undef;
1916 *++newsp = sv_mortalcopy(*++mark);
1917 TAINT_NOT; /* Each item is independent */
1923 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1924 PL_curpm = newpm; /* ... and pop $1 et al */
1936 register PERL_CONTEXT *cx;
1937 bool popsub2 = FALSE;
1938 bool clear_errsv = FALSE;
1946 cxix = dopoptosub(cxstack_ix);
1948 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
1949 * sort block, which is a CXt_NULL
1952 PL_stack_base[1] = *PL_stack_sp;
1953 PL_stack_sp = PL_stack_base + 1;
1957 DIE(aTHX_ "Can't return outside a subroutine");
1959 if (cxix < cxstack_ix)
1962 if (CxMULTICALL(&cxstack[cxix])) {
1963 gimme = cxstack[cxix].blk_gimme;
1964 if (gimme == G_VOID)
1965 PL_stack_sp = PL_stack_base;
1966 else if (gimme == G_SCALAR) {
1967 PL_stack_base[1] = *PL_stack_sp;
1968 PL_stack_sp = PL_stack_base + 1;
1974 switch (CxTYPE(cx)) {
1977 retop = cx->blk_sub.retop;
1978 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1981 if (!(PL_in_eval & EVAL_KEEPERR))
1984 retop = cx->blk_eval.retop;
1988 if (optype == OP_REQUIRE &&
1989 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1991 /* Unassume the success we assumed earlier. */
1992 SV * const nsv = cx->blk_eval.old_namesv;
1993 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
1994 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1999 retop = cx->blk_sub.retop;
2002 DIE(aTHX_ "panic: return");
2006 if (gimme == G_SCALAR) {
2009 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2011 *++newsp = SvREFCNT_inc(*SP);
2016 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2018 *++newsp = sv_mortalcopy(sv);
2023 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2026 *++newsp = sv_mortalcopy(*SP);
2029 *++newsp = &PL_sv_undef;
2031 else if (gimme == G_ARRAY) {
2032 while (++MARK <= SP) {
2033 *++newsp = (popsub2 && SvTEMP(*MARK))
2034 ? *MARK : sv_mortalcopy(*MARK);
2035 TAINT_NOT; /* Each item is independent */
2038 PL_stack_sp = newsp;
2041 /* Stack values are safe: */
2044 POPSUB(cx,sv); /* release CV and @_ ... */
2048 PL_curpm = newpm; /* ... and pop $1 et al */
2052 sv_setpvn(ERRSV,"",0);
2060 register PERL_CONTEXT *cx;
2071 if (PL_op->op_flags & OPf_SPECIAL) {
2072 cxix = dopoptoloop(cxstack_ix);
2074 DIE(aTHX_ "Can't \"last\" outside a loop block");
2077 cxix = dopoptolabel(cPVOP->op_pv);
2079 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2081 if (cxix < cxstack_ix)
2085 cxstack_ix++; /* temporarily protect top context */
2087 switch (CxTYPE(cx)) {
2090 newsp = PL_stack_base + cx->blk_loop.resetsp;
2091 nextop = cx->blk_loop.last_op->op_next;
2095 nextop = cx->blk_sub.retop;
2099 nextop = cx->blk_eval.retop;
2103 nextop = cx->blk_sub.retop;
2106 DIE(aTHX_ "panic: last");
2110 if (gimme == G_SCALAR) {
2112 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2113 ? *SP : sv_mortalcopy(*SP);
2115 *++newsp = &PL_sv_undef;
2117 else if (gimme == G_ARRAY) {
2118 while (++MARK <= SP) {
2119 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2120 ? *MARK : sv_mortalcopy(*MARK);
2121 TAINT_NOT; /* Each item is independent */
2129 /* Stack values are safe: */
2132 POPLOOP(cx); /* release loop vars ... */
2136 POPSUB(cx,sv); /* release CV and @_ ... */
2139 PL_curpm = newpm; /* ... and pop $1 et al */
2142 PERL_UNUSED_VAR(optype);
2143 PERL_UNUSED_VAR(gimme);
2151 register PERL_CONTEXT *cx;
2154 if (PL_op->op_flags & OPf_SPECIAL) {
2155 cxix = dopoptoloop(cxstack_ix);
2157 DIE(aTHX_ "Can't \"next\" outside a loop block");
2160 cxix = dopoptolabel(cPVOP->op_pv);
2162 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2164 if (cxix < cxstack_ix)
2167 /* clear off anything above the scope we're re-entering, but
2168 * save the rest until after a possible continue block */
2169 inner = PL_scopestack_ix;
2171 if (PL_scopestack_ix < inner)
2172 leave_scope(PL_scopestack[PL_scopestack_ix]);
2173 PL_curcop = cx->blk_oldcop;
2174 return cx->blk_loop.next_op;
2181 register PERL_CONTEXT *cx;
2185 if (PL_op->op_flags & OPf_SPECIAL) {
2186 cxix = dopoptoloop(cxstack_ix);
2188 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2191 cxix = dopoptolabel(cPVOP->op_pv);
2193 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2195 if (cxix < cxstack_ix)
2198 redo_op = cxstack[cxix].blk_loop.redo_op;
2199 if (redo_op->op_type == OP_ENTER) {
2200 /* pop one less context to avoid $x being freed in while (my $x..) */
2202 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2203 redo_op = redo_op->op_next;
2207 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2208 LEAVE_SCOPE(oldsave);
2210 PL_curcop = cx->blk_oldcop;
2215 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2218 static const char too_deep[] = "Target of goto is too deeply nested";
2221 Perl_croak(aTHX_ too_deep);
2222 if (o->op_type == OP_LEAVE ||
2223 o->op_type == OP_SCOPE ||
2224 o->op_type == OP_LEAVELOOP ||
2225 o->op_type == OP_LEAVESUB ||
2226 o->op_type == OP_LEAVETRY)
2228 *ops++ = cUNOPo->op_first;
2230 Perl_croak(aTHX_ too_deep);
2233 if (o->op_flags & OPf_KIDS) {
2235 /* First try all the kids at this level, since that's likeliest. */
2236 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2237 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2238 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2241 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2242 if (kid == PL_lastgotoprobe)
2244 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2247 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2248 ops[-1]->op_type == OP_DBSTATE)
2253 if ((o = dofindlabel(kid, label, ops, oplimit)))
2266 register PERL_CONTEXT *cx;
2267 #define GOTO_DEPTH 64
2268 OP *enterops[GOTO_DEPTH];
2269 const char *label = 0;
2270 const bool do_dump = (PL_op->op_type == OP_DUMP);
2271 static const char must_have_label[] = "goto must have label";
2273 if (PL_op->op_flags & OPf_STACKED) {
2274 SV * const sv = POPs;
2276 /* This egregious kludge implements goto &subroutine */
2277 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2279 register PERL_CONTEXT *cx;
2280 CV* cv = (CV*)SvRV(sv);
2287 if (!CvROOT(cv) && !CvXSUB(cv)) {
2288 const GV * const gv = CvGV(cv);
2292 /* autoloaded stub? */
2293 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2295 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2296 GvNAMELEN(gv), FALSE);
2297 if (autogv && (cv = GvCV(autogv)))
2299 tmpstr = sv_newmortal();
2300 gv_efullname3(tmpstr, gv, Nullch);
2301 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2303 DIE(aTHX_ "Goto undefined subroutine");
2306 /* First do some returnish stuff. */
2307 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2309 cxix = dopoptosub(cxstack_ix);
2311 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2312 if (cxix < cxstack_ix)
2316 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2317 if (CxTYPE(cx) == CXt_EVAL) {
2319 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2321 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2323 else if (CxMULTICALL(cx))
2324 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2325 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2326 /* put @_ back onto stack */
2327 AV* av = cx->blk_sub.argarray;
2329 items = AvFILLp(av) + 1;
2330 EXTEND(SP, items+1); /* @_ could have been extended. */
2331 Copy(AvARRAY(av), SP + 1, items, SV*);
2332 SvREFCNT_dec(GvAV(PL_defgv));
2333 GvAV(PL_defgv) = cx->blk_sub.savearray;
2335 /* abandon @_ if it got reified */
2340 av_extend(av, items-1);
2342 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2345 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2346 AV* const av = GvAV(PL_defgv);
2347 items = AvFILLp(av) + 1;
2348 EXTEND(SP, items+1); /* @_ could have been extended. */
2349 Copy(AvARRAY(av), SP + 1, items, SV*);
2353 if (CxTYPE(cx) == CXt_SUB &&
2354 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2355 SvREFCNT_dec(cx->blk_sub.cv);
2356 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2357 LEAVE_SCOPE(oldsave);
2359 /* Now do some callish stuff. */
2361 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2363 OP* retop = cx->blk_sub.retop;
2366 for (index=0; index<items; index++)
2367 sv_2mortal(SP[-index]);
2369 #ifdef PERL_XSUB_OLDSTYLE
2370 if (CvOLDSTYLE(cv)) {
2371 I32 (*fp3)(int,int,int);
2376 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2377 items = (*fp3)(CvXSUBANY(cv).any_i32,
2378 mark - PL_stack_base + 1,
2380 SP = PL_stack_base + items;
2383 #endif /* PERL_XSUB_OLDSTYLE */
2388 /* XS subs don't have a CxSUB, so pop it */
2389 POPBLOCK(cx, PL_curpm);
2390 /* Push a mark for the start of arglist */
2393 (void)(*CvXSUB(cv))(aTHX_ cv);
2394 /* Put these at the bottom since the vars are set but not used */
2395 PERL_UNUSED_VAR(newsp);
2396 PERL_UNUSED_VAR(gimme);
2402 AV* padlist = CvPADLIST(cv);
2403 if (CxTYPE(cx) == CXt_EVAL) {
2404 PL_in_eval = cx->blk_eval.old_in_eval;
2405 PL_eval_root = cx->blk_eval.old_eval_root;
2406 cx->cx_type = CXt_SUB;
2407 cx->blk_sub.hasargs = 0;
2409 cx->blk_sub.cv = cv;
2410 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2413 if (CvDEPTH(cv) < 2)
2414 (void)SvREFCNT_inc(cv);
2416 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2417 sub_crush_depth(cv);
2418 pad_push(padlist, CvDEPTH(cv));
2421 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2422 if (cx->blk_sub.hasargs)
2424 AV* av = (AV*)PAD_SVl(0);
2427 cx->blk_sub.savearray = GvAV(PL_defgv);
2428 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2429 CX_CURPAD_SAVE(cx->blk_sub);
2430 cx->blk_sub.argarray = av;
2432 if (items >= AvMAX(av) + 1) {
2434 if (AvARRAY(av) != ary) {
2435 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2436 SvPV_set(av, (char*)ary);
2438 if (items >= AvMAX(av) + 1) {
2439 AvMAX(av) = items - 1;
2440 Renew(ary,items+1,SV*);
2442 SvPV_set(av, (char*)ary);
2446 Copy(mark,AvARRAY(av),items,SV*);
2447 AvFILLp(av) = items - 1;
2448 assert(!AvREAL(av));
2450 /* transfer 'ownership' of refcnts to new @_ */
2460 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2462 * We do not care about using sv to call CV;
2463 * it's for informational purposes only.
2465 SV * const sv = GvSV(PL_DBsub);
2469 if (PERLDB_SUB_NN) {
2470 const int type = SvTYPE(sv);
2471 if (type < SVt_PVIV && type != SVt_IV)
2472 sv_upgrade(sv, SVt_PVIV);
2474 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2476 gv_efullname3(sv, CvGV(cv), Nullch);
2479 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2480 PUSHMARK( PL_stack_sp );
2481 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2485 RETURNOP(CvSTART(cv));
2489 label = SvPV_nolen_const(sv);
2490 if (!(do_dump || *label))
2491 DIE(aTHX_ must_have_label);
2494 else if (PL_op->op_flags & OPf_SPECIAL) {
2496 DIE(aTHX_ must_have_label);
2499 label = cPVOP->op_pv;
2501 if (label && *label) {
2503 bool leaving_eval = FALSE;
2504 bool in_block = FALSE;
2505 PERL_CONTEXT *last_eval_cx = 0;
2509 PL_lastgotoprobe = 0;
2511 for (ix = cxstack_ix; ix >= 0; ix--) {
2513 switch (CxTYPE(cx)) {
2515 leaving_eval = TRUE;
2516 if (!CxTRYBLOCK(cx)) {
2517 gotoprobe = (last_eval_cx ?
2518 last_eval_cx->blk_eval.old_eval_root :
2523 /* else fall through */
2525 gotoprobe = cx->blk_oldcop->op_sibling;
2531 gotoprobe = cx->blk_oldcop->op_sibling;
2534 gotoprobe = PL_main_root;
2537 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2538 gotoprobe = CvROOT(cx->blk_sub.cv);
2544 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2547 DIE(aTHX_ "panic: goto");
2548 gotoprobe = PL_main_root;
2552 retop = dofindlabel(gotoprobe, label,
2553 enterops, enterops + GOTO_DEPTH);
2557 PL_lastgotoprobe = gotoprobe;
2560 DIE(aTHX_ "Can't find label %s", label);
2562 /* if we're leaving an eval, check before we pop any frames
2563 that we're not going to punt, otherwise the error
2566 if (leaving_eval && *enterops && enterops[1]) {
2568 for (i = 1; enterops[i]; i++)
2569 if (enterops[i]->op_type == OP_ENTERITER)
2570 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2573 /* pop unwanted frames */
2575 if (ix < cxstack_ix) {
2582 oldsave = PL_scopestack[PL_scopestack_ix];
2583 LEAVE_SCOPE(oldsave);
2586 /* push wanted frames */
2588 if (*enterops && enterops[1]) {
2590 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2591 for (; enterops[ix]; ix++) {
2592 PL_op = enterops[ix];
2593 /* Eventually we may want to stack the needed arguments
2594 * for each op. For now, we punt on the hard ones. */
2595 if (PL_op->op_type == OP_ENTERITER)
2596 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2597 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2605 if (!retop) retop = PL_main_start;
2607 PL_restartop = retop;
2608 PL_do_undump = TRUE;
2612 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2613 PL_do_undump = FALSE;
2629 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2631 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2634 PL_exit_flags |= PERL_EXIT_EXPECTED;
2636 PUSHs(&PL_sv_undef);
2644 const NV value = SvNVx(GvSV(cCOP->cop_gv));
2645 register I32 match = I_32(value);
2648 if (((NV)match) > value)
2649 --match; /* was fractional--truncate other way */
2651 match -= cCOP->uop.scop.scop_offset;
2654 else if (match > cCOP->uop.scop.scop_max)
2655 match = cCOP->uop.scop.scop_max;
2656 PL_op = cCOP->uop.scop.scop_next[match];
2666 PL_op = PL_op->op_next; /* can't assume anything */
2668 match = *(SvPVx_nolen_const(GvSV(cCOP->cop_gv))) & 255;
2669 match -= cCOP->uop.scop.scop_offset;
2672 else if (match > cCOP->uop.scop.scop_max)
2673 match = cCOP->uop.scop.scop_max;
2674 PL_op = cCOP->uop.scop.scop_next[match];
2683 S_save_lines(pTHX_ AV *array, SV *sv)
2685 const char *s = SvPVX_const(sv);
2686 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2689 while (s && s < send) {
2691 SV * const tmpstr = NEWSV(85,0);
2693 sv_upgrade(tmpstr, SVt_PVMG);
2694 t = strchr(s, '\n');
2700 sv_setpvn(tmpstr, s, t - s);
2701 av_store(array, line++, tmpstr);
2707 S_docatch_body(pTHX)
2714 S_docatch(pTHX_ OP *o)
2717 OP * const oldop = PL_op;
2721 assert(CATCH_GET == TRUE);
2728 assert(cxstack_ix >= 0);
2729 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2730 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2735 /* die caught by an inner eval - continue inner loop */
2737 /* NB XXX we rely on the old popped CxEVAL still being at the top
2738 * of the stack; the way die_where() currently works, this
2739 * assumption is valid. In theory The cur_top_env value should be
2740 * returned in another global, the way retop (aka PL_restartop)
2742 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2745 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2747 PL_op = PL_restartop;
2764 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2765 /* sv Text to convert to OP tree. */
2766 /* startop op_free() this to undo. */
2767 /* code Short string id of the caller. */
2769 dVAR; dSP; /* Make POPBLOCK work. */
2776 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2777 char *tmpbuf = tbuf;
2780 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2785 /* switch to eval mode */
2787 if (IN_PERL_COMPILETIME) {
2788 SAVECOPSTASH_FREE(&PL_compiling);
2789 CopSTASH_set(&PL_compiling, PL_curstash);
2791 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2792 SV * const sv = sv_newmortal();
2793 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2794 code, (unsigned long)++PL_evalseq,
2795 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2799 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2800 SAVECOPFILE_FREE(&PL_compiling);
2801 CopFILE_set(&PL_compiling, tmpbuf+2);
2802 SAVECOPLINE(&PL_compiling);
2803 CopLINE_set(&PL_compiling, 1);
2804 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2805 deleting the eval's FILEGV from the stash before gv_check() runs
2806 (i.e. before run-time proper). To work around the coredump that
2807 ensues, we always turn GvMULTI_on for any globals that were
2808 introduced within evals. See force_ident(). GSAR 96-10-12 */
2809 safestr = savepv(tmpbuf);
2810 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2812 #ifdef OP_IN_REGISTER
2818 /* we get here either during compilation, or via pp_regcomp at runtime */
2819 runtime = IN_PERL_RUNTIME;
2821 runcv = find_runcv(NULL);
2824 PL_op->op_type = OP_ENTEREVAL;
2825 PL_op->op_flags = 0; /* Avoid uninit warning. */
2826 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2827 PUSHEVAL(cx, 0, Nullgv);
2830 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2832 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2833 POPBLOCK(cx,PL_curpm);
2836 (*startop)->op_type = OP_NULL;
2837 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2839 /* XXX DAPM do this properly one year */
2840 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2842 if (IN_PERL_COMPILETIME)
2843 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2844 #ifdef OP_IN_REGISTER
2847 PERL_UNUSED_VAR(newsp);
2848 PERL_UNUSED_VAR(optype);
2855 =for apidoc find_runcv
2857 Locate the CV corresponding to the currently executing sub or eval.
2858 If db_seqp is non_null, skip CVs that are in the DB package and populate
2859 *db_seqp with the cop sequence number at the point that the DB:: code was
2860 entered. (allows debuggers to eval in the scope of the breakpoint rather
2861 than in the scope of the debugger itself).
2867 Perl_find_runcv(pTHX_ U32 *db_seqp)
2872 *db_seqp = PL_curcop->cop_seq;
2873 for (si = PL_curstackinfo; si; si = si->si_prev) {
2875 for (ix = si->si_cxix; ix >= 0; ix--) {
2876 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2877 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2878 CV * const cv = cx->blk_sub.cv;
2879 /* skip DB:: code */
2880 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2881 *db_seqp = cx->blk_oldcop->cop_seq;
2886 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2894 /* Compile a require/do, an eval '', or a /(?{...})/.
2895 * In the last case, startop is non-null, and contains the address of
2896 * a pointer that should be set to the just-compiled code.
2897 * outside is the lexically enclosing CV (if any) that invoked us.
2900 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2902 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2905 OP * const saveop = PL_op;
2907 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2908 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2913 SAVESPTR(PL_compcv);
2914 PL_compcv = (CV*)NEWSV(1104,0);
2915 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2916 CvEVAL_on(PL_compcv);
2917 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2918 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2920 CvOUTSIDE_SEQ(PL_compcv) = seq;
2921 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2923 /* set up a scratch pad */
2925 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2928 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2930 /* make sure we compile in the right package */
2932 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2933 SAVESPTR(PL_curstash);
2934 PL_curstash = CopSTASH(PL_curcop);
2936 SAVESPTR(PL_beginav);
2937 PL_beginav = newAV();
2938 SAVEFREESV(PL_beginav);
2939 SAVEI32(PL_error_count);
2941 /* try to compile it */
2943 PL_eval_root = Nullop;
2945 PL_curcop = &PL_compiling;
2946 PL_curcop->cop_arybase = 0;
2947 if (saveop && saveop->op_flags & OPf_SPECIAL)
2948 PL_in_eval |= EVAL_KEEPERR;
2950 sv_setpvn(ERRSV,"",0);
2951 if (yyparse() || PL_error_count || !PL_eval_root) {
2952 SV **newsp; /* Used by POPBLOCK. */
2953 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2954 I32 optype = 0; /* Might be reset by POPEVAL. */
2959 op_free(PL_eval_root);
2960 PL_eval_root = Nullop;
2962 SP = PL_stack_base + POPMARK; /* pop original mark */
2964 POPBLOCK(cx,PL_curpm);
2970 msg = SvPVx_nolen_const(ERRSV);
2971 if (optype == OP_REQUIRE) {
2972 const SV * const nsv = cx->blk_eval.old_namesv;
2973 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2975 DIE(aTHX_ "%sCompilation failed in require",
2976 *msg ? msg : "Unknown error\n");
2979 POPBLOCK(cx,PL_curpm);
2981 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2982 (*msg ? msg : "Unknown error\n"));
2986 sv_setpv(ERRSV, "Compilation error");
2989 PERL_UNUSED_VAR(newsp);
2992 CopLINE_set(&PL_compiling, 0);
2994 *startop = PL_eval_root;
2996 SAVEFREEOP(PL_eval_root);
2998 /* Set the context for this new optree.
2999 * If the last op is an OP_REQUIRE, force scalar context.
3000 * Otherwise, propagate the context from the eval(). */
3001 if (PL_eval_root->op_type == OP_LEAVEEVAL
3002 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3003 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3005 scalar(PL_eval_root);
3006 else if (gimme & G_VOID)
3007 scalarvoid(PL_eval_root);
3008 else if (gimme & G_ARRAY)
3011 scalar(PL_eval_root);
3013 DEBUG_x(dump_eval());
3015 /* Register with debugger: */
3016 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3017 CV * const cv = get_cv("DB::postponed", FALSE);
3021 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3023 call_sv((SV*)cv, G_DISCARD);
3027 /* compiled okay, so do it */
3029 CvDEPTH(PL_compcv) = 1;
3030 SP = PL_stack_base + POPMARK; /* pop original mark */
3031 PL_op = saveop; /* The caller may need it. */
3032 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
3034 RETURNOP(PL_eval_start);
3038 S_doopen_pm(pTHX_ const char *name, const char *mode)
3040 #ifndef PERL_DISABLE_PMC
3041 const STRLEN namelen = strlen(name);
3044 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3045 SV * const pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3046 const char * const pmc = SvPV_nolen_const(pmcsv);
3048 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3049 fp = PerlIO_open(name, mode);
3053 if (PerlLIO_stat(name, &pmstat) < 0 ||
3054 pmstat.st_mtime < pmcstat.st_mtime)
3056 fp = PerlIO_open(pmc, mode);
3059 fp = PerlIO_open(name, mode);
3062 SvREFCNT_dec(pmcsv);
3065 fp = PerlIO_open(name, mode);
3069 return PerlIO_open(name, mode);
3070 #endif /* !PERL_DISABLE_PMC */
3076 register PERL_CONTEXT *cx;
3080 const char *tryname = Nullch;
3081 SV *namesv = Nullsv;
3082 const I32 gimme = GIMME_V;
3083 PerlIO *tryrsfp = 0;
3084 int filter_has_file = 0;
3085 GV *filter_child_proc = 0;
3086 SV *filter_state = 0;
3093 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3094 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3095 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3096 "v-string in use/require non-portable");
3098 sv = new_version(sv);
3099 if (!sv_derived_from(PL_patchlevel, "version"))
3100 (void *)upg_version(PL_patchlevel);
3101 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3102 if ( vcmp(sv,PL_patchlevel) < 0 )
3103 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3104 vnormal(sv), vnormal(PL_patchlevel));
3107 if ( vcmp(sv,PL_patchlevel) > 0 )
3108 DIE(aTHX_ "Perl %"SVf" required--this is only %"SVf", stopped",
3109 vnormal(sv), vnormal(PL_patchlevel));
3114 name = SvPV_const(sv, len);
3115 if (!(name && len > 0 && *name))
3116 DIE(aTHX_ "Null filename used");
3117 TAINT_PROPER("require");
3118 if (PL_op->op_type == OP_REQUIRE) {
3119 SV ** const svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3121 if (*svp != &PL_sv_undef)
3124 DIE(aTHX_ "Compilation failed in require");
3128 /* prepare to compile file */
3130 if (path_is_absolute(name)) {
3132 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3134 #ifdef MACOS_TRADITIONAL
3138 MacPerl_CanonDir(name, newname, 1);
3139 if (path_is_absolute(newname)) {
3141 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3146 AV * const ar = GvAVn(PL_incgv);
3150 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3153 namesv = NEWSV(806, 0);
3154 for (i = 0; i <= AvFILL(ar); i++) {
3155 SV *dirsv = *av_fetch(ar, i, TRUE);
3161 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3162 && !sv_isobject(loader))
3164 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3167 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3168 PTR2UV(SvRV(dirsv)), name);
3169 tryname = SvPVX_const(namesv);
3180 if (sv_isobject(loader))
3181 count = call_method("INC", G_ARRAY);
3183 count = call_sv(loader, G_ARRAY);
3193 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3197 if (SvTYPE(arg) == SVt_PVGV) {
3198 IO *io = GvIO((GV *)arg);
3203 tryrsfp = IoIFP(io);
3204 if (IoTYPE(io) == IoTYPE_PIPE) {
3205 /* reading from a child process doesn't
3206 nest -- when returning from reading
3207 the inner module, the outer one is
3208 unreadable (closed?) I've tried to
3209 save the gv to manage the lifespan of
3210 the pipe, but this didn't help. XXX */
3211 filter_child_proc = (GV *)arg;
3212 (void)SvREFCNT_inc(filter_child_proc);
3215 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3216 PerlIO_close(IoOFP(io));
3228 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3230 (void)SvREFCNT_inc(filter_sub);
3233 filter_state = SP[i];
3234 (void)SvREFCNT_inc(filter_state);
3238 tryrsfp = PerlIO_open("/dev/null",
3254 filter_has_file = 0;
3255 if (filter_child_proc) {
3256 SvREFCNT_dec(filter_child_proc);
3257 filter_child_proc = 0;
3260 SvREFCNT_dec(filter_state);
3264 SvREFCNT_dec(filter_sub);
3269 if (!path_is_absolute(name)
3270 #ifdef MACOS_TRADITIONAL
3271 /* We consider paths of the form :a:b ambiguous and interpret them first
3272 as global then as local
3274 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3277 const char *dir = SvPVx_nolen_const(dirsv);
3278 #ifdef MACOS_TRADITIONAL
3282 MacPerl_CanonDir(name, buf2, 1);
3283 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3287 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3289 sv_setpv(namesv, unixdir);
3290 sv_catpv(namesv, unixname);
3292 # ifdef __SYMBIAN32__
3293 if (PL_origfilename[0] &&
3294 PL_origfilename[1] == ':' &&
3295 !(dir[0] && dir[1] == ':'))
3296 Perl_sv_setpvf(aTHX_ namesv,
3301 Perl_sv_setpvf(aTHX_ namesv,
3305 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3309 TAINT_PROPER("require");
3310 tryname = SvPVX_const(namesv);
3311 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3313 if (tryname[0] == '.' && tryname[1] == '/')
3322 SAVECOPFILE_FREE(&PL_compiling);
3323 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3324 SvREFCNT_dec(namesv);
3326 if (PL_op->op_type == OP_REQUIRE) {
3327 const char *msgstr = name;
3328 if(errno == EMFILE) {
3329 SV * const msg = sv_2mortal(newSVpv(msgstr,0));
3330 sv_catpv(msg, ": ");
3331 sv_catpv(msg, Strerror(errno));
3332 msgstr = SvPV_nolen_const(msg);
3334 if (namesv) { /* did we lookup @INC? */
3335 SV * const msg = sv_2mortal(newSVpv(msgstr,0));
3336 SV * const dirmsgsv = NEWSV(0, 0);
3337 AV * const ar = GvAVn(PL_incgv);
3339 sv_catpvn(msg, " in @INC", 8);
3340 if (instr(SvPVX_const(msg), ".h "))
3341 sv_catpv(msg, " (change .h to .ph maybe?)");
3342 if (instr(SvPVX_const(msg), ".ph "))
3343 sv_catpv(msg, " (did you run h2ph?)");
3344 sv_catpv(msg, " (@INC contains:");
3345 for (i = 0; i <= AvFILL(ar); i++) {
3346 const char *dir = SvPVx_nolen_const(*av_fetch(ar, i, TRUE));
3347 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3348 sv_catsv(msg, dirmsgsv);
3350 sv_catpvn(msg, ")", 1);
3351 SvREFCNT_dec(dirmsgsv);
3352 msgstr = SvPV_nolen_const(msg);
3355 DIE(aTHX_ "Can't locate %s", msgstr);
3361 SETERRNO(0, SS_NORMAL);
3363 /* Assume success here to prevent recursive requirement. */
3365 /* Check whether a hook in @INC has already filled %INC */
3367 (void)hv_store(GvHVn(PL_incgv), name, len, newSVpv(CopFILE(&PL_compiling),0),0);
3369 SV** const svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3371 (void)hv_store(GvHVn(PL_incgv), name, len, SvREFCNT_inc(hook_sv), 0 );
3376 lex_start(sv_2mortal(newSVpvn("",0)));
3377 SAVEGENERICSV(PL_rsfp_filters);
3378 PL_rsfp_filters = Nullav;
3383 SAVESPTR(PL_compiling.cop_warnings);
3384 if (PL_dowarn & G_WARN_ALL_ON)
3385 PL_compiling.cop_warnings = pWARN_ALL ;
3386 else if (PL_dowarn & G_WARN_ALL_OFF)
3387 PL_compiling.cop_warnings = pWARN_NONE ;
3388 else if (PL_taint_warn)
3389 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3391 PL_compiling.cop_warnings = pWARN_STD ;
3392 SAVESPTR(PL_compiling.cop_io);
3393 PL_compiling.cop_io = Nullsv;
3395 if (filter_sub || filter_child_proc) {
3396 SV * const datasv = filter_add(run_user_filter, Nullsv);
3397 IoLINES(datasv) = filter_has_file;
3398 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3399 IoTOP_GV(datasv) = (GV *)filter_state;
3400 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3403 /* switch to eval mode */
3404 PUSHBLOCK(cx, CXt_EVAL, SP);
3405 PUSHEVAL(cx, name, Nullgv);
3406 cx->blk_eval.retop = PL_op->op_next;
3408 SAVECOPLINE(&PL_compiling);
3409 CopLINE_set(&PL_compiling, 0);
3413 /* Store and reset encoding. */
3414 encoding = PL_encoding;
3415 PL_encoding = Nullsv;
3417 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3419 /* Restore encoding. */
3420 PL_encoding = encoding;
3428 register PERL_CONTEXT *cx;
3430 const I32 gimme = GIMME_V;
3431 const I32 was = PL_sub_generation;
3432 char tbuf[TYPE_DIGITS(long) + 12];
3433 char *tmpbuf = tbuf;
3440 if (!SvPV_const(sv,len))
3442 TAINT_PROPER("eval");
3448 /* switch to eval mode */
3450 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3451 SV * const sv = sv_newmortal();
3452 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3453 (unsigned long)++PL_evalseq,
3454 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3458 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3459 SAVECOPFILE_FREE(&PL_compiling);
3460 CopFILE_set(&PL_compiling, tmpbuf+2);
3461 SAVECOPLINE(&PL_compiling);
3462 CopLINE_set(&PL_compiling, 1);
3463 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3464 deleting the eval's FILEGV from the stash before gv_check() runs
3465 (i.e. before run-time proper). To work around the coredump that
3466 ensues, we always turn GvMULTI_on for any globals that were
3467 introduced within evals. See force_ident(). GSAR 96-10-12 */
3468 safestr = savepv(tmpbuf);
3469 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3471 PL_hints = PL_op->op_targ;
3472 SAVESPTR(PL_compiling.cop_warnings);
3473 if (specialWARN(PL_curcop->cop_warnings))
3474 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3476 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3477 SAVEFREESV(PL_compiling.cop_warnings);
3479 SAVESPTR(PL_compiling.cop_io);
3480 if (specialCopIO(PL_curcop->cop_io))
3481 PL_compiling.cop_io = PL_curcop->cop_io;
3483 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3484 SAVEFREESV(PL_compiling.cop_io);
3486 /* special case: an eval '' executed within the DB package gets lexically
3487 * placed in the first non-DB CV rather than the current CV - this
3488 * allows the debugger to execute code, find lexicals etc, in the
3489 * scope of the code being debugged. Passing &seq gets find_runcv
3490 * to do the dirty work for us */
3491 runcv = find_runcv(&seq);
3493 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3494 PUSHEVAL(cx, 0, Nullgv);
3495 cx->blk_eval.retop = PL_op->op_next;
3497 /* prepare to compile string */
3499 if (PERLDB_LINE && PL_curstash != PL_debstash)
3500 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3502 ret = doeval(gimme, NULL, runcv, seq);
3503 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3504 && ret != PL_op->op_next) { /* Successive compilation. */
3505 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3507 return DOCATCH(ret);
3517 register PERL_CONTEXT *cx;
3519 const U8 save_flags = PL_op -> op_flags;
3524 retop = cx->blk_eval.retop;
3527 if (gimme == G_VOID)
3529 else if (gimme == G_SCALAR) {
3532 if (SvFLAGS(TOPs) & SVs_TEMP)
3535 *MARK = sv_mortalcopy(TOPs);
3539 *MARK = &PL_sv_undef;
3544 /* in case LEAVE wipes old return values */
3545 for (mark = newsp + 1; mark <= SP; mark++) {
3546 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3547 *mark = sv_mortalcopy(*mark);
3548 TAINT_NOT; /* Each item is independent */
3552 PL_curpm = newpm; /* Don't pop $1 et al till now */
3555 assert(CvDEPTH(PL_compcv) == 1);
3557 CvDEPTH(PL_compcv) = 0;
3560 if (optype == OP_REQUIRE &&
3561 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3563 /* Unassume the success we assumed earlier. */
3564 SV * const nsv = cx->blk_eval.old_namesv;
3565 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3566 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3567 /* die_where() did LEAVE, or we won't be here */
3571 if (!(save_flags & OPf_SPECIAL))
3572 sv_setpvn(ERRSV,"",0);
3581 register PERL_CONTEXT *cx;
3582 const I32 gimme = GIMME_V;
3587 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3589 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3591 PL_in_eval = EVAL_INEVAL;
3592 sv_setpvn(ERRSV,"",0);
3594 return DOCATCH(PL_op->op_next);
3604 register PERL_CONTEXT *cx;
3609 PERL_UNUSED_VAR(optype);
3612 if (gimme == G_VOID)
3614 else if (gimme == G_SCALAR) {
3617 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3620 *MARK = sv_mortalcopy(TOPs);
3624 *MARK = &PL_sv_undef;
3629 /* in case LEAVE wipes old return values */
3630 for (mark = newsp + 1; mark <= SP; mark++) {
3631 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3632 *mark = sv_mortalcopy(*mark);
3633 TAINT_NOT; /* Each item is independent */
3637 PL_curpm = newpm; /* Don't pop $1 et al till now */
3640 sv_setpvn(ERRSV,"",0);
3645 S_doparseform(pTHX_ SV *sv)
3648 register char *s = SvPV_force(sv, len);
3649 register char *send = s + len;
3650 register char *base = Nullch;
3651 register I32 skipspaces = 0;
3652 bool noblank = FALSE;
3653 bool repeat = FALSE;
3654 bool postspace = FALSE;
3660 bool unchopnum = FALSE;
3661 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3664 Perl_croak(aTHX_ "Null picture in formline");
3666 /* estimate the buffer size needed */
3667 for (base = s; s <= send; s++) {
3668 if (*s == '\n' || *s == '@' || *s == '^')
3674 Newx(fops, maxops, U32);
3679 *fpc++ = FF_LINEMARK;
3680 noblank = repeat = FALSE;
3698 case ' ': case '\t':
3705 } /* else FALL THROUGH */
3713 *fpc++ = FF_LITERAL;
3721 *fpc++ = (U16)skipspaces;
3725 *fpc++ = FF_NEWLINE;
3729 arg = fpc - linepc + 1;
3736 *fpc++ = FF_LINEMARK;
3737 noblank = repeat = FALSE;
3746 ischop = s[-1] == '^';
3752 arg = (s - base) - 1;
3754 *fpc++ = FF_LITERAL;
3762 *fpc++ = 2; /* skip the @* or ^* */
3764 *fpc++ = FF_LINESNGL;
3767 *fpc++ = FF_LINEGLOB;
3769 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3770 arg = ischop ? 512 : 0;
3775 const char * const f = ++s;
3778 arg |= 256 + (s - f);
3780 *fpc++ = s - base; /* fieldsize for FETCH */
3781 *fpc++ = FF_DECIMAL;
3783 unchopnum |= ! ischop;
3785 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3786 arg = ischop ? 512 : 0;
3788 s++; /* skip the '0' first */
3792 const char * const f = ++s;
3795 arg |= 256 + (s - f);
3797 *fpc++ = s - base; /* fieldsize for FETCH */
3798 *fpc++ = FF_0DECIMAL;
3800 unchopnum |= ! ischop;
3804 bool ismore = FALSE;
3807 while (*++s == '>') ;
3808 prespace = FF_SPACE;
3810 else if (*s == '|') {
3811 while (*++s == '|') ;
3812 prespace = FF_HALFSPACE;
3817 while (*++s == '<') ;
3820 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3824 *fpc++ = s - base; /* fieldsize for FETCH */
3826 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3829 *fpc++ = (U16)prespace;
3843 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3845 { /* need to jump to the next word */
3847 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3848 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3849 s = SvPVX(sv) + SvCUR(sv) + z;
3851 Copy(fops, s, arg, U32);
3853 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3856 if (unchopnum && repeat)
3857 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3863 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3865 /* Can value be printed in fldsize chars, using %*.*f ? */
3869 int intsize = fldsize - (value < 0 ? 1 : 0);
3876 while (intsize--) pwr *= 10.0;
3877 while (frcsize--) eps /= 10.0;
3880 if (value + eps >= pwr)
3883 if (value - eps <= -pwr)
3890 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3893 SV *datasv = FILTER_DATA(idx);
3894 const int filter_has_file = IoLINES(datasv);
3895 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3896 SV *filter_state = (SV *)IoTOP_GV(datasv);
3897 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3900 /* I was having segfault trouble under Linux 2.2.5 after a
3901 parse error occured. (Had to hack around it with a test
3902 for PL_error_count == 0.) Solaris doesn't segfault --
3903 not sure where the trouble is yet. XXX */
3905 if (filter_has_file) {
3906 len = FILTER_READ(idx+1, buf_sv, maxlen);
3909 if (filter_sub && len >= 0) {
3920 PUSHs(sv_2mortal(newSViv(maxlen)));
3922 PUSHs(filter_state);
3925 count = call_sv(filter_sub, G_SCALAR);
3941 IoLINES(datasv) = 0;
3942 if (filter_child_proc) {
3943 SvREFCNT_dec(filter_child_proc);
3944 IoFMT_GV(datasv) = Nullgv;
3947 SvREFCNT_dec(filter_state);
3948 IoTOP_GV(datasv) = Nullgv;
3951 SvREFCNT_dec(filter_sub);
3952 IoBOTTOM_GV(datasv) = Nullgv;
3954 filter_del(run_user_filter);
3960 /* perhaps someone can come up with a better name for
3961 this? it is not really "absolute", per se ... */
3963 S_path_is_absolute(pTHX_ const char *name)
3965 if (PERL_FILE_IS_ABSOLUTE(name)
3966 #ifdef MACOS_TRADITIONAL
3969 || (*name == '.' && (name[1] == '/' ||
3970 (name[1] == '.' && name[2] == '/'))))
3981 * c-indentation-style: bsd
3983 * indent-tabs-mode: t
3986 * ex: set ts=8 sts=4 sw=4 noet: