3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 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 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1060 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1061 (((!SvOK(left) && SvOK(right)) || (looks_like_number(left) && \
1062 SvPOKp(left) && *SvPVX(left) != '0')) && looks_like_number(right)))
1068 if (GIMME == G_ARRAY) {
1074 if (SvGMAGICAL(left))
1076 if (SvGMAGICAL(right))
1079 if (RANGE_IS_NUMERIC(left,right)) {
1080 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1081 (SvOK(right) && 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 SV *right = (SV*)cx->blk_loop.iterary;
1795 if (RANGE_IS_NUMERIC(sv,right)) {
1796 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1797 (SvOK(right) && SvNV(right) >= IV_MAX))
1798 DIE(aTHX_ "Range iterator outside integer range");
1799 cx->blk_loop.iterix = SvIV(sv);
1800 cx->blk_loop.itermax = SvIV(right);
1804 cx->blk_loop.iterlval = newSVsv(sv);
1805 (void) SvPV_force(cx->blk_loop.iterlval,n_a);
1806 (void) SvPV(right,n_a);
1811 cx->blk_loop.iterary = PL_curstack;
1812 AvFILLp(PL_curstack) = SP - PL_stack_base;
1813 cx->blk_loop.iterix = MARK - PL_stack_base;
1822 register PERL_CONTEXT *cx;
1823 I32 gimme = GIMME_V;
1829 PUSHBLOCK(cx, CXt_LOOP, SP);
1830 PUSHLOOP(cx, 0, SP);
1838 register PERL_CONTEXT *cx;
1846 newsp = PL_stack_base + cx->blk_loop.resetsp;
1849 if (gimme == G_VOID)
1851 else if (gimme == G_SCALAR) {
1853 *++newsp = sv_mortalcopy(*SP);
1855 *++newsp = &PL_sv_undef;
1859 *++newsp = sv_mortalcopy(*++mark);
1860 TAINT_NOT; /* Each item is independent */
1866 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1867 PL_curpm = newpm; /* ... and pop $1 et al */
1879 register PERL_CONTEXT *cx;
1880 bool popsub2 = FALSE;
1881 bool clear_errsv = FALSE;
1888 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1889 if (cxstack_ix == PL_sortcxix
1890 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1892 if (cxstack_ix > PL_sortcxix)
1893 dounwind(PL_sortcxix);
1894 AvARRAY(PL_curstack)[1] = *SP;
1895 PL_stack_sp = PL_stack_base + 1;
1900 cxix = dopoptosub(cxstack_ix);
1902 DIE(aTHX_ "Can't return outside a subroutine");
1903 if (cxix < cxstack_ix)
1907 switch (CxTYPE(cx)) {
1910 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1913 if (!(PL_in_eval & EVAL_KEEPERR))
1919 if (optype == OP_REQUIRE &&
1920 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1922 /* Unassume the success we assumed earlier. */
1923 SV *nsv = cx->blk_eval.old_namesv;
1924 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1925 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1932 DIE(aTHX_ "panic: return");
1936 if (gimme == G_SCALAR) {
1939 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1941 *++newsp = SvREFCNT_inc(*SP);
1946 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1948 *++newsp = sv_mortalcopy(sv);
1953 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1956 *++newsp = sv_mortalcopy(*SP);
1959 *++newsp = &PL_sv_undef;
1961 else if (gimme == G_ARRAY) {
1962 while (++MARK <= SP) {
1963 *++newsp = (popsub2 && SvTEMP(*MARK))
1964 ? *MARK : sv_mortalcopy(*MARK);
1965 TAINT_NOT; /* Each item is independent */
1968 PL_stack_sp = newsp;
1971 /* Stack values are safe: */
1974 POPSUB(cx,sv); /* release CV and @_ ... */
1978 PL_curpm = newpm; /* ... and pop $1 et al */
1983 return pop_return();
1990 register PERL_CONTEXT *cx;
2000 if (PL_op->op_flags & OPf_SPECIAL) {
2001 cxix = dopoptoloop(cxstack_ix);
2003 DIE(aTHX_ "Can't \"last\" outside a loop block");
2006 cxix = dopoptolabel(cPVOP->op_pv);
2008 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2010 if (cxix < cxstack_ix)
2014 cxstack_ix++; /* temporarily protect top context */
2016 switch (CxTYPE(cx)) {
2019 newsp = PL_stack_base + cx->blk_loop.resetsp;
2020 nextop = cx->blk_loop.last_op->op_next;
2024 nextop = pop_return();
2028 nextop = pop_return();
2032 nextop = pop_return();
2035 DIE(aTHX_ "panic: last");
2039 if (gimme == G_SCALAR) {
2041 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2042 ? *SP : sv_mortalcopy(*SP);
2044 *++newsp = &PL_sv_undef;
2046 else if (gimme == G_ARRAY) {
2047 while (++MARK <= SP) {
2048 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2049 ? *MARK : sv_mortalcopy(*MARK);
2050 TAINT_NOT; /* Each item is independent */
2058 /* Stack values are safe: */
2061 POPLOOP(cx); /* release loop vars ... */
2065 POPSUB(cx,sv); /* release CV and @_ ... */
2068 PL_curpm = newpm; /* ... and pop $1 et al */
2077 register PERL_CONTEXT *cx;
2080 if (PL_op->op_flags & OPf_SPECIAL) {
2081 cxix = dopoptoloop(cxstack_ix);
2083 DIE(aTHX_ "Can't \"next\" outside a loop block");
2086 cxix = dopoptolabel(cPVOP->op_pv);
2088 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2090 if (cxix < cxstack_ix)
2093 /* clear off anything above the scope we're re-entering, but
2094 * save the rest until after a possible continue block */
2095 inner = PL_scopestack_ix;
2097 if (PL_scopestack_ix < inner)
2098 leave_scope(PL_scopestack[PL_scopestack_ix]);
2099 return cx->blk_loop.next_op;
2105 register PERL_CONTEXT *cx;
2108 if (PL_op->op_flags & OPf_SPECIAL) {
2109 cxix = dopoptoloop(cxstack_ix);
2111 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2114 cxix = dopoptolabel(cPVOP->op_pv);
2116 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2118 if (cxix < cxstack_ix)
2122 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2123 LEAVE_SCOPE(oldsave);
2125 return cx->blk_loop.redo_op;
2129 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2133 static char too_deep[] = "Target of goto is too deeply nested";
2136 Perl_croak(aTHX_ too_deep);
2137 if (o->op_type == OP_LEAVE ||
2138 o->op_type == OP_SCOPE ||
2139 o->op_type == OP_LEAVELOOP ||
2140 o->op_type == OP_LEAVESUB ||
2141 o->op_type == OP_LEAVETRY)
2143 *ops++ = cUNOPo->op_first;
2145 Perl_croak(aTHX_ too_deep);
2148 if (o->op_flags & OPf_KIDS) {
2149 /* First try all the kids at this level, since that's likeliest. */
2150 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2151 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2152 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2155 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2156 if (kid == PL_lastgotoprobe)
2158 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2161 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2162 ops[-1]->op_type == OP_DBSTATE)
2167 if ((o = dofindlabel(kid, label, ops, oplimit)))
2186 register PERL_CONTEXT *cx;
2187 #define GOTO_DEPTH 64
2188 OP *enterops[GOTO_DEPTH];
2190 int do_dump = (PL_op->op_type == OP_DUMP);
2191 static char must_have_label[] = "goto must have label";
2195 if (PL_op->op_flags & OPf_STACKED) {
2199 /* This egregious kludge implements goto &subroutine */
2200 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2202 register PERL_CONTEXT *cx;
2203 CV* cv = (CV*)SvRV(sv);
2209 if (!CvROOT(cv) && !CvXSUB(cv)) {
2214 /* autoloaded stub? */
2215 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2217 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2218 GvNAMELEN(gv), FALSE);
2219 if (autogv && (cv = GvCV(autogv)))
2221 tmpstr = sv_newmortal();
2222 gv_efullname3(tmpstr, gv, Nullch);
2223 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2225 DIE(aTHX_ "Goto undefined subroutine");
2228 /* First do some returnish stuff. */
2229 SvREFCNT_inc(cv); /* avoid premature free during unwind */
2231 cxix = dopoptosub(cxstack_ix);
2233 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2234 if (cxix < cxstack_ix)
2238 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2240 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2241 /* put @_ back onto stack */
2242 AV* av = cx->blk_sub.argarray;
2244 items = AvFILLp(av) + 1;
2246 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2247 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2248 PL_stack_sp += items;
2249 SvREFCNT_dec(GvAV(PL_defgv));
2250 GvAV(PL_defgv) = cx->blk_sub.savearray;
2251 /* abandon @_ if it got reified */
2253 oldav = av; /* delay until return */
2255 av_extend(av, items-1);
2256 AvFLAGS(av) = AVf_REIFY;
2257 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2262 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2264 av = GvAV(PL_defgv);
2265 items = AvFILLp(av) + 1;
2267 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2268 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2269 PL_stack_sp += items;
2271 if (CxTYPE(cx) == CXt_SUB &&
2272 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2273 SvREFCNT_dec(cx->blk_sub.cv);
2274 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2275 LEAVE_SCOPE(oldsave);
2277 /* Now do some callish stuff. */
2279 /* For reified @_, delay freeing till return from new sub */
2281 SAVEFREESV((SV*)oldav);
2282 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2284 #ifdef PERL_XSUB_OLDSTYLE
2285 if (CvOLDSTYLE(cv)) {
2286 I32 (*fp3)(int,int,int);
2291 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2292 items = (*fp3)(CvXSUBANY(cv).any_i32,
2293 mark - PL_stack_base + 1,
2295 SP = PL_stack_base + items;
2298 #endif /* PERL_XSUB_OLDSTYLE */
2303 PL_stack_sp--; /* There is no cv arg. */
2304 /* Push a mark for the start of arglist */
2306 (void)(*CvXSUB(cv))(aTHX_ cv);
2307 /* Pop the current context like a decent sub should */
2308 POPBLOCK(cx, PL_curpm);
2309 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2312 return pop_return();
2315 AV* padlist = CvPADLIST(cv);
2316 if (CxTYPE(cx) == CXt_EVAL) {
2317 PL_in_eval = cx->blk_eval.old_in_eval;
2318 PL_eval_root = cx->blk_eval.old_eval_root;
2319 cx->cx_type = CXt_SUB;
2320 cx->blk_sub.hasargs = 0;
2322 cx->blk_sub.cv = cv;
2323 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2326 if (CvDEPTH(cv) < 2)
2327 (void)SvREFCNT_inc(cv);
2329 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2330 sub_crush_depth(cv);
2331 pad_push(padlist, CvDEPTH(cv), cx->blk_sub.hasargs);
2333 PAD_SET_CUR(padlist, CvDEPTH(cv));
2334 if (cx->blk_sub.hasargs)
2336 AV* av = (AV*)PAD_SVl(0);
2339 cx->blk_sub.savearray = GvAV(PL_defgv);
2340 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2341 CX_CURPAD_SAVE(cx->blk_sub);
2342 cx->blk_sub.argarray = av;
2345 if (items >= AvMAX(av) + 1) {
2347 if (AvARRAY(av) != ary) {
2348 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2349 SvPVX(av) = (char*)ary;
2351 if (items >= AvMAX(av) + 1) {
2352 AvMAX(av) = items - 1;
2353 Renew(ary,items+1,SV*);
2355 SvPVX(av) = (char*)ary;
2358 Copy(mark,AvARRAY(av),items,SV*);
2359 AvFILLp(av) = items - 1;
2360 assert(!AvREAL(av));
2367 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2369 * We do not care about using sv to call CV;
2370 * it's for informational purposes only.
2372 SV *sv = GvSV(PL_DBsub);
2375 if (PERLDB_SUB_NN) {
2376 (void)SvUPGRADE(sv, SVt_PVIV);
2379 SvIVX(sv) = PTR2IV(cv); /* Do it the quickest way */
2382 gv_efullname3(sv, CvGV(cv), Nullch);
2385 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2386 PUSHMARK( PL_stack_sp );
2387 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2391 RETURNOP(CvSTART(cv));
2395 label = SvPV(sv,n_a);
2396 if (!(do_dump || *label))
2397 DIE(aTHX_ must_have_label);
2400 else if (PL_op->op_flags & OPf_SPECIAL) {
2402 DIE(aTHX_ must_have_label);
2405 label = cPVOP->op_pv;
2407 if (label && *label) {
2409 bool leaving_eval = FALSE;
2410 bool in_block = FALSE;
2411 PERL_CONTEXT *last_eval_cx = 0;
2415 PL_lastgotoprobe = 0;
2417 for (ix = cxstack_ix; ix >= 0; ix--) {
2419 switch (CxTYPE(cx)) {
2421 leaving_eval = TRUE;
2422 if (!CxTRYBLOCK(cx)) {
2423 gotoprobe = (last_eval_cx ?
2424 last_eval_cx->blk_eval.old_eval_root :
2429 /* else fall through */
2431 gotoprobe = cx->blk_oldcop->op_sibling;
2437 gotoprobe = cx->blk_oldcop->op_sibling;
2440 gotoprobe = PL_main_root;
2443 if (CvDEPTH(cx->blk_sub.cv)) {
2444 gotoprobe = CvROOT(cx->blk_sub.cv);
2450 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2453 DIE(aTHX_ "panic: goto");
2454 gotoprobe = PL_main_root;
2458 retop = dofindlabel(gotoprobe, label,
2459 enterops, enterops + GOTO_DEPTH);
2463 PL_lastgotoprobe = gotoprobe;
2466 DIE(aTHX_ "Can't find label %s", label);
2468 /* if we're leaving an eval, check before we pop any frames
2469 that we're not going to punt, otherwise the error
2472 if (leaving_eval && *enterops && enterops[1]) {
2474 for (i = 1; enterops[i]; i++)
2475 if (enterops[i]->op_type == OP_ENTERITER)
2476 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2479 /* pop unwanted frames */
2481 if (ix < cxstack_ix) {
2488 oldsave = PL_scopestack[PL_scopestack_ix];
2489 LEAVE_SCOPE(oldsave);
2492 /* push wanted frames */
2494 if (*enterops && enterops[1]) {
2496 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2497 for (; enterops[ix]; ix++) {
2498 PL_op = enterops[ix];
2499 /* Eventually we may want to stack the needed arguments
2500 * for each op. For now, we punt on the hard ones. */
2501 if (PL_op->op_type == OP_ENTERITER)
2502 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2503 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2511 if (!retop) retop = PL_main_start;
2513 PL_restartop = retop;
2514 PL_do_undump = TRUE;
2518 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2519 PL_do_undump = FALSE;
2535 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2537 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2540 PL_exit_flags |= PERL_EXIT_EXPECTED;
2542 PUSHs(&PL_sv_undef);
2550 NV value = SvNVx(GvSV(cCOP->cop_gv));
2551 register I32 match = I_32(value);
2554 if (((NV)match) > value)
2555 --match; /* was fractional--truncate other way */
2557 match -= cCOP->uop.scop.scop_offset;
2560 else if (match > cCOP->uop.scop.scop_max)
2561 match = cCOP->uop.scop.scop_max;
2562 PL_op = cCOP->uop.scop.scop_next[match];
2572 PL_op = PL_op->op_next; /* can't assume anything */
2575 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2576 match -= cCOP->uop.scop.scop_offset;
2579 else if (match > cCOP->uop.scop.scop_max)
2580 match = cCOP->uop.scop.scop_max;
2581 PL_op = cCOP->uop.scop.scop_next[match];
2590 S_save_lines(pTHX_ AV *array, SV *sv)
2592 register char *s = SvPVX(sv);
2593 register char *send = SvPVX(sv) + SvCUR(sv);
2595 register I32 line = 1;
2597 while (s && s < send) {
2598 SV *tmpstr = NEWSV(85,0);
2600 sv_upgrade(tmpstr, SVt_PVMG);
2601 t = strchr(s, '\n');
2607 sv_setpvn(tmpstr, s, t - s);
2608 av_store(array, line++, tmpstr);
2613 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2615 S_docatch_body(pTHX_ va_list args)
2617 return docatch_body();
2622 S_docatch_body(pTHX)
2629 S_docatch(pTHX_ OP *o)
2634 volatile PERL_SI *cursi = PL_curstackinfo;
2638 assert(CATCH_GET == TRUE);
2642 /* Normally, the leavetry at the end of this block of ops will
2643 * pop an op off the return stack and continue there. By setting
2644 * the op to Nullop, we force an exit from the inner runops()
2647 retop = pop_return();
2648 push_return(Nullop);
2650 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2652 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2658 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2664 /* die caught by an inner eval - continue inner loop */
2665 if (PL_restartop && cursi == PL_curstackinfo) {
2666 PL_op = PL_restartop;
2670 /* a die in this eval - continue in outer loop */
2686 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, PAD** padp)
2687 /* sv Text to convert to OP tree. */
2688 /* startop op_free() this to undo. */
2689 /* code Short string id of the caller. */
2691 dSP; /* Make POPBLOCK work. */
2694 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2698 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2699 char *tmpbuf = tbuf;
2702 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2707 /* switch to eval mode */
2709 if (IN_PERL_COMPILETIME) {
2710 SAVECOPSTASH_FREE(&PL_compiling);
2711 CopSTASH_set(&PL_compiling, PL_curstash);
2713 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2714 SV *sv = sv_newmortal();
2715 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2716 code, (unsigned long)++PL_evalseq,
2717 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2721 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2722 SAVECOPFILE_FREE(&PL_compiling);
2723 CopFILE_set(&PL_compiling, tmpbuf+2);
2724 SAVECOPLINE(&PL_compiling);
2725 CopLINE_set(&PL_compiling, 1);
2726 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2727 deleting the eval's FILEGV from the stash before gv_check() runs
2728 (i.e. before run-time proper). To work around the coredump that
2729 ensues, we always turn GvMULTI_on for any globals that were
2730 introduced within evals. See force_ident(). GSAR 96-10-12 */
2731 safestr = savepv(tmpbuf);
2732 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2734 #ifdef OP_IN_REGISTER
2740 /* we get here either during compilation, or via pp_regcomp at runtime */
2741 runtime = IN_PERL_RUNTIME;
2743 runcv = find_runcv(NULL);
2746 PL_op->op_type = OP_ENTEREVAL;
2747 PL_op->op_flags = 0; /* Avoid uninit warning. */
2748 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2749 PUSHEVAL(cx, 0, Nullgv);
2752 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2754 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2755 POPBLOCK(cx,PL_curpm);
2758 (*startop)->op_type = OP_NULL;
2759 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2761 /* XXX DAPM do this properly one year */
2762 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2764 if (IN_PERL_COMPILETIME)
2765 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2766 #ifdef OP_IN_REGISTER
2774 =for apidoc find_runcv
2776 Locate the CV corresponding to the currently executing sub or eval.
2777 If db_seqp is non_null, skip CVs that are in the DB package and populate
2778 *db_seqp with the cop sequence number at the point that the DB:: code was
2779 entered. (allows debuggers to eval in the scope of the breakpoint rather
2780 than in in the scope of the debuger itself).
2786 Perl_find_runcv(pTHX_ U32 *db_seqp)
2793 *db_seqp = PL_curcop->cop_seq;
2794 for (si = PL_curstackinfo; si; si = si->si_prev) {
2795 for (ix = si->si_cxix; ix >= 0; ix--) {
2796 cx = &(si->si_cxstack[ix]);
2797 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2798 CV *cv = cx->blk_sub.cv;
2799 /* skip DB:: code */
2800 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2801 *db_seqp = cx->blk_oldcop->cop_seq;
2806 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2814 /* Compile a require/do, an eval '', or a /(?{...})/.
2815 * In the last case, startop is non-null, and contains the address of
2816 * a pointer that should be set to the just-compiled code.
2817 * outside is the lexically enclosing CV (if any) that invoked us.
2820 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2822 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2827 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2828 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2833 SAVESPTR(PL_compcv);
2834 PL_compcv = (CV*)NEWSV(1104,0);
2835 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2836 CvEVAL_on(PL_compcv);
2837 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2838 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2840 CvOUTSIDE_SEQ(PL_compcv) = seq;
2841 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2843 /* set up a scratch pad */
2845 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2848 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2850 /* make sure we compile in the right package */
2852 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2853 SAVESPTR(PL_curstash);
2854 PL_curstash = CopSTASH(PL_curcop);
2856 SAVESPTR(PL_beginav);
2857 PL_beginav = newAV();
2858 SAVEFREESV(PL_beginav);
2859 SAVEI32(PL_error_count);
2861 /* try to compile it */
2863 PL_eval_root = Nullop;
2865 PL_curcop = &PL_compiling;
2866 PL_curcop->cop_arybase = 0;
2867 if (saveop && saveop->op_flags & OPf_SPECIAL)
2868 PL_in_eval |= EVAL_KEEPERR;
2871 if (yyparse() || PL_error_count || !PL_eval_root) {
2872 SV **newsp; /* Used by POPBLOCK. */
2873 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2874 I32 optype = 0; /* Might be reset by POPEVAL. */
2879 op_free(PL_eval_root);
2880 PL_eval_root = Nullop;
2882 SP = PL_stack_base + POPMARK; /* pop original mark */
2884 POPBLOCK(cx,PL_curpm);
2890 if (optype == OP_REQUIRE) {
2891 char* msg = SvPVx(ERRSV, n_a);
2892 SV *nsv = cx->blk_eval.old_namesv;
2893 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
2895 DIE(aTHX_ "%sCompilation failed in require",
2896 *msg ? msg : "Unknown error\n");
2899 char* msg = SvPVx(ERRSV, n_a);
2901 POPBLOCK(cx,PL_curpm);
2903 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2904 (*msg ? msg : "Unknown error\n"));
2907 char* msg = SvPVx(ERRSV, n_a);
2909 sv_setpv(ERRSV, "Compilation error");
2914 CopLINE_set(&PL_compiling, 0);
2916 *startop = PL_eval_root;
2918 SAVEFREEOP(PL_eval_root);
2920 /* Set the context for this new optree.
2921 * If the last op is an OP_REQUIRE, force scalar context.
2922 * Otherwise, propagate the context from the eval(). */
2923 if (PL_eval_root->op_type == OP_LEAVEEVAL
2924 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2925 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2927 scalar(PL_eval_root);
2928 else if (gimme & G_VOID)
2929 scalarvoid(PL_eval_root);
2930 else if (gimme & G_ARRAY)
2933 scalar(PL_eval_root);
2935 DEBUG_x(dump_eval());
2937 /* Register with debugger: */
2938 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2939 CV *cv = get_cv("DB::postponed", FALSE);
2943 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2945 call_sv((SV*)cv, G_DISCARD);
2949 /* compiled okay, so do it */
2951 CvDEPTH(PL_compcv) = 1;
2952 SP = PL_stack_base + POPMARK; /* pop original mark */
2953 PL_op = saveop; /* The caller may need it. */
2954 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2956 RETURNOP(PL_eval_start);
2960 S_doopen_pm(pTHX_ const char *name, const char *mode)
2962 #ifndef PERL_DISABLE_PMC
2963 STRLEN namelen = strlen(name);
2966 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2967 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2968 char *pmc = SvPV_nolen(pmcsv);
2971 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2972 fp = PerlIO_open(name, mode);
2975 if (PerlLIO_stat(name, &pmstat) < 0 ||
2976 pmstat.st_mtime < pmcstat.st_mtime)
2978 fp = PerlIO_open(pmc, mode);
2981 fp = PerlIO_open(name, mode);
2984 SvREFCNT_dec(pmcsv);
2987 fp = PerlIO_open(name, mode);
2991 return PerlIO_open(name, mode);
2992 #endif /* !PERL_DISABLE_PMC */
2998 register PERL_CONTEXT *cx;
3002 char *tryname = Nullch;
3003 SV *namesv = Nullsv;
3005 I32 gimme = GIMME_V;
3006 PerlIO *tryrsfp = 0;
3008 int filter_has_file = 0;
3009 GV *filter_child_proc = 0;
3010 SV *filter_state = 0;
3017 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
3018 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
3019 UV rev = 0, ver = 0, sver = 0;
3021 U8 *s = (U8*)SvPVX(sv);
3022 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
3024 rev = utf8n_to_uvchr(s, end - s, &len, 0);
3027 ver = utf8n_to_uvchr(s, end - s, &len, 0);
3030 sver = utf8n_to_uvchr(s, end - s, &len, 0);
3033 if (PERL_REVISION < rev
3034 || (PERL_REVISION == rev
3035 && (PERL_VERSION < ver
3036 || (PERL_VERSION == ver
3037 && PERL_SUBVERSION < sver))))
3039 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
3040 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
3041 PERL_VERSION, PERL_SUBVERSION);
3043 if (ckWARN(WARN_PORTABLE))
3044 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3045 "v-string in use/require non-portable");
3048 else if (!SvPOKp(sv)) { /* require 5.005_03 */
3049 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
3050 + ((NV)PERL_SUBVERSION/(NV)1000000)
3051 + 0.00000099 < SvNV(sv))
3055 NV nver = (nrev - rev) * 1000;
3056 UV ver = (UV)(nver + 0.0009);
3057 NV nsver = (nver - ver) * 1000;
3058 UV sver = (UV)(nsver + 0.0009);
3060 /* help out with the "use 5.6" confusion */
3061 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
3062 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
3063 " (did you mean v%"UVuf".%03"UVuf"?)--"
3064 "this is only v%d.%d.%d, stopped",
3065 rev, ver, sver, rev, ver/100,
3066 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
3069 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3070 "this is only v%d.%d.%d, stopped",
3071 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3078 name = SvPV(sv, len);
3079 if (!(name && len > 0 && *name))
3080 DIE(aTHX_ "Null filename used");
3081 TAINT_PROPER("require");
3082 if (PL_op->op_type == OP_REQUIRE &&
3083 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3084 if (*svp != &PL_sv_undef)
3087 DIE(aTHX_ "Compilation failed in require");
3090 /* prepare to compile file */
3092 if (path_is_absolute(name)) {
3094 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3096 #ifdef MACOS_TRADITIONAL
3100 MacPerl_CanonDir(name, newname, 1);
3101 if (path_is_absolute(newname)) {
3103 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3108 AV *ar = GvAVn(PL_incgv);
3112 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3115 namesv = NEWSV(806, 0);
3116 for (i = 0; i <= AvFILL(ar); i++) {
3117 SV *dirsv = *av_fetch(ar, i, TRUE);
3123 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3124 && !sv_isobject(loader))
3126 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3129 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3130 PTR2UV(SvRV(dirsv)), name);
3131 tryname = SvPVX(namesv);
3142 if (sv_isobject(loader))
3143 count = call_method("INC", G_ARRAY);
3145 count = call_sv(loader, G_ARRAY);
3155 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3159 if (SvTYPE(arg) == SVt_PVGV) {
3160 IO *io = GvIO((GV *)arg);
3165 tryrsfp = IoIFP(io);
3166 if (IoTYPE(io) == IoTYPE_PIPE) {
3167 /* reading from a child process doesn't
3168 nest -- when returning from reading
3169 the inner module, the outer one is
3170 unreadable (closed?) I've tried to
3171 save the gv to manage the lifespan of
3172 the pipe, but this didn't help. XXX */
3173 filter_child_proc = (GV *)arg;
3174 (void)SvREFCNT_inc(filter_child_proc);
3177 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3178 PerlIO_close(IoOFP(io));
3190 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3192 (void)SvREFCNT_inc(filter_sub);
3195 filter_state = SP[i];
3196 (void)SvREFCNT_inc(filter_state);
3200 tryrsfp = PerlIO_open("/dev/null",
3216 filter_has_file = 0;
3217 if (filter_child_proc) {
3218 SvREFCNT_dec(filter_child_proc);
3219 filter_child_proc = 0;
3222 SvREFCNT_dec(filter_state);
3226 SvREFCNT_dec(filter_sub);
3231 if (!path_is_absolute(name)
3232 #ifdef MACOS_TRADITIONAL
3233 /* We consider paths of the form :a:b ambiguous and interpret them first
3234 as global then as local
3236 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3239 char *dir = SvPVx(dirsv, n_a);
3240 #ifdef MACOS_TRADITIONAL
3244 MacPerl_CanonDir(name, buf2, 1);
3245 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3249 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3251 sv_setpv(namesv, unixdir);
3252 sv_catpv(namesv, unixname);
3254 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3257 TAINT_PROPER("require");
3258 tryname = SvPVX(namesv);
3259 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3261 if (tryname[0] == '.' && tryname[1] == '/')
3270 SAVECOPFILE_FREE(&PL_compiling);
3271 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3272 SvREFCNT_dec(namesv);
3274 if (PL_op->op_type == OP_REQUIRE) {
3275 char *msgstr = name;
3276 if (namesv) { /* did we lookup @INC? */
3277 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3278 SV *dirmsgsv = NEWSV(0, 0);
3279 AV *ar = GvAVn(PL_incgv);
3281 sv_catpvn(msg, " in @INC", 8);
3282 if (instr(SvPVX(msg), ".h "))
3283 sv_catpv(msg, " (change .h to .ph maybe?)");
3284 if (instr(SvPVX(msg), ".ph "))
3285 sv_catpv(msg, " (did you run h2ph?)");
3286 sv_catpv(msg, " (@INC contains:");
3287 for (i = 0; i <= AvFILL(ar); i++) {
3288 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3289 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3290 sv_catsv(msg, dirmsgsv);
3292 sv_catpvn(msg, ")", 1);
3293 SvREFCNT_dec(dirmsgsv);
3294 msgstr = SvPV_nolen(msg);
3296 DIE(aTHX_ "Can't locate %s", msgstr);
3302 SETERRNO(0, SS_NORMAL);
3304 /* Assume success here to prevent recursive requirement. */
3306 /* Check whether a hook in @INC has already filled %INC */
3307 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3308 (void)hv_store(GvHVn(PL_incgv), name, len,
3309 (hook_sv ? SvREFCNT_inc(hook_sv)
3310 : newSVpv(CopFILE(&PL_compiling), 0)),
3316 lex_start(sv_2mortal(newSVpvn("",0)));
3317 SAVEGENERICSV(PL_rsfp_filters);
3318 PL_rsfp_filters = Nullav;
3323 SAVESPTR(PL_compiling.cop_warnings);
3324 if (PL_dowarn & G_WARN_ALL_ON)
3325 PL_compiling.cop_warnings = pWARN_ALL ;
3326 else if (PL_dowarn & G_WARN_ALL_OFF)
3327 PL_compiling.cop_warnings = pWARN_NONE ;
3328 else if (PL_taint_warn)
3329 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3331 PL_compiling.cop_warnings = pWARN_STD ;
3332 SAVESPTR(PL_compiling.cop_io);
3333 PL_compiling.cop_io = Nullsv;
3335 if (filter_sub || filter_child_proc) {
3336 SV *datasv = filter_add(run_user_filter, Nullsv);
3337 IoLINES(datasv) = filter_has_file;
3338 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3339 IoTOP_GV(datasv) = (GV *)filter_state;
3340 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3343 /* switch to eval mode */
3344 push_return(PL_op->op_next);
3345 PUSHBLOCK(cx, CXt_EVAL, SP);
3346 PUSHEVAL(cx, name, Nullgv);
3348 SAVECOPLINE(&PL_compiling);
3349 CopLINE_set(&PL_compiling, 0);
3353 /* Store and reset encoding. */
3354 encoding = PL_encoding;
3355 PL_encoding = Nullsv;
3357 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3359 /* Restore encoding. */
3360 PL_encoding = encoding;
3367 return pp_require();
3373 register PERL_CONTEXT *cx;
3375 I32 gimme = GIMME_V, was = PL_sub_generation;
3376 char tbuf[TYPE_DIGITS(long) + 12];
3377 char *tmpbuf = tbuf;
3386 TAINT_PROPER("eval");
3392 /* switch to eval mode */
3394 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3395 SV *sv = sv_newmortal();
3396 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3397 (unsigned long)++PL_evalseq,
3398 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3402 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3403 SAVECOPFILE_FREE(&PL_compiling);
3404 CopFILE_set(&PL_compiling, tmpbuf+2);
3405 SAVECOPLINE(&PL_compiling);
3406 CopLINE_set(&PL_compiling, 1);
3407 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3408 deleting the eval's FILEGV from the stash before gv_check() runs
3409 (i.e. before run-time proper). To work around the coredump that
3410 ensues, we always turn GvMULTI_on for any globals that were
3411 introduced within evals. See force_ident(). GSAR 96-10-12 */
3412 safestr = savepv(tmpbuf);
3413 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3415 PL_hints = PL_op->op_targ;
3416 SAVESPTR(PL_compiling.cop_warnings);
3417 if (specialWARN(PL_curcop->cop_warnings))
3418 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3420 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3421 SAVEFREESV(PL_compiling.cop_warnings);
3423 SAVESPTR(PL_compiling.cop_io);
3424 if (specialCopIO(PL_curcop->cop_io))
3425 PL_compiling.cop_io = PL_curcop->cop_io;
3427 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3428 SAVEFREESV(PL_compiling.cop_io);
3430 /* special case: an eval '' executed within the DB package gets lexically
3431 * placed in the first non-DB CV rather than the current CV - this
3432 * allows the debugger to execute code, find lexicals etc, in the
3433 * scope of the code being debugged. Passing &seq gets find_runcv
3434 * to do the dirty work for us */
3435 runcv = find_runcv(&seq);
3437 push_return(PL_op->op_next);
3438 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3439 PUSHEVAL(cx, 0, Nullgv);
3441 /* prepare to compile string */
3443 if (PERLDB_LINE && PL_curstash != PL_debstash)
3444 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3446 ret = doeval(gimme, NULL, runcv, seq);
3447 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3448 && ret != PL_op->op_next) { /* Successive compilation. */
3449 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3451 return DOCATCH(ret);
3461 register PERL_CONTEXT *cx;
3463 U8 save_flags = PL_op -> op_flags;
3468 retop = pop_return();
3471 if (gimme == G_VOID)
3473 else if (gimme == G_SCALAR) {
3476 if (SvFLAGS(TOPs) & SVs_TEMP)
3479 *MARK = sv_mortalcopy(TOPs);
3483 *MARK = &PL_sv_undef;
3488 /* in case LEAVE wipes old return values */
3489 for (mark = newsp + 1; mark <= SP; mark++) {
3490 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3491 *mark = sv_mortalcopy(*mark);
3492 TAINT_NOT; /* Each item is independent */
3496 PL_curpm = newpm; /* Don't pop $1 et al till now */
3499 assert(CvDEPTH(PL_compcv) == 1);
3501 CvDEPTH(PL_compcv) = 0;
3504 if (optype == OP_REQUIRE &&
3505 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3507 /* Unassume the success we assumed earlier. */
3508 SV *nsv = cx->blk_eval.old_namesv;
3509 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3510 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3511 /* die_where() did LEAVE, or we won't be here */
3515 if (!(save_flags & OPf_SPECIAL))
3525 register PERL_CONTEXT *cx;
3526 I32 gimme = GIMME_V;
3531 push_return(cLOGOP->op_other->op_next);
3532 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3535 PL_in_eval = EVAL_INEVAL;
3538 return DOCATCH(PL_op->op_next);
3549 register PERL_CONTEXT *cx;
3554 retop = pop_return();
3557 if (gimme == G_VOID)
3559 else if (gimme == G_SCALAR) {
3562 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3565 *MARK = sv_mortalcopy(TOPs);
3569 *MARK = &PL_sv_undef;
3574 /* in case LEAVE wipes old return values */
3575 for (mark = newsp + 1; mark <= SP; mark++) {
3576 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3577 *mark = sv_mortalcopy(*mark);
3578 TAINT_NOT; /* Each item is independent */
3582 PL_curpm = newpm; /* Don't pop $1 et al till now */
3590 S_doparseform(pTHX_ SV *sv)
3593 register char *s = SvPV_force(sv, len);
3594 register char *send = s + len;
3595 register char *base = Nullch;
3596 register I32 skipspaces = 0;
3597 bool noblank = FALSE;
3598 bool repeat = FALSE;
3599 bool postspace = FALSE;
3605 bool unchopnum = FALSE;
3606 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3609 Perl_croak(aTHX_ "Null picture in formline");
3611 /* estimate the buffer size needed */
3612 for (base = s; s <= send; s++) {
3613 if (*s == '\n' || *s == '@' || *s == '^')
3619 New(804, fops, maxops, U32);
3624 *fpc++ = FF_LINEMARK;
3625 noblank = repeat = FALSE;
3643 case ' ': case '\t':
3650 } /* else FALL THROUGH */
3658 *fpc++ = FF_LITERAL;
3666 *fpc++ = (U16)skipspaces;
3670 *fpc++ = FF_NEWLINE;
3674 arg = fpc - linepc + 1;
3681 *fpc++ = FF_LINEMARK;
3682 noblank = repeat = FALSE;
3691 ischop = s[-1] == '^';
3697 arg = (s - base) - 1;
3699 *fpc++ = FF_LITERAL;
3707 *fpc++ = 2; /* skip the @* or ^* */
3709 *fpc++ = FF_LINESNGL;
3712 *fpc++ = FF_LINEGLOB;
3714 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3715 arg = ischop ? 512 : 0;
3725 arg |= 256 + (s - f);
3727 *fpc++ = s - base; /* fieldsize for FETCH */
3728 *fpc++ = FF_DECIMAL;
3730 unchopnum |= ! ischop;
3732 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3733 arg = ischop ? 512 : 0;
3735 s++; /* skip the '0' first */
3744 arg |= 256 + (s - f);
3746 *fpc++ = s - base; /* fieldsize for FETCH */
3747 *fpc++ = FF_0DECIMAL;
3749 unchopnum |= ! ischop;
3753 bool ismore = FALSE;
3756 while (*++s == '>') ;
3757 prespace = FF_SPACE;
3759 else if (*s == '|') {
3760 while (*++s == '|') ;
3761 prespace = FF_HALFSPACE;
3766 while (*++s == '<') ;
3769 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3773 *fpc++ = s - base; /* fieldsize for FETCH */
3775 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3778 *fpc++ = (U16)prespace;
3792 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3794 { /* need to jump to the next word */
3796 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3797 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3798 s = SvPVX(sv) + SvCUR(sv) + z;
3800 Copy(fops, s, arg, U32);
3802 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3805 if (unchopnum && repeat)
3806 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3812 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3814 /* Can value be printed in fldsize chars, using %*.*f ? */
3818 int intsize = fldsize - (value < 0 ? 1 : 0);
3825 while (intsize--) pwr *= 10.0;
3826 while (frcsize--) eps /= 10.0;
3829 if (value + eps >= pwr)
3832 if (value - eps <= -pwr)
3839 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3841 SV *datasv = FILTER_DATA(idx);
3842 int filter_has_file = IoLINES(datasv);
3843 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3844 SV *filter_state = (SV *)IoTOP_GV(datasv);
3845 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3848 /* I was having segfault trouble under Linux 2.2.5 after a
3849 parse error occured. (Had to hack around it with a test
3850 for PL_error_count == 0.) Solaris doesn't segfault --
3851 not sure where the trouble is yet. XXX */
3853 if (filter_has_file) {
3854 len = FILTER_READ(idx+1, buf_sv, maxlen);
3857 if (filter_sub && len >= 0) {
3868 PUSHs(sv_2mortal(newSViv(maxlen)));
3870 PUSHs(filter_state);
3873 count = call_sv(filter_sub, G_SCALAR);
3889 IoLINES(datasv) = 0;
3890 if (filter_child_proc) {
3891 SvREFCNT_dec(filter_child_proc);
3892 IoFMT_GV(datasv) = Nullgv;
3895 SvREFCNT_dec(filter_state);
3896 IoTOP_GV(datasv) = Nullgv;
3899 SvREFCNT_dec(filter_sub);
3900 IoBOTTOM_GV(datasv) = Nullgv;
3902 filter_del(run_user_filter);
3908 /* perhaps someone can come up with a better name for
3909 this? it is not really "absolute", per se ... */
3911 S_path_is_absolute(pTHX_ char *name)
3913 if (PERL_FILE_IS_ABSOLUTE(name)
3914 #ifdef MACOS_TRADITIONAL
3917 || (*name == '.' && (name[1] == '/' ||
3918 (name[1] == '.' && name[2] == '/'))))