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;
395 register SV *sv = Nullsv;
400 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
401 char *chophere = Nullch;
402 char *linemark = Nullch;
404 bool gotsome = FALSE;
406 STRLEN fudge = SvPOK(tmpForm)
407 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
408 bool item_is_utf8 = FALSE;
409 bool targ_is_utf8 = FALSE;
415 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
416 if (SvREADONLY(tmpForm)) {
417 SvREADONLY_off(tmpForm);
418 parseres = doparseform(tmpForm);
419 SvREADONLY_on(tmpForm);
422 parseres = doparseform(tmpForm);
426 SvPV_force(PL_formtarget, len);
427 if (DO_UTF8(PL_formtarget))
429 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
431 f = SvPV_const(tmpForm, len);
432 /* need to jump to the next word */
433 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
437 const char *name = "???";
440 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
441 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
442 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
443 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
444 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
446 case FF_CHECKNL: name = "CHECKNL"; break;
447 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
448 case FF_SPACE: name = "SPACE"; break;
449 case FF_HALFSPACE: name = "HALFSPACE"; break;
450 case FF_ITEM: name = "ITEM"; break;
451 case FF_CHOP: name = "CHOP"; break;
452 case FF_LINEGLOB: name = "LINEGLOB"; break;
453 case FF_NEWLINE: name = "NEWLINE"; break;
454 case FF_MORE: name = "MORE"; break;
455 case FF_LINEMARK: name = "LINEMARK"; break;
456 case FF_END: name = "END"; break;
457 case FF_0DECIMAL: name = "0DECIMAL"; break;
458 case FF_LINESNGL: name = "LINESNGL"; break;
461 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
463 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
474 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
475 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
477 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
478 t = SvEND(PL_formtarget);
481 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
482 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
484 sv_utf8_upgrade(PL_formtarget);
485 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
486 t = SvEND(PL_formtarget);
506 if (ckWARN(WARN_SYNTAX))
507 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
512 s = item = SvPV(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;
554 s = item = SvPV(sv, len);
557 itemsize = sv_len_utf8(sv);
558 if (itemsize != (I32)len) {
560 if (itemsize <= fieldsize) {
561 send = chophere = s + itemsize;
573 itemsize = fieldsize;
574 itembytes = itemsize;
575 sv_pos_u2b(sv, &itembytes, 0);
576 send = chophere = s + itembytes;
577 while (s < send || (s == send && isSPACE(*s))) {
587 if (strchr(PL_chopset, *s))
592 itemsize = chophere - item;
593 sv_pos_b2u(sv, &itemsize);
599 item_is_utf8 = FALSE;
600 if (itemsize <= fieldsize) {
601 send = chophere = s + itemsize;
613 itemsize = fieldsize;
614 send = chophere = s + itemsize;
615 while (s < send || (s == send && isSPACE(*s))) {
625 if (strchr(PL_chopset, *s))
630 itemsize = chophere - item;
635 arg = fieldsize - itemsize;
644 arg = fieldsize - itemsize;
658 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
660 sv_utf8_upgrade(PL_formtarget);
661 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
662 t = SvEND(PL_formtarget);
666 if (UTF8_IS_CONTINUED(*s)) {
667 STRLEN skip = UTF8SKIP(s);
684 if ( !((*t++ = *s++) & ~31) )
690 if (targ_is_utf8 && !item_is_utf8) {
691 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
693 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
694 for (; t < SvEND(PL_formtarget); t++) {
707 int ch = *t++ = *s++;
710 if ( !((*t++ = *s++) & ~31) )
719 while (*s && isSPACE(*s))
733 s = item = SvPV(sv, len);
735 if ((item_is_utf8 = DO_UTF8(sv)))
736 itemsize = sv_len_utf8(sv);
738 bool chopped = FALSE;
741 chophere = s + itemsize;
757 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
759 SvUTF8_on(PL_formtarget);
761 SvCUR_set(sv, chophere - item);
762 sv_catsv(PL_formtarget, sv);
763 SvCUR_set(sv, itemsize);
765 sv_catsv(PL_formtarget, sv);
767 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
768 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
769 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
777 #if defined(USE_LONG_DOUBLE)
778 fmt = (arg & 256) ? "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl;
780 fmt = (arg & 256) ? "%#0*.*f" : "%0*.*f";
785 #if defined(USE_LONG_DOUBLE)
786 fmt = (arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl;
788 fmt = (arg & 256) ? "%#*.*f" : "%*.*f";
791 /* If the field is marked with ^ and the value is undefined,
793 if ((arg & 512) && !SvOK(sv)) {
801 /* overflow evidence */
802 if (num_overflow(value, fieldsize, arg)) {
808 /* Formats aren't yet marked for locales, so assume "yes". */
810 STORE_NUMERIC_STANDARD_SET_LOCAL();
811 sprintf(t, fmt, (int) fieldsize, (int) arg & 255, value);
812 RESTORE_NUMERIC_STANDARD();
819 while (t-- > linemark && *t == ' ') ;
827 if (arg) { /* repeat until fields exhausted? */
829 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
830 lines += FmLINES(PL_formtarget);
833 if (strnEQ(linemark, linemark - arg, arg))
834 DIE(aTHX_ "Runaway format");
837 SvUTF8_on(PL_formtarget);
838 FmLINES(PL_formtarget) = lines;
840 RETURNOP(cLISTOP->op_first);
853 while (*s && isSPACE(*s) && s < send)
857 arg = fieldsize - itemsize;
864 if (strnEQ(s," ",3)) {
865 while (s > SvPVX_const(PL_formtarget) && isSPACE(s[-1]))
876 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
878 SvUTF8_on(PL_formtarget);
879 FmLINES(PL_formtarget) += lines;
891 if (PL_stack_base + *PL_markstack_ptr == SP) {
893 if (GIMME_V == G_SCALAR)
894 XPUSHs(sv_2mortal(newSViv(0)));
895 RETURNOP(PL_op->op_next->op_next);
897 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
898 pp_pushmark(); /* push dst */
899 pp_pushmark(); /* push src */
900 ENTER; /* enter outer scope */
903 if (PL_op->op_private & OPpGREP_LEX)
904 SAVESPTR(PAD_SVl(PL_op->op_targ));
907 ENTER; /* enter inner scope */
910 src = PL_stack_base[*PL_markstack_ptr];
912 if (PL_op->op_private & OPpGREP_LEX)
913 PAD_SVl(PL_op->op_targ) = src;
918 if (PL_op->op_type == OP_MAPSTART)
919 pp_pushmark(); /* push top */
920 return ((LOGOP*)PL_op->op_next)->op_other;
925 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
931 const I32 gimme = GIMME_V;
932 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
938 /* first, move source pointer to the next item in the source list */
939 ++PL_markstack_ptr[-1];
941 /* if there are new items, push them into the destination list */
942 if (items && gimme != G_VOID) {
943 /* might need to make room back there first */
944 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
945 /* XXX this implementation is very pessimal because the stack
946 * is repeatedly extended for every set of items. Is possible
947 * to do this without any stack extension or copying at all
948 * by maintaining a separate list over which the map iterates
949 * (like foreach does). --gsar */
951 /* everything in the stack after the destination list moves
952 * towards the end the stack by the amount of room needed */
953 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
955 /* items to shift up (accounting for the moved source pointer) */
956 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
958 /* This optimization is by Ben Tilly and it does
959 * things differently from what Sarathy (gsar)
960 * is describing. The downside of this optimization is
961 * that leaves "holes" (uninitialized and hopefully unused areas)
962 * to the Perl stack, but on the other hand this
963 * shouldn't be a problem. If Sarathy's idea gets
964 * implemented, this optimization should become
965 * irrelevant. --jhi */
967 shift = count; /* Avoid shifting too often --Ben Tilly */
972 PL_markstack_ptr[-1] += shift;
973 *PL_markstack_ptr += shift;
977 /* copy the new items down to the destination list */
978 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
979 if (gimme == G_ARRAY) {
981 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
984 /* scalar context: we don't care about which values map returns
985 * (we use undef here). And so we certainly don't want to do mortal
986 * copies of meaningless values. */
987 while (items-- > 0) {
989 *dst-- = &PL_sv_undef;
993 LEAVE; /* exit inner scope */
996 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
998 (void)POPMARK; /* pop top */
999 LEAVE; /* exit outer scope */
1000 (void)POPMARK; /* pop src */
1001 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1002 (void)POPMARK; /* pop dst */
1003 SP = PL_stack_base + POPMARK; /* pop original mark */
1004 if (gimme == G_SCALAR) {
1005 if (PL_op->op_private & OPpGREP_LEX) {
1006 SV* sv = sv_newmortal();
1007 sv_setiv(sv, items);
1015 else if (gimme == G_ARRAY)
1022 ENTER; /* enter inner scope */
1025 /* set $_ to the new source item */
1026 src = PL_stack_base[PL_markstack_ptr[-1]];
1028 if (PL_op->op_private & OPpGREP_LEX)
1029 PAD_SVl(PL_op->op_targ) = src;
1033 RETURNOP(cLOGOP->op_other);
1041 if (GIMME == G_ARRAY)
1043 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1044 return cLOGOP->op_other;
1053 if (GIMME == G_ARRAY) {
1054 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1058 SV *targ = PAD_SV(PL_op->op_targ);
1061 if (PL_op->op_private & OPpFLIP_LINENUM) {
1062 if (GvIO(PL_last_in_gv)) {
1063 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1066 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1067 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1073 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1074 if (PL_op->op_flags & OPf_SPECIAL) {
1082 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1085 sv_setpvn(TARG, "", 0);
1091 /* This code tries to decide if "$left .. $right" should use the
1092 magical string increment, or if the range is numeric (we make
1093 an exception for .."0" [#18165]). AMS 20021031. */
1095 #define RANGE_IS_NUMERIC(left,right) ( \
1096 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1097 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1098 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1099 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1100 && (!SvOK(right) || looks_like_number(right))))
1106 if (GIMME == G_ARRAY) {
1112 if (SvGMAGICAL(left))
1114 if (SvGMAGICAL(right))
1117 if (RANGE_IS_NUMERIC(left,right)) {
1118 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1119 (SvOK(right) && SvNV(right) > IV_MAX))
1120 DIE(aTHX_ "Range iterator outside integer range");
1131 sv = sv_2mortal(newSViv(i++));
1136 SV *final = sv_mortalcopy(right);
1138 const char *tmps = SvPV(final, len);
1140 sv = sv_mortalcopy(left);
1142 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1144 if (strEQ(SvPVX_const(sv),tmps))
1146 sv = sv_2mortal(newSVsv(sv));
1153 SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1157 if (PL_op->op_private & OPpFLIP_LINENUM) {
1158 if (GvIO(PL_last_in_gv)) {
1159 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1162 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1163 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1171 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1172 sv_catpv(targ, "E0");
1182 static const char * const context_name[] = {
1193 S_dopoptolabel(pTHX_ const char *label)
1197 for (i = cxstack_ix; i >= 0; i--) {
1198 register const PERL_CONTEXT *cx = &cxstack[i];
1199 switch (CxTYPE(cx)) {
1205 if (ckWARN(WARN_EXITING))
1206 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1207 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1208 if (CxTYPE(cx) == CXt_NULL)
1212 if (!cx->blk_loop.label ||
1213 strNE(label, cx->blk_loop.label) ) {
1214 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1215 (long)i, cx->blk_loop.label));
1218 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1226 Perl_dowantarray(pTHX)
1228 const I32 gimme = block_gimme();
1229 return (gimme == G_VOID) ? G_SCALAR : gimme;
1233 Perl_block_gimme(pTHX)
1235 const I32 cxix = dopoptosub(cxstack_ix);
1239 switch (cxstack[cxix].blk_gimme) {
1247 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1254 Perl_is_lvalue_sub(pTHX)
1256 const I32 cxix = dopoptosub(cxstack_ix);
1257 assert(cxix >= 0); /* We should only be called from inside subs */
1259 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1260 return cxstack[cxix].blk_sub.lval;
1266 S_dopoptosub(pTHX_ I32 startingblock)
1268 return dopoptosub_at(cxstack, startingblock);
1272 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1275 for (i = startingblock; i >= 0; i--) {
1276 register const PERL_CONTEXT *cx = &cxstk[i];
1277 switch (CxTYPE(cx)) {
1283 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1291 S_dopoptoeval(pTHX_ I32 startingblock)
1294 for (i = startingblock; i >= 0; i--) {
1295 register const PERL_CONTEXT *cx = &cxstack[i];
1296 switch (CxTYPE(cx)) {
1300 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1308 S_dopoptoloop(pTHX_ I32 startingblock)
1311 for (i = startingblock; i >= 0; i--) {
1312 register const PERL_CONTEXT *cx = &cxstack[i];
1313 switch (CxTYPE(cx)) {
1319 if (ckWARN(WARN_EXITING))
1320 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1321 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1322 if ((CxTYPE(cx)) == CXt_NULL)
1326 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1334 Perl_dounwind(pTHX_ I32 cxix)
1338 while (cxstack_ix > cxix) {
1340 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1341 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1342 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1343 /* Note: we don't need to restore the base context info till the end. */
1344 switch (CxTYPE(cx)) {
1347 continue; /* not break */
1369 Perl_qerror(pTHX_ SV *err)
1372 sv_catsv(ERRSV, err);
1374 sv_catsv(PL_errors, err);
1376 Perl_warn(aTHX_ "%"SVf, err);
1381 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1391 if (PL_in_eval & EVAL_KEEPERR) {
1392 static const char prefix[] = "\t(in cleanup) ";
1394 const char *e = Nullch;
1396 sv_setpvn(err,"",0);
1397 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1401 if (*e != *message || strNE(e,message))
1405 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1406 sv_catpvn(err, prefix, sizeof(prefix)-1);
1407 sv_catpvn(err, message, msglen);
1408 if (ckWARN(WARN_MISC)) {
1409 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1410 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1415 sv_setpvn(ERRSV, message, msglen);
1419 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1420 && PL_curstackinfo->si_prev)
1428 register PERL_CONTEXT *cx;
1430 if (cxix < cxstack_ix)
1433 POPBLOCK(cx,PL_curpm);
1434 if (CxTYPE(cx) != CXt_EVAL) {
1436 message = SvPVx(ERRSV, msglen);
1437 PerlIO_write(Perl_error_log, "panic: die ", 11);
1438 PerlIO_write(Perl_error_log, message, msglen);
1443 if (gimme == G_SCALAR)
1444 *++newsp = &PL_sv_undef;
1445 PL_stack_sp = newsp;
1449 /* LEAVE could clobber PL_curcop (see save_re_context())
1450 * XXX it might be better to find a way to avoid messing with
1451 * PL_curcop in save_re_context() instead, but this is a more
1452 * minimal fix --GSAR */
1453 PL_curcop = cx->blk_oldcop;
1455 if (optype == OP_REQUIRE) {
1456 const char* msg = SvPVx_nolen_const(ERRSV);
1457 SV *nsv = cx->blk_eval.old_namesv;
1458 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1460 DIE(aTHX_ "%sCompilation failed in require",
1461 *msg ? msg : "Unknown error\n");
1463 assert(CxTYPE(cx) == CXt_EVAL);
1464 return cx->blk_eval.retop;
1468 message = SvPVx(ERRSV, msglen);
1470 write_to_stderr(message, msglen);
1479 if (SvTRUE(left) != SvTRUE(right))
1491 RETURNOP(cLOGOP->op_other);
1500 RETURNOP(cLOGOP->op_other);
1509 if (!sv || !SvANY(sv)) {
1510 RETURNOP(cLOGOP->op_other);
1513 switch (SvTYPE(sv)) {
1515 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1519 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1523 if (CvROOT(sv) || CvXSUB(sv))
1533 RETURNOP(cLOGOP->op_other);
1539 register I32 cxix = dopoptosub(cxstack_ix);
1540 register PERL_CONTEXT *cx;
1541 register PERL_CONTEXT *ccstack = cxstack;
1542 PERL_SI *top_si = PL_curstackinfo;
1544 const char *stashname;
1551 /* we may be in a higher stacklevel, so dig down deeper */
1552 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1553 top_si = top_si->si_prev;
1554 ccstack = top_si->si_cxstack;
1555 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1558 if (GIMME != G_ARRAY) {
1564 /* caller() should not report the automatic calls to &DB::sub */
1565 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1566 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1570 cxix = dopoptosub_at(ccstack, cxix - 1);
1573 cx = &ccstack[cxix];
1574 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1575 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1576 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1577 field below is defined for any cx. */
1578 /* caller() should not report the automatic calls to &DB::sub */
1579 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1580 cx = &ccstack[dbcxix];
1583 stashname = CopSTASHPV(cx->blk_oldcop);
1584 if (GIMME != G_ARRAY) {
1587 PUSHs(&PL_sv_undef);
1590 sv_setpv(TARG, stashname);
1599 PUSHs(&PL_sv_undef);
1601 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1602 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1603 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1606 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1607 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1608 /* So is ccstack[dbcxix]. */
1610 SV * const sv = NEWSV(49, 0);
1611 gv_efullname3(sv, cvgv, Nullch);
1612 PUSHs(sv_2mortal(sv));
1613 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1616 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1617 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1621 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1622 PUSHs(sv_2mortal(newSViv(0)));
1624 gimme = (I32)cx->blk_gimme;
1625 if (gimme == G_VOID)
1626 PUSHs(&PL_sv_undef);
1628 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1629 if (CxTYPE(cx) == CXt_EVAL) {
1631 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1632 PUSHs(cx->blk_eval.cur_text);
1636 else if (cx->blk_eval.old_namesv) {
1637 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1640 /* eval BLOCK (try blocks have old_namesv == 0) */
1642 PUSHs(&PL_sv_undef);
1643 PUSHs(&PL_sv_undef);
1647 PUSHs(&PL_sv_undef);
1648 PUSHs(&PL_sv_undef);
1650 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1651 && CopSTASH_eq(PL_curcop, PL_debstash))
1653 AV * const ary = cx->blk_sub.argarray;
1654 const int off = AvARRAY(ary) - AvALLOC(ary);
1658 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1661 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1664 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1665 av_extend(PL_dbargs, AvFILLp(ary) + off);
1666 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1667 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1669 /* XXX only hints propagated via op_private are currently
1670 * visible (others are not easily accessible, since they
1671 * use the global PL_hints) */
1672 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1673 HINT_PRIVATE_MASK)));
1676 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1678 if (old_warnings == pWARN_NONE ||
1679 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1680 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1681 else if (old_warnings == pWARN_ALL ||
1682 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1683 /* Get the bit mask for $warnings::Bits{all}, because
1684 * it could have been extended by warnings::register */
1686 HV *bits = get_hv("warnings::Bits", FALSE);
1687 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1688 mask = newSVsv(*bits_all);
1691 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1695 mask = newSVsv(old_warnings);
1696 PUSHs(sv_2mortal(mask));
1710 sv_reset(tmps, CopSTASH(PL_curcop));
1720 /* like pp_nextstate, but used instead when the debugger is active */
1725 PL_curcop = (COP*)PL_op;
1726 TAINT_NOT; /* Each statement is presumed innocent */
1727 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1730 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1731 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1735 register PERL_CONTEXT *cx;
1736 const I32 gimme = G_ARRAY;
1743 DIE(aTHX_ "No DB::DB routine defined");
1745 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1746 /* don't do recursive DB::DB call */
1758 PUSHBLOCK(cx, CXt_SUB, SP);
1760 cx->blk_sub.retop = PL_op->op_next;
1762 PAD_SET_CUR(CvPADLIST(cv),1);
1763 RETURNOP(CvSTART(cv));
1777 register PERL_CONTEXT *cx;
1778 const I32 gimme = GIMME_V;
1780 U32 cxtype = CXt_LOOP;
1788 if (PL_op->op_targ) {
1789 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1790 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1791 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1792 SVs_PADSTALE, SVs_PADSTALE);
1794 #ifndef USE_ITHREADS
1795 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1798 SAVEPADSV(PL_op->op_targ);
1799 iterdata = INT2PTR(void*, PL_op->op_targ);
1800 cxtype |= CXp_PADVAR;
1805 svp = &GvSV(gv); /* symbol table variable */
1806 SAVEGENERICSV(*svp);
1809 iterdata = (void*)gv;
1815 PUSHBLOCK(cx, cxtype, SP);
1817 PUSHLOOP(cx, iterdata, MARK);
1819 PUSHLOOP(cx, svp, MARK);
1821 if (PL_op->op_flags & OPf_STACKED) {
1822 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1823 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1825 SV *right = (SV*)cx->blk_loop.iterary;
1826 if (RANGE_IS_NUMERIC(sv,right)) {
1827 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1828 (SvOK(right) && SvNV(right) >= IV_MAX))
1829 DIE(aTHX_ "Range iterator outside integer range");
1830 cx->blk_loop.iterix = SvIV(sv);
1831 cx->blk_loop.itermax = SvIV(right);
1835 cx->blk_loop.iterlval = newSVsv(sv);
1836 (void) SvPV_force(cx->blk_loop.iterlval,n_a);
1837 (void) SvPV_nolen_const(right);
1840 else if (PL_op->op_private & OPpITER_REVERSED) {
1841 cx->blk_loop.itermax = -1;
1842 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1847 cx->blk_loop.iterary = PL_curstack;
1848 AvFILLp(PL_curstack) = SP - PL_stack_base;
1849 if (PL_op->op_private & OPpITER_REVERSED) {
1850 cx->blk_loop.itermax = MARK - PL_stack_base;
1851 cx->blk_loop.iterix = cx->blk_oldsp;
1854 cx->blk_loop.iterix = MARK - PL_stack_base;
1864 register PERL_CONTEXT *cx;
1865 const I32 gimme = GIMME_V;
1871 PUSHBLOCK(cx, CXt_LOOP, SP);
1872 PUSHLOOP(cx, 0, SP);
1880 register PERL_CONTEXT *cx;
1887 assert(CxTYPE(cx) == CXt_LOOP);
1889 newsp = PL_stack_base + cx->blk_loop.resetsp;
1892 if (gimme == G_VOID)
1894 else if (gimme == G_SCALAR) {
1896 *++newsp = sv_mortalcopy(*SP);
1898 *++newsp = &PL_sv_undef;
1902 *++newsp = sv_mortalcopy(*++mark);
1903 TAINT_NOT; /* Each item is independent */
1909 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1910 PL_curpm = newpm; /* ... and pop $1 et al */
1922 register PERL_CONTEXT *cx;
1923 bool popsub2 = FALSE;
1924 bool clear_errsv = FALSE;
1932 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1933 if (cxstack_ix == PL_sortcxix
1934 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1936 if (cxstack_ix > PL_sortcxix)
1937 dounwind(PL_sortcxix);
1938 AvARRAY(PL_curstack)[1] = *SP;
1939 PL_stack_sp = PL_stack_base + 1;
1944 cxix = dopoptosub(cxstack_ix);
1946 DIE(aTHX_ "Can't return outside a subroutine");
1947 if (cxix < cxstack_ix)
1951 switch (CxTYPE(cx)) {
1954 retop = cx->blk_sub.retop;
1955 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1958 if (!(PL_in_eval & EVAL_KEEPERR))
1961 retop = cx->blk_eval.retop;
1965 if (optype == OP_REQUIRE &&
1966 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1968 /* Unassume the success we assumed earlier. */
1969 SV *nsv = cx->blk_eval.old_namesv;
1970 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
1971 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1976 retop = cx->blk_sub.retop;
1979 DIE(aTHX_ "panic: return");
1983 if (gimme == G_SCALAR) {
1986 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1988 *++newsp = SvREFCNT_inc(*SP);
1993 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1995 *++newsp = sv_mortalcopy(sv);
2000 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2003 *++newsp = sv_mortalcopy(*SP);
2006 *++newsp = &PL_sv_undef;
2008 else if (gimme == G_ARRAY) {
2009 while (++MARK <= SP) {
2010 *++newsp = (popsub2 && SvTEMP(*MARK))
2011 ? *MARK : sv_mortalcopy(*MARK);
2012 TAINT_NOT; /* Each item is independent */
2015 PL_stack_sp = newsp;
2018 /* Stack values are safe: */
2021 POPSUB(cx,sv); /* release CV and @_ ... */
2025 PL_curpm = newpm; /* ... and pop $1 et al */
2029 sv_setpvn(ERRSV,"",0);
2037 register PERL_CONTEXT *cx;
2047 if (PL_op->op_flags & OPf_SPECIAL) {
2048 cxix = dopoptoloop(cxstack_ix);
2050 DIE(aTHX_ "Can't \"last\" outside a loop block");
2053 cxix = dopoptolabel(cPVOP->op_pv);
2055 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2057 if (cxix < cxstack_ix)
2061 cxstack_ix++; /* temporarily protect top context */
2063 switch (CxTYPE(cx)) {
2066 newsp = PL_stack_base + cx->blk_loop.resetsp;
2067 nextop = cx->blk_loop.last_op->op_next;
2071 nextop = cx->blk_sub.retop;
2075 nextop = cx->blk_eval.retop;
2079 nextop = cx->blk_sub.retop;
2082 DIE(aTHX_ "panic: last");
2086 if (gimme == G_SCALAR) {
2088 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2089 ? *SP : sv_mortalcopy(*SP);
2091 *++newsp = &PL_sv_undef;
2093 else if (gimme == G_ARRAY) {
2094 while (++MARK <= SP) {
2095 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2096 ? *MARK : sv_mortalcopy(*MARK);
2097 TAINT_NOT; /* Each item is independent */
2105 /* Stack values are safe: */
2108 POPLOOP(cx); /* release loop vars ... */
2112 POPSUB(cx,sv); /* release CV and @_ ... */
2115 PL_curpm = newpm; /* ... and pop $1 et al */
2125 register PERL_CONTEXT *cx;
2128 if (PL_op->op_flags & OPf_SPECIAL) {
2129 cxix = dopoptoloop(cxstack_ix);
2131 DIE(aTHX_ "Can't \"next\" outside a loop block");
2134 cxix = dopoptolabel(cPVOP->op_pv);
2136 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2138 if (cxix < cxstack_ix)
2141 /* clear off anything above the scope we're re-entering, but
2142 * save the rest until after a possible continue block */
2143 inner = PL_scopestack_ix;
2145 if (PL_scopestack_ix < inner)
2146 leave_scope(PL_scopestack[PL_scopestack_ix]);
2147 PL_curcop = cx->blk_oldcop;
2148 return cx->blk_loop.next_op;
2155 register PERL_CONTEXT *cx;
2159 if (PL_op->op_flags & OPf_SPECIAL) {
2160 cxix = dopoptoloop(cxstack_ix);
2162 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2165 cxix = dopoptolabel(cPVOP->op_pv);
2167 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2169 if (cxix < cxstack_ix)
2172 redo_op = cxstack[cxix].blk_loop.redo_op;
2173 if (redo_op->op_type == OP_ENTER) {
2174 /* pop one less context to avoid $x being freed in while (my $x..) */
2176 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2177 redo_op = redo_op->op_next;
2181 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2182 LEAVE_SCOPE(oldsave);
2184 PL_curcop = cx->blk_oldcop;
2189 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2193 static const char too_deep[] = "Target of goto is too deeply nested";
2196 Perl_croak(aTHX_ too_deep);
2197 if (o->op_type == OP_LEAVE ||
2198 o->op_type == OP_SCOPE ||
2199 o->op_type == OP_LEAVELOOP ||
2200 o->op_type == OP_LEAVESUB ||
2201 o->op_type == OP_LEAVETRY)
2203 *ops++ = cUNOPo->op_first;
2205 Perl_croak(aTHX_ too_deep);
2208 if (o->op_flags & OPf_KIDS) {
2209 /* First try all the kids at this level, since that's likeliest. */
2210 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2211 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2212 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2215 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2216 if (kid == PL_lastgotoprobe)
2218 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2221 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2222 ops[-1]->op_type == OP_DBSTATE)
2227 if ((o = dofindlabel(kid, label, ops, oplimit)))
2246 register PERL_CONTEXT *cx;
2247 #define GOTO_DEPTH 64
2248 OP *enterops[GOTO_DEPTH];
2249 const char *label = 0;
2250 const bool do_dump = (PL_op->op_type == OP_DUMP);
2251 static const char must_have_label[] = "goto must have label";
2253 if (PL_op->op_flags & OPf_STACKED) {
2256 /* This egregious kludge implements goto &subroutine */
2257 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2259 register PERL_CONTEXT *cx;
2260 CV* cv = (CV*)SvRV(sv);
2267 if (!CvROOT(cv) && !CvXSUB(cv)) {
2268 const GV * const gv = CvGV(cv);
2272 /* autoloaded stub? */
2273 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2275 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2276 GvNAMELEN(gv), FALSE);
2277 if (autogv && (cv = GvCV(autogv)))
2279 tmpstr = sv_newmortal();
2280 gv_efullname3(tmpstr, gv, Nullch);
2281 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2283 DIE(aTHX_ "Goto undefined subroutine");
2286 /* First do some returnish stuff. */
2287 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2289 cxix = dopoptosub(cxstack_ix);
2291 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2292 if (cxix < cxstack_ix)
2296 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2297 if (CxTYPE(cx) == CXt_EVAL) {
2299 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2301 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2303 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2304 /* put @_ back onto stack */
2305 AV* av = cx->blk_sub.argarray;
2307 items = AvFILLp(av) + 1;
2308 EXTEND(SP, items+1); /* @_ could have been extended. */
2309 Copy(AvARRAY(av), SP + 1, items, SV*);
2310 SvREFCNT_dec(GvAV(PL_defgv));
2311 GvAV(PL_defgv) = cx->blk_sub.savearray;
2313 /* abandon @_ if it got reified */
2318 av_extend(av, items-1);
2320 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2323 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2325 av = GvAV(PL_defgv);
2326 items = AvFILLp(av) + 1;
2327 EXTEND(SP, items+1); /* @_ could have been extended. */
2328 Copy(AvARRAY(av), SP + 1, items, SV*);
2332 if (CxTYPE(cx) == CXt_SUB &&
2333 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2334 SvREFCNT_dec(cx->blk_sub.cv);
2335 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2336 LEAVE_SCOPE(oldsave);
2338 /* Now do some callish stuff. */
2340 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2342 OP* retop = cx->blk_sub.retop;
2345 for (index=0; index<items; index++)
2346 sv_2mortal(SP[-index]);
2348 #ifdef PERL_XSUB_OLDSTYLE
2349 if (CvOLDSTYLE(cv)) {
2350 I32 (*fp3)(int,int,int);
2355 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2356 items = (*fp3)(CvXSUBANY(cv).any_i32,
2357 mark - PL_stack_base + 1,
2359 SP = PL_stack_base + items;
2362 #endif /* PERL_XSUB_OLDSTYLE */
2367 /* XS subs don't have a CxSUB, so pop it */
2368 POPBLOCK(cx, PL_curpm);
2369 /* Push a mark for the start of arglist */
2372 (void)(*CvXSUB(cv))(aTHX_ cv);
2378 AV* padlist = CvPADLIST(cv);
2379 if (CxTYPE(cx) == CXt_EVAL) {
2380 PL_in_eval = cx->blk_eval.old_in_eval;
2381 PL_eval_root = cx->blk_eval.old_eval_root;
2382 cx->cx_type = CXt_SUB;
2383 cx->blk_sub.hasargs = 0;
2385 cx->blk_sub.cv = cv;
2386 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2389 if (CvDEPTH(cv) < 2)
2390 (void)SvREFCNT_inc(cv);
2392 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2393 sub_crush_depth(cv);
2394 pad_push(padlist, CvDEPTH(cv));
2396 PAD_SET_CUR(padlist, CvDEPTH(cv));
2397 if (cx->blk_sub.hasargs)
2399 AV* av = (AV*)PAD_SVl(0);
2402 cx->blk_sub.savearray = GvAV(PL_defgv);
2403 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2404 CX_CURPAD_SAVE(cx->blk_sub);
2405 cx->blk_sub.argarray = av;
2407 if (items >= AvMAX(av) + 1) {
2409 if (AvARRAY(av) != ary) {
2410 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2411 SvPV_set(av, (char*)ary);
2413 if (items >= AvMAX(av) + 1) {
2414 AvMAX(av) = items - 1;
2415 Renew(ary,items+1,SV*);
2417 SvPV_set(av, (char*)ary);
2421 Copy(mark,AvARRAY(av),items,SV*);
2422 AvFILLp(av) = items - 1;
2423 assert(!AvREAL(av));
2425 /* transfer 'ownership' of refcnts to new @_ */
2435 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2437 * We do not care about using sv to call CV;
2438 * it's for informational purposes only.
2440 SV *sv = GvSV(PL_DBsub);
2444 if (PERLDB_SUB_NN) {
2445 int type = SvTYPE(sv);
2446 if (type < SVt_PVIV && type != SVt_IV)
2447 sv_upgrade(sv, SVt_PVIV);
2449 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2451 gv_efullname3(sv, CvGV(cv), Nullch);
2454 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2455 PUSHMARK( PL_stack_sp );
2456 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2460 RETURNOP(CvSTART(cv));
2464 label = SvPV_nolen_const(sv);
2465 if (!(do_dump || *label))
2466 DIE(aTHX_ must_have_label);
2469 else if (PL_op->op_flags & OPf_SPECIAL) {
2471 DIE(aTHX_ must_have_label);
2474 label = cPVOP->op_pv;
2476 if (label && *label) {
2478 bool leaving_eval = FALSE;
2479 bool in_block = FALSE;
2480 PERL_CONTEXT *last_eval_cx = 0;
2484 PL_lastgotoprobe = 0;
2486 for (ix = cxstack_ix; ix >= 0; ix--) {
2488 switch (CxTYPE(cx)) {
2490 leaving_eval = TRUE;
2491 if (!CxTRYBLOCK(cx)) {
2492 gotoprobe = (last_eval_cx ?
2493 last_eval_cx->blk_eval.old_eval_root :
2498 /* else fall through */
2500 gotoprobe = cx->blk_oldcop->op_sibling;
2506 gotoprobe = cx->blk_oldcop->op_sibling;
2509 gotoprobe = PL_main_root;
2512 if (CvDEPTH(cx->blk_sub.cv)) {
2513 gotoprobe = CvROOT(cx->blk_sub.cv);
2519 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2522 DIE(aTHX_ "panic: goto");
2523 gotoprobe = PL_main_root;
2527 retop = dofindlabel(gotoprobe, label,
2528 enterops, enterops + GOTO_DEPTH);
2532 PL_lastgotoprobe = gotoprobe;
2535 DIE(aTHX_ "Can't find label %s", label);
2537 /* if we're leaving an eval, check before we pop any frames
2538 that we're not going to punt, otherwise the error
2541 if (leaving_eval && *enterops && enterops[1]) {
2543 for (i = 1; enterops[i]; i++)
2544 if (enterops[i]->op_type == OP_ENTERITER)
2545 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2548 /* pop unwanted frames */
2550 if (ix < cxstack_ix) {
2557 oldsave = PL_scopestack[PL_scopestack_ix];
2558 LEAVE_SCOPE(oldsave);
2561 /* push wanted frames */
2563 if (*enterops && enterops[1]) {
2565 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2566 for (; enterops[ix]; ix++) {
2567 PL_op = enterops[ix];
2568 /* Eventually we may want to stack the needed arguments
2569 * for each op. For now, we punt on the hard ones. */
2570 if (PL_op->op_type == OP_ENTERITER)
2571 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2572 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2580 if (!retop) retop = PL_main_start;
2582 PL_restartop = retop;
2583 PL_do_undump = TRUE;
2587 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2588 PL_do_undump = FALSE;
2604 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2606 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2609 PL_exit_flags |= PERL_EXIT_EXPECTED;
2611 PUSHs(&PL_sv_undef);
2619 const NV value = SvNVx(GvSV(cCOP->cop_gv));
2620 register I32 match = I_32(value);
2623 if (((NV)match) > value)
2624 --match; /* was fractional--truncate other way */
2626 match -= cCOP->uop.scop.scop_offset;
2629 else if (match > cCOP->uop.scop.scop_max)
2630 match = cCOP->uop.scop.scop_max;
2631 PL_op = cCOP->uop.scop.scop_next[match];
2641 PL_op = PL_op->op_next; /* can't assume anything */
2643 match = *(SvPVx_nolen_const(GvSV(cCOP->cop_gv))) & 255;
2644 match -= cCOP->uop.scop.scop_offset;
2647 else if (match > cCOP->uop.scop.scop_max)
2648 match = cCOP->uop.scop.scop_max;
2649 PL_op = cCOP->uop.scop.scop_next[match];
2658 S_save_lines(pTHX_ AV *array, SV *sv)
2660 const char *s = SvPVX_const(sv);
2661 const char *send = SvPVX_const(sv) + SvCUR(sv);
2664 while (s && s < send) {
2666 SV *tmpstr = NEWSV(85,0);
2668 sv_upgrade(tmpstr, SVt_PVMG);
2669 t = strchr(s, '\n');
2675 sv_setpvn(tmpstr, s, t - s);
2676 av_store(array, line++, tmpstr);
2682 S_docatch_body(pTHX)
2689 S_docatch(pTHX_ OP *o)
2692 OP * const oldop = PL_op;
2696 assert(CATCH_GET == TRUE);
2703 assert(cxstack_ix >= 0);
2704 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2705 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2710 /* die caught by an inner eval - continue inner loop */
2712 /* NB XXX we rely on the old popped CxEVAL still being at the top
2713 * of the stack; the way die_where() currently works, this
2714 * assumption is valid. In theory The cur_top_env value should be
2715 * returned in another global, the way retop (aka PL_restartop)
2717 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2720 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2722 PL_op = PL_restartop;
2739 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2740 /* sv Text to convert to OP tree. */
2741 /* startop op_free() this to undo. */
2742 /* code Short string id of the caller. */
2744 dVAR; dSP; /* Make POPBLOCK work. */
2747 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2751 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2752 char *tmpbuf = tbuf;
2755 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2760 /* switch to eval mode */
2762 if (IN_PERL_COMPILETIME) {
2763 SAVECOPSTASH_FREE(&PL_compiling);
2764 CopSTASH_set(&PL_compiling, PL_curstash);
2766 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2767 SV *sv = sv_newmortal();
2768 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2769 code, (unsigned long)++PL_evalseq,
2770 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2774 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2775 SAVECOPFILE_FREE(&PL_compiling);
2776 CopFILE_set(&PL_compiling, tmpbuf+2);
2777 SAVECOPLINE(&PL_compiling);
2778 CopLINE_set(&PL_compiling, 1);
2779 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2780 deleting the eval's FILEGV from the stash before gv_check() runs
2781 (i.e. before run-time proper). To work around the coredump that
2782 ensues, we always turn GvMULTI_on for any globals that were
2783 introduced within evals. See force_ident(). GSAR 96-10-12 */
2784 safestr = savepv(tmpbuf);
2785 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2787 #ifdef OP_IN_REGISTER
2793 /* we get here either during compilation, or via pp_regcomp at runtime */
2794 runtime = IN_PERL_RUNTIME;
2796 runcv = find_runcv(NULL);
2799 PL_op->op_type = OP_ENTEREVAL;
2800 PL_op->op_flags = 0; /* Avoid uninit warning. */
2801 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2802 PUSHEVAL(cx, 0, Nullgv);
2805 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2807 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2808 POPBLOCK(cx,PL_curpm);
2811 (*startop)->op_type = OP_NULL;
2812 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2814 /* XXX DAPM do this properly one year */
2815 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2817 if (IN_PERL_COMPILETIME)
2818 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2819 #ifdef OP_IN_REGISTER
2827 =for apidoc find_runcv
2829 Locate the CV corresponding to the currently executing sub or eval.
2830 If db_seqp is non_null, skip CVs that are in the DB package and populate
2831 *db_seqp with the cop sequence number at the point that the DB:: code was
2832 entered. (allows debuggers to eval in the scope of the breakpoint rather
2833 than in in the scope of the debugger itself).
2839 Perl_find_runcv(pTHX_ U32 *db_seqp)
2844 *db_seqp = PL_curcop->cop_seq;
2845 for (si = PL_curstackinfo; si; si = si->si_prev) {
2847 for (ix = si->si_cxix; ix >= 0; ix--) {
2848 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2849 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2850 CV *cv = cx->blk_sub.cv;
2851 /* skip DB:: code */
2852 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2853 *db_seqp = cx->blk_oldcop->cop_seq;
2858 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2866 /* Compile a require/do, an eval '', or a /(?{...})/.
2867 * In the last case, startop is non-null, and contains the address of
2868 * a pointer that should be set to the just-compiled code.
2869 * outside is the lexically enclosing CV (if any) that invoked us.
2872 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2874 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2879 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2880 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2885 SAVESPTR(PL_compcv);
2886 PL_compcv = (CV*)NEWSV(1104,0);
2887 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2888 CvEVAL_on(PL_compcv);
2889 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2890 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2892 CvOUTSIDE_SEQ(PL_compcv) = seq;
2893 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2895 /* set up a scratch pad */
2897 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2900 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2902 /* make sure we compile in the right package */
2904 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2905 SAVESPTR(PL_curstash);
2906 PL_curstash = CopSTASH(PL_curcop);
2908 SAVESPTR(PL_beginav);
2909 PL_beginav = newAV();
2910 SAVEFREESV(PL_beginav);
2911 SAVEI32(PL_error_count);
2913 /* try to compile it */
2915 PL_eval_root = Nullop;
2917 PL_curcop = &PL_compiling;
2918 PL_curcop->cop_arybase = 0;
2919 if (saveop && saveop->op_flags & OPf_SPECIAL)
2920 PL_in_eval |= EVAL_KEEPERR;
2922 sv_setpvn(ERRSV,"",0);
2923 if (yyparse() || PL_error_count || !PL_eval_root) {
2924 SV **newsp; /* Used by POPBLOCK. */
2925 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2926 I32 optype = 0; /* Might be reset by POPEVAL. */
2930 op_free(PL_eval_root);
2931 PL_eval_root = Nullop;
2933 SP = PL_stack_base + POPMARK; /* pop original mark */
2935 POPBLOCK(cx,PL_curpm);
2940 if (optype == OP_REQUIRE) {
2941 const char* const msg = SvPVx_nolen_const(ERRSV);
2942 const SV * const nsv = cx->blk_eval.old_namesv;
2943 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2945 DIE(aTHX_ "%sCompilation failed in require",
2946 *msg ? msg : "Unknown error\n");
2949 const char* msg = SvPVx_nolen_const(ERRSV);
2951 POPBLOCK(cx,PL_curpm);
2953 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2954 (*msg ? msg : "Unknown error\n"));
2957 const char* msg = SvPVx_nolen_const(ERRSV);
2959 sv_setpv(ERRSV, "Compilation error");
2964 CopLINE_set(&PL_compiling, 0);
2966 *startop = PL_eval_root;
2968 SAVEFREEOP(PL_eval_root);
2970 /* Set the context for this new optree.
2971 * If the last op is an OP_REQUIRE, force scalar context.
2972 * Otherwise, propagate the context from the eval(). */
2973 if (PL_eval_root->op_type == OP_LEAVEEVAL
2974 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2975 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2977 scalar(PL_eval_root);
2978 else if (gimme & G_VOID)
2979 scalarvoid(PL_eval_root);
2980 else if (gimme & G_ARRAY)
2983 scalar(PL_eval_root);
2985 DEBUG_x(dump_eval());
2987 /* Register with debugger: */
2988 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2989 CV *cv = get_cv("DB::postponed", FALSE);
2993 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2995 call_sv((SV*)cv, G_DISCARD);
2999 /* compiled okay, so do it */
3001 CvDEPTH(PL_compcv) = 1;
3002 SP = PL_stack_base + POPMARK; /* pop original mark */
3003 PL_op = saveop; /* The caller may need it. */
3004 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
3006 RETURNOP(PL_eval_start);
3010 S_doopen_pm(pTHX_ const char *name, const char *mode)
3012 #ifndef PERL_DISABLE_PMC
3013 const STRLEN namelen = strlen(name);
3016 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3017 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3018 const char * const pmc = SvPV_nolen(pmcsv);
3021 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3022 fp = PerlIO_open(name, mode);
3025 if (PerlLIO_stat(name, &pmstat) < 0 ||
3026 pmstat.st_mtime < pmcstat.st_mtime)
3028 fp = PerlIO_open(pmc, mode);
3031 fp = PerlIO_open(name, mode);
3034 SvREFCNT_dec(pmcsv);
3037 fp = PerlIO_open(name, mode);
3041 return PerlIO_open(name, mode);
3042 #endif /* !PERL_DISABLE_PMC */
3048 register PERL_CONTEXT *cx;
3052 const char *tryname = Nullch;
3053 SV *namesv = Nullsv;
3055 const I32 gimme = GIMME_V;
3056 PerlIO *tryrsfp = 0;
3057 int filter_has_file = 0;
3058 GV *filter_child_proc = 0;
3059 SV *filter_state = 0;
3066 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3067 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3068 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3069 "v-string in use/require non-portable");
3071 sv = new_version(sv);
3072 if (!sv_derived_from(PL_patchlevel, "version"))
3073 (void *)upg_version(PL_patchlevel);
3074 if ( vcmp(sv,PL_patchlevel) > 0 )
3075 DIE(aTHX_ "Perl v%"SVf" required--this is only v%"SVf", stopped",
3076 vstringify(sv), vstringify(PL_patchlevel));
3080 name = SvPV_const(sv, len);
3081 if (!(name && len > 0 && *name))
3082 DIE(aTHX_ "Null filename used");
3083 TAINT_PROPER("require");
3084 if (PL_op->op_type == OP_REQUIRE &&
3085 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3086 if (*svp != &PL_sv_undef)
3089 DIE(aTHX_ "Compilation failed in require");
3092 /* prepare to compile file */
3094 if (path_is_absolute(name)) {
3096 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3098 #ifdef MACOS_TRADITIONAL
3102 MacPerl_CanonDir(name, newname, 1);
3103 if (path_is_absolute(newname)) {
3105 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3110 AV *ar = GvAVn(PL_incgv);
3114 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3117 namesv = NEWSV(806, 0);
3118 for (i = 0; i <= AvFILL(ar); i++) {
3119 SV *dirsv = *av_fetch(ar, i, TRUE);
3125 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3126 && !sv_isobject(loader))
3128 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3131 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3132 PTR2UV(SvRV(dirsv)), name);
3133 tryname = SvPVX(namesv);
3144 if (sv_isobject(loader))
3145 count = call_method("INC", G_ARRAY);
3147 count = call_sv(loader, G_ARRAY);
3157 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3161 if (SvTYPE(arg) == SVt_PVGV) {
3162 IO *io = GvIO((GV *)arg);
3167 tryrsfp = IoIFP(io);
3168 if (IoTYPE(io) == IoTYPE_PIPE) {
3169 /* reading from a child process doesn't
3170 nest -- when returning from reading
3171 the inner module, the outer one is
3172 unreadable (closed?) I've tried to
3173 save the gv to manage the lifespan of
3174 the pipe, but this didn't help. XXX */
3175 filter_child_proc = (GV *)arg;
3176 (void)SvREFCNT_inc(filter_child_proc);
3179 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3180 PerlIO_close(IoOFP(io));
3192 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3194 (void)SvREFCNT_inc(filter_sub);
3197 filter_state = SP[i];
3198 (void)SvREFCNT_inc(filter_state);
3202 tryrsfp = PerlIO_open("/dev/null",
3218 filter_has_file = 0;
3219 if (filter_child_proc) {
3220 SvREFCNT_dec(filter_child_proc);
3221 filter_child_proc = 0;
3224 SvREFCNT_dec(filter_state);
3228 SvREFCNT_dec(filter_sub);
3233 if (!path_is_absolute(name)
3234 #ifdef MACOS_TRADITIONAL
3235 /* We consider paths of the form :a:b ambiguous and interpret them first
3236 as global then as local
3238 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3241 const char *dir = SvPVx_nolen_const(dirsv);
3242 #ifdef MACOS_TRADITIONAL
3246 MacPerl_CanonDir(name, buf2, 1);
3247 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3251 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3253 sv_setpv(namesv, unixdir);
3254 sv_catpv(namesv, unixname);
3257 if (PL_origfilename[0] &&
3258 PL_origfilename[1] == ':' &&
3259 !(dir[0] && dir[1] == ':'))
3260 Perl_sv_setpvf(aTHX_ namesv,
3265 Perl_sv_setpvf(aTHX_ namesv,
3269 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3273 TAINT_PROPER("require");
3274 tryname = SvPVX(namesv);
3275 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3277 if (tryname[0] == '.' && tryname[1] == '/')
3286 SAVECOPFILE_FREE(&PL_compiling);
3287 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3288 SvREFCNT_dec(namesv);
3290 if (PL_op->op_type == OP_REQUIRE) {
3291 const char *msgstr = name;
3292 if (namesv) { /* did we lookup @INC? */
3293 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3294 SV *dirmsgsv = NEWSV(0, 0);
3295 AV *ar = GvAVn(PL_incgv);
3297 sv_catpvn(msg, " in @INC", 8);
3298 if (instr(SvPVX_const(msg), ".h "))
3299 sv_catpv(msg, " (change .h to .ph maybe?)");
3300 if (instr(SvPVX_const(msg), ".ph "))
3301 sv_catpv(msg, " (did you run h2ph?)");
3302 sv_catpv(msg, " (@INC contains:");
3303 for (i = 0; i <= AvFILL(ar); i++) {
3304 const char *dir = SvPVx_nolen_const(*av_fetch(ar, i, TRUE));
3305 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3306 sv_catsv(msg, dirmsgsv);
3308 sv_catpvn(msg, ")", 1);
3309 SvREFCNT_dec(dirmsgsv);
3310 msgstr = SvPV_nolen(msg);
3312 DIE(aTHX_ "Can't locate %s", msgstr);
3318 SETERRNO(0, SS_NORMAL);
3320 /* Assume success here to prevent recursive requirement. */
3322 /* Check whether a hook in @INC has already filled %INC */
3323 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3324 (void)hv_store(GvHVn(PL_incgv), name, len,
3325 (hook_sv ? SvREFCNT_inc(hook_sv)
3326 : newSVpv(CopFILE(&PL_compiling), 0)),
3332 lex_start(sv_2mortal(newSVpvn("",0)));
3333 SAVEGENERICSV(PL_rsfp_filters);
3334 PL_rsfp_filters = Nullav;
3339 SAVESPTR(PL_compiling.cop_warnings);
3340 if (PL_dowarn & G_WARN_ALL_ON)
3341 PL_compiling.cop_warnings = pWARN_ALL ;
3342 else if (PL_dowarn & G_WARN_ALL_OFF)
3343 PL_compiling.cop_warnings = pWARN_NONE ;
3344 else if (PL_taint_warn)
3345 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3347 PL_compiling.cop_warnings = pWARN_STD ;
3348 SAVESPTR(PL_compiling.cop_io);
3349 PL_compiling.cop_io = Nullsv;
3351 if (filter_sub || filter_child_proc) {
3352 SV *datasv = filter_add(run_user_filter, Nullsv);
3353 IoLINES(datasv) = filter_has_file;
3354 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3355 IoTOP_GV(datasv) = (GV *)filter_state;
3356 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3359 /* switch to eval mode */
3360 PUSHBLOCK(cx, CXt_EVAL, SP);
3361 PUSHEVAL(cx, name, Nullgv);
3362 cx->blk_eval.retop = PL_op->op_next;
3364 SAVECOPLINE(&PL_compiling);
3365 CopLINE_set(&PL_compiling, 0);
3369 /* Store and reset encoding. */
3370 encoding = PL_encoding;
3371 PL_encoding = Nullsv;
3373 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3375 /* Restore encoding. */
3376 PL_encoding = encoding;
3383 return pp_require();
3389 register PERL_CONTEXT *cx;
3391 const I32 gimme = GIMME_V, was = PL_sub_generation;
3392 char tbuf[TYPE_DIGITS(long) + 12];
3393 char *tmpbuf = tbuf;
3400 if (!SvPV_const(sv,len))
3402 TAINT_PROPER("eval");
3408 /* switch to eval mode */
3410 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3411 SV *sv = sv_newmortal();
3412 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3413 (unsigned long)++PL_evalseq,
3414 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3418 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3419 SAVECOPFILE_FREE(&PL_compiling);
3420 CopFILE_set(&PL_compiling, tmpbuf+2);
3421 SAVECOPLINE(&PL_compiling);
3422 CopLINE_set(&PL_compiling, 1);
3423 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3424 deleting the eval's FILEGV from the stash before gv_check() runs
3425 (i.e. before run-time proper). To work around the coredump that
3426 ensues, we always turn GvMULTI_on for any globals that were
3427 introduced within evals. See force_ident(). GSAR 96-10-12 */
3428 safestr = savepv(tmpbuf);
3429 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3431 PL_hints = PL_op->op_targ;
3432 SAVESPTR(PL_compiling.cop_warnings);
3433 if (specialWARN(PL_curcop->cop_warnings))
3434 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3436 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3437 SAVEFREESV(PL_compiling.cop_warnings);
3439 SAVESPTR(PL_compiling.cop_io);
3440 if (specialCopIO(PL_curcop->cop_io))
3441 PL_compiling.cop_io = PL_curcop->cop_io;
3443 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3444 SAVEFREESV(PL_compiling.cop_io);
3446 /* special case: an eval '' executed within the DB package gets lexically
3447 * placed in the first non-DB CV rather than the current CV - this
3448 * allows the debugger to execute code, find lexicals etc, in the
3449 * scope of the code being debugged. Passing &seq gets find_runcv
3450 * to do the dirty work for us */
3451 runcv = find_runcv(&seq);
3453 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3454 PUSHEVAL(cx, 0, Nullgv);
3455 cx->blk_eval.retop = PL_op->op_next;
3457 /* prepare to compile string */
3459 if (PERLDB_LINE && PL_curstash != PL_debstash)
3460 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3462 ret = doeval(gimme, NULL, runcv, seq);
3463 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3464 && ret != PL_op->op_next) { /* Successive compilation. */
3465 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3467 return DOCATCH(ret);
3477 register PERL_CONTEXT *cx;
3479 const U8 save_flags = PL_op -> op_flags;
3484 retop = cx->blk_eval.retop;
3487 if (gimme == G_VOID)
3489 else if (gimme == G_SCALAR) {
3492 if (SvFLAGS(TOPs) & SVs_TEMP)
3495 *MARK = sv_mortalcopy(TOPs);
3499 *MARK = &PL_sv_undef;
3504 /* in case LEAVE wipes old return values */
3505 for (mark = newsp + 1; mark <= SP; mark++) {
3506 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3507 *mark = sv_mortalcopy(*mark);
3508 TAINT_NOT; /* Each item is independent */
3512 PL_curpm = newpm; /* Don't pop $1 et al till now */
3515 assert(CvDEPTH(PL_compcv) == 1);
3517 CvDEPTH(PL_compcv) = 0;
3520 if (optype == OP_REQUIRE &&
3521 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3523 /* Unassume the success we assumed earlier. */
3524 SV *nsv = cx->blk_eval.old_namesv;
3525 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3526 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3527 /* die_where() did LEAVE, or we won't be here */
3531 if (!(save_flags & OPf_SPECIAL))
3532 sv_setpvn(ERRSV,"",0);
3541 register PERL_CONTEXT *cx;
3542 const I32 gimme = GIMME_V;
3547 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3549 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3551 PL_in_eval = EVAL_INEVAL;
3552 sv_setpvn(ERRSV,"",0);
3554 return DOCATCH(PL_op->op_next);
3564 register PERL_CONTEXT *cx;
3571 if (gimme == G_VOID)
3573 else if (gimme == G_SCALAR) {
3576 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3579 *MARK = sv_mortalcopy(TOPs);
3583 *MARK = &PL_sv_undef;
3588 /* in case LEAVE wipes old return values */
3589 for (mark = newsp + 1; mark <= SP; mark++) {
3590 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3591 *mark = sv_mortalcopy(*mark);
3592 TAINT_NOT; /* Each item is independent */
3596 PL_curpm = newpm; /* Don't pop $1 et al till now */
3599 sv_setpvn(ERRSV,"",0);
3604 S_doparseform(pTHX_ SV *sv)
3607 register char *s = SvPV_force(sv, len);
3608 register char *send = s + len;
3609 register char *base = Nullch;
3610 register I32 skipspaces = 0;
3611 bool noblank = FALSE;
3612 bool repeat = FALSE;
3613 bool postspace = FALSE;
3619 bool unchopnum = FALSE;
3620 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3623 Perl_croak(aTHX_ "Null picture in formline");
3625 /* estimate the buffer size needed */
3626 for (base = s; s <= send; s++) {
3627 if (*s == '\n' || *s == '@' || *s == '^')
3633 New(804, fops, maxops, U32);
3638 *fpc++ = FF_LINEMARK;
3639 noblank = repeat = FALSE;
3657 case ' ': case '\t':
3664 } /* else FALL THROUGH */
3672 *fpc++ = FF_LITERAL;
3680 *fpc++ = (U16)skipspaces;
3684 *fpc++ = FF_NEWLINE;
3688 arg = fpc - linepc + 1;
3695 *fpc++ = FF_LINEMARK;
3696 noblank = repeat = FALSE;
3705 ischop = s[-1] == '^';
3711 arg = (s - base) - 1;
3713 *fpc++ = FF_LITERAL;
3721 *fpc++ = 2; /* skip the @* or ^* */
3723 *fpc++ = FF_LINESNGL;
3726 *fpc++ = FF_LINEGLOB;
3728 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3729 arg = ischop ? 512 : 0;
3734 const char * const f = ++s;
3737 arg |= 256 + (s - f);
3739 *fpc++ = s - base; /* fieldsize for FETCH */
3740 *fpc++ = FF_DECIMAL;
3742 unchopnum |= ! ischop;
3744 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3745 arg = ischop ? 512 : 0;
3747 s++; /* skip the '0' first */
3751 const char * const f = ++s;
3754 arg |= 256 + (s - f);
3756 *fpc++ = s - base; /* fieldsize for FETCH */
3757 *fpc++ = FF_0DECIMAL;
3759 unchopnum |= ! ischop;
3763 bool ismore = FALSE;
3766 while (*++s == '>') ;
3767 prespace = FF_SPACE;
3769 else if (*s == '|') {
3770 while (*++s == '|') ;
3771 prespace = FF_HALFSPACE;
3776 while (*++s == '<') ;
3779 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3783 *fpc++ = s - base; /* fieldsize for FETCH */
3785 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3788 *fpc++ = (U16)prespace;
3802 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3804 { /* need to jump to the next word */
3806 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3807 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3808 s = SvPVX(sv) + SvCUR(sv) + z;
3810 Copy(fops, s, arg, U32);
3812 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3815 if (unchopnum && repeat)
3816 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3822 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3824 /* Can value be printed in fldsize chars, using %*.*f ? */
3828 int intsize = fldsize - (value < 0 ? 1 : 0);
3835 while (intsize--) pwr *= 10.0;
3836 while (frcsize--) eps /= 10.0;
3839 if (value + eps >= pwr)
3842 if (value - eps <= -pwr)
3849 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3852 SV *datasv = FILTER_DATA(idx);
3853 const int filter_has_file = IoLINES(datasv);
3854 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3855 SV *filter_state = (SV *)IoTOP_GV(datasv);
3856 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3859 /* I was having segfault trouble under Linux 2.2.5 after a
3860 parse error occured. (Had to hack around it with a test
3861 for PL_error_count == 0.) Solaris doesn't segfault --
3862 not sure where the trouble is yet. XXX */
3864 if (filter_has_file) {
3865 len = FILTER_READ(idx+1, buf_sv, maxlen);
3868 if (filter_sub && len >= 0) {
3879 PUSHs(sv_2mortal(newSViv(maxlen)));
3881 PUSHs(filter_state);
3884 count = call_sv(filter_sub, G_SCALAR);
3900 IoLINES(datasv) = 0;
3901 if (filter_child_proc) {
3902 SvREFCNT_dec(filter_child_proc);
3903 IoFMT_GV(datasv) = Nullgv;
3906 SvREFCNT_dec(filter_state);
3907 IoTOP_GV(datasv) = Nullgv;
3910 SvREFCNT_dec(filter_sub);
3911 IoBOTTOM_GV(datasv) = Nullgv;
3913 filter_del(run_user_filter);
3919 /* perhaps someone can come up with a better name for
3920 this? it is not really "absolute", per se ... */
3922 S_path_is_absolute(pTHX_ const char *name)
3924 if (PERL_FILE_IS_ABSOLUTE(name)
3925 #ifdef MACOS_TRADITIONAL
3928 || (*name == '.' && (name[1] == '/' ||
3929 (name[1] == '.' && name[2] == '/'))))
3940 * c-indentation-style: bsd
3942 * indent-tabs-mode: t
3945 * ex: set ts=8 sts=4 sw=4 noet: