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 RX_MATCH_UTF8_set(rx, SvUTF8(cx->sb_targ));
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);
186 Safefree(SvPVX(targ));
187 SvPVX(targ) = SvPVX(dstr);
188 SvCUR_set(targ, SvCUR(dstr));
189 SvLEN_set(targ, SvLEN(dstr));
195 TAINT_IF(cx->sb_rxtainted & 1);
196 PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
198 (void)SvPOK_only_UTF8(targ);
199 TAINT_IF(cx->sb_rxtainted);
203 LEAVE_SCOPE(cx->sb_oldsave);
205 RETURNOP(pm->op_next);
207 cx->sb_iters = saviters;
209 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
212 cx->sb_orig = orig = rx->subbeg;
214 cx->sb_strend = s + (cx->sb_strend - m);
216 cx->sb_m = m = rx->startp[0] + orig;
218 sv_catpvn(dstr, s, m-s);
219 cx->sb_s = rx->endp[0] + orig;
220 { /* Update the pos() information. */
221 SV *sv = cx->sb_targ;
224 if (SvTYPE(sv) < SVt_PVMG)
225 (void)SvUPGRADE(sv, SVt_PVMG);
226 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
227 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
228 mg = mg_find(sv, PERL_MAGIC_regex_global);
235 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
236 rxres_save(&cx->sb_rxres, rx);
237 RETURNOP(pm->op_pmreplstart);
241 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
246 if (!p || p[1] < rx->nparens) {
247 i = 6 + rx->nparens * 2;
255 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
256 RX_MATCH_COPIED_off(rx);
260 *p++ = PTR2UV(rx->subbeg);
261 *p++ = (UV)rx->sublen;
262 for (i = 0; i <= rx->nparens; ++i) {
263 *p++ = (UV)rx->startp[i];
264 *p++ = (UV)rx->endp[i];
269 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
274 if (RX_MATCH_COPIED(rx))
275 Safefree(rx->subbeg);
276 RX_MATCH_COPIED_set(rx, *p);
281 rx->subbeg = INT2PTR(char*,*p++);
282 rx->sublen = (I32)(*p++);
283 for (i = 0; i <= rx->nparens; ++i) {
284 rx->startp[i] = (I32)(*p++);
285 rx->endp[i] = (I32)(*p++);
290 Perl_rxres_free(pTHX_ void **rsp)
295 Safefree(INT2PTR(char*,*p));
303 dSP; dMARK; dORIGMARK;
304 register SV *tmpForm = *++MARK;
311 register SV *sv = Nullsv;
316 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
317 char *chophere = Nullch;
318 char *linemark = Nullch;
320 bool gotsome = FALSE;
322 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1;
323 bool item_is_utf = FALSE;
325 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
326 if (SvREADONLY(tmpForm)) {
327 SvREADONLY_off(tmpForm);
328 doparseform(tmpForm);
329 SvREADONLY_on(tmpForm);
332 doparseform(tmpForm);
335 SvPV_force(PL_formtarget, len);
336 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
338 f = SvPV(tmpForm, len);
339 /* need to jump to the next word */
340 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
349 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
350 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
351 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
352 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
353 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
355 case FF_CHECKNL: name = "CHECKNL"; break;
356 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
357 case FF_SPACE: name = "SPACE"; break;
358 case FF_HALFSPACE: name = "HALFSPACE"; break;
359 case FF_ITEM: name = "ITEM"; break;
360 case FF_CHOP: name = "CHOP"; break;
361 case FF_LINEGLOB: name = "LINEGLOB"; break;
362 case FF_NEWLINE: name = "NEWLINE"; break;
363 case FF_MORE: name = "MORE"; break;
364 case FF_LINEMARK: name = "LINEMARK"; break;
365 case FF_END: name = "END"; break;
366 case FF_0DECIMAL: name = "0DECIMAL"; break;
369 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
371 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
399 if (ckWARN(WARN_SYNTAX))
400 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
405 item = s = SvPV(sv, len);
408 itemsize = sv_len_utf8(sv);
409 if (itemsize != (I32)len) {
411 if (itemsize > fieldsize) {
412 itemsize = fieldsize;
413 itembytes = itemsize;
414 sv_pos_u2b(sv, &itembytes, 0);
418 send = chophere = s + itembytes;
428 sv_pos_b2u(sv, &itemsize);
433 if (itemsize > fieldsize)
434 itemsize = fieldsize;
435 send = chophere = s + itemsize;
447 item = s = SvPV(sv, len);
450 itemsize = sv_len_utf8(sv);
451 if (itemsize != (I32)len) {
453 if (itemsize <= fieldsize) {
454 send = chophere = s + itemsize;
465 itemsize = fieldsize;
466 itembytes = itemsize;
467 sv_pos_u2b(sv, &itembytes, 0);
468 send = chophere = s + itembytes;
469 while (s < send || (s == send && isSPACE(*s))) {
479 if (strchr(PL_chopset, *s))
484 itemsize = chophere - item;
485 sv_pos_b2u(sv, &itemsize);
492 if (itemsize <= fieldsize) {
493 send = chophere = s + itemsize;
504 itemsize = fieldsize;
505 send = chophere = s + itemsize;
506 while (s < send || (s == send && isSPACE(*s))) {
516 if (strchr(PL_chopset, *s))
521 itemsize = chophere - item;
526 arg = fieldsize - itemsize;
535 arg = fieldsize - itemsize;
549 if (UTF8_IS_CONTINUED(*s)) {
550 STRLEN skip = UTF8SKIP(s);
567 if ( !((*t++ = *s++) & ~31) )
575 int ch = *t++ = *s++;
578 if ( !((*t++ = *s++) & ~31) )
587 while (*s && isSPACE(*s))
594 item = s = SvPV(sv, len);
596 item_is_utf = FALSE; /* XXX is this correct? */
608 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
609 sv_catpvn(PL_formtarget, item, itemsize);
610 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
611 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
616 /* If the field is marked with ^ and the value is undefined,
619 if ((arg & 512) && !SvOK(sv)) {
627 /* Formats aren't yet marked for locales, so assume "yes". */
629 STORE_NUMERIC_STANDARD_SET_LOCAL();
630 #if defined(USE_LONG_DOUBLE)
632 sprintf(t, "%#*.*" PERL_PRIfldbl,
633 (int) fieldsize, (int) arg & 255, value);
635 sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
640 (int) fieldsize, (int) arg & 255, value);
643 (int) fieldsize, value);
646 RESTORE_NUMERIC_STANDARD();
652 /* If the field is marked with ^ and the value is undefined,
655 if ((arg & 512) && !SvOK(sv)) {
663 /* Formats aren't yet marked for locales, so assume "yes". */
665 STORE_NUMERIC_STANDARD_SET_LOCAL();
666 #if defined(USE_LONG_DOUBLE)
668 sprintf(t, "%#0*.*" PERL_PRIfldbl,
669 (int) fieldsize, (int) arg & 255, value);
670 /* is this legal? I don't have long doubles */
672 sprintf(t, "%0*.0" PERL_PRIfldbl, (int) fieldsize, value);
676 sprintf(t, "%#0*.*f",
677 (int) fieldsize, (int) arg & 255, value);
680 (int) fieldsize, value);
683 RESTORE_NUMERIC_STANDARD();
690 while (t-- > linemark && *t == ' ') ;
698 if (arg) { /* repeat until fields exhausted? */
700 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
701 lines += FmLINES(PL_formtarget);
704 if (strnEQ(linemark, linemark - arg, arg))
705 DIE(aTHX_ "Runaway format");
707 FmLINES(PL_formtarget) = lines;
709 RETURNOP(cLISTOP->op_first);
722 while (*s && isSPACE(*s) && s < send)
726 arg = fieldsize - itemsize;
733 if (strnEQ(s," ",3)) {
734 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
745 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
746 FmLINES(PL_formtarget) += lines;
758 if (PL_stack_base + *PL_markstack_ptr == SP) {
760 if (GIMME_V == G_SCALAR)
761 XPUSHs(sv_2mortal(newSViv(0)));
762 RETURNOP(PL_op->op_next->op_next);
764 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
765 pp_pushmark(); /* push dst */
766 pp_pushmark(); /* push src */
767 ENTER; /* enter outer scope */
770 /* SAVE_DEFSV does *not* suffice here for USE_5005THREADS */
772 ENTER; /* enter inner scope */
775 src = PL_stack_base[*PL_markstack_ptr];
780 if (PL_op->op_type == OP_MAPSTART)
781 pp_pushmark(); /* push top */
782 return ((LOGOP*)PL_op->op_next)->op_other;
787 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
793 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
799 /* first, move source pointer to the next item in the source list */
800 ++PL_markstack_ptr[-1];
802 /* if there are new items, push them into the destination list */
804 /* might need to make room back there first */
805 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
806 /* XXX this implementation is very pessimal because the stack
807 * is repeatedly extended for every set of items. Is possible
808 * to do this without any stack extension or copying at all
809 * by maintaining a separate list over which the map iterates
810 * (like foreach does). --gsar */
812 /* everything in the stack after the destination list moves
813 * towards the end the stack by the amount of room needed */
814 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
816 /* items to shift up (accounting for the moved source pointer) */
817 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
819 /* This optimization is by Ben Tilly and it does
820 * things differently from what Sarathy (gsar)
821 * is describing. The downside of this optimization is
822 * that leaves "holes" (uninitialized and hopefully unused areas)
823 * to the Perl stack, but on the other hand this
824 * shouldn't be a problem. If Sarathy's idea gets
825 * implemented, this optimization should become
826 * irrelevant. --jhi */
828 shift = count; /* Avoid shifting too often --Ben Tilly */
833 PL_markstack_ptr[-1] += shift;
834 *PL_markstack_ptr += shift;
838 /* copy the new items down to the destination list */
839 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
841 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
843 LEAVE; /* exit inner scope */
846 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
849 (void)POPMARK; /* pop top */
850 LEAVE; /* exit outer scope */
851 (void)POPMARK; /* pop src */
852 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
853 (void)POPMARK; /* pop dst */
854 SP = PL_stack_base + POPMARK; /* pop original mark */
855 if (gimme == G_SCALAR) {
859 else if (gimme == G_ARRAY)
866 ENTER; /* enter inner scope */
869 /* set $_ to the new source item */
870 src = PL_stack_base[PL_markstack_ptr[-1]];
874 RETURNOP(cLOGOP->op_other);
882 if (GIMME == G_ARRAY)
884 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
885 return cLOGOP->op_other;
894 if (GIMME == G_ARRAY) {
895 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
899 SV *targ = PAD_SV(PL_op->op_targ);
902 if (PL_op->op_private & OPpFLIP_LINENUM) {
903 if (GvIO(PL_last_in_gv)) {
904 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
907 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
908 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
914 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
915 if (PL_op->op_flags & OPf_SPECIAL) {
923 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
936 if (GIMME == G_ARRAY) {
942 if (SvGMAGICAL(left))
944 if (SvGMAGICAL(right))
947 /* This code tries to decide if "$left .. $right" should use the
948 magical string increment, or if the range is numeric (we make
949 an exception for .."0" [#18165]). AMS 20021031. */
951 if (SvNIOKp(left) || !SvPOKp(left) ||
952 SvNIOKp(right) || !SvPOKp(right) ||
953 (looks_like_number(left) && *SvPVX(left) != '0' &&
954 looks_like_number(right)))
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");
1019 static char *context_name[] = {
1030 S_dopoptolabel(pTHX_ char *label)
1033 register PERL_CONTEXT *cx;
1035 for (i = cxstack_ix; i >= 0; i--) {
1037 switch (CxTYPE(cx)) {
1043 if (ckWARN(WARN_EXITING))
1044 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1045 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1046 if (CxTYPE(cx) == CXt_NULL)
1050 if (!cx->blk_loop.label ||
1051 strNE(label, cx->blk_loop.label) ) {
1052 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1053 (long)i, cx->blk_loop.label));
1056 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1064 Perl_dowantarray(pTHX)
1066 I32 gimme = block_gimme();
1067 return (gimme == G_VOID) ? G_SCALAR : gimme;
1071 Perl_block_gimme(pTHX)
1075 cxix = dopoptosub(cxstack_ix);
1079 switch (cxstack[cxix].blk_gimme) {
1087 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1094 Perl_is_lvalue_sub(pTHX)
1098 cxix = dopoptosub(cxstack_ix);
1099 assert(cxix >= 0); /* We should only be called from inside subs */
1101 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1102 return cxstack[cxix].blk_sub.lval;
1108 S_dopoptosub(pTHX_ I32 startingblock)
1110 return dopoptosub_at(cxstack, startingblock);
1114 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1117 register PERL_CONTEXT *cx;
1118 for (i = startingblock; i >= 0; i--) {
1120 switch (CxTYPE(cx)) {
1126 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1134 S_dopoptoeval(pTHX_ I32 startingblock)
1137 register PERL_CONTEXT *cx;
1138 for (i = startingblock; i >= 0; i--) {
1140 switch (CxTYPE(cx)) {
1144 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1152 S_dopoptoloop(pTHX_ I32 startingblock)
1155 register PERL_CONTEXT *cx;
1156 for (i = startingblock; i >= 0; i--) {
1158 switch (CxTYPE(cx)) {
1164 if (ckWARN(WARN_EXITING))
1165 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1166 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1167 if ((CxTYPE(cx)) == CXt_NULL)
1171 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1179 Perl_dounwind(pTHX_ I32 cxix)
1181 register PERL_CONTEXT *cx;
1184 while (cxstack_ix > cxix) {
1186 cx = &cxstack[cxstack_ix];
1187 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1188 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1189 /* Note: we don't need to restore the base context info till the end. */
1190 switch (CxTYPE(cx)) {
1193 continue; /* not break */
1215 Perl_qerror(pTHX_ SV *err)
1218 sv_catsv(ERRSV, err);
1220 sv_catsv(PL_errors, err);
1222 Perl_warn(aTHX_ "%"SVf, err);
1227 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1235 register PERL_CONTEXT *cx;
1240 if (PL_in_eval & EVAL_KEEPERR) {
1241 static char prefix[] = "\t(in cleanup) ";
1246 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1249 if (*e != *message || strNE(e,message))
1253 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1254 sv_catpvn(err, prefix, sizeof(prefix)-1);
1255 sv_catpvn(err, message, msglen);
1256 if (ckWARN(WARN_MISC)) {
1257 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1258 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1263 sv_setpvn(ERRSV, message, msglen);
1267 message = SvPVx(ERRSV, msglen);
1269 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1270 && PL_curstackinfo->si_prev)
1279 if (cxix < cxstack_ix)
1282 POPBLOCK(cx,PL_curpm);
1283 if (CxTYPE(cx) != CXt_EVAL) {
1284 PerlIO_write(Perl_error_log, "panic: die ", 11);
1285 PerlIO_write(Perl_error_log, message, msglen);
1290 if (gimme == G_SCALAR)
1291 *++newsp = &PL_sv_undef;
1292 PL_stack_sp = newsp;
1296 /* LEAVE could clobber PL_curcop (see save_re_context())
1297 * XXX it might be better to find a way to avoid messing with
1298 * PL_curcop in save_re_context() instead, but this is a more
1299 * minimal fix --GSAR */
1300 PL_curcop = cx->blk_oldcop;
1302 if (optype == OP_REQUIRE) {
1303 char* msg = SvPVx(ERRSV, n_a);
1304 DIE(aTHX_ "%sCompilation failed in require",
1305 *msg ? msg : "Unknown error\n");
1307 return pop_return();
1311 message = SvPVx(ERRSV, msglen);
1313 /* if STDERR is tied, print to it instead */
1314 if (PL_stderrgv && (io = GvIOp(PL_stderrgv))
1315 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1318 XPUSHs(SvTIED_obj((SV*)io, mg));
1319 XPUSHs(sv_2mortal(newSVpvn(message, msglen)));
1321 call_method("PRINT", G_SCALAR);
1326 /* SFIO can really mess with your errno */
1329 PerlIO *serr = Perl_error_log;
1331 PERL_WRITE_MSG_TO_CONSOLE(serr, message, msglen);
1332 (void)PerlIO_flush(serr);
1345 if (SvTRUE(left) != SvTRUE(right))
1357 RETURNOP(cLOGOP->op_other);
1366 RETURNOP(cLOGOP->op_other);
1372 register I32 cxix = dopoptosub(cxstack_ix);
1373 register PERL_CONTEXT *cx;
1374 register PERL_CONTEXT *ccstack = cxstack;
1375 PERL_SI *top_si = PL_curstackinfo;
1386 /* we may be in a higher stacklevel, so dig down deeper */
1387 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1388 top_si = top_si->si_prev;
1389 ccstack = top_si->si_cxstack;
1390 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1393 if (GIMME != G_ARRAY) {
1399 if (PL_DBsub && cxix >= 0 &&
1400 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1404 cxix = dopoptosub_at(ccstack, cxix - 1);
1407 cx = &ccstack[cxix];
1408 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1409 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1410 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1411 field below is defined for any cx. */
1412 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1413 cx = &ccstack[dbcxix];
1416 stashname = CopSTASHPV(cx->blk_oldcop);
1417 if (GIMME != G_ARRAY) {
1420 PUSHs(&PL_sv_undef);
1423 sv_setpv(TARG, stashname);
1432 PUSHs(&PL_sv_undef);
1434 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1435 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1436 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1439 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1440 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1441 /* So is ccstack[dbcxix]. */
1444 gv_efullname3(sv, cvgv, Nullch);
1445 PUSHs(sv_2mortal(sv));
1446 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1449 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1450 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1454 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1455 PUSHs(sv_2mortal(newSViv(0)));
1457 gimme = (I32)cx->blk_gimme;
1458 if (gimme == G_VOID)
1459 PUSHs(&PL_sv_undef);
1461 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1462 if (CxTYPE(cx) == CXt_EVAL) {
1464 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1465 PUSHs(cx->blk_eval.cur_text);
1469 else if (cx->blk_eval.old_namesv) {
1470 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1473 /* eval BLOCK (try blocks have old_namesv == 0) */
1475 PUSHs(&PL_sv_undef);
1476 PUSHs(&PL_sv_undef);
1480 PUSHs(&PL_sv_undef);
1481 PUSHs(&PL_sv_undef);
1483 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1484 && CopSTASH_eq(PL_curcop, PL_debstash))
1486 AV *ary = cx->blk_sub.argarray;
1487 int off = AvARRAY(ary) - AvALLOC(ary);
1491 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1494 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1497 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1498 av_extend(PL_dbargs, AvFILLp(ary) + off);
1499 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1500 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1502 /* XXX only hints propagated via op_private are currently
1503 * visible (others are not easily accessible, since they
1504 * use the global PL_hints) */
1505 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1506 HINT_PRIVATE_MASK)));
1509 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1511 if (old_warnings == pWARN_NONE ||
1512 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1513 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1514 else if (old_warnings == pWARN_ALL ||
1515 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1516 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1518 mask = newSVsv(old_warnings);
1519 PUSHs(sv_2mortal(mask));
1534 sv_reset(tmps, CopSTASH(PL_curcop));
1546 PL_curcop = (COP*)PL_op;
1547 TAINT_NOT; /* Each statement is presumed innocent */
1548 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1551 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1552 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1556 register PERL_CONTEXT *cx;
1557 I32 gimme = G_ARRAY;
1564 DIE(aTHX_ "No DB::DB routine defined");
1566 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1567 /* don't do recursive DB::DB call */
1579 push_return(PL_op->op_next);
1580 PUSHBLOCK(cx, CXt_SUB, SP);
1583 (void)SvREFCNT_inc(cv);
1584 SAVEVPTR(PL_curpad);
1585 PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
1586 RETURNOP(CvSTART(cv));
1600 register PERL_CONTEXT *cx;
1601 I32 gimme = GIMME_V;
1603 U32 cxtype = CXt_LOOP;
1611 #ifdef USE_5005THREADS
1612 if (PL_op->op_flags & OPf_SPECIAL) {
1613 svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
1614 SAVEGENERICSV(*svp);
1618 #endif /* USE_5005THREADS */
1619 if (PL_op->op_targ) {
1620 #ifndef USE_ITHREADS
1621 svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
1624 SAVEPADSV(PL_op->op_targ);
1625 iterdata = INT2PTR(void*, PL_op->op_targ);
1626 cxtype |= CXp_PADVAR;
1631 svp = &GvSV(gv); /* symbol table variable */
1632 SAVEGENERICSV(*svp);
1635 iterdata = (void*)gv;
1641 PUSHBLOCK(cx, cxtype, SP);
1643 PUSHLOOP(cx, iterdata, MARK);
1645 PUSHLOOP(cx, svp, MARK);
1647 if (PL_op->op_flags & OPf_STACKED) {
1648 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1649 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1651 /* See comment in pp_flop() */
1652 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1653 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1654 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1655 looks_like_number((SV*)cx->blk_loop.iterary)))
1657 if (SvNV(sv) < IV_MIN ||
1658 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1659 DIE(aTHX_ "Range iterator outside integer range");
1660 cx->blk_loop.iterix = SvIV(sv);
1661 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1664 cx->blk_loop.iterlval = newSVsv(sv);
1668 cx->blk_loop.iterary = PL_curstack;
1669 AvFILLp(PL_curstack) = SP - PL_stack_base;
1670 cx->blk_loop.iterix = MARK - PL_stack_base;
1679 register PERL_CONTEXT *cx;
1680 I32 gimme = GIMME_V;
1686 PUSHBLOCK(cx, CXt_LOOP, SP);
1687 PUSHLOOP(cx, 0, SP);
1695 register PERL_CONTEXT *cx;
1703 newsp = PL_stack_base + cx->blk_loop.resetsp;
1706 if (gimme == G_VOID)
1708 else if (gimme == G_SCALAR) {
1710 *++newsp = sv_mortalcopy(*SP);
1712 *++newsp = &PL_sv_undef;
1716 *++newsp = sv_mortalcopy(*++mark);
1717 TAINT_NOT; /* Each item is independent */
1723 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1724 PL_curpm = newpm; /* ... and pop $1 et al */
1736 register PERL_CONTEXT *cx;
1737 bool popsub2 = FALSE;
1738 bool clear_errsv = FALSE;
1745 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1746 if (cxstack_ix == PL_sortcxix
1747 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1749 if (cxstack_ix > PL_sortcxix)
1750 dounwind(PL_sortcxix);
1751 AvARRAY(PL_curstack)[1] = *SP;
1752 PL_stack_sp = PL_stack_base + 1;
1757 cxix = dopoptosub(cxstack_ix);
1759 DIE(aTHX_ "Can't return outside a subroutine");
1760 if (cxix < cxstack_ix)
1764 switch (CxTYPE(cx)) {
1769 if (!(PL_in_eval & EVAL_KEEPERR))
1775 if (optype == OP_REQUIRE &&
1776 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1778 /* Unassume the success we assumed earlier. */
1779 SV *nsv = cx->blk_eval.old_namesv;
1780 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1781 DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
1788 DIE(aTHX_ "panic: return");
1792 if (gimme == G_SCALAR) {
1795 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1797 *++newsp = SvREFCNT_inc(*SP);
1802 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1804 *++newsp = sv_mortalcopy(sv);
1809 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1812 *++newsp = sv_mortalcopy(*SP);
1815 *++newsp = &PL_sv_undef;
1817 else if (gimme == G_ARRAY) {
1818 while (++MARK <= SP) {
1819 *++newsp = (popsub2 && SvTEMP(*MARK))
1820 ? *MARK : sv_mortalcopy(*MARK);
1821 TAINT_NOT; /* Each item is independent */
1824 PL_stack_sp = newsp;
1826 /* Stack values are safe: */
1828 POPSUB(cx,sv); /* release CV and @_ ... */
1832 PL_curpm = newpm; /* ... and pop $1 et al */
1838 return pop_return();
1845 register PERL_CONTEXT *cx;
1855 if (PL_op->op_flags & OPf_SPECIAL) {
1856 cxix = dopoptoloop(cxstack_ix);
1858 DIE(aTHX_ "Can't \"last\" outside a loop block");
1861 cxix = dopoptolabel(cPVOP->op_pv);
1863 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1865 if (cxix < cxstack_ix)
1870 switch (CxTYPE(cx)) {
1873 newsp = PL_stack_base + cx->blk_loop.resetsp;
1874 nextop = cx->blk_loop.last_op->op_next;
1878 nextop = pop_return();
1882 nextop = pop_return();
1886 nextop = pop_return();
1889 DIE(aTHX_ "panic: last");
1893 if (gimme == G_SCALAR) {
1895 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1896 ? *SP : sv_mortalcopy(*SP);
1898 *++newsp = &PL_sv_undef;
1900 else if (gimme == G_ARRAY) {
1901 while (++MARK <= SP) {
1902 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1903 ? *MARK : sv_mortalcopy(*MARK);
1904 TAINT_NOT; /* Each item is independent */
1910 /* Stack values are safe: */
1913 POPLOOP(cx); /* release loop vars ... */
1917 POPSUB(cx,sv); /* release CV and @_ ... */
1920 PL_curpm = newpm; /* ... and pop $1 et al */
1930 register PERL_CONTEXT *cx;
1933 if (PL_op->op_flags & OPf_SPECIAL) {
1934 cxix = dopoptoloop(cxstack_ix);
1936 DIE(aTHX_ "Can't \"next\" outside a loop block");
1939 cxix = dopoptolabel(cPVOP->op_pv);
1941 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1943 if (cxix < cxstack_ix)
1946 /* clear off anything above the scope we're re-entering, but
1947 * save the rest until after a possible continue block */
1948 inner = PL_scopestack_ix;
1950 if (PL_scopestack_ix < inner)
1951 leave_scope(PL_scopestack[PL_scopestack_ix]);
1952 return cx->blk_loop.next_op;
1958 register PERL_CONTEXT *cx;
1961 if (PL_op->op_flags & OPf_SPECIAL) {
1962 cxix = dopoptoloop(cxstack_ix);
1964 DIE(aTHX_ "Can't \"redo\" outside a loop block");
1967 cxix = dopoptolabel(cPVOP->op_pv);
1969 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1971 if (cxix < cxstack_ix)
1975 oldsave = PL_scopestack[PL_scopestack_ix - 1];
1976 LEAVE_SCOPE(oldsave);
1977 return cx->blk_loop.redo_op;
1981 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
1985 static char too_deep[] = "Target of goto is too deeply nested";
1988 Perl_croak(aTHX_ too_deep);
1989 if (o->op_type == OP_LEAVE ||
1990 o->op_type == OP_SCOPE ||
1991 o->op_type == OP_LEAVELOOP ||
1992 o->op_type == OP_LEAVESUB ||
1993 o->op_type == OP_LEAVETRY)
1995 *ops++ = cUNOPo->op_first;
1997 Perl_croak(aTHX_ too_deep);
2000 if (o->op_flags & OPf_KIDS) {
2001 /* First try all the kids at this level, since that's likeliest. */
2002 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2003 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2004 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2007 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2008 if (kid == PL_lastgotoprobe)
2010 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2013 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2014 ops[-1]->op_type == OP_DBSTATE)
2019 if ((o = dofindlabel(kid, label, ops, oplimit)))
2038 register PERL_CONTEXT *cx;
2039 #define GOTO_DEPTH 64
2040 OP *enterops[GOTO_DEPTH];
2042 int do_dump = (PL_op->op_type == OP_DUMP);
2043 static char must_have_label[] = "goto must have label";
2046 if (PL_op->op_flags & OPf_STACKED) {
2050 /* This egregious kludge implements goto &subroutine */
2051 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2053 register PERL_CONTEXT *cx;
2054 CV* cv = (CV*)SvRV(sv);
2060 if (!CvROOT(cv) && !CvXSUB(cv)) {
2065 /* autoloaded stub? */
2066 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2068 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2069 GvNAMELEN(gv), FALSE);
2070 if (autogv && (cv = GvCV(autogv)))
2072 tmpstr = sv_newmortal();
2073 gv_efullname3(tmpstr, gv, Nullch);
2074 DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
2076 DIE(aTHX_ "Goto undefined subroutine");
2079 /* First do some returnish stuff. */
2081 cxix = dopoptosub(cxstack_ix);
2083 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2084 if (cxix < cxstack_ix)
2088 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2090 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2091 /* put @_ back onto stack */
2092 AV* av = cx->blk_sub.argarray;
2094 items = AvFILLp(av) + 1;
2096 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2097 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2098 PL_stack_sp += items;
2099 #ifndef USE_5005THREADS
2100 SvREFCNT_dec(GvAV(PL_defgv));
2101 GvAV(PL_defgv) = cx->blk_sub.savearray;
2102 #endif /* USE_5005THREADS */
2103 /* abandon @_ if it got reified */
2105 (void)sv_2mortal((SV*)av); /* delay until return */
2107 av_extend(av, items-1);
2108 AvFLAGS(av) = AVf_REIFY;
2109 PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
2112 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2114 #ifdef USE_5005THREADS
2115 av = (AV*)PL_curpad[0];
2117 av = GvAV(PL_defgv);
2119 items = AvFILLp(av) + 1;
2121 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2122 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2123 PL_stack_sp += items;
2125 if (CxTYPE(cx) == CXt_SUB &&
2126 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2127 SvREFCNT_dec(cx->blk_sub.cv);
2128 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2129 LEAVE_SCOPE(oldsave);
2131 /* Now do some callish stuff. */
2134 #ifdef PERL_XSUB_OLDSTYLE
2135 if (CvOLDSTYLE(cv)) {
2136 I32 (*fp3)(int,int,int);
2141 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2142 items = (*fp3)(CvXSUBANY(cv).any_i32,
2143 mark - PL_stack_base + 1,
2145 SP = PL_stack_base + items;
2148 #endif /* PERL_XSUB_OLDSTYLE */
2153 PL_stack_sp--; /* There is no cv arg. */
2154 /* Push a mark for the start of arglist */
2156 (void)(*CvXSUB(cv))(aTHX_ cv);
2157 /* Pop the current context like a decent sub should */
2158 POPBLOCK(cx, PL_curpm);
2159 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2162 return pop_return();
2165 AV* padlist = CvPADLIST(cv);
2166 SV** svp = AvARRAY(padlist);
2167 if (CxTYPE(cx) == CXt_EVAL) {
2168 PL_in_eval = cx->blk_eval.old_in_eval;
2169 PL_eval_root = cx->blk_eval.old_eval_root;
2170 cx->cx_type = CXt_SUB;
2171 cx->blk_sub.hasargs = 0;
2173 cx->blk_sub.cv = cv;
2174 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2176 if (CvDEPTH(cv) < 2)
2177 (void)SvREFCNT_inc(cv);
2178 else { /* save temporaries on recursion? */
2179 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2180 sub_crush_depth(cv);
2181 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2182 AV *newpad = newAV();
2183 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2184 I32 ix = AvFILLp((AV*)svp[1]);
2185 I32 names_fill = AvFILLp((AV*)svp[0]);
2186 svp = AvARRAY(svp[0]);
2187 for ( ;ix > 0; ix--) {
2188 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2189 char *name = SvPVX(svp[ix]);
2190 if ((SvFLAGS(svp[ix]) & SVf_FAKE)
2193 /* outer lexical or anon code */
2194 av_store(newpad, ix,
2195 SvREFCNT_inc(oldpad[ix]) );
2197 else { /* our own lexical */
2199 av_store(newpad, ix, sv = (SV*)newAV());
2200 else if (*name == '%')
2201 av_store(newpad, ix, sv = (SV*)newHV());
2203 av_store(newpad, ix, sv = NEWSV(0,0));
2207 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2208 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2211 av_store(newpad, ix, sv = NEWSV(0,0));
2215 if (cx->blk_sub.hasargs) {
2218 av_store(newpad, 0, (SV*)av);
2219 AvFLAGS(av) = AVf_REIFY;
2221 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2222 AvFILLp(padlist) = CvDEPTH(cv);
2223 svp = AvARRAY(padlist);
2226 #ifdef USE_5005THREADS
2227 if (!cx->blk_sub.hasargs) {
2228 AV* av = (AV*)PL_curpad[0];
2230 items = AvFILLp(av) + 1;
2232 /* Mark is at the end of the stack. */
2234 Copy(AvARRAY(av), SP + 1, items, SV*);
2239 #endif /* USE_5005THREADS */
2240 SAVEVPTR(PL_curpad);
2241 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2242 #ifndef USE_5005THREADS
2243 if (cx->blk_sub.hasargs)
2244 #endif /* USE_5005THREADS */
2246 AV* av = (AV*)PL_curpad[0];
2249 #ifndef USE_5005THREADS
2250 cx->blk_sub.savearray = GvAV(PL_defgv);
2251 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2252 #endif /* USE_5005THREADS */
2253 cx->blk_sub.oldcurpad = PL_curpad;
2254 cx->blk_sub.argarray = av;
2257 if (items >= AvMAX(av) + 1) {
2259 if (AvARRAY(av) != ary) {
2260 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2261 SvPVX(av) = (char*)ary;
2263 if (items >= AvMAX(av) + 1) {
2264 AvMAX(av) = items - 1;
2265 Renew(ary,items+1,SV*);
2267 SvPVX(av) = (char*)ary;
2270 Copy(mark,AvARRAY(av),items,SV*);
2271 AvFILLp(av) = items - 1;
2272 assert(!AvREAL(av));
2279 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2281 * We do not care about using sv to call CV;
2282 * it's for informational purposes only.
2284 SV *sv = GvSV(PL_DBsub);
2287 if (PERLDB_SUB_NN) {
2288 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2291 gv_efullname3(sv, CvGV(cv), Nullch);
2294 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2295 PUSHMARK( PL_stack_sp );
2296 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2300 RETURNOP(CvSTART(cv));
2304 label = SvPV(sv,n_a);
2305 if (!(do_dump || *label))
2306 DIE(aTHX_ must_have_label);
2309 else if (PL_op->op_flags & OPf_SPECIAL) {
2311 DIE(aTHX_ must_have_label);
2314 label = cPVOP->op_pv;
2316 if (label && *label) {
2318 bool leaving_eval = FALSE;
2319 bool in_block = FALSE;
2320 PERL_CONTEXT *last_eval_cx = 0;
2324 PL_lastgotoprobe = 0;
2326 for (ix = cxstack_ix; ix >= 0; ix--) {
2328 switch (CxTYPE(cx)) {
2330 leaving_eval = TRUE;
2331 if (CxREALEVAL(cx)) {
2332 gotoprobe = (last_eval_cx ?
2333 last_eval_cx->blk_eval.old_eval_root :
2338 /* else fall through */
2340 gotoprobe = cx->blk_oldcop->op_sibling;
2346 gotoprobe = cx->blk_oldcop->op_sibling;
2349 gotoprobe = PL_main_root;
2352 if (CvDEPTH(cx->blk_sub.cv)) {
2353 gotoprobe = CvROOT(cx->blk_sub.cv);
2359 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2362 DIE(aTHX_ "panic: goto");
2363 gotoprobe = PL_main_root;
2367 retop = dofindlabel(gotoprobe, label,
2368 enterops, enterops + GOTO_DEPTH);
2372 PL_lastgotoprobe = gotoprobe;
2375 DIE(aTHX_ "Can't find label %s", label);
2377 /* if we're leaving an eval, check before we pop any frames
2378 that we're not going to punt, otherwise the error
2381 if (leaving_eval && *enterops && enterops[1]) {
2383 for (i = 1; enterops[i]; i++)
2384 if (enterops[i]->op_type == OP_ENTERITER)
2385 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2388 /* pop unwanted frames */
2390 if (ix < cxstack_ix) {
2397 oldsave = PL_scopestack[PL_scopestack_ix];
2398 LEAVE_SCOPE(oldsave);
2401 /* push wanted frames */
2403 if (*enterops && enterops[1]) {
2405 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2406 for (; enterops[ix]; ix++) {
2407 PL_op = enterops[ix];
2408 /* Eventually we may want to stack the needed arguments
2409 * for each op. For now, we punt on the hard ones. */
2410 if (PL_op->op_type == OP_ENTERITER)
2411 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2412 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2420 if (!retop) retop = PL_main_start;
2422 PL_restartop = retop;
2423 PL_do_undump = TRUE;
2427 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2428 PL_do_undump = FALSE;
2444 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2446 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2449 PL_exit_flags |= PERL_EXIT_EXPECTED;
2451 PUSHs(&PL_sv_undef);
2459 NV value = SvNVx(GvSV(cCOP->cop_gv));
2460 register I32 match = I_32(value);
2463 if (((NV)match) > value)
2464 --match; /* was fractional--truncate other way */
2466 match -= cCOP->uop.scop.scop_offset;
2469 else if (match > cCOP->uop.scop.scop_max)
2470 match = cCOP->uop.scop.scop_max;
2471 PL_op = cCOP->uop.scop.scop_next[match];
2481 PL_op = PL_op->op_next; /* can't assume anything */
2484 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2485 match -= cCOP->uop.scop.scop_offset;
2488 else if (match > cCOP->uop.scop.scop_max)
2489 match = cCOP->uop.scop.scop_max;
2490 PL_op = cCOP->uop.scop.scop_next[match];
2499 S_save_lines(pTHX_ AV *array, SV *sv)
2501 register char *s = SvPVX(sv);
2502 register char *send = SvPVX(sv) + SvCUR(sv);
2504 register I32 line = 1;
2506 while (s && s < send) {
2507 SV *tmpstr = NEWSV(85,0);
2509 sv_upgrade(tmpstr, SVt_PVMG);
2510 t = strchr(s, '\n');
2516 sv_setpvn(tmpstr, s, t - s);
2517 av_store(array, line++, tmpstr);
2522 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2524 S_docatch_body(pTHX_ va_list args)
2526 return docatch_body();
2531 S_docatch_body(pTHX)
2538 S_docatch(pTHX_ OP *o)
2543 volatile PERL_SI *cursi = PL_curstackinfo;
2547 assert(CATCH_GET == TRUE);
2551 /* Normally, the leavetry at the end of this block of ops will
2552 * pop an op off the return stack and continue there. By setting
2553 * the op to Nullop, we force an exit from the inner runops()
2556 retop = pop_return();
2557 push_return(Nullop);
2559 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2561 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2567 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2573 /* die caught by an inner eval - continue inner loop */
2574 if (PL_restartop && cursi == PL_curstackinfo) {
2575 PL_op = PL_restartop;
2579 /* a die in this eval - continue in outer loop */
2595 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
2596 /* sv Text to convert to OP tree. */
2597 /* startop op_free() this to undo. */
2598 /* code Short string id of the caller. */
2600 dSP; /* Make POPBLOCK work. */
2603 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2607 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2608 char *tmpbuf = tbuf;
2614 /* switch to eval mode */
2616 if (PL_curcop == &PL_compiling) {
2617 SAVECOPSTASH_FREE(&PL_compiling);
2618 CopSTASH_set(&PL_compiling, PL_curstash);
2620 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2621 SV *sv = sv_newmortal();
2622 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2623 code, (unsigned long)++PL_evalseq,
2624 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2628 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2629 SAVECOPFILE_FREE(&PL_compiling);
2630 CopFILE_set(&PL_compiling, tmpbuf+2);
2631 SAVECOPLINE(&PL_compiling);
2632 CopLINE_set(&PL_compiling, 1);
2633 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2634 deleting the eval's FILEGV from the stash before gv_check() runs
2635 (i.e. before run-time proper). To work around the coredump that
2636 ensues, we always turn GvMULTI_on for any globals that were
2637 introduced within evals. See force_ident(). GSAR 96-10-12 */
2638 safestr = savepv(tmpbuf);
2639 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2641 #ifdef OP_IN_REGISTER
2646 PL_hints &= HINT_UTF8;
2649 PL_op->op_type = OP_ENTEREVAL;
2650 PL_op->op_flags = 0; /* Avoid uninit warning. */
2651 PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2652 PUSHEVAL(cx, 0, Nullgv);
2653 rop = doeval(G_SCALAR, startop);
2654 POPBLOCK(cx,PL_curpm);
2657 (*startop)->op_type = OP_NULL;
2658 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2660 *avp = (AV*)SvREFCNT_inc(PL_comppad);
2662 if (PL_curcop == &PL_compiling)
2663 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2664 #ifdef OP_IN_REGISTER
2670 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2672 S_doeval(pTHX_ int gimme, OP** startop)
2680 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2681 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2686 /* set up a scratch pad */
2689 SAVEVPTR(PL_curpad);
2690 SAVESPTR(PL_comppad);
2691 SAVESPTR(PL_comppad_name);
2692 SAVEI32(PL_comppad_name_fill);
2693 SAVEI32(PL_min_intro_pending);
2694 SAVEI32(PL_max_intro_pending);
2697 for (i = cxstack_ix - 1; i >= 0; i--) {
2698 PERL_CONTEXT *cx = &cxstack[i];
2699 if (CxTYPE(cx) == CXt_EVAL)
2701 else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2702 caller = cx->blk_sub.cv;
2707 SAVESPTR(PL_compcv);
2708 PL_compcv = (CV*)NEWSV(1104,0);
2709 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2710 CvEVAL_on(PL_compcv);
2711 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2712 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2714 #ifdef USE_5005THREADS
2715 CvOWNER(PL_compcv) = 0;
2716 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
2717 MUTEX_INIT(CvMUTEXP(PL_compcv));
2718 #endif /* USE_5005THREADS */
2720 PL_comppad = newAV();
2721 av_push(PL_comppad, Nullsv);
2722 PL_curpad = AvARRAY(PL_comppad);
2723 PL_comppad_name = newAV();
2724 PL_comppad_name_fill = 0;
2725 PL_min_intro_pending = 0;
2727 #ifdef USE_5005THREADS
2728 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
2729 PL_curpad[0] = (SV*)newAV();
2730 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
2731 #endif /* USE_5005THREADS */
2733 comppadlist = newAV();
2734 AvREAL_off(comppadlist);
2735 av_store(comppadlist, 0, (SV*)PL_comppad_name);
2736 av_store(comppadlist, 1, (SV*)PL_comppad);
2737 CvPADLIST(PL_compcv) = comppadlist;
2740 (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
2742 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
2745 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2747 /* make sure we compile in the right package */
2749 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2750 SAVESPTR(PL_curstash);
2751 PL_curstash = CopSTASH(PL_curcop);
2753 SAVESPTR(PL_beginav);
2754 PL_beginav = newAV();
2755 SAVEFREESV(PL_beginav);
2756 SAVEI32(PL_error_count);
2758 /* try to compile it */
2760 PL_eval_root = Nullop;
2762 PL_curcop = &PL_compiling;
2763 PL_curcop->cop_arybase = 0;
2764 if (saveop && saveop->op_flags & OPf_SPECIAL)
2765 PL_in_eval |= EVAL_KEEPERR;
2768 if (yyparse() || PL_error_count || !PL_eval_root) {
2772 I32 optype = 0; /* Might be reset by POPEVAL. */
2777 op_free(PL_eval_root);
2778 PL_eval_root = Nullop;
2780 SP = PL_stack_base + POPMARK; /* pop original mark */
2782 POPBLOCK(cx,PL_curpm);
2788 if (optype == OP_REQUIRE) {
2789 char* msg = SvPVx(ERRSV, n_a);
2790 DIE(aTHX_ "%sCompilation failed in require",
2791 *msg ? msg : "Unknown error\n");
2794 char* msg = SvPVx(ERRSV, n_a);
2796 POPBLOCK(cx,PL_curpm);
2798 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2799 (*msg ? msg : "Unknown error\n"));
2802 char* msg = SvPVx(ERRSV, n_a);
2804 sv_setpv(ERRSV, "Compilation error");
2807 #ifdef USE_5005THREADS
2808 MUTEX_LOCK(&PL_eval_mutex);
2810 COND_SIGNAL(&PL_eval_cond);
2811 MUTEX_UNLOCK(&PL_eval_mutex);
2812 #endif /* USE_5005THREADS */
2815 CopLINE_set(&PL_compiling, 0);
2817 *startop = PL_eval_root;
2818 SvREFCNT_dec(CvOUTSIDE(PL_compcv));
2819 CvOUTSIDE(PL_compcv) = Nullcv;
2821 SAVEFREEOP(PL_eval_root);
2823 scalarvoid(PL_eval_root);
2824 else if (gimme & G_ARRAY)
2827 scalar(PL_eval_root);
2829 DEBUG_x(dump_eval());
2831 /* Register with debugger: */
2832 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2833 CV *cv = get_cv("DB::postponed", FALSE);
2837 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2839 call_sv((SV*)cv, G_DISCARD);
2843 /* compiled okay, so do it */
2845 CvDEPTH(PL_compcv) = 1;
2846 SP = PL_stack_base + POPMARK; /* pop original mark */
2847 PL_op = saveop; /* The caller may need it. */
2848 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2849 #ifdef USE_5005THREADS
2850 MUTEX_LOCK(&PL_eval_mutex);
2852 COND_SIGNAL(&PL_eval_cond);
2853 MUTEX_UNLOCK(&PL_eval_mutex);
2854 #endif /* USE_5005THREADS */
2856 RETURNOP(PL_eval_start);
2860 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2862 STRLEN namelen = strlen(name);
2865 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2866 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2867 char *pmc = SvPV_nolen(pmcsv);
2870 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2871 fp = PerlIO_open(name, mode);
2874 if (PerlLIO_stat(name, &pmstat) < 0 ||
2875 pmstat.st_mtime < pmcstat.st_mtime)
2877 fp = PerlIO_open(pmc, mode);
2880 fp = PerlIO_open(name, mode);
2883 SvREFCNT_dec(pmcsv);
2886 fp = PerlIO_open(name, mode);
2894 register PERL_CONTEXT *cx;
2898 char *tryname = Nullch;
2899 SV *namesv = Nullsv;
2901 I32 gimme = GIMME_V;
2902 PerlIO *tryrsfp = 0;
2904 int filter_has_file = 0;
2905 GV *filter_child_proc = 0;
2906 SV *filter_state = 0;
2913 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
2914 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
2915 UV rev = 0, ver = 0, sver = 0;
2917 U8 *s = (U8*)SvPVX(sv);
2918 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2920 rev = utf8n_to_uvchr(s, end - s, &len, 0);
2923 ver = utf8n_to_uvchr(s, end - s, &len, 0);
2926 sver = utf8n_to_uvchr(s, end - s, &len, 0);
2929 if (PERL_REVISION < rev
2930 || (PERL_REVISION == rev
2931 && (PERL_VERSION < ver
2932 || (PERL_VERSION == ver
2933 && PERL_SUBVERSION < sver))))
2935 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2936 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2937 PERL_VERSION, PERL_SUBVERSION);
2939 if (ckWARN(WARN_PORTABLE))
2940 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
2941 "v-string in use/require non-portable");
2944 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2945 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2946 + ((NV)PERL_SUBVERSION/(NV)1000000)
2947 + 0.00000099 < SvNV(sv))
2951 NV nver = (nrev - rev) * 1000;
2952 UV ver = (UV)(nver + 0.0009);
2953 NV nsver = (nver - ver) * 1000;
2954 UV sver = (UV)(nsver + 0.0009);
2956 /* help out with the "use 5.6" confusion */
2957 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2958 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
2959 " (did you mean v%"UVuf".%03"UVuf"?)--"
2960 "this is only v%d.%d.%d, stopped",
2961 rev, ver, sver, rev, ver/100,
2962 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
2965 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2966 "this is only v%d.%d.%d, stopped",
2967 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2974 name = SvPV(sv, len);
2975 if (!(name && len > 0 && *name))
2976 DIE(aTHX_ "Null filename used");
2977 TAINT_PROPER("require");
2978 if (PL_op->op_type == OP_REQUIRE &&
2979 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2980 *svp != &PL_sv_undef)
2983 /* prepare to compile file */
2985 if (path_is_absolute(name)) {
2987 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2989 #ifdef MACOS_TRADITIONAL
2993 MacPerl_CanonDir(name, newname, 1);
2994 if (path_is_absolute(newname)) {
2996 tryrsfp = doopen_pmc(newname,PERL_SCRIPT_MODE);
3001 AV *ar = GvAVn(PL_incgv);
3005 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3008 namesv = NEWSV(806, 0);
3009 for (i = 0; i <= AvFILL(ar); i++) {
3010 SV *dirsv = *av_fetch(ar, i, TRUE);
3016 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3017 && !sv_isobject(loader))
3019 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3022 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3023 PTR2UV(SvRV(dirsv)), name);
3024 tryname = SvPVX(namesv);
3035 if (sv_isobject(loader))
3036 count = call_method("INC", G_ARRAY);
3038 count = call_sv(loader, G_ARRAY);
3048 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3052 if (SvTYPE(arg) == SVt_PVGV) {
3053 IO *io = GvIO((GV *)arg);
3058 tryrsfp = IoIFP(io);
3059 if (IoTYPE(io) == IoTYPE_PIPE) {
3060 /* reading from a child process doesn't
3061 nest -- when returning from reading
3062 the inner module, the outer one is
3063 unreadable (closed?) I've tried to
3064 save the gv to manage the lifespan of
3065 the pipe, but this didn't help. XXX */
3066 filter_child_proc = (GV *)arg;
3067 (void)SvREFCNT_inc(filter_child_proc);
3070 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3071 PerlIO_close(IoOFP(io));
3083 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3085 (void)SvREFCNT_inc(filter_sub);
3088 filter_state = SP[i];
3089 (void)SvREFCNT_inc(filter_state);
3093 tryrsfp = PerlIO_open("/dev/null",
3108 filter_has_file = 0;
3109 if (filter_child_proc) {
3110 SvREFCNT_dec(filter_child_proc);
3111 filter_child_proc = 0;
3114 SvREFCNT_dec(filter_state);
3118 SvREFCNT_dec(filter_sub);
3123 if (!path_is_absolute(name)
3124 #ifdef MACOS_TRADITIONAL
3125 /* We consider paths of the form :a:b ambiguous and interpret them first
3126 as global then as local
3128 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3131 char *dir = SvPVx(dirsv, n_a);
3132 #ifdef MACOS_TRADITIONAL
3136 MacPerl_CanonDir(name, buf2, 1);
3137 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3141 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3143 sv_setpv(namesv, unixdir);
3144 sv_catpv(namesv, unixname);
3146 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3149 TAINT_PROPER("require");
3150 tryname = SvPVX(namesv);
3151 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3153 if (tryname[0] == '.' && tryname[1] == '/')
3162 SAVECOPFILE_FREE(&PL_compiling);
3163 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3164 SvREFCNT_dec(namesv);
3166 if (PL_op->op_type == OP_REQUIRE) {
3167 char *msgstr = name;
3168 if (namesv) { /* did we lookup @INC? */
3169 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3170 SV *dirmsgsv = NEWSV(0, 0);
3171 AV *ar = GvAVn(PL_incgv);
3173 sv_catpvn(msg, " in @INC", 8);
3174 if (instr(SvPVX(msg), ".h "))
3175 sv_catpv(msg, " (change .h to .ph maybe?)");
3176 if (instr(SvPVX(msg), ".ph "))
3177 sv_catpv(msg, " (did you run h2ph?)");
3178 sv_catpv(msg, " (@INC contains:");
3179 for (i = 0; i <= AvFILL(ar); i++) {
3180 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3181 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3182 sv_catsv(msg, dirmsgsv);
3184 sv_catpvn(msg, ")", 1);
3185 SvREFCNT_dec(dirmsgsv);
3186 msgstr = SvPV_nolen(msg);
3188 DIE(aTHX_ "Can't locate %s", msgstr);
3194 SETERRNO(0, SS_NORMAL);
3196 /* Assume success here to prevent recursive requirement. */
3198 /* Check whether a hook in @INC has already filled %INC */
3199 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3200 (void)hv_store(GvHVn(PL_incgv), name, len,
3201 (hook_sv ? SvREFCNT_inc(hook_sv)
3202 : newSVpv(CopFILE(&PL_compiling), 0)),
3208 lex_start(sv_2mortal(newSVpvn("",0)));
3209 SAVEGENERICSV(PL_rsfp_filters);
3210 PL_rsfp_filters = Nullav;
3215 SAVESPTR(PL_compiling.cop_warnings);
3216 if (PL_dowarn & G_WARN_ALL_ON)
3217 PL_compiling.cop_warnings = pWARN_ALL ;
3218 else if (PL_dowarn & G_WARN_ALL_OFF)
3219 PL_compiling.cop_warnings = pWARN_NONE ;
3220 else if (PL_taint_warn)
3221 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3223 PL_compiling.cop_warnings = pWARN_STD ;
3224 SAVESPTR(PL_compiling.cop_io);
3225 PL_compiling.cop_io = Nullsv;
3227 if (filter_sub || filter_child_proc) {
3228 SV *datasv = filter_add(run_user_filter, Nullsv);
3229 IoLINES(datasv) = filter_has_file;
3230 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3231 IoTOP_GV(datasv) = (GV *)filter_state;
3232 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3235 /* switch to eval mode */
3236 push_return(PL_op->op_next);
3237 PUSHBLOCK(cx, CXt_EVAL, SP);
3238 PUSHEVAL(cx, name, Nullgv);
3240 SAVECOPLINE(&PL_compiling);
3241 CopLINE_set(&PL_compiling, 0);
3244 #ifdef USE_5005THREADS
3245 MUTEX_LOCK(&PL_eval_mutex);
3246 if (PL_eval_owner && PL_eval_owner != thr)
3247 while (PL_eval_owner)
3248 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3249 PL_eval_owner = thr;
3250 MUTEX_UNLOCK(&PL_eval_mutex);
3251 #endif /* USE_5005THREADS */
3253 /* Store and reset encoding. */
3254 encoding = PL_encoding;
3255 PL_encoding = Nullsv;
3257 op = DOCATCH(doeval(gimme, NULL));
3259 /* Restore encoding. */
3260 PL_encoding = encoding;
3267 return pp_require();
3273 register PERL_CONTEXT *cx;
3275 I32 gimme = GIMME_V, was = PL_sub_generation;
3276 char tbuf[TYPE_DIGITS(long) + 12];
3277 char *tmpbuf = tbuf;
3284 TAINT_PROPER("eval");
3290 /* switch to eval mode */
3292 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3293 SV *sv = sv_newmortal();
3294 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3295 (unsigned long)++PL_evalseq,
3296 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3300 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3301 SAVECOPFILE_FREE(&PL_compiling);
3302 CopFILE_set(&PL_compiling, tmpbuf+2);
3303 SAVECOPLINE(&PL_compiling);
3304 CopLINE_set(&PL_compiling, 1);
3305 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3306 deleting the eval's FILEGV from the stash before gv_check() runs
3307 (i.e. before run-time proper). To work around the coredump that
3308 ensues, we always turn GvMULTI_on for any globals that were
3309 introduced within evals. See force_ident(). GSAR 96-10-12 */
3310 safestr = savepv(tmpbuf);
3311 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3313 PL_hints = PL_op->op_targ;
3314 SAVESPTR(PL_compiling.cop_warnings);
3315 if (specialWARN(PL_curcop->cop_warnings))
3316 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3318 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3319 SAVEFREESV(PL_compiling.cop_warnings);
3321 SAVESPTR(PL_compiling.cop_io);
3322 if (specialCopIO(PL_curcop->cop_io))
3323 PL_compiling.cop_io = PL_curcop->cop_io;
3325 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3326 SAVEFREESV(PL_compiling.cop_io);
3329 push_return(PL_op->op_next);
3330 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3331 PUSHEVAL(cx, 0, Nullgv);
3333 /* prepare to compile string */
3335 if (PERLDB_LINE && PL_curstash != PL_debstash)
3336 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3338 #ifdef USE_5005THREADS
3339 MUTEX_LOCK(&PL_eval_mutex);
3340 if (PL_eval_owner && PL_eval_owner != thr)
3341 while (PL_eval_owner)
3342 COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
3343 PL_eval_owner = thr;
3344 MUTEX_UNLOCK(&PL_eval_mutex);
3345 #endif /* USE_5005THREADS */
3346 ret = doeval(gimme, NULL);
3347 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3348 && ret != PL_op->op_next) { /* Successive compilation. */
3349 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3351 return DOCATCH(ret);
3361 register PERL_CONTEXT *cx;
3363 U8 save_flags = PL_op -> op_flags;
3368 retop = pop_return();
3371 if (gimme == G_VOID)
3373 else if (gimme == G_SCALAR) {
3376 if (SvFLAGS(TOPs) & SVs_TEMP)
3379 *MARK = sv_mortalcopy(TOPs);
3383 *MARK = &PL_sv_undef;
3388 /* in case LEAVE wipes old return values */
3389 for (mark = newsp + 1; mark <= SP; mark++) {
3390 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3391 *mark = sv_mortalcopy(*mark);
3392 TAINT_NOT; /* Each item is independent */
3396 PL_curpm = newpm; /* Don't pop $1 et al till now */
3399 assert(CvDEPTH(PL_compcv) == 1);
3401 CvDEPTH(PL_compcv) = 0;
3404 if (optype == OP_REQUIRE &&
3405 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3407 /* Unassume the success we assumed earlier. */
3408 SV *nsv = cx->blk_eval.old_namesv;
3409 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3410 retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
3411 /* die_where() did LEAVE, or we won't be here */
3415 if (!(save_flags & OPf_SPECIAL))
3425 register PERL_CONTEXT *cx;
3426 I32 gimme = GIMME_V;
3431 push_return(cLOGOP->op_other->op_next);
3432 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3435 PL_in_eval = EVAL_INEVAL;
3438 return DOCATCH(PL_op->op_next);
3449 register PERL_CONTEXT *cx;
3454 retop = pop_return();
3457 if (gimme == G_VOID)
3459 else if (gimme == G_SCALAR) {
3462 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3465 *MARK = sv_mortalcopy(TOPs);
3469 *MARK = &PL_sv_undef;
3474 /* in case LEAVE wipes old return values */
3475 for (mark = newsp + 1; mark <= SP; mark++) {
3476 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3477 *mark = sv_mortalcopy(*mark);
3478 TAINT_NOT; /* Each item is independent */
3482 PL_curpm = newpm; /* Don't pop $1 et al till now */
3490 S_doparseform(pTHX_ SV *sv)
3493 register char *s = SvPV_force(sv, len);
3494 register char *send = s + len;
3495 register char *base = Nullch;
3496 register I32 skipspaces = 0;
3497 bool noblank = FALSE;
3498 bool repeat = FALSE;
3499 bool postspace = FALSE;
3507 Perl_croak(aTHX_ "Null picture in formline");
3509 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3514 *fpc++ = FF_LINEMARK;
3515 noblank = repeat = FALSE;
3533 case ' ': case '\t':
3544 *fpc++ = FF_LITERAL;
3552 *fpc++ = (U16)skipspaces;
3556 *fpc++ = FF_NEWLINE;
3560 arg = fpc - linepc + 1;
3567 *fpc++ = FF_LINEMARK;
3568 noblank = repeat = FALSE;
3577 ischop = s[-1] == '^';
3583 arg = (s - base) - 1;
3585 *fpc++ = FF_LITERAL;
3594 *fpc++ = FF_LINEGLOB;
3596 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3597 arg = ischop ? 512 : 0;
3607 arg |= 256 + (s - f);
3609 *fpc++ = s - base; /* fieldsize for FETCH */
3610 *fpc++ = FF_DECIMAL;
3613 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3614 arg = ischop ? 512 : 0;
3616 s++; /* skip the '0' first */
3625 arg |= 256 + (s - f);
3627 *fpc++ = s - base; /* fieldsize for FETCH */
3628 *fpc++ = FF_0DECIMAL;
3633 bool ismore = FALSE;
3636 while (*++s == '>') ;
3637 prespace = FF_SPACE;
3639 else if (*s == '|') {
3640 while (*++s == '|') ;
3641 prespace = FF_HALFSPACE;
3646 while (*++s == '<') ;
3649 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3653 *fpc++ = s - base; /* fieldsize for FETCH */
3655 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3658 *fpc++ = (U16)prespace;
3673 { /* need to jump to the next word */
3675 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3676 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3677 s = SvPVX(sv) + SvCUR(sv) + z;
3679 Copy(fops, s, arg, U16);
3681 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3686 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3688 SV *datasv = FILTER_DATA(idx);
3689 int filter_has_file = IoLINES(datasv);
3690 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3691 SV *filter_state = (SV *)IoTOP_GV(datasv);
3692 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3695 /* I was having segfault trouble under Linux 2.2.5 after a
3696 parse error occured. (Had to hack around it with a test
3697 for PL_error_count == 0.) Solaris doesn't segfault --
3698 not sure where the trouble is yet. XXX */
3700 if (filter_has_file) {
3701 len = FILTER_READ(idx+1, buf_sv, maxlen);
3704 if (filter_sub && len >= 0) {
3715 PUSHs(sv_2mortal(newSViv(maxlen)));
3717 PUSHs(filter_state);
3720 count = call_sv(filter_sub, G_SCALAR);
3736 IoLINES(datasv) = 0;
3737 if (filter_child_proc) {
3738 SvREFCNT_dec(filter_child_proc);
3739 IoFMT_GV(datasv) = Nullgv;
3742 SvREFCNT_dec(filter_state);
3743 IoTOP_GV(datasv) = Nullgv;
3746 SvREFCNT_dec(filter_sub);
3747 IoBOTTOM_GV(datasv) = Nullgv;
3749 filter_del(run_user_filter);
3755 /* perhaps someone can come up with a better name for
3756 this? it is not really "absolute", per se ... */
3758 S_path_is_absolute(pTHX_ char *name)
3760 if (PERL_FILE_IS_ABSOLUTE(name)
3761 #ifdef MACOS_TRADITIONAL
3764 || (*name == '.' && (name[1] == '/' ||
3765 (name[1] == '.' && name[2] == '/'))))