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;
82 MAGIC *mg = Null(MAGIC*);
84 /* prevent recompiling under /o and ithreads. */
85 #if defined(USE_ITHREADS)
86 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
87 if (PL_op->op_flags & OPf_STACKED) {
96 if (PL_op->op_flags & OPf_STACKED) {
97 /* multiple args; concatentate them */
99 tmpstr = PAD_SV(ARGTARG);
100 sv_setpvn(tmpstr, "", 0);
101 while (++MARK <= SP) {
102 if (PL_amagic_generation) {
104 if ((SvAMAGIC(tmpstr) || SvAMAGIC(*MARK)) &&
105 (sv = amagic_call(tmpstr, *MARK, concat_amg, AMGf_assign)))
107 sv_setsv(tmpstr, sv);
111 sv_catsv(tmpstr, *MARK);
120 SV *sv = SvRV(tmpstr);
122 mg = mg_find(sv, PERL_MAGIC_qr);
125 regexp *re = (regexp *)mg->mg_obj;
126 ReREFCNT_dec(PM_GETRE(pm));
127 PM_SETRE(pm, ReREFCNT_inc(re));
131 const char *t = SvPV_const(tmpstr, len);
133 /* Check against the last compiled regexp. */
134 if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
135 PM_GETRE(pm)->prelen != (I32)len ||
136 memNE(PM_GETRE(pm)->precomp, t, len))
139 ReREFCNT_dec(PM_GETRE(pm));
140 PM_SETRE(pm, Null(REGEXP*)); /* crucial if regcomp aborts */
142 if (PL_op->op_flags & OPf_SPECIAL)
143 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
145 pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
147 pm->op_pmdynflags |= PMdf_DYN_UTF8;
149 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
150 if (pm->op_pmdynflags & PMdf_UTF8)
151 t = (char*)bytes_to_utf8((U8*)t, &len);
153 PM_SETRE(pm, CALLREGCOMP(aTHX_ (char *)t, (char *)t + len, pm));
154 if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
156 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
157 inside tie/overload accessors. */
161 #ifndef INCOMPLETE_TAINTS
164 pm->op_pmdynflags |= PMdf_TAINTED;
166 pm->op_pmdynflags &= ~PMdf_TAINTED;
170 if (!PM_GETRE(pm)->prelen && PL_curpm)
172 else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
173 pm->op_pmflags |= PMf_WHITE;
175 pm->op_pmflags &= ~PMf_WHITE;
177 /* XXX runtime compiled output needs to move to the pad */
178 if (pm->op_pmflags & PMf_KEEP) {
179 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
180 #if !defined(USE_ITHREADS)
181 /* XXX can't change the optree at runtime either */
182 cLOGOP->op_first->op_next = PL_op->op_next;
191 register PMOP *pm = (PMOP*) cLOGOP->op_other;
192 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
193 register SV *dstr = cx->sb_dstr;
194 register char *s = cx->sb_s;
195 register char *m = cx->sb_m;
196 char *orig = cx->sb_orig;
197 register REGEXP *rx = cx->sb_rx;
199 REGEXP *old = PM_GETRE(pm);
206 rxres_restore(&cx->sb_rxres, rx);
207 RX_MATCH_UTF8_set(rx, SvUTF8(cx->sb_targ));
209 if (cx->sb_iters++) {
210 const I32 saviters = cx->sb_iters;
211 if (cx->sb_iters > cx->sb_maxiters)
212 DIE(aTHX_ "Substitution loop");
214 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
215 cx->sb_rxtainted |= 2;
216 sv_catsv(dstr, POPs);
219 if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
220 s == m, cx->sb_targ, NULL,
221 ((cx->sb_rflags & REXEC_COPY_STR)
222 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
223 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
225 SV *targ = cx->sb_targ;
227 assert(cx->sb_strend >= s);
228 if(cx->sb_strend > s) {
229 if (DO_UTF8(dstr) && !SvUTF8(targ))
230 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
232 sv_catpvn(dstr, s, cx->sb_strend - s);
234 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
236 #ifdef PERL_OLD_COPY_ON_WRITE
238 sv_force_normal_flags(targ, SV_COW_DROP_PV);
244 SvPV_set(targ, SvPVX(dstr));
245 SvCUR_set(targ, SvCUR(dstr));
246 SvLEN_set(targ, SvLEN(dstr));
249 SvPV_set(dstr, (char*)0);
252 TAINT_IF(cx->sb_rxtainted & 1);
253 PUSHs(sv_2mortal(newSViv(saviters - 1)));
255 (void)SvPOK_only_UTF8(targ);
256 TAINT_IF(cx->sb_rxtainted);
260 LEAVE_SCOPE(cx->sb_oldsave);
263 RETURNOP(pm->op_next);
265 cx->sb_iters = saviters;
267 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
270 cx->sb_orig = orig = rx->subbeg;
272 cx->sb_strend = s + (cx->sb_strend - m);
274 cx->sb_m = m = rx->startp[0] + orig;
276 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
277 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
279 sv_catpvn(dstr, s, m-s);
281 cx->sb_s = rx->endp[0] + orig;
282 { /* Update the pos() information. */
283 SV *sv = cx->sb_targ;
286 if (SvTYPE(sv) < SVt_PVMG)
287 SvUPGRADE(sv, SVt_PVMG);
288 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
289 sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
290 mg = mg_find(sv, PERL_MAGIC_regex_global);
299 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
300 rxres_save(&cx->sb_rxres, rx);
301 RETURNOP(pm->op_pmreplstart);
305 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
310 if (!p || p[1] < rx->nparens) {
311 #ifdef PERL_OLD_COPY_ON_WRITE
312 i = 7 + rx->nparens * 2;
314 i = 6 + rx->nparens * 2;
323 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
324 RX_MATCH_COPIED_off(rx);
326 #ifdef PERL_OLD_COPY_ON_WRITE
327 *p++ = PTR2UV(rx->saved_copy);
328 rx->saved_copy = Nullsv;
333 *p++ = PTR2UV(rx->subbeg);
334 *p++ = (UV)rx->sublen;
335 for (i = 0; i <= rx->nparens; ++i) {
336 *p++ = (UV)rx->startp[i];
337 *p++ = (UV)rx->endp[i];
342 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
347 RX_MATCH_COPY_FREE(rx);
348 RX_MATCH_COPIED_set(rx, *p);
351 #ifdef PERL_OLD_COPY_ON_WRITE
353 SvREFCNT_dec (rx->saved_copy);
354 rx->saved_copy = INT2PTR(SV*,*p);
360 rx->subbeg = INT2PTR(char*,*p++);
361 rx->sublen = (I32)(*p++);
362 for (i = 0; i <= rx->nparens; ++i) {
363 rx->startp[i] = (I32)(*p++);
364 rx->endp[i] = (I32)(*p++);
369 Perl_rxres_free(pTHX_ void **rsp)
374 Safefree(INT2PTR(char*,*p));
375 #ifdef PERL_OLD_COPY_ON_WRITE
377 SvREFCNT_dec (INT2PTR(SV*,p[1]));
387 dSP; dMARK; dORIGMARK;
388 register SV *tmpForm = *++MARK;
393 register SV *sv = Nullsv;
394 const char *item = Nullch;
398 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
399 const char *chophere = Nullch;
400 char *linemark = Nullch;
402 bool gotsome = FALSE;
404 STRLEN fudge = SvPOK(tmpForm)
405 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
406 bool item_is_utf8 = FALSE;
407 bool targ_is_utf8 = FALSE;
413 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
414 if (SvREADONLY(tmpForm)) {
415 SvREADONLY_off(tmpForm);
416 parseres = doparseform(tmpForm);
417 SvREADONLY_on(tmpForm);
420 parseres = doparseform(tmpForm);
424 SvPV_force(PL_formtarget, len);
425 if (DO_UTF8(PL_formtarget))
427 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
429 f = SvPV_const(tmpForm, len);
430 /* need to jump to the next word */
431 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
435 const char *name = "???";
438 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
439 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
440 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
441 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
442 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
444 case FF_CHECKNL: name = "CHECKNL"; break;
445 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
446 case FF_SPACE: name = "SPACE"; break;
447 case FF_HALFSPACE: name = "HALFSPACE"; break;
448 case FF_ITEM: name = "ITEM"; break;
449 case FF_CHOP: name = "CHOP"; break;
450 case FF_LINEGLOB: name = "LINEGLOB"; break;
451 case FF_NEWLINE: name = "NEWLINE"; break;
452 case FF_MORE: name = "MORE"; break;
453 case FF_LINEMARK: name = "LINEMARK"; break;
454 case FF_END: name = "END"; break;
455 case FF_0DECIMAL: name = "0DECIMAL"; break;
456 case FF_LINESNGL: name = "LINESNGL"; break;
459 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
461 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
472 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
473 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
475 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
476 t = SvEND(PL_formtarget);
479 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
480 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
482 sv_utf8_upgrade(PL_formtarget);
483 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
484 t = SvEND(PL_formtarget);
504 if (ckWARN(WARN_SYNTAX))
505 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
512 const char *s = item = SvPV_const(sv, len);
515 itemsize = sv_len_utf8(sv);
516 if (itemsize != (I32)len) {
518 if (itemsize > fieldsize) {
519 itemsize = fieldsize;
520 itembytes = itemsize;
521 sv_pos_u2b(sv, &itembytes, 0);
525 send = chophere = s + itembytes;
535 sv_pos_b2u(sv, &itemsize);
539 item_is_utf8 = FALSE;
540 if (itemsize > fieldsize)
541 itemsize = fieldsize;
542 send = chophere = s + itemsize;
556 const char *s = item = SvPV_const(sv, len);
559 itemsize = sv_len_utf8(sv);
560 if (itemsize != (I32)len) {
562 if (itemsize <= fieldsize) {
563 const char *send = chophere = s + itemsize;
576 itemsize = fieldsize;
577 itembytes = itemsize;
578 sv_pos_u2b(sv, &itembytes, 0);
579 send = chophere = s + itembytes;
580 while (s < send || (s == send && isSPACE(*s))) {
590 if (strchr(PL_chopset, *s))
595 itemsize = chophere - item;
596 sv_pos_b2u(sv, &itemsize);
602 item_is_utf8 = FALSE;
603 if (itemsize <= fieldsize) {
604 const char *const send = chophere = s + itemsize;
617 itemsize = fieldsize;
618 send = chophere = s + itemsize;
619 while (s < send || (s == send && isSPACE(*s))) {
629 if (strchr(PL_chopset, *s))
634 itemsize = chophere - item;
640 arg = fieldsize - itemsize;
649 arg = fieldsize - itemsize;
660 const char *s = item;
664 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
666 sv_utf8_upgrade(PL_formtarget);
667 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
668 t = SvEND(PL_formtarget);
672 if (UTF8_IS_CONTINUED(*s)) {
673 STRLEN skip = UTF8SKIP(s);
690 if ( !((*t++ = *s++) & ~31) )
696 if (targ_is_utf8 && !item_is_utf8) {
697 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
699 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
700 for (; t < SvEND(PL_formtarget); t++) {
713 int ch = *t++ = *s++;
716 if ( !((*t++ = *s++) & ~31) )
725 const char *s = chophere;
727 while (*s && isSPACE(*s))
743 const char *s = item = SvPV_const(sv, len);
745 if ((item_is_utf8 = DO_UTF8(sv)))
746 itemsize = sv_len_utf8(sv);
748 bool chopped = FALSE;
749 const char *const send = s + len;
751 chophere = s + itemsize;
767 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
769 SvUTF8_on(PL_formtarget);
771 SvCUR_set(sv, chophere - item);
772 sv_catsv(PL_formtarget, sv);
773 SvCUR_set(sv, itemsize);
775 sv_catsv(PL_formtarget, sv);
777 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
778 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
779 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
788 #if defined(USE_LONG_DOUBLE)
789 fmt = (arg & 256) ? "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl;
791 fmt = (arg & 256) ? "%#0*.*f" : "%0*.*f";
796 #if defined(USE_LONG_DOUBLE)
797 fmt = (arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl;
799 fmt = (arg & 256) ? "%#*.*f" : "%*.*f";
802 /* If the field is marked with ^ and the value is undefined,
804 if ((arg & 512) && !SvOK(sv)) {
812 /* overflow evidence */
813 if (num_overflow(value, fieldsize, arg)) {
819 /* Formats aren't yet marked for locales, so assume "yes". */
821 STORE_NUMERIC_STANDARD_SET_LOCAL();
822 sprintf(t, fmt, (int) fieldsize, (int) arg & 255, value);
823 RESTORE_NUMERIC_STANDARD();
830 while (t-- > linemark && *t == ' ') ;
838 if (arg) { /* repeat until fields exhausted? */
840 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
841 lines += FmLINES(PL_formtarget);
844 if (strnEQ(linemark, linemark - arg, arg))
845 DIE(aTHX_ "Runaway format");
848 SvUTF8_on(PL_formtarget);
849 FmLINES(PL_formtarget) = lines;
851 RETURNOP(cLISTOP->op_first);
862 const char *s = chophere;
863 const char *send = item + len;
865 while (*s && isSPACE(*s) && s < send)
870 arg = fieldsize - itemsize;
877 if (strnEQ(s1," ",3)) {
878 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
889 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
891 SvUTF8_on(PL_formtarget);
892 FmLINES(PL_formtarget) += lines;
904 if (PL_stack_base + *PL_markstack_ptr == SP) {
906 if (GIMME_V == G_SCALAR)
907 XPUSHs(sv_2mortal(newSViv(0)));
908 RETURNOP(PL_op->op_next->op_next);
910 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
911 pp_pushmark(); /* push dst */
912 pp_pushmark(); /* push src */
913 ENTER; /* enter outer scope */
916 if (PL_op->op_private & OPpGREP_LEX)
917 SAVESPTR(PAD_SVl(PL_op->op_targ));
920 ENTER; /* enter inner scope */
923 src = PL_stack_base[*PL_markstack_ptr];
925 if (PL_op->op_private & OPpGREP_LEX)
926 PAD_SVl(PL_op->op_targ) = src;
931 if (PL_op->op_type == OP_MAPSTART)
932 pp_pushmark(); /* push top */
933 return ((LOGOP*)PL_op->op_next)->op_other;
938 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
944 const I32 gimme = GIMME_V;
945 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
951 /* first, move source pointer to the next item in the source list */
952 ++PL_markstack_ptr[-1];
954 /* if there are new items, push them into the destination list */
955 if (items && gimme != G_VOID) {
956 /* might need to make room back there first */
957 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
958 /* XXX this implementation is very pessimal because the stack
959 * is repeatedly extended for every set of items. Is possible
960 * to do this without any stack extension or copying at all
961 * by maintaining a separate list over which the map iterates
962 * (like foreach does). --gsar */
964 /* everything in the stack after the destination list moves
965 * towards the end the stack by the amount of room needed */
966 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
968 /* items to shift up (accounting for the moved source pointer) */
969 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
971 /* This optimization is by Ben Tilly and it does
972 * things differently from what Sarathy (gsar)
973 * is describing. The downside of this optimization is
974 * that leaves "holes" (uninitialized and hopefully unused areas)
975 * to the Perl stack, but on the other hand this
976 * shouldn't be a problem. If Sarathy's idea gets
977 * implemented, this optimization should become
978 * irrelevant. --jhi */
980 shift = count; /* Avoid shifting too often --Ben Tilly */
985 PL_markstack_ptr[-1] += shift;
986 *PL_markstack_ptr += shift;
990 /* copy the new items down to the destination list */
991 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
992 if (gimme == G_ARRAY) {
994 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
997 /* scalar context: we don't care about which values map returns
998 * (we use undef here). And so we certainly don't want to do mortal
999 * copies of meaningless values. */
1000 while (items-- > 0) {
1002 *dst-- = &PL_sv_undef;
1006 LEAVE; /* exit inner scope */
1009 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1011 (void)POPMARK; /* pop top */
1012 LEAVE; /* exit outer scope */
1013 (void)POPMARK; /* pop src */
1014 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1015 (void)POPMARK; /* pop dst */
1016 SP = PL_stack_base + POPMARK; /* pop original mark */
1017 if (gimme == G_SCALAR) {
1018 if (PL_op->op_private & OPpGREP_LEX) {
1019 SV* sv = sv_newmortal();
1020 sv_setiv(sv, items);
1028 else if (gimme == G_ARRAY)
1035 ENTER; /* enter inner scope */
1038 /* set $_ to the new source item */
1039 src = PL_stack_base[PL_markstack_ptr[-1]];
1041 if (PL_op->op_private & OPpGREP_LEX)
1042 PAD_SVl(PL_op->op_targ) = src;
1046 RETURNOP(cLOGOP->op_other);
1054 if (GIMME == G_ARRAY)
1056 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1057 return cLOGOP->op_other;
1066 if (GIMME == G_ARRAY) {
1067 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1071 SV *targ = PAD_SV(PL_op->op_targ);
1074 if (PL_op->op_private & OPpFLIP_LINENUM) {
1075 if (GvIO(PL_last_in_gv)) {
1076 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1079 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1080 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1086 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1087 if (PL_op->op_flags & OPf_SPECIAL) {
1095 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1098 sv_setpvn(TARG, "", 0);
1104 /* This code tries to decide if "$left .. $right" should use the
1105 magical string increment, or if the range is numeric (we make
1106 an exception for .."0" [#18165]). AMS 20021031. */
1108 #define RANGE_IS_NUMERIC(left,right) ( \
1109 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1110 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1111 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1112 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1113 && (!SvOK(right) || looks_like_number(right))))
1119 if (GIMME == G_ARRAY) {
1125 if (SvGMAGICAL(left))
1127 if (SvGMAGICAL(right))
1130 if (RANGE_IS_NUMERIC(left,right)) {
1131 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1132 (SvOK(right) && SvNV(right) > IV_MAX))
1133 DIE(aTHX_ "Range iterator outside integer range");
1144 sv = sv_2mortal(newSViv(i++));
1149 SV *final = sv_mortalcopy(right);
1151 const char *tmps = SvPV(final, len);
1153 sv = sv_mortalcopy(left);
1154 SvPV_force_nolen(sv);
1155 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1157 if (strEQ(SvPVX_const(sv),tmps))
1159 sv = sv_2mortal(newSVsv(sv));
1166 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1170 if (PL_op->op_private & OPpFLIP_LINENUM) {
1171 if (GvIO(PL_last_in_gv)) {
1172 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1175 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1176 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1184 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1185 sv_catpv(targ, "E0");
1195 static const char * const context_name[] = {
1206 S_dopoptolabel(pTHX_ const char *label)
1210 for (i = cxstack_ix; i >= 0; i--) {
1211 register const PERL_CONTEXT *cx = &cxstack[i];
1212 switch (CxTYPE(cx)) {
1218 if (ckWARN(WARN_EXITING))
1219 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1220 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1221 if (CxTYPE(cx) == CXt_NULL)
1225 if (!cx->blk_loop.label ||
1226 strNE(label, cx->blk_loop.label) ) {
1227 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1228 (long)i, cx->blk_loop.label));
1231 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1239 Perl_dowantarray(pTHX)
1241 const I32 gimme = block_gimme();
1242 return (gimme == G_VOID) ? G_SCALAR : gimme;
1246 Perl_block_gimme(pTHX)
1248 const I32 cxix = dopoptosub(cxstack_ix);
1252 switch (cxstack[cxix].blk_gimme) {
1260 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1267 Perl_is_lvalue_sub(pTHX)
1269 const I32 cxix = dopoptosub(cxstack_ix);
1270 assert(cxix >= 0); /* We should only be called from inside subs */
1272 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1273 return cxstack[cxix].blk_sub.lval;
1279 S_dopoptosub(pTHX_ I32 startingblock)
1281 return dopoptosub_at(cxstack, startingblock);
1285 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1288 for (i = startingblock; i >= 0; i--) {
1289 register const PERL_CONTEXT *cx = &cxstk[i];
1290 switch (CxTYPE(cx)) {
1296 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1304 S_dopoptoeval(pTHX_ I32 startingblock)
1307 for (i = startingblock; i >= 0; i--) {
1308 register const PERL_CONTEXT *cx = &cxstack[i];
1309 switch (CxTYPE(cx)) {
1313 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1321 S_dopoptoloop(pTHX_ I32 startingblock)
1324 for (i = startingblock; i >= 0; i--) {
1325 register const PERL_CONTEXT *cx = &cxstack[i];
1326 switch (CxTYPE(cx)) {
1332 if (ckWARN(WARN_EXITING))
1333 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1334 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1335 if ((CxTYPE(cx)) == CXt_NULL)
1339 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1347 Perl_dounwind(pTHX_ I32 cxix)
1351 while (cxstack_ix > cxix) {
1353 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1354 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1355 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1356 /* Note: we don't need to restore the base context info till the end. */
1357 switch (CxTYPE(cx)) {
1360 continue; /* not break */
1382 Perl_qerror(pTHX_ SV *err)
1385 sv_catsv(ERRSV, err);
1387 sv_catsv(PL_errors, err);
1389 Perl_warn(aTHX_ "%"SVf, err);
1394 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1404 if (PL_in_eval & EVAL_KEEPERR) {
1405 static const char prefix[] = "\t(in cleanup) ";
1407 const char *e = Nullch;
1409 sv_setpvn(err,"",0);
1410 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1414 if (*e != *message || strNE(e,message))
1418 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1419 sv_catpvn(err, prefix, sizeof(prefix)-1);
1420 sv_catpvn(err, message, msglen);
1421 if (ckWARN(WARN_MISC)) {
1422 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1423 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1428 sv_setpvn(ERRSV, message, msglen);
1432 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1433 && PL_curstackinfo->si_prev)
1441 register PERL_CONTEXT *cx;
1443 if (cxix < cxstack_ix)
1446 POPBLOCK(cx,PL_curpm);
1447 if (CxTYPE(cx) != CXt_EVAL) {
1449 message = SvPVx(ERRSV, msglen);
1450 PerlIO_write(Perl_error_log, "panic: die ", 11);
1451 PerlIO_write(Perl_error_log, message, msglen);
1456 if (gimme == G_SCALAR)
1457 *++newsp = &PL_sv_undef;
1458 PL_stack_sp = newsp;
1462 /* LEAVE could clobber PL_curcop (see save_re_context())
1463 * XXX it might be better to find a way to avoid messing with
1464 * PL_curcop in save_re_context() instead, but this is a more
1465 * minimal fix --GSAR */
1466 PL_curcop = cx->blk_oldcop;
1468 if (optype == OP_REQUIRE) {
1469 const char* msg = SvPVx_nolen_const(ERRSV);
1470 SV *nsv = cx->blk_eval.old_namesv;
1471 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1473 DIE(aTHX_ "%sCompilation failed in require",
1474 *msg ? msg : "Unknown error\n");
1476 assert(CxTYPE(cx) == CXt_EVAL);
1477 return cx->blk_eval.retop;
1481 message = SvPVx(ERRSV, msglen);
1483 write_to_stderr(message, msglen);
1492 if (SvTRUE(left) != SvTRUE(right))
1504 RETURNOP(cLOGOP->op_other);
1513 RETURNOP(cLOGOP->op_other);
1522 if (!sv || !SvANY(sv)) {
1523 RETURNOP(cLOGOP->op_other);
1526 switch (SvTYPE(sv)) {
1528 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1532 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1536 if (CvROOT(sv) || CvXSUB(sv))
1546 RETURNOP(cLOGOP->op_other);
1552 register I32 cxix = dopoptosub(cxstack_ix);
1553 register PERL_CONTEXT *cx;
1554 register PERL_CONTEXT *ccstack = cxstack;
1555 PERL_SI *top_si = PL_curstackinfo;
1557 const char *stashname;
1564 /* we may be in a higher stacklevel, so dig down deeper */
1565 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1566 top_si = top_si->si_prev;
1567 ccstack = top_si->si_cxstack;
1568 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1571 if (GIMME != G_ARRAY) {
1577 /* caller() should not report the automatic calls to &DB::sub */
1578 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1579 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1583 cxix = dopoptosub_at(ccstack, cxix - 1);
1586 cx = &ccstack[cxix];
1587 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1588 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1589 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1590 field below is defined for any cx. */
1591 /* caller() should not report the automatic calls to &DB::sub */
1592 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1593 cx = &ccstack[dbcxix];
1596 stashname = CopSTASHPV(cx->blk_oldcop);
1597 if (GIMME != G_ARRAY) {
1600 PUSHs(&PL_sv_undef);
1603 sv_setpv(TARG, stashname);
1612 PUSHs(&PL_sv_undef);
1614 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1615 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1616 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1619 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1620 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1621 /* So is ccstack[dbcxix]. */
1623 SV * const sv = NEWSV(49, 0);
1624 gv_efullname3(sv, cvgv, Nullch);
1625 PUSHs(sv_2mortal(sv));
1626 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1629 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1630 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1634 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1635 PUSHs(sv_2mortal(newSViv(0)));
1637 gimme = (I32)cx->blk_gimme;
1638 if (gimme == G_VOID)
1639 PUSHs(&PL_sv_undef);
1641 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1642 if (CxTYPE(cx) == CXt_EVAL) {
1644 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1645 PUSHs(cx->blk_eval.cur_text);
1649 else if (cx->blk_eval.old_namesv) {
1650 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1653 /* eval BLOCK (try blocks have old_namesv == 0) */
1655 PUSHs(&PL_sv_undef);
1656 PUSHs(&PL_sv_undef);
1660 PUSHs(&PL_sv_undef);
1661 PUSHs(&PL_sv_undef);
1663 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1664 && CopSTASH_eq(PL_curcop, PL_debstash))
1666 AV * const ary = cx->blk_sub.argarray;
1667 const int off = AvARRAY(ary) - AvALLOC(ary);
1671 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1674 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1677 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1678 av_extend(PL_dbargs, AvFILLp(ary) + off);
1679 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1680 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1682 /* XXX only hints propagated via op_private are currently
1683 * visible (others are not easily accessible, since they
1684 * use the global PL_hints) */
1685 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1686 HINT_PRIVATE_MASK)));
1689 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1691 if (old_warnings == pWARN_NONE ||
1692 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1693 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1694 else if (old_warnings == pWARN_ALL ||
1695 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1696 /* Get the bit mask for $warnings::Bits{all}, because
1697 * it could have been extended by warnings::register */
1699 HV *bits = get_hv("warnings::Bits", FALSE);
1700 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1701 mask = newSVsv(*bits_all);
1704 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1708 mask = newSVsv(old_warnings);
1709 PUSHs(sv_2mortal(mask));
1723 sv_reset(tmps, CopSTASH(PL_curcop));
1733 /* like pp_nextstate, but used instead when the debugger is active */
1738 PL_curcop = (COP*)PL_op;
1739 TAINT_NOT; /* Each statement is presumed innocent */
1740 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1743 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1744 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1748 register PERL_CONTEXT *cx;
1749 const I32 gimme = G_ARRAY;
1756 DIE(aTHX_ "No DB::DB routine defined");
1758 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1759 /* don't do recursive DB::DB call */
1771 PUSHBLOCK(cx, CXt_SUB, SP);
1773 cx->blk_sub.retop = PL_op->op_next;
1775 PAD_SET_CUR(CvPADLIST(cv),1);
1776 RETURNOP(CvSTART(cv));
1790 register PERL_CONTEXT *cx;
1791 const I32 gimme = GIMME_V;
1793 U32 cxtype = CXt_LOOP;
1801 if (PL_op->op_targ) {
1802 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1803 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1804 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1805 SVs_PADSTALE, SVs_PADSTALE);
1807 #ifndef USE_ITHREADS
1808 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1811 SAVEPADSV(PL_op->op_targ);
1812 iterdata = INT2PTR(void*, PL_op->op_targ);
1813 cxtype |= CXp_PADVAR;
1818 svp = &GvSV(gv); /* symbol table variable */
1819 SAVEGENERICSV(*svp);
1822 iterdata = (void*)gv;
1828 PUSHBLOCK(cx, cxtype, SP);
1830 PUSHLOOP(cx, iterdata, MARK);
1832 PUSHLOOP(cx, svp, MARK);
1834 if (PL_op->op_flags & OPf_STACKED) {
1835 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1836 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1838 SV *right = (SV*)cx->blk_loop.iterary;
1839 if (RANGE_IS_NUMERIC(sv,right)) {
1840 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1841 (SvOK(right) && SvNV(right) >= IV_MAX))
1842 DIE(aTHX_ "Range iterator outside integer range");
1843 cx->blk_loop.iterix = SvIV(sv);
1844 cx->blk_loop.itermax = SvIV(right);
1847 cx->blk_loop.iterlval = newSVsv(sv);
1848 (void) SvPV_force_nolen(cx->blk_loop.iterlval);
1849 (void) SvPV_nolen_const(right);
1852 else if (PL_op->op_private & OPpITER_REVERSED) {
1853 cx->blk_loop.itermax = -1;
1854 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1859 cx->blk_loop.iterary = PL_curstack;
1860 AvFILLp(PL_curstack) = SP - PL_stack_base;
1861 if (PL_op->op_private & OPpITER_REVERSED) {
1862 cx->blk_loop.itermax = MARK - PL_stack_base;
1863 cx->blk_loop.iterix = cx->blk_oldsp;
1866 cx->blk_loop.iterix = MARK - PL_stack_base;
1876 register PERL_CONTEXT *cx;
1877 const I32 gimme = GIMME_V;
1883 PUSHBLOCK(cx, CXt_LOOP, SP);
1884 PUSHLOOP(cx, 0, SP);
1892 register PERL_CONTEXT *cx;
1899 assert(CxTYPE(cx) == CXt_LOOP);
1901 newsp = PL_stack_base + cx->blk_loop.resetsp;
1904 if (gimme == G_VOID)
1906 else if (gimme == G_SCALAR) {
1908 *++newsp = sv_mortalcopy(*SP);
1910 *++newsp = &PL_sv_undef;
1914 *++newsp = sv_mortalcopy(*++mark);
1915 TAINT_NOT; /* Each item is independent */
1921 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1922 PL_curpm = newpm; /* ... and pop $1 et al */
1934 register PERL_CONTEXT *cx;
1935 bool popsub2 = FALSE;
1936 bool clear_errsv = FALSE;
1944 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1945 if (cxstack_ix == PL_sortcxix
1946 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1948 if (cxstack_ix > PL_sortcxix)
1949 dounwind(PL_sortcxix);
1950 AvARRAY(PL_curstack)[1] = *SP;
1951 PL_stack_sp = PL_stack_base + 1;
1956 cxix = dopoptosub(cxstack_ix);
1958 DIE(aTHX_ "Can't return outside a subroutine");
1959 if (cxix < cxstack_ix)
1963 switch (CxTYPE(cx)) {
1966 retop = cx->blk_sub.retop;
1967 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1970 if (!(PL_in_eval & EVAL_KEEPERR))
1973 retop = cx->blk_eval.retop;
1977 if (optype == OP_REQUIRE &&
1978 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1980 /* Unassume the success we assumed earlier. */
1981 SV *nsv = cx->blk_eval.old_namesv;
1982 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
1983 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1988 retop = cx->blk_sub.retop;
1991 DIE(aTHX_ "panic: return");
1995 if (gimme == G_SCALAR) {
1998 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2000 *++newsp = SvREFCNT_inc(*SP);
2005 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2007 *++newsp = sv_mortalcopy(sv);
2012 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2015 *++newsp = sv_mortalcopy(*SP);
2018 *++newsp = &PL_sv_undef;
2020 else if (gimme == G_ARRAY) {
2021 while (++MARK <= SP) {
2022 *++newsp = (popsub2 && SvTEMP(*MARK))
2023 ? *MARK : sv_mortalcopy(*MARK);
2024 TAINT_NOT; /* Each item is independent */
2027 PL_stack_sp = newsp;
2030 /* Stack values are safe: */
2033 POPSUB(cx,sv); /* release CV and @_ ... */
2037 PL_curpm = newpm; /* ... and pop $1 et al */
2041 sv_setpvn(ERRSV,"",0);
2049 register PERL_CONTEXT *cx;
2059 if (PL_op->op_flags & OPf_SPECIAL) {
2060 cxix = dopoptoloop(cxstack_ix);
2062 DIE(aTHX_ "Can't \"last\" outside a loop block");
2065 cxix = dopoptolabel(cPVOP->op_pv);
2067 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2069 if (cxix < cxstack_ix)
2073 cxstack_ix++; /* temporarily protect top context */
2075 switch (CxTYPE(cx)) {
2078 newsp = PL_stack_base + cx->blk_loop.resetsp;
2079 nextop = cx->blk_loop.last_op->op_next;
2083 nextop = cx->blk_sub.retop;
2087 nextop = cx->blk_eval.retop;
2091 nextop = cx->blk_sub.retop;
2094 DIE(aTHX_ "panic: last");
2098 if (gimme == G_SCALAR) {
2100 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2101 ? *SP : sv_mortalcopy(*SP);
2103 *++newsp = &PL_sv_undef;
2105 else if (gimme == G_ARRAY) {
2106 while (++MARK <= SP) {
2107 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2108 ? *MARK : sv_mortalcopy(*MARK);
2109 TAINT_NOT; /* Each item is independent */
2117 /* Stack values are safe: */
2120 POPLOOP(cx); /* release loop vars ... */
2124 POPSUB(cx,sv); /* release CV and @_ ... */
2127 PL_curpm = newpm; /* ... and pop $1 et al */
2137 register PERL_CONTEXT *cx;
2140 if (PL_op->op_flags & OPf_SPECIAL) {
2141 cxix = dopoptoloop(cxstack_ix);
2143 DIE(aTHX_ "Can't \"next\" outside a loop block");
2146 cxix = dopoptolabel(cPVOP->op_pv);
2148 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2150 if (cxix < cxstack_ix)
2153 /* clear off anything above the scope we're re-entering, but
2154 * save the rest until after a possible continue block */
2155 inner = PL_scopestack_ix;
2157 if (PL_scopestack_ix < inner)
2158 leave_scope(PL_scopestack[PL_scopestack_ix]);
2159 PL_curcop = cx->blk_oldcop;
2160 return cx->blk_loop.next_op;
2167 register PERL_CONTEXT *cx;
2171 if (PL_op->op_flags & OPf_SPECIAL) {
2172 cxix = dopoptoloop(cxstack_ix);
2174 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2177 cxix = dopoptolabel(cPVOP->op_pv);
2179 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2181 if (cxix < cxstack_ix)
2184 redo_op = cxstack[cxix].blk_loop.redo_op;
2185 if (redo_op->op_type == OP_ENTER) {
2186 /* pop one less context to avoid $x being freed in while (my $x..) */
2188 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2189 redo_op = redo_op->op_next;
2193 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2194 LEAVE_SCOPE(oldsave);
2196 PL_curcop = cx->blk_oldcop;
2201 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2205 static const char too_deep[] = "Target of goto is too deeply nested";
2208 Perl_croak(aTHX_ too_deep);
2209 if (o->op_type == OP_LEAVE ||
2210 o->op_type == OP_SCOPE ||
2211 o->op_type == OP_LEAVELOOP ||
2212 o->op_type == OP_LEAVESUB ||
2213 o->op_type == OP_LEAVETRY)
2215 *ops++ = cUNOPo->op_first;
2217 Perl_croak(aTHX_ too_deep);
2220 if (o->op_flags & OPf_KIDS) {
2221 /* First try all the kids at this level, since that's likeliest. */
2222 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2223 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2224 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2227 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2228 if (kid == PL_lastgotoprobe)
2230 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2233 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2234 ops[-1]->op_type == OP_DBSTATE)
2239 if ((o = dofindlabel(kid, label, ops, oplimit)))
2258 register PERL_CONTEXT *cx;
2259 #define GOTO_DEPTH 64
2260 OP *enterops[GOTO_DEPTH];
2261 const char *label = 0;
2262 const bool do_dump = (PL_op->op_type == OP_DUMP);
2263 static const char must_have_label[] = "goto must have label";
2265 if (PL_op->op_flags & OPf_STACKED) {
2268 /* This egregious kludge implements goto &subroutine */
2269 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2271 register PERL_CONTEXT *cx;
2272 CV* cv = (CV*)SvRV(sv);
2279 if (!CvROOT(cv) && !CvXSUB(cv)) {
2280 const GV * const gv = CvGV(cv);
2284 /* autoloaded stub? */
2285 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2287 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2288 GvNAMELEN(gv), FALSE);
2289 if (autogv && (cv = GvCV(autogv)))
2291 tmpstr = sv_newmortal();
2292 gv_efullname3(tmpstr, gv, Nullch);
2293 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2295 DIE(aTHX_ "Goto undefined subroutine");
2298 /* First do some returnish stuff. */
2299 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2301 cxix = dopoptosub(cxstack_ix);
2303 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2304 if (cxix < cxstack_ix)
2308 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2309 if (CxTYPE(cx) == CXt_EVAL) {
2311 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2313 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2315 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2316 /* put @_ back onto stack */
2317 AV* av = cx->blk_sub.argarray;
2319 items = AvFILLp(av) + 1;
2320 EXTEND(SP, items+1); /* @_ could have been extended. */
2321 Copy(AvARRAY(av), SP + 1, items, SV*);
2322 SvREFCNT_dec(GvAV(PL_defgv));
2323 GvAV(PL_defgv) = cx->blk_sub.savearray;
2325 /* abandon @_ if it got reified */
2330 av_extend(av, items-1);
2332 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2335 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2337 av = GvAV(PL_defgv);
2338 items = AvFILLp(av) + 1;
2339 EXTEND(SP, items+1); /* @_ could have been extended. */
2340 Copy(AvARRAY(av), SP + 1, items, SV*);
2344 if (CxTYPE(cx) == CXt_SUB &&
2345 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2346 SvREFCNT_dec(cx->blk_sub.cv);
2347 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2348 LEAVE_SCOPE(oldsave);
2350 /* Now do some callish stuff. */
2352 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2354 OP* retop = cx->blk_sub.retop;
2357 for (index=0; index<items; index++)
2358 sv_2mortal(SP[-index]);
2360 #ifdef PERL_XSUB_OLDSTYLE
2361 if (CvOLDSTYLE(cv)) {
2362 I32 (*fp3)(int,int,int);
2367 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2368 items = (*fp3)(CvXSUBANY(cv).any_i32,
2369 mark - PL_stack_base + 1,
2371 SP = PL_stack_base + items;
2374 #endif /* PERL_XSUB_OLDSTYLE */
2379 /* XS subs don't have a CxSUB, so pop it */
2380 POPBLOCK(cx, PL_curpm);
2381 /* Push a mark for the start of arglist */
2384 (void)(*CvXSUB(cv))(aTHX_ cv);
2390 AV* padlist = CvPADLIST(cv);
2391 if (CxTYPE(cx) == CXt_EVAL) {
2392 PL_in_eval = cx->blk_eval.old_in_eval;
2393 PL_eval_root = cx->blk_eval.old_eval_root;
2394 cx->cx_type = CXt_SUB;
2395 cx->blk_sub.hasargs = 0;
2397 cx->blk_sub.cv = cv;
2398 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2401 if (CvDEPTH(cv) < 2)
2402 (void)SvREFCNT_inc(cv);
2404 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2405 sub_crush_depth(cv);
2406 pad_push(padlist, CvDEPTH(cv));
2408 PAD_SET_CUR(padlist, CvDEPTH(cv));
2409 if (cx->blk_sub.hasargs)
2411 AV* av = (AV*)PAD_SVl(0);
2414 cx->blk_sub.savearray = GvAV(PL_defgv);
2415 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2416 CX_CURPAD_SAVE(cx->blk_sub);
2417 cx->blk_sub.argarray = av;
2419 if (items >= AvMAX(av) + 1) {
2421 if (AvARRAY(av) != ary) {
2422 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2423 SvPV_set(av, (char*)ary);
2425 if (items >= AvMAX(av) + 1) {
2426 AvMAX(av) = items - 1;
2427 Renew(ary,items+1,SV*);
2429 SvPV_set(av, (char*)ary);
2433 Copy(mark,AvARRAY(av),items,SV*);
2434 AvFILLp(av) = items - 1;
2435 assert(!AvREAL(av));
2437 /* transfer 'ownership' of refcnts to new @_ */
2447 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2449 * We do not care about using sv to call CV;
2450 * it's for informational purposes only.
2452 SV *sv = GvSV(PL_DBsub);
2456 if (PERLDB_SUB_NN) {
2457 int type = SvTYPE(sv);
2458 if (type < SVt_PVIV && type != SVt_IV)
2459 sv_upgrade(sv, SVt_PVIV);
2461 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2463 gv_efullname3(sv, CvGV(cv), Nullch);
2466 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2467 PUSHMARK( PL_stack_sp );
2468 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2472 RETURNOP(CvSTART(cv));
2476 label = SvPV_nolen_const(sv);
2477 if (!(do_dump || *label))
2478 DIE(aTHX_ must_have_label);
2481 else if (PL_op->op_flags & OPf_SPECIAL) {
2483 DIE(aTHX_ must_have_label);
2486 label = cPVOP->op_pv;
2488 if (label && *label) {
2490 bool leaving_eval = FALSE;
2491 bool in_block = FALSE;
2492 PERL_CONTEXT *last_eval_cx = 0;
2496 PL_lastgotoprobe = 0;
2498 for (ix = cxstack_ix; ix >= 0; ix--) {
2500 switch (CxTYPE(cx)) {
2502 leaving_eval = TRUE;
2503 if (!CxTRYBLOCK(cx)) {
2504 gotoprobe = (last_eval_cx ?
2505 last_eval_cx->blk_eval.old_eval_root :
2510 /* else fall through */
2512 gotoprobe = cx->blk_oldcop->op_sibling;
2518 gotoprobe = cx->blk_oldcop->op_sibling;
2521 gotoprobe = PL_main_root;
2524 if (CvDEPTH(cx->blk_sub.cv)) {
2525 gotoprobe = CvROOT(cx->blk_sub.cv);
2531 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2534 DIE(aTHX_ "panic: goto");
2535 gotoprobe = PL_main_root;
2539 retop = dofindlabel(gotoprobe, label,
2540 enterops, enterops + GOTO_DEPTH);
2544 PL_lastgotoprobe = gotoprobe;
2547 DIE(aTHX_ "Can't find label %s", label);
2549 /* if we're leaving an eval, check before we pop any frames
2550 that we're not going to punt, otherwise the error
2553 if (leaving_eval && *enterops && enterops[1]) {
2555 for (i = 1; enterops[i]; i++)
2556 if (enterops[i]->op_type == OP_ENTERITER)
2557 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2560 /* pop unwanted frames */
2562 if (ix < cxstack_ix) {
2569 oldsave = PL_scopestack[PL_scopestack_ix];
2570 LEAVE_SCOPE(oldsave);
2573 /* push wanted frames */
2575 if (*enterops && enterops[1]) {
2577 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2578 for (; enterops[ix]; ix++) {
2579 PL_op = enterops[ix];
2580 /* Eventually we may want to stack the needed arguments
2581 * for each op. For now, we punt on the hard ones. */
2582 if (PL_op->op_type == OP_ENTERITER)
2583 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2584 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2592 if (!retop) retop = PL_main_start;
2594 PL_restartop = retop;
2595 PL_do_undump = TRUE;
2599 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2600 PL_do_undump = FALSE;
2616 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2618 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2621 PL_exit_flags |= PERL_EXIT_EXPECTED;
2623 PUSHs(&PL_sv_undef);
2631 const NV value = SvNVx(GvSV(cCOP->cop_gv));
2632 register I32 match = I_32(value);
2635 if (((NV)match) > value)
2636 --match; /* was fractional--truncate other way */
2638 match -= cCOP->uop.scop.scop_offset;
2641 else if (match > cCOP->uop.scop.scop_max)
2642 match = cCOP->uop.scop.scop_max;
2643 PL_op = cCOP->uop.scop.scop_next[match];
2653 PL_op = PL_op->op_next; /* can't assume anything */
2655 match = *(SvPVx_nolen_const(GvSV(cCOP->cop_gv))) & 255;
2656 match -= cCOP->uop.scop.scop_offset;
2659 else if (match > cCOP->uop.scop.scop_max)
2660 match = cCOP->uop.scop.scop_max;
2661 PL_op = cCOP->uop.scop.scop_next[match];
2670 S_save_lines(pTHX_ AV *array, SV *sv)
2672 const char *s = SvPVX_const(sv);
2673 const char *send = SvPVX_const(sv) + SvCUR(sv);
2676 while (s && s < send) {
2678 SV *tmpstr = NEWSV(85,0);
2680 sv_upgrade(tmpstr, SVt_PVMG);
2681 t = strchr(s, '\n');
2687 sv_setpvn(tmpstr, s, t - s);
2688 av_store(array, line++, tmpstr);
2694 S_docatch_body(pTHX)
2701 S_docatch(pTHX_ OP *o)
2704 OP * const oldop = PL_op;
2708 assert(CATCH_GET == TRUE);
2715 assert(cxstack_ix >= 0);
2716 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2717 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2722 /* die caught by an inner eval - continue inner loop */
2724 /* NB XXX we rely on the old popped CxEVAL still being at the top
2725 * of the stack; the way die_where() currently works, this
2726 * assumption is valid. In theory The cur_top_env value should be
2727 * returned in another global, the way retop (aka PL_restartop)
2729 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2732 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2734 PL_op = PL_restartop;
2751 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2752 /* sv Text to convert to OP tree. */
2753 /* startop op_free() this to undo. */
2754 /* code Short string id of the caller. */
2756 dVAR; dSP; /* Make POPBLOCK work. */
2759 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2763 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2764 char *tmpbuf = tbuf;
2767 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2772 /* switch to eval mode */
2774 if (IN_PERL_COMPILETIME) {
2775 SAVECOPSTASH_FREE(&PL_compiling);
2776 CopSTASH_set(&PL_compiling, PL_curstash);
2778 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2779 SV *sv = sv_newmortal();
2780 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2781 code, (unsigned long)++PL_evalseq,
2782 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2786 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2787 SAVECOPFILE_FREE(&PL_compiling);
2788 CopFILE_set(&PL_compiling, tmpbuf+2);
2789 SAVECOPLINE(&PL_compiling);
2790 CopLINE_set(&PL_compiling, 1);
2791 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2792 deleting the eval's FILEGV from the stash before gv_check() runs
2793 (i.e. before run-time proper). To work around the coredump that
2794 ensues, we always turn GvMULTI_on for any globals that were
2795 introduced within evals. See force_ident(). GSAR 96-10-12 */
2796 safestr = savepv(tmpbuf);
2797 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2799 #ifdef OP_IN_REGISTER
2805 /* we get here either during compilation, or via pp_regcomp at runtime */
2806 runtime = IN_PERL_RUNTIME;
2808 runcv = find_runcv(NULL);
2811 PL_op->op_type = OP_ENTEREVAL;
2812 PL_op->op_flags = 0; /* Avoid uninit warning. */
2813 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2814 PUSHEVAL(cx, 0, Nullgv);
2817 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2819 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2820 POPBLOCK(cx,PL_curpm);
2823 (*startop)->op_type = OP_NULL;
2824 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2826 /* XXX DAPM do this properly one year */
2827 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2829 if (IN_PERL_COMPILETIME)
2830 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2831 #ifdef OP_IN_REGISTER
2839 =for apidoc find_runcv
2841 Locate the CV corresponding to the currently executing sub or eval.
2842 If db_seqp is non_null, skip CVs that are in the DB package and populate
2843 *db_seqp with the cop sequence number at the point that the DB:: code was
2844 entered. (allows debuggers to eval in the scope of the breakpoint rather
2845 than in in the scope of the debugger itself).
2851 Perl_find_runcv(pTHX_ U32 *db_seqp)
2856 *db_seqp = PL_curcop->cop_seq;
2857 for (si = PL_curstackinfo; si; si = si->si_prev) {
2859 for (ix = si->si_cxix; ix >= 0; ix--) {
2860 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2861 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2862 CV *cv = cx->blk_sub.cv;
2863 /* skip DB:: code */
2864 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2865 *db_seqp = cx->blk_oldcop->cop_seq;
2870 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2878 /* Compile a require/do, an eval '', or a /(?{...})/.
2879 * In the last case, startop is non-null, and contains the address of
2880 * a pointer that should be set to the just-compiled code.
2881 * outside is the lexically enclosing CV (if any) that invoked us.
2884 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2886 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2891 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2892 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2897 SAVESPTR(PL_compcv);
2898 PL_compcv = (CV*)NEWSV(1104,0);
2899 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2900 CvEVAL_on(PL_compcv);
2901 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2902 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2904 CvOUTSIDE_SEQ(PL_compcv) = seq;
2905 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2907 /* set up a scratch pad */
2909 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2912 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2914 /* make sure we compile in the right package */
2916 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2917 SAVESPTR(PL_curstash);
2918 PL_curstash = CopSTASH(PL_curcop);
2920 SAVESPTR(PL_beginav);
2921 PL_beginav = newAV();
2922 SAVEFREESV(PL_beginav);
2923 SAVEI32(PL_error_count);
2925 /* try to compile it */
2927 PL_eval_root = Nullop;
2929 PL_curcop = &PL_compiling;
2930 PL_curcop->cop_arybase = 0;
2931 if (saveop && saveop->op_flags & OPf_SPECIAL)
2932 PL_in_eval |= EVAL_KEEPERR;
2934 sv_setpvn(ERRSV,"",0);
2935 if (yyparse() || PL_error_count || !PL_eval_root) {
2936 SV **newsp; /* Used by POPBLOCK. */
2937 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2938 I32 optype = 0; /* Might be reset by POPEVAL. */
2942 op_free(PL_eval_root);
2943 PL_eval_root = Nullop;
2945 SP = PL_stack_base + POPMARK; /* pop original mark */
2947 POPBLOCK(cx,PL_curpm);
2952 if (optype == OP_REQUIRE) {
2953 const char* const msg = SvPVx_nolen_const(ERRSV);
2954 const SV * const nsv = cx->blk_eval.old_namesv;
2955 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2957 DIE(aTHX_ "%sCompilation failed in require",
2958 *msg ? msg : "Unknown error\n");
2961 const char* msg = SvPVx_nolen_const(ERRSV);
2963 POPBLOCK(cx,PL_curpm);
2965 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2966 (*msg ? msg : "Unknown error\n"));
2969 const char* msg = SvPVx_nolen_const(ERRSV);
2971 sv_setpv(ERRSV, "Compilation error");
2976 CopLINE_set(&PL_compiling, 0);
2978 *startop = PL_eval_root;
2980 SAVEFREEOP(PL_eval_root);
2982 /* Set the context for this new optree.
2983 * If the last op is an OP_REQUIRE, force scalar context.
2984 * Otherwise, propagate the context from the eval(). */
2985 if (PL_eval_root->op_type == OP_LEAVEEVAL
2986 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2987 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2989 scalar(PL_eval_root);
2990 else if (gimme & G_VOID)
2991 scalarvoid(PL_eval_root);
2992 else if (gimme & G_ARRAY)
2995 scalar(PL_eval_root);
2997 DEBUG_x(dump_eval());
2999 /* Register with debugger: */
3000 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3001 CV *cv = get_cv("DB::postponed", FALSE);
3005 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3007 call_sv((SV*)cv, G_DISCARD);
3011 /* compiled okay, so do it */
3013 CvDEPTH(PL_compcv) = 1;
3014 SP = PL_stack_base + POPMARK; /* pop original mark */
3015 PL_op = saveop; /* The caller may need it. */
3016 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
3018 RETURNOP(PL_eval_start);
3022 S_doopen_pm(pTHX_ const char *name, const char *mode)
3024 #ifndef PERL_DISABLE_PMC
3025 const STRLEN namelen = strlen(name);
3028 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3029 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3030 const char * const pmc = SvPV_nolen(pmcsv);
3033 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3034 fp = PerlIO_open(name, mode);
3037 if (PerlLIO_stat(name, &pmstat) < 0 ||
3038 pmstat.st_mtime < pmcstat.st_mtime)
3040 fp = PerlIO_open(pmc, mode);
3043 fp = PerlIO_open(name, mode);
3046 SvREFCNT_dec(pmcsv);
3049 fp = PerlIO_open(name, mode);
3053 return PerlIO_open(name, mode);
3054 #endif /* !PERL_DISABLE_PMC */
3060 register PERL_CONTEXT *cx;
3064 const char *tryname = Nullch;
3065 SV *namesv = Nullsv;
3067 const I32 gimme = GIMME_V;
3068 PerlIO *tryrsfp = 0;
3069 int filter_has_file = 0;
3070 GV *filter_child_proc = 0;
3071 SV *filter_state = 0;
3078 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3079 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3080 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3081 "v-string in use/require non-portable");
3083 sv = new_version(sv);
3084 if (!sv_derived_from(PL_patchlevel, "version"))
3085 (void *)upg_version(PL_patchlevel);
3086 if ( vcmp(sv,PL_patchlevel) > 0 )
3087 DIE(aTHX_ "Perl v%"SVf" required--this is only v%"SVf", stopped",
3088 vstringify(sv), vstringify(PL_patchlevel));
3092 name = SvPV_const(sv, len);
3093 if (!(name && len > 0 && *name))
3094 DIE(aTHX_ "Null filename used");
3095 TAINT_PROPER("require");
3096 if (PL_op->op_type == OP_REQUIRE &&
3097 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3098 if (*svp != &PL_sv_undef)
3101 DIE(aTHX_ "Compilation failed in require");
3104 /* prepare to compile file */
3106 if (path_is_absolute(name)) {
3108 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3110 #ifdef MACOS_TRADITIONAL
3114 MacPerl_CanonDir(name, newname, 1);
3115 if (path_is_absolute(newname)) {
3117 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3122 AV *ar = GvAVn(PL_incgv);
3126 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3129 namesv = NEWSV(806, 0);
3130 for (i = 0; i <= AvFILL(ar); i++) {
3131 SV *dirsv = *av_fetch(ar, i, TRUE);
3137 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3138 && !sv_isobject(loader))
3140 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3143 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3144 PTR2UV(SvRV(dirsv)), name);
3145 tryname = SvPVX(namesv);
3156 if (sv_isobject(loader))
3157 count = call_method("INC", G_ARRAY);
3159 count = call_sv(loader, G_ARRAY);
3169 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3173 if (SvTYPE(arg) == SVt_PVGV) {
3174 IO *io = GvIO((GV *)arg);
3179 tryrsfp = IoIFP(io);
3180 if (IoTYPE(io) == IoTYPE_PIPE) {
3181 /* reading from a child process doesn't
3182 nest -- when returning from reading
3183 the inner module, the outer one is
3184 unreadable (closed?) I've tried to
3185 save the gv to manage the lifespan of
3186 the pipe, but this didn't help. XXX */
3187 filter_child_proc = (GV *)arg;
3188 (void)SvREFCNT_inc(filter_child_proc);
3191 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3192 PerlIO_close(IoOFP(io));
3204 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3206 (void)SvREFCNT_inc(filter_sub);
3209 filter_state = SP[i];
3210 (void)SvREFCNT_inc(filter_state);
3214 tryrsfp = PerlIO_open("/dev/null",
3230 filter_has_file = 0;
3231 if (filter_child_proc) {
3232 SvREFCNT_dec(filter_child_proc);
3233 filter_child_proc = 0;
3236 SvREFCNT_dec(filter_state);
3240 SvREFCNT_dec(filter_sub);
3245 if (!path_is_absolute(name)
3246 #ifdef MACOS_TRADITIONAL
3247 /* We consider paths of the form :a:b ambiguous and interpret them first
3248 as global then as local
3250 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3253 const char *dir = SvPVx_nolen_const(dirsv);
3254 #ifdef MACOS_TRADITIONAL
3258 MacPerl_CanonDir(name, buf2, 1);
3259 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3263 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3265 sv_setpv(namesv, unixdir);
3266 sv_catpv(namesv, unixname);
3269 if (PL_origfilename[0] &&
3270 PL_origfilename[1] == ':' &&
3271 !(dir[0] && dir[1] == ':'))
3272 Perl_sv_setpvf(aTHX_ namesv,
3277 Perl_sv_setpvf(aTHX_ namesv,
3281 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3285 TAINT_PROPER("require");
3286 tryname = SvPVX(namesv);
3287 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3289 if (tryname[0] == '.' && tryname[1] == '/')
3298 SAVECOPFILE_FREE(&PL_compiling);
3299 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3300 SvREFCNT_dec(namesv);
3302 if (PL_op->op_type == OP_REQUIRE) {
3303 const char *msgstr = name;
3304 if (namesv) { /* did we lookup @INC? */
3305 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3306 SV *dirmsgsv = NEWSV(0, 0);
3307 AV *ar = GvAVn(PL_incgv);
3309 sv_catpvn(msg, " in @INC", 8);
3310 if (instr(SvPVX_const(msg), ".h "))
3311 sv_catpv(msg, " (change .h to .ph maybe?)");
3312 if (instr(SvPVX_const(msg), ".ph "))
3313 sv_catpv(msg, " (did you run h2ph?)");
3314 sv_catpv(msg, " (@INC contains:");
3315 for (i = 0; i <= AvFILL(ar); i++) {
3316 const char *dir = SvPVx_nolen_const(*av_fetch(ar, i, TRUE));
3317 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3318 sv_catsv(msg, dirmsgsv);
3320 sv_catpvn(msg, ")", 1);
3321 SvREFCNT_dec(dirmsgsv);
3322 msgstr = SvPV_nolen(msg);
3324 DIE(aTHX_ "Can't locate %s", msgstr);
3330 SETERRNO(0, SS_NORMAL);
3332 /* Assume success here to prevent recursive requirement. */
3334 /* Check whether a hook in @INC has already filled %INC */
3335 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3336 (void)hv_store(GvHVn(PL_incgv), name, len,
3337 (hook_sv ? SvREFCNT_inc(hook_sv)
3338 : newSVpv(CopFILE(&PL_compiling), 0)),
3344 lex_start(sv_2mortal(newSVpvn("",0)));
3345 SAVEGENERICSV(PL_rsfp_filters);
3346 PL_rsfp_filters = Nullav;
3351 SAVESPTR(PL_compiling.cop_warnings);
3352 if (PL_dowarn & G_WARN_ALL_ON)
3353 PL_compiling.cop_warnings = pWARN_ALL ;
3354 else if (PL_dowarn & G_WARN_ALL_OFF)
3355 PL_compiling.cop_warnings = pWARN_NONE ;
3356 else if (PL_taint_warn)
3357 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3359 PL_compiling.cop_warnings = pWARN_STD ;
3360 SAVESPTR(PL_compiling.cop_io);
3361 PL_compiling.cop_io = Nullsv;
3363 if (filter_sub || filter_child_proc) {
3364 SV *datasv = filter_add(run_user_filter, Nullsv);
3365 IoLINES(datasv) = filter_has_file;
3366 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3367 IoTOP_GV(datasv) = (GV *)filter_state;
3368 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3371 /* switch to eval mode */
3372 PUSHBLOCK(cx, CXt_EVAL, SP);
3373 PUSHEVAL(cx, name, Nullgv);
3374 cx->blk_eval.retop = PL_op->op_next;
3376 SAVECOPLINE(&PL_compiling);
3377 CopLINE_set(&PL_compiling, 0);
3381 /* Store and reset encoding. */
3382 encoding = PL_encoding;
3383 PL_encoding = Nullsv;
3385 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3387 /* Restore encoding. */
3388 PL_encoding = encoding;
3395 return pp_require();
3401 register PERL_CONTEXT *cx;
3403 const I32 gimme = GIMME_V, was = PL_sub_generation;
3404 char tbuf[TYPE_DIGITS(long) + 12];
3405 char *tmpbuf = tbuf;
3412 if (!SvPV_const(sv,len))
3414 TAINT_PROPER("eval");
3420 /* switch to eval mode */
3422 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3423 SV *sv = sv_newmortal();
3424 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3425 (unsigned long)++PL_evalseq,
3426 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3430 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3431 SAVECOPFILE_FREE(&PL_compiling);
3432 CopFILE_set(&PL_compiling, tmpbuf+2);
3433 SAVECOPLINE(&PL_compiling);
3434 CopLINE_set(&PL_compiling, 1);
3435 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3436 deleting the eval's FILEGV from the stash before gv_check() runs
3437 (i.e. before run-time proper). To work around the coredump that
3438 ensues, we always turn GvMULTI_on for any globals that were
3439 introduced within evals. See force_ident(). GSAR 96-10-12 */
3440 safestr = savepv(tmpbuf);
3441 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3443 PL_hints = PL_op->op_targ;
3444 SAVESPTR(PL_compiling.cop_warnings);
3445 if (specialWARN(PL_curcop->cop_warnings))
3446 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3448 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3449 SAVEFREESV(PL_compiling.cop_warnings);
3451 SAVESPTR(PL_compiling.cop_io);
3452 if (specialCopIO(PL_curcop->cop_io))
3453 PL_compiling.cop_io = PL_curcop->cop_io;
3455 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3456 SAVEFREESV(PL_compiling.cop_io);
3458 /* special case: an eval '' executed within the DB package gets lexically
3459 * placed in the first non-DB CV rather than the current CV - this
3460 * allows the debugger to execute code, find lexicals etc, in the
3461 * scope of the code being debugged. Passing &seq gets find_runcv
3462 * to do the dirty work for us */
3463 runcv = find_runcv(&seq);
3465 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3466 PUSHEVAL(cx, 0, Nullgv);
3467 cx->blk_eval.retop = PL_op->op_next;
3469 /* prepare to compile string */
3471 if (PERLDB_LINE && PL_curstash != PL_debstash)
3472 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3474 ret = doeval(gimme, NULL, runcv, seq);
3475 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3476 && ret != PL_op->op_next) { /* Successive compilation. */
3477 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3479 return DOCATCH(ret);
3489 register PERL_CONTEXT *cx;
3491 const U8 save_flags = PL_op -> op_flags;
3496 retop = cx->blk_eval.retop;
3499 if (gimme == G_VOID)
3501 else if (gimme == G_SCALAR) {
3504 if (SvFLAGS(TOPs) & SVs_TEMP)
3507 *MARK = sv_mortalcopy(TOPs);
3511 *MARK = &PL_sv_undef;
3516 /* in case LEAVE wipes old return values */
3517 for (mark = newsp + 1; mark <= SP; mark++) {
3518 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3519 *mark = sv_mortalcopy(*mark);
3520 TAINT_NOT; /* Each item is independent */
3524 PL_curpm = newpm; /* Don't pop $1 et al till now */
3527 assert(CvDEPTH(PL_compcv) == 1);
3529 CvDEPTH(PL_compcv) = 0;
3532 if (optype == OP_REQUIRE &&
3533 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3535 /* Unassume the success we assumed earlier. */
3536 SV *nsv = cx->blk_eval.old_namesv;
3537 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3538 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3539 /* die_where() did LEAVE, or we won't be here */
3543 if (!(save_flags & OPf_SPECIAL))
3544 sv_setpvn(ERRSV,"",0);
3553 register PERL_CONTEXT *cx;
3554 const I32 gimme = GIMME_V;
3559 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3561 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3563 PL_in_eval = EVAL_INEVAL;
3564 sv_setpvn(ERRSV,"",0);
3566 return DOCATCH(PL_op->op_next);
3576 register PERL_CONTEXT *cx;
3583 if (gimme == G_VOID)
3585 else if (gimme == G_SCALAR) {
3588 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3591 *MARK = sv_mortalcopy(TOPs);
3595 *MARK = &PL_sv_undef;
3600 /* in case LEAVE wipes old return values */
3601 for (mark = newsp + 1; mark <= SP; mark++) {
3602 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3603 *mark = sv_mortalcopy(*mark);
3604 TAINT_NOT; /* Each item is independent */
3608 PL_curpm = newpm; /* Don't pop $1 et al till now */
3611 sv_setpvn(ERRSV,"",0);
3616 S_doparseform(pTHX_ SV *sv)
3619 register char *s = SvPV_force(sv, len);
3620 register char *send = s + len;
3621 register char *base = Nullch;
3622 register I32 skipspaces = 0;
3623 bool noblank = FALSE;
3624 bool repeat = FALSE;
3625 bool postspace = FALSE;
3631 bool unchopnum = FALSE;
3632 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3635 Perl_croak(aTHX_ "Null picture in formline");
3637 /* estimate the buffer size needed */
3638 for (base = s; s <= send; s++) {
3639 if (*s == '\n' || *s == '@' || *s == '^')
3645 New(804, fops, maxops, U32);
3650 *fpc++ = FF_LINEMARK;
3651 noblank = repeat = FALSE;
3669 case ' ': case '\t':
3676 } /* else FALL THROUGH */
3684 *fpc++ = FF_LITERAL;
3692 *fpc++ = (U16)skipspaces;
3696 *fpc++ = FF_NEWLINE;
3700 arg = fpc - linepc + 1;
3707 *fpc++ = FF_LINEMARK;
3708 noblank = repeat = FALSE;
3717 ischop = s[-1] == '^';
3723 arg = (s - base) - 1;
3725 *fpc++ = FF_LITERAL;
3733 *fpc++ = 2; /* skip the @* or ^* */
3735 *fpc++ = FF_LINESNGL;
3738 *fpc++ = FF_LINEGLOB;
3740 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3741 arg = ischop ? 512 : 0;
3746 const char * const f = ++s;
3749 arg |= 256 + (s - f);
3751 *fpc++ = s - base; /* fieldsize for FETCH */
3752 *fpc++ = FF_DECIMAL;
3754 unchopnum |= ! ischop;
3756 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3757 arg = ischop ? 512 : 0;
3759 s++; /* skip the '0' first */
3763 const char * const f = ++s;
3766 arg |= 256 + (s - f);
3768 *fpc++ = s - base; /* fieldsize for FETCH */
3769 *fpc++ = FF_0DECIMAL;
3771 unchopnum |= ! ischop;
3775 bool ismore = FALSE;
3778 while (*++s == '>') ;
3779 prespace = FF_SPACE;
3781 else if (*s == '|') {
3782 while (*++s == '|') ;
3783 prespace = FF_HALFSPACE;
3788 while (*++s == '<') ;
3791 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3795 *fpc++ = s - base; /* fieldsize for FETCH */
3797 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3800 *fpc++ = (U16)prespace;
3814 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3816 { /* need to jump to the next word */
3818 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3819 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3820 s = SvPVX(sv) + SvCUR(sv) + z;
3822 Copy(fops, s, arg, U32);
3824 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3827 if (unchopnum && repeat)
3828 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3834 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3836 /* Can value be printed in fldsize chars, using %*.*f ? */
3840 int intsize = fldsize - (value < 0 ? 1 : 0);
3847 while (intsize--) pwr *= 10.0;
3848 while (frcsize--) eps /= 10.0;
3851 if (value + eps >= pwr)
3854 if (value - eps <= -pwr)
3861 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3864 SV *datasv = FILTER_DATA(idx);
3865 const int filter_has_file = IoLINES(datasv);
3866 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3867 SV *filter_state = (SV *)IoTOP_GV(datasv);
3868 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3871 /* I was having segfault trouble under Linux 2.2.5 after a
3872 parse error occured. (Had to hack around it with a test
3873 for PL_error_count == 0.) Solaris doesn't segfault --
3874 not sure where the trouble is yet. XXX */
3876 if (filter_has_file) {
3877 len = FILTER_READ(idx+1, buf_sv, maxlen);
3880 if (filter_sub && len >= 0) {
3891 PUSHs(sv_2mortal(newSViv(maxlen)));
3893 PUSHs(filter_state);
3896 count = call_sv(filter_sub, G_SCALAR);
3912 IoLINES(datasv) = 0;
3913 if (filter_child_proc) {
3914 SvREFCNT_dec(filter_child_proc);
3915 IoFMT_GV(datasv) = Nullgv;
3918 SvREFCNT_dec(filter_state);
3919 IoTOP_GV(datasv) = Nullgv;
3922 SvREFCNT_dec(filter_sub);
3923 IoBOTTOM_GV(datasv) = Nullgv;
3925 filter_del(run_user_filter);
3931 /* perhaps someone can come up with a better name for
3932 this? it is not really "absolute", per se ... */
3934 S_path_is_absolute(pTHX_ const char *name)
3936 if (PERL_FILE_IS_ABSOLUTE(name)
3937 #ifdef MACOS_TRADITIONAL
3940 || (*name == '.' && (name[1] == '/' ||
3941 (name[1] == '.' && name[2] == '/'))))
3952 * c-indentation-style: bsd
3954 * indent-tabs-mode: t
3957 * ex: set ts=8 sts=4 sw=4 noet: