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_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_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_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_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_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)
1392 if (PL_in_eval & EVAL_KEEPERR) {
1393 static const char prefix[] = "\t(in cleanup) ";
1395 const char *e = Nullch;
1397 sv_setpvn(err,"",0);
1398 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(ERRSV, n_a);
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));
1711 sv_reset(tmps, CopSTASH(PL_curcop));
1721 /* like pp_nextstate, but used instead when the debugger is active */
1726 PL_curcop = (COP*)PL_op;
1727 TAINT_NOT; /* Each statement is presumed innocent */
1728 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1731 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1732 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1736 register PERL_CONTEXT *cx;
1737 const I32 gimme = G_ARRAY;
1744 DIE(aTHX_ "No DB::DB routine defined");
1746 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1747 /* don't do recursive DB::DB call */
1759 PUSHBLOCK(cx, CXt_SUB, SP);
1761 cx->blk_sub.retop = PL_op->op_next;
1763 PAD_SET_CUR(CvPADLIST(cv),1);
1764 RETURNOP(CvSTART(cv));
1778 register PERL_CONTEXT *cx;
1779 const I32 gimme = GIMME_V;
1781 U32 cxtype = CXt_LOOP;
1789 if (PL_op->op_targ) {
1790 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1791 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1792 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1793 SVs_PADSTALE, SVs_PADSTALE);
1795 #ifndef USE_ITHREADS
1796 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1799 SAVEPADSV(PL_op->op_targ);
1800 iterdata = INT2PTR(void*, PL_op->op_targ);
1801 cxtype |= CXp_PADVAR;
1806 svp = &GvSV(gv); /* symbol table variable */
1807 SAVEGENERICSV(*svp);
1810 iterdata = (void*)gv;
1816 PUSHBLOCK(cx, cxtype, SP);
1818 PUSHLOOP(cx, iterdata, MARK);
1820 PUSHLOOP(cx, svp, MARK);
1822 if (PL_op->op_flags & OPf_STACKED) {
1823 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1824 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1826 SV *right = (SV*)cx->blk_loop.iterary;
1827 if (RANGE_IS_NUMERIC(sv,right)) {
1828 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1829 (SvOK(right) && SvNV(right) >= IV_MAX))
1830 DIE(aTHX_ "Range iterator outside integer range");
1831 cx->blk_loop.iterix = SvIV(sv);
1832 cx->blk_loop.itermax = SvIV(right);
1836 cx->blk_loop.iterlval = newSVsv(sv);
1837 (void) SvPV_force(cx->blk_loop.iterlval,n_a);
1838 (void) SvPV_nolen_const(right);
1841 else if (PL_op->op_private & OPpITER_REVERSED) {
1842 cx->blk_loop.itermax = -1;
1843 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1848 cx->blk_loop.iterary = PL_curstack;
1849 AvFILLp(PL_curstack) = SP - PL_stack_base;
1850 if (PL_op->op_private & OPpITER_REVERSED) {
1851 cx->blk_loop.itermax = MARK - PL_stack_base;
1852 cx->blk_loop.iterix = cx->blk_oldsp;
1855 cx->blk_loop.iterix = MARK - PL_stack_base;
1865 register PERL_CONTEXT *cx;
1866 const I32 gimme = GIMME_V;
1872 PUSHBLOCK(cx, CXt_LOOP, SP);
1873 PUSHLOOP(cx, 0, SP);
1881 register PERL_CONTEXT *cx;
1888 assert(CxTYPE(cx) == CXt_LOOP);
1890 newsp = PL_stack_base + cx->blk_loop.resetsp;
1893 if (gimme == G_VOID)
1895 else if (gimme == G_SCALAR) {
1897 *++newsp = sv_mortalcopy(*SP);
1899 *++newsp = &PL_sv_undef;
1903 *++newsp = sv_mortalcopy(*++mark);
1904 TAINT_NOT; /* Each item is independent */
1910 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1911 PL_curpm = newpm; /* ... and pop $1 et al */
1923 register PERL_CONTEXT *cx;
1924 bool popsub2 = FALSE;
1925 bool clear_errsv = FALSE;
1933 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1934 if (cxstack_ix == PL_sortcxix
1935 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1937 if (cxstack_ix > PL_sortcxix)
1938 dounwind(PL_sortcxix);
1939 AvARRAY(PL_curstack)[1] = *SP;
1940 PL_stack_sp = PL_stack_base + 1;
1945 cxix = dopoptosub(cxstack_ix);
1947 DIE(aTHX_ "Can't return outside a subroutine");
1948 if (cxix < cxstack_ix)
1952 switch (CxTYPE(cx)) {
1955 retop = cx->blk_sub.retop;
1956 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1959 if (!(PL_in_eval & EVAL_KEEPERR))
1962 retop = cx->blk_eval.retop;
1966 if (optype == OP_REQUIRE &&
1967 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1969 /* Unassume the success we assumed earlier. */
1970 SV *nsv = cx->blk_eval.old_namesv;
1971 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
1972 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1977 retop = cx->blk_sub.retop;
1980 DIE(aTHX_ "panic: return");
1984 if (gimme == G_SCALAR) {
1987 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1989 *++newsp = SvREFCNT_inc(*SP);
1994 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1996 *++newsp = sv_mortalcopy(sv);
2001 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2004 *++newsp = sv_mortalcopy(*SP);
2007 *++newsp = &PL_sv_undef;
2009 else if (gimme == G_ARRAY) {
2010 while (++MARK <= SP) {
2011 *++newsp = (popsub2 && SvTEMP(*MARK))
2012 ? *MARK : sv_mortalcopy(*MARK);
2013 TAINT_NOT; /* Each item is independent */
2016 PL_stack_sp = newsp;
2019 /* Stack values are safe: */
2022 POPSUB(cx,sv); /* release CV and @_ ... */
2026 PL_curpm = newpm; /* ... and pop $1 et al */
2030 sv_setpvn(ERRSV,"",0);
2038 register PERL_CONTEXT *cx;
2048 if (PL_op->op_flags & OPf_SPECIAL) {
2049 cxix = dopoptoloop(cxstack_ix);
2051 DIE(aTHX_ "Can't \"last\" outside a loop block");
2054 cxix = dopoptolabel(cPVOP->op_pv);
2056 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2058 if (cxix < cxstack_ix)
2062 cxstack_ix++; /* temporarily protect top context */
2064 switch (CxTYPE(cx)) {
2067 newsp = PL_stack_base + cx->blk_loop.resetsp;
2068 nextop = cx->blk_loop.last_op->op_next;
2072 nextop = cx->blk_sub.retop;
2076 nextop = cx->blk_eval.retop;
2080 nextop = cx->blk_sub.retop;
2083 DIE(aTHX_ "panic: last");
2087 if (gimme == G_SCALAR) {
2089 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2090 ? *SP : sv_mortalcopy(*SP);
2092 *++newsp = &PL_sv_undef;
2094 else if (gimme == G_ARRAY) {
2095 while (++MARK <= SP) {
2096 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2097 ? *MARK : sv_mortalcopy(*MARK);
2098 TAINT_NOT; /* Each item is independent */
2106 /* Stack values are safe: */
2109 POPLOOP(cx); /* release loop vars ... */
2113 POPSUB(cx,sv); /* release CV and @_ ... */
2116 PL_curpm = newpm; /* ... and pop $1 et al */
2126 register PERL_CONTEXT *cx;
2129 if (PL_op->op_flags & OPf_SPECIAL) {
2130 cxix = dopoptoloop(cxstack_ix);
2132 DIE(aTHX_ "Can't \"next\" outside a loop block");
2135 cxix = dopoptolabel(cPVOP->op_pv);
2137 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2139 if (cxix < cxstack_ix)
2142 /* clear off anything above the scope we're re-entering, but
2143 * save the rest until after a possible continue block */
2144 inner = PL_scopestack_ix;
2146 if (PL_scopestack_ix < inner)
2147 leave_scope(PL_scopestack[PL_scopestack_ix]);
2148 PL_curcop = cx->blk_oldcop;
2149 return cx->blk_loop.next_op;
2156 register PERL_CONTEXT *cx;
2160 if (PL_op->op_flags & OPf_SPECIAL) {
2161 cxix = dopoptoloop(cxstack_ix);
2163 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2166 cxix = dopoptolabel(cPVOP->op_pv);
2168 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2170 if (cxix < cxstack_ix)
2173 redo_op = cxstack[cxix].blk_loop.redo_op;
2174 if (redo_op->op_type == OP_ENTER) {
2175 /* pop one less context to avoid $x being freed in while (my $x..) */
2177 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2178 redo_op = redo_op->op_next;
2182 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2183 LEAVE_SCOPE(oldsave);
2185 PL_curcop = cx->blk_oldcop;
2190 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2194 static const char too_deep[] = "Target of goto is too deeply nested";
2197 Perl_croak(aTHX_ too_deep);
2198 if (o->op_type == OP_LEAVE ||
2199 o->op_type == OP_SCOPE ||
2200 o->op_type == OP_LEAVELOOP ||
2201 o->op_type == OP_LEAVESUB ||
2202 o->op_type == OP_LEAVETRY)
2204 *ops++ = cUNOPo->op_first;
2206 Perl_croak(aTHX_ too_deep);
2209 if (o->op_flags & OPf_KIDS) {
2210 /* First try all the kids at this level, since that's likeliest. */
2211 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2212 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2213 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2216 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2217 if (kid == PL_lastgotoprobe)
2219 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2222 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2223 ops[-1]->op_type == OP_DBSTATE)
2228 if ((o = dofindlabel(kid, label, ops, oplimit)))
2247 register PERL_CONTEXT *cx;
2248 #define GOTO_DEPTH 64
2249 OP *enterops[GOTO_DEPTH];
2250 const char *label = 0;
2251 const bool do_dump = (PL_op->op_type == OP_DUMP);
2252 static const char must_have_label[] = "goto must have label";
2254 if (PL_op->op_flags & OPf_STACKED) {
2258 /* This egregious kludge implements goto &subroutine */
2259 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2261 register PERL_CONTEXT *cx;
2262 CV* cv = (CV*)SvRV(sv);
2269 if (!CvROOT(cv) && !CvXSUB(cv)) {
2270 const GV * const gv = CvGV(cv);
2274 /* autoloaded stub? */
2275 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2277 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2278 GvNAMELEN(gv), FALSE);
2279 if (autogv && (cv = GvCV(autogv)))
2281 tmpstr = sv_newmortal();
2282 gv_efullname3(tmpstr, gv, Nullch);
2283 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2285 DIE(aTHX_ "Goto undefined subroutine");
2288 /* First do some returnish stuff. */
2289 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2291 cxix = dopoptosub(cxstack_ix);
2293 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2294 if (cxix < cxstack_ix)
2298 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2299 if (CxTYPE(cx) == CXt_EVAL) {
2301 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2303 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2305 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2306 /* put @_ back onto stack */
2307 AV* av = cx->blk_sub.argarray;
2309 items = AvFILLp(av) + 1;
2310 EXTEND(SP, items+1); /* @_ could have been extended. */
2311 Copy(AvARRAY(av), SP + 1, items, SV*);
2312 SvREFCNT_dec(GvAV(PL_defgv));
2313 GvAV(PL_defgv) = cx->blk_sub.savearray;
2315 /* abandon @_ if it got reified */
2320 av_extend(av, items-1);
2322 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2325 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2327 av = GvAV(PL_defgv);
2328 items = AvFILLp(av) + 1;
2329 EXTEND(SP, items+1); /* @_ could have been extended. */
2330 Copy(AvARRAY(av), SP + 1, items, SV*);
2334 if (CxTYPE(cx) == CXt_SUB &&
2335 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2336 SvREFCNT_dec(cx->blk_sub.cv);
2337 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2338 LEAVE_SCOPE(oldsave);
2340 /* Now do some callish stuff. */
2342 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2344 OP* retop = cx->blk_sub.retop;
2347 for (index=0; index<items; index++)
2348 sv_2mortal(SP[-index]);
2350 #ifdef PERL_XSUB_OLDSTYLE
2351 if (CvOLDSTYLE(cv)) {
2352 I32 (*fp3)(int,int,int);
2357 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2358 items = (*fp3)(CvXSUBANY(cv).any_i32,
2359 mark - PL_stack_base + 1,
2361 SP = PL_stack_base + items;
2364 #endif /* PERL_XSUB_OLDSTYLE */
2369 /* XS subs don't have a CxSUB, so pop it */
2370 POPBLOCK(cx, PL_curpm);
2371 /* Push a mark for the start of arglist */
2374 (void)(*CvXSUB(cv))(aTHX_ cv);
2380 AV* padlist = CvPADLIST(cv);
2381 if (CxTYPE(cx) == CXt_EVAL) {
2382 PL_in_eval = cx->blk_eval.old_in_eval;
2383 PL_eval_root = cx->blk_eval.old_eval_root;
2384 cx->cx_type = CXt_SUB;
2385 cx->blk_sub.hasargs = 0;
2387 cx->blk_sub.cv = cv;
2388 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2391 if (CvDEPTH(cv) < 2)
2392 (void)SvREFCNT_inc(cv);
2394 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2395 sub_crush_depth(cv);
2396 pad_push(padlist, CvDEPTH(cv));
2398 PAD_SET_CUR(padlist, CvDEPTH(cv));
2399 if (cx->blk_sub.hasargs)
2401 AV* av = (AV*)PAD_SVl(0);
2404 cx->blk_sub.savearray = GvAV(PL_defgv);
2405 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2406 CX_CURPAD_SAVE(cx->blk_sub);
2407 cx->blk_sub.argarray = av;
2409 if (items >= AvMAX(av) + 1) {
2411 if (AvARRAY(av) != ary) {
2412 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2413 SvPV_set(av, (char*)ary);
2415 if (items >= AvMAX(av) + 1) {
2416 AvMAX(av) = items - 1;
2417 Renew(ary,items+1,SV*);
2419 SvPV_set(av, (char*)ary);
2423 Copy(mark,AvARRAY(av),items,SV*);
2424 AvFILLp(av) = items - 1;
2425 assert(!AvREAL(av));
2427 /* transfer 'ownership' of refcnts to new @_ */
2437 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2439 * We do not care about using sv to call CV;
2440 * it's for informational purposes only.
2442 SV *sv = GvSV(PL_DBsub);
2446 if (PERLDB_SUB_NN) {
2447 int type = SvTYPE(sv);
2448 if (type < SVt_PVIV && type != SVt_IV)
2449 sv_upgrade(sv, SVt_PVIV);
2451 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2453 gv_efullname3(sv, CvGV(cv), Nullch);
2456 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2457 PUSHMARK( PL_stack_sp );
2458 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2462 RETURNOP(CvSTART(cv));
2466 label = SvPV(sv,n_a);
2467 if (!(do_dump || *label))
2468 DIE(aTHX_ must_have_label);
2471 else if (PL_op->op_flags & OPf_SPECIAL) {
2473 DIE(aTHX_ must_have_label);
2476 label = cPVOP->op_pv;
2478 if (label && *label) {
2480 bool leaving_eval = FALSE;
2481 bool in_block = FALSE;
2482 PERL_CONTEXT *last_eval_cx = 0;
2486 PL_lastgotoprobe = 0;
2488 for (ix = cxstack_ix; ix >= 0; ix--) {
2490 switch (CxTYPE(cx)) {
2492 leaving_eval = TRUE;
2493 if (!CxTRYBLOCK(cx)) {
2494 gotoprobe = (last_eval_cx ?
2495 last_eval_cx->blk_eval.old_eval_root :
2500 /* else fall through */
2502 gotoprobe = cx->blk_oldcop->op_sibling;
2508 gotoprobe = cx->blk_oldcop->op_sibling;
2511 gotoprobe = PL_main_root;
2514 if (CvDEPTH(cx->blk_sub.cv)) {
2515 gotoprobe = CvROOT(cx->blk_sub.cv);
2521 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2524 DIE(aTHX_ "panic: goto");
2525 gotoprobe = PL_main_root;
2529 retop = dofindlabel(gotoprobe, label,
2530 enterops, enterops + GOTO_DEPTH);
2534 PL_lastgotoprobe = gotoprobe;
2537 DIE(aTHX_ "Can't find label %s", label);
2539 /* if we're leaving an eval, check before we pop any frames
2540 that we're not going to punt, otherwise the error
2543 if (leaving_eval && *enterops && enterops[1]) {
2545 for (i = 1; enterops[i]; i++)
2546 if (enterops[i]->op_type == OP_ENTERITER)
2547 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2550 /* pop unwanted frames */
2552 if (ix < cxstack_ix) {
2559 oldsave = PL_scopestack[PL_scopestack_ix];
2560 LEAVE_SCOPE(oldsave);
2563 /* push wanted frames */
2565 if (*enterops && enterops[1]) {
2567 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2568 for (; enterops[ix]; ix++) {
2569 PL_op = enterops[ix];
2570 /* Eventually we may want to stack the needed arguments
2571 * for each op. For now, we punt on the hard ones. */
2572 if (PL_op->op_type == OP_ENTERITER)
2573 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2574 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2582 if (!retop) retop = PL_main_start;
2584 PL_restartop = retop;
2585 PL_do_undump = TRUE;
2589 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2590 PL_do_undump = FALSE;
2606 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2608 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2611 PL_exit_flags |= PERL_EXIT_EXPECTED;
2613 PUSHs(&PL_sv_undef);
2621 const NV value = SvNVx(GvSV(cCOP->cop_gv));
2622 register I32 match = I_32(value);
2625 if (((NV)match) > value)
2626 --match; /* was fractional--truncate other way */
2628 match -= cCOP->uop.scop.scop_offset;
2631 else if (match > cCOP->uop.scop.scop_max)
2632 match = cCOP->uop.scop.scop_max;
2633 PL_op = cCOP->uop.scop.scop_next[match];
2643 PL_op = PL_op->op_next; /* can't assume anything */
2646 match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2647 match -= cCOP->uop.scop.scop_offset;
2650 else if (match > cCOP->uop.scop.scop_max)
2651 match = cCOP->uop.scop.scop_max;
2652 PL_op = cCOP->uop.scop.scop_next[match];
2661 S_save_lines(pTHX_ AV *array, SV *sv)
2663 const char *s = SvPVX_const(sv);
2664 const char *send = SvPVX_const(sv) + SvCUR(sv);
2667 while (s && s < send) {
2669 SV *tmpstr = NEWSV(85,0);
2671 sv_upgrade(tmpstr, SVt_PVMG);
2672 t = strchr(s, '\n');
2678 sv_setpvn(tmpstr, s, t - s);
2679 av_store(array, line++, tmpstr);
2685 S_docatch_body(pTHX)
2692 S_docatch(pTHX_ OP *o)
2695 OP * const oldop = PL_op;
2699 assert(CATCH_GET == TRUE);
2706 assert(cxstack_ix >= 0);
2707 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2708 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2713 /* die caught by an inner eval - continue inner loop */
2715 /* NB XXX we rely on the old popped CxEVAL still being at the top
2716 * of the stack; the way die_where() currently works, this
2717 * assumption is valid. In theory The cur_top_env value should be
2718 * returned in another global, the way retop (aka PL_restartop)
2720 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2723 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2725 PL_op = PL_restartop;
2742 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2743 /* sv Text to convert to OP tree. */
2744 /* startop op_free() this to undo. */
2745 /* code Short string id of the caller. */
2747 dVAR; dSP; /* Make POPBLOCK work. */
2750 I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
2754 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2755 char *tmpbuf = tbuf;
2758 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2763 /* switch to eval mode */
2765 if (IN_PERL_COMPILETIME) {
2766 SAVECOPSTASH_FREE(&PL_compiling);
2767 CopSTASH_set(&PL_compiling, PL_curstash);
2769 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2770 SV *sv = sv_newmortal();
2771 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2772 code, (unsigned long)++PL_evalseq,
2773 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2777 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2778 SAVECOPFILE_FREE(&PL_compiling);
2779 CopFILE_set(&PL_compiling, tmpbuf+2);
2780 SAVECOPLINE(&PL_compiling);
2781 CopLINE_set(&PL_compiling, 1);
2782 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2783 deleting the eval's FILEGV from the stash before gv_check() runs
2784 (i.e. before run-time proper). To work around the coredump that
2785 ensues, we always turn GvMULTI_on for any globals that were
2786 introduced within evals. See force_ident(). GSAR 96-10-12 */
2787 safestr = savepv(tmpbuf);
2788 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2790 #ifdef OP_IN_REGISTER
2796 /* we get here either during compilation, or via pp_regcomp at runtime */
2797 runtime = IN_PERL_RUNTIME;
2799 runcv = find_runcv(NULL);
2802 PL_op->op_type = OP_ENTEREVAL;
2803 PL_op->op_flags = 0; /* Avoid uninit warning. */
2804 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2805 PUSHEVAL(cx, 0, Nullgv);
2808 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2810 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2811 POPBLOCK(cx,PL_curpm);
2814 (*startop)->op_type = OP_NULL;
2815 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2817 /* XXX DAPM do this properly one year */
2818 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2820 if (IN_PERL_COMPILETIME)
2821 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2822 #ifdef OP_IN_REGISTER
2830 =for apidoc find_runcv
2832 Locate the CV corresponding to the currently executing sub or eval.
2833 If db_seqp is non_null, skip CVs that are in the DB package and populate
2834 *db_seqp with the cop sequence number at the point that the DB:: code was
2835 entered. (allows debuggers to eval in the scope of the breakpoint rather
2836 than in in the scope of the debugger itself).
2842 Perl_find_runcv(pTHX_ U32 *db_seqp)
2847 *db_seqp = PL_curcop->cop_seq;
2848 for (si = PL_curstackinfo; si; si = si->si_prev) {
2850 for (ix = si->si_cxix; ix >= 0; ix--) {
2851 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2852 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2853 CV *cv = cx->blk_sub.cv;
2854 /* skip DB:: code */
2855 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2856 *db_seqp = cx->blk_oldcop->cop_seq;
2861 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2869 /* Compile a require/do, an eval '', or a /(?{...})/.
2870 * In the last case, startop is non-null, and contains the address of
2871 * a pointer that should be set to the just-compiled code.
2872 * outside is the lexically enclosing CV (if any) that invoked us.
2875 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2877 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2882 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2883 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2888 SAVESPTR(PL_compcv);
2889 PL_compcv = (CV*)NEWSV(1104,0);
2890 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2891 CvEVAL_on(PL_compcv);
2892 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2893 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2895 CvOUTSIDE_SEQ(PL_compcv) = seq;
2896 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2898 /* set up a scratch pad */
2900 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2903 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2905 /* make sure we compile in the right package */
2907 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2908 SAVESPTR(PL_curstash);
2909 PL_curstash = CopSTASH(PL_curcop);
2911 SAVESPTR(PL_beginav);
2912 PL_beginav = newAV();
2913 SAVEFREESV(PL_beginav);
2914 SAVEI32(PL_error_count);
2916 /* try to compile it */
2918 PL_eval_root = Nullop;
2920 PL_curcop = &PL_compiling;
2921 PL_curcop->cop_arybase = 0;
2922 if (saveop && saveop->op_flags & OPf_SPECIAL)
2923 PL_in_eval |= EVAL_KEEPERR;
2925 sv_setpvn(ERRSV,"",0);
2926 if (yyparse() || PL_error_count || !PL_eval_root) {
2927 SV **newsp; /* Used by POPBLOCK. */
2928 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2929 I32 optype = 0; /* Might be reset by POPEVAL. */
2934 op_free(PL_eval_root);
2935 PL_eval_root = Nullop;
2937 SP = PL_stack_base + POPMARK; /* pop original mark */
2939 POPBLOCK(cx,PL_curpm);
2944 if (optype == OP_REQUIRE) {
2945 const char* const msg = SvPVx(ERRSV, n_a);
2946 const SV * const nsv = cx->blk_eval.old_namesv;
2947 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2949 DIE(aTHX_ "%sCompilation failed in require",
2950 *msg ? msg : "Unknown error\n");
2953 const char* msg = SvPVx(ERRSV, n_a);
2955 POPBLOCK(cx,PL_curpm);
2957 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2958 (*msg ? msg : "Unknown error\n"));
2961 const char* msg = SvPVx(ERRSV, n_a);
2963 sv_setpv(ERRSV, "Compilation error");
2968 CopLINE_set(&PL_compiling, 0);
2970 *startop = PL_eval_root;
2972 SAVEFREEOP(PL_eval_root);
2974 /* Set the context for this new optree.
2975 * If the last op is an OP_REQUIRE, force scalar context.
2976 * Otherwise, propagate the context from the eval(). */
2977 if (PL_eval_root->op_type == OP_LEAVEEVAL
2978 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2979 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2981 scalar(PL_eval_root);
2982 else if (gimme & G_VOID)
2983 scalarvoid(PL_eval_root);
2984 else if (gimme & G_ARRAY)
2987 scalar(PL_eval_root);
2989 DEBUG_x(dump_eval());
2991 /* Register with debugger: */
2992 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2993 CV *cv = get_cv("DB::postponed", FALSE);
2997 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2999 call_sv((SV*)cv, G_DISCARD);
3003 /* compiled okay, so do it */
3005 CvDEPTH(PL_compcv) = 1;
3006 SP = PL_stack_base + POPMARK; /* pop original mark */
3007 PL_op = saveop; /* The caller may need it. */
3008 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
3010 RETURNOP(PL_eval_start);
3014 S_doopen_pm(pTHX_ const char *name, const char *mode)
3016 #ifndef PERL_DISABLE_PMC
3017 const STRLEN namelen = strlen(name);
3020 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3021 SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3022 const char * const pmc = SvPV_nolen(pmcsv);
3025 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3026 fp = PerlIO_open(name, mode);
3029 if (PerlLIO_stat(name, &pmstat) < 0 ||
3030 pmstat.st_mtime < pmcstat.st_mtime)
3032 fp = PerlIO_open(pmc, mode);
3035 fp = PerlIO_open(name, mode);
3038 SvREFCNT_dec(pmcsv);
3041 fp = PerlIO_open(name, mode);
3045 return PerlIO_open(name, mode);
3046 #endif /* !PERL_DISABLE_PMC */
3052 register PERL_CONTEXT *cx;
3056 const char *tryname = Nullch;
3057 SV *namesv = Nullsv;
3059 const I32 gimme = GIMME_V;
3060 PerlIO *tryrsfp = 0;
3061 int filter_has_file = 0;
3062 GV *filter_child_proc = 0;
3063 SV *filter_state = 0;
3070 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3071 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3072 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3073 "v-string in use/require non-portable");
3075 sv = new_version(sv);
3076 if (!sv_derived_from(PL_patchlevel, "version"))
3077 (void *)upg_version(PL_patchlevel);
3078 if ( vcmp(sv,PL_patchlevel) > 0 )
3079 DIE(aTHX_ "Perl v%"SVf" required--this is only v%"SVf", stopped",
3080 vstringify(sv), vstringify(PL_patchlevel));
3084 name = SvPV_const(sv, len);
3085 if (!(name && len > 0 && *name))
3086 DIE(aTHX_ "Null filename used");
3087 TAINT_PROPER("require");
3088 if (PL_op->op_type == OP_REQUIRE &&
3089 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3090 if (*svp != &PL_sv_undef)
3093 DIE(aTHX_ "Compilation failed in require");
3096 /* prepare to compile file */
3098 if (path_is_absolute(name)) {
3100 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3102 #ifdef MACOS_TRADITIONAL
3106 MacPerl_CanonDir(name, newname, 1);
3107 if (path_is_absolute(newname)) {
3109 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3114 AV *ar = GvAVn(PL_incgv);
3118 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3121 namesv = NEWSV(806, 0);
3122 for (i = 0; i <= AvFILL(ar); i++) {
3123 SV *dirsv = *av_fetch(ar, i, TRUE);
3129 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3130 && !sv_isobject(loader))
3132 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3135 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3136 PTR2UV(SvRV(dirsv)), name);
3137 tryname = SvPVX(namesv);
3148 if (sv_isobject(loader))
3149 count = call_method("INC", G_ARRAY);
3151 count = call_sv(loader, G_ARRAY);
3161 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3165 if (SvTYPE(arg) == SVt_PVGV) {
3166 IO *io = GvIO((GV *)arg);
3171 tryrsfp = IoIFP(io);
3172 if (IoTYPE(io) == IoTYPE_PIPE) {
3173 /* reading from a child process doesn't
3174 nest -- when returning from reading
3175 the inner module, the outer one is
3176 unreadable (closed?) I've tried to
3177 save the gv to manage the lifespan of
3178 the pipe, but this didn't help. XXX */
3179 filter_child_proc = (GV *)arg;
3180 (void)SvREFCNT_inc(filter_child_proc);
3183 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3184 PerlIO_close(IoOFP(io));
3196 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3198 (void)SvREFCNT_inc(filter_sub);
3201 filter_state = SP[i];
3202 (void)SvREFCNT_inc(filter_state);
3206 tryrsfp = PerlIO_open("/dev/null",
3222 filter_has_file = 0;
3223 if (filter_child_proc) {
3224 SvREFCNT_dec(filter_child_proc);
3225 filter_child_proc = 0;
3228 SvREFCNT_dec(filter_state);
3232 SvREFCNT_dec(filter_sub);
3237 if (!path_is_absolute(name)
3238 #ifdef MACOS_TRADITIONAL
3239 /* We consider paths of the form :a:b ambiguous and interpret them first
3240 as global then as local
3242 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3246 char *dir = SvPVx(dirsv, n_a);
3247 #ifdef MACOS_TRADITIONAL
3251 MacPerl_CanonDir(name, buf2, 1);
3252 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3256 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3258 sv_setpv(namesv, unixdir);
3259 sv_catpv(namesv, unixname);
3262 if (PL_origfilename[0] &&
3263 PL_origfilename[1] == ':' &&
3264 !(dir[0] && dir[1] == ':'))
3265 Perl_sv_setpvf(aTHX_ namesv,
3270 Perl_sv_setpvf(aTHX_ namesv,
3274 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3278 TAINT_PROPER("require");
3279 tryname = SvPVX(namesv);
3280 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3282 if (tryname[0] == '.' && tryname[1] == '/')
3291 SAVECOPFILE_FREE(&PL_compiling);
3292 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3293 SvREFCNT_dec(namesv);
3295 if (PL_op->op_type == OP_REQUIRE) {
3296 const char *msgstr = name;
3297 if (namesv) { /* did we lookup @INC? */
3298 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3299 SV *dirmsgsv = NEWSV(0, 0);
3300 AV *ar = GvAVn(PL_incgv);
3302 sv_catpvn(msg, " in @INC", 8);
3303 if (instr(SvPVX_const(msg), ".h "))
3304 sv_catpv(msg, " (change .h to .ph maybe?)");
3305 if (instr(SvPVX_const(msg), ".ph "))
3306 sv_catpv(msg, " (did you run h2ph?)");
3307 sv_catpv(msg, " (@INC contains:");
3308 for (i = 0; i <= AvFILL(ar); i++) {
3310 const char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3311 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3312 sv_catsv(msg, dirmsgsv);
3314 sv_catpvn(msg, ")", 1);
3315 SvREFCNT_dec(dirmsgsv);
3316 msgstr = SvPV_nolen(msg);
3318 DIE(aTHX_ "Can't locate %s", msgstr);
3324 SETERRNO(0, SS_NORMAL);
3326 /* Assume success here to prevent recursive requirement. */
3328 /* Check whether a hook in @INC has already filled %INC */
3329 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3330 (void)hv_store(GvHVn(PL_incgv), name, len,
3331 (hook_sv ? SvREFCNT_inc(hook_sv)
3332 : newSVpv(CopFILE(&PL_compiling), 0)),
3338 lex_start(sv_2mortal(newSVpvn("",0)));
3339 SAVEGENERICSV(PL_rsfp_filters);
3340 PL_rsfp_filters = Nullav;
3345 SAVESPTR(PL_compiling.cop_warnings);
3346 if (PL_dowarn & G_WARN_ALL_ON)
3347 PL_compiling.cop_warnings = pWARN_ALL ;
3348 else if (PL_dowarn & G_WARN_ALL_OFF)
3349 PL_compiling.cop_warnings = pWARN_NONE ;
3350 else if (PL_taint_warn)
3351 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3353 PL_compiling.cop_warnings = pWARN_STD ;
3354 SAVESPTR(PL_compiling.cop_io);
3355 PL_compiling.cop_io = Nullsv;
3357 if (filter_sub || filter_child_proc) {
3358 SV *datasv = filter_add(run_user_filter, Nullsv);
3359 IoLINES(datasv) = filter_has_file;
3360 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3361 IoTOP_GV(datasv) = (GV *)filter_state;
3362 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3365 /* switch to eval mode */
3366 PUSHBLOCK(cx, CXt_EVAL, SP);
3367 PUSHEVAL(cx, name, Nullgv);
3368 cx->blk_eval.retop = PL_op->op_next;
3370 SAVECOPLINE(&PL_compiling);
3371 CopLINE_set(&PL_compiling, 0);
3375 /* Store and reset encoding. */
3376 encoding = PL_encoding;
3377 PL_encoding = Nullsv;
3379 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3381 /* Restore encoding. */
3382 PL_encoding = encoding;
3389 return pp_require();
3395 register PERL_CONTEXT *cx;
3397 const I32 gimme = GIMME_V, was = PL_sub_generation;
3398 char tbuf[TYPE_DIGITS(long) + 12];
3399 char *tmpbuf = tbuf;
3406 if (!SvPV_const(sv,len))
3408 TAINT_PROPER("eval");
3414 /* switch to eval mode */
3416 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3417 SV *sv = sv_newmortal();
3418 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3419 (unsigned long)++PL_evalseq,
3420 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3424 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3425 SAVECOPFILE_FREE(&PL_compiling);
3426 CopFILE_set(&PL_compiling, tmpbuf+2);
3427 SAVECOPLINE(&PL_compiling);
3428 CopLINE_set(&PL_compiling, 1);
3429 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3430 deleting the eval's FILEGV from the stash before gv_check() runs
3431 (i.e. before run-time proper). To work around the coredump that
3432 ensues, we always turn GvMULTI_on for any globals that were
3433 introduced within evals. See force_ident(). GSAR 96-10-12 */
3434 safestr = savepv(tmpbuf);
3435 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3437 PL_hints = PL_op->op_targ;
3438 SAVESPTR(PL_compiling.cop_warnings);
3439 if (specialWARN(PL_curcop->cop_warnings))
3440 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3442 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3443 SAVEFREESV(PL_compiling.cop_warnings);
3445 SAVESPTR(PL_compiling.cop_io);
3446 if (specialCopIO(PL_curcop->cop_io))
3447 PL_compiling.cop_io = PL_curcop->cop_io;
3449 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3450 SAVEFREESV(PL_compiling.cop_io);
3452 /* special case: an eval '' executed within the DB package gets lexically
3453 * placed in the first non-DB CV rather than the current CV - this
3454 * allows the debugger to execute code, find lexicals etc, in the
3455 * scope of the code being debugged. Passing &seq gets find_runcv
3456 * to do the dirty work for us */
3457 runcv = find_runcv(&seq);
3459 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3460 PUSHEVAL(cx, 0, Nullgv);
3461 cx->blk_eval.retop = PL_op->op_next;
3463 /* prepare to compile string */
3465 if (PERLDB_LINE && PL_curstash != PL_debstash)
3466 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3468 ret = doeval(gimme, NULL, runcv, seq);
3469 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3470 && ret != PL_op->op_next) { /* Successive compilation. */
3471 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3473 return DOCATCH(ret);
3483 register PERL_CONTEXT *cx;
3485 const U8 save_flags = PL_op -> op_flags;
3490 retop = cx->blk_eval.retop;
3493 if (gimme == G_VOID)
3495 else if (gimme == G_SCALAR) {
3498 if (SvFLAGS(TOPs) & SVs_TEMP)
3501 *MARK = sv_mortalcopy(TOPs);
3505 *MARK = &PL_sv_undef;
3510 /* in case LEAVE wipes old return values */
3511 for (mark = newsp + 1; mark <= SP; mark++) {
3512 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3513 *mark = sv_mortalcopy(*mark);
3514 TAINT_NOT; /* Each item is independent */
3518 PL_curpm = newpm; /* Don't pop $1 et al till now */
3521 assert(CvDEPTH(PL_compcv) == 1);
3523 CvDEPTH(PL_compcv) = 0;
3526 if (optype == OP_REQUIRE &&
3527 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3529 /* Unassume the success we assumed earlier. */
3530 SV *nsv = cx->blk_eval.old_namesv;
3531 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3532 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3533 /* die_where() did LEAVE, or we won't be here */
3537 if (!(save_flags & OPf_SPECIAL))
3538 sv_setpvn(ERRSV,"",0);
3547 register PERL_CONTEXT *cx;
3548 const I32 gimme = GIMME_V;
3553 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3555 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3557 PL_in_eval = EVAL_INEVAL;
3558 sv_setpvn(ERRSV,"",0);
3560 return DOCATCH(PL_op->op_next);
3570 register PERL_CONTEXT *cx;
3577 if (gimme == G_VOID)
3579 else if (gimme == G_SCALAR) {
3582 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3585 *MARK = sv_mortalcopy(TOPs);
3589 *MARK = &PL_sv_undef;
3594 /* in case LEAVE wipes old return values */
3595 for (mark = newsp + 1; mark <= SP; mark++) {
3596 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3597 *mark = sv_mortalcopy(*mark);
3598 TAINT_NOT; /* Each item is independent */
3602 PL_curpm = newpm; /* Don't pop $1 et al till now */
3605 sv_setpvn(ERRSV,"",0);
3610 S_doparseform(pTHX_ SV *sv)
3613 register char *s = SvPV_force(sv, len);
3614 register char *send = s + len;
3615 register char *base = Nullch;
3616 register I32 skipspaces = 0;
3617 bool noblank = FALSE;
3618 bool repeat = FALSE;
3619 bool postspace = FALSE;
3625 bool unchopnum = FALSE;
3626 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3629 Perl_croak(aTHX_ "Null picture in formline");
3631 /* estimate the buffer size needed */
3632 for (base = s; s <= send; s++) {
3633 if (*s == '\n' || *s == '@' || *s == '^')
3639 New(804, fops, maxops, U32);
3644 *fpc++ = FF_LINEMARK;
3645 noblank = repeat = FALSE;
3663 case ' ': case '\t':
3670 } /* else FALL THROUGH */
3678 *fpc++ = FF_LITERAL;
3686 *fpc++ = (U16)skipspaces;
3690 *fpc++ = FF_NEWLINE;
3694 arg = fpc - linepc + 1;
3701 *fpc++ = FF_LINEMARK;
3702 noblank = repeat = FALSE;
3711 ischop = s[-1] == '^';
3717 arg = (s - base) - 1;
3719 *fpc++ = FF_LITERAL;
3727 *fpc++ = 2; /* skip the @* or ^* */
3729 *fpc++ = FF_LINESNGL;
3732 *fpc++ = FF_LINEGLOB;
3734 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3735 arg = ischop ? 512 : 0;
3740 const char * const f = ++s;
3743 arg |= 256 + (s - f);
3745 *fpc++ = s - base; /* fieldsize for FETCH */
3746 *fpc++ = FF_DECIMAL;
3748 unchopnum |= ! ischop;
3750 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3751 arg = ischop ? 512 : 0;
3753 s++; /* skip the '0' first */
3757 const char * const f = ++s;
3760 arg |= 256 + (s - f);
3762 *fpc++ = s - base; /* fieldsize for FETCH */
3763 *fpc++ = FF_0DECIMAL;
3765 unchopnum |= ! ischop;
3769 bool ismore = FALSE;
3772 while (*++s == '>') ;
3773 prespace = FF_SPACE;
3775 else if (*s == '|') {
3776 while (*++s == '|') ;
3777 prespace = FF_HALFSPACE;
3782 while (*++s == '<') ;
3785 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3789 *fpc++ = s - base; /* fieldsize for FETCH */
3791 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3794 *fpc++ = (U16)prespace;
3808 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3810 { /* need to jump to the next word */
3812 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3813 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3814 s = SvPVX(sv) + SvCUR(sv) + z;
3816 Copy(fops, s, arg, U32);
3818 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3821 if (unchopnum && repeat)
3822 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3828 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3830 /* Can value be printed in fldsize chars, using %*.*f ? */
3834 int intsize = fldsize - (value < 0 ? 1 : 0);
3841 while (intsize--) pwr *= 10.0;
3842 while (frcsize--) eps /= 10.0;
3845 if (value + eps >= pwr)
3848 if (value - eps <= -pwr)
3855 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3858 SV *datasv = FILTER_DATA(idx);
3859 const int filter_has_file = IoLINES(datasv);
3860 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3861 SV *filter_state = (SV *)IoTOP_GV(datasv);
3862 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3865 /* I was having segfault trouble under Linux 2.2.5 after a
3866 parse error occured. (Had to hack around it with a test
3867 for PL_error_count == 0.) Solaris doesn't segfault --
3868 not sure where the trouble is yet. XXX */
3870 if (filter_has_file) {
3871 len = FILTER_READ(idx+1, buf_sv, maxlen);
3874 if (filter_sub && len >= 0) {
3885 PUSHs(sv_2mortal(newSViv(maxlen)));
3887 PUSHs(filter_state);
3890 count = call_sv(filter_sub, G_SCALAR);
3906 IoLINES(datasv) = 0;
3907 if (filter_child_proc) {
3908 SvREFCNT_dec(filter_child_proc);
3909 IoFMT_GV(datasv) = Nullgv;
3912 SvREFCNT_dec(filter_state);
3913 IoTOP_GV(datasv) = Nullgv;
3916 SvREFCNT_dec(filter_sub);
3917 IoBOTTOM_GV(datasv) = Nullgv;
3919 filter_del(run_user_filter);
3925 /* perhaps someone can come up with a better name for
3926 this? it is not really "absolute", per se ... */
3928 S_path_is_absolute(pTHX_ const char *name)
3930 if (PERL_FILE_IS_ABSOLUTE(name)
3931 #ifdef MACOS_TRADITIONAL
3934 || (*name == '.' && (name[1] == '/' ||
3935 (name[1] == '.' && name[2] == '/'))))
3946 * c-indentation-style: bsd
3948 * indent-tabs-mode: t
3951 * ex: set ts=8 sts=4 sw=4 noet: