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 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
192 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
193 register SV * const 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 * const rx = cx->sb_rx;
199 REGEXP *old = PM_GETRE(pm);
206 rxres_restore(&cx->sb_rxres, rx);
207 RX_MATCH_UTF8_set(rx, DO_UTF8(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);
298 (void)ReREFCNT_inc(rx);
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)
375 void *tmp = INT2PTR(char*,*p);
378 Poison(*p, 1, sizeof(*p));
380 Safefree(INT2PTR(char*,*p));
382 #ifdef PERL_OLD_COPY_ON_WRITE
384 SvREFCNT_dec (INT2PTR(SV*,p[1]));
394 dSP; dMARK; dORIGMARK;
395 register SV *tmpForm = *++MARK;
400 register SV *sv = Nullsv;
401 const char *item = Nullch;
405 bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
406 const char *chophere = Nullch;
407 char *linemark = Nullch;
409 bool gotsome = FALSE;
411 STRLEN fudge = SvPOK(tmpForm)
412 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
413 bool item_is_utf8 = FALSE;
414 bool targ_is_utf8 = FALSE;
420 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
421 if (SvREADONLY(tmpForm)) {
422 SvREADONLY_off(tmpForm);
423 parseres = doparseform(tmpForm);
424 SvREADONLY_on(tmpForm);
427 parseres = doparseform(tmpForm);
431 SvPV_force(PL_formtarget, len);
432 if (DO_UTF8(PL_formtarget))
434 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
436 f = SvPV_const(tmpForm, len);
437 /* need to jump to the next word */
438 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
442 const char *name = "???";
445 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
446 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
447 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
448 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
449 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
451 case FF_CHECKNL: name = "CHECKNL"; break;
452 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
453 case FF_SPACE: name = "SPACE"; break;
454 case FF_HALFSPACE: name = "HALFSPACE"; break;
455 case FF_ITEM: name = "ITEM"; break;
456 case FF_CHOP: name = "CHOP"; break;
457 case FF_LINEGLOB: name = "LINEGLOB"; break;
458 case FF_NEWLINE: name = "NEWLINE"; break;
459 case FF_MORE: name = "MORE"; break;
460 case FF_LINEMARK: name = "LINEMARK"; break;
461 case FF_END: name = "END"; break;
462 case FF_0DECIMAL: name = "0DECIMAL"; break;
463 case FF_LINESNGL: name = "LINESNGL"; break;
466 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
468 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
479 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
480 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
482 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
483 t = SvEND(PL_formtarget);
486 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
487 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
489 sv_utf8_upgrade(PL_formtarget);
490 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
491 t = SvEND(PL_formtarget);
511 if (ckWARN(WARN_SYNTAX))
512 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
519 const char *s = item = SvPV_const(sv, len);
522 itemsize = sv_len_utf8(sv);
523 if (itemsize != (I32)len) {
525 if (itemsize > fieldsize) {
526 itemsize = fieldsize;
527 itembytes = itemsize;
528 sv_pos_u2b(sv, &itembytes, 0);
532 send = chophere = s + itembytes;
542 sv_pos_b2u(sv, &itemsize);
546 item_is_utf8 = FALSE;
547 if (itemsize > fieldsize)
548 itemsize = fieldsize;
549 send = chophere = s + itemsize;
563 const char *s = item = SvPV_const(sv, len);
566 itemsize = sv_len_utf8(sv);
567 if (itemsize != (I32)len) {
569 if (itemsize <= fieldsize) {
570 const char *send = chophere = s + itemsize;
583 itemsize = fieldsize;
584 itembytes = itemsize;
585 sv_pos_u2b(sv, &itembytes, 0);
586 send = chophere = s + itembytes;
587 while (s < send || (s == send && isSPACE(*s))) {
597 if (strchr(PL_chopset, *s))
602 itemsize = chophere - item;
603 sv_pos_b2u(sv, &itemsize);
609 item_is_utf8 = FALSE;
610 if (itemsize <= fieldsize) {
611 const char *const send = chophere = s + itemsize;
624 itemsize = fieldsize;
625 send = chophere = s + itemsize;
626 while (s < send || (s == send && isSPACE(*s))) {
636 if (strchr(PL_chopset, *s))
641 itemsize = chophere - item;
647 arg = fieldsize - itemsize;
656 arg = fieldsize - itemsize;
667 const char *s = item;
671 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
673 sv_utf8_upgrade(PL_formtarget);
674 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
675 t = SvEND(PL_formtarget);
679 if (UTF8_IS_CONTINUED(*s)) {
680 STRLEN skip = UTF8SKIP(s);
697 if ( !((*t++ = *s++) & ~31) )
703 if (targ_is_utf8 && !item_is_utf8) {
704 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
706 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
707 for (; t < SvEND(PL_formtarget); t++) {
720 const int ch = *t++ = *s++;
723 if ( !((*t++ = *s++) & ~31) )
732 const char *s = chophere;
734 while (*s && isSPACE(*s))
750 const char *s = item = SvPV_const(sv, len);
752 if ((item_is_utf8 = DO_UTF8(sv)))
753 itemsize = sv_len_utf8(sv);
755 bool chopped = FALSE;
756 const char *const send = s + len;
758 chophere = s + itemsize;
774 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
776 SvUTF8_on(PL_formtarget);
778 SvCUR_set(sv, chophere - item);
779 sv_catsv(PL_formtarget, sv);
780 SvCUR_set(sv, itemsize);
782 sv_catsv(PL_formtarget, sv);
784 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
785 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
786 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
795 #if defined(USE_LONG_DOUBLE)
796 fmt = (arg & 256) ? "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl;
798 fmt = (arg & 256) ? "%#0*.*f" : "%0*.*f";
803 #if defined(USE_LONG_DOUBLE)
804 fmt = (arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl;
806 fmt = (arg & 256) ? "%#*.*f" : "%*.*f";
809 /* If the field is marked with ^ and the value is undefined,
811 if ((arg & 512) && !SvOK(sv)) {
819 /* overflow evidence */
820 if (num_overflow(value, fieldsize, arg)) {
826 /* Formats aren't yet marked for locales, so assume "yes". */
828 STORE_NUMERIC_STANDARD_SET_LOCAL();
829 sprintf(t, fmt, (int) fieldsize, (int) arg & 255, value);
830 RESTORE_NUMERIC_STANDARD();
837 while (t-- > linemark && *t == ' ') ;
845 if (arg) { /* repeat until fields exhausted? */
847 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
848 lines += FmLINES(PL_formtarget);
851 if (strnEQ(linemark, linemark - arg, arg))
852 DIE(aTHX_ "Runaway format");
855 SvUTF8_on(PL_formtarget);
856 FmLINES(PL_formtarget) = lines;
858 RETURNOP(cLISTOP->op_first);
869 const char *s = chophere;
870 const char *send = item + len;
872 while (*s && isSPACE(*s) && s < send)
877 arg = fieldsize - itemsize;
884 if (strnEQ(s1," ",3)) {
885 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
896 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
898 SvUTF8_on(PL_formtarget);
899 FmLINES(PL_formtarget) += lines;
911 if (PL_stack_base + *PL_markstack_ptr == SP) {
913 if (GIMME_V == G_SCALAR)
914 XPUSHs(sv_2mortal(newSViv(0)));
915 RETURNOP(PL_op->op_next->op_next);
917 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
918 pp_pushmark(); /* push dst */
919 pp_pushmark(); /* push src */
920 ENTER; /* enter outer scope */
923 if (PL_op->op_private & OPpGREP_LEX)
924 SAVESPTR(PAD_SVl(PL_op->op_targ));
927 ENTER; /* enter inner scope */
930 src = PL_stack_base[*PL_markstack_ptr];
932 if (PL_op->op_private & OPpGREP_LEX)
933 PAD_SVl(PL_op->op_targ) = src;
938 if (PL_op->op_type == OP_MAPSTART)
939 pp_pushmark(); /* push top */
940 return ((LOGOP*)PL_op->op_next)->op_other;
945 DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
951 const I32 gimme = GIMME_V;
952 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
958 /* first, move source pointer to the next item in the source list */
959 ++PL_markstack_ptr[-1];
961 /* if there are new items, push them into the destination list */
962 if (items && gimme != G_VOID) {
963 /* might need to make room back there first */
964 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
965 /* XXX this implementation is very pessimal because the stack
966 * is repeatedly extended for every set of items. Is possible
967 * to do this without any stack extension or copying at all
968 * by maintaining a separate list over which the map iterates
969 * (like foreach does). --gsar */
971 /* everything in the stack after the destination list moves
972 * towards the end the stack by the amount of room needed */
973 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
975 /* items to shift up (accounting for the moved source pointer) */
976 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
978 /* This optimization is by Ben Tilly and it does
979 * things differently from what Sarathy (gsar)
980 * is describing. The downside of this optimization is
981 * that leaves "holes" (uninitialized and hopefully unused areas)
982 * to the Perl stack, but on the other hand this
983 * shouldn't be a problem. If Sarathy's idea gets
984 * implemented, this optimization should become
985 * irrelevant. --jhi */
987 shift = count; /* Avoid shifting too often --Ben Tilly */
992 PL_markstack_ptr[-1] += shift;
993 *PL_markstack_ptr += shift;
997 /* copy the new items down to the destination list */
998 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
999 if (gimme == G_ARRAY) {
1001 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1004 /* scalar context: we don't care about which values map returns
1005 * (we use undef here). And so we certainly don't want to do mortal
1006 * copies of meaningless values. */
1007 while (items-- > 0) {
1009 *dst-- = &PL_sv_undef;
1013 LEAVE; /* exit inner scope */
1016 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1018 (void)POPMARK; /* pop top */
1019 LEAVE; /* exit outer scope */
1020 (void)POPMARK; /* pop src */
1021 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1022 (void)POPMARK; /* pop dst */
1023 SP = PL_stack_base + POPMARK; /* pop original mark */
1024 if (gimme == G_SCALAR) {
1025 if (PL_op->op_private & OPpGREP_LEX) {
1026 SV* sv = sv_newmortal();
1027 sv_setiv(sv, items);
1035 else if (gimme == G_ARRAY)
1042 ENTER; /* enter inner scope */
1045 /* set $_ to the new source item */
1046 src = PL_stack_base[PL_markstack_ptr[-1]];
1048 if (PL_op->op_private & OPpGREP_LEX)
1049 PAD_SVl(PL_op->op_targ) = src;
1053 RETURNOP(cLOGOP->op_other);
1061 if (GIMME == G_ARRAY)
1063 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1064 return cLOGOP->op_other;
1073 if (GIMME == G_ARRAY) {
1074 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1078 SV *targ = PAD_SV(PL_op->op_targ);
1081 if (PL_op->op_private & OPpFLIP_LINENUM) {
1082 if (GvIO(PL_last_in_gv)) {
1083 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1086 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1087 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1093 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1094 if (PL_op->op_flags & OPf_SPECIAL) {
1102 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1105 sv_setpvn(TARG, "", 0);
1111 /* This code tries to decide if "$left .. $right" should use the
1112 magical string increment, or if the range is numeric (we make
1113 an exception for .."0" [#18165]). AMS 20021031. */
1115 #define RANGE_IS_NUMERIC(left,right) ( \
1116 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1117 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1118 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1119 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1120 && (!SvOK(right) || looks_like_number(right))))
1126 if (GIMME == G_ARRAY) {
1129 if (SvGMAGICAL(left))
1131 if (SvGMAGICAL(right))
1134 if (RANGE_IS_NUMERIC(left,right)) {
1137 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1138 (SvOK(right) && SvNV(right) > IV_MAX))
1139 DIE(aTHX_ "Range iterator outside integer range");
1150 SV * const sv = sv_2mortal(newSViv(i++));
1155 SV *final = sv_mortalcopy(right);
1157 const char *tmps = SvPV_const(final, len);
1159 SV *sv = sv_mortalcopy(left);
1160 SvPV_force_nolen(sv);
1161 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1163 if (strEQ(SvPVX_const(sv),tmps))
1165 sv = sv_2mortal(newSVsv(sv));
1172 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1176 if (PL_op->op_private & OPpFLIP_LINENUM) {
1177 if (GvIO(PL_last_in_gv)) {
1178 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1181 GV * const gv = gv_fetchpv(".", TRUE, SVt_PV);
1182 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1190 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1191 sv_catpvn(targ, "E0", 2);
1201 static const char * const context_name[] = {
1212 S_dopoptolabel(pTHX_ const char *label)
1216 for (i = cxstack_ix; i >= 0; i--) {
1217 register const PERL_CONTEXT * const cx = &cxstack[i];
1218 switch (CxTYPE(cx)) {
1224 if (ckWARN(WARN_EXITING))
1225 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1226 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1227 if (CxTYPE(cx) == CXt_NULL)
1231 if ( !cx->blk_loop.label || strNE(label, cx->blk_loop.label) ) {
1232 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1233 (long)i, cx->blk_loop.label));
1236 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1244 Perl_dowantarray(pTHX)
1246 const I32 gimme = block_gimme();
1247 return (gimme == G_VOID) ? G_SCALAR : gimme;
1251 Perl_block_gimme(pTHX)
1253 const I32 cxix = dopoptosub(cxstack_ix);
1257 switch (cxstack[cxix].blk_gimme) {
1265 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1272 Perl_is_lvalue_sub(pTHX)
1274 const I32 cxix = dopoptosub(cxstack_ix);
1275 assert(cxix >= 0); /* We should only be called from inside subs */
1277 if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1278 return cxstack[cxix].blk_sub.lval;
1284 S_dopoptosub(pTHX_ I32 startingblock)
1286 return dopoptosub_at(cxstack, startingblock);
1290 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1293 for (i = startingblock; i >= 0; i--) {
1294 register const PERL_CONTEXT * const cx = &cxstk[i];
1295 switch (CxTYPE(cx)) {
1301 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1309 S_dopoptoeval(pTHX_ I32 startingblock)
1312 for (i = startingblock; i >= 0; i--) {
1313 register const PERL_CONTEXT *cx = &cxstack[i];
1314 switch (CxTYPE(cx)) {
1318 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1326 S_dopoptoloop(pTHX_ I32 startingblock)
1329 for (i = startingblock; i >= 0; i--) {
1330 register const PERL_CONTEXT * const cx = &cxstack[i];
1331 switch (CxTYPE(cx)) {
1337 if (ckWARN(WARN_EXITING))
1338 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1339 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1340 if ((CxTYPE(cx)) == CXt_NULL)
1344 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1352 Perl_dounwind(pTHX_ I32 cxix)
1356 while (cxstack_ix > cxix) {
1358 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1359 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1360 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1361 /* Note: we don't need to restore the base context info till the end. */
1362 switch (CxTYPE(cx)) {
1365 continue; /* not break */
1384 PERL_UNUSED_VAR(optype);
1388 Perl_qerror(pTHX_ SV *err)
1391 sv_catsv(ERRSV, err);
1393 sv_catsv(PL_errors, err);
1395 Perl_warn(aTHX_ "%"SVf, err);
1400 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1409 if (PL_in_eval & EVAL_KEEPERR) {
1410 static const char prefix[] = "\t(in cleanup) ";
1411 SV * const err = ERRSV;
1412 const char *e = Nullch;
1414 sv_setpvn(err,"",0);
1415 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1417 e = SvPV_const(err, len);
1419 if (*e != *message || strNE(e,message))
1423 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1424 sv_catpvn(err, prefix, sizeof(prefix)-1);
1425 sv_catpvn(err, message, msglen);
1426 if (ckWARN(WARN_MISC)) {
1427 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1428 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1433 sv_setpvn(ERRSV, message, msglen);
1437 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1438 && PL_curstackinfo->si_prev)
1446 register PERL_CONTEXT *cx;
1449 if (cxix < cxstack_ix)
1452 POPBLOCK(cx,PL_curpm);
1453 if (CxTYPE(cx) != CXt_EVAL) {
1455 message = SvPVx_const(ERRSV, msglen);
1456 PerlIO_write(Perl_error_log, "panic: die ", 11);
1457 PerlIO_write(Perl_error_log, message, msglen);
1462 if (gimme == G_SCALAR)
1463 *++newsp = &PL_sv_undef;
1464 PL_stack_sp = newsp;
1468 /* LEAVE could clobber PL_curcop (see save_re_context())
1469 * XXX it might be better to find a way to avoid messing with
1470 * PL_curcop in save_re_context() instead, but this is a more
1471 * minimal fix --GSAR */
1472 PL_curcop = cx->blk_oldcop;
1474 if (optype == OP_REQUIRE) {
1475 const char* msg = SvPVx_nolen_const(ERRSV);
1476 SV * const nsv = cx->blk_eval.old_namesv;
1477 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1479 DIE(aTHX_ "%sCompilation failed in require",
1480 *msg ? msg : "Unknown error\n");
1482 assert(CxTYPE(cx) == CXt_EVAL);
1483 return cx->blk_eval.retop;
1487 message = SvPVx_const(ERRSV, msglen);
1489 write_to_stderr(message, msglen);
1498 if (SvTRUE(left) != SvTRUE(right))
1510 RETURNOP(cLOGOP->op_other);
1519 RETURNOP(cLOGOP->op_other);
1528 if (!sv || !SvANY(sv)) {
1529 RETURNOP(cLOGOP->op_other);
1532 switch (SvTYPE(sv)) {
1534 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1538 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1542 if (CvROOT(sv) || CvXSUB(sv))
1552 RETURNOP(cLOGOP->op_other);
1558 register I32 cxix = dopoptosub(cxstack_ix);
1559 register const PERL_CONTEXT *cx;
1560 register const PERL_CONTEXT *ccstack = cxstack;
1561 const PERL_SI *top_si = PL_curstackinfo;
1563 const char *stashname;
1570 /* we may be in a higher stacklevel, so dig down deeper */
1571 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1572 top_si = top_si->si_prev;
1573 ccstack = top_si->si_cxstack;
1574 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1577 if (GIMME != G_ARRAY) {
1583 /* caller() should not report the automatic calls to &DB::sub */
1584 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1585 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1589 cxix = dopoptosub_at(ccstack, cxix - 1);
1592 cx = &ccstack[cxix];
1593 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1594 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1595 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1596 field below is defined for any cx. */
1597 /* caller() should not report the automatic calls to &DB::sub */
1598 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1599 cx = &ccstack[dbcxix];
1602 stashname = CopSTASHPV(cx->blk_oldcop);
1603 if (GIMME != G_ARRAY) {
1606 PUSHs(&PL_sv_undef);
1609 sv_setpv(TARG, stashname);
1618 PUSHs(&PL_sv_undef);
1620 PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1621 PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1622 PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1625 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1626 GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1627 /* So is ccstack[dbcxix]. */
1629 SV * const sv = NEWSV(49, 0);
1630 gv_efullname3(sv, cvgv, Nullch);
1631 PUSHs(sv_2mortal(sv));
1632 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1635 PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1636 PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1640 PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1641 PUSHs(sv_2mortal(newSViv(0)));
1643 gimme = (I32)cx->blk_gimme;
1644 if (gimme == G_VOID)
1645 PUSHs(&PL_sv_undef);
1647 PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1648 if (CxTYPE(cx) == CXt_EVAL) {
1650 if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1651 PUSHs(cx->blk_eval.cur_text);
1655 else if (cx->blk_eval.old_namesv) {
1656 PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1659 /* eval BLOCK (try blocks have old_namesv == 0) */
1661 PUSHs(&PL_sv_undef);
1662 PUSHs(&PL_sv_undef);
1666 PUSHs(&PL_sv_undef);
1667 PUSHs(&PL_sv_undef);
1669 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1670 && CopSTASH_eq(PL_curcop, PL_debstash))
1672 AV * const ary = cx->blk_sub.argarray;
1673 const int off = AvARRAY(ary) - AvALLOC(ary);
1677 PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1680 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1683 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1684 av_extend(PL_dbargs, AvFILLp(ary) + off);
1685 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1686 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1688 /* XXX only hints propagated via op_private are currently
1689 * visible (others are not easily accessible, since they
1690 * use the global PL_hints) */
1691 PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1692 HINT_PRIVATE_MASK)));
1695 SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1697 if (old_warnings == pWARN_NONE ||
1698 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1699 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1700 else if (old_warnings == pWARN_ALL ||
1701 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1702 /* Get the bit mask for $warnings::Bits{all}, because
1703 * it could have been extended by warnings::register */
1705 HV *bits = get_hv("warnings::Bits", FALSE);
1706 if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1707 mask = newSVsv(*bits_all);
1710 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1714 mask = newSVsv(old_warnings);
1715 PUSHs(sv_2mortal(mask));
1729 sv_reset(tmps, CopSTASH(PL_curcop));
1739 /* like pp_nextstate, but used instead when the debugger is active */
1744 PL_curcop = (COP*)PL_op;
1745 TAINT_NOT; /* Each statement is presumed innocent */
1746 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1749 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1750 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1754 register PERL_CONTEXT *cx;
1755 const I32 gimme = G_ARRAY;
1762 DIE(aTHX_ "No DB::DB routine defined");
1764 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1765 /* don't do recursive DB::DB call */
1777 PUSHBLOCK(cx, CXt_SUB, SP);
1779 cx->blk_sub.retop = PL_op->op_next;
1782 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1783 RETURNOP(CvSTART(cv));
1797 register PERL_CONTEXT *cx;
1798 const I32 gimme = GIMME_V;
1800 U32 cxtype = CXt_LOOP;
1808 if (PL_op->op_targ) {
1809 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1810 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1811 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1812 SVs_PADSTALE, SVs_PADSTALE);
1814 #ifndef USE_ITHREADS
1815 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1818 SAVEPADSV(PL_op->op_targ);
1819 iterdata = INT2PTR(void*, PL_op->op_targ);
1820 cxtype |= CXp_PADVAR;
1825 svp = &GvSV(gv); /* symbol table variable */
1826 SAVEGENERICSV(*svp);
1829 iterdata = (void*)gv;
1835 PUSHBLOCK(cx, cxtype, SP);
1837 PUSHLOOP(cx, iterdata, MARK);
1839 PUSHLOOP(cx, svp, MARK);
1841 if (PL_op->op_flags & OPf_STACKED) {
1842 cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1843 if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1845 SV *right = (SV*)cx->blk_loop.iterary;
1848 if (RANGE_IS_NUMERIC(sv,right)) {
1849 if ((SvOK(sv) && SvNV(sv) < IV_MIN) ||
1850 (SvOK(right) && SvNV(right) >= IV_MAX))
1851 DIE(aTHX_ "Range iterator outside integer range");
1852 cx->blk_loop.iterix = SvIV(sv);
1853 cx->blk_loop.itermax = SvIV(right);
1855 /* for correct -Dstv display */
1856 cx->blk_oldsp = sp - PL_stack_base;
1860 cx->blk_loop.iterlval = newSVsv(sv);
1861 (void) SvPV_force_nolen(cx->blk_loop.iterlval);
1862 (void) SvPV_nolen_const(right);
1865 else if (PL_op->op_private & OPpITER_REVERSED) {
1866 cx->blk_loop.itermax = -1;
1867 cx->blk_loop.iterix = AvFILL(cx->blk_loop.iterary);
1872 cx->blk_loop.iterary = PL_curstack;
1873 AvFILLp(PL_curstack) = SP - PL_stack_base;
1874 if (PL_op->op_private & OPpITER_REVERSED) {
1875 cx->blk_loop.itermax = MARK - PL_stack_base;
1876 cx->blk_loop.iterix = cx->blk_oldsp;
1879 cx->blk_loop.iterix = MARK - PL_stack_base;
1889 register PERL_CONTEXT *cx;
1890 const I32 gimme = GIMME_V;
1896 PUSHBLOCK(cx, CXt_LOOP, SP);
1897 PUSHLOOP(cx, 0, SP);
1905 register PERL_CONTEXT *cx;
1912 assert(CxTYPE(cx) == CXt_LOOP);
1914 newsp = PL_stack_base + cx->blk_loop.resetsp;
1917 if (gimme == G_VOID)
1919 else if (gimme == G_SCALAR) {
1921 *++newsp = sv_mortalcopy(*SP);
1923 *++newsp = &PL_sv_undef;
1927 *++newsp = sv_mortalcopy(*++mark);
1928 TAINT_NOT; /* Each item is independent */
1934 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
1935 PL_curpm = newpm; /* ... and pop $1 et al */
1947 register PERL_CONTEXT *cx;
1948 bool popsub2 = FALSE;
1949 bool clear_errsv = FALSE;
1957 if (PL_curstackinfo->si_type == PERLSI_SORT) {
1958 if (cxstack_ix == PL_sortcxix
1959 || dopoptosub(cxstack_ix) <= PL_sortcxix)
1961 if (cxstack_ix > PL_sortcxix)
1962 dounwind(PL_sortcxix);
1963 AvARRAY(PL_curstack)[1] = *SP;
1964 PL_stack_sp = PL_stack_base + 1;
1969 cxix = dopoptosub(cxstack_ix);
1971 DIE(aTHX_ "Can't return outside a subroutine");
1972 if (cxix < cxstack_ix)
1976 switch (CxTYPE(cx)) {
1979 retop = cx->blk_sub.retop;
1980 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
1983 if (!(PL_in_eval & EVAL_KEEPERR))
1986 retop = cx->blk_eval.retop;
1990 if (optype == OP_REQUIRE &&
1991 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1993 /* Unassume the success we assumed earlier. */
1994 SV * const nsv = cx->blk_eval.old_namesv;
1995 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
1996 DIE(aTHX_ "%"SVf" did not return a true value", nsv);
2001 retop = cx->blk_sub.retop;
2004 DIE(aTHX_ "panic: return");
2008 if (gimme == G_SCALAR) {
2011 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2013 *++newsp = SvREFCNT_inc(*SP);
2018 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2020 *++newsp = sv_mortalcopy(sv);
2025 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2028 *++newsp = sv_mortalcopy(*SP);
2031 *++newsp = &PL_sv_undef;
2033 else if (gimme == G_ARRAY) {
2034 while (++MARK <= SP) {
2035 *++newsp = (popsub2 && SvTEMP(*MARK))
2036 ? *MARK : sv_mortalcopy(*MARK);
2037 TAINT_NOT; /* Each item is independent */
2040 PL_stack_sp = newsp;
2043 /* Stack values are safe: */
2046 POPSUB(cx,sv); /* release CV and @_ ... */
2050 PL_curpm = newpm; /* ... and pop $1 et al */
2054 sv_setpvn(ERRSV,"",0);
2062 register PERL_CONTEXT *cx;
2073 if (PL_op->op_flags & OPf_SPECIAL) {
2074 cxix = dopoptoloop(cxstack_ix);
2076 DIE(aTHX_ "Can't \"last\" outside a loop block");
2079 cxix = dopoptolabel(cPVOP->op_pv);
2081 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2083 if (cxix < cxstack_ix)
2087 cxstack_ix++; /* temporarily protect top context */
2089 switch (CxTYPE(cx)) {
2092 newsp = PL_stack_base + cx->blk_loop.resetsp;
2093 nextop = cx->blk_loop.last_op->op_next;
2097 nextop = cx->blk_sub.retop;
2101 nextop = cx->blk_eval.retop;
2105 nextop = cx->blk_sub.retop;
2108 DIE(aTHX_ "panic: last");
2112 if (gimme == G_SCALAR) {
2114 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2115 ? *SP : sv_mortalcopy(*SP);
2117 *++newsp = &PL_sv_undef;
2119 else if (gimme == G_ARRAY) {
2120 while (++MARK <= SP) {
2121 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2122 ? *MARK : sv_mortalcopy(*MARK);
2123 TAINT_NOT; /* Each item is independent */
2131 /* Stack values are safe: */
2134 POPLOOP(cx); /* release loop vars ... */
2138 POPSUB(cx,sv); /* release CV and @_ ... */
2141 PL_curpm = newpm; /* ... and pop $1 et al */
2144 PERL_UNUSED_VAR(optype);
2145 PERL_UNUSED_VAR(gimme);
2153 register PERL_CONTEXT *cx;
2156 if (PL_op->op_flags & OPf_SPECIAL) {
2157 cxix = dopoptoloop(cxstack_ix);
2159 DIE(aTHX_ "Can't \"next\" outside a loop block");
2162 cxix = dopoptolabel(cPVOP->op_pv);
2164 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2166 if (cxix < cxstack_ix)
2169 /* clear off anything above the scope we're re-entering, but
2170 * save the rest until after a possible continue block */
2171 inner = PL_scopestack_ix;
2173 if (PL_scopestack_ix < inner)
2174 leave_scope(PL_scopestack[PL_scopestack_ix]);
2175 PL_curcop = cx->blk_oldcop;
2176 return cx->blk_loop.next_op;
2183 register PERL_CONTEXT *cx;
2187 if (PL_op->op_flags & OPf_SPECIAL) {
2188 cxix = dopoptoloop(cxstack_ix);
2190 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2193 cxix = dopoptolabel(cPVOP->op_pv);
2195 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2197 if (cxix < cxstack_ix)
2200 redo_op = cxstack[cxix].blk_loop.redo_op;
2201 if (redo_op->op_type == OP_ENTER) {
2202 /* pop one less context to avoid $x being freed in while (my $x..) */
2204 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2205 redo_op = redo_op->op_next;
2209 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2210 LEAVE_SCOPE(oldsave);
2212 PL_curcop = cx->blk_oldcop;
2217 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2220 static const char too_deep[] = "Target of goto is too deeply nested";
2223 Perl_croak(aTHX_ too_deep);
2224 if (o->op_type == OP_LEAVE ||
2225 o->op_type == OP_SCOPE ||
2226 o->op_type == OP_LEAVELOOP ||
2227 o->op_type == OP_LEAVESUB ||
2228 o->op_type == OP_LEAVETRY)
2230 *ops++ = cUNOPo->op_first;
2232 Perl_croak(aTHX_ too_deep);
2235 if (o->op_flags & OPf_KIDS) {
2237 /* First try all the kids at this level, since that's likeliest. */
2238 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2239 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2240 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2243 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2244 if (kid == PL_lastgotoprobe)
2246 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2249 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2250 ops[-1]->op_type == OP_DBSTATE)
2255 if ((o = dofindlabel(kid, label, ops, oplimit)))
2274 register PERL_CONTEXT *cx;
2275 #define GOTO_DEPTH 64
2276 OP *enterops[GOTO_DEPTH];
2277 const char *label = 0;
2278 const bool do_dump = (PL_op->op_type == OP_DUMP);
2279 static const char must_have_label[] = "goto must have label";
2281 if (PL_op->op_flags & OPf_STACKED) {
2282 SV * const sv = POPs;
2284 /* This egregious kludge implements goto &subroutine */
2285 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2287 register PERL_CONTEXT *cx;
2288 CV* cv = (CV*)SvRV(sv);
2295 if (!CvROOT(cv) && !CvXSUB(cv)) {
2296 const GV * const gv = CvGV(cv);
2300 /* autoloaded stub? */
2301 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2303 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2304 GvNAMELEN(gv), FALSE);
2305 if (autogv && (cv = GvCV(autogv)))
2307 tmpstr = sv_newmortal();
2308 gv_efullname3(tmpstr, gv, Nullch);
2309 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2311 DIE(aTHX_ "Goto undefined subroutine");
2314 /* First do some returnish stuff. */
2315 (void)SvREFCNT_inc(cv); /* avoid premature free during unwind */
2317 cxix = dopoptosub(cxstack_ix);
2319 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2320 if (cxix < cxstack_ix)
2324 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2325 if (CxTYPE(cx) == CXt_EVAL) {
2327 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2329 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2331 if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2332 /* put @_ back onto stack */
2333 AV* av = cx->blk_sub.argarray;
2335 items = AvFILLp(av) + 1;
2336 EXTEND(SP, items+1); /* @_ could have been extended. */
2337 Copy(AvARRAY(av), SP + 1, items, SV*);
2338 SvREFCNT_dec(GvAV(PL_defgv));
2339 GvAV(PL_defgv) = cx->blk_sub.savearray;
2341 /* abandon @_ if it got reified */
2346 av_extend(av, items-1);
2348 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2351 else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2352 AV* const av = GvAV(PL_defgv);
2353 items = AvFILLp(av) + 1;
2354 EXTEND(SP, items+1); /* @_ could have been extended. */
2355 Copy(AvARRAY(av), SP + 1, items, SV*);
2359 if (CxTYPE(cx) == CXt_SUB &&
2360 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2361 SvREFCNT_dec(cx->blk_sub.cv);
2362 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2363 LEAVE_SCOPE(oldsave);
2365 /* Now do some callish stuff. */
2367 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2369 OP* retop = cx->blk_sub.retop;
2372 for (index=0; index<items; index++)
2373 sv_2mortal(SP[-index]);
2375 #ifdef PERL_XSUB_OLDSTYLE
2376 if (CvOLDSTYLE(cv)) {
2377 I32 (*fp3)(int,int,int);
2382 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2383 items = (*fp3)(CvXSUBANY(cv).any_i32,
2384 mark - PL_stack_base + 1,
2386 SP = PL_stack_base + items;
2389 #endif /* PERL_XSUB_OLDSTYLE */
2394 /* XS subs don't have a CxSUB, so pop it */
2395 POPBLOCK(cx, PL_curpm);
2396 /* Push a mark for the start of arglist */
2399 (void)(*CvXSUB(cv))(aTHX_ cv);
2400 /* Put these at the bottom since the vars are set but not used */
2401 PERL_UNUSED_VAR(newsp);
2402 PERL_UNUSED_VAR(gimme);
2408 AV* padlist = CvPADLIST(cv);
2409 if (CxTYPE(cx) == CXt_EVAL) {
2410 PL_in_eval = cx->blk_eval.old_in_eval;
2411 PL_eval_root = cx->blk_eval.old_eval_root;
2412 cx->cx_type = CXt_SUB;
2413 cx->blk_sub.hasargs = 0;
2415 cx->blk_sub.cv = cv;
2416 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2419 if (CvDEPTH(cv) < 2)
2420 (void)SvREFCNT_inc(cv);
2422 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2423 sub_crush_depth(cv);
2424 pad_push(padlist, CvDEPTH(cv));
2427 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2428 if (cx->blk_sub.hasargs)
2430 AV* av = (AV*)PAD_SVl(0);
2433 cx->blk_sub.savearray = GvAV(PL_defgv);
2434 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2435 CX_CURPAD_SAVE(cx->blk_sub);
2436 cx->blk_sub.argarray = av;
2438 if (items >= AvMAX(av) + 1) {
2440 if (AvARRAY(av) != ary) {
2441 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2442 SvPV_set(av, (char*)ary);
2444 if (items >= AvMAX(av) + 1) {
2445 AvMAX(av) = items - 1;
2446 Renew(ary,items+1,SV*);
2448 SvPV_set(av, (char*)ary);
2452 Copy(mark,AvARRAY(av),items,SV*);
2453 AvFILLp(av) = items - 1;
2454 assert(!AvREAL(av));
2456 /* transfer 'ownership' of refcnts to new @_ */
2466 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2468 * We do not care about using sv to call CV;
2469 * it's for informational purposes only.
2471 SV * const sv = GvSV(PL_DBsub);
2475 if (PERLDB_SUB_NN) {
2476 const int type = SvTYPE(sv);
2477 if (type < SVt_PVIV && type != SVt_IV)
2478 sv_upgrade(sv, SVt_PVIV);
2480 SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
2482 gv_efullname3(sv, CvGV(cv), Nullch);
2485 && (gotocv = get_cv("DB::goto", FALSE)) ) {
2486 PUSHMARK( PL_stack_sp );
2487 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2491 RETURNOP(CvSTART(cv));
2495 label = SvPV_nolen_const(sv);
2496 if (!(do_dump || *label))
2497 DIE(aTHX_ must_have_label);
2500 else if (PL_op->op_flags & OPf_SPECIAL) {
2502 DIE(aTHX_ must_have_label);
2505 label = cPVOP->op_pv;
2507 if (label && *label) {
2509 bool leaving_eval = FALSE;
2510 bool in_block = FALSE;
2511 PERL_CONTEXT *last_eval_cx = 0;
2515 PL_lastgotoprobe = 0;
2517 for (ix = cxstack_ix; ix >= 0; ix--) {
2519 switch (CxTYPE(cx)) {
2521 leaving_eval = TRUE;
2522 if (!CxTRYBLOCK(cx)) {
2523 gotoprobe = (last_eval_cx ?
2524 last_eval_cx->blk_eval.old_eval_root :
2529 /* else fall through */
2531 gotoprobe = cx->blk_oldcop->op_sibling;
2537 gotoprobe = cx->blk_oldcop->op_sibling;
2540 gotoprobe = PL_main_root;
2543 if (CvDEPTH(cx->blk_sub.cv)) {
2544 gotoprobe = CvROOT(cx->blk_sub.cv);
2550 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2553 DIE(aTHX_ "panic: goto");
2554 gotoprobe = PL_main_root;
2558 retop = dofindlabel(gotoprobe, label,
2559 enterops, enterops + GOTO_DEPTH);
2563 PL_lastgotoprobe = gotoprobe;
2566 DIE(aTHX_ "Can't find label %s", label);
2568 /* if we're leaving an eval, check before we pop any frames
2569 that we're not going to punt, otherwise the error
2572 if (leaving_eval && *enterops && enterops[1]) {
2574 for (i = 1; enterops[i]; i++)
2575 if (enterops[i]->op_type == OP_ENTERITER)
2576 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2579 /* pop unwanted frames */
2581 if (ix < cxstack_ix) {
2588 oldsave = PL_scopestack[PL_scopestack_ix];
2589 LEAVE_SCOPE(oldsave);
2592 /* push wanted frames */
2594 if (*enterops && enterops[1]) {
2596 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2597 for (; enterops[ix]; ix++) {
2598 PL_op = enterops[ix];
2599 /* Eventually we may want to stack the needed arguments
2600 * for each op. For now, we punt on the hard ones. */
2601 if (PL_op->op_type == OP_ENTERITER)
2602 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2603 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2611 if (!retop) retop = PL_main_start;
2613 PL_restartop = retop;
2614 PL_do_undump = TRUE;
2618 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2619 PL_do_undump = FALSE;
2635 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2637 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2640 PL_exit_flags |= PERL_EXIT_EXPECTED;
2642 PUSHs(&PL_sv_undef);
2650 const NV value = SvNVx(GvSV(cCOP->cop_gv));
2651 register I32 match = I_32(value);
2654 if (((NV)match) > value)
2655 --match; /* was fractional--truncate other way */
2657 match -= cCOP->uop.scop.scop_offset;
2660 else if (match > cCOP->uop.scop.scop_max)
2661 match = cCOP->uop.scop.scop_max;
2662 PL_op = cCOP->uop.scop.scop_next[match];
2672 PL_op = PL_op->op_next; /* can't assume anything */
2674 match = *(SvPVx_nolen_const(GvSV(cCOP->cop_gv))) & 255;
2675 match -= cCOP->uop.scop.scop_offset;
2678 else if (match > cCOP->uop.scop.scop_max)
2679 match = cCOP->uop.scop.scop_max;
2680 PL_op = cCOP->uop.scop.scop_next[match];
2689 S_save_lines(pTHX_ AV *array, SV *sv)
2691 const char *s = SvPVX_const(sv);
2692 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2695 while (s && s < send) {
2697 SV * const tmpstr = NEWSV(85,0);
2699 sv_upgrade(tmpstr, SVt_PVMG);
2700 t = strchr(s, '\n');
2706 sv_setpvn(tmpstr, s, t - s);
2707 av_store(array, line++, tmpstr);
2713 S_docatch_body(pTHX)
2720 S_docatch(pTHX_ OP *o)
2723 OP * const oldop = PL_op;
2727 assert(CATCH_GET == TRUE);
2734 assert(cxstack_ix >= 0);
2735 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2736 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2741 /* die caught by an inner eval - continue inner loop */
2743 /* NB XXX we rely on the old popped CxEVAL still being at the top
2744 * of the stack; the way die_where() currently works, this
2745 * assumption is valid. In theory The cur_top_env value should be
2746 * returned in another global, the way retop (aka PL_restartop)
2748 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2751 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2753 PL_op = PL_restartop;
2770 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2771 /* sv Text to convert to OP tree. */
2772 /* startop op_free() this to undo. */
2773 /* code Short string id of the caller. */
2775 dVAR; dSP; /* Make POPBLOCK work. */
2782 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2783 char *tmpbuf = tbuf;
2786 CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2791 /* switch to eval mode */
2793 if (IN_PERL_COMPILETIME) {
2794 SAVECOPSTASH_FREE(&PL_compiling);
2795 CopSTASH_set(&PL_compiling, PL_curstash);
2797 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2798 SV * const sv = sv_newmortal();
2799 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2800 code, (unsigned long)++PL_evalseq,
2801 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2805 sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2806 SAVECOPFILE_FREE(&PL_compiling);
2807 CopFILE_set(&PL_compiling, tmpbuf+2);
2808 SAVECOPLINE(&PL_compiling);
2809 CopLINE_set(&PL_compiling, 1);
2810 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2811 deleting the eval's FILEGV from the stash before gv_check() runs
2812 (i.e. before run-time proper). To work around the coredump that
2813 ensues, we always turn GvMULTI_on for any globals that were
2814 introduced within evals. See force_ident(). GSAR 96-10-12 */
2815 safestr = savepv(tmpbuf);
2816 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2818 #ifdef OP_IN_REGISTER
2824 /* we get here either during compilation, or via pp_regcomp at runtime */
2825 runtime = IN_PERL_RUNTIME;
2827 runcv = find_runcv(NULL);
2830 PL_op->op_type = OP_ENTEREVAL;
2831 PL_op->op_flags = 0; /* Avoid uninit warning. */
2832 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2833 PUSHEVAL(cx, 0, Nullgv);
2836 rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2838 rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2839 POPBLOCK(cx,PL_curpm);
2842 (*startop)->op_type = OP_NULL;
2843 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2845 /* XXX DAPM do this properly one year */
2846 *padp = (AV*)SvREFCNT_inc(PL_comppad);
2848 if (IN_PERL_COMPILETIME)
2849 PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2850 #ifdef OP_IN_REGISTER
2853 PERL_UNUSED_VAR(newsp);
2854 PERL_UNUSED_VAR(optype);
2861 =for apidoc find_runcv
2863 Locate the CV corresponding to the currently executing sub or eval.
2864 If db_seqp is non_null, skip CVs that are in the DB package and populate
2865 *db_seqp with the cop sequence number at the point that the DB:: code was
2866 entered. (allows debuggers to eval in the scope of the breakpoint rather
2867 than in the scope of the debugger itself).
2873 Perl_find_runcv(pTHX_ U32 *db_seqp)
2878 *db_seqp = PL_curcop->cop_seq;
2879 for (si = PL_curstackinfo; si; si = si->si_prev) {
2881 for (ix = si->si_cxix; ix >= 0; ix--) {
2882 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2883 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2884 CV * const cv = cx->blk_sub.cv;
2885 /* skip DB:: code */
2886 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2887 *db_seqp = cx->blk_oldcop->cop_seq;
2892 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2900 /* Compile a require/do, an eval '', or a /(?{...})/.
2901 * In the last case, startop is non-null, and contains the address of
2902 * a pointer that should be set to the just-compiled code.
2903 * outside is the lexically enclosing CV (if any) that invoked us.
2906 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2908 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2911 OP * const saveop = PL_op;
2913 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2914 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2919 SAVESPTR(PL_compcv);
2920 PL_compcv = (CV*)NEWSV(1104,0);
2921 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2922 CvEVAL_on(PL_compcv);
2923 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2924 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2926 CvOUTSIDE_SEQ(PL_compcv) = seq;
2927 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2929 /* set up a scratch pad */
2931 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2934 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2936 /* make sure we compile in the right package */
2938 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2939 SAVESPTR(PL_curstash);
2940 PL_curstash = CopSTASH(PL_curcop);
2942 SAVESPTR(PL_beginav);
2943 PL_beginav = newAV();
2944 SAVEFREESV(PL_beginav);
2945 SAVEI32(PL_error_count);
2947 /* try to compile it */
2949 PL_eval_root = Nullop;
2951 PL_curcop = &PL_compiling;
2952 PL_curcop->cop_arybase = 0;
2953 if (saveop && saveop->op_flags & OPf_SPECIAL)
2954 PL_in_eval |= EVAL_KEEPERR;
2956 sv_setpvn(ERRSV,"",0);
2957 if (yyparse() || PL_error_count || !PL_eval_root) {
2958 SV **newsp; /* Used by POPBLOCK. */
2959 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2960 I32 optype = 0; /* Might be reset by POPEVAL. */
2965 op_free(PL_eval_root);
2966 PL_eval_root = Nullop;
2968 SP = PL_stack_base + POPMARK; /* pop original mark */
2970 POPBLOCK(cx,PL_curpm);
2976 msg = SvPVx_nolen_const(ERRSV);
2977 if (optype == OP_REQUIRE) {
2978 const SV * const nsv = cx->blk_eval.old_namesv;
2979 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
2981 DIE(aTHX_ "%sCompilation failed in require",
2982 *msg ? msg : "Unknown error\n");
2985 POPBLOCK(cx,PL_curpm);
2987 Perl_croak(aTHX_ "%sCompilation failed in regexp",
2988 (*msg ? msg : "Unknown error\n"));
2992 sv_setpv(ERRSV, "Compilation error");
2995 PERL_UNUSED_VAR(newsp);
2998 CopLINE_set(&PL_compiling, 0);
3000 *startop = PL_eval_root;
3002 SAVEFREEOP(PL_eval_root);
3004 /* Set the context for this new optree.
3005 * If the last op is an OP_REQUIRE, force scalar context.
3006 * Otherwise, propagate the context from the eval(). */
3007 if (PL_eval_root->op_type == OP_LEAVEEVAL
3008 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3009 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3011 scalar(PL_eval_root);
3012 else if (gimme & G_VOID)
3013 scalarvoid(PL_eval_root);
3014 else if (gimme & G_ARRAY)
3017 scalar(PL_eval_root);
3019 DEBUG_x(dump_eval());
3021 /* Register with debugger: */
3022 if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
3023 CV * const cv = get_cv("DB::postponed", FALSE);
3027 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3029 call_sv((SV*)cv, G_DISCARD);
3033 /* compiled okay, so do it */
3035 CvDEPTH(PL_compcv) = 1;
3036 SP = PL_stack_base + POPMARK; /* pop original mark */
3037 PL_op = saveop; /* The caller may need it. */
3038 PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
3040 RETURNOP(PL_eval_start);
3044 S_doopen_pm(pTHX_ const char *name, const char *mode)
3046 #ifndef PERL_DISABLE_PMC
3047 const STRLEN namelen = strlen(name);
3050 if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
3051 SV * const pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
3052 const char * const pmc = SvPV_nolen_const(pmcsv);
3054 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3055 fp = PerlIO_open(name, mode);
3059 if (PerlLIO_stat(name, &pmstat) < 0 ||
3060 pmstat.st_mtime < pmcstat.st_mtime)
3062 fp = PerlIO_open(pmc, mode);
3065 fp = PerlIO_open(name, mode);
3068 SvREFCNT_dec(pmcsv);
3071 fp = PerlIO_open(name, mode);
3075 return PerlIO_open(name, mode);
3076 #endif /* !PERL_DISABLE_PMC */
3082 register PERL_CONTEXT *cx;
3086 const char *tryname = Nullch;
3087 SV *namesv = Nullsv;
3089 const I32 gimme = GIMME_V;
3090 PerlIO *tryrsfp = 0;
3091 int filter_has_file = 0;
3092 GV *filter_child_proc = 0;
3093 SV *filter_state = 0;
3100 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3101 if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) /* require v5.6.1 */
3102 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3103 "v-string in use/require non-portable");
3105 sv = new_version(sv);
3106 if (!sv_derived_from(PL_patchlevel, "version"))
3107 (void *)upg_version(PL_patchlevel);
3108 if ( vcmp(sv,PL_patchlevel) > 0 )
3109 DIE(aTHX_ "Perl %"SVf" required--this is only %"SVf", stopped",
3110 vnormal(sv), vnormal(PL_patchlevel));
3114 name = SvPV_const(sv, len);
3115 if (!(name && len > 0 && *name))
3116 DIE(aTHX_ "Null filename used");
3117 TAINT_PROPER("require");
3118 if (PL_op->op_type == OP_REQUIRE &&
3119 (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3120 if (*svp != &PL_sv_undef)
3123 DIE(aTHX_ "Compilation failed in require");
3126 /* prepare to compile file */
3128 if (path_is_absolute(name)) {
3130 tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3132 #ifdef MACOS_TRADITIONAL
3136 MacPerl_CanonDir(name, newname, 1);
3137 if (path_is_absolute(newname)) {
3139 tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3144 AV *ar = GvAVn(PL_incgv);
3148 if ((unixname = tounixspec(name, Nullch)) != Nullch)
3151 namesv = NEWSV(806, 0);
3152 for (i = 0; i <= AvFILL(ar); i++) {
3153 SV *dirsv = *av_fetch(ar, i, TRUE);
3159 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3160 && !sv_isobject(loader))
3162 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3165 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3166 PTR2UV(SvRV(dirsv)), name);
3167 tryname = SvPVX_const(namesv);
3178 if (sv_isobject(loader))
3179 count = call_method("INC", G_ARRAY);
3181 count = call_sv(loader, G_ARRAY);
3191 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3195 if (SvTYPE(arg) == SVt_PVGV) {
3196 IO *io = GvIO((GV *)arg);
3201 tryrsfp = IoIFP(io);
3202 if (IoTYPE(io) == IoTYPE_PIPE) {
3203 /* reading from a child process doesn't
3204 nest -- when returning from reading
3205 the inner module, the outer one is
3206 unreadable (closed?) I've tried to
3207 save the gv to manage the lifespan of
3208 the pipe, but this didn't help. XXX */
3209 filter_child_proc = (GV *)arg;
3210 (void)SvREFCNT_inc(filter_child_proc);
3213 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3214 PerlIO_close(IoOFP(io));
3226 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3228 (void)SvREFCNT_inc(filter_sub);
3231 filter_state = SP[i];
3232 (void)SvREFCNT_inc(filter_state);
3236 tryrsfp = PerlIO_open("/dev/null",
3252 filter_has_file = 0;
3253 if (filter_child_proc) {
3254 SvREFCNT_dec(filter_child_proc);
3255 filter_child_proc = 0;
3258 SvREFCNT_dec(filter_state);
3262 SvREFCNT_dec(filter_sub);
3267 if (!path_is_absolute(name)
3268 #ifdef MACOS_TRADITIONAL
3269 /* We consider paths of the form :a:b ambiguous and interpret them first
3270 as global then as local
3272 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3275 const char *dir = SvPVx_nolen_const(dirsv);
3276 #ifdef MACOS_TRADITIONAL
3280 MacPerl_CanonDir(name, buf2, 1);
3281 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3285 if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3287 sv_setpv(namesv, unixdir);
3288 sv_catpv(namesv, unixname);
3291 if (PL_origfilename[0] &&
3292 PL_origfilename[1] == ':' &&
3293 !(dir[0] && dir[1] == ':'))
3294 Perl_sv_setpvf(aTHX_ namesv,
3299 Perl_sv_setpvf(aTHX_ namesv,
3303 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3307 TAINT_PROPER("require");
3308 tryname = SvPVX_const(namesv);
3309 tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3311 if (tryname[0] == '.' && tryname[1] == '/')
3320 SAVECOPFILE_FREE(&PL_compiling);
3321 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3322 SvREFCNT_dec(namesv);
3324 if (PL_op->op_type == OP_REQUIRE) {
3325 const char *msgstr = name;
3326 if (namesv) { /* did we lookup @INC? */
3327 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3328 SV *dirmsgsv = NEWSV(0, 0);
3329 AV *ar = GvAVn(PL_incgv);
3331 sv_catpvn(msg, " in @INC", 8);
3332 if (instr(SvPVX_const(msg), ".h "))
3333 sv_catpv(msg, " (change .h to .ph maybe?)");
3334 if (instr(SvPVX_const(msg), ".ph "))
3335 sv_catpv(msg, " (did you run h2ph?)");
3336 sv_catpv(msg, " (@INC contains:");
3337 for (i = 0; i <= AvFILL(ar); i++) {
3338 const char *dir = SvPVx_nolen_const(*av_fetch(ar, i, TRUE));
3339 Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3340 sv_catsv(msg, dirmsgsv);
3342 sv_catpvn(msg, ")", 1);
3343 SvREFCNT_dec(dirmsgsv);
3344 msgstr = SvPV_nolen_const(msg);
3346 DIE(aTHX_ "Can't locate %s", msgstr);
3352 SETERRNO(0, SS_NORMAL);
3354 /* Assume success here to prevent recursive requirement. */
3356 /* Check whether a hook in @INC has already filled %INC */
3357 if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3358 (void)hv_store(GvHVn(PL_incgv), name, len,
3359 (hook_sv ? SvREFCNT_inc(hook_sv)
3360 : newSVpv(CopFILE(&PL_compiling), 0)),
3366 lex_start(sv_2mortal(newSVpvn("",0)));
3367 SAVEGENERICSV(PL_rsfp_filters);
3368 PL_rsfp_filters = Nullav;
3373 SAVESPTR(PL_compiling.cop_warnings);
3374 if (PL_dowarn & G_WARN_ALL_ON)
3375 PL_compiling.cop_warnings = pWARN_ALL ;
3376 else if (PL_dowarn & G_WARN_ALL_OFF)
3377 PL_compiling.cop_warnings = pWARN_NONE ;
3378 else if (PL_taint_warn)
3379 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3381 PL_compiling.cop_warnings = pWARN_STD ;
3382 SAVESPTR(PL_compiling.cop_io);
3383 PL_compiling.cop_io = Nullsv;
3385 if (filter_sub || filter_child_proc) {
3386 SV * const datasv = filter_add(run_user_filter, Nullsv);
3387 IoLINES(datasv) = filter_has_file;
3388 IoFMT_GV(datasv) = (GV *)filter_child_proc;
3389 IoTOP_GV(datasv) = (GV *)filter_state;
3390 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3393 /* switch to eval mode */
3394 PUSHBLOCK(cx, CXt_EVAL, SP);
3395 PUSHEVAL(cx, name, Nullgv);
3396 cx->blk_eval.retop = PL_op->op_next;
3398 SAVECOPLINE(&PL_compiling);
3399 CopLINE_set(&PL_compiling, 0);
3403 /* Store and reset encoding. */
3404 encoding = PL_encoding;
3405 PL_encoding = Nullsv;
3407 op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3409 /* Restore encoding. */
3410 PL_encoding = encoding;
3417 return pp_require();
3423 register PERL_CONTEXT *cx;
3425 const I32 gimme = GIMME_V;
3426 const I32 was = PL_sub_generation;
3427 char tbuf[TYPE_DIGITS(long) + 12];
3428 char *tmpbuf = tbuf;
3435 if (!SvPV_const(sv,len))
3437 TAINT_PROPER("eval");
3443 /* switch to eval mode */
3445 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3446 SV * const sv = sv_newmortal();
3447 Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3448 (unsigned long)++PL_evalseq,
3449 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3453 sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3454 SAVECOPFILE_FREE(&PL_compiling);
3455 CopFILE_set(&PL_compiling, tmpbuf+2);
3456 SAVECOPLINE(&PL_compiling);
3457 CopLINE_set(&PL_compiling, 1);
3458 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3459 deleting the eval's FILEGV from the stash before gv_check() runs
3460 (i.e. before run-time proper). To work around the coredump that
3461 ensues, we always turn GvMULTI_on for any globals that were
3462 introduced within evals. See force_ident(). GSAR 96-10-12 */
3463 safestr = savepv(tmpbuf);
3464 SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3466 PL_hints = PL_op->op_targ;
3467 SAVESPTR(PL_compiling.cop_warnings);
3468 if (specialWARN(PL_curcop->cop_warnings))
3469 PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3471 PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3472 SAVEFREESV(PL_compiling.cop_warnings);
3474 SAVESPTR(PL_compiling.cop_io);
3475 if (specialCopIO(PL_curcop->cop_io))
3476 PL_compiling.cop_io = PL_curcop->cop_io;
3478 PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3479 SAVEFREESV(PL_compiling.cop_io);
3481 /* special case: an eval '' executed within the DB package gets lexically
3482 * placed in the first non-DB CV rather than the current CV - this
3483 * allows the debugger to execute code, find lexicals etc, in the
3484 * scope of the code being debugged. Passing &seq gets find_runcv
3485 * to do the dirty work for us */
3486 runcv = find_runcv(&seq);
3488 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3489 PUSHEVAL(cx, 0, Nullgv);
3490 cx->blk_eval.retop = PL_op->op_next;
3492 /* prepare to compile string */
3494 if (PERLDB_LINE && PL_curstash != PL_debstash)
3495 save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3497 ret = doeval(gimme, NULL, runcv, seq);
3498 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3499 && ret != PL_op->op_next) { /* Successive compilation. */
3500 strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
3502 return DOCATCH(ret);
3512 register PERL_CONTEXT *cx;
3514 const U8 save_flags = PL_op -> op_flags;
3519 retop = cx->blk_eval.retop;
3522 if (gimme == G_VOID)
3524 else if (gimme == G_SCALAR) {
3527 if (SvFLAGS(TOPs) & SVs_TEMP)
3530 *MARK = sv_mortalcopy(TOPs);
3534 *MARK = &PL_sv_undef;
3539 /* in case LEAVE wipes old return values */
3540 for (mark = newsp + 1; mark <= SP; mark++) {
3541 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3542 *mark = sv_mortalcopy(*mark);
3543 TAINT_NOT; /* Each item is independent */
3547 PL_curpm = newpm; /* Don't pop $1 et al till now */
3550 assert(CvDEPTH(PL_compcv) == 1);
3552 CvDEPTH(PL_compcv) = 0;
3555 if (optype == OP_REQUIRE &&
3556 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3558 /* Unassume the success we assumed earlier. */
3559 SV * const nsv = cx->blk_eval.old_namesv;
3560 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3561 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3562 /* die_where() did LEAVE, or we won't be here */
3566 if (!(save_flags & OPf_SPECIAL))
3567 sv_setpvn(ERRSV,"",0);
3576 register PERL_CONTEXT *cx;
3577 const I32 gimme = GIMME_V;
3582 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3584 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3586 PL_in_eval = EVAL_INEVAL;
3587 sv_setpvn(ERRSV,"",0);
3589 return DOCATCH(PL_op->op_next);
3599 register PERL_CONTEXT *cx;
3604 PERL_UNUSED_VAR(optype);
3607 if (gimme == G_VOID)
3609 else if (gimme == G_SCALAR) {
3612 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3615 *MARK = sv_mortalcopy(TOPs);
3619 *MARK = &PL_sv_undef;
3624 /* in case LEAVE wipes old return values */
3625 for (mark = newsp + 1; mark <= SP; mark++) {
3626 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3627 *mark = sv_mortalcopy(*mark);
3628 TAINT_NOT; /* Each item is independent */
3632 PL_curpm = newpm; /* Don't pop $1 et al till now */
3635 sv_setpvn(ERRSV,"",0);
3640 S_doparseform(pTHX_ SV *sv)
3643 register char *s = SvPV_force(sv, len);
3644 register char *send = s + len;
3645 register char *base = Nullch;
3646 register I32 skipspaces = 0;
3647 bool noblank = FALSE;
3648 bool repeat = FALSE;
3649 bool postspace = FALSE;
3655 bool unchopnum = FALSE;
3656 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
3659 Perl_croak(aTHX_ "Null picture in formline");
3661 /* estimate the buffer size needed */
3662 for (base = s; s <= send; s++) {
3663 if (*s == '\n' || *s == '@' || *s == '^')
3669 Newx(fops, maxops, U32);
3674 *fpc++ = FF_LINEMARK;
3675 noblank = repeat = FALSE;
3693 case ' ': case '\t':
3700 } /* else FALL THROUGH */
3708 *fpc++ = FF_LITERAL;
3716 *fpc++ = (U16)skipspaces;
3720 *fpc++ = FF_NEWLINE;
3724 arg = fpc - linepc + 1;
3731 *fpc++ = FF_LINEMARK;
3732 noblank = repeat = FALSE;
3741 ischop = s[-1] == '^';
3747 arg = (s - base) - 1;
3749 *fpc++ = FF_LITERAL;
3757 *fpc++ = 2; /* skip the @* or ^* */
3759 *fpc++ = FF_LINESNGL;
3762 *fpc++ = FF_LINEGLOB;
3764 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3765 arg = ischop ? 512 : 0;
3770 const char * const f = ++s;
3773 arg |= 256 + (s - f);
3775 *fpc++ = s - base; /* fieldsize for FETCH */
3776 *fpc++ = FF_DECIMAL;
3778 unchopnum |= ! ischop;
3780 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
3781 arg = ischop ? 512 : 0;
3783 s++; /* skip the '0' first */
3787 const char * const f = ++s;
3790 arg |= 256 + (s - f);
3792 *fpc++ = s - base; /* fieldsize for FETCH */
3793 *fpc++ = FF_0DECIMAL;
3795 unchopnum |= ! ischop;
3799 bool ismore = FALSE;
3802 while (*++s == '>') ;
3803 prespace = FF_SPACE;
3805 else if (*s == '|') {
3806 while (*++s == '|') ;
3807 prespace = FF_HALFSPACE;
3812 while (*++s == '<') ;
3815 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3819 *fpc++ = s - base; /* fieldsize for FETCH */
3821 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3824 *fpc++ = (U16)prespace;
3838 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3840 { /* need to jump to the next word */
3842 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3843 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3844 s = SvPVX(sv) + SvCUR(sv) + z;
3846 Copy(fops, s, arg, U32);
3848 sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3851 if (unchopnum && repeat)
3852 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
3858 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
3860 /* Can value be printed in fldsize chars, using %*.*f ? */
3864 int intsize = fldsize - (value < 0 ? 1 : 0);
3871 while (intsize--) pwr *= 10.0;
3872 while (frcsize--) eps /= 10.0;
3875 if (value + eps >= pwr)
3878 if (value - eps <= -pwr)
3885 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3888 SV *datasv = FILTER_DATA(idx);
3889 const int filter_has_file = IoLINES(datasv);
3890 GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3891 SV *filter_state = (SV *)IoTOP_GV(datasv);
3892 SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3895 /* I was having segfault trouble under Linux 2.2.5 after a
3896 parse error occured. (Had to hack around it with a test
3897 for PL_error_count == 0.) Solaris doesn't segfault --
3898 not sure where the trouble is yet. XXX */
3900 if (filter_has_file) {
3901 len = FILTER_READ(idx+1, buf_sv, maxlen);
3904 if (filter_sub && len >= 0) {
3915 PUSHs(sv_2mortal(newSViv(maxlen)));
3917 PUSHs(filter_state);
3920 count = call_sv(filter_sub, G_SCALAR);
3936 IoLINES(datasv) = 0;
3937 if (filter_child_proc) {
3938 SvREFCNT_dec(filter_child_proc);
3939 IoFMT_GV(datasv) = Nullgv;
3942 SvREFCNT_dec(filter_state);
3943 IoTOP_GV(datasv) = Nullgv;
3946 SvREFCNT_dec(filter_sub);
3947 IoBOTTOM_GV(datasv) = Nullgv;
3949 filter_del(run_user_filter);
3955 /* perhaps someone can come up with a better name for
3956 this? it is not really "absolute", per se ... */
3958 S_path_is_absolute(pTHX_ const char *name)
3960 if (PERL_FILE_IS_ABSOLUTE(name)
3961 #ifdef MACOS_TRADITIONAL
3964 || (*name == '.' && (name[1] == '/' ||
3965 (name[1] == '.' && name[2] == '/'))))
3976 * c-indentation-style: bsd
3978 * indent-tabs-mode: t
3981 * ex: set ts=8 sts=4 sw=4 noet: