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;
943 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
945 LEAVE; /* exit inner scope */
948 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
950 (void)POPMARK; /* pop top */
951 LEAVE; /* exit outer scope */
952 (void)POPMARK; /* pop src */
953 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
954 (void)POPMARK; /* pop dst */
955 SP = PL_stack_base + POPMARK; /* pop original mark */
956 if (gimme == G_SCALAR) {
960 else if (gimme == G_ARRAY)
967 ENTER; /* enter inner scope */
970 /* set $_ to the new source item */
971 src = PL_stack_base[PL_markstack_ptr[-1]];
973 if (PL_op->op_private & OPpGREP_LEX)
974 PAD_SVl(PL_op->op_targ) = src;
978 RETURNOP(cLOGOP->op_other);
986 if (GIMME == G_ARRAY)
988 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
989 return cLOGOP->op_other;
998 if (GIMME == G_ARRAY) {
999 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1003 SV *targ = PAD_SV(PL_op->op_targ);
1006 if (PL_op->op_private & OPpFLIP_LINENUM) {
1007 if (GvIO(PL_last_in_gv)) {
1008 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1011 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1012 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1018 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1019 if (PL_op->op_flags & OPf_SPECIAL) {
1027 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1036 /* This code tries to decide if "$left .. $right" should use the
1037 magical string increment, or if the range is numeric (we make
1038 an exception for .."0" [#18165]). AMS 20021031. */
1040 #define RANGE_IS_NUMERIC(left,right) ( \
1041 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1042 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1043 (looks_like_number(left) && SvPOKp(left) && *SvPVX(left) != '0' && \
1044 looks_like_number(right)))
1050 if (GIMME == G_ARRAY) {
1056 if (SvGMAGICAL(left))
1058 if (SvGMAGICAL(right))
1061 if (RANGE_IS_NUMERIC(left,right)) {
1062 if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1063 DIE(aTHX_ "Range iterator outside integer range");
1074 sv = sv_2mortal(newSViv(i++));
1079 SV *final = sv_mortalcopy(right);
1081 char *tmps = SvPV(final, len);
1083 sv = sv_mortalcopy(left);
1085 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1087 if (strEQ(SvPVX(sv),tmps))
1089 sv = sv_2mortal(newSVsv(sv));
1096 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1100 if (PL_op->op_private & OPpFLIP_LINENUM) {
1101 if (GvIO(PL_last_in_gv)) {
1102 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1105 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1106 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1114 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1115 sv_catpv(targ, "E0");
1125 static char *context_name[] = {
1136 S_dopoptolabel(pTHX_ char *label)
1139 register PERL_CONTEXT *cx;
1141 for (i = cxstack_ix; i >= 0; i--) {
1143 switch (CxTYPE(cx)) {
1149 if (ckWARN(WARN_EXITING))
1150 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1151 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1152 if (CxTYPE(cx) == CXt_NULL)
1156 if (!cx->blk_loop.label ||
1157 strNE(label, cx->blk_loop.label) ) {
1158 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1159 (long)i, cx->blk_loop.label));
1162 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1170 Perl_dowantarray(pTHX)
1172 I32 gimme = block_gimme();
1173 return (gimme == G_VOID) ? G_SCALAR : gimme;
1177 Perl_block_gimme(pTHX)
1181 cxix = dopoptosub(cxstack_ix);
1185 switch (cxstack[cxix].blk_gimme) {
1193 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1200 Perl_is_lvalue_sub(pTHX)
1204 cxix = dopoptosub(cxstack_ix);
1205 assert(cxix >= 0); /* We should only be called from inside subs */
1207 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1208 return cxstack[cxix].blk_sub.lval;
1214 S_dopoptosub(pTHX_ I32 startingblock)
1216 return dopoptosub_at(cxstack, startingblock);
1220 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1223 register PERL_CONTEXT *cx;
1224 for (i = startingblock; i >= 0; i--) {
1226 switch (CxTYPE(cx)) {
1232 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1240 S_dopoptoeval(pTHX_ I32 startingblock)
1243 register PERL_CONTEXT *cx;
1244 for (i = startingblock; i >= 0; i--) {
1246 switch (CxTYPE(cx)) {
1250 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1258 S_dopoptoloop(pTHX_ I32 startingblock)
1261 register PERL_CONTEXT *cx;
1262 for (i = startingblock; i >= 0; i--) {
1264 switch (CxTYPE(cx)) {
1270 if (ckWARN(WARN_EXITING))
1271 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1272 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1273 if ((CxTYPE(cx)) == CXt_NULL)
1277 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1285 Perl_dounwind(pTHX_ I32 cxix)
1287 register PERL_CONTEXT *cx;
1290 while (cxstack_ix > cxix) {
1292 cx = &cxstack[cxstack_ix];
1293 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1294 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1295 /* Note: we don't need to restore the base context info till the end. */
1296 switch (CxTYPE(cx)) {
1299 continue; /* not break */
1321 Perl_qerror(pTHX_ SV *err)
1324 sv_catsv(ERRSV, err);
1326 sv_catsv(PL_errors, err);
1328 Perl_warn(aTHX_ "%"SVf, err);
1333 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1339 register PERL_CONTEXT *cx;
1344 if (PL_in_eval & EVAL_KEEPERR) {
1345 static char prefix[] = "\t(in cleanup) ";
1350 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1353 if (*e != *message || strNE(e,message))
1357 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1358 sv_catpvn(err, prefix, sizeof(prefix)-1);
1359 sv_catpvn(err, message, msglen);
1360 if (ckWARN(WARN_MISC)) {
1361 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1362 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1367 sv_setpvn(ERRSV, message, msglen);
1371 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1372 && PL_curstackinfo->si_prev)
1381 if (cxix < cxstack_ix)
1384 POPBLOCK(cx,PL_curpm);
1385 if (CxTYPE(cx) != CXt_EVAL) {
1387 message = SvPVx(ERRSV, msglen);
1388 PerlIO_write(Perl_error_log, "panic: die ", 11);
1389 PerlIO_write(Perl_error_log, message, msglen);
1394 if (gimme == G_SCALAR)
1395 *++newsp = &PL_sv_undef;
1396 PL_stack_sp = newsp;
1400 /* LEAVE could clobber PL_curcop (see save_re_context())
1401 * XXX it might be better to find a way to avoid messing with
1402 * PL_curcop in save_re_context() instead, but this is a more
1403 * minimal fix --GSAR */
1404 PL_curcop = cx->blk_oldcop;
1406 if (optype == OP_REQUIRE) {
1407 char* msg = SvPVx(ERRSV, n_a);
1408 SV *nsv = cx->blk_eval.old_namesv;
1409 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
1411 DIE(aTHX_ "%sCompilation failed in require",
1412 *msg ? msg : "Unknown error\n");
1414 return pop_return();
1418 message = SvPVx(ERRSV, msglen);
1420 write_to_stderr(message, msglen);
1429 if (SvTRUE(left) != SvTRUE(right))
1441 RETURNOP(cLOGOP->op_other);
1450 RETURNOP(cLOGOP->op_other);
1459 if (!sv || !SvANY(sv)) {
1460 RETURNOP(cLOGOP->op_other);
1463 switch (SvTYPE(sv)) {
1465 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1469 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1473 if (CvROOT(sv) || CvXSUB(sv))
1483 RETURNOP(cLOGOP->op_other);
1489 register I32 cxix = dopoptosub(cxstack_ix);
1490 register PERL_CONTEXT *cx;
1491 register PERL_CONTEXT *ccstack = cxstack;
1492 PERL_SI *top_si = PL_curstackinfo;
1503 /* we may be in a higher stacklevel, so dig down deeper */
1504 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1505 top_si = top_si->si_prev;
1506 ccstack = top_si->si_cxstack;
1507 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1510 if (GIMME != G_ARRAY) {
1516 if (PL_DBsub && cxix >= 0 &&
1517 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1521 cxix = dopoptosub_at(ccstack, cxix - 1);
1524 cx = &ccstack[cxix];
1525 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1526 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1527 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1528 field below is defined for any cx. */
1529 if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1530 cx = &ccstack[dbcxix];
1533 stashname = CopSTASHPV(cx->blk_oldcop);
1534 if (GIMME != G_ARRAY) {
1537 PUSHs(&PL_sv_undef);
1540 sv_setpv(TARG, stashname);
1549 PUSHs(&PL_sv_undef);
1551 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1552 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1553 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1556 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1557 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1558 /* So is ccstack[dbcxix]. */
1561 gv_efullname3(sv, cvgv, Nullch);
1562 PUSHs(sv_2mortal(sv));
1563 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1566 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1567 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1571 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1572 PUSHs(sv_2mortal(newSViv(0)));
1574 gimme = (I32)cx->blk_gimme;
1575 if (gimme == G_VOID)
1576 PUSHs(&PL_sv_undef);
1578 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1579 if (CxTYPE(cx) == CXt_EVAL) {
1581 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1582 PUSHs(cx->blk_eval.cur_text);
1586 else if (cx->blk_eval.old_namesv) {
1587 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1590 /* eval BLOCK (try blocks have old_namesv == 0) */
1592 PUSHs(&PL_sv_undef);
1593 PUSHs(&PL_sv_undef);
1597 PUSHs(&PL_sv_undef);
1598 PUSHs(&PL_sv_undef);
1600 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1601 && CopSTASH_eq(PL_curcop, PL_debstash))
1603 AV *ary = cx->blk_sub.argarray;
1604 int off = AvARRAY(ary) - AvALLOC(ary);
1608 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1611 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1614 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1615 av_extend(PL_dbargs, AvFILLp(ary) + off);
1616 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1617 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1619 /* XXX only hints propagated via op_private are currently
1620 * visible (others are not easily accessible, since they
1621 * use the global PL_hints) */
1622 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1623 HINT_PRIVATE_MASK)));
1626 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1628 if (old_warnings == pWARN_NONE ||
1629 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1630 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1631 else if (old_warnings == pWARN_ALL ||
1632 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1633 /* Get the bit mask for $warnings::Bits{all}, because
1634 * it could have been extended by warnings::register */
1636 HV *bits = get_hv("warnings::Bits", FALSE);
1637 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1638 mask = newSVsv(*bits_all);
1641 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1645 mask = newSVsv(old_warnings);
1646 PUSHs(sv_2mortal(mask));
1661 sv_reset(tmps, CopSTASH(PL_curcop));
1671 /* like pp_nextstate, but used instead when the debugger is active */
1675 PL_curcop = (COP*)PL_op;
1676 TAINT_NOT; /* Each statement is presumed innocent */
1677 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1680 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1681 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1685 register PERL_CONTEXT *cx;
1686 I32 gimme = G_ARRAY;
1693 DIE(aTHX_ "No DB::DB routine defined");
1695 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1696 /* don't do recursive DB::DB call */
1708 push_return(PL_op->op_next);
1709 PUSHBLOCK(cx, CXt_SUB, SP);
1712 PAD_SET_CUR(CvPADLIST(cv),1);
1713 RETURNOP(CvSTART(cv));
1727 register PERL_CONTEXT *cx;
1728 I32 gimme = GIMME_V;
1730 U32 cxtype = CXt_LOOP;
1738 if (PL_op->op_targ) {
1739 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1740 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1741 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1742 SVs_PADSTALE, SVs_PADSTALE);
1744 #ifndef USE_ITHREADS
1745 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1748 SAVEPADSV(PL_op->op_targ);
1749 iterdata = INT2PTR(void*, PL_op->op_targ);
1750 cxtype |= CXp_PADVAR;
1755 svp = &GvSV(gv); /* symbol table variable */
1756 SAVEGENERICSV(*svp);
1759 iterdata = (void*)gv;
1765 PUSHBLOCK(cx, cxtype, SP);
1767 PUSHLOOP(cx, iterdata, MARK);
1769 PUSHLOOP(cx, svp, MARK);
1771 if (PL_op->op_flags & OPf_STACKED) {
1772 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1773 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1775 if (RANGE_IS_NUMERIC(sv,(SV*)cx->blk_loop.iterary)) {
1776 if (SvNV(sv) < IV_MIN ||
1777 SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1778 DIE(aTHX_ "Range iterator outside integer range");
1779 cx->blk_loop.iterix = SvIV(sv);
1780 cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1783 cx->blk_loop.iterlval = newSVsv(sv);
1787 cx->blk_loop.iterary = PL_curstack;
1788 AvFILLp(PL_curstack) = SP - PL_stack_base;
1789 cx->blk_loop.iterix = MARK - PL_stack_base;
1798 register PERL_CONTEXT *cx;
1799 I32 gimme = GIMME_V;
1805 PUSHBLOCK(cx, CXt_LOOP, SP);
1806 PUSHLOOP(cx, 0, SP);
1814 register PERL_CONTEXT *cx;
1822 newsp = PL_stack_base + cx->blk_loop.resetsp;
1825 if (gimme == G_VOID)
1827 else if (gimme == G_SCALAR) {
1829 *++newsp = sv_mortalcopy(*SP);
1831 *++newsp = &PL_sv_undef;
1835 *++newsp = sv_mortalcopy(*++mark);
1836 TAINT_NOT; /* Each item is independent */
1842 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1843 PL_curpm = newpm; /* ... and pop $1 et al */
1855 register PERL_CONTEXT *cx;
1856 bool popsub2 = FALSE;
1857 bool clear_errsv = FALSE;
1864 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1865 if (cxstack_ix == PL_sortcxix
1866 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1868 if (cxstack_ix > PL_sortcxix)
1869 dounwind(PL_sortcxix);
1870 AvARRAY(PL_curstack)[1] = *SP;
1871 PL_stack_sp = PL_stack_base + 1;
1876 cxix = dopoptosub(cxstack_ix);
1878 DIE(aTHX_ "Can't return outside a subroutine");
1879 if (cxix < cxstack_ix)
1883 switch (CxTYPE(cx)) {
1886 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1889 if (!(PL_in_eval & EVAL_KEEPERR))
1895 if (optype == OP_REQUIRE &&
1896 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1898 /* Unassume the success we assumed earlier. */
1899 SV *nsv = cx->blk_eval.old_namesv;
1900 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1901 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1908 DIE(aTHX_ "panic: return");
1912 if (gimme == G_SCALAR) {
1915 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1917 *++newsp = SvREFCNT_inc(*SP);
1922 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1924 *++newsp = sv_mortalcopy(sv);
1929 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1932 *++newsp = sv_mortalcopy(*SP);
1935 *++newsp = &PL_sv_undef;
1937 else if (gimme == G_ARRAY) {
1938 while (++MARK <= SP) {
1939 *++newsp = (popsub2 && SvTEMP(*MARK))
1940 ? *MARK : sv_mortalcopy(*MARK);
1941 TAINT_NOT; /* Each item is independent */
1944 PL_stack_sp = newsp;
1947 /* Stack values are safe: */
1950 POPSUB(cx,sv); /* release CV and @_ ... */
1954 PL_curpm = newpm; /* ... and pop $1 et al */
1959 return pop_return();
1966 register PERL_CONTEXT *cx;
1976 if (PL_op->op_flags & OPf_SPECIAL) {
1977 cxix = dopoptoloop(cxstack_ix);
1979 DIE(aTHX_ "Can't \"last\" outside a loop block");
1982 cxix = dopoptolabel(cPVOP->op_pv);
1984 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1986 if (cxix < cxstack_ix)
1990 cxstack_ix++; /* temporarily protect top context */
1992 switch (CxTYPE(cx)) {
1995 newsp = PL_stack_base + cx->blk_loop.resetsp;
1996 nextop = cx->blk_loop.last_op->op_next;
2000 nextop = pop_return();
2004 nextop = pop_return();
2008 nextop = pop_return();
2011 DIE(aTHX_ "panic: last");
2015 if (gimme == G_SCALAR) {
2017 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2018 ? *SP : sv_mortalcopy(*SP);
2020 *++newsp = &PL_sv_undef;
2022 else if (gimme == G_ARRAY) {
2023 while (++MARK <= SP) {
2024 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2025 ? *MARK : sv_mortalcopy(*MARK);
2026 TAINT_NOT; /* Each item is independent */
2034 /* Stack values are safe: */
2037 POPLOOP(cx); /* release loop vars ... */
2041 POPSUB(cx,sv); /* release CV and @_ ... */
2044 PL_curpm = newpm; /* ... and pop $1 et al */
2053 register PERL_CONTEXT *cx;
2056 if (PL_op->op_flags & OPf_SPECIAL) {
2057 cxix = dopoptoloop(cxstack_ix);
2059 DIE(aTHX_ "Can't \"next\" outside a loop block");
2062 cxix = dopoptolabel(cPVOP->op_pv);
2064 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2066 if (cxix < cxstack_ix)
2069 /* clear off anything above the scope we're re-entering, but
2070 * save the rest until after a possible continue block */
2071 inner = PL_scopestack_ix;
2073 if (PL_scopestack_ix < inner)
2074 leave_scope(PL_scopestack[PL_scopestack_ix]);
2075 return cx->blk_loop.next_op;
2081 register PERL_CONTEXT *cx;
2084 if (PL_op->op_flags & OPf_SPECIAL) {
2085 cxix = dopoptoloop(cxstack_ix);
2087 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2090 cxix = dopoptolabel(cPVOP->op_pv);
2092 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2094 if (cxix < cxstack_ix)
2098 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2099 LEAVE_SCOPE(oldsave);
2100 return cx->blk_loop.redo_op;
2104 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2108 static char too_deep[] = "Target of goto is too deeply nested";
2111 Perl_croak(aTHX_ too_deep);
2112 if (o->op_type == OP_LEAVE ||
2113 o->op_type == OP_SCOPE ||
2114 o->op_type == OP_LEAVELOOP ||
2115 o->op_type == OP_LEAVESUB ||
2116 o->op_type == OP_LEAVETRY)
2118 *ops++ = cUNOPo->op_first;
2120 Perl_croak(aTHX_ too_deep);
2123 if (o->op_flags & OPf_KIDS) {
2124 /* First try all the kids at this level, since that's likeliest. */
2125 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2126 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2127 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2130 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2131 if (kid == PL_lastgotoprobe)
2133 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2136 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2137 ops[-1]->op_type == OP_DBSTATE)
2142 if ((o = dofindlabel(kid, label, ops, oplimit)))
2161 register PERL_CONTEXT *cx;
2162 #define GOTO_DEPTH 64
2163 OP *enterops[GOTO_DEPTH];
2165 int do_dump = (PL_op->op_type == OP_DUMP);
2166 static char must_have_label[] = "goto must have label";
2169 if (PL_op->op_flags & OPf_STACKED) {
2173 /* This egregious kludge implements goto &subroutine */
2174 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2176 register PERL_CONTEXT *cx;
2177 CV* cv = (CV*)SvRV(sv);
2183 if (!CvROOT(cv) && !CvXSUB(cv)) {
2188 /* autoloaded stub? */
2189 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2191 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2192 GvNAMELEN(gv), FALSE);
2193 if (autogv && (cv = GvCV(autogv)))
2195 tmpstr = sv_newmortal();
2196 gv_efullname3(tmpstr, gv, Nullch);
2197 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2199 DIE(aTHX_ "Goto undefined subroutine");
2202 /* First do some returnish stuff. */
2203 SvREFCNT_inc(cv); /* avoid premature free during unwind */
2205 cxix = dopoptosub(cxstack_ix);
2207 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2208 if (cxix < cxstack_ix)
2212 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2214 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2215 /* put @_ back onto stack */
2216 AV* av = cx->blk_sub.argarray;
2218 items = AvFILLp(av) + 1;
2220 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2221 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2222 PL_stack_sp += items;
2223 SvREFCNT_dec(GvAV(PL_defgv));
2224 GvAV(PL_defgv) = cx->blk_sub.savearray;
2225 /* abandon @_ if it got reified */
2227 (void)sv_2mortal((SV*)av); /* delay until return */
2229 av_extend(av, items-1);
2230 AvFLAGS(av) = AVf_REIFY;
2231 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2236 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2238 av = GvAV(PL_defgv);
2239 items = AvFILLp(av) + 1;
2241 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2242 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2243 PL_stack_sp += items;
2245 if (CxTYPE(cx) == CXt_SUB &&
2246 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2247 SvREFCNT_dec(cx->blk_sub.cv);
2248 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2249 LEAVE_SCOPE(oldsave);
2251 /* Now do some callish stuff. */
2253 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2255 #ifdef PERL_XSUB_OLDSTYLE
2256 if (CvOLDSTYLE(cv)) {
2257 I32 (*fp3)(int,int,int);
2262 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2263 items = (*fp3)(CvXSUBANY(cv).any_i32,
2264 mark - PL_stack_base + 1,
2266 SP = PL_stack_base + items;
2269 #endif /* PERL_XSUB_OLDSTYLE */
2274 PL_stack_sp--; /* There is no cv arg. */
2275 /* Push a mark for the start of arglist */
2277 (void)(*CvXSUB(cv))(aTHX_ cv);
2278 /* Pop the current context like a decent sub should */
2279 POPBLOCK(cx, PL_curpm);
2280 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2283 return pop_return();
2286 AV* padlist = CvPADLIST(cv);
2287 if (CxTYPE(cx) == CXt_EVAL) {
2288 PL_in_eval = cx->blk_eval.old_in_eval;
2289 PL_eval_root = cx->blk_eval.old_eval_root;
2290 cx->cx_type = CXt_SUB;
2291 cx->blk_sub.hasargs = 0;
2293 cx->blk_sub.cv = cv;
2294 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2297 if (CvDEPTH(cv) < 2)
2298 (void)SvREFCNT_inc(cv);
2300 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2301 sub_crush_depth(cv);
2302 pad_push(padlist, CvDEPTH(cv), cx->blk_sub.hasargs);
2304 PAD_SET_CUR(padlist, CvDEPTH(cv));
2305 if (cx->blk_sub.hasargs)
2307 AV* av = (AV*)PAD_SVl(0);
2310 cx->blk_sub.savearray = GvAV(PL_defgv);
2311 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2312 CX_CURPAD_SAVE(cx->blk_sub);
2313 cx->blk_sub.argarray = av;
2316 if (items >= AvMAX(av) + 1) {
2318 if (AvARRAY(av) != ary) {
2319 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2320 SvPVX(av) = (char*)ary;
2322 if (items >= AvMAX(av) + 1) {
2323 AvMAX(av) = items - 1;
2324 Renew(ary,items+1,SV*);
2326 SvPVX(av) = (char*)ary;
2329 Copy(mark,AvARRAY(av),items,SV*);
2330 AvFILLp(av) = items - 1;
2331 assert(!AvREAL(av));
2338 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2340 * We do not care about using sv to call CV;
2341 * it's for informational purposes only.
2343 SV *sv = GvSV(PL_DBsub);
2346 if (PERLDB_SUB_NN) {
2347 (void)SvUPGRADE(sv, SVt_PVIV);
2350 SvIVX(sv) = PTR2IV(cv); /* Do it the quickest way */
2353 gv_efullname3(sv, CvGV(cv), Nullch);
2356 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2357 PUSHMARK( PL_stack_sp );
2358 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2362 RETURNOP(CvSTART(cv));
2366 label = SvPV(sv,n_a);
2367 if (!(do_dump || *label))
2368 DIE(aTHX_ must_have_label);
2371 else if (PL_op->op_flags & OPf_SPECIAL) {
2373 DIE(aTHX_ must_have_label);
2376 label = cPVOP->op_pv;
2378 if (label && *label) {
2380 bool leaving_eval = FALSE;
2381 bool in_block = FALSE;
2382 PERL_CONTEXT *last_eval_cx = 0;
2386 PL_lastgotoprobe = 0;
2388 for (ix = cxstack_ix; ix >= 0; ix--) {
2390 switch (CxTYPE(cx)) {
2392 leaving_eval = TRUE;
2393 if (!CxTRYBLOCK(cx)) {
2394 gotoprobe = (last_eval_cx ?
2395 last_eval_cx->blk_eval.old_eval_root :
2400 /* else fall through */
2402 gotoprobe = cx->blk_oldcop->op_sibling;
2408 gotoprobe = cx->blk_oldcop->op_sibling;
2411 gotoprobe = PL_main_root;
2414 if (CvDEPTH(cx->blk_sub.cv)) {
2415 gotoprobe = CvROOT(cx->blk_sub.cv);
2421 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2424 DIE(aTHX_ "panic: goto");
2425 gotoprobe = PL_main_root;
2429 retop = dofindlabel(gotoprobe, label,
2430 enterops, enterops + GOTO_DEPTH);
2434 PL_lastgotoprobe = gotoprobe;
2437 DIE(aTHX_ "Can't find label %s", label);
2439 /* if we're leaving an eval, check before we pop any frames
2440 that we're not going to punt, otherwise the error
2443 if (leaving_eval && *enterops && enterops[1]) {
2445 for (i = 1; enterops[i]; i++)
2446 if (enterops[i]->op_type == OP_ENTERITER)
2447 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2450 /* pop unwanted frames */
2452 if (ix < cxstack_ix) {
2459 oldsave = PL_scopestack[PL_scopestack_ix];
2460 LEAVE_SCOPE(oldsave);
2463 /* push wanted frames */
2465 if (*enterops && enterops[1]) {
2467 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2468 for (; enterops[ix]; ix++) {
2469 PL_op = enterops[ix];
2470 /* Eventually we may want to stack the needed arguments
2471 * for each op. For now, we punt on the hard ones. */
2472 if (PL_op->op_type == OP_ENTERITER)
2473 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2474 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2482 if (!retop) retop = PL_main_start;
2484 PL_restartop = retop;
2485 PL_do_undump = TRUE;
2489 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2490 PL_do_undump = FALSE;
2506 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2508 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2511 PL_exit_flags |= PERL_EXIT_EXPECTED;
2513 PUSHs(&PL_sv_undef);
2521 NV value = SvNVx(GvSV(cCOP->cop_gv));
2522 register I32 match = I_32(value);
2525 if (((NV)match) > value)
2526 --match; /* was fractional--truncate other way */
2528 match -= cCOP->uop.scop.scop_offset;
2531 else if (match > cCOP->uop.scop.scop_max)
2532 match = cCOP->uop.scop.scop_max;
2533 PL_op = cCOP->uop.scop.scop_next[match];
2543 PL_op = PL_op->op_next; /* can't assume anything */
2546 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2547 match -= cCOP->uop.scop.scop_offset;
2550 else if (match > cCOP->uop.scop.scop_max)
2551 match = cCOP->uop.scop.scop_max;
2552 PL_op = cCOP->uop.scop.scop_next[match];
2561 S_save_lines(pTHX_ AV *array, SV *sv)
2563 register char *s = SvPVX(sv);
2564 register char *send = SvPVX(sv) + SvCUR(sv);
2566 register I32 line = 1;
2568 while (s && s < send) {
2569 SV *tmpstr = NEWSV(85,0);
2571 sv_upgrade(tmpstr, SVt_PVMG);
2572 t = strchr(s, '\n');
2578 sv_setpvn(tmpstr, s, t - s);
2579 av_store(array, line++, tmpstr);
2584 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2586 S_docatch_body(pTHX_ va_list args)
2588 return docatch_body();
2593 S_docatch_body(pTHX)
2600 S_docatch(pTHX_ OP *o)
2605 volatile PERL_SI *cursi = PL_curstackinfo;
2609 assert(CATCH_GET == TRUE);
2613 /* Normally, the leavetry at the end of this block of ops will
2614 * pop an op off the return stack and continue there. By setting
2615 * the op to Nullop, we force an exit from the inner runops()
2618 retop = pop_return();
2619 push_return(Nullop);
2621 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2623 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2629 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2635 /* die caught by an inner eval - continue inner loop */
2636 if (PL_restartop && cursi == PL_curstackinfo) {
2637 PL_op = PL_restartop;
2641 /* a die in this eval - continue in outer loop */
2657 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, PAD** padp)
2658 /* sv Text to convert to OP tree. */
2659 /* startop op_free() this to undo. */
2660 /* code Short string id of the caller. */
2662 dSP; /* Make POPBLOCK work. */
2665 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2669 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2670 char *tmpbuf = tbuf;
2673 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2678 /* switch to eval mode */
2680 if (IN_PERL_COMPILETIME) {
2681 SAVECOPSTASH_FREE(&PL_compiling);
2682 CopSTASH_set(&PL_compiling, PL_curstash);
2684 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2685 SV *sv = sv_newmortal();
2686 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2687 code, (unsigned long)++PL_evalseq,
2688 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2692 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2693 SAVECOPFILE_FREE(&PL_compiling);
2694 CopFILE_set(&PL_compiling, tmpbuf+2);
2695 SAVECOPLINE(&PL_compiling);
2696 CopLINE_set(&PL_compiling, 1);
2697 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2698 deleting the eval's FILEGV from the stash before gv_check() runs
2699 (i.e. before run-time proper). To work around the coredump that
2700 ensues, we always turn GvMULTI_on for any globals that were
2701 introduced within evals. See force_ident(). GSAR 96-10-12 */
2702 safestr = savepv(tmpbuf);
2703 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2705 #ifdef OP_IN_REGISTER
2710 PL_hints &= HINT_UTF8;
2712 /* we get here either during compilation, or via pp_regcomp at runtime */
2713 runtime = IN_PERL_RUNTIME;
2715 runcv = find_runcv(NULL);
2718 PL_op->op_type = OP_ENTEREVAL;
2719 PL_op->op_flags = 0; /* Avoid uninit warning. */
2720 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2721 PUSHEVAL(cx, 0, Nullgv);
2724 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2726 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2727 POPBLOCK(cx,PL_curpm);
2730 (*startop)->op_type = OP_NULL;
2731 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2733 /* XXX DAPM do this properly one year */
2734 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2736 if (IN_PERL_COMPILETIME)
2737 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2738 #ifdef OP_IN_REGISTER
2746 =for apidoc find_runcv
2748 Locate the CV corresponding to the currently executing sub or eval.
2749 If db_seqp is non_null, skip CVs that are in the DB package and populate
2750 *db_seqp with the cop sequence number at the point that the DB:: code was
2751 entered. (allows debuggers to eval in the scope of the breakpoint rather
2752 than in in the scope of the debuger itself).
2758 Perl_find_runcv(pTHX_ U32 *db_seqp)
2765 *db_seqp = PL_curcop->cop_seq;
2766 for (si = PL_curstackinfo; si; si = si->si_prev) {
2767 for (ix = si->si_cxix; ix >= 0; ix--) {
2768 cx = &(si->si_cxstack[ix]);
2769 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2770 CV *cv = cx->blk_sub.cv;
2771 /* skip DB:: code */
2772 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2773 *db_seqp = cx->blk_oldcop->cop_seq;
2778 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2786 /* Compile a require/do, an eval '', or a /(?{...})/.
2787 * In the last case, startop is non-null, and contains the address of
2788 * a pointer that should be set to the just-compiled code.
2789 * outside is the lexically enclosing CV (if any) that invoked us.
2792 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2794 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2799 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2800 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2805 SAVESPTR(PL_compcv);
2806 PL_compcv = (CV*)NEWSV(1104,0);
2807 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2808 CvEVAL_on(PL_compcv);
2809 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2810 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2812 CvOUTSIDE_SEQ(PL_compcv) = seq;
2813 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2815 /* set up a scratch pad */
2817 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2820 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2822 /* make sure we compile in the right package */
2824 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2825 SAVESPTR(PL_curstash);
2826 PL_curstash = CopSTASH(PL_curcop);
2828 SAVESPTR(PL_beginav);
2829 PL_beginav = newAV();
2830 SAVEFREESV(PL_beginav);
2831 SAVEI32(PL_error_count);
2833 /* try to compile it */
2835 PL_eval_root = Nullop;
2837 PL_curcop = &PL_compiling;
2838 PL_curcop->cop_arybase = 0;
2839 if (saveop && saveop->op_flags & OPf_SPECIAL)
2840 PL_in_eval |= EVAL_KEEPERR;
2843 if (yyparse() || PL_error_count || !PL_eval_root) {
2844 SV **newsp; /* Used by POPBLOCK. */
2845 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2846 I32 optype = 0; /* Might be reset by POPEVAL. */
2851 op_free(PL_eval_root);
2852 PL_eval_root = Nullop;
2854 SP = PL_stack_base + POPMARK; /* pop original mark */
2856 POPBLOCK(cx,PL_curpm);
2862 if (optype == OP_REQUIRE) {
2863 char* msg = SvPVx(ERRSV, n_a);
2864 SV *nsv = cx->blk_eval.old_namesv;
2865 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
2867 DIE(aTHX_ "%sCompilation failed in require",
2868 *msg ? msg : "Unknown error\n");
2871 char* msg = SvPVx(ERRSV, n_a);
2873 POPBLOCK(cx,PL_curpm);
2875 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2876 (*msg ? msg : "Unknown error\n"));
2879 char* msg = SvPVx(ERRSV, n_a);
2881 sv_setpv(ERRSV, "Compilation error");
2886 CopLINE_set(&PL_compiling, 0);
2888 *startop = PL_eval_root;
2890 SAVEFREEOP(PL_eval_root);
2892 /* Set the context for this new optree.
2893 * If the last op is an OP_REQUIRE, force scalar context.
2894 * Otherwise, propagate the context from the eval(). */
2895 if (PL_eval_root->op_type == OP_LEAVEEVAL
2896 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2897 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2899 scalar(PL_eval_root);
2900 else if (gimme & G_VOID)
2901 scalarvoid(PL_eval_root);
2902 else if (gimme & G_ARRAY)
2905 scalar(PL_eval_root);
2907 DEBUG_x(dump_eval());
2909 /* Register with debugger: */
2910 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2911 CV *cv = get_cv("DB::postponed", FALSE);
2915 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2917 call_sv((SV*)cv, G_DISCARD);
2921 /* compiled okay, so do it */
2923 CvDEPTH(PL_compcv) = 1;
2924 SP = PL_stack_base + POPMARK; /* pop original mark */
2925 PL_op = saveop; /* The caller may need it. */
2926 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2928 RETURNOP(PL_eval_start);
2932 S_doopen_pm(pTHX_ const char *name, const char *mode)
2934 #ifndef PERL_DISABLE_PMC
2935 STRLEN namelen = strlen(name);
2938 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2939 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2940 char *pmc = SvPV_nolen(pmcsv);
2943 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2944 fp = PerlIO_open(name, mode);
2947 if (PerlLIO_stat(name, &pmstat) < 0 ||
2948 pmstat.st_mtime < pmcstat.st_mtime)
2950 fp = PerlIO_open(pmc, mode);
2953 fp = PerlIO_open(name, mode);
2956 SvREFCNT_dec(pmcsv);
2959 fp = PerlIO_open(name, mode);
2963 return PerlIO_open(name, mode);
2964 #endif /* !PERL_DISABLE_PMC */
2970 register PERL_CONTEXT *cx;
2974 char *tryname = Nullch;
2975 SV *namesv = Nullsv;
2977 I32 gimme = GIMME_V;
2978 PerlIO *tryrsfp = 0;
2980 int filter_has_file = 0;
2981 GV *filter_child_proc = 0;
2982 SV *filter_state = 0;
2989 if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
2990 if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) { /* require v5.6.1 */
2991 UV rev = 0, ver = 0, sver = 0;
2993 U8 *s = (U8*)SvPVX(sv);
2994 U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2996 rev = utf8n_to_uvchr(s, end - s, &len, 0);
2999 ver = utf8n_to_uvchr(s, end - s, &len, 0);
3002 sver = utf8n_to_uvchr(s, end - s, &len, 0);
3005 if (PERL_REVISION < rev
3006 || (PERL_REVISION == rev
3007 && (PERL_VERSION < ver
3008 || (PERL_VERSION == ver
3009 && PERL_SUBVERSION < sver))))
3011 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
3012 "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
3013 PERL_VERSION, PERL_SUBVERSION);
3015 if (ckWARN(WARN_PORTABLE))
3016 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3017 "v-string in use/require non-portable");
3020 else if (!SvPOKp(sv)) { /* require 5.005_03 */
3021 if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
3022 + ((NV)PERL_SUBVERSION/(NV)1000000)
3023 + 0.00000099 < SvNV(sv))
3027 NV nver = (nrev - rev) * 1000;
3028 UV ver = (UV)(nver + 0.0009);
3029 NV nsver = (nver - ver) * 1000;
3030 UV sver = (UV)(nsver + 0.0009);
3032 /* help out with the "use 5.6" confusion */
3033 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
3034 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
3035 " (did you mean v%"UVuf".%03"UVuf"?)--"
3036 "this is only v%d.%d.%d, stopped",
3037 rev, ver, sver, rev, ver/100,
3038 PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
3041 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3042 "this is only v%d.%d.%d, stopped",
3043 rev, ver, sver, PERL_REVISION, PERL_VERSION,
3050 name = SvPV(sv, len);
3051 if (!(name && len > 0 && *name))
3052 DIE(aTHX_ "Null filename used");
3053 TAINT_PROPER("require");
3054 if (PL_op->op_type == OP_REQUIRE &&
3055 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3056 if (*svp != &PL_sv_undef)
3059 DIE(aTHX_ "Compilation failed in require");
3062 /* prepare to compile file */
3064 if (path_is_absolute(name)) {
3066 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3068 #ifdef MACOS_TRADITIONAL
3072 MacPerl_CanonDir(name, newname, 1);
3073 if (path_is_absolute(newname)) {
3075 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3080 AV *ar = GvAVn(PL_incgv);
3084 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3087 namesv = NEWSV(806, 0);
3088 for (i = 0; i <= AvFILL(ar); i++) {
3089 SV *dirsv = *av_fetch(ar, i, TRUE);
3095 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3096 && !sv_isobject(loader))
3098 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3101 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3102 PTR2UV(SvRV(dirsv)), name);
3103 tryname = SvPVX(namesv);
3114 if (sv_isobject(loader))
3115 count = call_method("INC", G_ARRAY);
3117 count = call_sv(loader, G_ARRAY);
3127 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3131 if (SvTYPE(arg) == SVt_PVGV) {
3132 IO *io = GvIO((GV *)arg);
3137 tryrsfp = IoIFP(io);
3138 if (IoTYPE(io) == IoTYPE_PIPE) {
3139 /* reading from a child process doesn't
3140 nest -- when returning from reading
3141 the inner module, the outer one is
3142 unreadable (closed?) I've tried to
3143 save the gv to manage the lifespan of
3144 the pipe, but this didn't help. XXX */
3145 filter_child_proc = (GV *)arg;
3146 (void)SvREFCNT_inc(filter_child_proc);
3149 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3150 PerlIO_close(IoOFP(io));
3162 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3164 (void)SvREFCNT_inc(filter_sub);
3167 filter_state = SP[i];
3168 (void)SvREFCNT_inc(filter_state);
3172 tryrsfp = PerlIO_open("/dev/null",
3188 filter_has_file = 0;
3189 if (filter_child_proc) {
3190 SvREFCNT_dec(filter_child_proc);
3191 filter_child_proc = 0;
3194 SvREFCNT_dec(filter_state);
3198 SvREFCNT_dec(filter_sub);
3203 if (!path_is_absolute(name)
3204 #ifdef MACOS_TRADITIONAL
3205 /* We consider paths of the form :a:b ambiguous and interpret them first
3206 as global then as local
3208 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3211 char *dir = SvPVx(dirsv, n_a);
3212 #ifdef MACOS_TRADITIONAL
3216 MacPerl_CanonDir(name, buf2, 1);
3217 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3221 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3223 sv_setpv(namesv, unixdir);
3224 sv_catpv(namesv, unixname);
3226 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3229 TAINT_PROPER("require");
3230 tryname = SvPVX(namesv);
3231 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3233 if (tryname[0] == '.' && tryname[1] == '/')
3242 SAVECOPFILE_FREE(&PL_compiling);
3243 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3244 SvREFCNT_dec(namesv);
3246 if (PL_op->op_type == OP_REQUIRE) {
3247 char *msgstr = name;
3248 if (namesv) { /* did we lookup @INC? */
3249 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3250 SV *dirmsgsv = NEWSV(0, 0);
3251 AV *ar = GvAVn(PL_incgv);
3253 sv_catpvn(msg, " in @INC", 8);
3254 if (instr(SvPVX(msg), ".h "))
3255 sv_catpv(msg, " (change .h to .ph maybe?)");
3256 if (instr(SvPVX(msg), ".ph "))
3257 sv_catpv(msg, " (did you run h2ph?)");
3258 sv_catpv(msg, " (@INC contains:");
3259 for (i = 0; i <= AvFILL(ar); i++) {
3260 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3261 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3262 sv_catsv(msg, dirmsgsv);
3264 sv_catpvn(msg, ")", 1);
3265 SvREFCNT_dec(dirmsgsv);
3266 msgstr = SvPV_nolen(msg);
3268 DIE(aTHX_ "Can't locate %s", msgstr);
3274 SETERRNO(0, SS_NORMAL);
3276 /* Assume success here to prevent recursive requirement. */
3278 /* Check whether a hook in @INC has already filled %INC */
3279 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3280 (void)hv_store(GvHVn(PL_incgv), name, len,
3281 (hook_sv ? SvREFCNT_inc(hook_sv)
3282 : newSVpv(CopFILE(&PL_compiling), 0)),
3288 lex_start(sv_2mortal(newSVpvn("",0)));
3289 SAVEGENERICSV(PL_rsfp_filters);
3290 PL_rsfp_filters = Nullav;
3295 SAVESPTR(PL_compiling.cop_warnings);
3296 if (PL_dowarn & G_WARN_ALL_ON)
3297 PL_compiling.cop_warnings = pWARN_ALL ;
3298 else if (PL_dowarn & G_WARN_ALL_OFF)
3299 PL_compiling.cop_warnings = pWARN_NONE ;
3300 else if (PL_taint_warn)
3301 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3303 PL_compiling.cop_warnings = pWARN_STD ;
3304 SAVESPTR(PL_compiling.cop_io);
3305 PL_compiling.cop_io = Nullsv;
3307 if (filter_sub || filter_child_proc) {
3308 SV *datasv = filter_add(run_user_filter, Nullsv);
3309 IoLINES(datasv) = filter_has_file;
3310 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3311 IoTOP_GV(datasv) = (GV *)filter_state;
3312 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3315 /* switch to eval mode */
3316 push_return(PL_op->op_next);
3317 PUSHBLOCK(cx, CXt_EVAL, SP);
3318 PUSHEVAL(cx, name, Nullgv);
3320 SAVECOPLINE(&PL_compiling);
3321 CopLINE_set(&PL_compiling, 0);
3325 /* Store and reset encoding. */
3326 encoding = PL_encoding;
3327 PL_encoding = Nullsv;
3329 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3331 /* Restore encoding. */
3332 PL_encoding = encoding;
3339 return pp_require();
3345 register PERL_CONTEXT *cx;
3347 I32 gimme = GIMME_V, was = PL_sub_generation;
3348 char tbuf[TYPE_DIGITS(long) + 12];
3349 char *tmpbuf = tbuf;
3358 TAINT_PROPER("eval");
3364 /* switch to eval mode */
3366 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3367 SV *sv = sv_newmortal();
3368 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3369 (unsigned long)++PL_evalseq,
3370 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3374 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3375 SAVECOPFILE_FREE(&PL_compiling);
3376 CopFILE_set(&PL_compiling, tmpbuf+2);
3377 SAVECOPLINE(&PL_compiling);
3378 CopLINE_set(&PL_compiling, 1);
3379 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3380 deleting the eval's FILEGV from the stash before gv_check() runs
3381 (i.e. before run-time proper). To work around the coredump that
3382 ensues, we always turn GvMULTI_on for any globals that were
3383 introduced within evals. See force_ident(). GSAR 96-10-12 */
3384 safestr = savepv(tmpbuf);
3385 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3387 PL_hints = PL_op->op_targ;
3388 SAVESPTR(PL_compiling.cop_warnings);
3389 if (specialWARN(PL_curcop->cop_warnings))
3390 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3392 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3393 SAVEFREESV(PL_compiling.cop_warnings);
3395 SAVESPTR(PL_compiling.cop_io);
3396 if (specialCopIO(PL_curcop->cop_io))
3397 PL_compiling.cop_io = PL_curcop->cop_io;
3399 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3400 SAVEFREESV(PL_compiling.cop_io);
3402 /* special case: an eval '' executed within the DB package gets lexically
3403 * placed in the first non-DB CV rather than the current CV - this
3404 * allows the debugger to execute code, find lexicals etc, in the
3405 * scope of the code being debugged. Passing &seq gets find_runcv
3406 * to do the dirty work for us */
3407 runcv = find_runcv(&seq);
3409 push_return(PL_op->op_next);
3410 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3411 PUSHEVAL(cx, 0, Nullgv);
3413 /* prepare to compile string */
3415 if (PERLDB_LINE && PL_curstash != PL_debstash)
3416 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3418 ret = doeval(gimme, NULL, runcv, seq);
3419 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3420 && ret != PL_op->op_next) { /* Successive compilation. */
3421 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3423 return DOCATCH(ret);
3433 register PERL_CONTEXT *cx;
3435 U8 save_flags = PL_op -> op_flags;
3440 retop = pop_return();
3443 if (gimme == G_VOID)
3445 else if (gimme == G_SCALAR) {
3448 if (SvFLAGS(TOPs) & SVs_TEMP)
3451 *MARK = sv_mortalcopy(TOPs);
3455 *MARK = &PL_sv_undef;
3460 /* in case LEAVE wipes old return values */
3461 for (mark = newsp + 1; mark <= SP; mark++) {
3462 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3463 *mark = sv_mortalcopy(*mark);
3464 TAINT_NOT; /* Each item is independent */
3468 PL_curpm = newpm; /* Don't pop $1 et al till now */
3471 assert(CvDEPTH(PL_compcv) == 1);
3473 CvDEPTH(PL_compcv) = 0;
3476 if (optype == OP_REQUIRE &&
3477 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3479 /* Unassume the success we assumed earlier. */
3480 SV *nsv = cx->blk_eval.old_namesv;
3481 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3482 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3483 /* die_where() did LEAVE, or we won't be here */
3487 if (!(save_flags & OPf_SPECIAL))
3497 register PERL_CONTEXT *cx;
3498 I32 gimme = GIMME_V;
3503 push_return(cLOGOP->op_other->op_next);
3504 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3507 PL_in_eval = EVAL_INEVAL;
3510 return DOCATCH(PL_op->op_next);
3521 register PERL_CONTEXT *cx;
3526 retop = pop_return();
3529 if (gimme == G_VOID)
3531 else if (gimme == G_SCALAR) {
3534 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3537 *MARK = sv_mortalcopy(TOPs);
3541 *MARK = &PL_sv_undef;
3546 /* in case LEAVE wipes old return values */
3547 for (mark = newsp + 1; mark <= SP; mark++) {
3548 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3549 *mark = sv_mortalcopy(*mark);
3550 TAINT_NOT; /* Each item is independent */
3554 PL_curpm = newpm; /* Don't pop $1 et al till now */
3562 S_doparseform(pTHX_ SV *sv)
3565 register char *s = SvPV_force(sv, len);
3566 register char *send = s + len;
3567 register char *base = Nullch;
3568 register I32 skipspaces = 0;
3569 bool noblank = FALSE;
3570 bool repeat = FALSE;
3571 bool postspace = FALSE;
3577 bool unchopnum = FALSE;
3578 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3581 Perl_croak(aTHX_ "Null picture in formline");
3583 /* estimate the buffer size needed */
3584 for (base = s; s <= send; s++) {
3585 if (*s == '\n' || *s == '@' || *s == '^')
3591 New(804, fops, maxops, U32);
3596 *fpc++ = FF_LINEMARK;
3597 noblank = repeat = FALSE;
3615 case ' ': case '\t':
3622 } /* else FALL THROUGH */
3630 *fpc++ = FF_LITERAL;
3638 *fpc++ = (U16)skipspaces;
3642 *fpc++ = FF_NEWLINE;
3646 arg = fpc - linepc + 1;
3653 *fpc++ = FF_LINEMARK;
3654 noblank = repeat = FALSE;
3663 ischop = s[-1] == '^';
3669 arg = (s - base) - 1;
3671 *fpc++ = FF_LITERAL;
3679 *fpc++ = 2; /* skip the @* or ^* */
3681 *fpc++ = FF_LINESNGL;
3684 *fpc++ = FF_LINEGLOB;
3686 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3687 arg = ischop ? 512 : 0;
3697 arg |= 256 + (s - f);
3699 *fpc++ = s - base; /* fieldsize for FETCH */
3700 *fpc++ = FF_DECIMAL;
3702 unchopnum |= ! ischop;
3704 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3705 arg = ischop ? 512 : 0;
3707 s++; /* skip the '0' first */
3716 arg |= 256 + (s - f);
3718 *fpc++ = s - base; /* fieldsize for FETCH */
3719 *fpc++ = FF_0DECIMAL;
3721 unchopnum |= ! ischop;
3725 bool ismore = FALSE;
3728 while (*++s == '>') ;
3729 prespace = FF_SPACE;
3731 else if (*s == '|') {
3732 while (*++s == '|') ;
3733 prespace = FF_HALFSPACE;
3738 while (*++s == '<') ;
3741 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3745 *fpc++ = s - base; /* fieldsize for FETCH */
3747 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3750 *fpc++ = (U16)prespace;
3764 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3766 { /* need to jump to the next word */
3768 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3769 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3770 s = SvPVX(sv) + SvCUR(sv) + z;
3772 Copy(fops, s, arg, U32);
3774 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3777 if (unchopnum && repeat)
3778 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3784 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3786 /* Can value be printed in fldsize chars, using %*.*f ? */
3790 int intsize = fldsize - (value < 0 ? 1 : 0);
3797 while (intsize--) pwr *= 10.0;
3798 while (frcsize--) eps /= 10.0;
3801 if (value + eps >= pwr)
3804 if (value - eps <= -pwr)
3811 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3813 SV *datasv = FILTER_DATA(idx);
3814 int filter_has_file = IoLINES(datasv);
3815 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3816 SV *filter_state = (SV *)IoTOP_GV(datasv);
3817 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3820 /* I was having segfault trouble under Linux 2.2.5 after a
3821 parse error occured. (Had to hack around it with a test
3822 for PL_error_count == 0.) Solaris doesn't segfault --
3823 not sure where the trouble is yet. XXX */
3825 if (filter_has_file) {
3826 len = FILTER_READ(idx+1, buf_sv, maxlen);
3829 if (filter_sub && len >= 0) {
3840 PUSHs(sv_2mortal(newSViv(maxlen)));
3842 PUSHs(filter_state);
3845 count = call_sv(filter_sub, G_SCALAR);
3861 IoLINES(datasv) = 0;
3862 if (filter_child_proc) {
3863 SvREFCNT_dec(filter_child_proc);
3864 IoFMT_GV(datasv) = Nullgv;
3867 SvREFCNT_dec(filter_state);
3868 IoTOP_GV(datasv) = Nullgv;
3871 SvREFCNT_dec(filter_sub);
3872 IoBOTTOM_GV(datasv) = Nullgv;
3874 filter_del(run_user_filter);
3880 /* perhaps someone can come up with a better name for
3881 this? it is not really "absolute", per se ... */
3883 S_path_is_absolute(pTHX_ char *name)
3885 if (PERL_FILE_IS_ABSOLUTE(name)
3886 #ifdef MACOS_TRADITIONAL
3889 || (*name == '.' && (name[1] == '/' ||
3890 (name[1] == '.' && name[2] == '/'))))