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) || defined(USE_5005THREADS)
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) && !defined(USE_5005THREADS)
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)))
955 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
956 DIE(aTHX_ "Range iterator outside integer range");
967 sv = sv_2mortal(newSViv(i++));
972 SV *final = sv_mortalcopy(right);
974 char *tmps = SvPV(final, len);
976 sv = sv_mortalcopy(left);
978 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
980 if (strEQ(SvPVX(sv),tmps))
982 sv = sv_2mortal(newSVsv(sv));
989 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
993 if (PL_op->op_private & OPpFLIP_LINENUM) {
994 if (GvIO(PL_last_in_gv)) {
995 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
998 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
999 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1007 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1008 sv_catpv(targ, "E0");
1019 S_dopoptolabel(pTHX_ char *label)
1022 register PERL_CONTEXT *cx;
1024 for (i = cxstack_ix; i >= 0; i--) {
1026 switch (CxTYPE(cx)) {
1028 if (ckWARN(WARN_EXITING))
1029 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting substitution via %s",
1033 if (ckWARN(WARN_EXITING))
1034 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting subroutine via %s",
1038 if (ckWARN(WARN_EXITING))
1039 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting format via %s",
1043 if (ckWARN(WARN_EXITING))
1044 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting eval via %s",
1048 if (ckWARN(WARN_EXITING))
1049 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting pseudo-block via %s",
1053 if (!cx->blk_loop.label ||
1054 strNE(label, cx->blk_loop.label) ) {
1055 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1056 (long)i, cx->blk_loop.label));
1059 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1067 Perl_dowantarray(pTHX)
1069 I32 gimme = block_gimme();
1070 return (gimme == G_VOID) ? G_SCALAR : gimme;
1074 Perl_block_gimme(pTHX)
1078 cxix = dopoptosub(cxstack_ix);
1082 switch (cxstack[cxix].blk_gimme) {
1090 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1097 Perl_is_lvalue_sub(pTHX)
1101 cxix = dopoptosub(cxstack_ix);
1102 assert(cxix >= 0); /* We should only be called from inside subs */
1104 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1105 return cxstack[cxix].blk_sub.lval;
1111 S_dopoptosub(pTHX_ I32 startingblock)
1113 return dopoptosub_at(cxstack, startingblock);
1117 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1120 register PERL_CONTEXT *cx;
1121 for (i = startingblock; i >= 0; i--) {
1123 switch (CxTYPE(cx)) {
1129 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1137 S_dopoptoeval(pTHX_ I32 startingblock)
1140 register PERL_CONTEXT *cx;
1141 for (i = startingblock; i >= 0; i--) {
1143 switch (CxTYPE(cx)) {
1147 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1155 S_dopoptoloop(pTHX_ I32 startingblock)
1158 register PERL_CONTEXT *cx;
1159 for (i = startingblock; i >= 0; i--) {
1161 switch (CxTYPE(cx)) {
1163 if (ckWARN(WARN_EXITING))
1164 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting substitution via %s",
1168 if (ckWARN(WARN_EXITING))
1169 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting subroutine via %s",
1173 if (ckWARN(WARN_EXITING))
1174 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting format via %s",
1178 if (ckWARN(WARN_EXITING))
1179 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting eval via %s",
1183 if (ckWARN(WARN_EXITING))
1184 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting pseudo-block via %s",
1188 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1196 Perl_dounwind(pTHX_ I32 cxix)
1198 register PERL_CONTEXT *cx;
1201 while (cxstack_ix > cxix) {
1203 cx = &cxstack[cxstack_ix];
1204 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1205 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1206 /* Note: we don't need to restore the base context info till the end. */
1207 switch (CxTYPE(cx)) {
1210 continue; /* not break */
1232 Perl_qerror(pTHX_ SV *err)
1235 sv_catsv(ERRSV, err);
1237 sv_catsv(PL_errors, err);
1239 Perl_warn(aTHX_ "%"SVf, err);
1244 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1252 register PERL_CONTEXT *cx;
1257 if (PL_in_eval & EVAL_KEEPERR) {
1258 static char prefix[] = "\t(in cleanup) ";
1263 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1266 if (*e != *message || strNE(e,message))
1270 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1271 sv_catpvn(err, prefix, sizeof(prefix)-1);
1272 sv_catpvn(err, message, msglen);
1273 if (ckWARN(WARN_MISC)) {
1274 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1275 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1280 sv_setpvn(ERRSV, message, msglen);
1284 message = SvPVx(ERRSV, msglen);
1286 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1287 && PL_curstackinfo->si_prev)
1296 if (cxix < cxstack_ix)
1299 POPBLOCK(cx,PL_curpm);
1300 if (CxTYPE(cx) != CXt_EVAL) {
1301 PerlIO_write(Perl_error_log, "panic: die ", 11);
1302 PerlIO_write(Perl_error_log, message, msglen);
1307 if (gimme == G_SCALAR)
1308 *++newsp = &PL_sv_undef;
1309 PL_stack_sp = newsp;
1313 /* LEAVE could clobber PL_curcop (see save_re_context())
1314 * XXX it might be better to find a way to avoid messing with
1315 * PL_curcop in save_re_context() instead, but this is a more
1316 * minimal fix --GSAR */
1317 PL_curcop = cx->blk_oldcop;
1319 if (optype == OP_REQUIRE) {
1320 char* msg = SvPVx(ERRSV, n_a);
1321 DIE(aTHX_ "%sCompilation failed in require",
1322 *msg ? msg : "Unknown error\n");
1324 return pop_return();
1328 message = SvPVx(ERRSV, msglen);
1330 /* if STDERR is tied, print to it instead */
1331 if (PL_stderrgv && (io = GvIOp(PL_stderrgv))
1332 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1335 XPUSHs(SvTIED_obj((SV*)io, mg));
1336 XPUSHs(sv_2mortal(newSVpvn(message, msglen)));
1338 call_method("PRINT", G_SCALAR);
1343 /* SFIO can really mess with your errno */
1346 PerlIO *serr = Perl_error_log;
1348 PERL_WRITE_MSG_TO_CONSOLE(serr, message, msglen);
1349 (void)PerlIO_flush(serr);
1362 if (SvTRUE(left) != SvTRUE(right))
1374 RETURNOP(cLOGOP->op_other);
1383 RETURNOP(cLOGOP->op_other);
1389 register I32 cxix = dopoptosub(cxstack_ix);
1390 register PERL_CONTEXT *cx;
1391 register PERL_CONTEXT *ccstack = cxstack;
1392 PERL_SI *top_si = PL_curstackinfo;
1403 /* we may be in a higher stacklevel, so dig down deeper */
1404 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1405 top_si = top_si->si_prev;
1406 ccstack = top_si->si_cxstack;
1407 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1410 if (GIMME != G_ARRAY) {
1416 if (PL_DBsub && cxix >= 0 &&
1417 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1421 cxix = dopoptosub_at(ccstack, cxix - 1);
1424 cx = &ccstack[cxix];
1425 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1426 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1427 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1428 field below is defined for any cx. */
1429 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1430 cx = &ccstack[dbcxix];
1433 stashname = CopSTASHPV(cx->blk_oldcop);
1434 if (GIMME != G_ARRAY) {
1437 PUSHs(&PL_sv_undef);
1440 sv_setpv(TARG, stashname);
1449 PUSHs(&PL_sv_undef);
1451 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1452 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1453 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1456 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1457 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1458 /* So is ccstack[dbcxix]. */
1461 gv_efullname3(sv, cvgv, Nullch);
1462 PUSHs(sv_2mortal(sv));
1463 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1466 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1467 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1471 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1472 PUSHs(sv_2mortal(newSViv(0)));
1474 gimme = (I32)cx->blk_gimme;
1475 if (gimme == G_VOID)
1476 PUSHs(&PL_sv_undef);
1478 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1479 if (CxTYPE(cx) == CXt_EVAL) {
1481 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1482 PUSHs(cx->blk_eval.cur_text);
1486 else if (cx->blk_eval.old_namesv) {
1487 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1490 /* eval BLOCK (try blocks have old_namesv == 0) */
1492 PUSHs(&PL_sv_undef);
1493 PUSHs(&PL_sv_undef);
1497 PUSHs(&PL_sv_undef);
1498 PUSHs(&PL_sv_undef);
1500 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1501 && CopSTASH_eq(PL_curcop, PL_debstash))
1503 AV *ary = cx->blk_sub.argarray;
1504 int off = AvARRAY(ary) - AvALLOC(ary);
1508 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1511 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1514 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1515 av_extend(PL_dbargs, AvFILLp(ary) + off);
1516 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1517 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1519 /* XXX only hints propagated via op_private are currently
1520 * visible (others are not easily accessible, since they
1521 * use the global PL_hints) */
1522 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1523 HINT_PRIVATE_MASK)));
1526 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1528 if (old_warnings == pWARN_NONE ||
1529 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1530 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1531 else if (old_warnings == pWARN_ALL ||
1532 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1533 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1535 mask = newSVsv(old_warnings);
1536 PUSHs(sv_2mortal(mask));
1551 sv_reset(tmps, CopSTASH(PL_curcop));
1563 PL_curcop = (COP*)PL_op;
1564 TAINT_NOT; /* Each statement is presumed innocent */
1565 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1568 if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1572 register PERL_CONTEXT *cx;
1573 I32 gimme = G_ARRAY;
1580 DIE(aTHX_ "No DB::DB routine defined");
1582 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1583 /* don't do recursive DB::DB call */
1595 push_return(PL_op->op_next);
1596 PUSHBLOCK(cx, CXt_SUB, SP);
1599 (void)SvREFCNT_inc(cv);
1600 SAVEVPTR(PL_curpad);
1601 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1602 RETURNOP(CvSTART(cv));
1616 register PERL_CONTEXT *cx;
1617 I32 gimme = GIMME_V;
1619 U32 cxtype = CXt_LOOP;
1627 #ifdef USE_5005THREADS
1628 if (PL_op->op_flags & OPf_SPECIAL) {
1629 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1630 SAVEGENERICSV(*svp);
1634 #endif /* USE_5005THREADS */
1635 if (PL_op->op_targ) {
1636 #ifndef USE_ITHREADS
1637 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1640 SAVEPADSV(PL_op->op_targ);
1641 iterdata = INT2PTR(void*, PL_op->op_targ);
1642 cxtype |= CXp_PADVAR;
1647 svp = &GvSV(gv); /* symbol table variable */
1648 SAVEGENERICSV(*svp);
1651 iterdata = (void*)gv;
1657 PUSHBLOCK(cx, cxtype, SP);
1659 PUSHLOOP(cx, iterdata, MARK);
1661 PUSHLOOP(cx, svp, MARK);
1663 if (PL_op->op_flags & OPf_STACKED) {
1664 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1665 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1667 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1668 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1669 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1670 looks_like_number((SV*)cx->blk_loop.iterary) &&
1671 *SvPVX(cx->blk_loop.iterary) != '0'))
1673 if (SvNV(sv) < IV_MIN ||
1674 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1675 DIE(aTHX_ "Range iterator outside integer range");
1676 cx->blk_loop.iterix = SvIV(sv);
1677 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1680 cx->blk_loop.iterlval = newSVsv(sv);
1684 cx->blk_loop.iterary = PL_curstack;
1685 AvFILLp(PL_curstack) = SP - PL_stack_base;
1686 cx->blk_loop.iterix = MARK - PL_stack_base;
1695 register PERL_CONTEXT *cx;
1696 I32 gimme = GIMME_V;
1702 PUSHBLOCK(cx, CXt_LOOP, SP);
1703 PUSHLOOP(cx, 0, SP);
1711 register PERL_CONTEXT *cx;
1719 newsp = PL_stack_base + cx->blk_loop.resetsp;
1722 if (gimme == G_VOID)
1724 else if (gimme == G_SCALAR) {
1726 *++newsp = sv_mortalcopy(*SP);
1728 *++newsp = &PL_sv_undef;
1732 *++newsp = sv_mortalcopy(*++mark);
1733 TAINT_NOT; /* Each item is independent */
1739 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1740 PL_curpm = newpm; /* ... and pop $1 et al */
1752 register PERL_CONTEXT *cx;
1753 bool popsub2 = FALSE;
1754 bool clear_errsv = FALSE;
1761 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1762 if (cxstack_ix == PL_sortcxix
1763 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1765 if (cxstack_ix > PL_sortcxix)
1766 dounwind(PL_sortcxix);
1767 AvARRAY(PL_curstack)[1] = *SP;
1768 PL_stack_sp = PL_stack_base + 1;
1773 cxix = dopoptosub(cxstack_ix);
1775 DIE(aTHX_ "Can't return outside a subroutine");
1776 if (cxix < cxstack_ix)
1780 switch (CxTYPE(cx)) {
1785 if (!(PL_in_eval & EVAL_KEEPERR))
1791 if (optype == OP_REQUIRE &&
1792 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1794 /* Unassume the success we assumed earlier. */
1795 SV *nsv = cx->blk_eval.old_namesv;
1796 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1797 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1804 DIE(aTHX_ "panic: return");
1808 if (gimme == G_SCALAR) {
1811 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1813 *++newsp = SvREFCNT_inc(*SP);
1818 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1820 *++newsp = sv_mortalcopy(sv);
1825 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1828 *++newsp = sv_mortalcopy(*SP);
1831 *++newsp = &PL_sv_undef;
1833 else if (gimme == G_ARRAY) {
1834 while (++MARK <= SP) {
1835 *++newsp = (popsub2 && SvTEMP(*MARK))
1836 ? *MARK : sv_mortalcopy(*MARK);
1837 TAINT_NOT; /* Each item is independent */
1840 PL_stack_sp = newsp;
1842 /* Stack values are safe: */
1844 POPSUB(cx,sv); /* release CV and @_ ... */
1848 PL_curpm = newpm; /* ... and pop $1 et al */
1854 return pop_return();
1861 register PERL_CONTEXT *cx;
1871 if (PL_op->op_flags & OPf_SPECIAL) {
1872 cxix = dopoptoloop(cxstack_ix);
1874 DIE(aTHX_ "Can't \"last\" outside a loop block");
1877 cxix = dopoptolabel(cPVOP->op_pv);
1879 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1881 if (cxix < cxstack_ix)
1886 switch (CxTYPE(cx)) {
1889 newsp = PL_stack_base + cx->blk_loop.resetsp;
1890 nextop = cx->blk_loop.last_op->op_next;
1894 nextop = pop_return();
1898 nextop = pop_return();
1902 nextop = pop_return();
1905 DIE(aTHX_ "panic: last");
1909 if (gimme == G_SCALAR) {
1911 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1912 ? *SP : sv_mortalcopy(*SP);
1914 *++newsp = &PL_sv_undef;
1916 else if (gimme == G_ARRAY) {
1917 while (++MARK <= SP) {
1918 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1919 ? *MARK : sv_mortalcopy(*MARK);
1920 TAINT_NOT; /* Each item is independent */
1926 /* Stack values are safe: */
1929 POPLOOP(cx); /* release loop vars ... */
1933 POPSUB(cx,sv); /* release CV and @_ ... */
1936 PL_curpm = newpm; /* ... and pop $1 et al */
1946 register PERL_CONTEXT *cx;
1949 if (PL_op->op_flags & OPf_SPECIAL) {
1950 cxix = dopoptoloop(cxstack_ix);
1952 DIE(aTHX_ "Can't \"next\" outside a loop block");
1955 cxix = dopoptolabel(cPVOP->op_pv);
1957 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1959 if (cxix < cxstack_ix)
1962 /* clear off anything above the scope we're re-entering, but
1963 * save the rest until after a possible continue block */
1964 inner = PL_scopestack_ix;
1966 if (PL_scopestack_ix < inner)
1967 leave_scope(PL_scopestack[PL_scopestack_ix]);
1968 return cx->blk_loop.next_op;
1974 register PERL_CONTEXT *cx;
1977 if (PL_op->op_flags & OPf_SPECIAL) {
1978 cxix = dopoptoloop(cxstack_ix);
1980 DIE(aTHX_ "Can't \"redo\" outside a loop block");
1983 cxix = dopoptolabel(cPVOP->op_pv);
1985 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1987 if (cxix < cxstack_ix)
1991 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1992 LEAVE_SCOPE(oldsave);
1993 return cx->blk_loop.redo_op;
1997 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2001 static char too_deep[] = "Target of goto is too deeply nested";
2004 Perl_croak(aTHX_ too_deep);
2005 if (o->op_type == OP_LEAVE ||
2006 o->op_type == OP_SCOPE ||
2007 o->op_type == OP_LEAVELOOP ||
2008 o->op_type == OP_LEAVETRY)
2010 *ops++ = cUNOPo->op_first;
2012 Perl_croak(aTHX_ too_deep);
2015 if (o->op_flags & OPf_KIDS) {
2016 /* First try all the kids at this level, since that's likeliest. */
2017 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2018 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2019 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2022 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2023 if (kid == PL_lastgotoprobe)
2025 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2027 (ops[-1]->op_type != OP_NEXTSTATE &&
2028 ops[-1]->op_type != OP_DBSTATE)))
2030 if ((o = dofindlabel(kid, label, ops, oplimit)))
2049 register PERL_CONTEXT *cx;
2050 #define GOTO_DEPTH 64
2051 OP *enterops[GOTO_DEPTH];
2053 int do_dump = (PL_op->op_type == OP_DUMP);
2054 static char must_have_label[] = "goto must have label";
2057 if (PL_op->op_flags & OPf_STACKED) {
2061 /* This egregious kludge implements goto &subroutine */
2062 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2064 register PERL_CONTEXT *cx;
2065 CV* cv = (CV*)SvRV(sv);
2071 if (!CvROOT(cv) && !CvXSUB(cv)) {
2076 /* autoloaded stub? */
2077 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2079 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2080 GvNAMELEN(gv), FALSE);
2081 if (autogv && (cv = GvCV(autogv)))
2083 tmpstr = sv_newmortal();
2084 gv_efullname3(tmpstr, gv, Nullch);
2085 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2087 DIE(aTHX_ "Goto undefined subroutine");
2090 /* First do some returnish stuff. */
2091 cxix = dopoptosub(cxstack_ix);
2093 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2094 if (cxix < cxstack_ix)
2098 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2100 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2101 /* put @_ back onto stack */
2102 AV* av = cx->blk_sub.argarray;
2104 items = AvFILLp(av) + 1;
2106 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2107 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2108 PL_stack_sp += items;
2109 #ifndef USE_5005THREADS
2110 SvREFCNT_dec(GvAV(PL_defgv));
2111 GvAV(PL_defgv) = cx->blk_sub.savearray;
2112 #endif /* USE_5005THREADS */
2113 /* abandon @_ if it got reified */
2115 (void)sv_2mortal((SV*)av); /* delay until return */
2117 av_extend(av, items-1);
2118 AvFLAGS(av) = AVf_REIFY;
2119 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2122 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2124 #ifdef USE_5005THREADS
2125 av = (AV*)PL_curpad[0];
2127 av = GvAV(PL_defgv);
2129 items = AvFILLp(av) + 1;
2131 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2132 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2133 PL_stack_sp += items;
2135 if (CxTYPE(cx) == CXt_SUB &&
2136 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2137 SvREFCNT_dec(cx->blk_sub.cv);
2138 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2139 LEAVE_SCOPE(oldsave);
2141 /* Now do some callish stuff. */
2144 #ifdef PERL_XSUB_OLDSTYLE
2145 if (CvOLDSTYLE(cv)) {
2146 I32 (*fp3)(int,int,int);
2151 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2152 items = (*fp3)(CvXSUBANY(cv).any_i32,
2153 mark - PL_stack_base + 1,
2155 SP = PL_stack_base + items;
2158 #endif /* PERL_XSUB_OLDSTYLE */
2163 PL_stack_sp--; /* There is no cv arg. */
2164 /* Push a mark for the start of arglist */
2166 (void)(*CvXSUB(cv))(aTHX_ cv);
2167 /* Pop the current context like a decent sub should */
2168 POPBLOCK(cx, PL_curpm);
2169 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2172 return pop_return();
2175 AV* padlist = CvPADLIST(cv);
2176 SV** svp = AvARRAY(padlist);
2177 if (CxTYPE(cx) == CXt_EVAL) {
2178 PL_in_eval = cx->blk_eval.old_in_eval;
2179 PL_eval_root = cx->blk_eval.old_eval_root;
2180 cx->cx_type = CXt_SUB;
2181 cx->blk_sub.hasargs = 0;
2183 cx->blk_sub.cv = cv;
2184 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2186 if (CvDEPTH(cv) < 2)
2187 (void)SvREFCNT_inc(cv);
2188 else { /* save temporaries on recursion? */
2189 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2190 sub_crush_depth(cv);
2191 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2192 AV *newpad = newAV();
2193 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2194 I32 ix = AvFILLp((AV*)svp[1]);
2195 I32 names_fill = AvFILLp((AV*)svp[0]);
2196 svp = AvARRAY(svp[0]);
2197 for ( ;ix > 0; ix--) {
2198 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2199 char *name = SvPVX(svp[ix]);
2200 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2203 /* outer lexical or anon code */
2204 av_store(newpad, ix,
2205 SvREFCNT_inc(oldpad[ix]) );
2207 else { /* our own lexical */
2209 av_store(newpad, ix, sv = (SV*)newAV());
2210 else if (*name == '%')
2211 av_store(newpad, ix, sv = (SV*)newHV());
2213 av_store(newpad, ix, sv = NEWSV(0,0));
2217 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2218 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2221 av_store(newpad, ix, sv = NEWSV(0,0));
2225 if (cx->blk_sub.hasargs) {
2228 av_store(newpad, 0, (SV*)av);
2229 AvFLAGS(av) = AVf_REIFY;
2231 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2232 AvFILLp(padlist) = CvDEPTH(cv);
2233 svp = AvARRAY(padlist);
2236 #ifdef USE_5005THREADS
2237 if (!cx->blk_sub.hasargs) {
2238 AV* av = (AV*)PL_curpad[0];
2240 items = AvFILLp(av) + 1;
2242 /* Mark is at the end of the stack. */
2244 Copy(AvARRAY(av), SP + 1, items, SV*);
2249 #endif /* USE_5005THREADS */
2250 SAVEVPTR(PL_curpad);
2251 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2252 #ifndef USE_5005THREADS
2253 if (cx->blk_sub.hasargs)
2254 #endif /* USE_5005THREADS */
2256 AV* av = (AV*)PL_curpad[0];
2259 #ifndef USE_5005THREADS
2260 cx->blk_sub.savearray = GvAV(PL_defgv);
2261 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2262 #endif /* USE_5005THREADS */
2263 cx->blk_sub.oldcurpad = PL_curpad;
2264 cx->blk_sub.argarray = av;
2267 if (items >= AvMAX(av) + 1) {
2269 if (AvARRAY(av) != ary) {
2270 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2271 SvPVX(av) = (char*)ary;
2273 if (items >= AvMAX(av) + 1) {
2274 AvMAX(av) = items - 1;
2275 Renew(ary,items+1,SV*);
2277 SvPVX(av) = (char*)ary;
2280 Copy(mark,AvARRAY(av),items,SV*);
2281 AvFILLp(av) = items - 1;
2282 assert(!AvREAL(av));
2289 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2291 * We do not care about using sv to call CV;
2292 * it's for informational purposes only.
2294 SV *sv = GvSV(PL_DBsub);
2297 if (PERLDB_SUB_NN) {
2298 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2301 gv_efullname3(sv, CvGV(cv), Nullch);
2304 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2305 PUSHMARK( PL_stack_sp );
2306 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2310 RETURNOP(CvSTART(cv));
2314 label = SvPV(sv,n_a);
2315 if (!(do_dump || *label))
2316 DIE(aTHX_ must_have_label);
2319 else if (PL_op->op_flags & OPf_SPECIAL) {
2321 DIE(aTHX_ must_have_label);
2324 label = cPVOP->op_pv;
2326 if (label && *label) {
2328 bool leaving_eval = FALSE;
2329 PERL_CONTEXT *last_eval_cx = 0;
2333 PL_lastgotoprobe = 0;
2335 for (ix = cxstack_ix; ix >= 0; ix--) {
2337 switch (CxTYPE(cx)) {
2339 leaving_eval = TRUE;
2340 if (CxREALEVAL(cx)) {
2341 gotoprobe = (last_eval_cx ?
2342 last_eval_cx->blk_eval.old_eval_root :
2347 /* else fall through */
2349 gotoprobe = cx->blk_oldcop->op_sibling;
2355 gotoprobe = cx->blk_oldcop->op_sibling;
2357 gotoprobe = PL_main_root;
2360 if (CvDEPTH(cx->blk_sub.cv)) {
2361 gotoprobe = CvROOT(cx->blk_sub.cv);
2367 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2370 DIE(aTHX_ "panic: goto");
2371 gotoprobe = PL_main_root;
2375 retop = dofindlabel(gotoprobe, label,
2376 enterops, enterops + GOTO_DEPTH);
2380 PL_lastgotoprobe = gotoprobe;
2383 DIE(aTHX_ "Can't find label %s", label);
2385 /* if we're leaving an eval, check before we pop any frames
2386 that we're not going to punt, otherwise the error
2389 if (leaving_eval && *enterops && enterops[1]) {
2391 for (i = 1; enterops[i]; i++)
2392 if (enterops[i]->op_type == OP_ENTERITER)
2393 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2396 /* pop unwanted frames */
2398 if (ix < cxstack_ix) {
2405 oldsave = PL_scopestack[PL_scopestack_ix];
2406 LEAVE_SCOPE(oldsave);
2409 /* push wanted frames */
2411 if (*enterops && enterops[1]) {
2413 for (ix = 1; enterops[ix]; ix++) {
2414 PL_op = enterops[ix];
2415 /* Eventually we may want to stack the needed arguments
2416 * for each op. For now, we punt on the hard ones. */
2417 if (PL_op->op_type == OP_ENTERITER)
2418 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2419 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2427 if (!retop) retop = PL_main_start;
2429 PL_restartop = retop;
2430 PL_do_undump = TRUE;
2434 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2435 PL_do_undump = FALSE;
2451 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2453 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2456 PL_exit_flags |= PERL_EXIT_EXPECTED;
2458 PUSHs(&PL_sv_undef);
2466 NV value = SvNVx(GvSV(cCOP->cop_gv));
2467 register I32 match = I_32(value);
2470 if (((NV)match) > value)
2471 --match; /* was fractional--truncate other way */
2473 match -= cCOP->uop.scop.scop_offset;
2476 else if (match > cCOP->uop.scop.scop_max)
2477 match = cCOP->uop.scop.scop_max;
2478 PL_op = cCOP->uop.scop.scop_next[match];
2488 PL_op = PL_op->op_next; /* can't assume anything */
2491 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2492 match -= cCOP->uop.scop.scop_offset;
2495 else if (match > cCOP->uop.scop.scop_max)
2496 match = cCOP->uop.scop.scop_max;
2497 PL_op = cCOP->uop.scop.scop_next[match];
2506 S_save_lines(pTHX_ AV *array, SV *sv)
2508 register char *s = SvPVX(sv);
2509 register char *send = SvPVX(sv) + SvCUR(sv);
2511 register I32 line = 1;
2513 while (s && s < send) {
2514 SV *tmpstr = NEWSV(85,0);
2516 sv_upgrade(tmpstr, SVt_PVMG);
2517 t = strchr(s, '\n');
2523 sv_setpvn(tmpstr, s, t - s);
2524 av_store(array, line++, tmpstr);
2529 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2531 S_docatch_body(pTHX_ va_list args)
2533 return docatch_body();
2538 S_docatch_body(pTHX)
2545 S_docatch(pTHX_ OP *o)
2550 volatile PERL_SI *cursi = PL_curstackinfo;
2554 assert(CATCH_GET == TRUE);
2558 /* Normally, the leavetry at the end of this block of ops will
2559 * pop an op off the return stack and continue there. By setting
2560 * the op to Nullop, we force an exit from the inner runops()
2563 retop = pop_return();
2564 push_return(Nullop);
2566 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2568 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2574 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2580 /* die caught by an inner eval - continue inner loop */
2581 if (PL_restartop && cursi == PL_curstackinfo) {
2582 PL_op = PL_restartop;
2586 /* a die in this eval - continue in outer loop */
2602 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2603 /* sv Text to convert to OP tree. */
2604 /* startop op_free() this to undo. */
2605 /* code Short string id of the caller. */
2607 dSP; /* Make POPBLOCK work. */
2610 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2614 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2615 char *tmpbuf = tbuf;
2621 /* switch to eval mode */
2623 if (PL_curcop == &PL_compiling) {
2624 SAVECOPSTASH_FREE(&PL_compiling);
2625 CopSTASH_set(&PL_compiling, PL_curstash);
2627 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2628 SV *sv = sv_newmortal();
2629 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2630 code, (unsigned long)++PL_evalseq,
2631 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2635 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2636 SAVECOPFILE_FREE(&PL_compiling);
2637 CopFILE_set(&PL_compiling, tmpbuf+2);
2638 SAVECOPLINE(&PL_compiling);
2639 CopLINE_set(&PL_compiling, 1);
2640 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2641 deleting the eval's FILEGV from the stash before gv_check() runs
2642 (i.e. before run-time proper). To work around the coredump that
2643 ensues, we always turn GvMULTI_on for any globals that were
2644 introduced within evals. See force_ident(). GSAR 96-10-12 */
2645 safestr = savepv(tmpbuf);
2646 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2648 #ifdef OP_IN_REGISTER
2653 PL_hints &= HINT_UTF8;
2656 PL_op->op_type = OP_ENTEREVAL;
2657 PL_op->op_flags = 0; /* Avoid uninit warning. */
2658 PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2659 PUSHEVAL(cx, 0, Nullgv);
2660 rop = doeval(G_SCALAR, startop);
2661 POPBLOCK(cx,PL_curpm);
2664 (*startop)->op_type = OP_NULL;
2665 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2667 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2669 if (PL_curcop == &PL_compiling)
2670 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2671 #ifdef OP_IN_REGISTER
2677 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2679 S_doeval(pTHX_ int gimme, OP** startop)
2687 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2688 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2693 /* set up a scratch pad */
2696 SAVEVPTR(PL_curpad);
2697 SAVESPTR(PL_comppad);
2698 SAVESPTR(PL_comppad_name);
2699 SAVEI32(PL_comppad_name_fill);
2700 SAVEI32(PL_min_intro_pending);
2701 SAVEI32(PL_max_intro_pending);
2704 for (i = cxstack_ix - 1; i >= 0; i--) {
2705 PERL_CONTEXT *cx = &cxstack[i];
2706 if (CxTYPE(cx) == CXt_EVAL)
2708 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2709 caller = cx->blk_sub.cv;
2714 SAVESPTR(PL_compcv);
2715 PL_compcv = (CV*)NEWSV(1104,0);
2716 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2717 CvEVAL_on(PL_compcv);
2718 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2719 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2721 #ifdef USE_5005THREADS
2722 CvOWNER(PL_compcv) = 0;
2723 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2724 MUTEX_INIT(CvMUTEXP(PL_compcv));
2725 #endif /* USE_5005THREADS */
2727 PL_comppad = newAV();
2728 av_push(PL_comppad, Nullsv);
2729 PL_curpad = AvARRAY(PL_comppad);
2730 PL_comppad_name = newAV();
2731 PL_comppad_name_fill = 0;
2732 PL_min_intro_pending = 0;
2734 #ifdef USE_5005THREADS
2735 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2736 PL_curpad[0] = (SV*)newAV();
2737 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2738 #endif /* USE_5005THREADS */
2740 comppadlist = newAV();
2741 AvREAL_off(comppadlist);
2742 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2743 av_store(comppadlist, 1, (SV*)PL_comppad);
2744 CvPADLIST(PL_compcv) = comppadlist;
2747 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2749 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2752 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2754 /* make sure we compile in the right package */
2756 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2757 SAVESPTR(PL_curstash);
2758 PL_curstash = CopSTASH(PL_curcop);
2760 SAVESPTR(PL_beginav);
2761 PL_beginav = newAV();
2762 SAVEFREESV(PL_beginav);
2763 SAVEI32(PL_error_count);
2765 /* try to compile it */
2767 PL_eval_root = Nullop;
2769 PL_curcop = &PL_compiling;
2770 PL_curcop->cop_arybase = 0;
2771 if (saveop && saveop->op_flags & OPf_SPECIAL)
2772 PL_in_eval |= EVAL_KEEPERR;
2775 if (yyparse() || PL_error_count || !PL_eval_root) {
2779 I32 optype = 0; /* Might be reset by POPEVAL. */
2784 op_free(PL_eval_root);
2785 PL_eval_root = Nullop;
2787 SP = PL_stack_base + POPMARK; /* pop original mark */
2789 POPBLOCK(cx,PL_curpm);
2795 if (optype == OP_REQUIRE) {
2796 char* msg = SvPVx(ERRSV, n_a);
2797 DIE(aTHX_ "%sCompilation failed in require",
2798 *msg ? msg : "Unknown error\n");
2801 char* msg = SvPVx(ERRSV, n_a);
2803 POPBLOCK(cx,PL_curpm);
2805 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2806 (*msg ? msg : "Unknown error\n"));
2808 #ifdef USE_5005THREADS
2809 MUTEX_LOCK(&PL_eval_mutex);
2811 COND_SIGNAL(&PL_eval_cond);
2812 MUTEX_UNLOCK(&PL_eval_mutex);
2813 #endif /* USE_5005THREADS */
2816 CopLINE_set(&PL_compiling, 0);
2818 *startop = PL_eval_root;
2819 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2820 CvOUTSIDE(PL_compcv) = Nullcv;
2822 SAVEFREEOP(PL_eval_root);
2824 scalarvoid(PL_eval_root);
2825 else if (gimme & G_ARRAY)
2828 scalar(PL_eval_root);
2830 DEBUG_x(dump_eval());
2832 /* Register with debugger: */
2833 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2834 CV *cv = get_cv("DB::postponed", FALSE);
2838 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2840 call_sv((SV*)cv, G_DISCARD);
2844 /* compiled okay, so do it */
2846 CvDEPTH(PL_compcv) = 1;
2847 SP = PL_stack_base + POPMARK; /* pop original mark */
2848 PL_op = saveop; /* The caller may need it. */
2849 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2850 #ifdef USE_5005THREADS
2851 MUTEX_LOCK(&PL_eval_mutex);
2853 COND_SIGNAL(&PL_eval_cond);
2854 MUTEX_UNLOCK(&PL_eval_mutex);
2855 #endif /* USE_5005THREADS */
2857 RETURNOP(PL_eval_start);
2861 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2863 STRLEN namelen = strlen(name);
2866 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2867 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2868 char *pmc = SvPV_nolen(pmcsv);
2871 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2872 fp = PerlIO_open(name, mode);
2875 if (PerlLIO_stat(name, &pmstat) < 0 ||
2876 pmstat.st_mtime < pmcstat.st_mtime)
2878 fp = PerlIO_open(pmc, mode);
2881 fp = PerlIO_open(name, mode);
2884 SvREFCNT_dec(pmcsv);
2887 fp = PerlIO_open(name, mode);
2895 register PERL_CONTEXT *cx;
2899 char *tryname = Nullch;
2900 SV *namesv = Nullsv;
2902 I32 gimme = GIMME_V;
2903 PerlIO *tryrsfp = 0;
2905 int filter_has_file = 0;
2906 GV *filter_child_proc = 0;
2907 SV *filter_state = 0;
2914 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
2915 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
2916 UV rev = 0, ver = 0, sver = 0;
2918 U8 *s = (U8*)SvPVX(sv);
2919 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2921 rev = utf8n_to_uvchr(s, end - s, &len, 0);
2924 ver = utf8n_to_uvchr(s, end - s, &len, 0);
2927 sver = utf8n_to_uvchr(s, end - s, &len, 0);
2930 if (PERL_REVISION < rev
2931 || (PERL_REVISION == rev
2932 && (PERL_VERSION < ver
2933 || (PERL_VERSION == ver
2934 && PERL_SUBVERSION < sver))))
2936 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2937 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2938 PERL_VERSION, PERL_SUBVERSION);
2940 if (ckWARN(WARN_PORTABLE))
2941 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
2942 "v-string in use/require non-portable");
2945 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2946 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2947 + ((NV)PERL_SUBVERSION/(NV)1000000)
2948 + 0.00000099 < SvNV(sv))
2952 NV nver = (nrev - rev) * 1000;
2953 UV ver = (UV)(nver + 0.0009);
2954 NV nsver = (nver - ver) * 1000;
2955 UV sver = (UV)(nsver + 0.0009);
2957 /* help out with the "use 5.6" confusion */
2958 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2959 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
2960 " (did you mean v%"UVuf".%03"UVuf"?)--"
2961 "this is only v%d.%d.%d, stopped",
2962 rev, ver, sver, rev, ver/100,
2963 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
2966 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2967 "this is only v%d.%d.%d, stopped",
2968 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2975 name = SvPV(sv, len);
2976 if (!(name && len > 0 && *name))
2977 DIE(aTHX_ "Null filename used");
2978 TAINT_PROPER("require");
2979 if (PL_op->op_type == OP_REQUIRE &&
2980 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2981 *svp != &PL_sv_undef)
2984 /* prepare to compile file */
2986 if (path_is_absolute(name)) {
2988 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2990 #ifdef MACOS_TRADITIONAL
2994 MacPerl_CanonDir(name, newname, 1);
2995 if (path_is_absolute(newname)) {
2997 tryrsfp = doopen_pmc(newname,PERL_SCRIPT_MODE);
3002 AV *ar = GvAVn(PL_incgv);
3006 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3009 namesv = NEWSV(806, 0);
3010 for (i = 0; i <= AvFILL(ar); i++) {
3011 SV *dirsv = *av_fetch(ar, i, TRUE);
3017 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3018 && !sv_isobject(loader))
3020 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3023 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3024 PTR2UV(SvRV(dirsv)), name);
3025 tryname = SvPVX(namesv);
3036 if (sv_isobject(loader))
3037 count = call_method("INC", G_ARRAY);
3039 count = call_sv(loader, G_ARRAY);
3049 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3053 if (SvTYPE(arg) == SVt_PVGV) {
3054 IO *io = GvIO((GV *)arg);
3059 tryrsfp = IoIFP(io);
3060 if (IoTYPE(io) == IoTYPE_PIPE) {
3061 /* reading from a child process doesn't
3062 nest -- when returning from reading
3063 the inner module, the outer one is
3064 unreadable (closed?) I've tried to
3065 save the gv to manage the lifespan of
3066 the pipe, but this didn't help. XXX */
3067 filter_child_proc = (GV *)arg;
3068 (void)SvREFCNT_inc(filter_child_proc);
3071 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3072 PerlIO_close(IoOFP(io));
3084 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3086 (void)SvREFCNT_inc(filter_sub);
3089 filter_state = SP[i];
3090 (void)SvREFCNT_inc(filter_state);
3094 tryrsfp = PerlIO_open("/dev/null",
3109 filter_has_file = 0;
3110 if (filter_child_proc) {
3111 SvREFCNT_dec(filter_child_proc);
3112 filter_child_proc = 0;
3115 SvREFCNT_dec(filter_state);
3119 SvREFCNT_dec(filter_sub);
3124 if (!path_is_absolute(name)
3125 #ifdef MACOS_TRADITIONAL
3126 /* We consider paths of the form :a:b ambiguous and interpret them first
3127 as global then as local
3129 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3132 char *dir = SvPVx(dirsv, n_a);
3133 #ifdef MACOS_TRADITIONAL
3137 MacPerl_CanonDir(name, buf2, 1);
3138 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3142 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3144 sv_setpv(namesv, unixdir);
3145 sv_catpv(namesv, unixname);
3147 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3150 TAINT_PROPER("require");
3151 tryname = SvPVX(namesv);
3152 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3154 if (tryname[0] == '.' && tryname[1] == '/')
3163 SAVECOPFILE_FREE(&PL_compiling);
3164 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3165 SvREFCNT_dec(namesv);
3167 if (PL_op->op_type == OP_REQUIRE) {
3168 char *msgstr = name;
3169 if (namesv) { /* did we lookup @INC? */
3170 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3171 SV *dirmsgsv = NEWSV(0, 0);
3172 AV *ar = GvAVn(PL_incgv);
3174 sv_catpvn(msg, " in @INC", 8);
3175 if (instr(SvPVX(msg), ".h "))
3176 sv_catpv(msg, " (change .h to .ph maybe?)");
3177 if (instr(SvPVX(msg), ".ph "))
3178 sv_catpv(msg, " (did you run h2ph?)");
3179 sv_catpv(msg, " (@INC contains:");
3180 for (i = 0; i <= AvFILL(ar); i++) {
3181 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3182 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3183 sv_catsv(msg, dirmsgsv);
3185 sv_catpvn(msg, ")", 1);
3186 SvREFCNT_dec(dirmsgsv);
3187 msgstr = SvPV_nolen(msg);
3189 DIE(aTHX_ "Can't locate %s", msgstr);
3195 SETERRNO(0, SS_NORMAL);
3197 /* Assume success here to prevent recursive requirement. */
3199 /* Check whether a hook in @INC has already filled %INC */
3200 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3201 (void)hv_store(GvHVn(PL_incgv), name, len,
3202 (hook_sv ? SvREFCNT_inc(hook_sv)
3203 : newSVpv(CopFILE(&PL_compiling), 0)),
3209 lex_start(sv_2mortal(newSVpvn("",0)));
3210 SAVEGENERICSV(PL_rsfp_filters);
3211 PL_rsfp_filters = Nullav;
3216 SAVESPTR(PL_compiling.cop_warnings);
3217 if (PL_dowarn & G_WARN_ALL_ON)
3218 PL_compiling.cop_warnings = pWARN_ALL ;
3219 else if (PL_dowarn & G_WARN_ALL_OFF)
3220 PL_compiling.cop_warnings = pWARN_NONE ;
3221 else if (PL_taint_warn)
3222 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3224 PL_compiling.cop_warnings = pWARN_STD ;
3225 SAVESPTR(PL_compiling.cop_io);
3226 PL_compiling.cop_io = Nullsv;
3228 if (filter_sub || filter_child_proc) {
3229 SV *datasv = filter_add(run_user_filter, Nullsv);
3230 IoLINES(datasv) = filter_has_file;
3231 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3232 IoTOP_GV(datasv) = (GV *)filter_state;
3233 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3236 /* switch to eval mode */
3237 push_return(PL_op->op_next);
3238 PUSHBLOCK(cx, CXt_EVAL, SP);
3239 PUSHEVAL(cx, name, Nullgv);
3241 SAVECOPLINE(&PL_compiling);
3242 CopLINE_set(&PL_compiling, 0);
3245 #ifdef USE_5005THREADS
3246 MUTEX_LOCK(&PL_eval_mutex);
3247 if (PL_eval_owner && PL_eval_owner != thr)
3248 while (PL_eval_owner)
3249 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3250 PL_eval_owner = thr;
3251 MUTEX_UNLOCK(&PL_eval_mutex);
3252 #endif /* USE_5005THREADS */
3254 /* Store and reset encoding. */
3255 encoding = PL_encoding;
3256 PL_encoding = Nullsv;
3258 op = DOCATCH(doeval(gimme, NULL));
3260 /* Restore encoding. */
3261 PL_encoding = encoding;
3268 return pp_require();
3274 register PERL_CONTEXT *cx;
3276 I32 gimme = GIMME_V, was = PL_sub_generation;
3277 char tbuf[TYPE_DIGITS(long) + 12];
3278 char *tmpbuf = tbuf;
3285 TAINT_PROPER("eval");
3291 /* switch to eval mode */
3293 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3294 SV *sv = sv_newmortal();
3295 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3296 (unsigned long)++PL_evalseq,
3297 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3301 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3302 SAVECOPFILE_FREE(&PL_compiling);
3303 CopFILE_set(&PL_compiling, tmpbuf+2);
3304 SAVECOPLINE(&PL_compiling);
3305 CopLINE_set(&PL_compiling, 1);
3306 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3307 deleting the eval's FILEGV from the stash before gv_check() runs
3308 (i.e. before run-time proper). To work around the coredump that
3309 ensues, we always turn GvMULTI_on for any globals that were
3310 introduced within evals. See force_ident(). GSAR 96-10-12 */
3311 safestr = savepv(tmpbuf);
3312 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3314 PL_hints = PL_op->op_targ;
3315 SAVESPTR(PL_compiling.cop_warnings);
3316 if (specialWARN(PL_curcop->cop_warnings))
3317 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3319 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3320 SAVEFREESV(PL_compiling.cop_warnings);
3322 SAVESPTR(PL_compiling.cop_io);
3323 if (specialCopIO(PL_curcop->cop_io))
3324 PL_compiling.cop_io = PL_curcop->cop_io;
3326 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3327 SAVEFREESV(PL_compiling.cop_io);
3330 push_return(PL_op->op_next);
3331 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3332 PUSHEVAL(cx, 0, Nullgv);
3334 /* prepare to compile string */
3336 if (PERLDB_LINE && PL_curstash != PL_debstash)
3337 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3339 #ifdef USE_5005THREADS
3340 MUTEX_LOCK(&PL_eval_mutex);
3341 if (PL_eval_owner && PL_eval_owner != thr)
3342 while (PL_eval_owner)
3343 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3344 PL_eval_owner = thr;
3345 MUTEX_UNLOCK(&PL_eval_mutex);
3346 #endif /* USE_5005THREADS */
3347 ret = doeval(gimme, NULL);
3348 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3349 && ret != PL_op->op_next) { /* Successive compilation. */
3350 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3352 return DOCATCH(ret);
3362 register PERL_CONTEXT *cx;
3364 U8 save_flags = PL_op -> op_flags;
3369 retop = pop_return();
3372 if (gimme == G_VOID)
3374 else if (gimme == G_SCALAR) {
3377 if (SvFLAGS(TOPs) & SVs_TEMP)
3380 *MARK = sv_mortalcopy(TOPs);
3384 *MARK = &PL_sv_undef;
3389 /* in case LEAVE wipes old return values */
3390 for (mark = newsp + 1; mark <= SP; mark++) {
3391 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3392 *mark = sv_mortalcopy(*mark);
3393 TAINT_NOT; /* Each item is independent */
3397 PL_curpm = newpm; /* Don't pop $1 et al till now */
3400 assert(CvDEPTH(PL_compcv) == 1);
3402 CvDEPTH(PL_compcv) = 0;
3405 if (optype == OP_REQUIRE &&
3406 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3408 /* Unassume the success we assumed earlier. */
3409 SV *nsv = cx->blk_eval.old_namesv;
3410 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3411 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3412 /* die_where() did LEAVE, or we won't be here */
3416 if (!(save_flags & OPf_SPECIAL))
3426 register PERL_CONTEXT *cx;
3427 I32 gimme = GIMME_V;
3432 push_return(cLOGOP->op_other->op_next);
3433 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3436 PL_in_eval = EVAL_INEVAL;
3439 return DOCATCH(PL_op->op_next);
3450 register PERL_CONTEXT *cx;
3455 retop = pop_return();
3458 if (gimme == G_VOID)
3460 else if (gimme == G_SCALAR) {
3463 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3466 *MARK = sv_mortalcopy(TOPs);
3470 *MARK = &PL_sv_undef;
3475 /* in case LEAVE wipes old return values */
3476 for (mark = newsp + 1; mark <= SP; mark++) {
3477 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3478 *mark = sv_mortalcopy(*mark);
3479 TAINT_NOT; /* Each item is independent */
3483 PL_curpm = newpm; /* Don't pop $1 et al till now */
3491 S_doparseform(pTHX_ SV *sv)
3494 register char *s = SvPV_force(sv, len);
3495 register char *send = s + len;
3496 register char *base = Nullch;
3497 register I32 skipspaces = 0;
3498 bool noblank = FALSE;
3499 bool repeat = FALSE;
3500 bool postspace = FALSE;
3508 Perl_croak(aTHX_ "Null picture in formline");
3510 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3515 *fpc++ = FF_LINEMARK;
3516 noblank = repeat = FALSE;
3534 case ' ': case '\t':
3545 *fpc++ = FF_LITERAL;
3553 *fpc++ = (U16)skipspaces;
3557 *fpc++ = FF_NEWLINE;
3561 arg = fpc - linepc + 1;
3568 *fpc++ = FF_LINEMARK;
3569 noblank = repeat = FALSE;
3578 ischop = s[-1] == '^';
3584 arg = (s - base) - 1;
3586 *fpc++ = FF_LITERAL;
3595 *fpc++ = FF_LINEGLOB;
3597 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3598 arg = ischop ? 512 : 0;
3608 arg |= 256 + (s - f);
3610 *fpc++ = s - base; /* fieldsize for FETCH */
3611 *fpc++ = FF_DECIMAL;
3614 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3615 arg = ischop ? 512 : 0;
3617 s++; /* skip the '0' first */
3626 arg |= 256 + (s - f);
3628 *fpc++ = s - base; /* fieldsize for FETCH */
3629 *fpc++ = FF_0DECIMAL;
3634 bool ismore = FALSE;
3637 while (*++s == '>') ;
3638 prespace = FF_SPACE;
3640 else if (*s == '|') {
3641 while (*++s == '|') ;
3642 prespace = FF_HALFSPACE;
3647 while (*++s == '<') ;
3650 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3654 *fpc++ = s - base; /* fieldsize for FETCH */
3656 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3659 *fpc++ = (U16)prespace;
3674 { /* need to jump to the next word */
3676 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3677 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3678 s = SvPVX(sv) + SvCUR(sv) + z;
3680 Copy(fops, s, arg, U16);
3682 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3687 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3689 SV *datasv = FILTER_DATA(idx);
3690 int filter_has_file = IoLINES(datasv);
3691 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3692 SV *filter_state = (SV *)IoTOP_GV(datasv);
3693 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3696 /* I was having segfault trouble under Linux 2.2.5 after a
3697 parse error occured. (Had to hack around it with a test
3698 for PL_error_count == 0.) Solaris doesn't segfault --
3699 not sure where the trouble is yet. XXX */
3701 if (filter_has_file) {
3702 len = FILTER_READ(idx+1, buf_sv, maxlen);
3705 if (filter_sub && len >= 0) {
3716 PUSHs(sv_2mortal(newSViv(maxlen)));
3718 PUSHs(filter_state);
3721 count = call_sv(filter_sub, G_SCALAR);
3737 IoLINES(datasv) = 0;
3738 if (filter_child_proc) {
3739 SvREFCNT_dec(filter_child_proc);
3740 IoFMT_GV(datasv) = Nullgv;
3743 SvREFCNT_dec(filter_state);
3744 IoTOP_GV(datasv) = Nullgv;
3747 SvREFCNT_dec(filter_sub);
3748 IoBOTTOM_GV(datasv) = Nullgv;
3750 filter_del(run_user_filter);
3756 /* perhaps someone can come up with a better name for
3757 this? it is not really "absolute", per se ... */
3759 S_path_is_absolute(pTHX_ char *name)
3761 if (PERL_FILE_IS_ABSOLUTE(name)
3762 #ifdef MACOS_TRADITIONAL
3765 || (*name == '.' && (name[1] == '/' ||
3766 (name[1] == '.' && name[2] == '/'))))