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);
1141 SvPV_force_nolen(sv);
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);
1834 cx->blk_loop.iterlval = newSVsv(sv);
1835 (void) SvPV_force_nolen(cx->blk_loop.iterlval);
1836 (void) SvPV_nolen_const(right);
1839 else if (PL_op->op_private & OPpITER_REVERSED) {
1840 cx->blk_loop.itermax = -1;
1841 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1846 cx->blk_loop.iterary = PL_curstack;
1847 AvFILLp(PL_curstack) = SP - PL_stack_base;
1848 if (PL_op->op_private & OPpITER_REVERSED) {
1849 cx->blk_loop.itermax = MARK - PL_stack_base;
1850 cx->blk_loop.iterix = cx->blk_oldsp;
1853 cx->blk_loop.iterix = MARK - PL_stack_base;
1863 register PERL_CONTEXT *cx;
1864 const I32 gimme = GIMME_V;
1870 PUSHBLOCK(cx, CXt_LOOP, SP);
1871 PUSHLOOP(cx, 0, SP);
1879 register PERL_CONTEXT *cx;
1886 assert(CxTYPE(cx) == CXt_LOOP);
1888 newsp = PL_stack_base + cx->blk_loop.resetsp;
1891 if (gimme == G_VOID)
1893 else if (gimme == G_SCALAR) {
1895 *++newsp = sv_mortalcopy(*SP);
1897 *++newsp = &PL_sv_undef;
1901 *++newsp = sv_mortalcopy(*++mark);
1902 TAINT_NOT; /* Each item is independent */
1908 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1909 PL_curpm = newpm; /* ... and pop $1 et al */
1921 register PERL_CONTEXT *cx;
1922 bool popsub2 = FALSE;
1923 bool clear_errsv = FALSE;
1931 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1932 if (cxstack_ix == PL_sortcxix
1933 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1935 if (cxstack_ix > PL_sortcxix)
1936 dounwind(PL_sortcxix);
1937 AvARRAY(PL_curstack)[1] = *SP;
1938 PL_stack_sp = PL_stack_base + 1;
1943 cxix = dopoptosub(cxstack_ix);
1945 DIE(aTHX_ "Can't return outside a subroutine");
1946 if (cxix < cxstack_ix)
1950 switch (CxTYPE(cx)) {
1953 retop = cx->blk_sub.retop;
1954 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1957 if (!(PL_in_eval & EVAL_KEEPERR))
1960 retop = cx->blk_eval.retop;
1964 if (optype == OP_REQUIRE &&
1965 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1967 /* Unassume the success we assumed earlier. */
1968 SV *nsv = cx->blk_eval.old_namesv;
1969 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
1970 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1975 retop = cx->blk_sub.retop;
1978 DIE(aTHX_ "panic: return");
1982 if (gimme == G_SCALAR) {
1985 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1987 *++newsp = SvREFCNT_inc(*SP);
1992 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1994 *++newsp = sv_mortalcopy(sv);
1999 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2002 *++newsp = sv_mortalcopy(*SP);
2005 *++newsp = &PL_sv_undef;
2007 else if (gimme == G_ARRAY) {
2008 while (++MARK <= SP) {
2009 *++newsp = (popsub2 && SvTEMP(*MARK))
2010 ? *MARK : sv_mortalcopy(*MARK);
2011 TAINT_NOT; /* Each item is independent */
2014 PL_stack_sp = newsp;
2017 /* Stack values are safe: */
2020 POPSUB(cx,sv); /* release CV and @_ ... */
2024 PL_curpm = newpm; /* ... and pop $1 et al */
2028 sv_setpvn(ERRSV,"",0);
2036 register PERL_CONTEXT *cx;
2046 if (PL_op->op_flags & OPf_SPECIAL) {
2047 cxix = dopoptoloop(cxstack_ix);
2049 DIE(aTHX_ "Can't \"last\" outside a loop block");
2052 cxix = dopoptolabel(cPVOP->op_pv);
2054 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2056 if (cxix < cxstack_ix)
2060 cxstack_ix++; /* temporarily protect top context */
2062 switch (CxTYPE(cx)) {
2065 newsp = PL_stack_base + cx->blk_loop.resetsp;
2066 nextop = cx->blk_loop.last_op->op_next;
2070 nextop = cx->blk_sub.retop;
2074 nextop = cx->blk_eval.retop;
2078 nextop = cx->blk_sub.retop;
2081 DIE(aTHX_ "panic: last");
2085 if (gimme == G_SCALAR) {
2087 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2088 ? *SP : sv_mortalcopy(*SP);
2090 *++newsp = &PL_sv_undef;
2092 else if (gimme == G_ARRAY) {
2093 while (++MARK <= SP) {
2094 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2095 ? *MARK : sv_mortalcopy(*MARK);
2096 TAINT_NOT; /* Each item is independent */
2104 /* Stack values are safe: */
2107 POPLOOP(cx); /* release loop vars ... */
2111 POPSUB(cx,sv); /* release CV and @_ ... */
2114 PL_curpm = newpm; /* ... and pop $1 et al */
2124 register PERL_CONTEXT *cx;
2127 if (PL_op->op_flags & OPf_SPECIAL) {
2128 cxix = dopoptoloop(cxstack_ix);
2130 DIE(aTHX_ "Can't \"next\" outside a loop block");
2133 cxix = dopoptolabel(cPVOP->op_pv);
2135 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2137 if (cxix < cxstack_ix)
2140 /* clear off anything above the scope we're re-entering, but
2141 * save the rest until after a possible continue block */
2142 inner = PL_scopestack_ix;
2144 if (PL_scopestack_ix < inner)
2145 leave_scope(PL_scopestack[PL_scopestack_ix]);
2146 PL_curcop = cx->blk_oldcop;
2147 return cx->blk_loop.next_op;
2154 register PERL_CONTEXT *cx;
2158 if (PL_op->op_flags & OPf_SPECIAL) {
2159 cxix = dopoptoloop(cxstack_ix);
2161 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2164 cxix = dopoptolabel(cPVOP->op_pv);
2166 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2168 if (cxix < cxstack_ix)
2171 redo_op = cxstack[cxix].blk_loop.redo_op;
2172 if (redo_op->op_type == OP_ENTER) {
2173 /* pop one less context to avoid $x being freed in while (my $x..) */
2175 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2176 redo_op = redo_op->op_next;
2180 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2181 LEAVE_SCOPE(oldsave);
2183 PL_curcop = cx->blk_oldcop;
2188 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2192 static const char too_deep[] = "Target of goto is too deeply nested";
2195 Perl_croak(aTHX_ too_deep);
2196 if (o->op_type == OP_LEAVE ||
2197 o->op_type == OP_SCOPE ||
2198 o->op_type == OP_LEAVELOOP ||
2199 o->op_type == OP_LEAVESUB ||
2200 o->op_type == OP_LEAVETRY)
2202 *ops++ = cUNOPo->op_first;
2204 Perl_croak(aTHX_ too_deep);
2207 if (o->op_flags & OPf_KIDS) {
2208 /* First try all the kids at this level, since that's likeliest. */
2209 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2210 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2211 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2214 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2215 if (kid == PL_lastgotoprobe)
2217 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2220 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2221 ops[-1]->op_type == OP_DBSTATE)
2226 if ((o = dofindlabel(kid, label, ops, oplimit)))
2245 register PERL_CONTEXT *cx;
2246 #define GOTO_DEPTH 64
2247 OP *enterops[GOTO_DEPTH];
2248 const char *label = 0;
2249 const bool do_dump = (PL_op->op_type == OP_DUMP);
2250 static const char must_have_label[] = "goto must have label";
2252 if (PL_op->op_flags & OPf_STACKED) {
2255 /* This egregious kludge implements goto &subroutine */
2256 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2258 register PERL_CONTEXT *cx;
2259 CV* cv = (CV*)SvRV(sv);
2266 if (!CvROOT(cv) && !CvXSUB(cv)) {
2267 const GV * const gv = CvGV(cv);
2271 /* autoloaded stub? */
2272 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2274 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2275 GvNAMELEN(gv), FALSE);
2276 if (autogv && (cv = GvCV(autogv)))
2278 tmpstr = sv_newmortal();
2279 gv_efullname3(tmpstr, gv, Nullch);
2280 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2282 DIE(aTHX_ "Goto undefined subroutine");
2285 /* First do some returnish stuff. */
2286 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2288 cxix = dopoptosub(cxstack_ix);
2290 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2291 if (cxix < cxstack_ix)
2295 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2296 if (CxTYPE(cx) == CXt_EVAL) {
2298 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2300 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2302 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2303 /* put @_ back onto stack */
2304 AV* av = cx->blk_sub.argarray;
2306 items = AvFILLp(av) + 1;
2307 EXTEND(SP, items+1); /* @_ could have been extended. */
2308 Copy(AvARRAY(av), SP + 1, items, SV*);
2309 SvREFCNT_dec(GvAV(PL_defgv));
2310 GvAV(PL_defgv) = cx->blk_sub.savearray;
2312 /* abandon @_ if it got reified */
2317 av_extend(av, items-1);
2319 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2322 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2324 av = GvAV(PL_defgv);
2325 items = AvFILLp(av) + 1;
2326 EXTEND(SP, items+1); /* @_ could have been extended. */
2327 Copy(AvARRAY(av), SP + 1, items, SV*);
2331 if (CxTYPE(cx) == CXt_SUB &&
2332 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2333 SvREFCNT_dec(cx->blk_sub.cv);
2334 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2335 LEAVE_SCOPE(oldsave);
2337 /* Now do some callish stuff. */
2339 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2341 OP* retop = cx->blk_sub.retop;
2344 for (index=0; index<items; index++)
2345 sv_2mortal(SP[-index]);
2347 #ifdef PERL_XSUB_OLDSTYLE
2348 if (CvOLDSTYLE(cv)) {
2349 I32 (*fp3)(int,int,int);
2354 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2355 items = (*fp3)(CvXSUBANY(cv).any_i32,
2356 mark - PL_stack_base + 1,
2358 SP = PL_stack_base + items;
2361 #endif /* PERL_XSUB_OLDSTYLE */
2366 /* XS subs don't have a CxSUB, so pop it */
2367 POPBLOCK(cx, PL_curpm);
2368 /* Push a mark for the start of arglist */
2371 (void)(*CvXSUB(cv))(aTHX_ cv);
2377 AV* padlist = CvPADLIST(cv);
2378 if (CxTYPE(cx) == CXt_EVAL) {
2379 PL_in_eval = cx->blk_eval.old_in_eval;
2380 PL_eval_root = cx->blk_eval.old_eval_root;
2381 cx->cx_type = CXt_SUB;
2382 cx->blk_sub.hasargs = 0;
2384 cx->blk_sub.cv = cv;
2385 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2388 if (CvDEPTH(cv) < 2)
2389 (void)SvREFCNT_inc(cv);
2391 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2392 sub_crush_depth(cv);
2393 pad_push(padlist, CvDEPTH(cv));
2395 PAD_SET_CUR(padlist, CvDEPTH(cv));
2396 if (cx->blk_sub.hasargs)
2398 AV* av = (AV*)PAD_SVl(0);
2401 cx->blk_sub.savearray = GvAV(PL_defgv);
2402 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2403 CX_CURPAD_SAVE(cx->blk_sub);
2404 cx->blk_sub.argarray = av;
2406 if (items >= AvMAX(av) + 1) {
2408 if (AvARRAY(av) != ary) {
2409 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2410 SvPV_set(av, (char*)ary);
2412 if (items >= AvMAX(av) + 1) {
2413 AvMAX(av) = items - 1;
2414 Renew(ary,items+1,SV*);
2416 SvPV_set(av, (char*)ary);
2420 Copy(mark,AvARRAY(av),items,SV*);
2421 AvFILLp(av) = items - 1;
2422 assert(!AvREAL(av));
2424 /* transfer 'ownership' of refcnts to new @_ */
2434 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2436 * We do not care about using sv to call CV;
2437 * it's for informational purposes only.
2439 SV *sv = GvSV(PL_DBsub);
2443 if (PERLDB_SUB_NN) {
2444 int type = SvTYPE(sv);
2445 if (type < SVt_PVIV && type != SVt_IV)
2446 sv_upgrade(sv, SVt_PVIV);
2448 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2450 gv_efullname3(sv, CvGV(cv), Nullch);
2453 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2454 PUSHMARK( PL_stack_sp );
2455 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2459 RETURNOP(CvSTART(cv));
2463 label = SvPV_nolen_const(sv);
2464 if (!(do_dump || *label))
2465 DIE(aTHX_ must_have_label);
2468 else if (PL_op->op_flags & OPf_SPECIAL) {
2470 DIE(aTHX_ must_have_label);
2473 label = cPVOP->op_pv;
2475 if (label && *label) {
2477 bool leaving_eval = FALSE;
2478 bool in_block = FALSE;
2479 PERL_CONTEXT *last_eval_cx = 0;
2483 PL_lastgotoprobe = 0;
2485 for (ix = cxstack_ix; ix >= 0; ix--) {
2487 switch (CxTYPE(cx)) {
2489 leaving_eval = TRUE;
2490 if (!CxTRYBLOCK(cx)) {
2491 gotoprobe = (last_eval_cx ?
2492 last_eval_cx->blk_eval.old_eval_root :
2497 /* else fall through */
2499 gotoprobe = cx->blk_oldcop->op_sibling;
2505 gotoprobe = cx->blk_oldcop->op_sibling;
2508 gotoprobe = PL_main_root;
2511 if (CvDEPTH(cx->blk_sub.cv)) {
2512 gotoprobe = CvROOT(cx->blk_sub.cv);
2518 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2521 DIE(aTHX_ "panic: goto");
2522 gotoprobe = PL_main_root;
2526 retop = dofindlabel(gotoprobe, label,
2527 enterops, enterops + GOTO_DEPTH);
2531 PL_lastgotoprobe = gotoprobe;
2534 DIE(aTHX_ "Can't find label %s", label);
2536 /* if we're leaving an eval, check before we pop any frames
2537 that we're not going to punt, otherwise the error
2540 if (leaving_eval && *enterops && enterops[1]) {
2542 for (i = 1; enterops[i]; i++)
2543 if (enterops[i]->op_type == OP_ENTERITER)
2544 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2547 /* pop unwanted frames */
2549 if (ix < cxstack_ix) {
2556 oldsave = PL_scopestack[PL_scopestack_ix];
2557 LEAVE_SCOPE(oldsave);
2560 /* push wanted frames */
2562 if (*enterops && enterops[1]) {
2564 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2565 for (; enterops[ix]; ix++) {
2566 PL_op = enterops[ix];
2567 /* Eventually we may want to stack the needed arguments
2568 * for each op. For now, we punt on the hard ones. */
2569 if (PL_op->op_type == OP_ENTERITER)
2570 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2571 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2579 if (!retop) retop = PL_main_start;
2581 PL_restartop = retop;
2582 PL_do_undump = TRUE;
2586 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2587 PL_do_undump = FALSE;
2603 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2605 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2608 PL_exit_flags |= PERL_EXIT_EXPECTED;
2610 PUSHs(&PL_sv_undef);
2618 const NV value = SvNVx(GvSV(cCOP->cop_gv));
2619 register I32 match = I_32(value);
2622 if (((NV)match) > value)
2623 --match; /* was fractional--truncate other way */
2625 match -= cCOP->uop.scop.scop_offset;
2628 else if (match > cCOP->uop.scop.scop_max)
2629 match = cCOP->uop.scop.scop_max;
2630 PL_op = cCOP->uop.scop.scop_next[match];
2640 PL_op = PL_op->op_next; /* can't assume anything */
2642 match = *(SvPVx_nolen_const(GvSV(cCOP->cop_gv))) & 255;
2643 match -= cCOP->uop.scop.scop_offset;
2646 else if (match > cCOP->uop.scop.scop_max)
2647 match = cCOP->uop.scop.scop_max;
2648 PL_op = cCOP->uop.scop.scop_next[match];
2657 S_save_lines(pTHX_ AV *array, SV *sv)
2659 const char *s = SvPVX_const(sv);
2660 const char *send = SvPVX_const(sv) + SvCUR(sv);
2663 while (s && s < send) {
2665 SV *tmpstr = NEWSV(85,0);
2667 sv_upgrade(tmpstr, SVt_PVMG);
2668 t = strchr(s, '\n');
2674 sv_setpvn(tmpstr, s, t - s);
2675 av_store(array, line++, tmpstr);
2681 S_docatch_body(pTHX)
2688 S_docatch(pTHX_ OP *o)
2691 OP * const oldop = PL_op;
2695 assert(CATCH_GET == TRUE);
2702 assert(cxstack_ix >= 0);
2703 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2704 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2709 /* die caught by an inner eval - continue inner loop */
2711 /* NB XXX we rely on the old popped CxEVAL still being at the top
2712 * of the stack; the way die_where() currently works, this
2713 * assumption is valid. In theory The cur_top_env value should be
2714 * returned in another global, the way retop (aka PL_restartop)
2716 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2719 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2721 PL_op = PL_restartop;
2738 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2739 /* sv Text to convert to OP tree. */
2740 /* startop op_free() this to undo. */
2741 /* code Short string id of the caller. */
2743 dVAR; dSP; /* Make POPBLOCK work. */
2746 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2750 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2751 char *tmpbuf = tbuf;
2754 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2759 /* switch to eval mode */
2761 if (IN_PERL_COMPILETIME) {
2762 SAVECOPSTASH_FREE(&PL_compiling);
2763 CopSTASH_set(&PL_compiling, PL_curstash);
2765 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2766 SV *sv = sv_newmortal();
2767 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2768 code, (unsigned long)++PL_evalseq,
2769 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2773 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2774 SAVECOPFILE_FREE(&PL_compiling);
2775 CopFILE_set(&PL_compiling, tmpbuf+2);
2776 SAVECOPLINE(&PL_compiling);
2777 CopLINE_set(&PL_compiling, 1);
2778 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2779 deleting the eval's FILEGV from the stash before gv_check() runs
2780 (i.e. before run-time proper). To work around the coredump that
2781 ensues, we always turn GvMULTI_on for any globals that were
2782 introduced within evals. See force_ident(). GSAR 96-10-12 */
2783 safestr = savepv(tmpbuf);
2784 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2786 #ifdef OP_IN_REGISTER
2792 /* we get here either during compilation, or via pp_regcomp at runtime */
2793 runtime = IN_PERL_RUNTIME;
2795 runcv = find_runcv(NULL);
2798 PL_op->op_type = OP_ENTEREVAL;
2799 PL_op->op_flags = 0; /* Avoid uninit warning. */
2800 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2801 PUSHEVAL(cx, 0, Nullgv);
2804 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2806 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2807 POPBLOCK(cx,PL_curpm);
2810 (*startop)->op_type = OP_NULL;
2811 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2813 /* XXX DAPM do this properly one year */
2814 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2816 if (IN_PERL_COMPILETIME)
2817 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2818 #ifdef OP_IN_REGISTER
2826 =for apidoc find_runcv
2828 Locate the CV corresponding to the currently executing sub or eval.
2829 If db_seqp is non_null, skip CVs that are in the DB package and populate
2830 *db_seqp with the cop sequence number at the point that the DB:: code was
2831 entered. (allows debuggers to eval in the scope of the breakpoint rather
2832 than in in the scope of the debugger itself).
2838 Perl_find_runcv(pTHX_ U32 *db_seqp)
2843 *db_seqp = PL_curcop->cop_seq;
2844 for (si = PL_curstackinfo; si; si = si->si_prev) {
2846 for (ix = si->si_cxix; ix >= 0; ix--) {
2847 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2848 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2849 CV *cv = cx->blk_sub.cv;
2850 /* skip DB:: code */
2851 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2852 *db_seqp = cx->blk_oldcop->cop_seq;
2857 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2865 /* Compile a require/do, an eval '', or a /(?{...})/.
2866 * In the last case, startop is non-null, and contains the address of
2867 * a pointer that should be set to the just-compiled code.
2868 * outside is the lexically enclosing CV (if any) that invoked us.
2871 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2873 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2878 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2879 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2884 SAVESPTR(PL_compcv);
2885 PL_compcv = (CV*)NEWSV(1104,0);
2886 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2887 CvEVAL_on(PL_compcv);
2888 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2889 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2891 CvOUTSIDE_SEQ(PL_compcv) = seq;
2892 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2894 /* set up a scratch pad */
2896 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2899 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2901 /* make sure we compile in the right package */
2903 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2904 SAVESPTR(PL_curstash);
2905 PL_curstash = CopSTASH(PL_curcop);
2907 SAVESPTR(PL_beginav);
2908 PL_beginav = newAV();
2909 SAVEFREESV(PL_beginav);
2910 SAVEI32(PL_error_count);
2912 /* try to compile it */
2914 PL_eval_root = Nullop;
2916 PL_curcop = &PL_compiling;
2917 PL_curcop->cop_arybase = 0;
2918 if (saveop && saveop->op_flags & OPf_SPECIAL)
2919 PL_in_eval |= EVAL_KEEPERR;
2921 sv_setpvn(ERRSV,"",0);
2922 if (yyparse() || PL_error_count || !PL_eval_root) {
2923 SV **newsp; /* Used by POPBLOCK. */
2924 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2925 I32 optype = 0; /* Might be reset by POPEVAL. */
2929 op_free(PL_eval_root);
2930 PL_eval_root = Nullop;
2932 SP = PL_stack_base + POPMARK; /* pop original mark */
2934 POPBLOCK(cx,PL_curpm);
2939 if (optype == OP_REQUIRE) {
2940 const char* const msg = SvPVx_nolen_const(ERRSV);
2941 const SV * const nsv = cx->blk_eval.old_namesv;
2942 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2944 DIE(aTHX_ "%sCompilation failed in require",
2945 *msg ? msg : "Unknown error\n");
2948 const char* msg = SvPVx_nolen_const(ERRSV);
2950 POPBLOCK(cx,PL_curpm);
2952 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2953 (*msg ? msg : "Unknown error\n"));
2956 const char* msg = SvPVx_nolen_const(ERRSV);
2958 sv_setpv(ERRSV, "Compilation error");
2963 CopLINE_set(&PL_compiling, 0);
2965 *startop = PL_eval_root;
2967 SAVEFREEOP(PL_eval_root);
2969 /* Set the context for this new optree.
2970 * If the last op is an OP_REQUIRE, force scalar context.
2971 * Otherwise, propagate the context from the eval(). */
2972 if (PL_eval_root->op_type == OP_LEAVEEVAL
2973 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2974 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2976 scalar(PL_eval_root);
2977 else if (gimme & G_VOID)
2978 scalarvoid(PL_eval_root);
2979 else if (gimme & G_ARRAY)
2982 scalar(PL_eval_root);
2984 DEBUG_x(dump_eval());
2986 /* Register with debugger: */
2987 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2988 CV *cv = get_cv("DB::postponed", FALSE);
2992 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2994 call_sv((SV*)cv, G_DISCARD);
2998 /* compiled okay, so do it */
3000 CvDEPTH(PL_compcv) = 1;
3001 SP = PL_stack_base + POPMARK; /* pop original mark */
3002 PL_op = saveop; /* The caller may need it. */
3003 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
3005 RETURNOP(PL_eval_start);
3009 S_doopen_pm(pTHX_ const char *name, const char *mode)
3011 #ifndef PERL_DISABLE_PMC
3012 const STRLEN namelen = strlen(name);
3015 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3016 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3017 const char * const pmc = SvPV_nolen(pmcsv);
3020 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3021 fp = PerlIO_open(name, mode);
3024 if (PerlLIO_stat(name, &pmstat) < 0 ||
3025 pmstat.st_mtime < pmcstat.st_mtime)
3027 fp = PerlIO_open(pmc, mode);
3030 fp = PerlIO_open(name, mode);
3033 SvREFCNT_dec(pmcsv);
3036 fp = PerlIO_open(name, mode);
3040 return PerlIO_open(name, mode);
3041 #endif /* !PERL_DISABLE_PMC */
3047 register PERL_CONTEXT *cx;
3051 const char *tryname = Nullch;
3052 SV *namesv = Nullsv;
3054 const I32 gimme = GIMME_V;
3055 PerlIO *tryrsfp = 0;
3056 int filter_has_file = 0;
3057 GV *filter_child_proc = 0;
3058 SV *filter_state = 0;
3065 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3066 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3067 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3068 "v-string in use/require non-portable");
3070 sv = new_version(sv);
3071 if (!sv_derived_from(PL_patchlevel, "version"))
3072 (void *)upg_version(PL_patchlevel);
3073 if ( vcmp(sv,PL_patchlevel) > 0 )
3074 DIE(aTHX_ "Perl v%"SVf" required--this is only v%"SVf", stopped",
3075 vstringify(sv), vstringify(PL_patchlevel));
3079 name = SvPV_const(sv, len);
3080 if (!(name && len > 0 && *name))
3081 DIE(aTHX_ "Null filename used");
3082 TAINT_PROPER("require");
3083 if (PL_op->op_type == OP_REQUIRE &&
3084 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3085 if (*svp != &PL_sv_undef)
3088 DIE(aTHX_ "Compilation failed in require");
3091 /* prepare to compile file */
3093 if (path_is_absolute(name)) {
3095 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3097 #ifdef MACOS_TRADITIONAL
3101 MacPerl_CanonDir(name, newname, 1);
3102 if (path_is_absolute(newname)) {
3104 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3109 AV *ar = GvAVn(PL_incgv);
3113 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3116 namesv = NEWSV(806, 0);
3117 for (i = 0; i <= AvFILL(ar); i++) {
3118 SV *dirsv = *av_fetch(ar, i, TRUE);
3124 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3125 && !sv_isobject(loader))
3127 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3130 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3131 PTR2UV(SvRV(dirsv)), name);
3132 tryname = SvPVX(namesv);
3143 if (sv_isobject(loader))
3144 count = call_method("INC", G_ARRAY);
3146 count = call_sv(loader, G_ARRAY);
3156 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3160 if (SvTYPE(arg) == SVt_PVGV) {
3161 IO *io = GvIO((GV *)arg);
3166 tryrsfp = IoIFP(io);
3167 if (IoTYPE(io) == IoTYPE_PIPE) {
3168 /* reading from a child process doesn't
3169 nest -- when returning from reading
3170 the inner module, the outer one is
3171 unreadable (closed?) I've tried to
3172 save the gv to manage the lifespan of
3173 the pipe, but this didn't help. XXX */
3174 filter_child_proc = (GV *)arg;
3175 (void)SvREFCNT_inc(filter_child_proc);
3178 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3179 PerlIO_close(IoOFP(io));
3191 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3193 (void)SvREFCNT_inc(filter_sub);
3196 filter_state = SP[i];
3197 (void)SvREFCNT_inc(filter_state);
3201 tryrsfp = PerlIO_open("/dev/null",
3217 filter_has_file = 0;
3218 if (filter_child_proc) {
3219 SvREFCNT_dec(filter_child_proc);
3220 filter_child_proc = 0;
3223 SvREFCNT_dec(filter_state);
3227 SvREFCNT_dec(filter_sub);
3232 if (!path_is_absolute(name)
3233 #ifdef MACOS_TRADITIONAL
3234 /* We consider paths of the form :a:b ambiguous and interpret them first
3235 as global then as local
3237 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3240 const char *dir = SvPVx_nolen_const(dirsv);
3241 #ifdef MACOS_TRADITIONAL
3245 MacPerl_CanonDir(name, buf2, 1);
3246 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3250 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3252 sv_setpv(namesv, unixdir);
3253 sv_catpv(namesv, unixname);
3256 if (PL_origfilename[0] &&
3257 PL_origfilename[1] == ':' &&
3258 !(dir[0] && dir[1] == ':'))
3259 Perl_sv_setpvf(aTHX_ namesv,
3264 Perl_sv_setpvf(aTHX_ namesv,
3268 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3272 TAINT_PROPER("require");
3273 tryname = SvPVX(namesv);
3274 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3276 if (tryname[0] == '.' && tryname[1] == '/')
3285 SAVECOPFILE_FREE(&PL_compiling);
3286 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3287 SvREFCNT_dec(namesv);
3289 if (PL_op->op_type == OP_REQUIRE) {
3290 const char *msgstr = name;
3291 if (namesv) { /* did we lookup @INC? */
3292 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3293 SV *dirmsgsv = NEWSV(0, 0);
3294 AV *ar = GvAVn(PL_incgv);
3296 sv_catpvn(msg, " in @INC", 8);
3297 if (instr(SvPVX_const(msg), ".h "))
3298 sv_catpv(msg, " (change .h to .ph maybe?)");
3299 if (instr(SvPVX_const(msg), ".ph "))
3300 sv_catpv(msg, " (did you run h2ph?)");
3301 sv_catpv(msg, " (@INC contains:");
3302 for (i = 0; i <= AvFILL(ar); i++) {
3303 const char *dir = SvPVx_nolen_const(*av_fetch(ar, i, TRUE));
3304 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3305 sv_catsv(msg, dirmsgsv);
3307 sv_catpvn(msg, ")", 1);
3308 SvREFCNT_dec(dirmsgsv);
3309 msgstr = SvPV_nolen(msg);
3311 DIE(aTHX_ "Can't locate %s", msgstr);
3317 SETERRNO(0, SS_NORMAL);
3319 /* Assume success here to prevent recursive requirement. */
3321 /* Check whether a hook in @INC has already filled %INC */
3322 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3323 (void)hv_store(GvHVn(PL_incgv), name, len,
3324 (hook_sv ? SvREFCNT_inc(hook_sv)
3325 : newSVpv(CopFILE(&PL_compiling), 0)),
3331 lex_start(sv_2mortal(newSVpvn("",0)));
3332 SAVEGENERICSV(PL_rsfp_filters);
3333 PL_rsfp_filters = Nullav;
3338 SAVESPTR(PL_compiling.cop_warnings);
3339 if (PL_dowarn & G_WARN_ALL_ON)
3340 PL_compiling.cop_warnings = pWARN_ALL ;
3341 else if (PL_dowarn & G_WARN_ALL_OFF)
3342 PL_compiling.cop_warnings = pWARN_NONE ;
3343 else if (PL_taint_warn)
3344 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3346 PL_compiling.cop_warnings = pWARN_STD ;
3347 SAVESPTR(PL_compiling.cop_io);
3348 PL_compiling.cop_io = Nullsv;
3350 if (filter_sub || filter_child_proc) {
3351 SV *datasv = filter_add(run_user_filter, Nullsv);
3352 IoLINES(datasv) = filter_has_file;
3353 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3354 IoTOP_GV(datasv) = (GV *)filter_state;
3355 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3358 /* switch to eval mode */
3359 PUSHBLOCK(cx, CXt_EVAL, SP);
3360 PUSHEVAL(cx, name, Nullgv);
3361 cx->blk_eval.retop = PL_op->op_next;
3363 SAVECOPLINE(&PL_compiling);
3364 CopLINE_set(&PL_compiling, 0);
3368 /* Store and reset encoding. */
3369 encoding = PL_encoding;
3370 PL_encoding = Nullsv;
3372 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3374 /* Restore encoding. */
3375 PL_encoding = encoding;
3382 return pp_require();
3388 register PERL_CONTEXT *cx;
3390 const I32 gimme = GIMME_V, was = PL_sub_generation;
3391 char tbuf[TYPE_DIGITS(long) + 12];
3392 char *tmpbuf = tbuf;
3399 if (!SvPV_const(sv,len))
3401 TAINT_PROPER("eval");
3407 /* switch to eval mode */
3409 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3410 SV *sv = sv_newmortal();
3411 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3412 (unsigned long)++PL_evalseq,
3413 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3417 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3418 SAVECOPFILE_FREE(&PL_compiling);
3419 CopFILE_set(&PL_compiling, tmpbuf+2);
3420 SAVECOPLINE(&PL_compiling);
3421 CopLINE_set(&PL_compiling, 1);
3422 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3423 deleting the eval's FILEGV from the stash before gv_check() runs
3424 (i.e. before run-time proper). To work around the coredump that
3425 ensues, we always turn GvMULTI_on for any globals that were
3426 introduced within evals. See force_ident(). GSAR 96-10-12 */
3427 safestr = savepv(tmpbuf);
3428 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3430 PL_hints = PL_op->op_targ;
3431 SAVESPTR(PL_compiling.cop_warnings);
3432 if (specialWARN(PL_curcop->cop_warnings))
3433 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3435 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3436 SAVEFREESV(PL_compiling.cop_warnings);
3438 SAVESPTR(PL_compiling.cop_io);
3439 if (specialCopIO(PL_curcop->cop_io))
3440 PL_compiling.cop_io = PL_curcop->cop_io;
3442 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3443 SAVEFREESV(PL_compiling.cop_io);
3445 /* special case: an eval '' executed within the DB package gets lexically
3446 * placed in the first non-DB CV rather than the current CV - this
3447 * allows the debugger to execute code, find lexicals etc, in the
3448 * scope of the code being debugged. Passing &seq gets find_runcv
3449 * to do the dirty work for us */
3450 runcv = find_runcv(&seq);
3452 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3453 PUSHEVAL(cx, 0, Nullgv);
3454 cx->blk_eval.retop = PL_op->op_next;
3456 /* prepare to compile string */
3458 if (PERLDB_LINE && PL_curstash != PL_debstash)
3459 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3461 ret = doeval(gimme, NULL, runcv, seq);
3462 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3463 && ret != PL_op->op_next) { /* Successive compilation. */
3464 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3466 return DOCATCH(ret);
3476 register PERL_CONTEXT *cx;
3478 const U8 save_flags = PL_op -> op_flags;
3483 retop = cx->blk_eval.retop;
3486 if (gimme == G_VOID)
3488 else if (gimme == G_SCALAR) {
3491 if (SvFLAGS(TOPs) & SVs_TEMP)
3494 *MARK = sv_mortalcopy(TOPs);
3498 *MARK = &PL_sv_undef;
3503 /* in case LEAVE wipes old return values */
3504 for (mark = newsp + 1; mark <= SP; mark++) {
3505 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3506 *mark = sv_mortalcopy(*mark);
3507 TAINT_NOT; /* Each item is independent */
3511 PL_curpm = newpm; /* Don't pop $1 et al till now */
3514 assert(CvDEPTH(PL_compcv) == 1);
3516 CvDEPTH(PL_compcv) = 0;
3519 if (optype == OP_REQUIRE &&
3520 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3522 /* Unassume the success we assumed earlier. */
3523 SV *nsv = cx->blk_eval.old_namesv;
3524 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3525 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3526 /* die_where() did LEAVE, or we won't be here */
3530 if (!(save_flags & OPf_SPECIAL))
3531 sv_setpvn(ERRSV,"",0);
3540 register PERL_CONTEXT *cx;
3541 const I32 gimme = GIMME_V;
3546 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3548 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3550 PL_in_eval = EVAL_INEVAL;
3551 sv_setpvn(ERRSV,"",0);
3553 return DOCATCH(PL_op->op_next);
3563 register PERL_CONTEXT *cx;
3570 if (gimme == G_VOID)
3572 else if (gimme == G_SCALAR) {
3575 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3578 *MARK = sv_mortalcopy(TOPs);
3582 *MARK = &PL_sv_undef;
3587 /* in case LEAVE wipes old return values */
3588 for (mark = newsp + 1; mark <= SP; mark++) {
3589 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3590 *mark = sv_mortalcopy(*mark);
3591 TAINT_NOT; /* Each item is independent */
3595 PL_curpm = newpm; /* Don't pop $1 et al till now */
3598 sv_setpvn(ERRSV,"",0);
3603 S_doparseform(pTHX_ SV *sv)
3606 register char *s = SvPV_force(sv, len);
3607 register char *send = s + len;
3608 register char *base = Nullch;
3609 register I32 skipspaces = 0;
3610 bool noblank = FALSE;
3611 bool repeat = FALSE;
3612 bool postspace = FALSE;
3618 bool unchopnum = FALSE;
3619 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3622 Perl_croak(aTHX_ "Null picture in formline");
3624 /* estimate the buffer size needed */
3625 for (base = s; s <= send; s++) {
3626 if (*s == '\n' || *s == '@' || *s == '^')
3632 New(804, fops, maxops, U32);
3637 *fpc++ = FF_LINEMARK;
3638 noblank = repeat = FALSE;
3656 case ' ': case '\t':
3663 } /* else FALL THROUGH */
3671 *fpc++ = FF_LITERAL;
3679 *fpc++ = (U16)skipspaces;
3683 *fpc++ = FF_NEWLINE;
3687 arg = fpc - linepc + 1;
3694 *fpc++ = FF_LINEMARK;
3695 noblank = repeat = FALSE;
3704 ischop = s[-1] == '^';
3710 arg = (s - base) - 1;
3712 *fpc++ = FF_LITERAL;
3720 *fpc++ = 2; /* skip the @* or ^* */
3722 *fpc++ = FF_LINESNGL;
3725 *fpc++ = FF_LINEGLOB;
3727 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3728 arg = ischop ? 512 : 0;
3733 const char * const f = ++s;
3736 arg |= 256 + (s - f);
3738 *fpc++ = s - base; /* fieldsize for FETCH */
3739 *fpc++ = FF_DECIMAL;
3741 unchopnum |= ! ischop;
3743 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3744 arg = ischop ? 512 : 0;
3746 s++; /* skip the '0' first */
3750 const char * const f = ++s;
3753 arg |= 256 + (s - f);
3755 *fpc++ = s - base; /* fieldsize for FETCH */
3756 *fpc++ = FF_0DECIMAL;
3758 unchopnum |= ! ischop;
3762 bool ismore = FALSE;
3765 while (*++s == '>') ;
3766 prespace = FF_SPACE;
3768 else if (*s == '|') {
3769 while (*++s == '|') ;
3770 prespace = FF_HALFSPACE;
3775 while (*++s == '<') ;
3778 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3782 *fpc++ = s - base; /* fieldsize for FETCH */
3784 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3787 *fpc++ = (U16)prespace;
3801 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3803 { /* need to jump to the next word */
3805 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3806 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3807 s = SvPVX(sv) + SvCUR(sv) + z;
3809 Copy(fops, s, arg, U32);
3811 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3814 if (unchopnum && repeat)
3815 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3821 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3823 /* Can value be printed in fldsize chars, using %*.*f ? */
3827 int intsize = fldsize - (value < 0 ? 1 : 0);
3834 while (intsize--) pwr *= 10.0;
3835 while (frcsize--) eps /= 10.0;
3838 if (value + eps >= pwr)
3841 if (value - eps <= -pwr)
3848 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3851 SV *datasv = FILTER_DATA(idx);
3852 const int filter_has_file = IoLINES(datasv);
3853 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3854 SV *filter_state = (SV *)IoTOP_GV(datasv);
3855 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3858 /* I was having segfault trouble under Linux 2.2.5 after a
3859 parse error occured. (Had to hack around it with a test
3860 for PL_error_count == 0.) Solaris doesn't segfault --
3861 not sure where the trouble is yet. XXX */
3863 if (filter_has_file) {
3864 len = FILTER_READ(idx+1, buf_sv, maxlen);
3867 if (filter_sub && len >= 0) {
3878 PUSHs(sv_2mortal(newSViv(maxlen)));
3880 PUSHs(filter_state);
3883 count = call_sv(filter_sub, G_SCALAR);
3899 IoLINES(datasv) = 0;
3900 if (filter_child_proc) {
3901 SvREFCNT_dec(filter_child_proc);
3902 IoFMT_GV(datasv) = Nullgv;
3905 SvREFCNT_dec(filter_state);
3906 IoTOP_GV(datasv) = Nullgv;
3909 SvREFCNT_dec(filter_sub);
3910 IoBOTTOM_GV(datasv) = Nullgv;
3912 filter_del(run_user_filter);
3918 /* perhaps someone can come up with a better name for
3919 this? it is not really "absolute", per se ... */
3921 S_path_is_absolute(pTHX_ const char *name)
3923 if (PERL_FILE_IS_ABSOLUTE(name)
3924 #ifdef MACOS_TRADITIONAL
3927 || (*name == '.' && (name[1] == '/' ||
3928 (name[1] == '.' && name[2] == '/'))))
3939 * c-indentation-style: bsd
3941 * indent-tabs-mode: t
3944 * ex: set ts=8 sts=4 sw=4 noet: