3 * Copyright (c) 1991-2002, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Now far ahead the Road has gone,
12 * And I must follow, if I can,
13 * Pursuing it with eager feet,
14 * Until it joins some larger way
15 * Where many paths and errands meet.
16 * And whither then? I cannot say.
20 #define PERL_IN_PP_CTL_C
24 #define WORD_ALIGN sizeof(U16)
27 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29 static I32 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen);
37 cxix = dopoptosub(cxstack_ix);
41 switch (cxstack[cxix].blk_gimme) {
58 /* XXXX Should store the old value to allow for tie/overload - and
59 restore in regcomp, where marked with XXXX. */
67 register PMOP *pm = (PMOP*)cLOGOP->op_other;
71 MAGIC *mg = Null(MAGIC*);
75 /* prevent recompiling under /o and ithreads. */
76 #if defined(USE_ITHREADS)
77 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm))
82 SV *sv = SvRV(tmpstr);
84 mg = mg_find(sv, PERL_MAGIC_qr);
87 regexp *re = (regexp *)mg->mg_obj;
88 ReREFCNT_dec(PM_GETRE(pm));
89 PM_SETRE(pm, ReREFCNT_inc(re));
92 t = SvPV(tmpstr, len);
94 /* Check against the last compiled regexp. */
95 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
96 PM_GETRE(pm)->prelen != (I32)len ||
97 memNE(PM_GETRE(pm)->precomp, t, len))
100 ReREFCNT_dec(PM_GETRE(pm));
101 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
103 if (PL_op->op_flags & OPf_SPECIAL)
104 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
106 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
108 pm->op_pmdynflags |= PMdf_DYN_UTF8;
110 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
111 if (pm->op_pmdynflags & PMdf_UTF8)
112 t = (char*)bytes_to_utf8((U8*)t, &len);
114 PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
115 if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
117 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
118 inside tie/overload accessors. */
122 #ifndef INCOMPLETE_TAINTS
125 pm->op_pmdynflags |= PMdf_TAINTED;
127 pm->op_pmdynflags &= ~PMdf_TAINTED;
131 if (!PM_GETRE(pm)->prelen && PL_curpm)
133 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
134 pm->op_pmflags |= PMf_WHITE;
136 pm->op_pmflags &= ~PMf_WHITE;
138 /* XXX runtime compiled output needs to move to the pad */
139 if (pm->op_pmflags & PMf_KEEP) {
140 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
141 #if !defined(USE_ITHREADS)
142 /* XXX can't change the optree at runtime either */
143 cLOGOP->op_first->op_next = PL_op->op_next;
152 register PMOP *pm = (PMOP*) cLOGOP->op_other;
153 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
154 register SV *dstr = cx->sb_dstr;
155 register char *s = cx->sb_s;
156 register char *m = cx->sb_m;
157 char *orig = cx->sb_orig;
158 register REGEXP *rx = cx->sb_rx;
160 rxres_restore(&cx->sb_rxres, rx);
161 PL_reg_match_utf8 = SvUTF8(cx->sb_targ) ? 1 : 0;
163 if (cx->sb_iters++) {
164 I32 saviters = cx->sb_iters;
165 if (cx->sb_iters > cx->sb_maxiters)
166 DIE(aTHX_ "Substitution loop");
168 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
169 cx->sb_rxtainted |= 2;
170 sv_catsv(dstr, POPs);
173 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
174 s == m, cx->sb_targ, NULL,
175 ((cx->sb_rflags & REXEC_COPY_STR)
176 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
177 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
179 SV *targ = cx->sb_targ;
181 sv_catpvn(dstr, s, cx->sb_strend - s);
182 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
184 (void)SvOOK_off(targ);
185 Safefree(SvPVX(targ));
186 SvPVX(targ) = SvPVX(dstr);
187 SvCUR_set(targ, SvCUR(dstr));
188 SvLEN_set(targ, SvLEN(dstr));
194 TAINT_IF(cx->sb_rxtainted & 1);
195 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
197 (void)SvPOK_only_UTF8(targ);
198 TAINT_IF(cx->sb_rxtainted);
202 LEAVE_SCOPE(cx->sb_oldsave);
204 RETURNOP(pm->op_next);
206 cx->sb_iters = saviters;
208 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
211 cx->sb_orig = orig = rx->subbeg;
213 cx->sb_strend = s + (cx->sb_strend - m);
215 cx->sb_m = m = rx->startp[0] + orig;
217 sv_catpvn(dstr, s, m-s);
218 cx->sb_s = rx->endp[0] + orig;
219 { /* Update the pos() information. */
220 SV *sv = cx->sb_targ;
223 if (SvTYPE(sv) < SVt_PVMG)
224 (void)SvUPGRADE(sv, SVt_PVMG);
225 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
226 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
227 mg = mg_find(sv, PERL_MAGIC_regex_global);
234 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
235 rxres_save(&cx->sb_rxres, rx);
236 RETURNOP(pm->op_pmreplstart);
240 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
245 if (!p || p[1] < rx->nparens) {
246 i = 6 + rx->nparens * 2;
254 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
255 RX_MATCH_COPIED_off(rx);
259 *p++ = PTR2UV(rx->subbeg);
260 *p++ = (UV)rx->sublen;
261 for (i = 0; i <= rx->nparens; ++i) {
262 *p++ = (UV)rx->startp[i];
263 *p++ = (UV)rx->endp[i];
268 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
273 if (RX_MATCH_COPIED(rx))
274 Safefree(rx->subbeg);
275 RX_MATCH_COPIED_set(rx, *p);
280 rx->subbeg = INT2PTR(char*,*p++);
281 rx->sublen = (I32)(*p++);
282 for (i = 0; i <= rx->nparens; ++i) {
283 rx->startp[i] = (I32)(*p++);
284 rx->endp[i] = (I32)(*p++);
289 Perl_rxres_free(pTHX_ void **rsp)
294 Safefree(INT2PTR(char*,*p));
302 dSP; dMARK; dORIGMARK;
303 register SV *tmpForm = *++MARK;
310 register SV *sv = Nullsv;
315 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
316 char *chophere = Nullch;
317 char *linemark = Nullch;
319 bool gotsome = FALSE;
321 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1;
322 bool item_is_utf = FALSE;
324 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
325 if (SvREADONLY(tmpForm)) {
326 SvREADONLY_off(tmpForm);
327 doparseform(tmpForm);
328 SvREADONLY_on(tmpForm);
331 doparseform(tmpForm);
334 SvPV_force(PL_formtarget, len);
335 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
337 f = SvPV(tmpForm, len);
338 /* need to jump to the next word */
339 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
348 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
349 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
350 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
351 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
352 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
354 case FF_CHECKNL: name = "CHECKNL"; break;
355 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
356 case FF_SPACE: name = "SPACE"; break;
357 case FF_HALFSPACE: name = "HALFSPACE"; break;
358 case FF_ITEM: name = "ITEM"; break;
359 case FF_CHOP: name = "CHOP"; break;
360 case FF_LINEGLOB: name = "LINEGLOB"; break;
361 case FF_NEWLINE: name = "NEWLINE"; break;
362 case FF_MORE: name = "MORE"; break;
363 case FF_LINEMARK: name = "LINEMARK"; break;
364 case FF_END: name = "END"; break;
365 case FF_0DECIMAL: name = "0DECIMAL"; break;
368 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
370 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
398 if (ckWARN(WARN_SYNTAX))
399 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
404 item = s = SvPV(sv, len);
407 itemsize = sv_len_utf8(sv);
408 if (itemsize != (I32)len) {
410 if (itemsize > fieldsize) {
411 itemsize = fieldsize;
412 itembytes = itemsize;
413 sv_pos_u2b(sv, &itembytes, 0);
417 send = chophere = s + itembytes;
427 sv_pos_b2u(sv, &itemsize);
432 if (itemsize > fieldsize)
433 itemsize = fieldsize;
434 send = chophere = s + itemsize;
446 item = s = SvPV(sv, len);
449 itemsize = sv_len_utf8(sv);
450 if (itemsize != (I32)len) {
452 if (itemsize <= fieldsize) {
453 send = chophere = s + itemsize;
464 itemsize = fieldsize;
465 itembytes = itemsize;
466 sv_pos_u2b(sv, &itembytes, 0);
467 send = chophere = s + itembytes;
468 while (s < send || (s == send && isSPACE(*s))) {
478 if (strchr(PL_chopset, *s))
483 itemsize = chophere - item;
484 sv_pos_b2u(sv, &itemsize);
491 if (itemsize <= fieldsize) {
492 send = chophere = s + itemsize;
503 itemsize = fieldsize;
504 send = chophere = s + itemsize;
505 while (s < send || (s == send && isSPACE(*s))) {
515 if (strchr(PL_chopset, *s))
520 itemsize = chophere - item;
525 arg = fieldsize - itemsize;
534 arg = fieldsize - itemsize;
548 if (UTF8_IS_CONTINUED(*s)) {
549 STRLEN skip = UTF8SKIP(s);
566 if ( !((*t++ = *s++) & ~31) )
574 int ch = *t++ = *s++;
577 if ( !((*t++ = *s++) & ~31) )
586 while (*s && isSPACE(*s))
593 item = s = SvPV(sv, len);
595 item_is_utf = FALSE; /* XXX is this correct? */
607 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
608 sv_catpvn(PL_formtarget, item, itemsize);
609 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
610 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
615 /* If the field is marked with ^ and the value is undefined,
618 if ((arg & 512) && !SvOK(sv)) {
626 /* Formats aren't yet marked for locales, so assume "yes". */
628 STORE_NUMERIC_STANDARD_SET_LOCAL();
629 #if defined(USE_LONG_DOUBLE)
631 sprintf(t, "%#*.*" PERL_PRIfldbl,
632 (int) fieldsize, (int) arg & 255, value);
634 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
639 (int) fieldsize, (int) arg & 255, value);
642 (int) fieldsize, value);
645 RESTORE_NUMERIC_STANDARD();
651 /* If the field is marked with ^ and the value is undefined,
654 if ((arg & 512) && !SvOK(sv)) {
662 /* Formats aren't yet marked for locales, so assume "yes". */
664 STORE_NUMERIC_STANDARD_SET_LOCAL();
665 #if defined(USE_LONG_DOUBLE)
667 sprintf(t, "%#0*.*" PERL_PRIfldbl,
668 (int) fieldsize, (int) arg & 255, value);
669 /* is this legal? I don't have long doubles */
671 sprintf(t, "%0*.0" PERL_PRIfldbl, (int) fieldsize, value);
675 sprintf(t, "%#0*.*f",
676 (int) fieldsize, (int) arg & 255, value);
679 (int) fieldsize, value);
682 RESTORE_NUMERIC_STANDARD();
689 while (t-- > linemark && *t == ' ') ;
697 if (arg) { /* repeat until fields exhausted? */
699 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
700 lines += FmLINES(PL_formtarget);
703 if (strnEQ(linemark, linemark - arg, arg))
704 DIE(aTHX_ "Runaway format");
706 FmLINES(PL_formtarget) = lines;
708 RETURNOP(cLISTOP->op_first);
721 while (*s && isSPACE(*s) && s < send)
725 arg = fieldsize - itemsize;
732 if (strnEQ(s," ",3)) {
733 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
744 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
745 FmLINES(PL_formtarget) += lines;
757 if (PL_stack_base + *PL_markstack_ptr == SP) {
759 if (GIMME_V == G_SCALAR)
760 XPUSHs(sv_2mortal(newSViv(0)));
761 RETURNOP(PL_op->op_next->op_next);
763 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
764 pp_pushmark(); /* push dst */
765 pp_pushmark(); /* push src */
766 ENTER; /* enter outer scope */
769 /* SAVE_DEFSV does *not* suffice here for USE_5005THREADS */
771 ENTER; /* enter inner scope */
774 src = PL_stack_base[*PL_markstack_ptr];
779 if (PL_op->op_type == OP_MAPSTART)
780 pp_pushmark(); /* push top */
781 return ((LOGOP*)PL_op->op_next)->op_other;
786 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
792 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
798 /* first, move source pointer to the next item in the source list */
799 ++PL_markstack_ptr[-1];
801 /* if there are new items, push them into the destination list */
803 /* might need to make room back there first */
804 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
805 /* XXX this implementation is very pessimal because the stack
806 * is repeatedly extended for every set of items. Is possible
807 * to do this without any stack extension or copying at all
808 * by maintaining a separate list over which the map iterates
809 * (like foreach does). --gsar */
811 /* everything in the stack after the destination list moves
812 * towards the end the stack by the amount of room needed */
813 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
815 /* items to shift up (accounting for the moved source pointer) */
816 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
818 /* This optimization is by Ben Tilly and it does
819 * things differently from what Sarathy (gsar)
820 * is describing. The downside of this optimization is
821 * that leaves "holes" (uninitialized and hopefully unused areas)
822 * to the Perl stack, but on the other hand this
823 * shouldn't be a problem. If Sarathy's idea gets
824 * implemented, this optimization should become
825 * irrelevant. --jhi */
827 shift = count; /* Avoid shifting too often --Ben Tilly */
832 PL_markstack_ptr[-1] += shift;
833 *PL_markstack_ptr += shift;
837 /* copy the new items down to the destination list */
838 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
840 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
842 LEAVE; /* exit inner scope */
845 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
848 (void)POPMARK; /* pop top */
849 LEAVE; /* exit outer scope */
850 (void)POPMARK; /* pop src */
851 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
852 (void)POPMARK; /* pop dst */
853 SP = PL_stack_base + POPMARK; /* pop original mark */
854 if (gimme == G_SCALAR) {
858 else if (gimme == G_ARRAY)
865 ENTER; /* enter inner scope */
868 /* set $_ to the new source item */
869 src = PL_stack_base[PL_markstack_ptr[-1]];
873 RETURNOP(cLOGOP->op_other);
881 if (GIMME == G_ARRAY)
883 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
884 return cLOGOP->op_other;
893 if (GIMME == G_ARRAY) {
894 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
898 SV *targ = PAD_SV(PL_op->op_targ);
901 if (PL_op->op_private & OPpFLIP_LINENUM) {
902 if (GvIO(PL_last_in_gv)) {
903 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
906 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
907 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
913 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
914 if (PL_op->op_flags & OPf_SPECIAL) {
922 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
935 if (GIMME == G_ARRAY) {
941 if (SvGMAGICAL(left))
943 if (SvGMAGICAL(right))
946 /* This code tries to decide if "$left .. $right" should use the
947 magical string increment, or if the range is numeric (we make
948 an exception for .."0" [#18165]). AMS 20021031. */
950 if (SvNIOKp(left) || !SvPOKp(left) ||
951 SvNIOKp(right) || !SvPOKp(right) ||
952 (looks_like_number(left) && *SvPVX(left) != '0' &&
953 looks_like_number(right) && (*SvPVX(right) != '0' ||
956 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
957 DIE(aTHX_ "Range iterator outside integer range");
968 sv = sv_2mortal(newSViv(i++));
973 SV *final = sv_mortalcopy(right);
975 char *tmps = SvPV(final, len);
977 sv = sv_mortalcopy(left);
979 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
981 if (strEQ(SvPVX(sv),tmps))
983 sv = sv_2mortal(newSVsv(sv));
990 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
994 if (PL_op->op_private & OPpFLIP_LINENUM) {
995 if (GvIO(PL_last_in_gv)) {
996 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
999 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1000 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1008 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1009 sv_catpv(targ, "E0");
1020 S_dopoptolabel(pTHX_ char *label)
1023 register PERL_CONTEXT *cx;
1025 for (i = cxstack_ix; i >= 0; i--) {
1027 switch (CxTYPE(cx)) {
1029 if (ckWARN(WARN_EXITING))
1030 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting substitution via %s",
1034 if (ckWARN(WARN_EXITING))
1035 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting subroutine via %s",
1039 if (ckWARN(WARN_EXITING))
1040 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting format via %s",
1044 if (ckWARN(WARN_EXITING))
1045 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting eval via %s",
1049 if (ckWARN(WARN_EXITING))
1050 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting pseudo-block via %s",
1054 if (!cx->blk_loop.label ||
1055 strNE(label, cx->blk_loop.label) ) {
1056 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1057 (long)i, cx->blk_loop.label));
1060 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1068 Perl_dowantarray(pTHX)
1070 I32 gimme = block_gimme();
1071 return (gimme == G_VOID) ? G_SCALAR : gimme;
1075 Perl_block_gimme(pTHX)
1079 cxix = dopoptosub(cxstack_ix);
1083 switch (cxstack[cxix].blk_gimme) {
1091 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1098 Perl_is_lvalue_sub(pTHX)
1102 cxix = dopoptosub(cxstack_ix);
1103 assert(cxix >= 0); /* We should only be called from inside subs */
1105 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1106 return cxstack[cxix].blk_sub.lval;
1112 S_dopoptosub(pTHX_ I32 startingblock)
1114 return dopoptosub_at(cxstack, startingblock);
1118 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1121 register PERL_CONTEXT *cx;
1122 for (i = startingblock; i >= 0; i--) {
1124 switch (CxTYPE(cx)) {
1130 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1138 S_dopoptoeval(pTHX_ I32 startingblock)
1141 register PERL_CONTEXT *cx;
1142 for (i = startingblock; i >= 0; i--) {
1144 switch (CxTYPE(cx)) {
1148 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1156 S_dopoptoloop(pTHX_ I32 startingblock)
1159 register PERL_CONTEXT *cx;
1160 for (i = startingblock; i >= 0; i--) {
1162 switch (CxTYPE(cx)) {
1164 if (ckWARN(WARN_EXITING))
1165 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting substitution via %s",
1169 if (ckWARN(WARN_EXITING))
1170 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting subroutine via %s",
1174 if (ckWARN(WARN_EXITING))
1175 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting format via %s",
1179 if (ckWARN(WARN_EXITING))
1180 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting eval via %s",
1184 if (ckWARN(WARN_EXITING))
1185 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting pseudo-block via %s",
1189 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1197 Perl_dounwind(pTHX_ I32 cxix)
1199 register PERL_CONTEXT *cx;
1202 while (cxstack_ix > cxix) {
1204 cx = &cxstack[cxstack_ix];
1205 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1206 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1207 /* Note: we don't need to restore the base context info till the end. */
1208 switch (CxTYPE(cx)) {
1211 continue; /* not break */
1233 Perl_qerror(pTHX_ SV *err)
1236 sv_catsv(ERRSV, err);
1238 sv_catsv(PL_errors, err);
1240 Perl_warn(aTHX_ "%"SVf, err);
1245 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1253 register PERL_CONTEXT *cx;
1258 if (PL_in_eval & EVAL_KEEPERR) {
1259 static char prefix[] = "\t(in cleanup) ";
1264 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1267 if (*e != *message || strNE(e,message))
1271 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1272 sv_catpvn(err, prefix, sizeof(prefix)-1);
1273 sv_catpvn(err, message, msglen);
1274 if (ckWARN(WARN_MISC)) {
1275 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1276 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1281 sv_setpvn(ERRSV, message, msglen);
1285 message = SvPVx(ERRSV, msglen);
1287 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1288 && PL_curstackinfo->si_prev)
1297 if (cxix < cxstack_ix)
1300 POPBLOCK(cx,PL_curpm);
1301 if (CxTYPE(cx) != CXt_EVAL) {
1302 PerlIO_write(Perl_error_log, "panic: die ", 11);
1303 PerlIO_write(Perl_error_log, message, msglen);
1308 if (gimme == G_SCALAR)
1309 *++newsp = &PL_sv_undef;
1310 PL_stack_sp = newsp;
1314 /* LEAVE could clobber PL_curcop (see save_re_context())
1315 * XXX it might be better to find a way to avoid messing with
1316 * PL_curcop in save_re_context() instead, but this is a more
1317 * minimal fix --GSAR */
1318 PL_curcop = cx->blk_oldcop;
1320 if (optype == OP_REQUIRE) {
1321 char* msg = SvPVx(ERRSV, n_a);
1322 DIE(aTHX_ "%sCompilation failed in require",
1323 *msg ? msg : "Unknown error\n");
1325 return pop_return();
1329 message = SvPVx(ERRSV, msglen);
1331 /* if STDERR is tied, print to it instead */
1332 if (PL_stderrgv && (io = GvIOp(PL_stderrgv))
1333 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1336 XPUSHs(SvTIED_obj((SV*)io, mg));
1337 XPUSHs(sv_2mortal(newSVpvn(message, msglen)));
1339 call_method("PRINT", G_SCALAR);
1344 /* SFIO can really mess with your errno */
1347 PerlIO *serr = Perl_error_log;
1349 PERL_WRITE_MSG_TO_CONSOLE(serr, message, msglen);
1350 (void)PerlIO_flush(serr);
1363 if (SvTRUE(left) != SvTRUE(right))
1375 RETURNOP(cLOGOP->op_other);
1384 RETURNOP(cLOGOP->op_other);
1393 if (!sv || !SvANY(sv)) {
1394 RETURNOP(cLOGOP->op_other);
1397 switch (SvTYPE(sv)) {
1399 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1403 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1407 if (CvROOT(sv) || CvXSUB(sv))
1417 RETURNOP(cLOGOP->op_other);
1423 register I32 cxix = dopoptosub(cxstack_ix);
1424 register PERL_CONTEXT *cx;
1425 register PERL_CONTEXT *ccstack = cxstack;
1426 PERL_SI *top_si = PL_curstackinfo;
1437 /* we may be in a higher stacklevel, so dig down deeper */
1438 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1439 top_si = top_si->si_prev;
1440 ccstack = top_si->si_cxstack;
1441 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1444 if (GIMME != G_ARRAY) {
1450 if (PL_DBsub && cxix >= 0 &&
1451 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1455 cxix = dopoptosub_at(ccstack, cxix - 1);
1458 cx = &ccstack[cxix];
1459 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1460 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1461 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1462 field below is defined for any cx. */
1463 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1464 cx = &ccstack[dbcxix];
1467 stashname = CopSTASHPV(cx->blk_oldcop);
1468 if (GIMME != G_ARRAY) {
1471 PUSHs(&PL_sv_undef);
1474 sv_setpv(TARG, stashname);
1483 PUSHs(&PL_sv_undef);
1485 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1486 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1487 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1490 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1491 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1492 /* So is ccstack[dbcxix]. */
1495 gv_efullname3(sv, cvgv, Nullch);
1496 PUSHs(sv_2mortal(sv));
1497 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1500 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1501 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1505 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1506 PUSHs(sv_2mortal(newSViv(0)));
1508 gimme = (I32)cx->blk_gimme;
1509 if (gimme == G_VOID)
1510 PUSHs(&PL_sv_undef);
1512 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1513 if (CxTYPE(cx) == CXt_EVAL) {
1515 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1516 PUSHs(cx->blk_eval.cur_text);
1520 else if (cx->blk_eval.old_namesv) {
1521 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1524 /* eval BLOCK (try blocks have old_namesv == 0) */
1526 PUSHs(&PL_sv_undef);
1527 PUSHs(&PL_sv_undef);
1531 PUSHs(&PL_sv_undef);
1532 PUSHs(&PL_sv_undef);
1534 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1535 && CopSTASH_eq(PL_curcop, PL_debstash))
1537 AV *ary = cx->blk_sub.argarray;
1538 int off = AvARRAY(ary) - AvALLOC(ary);
1542 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1545 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1548 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1549 av_extend(PL_dbargs, AvFILLp(ary) + off);
1550 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1551 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1553 /* XXX only hints propagated via op_private are currently
1554 * visible (others are not easily accessible, since they
1555 * use the global PL_hints) */
1556 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1557 HINT_PRIVATE_MASK)));
1560 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1562 if (old_warnings == pWARN_NONE ||
1563 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1564 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1565 else if (old_warnings == pWARN_ALL ||
1566 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1567 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1569 mask = newSVsv(old_warnings);
1570 PUSHs(sv_2mortal(mask));
1585 sv_reset(tmps, CopSTASH(PL_curcop));
1595 /* like pp_nextstate, but used instead when the debugger is active */
1599 PL_curcop = (COP*)PL_op;
1600 TAINT_NOT; /* Each statement is presumed innocent */
1601 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1604 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1608 register PERL_CONTEXT *cx;
1609 I32 gimme = G_ARRAY;
1616 DIE(aTHX_ "No DB::DB routine defined");
1618 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1619 /* don't do recursive DB::DB call */
1631 push_return(PL_op->op_next);
1632 PUSHBLOCK(cx, CXt_SUB, SP);
1635 (void)SvREFCNT_inc(cv);
1636 PAD_SET_CUR(CvPADLIST(cv),1);
1637 RETURNOP(CvSTART(cv));
1651 register PERL_CONTEXT *cx;
1652 I32 gimme = GIMME_V;
1654 U32 cxtype = CXt_LOOP;
1662 if (PL_op->op_targ) {
1663 #ifndef USE_ITHREADS
1664 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1667 SAVEPADSV(PL_op->op_targ);
1668 iterdata = INT2PTR(void*, PL_op->op_targ);
1669 cxtype |= CXp_PADVAR;
1674 svp = &GvSV(gv); /* symbol table variable */
1675 SAVEGENERICSV(*svp);
1678 iterdata = (void*)gv;
1684 PUSHBLOCK(cx, cxtype, SP);
1686 PUSHLOOP(cx, iterdata, MARK);
1688 PUSHLOOP(cx, svp, MARK);
1690 if (PL_op->op_flags & OPf_STACKED) {
1691 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1692 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1694 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1695 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1696 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1697 looks_like_number((SV*)cx->blk_loop.iterary) &&
1698 *SvPVX(cx->blk_loop.iterary) != '0'))
1700 if (SvNV(sv) < IV_MIN ||
1701 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1702 DIE(aTHX_ "Range iterator outside integer range");
1703 cx->blk_loop.iterix = SvIV(sv);
1704 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1707 cx->blk_loop.iterlval = newSVsv(sv);
1711 cx->blk_loop.iterary = PL_curstack;
1712 AvFILLp(PL_curstack) = SP - PL_stack_base;
1713 cx->blk_loop.iterix = MARK - PL_stack_base;
1722 register PERL_CONTEXT *cx;
1723 I32 gimme = GIMME_V;
1729 PUSHBLOCK(cx, CXt_LOOP, SP);
1730 PUSHLOOP(cx, 0, SP);
1738 register PERL_CONTEXT *cx;
1746 newsp = PL_stack_base + cx->blk_loop.resetsp;
1749 if (gimme == G_VOID)
1751 else if (gimme == G_SCALAR) {
1753 *++newsp = sv_mortalcopy(*SP);
1755 *++newsp = &PL_sv_undef;
1759 *++newsp = sv_mortalcopy(*++mark);
1760 TAINT_NOT; /* Each item is independent */
1766 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1767 PL_curpm = newpm; /* ... and pop $1 et al */
1779 register PERL_CONTEXT *cx;
1780 bool popsub2 = FALSE;
1781 bool clear_errsv = FALSE;
1788 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1789 if (cxstack_ix == PL_sortcxix
1790 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1792 if (cxstack_ix > PL_sortcxix)
1793 dounwind(PL_sortcxix);
1794 AvARRAY(PL_curstack)[1] = *SP;
1795 PL_stack_sp = PL_stack_base + 1;
1800 cxix = dopoptosub(cxstack_ix);
1802 DIE(aTHX_ "Can't return outside a subroutine");
1803 if (cxix < cxstack_ix)
1807 switch (CxTYPE(cx)) {
1812 if (!(PL_in_eval & EVAL_KEEPERR))
1818 if (optype == OP_REQUIRE &&
1819 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1821 /* Unassume the success we assumed earlier. */
1822 SV *nsv = cx->blk_eval.old_namesv;
1823 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1824 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1831 DIE(aTHX_ "panic: return");
1835 if (gimme == G_SCALAR) {
1838 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1840 *++newsp = SvREFCNT_inc(*SP);
1845 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1847 *++newsp = sv_mortalcopy(sv);
1852 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1855 *++newsp = sv_mortalcopy(*SP);
1858 *++newsp = &PL_sv_undef;
1860 else if (gimme == G_ARRAY) {
1861 while (++MARK <= SP) {
1862 *++newsp = (popsub2 && SvTEMP(*MARK))
1863 ? *MARK : sv_mortalcopy(*MARK);
1864 TAINT_NOT; /* Each item is independent */
1867 PL_stack_sp = newsp;
1869 /* Stack values are safe: */
1871 POPSUB(cx,sv); /* release CV and @_ ... */
1875 PL_curpm = newpm; /* ... and pop $1 et al */
1881 return pop_return();
1888 register PERL_CONTEXT *cx;
1898 if (PL_op->op_flags & OPf_SPECIAL) {
1899 cxix = dopoptoloop(cxstack_ix);
1901 DIE(aTHX_ "Can't \"last\" outside a loop block");
1904 cxix = dopoptolabel(cPVOP->op_pv);
1906 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1908 if (cxix < cxstack_ix)
1913 switch (CxTYPE(cx)) {
1916 newsp = PL_stack_base + cx->blk_loop.resetsp;
1917 nextop = cx->blk_loop.last_op->op_next;
1921 nextop = pop_return();
1925 nextop = pop_return();
1929 nextop = pop_return();
1932 DIE(aTHX_ "panic: last");
1936 if (gimme == G_SCALAR) {
1938 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1939 ? *SP : sv_mortalcopy(*SP);
1941 *++newsp = &PL_sv_undef;
1943 else if (gimme == G_ARRAY) {
1944 while (++MARK <= SP) {
1945 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1946 ? *MARK : sv_mortalcopy(*MARK);
1947 TAINT_NOT; /* Each item is independent */
1953 /* Stack values are safe: */
1956 POPLOOP(cx); /* release loop vars ... */
1960 POPSUB(cx,sv); /* release CV and @_ ... */
1963 PL_curpm = newpm; /* ... and pop $1 et al */
1973 register PERL_CONTEXT *cx;
1976 if (PL_op->op_flags & OPf_SPECIAL) {
1977 cxix = dopoptoloop(cxstack_ix);
1979 DIE(aTHX_ "Can't \"next\" outside a loop block");
1982 cxix = dopoptolabel(cPVOP->op_pv);
1984 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1986 if (cxix < cxstack_ix)
1989 /* clear off anything above the scope we're re-entering, but
1990 * save the rest until after a possible continue block */
1991 inner = PL_scopestack_ix;
1993 if (PL_scopestack_ix < inner)
1994 leave_scope(PL_scopestack[PL_scopestack_ix]);
1995 return cx->blk_loop.next_op;
2001 register PERL_CONTEXT *cx;
2004 if (PL_op->op_flags & OPf_SPECIAL) {
2005 cxix = dopoptoloop(cxstack_ix);
2007 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2010 cxix = dopoptolabel(cPVOP->op_pv);
2012 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2014 if (cxix < cxstack_ix)
2018 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2019 LEAVE_SCOPE(oldsave);
2020 return cx->blk_loop.redo_op;
2024 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2028 static char too_deep[] = "Target of goto is too deeply nested";
2031 Perl_croak(aTHX_ too_deep);
2032 if (o->op_type == OP_LEAVE ||
2033 o->op_type == OP_SCOPE ||
2034 o->op_type == OP_LEAVELOOP ||
2035 o->op_type == OP_LEAVETRY)
2037 *ops++ = cUNOPo->op_first;
2039 Perl_croak(aTHX_ too_deep);
2042 if (o->op_flags & OPf_KIDS) {
2043 /* First try all the kids at this level, since that's likeliest. */
2044 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2045 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2046 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2049 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2050 if (kid == PL_lastgotoprobe)
2052 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2054 (ops[-1]->op_type != OP_NEXTSTATE &&
2055 ops[-1]->op_type != OP_DBSTATE)))
2057 if ((o = dofindlabel(kid, label, ops, oplimit)))
2076 register PERL_CONTEXT *cx;
2077 #define GOTO_DEPTH 64
2078 OP *enterops[GOTO_DEPTH];
2080 int do_dump = (PL_op->op_type == OP_DUMP);
2081 static char must_have_label[] = "goto must have label";
2084 if (PL_op->op_flags & OPf_STACKED) {
2088 /* This egregious kludge implements goto &subroutine */
2089 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2091 register PERL_CONTEXT *cx;
2092 CV* cv = (CV*)SvRV(sv);
2098 if (!CvROOT(cv) && !CvXSUB(cv)) {
2103 /* autoloaded stub? */
2104 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2106 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2107 GvNAMELEN(gv), FALSE);
2108 if (autogv && (cv = GvCV(autogv)))
2110 tmpstr = sv_newmortal();
2111 gv_efullname3(tmpstr, gv, Nullch);
2112 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2114 DIE(aTHX_ "Goto undefined subroutine");
2117 /* First do some returnish stuff. */
2118 cxix = dopoptosub(cxstack_ix);
2120 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2121 if (cxix < cxstack_ix)
2125 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2127 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2128 /* put @_ back onto stack */
2129 AV* av = cx->blk_sub.argarray;
2131 items = AvFILLp(av) + 1;
2133 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2134 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2135 PL_stack_sp += items;
2136 SvREFCNT_dec(GvAV(PL_defgv));
2137 GvAV(PL_defgv) = cx->blk_sub.savearray;
2138 /* abandon @_ if it got reified */
2140 (void)sv_2mortal((SV*)av); /* delay until return */
2142 av_extend(av, items-1);
2143 AvFLAGS(av) = AVf_REIFY;
2144 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2147 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2149 av = GvAV(PL_defgv);
2150 items = AvFILLp(av) + 1;
2152 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2153 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2154 PL_stack_sp += items;
2156 if (CxTYPE(cx) == CXt_SUB &&
2157 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2158 SvREFCNT_dec(cx->blk_sub.cv);
2159 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2160 LEAVE_SCOPE(oldsave);
2162 /* Now do some callish stuff. */
2165 #ifdef PERL_XSUB_OLDSTYLE
2166 if (CvOLDSTYLE(cv)) {
2167 I32 (*fp3)(int,int,int);
2172 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2173 items = (*fp3)(CvXSUBANY(cv).any_i32,
2174 mark - PL_stack_base + 1,
2176 SP = PL_stack_base + items;
2179 #endif /* PERL_XSUB_OLDSTYLE */
2184 PL_stack_sp--; /* There is no cv arg. */
2185 /* Push a mark for the start of arglist */
2187 (void)(*CvXSUB(cv))(aTHX_ cv);
2188 /* Pop the current context like a decent sub should */
2189 POPBLOCK(cx, PL_curpm);
2190 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2193 return pop_return();
2196 AV* padlist = CvPADLIST(cv);
2197 if (CxTYPE(cx) == CXt_EVAL) {
2198 PL_in_eval = cx->blk_eval.old_in_eval;
2199 PL_eval_root = cx->blk_eval.old_eval_root;
2200 cx->cx_type = CXt_SUB;
2201 cx->blk_sub.hasargs = 0;
2203 cx->blk_sub.cv = cv;
2204 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2207 if (CvDEPTH(cv) < 2)
2208 (void)SvREFCNT_inc(cv);
2210 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2211 sub_crush_depth(cv);
2212 pad_push(padlist, CvDEPTH(cv), cx->blk_sub.hasargs);
2214 PAD_SET_CUR(padlist, CvDEPTH(cv));
2215 if (cx->blk_sub.hasargs)
2217 AV* av = (AV*)PAD_SVl(0);
2220 cx->blk_sub.savearray = GvAV(PL_defgv);
2221 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2222 CX_CURPAD_SAVE(cx->blk_sub);
2223 cx->blk_sub.argarray = av;
2226 if (items >= AvMAX(av) + 1) {
2228 if (AvARRAY(av) != ary) {
2229 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2230 SvPVX(av) = (char*)ary;
2232 if (items >= AvMAX(av) + 1) {
2233 AvMAX(av) = items - 1;
2234 Renew(ary,items+1,SV*);
2236 SvPVX(av) = (char*)ary;
2239 Copy(mark,AvARRAY(av),items,SV*);
2240 AvFILLp(av) = items - 1;
2241 assert(!AvREAL(av));
2248 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2250 * We do not care about using sv to call CV;
2251 * it's for informational purposes only.
2253 SV *sv = GvSV(PL_DBsub);
2256 if (PERLDB_SUB_NN) {
2257 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2260 gv_efullname3(sv, CvGV(cv), Nullch);
2263 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2264 PUSHMARK( PL_stack_sp );
2265 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2269 RETURNOP(CvSTART(cv));
2273 label = SvPV(sv,n_a);
2274 if (!(do_dump || *label))
2275 DIE(aTHX_ must_have_label);
2278 else if (PL_op->op_flags & OPf_SPECIAL) {
2280 DIE(aTHX_ must_have_label);
2283 label = cPVOP->op_pv;
2285 if (label && *label) {
2287 bool leaving_eval = FALSE;
2288 PERL_CONTEXT *last_eval_cx = 0;
2292 PL_lastgotoprobe = 0;
2294 for (ix = cxstack_ix; ix >= 0; ix--) {
2296 switch (CxTYPE(cx)) {
2298 leaving_eval = TRUE;
2299 if (CxREALEVAL(cx)) {
2300 gotoprobe = (last_eval_cx ?
2301 last_eval_cx->blk_eval.old_eval_root :
2306 /* else fall through */
2308 gotoprobe = cx->blk_oldcop->op_sibling;
2314 gotoprobe = cx->blk_oldcop->op_sibling;
2316 gotoprobe = PL_main_root;
2319 if (CvDEPTH(cx->blk_sub.cv)) {
2320 gotoprobe = CvROOT(cx->blk_sub.cv);
2326 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2329 DIE(aTHX_ "panic: goto");
2330 gotoprobe = PL_main_root;
2334 retop = dofindlabel(gotoprobe, label,
2335 enterops, enterops + GOTO_DEPTH);
2339 PL_lastgotoprobe = gotoprobe;
2342 DIE(aTHX_ "Can't find label %s", label);
2344 /* if we're leaving an eval, check before we pop any frames
2345 that we're not going to punt, otherwise the error
2348 if (leaving_eval && *enterops && enterops[1]) {
2350 for (i = 1; enterops[i]; i++)
2351 if (enterops[i]->op_type == OP_ENTERITER)
2352 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2355 /* pop unwanted frames */
2357 if (ix < cxstack_ix) {
2364 oldsave = PL_scopestack[PL_scopestack_ix];
2365 LEAVE_SCOPE(oldsave);
2368 /* push wanted frames */
2370 if (*enterops && enterops[1]) {
2372 for (ix = 1; enterops[ix]; ix++) {
2373 PL_op = enterops[ix];
2374 /* Eventually we may want to stack the needed arguments
2375 * for each op. For now, we punt on the hard ones. */
2376 if (PL_op->op_type == OP_ENTERITER)
2377 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2378 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2386 if (!retop) retop = PL_main_start;
2388 PL_restartop = retop;
2389 PL_do_undump = TRUE;
2393 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2394 PL_do_undump = FALSE;
2410 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2412 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2415 PL_exit_flags |= PERL_EXIT_EXPECTED;
2417 PUSHs(&PL_sv_undef);
2425 NV value = SvNVx(GvSV(cCOP->cop_gv));
2426 register I32 match = I_32(value);
2429 if (((NV)match) > value)
2430 --match; /* was fractional--truncate other way */
2432 match -= cCOP->uop.scop.scop_offset;
2435 else if (match > cCOP->uop.scop.scop_max)
2436 match = cCOP->uop.scop.scop_max;
2437 PL_op = cCOP->uop.scop.scop_next[match];
2447 PL_op = PL_op->op_next; /* can't assume anything */
2450 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2451 match -= cCOP->uop.scop.scop_offset;
2454 else if (match > cCOP->uop.scop.scop_max)
2455 match = cCOP->uop.scop.scop_max;
2456 PL_op = cCOP->uop.scop.scop_next[match];
2465 S_save_lines(pTHX_ AV *array, SV *sv)
2467 register char *s = SvPVX(sv);
2468 register char *send = SvPVX(sv) + SvCUR(sv);
2470 register I32 line = 1;
2472 while (s && s < send) {
2473 SV *tmpstr = NEWSV(85,0);
2475 sv_upgrade(tmpstr, SVt_PVMG);
2476 t = strchr(s, '\n');
2482 sv_setpvn(tmpstr, s, t - s);
2483 av_store(array, line++, tmpstr);
2488 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2490 S_docatch_body(pTHX_ va_list args)
2492 return docatch_body();
2497 S_docatch_body(pTHX)
2504 S_docatch(pTHX_ OP *o)
2509 volatile PERL_SI *cursi = PL_curstackinfo;
2513 assert(CATCH_GET == TRUE);
2517 /* Normally, the leavetry at the end of this block of ops will
2518 * pop an op off the return stack and continue there. By setting
2519 * the op to Nullop, we force an exit from the inner runops()
2522 retop = pop_return();
2523 push_return(Nullop);
2525 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2527 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2533 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2539 /* die caught by an inner eval - continue inner loop */
2540 if (PL_restartop && cursi == PL_curstackinfo) {
2541 PL_op = PL_restartop;
2545 /* a die in this eval - continue in outer loop */
2561 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, PAD** padp)
2562 /* sv Text to convert to OP tree. */
2563 /* startop op_free() this to undo. */
2564 /* code Short string id of the caller. */
2566 dSP; /* Make POPBLOCK work. */
2569 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2573 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2574 char *tmpbuf = tbuf;
2580 /* switch to eval mode */
2582 if (PL_curcop == &PL_compiling) {
2583 SAVECOPSTASH_FREE(&PL_compiling);
2584 CopSTASH_set(&PL_compiling, PL_curstash);
2586 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2587 SV *sv = sv_newmortal();
2588 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2589 code, (unsigned long)++PL_evalseq,
2590 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2594 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2595 SAVECOPFILE_FREE(&PL_compiling);
2596 CopFILE_set(&PL_compiling, tmpbuf+2);
2597 SAVECOPLINE(&PL_compiling);
2598 CopLINE_set(&PL_compiling, 1);
2599 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2600 deleting the eval's FILEGV from the stash before gv_check() runs
2601 (i.e. before run-time proper). To work around the coredump that
2602 ensues, we always turn GvMULTI_on for any globals that were
2603 introduced within evals. See force_ident(). GSAR 96-10-12 */
2604 safestr = savepv(tmpbuf);
2605 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2607 #ifdef OP_IN_REGISTER
2612 PL_hints &= HINT_UTF8;
2615 PL_op->op_type = OP_ENTEREVAL;
2616 PL_op->op_flags = 0; /* Avoid uninit warning. */
2617 PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2618 PUSHEVAL(cx, 0, Nullgv);
2619 rop = doeval(G_SCALAR, startop);
2620 POPBLOCK(cx,PL_curpm);
2623 (*startop)->op_type = OP_NULL;
2624 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2626 /* XXX DAPM do this properly one year */
2627 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2629 if (PL_curcop == &PL_compiling)
2630 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2631 #ifdef OP_IN_REGISTER
2637 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2639 S_doeval(pTHX_ int gimme, OP** startop)
2646 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2647 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2653 for (i = cxstack_ix - 1; i >= 0; i--) {
2654 PERL_CONTEXT *cx = &cxstack[i];
2655 if (CxTYPE(cx) == CXt_EVAL)
2657 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2658 caller = cx->blk_sub.cv;
2663 SAVESPTR(PL_compcv);
2664 PL_compcv = (CV*)NEWSV(1104,0);
2665 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2666 CvEVAL_on(PL_compcv);
2667 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2668 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2670 /* set up a scratch pad */
2672 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2675 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2677 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2680 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2682 /* make sure we compile in the right package */
2684 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2685 SAVESPTR(PL_curstash);
2686 PL_curstash = CopSTASH(PL_curcop);
2688 SAVESPTR(PL_beginav);
2689 PL_beginav = newAV();
2690 SAVEFREESV(PL_beginav);
2691 SAVEI32(PL_error_count);
2693 /* try to compile it */
2695 PL_eval_root = Nullop;
2697 PL_curcop = &PL_compiling;
2698 PL_curcop->cop_arybase = 0;
2699 if (saveop && saveop->op_flags & OPf_SPECIAL)
2700 PL_in_eval |= EVAL_KEEPERR;
2703 if (yyparse() || PL_error_count || !PL_eval_root) {
2707 I32 optype = 0; /* Might be reset by POPEVAL. */
2712 op_free(PL_eval_root);
2713 PL_eval_root = Nullop;
2715 SP = PL_stack_base + POPMARK; /* pop original mark */
2717 POPBLOCK(cx,PL_curpm);
2723 if (optype == OP_REQUIRE) {
2724 char* msg = SvPVx(ERRSV, n_a);
2725 DIE(aTHX_ "%sCompilation failed in require",
2726 *msg ? msg : "Unknown error\n");
2729 char* msg = SvPVx(ERRSV, n_a);
2731 POPBLOCK(cx,PL_curpm);
2733 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2734 (*msg ? msg : "Unknown error\n"));
2738 CopLINE_set(&PL_compiling, 0);
2740 *startop = PL_eval_root;
2741 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2742 CvOUTSIDE(PL_compcv) = Nullcv;
2744 SAVEFREEOP(PL_eval_root);
2746 scalarvoid(PL_eval_root);
2747 else if (gimme & G_ARRAY)
2750 scalar(PL_eval_root);
2752 DEBUG_x(dump_eval());
2754 /* Register with debugger: */
2755 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2756 CV *cv = get_cv("DB::postponed", FALSE);
2760 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2762 call_sv((SV*)cv, G_DISCARD);
2766 /* compiled okay, so do it */
2768 CvDEPTH(PL_compcv) = 1;
2769 SP = PL_stack_base + POPMARK; /* pop original mark */
2770 PL_op = saveop; /* The caller may need it. */
2771 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2773 RETURNOP(PL_eval_start);
2777 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2779 STRLEN namelen = strlen(name);
2782 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2783 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2784 char *pmc = SvPV_nolen(pmcsv);
2787 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2788 fp = PerlIO_open(name, mode);
2791 if (PerlLIO_stat(name, &pmstat) < 0 ||
2792 pmstat.st_mtime < pmcstat.st_mtime)
2794 fp = PerlIO_open(pmc, mode);
2797 fp = PerlIO_open(name, mode);
2800 SvREFCNT_dec(pmcsv);
2803 fp = PerlIO_open(name, mode);
2811 register PERL_CONTEXT *cx;
2815 char *tryname = Nullch;
2816 SV *namesv = Nullsv;
2818 I32 gimme = GIMME_V;
2819 PerlIO *tryrsfp = 0;
2821 int filter_has_file = 0;
2822 GV *filter_child_proc = 0;
2823 SV *filter_state = 0;
2830 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
2831 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
2832 UV rev = 0, ver = 0, sver = 0;
2834 U8 *s = (U8*)SvPVX(sv);
2835 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2837 rev = utf8n_to_uvchr(s, end - s, &len, 0);
2840 ver = utf8n_to_uvchr(s, end - s, &len, 0);
2843 sver = utf8n_to_uvchr(s, end - s, &len, 0);
2846 if (PERL_REVISION < rev
2847 || (PERL_REVISION == rev
2848 && (PERL_VERSION < ver
2849 || (PERL_VERSION == ver
2850 && PERL_SUBVERSION < sver))))
2852 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2853 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2854 PERL_VERSION, PERL_SUBVERSION);
2856 if (ckWARN(WARN_PORTABLE))
2857 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
2858 "v-string in use/require non-portable");
2861 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2862 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2863 + ((NV)PERL_SUBVERSION/(NV)1000000)
2864 + 0.00000099 < SvNV(sv))
2868 NV nver = (nrev - rev) * 1000;
2869 UV ver = (UV)(nver + 0.0009);
2870 NV nsver = (nver - ver) * 1000;
2871 UV sver = (UV)(nsver + 0.0009);
2873 /* help out with the "use 5.6" confusion */
2874 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2875 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
2876 " (did you mean v%"UVuf".%03"UVuf"?)--"
2877 "this is only v%d.%d.%d, stopped",
2878 rev, ver, sver, rev, ver/100,
2879 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
2882 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2883 "this is only v%d.%d.%d, stopped",
2884 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2891 name = SvPV(sv, len);
2892 if (!(name && len > 0 && *name))
2893 DIE(aTHX_ "Null filename used");
2894 TAINT_PROPER("require");
2895 if (PL_op->op_type == OP_REQUIRE &&
2896 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2897 *svp != &PL_sv_undef)
2900 /* prepare to compile file */
2902 if (path_is_absolute(name)) {
2904 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2906 #ifdef MACOS_TRADITIONAL
2910 MacPerl_CanonDir(name, newname, 1);
2911 if (path_is_absolute(newname)) {
2913 tryrsfp = doopen_pmc(newname,PERL_SCRIPT_MODE);
2918 AV *ar = GvAVn(PL_incgv);
2922 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2925 namesv = NEWSV(806, 0);
2926 for (i = 0; i <= AvFILL(ar); i++) {
2927 SV *dirsv = *av_fetch(ar, i, TRUE);
2933 if (SvTYPE(SvRV(loader)) == SVt_PVAV
2934 && !sv_isobject(loader))
2936 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2939 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2940 PTR2UV(SvRV(dirsv)), name);
2941 tryname = SvPVX(namesv);
2952 if (sv_isobject(loader))
2953 count = call_method("INC", G_ARRAY);
2955 count = call_sv(loader, G_ARRAY);
2965 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
2969 if (SvTYPE(arg) == SVt_PVGV) {
2970 IO *io = GvIO((GV *)arg);
2975 tryrsfp = IoIFP(io);
2976 if (IoTYPE(io) == IoTYPE_PIPE) {
2977 /* reading from a child process doesn't
2978 nest -- when returning from reading
2979 the inner module, the outer one is
2980 unreadable (closed?) I've tried to
2981 save the gv to manage the lifespan of
2982 the pipe, but this didn't help. XXX */
2983 filter_child_proc = (GV *)arg;
2984 (void)SvREFCNT_inc(filter_child_proc);
2987 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
2988 PerlIO_close(IoOFP(io));
3000 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3002 (void)SvREFCNT_inc(filter_sub);
3005 filter_state = SP[i];
3006 (void)SvREFCNT_inc(filter_state);
3010 tryrsfp = PerlIO_open("/dev/null",
3025 filter_has_file = 0;
3026 if (filter_child_proc) {
3027 SvREFCNT_dec(filter_child_proc);
3028 filter_child_proc = 0;
3031 SvREFCNT_dec(filter_state);
3035 SvREFCNT_dec(filter_sub);
3040 if (!path_is_absolute(name)
3041 #ifdef MACOS_TRADITIONAL
3042 /* We consider paths of the form :a:b ambiguous and interpret them first
3043 as global then as local
3045 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3048 char *dir = SvPVx(dirsv, n_a);
3049 #ifdef MACOS_TRADITIONAL
3053 MacPerl_CanonDir(name, buf2, 1);
3054 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3058 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3060 sv_setpv(namesv, unixdir);
3061 sv_catpv(namesv, unixname);
3063 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3066 TAINT_PROPER("require");
3067 tryname = SvPVX(namesv);
3068 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3070 if (tryname[0] == '.' && tryname[1] == '/')
3079 SAVECOPFILE_FREE(&PL_compiling);
3080 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3081 SvREFCNT_dec(namesv);
3083 if (PL_op->op_type == OP_REQUIRE) {
3084 char *msgstr = name;
3085 if (namesv) { /* did we lookup @INC? */
3086 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3087 SV *dirmsgsv = NEWSV(0, 0);
3088 AV *ar = GvAVn(PL_incgv);
3090 sv_catpvn(msg, " in @INC", 8);
3091 if (instr(SvPVX(msg), ".h "))
3092 sv_catpv(msg, " (change .h to .ph maybe?)");
3093 if (instr(SvPVX(msg), ".ph "))
3094 sv_catpv(msg, " (did you run h2ph?)");
3095 sv_catpv(msg, " (@INC contains:");
3096 for (i = 0; i <= AvFILL(ar); i++) {
3097 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3098 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3099 sv_catsv(msg, dirmsgsv);
3101 sv_catpvn(msg, ")", 1);
3102 SvREFCNT_dec(dirmsgsv);
3103 msgstr = SvPV_nolen(msg);
3105 DIE(aTHX_ "Can't locate %s", msgstr);
3111 SETERRNO(0, SS_NORMAL);
3113 /* Assume success here to prevent recursive requirement. */
3115 /* Check whether a hook in @INC has already filled %INC */
3116 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3117 (void)hv_store(GvHVn(PL_incgv), name, len,
3118 (hook_sv ? SvREFCNT_inc(hook_sv)
3119 : newSVpv(CopFILE(&PL_compiling), 0)),
3125 lex_start(sv_2mortal(newSVpvn("",0)));
3126 SAVEGENERICSV(PL_rsfp_filters);
3127 PL_rsfp_filters = Nullav;
3132 SAVESPTR(PL_compiling.cop_warnings);
3133 if (PL_dowarn & G_WARN_ALL_ON)
3134 PL_compiling.cop_warnings = pWARN_ALL ;
3135 else if (PL_dowarn & G_WARN_ALL_OFF)
3136 PL_compiling.cop_warnings = pWARN_NONE ;
3137 else if (PL_taint_warn)
3138 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3140 PL_compiling.cop_warnings = pWARN_STD ;
3141 SAVESPTR(PL_compiling.cop_io);
3142 PL_compiling.cop_io = Nullsv;
3144 if (filter_sub || filter_child_proc) {
3145 SV *datasv = filter_add(run_user_filter, Nullsv);
3146 IoLINES(datasv) = filter_has_file;
3147 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3148 IoTOP_GV(datasv) = (GV *)filter_state;
3149 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3152 /* switch to eval mode */
3153 push_return(PL_op->op_next);
3154 PUSHBLOCK(cx, CXt_EVAL, SP);
3155 PUSHEVAL(cx, name, Nullgv);
3157 SAVECOPLINE(&PL_compiling);
3158 CopLINE_set(&PL_compiling, 0);
3162 /* Store and reset encoding. */
3163 encoding = PL_encoding;
3164 PL_encoding = Nullsv;
3166 op = DOCATCH(doeval(gimme, NULL));
3168 /* Restore encoding. */
3169 PL_encoding = encoding;
3176 return pp_require();
3182 register PERL_CONTEXT *cx;
3184 I32 gimme = GIMME_V, was = PL_sub_generation;
3185 char tbuf[TYPE_DIGITS(long) + 12];
3186 char *tmpbuf = tbuf;
3193 TAINT_PROPER("eval");
3199 /* switch to eval mode */
3201 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3202 SV *sv = sv_newmortal();
3203 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3204 (unsigned long)++PL_evalseq,
3205 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3209 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3210 SAVECOPFILE_FREE(&PL_compiling);
3211 CopFILE_set(&PL_compiling, tmpbuf+2);
3212 SAVECOPLINE(&PL_compiling);
3213 CopLINE_set(&PL_compiling, 1);
3214 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3215 deleting the eval's FILEGV from the stash before gv_check() runs
3216 (i.e. before run-time proper). To work around the coredump that
3217 ensues, we always turn GvMULTI_on for any globals that were
3218 introduced within evals. See force_ident(). GSAR 96-10-12 */
3219 safestr = savepv(tmpbuf);
3220 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3222 PL_hints = PL_op->op_targ;
3223 SAVESPTR(PL_compiling.cop_warnings);
3224 if (specialWARN(PL_curcop->cop_warnings))
3225 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3227 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3228 SAVEFREESV(PL_compiling.cop_warnings);
3230 SAVESPTR(PL_compiling.cop_io);
3231 if (specialCopIO(PL_curcop->cop_io))
3232 PL_compiling.cop_io = PL_curcop->cop_io;
3234 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3235 SAVEFREESV(PL_compiling.cop_io);
3238 push_return(PL_op->op_next);
3239 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3240 PUSHEVAL(cx, 0, Nullgv);
3242 /* prepare to compile string */
3244 if (PERLDB_LINE && PL_curstash != PL_debstash)
3245 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3247 ret = doeval(gimme, NULL);
3248 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3249 && ret != PL_op->op_next) { /* Successive compilation. */
3250 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3252 return DOCATCH(ret);
3262 register PERL_CONTEXT *cx;
3264 U8 save_flags = PL_op -> op_flags;
3269 retop = pop_return();
3272 if (gimme == G_VOID)
3274 else if (gimme == G_SCALAR) {
3277 if (SvFLAGS(TOPs) & SVs_TEMP)
3280 *MARK = sv_mortalcopy(TOPs);
3284 *MARK = &PL_sv_undef;
3289 /* in case LEAVE wipes old return values */
3290 for (mark = newsp + 1; mark <= SP; mark++) {
3291 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3292 *mark = sv_mortalcopy(*mark);
3293 TAINT_NOT; /* Each item is independent */
3297 PL_curpm = newpm; /* Don't pop $1 et al till now */
3300 assert(CvDEPTH(PL_compcv) == 1);
3302 CvDEPTH(PL_compcv) = 0;
3305 if (optype == OP_REQUIRE &&
3306 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3308 /* Unassume the success we assumed earlier. */
3309 SV *nsv = cx->blk_eval.old_namesv;
3310 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3311 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3312 /* die_where() did LEAVE, or we won't be here */
3316 if (!(save_flags & OPf_SPECIAL))
3326 register PERL_CONTEXT *cx;
3327 I32 gimme = GIMME_V;
3332 push_return(cLOGOP->op_other->op_next);
3333 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3336 PL_in_eval = EVAL_INEVAL;
3339 return DOCATCH(PL_op->op_next);
3350 register PERL_CONTEXT *cx;
3355 retop = pop_return();
3358 if (gimme == G_VOID)
3360 else if (gimme == G_SCALAR) {
3363 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3366 *MARK = sv_mortalcopy(TOPs);
3370 *MARK = &PL_sv_undef;
3375 /* in case LEAVE wipes old return values */
3376 for (mark = newsp + 1; mark <= SP; mark++) {
3377 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3378 *mark = sv_mortalcopy(*mark);
3379 TAINT_NOT; /* Each item is independent */
3383 PL_curpm = newpm; /* Don't pop $1 et al till now */
3391 S_doparseform(pTHX_ SV *sv)
3394 register char *s = SvPV_force(sv, len);
3395 register char *send = s + len;
3396 register char *base = Nullch;
3397 register I32 skipspaces = 0;
3398 bool noblank = FALSE;
3399 bool repeat = FALSE;
3400 bool postspace = FALSE;
3408 Perl_croak(aTHX_ "Null picture in formline");
3410 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3415 *fpc++ = FF_LINEMARK;
3416 noblank = repeat = FALSE;
3434 case ' ': case '\t':
3445 *fpc++ = FF_LITERAL;
3453 *fpc++ = (U16)skipspaces;
3457 *fpc++ = FF_NEWLINE;
3461 arg = fpc - linepc + 1;
3468 *fpc++ = FF_LINEMARK;
3469 noblank = repeat = FALSE;
3478 ischop = s[-1] == '^';
3484 arg = (s - base) - 1;
3486 *fpc++ = FF_LITERAL;
3495 *fpc++ = FF_LINEGLOB;
3497 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3498 arg = ischop ? 512 : 0;
3508 arg |= 256 + (s - f);
3510 *fpc++ = s - base; /* fieldsize for FETCH */
3511 *fpc++ = FF_DECIMAL;
3514 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3515 arg = ischop ? 512 : 0;
3517 s++; /* skip the '0' first */
3526 arg |= 256 + (s - f);
3528 *fpc++ = s - base; /* fieldsize for FETCH */
3529 *fpc++ = FF_0DECIMAL;
3534 bool ismore = FALSE;
3537 while (*++s == '>') ;
3538 prespace = FF_SPACE;
3540 else if (*s == '|') {
3541 while (*++s == '|') ;
3542 prespace = FF_HALFSPACE;
3547 while (*++s == '<') ;
3550 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3554 *fpc++ = s - base; /* fieldsize for FETCH */
3556 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3559 *fpc++ = (U16)prespace;
3574 { /* need to jump to the next word */
3576 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3577 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3578 s = SvPVX(sv) + SvCUR(sv) + z;
3580 Copy(fops, s, arg, U16);
3582 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3587 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3589 SV *datasv = FILTER_DATA(idx);
3590 int filter_has_file = IoLINES(datasv);
3591 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3592 SV *filter_state = (SV *)IoTOP_GV(datasv);
3593 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3596 /* I was having segfault trouble under Linux 2.2.5 after a
3597 parse error occured. (Had to hack around it with a test
3598 for PL_error_count == 0.) Solaris doesn't segfault --
3599 not sure where the trouble is yet. XXX */
3601 if (filter_has_file) {
3602 len = FILTER_READ(idx+1, buf_sv, maxlen);
3605 if (filter_sub && len >= 0) {
3616 PUSHs(sv_2mortal(newSViv(maxlen)));
3618 PUSHs(filter_state);
3621 count = call_sv(filter_sub, G_SCALAR);
3637 IoLINES(datasv) = 0;
3638 if (filter_child_proc) {
3639 SvREFCNT_dec(filter_child_proc);
3640 IoFMT_GV(datasv) = Nullgv;
3643 SvREFCNT_dec(filter_state);
3644 IoTOP_GV(datasv) = Nullgv;
3647 SvREFCNT_dec(filter_sub);
3648 IoBOTTOM_GV(datasv) = Nullgv;
3650 filter_del(run_user_filter);
3656 /* perhaps someone can come up with a better name for
3657 this? it is not really "absolute", per se ... */
3659 S_path_is_absolute(pTHX_ char *name)
3661 if (PERL_FILE_IS_ABSOLUTE(name)
3662 #ifdef MACOS_TRADITIONAL
3665 || (*name == '.' && (name[1] == '/' ||
3666 (name[1] == '.' && name[2] == '/'))))