3 * Copyright (c) 1991-2002, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Now far ahead the Road has gone,
12 * And I must follow, if I can,
13 * Pursuing it with eager feet,
14 * Until it joins some larger way
15 * Where many paths and errands meet.
16 * And whither then? I cannot say.
20 #define PERL_IN_PP_CTL_C
24 #define WORD_ALIGN sizeof(U16)
27 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29 static I32 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen);
37 cxix = dopoptosub(cxstack_ix);
41 switch (cxstack[cxix].blk_gimme) {
58 /* XXXX Should store the old value to allow for tie/overload - and
59 restore in regcomp, where marked with XXXX. */
67 register PMOP *pm = (PMOP*)cLOGOP->op_other;
71 MAGIC *mg = Null(MAGIC*);
75 /* prevent recompiling under /o and ithreads. */
76 #if defined(USE_ITHREADS)
77 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm))
82 SV *sv = SvRV(tmpstr);
84 mg = mg_find(sv, PERL_MAGIC_qr);
87 regexp *re = (regexp *)mg->mg_obj;
88 ReREFCNT_dec(PM_GETRE(pm));
89 PM_SETRE(pm, ReREFCNT_inc(re));
92 t = SvPV(tmpstr, len);
94 /* Check against the last compiled regexp. */
95 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
96 PM_GETRE(pm)->prelen != (I32)len ||
97 memNE(PM_GETRE(pm)->precomp, t, len))
100 ReREFCNT_dec(PM_GETRE(pm));
101 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
103 if (PL_op->op_flags & OPf_SPECIAL)
104 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
106 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
108 pm->op_pmdynflags |= PMdf_DYN_UTF8;
110 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
111 if (pm->op_pmdynflags & PMdf_UTF8)
112 t = (char*)bytes_to_utf8((U8*)t, &len);
114 PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
115 if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
117 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
118 inside tie/overload accessors. */
122 #ifndef INCOMPLETE_TAINTS
125 pm->op_pmdynflags |= PMdf_TAINTED;
127 pm->op_pmdynflags &= ~PMdf_TAINTED;
131 if (!PM_GETRE(pm)->prelen && PL_curpm)
133 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
134 pm->op_pmflags |= PMf_WHITE;
136 pm->op_pmflags &= ~PMf_WHITE;
138 /* XXX runtime compiled output needs to move to the pad */
139 if (pm->op_pmflags & PMf_KEEP) {
140 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
141 #if !defined(USE_ITHREADS)
142 /* XXX can't change the optree at runtime either */
143 cLOGOP->op_first->op_next = PL_op->op_next;
152 register PMOP *pm = (PMOP*) cLOGOP->op_other;
153 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
154 register SV *dstr = cx->sb_dstr;
155 register char *s = cx->sb_s;
156 register char *m = cx->sb_m;
157 char *orig = cx->sb_orig;
158 register REGEXP *rx = cx->sb_rx;
160 rxres_restore(&cx->sb_rxres, rx);
161 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);
1375 if (!sv || !SvANY(sv)) {
1376 RETURNOP(cLOGOP->op_other);
1379 switch (SvTYPE(sv)) {
1381 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1385 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1389 if (CvROOT(sv) || CvXSUB(sv))
1399 RETURNOP(cLOGOP->op_other);
1405 register I32 cxix = dopoptosub(cxstack_ix);
1406 register PERL_CONTEXT *cx;
1407 register PERL_CONTEXT *ccstack = cxstack;
1408 PERL_SI *top_si = PL_curstackinfo;
1419 /* we may be in a higher stacklevel, so dig down deeper */
1420 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1421 top_si = top_si->si_prev;
1422 ccstack = top_si->si_cxstack;
1423 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1426 if (GIMME != G_ARRAY) {
1432 if (PL_DBsub && cxix >= 0 &&
1433 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1437 cxix = dopoptosub_at(ccstack, cxix - 1);
1440 cx = &ccstack[cxix];
1441 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1442 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1443 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1444 field below is defined for any cx. */
1445 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1446 cx = &ccstack[dbcxix];
1449 stashname = CopSTASHPV(cx->blk_oldcop);
1450 if (GIMME != G_ARRAY) {
1453 PUSHs(&PL_sv_undef);
1456 sv_setpv(TARG, stashname);
1465 PUSHs(&PL_sv_undef);
1467 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1468 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1469 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1472 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1473 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1474 /* So is ccstack[dbcxix]. */
1477 gv_efullname3(sv, cvgv, Nullch);
1478 PUSHs(sv_2mortal(sv));
1479 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1482 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1483 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1487 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1488 PUSHs(sv_2mortal(newSViv(0)));
1490 gimme = (I32)cx->blk_gimme;
1491 if (gimme == G_VOID)
1492 PUSHs(&PL_sv_undef);
1494 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1495 if (CxTYPE(cx) == CXt_EVAL) {
1497 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1498 PUSHs(cx->blk_eval.cur_text);
1502 else if (cx->blk_eval.old_namesv) {
1503 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1506 /* eval BLOCK (try blocks have old_namesv == 0) */
1508 PUSHs(&PL_sv_undef);
1509 PUSHs(&PL_sv_undef);
1513 PUSHs(&PL_sv_undef);
1514 PUSHs(&PL_sv_undef);
1516 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1517 && CopSTASH_eq(PL_curcop, PL_debstash))
1519 AV *ary = cx->blk_sub.argarray;
1520 int off = AvARRAY(ary) - AvALLOC(ary);
1524 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1527 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1530 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1531 av_extend(PL_dbargs, AvFILLp(ary) + off);
1532 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1533 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1535 /* XXX only hints propagated via op_private are currently
1536 * visible (others are not easily accessible, since they
1537 * use the global PL_hints) */
1538 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1539 HINT_PRIVATE_MASK)));
1542 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1544 if (old_warnings == pWARN_NONE ||
1545 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1546 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1547 else if (old_warnings == pWARN_ALL ||
1548 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
1549 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1551 mask = newSVsv(old_warnings);
1552 PUSHs(sv_2mortal(mask));
1567 sv_reset(tmps, CopSTASH(PL_curcop));
1577 /* like pp_nextstate, but used instead when the debugger is active */
1581 PL_curcop = (COP*)PL_op;
1582 TAINT_NOT; /* Each statement is presumed innocent */
1583 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1586 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1587 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1591 register PERL_CONTEXT *cx;
1592 I32 gimme = G_ARRAY;
1599 DIE(aTHX_ "No DB::DB routine defined");
1601 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1602 /* don't do recursive DB::DB call */
1614 push_return(PL_op->op_next);
1615 PUSHBLOCK(cx, CXt_SUB, SP);
1618 (void)SvREFCNT_inc(cv);
1619 PAD_SET_CUR(CvPADLIST(cv),1);
1620 RETURNOP(CvSTART(cv));
1634 register PERL_CONTEXT *cx;
1635 I32 gimme = GIMME_V;
1637 U32 cxtype = CXt_LOOP;
1645 if (PL_op->op_targ) {
1646 #ifndef USE_ITHREADS
1647 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1650 SAVEPADSV(PL_op->op_targ);
1651 iterdata = INT2PTR(void*, PL_op->op_targ);
1652 cxtype |= CXp_PADVAR;
1657 svp = &GvSV(gv); /* symbol table variable */
1658 SAVEGENERICSV(*svp);
1661 iterdata = (void*)gv;
1667 PUSHBLOCK(cx, cxtype, SP);
1669 PUSHLOOP(cx, iterdata, MARK);
1671 PUSHLOOP(cx, svp, MARK);
1673 if (PL_op->op_flags & OPf_STACKED) {
1674 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1675 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1677 /* See comment in pp_flop() */
1678 if (SvNIOKp(sv) || !SvPOKp(sv) ||
1679 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1680 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1681 looks_like_number((SV*)cx->blk_loop.iterary)))
1683 if (SvNV(sv) < IV_MIN ||
1684 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1685 DIE(aTHX_ "Range iterator outside integer range");
1686 cx->blk_loop.iterix = SvIV(sv);
1687 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1690 cx->blk_loop.iterlval = newSVsv(sv);
1694 cx->blk_loop.iterary = PL_curstack;
1695 AvFILLp(PL_curstack) = SP - PL_stack_base;
1696 cx->blk_loop.iterix = MARK - PL_stack_base;
1705 register PERL_CONTEXT *cx;
1706 I32 gimme = GIMME_V;
1712 PUSHBLOCK(cx, CXt_LOOP, SP);
1713 PUSHLOOP(cx, 0, SP);
1721 register PERL_CONTEXT *cx;
1729 newsp = PL_stack_base + cx->blk_loop.resetsp;
1732 if (gimme == G_VOID)
1734 else if (gimme == G_SCALAR) {
1736 *++newsp = sv_mortalcopy(*SP);
1738 *++newsp = &PL_sv_undef;
1742 *++newsp = sv_mortalcopy(*++mark);
1743 TAINT_NOT; /* Each item is independent */
1749 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1750 PL_curpm = newpm; /* ... and pop $1 et al */
1762 register PERL_CONTEXT *cx;
1763 bool popsub2 = FALSE;
1764 bool clear_errsv = FALSE;
1771 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1772 if (cxstack_ix == PL_sortcxix
1773 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1775 if (cxstack_ix > PL_sortcxix)
1776 dounwind(PL_sortcxix);
1777 AvARRAY(PL_curstack)[1] = *SP;
1778 PL_stack_sp = PL_stack_base + 1;
1783 cxix = dopoptosub(cxstack_ix);
1785 DIE(aTHX_ "Can't return outside a subroutine");
1786 if (cxix < cxstack_ix)
1790 switch (CxTYPE(cx)) {
1795 if (!(PL_in_eval & EVAL_KEEPERR))
1801 if (optype == OP_REQUIRE &&
1802 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1804 /* Unassume the success we assumed earlier. */
1805 SV *nsv = cx->blk_eval.old_namesv;
1806 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1807 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1814 DIE(aTHX_ "panic: return");
1818 if (gimme == G_SCALAR) {
1821 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1823 *++newsp = SvREFCNT_inc(*SP);
1828 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1830 *++newsp = sv_mortalcopy(sv);
1835 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1838 *++newsp = sv_mortalcopy(*SP);
1841 *++newsp = &PL_sv_undef;
1843 else if (gimme == G_ARRAY) {
1844 while (++MARK <= SP) {
1845 *++newsp = (popsub2 && SvTEMP(*MARK))
1846 ? *MARK : sv_mortalcopy(*MARK);
1847 TAINT_NOT; /* Each item is independent */
1850 PL_stack_sp = newsp;
1852 /* Stack values are safe: */
1854 POPSUB(cx,sv); /* release CV and @_ ... */
1858 PL_curpm = newpm; /* ... and pop $1 et al */
1864 return pop_return();
1871 register PERL_CONTEXT *cx;
1881 if (PL_op->op_flags & OPf_SPECIAL) {
1882 cxix = dopoptoloop(cxstack_ix);
1884 DIE(aTHX_ "Can't \"last\" outside a loop block");
1887 cxix = dopoptolabel(cPVOP->op_pv);
1889 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1891 if (cxix < cxstack_ix)
1896 switch (CxTYPE(cx)) {
1899 newsp = PL_stack_base + cx->blk_loop.resetsp;
1900 nextop = cx->blk_loop.last_op->op_next;
1904 nextop = pop_return();
1908 nextop = pop_return();
1912 nextop = pop_return();
1915 DIE(aTHX_ "panic: last");
1919 if (gimme == G_SCALAR) {
1921 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
1922 ? *SP : sv_mortalcopy(*SP);
1924 *++newsp = &PL_sv_undef;
1926 else if (gimme == G_ARRAY) {
1927 while (++MARK <= SP) {
1928 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
1929 ? *MARK : sv_mortalcopy(*MARK);
1930 TAINT_NOT; /* Each item is independent */
1936 /* Stack values are safe: */
1939 POPLOOP(cx); /* release loop vars ... */
1943 POPSUB(cx,sv); /* release CV and @_ ... */
1946 PL_curpm = newpm; /* ... and pop $1 et al */
1956 register PERL_CONTEXT *cx;
1959 if (PL_op->op_flags & OPf_SPECIAL) {
1960 cxix = dopoptoloop(cxstack_ix);
1962 DIE(aTHX_ "Can't \"next\" outside a loop block");
1965 cxix = dopoptolabel(cPVOP->op_pv);
1967 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
1969 if (cxix < cxstack_ix)
1972 /* clear off anything above the scope we're re-entering, but
1973 * save the rest until after a possible continue block */
1974 inner = PL_scopestack_ix;
1976 if (PL_scopestack_ix < inner)
1977 leave_scope(PL_scopestack[PL_scopestack_ix]);
1978 return cx->blk_loop.next_op;
1984 register PERL_CONTEXT *cx;
1987 if (PL_op->op_flags & OPf_SPECIAL) {
1988 cxix = dopoptoloop(cxstack_ix);
1990 DIE(aTHX_ "Can't \"redo\" outside a loop block");
1993 cxix = dopoptolabel(cPVOP->op_pv);
1995 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
1997 if (cxix < cxstack_ix)
2001 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2002 LEAVE_SCOPE(oldsave);
2003 return cx->blk_loop.redo_op;
2007 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2011 static char too_deep[] = "Target of goto is too deeply nested";
2014 Perl_croak(aTHX_ too_deep);
2015 if (o->op_type == OP_LEAVE ||
2016 o->op_type == OP_SCOPE ||
2017 o->op_type == OP_LEAVELOOP ||
2018 o->op_type == OP_LEAVETRY)
2020 *ops++ = cUNOPo->op_first;
2022 Perl_croak(aTHX_ too_deep);
2025 if (o->op_flags & OPf_KIDS) {
2026 /* First try all the kids at this level, since that's likeliest. */
2027 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2028 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2029 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2032 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2033 if (kid == PL_lastgotoprobe)
2035 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2038 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2039 ops[-1]->op_type == OP_DBSTATE)
2044 if ((o = dofindlabel(kid, label, ops, oplimit)))
2063 register PERL_CONTEXT *cx;
2064 #define GOTO_DEPTH 64
2065 OP *enterops[GOTO_DEPTH];
2067 int do_dump = (PL_op->op_type == OP_DUMP);
2068 static char must_have_label[] = "goto must have label";
2071 if (PL_op->op_flags & OPf_STACKED) {
2075 /* This egregious kludge implements goto &subroutine */
2076 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2078 register PERL_CONTEXT *cx;
2079 CV* cv = (CV*)SvRV(sv);
2085 if (!CvROOT(cv) && !CvXSUB(cv)) {
2090 /* autoloaded stub? */
2091 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2093 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2094 GvNAMELEN(gv), FALSE);
2095 if (autogv && (cv = GvCV(autogv)))
2097 tmpstr = sv_newmortal();
2098 gv_efullname3(tmpstr, gv, Nullch);
2099 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2101 DIE(aTHX_ "Goto undefined subroutine");
2104 /* First do some returnish stuff. */
2106 cxix = dopoptosub(cxstack_ix);
2108 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2109 if (cxix < cxstack_ix)
2113 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2115 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2116 /* put @_ back onto stack */
2117 AV* av = cx->blk_sub.argarray;
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;
2124 SvREFCNT_dec(GvAV(PL_defgv));
2125 GvAV(PL_defgv) = cx->blk_sub.savearray;
2126 /* abandon @_ if it got reified */
2128 (void)sv_2mortal((SV*)av); /* delay until return */
2130 av_extend(av, items-1);
2131 AvFLAGS(av) = AVf_REIFY;
2132 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2135 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2137 av = GvAV(PL_defgv);
2138 items = AvFILLp(av) + 1;
2140 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2141 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2142 PL_stack_sp += items;
2144 if (CxTYPE(cx) == CXt_SUB &&
2145 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2146 SvREFCNT_dec(cx->blk_sub.cv);
2147 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2148 LEAVE_SCOPE(oldsave);
2150 /* Now do some callish stuff. */
2153 #ifdef PERL_XSUB_OLDSTYLE
2154 if (CvOLDSTYLE(cv)) {
2155 I32 (*fp3)(int,int,int);
2160 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2161 items = (*fp3)(CvXSUBANY(cv).any_i32,
2162 mark - PL_stack_base + 1,
2164 SP = PL_stack_base + items;
2167 #endif /* PERL_XSUB_OLDSTYLE */
2172 PL_stack_sp--; /* There is no cv arg. */
2173 /* Push a mark for the start of arglist */
2175 (void)(*CvXSUB(cv))(aTHX_ cv);
2176 /* Pop the current context like a decent sub should */
2177 POPBLOCK(cx, PL_curpm);
2178 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2181 return pop_return();
2184 AV* padlist = CvPADLIST(cv);
2185 if (CxTYPE(cx) == CXt_EVAL) {
2186 PL_in_eval = cx->blk_eval.old_in_eval;
2187 PL_eval_root = cx->blk_eval.old_eval_root;
2188 cx->cx_type = CXt_SUB;
2189 cx->blk_sub.hasargs = 0;
2191 cx->blk_sub.cv = cv;
2192 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2195 if (CvDEPTH(cv) < 2)
2196 (void)SvREFCNT_inc(cv);
2198 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2199 sub_crush_depth(cv);
2200 pad_push(padlist, CvDEPTH(cv), cx->blk_sub.hasargs);
2202 PAD_SET_CUR(padlist, CvDEPTH(cv));
2203 if (cx->blk_sub.hasargs)
2205 AV* av = (AV*)PAD_SVl(0);
2208 cx->blk_sub.savearray = GvAV(PL_defgv);
2209 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2210 CX_CURPAD_SAVE(cx->blk_sub);
2211 cx->blk_sub.argarray = av;
2214 if (items >= AvMAX(av) + 1) {
2216 if (AvARRAY(av) != ary) {
2217 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2218 SvPVX(av) = (char*)ary;
2220 if (items >= AvMAX(av) + 1) {
2221 AvMAX(av) = items - 1;
2222 Renew(ary,items+1,SV*);
2224 SvPVX(av) = (char*)ary;
2227 Copy(mark,AvARRAY(av),items,SV*);
2228 AvFILLp(av) = items - 1;
2229 assert(!AvREAL(av));
2236 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2238 * We do not care about using sv to call CV;
2239 * it's for informational purposes only.
2241 SV *sv = GvSV(PL_DBsub);
2244 if (PERLDB_SUB_NN) {
2245 SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
2248 gv_efullname3(sv, CvGV(cv), Nullch);
2251 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2252 PUSHMARK( PL_stack_sp );
2253 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2257 RETURNOP(CvSTART(cv));
2261 label = SvPV(sv,n_a);
2262 if (!(do_dump || *label))
2263 DIE(aTHX_ must_have_label);
2266 else if (PL_op->op_flags & OPf_SPECIAL) {
2268 DIE(aTHX_ must_have_label);
2271 label = cPVOP->op_pv;
2273 if (label && *label) {
2275 bool leaving_eval = FALSE;
2276 PERL_CONTEXT *last_eval_cx = 0;
2280 PL_lastgotoprobe = 0;
2282 for (ix = cxstack_ix; ix >= 0; ix--) {
2284 switch (CxTYPE(cx)) {
2286 leaving_eval = TRUE;
2287 if (CxREALEVAL(cx)) {
2288 gotoprobe = (last_eval_cx ?
2289 last_eval_cx->blk_eval.old_eval_root :
2294 /* else fall through */
2296 gotoprobe = cx->blk_oldcop->op_sibling;
2302 gotoprobe = cx->blk_oldcop->op_sibling;
2304 gotoprobe = PL_main_root;
2307 if (CvDEPTH(cx->blk_sub.cv)) {
2308 gotoprobe = CvROOT(cx->blk_sub.cv);
2314 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2317 DIE(aTHX_ "panic: goto");
2318 gotoprobe = PL_main_root;
2322 retop = dofindlabel(gotoprobe, label,
2323 enterops, enterops + GOTO_DEPTH);
2327 PL_lastgotoprobe = gotoprobe;
2330 DIE(aTHX_ "Can't find label %s", label);
2332 /* if we're leaving an eval, check before we pop any frames
2333 that we're not going to punt, otherwise the error
2336 if (leaving_eval && *enterops && enterops[1]) {
2338 for (i = 1; enterops[i]; i++)
2339 if (enterops[i]->op_type == OP_ENTERITER)
2340 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2343 /* pop unwanted frames */
2345 if (ix < cxstack_ix) {
2352 oldsave = PL_scopestack[PL_scopestack_ix];
2353 LEAVE_SCOPE(oldsave);
2356 /* push wanted frames */
2358 if (*enterops && enterops[1]) {
2360 for (ix = 1; enterops[ix]; ix++) {
2361 PL_op = enterops[ix];
2362 /* Eventually we may want to stack the needed arguments
2363 * for each op. For now, we punt on the hard ones. */
2364 if (PL_op->op_type == OP_ENTERITER)
2365 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2366 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2374 if (!retop) retop = PL_main_start;
2376 PL_restartop = retop;
2377 PL_do_undump = TRUE;
2381 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2382 PL_do_undump = FALSE;
2398 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2400 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2403 PL_exit_flags |= PERL_EXIT_EXPECTED;
2405 PUSHs(&PL_sv_undef);
2413 NV value = SvNVx(GvSV(cCOP->cop_gv));
2414 register I32 match = I_32(value);
2417 if (((NV)match) > value)
2418 --match; /* was fractional--truncate other way */
2420 match -= cCOP->uop.scop.scop_offset;
2423 else if (match > cCOP->uop.scop.scop_max)
2424 match = cCOP->uop.scop.scop_max;
2425 PL_op = cCOP->uop.scop.scop_next[match];
2435 PL_op = PL_op->op_next; /* can't assume anything */
2438 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2439 match -= cCOP->uop.scop.scop_offset;
2442 else if (match > cCOP->uop.scop.scop_max)
2443 match = cCOP->uop.scop.scop_max;
2444 PL_op = cCOP->uop.scop.scop_next[match];
2453 S_save_lines(pTHX_ AV *array, SV *sv)
2455 register char *s = SvPVX(sv);
2456 register char *send = SvPVX(sv) + SvCUR(sv);
2458 register I32 line = 1;
2460 while (s && s < send) {
2461 SV *tmpstr = NEWSV(85,0);
2463 sv_upgrade(tmpstr, SVt_PVMG);
2464 t = strchr(s, '\n');
2470 sv_setpvn(tmpstr, s, t - s);
2471 av_store(array, line++, tmpstr);
2476 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2478 S_docatch_body(pTHX_ va_list args)
2480 return docatch_body();
2485 S_docatch_body(pTHX)
2492 S_docatch(pTHX_ OP *o)
2497 volatile PERL_SI *cursi = PL_curstackinfo;
2501 assert(CATCH_GET == TRUE);
2505 /* Normally, the leavetry at the end of this block of ops will
2506 * pop an op off the return stack and continue there. By setting
2507 * the op to Nullop, we force an exit from the inner runops()
2510 retop = pop_return();
2511 push_return(Nullop);
2513 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2515 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2521 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2527 /* die caught by an inner eval - continue inner loop */
2528 if (PL_restartop && cursi == PL_curstackinfo) {
2529 PL_op = PL_restartop;
2533 /* a die in this eval - continue in outer loop */
2549 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, PAD** padp)
2550 /* sv Text to convert to OP tree. */
2551 /* startop op_free() this to undo. */
2552 /* code Short string id of the caller. */
2554 dSP; /* Make POPBLOCK work. */
2557 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2561 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2562 char *tmpbuf = tbuf;
2565 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2570 /* switch to eval mode */
2572 if (PL_curcop == &PL_compiling) {
2573 SAVECOPSTASH_FREE(&PL_compiling);
2574 CopSTASH_set(&PL_compiling, PL_curstash);
2576 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2577 SV *sv = sv_newmortal();
2578 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2579 code, (unsigned long)++PL_evalseq,
2580 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2584 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2585 SAVECOPFILE_FREE(&PL_compiling);
2586 CopFILE_set(&PL_compiling, tmpbuf+2);
2587 SAVECOPLINE(&PL_compiling);
2588 CopLINE_set(&PL_compiling, 1);
2589 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2590 deleting the eval's FILEGV from the stash before gv_check() runs
2591 (i.e. before run-time proper). To work around the coredump that
2592 ensues, we always turn GvMULTI_on for any globals that were
2593 introduced within evals. See force_ident(). GSAR 96-10-12 */
2594 safestr = savepv(tmpbuf);
2595 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2597 #ifdef OP_IN_REGISTER
2602 PL_hints &= HINT_UTF8;
2604 /* we get here either during compilation, or via pp_regcomp at runtime */
2605 runtime = PL_op && (PL_op->op_type == OP_REGCOMP);
2607 runcv = find_runcv(NULL);
2610 PL_op->op_type = OP_ENTEREVAL;
2611 PL_op->op_flags = 0; /* Avoid uninit warning. */
2612 PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2613 PUSHEVAL(cx, 0, Nullgv);
2616 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2618 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2619 POPBLOCK(cx,PL_curpm);
2622 (*startop)->op_type = OP_NULL;
2623 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2625 /* XXX DAPM do this properly one year */
2626 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2628 if (PL_curcop == &PL_compiling)
2629 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2630 #ifdef OP_IN_REGISTER
2638 =for apidoc find_runcv
2640 Locate the CV corresponding to the currently executing sub or eval.
2641 If db_seqp is non_null, skip CVs that are in the DB package and populate
2642 *db_seqp with the cop sequence number at the point that the DB:: code was
2643 entered. (allows debuggers to eval in the scope of the breakpoint rather
2644 than in in the scope of the debuger itself).
2650 Perl_find_runcv(pTHX_ U32 *db_seqp)
2657 *db_seqp = PL_curcop->cop_seq;
2658 for (si = PL_curstackinfo; si; si = si->si_prev) {
2659 for (ix = si->si_cxix; ix >= 0; ix--) {
2660 cx = &(si->si_cxstack[ix]);
2661 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2662 CV *cv = cx->blk_sub.cv;
2663 /* skip DB:: code */
2664 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2665 *db_seqp = cx->blk_oldcop->cop_seq;
2670 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2678 /* Compile a require/do, an eval '', or a /(?{...})/.
2679 * In the last case, startop is non-null, and contains the address of
2680 * a pointer that should be set to the just-compiled code.
2681 * outside is the lexically enclosing CV (if any) that invoked us.
2684 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2686 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2691 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2692 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2697 SAVESPTR(PL_compcv);
2698 PL_compcv = (CV*)NEWSV(1104,0);
2699 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2700 CvEVAL_on(PL_compcv);
2701 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2702 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2704 CvOUTSIDE_SEQ(PL_compcv) = seq;
2705 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2707 /* set up a scratch pad */
2709 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2712 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2714 /* make sure we compile in the right package */
2716 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2717 SAVESPTR(PL_curstash);
2718 PL_curstash = CopSTASH(PL_curcop);
2720 SAVESPTR(PL_beginav);
2721 PL_beginav = newAV();
2722 SAVEFREESV(PL_beginav);
2723 SAVEI32(PL_error_count);
2725 /* try to compile it */
2727 PL_eval_root = Nullop;
2729 PL_curcop = &PL_compiling;
2730 PL_curcop->cop_arybase = 0;
2731 if (saveop && saveop->op_flags & OPf_SPECIAL)
2732 PL_in_eval |= EVAL_KEEPERR;
2735 if (yyparse() || PL_error_count || !PL_eval_root) {
2739 I32 optype = 0; /* Might be reset by POPEVAL. */
2744 op_free(PL_eval_root);
2745 PL_eval_root = Nullop;
2747 SP = PL_stack_base + POPMARK; /* pop original mark */
2749 POPBLOCK(cx,PL_curpm);
2755 if (optype == OP_REQUIRE) {
2756 char* msg = SvPVx(ERRSV, n_a);
2757 DIE(aTHX_ "%sCompilation failed in require",
2758 *msg ? msg : "Unknown error\n");
2761 char* msg = SvPVx(ERRSV, n_a);
2763 POPBLOCK(cx,PL_curpm);
2765 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2766 (*msg ? msg : "Unknown error\n"));
2769 char* msg = SvPVx(ERRSV, n_a);
2771 sv_setpv(ERRSV, "Compilation error");
2776 CopLINE_set(&PL_compiling, 0);
2778 *startop = PL_eval_root;
2780 SAVEFREEOP(PL_eval_root);
2782 scalarvoid(PL_eval_root);
2783 else if (gimme & G_ARRAY)
2786 scalar(PL_eval_root);
2788 DEBUG_x(dump_eval());
2790 /* Register with debugger: */
2791 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2792 CV *cv = get_cv("DB::postponed", FALSE);
2796 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2798 call_sv((SV*)cv, G_DISCARD);
2802 /* compiled okay, so do it */
2804 CvDEPTH(PL_compcv) = 1;
2805 SP = PL_stack_base + POPMARK; /* pop original mark */
2806 PL_op = saveop; /* The caller may need it. */
2807 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2809 RETURNOP(PL_eval_start);
2813 S_doopen_pmc(pTHX_ const char *name, const char *mode)
2815 STRLEN namelen = strlen(name);
2818 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2819 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2820 char *pmc = SvPV_nolen(pmcsv);
2823 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2824 fp = PerlIO_open(name, mode);
2827 if (PerlLIO_stat(name, &pmstat) < 0 ||
2828 pmstat.st_mtime < pmcstat.st_mtime)
2830 fp = PerlIO_open(pmc, mode);
2833 fp = PerlIO_open(name, mode);
2836 SvREFCNT_dec(pmcsv);
2839 fp = PerlIO_open(name, mode);
2847 register PERL_CONTEXT *cx;
2851 char *tryname = Nullch;
2852 SV *namesv = Nullsv;
2854 I32 gimme = GIMME_V;
2855 PerlIO *tryrsfp = 0;
2857 int filter_has_file = 0;
2858 GV *filter_child_proc = 0;
2859 SV *filter_state = 0;
2866 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
2867 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
2868 UV rev = 0, ver = 0, sver = 0;
2870 U8 *s = (U8*)SvPVX(sv);
2871 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2873 rev = utf8n_to_uvchr(s, end - s, &len, 0);
2876 ver = utf8n_to_uvchr(s, end - s, &len, 0);
2879 sver = utf8n_to_uvchr(s, end - s, &len, 0);
2882 if (PERL_REVISION < rev
2883 || (PERL_REVISION == rev
2884 && (PERL_VERSION < ver
2885 || (PERL_VERSION == ver
2886 && PERL_SUBVERSION < sver))))
2888 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
2889 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
2890 PERL_VERSION, PERL_SUBVERSION);
2892 if (ckWARN(WARN_PORTABLE))
2893 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
2894 "v-string in use/require non-portable");
2897 else if (!SvPOKp(sv)) { /* require 5.005_03 */
2898 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
2899 + ((NV)PERL_SUBVERSION/(NV)1000000)
2900 + 0.00000099 < SvNV(sv))
2904 NV nver = (nrev - rev) * 1000;
2905 UV ver = (UV)(nver + 0.0009);
2906 NV nsver = (nver - ver) * 1000;
2907 UV sver = (UV)(nsver + 0.0009);
2909 /* help out with the "use 5.6" confusion */
2910 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
2911 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
2912 " (did you mean v%"UVuf".%03"UVuf"?)--"
2913 "this is only v%d.%d.%d, stopped",
2914 rev, ver, sver, rev, ver/100,
2915 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
2918 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
2919 "this is only v%d.%d.%d, stopped",
2920 rev, ver, sver, PERL_REVISION, PERL_VERSION,
2927 name = SvPV(sv, len);
2928 if (!(name && len > 0 && *name))
2929 DIE(aTHX_ "Null filename used");
2930 TAINT_PROPER("require");
2931 if (PL_op->op_type == OP_REQUIRE &&
2932 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
2933 *svp != &PL_sv_undef)
2936 /* prepare to compile file */
2938 if (path_is_absolute(name)) {
2940 tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
2942 #ifdef MACOS_TRADITIONAL
2946 MacPerl_CanonDir(name, newname, 1);
2947 if (path_is_absolute(newname)) {
2949 tryrsfp = doopen_pmc(newname,PERL_SCRIPT_MODE);
2954 AV *ar = GvAVn(PL_incgv);
2958 if ((unixname = tounixspec(name, Nullch)) != Nullch)
2961 namesv = NEWSV(806, 0);
2962 for (i = 0; i <= AvFILL(ar); i++) {
2963 SV *dirsv = *av_fetch(ar, i, TRUE);
2969 if (SvTYPE(SvRV(loader)) == SVt_PVAV
2970 && !sv_isobject(loader))
2972 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
2975 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
2976 PTR2UV(SvRV(dirsv)), name);
2977 tryname = SvPVX(namesv);
2988 if (sv_isobject(loader))
2989 count = call_method("INC", G_ARRAY);
2991 count = call_sv(loader, G_ARRAY);
3001 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3005 if (SvTYPE(arg) == SVt_PVGV) {
3006 IO *io = GvIO((GV *)arg);
3011 tryrsfp = IoIFP(io);
3012 if (IoTYPE(io) == IoTYPE_PIPE) {
3013 /* reading from a child process doesn't
3014 nest -- when returning from reading
3015 the inner module, the outer one is
3016 unreadable (closed?) I've tried to
3017 save the gv to manage the lifespan of
3018 the pipe, but this didn't help. XXX */
3019 filter_child_proc = (GV *)arg;
3020 (void)SvREFCNT_inc(filter_child_proc);
3023 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3024 PerlIO_close(IoOFP(io));
3036 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3038 (void)SvREFCNT_inc(filter_sub);
3041 filter_state = SP[i];
3042 (void)SvREFCNT_inc(filter_state);
3046 tryrsfp = PerlIO_open("/dev/null",
3061 filter_has_file = 0;
3062 if (filter_child_proc) {
3063 SvREFCNT_dec(filter_child_proc);
3064 filter_child_proc = 0;
3067 SvREFCNT_dec(filter_state);
3071 SvREFCNT_dec(filter_sub);
3076 if (!path_is_absolute(name)
3077 #ifdef MACOS_TRADITIONAL
3078 /* We consider paths of the form :a:b ambiguous and interpret them first
3079 as global then as local
3081 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3084 char *dir = SvPVx(dirsv, n_a);
3085 #ifdef MACOS_TRADITIONAL
3089 MacPerl_CanonDir(name, buf2, 1);
3090 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3094 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3096 sv_setpv(namesv, unixdir);
3097 sv_catpv(namesv, unixname);
3099 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3102 TAINT_PROPER("require");
3103 tryname = SvPVX(namesv);
3104 tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
3106 if (tryname[0] == '.' && tryname[1] == '/')
3115 SAVECOPFILE_FREE(&PL_compiling);
3116 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3117 SvREFCNT_dec(namesv);
3119 if (PL_op->op_type == OP_REQUIRE) {
3120 char *msgstr = name;
3121 if (namesv) { /* did we lookup @INC? */
3122 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3123 SV *dirmsgsv = NEWSV(0, 0);
3124 AV *ar = GvAVn(PL_incgv);
3126 sv_catpvn(msg, " in @INC", 8);
3127 if (instr(SvPVX(msg), ".h "))
3128 sv_catpv(msg, " (change .h to .ph maybe?)");
3129 if (instr(SvPVX(msg), ".ph "))
3130 sv_catpv(msg, " (did you run h2ph?)");
3131 sv_catpv(msg, " (@INC contains:");
3132 for (i = 0; i <= AvFILL(ar); i++) {
3133 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3134 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3135 sv_catsv(msg, dirmsgsv);
3137 sv_catpvn(msg, ")", 1);
3138 SvREFCNT_dec(dirmsgsv);
3139 msgstr = SvPV_nolen(msg);
3141 DIE(aTHX_ "Can't locate %s", msgstr);
3147 SETERRNO(0, SS_NORMAL);
3149 /* Assume success here to prevent recursive requirement. */
3151 /* Check whether a hook in @INC has already filled %INC */
3152 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3153 (void)hv_store(GvHVn(PL_incgv), name, len,
3154 (hook_sv ? SvREFCNT_inc(hook_sv)
3155 : newSVpv(CopFILE(&PL_compiling), 0)),
3161 lex_start(sv_2mortal(newSVpvn("",0)));
3162 SAVEGENERICSV(PL_rsfp_filters);
3163 PL_rsfp_filters = Nullav;
3168 SAVESPTR(PL_compiling.cop_warnings);
3169 if (PL_dowarn & G_WARN_ALL_ON)
3170 PL_compiling.cop_warnings = pWARN_ALL ;
3171 else if (PL_dowarn & G_WARN_ALL_OFF)
3172 PL_compiling.cop_warnings = pWARN_NONE ;
3173 else if (PL_taint_warn)
3174 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3176 PL_compiling.cop_warnings = pWARN_STD ;
3177 SAVESPTR(PL_compiling.cop_io);
3178 PL_compiling.cop_io = Nullsv;
3180 if (filter_sub || filter_child_proc) {
3181 SV *datasv = filter_add(run_user_filter, Nullsv);
3182 IoLINES(datasv) = filter_has_file;
3183 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3184 IoTOP_GV(datasv) = (GV *)filter_state;
3185 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3188 /* switch to eval mode */
3189 push_return(PL_op->op_next);
3190 PUSHBLOCK(cx, CXt_EVAL, SP);
3191 PUSHEVAL(cx, name, Nullgv);
3193 SAVECOPLINE(&PL_compiling);
3194 CopLINE_set(&PL_compiling, 0);
3198 /* Store and reset encoding. */
3199 encoding = PL_encoding;
3200 PL_encoding = Nullsv;
3202 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3204 /* Restore encoding. */
3205 PL_encoding = encoding;
3212 return pp_require();
3218 register PERL_CONTEXT *cx;
3220 I32 gimme = GIMME_V, was = PL_sub_generation;
3221 char tbuf[TYPE_DIGITS(long) + 12];
3222 char *tmpbuf = tbuf;
3231 TAINT_PROPER("eval");
3237 /* switch to eval mode */
3239 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3240 SV *sv = sv_newmortal();
3241 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3242 (unsigned long)++PL_evalseq,
3243 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3247 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3248 SAVECOPFILE_FREE(&PL_compiling);
3249 CopFILE_set(&PL_compiling, tmpbuf+2);
3250 SAVECOPLINE(&PL_compiling);
3251 CopLINE_set(&PL_compiling, 1);
3252 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3253 deleting the eval's FILEGV from the stash before gv_check() runs
3254 (i.e. before run-time proper). To work around the coredump that
3255 ensues, we always turn GvMULTI_on for any globals that were
3256 introduced within evals. See force_ident(). GSAR 96-10-12 */
3257 safestr = savepv(tmpbuf);
3258 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3260 PL_hints = PL_op->op_targ;
3261 SAVESPTR(PL_compiling.cop_warnings);
3262 if (specialWARN(PL_curcop->cop_warnings))
3263 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3265 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3266 SAVEFREESV(PL_compiling.cop_warnings);
3268 SAVESPTR(PL_compiling.cop_io);
3269 if (specialCopIO(PL_curcop->cop_io))
3270 PL_compiling.cop_io = PL_curcop->cop_io;
3272 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3273 SAVEFREESV(PL_compiling.cop_io);
3275 /* special case: an eval '' executed within the DB package gets lexically
3276 * placed in the first non-DB CV rather than the current CV - this
3277 * allows the debugger to execute code, find lexicals etc, in the
3278 * scope of the code being debugged. Passing &seq gets find_runcv
3279 * to do the dirty work for us */
3280 runcv = find_runcv(&seq);
3282 push_return(PL_op->op_next);
3283 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3284 PUSHEVAL(cx, 0, Nullgv);
3286 /* prepare to compile string */
3288 if (PERLDB_LINE && PL_curstash != PL_debstash)
3289 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3291 ret = doeval(gimme, NULL, runcv, seq);
3292 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3293 && ret != PL_op->op_next) { /* Successive compilation. */
3294 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3296 return DOCATCH(ret);
3306 register PERL_CONTEXT *cx;
3308 U8 save_flags = PL_op -> op_flags;
3313 retop = pop_return();
3316 if (gimme == G_VOID)
3318 else if (gimme == G_SCALAR) {
3321 if (SvFLAGS(TOPs) & SVs_TEMP)
3324 *MARK = sv_mortalcopy(TOPs);
3328 *MARK = &PL_sv_undef;
3333 /* in case LEAVE wipes old return values */
3334 for (mark = newsp + 1; mark <= SP; mark++) {
3335 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3336 *mark = sv_mortalcopy(*mark);
3337 TAINT_NOT; /* Each item is independent */
3341 PL_curpm = newpm; /* Don't pop $1 et al till now */
3344 assert(CvDEPTH(PL_compcv) == 1);
3346 CvDEPTH(PL_compcv) = 0;
3349 if (optype == OP_REQUIRE &&
3350 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3352 /* Unassume the success we assumed earlier. */
3353 SV *nsv = cx->blk_eval.old_namesv;
3354 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3355 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3356 /* die_where() did LEAVE, or we won't be here */
3360 if (!(save_flags & OPf_SPECIAL))
3370 register PERL_CONTEXT *cx;
3371 I32 gimme = GIMME_V;
3376 push_return(cLOGOP->op_other->op_next);
3377 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3380 PL_in_eval = EVAL_INEVAL;
3383 return DOCATCH(PL_op->op_next);
3394 register PERL_CONTEXT *cx;
3399 retop = pop_return();
3402 if (gimme == G_VOID)
3404 else if (gimme == G_SCALAR) {
3407 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3410 *MARK = sv_mortalcopy(TOPs);
3414 *MARK = &PL_sv_undef;
3419 /* in case LEAVE wipes old return values */
3420 for (mark = newsp + 1; mark <= SP; mark++) {
3421 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3422 *mark = sv_mortalcopy(*mark);
3423 TAINT_NOT; /* Each item is independent */
3427 PL_curpm = newpm; /* Don't pop $1 et al till now */
3435 S_doparseform(pTHX_ SV *sv)
3438 register char *s = SvPV_force(sv, len);
3439 register char *send = s + len;
3440 register char *base = Nullch;
3441 register I32 skipspaces = 0;
3442 bool noblank = FALSE;
3443 bool repeat = FALSE;
3444 bool postspace = FALSE;
3452 Perl_croak(aTHX_ "Null picture in formline");
3454 New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
3459 *fpc++ = FF_LINEMARK;
3460 noblank = repeat = FALSE;
3478 case ' ': case '\t':
3489 *fpc++ = FF_LITERAL;
3497 *fpc++ = (U16)skipspaces;
3501 *fpc++ = FF_NEWLINE;
3505 arg = fpc - linepc + 1;
3512 *fpc++ = FF_LINEMARK;
3513 noblank = repeat = FALSE;
3522 ischop = s[-1] == '^';
3528 arg = (s - base) - 1;
3530 *fpc++ = FF_LITERAL;
3539 *fpc++ = FF_LINEGLOB;
3541 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3542 arg = ischop ? 512 : 0;
3552 arg |= 256 + (s - f);
3554 *fpc++ = s - base; /* fieldsize for FETCH */
3555 *fpc++ = FF_DECIMAL;
3558 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3559 arg = ischop ? 512 : 0;
3561 s++; /* skip the '0' first */
3570 arg |= 256 + (s - f);
3572 *fpc++ = s - base; /* fieldsize for FETCH */
3573 *fpc++ = FF_0DECIMAL;
3578 bool ismore = FALSE;
3581 while (*++s == '>') ;
3582 prespace = FF_SPACE;
3584 else if (*s == '|') {
3585 while (*++s == '|') ;
3586 prespace = FF_HALFSPACE;
3591 while (*++s == '<') ;
3594 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3598 *fpc++ = s - base; /* fieldsize for FETCH */
3600 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3603 *fpc++ = (U16)prespace;
3618 { /* need to jump to the next word */
3620 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3621 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
3622 s = SvPVX(sv) + SvCUR(sv) + z;
3624 Copy(fops, s, arg, U16);
3626 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3631 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3633 SV *datasv = FILTER_DATA(idx);
3634 int filter_has_file = IoLINES(datasv);
3635 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3636 SV *filter_state = (SV *)IoTOP_GV(datasv);
3637 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3640 /* I was having segfault trouble under Linux 2.2.5 after a
3641 parse error occured. (Had to hack around it with a test
3642 for PL_error_count == 0.) Solaris doesn't segfault --
3643 not sure where the trouble is yet. XXX */
3645 if (filter_has_file) {
3646 len = FILTER_READ(idx+1, buf_sv, maxlen);
3649 if (filter_sub && len >= 0) {
3660 PUSHs(sv_2mortal(newSViv(maxlen)));
3662 PUSHs(filter_state);
3665 count = call_sv(filter_sub, G_SCALAR);
3681 IoLINES(datasv) = 0;
3682 if (filter_child_proc) {
3683 SvREFCNT_dec(filter_child_proc);
3684 IoFMT_GV(datasv) = Nullgv;
3687 SvREFCNT_dec(filter_state);
3688 IoTOP_GV(datasv) = Nullgv;
3691 SvREFCNT_dec(filter_sub);
3692 IoBOTTOM_GV(datasv) = Nullgv;
3694 filter_del(run_user_filter);
3700 /* perhaps someone can come up with a better name for
3701 this? it is not really "absolute", per se ... */
3703 S_path_is_absolute(pTHX_ char *name)
3705 if (PERL_FILE_IS_ABSOLUTE(name)
3706 #ifdef MACOS_TRADITIONAL
3709 || (*name == '.' && (name[1] == '/' ||
3710 (name[1] == '.' && name[2] == '/'))))