3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 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.
20 /* This file contains control-oriented pp ("push/pop") functions that
21 * execute the opcodes that make up a perl program. A typical pp function
22 * expects to find its arguments on the stack, and usually pushes its
23 * results onto the stack, hence the 'pp' terminology. Each OP structure
24 * contains a pointer to the relevant pp_foo() function.
26 * Control-oriented means things like pp_enteriter() and pp_next(), which
27 * alter the flow of control of the program.
32 #define PERL_IN_PP_CTL_C
36 #define WORD_ALIGN sizeof(U32)
39 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
41 static I32 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen);
49 cxix = dopoptosub(cxstack_ix);
53 switch (cxstack[cxix].blk_gimme) {
70 /* XXXX Should store the old value to allow for tie/overload - and
71 restore in regcomp, where marked with XXXX. */
80 register PMOP *pm = (PMOP*)cLOGOP->op_other;
84 MAGIC *mg = Null(MAGIC*);
86 /* prevent recompiling under /o and ithreads. */
87 #if defined(USE_ITHREADS)
88 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
89 if (PL_op->op_flags & OPf_STACKED) {
98 if (PL_op->op_flags & OPf_STACKED) {
99 /* multiple args; concatentate them */
101 tmpstr = PAD_SV(ARGTARG);
102 sv_setpvn(tmpstr, "", 0);
103 while (++MARK <= SP) {
104 if (PL_amagic_generation) {
106 if ((SvAMAGIC(tmpstr) || SvAMAGIC(*MARK)) &&
107 (sv = amagic_call(tmpstr, *MARK, concat_amg, AMGf_assign)))
109 sv_setsv(tmpstr, sv);
113 sv_catsv(tmpstr, *MARK);
122 SV *sv = SvRV(tmpstr);
124 mg = mg_find(sv, PERL_MAGIC_qr);
127 regexp *re = (regexp *)mg->mg_obj;
128 ReREFCNT_dec(PM_GETRE(pm));
129 PM_SETRE(pm, ReREFCNT_inc(re));
132 t = SvPV(tmpstr, len);
134 /* Check against the last compiled regexp. */
135 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
136 PM_GETRE(pm)->prelen != (I32)len ||
137 memNE(PM_GETRE(pm)->precomp, t, len))
140 ReREFCNT_dec(PM_GETRE(pm));
141 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
143 if (PL_op->op_flags & OPf_SPECIAL)
144 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
146 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
148 pm->op_pmdynflags |= PMdf_DYN_UTF8;
150 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
151 if (pm->op_pmdynflags & PMdf_UTF8)
152 t = (char*)bytes_to_utf8((U8*)t, &len);
154 PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
155 if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
157 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
158 inside tie/overload accessors. */
162 #ifndef INCOMPLETE_TAINTS
165 pm->op_pmdynflags |= PMdf_TAINTED;
167 pm->op_pmdynflags &= ~PMdf_TAINTED;
171 if (!PM_GETRE(pm)->prelen && PL_curpm)
173 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
174 pm->op_pmflags |= PMf_WHITE;
176 pm->op_pmflags &= ~PMf_WHITE;
178 /* XXX runtime compiled output needs to move to the pad */
179 if (pm->op_pmflags & PMf_KEEP) {
180 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
181 #if !defined(USE_ITHREADS)
182 /* XXX can't change the optree at runtime either */
183 cLOGOP->op_first->op_next = PL_op->op_next;
192 register PMOP *pm = (PMOP*) cLOGOP->op_other;
193 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
194 register SV *dstr = cx->sb_dstr;
195 register char *s = cx->sb_s;
196 register char *m = cx->sb_m;
197 char *orig = cx->sb_orig;
198 register REGEXP *rx = cx->sb_rx;
200 REGEXP *old = PM_GETRE(pm);
207 rxres_restore(&cx->sb_rxres, rx);
208 RX_MATCH_UTF8_set(rx, SvUTF8(cx->sb_targ));
210 if (cx->sb_iters++) {
211 I32 saviters = cx->sb_iters;
212 if (cx->sb_iters > cx->sb_maxiters)
213 DIE(aTHX_ "Substitution loop");
215 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
216 cx->sb_rxtainted |= 2;
217 sv_catsv(dstr, POPs);
220 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
221 s == m, cx->sb_targ, NULL,
222 ((cx->sb_rflags & REXEC_COPY_STR)
223 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
224 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
226 SV *targ = cx->sb_targ;
228 assert(cx->sb_strend >= s);
229 if(cx->sb_strend > s) {
230 if (DO_UTF8(dstr) && !SvUTF8(targ))
231 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
233 sv_catpvn(dstr, s, cx->sb_strend - s);
235 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
237 #ifdef PERL_COPY_ON_WRITE
239 sv_force_normal_flags(targ, SV_COW_DROP_PV);
245 Safefree(SvPVX(targ));
247 SvPV_set(targ, SvPVX(dstr));
248 SvCUR_set(targ, SvCUR(dstr));
249 SvLEN_set(targ, SvLEN(dstr));
252 SvPV_set(dstr, (char*)0);
255 TAINT_IF(cx->sb_rxtainted & 1);
256 PUSHs(sv_2mortal(newSViv(saviters - 1)));
258 (void)SvPOK_only_UTF8(targ);
259 TAINT_IF(cx->sb_rxtainted);
263 LEAVE_SCOPE(cx->sb_oldsave);
266 RETURNOP(pm->op_next);
268 cx->sb_iters = saviters;
270 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
273 cx->sb_orig = orig = rx->subbeg;
275 cx->sb_strend = s + (cx->sb_strend - m);
277 cx->sb_m = m = rx->startp[0] + orig;
279 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
280 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
282 sv_catpvn(dstr, s, m-s);
284 cx->sb_s = rx->endp[0] + orig;
285 { /* Update the pos() information. */
286 SV *sv = cx->sb_targ;
289 if (SvTYPE(sv) < SVt_PVMG)
290 (void)SvUPGRADE(sv, SVt_PVMG);
291 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
292 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
293 mg = mg_find(sv, PERL_MAGIC_regex_global);
302 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
303 rxres_save(&cx->sb_rxres, rx);
304 RETURNOP(pm->op_pmreplstart);
308 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
313 if (!p || p[1] < rx->nparens) {
314 #ifdef PERL_COPY_ON_WRITE
315 i = 7 + rx->nparens * 2;
317 i = 6 + rx->nparens * 2;
326 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
327 RX_MATCH_COPIED_off(rx);
329 #ifdef PERL_COPY_ON_WRITE
330 *p++ = PTR2UV(rx->saved_copy);
331 rx->saved_copy = Nullsv;
336 *p++ = PTR2UV(rx->subbeg);
337 *p++ = (UV)rx->sublen;
338 for (i = 0; i <= rx->nparens; ++i) {
339 *p++ = (UV)rx->startp[i];
340 *p++ = (UV)rx->endp[i];
345 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
350 RX_MATCH_COPY_FREE(rx);
351 RX_MATCH_COPIED_set(rx, *p);
354 #ifdef PERL_COPY_ON_WRITE
356 SvREFCNT_dec (rx->saved_copy);
357 rx->saved_copy = INT2PTR(SV*,*p);
363 rx->subbeg = INT2PTR(char*,*p++);
364 rx->sublen = (I32)(*p++);
365 for (i = 0; i <= rx->nparens; ++i) {
366 rx->startp[i] = (I32)(*p++);
367 rx->endp[i] = (I32)(*p++);
372 Perl_rxres_free(pTHX_ void **rsp)
377 Safefree(INT2PTR(char*,*p));
378 #ifdef PERL_COPY_ON_WRITE
380 SvREFCNT_dec (INT2PTR(SV*,p[1]));
390 dSP; dMARK; dORIGMARK;
391 register SV *tmpForm = *++MARK;
398 register SV *sv = Nullsv;
403 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
404 char *chophere = Nullch;
405 char *linemark = Nullch;
407 bool gotsome = FALSE;
409 STRLEN fudge = SvPOK(tmpForm)
410 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
411 bool item_is_utf8 = FALSE;
412 bool targ_is_utf8 = FALSE;
418 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
419 if (SvREADONLY(tmpForm)) {
420 SvREADONLY_off(tmpForm);
421 parseres = doparseform(tmpForm);
422 SvREADONLY_on(tmpForm);
425 parseres = doparseform(tmpForm);
429 SvPV_force(PL_formtarget, len);
430 if (DO_UTF8(PL_formtarget))
432 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
434 f = SvPV(tmpForm, len);
435 /* need to jump to the next word */
436 s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
442 const char *name = "???";
445 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
446 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
447 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
448 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
449 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
451 case FF_CHECKNL: name = "CHECKNL"; break;
452 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
453 case FF_SPACE: name = "SPACE"; break;
454 case FF_HALFSPACE: name = "HALFSPACE"; break;
455 case FF_ITEM: name = "ITEM"; break;
456 case FF_CHOP: name = "CHOP"; break;
457 case FF_LINEGLOB: name = "LINEGLOB"; break;
458 case FF_NEWLINE: name = "NEWLINE"; break;
459 case FF_MORE: name = "MORE"; break;
460 case FF_LINEMARK: name = "LINEMARK"; break;
461 case FF_END: name = "END"; break;
462 case FF_0DECIMAL: name = "0DECIMAL"; break;
463 case FF_LINESNGL: name = "LINESNGL"; break;
466 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
468 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
479 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
480 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
482 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
483 t = SvEND(PL_formtarget);
486 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
487 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
489 sv_utf8_upgrade(PL_formtarget);
490 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
491 t = SvEND(PL_formtarget);
511 if (ckWARN(WARN_SYNTAX))
512 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
517 item = s = SvPV(sv, len);
520 itemsize = sv_len_utf8(sv);
521 if (itemsize != (I32)len) {
523 if (itemsize > fieldsize) {
524 itemsize = fieldsize;
525 itembytes = itemsize;
526 sv_pos_u2b(sv, &itembytes, 0);
530 send = chophere = s + itembytes;
540 sv_pos_b2u(sv, &itemsize);
544 item_is_utf8 = FALSE;
545 if (itemsize > fieldsize)
546 itemsize = fieldsize;
547 send = chophere = s + itemsize;
559 item = s = SvPV(sv, len);
562 itemsize = sv_len_utf8(sv);
563 if (itemsize != (I32)len) {
565 if (itemsize <= fieldsize) {
566 send = chophere = s + itemsize;
578 itemsize = fieldsize;
579 itembytes = itemsize;
580 sv_pos_u2b(sv, &itembytes, 0);
581 send = chophere = s + itembytes;
582 while (s < send || (s == send && isSPACE(*s))) {
592 if (strchr(PL_chopset, *s))
597 itemsize = chophere - item;
598 sv_pos_b2u(sv, &itemsize);
604 item_is_utf8 = FALSE;
605 if (itemsize <= fieldsize) {
606 send = chophere = s + itemsize;
618 itemsize = fieldsize;
619 send = chophere = s + itemsize;
620 while (s < send || (s == send && isSPACE(*s))) {
630 if (strchr(PL_chopset, *s))
635 itemsize = chophere - item;
640 arg = fieldsize - itemsize;
649 arg = fieldsize - itemsize;
663 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
665 sv_utf8_upgrade(PL_formtarget);
666 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
667 t = SvEND(PL_formtarget);
671 if (UTF8_IS_CONTINUED(*s)) {
672 STRLEN skip = UTF8SKIP(s);
689 if ( !((*t++ = *s++) & ~31) )
695 if (targ_is_utf8 && !item_is_utf8) {
696 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
698 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
699 for (; t < SvEND(PL_formtarget); t++) {
712 int ch = *t++ = *s++;
715 if ( !((*t++ = *s++) & ~31) )
724 while (*s && isSPACE(*s))
738 item = s = SvPV(sv, len);
740 if ((item_is_utf8 = DO_UTF8(sv)))
741 itemsize = sv_len_utf8(sv);
743 bool chopped = FALSE;
746 chophere = s + itemsize;
762 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
764 SvUTF8_on(PL_formtarget);
766 SvCUR_set(sv, chophere - item);
767 sv_catsv(PL_formtarget, sv);
768 SvCUR_set(sv, itemsize);
770 sv_catsv(PL_formtarget, sv);
772 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
773 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
774 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
782 #if defined(USE_LONG_DOUBLE)
783 fmt = (arg & 256) ? "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl;
785 fmt = (arg & 256) ? "%#0*.*f" : "%0*.*f";
790 #if defined(USE_LONG_DOUBLE)
791 fmt = (arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl;
793 fmt = (arg & 256) ? "%#*.*f" : "%*.*f";
796 /* If the field is marked with ^ and the value is undefined,
798 if ((arg & 512) && !SvOK(sv)) {
806 /* overflow evidence */
807 if (num_overflow(value, fieldsize, arg)) {
813 /* Formats aren't yet marked for locales, so assume "yes". */
815 STORE_NUMERIC_STANDARD_SET_LOCAL();
816 sprintf(t, fmt, (int) fieldsize, (int) arg & 255, value);
817 RESTORE_NUMERIC_STANDARD();
824 while (t-- > linemark && *t == ' ') ;
832 if (arg) { /* repeat until fields exhausted? */
834 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
835 lines += FmLINES(PL_formtarget);
838 if (strnEQ(linemark, linemark - arg, arg))
839 DIE(aTHX_ "Runaway format");
842 SvUTF8_on(PL_formtarget);
843 FmLINES(PL_formtarget) = lines;
845 RETURNOP(cLISTOP->op_first);
858 while (*s && isSPACE(*s) && s < send)
862 arg = fieldsize - itemsize;
869 if (strnEQ(s," ",3)) {
870 while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
881 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
883 SvUTF8_on(PL_formtarget);
884 FmLINES(PL_formtarget) += lines;
896 if (PL_stack_base + *PL_markstack_ptr == SP) {
898 if (GIMME_V == G_SCALAR)
899 XPUSHs(sv_2mortal(newSViv(0)));
900 RETURNOP(PL_op->op_next->op_next);
902 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
903 pp_pushmark(); /* push dst */
904 pp_pushmark(); /* push src */
905 ENTER; /* enter outer scope */
908 if (PL_op->op_private & OPpGREP_LEX)
909 SAVESPTR(PAD_SVl(PL_op->op_targ));
912 ENTER; /* enter inner scope */
915 src = PL_stack_base[*PL_markstack_ptr];
917 if (PL_op->op_private & OPpGREP_LEX)
918 PAD_SVl(PL_op->op_targ) = src;
923 if (PL_op->op_type == OP_MAPSTART)
924 pp_pushmark(); /* push top */
925 return ((LOGOP*)PL_op->op_next)->op_other;
930 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
937 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
943 /* first, move source pointer to the next item in the source list */
944 ++PL_markstack_ptr[-1];
946 /* if there are new items, push them into the destination list */
947 if (items && gimme != G_VOID) {
948 /* might need to make room back there first */
949 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
950 /* XXX this implementation is very pessimal because the stack
951 * is repeatedly extended for every set of items. Is possible
952 * to do this without any stack extension or copying at all
953 * by maintaining a separate list over which the map iterates
954 * (like foreach does). --gsar */
956 /* everything in the stack after the destination list moves
957 * towards the end the stack by the amount of room needed */
958 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
960 /* items to shift up (accounting for the moved source pointer) */
961 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
963 /* This optimization is by Ben Tilly and it does
964 * things differently from what Sarathy (gsar)
965 * is describing. The downside of this optimization is
966 * that leaves "holes" (uninitialized and hopefully unused areas)
967 * to the Perl stack, but on the other hand this
968 * shouldn't be a problem. If Sarathy's idea gets
969 * implemented, this optimization should become
970 * irrelevant. --jhi */
972 shift = count; /* Avoid shifting too often --Ben Tilly */
977 PL_markstack_ptr[-1] += shift;
978 *PL_markstack_ptr += shift;
982 /* copy the new items down to the destination list */
983 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
984 if (gimme == G_ARRAY) {
986 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
989 /* scalar context: we don't care about which values map returns
990 * (we use undef here). And so we certainly don't want to do mortal
991 * copies of meaningless values. */
992 while (items-- > 0) {
994 *dst-- = &PL_sv_undef;
998 LEAVE; /* exit inner scope */
1001 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1003 (void)POPMARK; /* pop top */
1004 LEAVE; /* exit outer scope */
1005 (void)POPMARK; /* pop src */
1006 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1007 (void)POPMARK; /* pop dst */
1008 SP = PL_stack_base + POPMARK; /* pop original mark */
1009 if (gimme == G_SCALAR) {
1010 if (PL_op->op_private & OPpGREP_LEX) {
1011 SV* sv = sv_newmortal();
1012 sv_setiv(sv, items);
1020 else if (gimme == G_ARRAY)
1027 ENTER; /* enter inner scope */
1030 /* set $_ to the new source item */
1031 src = PL_stack_base[PL_markstack_ptr[-1]];
1033 if (PL_op->op_private & OPpGREP_LEX)
1034 PAD_SVl(PL_op->op_targ) = src;
1038 RETURNOP(cLOGOP->op_other);
1046 if (GIMME == G_ARRAY)
1048 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1049 return cLOGOP->op_other;
1058 if (GIMME == G_ARRAY) {
1059 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1063 SV *targ = PAD_SV(PL_op->op_targ);
1066 if (PL_op->op_private & OPpFLIP_LINENUM) {
1067 if (GvIO(PL_last_in_gv)) {
1068 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1071 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1072 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1078 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1079 if (PL_op->op_flags & OPf_SPECIAL) {
1087 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1096 /* This code tries to decide if "$left .. $right" should use the
1097 magical string increment, or if the range is numeric (we make
1098 an exception for .."0" [#18165]). AMS 20021031. */
1100 #define RANGE_IS_NUMERIC(left,right) ( \
1101 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1102 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1103 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1104 looks_like_number(left)) && SvPOKp(left) && *SvPVX(left) != '0')) \
1105 && (!SvOK(right) || looks_like_number(right))))
1111 if (GIMME == G_ARRAY) {
1117 if (SvGMAGICAL(left))
1119 if (SvGMAGICAL(right))
1122 if (RANGE_IS_NUMERIC(left,right)) {
1123 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1124 (SvOK(right) && SvNV(right) > IV_MAX))
1125 DIE(aTHX_ "Range iterator outside integer range");
1136 sv = sv_2mortal(newSViv(i++));
1141 SV *final = sv_mortalcopy(right);
1143 char *tmps = SvPV(final, len);
1145 sv = sv_mortalcopy(left);
1147 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1149 if (strEQ(SvPVX(sv),tmps))
1151 sv = sv_2mortal(newSVsv(sv));
1158 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1162 if (PL_op->op_private & OPpFLIP_LINENUM) {
1163 if (GvIO(PL_last_in_gv)) {
1164 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1167 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1168 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1176 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1177 sv_catpv(targ, "E0");
1187 static const char *context_name[] = {
1198 S_dopoptolabel(pTHX_ const char *label)
1202 for (i = cxstack_ix; i >= 0; i--) {
1203 register const PERL_CONTEXT *cx = &cxstack[i];
1204 switch (CxTYPE(cx)) {
1210 if (ckWARN(WARN_EXITING))
1211 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1212 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1213 if (CxTYPE(cx) == CXt_NULL)
1217 if (!cx->blk_loop.label ||
1218 strNE(label, cx->blk_loop.label) ) {
1219 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1220 (long)i, cx->blk_loop.label));
1223 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1231 Perl_dowantarray(pTHX)
1233 I32 gimme = block_gimme();
1234 return (gimme == G_VOID) ? G_SCALAR : gimme;
1238 Perl_block_gimme(pTHX)
1240 const I32 cxix = dopoptosub(cxstack_ix);
1244 switch (cxstack[cxix].blk_gimme) {
1252 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1259 Perl_is_lvalue_sub(pTHX)
1261 const I32 cxix = dopoptosub(cxstack_ix);
1262 assert(cxix >= 0); /* We should only be called from inside subs */
1264 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1265 return cxstack[cxix].blk_sub.lval;
1271 S_dopoptosub(pTHX_ I32 startingblock)
1273 return dopoptosub_at(cxstack, startingblock);
1277 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1280 for (i = startingblock; i >= 0; i--) {
1281 register const PERL_CONTEXT *cx = &cxstk[i];
1282 switch (CxTYPE(cx)) {
1288 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1296 S_dopoptoeval(pTHX_ I32 startingblock)
1299 for (i = startingblock; i >= 0; i--) {
1300 register const PERL_CONTEXT *cx = &cxstack[i];
1301 switch (CxTYPE(cx)) {
1305 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1313 S_dopoptoloop(pTHX_ I32 startingblock)
1316 for (i = startingblock; i >= 0; i--) {
1317 register const PERL_CONTEXT *cx = &cxstack[i];
1318 switch (CxTYPE(cx)) {
1324 if (ckWARN(WARN_EXITING))
1325 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1326 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1327 if ((CxTYPE(cx)) == CXt_NULL)
1331 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1339 Perl_dounwind(pTHX_ I32 cxix)
1343 while (cxstack_ix > cxix) {
1345 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1346 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1347 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1348 /* Note: we don't need to restore the base context info till the end. */
1349 switch (CxTYPE(cx)) {
1352 continue; /* not break */
1374 Perl_qerror(pTHX_ SV *err)
1377 sv_catsv(ERRSV, err);
1379 sv_catsv(PL_errors, err);
1381 Perl_warn(aTHX_ "%"SVf, err);
1386 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1396 if (PL_in_eval & EVAL_KEEPERR) {
1397 static const char prefix[] = "\t(in cleanup) ";
1399 const char *e = Nullch;
1402 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1405 if (*e != *message || strNE(e,message))
1409 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1410 sv_catpvn(err, prefix, sizeof(prefix)-1);
1411 sv_catpvn(err, message, msglen);
1412 if (ckWARN(WARN_MISC)) {
1413 STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1414 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1419 sv_setpvn(ERRSV, message, msglen);
1423 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1424 && PL_curstackinfo->si_prev)
1432 register PERL_CONTEXT *cx;
1434 if (cxix < cxstack_ix)
1437 POPBLOCK(cx,PL_curpm);
1438 if (CxTYPE(cx) != CXt_EVAL) {
1440 message = SvPVx(ERRSV, msglen);
1441 PerlIO_write(Perl_error_log, "panic: die ", 11);
1442 PerlIO_write(Perl_error_log, message, msglen);
1447 if (gimme == G_SCALAR)
1448 *++newsp = &PL_sv_undef;
1449 PL_stack_sp = newsp;
1453 /* LEAVE could clobber PL_curcop (see save_re_context())
1454 * XXX it might be better to find a way to avoid messing with
1455 * PL_curcop in save_re_context() instead, but this is a more
1456 * minimal fix --GSAR */
1457 PL_curcop = cx->blk_oldcop;
1459 if (optype == OP_REQUIRE) {
1460 const char* msg = SvPVx(ERRSV, n_a);
1461 SV *nsv = cx->blk_eval.old_namesv;
1462 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
1464 DIE(aTHX_ "%sCompilation failed in require",
1465 *msg ? msg : "Unknown error\n");
1467 assert(CxTYPE(cx) == CXt_EVAL);
1468 return cx->blk_eval.retop;
1472 message = SvPVx(ERRSV, msglen);
1474 write_to_stderr(message, msglen);
1483 if (SvTRUE(left) != SvTRUE(right))
1495 RETURNOP(cLOGOP->op_other);
1504 RETURNOP(cLOGOP->op_other);
1513 if (!sv || !SvANY(sv)) {
1514 RETURNOP(cLOGOP->op_other);
1517 switch (SvTYPE(sv)) {
1519 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1523 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1527 if (CvROOT(sv) || CvXSUB(sv))
1537 RETURNOP(cLOGOP->op_other);
1543 register I32 cxix = dopoptosub(cxstack_ix);
1544 register PERL_CONTEXT *cx;
1545 register PERL_CONTEXT *ccstack = cxstack;
1546 PERL_SI *top_si = PL_curstackinfo;
1549 const char *stashname;
1557 /* we may be in a higher stacklevel, so dig down deeper */
1558 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1559 top_si = top_si->si_prev;
1560 ccstack = top_si->si_cxstack;
1561 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1564 if (GIMME != G_ARRAY) {
1570 /* caller() should not report the automatic calls to &DB::sub */
1571 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1572 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1576 cxix = dopoptosub_at(ccstack, cxix - 1);
1579 cx = &ccstack[cxix];
1580 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1581 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1582 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1583 field below is defined for any cx. */
1584 /* caller() should not report the automatic calls to &DB::sub */
1585 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1586 cx = &ccstack[dbcxix];
1589 stashname = CopSTASHPV(cx->blk_oldcop);
1590 if (GIMME != G_ARRAY) {
1593 PUSHs(&PL_sv_undef);
1596 sv_setpv(TARG, stashname);
1605 PUSHs(&PL_sv_undef);
1607 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1608 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1609 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1612 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1613 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1614 /* So is ccstack[dbcxix]. */
1617 gv_efullname3(sv, cvgv, Nullch);
1618 PUSHs(sv_2mortal(sv));
1619 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1622 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1623 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1627 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1628 PUSHs(sv_2mortal(newSViv(0)));
1630 gimme = (I32)cx->blk_gimme;
1631 if (gimme == G_VOID)
1632 PUSHs(&PL_sv_undef);
1634 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1635 if (CxTYPE(cx) == CXt_EVAL) {
1637 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1638 PUSHs(cx->blk_eval.cur_text);
1642 else if (cx->blk_eval.old_namesv) {
1643 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1646 /* eval BLOCK (try blocks have old_namesv == 0) */
1648 PUSHs(&PL_sv_undef);
1649 PUSHs(&PL_sv_undef);
1653 PUSHs(&PL_sv_undef);
1654 PUSHs(&PL_sv_undef);
1656 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1657 && CopSTASH_eq(PL_curcop, PL_debstash))
1659 AV *ary = cx->blk_sub.argarray;
1660 const int off = AvARRAY(ary) - AvALLOC(ary);
1664 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1667 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1670 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1671 av_extend(PL_dbargs, AvFILLp(ary) + off);
1672 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1673 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1675 /* XXX only hints propagated via op_private are currently
1676 * visible (others are not easily accessible, since they
1677 * use the global PL_hints) */
1678 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1679 HINT_PRIVATE_MASK)));
1682 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1684 if (old_warnings == pWARN_NONE ||
1685 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1686 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1687 else if (old_warnings == pWARN_ALL ||
1688 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1689 /* Get the bit mask for $warnings::Bits{all}, because
1690 * it could have been extended by warnings::register */
1692 HV *bits = get_hv("warnings::Bits", FALSE);
1693 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1694 mask = newSVsv(*bits_all);
1697 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1701 mask = newSVsv(old_warnings);
1702 PUSHs(sv_2mortal(mask));
1717 sv_reset(tmps, CopSTASH(PL_curcop));
1727 /* like pp_nextstate, but used instead when the debugger is active */
1731 PL_curcop = (COP*)PL_op;
1732 TAINT_NOT; /* Each statement is presumed innocent */
1733 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1736 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1737 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1741 register PERL_CONTEXT *cx;
1742 I32 gimme = G_ARRAY;
1749 DIE(aTHX_ "No DB::DB routine defined");
1751 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1752 /* don't do recursive DB::DB call */
1764 PUSHBLOCK(cx, CXt_SUB, SP);
1766 cx->blk_sub.retop = PL_op->op_next;
1768 PAD_SET_CUR(CvPADLIST(cv),1);
1769 RETURNOP(CvSTART(cv));
1783 register PERL_CONTEXT *cx;
1784 I32 gimme = GIMME_V;
1786 U32 cxtype = CXt_LOOP;
1794 if (PL_op->op_targ) {
1795 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1796 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1797 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1798 SVs_PADSTALE, SVs_PADSTALE);
1800 #ifndef USE_ITHREADS
1801 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1804 SAVEPADSV(PL_op->op_targ);
1805 iterdata = INT2PTR(void*, PL_op->op_targ);
1806 cxtype |= CXp_PADVAR;
1811 svp = &GvSV(gv); /* symbol table variable */
1812 SAVEGENERICSV(*svp);
1815 iterdata = (void*)gv;
1821 PUSHBLOCK(cx, cxtype, SP);
1823 PUSHLOOP(cx, iterdata, MARK);
1825 PUSHLOOP(cx, svp, MARK);
1827 if (PL_op->op_flags & OPf_STACKED) {
1828 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1829 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1831 SV *right = (SV*)cx->blk_loop.iterary;
1832 if (RANGE_IS_NUMERIC(sv,right)) {
1833 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1834 (SvOK(right) && SvNV(right) >= IV_MAX))
1835 DIE(aTHX_ "Range iterator outside integer range");
1836 cx->blk_loop.iterix = SvIV(sv);
1837 cx->blk_loop.itermax = SvIV(right);
1841 cx->blk_loop.iterlval = newSVsv(sv);
1842 (void) SvPV_force(cx->blk_loop.iterlval,n_a);
1843 (void) SvPV(right,n_a);
1846 else if (PL_op->op_private & OPpITER_REVERSED) {
1847 cx->blk_loop.itermax = -1;
1848 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1853 cx->blk_loop.iterary = PL_curstack;
1854 AvFILLp(PL_curstack) = SP - PL_stack_base;
1855 if (PL_op->op_private & OPpITER_REVERSED) {
1856 cx->blk_loop.itermax = MARK - PL_stack_base;
1857 cx->blk_loop.iterix = cx->blk_oldsp;
1860 cx->blk_loop.iterix = MARK - PL_stack_base;
1870 register PERL_CONTEXT *cx;
1871 I32 gimme = GIMME_V;
1877 PUSHBLOCK(cx, CXt_LOOP, SP);
1878 PUSHLOOP(cx, 0, SP);
1886 register PERL_CONTEXT *cx;
1894 newsp = PL_stack_base + cx->blk_loop.resetsp;
1897 if (gimme == G_VOID)
1899 else if (gimme == G_SCALAR) {
1901 *++newsp = sv_mortalcopy(*SP);
1903 *++newsp = &PL_sv_undef;
1907 *++newsp = sv_mortalcopy(*++mark);
1908 TAINT_NOT; /* Each item is independent */
1914 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1915 PL_curpm = newpm; /* ... and pop $1 et al */
1927 register PERL_CONTEXT *cx;
1928 bool popsub2 = FALSE;
1929 bool clear_errsv = FALSE;
1937 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1938 if (cxstack_ix == PL_sortcxix
1939 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1941 if (cxstack_ix > PL_sortcxix)
1942 dounwind(PL_sortcxix);
1943 AvARRAY(PL_curstack)[1] = *SP;
1944 PL_stack_sp = PL_stack_base + 1;
1949 cxix = dopoptosub(cxstack_ix);
1951 DIE(aTHX_ "Can't return outside a subroutine");
1952 if (cxix < cxstack_ix)
1956 switch (CxTYPE(cx)) {
1959 retop = cx->blk_sub.retop;
1960 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1963 if (!(PL_in_eval & EVAL_KEEPERR))
1966 retop = cx->blk_eval.retop;
1970 if (optype == OP_REQUIRE &&
1971 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1973 /* Unassume the success we assumed earlier. */
1974 SV *nsv = cx->blk_eval.old_namesv;
1975 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1976 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1981 retop = cx->blk_sub.retop;
1984 DIE(aTHX_ "panic: return");
1988 if (gimme == G_SCALAR) {
1991 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1993 *++newsp = SvREFCNT_inc(*SP);
1998 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2000 *++newsp = sv_mortalcopy(sv);
2005 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2008 *++newsp = sv_mortalcopy(*SP);
2011 *++newsp = &PL_sv_undef;
2013 else if (gimme == G_ARRAY) {
2014 while (++MARK <= SP) {
2015 *++newsp = (popsub2 && SvTEMP(*MARK))
2016 ? *MARK : sv_mortalcopy(*MARK);
2017 TAINT_NOT; /* Each item is independent */
2020 PL_stack_sp = newsp;
2023 /* Stack values are safe: */
2026 POPSUB(cx,sv); /* release CV and @_ ... */
2030 PL_curpm = newpm; /* ... and pop $1 et al */
2042 register PERL_CONTEXT *cx;
2052 if (PL_op->op_flags & OPf_SPECIAL) {
2053 cxix = dopoptoloop(cxstack_ix);
2055 DIE(aTHX_ "Can't \"last\" outside a loop block");
2058 cxix = dopoptolabel(cPVOP->op_pv);
2060 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2062 if (cxix < cxstack_ix)
2066 cxstack_ix++; /* temporarily protect top context */
2068 switch (CxTYPE(cx)) {
2071 newsp = PL_stack_base + cx->blk_loop.resetsp;
2072 nextop = cx->blk_loop.last_op->op_next;
2076 nextop = cx->blk_sub.retop;
2080 nextop = cx->blk_eval.retop;
2084 nextop = cx->blk_sub.retop;
2087 DIE(aTHX_ "panic: last");
2091 if (gimme == G_SCALAR) {
2093 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2094 ? *SP : sv_mortalcopy(*SP);
2096 *++newsp = &PL_sv_undef;
2098 else if (gimme == G_ARRAY) {
2099 while (++MARK <= SP) {
2100 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2101 ? *MARK : sv_mortalcopy(*MARK);
2102 TAINT_NOT; /* Each item is independent */
2110 /* Stack values are safe: */
2113 POPLOOP(cx); /* release loop vars ... */
2117 POPSUB(cx,sv); /* release CV and @_ ... */
2120 PL_curpm = newpm; /* ... and pop $1 et al */
2129 register PERL_CONTEXT *cx;
2132 if (PL_op->op_flags & OPf_SPECIAL) {
2133 cxix = dopoptoloop(cxstack_ix);
2135 DIE(aTHX_ "Can't \"next\" outside a loop block");
2138 cxix = dopoptolabel(cPVOP->op_pv);
2140 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2142 if (cxix < cxstack_ix)
2145 /* clear off anything above the scope we're re-entering, but
2146 * save the rest until after a possible continue block */
2147 inner = PL_scopestack_ix;
2149 if (PL_scopestack_ix < inner)
2150 leave_scope(PL_scopestack[PL_scopestack_ix]);
2151 return cx->blk_loop.next_op;
2157 register PERL_CONTEXT *cx;
2160 if (PL_op->op_flags & OPf_SPECIAL) {
2161 cxix = dopoptoloop(cxstack_ix);
2163 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2166 cxix = dopoptolabel(cPVOP->op_pv);
2168 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2170 if (cxix < cxstack_ix)
2174 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2175 LEAVE_SCOPE(oldsave);
2177 return cx->blk_loop.redo_op;
2181 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2185 static const char too_deep[] = "Target of goto is too deeply nested";
2188 Perl_croak(aTHX_ too_deep);
2189 if (o->op_type == OP_LEAVE ||
2190 o->op_type == OP_SCOPE ||
2191 o->op_type == OP_LEAVELOOP ||
2192 o->op_type == OP_LEAVESUB ||
2193 o->op_type == OP_LEAVETRY)
2195 *ops++ = cUNOPo->op_first;
2197 Perl_croak(aTHX_ too_deep);
2200 if (o->op_flags & OPf_KIDS) {
2201 /* First try all the kids at this level, since that's likeliest. */
2202 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2203 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2204 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2207 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2208 if (kid == PL_lastgotoprobe)
2210 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2213 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2214 ops[-1]->op_type == OP_DBSTATE)
2219 if ((o = dofindlabel(kid, label, ops, oplimit)))
2238 register PERL_CONTEXT *cx;
2239 #define GOTO_DEPTH 64
2240 OP *enterops[GOTO_DEPTH];
2241 const char *label = 0;
2242 const bool do_dump = (PL_op->op_type == OP_DUMP);
2243 static const char must_have_label[] = "goto must have label";
2245 if (PL_op->op_flags & OPf_STACKED) {
2249 /* This egregious kludge implements goto &subroutine */
2250 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2252 register PERL_CONTEXT *cx;
2253 CV* cv = (CV*)SvRV(sv);
2260 if (!CvROOT(cv) && !CvXSUB(cv)) {
2261 const GV * const gv = CvGV(cv);
2265 /* autoloaded stub? */
2266 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2268 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2269 GvNAMELEN(gv), FALSE);
2270 if (autogv && (cv = GvCV(autogv)))
2272 tmpstr = sv_newmortal();
2273 gv_efullname3(tmpstr, gv, Nullch);
2274 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2276 DIE(aTHX_ "Goto undefined subroutine");
2279 /* First do some returnish stuff. */
2280 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2282 cxix = dopoptosub(cxstack_ix);
2284 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2285 if (cxix < cxstack_ix)
2289 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2290 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2291 /* put @_ back onto stack */
2292 AV* av = cx->blk_sub.argarray;
2294 items = AvFILLp(av) + 1;
2295 EXTEND(SP, items+1); /* @_ could have been extended. */
2296 Copy(AvARRAY(av), SP + 1, items, SV*);
2297 SvREFCNT_dec(GvAV(PL_defgv));
2298 GvAV(PL_defgv) = cx->blk_sub.savearray;
2300 /* abandon @_ if it got reified */
2305 av_extend(av, items-1);
2306 AvFLAGS(av) = AVf_REIFY;
2307 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2310 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2312 av = GvAV(PL_defgv);
2313 items = AvFILLp(av) + 1;
2314 EXTEND(SP, items+1); /* @_ could have been extended. */
2315 Copy(AvARRAY(av), SP + 1, items, SV*);
2319 if (CxTYPE(cx) == CXt_SUB &&
2320 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2321 SvREFCNT_dec(cx->blk_sub.cv);
2322 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2323 LEAVE_SCOPE(oldsave);
2325 /* Now do some callish stuff. */
2327 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2331 for (index=0; index<items; index++)
2332 sv_2mortal(SP[-index]);
2334 #ifdef PERL_XSUB_OLDSTYLE
2335 if (CvOLDSTYLE(cv)) {
2336 I32 (*fp3)(int,int,int);
2341 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2342 items = (*fp3)(CvXSUBANY(cv).any_i32,
2343 mark - PL_stack_base + 1,
2345 SP = PL_stack_base + items;
2348 #endif /* PERL_XSUB_OLDSTYLE */
2353 /* Push a mark for the start of arglist */
2356 (void)(*CvXSUB(cv))(aTHX_ cv);
2357 /* Pop the current context like a decent sub should */
2358 POPBLOCK(cx, PL_curpm);
2359 /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2362 assert(CxTYPE(cx) == CXt_SUB);
2363 return cx->blk_sub.retop;
2366 AV* padlist = CvPADLIST(cv);
2367 if (CxTYPE(cx) == CXt_EVAL) {
2368 PL_in_eval = cx->blk_eval.old_in_eval;
2369 PL_eval_root = cx->blk_eval.old_eval_root;
2370 cx->cx_type = CXt_SUB;
2371 cx->blk_sub.hasargs = 0;
2373 cx->blk_sub.cv = cv;
2374 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2377 if (CvDEPTH(cv) < 2)
2378 (void)SvREFCNT_inc(cv);
2380 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2381 sub_crush_depth(cv);
2382 pad_push(padlist, CvDEPTH(cv));
2384 PAD_SET_CUR(padlist, CvDEPTH(cv));
2385 if (cx->blk_sub.hasargs)
2387 AV* av = (AV*)PAD_SVl(0);
2390 cx->blk_sub.savearray = GvAV(PL_defgv);
2391 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2392 CX_CURPAD_SAVE(cx->blk_sub);
2393 cx->blk_sub.argarray = av;
2395 if (items >= AvMAX(av) + 1) {
2397 if (AvARRAY(av) != ary) {
2398 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2399 SvPV_set(av, (char*)ary);
2401 if (items >= AvMAX(av) + 1) {
2402 AvMAX(av) = items - 1;
2403 Renew(ary,items+1,SV*);
2405 SvPV_set(av, (char*)ary);
2409 Copy(mark,AvARRAY(av),items,SV*);
2410 AvFILLp(av) = items - 1;
2411 assert(!AvREAL(av));
2413 /* transfer 'ownership' of refcnts to new @_ */
2423 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2425 * We do not care about using sv to call CV;
2426 * it's for informational purposes only.
2428 SV *sv = GvSV(PL_DBsub);
2432 if (PERLDB_SUB_NN) {
2433 int type = SvTYPE(sv);
2434 if (type < SVt_PVIV && type != SVt_IV)
2435 sv_upgrade(sv, SVt_PVIV);
2437 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2439 gv_efullname3(sv, CvGV(cv), Nullch);
2442 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2443 PUSHMARK( PL_stack_sp );
2444 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2448 RETURNOP(CvSTART(cv));
2452 label = SvPV(sv,n_a);
2453 if (!(do_dump || *label))
2454 DIE(aTHX_ must_have_label);
2457 else if (PL_op->op_flags & OPf_SPECIAL) {
2459 DIE(aTHX_ must_have_label);
2462 label = cPVOP->op_pv;
2464 if (label && *label) {
2466 bool leaving_eval = FALSE;
2467 bool in_block = FALSE;
2468 PERL_CONTEXT *last_eval_cx = 0;
2472 PL_lastgotoprobe = 0;
2474 for (ix = cxstack_ix; ix >= 0; ix--) {
2476 switch (CxTYPE(cx)) {
2478 leaving_eval = TRUE;
2479 if (!CxTRYBLOCK(cx)) {
2480 gotoprobe = (last_eval_cx ?
2481 last_eval_cx->blk_eval.old_eval_root :
2486 /* else fall through */
2488 gotoprobe = cx->blk_oldcop->op_sibling;
2494 gotoprobe = cx->blk_oldcop->op_sibling;
2497 gotoprobe = PL_main_root;
2500 if (CvDEPTH(cx->blk_sub.cv)) {
2501 gotoprobe = CvROOT(cx->blk_sub.cv);
2507 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2510 DIE(aTHX_ "panic: goto");
2511 gotoprobe = PL_main_root;
2515 retop = dofindlabel(gotoprobe, label,
2516 enterops, enterops + GOTO_DEPTH);
2520 PL_lastgotoprobe = gotoprobe;
2523 DIE(aTHX_ "Can't find label %s", label);
2525 /* if we're leaving an eval, check before we pop any frames
2526 that we're not going to punt, otherwise the error
2529 if (leaving_eval && *enterops && enterops[1]) {
2531 for (i = 1; enterops[i]; i++)
2532 if (enterops[i]->op_type == OP_ENTERITER)
2533 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2536 /* pop unwanted frames */
2538 if (ix < cxstack_ix) {
2545 oldsave = PL_scopestack[PL_scopestack_ix];
2546 LEAVE_SCOPE(oldsave);
2549 /* push wanted frames */
2551 if (*enterops && enterops[1]) {
2553 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2554 for (; enterops[ix]; ix++) {
2555 PL_op = enterops[ix];
2556 /* Eventually we may want to stack the needed arguments
2557 * for each op. For now, we punt on the hard ones. */
2558 if (PL_op->op_type == OP_ENTERITER)
2559 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2560 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2568 if (!retop) retop = PL_main_start;
2570 PL_restartop = retop;
2571 PL_do_undump = TRUE;
2575 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2576 PL_do_undump = FALSE;
2592 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2594 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2597 PL_exit_flags |= PERL_EXIT_EXPECTED;
2599 PUSHs(&PL_sv_undef);
2607 NV value = SvNVx(GvSV(cCOP->cop_gv));
2608 register I32 match = I_32(value);
2611 if (((NV)match) > value)
2612 --match; /* was fractional--truncate other way */
2614 match -= cCOP->uop.scop.scop_offset;
2617 else if (match > cCOP->uop.scop.scop_max)
2618 match = cCOP->uop.scop.scop_max;
2619 PL_op = cCOP->uop.scop.scop_next[match];
2629 PL_op = PL_op->op_next; /* can't assume anything */
2632 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2633 match -= cCOP->uop.scop.scop_offset;
2636 else if (match > cCOP->uop.scop.scop_max)
2637 match = cCOP->uop.scop.scop_max;
2638 PL_op = cCOP->uop.scop.scop_next[match];
2647 S_save_lines(pTHX_ AV *array, SV *sv)
2649 register const char *s = SvPVX(sv);
2650 register const char *send = SvPVX(sv) + SvCUR(sv);
2651 register const char *t;
2652 register I32 line = 1;
2654 while (s && s < send) {
2655 SV *tmpstr = NEWSV(85,0);
2657 sv_upgrade(tmpstr, SVt_PVMG);
2658 t = strchr(s, '\n');
2664 sv_setpvn(tmpstr, s, t - s);
2665 av_store(array, line++, tmpstr);
2671 S_docatch_body(pTHX)
2678 S_docatch(pTHX_ OP *o)
2681 OP * const oldop = PL_op;
2683 volatile PERL_SI *cursi = PL_curstackinfo;
2687 assert(CATCH_GET == TRUE);
2691 /* Normally, the leavetry at the end of this block of ops will
2692 * pop an op off the return stack and continue there. By setting
2693 * the op to Nullop, we force an exit from the inner runops()
2696 assert(cxstack_ix >= 0);
2697 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2698 retop = cxstack[cxstack_ix].blk_eval.retop;
2699 cxstack[cxstack_ix].blk_eval.retop = Nullop;
2708 /* die caught by an inner eval - continue inner loop */
2709 if (PL_restartop && cursi == PL_curstackinfo) {
2710 PL_op = PL_restartop;
2714 /* a die in this eval - continue in outer loop */
2730 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2731 /* sv Text to convert to OP tree. */
2732 /* startop op_free() this to undo. */
2733 /* code Short string id of the caller. */
2735 dSP; /* Make POPBLOCK work. */
2738 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2742 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2743 char *tmpbuf = tbuf;
2746 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2751 /* switch to eval mode */
2753 if (IN_PERL_COMPILETIME) {
2754 SAVECOPSTASH_FREE(&PL_compiling);
2755 CopSTASH_set(&PL_compiling, PL_curstash);
2757 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2758 SV *sv = sv_newmortal();
2759 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2760 code, (unsigned long)++PL_evalseq,
2761 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2765 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2766 SAVECOPFILE_FREE(&PL_compiling);
2767 CopFILE_set(&PL_compiling, tmpbuf+2);
2768 SAVECOPLINE(&PL_compiling);
2769 CopLINE_set(&PL_compiling, 1);
2770 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2771 deleting the eval's FILEGV from the stash before gv_check() runs
2772 (i.e. before run-time proper). To work around the coredump that
2773 ensues, we always turn GvMULTI_on for any globals that were
2774 introduced within evals. See force_ident(). GSAR 96-10-12 */
2775 safestr = savepv(tmpbuf);
2776 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2778 #ifdef OP_IN_REGISTER
2784 /* we get here either during compilation, or via pp_regcomp at runtime */
2785 runtime = IN_PERL_RUNTIME;
2787 runcv = find_runcv(NULL);
2790 PL_op->op_type = OP_ENTEREVAL;
2791 PL_op->op_flags = 0; /* Avoid uninit warning. */
2792 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2793 PUSHEVAL(cx, 0, Nullgv);
2796 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2798 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2799 POPBLOCK(cx,PL_curpm);
2802 (*startop)->op_type = OP_NULL;
2803 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2805 /* XXX DAPM do this properly one year */
2806 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2808 if (IN_PERL_COMPILETIME)
2809 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2810 #ifdef OP_IN_REGISTER
2818 =for apidoc find_runcv
2820 Locate the CV corresponding to the currently executing sub or eval.
2821 If db_seqp is non_null, skip CVs that are in the DB package and populate
2822 *db_seqp with the cop sequence number at the point that the DB:: code was
2823 entered. (allows debuggers to eval in the scope of the breakpoint rather
2824 than in in the scope of the debugger itself).
2830 Perl_find_runcv(pTHX_ U32 *db_seqp)
2835 *db_seqp = PL_curcop->cop_seq;
2836 for (si = PL_curstackinfo; si; si = si->si_prev) {
2838 for (ix = si->si_cxix; ix >= 0; ix--) {
2839 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2840 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2841 CV *cv = cx->blk_sub.cv;
2842 /* skip DB:: code */
2843 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2844 *db_seqp = cx->blk_oldcop->cop_seq;
2849 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2857 /* Compile a require/do, an eval '', or a /(?{...})/.
2858 * In the last case, startop is non-null, and contains the address of
2859 * a pointer that should be set to the just-compiled code.
2860 * outside is the lexically enclosing CV (if any) that invoked us.
2863 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2865 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2870 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2871 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2876 SAVESPTR(PL_compcv);
2877 PL_compcv = (CV*)NEWSV(1104,0);
2878 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2879 CvEVAL_on(PL_compcv);
2880 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2881 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2883 CvOUTSIDE_SEQ(PL_compcv) = seq;
2884 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2886 /* set up a scratch pad */
2888 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2891 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2893 /* make sure we compile in the right package */
2895 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2896 SAVESPTR(PL_curstash);
2897 PL_curstash = CopSTASH(PL_curcop);
2899 SAVESPTR(PL_beginav);
2900 PL_beginav = newAV();
2901 SAVEFREESV(PL_beginav);
2902 SAVEI32(PL_error_count);
2904 /* try to compile it */
2906 PL_eval_root = Nullop;
2908 PL_curcop = &PL_compiling;
2909 PL_curcop->cop_arybase = 0;
2910 if (saveop && saveop->op_flags & OPf_SPECIAL)
2911 PL_in_eval |= EVAL_KEEPERR;
2914 if (yyparse() || PL_error_count || !PL_eval_root) {
2915 SV **newsp; /* Used by POPBLOCK. */
2916 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2917 I32 optype = 0; /* Might be reset by POPEVAL. */
2922 op_free(PL_eval_root);
2923 PL_eval_root = Nullop;
2925 SP = PL_stack_base + POPMARK; /* pop original mark */
2927 POPBLOCK(cx,PL_curpm);
2932 if (optype == OP_REQUIRE) {
2933 const char* msg = SvPVx(ERRSV, n_a);
2934 SV *nsv = cx->blk_eval.old_namesv;
2935 (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
2937 DIE(aTHX_ "%sCompilation failed in require",
2938 *msg ? msg : "Unknown error\n");
2941 const char* msg = SvPVx(ERRSV, n_a);
2943 POPBLOCK(cx,PL_curpm);
2945 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2946 (*msg ? msg : "Unknown error\n"));
2949 const char* msg = SvPVx(ERRSV, n_a);
2951 sv_setpv(ERRSV, "Compilation error");
2956 CopLINE_set(&PL_compiling, 0);
2958 *startop = PL_eval_root;
2960 SAVEFREEOP(PL_eval_root);
2962 /* Set the context for this new optree.
2963 * If the last op is an OP_REQUIRE, force scalar context.
2964 * Otherwise, propagate the context from the eval(). */
2965 if (PL_eval_root->op_type == OP_LEAVEEVAL
2966 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2967 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2969 scalar(PL_eval_root);
2970 else if (gimme & G_VOID)
2971 scalarvoid(PL_eval_root);
2972 else if (gimme & G_ARRAY)
2975 scalar(PL_eval_root);
2977 DEBUG_x(dump_eval());
2979 /* Register with debugger: */
2980 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2981 CV *cv = get_cv("DB::postponed", FALSE);
2985 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2987 call_sv((SV*)cv, G_DISCARD);
2991 /* compiled okay, so do it */
2993 CvDEPTH(PL_compcv) = 1;
2994 SP = PL_stack_base + POPMARK; /* pop original mark */
2995 PL_op = saveop; /* The caller may need it. */
2996 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
2998 RETURNOP(PL_eval_start);
3002 S_doopen_pm(pTHX_ const char *name, const char *mode)
3004 #ifndef PERL_DISABLE_PMC
3005 STRLEN namelen = strlen(name);
3008 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3009 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3010 const char * const pmc = SvPV_nolen(pmcsv);
3013 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3014 fp = PerlIO_open(name, mode);
3017 if (PerlLIO_stat(name, &pmstat) < 0 ||
3018 pmstat.st_mtime < pmcstat.st_mtime)
3020 fp = PerlIO_open(pmc, mode);
3023 fp = PerlIO_open(name, mode);
3026 SvREFCNT_dec(pmcsv);
3029 fp = PerlIO_open(name, mode);
3033 return PerlIO_open(name, mode);
3034 #endif /* !PERL_DISABLE_PMC */
3040 register PERL_CONTEXT *cx;
3044 char *tryname = Nullch;
3045 SV *namesv = Nullsv;
3047 I32 gimme = GIMME_V;
3048 PerlIO *tryrsfp = 0;
3050 int filter_has_file = 0;
3051 GV *filter_child_proc = 0;
3052 SV *filter_state = 0;
3059 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3060 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3061 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3062 "v-string in use/require non-portable");
3064 sv = new_version(sv);
3065 if (!sv_derived_from(PL_patchlevel, "version"))
3066 (void *)upg_version(PL_patchlevel);
3067 if ( vcmp(sv,PL_patchlevel) > 0 )
3068 DIE(aTHX_ "Perl v%"SVf" required--this is only v%"SVf", stopped",
3069 vstringify(sv), vstringify(PL_patchlevel));
3073 name = SvPV(sv, len);
3074 if (!(name && len > 0 && *name))
3075 DIE(aTHX_ "Null filename used");
3076 TAINT_PROPER("require");
3077 if (PL_op->op_type == OP_REQUIRE &&
3078 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3079 if (*svp != &PL_sv_undef)
3082 DIE(aTHX_ "Compilation failed in require");
3085 /* prepare to compile file */
3087 if (path_is_absolute(name)) {
3089 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3091 #ifdef MACOS_TRADITIONAL
3095 MacPerl_CanonDir(name, newname, 1);
3096 if (path_is_absolute(newname)) {
3098 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3103 AV *ar = GvAVn(PL_incgv);
3107 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3110 namesv = NEWSV(806, 0);
3111 for (i = 0; i <= AvFILL(ar); i++) {
3112 SV *dirsv = *av_fetch(ar, i, TRUE);
3118 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3119 && !sv_isobject(loader))
3121 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3124 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3125 PTR2UV(SvRV(dirsv)), name);
3126 tryname = SvPVX(namesv);
3137 if (sv_isobject(loader))
3138 count = call_method("INC", G_ARRAY);
3140 count = call_sv(loader, G_ARRAY);
3150 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3154 if (SvTYPE(arg) == SVt_PVGV) {
3155 IO *io = GvIO((GV *)arg);
3160 tryrsfp = IoIFP(io);
3161 if (IoTYPE(io) == IoTYPE_PIPE) {
3162 /* reading from a child process doesn't
3163 nest -- when returning from reading
3164 the inner module, the outer one is
3165 unreadable (closed?) I've tried to
3166 save the gv to manage the lifespan of
3167 the pipe, but this didn't help. XXX */
3168 filter_child_proc = (GV *)arg;
3169 (void)SvREFCNT_inc(filter_child_proc);
3172 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3173 PerlIO_close(IoOFP(io));
3185 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3187 (void)SvREFCNT_inc(filter_sub);
3190 filter_state = SP[i];
3191 (void)SvREFCNT_inc(filter_state);
3195 tryrsfp = PerlIO_open("/dev/null",
3211 filter_has_file = 0;
3212 if (filter_child_proc) {
3213 SvREFCNT_dec(filter_child_proc);
3214 filter_child_proc = 0;
3217 SvREFCNT_dec(filter_state);
3221 SvREFCNT_dec(filter_sub);
3226 if (!path_is_absolute(name)
3227 #ifdef MACOS_TRADITIONAL
3228 /* We consider paths of the form :a:b ambiguous and interpret them first
3229 as global then as local
3231 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3234 char *dir = SvPVx(dirsv, n_a);
3235 #ifdef MACOS_TRADITIONAL
3239 MacPerl_CanonDir(name, buf2, 1);
3240 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3244 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3246 sv_setpv(namesv, unixdir);
3247 sv_catpv(namesv, unixname);
3249 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3252 TAINT_PROPER("require");
3253 tryname = SvPVX(namesv);
3254 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3256 if (tryname[0] == '.' && tryname[1] == '/')
3265 SAVECOPFILE_FREE(&PL_compiling);
3266 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3267 SvREFCNT_dec(namesv);
3269 if (PL_op->op_type == OP_REQUIRE) {
3270 char *msgstr = name;
3271 if (namesv) { /* did we lookup @INC? */
3272 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3273 SV *dirmsgsv = NEWSV(0, 0);
3274 AV *ar = GvAVn(PL_incgv);
3276 sv_catpvn(msg, " in @INC", 8);
3277 if (instr(SvPVX(msg), ".h "))
3278 sv_catpv(msg, " (change .h to .ph maybe?)");
3279 if (instr(SvPVX(msg), ".ph "))
3280 sv_catpv(msg, " (did you run h2ph?)");
3281 sv_catpv(msg, " (@INC contains:");
3282 for (i = 0; i <= AvFILL(ar); i++) {
3283 char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3284 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3285 sv_catsv(msg, dirmsgsv);
3287 sv_catpvn(msg, ")", 1);
3288 SvREFCNT_dec(dirmsgsv);
3289 msgstr = SvPV_nolen(msg);
3291 DIE(aTHX_ "Can't locate %s", msgstr);
3297 SETERRNO(0, SS_NORMAL);
3299 /* Assume success here to prevent recursive requirement. */
3301 /* Check whether a hook in @INC has already filled %INC */
3302 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3303 (void)hv_store(GvHVn(PL_incgv), name, len,
3304 (hook_sv ? SvREFCNT_inc(hook_sv)
3305 : newSVpv(CopFILE(&PL_compiling), 0)),
3311 lex_start(sv_2mortal(newSVpvn("",0)));
3312 SAVEGENERICSV(PL_rsfp_filters);
3313 PL_rsfp_filters = Nullav;
3318 SAVESPTR(PL_compiling.cop_warnings);
3319 if (PL_dowarn & G_WARN_ALL_ON)
3320 PL_compiling.cop_warnings = pWARN_ALL ;
3321 else if (PL_dowarn & G_WARN_ALL_OFF)
3322 PL_compiling.cop_warnings = pWARN_NONE ;
3323 else if (PL_taint_warn)
3324 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3326 PL_compiling.cop_warnings = pWARN_STD ;
3327 SAVESPTR(PL_compiling.cop_io);
3328 PL_compiling.cop_io = Nullsv;
3330 if (filter_sub || filter_child_proc) {
3331 SV *datasv = filter_add(run_user_filter, Nullsv);
3332 IoLINES(datasv) = filter_has_file;
3333 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3334 IoTOP_GV(datasv) = (GV *)filter_state;
3335 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3338 /* switch to eval mode */
3339 PUSHBLOCK(cx, CXt_EVAL, SP);
3340 PUSHEVAL(cx, name, Nullgv);
3341 cx->blk_eval.retop = PL_op->op_next;
3343 SAVECOPLINE(&PL_compiling);
3344 CopLINE_set(&PL_compiling, 0);
3348 /* Store and reset encoding. */
3349 encoding = PL_encoding;
3350 PL_encoding = Nullsv;
3352 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3354 /* Restore encoding. */
3355 PL_encoding = encoding;
3362 return pp_require();
3368 register PERL_CONTEXT *cx;
3370 I32 gimme = GIMME_V, was = PL_sub_generation;
3371 char tbuf[TYPE_DIGITS(long) + 12];
3372 char *tmpbuf = tbuf;
3381 TAINT_PROPER("eval");
3387 /* switch to eval mode */
3389 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3390 SV *sv = sv_newmortal();
3391 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3392 (unsigned long)++PL_evalseq,
3393 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3397 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3398 SAVECOPFILE_FREE(&PL_compiling);
3399 CopFILE_set(&PL_compiling, tmpbuf+2);
3400 SAVECOPLINE(&PL_compiling);
3401 CopLINE_set(&PL_compiling, 1);
3402 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3403 deleting the eval's FILEGV from the stash before gv_check() runs
3404 (i.e. before run-time proper). To work around the coredump that
3405 ensues, we always turn GvMULTI_on for any globals that were
3406 introduced within evals. See force_ident(). GSAR 96-10-12 */
3407 safestr = savepv(tmpbuf);
3408 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3410 PL_hints = PL_op->op_targ;
3411 SAVESPTR(PL_compiling.cop_warnings);
3412 if (specialWARN(PL_curcop->cop_warnings))
3413 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3415 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3416 SAVEFREESV(PL_compiling.cop_warnings);
3418 SAVESPTR(PL_compiling.cop_io);
3419 if (specialCopIO(PL_curcop->cop_io))
3420 PL_compiling.cop_io = PL_curcop->cop_io;
3422 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3423 SAVEFREESV(PL_compiling.cop_io);
3425 /* special case: an eval '' executed within the DB package gets lexically
3426 * placed in the first non-DB CV rather than the current CV - this
3427 * allows the debugger to execute code, find lexicals etc, in the
3428 * scope of the code being debugged. Passing &seq gets find_runcv
3429 * to do the dirty work for us */
3430 runcv = find_runcv(&seq);
3432 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3433 PUSHEVAL(cx, 0, Nullgv);
3434 cx->blk_eval.retop = PL_op->op_next;
3436 /* prepare to compile string */
3438 if (PERLDB_LINE && PL_curstash != PL_debstash)
3439 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3441 ret = doeval(gimme, NULL, runcv, seq);
3442 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3443 && ret != PL_op->op_next) { /* Successive compilation. */
3444 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3446 return DOCATCH(ret);
3456 register PERL_CONTEXT *cx;
3458 const U8 save_flags = PL_op -> op_flags;
3463 retop = cx->blk_eval.retop;
3466 if (gimme == G_VOID)
3468 else if (gimme == G_SCALAR) {
3471 if (SvFLAGS(TOPs) & SVs_TEMP)
3474 *MARK = sv_mortalcopy(TOPs);
3478 *MARK = &PL_sv_undef;
3483 /* in case LEAVE wipes old return values */
3484 for (mark = newsp + 1; mark <= SP; mark++) {
3485 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3486 *mark = sv_mortalcopy(*mark);
3487 TAINT_NOT; /* Each item is independent */
3491 PL_curpm = newpm; /* Don't pop $1 et al till now */
3494 assert(CvDEPTH(PL_compcv) == 1);
3496 CvDEPTH(PL_compcv) = 0;
3499 if (optype == OP_REQUIRE &&
3500 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3502 /* Unassume the success we assumed earlier. */
3503 SV *nsv = cx->blk_eval.old_namesv;
3504 (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3505 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3506 /* die_where() did LEAVE, or we won't be here */
3510 if (!(save_flags & OPf_SPECIAL))
3520 register PERL_CONTEXT *cx;
3521 I32 gimme = GIMME_V;
3526 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3528 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3530 PL_in_eval = EVAL_INEVAL;
3533 return DOCATCH(PL_op->op_next);
3544 register PERL_CONTEXT *cx;
3549 retop = cx->blk_eval.retop;
3552 if (gimme == G_VOID)
3554 else if (gimme == G_SCALAR) {
3557 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3560 *MARK = sv_mortalcopy(TOPs);
3564 *MARK = &PL_sv_undef;
3569 /* in case LEAVE wipes old return values */
3570 for (mark = newsp + 1; mark <= SP; mark++) {
3571 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3572 *mark = sv_mortalcopy(*mark);
3573 TAINT_NOT; /* Each item is independent */
3577 PL_curpm = newpm; /* Don't pop $1 et al till now */
3585 S_doparseform(pTHX_ SV *sv)
3588 register char *s = SvPV_force(sv, len);
3589 register char *send = s + len;
3590 register char *base = Nullch;
3591 register I32 skipspaces = 0;
3592 bool noblank = FALSE;
3593 bool repeat = FALSE;
3594 bool postspace = FALSE;
3600 bool unchopnum = FALSE;
3601 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3604 Perl_croak(aTHX_ "Null picture in formline");
3606 /* estimate the buffer size needed */
3607 for (base = s; s <= send; s++) {
3608 if (*s == '\n' || *s == '@' || *s == '^')
3614 New(804, fops, maxops, U32);
3619 *fpc++ = FF_LINEMARK;
3620 noblank = repeat = FALSE;
3638 case ' ': case '\t':
3645 } /* else FALL THROUGH */
3653 *fpc++ = FF_LITERAL;
3661 *fpc++ = (U16)skipspaces;
3665 *fpc++ = FF_NEWLINE;
3669 arg = fpc - linepc + 1;
3676 *fpc++ = FF_LINEMARK;
3677 noblank = repeat = FALSE;
3686 ischop = s[-1] == '^';
3692 arg = (s - base) - 1;
3694 *fpc++ = FF_LITERAL;
3702 *fpc++ = 2; /* skip the @* or ^* */
3704 *fpc++ = FF_LINESNGL;
3707 *fpc++ = FF_LINEGLOB;
3709 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3710 arg = ischop ? 512 : 0;
3715 const char * const f = ++s;
3718 arg |= 256 + (s - f);
3720 *fpc++ = s - base; /* fieldsize for FETCH */
3721 *fpc++ = FF_DECIMAL;
3723 unchopnum |= ! ischop;
3725 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3726 arg = ischop ? 512 : 0;
3728 s++; /* skip the '0' first */
3732 const char * const f = ++s;
3735 arg |= 256 + (s - f);
3737 *fpc++ = s - base; /* fieldsize for FETCH */
3738 *fpc++ = FF_0DECIMAL;
3740 unchopnum |= ! ischop;
3744 bool ismore = FALSE;
3747 while (*++s == '>') ;
3748 prespace = FF_SPACE;
3750 else if (*s == '|') {
3751 while (*++s == '|') ;
3752 prespace = FF_HALFSPACE;
3757 while (*++s == '<') ;
3760 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3764 *fpc++ = s - base; /* fieldsize for FETCH */
3766 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3769 *fpc++ = (U16)prespace;
3783 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3785 { /* need to jump to the next word */
3787 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3788 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3789 s = SvPVX(sv) + SvCUR(sv) + z;
3791 Copy(fops, s, arg, U32);
3793 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3796 if (unchopnum && repeat)
3797 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3803 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3805 /* Can value be printed in fldsize chars, using %*.*f ? */
3809 int intsize = fldsize - (value < 0 ? 1 : 0);
3816 while (intsize--) pwr *= 10.0;
3817 while (frcsize--) eps /= 10.0;
3820 if (value + eps >= pwr)
3823 if (value - eps <= -pwr)
3830 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3832 SV *datasv = FILTER_DATA(idx);
3833 int filter_has_file = IoLINES(datasv);
3834 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3835 SV *filter_state = (SV *)IoTOP_GV(datasv);
3836 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3839 /* I was having segfault trouble under Linux 2.2.5 after a
3840 parse error occured. (Had to hack around it with a test
3841 for PL_error_count == 0.) Solaris doesn't segfault --
3842 not sure where the trouble is yet. XXX */
3844 if (filter_has_file) {
3845 len = FILTER_READ(idx+1, buf_sv, maxlen);
3848 if (filter_sub && len >= 0) {
3859 PUSHs(sv_2mortal(newSViv(maxlen)));
3861 PUSHs(filter_state);
3864 count = call_sv(filter_sub, G_SCALAR);
3880 IoLINES(datasv) = 0;
3881 if (filter_child_proc) {
3882 SvREFCNT_dec(filter_child_proc);
3883 IoFMT_GV(datasv) = Nullgv;
3886 SvREFCNT_dec(filter_state);
3887 IoTOP_GV(datasv) = Nullgv;
3890 SvREFCNT_dec(filter_sub);
3891 IoBOTTOM_GV(datasv) = Nullgv;
3893 filter_del(run_user_filter);
3899 /* perhaps someone can come up with a better name for
3900 this? it is not really "absolute", per se ... */
3902 S_path_is_absolute(pTHX_ const char *name)
3904 if (PERL_FILE_IS_ABSOLUTE(name)
3905 #ifdef MACOS_TRADITIONAL
3908 || (*name == '.' && (name[1] == '/' ||
3909 (name[1] == '.' && name[2] == '/'))))
3920 * c-indentation-style: bsd
3922 * indent-tabs-mode: t
3925 * vim: shiftwidth=4: