3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Now far ahead the Road has gone,
13 * And I must follow, if I can,
14 * Pursuing it with eager feet,
15 * Until it joins some larger way
16 * Where many paths and errands meet.
17 * And whither then? I cannot say.
21 #define PERL_IN_PP_CTL_C
25 #define WORD_ALIGN sizeof(U32)
28 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
30 static I32 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen);
38 cxix = dopoptosub(cxstack_ix);
42 switch (cxstack[cxix].blk_gimme) {
59 /* XXXX Should store the old value to allow for tie/overload - and
60 restore in regcomp, where marked with XXXX. */
69 register PMOP *pm = (PMOP*)cLOGOP->op_other;
73 MAGIC *mg = Null(MAGIC*);
77 /* prevent recompiling under /o and ithreads. */
78 #if defined(USE_ITHREADS)
79 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm))
84 SV *sv = SvRV(tmpstr);
86 mg = mg_find(sv, PERL_MAGIC_qr);
89 regexp *re = (regexp *)mg->mg_obj;
90 ReREFCNT_dec(PM_GETRE(pm));
91 PM_SETRE(pm, ReREFCNT_inc(re));
94 t = SvPV(tmpstr, len);
96 /* Check against the last compiled regexp. */
97 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
98 PM_GETRE(pm)->prelen != (I32)len ||
99 memNE(PM_GETRE(pm)->precomp, t, len))
102 ReREFCNT_dec(PM_GETRE(pm));
103 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
105 if (PL_op->op_flags & OPf_SPECIAL)
106 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
108 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
110 pm->op_pmdynflags |= PMdf_DYN_UTF8;
112 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
113 if (pm->op_pmdynflags & PMdf_UTF8)
114 t = (char*)bytes_to_utf8((U8*)t, &len);
116 PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
117 if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
119 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
120 inside tie/overload accessors. */
124 #ifndef INCOMPLETE_TAINTS
127 pm->op_pmdynflags |= PMdf_TAINTED;
129 pm->op_pmdynflags &= ~PMdf_TAINTED;
133 if (!PM_GETRE(pm)->prelen && PL_curpm)
135 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
136 pm->op_pmflags |= PMf_WHITE;
138 pm->op_pmflags &= ~PMf_WHITE;
140 /* XXX runtime compiled output needs to move to the pad */
141 if (pm->op_pmflags & PMf_KEEP) {
142 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
143 #if !defined(USE_ITHREADS)
144 /* XXX can't change the optree at runtime either */
145 cLOGOP->op_first->op_next = PL_op->op_next;
154 register PMOP *pm = (PMOP*) cLOGOP->op_other;
155 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
156 register SV *dstr = cx->sb_dstr;
157 register char *s = cx->sb_s;
158 register char *m = cx->sb_m;
159 char *orig = cx->sb_orig;
160 register REGEXP *rx = cx->sb_rx;
162 REGEXP *old = PM_GETRE(pm);
169 rxres_restore(&cx->sb_rxres, rx);
170 RX_MATCH_UTF8_set(rx, SvUTF8(cx->sb_targ));
172 if (cx->sb_iters++) {
173 I32 saviters = cx->sb_iters;
174 if (cx->sb_iters > cx->sb_maxiters)
175 DIE(aTHX_ "Substitution loop");
177 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
178 cx->sb_rxtainted |= 2;
179 sv_catsv(dstr, POPs);
182 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
183 s == m, cx->sb_targ, NULL,
184 ((cx->sb_rflags & REXEC_COPY_STR)
185 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
186 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
188 SV *targ = cx->sb_targ;
190 if (DO_UTF8(dstr) && !SvUTF8(targ))
191 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
193 sv_catpvn(dstr, s, cx->sb_strend - s);
194 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
196 #ifdef PERL_COPY_ON_WRITE
198 sv_force_normal_flags(targ, SV_COW_DROP_PV);
202 (void)SvOOK_off(targ);
204 Safefree(SvPVX(targ));
206 SvPVX(targ) = SvPVX(dstr);
207 SvCUR_set(targ, SvCUR(dstr));
208 SvLEN_set(targ, SvLEN(dstr));
214 TAINT_IF(cx->sb_rxtainted & 1);
215 PUSHs(sv_2mortal(newSViv(saviters - 1)));
217 (void)SvPOK_only_UTF8(targ);
218 TAINT_IF(cx->sb_rxtainted);
222 LEAVE_SCOPE(cx->sb_oldsave);
225 RETURNOP(pm->op_next);
227 cx->sb_iters = saviters;
229 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
232 cx->sb_orig = orig = rx->subbeg;
234 cx->sb_strend = s + (cx->sb_strend - m);
236 cx->sb_m = m = rx->startp[0] + orig;
238 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
239 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
241 sv_catpvn(dstr, s, m-s);
243 cx->sb_s = rx->endp[0] + orig;
244 { /* Update the pos() information. */
245 SV *sv = cx->sb_targ;
248 if (SvTYPE(sv) < SVt_PVMG)
249 (void)SvUPGRADE(sv, SVt_PVMG);
250 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
251 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
252 mg = mg_find(sv, PERL_MAGIC_regex_global);
261 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
262 rxres_save(&cx->sb_rxres, rx);
263 RETURNOP(pm->op_pmreplstart);
267 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
272 if (!p || p[1] < rx->nparens) {
273 #ifdef PERL_COPY_ON_WRITE
274 i = 7 + rx->nparens * 2;
276 i = 6 + rx->nparens * 2;
285 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
286 RX_MATCH_COPIED_off(rx);
288 #ifdef PERL_COPY_ON_WRITE
289 *p++ = PTR2UV(rx->saved_copy);
290 rx->saved_copy = Nullsv;
295 *p++ = PTR2UV(rx->subbeg);
296 *p++ = (UV)rx->sublen;
297 for (i = 0; i <= rx->nparens; ++i) {
298 *p++ = (UV)rx->startp[i];
299 *p++ = (UV)rx->endp[i];
304 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
309 RX_MATCH_COPY_FREE(rx);
310 RX_MATCH_COPIED_set(rx, *p);
313 #ifdef PERL_COPY_ON_WRITE
315 SvREFCNT_dec (rx->saved_copy);
316 rx->saved_copy = INT2PTR(SV*,*p);
322 rx->subbeg = INT2PTR(char*,*p++);
323 rx->sublen = (I32)(*p++);
324 for (i = 0; i <= rx->nparens; ++i) {
325 rx->startp[i] = (I32)(*p++);
326 rx->endp[i] = (I32)(*p++);
331 Perl_rxres_free(pTHX_ void **rsp)
336 Safefree(INT2PTR(char*,*p));
337 #ifdef PERL_COPY_ON_WRITE
339 SvREFCNT_dec (INT2PTR(SV*,p[1]));
349 dSP; dMARK; dORIGMARK;
350 register SV *tmpForm = *++MARK;
357 register SV *sv = Nullsv;
362 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
363 char *chophere = Nullch;
364 char *linemark = Nullch;
366 bool gotsome = FALSE;
368 STRLEN fudge = SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1;
369 bool item_is_utf8 = FALSE;
370 bool targ_is_utf8 = FALSE;
376 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
377 if (SvREADONLY(tmpForm)) {
378 SvREADONLY_off(tmpForm);
379 parseres = doparseform(tmpForm);
380 SvREADONLY_on(tmpForm);
383 parseres = doparseform(tmpForm);
387 SvPV_force(PL_formtarget, len);
388 if (DO_UTF8(PL_formtarget))
390 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
392 f = SvPV(tmpForm, len);
393 /* need to jump to the next word */
394 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
403 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
404 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
405 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
406 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
407 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
409 case FF_CHECKNL: name = "CHECKNL"; break;
410 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
411 case FF_SPACE: name = "SPACE"; break;
412 case FF_HALFSPACE: name = "HALFSPACE"; break;
413 case FF_ITEM: name = "ITEM"; break;
414 case FF_CHOP: name = "CHOP"; break;
415 case FF_LINEGLOB: name = "LINEGLOB"; break;
416 case FF_NEWLINE: name = "NEWLINE"; break;
417 case FF_MORE: name = "MORE"; break;
418 case FF_LINEMARK: name = "LINEMARK"; break;
419 case FF_END: name = "END"; break;
420 case FF_0DECIMAL: name = "0DECIMAL"; break;
421 case FF_LINESNGL: name = "LINESNGL"; break;
424 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
426 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
437 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
438 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
440 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
441 t = SvEND(PL_formtarget);
444 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
445 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
447 sv_utf8_upgrade(PL_formtarget);
448 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
449 t = SvEND(PL_formtarget);
469 if (ckWARN(WARN_SYNTAX))
470 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
475 item = s = SvPV(sv, len);
478 itemsize = sv_len_utf8(sv);
479 if (itemsize != (I32)len) {
481 if (itemsize > fieldsize) {
482 itemsize = fieldsize;
483 itembytes = itemsize;
484 sv_pos_u2b(sv, &itembytes, 0);
488 send = chophere = s + itembytes;
498 sv_pos_b2u(sv, &itemsize);
502 item_is_utf8 = FALSE;
503 if (itemsize > fieldsize)
504 itemsize = fieldsize;
505 send = chophere = s + itemsize;
517 item = s = SvPV(sv, len);
520 itemsize = sv_len_utf8(sv);
521 if (itemsize != (I32)len) {
523 if (itemsize <= fieldsize) {
524 send = chophere = s + itemsize;
536 itemsize = fieldsize;
537 itembytes = itemsize;
538 sv_pos_u2b(sv, &itembytes, 0);
539 send = chophere = s + itembytes;
540 while (s < send || (s == send && isSPACE(*s))) {
550 if (strchr(PL_chopset, *s))
555 itemsize = chophere - item;
556 sv_pos_b2u(sv, &itemsize);
562 item_is_utf8 = FALSE;
563 if (itemsize <= fieldsize) {
564 send = chophere = s + itemsize;
576 itemsize = fieldsize;
577 send = chophere = s + itemsize;
578 while (s < send || (s == send && isSPACE(*s))) {
588 if (strchr(PL_chopset, *s))
593 itemsize = chophere - item;
598 arg = fieldsize - itemsize;
607 arg = fieldsize - itemsize;
621 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
623 sv_utf8_upgrade(PL_formtarget);
624 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
625 t = SvEND(PL_formtarget);
629 if (UTF8_IS_CONTINUED(*s)) {
630 STRLEN skip = UTF8SKIP(s);
647 if ( !((*t++ = *s++) & ~31) )
653 if (targ_is_utf8 && !item_is_utf8) {
654 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
656 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
657 for (; t < SvEND(PL_formtarget); t++) {
670 int ch = *t++ = *s++;
673 if ( !((*t++ = *s++) & ~31) )
682 while (*s && isSPACE(*s))
696 item = s = SvPV(sv, len);
698 if ((item_is_utf8 = DO_UTF8(sv)))
699 itemsize = sv_len_utf8(sv);
701 bool chopped = FALSE;
704 chophere = s + itemsize;
720 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
722 SvUTF8_on(PL_formtarget);
724 SvCUR_set(sv, chophere - item);
725 sv_catsv(PL_formtarget, sv);
726 SvCUR_set(sv, itemsize);
728 sv_catsv(PL_formtarget, sv);
730 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
731 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
732 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
740 #if defined(USE_LONG_DOUBLE)
741 fmt = (arg & 256) ? "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl;
743 fmt = (arg & 256) ? "%#0*.*f" : "%0*.*f";
748 #if defined(USE_LONG_DOUBLE)
749 fmt = (arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl;
751 fmt = (arg & 256) ? "%#*.*f" : "%*.*f";
754 /* If the field is marked with ^ and the value is undefined,
756 if ((arg & 512) && !SvOK(sv)) {
764 /* overflow evidence */
765 if (num_overflow(value, fieldsize, arg)) {
771 /* Formats aren't yet marked for locales, so assume "yes". */
773 STORE_NUMERIC_STANDARD_SET_LOCAL();
774 sprintf(t, fmt, (int) fieldsize, (int) arg & 255, value);
775 RESTORE_NUMERIC_STANDARD();
782 while (t-- > linemark && *t == ' ') ;
790 if (arg) { /* repeat until fields exhausted? */
792 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
793 lines += FmLINES(PL_formtarget);
796 if (strnEQ(linemark, linemark - arg, arg))
797 DIE(aTHX_ "Runaway format");
800 SvUTF8_on(PL_formtarget);
801 FmLINES(PL_formtarget) = lines;
803 RETURNOP(cLISTOP->op_first);
816 while (*s && isSPACE(*s) && s < send)
820 arg = fieldsize - itemsize;
827 if (strnEQ(s," ",3)) {
828 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
839 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
841 SvUTF8_on(PL_formtarget);
842 FmLINES(PL_formtarget) += lines;
854 if (PL_stack_base + *PL_markstack_ptr == SP) {
856 if (GIMME_V == G_SCALAR)
857 XPUSHs(sv_2mortal(newSViv(0)));
858 RETURNOP(PL_op->op_next->op_next);
860 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
861 pp_pushmark(); /* push dst */
862 pp_pushmark(); /* push src */
863 ENTER; /* enter outer scope */
866 if (PL_op->op_private & OPpGREP_LEX)
867 SAVESPTR(PAD_SVl(PL_op->op_targ));
870 ENTER; /* enter inner scope */
873 src = PL_stack_base[*PL_markstack_ptr];
875 if (PL_op->op_private & OPpGREP_LEX)
876 PAD_SVl(PL_op->op_targ) = src;
881 if (PL_op->op_type == OP_MAPSTART)
882 pp_pushmark(); /* push top */
883 return ((LOGOP*)PL_op->op_next)->op_other;
888 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
895 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
901 /* first, move source pointer to the next item in the source list */
902 ++PL_markstack_ptr[-1];
904 /* if there are new items, push them into the destination list */
905 if (items && gimme != G_VOID) {
906 /* might need to make room back there first */
907 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
908 /* XXX this implementation is very pessimal because the stack
909 * is repeatedly extended for every set of items. Is possible
910 * to do this without any stack extension or copying at all
911 * by maintaining a separate list over which the map iterates
912 * (like foreach does). --gsar */
914 /* everything in the stack after the destination list moves
915 * towards the end the stack by the amount of room needed */
916 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
918 /* items to shift up (accounting for the moved source pointer) */
919 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
921 /* This optimization is by Ben Tilly and it does
922 * things differently from what Sarathy (gsar)
923 * is describing. The downside of this optimization is
924 * that leaves "holes" (uninitialized and hopefully unused areas)
925 * to the Perl stack, but on the other hand this
926 * shouldn't be a problem. If Sarathy's idea gets
927 * implemented, this optimization should become
928 * irrelevant. --jhi */
930 shift = count; /* Avoid shifting too often --Ben Tilly */
935 PL_markstack_ptr[-1] += shift;
936 *PL_markstack_ptr += shift;
940 /* copy the new items down to the destination list */
941 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
942 if (gimme == G_ARRAY) {
944 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
947 /* scalar context: we don't care about which values map returns
948 * (we use undef here). And so we certainly don't want to do mortal
949 * copies of meaningless values. */
950 while (items-- > 0) {
952 *dst-- = &PL_sv_undef;
956 LEAVE; /* exit inner scope */
959 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
961 (void)POPMARK; /* pop top */
962 LEAVE; /* exit outer scope */
963 (void)POPMARK; /* pop src */
964 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
965 (void)POPMARK; /* pop dst */
966 SP = PL_stack_base + POPMARK; /* pop original mark */
967 if (gimme == G_SCALAR) {
968 if (PL_op->op_private & OPpGREP_LEX) {
969 SV* sv = sv_newmortal();
978 else if (gimme == G_ARRAY)
985 ENTER; /* enter inner scope */
988 /* set $_ to the new source item */
989 src = PL_stack_base[PL_markstack_ptr[-1]];
991 if (PL_op->op_private & OPpGREP_LEX)
992 PAD_SVl(PL_op->op_targ) = src;
996 RETURNOP(cLOGOP->op_other);
1004 if (GIMME == G_ARRAY)
1006 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1007 return cLOGOP->op_other;
1016 if (GIMME == G_ARRAY) {
1017 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1021 SV *targ = PAD_SV(PL_op->op_targ);
1024 if (PL_op->op_private & OPpFLIP_LINENUM) {
1025 if (GvIO(PL_last_in_gv)) {
1026 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1029 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1030 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1036 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1037 if (PL_op->op_flags & OPf_SPECIAL) {
1045 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1054 /* This code tries to decide if "$left .. $right" should use the
1055 magical string increment, or if the range is numeric (we make
1056 an exception for .."0" [#18165]). AMS 20021031. */
1058 #define RANGE_IS_NUMERIC(left,right) ( \
1059 (!SvOK(left) && !SvOK(right)) || \
1060 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1061 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1062 (((!SvOK(left) && SvOK(right)) || (looks_like_number(left) && \
1063 SvPOKp(left) && *SvPVX(left) != '0')) && looks_like_number(right)))
1069 if (GIMME == G_ARRAY) {
1075 if (SvGMAGICAL(left))
1077 if (SvGMAGICAL(right))
1080 if (RANGE_IS_NUMERIC(left,right)) {
1081 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1082 DIE(aTHX_ "Range iterator outside integer range");
1093 sv = sv_2mortal(newSViv(i++));
1098 SV *final = sv_mortalcopy(right);
1100 char *tmps = SvPV(final, len);
1102 sv = sv_mortalcopy(left);
1104 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1106 if (strEQ(SvPVX(sv),tmps))
1108 sv = sv_2mortal(newSVsv(sv));
1115 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1119 if (PL_op->op_private & OPpFLIP_LINENUM) {
1120 if (GvIO(PL_last_in_gv)) {
1121 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1124 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1125 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1133 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1134 sv_catpv(targ, "E0");
1144 static char *context_name[] = {
1155 S_dopoptolabel(pTHX_ char *label)
1158 register PERL_CONTEXT *cx;
1160 for (i = cxstack_ix; i >= 0; i--) {
1162 switch (CxTYPE(cx)) {
1168 if (ckWARN(WARN_EXITING))
1169 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1170 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1171 if (CxTYPE(cx) == CXt_NULL)
1175 if (!cx->blk_loop.label ||
1176 strNE(label, cx->blk_loop.label) ) {
1177 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1178 (long)i, cx->blk_loop.label));
1181 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1189 Perl_dowantarray(pTHX)
1191 I32 gimme = block_gimme();
1192 return (gimme == G_VOID) ? G_SCALAR : gimme;
1196 Perl_block_gimme(pTHX)
1200 cxix = dopoptosub(cxstack_ix);
1204 switch (cxstack[cxix].blk_gimme) {
1212 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1219 Perl_is_lvalue_sub(pTHX)
1223 cxix = dopoptosub(cxstack_ix);
1224 assert(cxix >= 0); /* We should only be called from inside subs */
1226 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1227 return cxstack[cxix].blk_sub.lval;
1233 S_dopoptosub(pTHX_ I32 startingblock)
1235 return dopoptosub_at(cxstack, startingblock);
1239 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1242 register PERL_CONTEXT *cx;
1243 for (i = startingblock; i >= 0; i--) {
1245 switch (CxTYPE(cx)) {
1251 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1259 S_dopoptoeval(pTHX_ I32 startingblock)
1262 register PERL_CONTEXT *cx;
1263 for (i = startingblock; i >= 0; i--) {
1265 switch (CxTYPE(cx)) {
1269 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1277 S_dopoptoloop(pTHX_ I32 startingblock)
1280 register PERL_CONTEXT *cx;
1281 for (i = startingblock; i >= 0; i--) {
1283 switch (CxTYPE(cx)) {
1289 if (ckWARN(WARN_EXITING))
1290 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1291 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1292 if ((CxTYPE(cx)) == CXt_NULL)
1296 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1304 Perl_dounwind(pTHX_ I32 cxix)
1306 register PERL_CONTEXT *cx;
1309 while (cxstack_ix > cxix) {
1311 cx = &cxstack[cxstack_ix];
1312 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1313 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1314 /* Note: we don't need to restore the base context info till the end. */
1315 switch (CxTYPE(cx)) {
1318 continue; /* not break */
1340 Perl_qerror(pTHX_ SV *err)
1343 sv_catsv(ERRSV, err);
1345 sv_catsv(PL_errors, err);
1347 Perl_warn(aTHX_ "%"SVf, err);
1352 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1358 register PERL_CONTEXT *cx;
1363 if (PL_in_eval & EVAL_KEEPERR) {
1364 static char prefix[] = "\t(in cleanup) ";
1369 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1372 if (*e != *message || strNE(e,message))
1376 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1377 sv_catpvn(err, prefix, sizeof(prefix)-1);
1378 sv_catpvn(err, message, msglen);
1379 if (ckWARN(WARN_MISC)) {
1380 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1381 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1386 sv_setpvn(ERRSV, message, msglen);
1390 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1391 && PL_curstackinfo->si_prev)
1400 if (cxix < cxstack_ix)
1403 POPBLOCK(cx,PL_curpm);
1404 if (CxTYPE(cx) != CXt_EVAL) {
1406 message = SvPVx(ERRSV, msglen);
1407 PerlIO_write(Perl_error_log, "panic: die ", 11);
1408 PerlIO_write(Perl_error_log, message, msglen);
1413 if (gimme == G_SCALAR)
1414 *++newsp = &PL_sv_undef;
1415 PL_stack_sp = newsp;
1419 /* LEAVE could clobber PL_curcop (see save_re_context())
1420 * XXX it might be better to find a way to avoid messing with
1421 * PL_curcop in save_re_context() instead, but this is a more
1422 * minimal fix --GSAR */
1423 PL_curcop = cx->blk_oldcop;
1425 if (optype == OP_REQUIRE) {
1426 char* msg = SvPVx(ERRSV, n_a);
1427 SV *nsv = cx->blk_eval.old_namesv;
1428 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
1430 DIE(aTHX_ "%sCompilation failed in require",
1431 *msg ? msg : "Unknown error\n");
1433 return pop_return();
1437 message = SvPVx(ERRSV, msglen);
1439 write_to_stderr(message, msglen);
1448 if (SvTRUE(left) != SvTRUE(right))
1460 RETURNOP(cLOGOP->op_other);
1469 RETURNOP(cLOGOP->op_other);
1478 if (!sv || !SvANY(sv)) {
1479 RETURNOP(cLOGOP->op_other);
1482 switch (SvTYPE(sv)) {
1484 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1488 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1492 if (CvROOT(sv) || CvXSUB(sv))
1502 RETURNOP(cLOGOP->op_other);
1508 register I32 cxix = dopoptosub(cxstack_ix);
1509 register PERL_CONTEXT *cx;
1510 register PERL_CONTEXT *ccstack = cxstack;
1511 PERL_SI *top_si = PL_curstackinfo;
1522 /* we may be in a higher stacklevel, so dig down deeper */
1523 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1524 top_si = top_si->si_prev;
1525 ccstack = top_si->si_cxstack;
1526 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1529 if (GIMME != G_ARRAY) {
1535 if (PL_DBsub && cxix >= 0 &&
1536 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1540 cxix = dopoptosub_at(ccstack, cxix - 1);
1543 cx = &ccstack[cxix];
1544 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1545 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1546 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1547 field below is defined for any cx. */
1548 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1549 cx = &ccstack[dbcxix];
1552 stashname = CopSTASHPV(cx->blk_oldcop);
1553 if (GIMME != G_ARRAY) {
1556 PUSHs(&PL_sv_undef);
1559 sv_setpv(TARG, stashname);
1568 PUSHs(&PL_sv_undef);
1570 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1571 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1572 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1575 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1576 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1577 /* So is ccstack[dbcxix]. */
1580 gv_efullname3(sv, cvgv, Nullch);
1581 PUSHs(sv_2mortal(sv));
1582 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1585 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1586 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1590 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1591 PUSHs(sv_2mortal(newSViv(0)));
1593 gimme = (I32)cx->blk_gimme;
1594 if (gimme == G_VOID)
1595 PUSHs(&PL_sv_undef);
1597 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1598 if (CxTYPE(cx) == CXt_EVAL) {
1600 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1601 PUSHs(cx->blk_eval.cur_text);
1605 else if (cx->blk_eval.old_namesv) {
1606 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1609 /* eval BLOCK (try blocks have old_namesv == 0) */
1611 PUSHs(&PL_sv_undef);
1612 PUSHs(&PL_sv_undef);
1616 PUSHs(&PL_sv_undef);
1617 PUSHs(&PL_sv_undef);
1619 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1620 && CopSTASH_eq(PL_curcop, PL_debstash))
1622 AV *ary = cx->blk_sub.argarray;
1623 int off = AvARRAY(ary) - AvALLOC(ary);
1627 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1630 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1633 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1634 av_extend(PL_dbargs, AvFILLp(ary) + off);
1635 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1636 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1638 /* XXX only hints propagated via op_private are currently
1639 * visible (others are not easily accessible, since they
1640 * use the global PL_hints) */
1641 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1642 HINT_PRIVATE_MASK)));
1645 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1647 if (old_warnings == pWARN_NONE ||
1648 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1649 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1650 else if (old_warnings == pWARN_ALL ||
1651 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1652 /* Get the bit mask for $warnings::Bits{all}, because
1653 * it could have been extended by warnings::register */
1655 HV *bits = get_hv("warnings::Bits", FALSE);
1656 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1657 mask = newSVsv(*bits_all);
1660 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1664 mask = newSVsv(old_warnings);
1665 PUSHs(sv_2mortal(mask));
1680 sv_reset(tmps, CopSTASH(PL_curcop));
1690 /* like pp_nextstate, but used instead when the debugger is active */
1694 PL_curcop = (COP*)PL_op;
1695 TAINT_NOT; /* Each statement is presumed innocent */
1696 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1699 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1700 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1704 register PERL_CONTEXT *cx;
1705 I32 gimme = G_ARRAY;
1712 DIE(aTHX_ "No DB::DB routine defined");
1714 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1715 /* don't do recursive DB::DB call */
1727 push_return(PL_op->op_next);
1728 PUSHBLOCK(cx, CXt_SUB, SP);
1731 PAD_SET_CUR(CvPADLIST(cv),1);
1732 RETURNOP(CvSTART(cv));
1746 register PERL_CONTEXT *cx;
1747 I32 gimme = GIMME_V;
1749 U32 cxtype = CXt_LOOP;
1757 if (PL_op->op_targ) {
1758 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1759 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1760 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1761 SVs_PADSTALE, SVs_PADSTALE);
1763 #ifndef USE_ITHREADS
1764 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1767 SAVEPADSV(PL_op->op_targ);
1768 iterdata = INT2PTR(void*, PL_op->op_targ);
1769 cxtype |= CXp_PADVAR;
1774 svp = &GvSV(gv); /* symbol table variable */
1775 SAVEGENERICSV(*svp);
1778 iterdata = (void*)gv;
1784 PUSHBLOCK(cx, cxtype, SP);
1786 PUSHLOOP(cx, iterdata, MARK);
1788 PUSHLOOP(cx, svp, MARK);
1790 if (PL_op->op_flags & OPf_STACKED) {
1791 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1792 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1794 if (RANGE_IS_NUMERIC(sv,(SV*)cx->blk_loop.iterary)) {
1795 if (SvNV(sv) < IV_MIN ||
1796 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1797 DIE(aTHX_ "Range iterator outside integer range");
1798 cx->blk_loop.iterix = SvIV(sv);
1799 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1803 cx->blk_loop.iterlval = newSVsv(sv);
1804 SvPV_force(cx->blk_loop.iterlval,n_a);
1809 cx->blk_loop.iterary = PL_curstack;
1810 AvFILLp(PL_curstack) = SP - PL_stack_base;
1811 cx->blk_loop.iterix = MARK - PL_stack_base;
1820 register PERL_CONTEXT *cx;
1821 I32 gimme = GIMME_V;
1827 PUSHBLOCK(cx, CXt_LOOP, SP);
1828 PUSHLOOP(cx, 0, SP);
1836 register PERL_CONTEXT *cx;
1844 newsp = PL_stack_base + cx->blk_loop.resetsp;
1847 if (gimme == G_VOID)
1849 else if (gimme == G_SCALAR) {
1851 *++newsp = sv_mortalcopy(*SP);
1853 *++newsp = &PL_sv_undef;
1857 *++newsp = sv_mortalcopy(*++mark);
1858 TAINT_NOT; /* Each item is independent */
1864 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1865 PL_curpm = newpm; /* ... and pop $1 et al */
1877 register PERL_CONTEXT *cx;
1878 bool popsub2 = FALSE;
1879 bool clear_errsv = FALSE;
1886 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1887 if (cxstack_ix == PL_sortcxix
1888 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1890 if (cxstack_ix > PL_sortcxix)
1891 dounwind(PL_sortcxix);
1892 AvARRAY(PL_curstack)[1] = *SP;
1893 PL_stack_sp = PL_stack_base + 1;
1898 cxix = dopoptosub(cxstack_ix);
1900 DIE(aTHX_ "Can't return outside a subroutine");
1901 if (cxix < cxstack_ix)
1905 switch (CxTYPE(cx)) {
1908 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1911 if (!(PL_in_eval & EVAL_KEEPERR))
1917 if (optype == OP_REQUIRE &&
1918 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1920 /* Unassume the success we assumed earlier. */
1921 SV *nsv = cx->blk_eval.old_namesv;
1922 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1923 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1930 DIE(aTHX_ "panic: return");
1934 if (gimme == G_SCALAR) {
1937 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1939 *++newsp = SvREFCNT_inc(*SP);
1944 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1946 *++newsp = sv_mortalcopy(sv);
1951 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1954 *++newsp = sv_mortalcopy(*SP);
1957 *++newsp = &PL_sv_undef;
1959 else if (gimme == G_ARRAY) {
1960 while (++MARK <= SP) {
1961 *++newsp = (popsub2 && SvTEMP(*MARK))
1962 ? *MARK : sv_mortalcopy(*MARK);
1963 TAINT_NOT; /* Each item is independent */
1966 PL_stack_sp = newsp;
1969 /* Stack values are safe: */
1972 POPSUB(cx,sv); /* release CV and @_ ... */
1976 PL_curpm = newpm; /* ... and pop $1 et al */
1981 return pop_return();
1988 register PERL_CONTEXT *cx;
1998 if (PL_op->op_flags & OPf_SPECIAL) {
1999 cxix = dopoptoloop(cxstack_ix);
2001 DIE(aTHX_ "Can't \"last\" outside a loop block");
2004 cxix = dopoptolabel(cPVOP->op_pv);
2006 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2008 if (cxix < cxstack_ix)
2012 cxstack_ix++; /* temporarily protect top context */
2014 switch (CxTYPE(cx)) {
2017 newsp = PL_stack_base + cx->blk_loop.resetsp;
2018 nextop = cx->blk_loop.last_op->op_next;
2022 nextop = pop_return();
2026 nextop = pop_return();
2030 nextop = pop_return();
2033 DIE(aTHX_ "panic: last");
2037 if (gimme == G_SCALAR) {
2039 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2040 ? *SP : sv_mortalcopy(*SP);
2042 *++newsp = &PL_sv_undef;
2044 else if (gimme == G_ARRAY) {
2045 while (++MARK <= SP) {
2046 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2047 ? *MARK : sv_mortalcopy(*MARK);
2048 TAINT_NOT; /* Each item is independent */
2056 /* Stack values are safe: */
2059 POPLOOP(cx); /* release loop vars ... */
2063 POPSUB(cx,sv); /* release CV and @_ ... */
2066 PL_curpm = newpm; /* ... and pop $1 et al */
2075 register PERL_CONTEXT *cx;
2078 if (PL_op->op_flags & OPf_SPECIAL) {
2079 cxix = dopoptoloop(cxstack_ix);
2081 DIE(aTHX_ "Can't \"next\" outside a loop block");
2084 cxix = dopoptolabel(cPVOP->op_pv);
2086 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2088 if (cxix < cxstack_ix)
2091 /* clear off anything above the scope we're re-entering, but
2092 * save the rest until after a possible continue block */
2093 inner = PL_scopestack_ix;
2095 if (PL_scopestack_ix < inner)
2096 leave_scope(PL_scopestack[PL_scopestack_ix]);
2097 return cx->blk_loop.next_op;
2103 register PERL_CONTEXT *cx;
2106 if (PL_op->op_flags & OPf_SPECIAL) {
2107 cxix = dopoptoloop(cxstack_ix);
2109 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2112 cxix = dopoptolabel(cPVOP->op_pv);
2114 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2116 if (cxix < cxstack_ix)
2120 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2121 LEAVE_SCOPE(oldsave);
2123 return cx->blk_loop.redo_op;
2127 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2131 static char too_deep[] = "Target of goto is too deeply nested";
2134 Perl_croak(aTHX_ too_deep);
2135 if (o->op_type == OP_LEAVE ||
2136 o->op_type == OP_SCOPE ||
2137 o->op_type == OP_LEAVELOOP ||
2138 o->op_type == OP_LEAVESUB ||
2139 o->op_type == OP_LEAVETRY)
2141 *ops++ = cUNOPo->op_first;
2143 Perl_croak(aTHX_ too_deep);
2146 if (o->op_flags & OPf_KIDS) {
2147 /* First try all the kids at this level, since that's likeliest. */
2148 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2149 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2150 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2153 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2154 if (kid == PL_lastgotoprobe)
2156 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2159 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2160 ops[-1]->op_type == OP_DBSTATE)
2165 if ((o = dofindlabel(kid, label, ops, oplimit)))
2184 register PERL_CONTEXT *cx;
2185 #define GOTO_DEPTH 64
2186 OP *enterops[GOTO_DEPTH];
2188 int do_dump = (PL_op->op_type == OP_DUMP);
2189 static char must_have_label[] = "goto must have label";
2193 if (PL_op->op_flags & OPf_STACKED) {
2197 /* This egregious kludge implements goto &subroutine */
2198 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2200 register PERL_CONTEXT *cx;
2201 CV* cv = (CV*)SvRV(sv);
2207 if (!CvROOT(cv) && !CvXSUB(cv)) {
2212 /* autoloaded stub? */
2213 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2215 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2216 GvNAMELEN(gv), FALSE);
2217 if (autogv && (cv = GvCV(autogv)))
2219 tmpstr = sv_newmortal();
2220 gv_efullname3(tmpstr, gv, Nullch);
2221 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2223 DIE(aTHX_ "Goto undefined subroutine");
2226 /* First do some returnish stuff. */
2227 SvREFCNT_inc(cv); /* avoid premature free during unwind */
2229 cxix = dopoptosub(cxstack_ix);
2231 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2232 if (cxix < cxstack_ix)
2236 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2238 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2239 /* put @_ back onto stack */
2240 AV* av = cx->blk_sub.argarray;
2242 items = AvFILLp(av) + 1;
2244 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2245 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2246 PL_stack_sp += items;
2247 SvREFCNT_dec(GvAV(PL_defgv));
2248 GvAV(PL_defgv) = cx->blk_sub.savearray;
2249 /* abandon @_ if it got reified */
2251 oldav = av; /* delay until return */
2253 av_extend(av, items-1);
2254 AvFLAGS(av) = AVf_REIFY;
2255 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2260 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2262 av = GvAV(PL_defgv);
2263 items = AvFILLp(av) + 1;
2265 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2266 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2267 PL_stack_sp += items;
2269 if (CxTYPE(cx) == CXt_SUB &&
2270 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2271 SvREFCNT_dec(cx->blk_sub.cv);
2272 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2273 LEAVE_SCOPE(oldsave);
2275 /* Now do some callish stuff. */
2277 /* For reified @_, delay freeing till return from new sub */
2279 SAVEFREESV((SV*)oldav);
2280 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2282 #ifdef PERL_XSUB_OLDSTYLE
2283 if (CvOLDSTYLE(cv)) {
2284 I32 (*fp3)(int,int,int);
2289 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2290 items = (*fp3)(CvXSUBANY(cv).any_i32,
2291 mark - PL_stack_base + 1,
2293 SP = PL_stack_base + items;
2296 #endif /* PERL_XSUB_OLDSTYLE */
2301 PL_stack_sp--; /* There is no cv arg. */
2302 /* Push a mark for the start of arglist */
2304 (void)(*CvXSUB(cv))(aTHX_ cv);
2305 /* Pop the current context like a decent sub should */
2306 POPBLOCK(cx, PL_curpm);
2307 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2310 return pop_return();
2313 AV* padlist = CvPADLIST(cv);
2314 if (CxTYPE(cx) == CXt_EVAL) {
2315 PL_in_eval = cx->blk_eval.old_in_eval;
2316 PL_eval_root = cx->blk_eval.old_eval_root;
2317 cx->cx_type = CXt_SUB;
2318 cx->blk_sub.hasargs = 0;
2320 cx->blk_sub.cv = cv;
2321 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2324 if (CvDEPTH(cv) < 2)
2325 (void)SvREFCNT_inc(cv);
2327 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2328 sub_crush_depth(cv);
2329 pad_push(padlist, CvDEPTH(cv), cx->blk_sub.hasargs);
2331 PAD_SET_CUR(padlist, CvDEPTH(cv));
2332 if (cx->blk_sub.hasargs)
2334 AV* av = (AV*)PAD_SVl(0);
2337 cx->blk_sub.savearray = GvAV(PL_defgv);
2338 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2339 CX_CURPAD_SAVE(cx->blk_sub);
2340 cx->blk_sub.argarray = av;
2343 if (items >= AvMAX(av) + 1) {
2345 if (AvARRAY(av) != ary) {
2346 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2347 SvPVX(av) = (char*)ary;
2349 if (items >= AvMAX(av) + 1) {
2350 AvMAX(av) = items - 1;
2351 Renew(ary,items+1,SV*);
2353 SvPVX(av) = (char*)ary;
2356 Copy(mark,AvARRAY(av),items,SV*);
2357 AvFILLp(av) = items - 1;
2358 assert(!AvREAL(av));
2365 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2367 * We do not care about using sv to call CV;
2368 * it's for informational purposes only.
2370 SV *sv = GvSV(PL_DBsub);
2373 if (PERLDB_SUB_NN) {
2374 (void)SvUPGRADE(sv, SVt_PVIV);
2377 SvIVX(sv) = PTR2IV(cv); /* Do it the quickest way */
2380 gv_efullname3(sv, CvGV(cv), Nullch);
2383 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2384 PUSHMARK( PL_stack_sp );
2385 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2389 RETURNOP(CvSTART(cv));
2393 label = SvPV(sv,n_a);
2394 if (!(do_dump || *label))
2395 DIE(aTHX_ must_have_label);
2398 else if (PL_op->op_flags & OPf_SPECIAL) {
2400 DIE(aTHX_ must_have_label);
2403 label = cPVOP->op_pv;
2405 if (label && *label) {
2407 bool leaving_eval = FALSE;
2408 bool in_block = FALSE;
2409 PERL_CONTEXT *last_eval_cx = 0;
2413 PL_lastgotoprobe = 0;
2415 for (ix = cxstack_ix; ix >= 0; ix--) {
2417 switch (CxTYPE(cx)) {
2419 leaving_eval = TRUE;
2420 if (!CxTRYBLOCK(cx)) {
2421 gotoprobe = (last_eval_cx ?
2422 last_eval_cx->blk_eval.old_eval_root :
2427 /* else fall through */
2429 gotoprobe = cx->blk_oldcop->op_sibling;
2435 gotoprobe = cx->blk_oldcop->op_sibling;
2438 gotoprobe = PL_main_root;
2441 if (CvDEPTH(cx->blk_sub.cv)) {
2442 gotoprobe = CvROOT(cx->blk_sub.cv);
2448 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2451 DIE(aTHX_ "panic: goto");
2452 gotoprobe = PL_main_root;
2456 retop = dofindlabel(gotoprobe, label,
2457 enterops, enterops + GOTO_DEPTH);
2461 PL_lastgotoprobe = gotoprobe;
2464 DIE(aTHX_ "Can't find label %s", label);
2466 /* if we're leaving an eval, check before we pop any frames
2467 that we're not going to punt, otherwise the error
2470 if (leaving_eval && *enterops && enterops[1]) {
2472 for (i = 1; enterops[i]; i++)
2473 if (enterops[i]->op_type == OP_ENTERITER)
2474 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2477 /* pop unwanted frames */
2479 if (ix < cxstack_ix) {
2486 oldsave = PL_scopestack[PL_scopestack_ix];
2487 LEAVE_SCOPE(oldsave);
2490 /* push wanted frames */
2492 if (*enterops && enterops[1]) {
2494 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2495 for (; enterops[ix]; ix++) {
2496 PL_op = enterops[ix];
2497 /* Eventually we may want to stack the needed arguments
2498 * for each op. For now, we punt on the hard ones. */
2499 if (PL_op->op_type == OP_ENTERITER)
2500 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2501 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2509 if (!retop) retop = PL_main_start;
2511 PL_restartop = retop;
2512 PL_do_undump = TRUE;
2516 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2517 PL_do_undump = FALSE;
2533 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2535 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2538 PL_exit_flags |= PERL_EXIT_EXPECTED;
2540 PUSHs(&PL_sv_undef);
2548 NV value = SvNVx(GvSV(cCOP->cop_gv));
2549 register I32 match = I_32(value);
2552 if (((NV)match) > value)
2553 --match; /* was fractional--truncate other way */
2555 match -= cCOP->uop.scop.scop_offset;
2558 else if (match > cCOP->uop.scop.scop_max)
2559 match = cCOP->uop.scop.scop_max;
2560 PL_op = cCOP->uop.scop.scop_next[match];
2570 PL_op = PL_op->op_next; /* can't assume anything */
2573 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2574 match -= cCOP->uop.scop.scop_offset;
2577 else if (match > cCOP->uop.scop.scop_max)
2578 match = cCOP->uop.scop.scop_max;
2579 PL_op = cCOP->uop.scop.scop_next[match];
2588 S_save_lines(pTHX_ AV *array, SV *sv)
2590 register char *s = SvPVX(sv);
2591 register char *send = SvPVX(sv) + SvCUR(sv);
2593 register I32 line = 1;
2595 while (s && s < send) {
2596 SV *tmpstr = NEWSV(85,0);
2598 sv_upgrade(tmpstr, SVt_PVMG);
2599 t = strchr(s, '\n');
2605 sv_setpvn(tmpstr, s, t - s);
2606 av_store(array, line++, tmpstr);
2611 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2613 S_docatch_body(pTHX_ va_list args)
2615 return docatch_body();
2620 S_docatch_body(pTHX)
2627 S_docatch(pTHX_ OP *o)
2632 volatile PERL_SI *cursi = PL_curstackinfo;
2636 assert(CATCH_GET == TRUE);
2640 /* Normally, the leavetry at the end of this block of ops will
2641 * pop an op off the return stack and continue there. By setting
2642 * the op to Nullop, we force an exit from the inner runops()
2645 retop = pop_return();
2646 push_return(Nullop);
2648 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2650 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2656 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2662 /* die caught by an inner eval - continue inner loop */
2663 if (PL_restartop && cursi == PL_curstackinfo) {
2664 PL_op = PL_restartop;
2668 /* a die in this eval - continue in outer loop */
2684 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, PAD** padp)
2685 /* sv Text to convert to OP tree. */
2686 /* startop op_free() this to undo. */
2687 /* code Short string id of the caller. */
2689 dSP; /* Make POPBLOCK work. */
2692 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2696 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2697 char *tmpbuf = tbuf;
2700 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2705 /* switch to eval mode */
2707 if (IN_PERL_COMPILETIME) {
2708 SAVECOPSTASH_FREE(&PL_compiling);
2709 CopSTASH_set(&PL_compiling, PL_curstash);
2711 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2712 SV *sv = sv_newmortal();
2713 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2714 code, (unsigned long)++PL_evalseq,
2715 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2719 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2720 SAVECOPFILE_FREE(&PL_compiling);
2721 CopFILE_set(&PL_compiling, tmpbuf+2);
2722 SAVECOPLINE(&PL_compiling);
2723 CopLINE_set(&PL_compiling, 1);
2724 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2725 deleting the eval's FILEGV from the stash before gv_check() runs
2726 (i.e. before run-time proper). To work around the coredump that
2727 ensues, we always turn GvMULTI_on for any globals that were
2728 introduced within evals. See force_ident(). GSAR 96-10-12 */
2729 safestr = savepv(tmpbuf);
2730 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2732 #ifdef OP_IN_REGISTER
2738 /* we get here either during compilation, or via pp_regcomp at runtime */
2739 runtime = IN_PERL_RUNTIME;
2741 runcv = find_runcv(NULL);
2744 PL_op->op_type = OP_ENTEREVAL;
2745 PL_op->op_flags = 0; /* Avoid uninit warning. */
2746 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2747 PUSHEVAL(cx, 0, Nullgv);
2750 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2752 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2753 POPBLOCK(cx,PL_curpm);
2756 (*startop)->op_type = OP_NULL;
2757 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2759 /* XXX DAPM do this properly one year */
2760 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2762 if (IN_PERL_COMPILETIME)
2763 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2764 #ifdef OP_IN_REGISTER
2772 =for apidoc find_runcv
2774 Locate the CV corresponding to the currently executing sub or eval.
2775 If db_seqp is non_null, skip CVs that are in the DB package and populate
2776 *db_seqp with the cop sequence number at the point that the DB:: code was
2777 entered. (allows debuggers to eval in the scope of the breakpoint rather
2778 than in in the scope of the debuger itself).
2784 Perl_find_runcv(pTHX_ U32 *db_seqp)
2791 *db_seqp = PL_curcop->cop_seq;
2792 for (si = PL_curstackinfo; si; si = si->si_prev) {
2793 for (ix = si->si_cxix; ix >= 0; ix--) {
2794 cx = &(si->si_cxstack[ix]);
2795 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2796 CV *cv = cx->blk_sub.cv;
2797 /* skip DB:: code */
2798 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2799 *db_seqp = cx->blk_oldcop->cop_seq;
2804 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2812 /* Compile a require/do, an eval '', or a /(?{...})/.
2813 * In the last case, startop is non-null, and contains the address of
2814 * a pointer that should be set to the just-compiled code.
2815 * outside is the lexically enclosing CV (if any) that invoked us.
2818 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2820 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2825 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2826 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2831 SAVESPTR(PL_compcv);
2832 PL_compcv = (CV*)NEWSV(1104,0);
2833 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2834 CvEVAL_on(PL_compcv);
2835 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2836 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2838 CvOUTSIDE_SEQ(PL_compcv) = seq;
2839 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2841 /* set up a scratch pad */
2843 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2846 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2848 /* make sure we compile in the right package */
2850 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2851 SAVESPTR(PL_curstash);
2852 PL_curstash = CopSTASH(PL_curcop);
2854 SAVESPTR(PL_beginav);
2855 PL_beginav = newAV();
2856 SAVEFREESV(PL_beginav);
2857 SAVEI32(PL_error_count);
2859 /* try to compile it */
2861 PL_eval_root = Nullop;
2863 PL_curcop = &PL_compiling;
2864 PL_curcop->cop_arybase = 0;
2865 if (saveop && saveop->op_flags & OPf_SPECIAL)
2866 PL_in_eval |= EVAL_KEEPERR;
2869 if (yyparse() || PL_error_count || !PL_eval_root) {
2870 SV **newsp; /* Used by POPBLOCK. */
2871 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2872 I32 optype = 0; /* Might be reset by POPEVAL. */
2877 op_free(PL_eval_root);
2878 PL_eval_root = Nullop;
2880 SP = PL_stack_base + POPMARK; /* pop original mark */
2882 POPBLOCK(cx,PL_curpm);
2888 if (optype == OP_REQUIRE) {
2889 char* msg = SvPVx(ERRSV, n_a);
2890 SV *nsv = cx->blk_eval.old_namesv;
2891 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
2893 DIE(aTHX_ "%sCompilation failed in require",
2894 *msg ? msg : "Unknown error\n");
2897 char* msg = SvPVx(ERRSV, n_a);
2899 POPBLOCK(cx,PL_curpm);
2901 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2902 (*msg ? msg : "Unknown error\n"));
2905 char* msg = SvPVx(ERRSV, n_a);
2907 sv_setpv(ERRSV, "Compilation error");
2912 CopLINE_set(&PL_compiling, 0);
2914 *startop = PL_eval_root;
2916 SAVEFREEOP(PL_eval_root);
2918 /* Set the context for this new optree.
2919 * If the last op is an OP_REQUIRE, force scalar context.
2920 * Otherwise, propagate the context from the eval(). */
2921 if (PL_eval_root->op_type == OP_LEAVEEVAL
2922 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2923 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2925 scalar(PL_eval_root);
2926 else if (gimme & G_VOID)
2927 scalarvoid(PL_eval_root);
2928 else if (gimme & G_ARRAY)
2931 scalar(PL_eval_root);
2933 DEBUG_x(dump_eval());
2935 /* Register with debugger: */
2936 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2937 CV *cv = get_cv("DB::postponed", FALSE);
2941 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2943 call_sv((SV*)cv, G_DISCARD);
2947 /* compiled okay, so do it */
2949 CvDEPTH(PL_compcv) = 1;
2950 SP = PL_stack_base + POPMARK; /* pop original mark */
2951 PL_op = saveop; /* The caller may need it. */
2952 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2954 RETURNOP(PL_eval_start);
2958 S_doopen_pm(pTHX_ const char *name, const char *mode)
2960 #ifndef PERL_DISABLE_PMC
2961 STRLEN namelen = strlen(name);
2964 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2965 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2966 char *pmc = SvPV_nolen(pmcsv);
2969 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2970 fp = PerlIO_open(name, mode);
2973 if (PerlLIO_stat(name, &pmstat) < 0 ||
2974 pmstat.st_mtime < pmcstat.st_mtime)
2976 fp = PerlIO_open(pmc, mode);
2979 fp = PerlIO_open(name, mode);
2982 SvREFCNT_dec(pmcsv);
2985 fp = PerlIO_open(name, mode);
2989 return PerlIO_open(name, mode);
2990 #endif /* !PERL_DISABLE_PMC */
2996 register PERL_CONTEXT *cx;
3000 char *tryname = Nullch;
3001 SV *namesv = Nullsv;
3003 I32 gimme = GIMME_V;
3004 PerlIO *tryrsfp = 0;
3006 int filter_has_file = 0;
3007 GV *filter_child_proc = 0;
3008 SV *filter_state = 0;
3015 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
3016 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
3017 UV rev = 0, ver = 0, sver = 0;
3019 U8 *s = (U8*)SvPVX(sv);
3020 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
3022 rev = utf8n_to_uvchr(s, end - s, &len, 0);
3025 ver = utf8n_to_uvchr(s, end - s, &len, 0);
3028 sver = utf8n_to_uvchr(s, end - s, &len, 0);
3031 if (PERL_REVISION < rev
3032 || (PERL_REVISION == rev
3033 && (PERL_VERSION < ver
3034 || (PERL_VERSION == ver
3035 && PERL_SUBVERSION < sver))))
3037 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
3038 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
3039 PERL_VERSION, PERL_SUBVERSION);
3041 if (ckWARN(WARN_PORTABLE))
3042 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3043 "v-string in use/require non-portable");
3046 else if (!SvPOKp(sv)) { /* require 5.005_03 */
3047 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
3048 + ((NV)PERL_SUBVERSION/(NV)1000000)
3049 + 0.00000099 < SvNV(sv))
3053 NV nver = (nrev - rev) * 1000;
3054 UV ver = (UV)(nver + 0.0009);
3055 NV nsver = (nver - ver) * 1000;
3056 UV sver = (UV)(nsver + 0.0009);
3058 /* help out with the "use 5.6" confusion */
3059 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
3060 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
3061 " (did you mean v%"UVuf".%03"UVuf"?)--"
3062 "this is only v%d.%d.%d, stopped",
3063 rev, ver, sver, rev, ver/100,
3064 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
3067 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3068 "this is only v%d.%d.%d, stopped",
3069 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3076 name = SvPV(sv, len);
3077 if (!(name && len > 0 && *name))
3078 DIE(aTHX_ "Null filename used");
3079 TAINT_PROPER("require");
3080 if (PL_op->op_type == OP_REQUIRE &&
3081 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3082 if (*svp != &PL_sv_undef)
3085 DIE(aTHX_ "Compilation failed in require");
3088 /* prepare to compile file */
3090 if (path_is_absolute(name)) {
3092 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3094 #ifdef MACOS_TRADITIONAL
3098 MacPerl_CanonDir(name, newname, 1);
3099 if (path_is_absolute(newname)) {
3101 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3106 AV *ar = GvAVn(PL_incgv);
3110 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3113 namesv = NEWSV(806, 0);
3114 for (i = 0; i <= AvFILL(ar); i++) {
3115 SV *dirsv = *av_fetch(ar, i, TRUE);
3121 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3122 && !sv_isobject(loader))
3124 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3127 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3128 PTR2UV(SvRV(dirsv)), name);
3129 tryname = SvPVX(namesv);
3140 if (sv_isobject(loader))
3141 count = call_method("INC", G_ARRAY);
3143 count = call_sv(loader, G_ARRAY);
3153 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3157 if (SvTYPE(arg) == SVt_PVGV) {
3158 IO *io = GvIO((GV *)arg);
3163 tryrsfp = IoIFP(io);
3164 if (IoTYPE(io) == IoTYPE_PIPE) {
3165 /* reading from a child process doesn't
3166 nest -- when returning from reading
3167 the inner module, the outer one is
3168 unreadable (closed?) I've tried to
3169 save the gv to manage the lifespan of
3170 the pipe, but this didn't help. XXX */
3171 filter_child_proc = (GV *)arg;
3172 (void)SvREFCNT_inc(filter_child_proc);
3175 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3176 PerlIO_close(IoOFP(io));
3188 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3190 (void)SvREFCNT_inc(filter_sub);
3193 filter_state = SP[i];
3194 (void)SvREFCNT_inc(filter_state);
3198 tryrsfp = PerlIO_open("/dev/null",
3214 filter_has_file = 0;
3215 if (filter_child_proc) {
3216 SvREFCNT_dec(filter_child_proc);
3217 filter_child_proc = 0;
3220 SvREFCNT_dec(filter_state);
3224 SvREFCNT_dec(filter_sub);
3229 if (!path_is_absolute(name)
3230 #ifdef MACOS_TRADITIONAL
3231 /* We consider paths of the form :a:b ambiguous and interpret them first
3232 as global then as local
3234 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3237 char *dir = SvPVx(dirsv, n_a);
3238 #ifdef MACOS_TRADITIONAL
3242 MacPerl_CanonDir(name, buf2, 1);
3243 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3247 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3249 sv_setpv(namesv, unixdir);
3250 sv_catpv(namesv, unixname);
3252 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3255 TAINT_PROPER("require");
3256 tryname = SvPVX(namesv);
3257 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3259 if (tryname[0] == '.' && tryname[1] == '/')
3268 SAVECOPFILE_FREE(&PL_compiling);
3269 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3270 SvREFCNT_dec(namesv);
3272 if (PL_op->op_type == OP_REQUIRE) {
3273 char *msgstr = name;
3274 if (namesv) { /* did we lookup @INC? */
3275 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3276 SV *dirmsgsv = NEWSV(0, 0);
3277 AV *ar = GvAVn(PL_incgv);
3279 sv_catpvn(msg, " in @INC", 8);
3280 if (instr(SvPVX(msg), ".h "))
3281 sv_catpv(msg, " (change .h to .ph maybe?)");
3282 if (instr(SvPVX(msg), ".ph "))
3283 sv_catpv(msg, " (did you run h2ph?)");
3284 sv_catpv(msg, " (@INC contains:");
3285 for (i = 0; i <= AvFILL(ar); i++) {
3286 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3287 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3288 sv_catsv(msg, dirmsgsv);
3290 sv_catpvn(msg, ")", 1);
3291 SvREFCNT_dec(dirmsgsv);
3292 msgstr = SvPV_nolen(msg);
3294 DIE(aTHX_ "Can't locate %s", msgstr);
3300 SETERRNO(0, SS_NORMAL);
3302 /* Assume success here to prevent recursive requirement. */
3304 /* Check whether a hook in @INC has already filled %INC */
3305 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3306 (void)hv_store(GvHVn(PL_incgv), name, len,
3307 (hook_sv ? SvREFCNT_inc(hook_sv)
3308 : newSVpv(CopFILE(&PL_compiling), 0)),
3314 lex_start(sv_2mortal(newSVpvn("",0)));
3315 SAVEGENERICSV(PL_rsfp_filters);
3316 PL_rsfp_filters = Nullav;
3321 SAVESPTR(PL_compiling.cop_warnings);
3322 if (PL_dowarn & G_WARN_ALL_ON)
3323 PL_compiling.cop_warnings = pWARN_ALL ;
3324 else if (PL_dowarn & G_WARN_ALL_OFF)
3325 PL_compiling.cop_warnings = pWARN_NONE ;
3326 else if (PL_taint_warn)
3327 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3329 PL_compiling.cop_warnings = pWARN_STD ;
3330 SAVESPTR(PL_compiling.cop_io);
3331 PL_compiling.cop_io = Nullsv;
3333 if (filter_sub || filter_child_proc) {
3334 SV *datasv = filter_add(run_user_filter, Nullsv);
3335 IoLINES(datasv) = filter_has_file;
3336 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3337 IoTOP_GV(datasv) = (GV *)filter_state;
3338 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3341 /* switch to eval mode */
3342 push_return(PL_op->op_next);
3343 PUSHBLOCK(cx, CXt_EVAL, SP);
3344 PUSHEVAL(cx, name, Nullgv);
3346 SAVECOPLINE(&PL_compiling);
3347 CopLINE_set(&PL_compiling, 0);
3351 /* Store and reset encoding. */
3352 encoding = PL_encoding;
3353 PL_encoding = Nullsv;
3355 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3357 /* Restore encoding. */
3358 PL_encoding = encoding;
3365 return pp_require();
3371 register PERL_CONTEXT *cx;
3373 I32 gimme = GIMME_V, was = PL_sub_generation;
3374 char tbuf[TYPE_DIGITS(long) + 12];
3375 char *tmpbuf = tbuf;
3384 TAINT_PROPER("eval");
3390 /* switch to eval mode */
3392 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3393 SV *sv = sv_newmortal();
3394 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3395 (unsigned long)++PL_evalseq,
3396 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3400 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3401 SAVECOPFILE_FREE(&PL_compiling);
3402 CopFILE_set(&PL_compiling, tmpbuf+2);
3403 SAVECOPLINE(&PL_compiling);
3404 CopLINE_set(&PL_compiling, 1);
3405 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3406 deleting the eval's FILEGV from the stash before gv_check() runs
3407 (i.e. before run-time proper). To work around the coredump that
3408 ensues, we always turn GvMULTI_on for any globals that were
3409 introduced within evals. See force_ident(). GSAR 96-10-12 */
3410 safestr = savepv(tmpbuf);
3411 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3413 PL_hints = PL_op->op_targ;
3414 SAVESPTR(PL_compiling.cop_warnings);
3415 if (specialWARN(PL_curcop->cop_warnings))
3416 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3418 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3419 SAVEFREESV(PL_compiling.cop_warnings);
3421 SAVESPTR(PL_compiling.cop_io);
3422 if (specialCopIO(PL_curcop->cop_io))
3423 PL_compiling.cop_io = PL_curcop->cop_io;
3425 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3426 SAVEFREESV(PL_compiling.cop_io);
3428 /* special case: an eval '' executed within the DB package gets lexically
3429 * placed in the first non-DB CV rather than the current CV - this
3430 * allows the debugger to execute code, find lexicals etc, in the
3431 * scope of the code being debugged. Passing &seq gets find_runcv
3432 * to do the dirty work for us */
3433 runcv = find_runcv(&seq);
3435 push_return(PL_op->op_next);
3436 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3437 PUSHEVAL(cx, 0, Nullgv);
3439 /* prepare to compile string */
3441 if (PERLDB_LINE && PL_curstash != PL_debstash)
3442 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3444 ret = doeval(gimme, NULL, runcv, seq);
3445 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3446 && ret != PL_op->op_next) { /* Successive compilation. */
3447 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3449 return DOCATCH(ret);
3459 register PERL_CONTEXT *cx;
3461 U8 save_flags = PL_op -> op_flags;
3466 retop = pop_return();
3469 if (gimme == G_VOID)
3471 else if (gimme == G_SCALAR) {
3474 if (SvFLAGS(TOPs) & SVs_TEMP)
3477 *MARK = sv_mortalcopy(TOPs);
3481 *MARK = &PL_sv_undef;
3486 /* in case LEAVE wipes old return values */
3487 for (mark = newsp + 1; mark <= SP; mark++) {
3488 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3489 *mark = sv_mortalcopy(*mark);
3490 TAINT_NOT; /* Each item is independent */
3494 PL_curpm = newpm; /* Don't pop $1 et al till now */
3497 assert(CvDEPTH(PL_compcv) == 1);
3499 CvDEPTH(PL_compcv) = 0;
3502 if (optype == OP_REQUIRE &&
3503 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3505 /* Unassume the success we assumed earlier. */
3506 SV *nsv = cx->blk_eval.old_namesv;
3507 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3508 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3509 /* die_where() did LEAVE, or we won't be here */
3513 if (!(save_flags & OPf_SPECIAL))
3523 register PERL_CONTEXT *cx;
3524 I32 gimme = GIMME_V;
3529 push_return(cLOGOP->op_other->op_next);
3530 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3533 PL_in_eval = EVAL_INEVAL;
3536 return DOCATCH(PL_op->op_next);
3547 register PERL_CONTEXT *cx;
3552 retop = pop_return();
3555 if (gimme == G_VOID)
3557 else if (gimme == G_SCALAR) {
3560 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3563 *MARK = sv_mortalcopy(TOPs);
3567 *MARK = &PL_sv_undef;
3572 /* in case LEAVE wipes old return values */
3573 for (mark = newsp + 1; mark <= SP; mark++) {
3574 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3575 *mark = sv_mortalcopy(*mark);
3576 TAINT_NOT; /* Each item is independent */
3580 PL_curpm = newpm; /* Don't pop $1 et al till now */
3588 S_doparseform(pTHX_ SV *sv)
3591 register char *s = SvPV_force(sv, len);
3592 register char *send = s + len;
3593 register char *base = Nullch;
3594 register I32 skipspaces = 0;
3595 bool noblank = FALSE;
3596 bool repeat = FALSE;
3597 bool postspace = FALSE;
3603 bool unchopnum = FALSE;
3604 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3607 Perl_croak(aTHX_ "Null picture in formline");
3609 /* estimate the buffer size needed */
3610 for (base = s; s <= send; s++) {
3611 if (*s == '\n' || *s == '@' || *s == '^')
3617 New(804, fops, maxops, U32);
3622 *fpc++ = FF_LINEMARK;
3623 noblank = repeat = FALSE;
3641 case ' ': case '\t':
3648 } /* else FALL THROUGH */
3656 *fpc++ = FF_LITERAL;
3664 *fpc++ = (U16)skipspaces;
3668 *fpc++ = FF_NEWLINE;
3672 arg = fpc - linepc + 1;
3679 *fpc++ = FF_LINEMARK;
3680 noblank = repeat = FALSE;
3689 ischop = s[-1] == '^';
3695 arg = (s - base) - 1;
3697 *fpc++ = FF_LITERAL;
3705 *fpc++ = 2; /* skip the @* or ^* */
3707 *fpc++ = FF_LINESNGL;
3710 *fpc++ = FF_LINEGLOB;
3712 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3713 arg = ischop ? 512 : 0;
3723 arg |= 256 + (s - f);
3725 *fpc++ = s - base; /* fieldsize for FETCH */
3726 *fpc++ = FF_DECIMAL;
3728 unchopnum |= ! ischop;
3730 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3731 arg = ischop ? 512 : 0;
3733 s++; /* skip the '0' first */
3742 arg |= 256 + (s - f);
3744 *fpc++ = s - base; /* fieldsize for FETCH */
3745 *fpc++ = FF_0DECIMAL;
3747 unchopnum |= ! ischop;
3751 bool ismore = FALSE;
3754 while (*++s == '>') ;
3755 prespace = FF_SPACE;
3757 else if (*s == '|') {
3758 while (*++s == '|') ;
3759 prespace = FF_HALFSPACE;
3764 while (*++s == '<') ;
3767 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3771 *fpc++ = s - base; /* fieldsize for FETCH */
3773 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3776 *fpc++ = (U16)prespace;
3790 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3792 { /* need to jump to the next word */
3794 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3795 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3796 s = SvPVX(sv) + SvCUR(sv) + z;
3798 Copy(fops, s, arg, U32);
3800 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3803 if (unchopnum && repeat)
3804 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3810 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3812 /* Can value be printed in fldsize chars, using %*.*f ? */
3816 int intsize = fldsize - (value < 0 ? 1 : 0);
3823 while (intsize--) pwr *= 10.0;
3824 while (frcsize--) eps /= 10.0;
3827 if (value + eps >= pwr)
3830 if (value - eps <= -pwr)
3837 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3839 SV *datasv = FILTER_DATA(idx);
3840 int filter_has_file = IoLINES(datasv);
3841 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3842 SV *filter_state = (SV *)IoTOP_GV(datasv);
3843 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3846 /* I was having segfault trouble under Linux 2.2.5 after a
3847 parse error occured. (Had to hack around it with a test
3848 for PL_error_count == 0.) Solaris doesn't segfault --
3849 not sure where the trouble is yet. XXX */
3851 if (filter_has_file) {
3852 len = FILTER_READ(idx+1, buf_sv, maxlen);
3855 if (filter_sub && len >= 0) {
3866 PUSHs(sv_2mortal(newSViv(maxlen)));
3868 PUSHs(filter_state);
3871 count = call_sv(filter_sub, G_SCALAR);
3887 IoLINES(datasv) = 0;
3888 if (filter_child_proc) {
3889 SvREFCNT_dec(filter_child_proc);
3890 IoFMT_GV(datasv) = Nullgv;
3893 SvREFCNT_dec(filter_state);
3894 IoTOP_GV(datasv) = Nullgv;
3897 SvREFCNT_dec(filter_sub);
3898 IoBOTTOM_GV(datasv) = Nullgv;
3900 filter_del(run_user_filter);
3906 /* perhaps someone can come up with a better name for
3907 this? it is not really "absolute", per se ... */
3909 S_path_is_absolute(pTHX_ char *name)
3911 if (PERL_FILE_IS_ABSOLUTE(name)
3912 #ifdef MACOS_TRADITIONAL
3915 || (*name == '.' && (name[1] == '/' ||
3916 (name[1] == '.' && name[2] == '/'))))