3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
50 cxix = dopoptosub(cxstack_ix);
54 switch (cxstack[cxix].blk_gimme) {
67 /* XXXX Should store the old value to allow for tie/overload - and
68 restore in regcomp, where marked with XXXX. */
78 register PMOP *pm = (PMOP*)cLOGOP->op_other;
82 /* prevent recompiling under /o and ithreads. */
83 #if defined(USE_ITHREADS)
84 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
85 if (PL_op->op_flags & OPf_STACKED) {
94 if (PL_op->op_flags & OPf_STACKED) {
95 /* multiple args; concatentate them */
97 tmpstr = PAD_SV(ARGTARG);
98 sv_setpvn(tmpstr, "", 0);
99 while (++MARK <= SP) {
100 if (PL_amagic_generation) {
102 if ((SvAMAGIC(tmpstr) || SvAMAGIC(*MARK)) &&
103 (sv = amagic_call(tmpstr, *MARK, concat_amg, AMGf_assign)))
105 sv_setsv(tmpstr, sv);
109 sv_catsv(tmpstr, *MARK);
118 SV * const sv = SvRV(tmpstr);
119 if (SvTYPE(sv) == SVt_REGEXP)
123 re = reg_temp_copy(re);
124 ReREFCNT_dec(PM_GETRE(pm));
129 const char *t = SvOK(tmpstr) ? SvPV_const(tmpstr, len) : "";
131 assert (re != (REGEXP*) &PL_sv_undef);
133 /* Check against the last compiled regexp. */
134 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
135 memNE(RX_PRECOMP(re), t, len))
137 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
138 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
142 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
144 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
146 } else if (PL_curcop->cop_hints_hash) {
147 SV *ptr = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, 0,
149 if (ptr && SvIOK(ptr) && SvIV(ptr))
150 eng = INT2PTR(regexp_engine*,SvIV(ptr));
153 if (PL_op->op_flags & OPf_SPECIAL)
154 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
156 if (DO_UTF8(tmpstr)) {
157 assert (SvUTF8(tmpstr));
158 } else if (SvUTF8(tmpstr)) {
159 /* Not doing UTF-8, despite what the SV says. Is this only if
160 we're trapped in use 'bytes'? */
161 /* Make a copy of the octet sequence, but without the flag on,
162 as the compiler now honours the SvUTF8 flag on tmpstr. */
164 const char *const p = SvPV(tmpstr, len);
165 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
169 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
171 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
173 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
174 inside tie/overload accessors. */
180 #ifndef INCOMPLETE_TAINTS
183 RX_EXTFLAGS(re) |= RXf_TAINTED;
185 RX_EXTFLAGS(re) &= ~RXf_TAINTED;
189 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
193 #if !defined(USE_ITHREADS)
194 /* can't change the optree at runtime either */
195 /* PMf_KEEP is handled differently under threads to avoid these problems */
196 if (pm->op_pmflags & PMf_KEEP) {
197 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
198 cLOGOP->op_first->op_next = PL_op->op_next;
208 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
209 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
210 register SV * const dstr = cx->sb_dstr;
211 register char *s = cx->sb_s;
212 register char *m = cx->sb_m;
213 char *orig = cx->sb_orig;
214 register REGEXP * const rx = cx->sb_rx;
216 REGEXP *old = PM_GETRE(pm);
220 PM_SETRE(pm,ReREFCNT_inc(rx));
223 rxres_restore(&cx->sb_rxres, rx);
224 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
226 if (cx->sb_iters++) {
227 const I32 saviters = cx->sb_iters;
228 if (cx->sb_iters > cx->sb_maxiters)
229 DIE(aTHX_ "Substitution loop");
231 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
232 cx->sb_rxtainted |= 2;
233 sv_catsv(dstr, POPs);
234 FREETMPS; /* Prevent excess tmp stack */
237 if (CxONCE(cx) || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
238 s == m, cx->sb_targ, NULL,
239 ((cx->sb_rflags & REXEC_COPY_STR)
240 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
241 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
243 SV * const targ = cx->sb_targ;
245 assert(cx->sb_strend >= s);
246 if(cx->sb_strend > s) {
247 if (DO_UTF8(dstr) && !SvUTF8(targ))
248 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
250 sv_catpvn(dstr, s, cx->sb_strend - s);
252 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
254 #ifdef PERL_OLD_COPY_ON_WRITE
256 sv_force_normal_flags(targ, SV_COW_DROP_PV);
262 SvPV_set(targ, SvPVX(dstr));
263 SvCUR_set(targ, SvCUR(dstr));
264 SvLEN_set(targ, SvLEN(dstr));
267 SvPV_set(dstr, NULL);
269 TAINT_IF(cx->sb_rxtainted & 1);
270 mPUSHi(saviters - 1);
272 (void)SvPOK_only_UTF8(targ);
273 TAINT_IF(cx->sb_rxtainted);
277 LEAVE_SCOPE(cx->sb_oldsave);
279 RETURNOP(pm->op_next);
281 cx->sb_iters = saviters;
283 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
286 cx->sb_orig = orig = RX_SUBBEG(rx);
288 cx->sb_strend = s + (cx->sb_strend - m);
290 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
292 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
293 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
295 sv_catpvn(dstr, s, m-s);
297 cx->sb_s = RX_OFFS(rx)[0].end + orig;
298 { /* Update the pos() information. */
299 SV * const sv = cx->sb_targ;
302 SvUPGRADE(sv, SVt_PVMG);
303 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
304 #ifdef PERL_OLD_COPY_ON_WRITE
306 sv_force_normal_flags(sv, 0);
308 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
317 (void)ReREFCNT_inc(rx);
318 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
319 rxres_save(&cx->sb_rxres, rx);
320 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
324 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
330 if (!p || p[1] < RX_NPARENS(rx)) {
331 #ifdef PERL_OLD_COPY_ON_WRITE
332 i = 7 + RX_NPARENS(rx) * 2;
334 i = 6 + RX_NPARENS(rx) * 2;
343 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
344 RX_MATCH_COPIED_off(rx);
346 #ifdef PERL_OLD_COPY_ON_WRITE
347 *p++ = PTR2UV(RX_SAVED_COPY(rx));
348 RX_SAVED_COPY(rx) = NULL;
351 *p++ = RX_NPARENS(rx);
353 *p++ = PTR2UV(RX_SUBBEG(rx));
354 *p++ = (UV)RX_SUBLEN(rx);
355 for (i = 0; i <= RX_NPARENS(rx); ++i) {
356 *p++ = (UV)RX_OFFS(rx)[i].start;
357 *p++ = (UV)RX_OFFS(rx)[i].end;
362 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
368 RX_MATCH_COPY_FREE(rx);
369 RX_MATCH_COPIED_set(rx, *p);
372 #ifdef PERL_OLD_COPY_ON_WRITE
373 if (RX_SAVED_COPY(rx))
374 SvREFCNT_dec (RX_SAVED_COPY(rx));
375 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
379 RX_NPARENS(rx) = *p++;
381 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
382 RX_SUBLEN(rx) = (I32)(*p++);
383 for (i = 0; i <= RX_NPARENS(rx); ++i) {
384 RX_OFFS(rx)[i].start = (I32)(*p++);
385 RX_OFFS(rx)[i].end = (I32)(*p++);
390 Perl_rxres_free(pTHX_ void **rsp)
392 UV * const p = (UV*)*rsp;
397 void *tmp = INT2PTR(char*,*p);
400 PoisonFree(*p, 1, sizeof(*p));
402 Safefree(INT2PTR(char*,*p));
404 #ifdef PERL_OLD_COPY_ON_WRITE
406 SvREFCNT_dec (INT2PTR(SV*,p[1]));
416 dVAR; dSP; dMARK; dORIGMARK;
417 register SV * const tmpForm = *++MARK;
422 register SV *sv = NULL;
423 const char *item = NULL;
427 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
428 const char *chophere = NULL;
429 char *linemark = NULL;
431 bool gotsome = FALSE;
433 const STRLEN fudge = SvPOK(tmpForm)
434 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
435 bool item_is_utf8 = FALSE;
436 bool targ_is_utf8 = FALSE;
438 OP * parseres = NULL;
442 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
443 if (SvREADONLY(tmpForm)) {
444 SvREADONLY_off(tmpForm);
445 parseres = doparseform(tmpForm);
446 SvREADONLY_on(tmpForm);
449 parseres = doparseform(tmpForm);
453 SvPV_force(PL_formtarget, len);
454 if (DO_UTF8(PL_formtarget))
456 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
458 f = SvPV_const(tmpForm, len);
459 /* need to jump to the next word */
460 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
464 const char *name = "???";
467 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
468 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
469 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
470 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
471 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
473 case FF_CHECKNL: name = "CHECKNL"; break;
474 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
475 case FF_SPACE: name = "SPACE"; break;
476 case FF_HALFSPACE: name = "HALFSPACE"; break;
477 case FF_ITEM: name = "ITEM"; break;
478 case FF_CHOP: name = "CHOP"; break;
479 case FF_LINEGLOB: name = "LINEGLOB"; break;
480 case FF_NEWLINE: name = "NEWLINE"; break;
481 case FF_MORE: name = "MORE"; break;
482 case FF_LINEMARK: name = "LINEMARK"; break;
483 case FF_END: name = "END"; break;
484 case FF_0DECIMAL: name = "0DECIMAL"; break;
485 case FF_LINESNGL: name = "LINESNGL"; break;
488 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
490 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
501 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
502 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
504 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
505 t = SvEND(PL_formtarget);
508 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
509 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
511 sv_utf8_upgrade(PL_formtarget);
512 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
513 t = SvEND(PL_formtarget);
533 if (ckWARN(WARN_SYNTAX))
534 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
541 const char *s = item = SvPV_const(sv, len);
544 itemsize = sv_len_utf8(sv);
545 if (itemsize != (I32)len) {
547 if (itemsize > fieldsize) {
548 itemsize = fieldsize;
549 itembytes = itemsize;
550 sv_pos_u2b(sv, &itembytes, 0);
554 send = chophere = s + itembytes;
564 sv_pos_b2u(sv, &itemsize);
568 item_is_utf8 = FALSE;
569 if (itemsize > fieldsize)
570 itemsize = fieldsize;
571 send = chophere = s + itemsize;
585 const char *s = item = SvPV_const(sv, len);
588 itemsize = sv_len_utf8(sv);
589 if (itemsize != (I32)len) {
591 if (itemsize <= fieldsize) {
592 const char *send = chophere = s + itemsize;
605 itemsize = fieldsize;
606 itembytes = itemsize;
607 sv_pos_u2b(sv, &itembytes, 0);
608 send = chophere = s + itembytes;
609 while (s < send || (s == send && isSPACE(*s))) {
619 if (strchr(PL_chopset, *s))
624 itemsize = chophere - item;
625 sv_pos_b2u(sv, &itemsize);
631 item_is_utf8 = FALSE;
632 if (itemsize <= fieldsize) {
633 const char *const send = chophere = s + itemsize;
646 itemsize = fieldsize;
647 send = chophere = s + itemsize;
648 while (s < send || (s == send && isSPACE(*s))) {
658 if (strchr(PL_chopset, *s))
663 itemsize = chophere - item;
669 arg = fieldsize - itemsize;
678 arg = fieldsize - itemsize;
689 const char *s = item;
693 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
695 sv_utf8_upgrade(PL_formtarget);
696 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
697 t = SvEND(PL_formtarget);
701 if (UTF8_IS_CONTINUED(*s)) {
702 STRLEN skip = UTF8SKIP(s);
719 if ( !((*t++ = *s++) & ~31) )
725 if (targ_is_utf8 && !item_is_utf8) {
726 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
728 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
729 for (; t < SvEND(PL_formtarget); t++) {
742 const int ch = *t++ = *s++;
745 if ( !((*t++ = *s++) & ~31) )
754 const char *s = chophere;
772 const char *s = item = SvPV_const(sv, len);
774 if ((item_is_utf8 = DO_UTF8(sv)))
775 itemsize = sv_len_utf8(sv);
777 bool chopped = FALSE;
778 const char *const send = s + len;
780 chophere = s + itemsize;
796 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
798 SvUTF8_on(PL_formtarget);
800 SvCUR_set(sv, chophere - item);
801 sv_catsv(PL_formtarget, sv);
802 SvCUR_set(sv, itemsize);
804 sv_catsv(PL_formtarget, sv);
806 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
807 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
808 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
817 #if defined(USE_LONG_DOUBLE)
820 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
824 "%#0*.*f" : "%0*.*f");
829 #if defined(USE_LONG_DOUBLE)
831 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
834 ((arg & 256) ? "%#*.*f" : "%*.*f");
837 /* If the field is marked with ^ and the value is undefined,
839 if ((arg & 512) && !SvOK(sv)) {
847 /* overflow evidence */
848 if (num_overflow(value, fieldsize, arg)) {
854 /* Formats aren't yet marked for locales, so assume "yes". */
856 STORE_NUMERIC_STANDARD_SET_LOCAL();
857 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
858 RESTORE_NUMERIC_STANDARD();
865 while (t-- > linemark && *t == ' ') ;
873 if (arg) { /* repeat until fields exhausted? */
875 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
876 lines += FmLINES(PL_formtarget);
879 if (strnEQ(linemark, linemark - arg, arg))
880 DIE(aTHX_ "Runaway format");
883 SvUTF8_on(PL_formtarget);
884 FmLINES(PL_formtarget) = lines;
886 RETURNOP(cLISTOP->op_first);
897 const char *s = chophere;
898 const char *send = item + len;
900 while (isSPACE(*s) && (s < send))
905 arg = fieldsize - itemsize;
912 if (strnEQ(s1," ",3)) {
913 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
924 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
926 SvUTF8_on(PL_formtarget);
927 FmLINES(PL_formtarget) += lines;
939 if (PL_stack_base + *PL_markstack_ptr == SP) {
941 if (GIMME_V == G_SCALAR)
943 RETURNOP(PL_op->op_next->op_next);
945 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
946 pp_pushmark(); /* push dst */
947 pp_pushmark(); /* push src */
948 ENTER; /* enter outer scope */
951 if (PL_op->op_private & OPpGREP_LEX)
952 SAVESPTR(PAD_SVl(PL_op->op_targ));
955 ENTER; /* enter inner scope */
958 src = PL_stack_base[*PL_markstack_ptr];
960 if (PL_op->op_private & OPpGREP_LEX)
961 PAD_SVl(PL_op->op_targ) = src;
966 if (PL_op->op_type == OP_MAPSTART)
967 pp_pushmark(); /* push top */
968 return ((LOGOP*)PL_op->op_next)->op_other;
974 const I32 gimme = GIMME_V;
975 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
981 /* first, move source pointer to the next item in the source list */
982 ++PL_markstack_ptr[-1];
984 /* if there are new items, push them into the destination list */
985 if (items && gimme != G_VOID) {
986 /* might need to make room back there first */
987 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
988 /* XXX this implementation is very pessimal because the stack
989 * is repeatedly extended for every set of items. Is possible
990 * to do this without any stack extension or copying at all
991 * by maintaining a separate list over which the map iterates
992 * (like foreach does). --gsar */
994 /* everything in the stack after the destination list moves
995 * towards the end the stack by the amount of room needed */
996 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
998 /* items to shift up (accounting for the moved source pointer) */
999 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1001 /* This optimization is by Ben Tilly and it does
1002 * things differently from what Sarathy (gsar)
1003 * is describing. The downside of this optimization is
1004 * that leaves "holes" (uninitialized and hopefully unused areas)
1005 * to the Perl stack, but on the other hand this
1006 * shouldn't be a problem. If Sarathy's idea gets
1007 * implemented, this optimization should become
1008 * irrelevant. --jhi */
1010 shift = count; /* Avoid shifting too often --Ben Tilly */
1014 dst = (SP += shift);
1015 PL_markstack_ptr[-1] += shift;
1016 *PL_markstack_ptr += shift;
1020 /* copy the new items down to the destination list */
1021 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1022 if (gimme == G_ARRAY) {
1024 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1027 /* scalar context: we don't care about which values map returns
1028 * (we use undef here). And so we certainly don't want to do mortal
1029 * copies of meaningless values. */
1030 while (items-- > 0) {
1032 *dst-- = &PL_sv_undef;
1036 LEAVE; /* exit inner scope */
1039 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1041 (void)POPMARK; /* pop top */
1042 LEAVE; /* exit outer scope */
1043 (void)POPMARK; /* pop src */
1044 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1045 (void)POPMARK; /* pop dst */
1046 SP = PL_stack_base + POPMARK; /* pop original mark */
1047 if (gimme == G_SCALAR) {
1048 if (PL_op->op_private & OPpGREP_LEX) {
1049 SV* sv = sv_newmortal();
1050 sv_setiv(sv, items);
1058 else if (gimme == G_ARRAY)
1065 ENTER; /* enter inner scope */
1068 /* set $_ to the new source item */
1069 src = PL_stack_base[PL_markstack_ptr[-1]];
1071 if (PL_op->op_private & OPpGREP_LEX)
1072 PAD_SVl(PL_op->op_targ) = src;
1076 RETURNOP(cLOGOP->op_other);
1085 if (GIMME == G_ARRAY)
1087 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1088 return cLOGOP->op_other;
1098 if (GIMME == G_ARRAY) {
1099 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1103 SV * const targ = PAD_SV(PL_op->op_targ);
1106 if (PL_op->op_private & OPpFLIP_LINENUM) {
1107 if (GvIO(PL_last_in_gv)) {
1108 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1111 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1113 flip = SvIV(sv) == SvIV(GvSV(gv));
1119 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1120 if (PL_op->op_flags & OPf_SPECIAL) {
1128 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1131 sv_setpvn(TARG, "", 0);
1137 /* This code tries to decide if "$left .. $right" should use the
1138 magical string increment, or if the range is numeric (we make
1139 an exception for .."0" [#18165]). AMS 20021031. */
1141 #define RANGE_IS_NUMERIC(left,right) ( \
1142 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1143 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1144 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1145 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1146 && (!SvOK(right) || looks_like_number(right))))
1152 if (GIMME == G_ARRAY) {
1158 if (RANGE_IS_NUMERIC(left,right)) {
1161 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1162 (SvOK(right) && SvNV(right) > IV_MAX))
1163 DIE(aTHX_ "Range iterator outside integer range");
1174 SV * const sv = sv_2mortal(newSViv(i++));
1179 SV * const final = sv_mortalcopy(right);
1181 const char * const tmps = SvPV_const(final, len);
1183 SV *sv = sv_mortalcopy(left);
1184 SvPV_force_nolen(sv);
1185 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1187 if (strEQ(SvPVX_const(sv),tmps))
1189 sv = sv_2mortal(newSVsv(sv));
1196 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1200 if (PL_op->op_private & OPpFLIP_LINENUM) {
1201 if (GvIO(PL_last_in_gv)) {
1202 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1205 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1206 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1214 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1215 sv_catpvs(targ, "E0");
1225 static const char * const context_name[] = {
1238 S_dopoptolabel(pTHX_ const char *label)
1243 for (i = cxstack_ix; i >= 0; i--) {
1244 register const PERL_CONTEXT * const cx = &cxstack[i];
1245 switch (CxTYPE(cx)) {
1253 if (ckWARN(WARN_EXITING))
1254 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1255 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1256 if (CxTYPE(cx) == CXt_NULL)
1259 case CXt_LOOP_LAZYIV:
1260 case CXt_LOOP_LAZYSV:
1262 case CXt_LOOP_PLAIN:
1263 if ( !CxLABEL(cx) || strNE(label, CxLABEL(cx)) ) {
1264 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1265 (long)i, CxLABEL(cx)));
1268 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1278 Perl_dowantarray(pTHX)
1281 const I32 gimme = block_gimme();
1282 return (gimme == G_VOID) ? G_SCALAR : gimme;
1286 Perl_block_gimme(pTHX)
1289 const I32 cxix = dopoptosub(cxstack_ix);
1293 switch (cxstack[cxix].blk_gimme) {
1301 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1308 Perl_is_lvalue_sub(pTHX)
1311 const I32 cxix = dopoptosub(cxstack_ix);
1312 assert(cxix >= 0); /* We should only be called from inside subs */
1314 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1315 return CxLVAL(cxstack + cxix);
1321 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1325 for (i = startingblock; i >= 0; i--) {
1326 register const PERL_CONTEXT * const cx = &cxstk[i];
1327 switch (CxTYPE(cx)) {
1333 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1341 S_dopoptoeval(pTHX_ I32 startingblock)
1345 for (i = startingblock; i >= 0; i--) {
1346 register const PERL_CONTEXT *cx = &cxstack[i];
1347 switch (CxTYPE(cx)) {
1351 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1359 S_dopoptoloop(pTHX_ I32 startingblock)
1363 for (i = startingblock; i >= 0; i--) {
1364 register const PERL_CONTEXT * const cx = &cxstack[i];
1365 switch (CxTYPE(cx)) {
1371 if (ckWARN(WARN_EXITING))
1372 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1373 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1374 if ((CxTYPE(cx)) == CXt_NULL)
1377 case CXt_LOOP_LAZYIV:
1378 case CXt_LOOP_LAZYSV:
1380 case CXt_LOOP_PLAIN:
1381 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1389 S_dopoptogiven(pTHX_ I32 startingblock)
1393 for (i = startingblock; i >= 0; i--) {
1394 register const PERL_CONTEXT *cx = &cxstack[i];
1395 switch (CxTYPE(cx)) {
1399 DEBUG_l( Perl_deb(aTHX_ "(Found given #%ld)\n", (long)i));
1401 case CXt_LOOP_PLAIN:
1402 assert(!CxFOREACHDEF(cx));
1404 case CXt_LOOP_LAZYIV:
1405 case CXt_LOOP_LAZYSV:
1407 if (CxFOREACHDEF(cx)) {
1408 DEBUG_l( Perl_deb(aTHX_ "(Found foreach #%ld)\n", (long)i));
1417 S_dopoptowhen(pTHX_ I32 startingblock)
1421 for (i = startingblock; i >= 0; i--) {
1422 register const PERL_CONTEXT *cx = &cxstack[i];
1423 switch (CxTYPE(cx)) {
1427 DEBUG_l( Perl_deb(aTHX_ "(Found when #%ld)\n", (long)i));
1435 Perl_dounwind(pTHX_ I32 cxix)
1440 while (cxstack_ix > cxix) {
1442 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1443 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1444 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1445 /* Note: we don't need to restore the base context info till the end. */
1446 switch (CxTYPE(cx)) {
1449 continue; /* not break */
1457 case CXt_LOOP_LAZYIV:
1458 case CXt_LOOP_LAZYSV:
1460 case CXt_LOOP_PLAIN:
1471 PERL_UNUSED_VAR(optype);
1475 Perl_qerror(pTHX_ SV *err)
1479 sv_catsv(ERRSV, err);
1481 sv_catsv(PL_errors, err);
1483 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1485 ++PL_parser->error_count;
1489 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1498 if (PL_in_eval & EVAL_KEEPERR) {
1499 static const char prefix[] = "\t(in cleanup) ";
1500 SV * const err = ERRSV;
1501 const char *e = NULL;
1503 sv_setpvn(err,"",0);
1504 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1506 e = SvPV_const(err, len);
1508 if (*e != *message || strNE(e,message))
1512 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1513 sv_catpvn(err, prefix, sizeof(prefix)-1);
1514 sv_catpvn(err, message, msglen);
1515 if (ckWARN(WARN_MISC)) {
1516 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1517 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1522 sv_setpvn(ERRSV, message, msglen);
1526 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1527 && PL_curstackinfo->si_prev)
1535 register PERL_CONTEXT *cx;
1538 if (cxix < cxstack_ix)
1541 POPBLOCK(cx,PL_curpm);
1542 if (CxTYPE(cx) != CXt_EVAL) {
1544 message = SvPVx_const(ERRSV, msglen);
1545 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1546 PerlIO_write(Perl_error_log, message, msglen);
1551 if (gimme == G_SCALAR)
1552 *++newsp = &PL_sv_undef;
1553 PL_stack_sp = newsp;
1557 /* LEAVE could clobber PL_curcop (see save_re_context())
1558 * XXX it might be better to find a way to avoid messing with
1559 * PL_curcop in save_re_context() instead, but this is a more
1560 * minimal fix --GSAR */
1561 PL_curcop = cx->blk_oldcop;
1563 if (optype == OP_REQUIRE) {
1564 const char* const msg = SvPVx_nolen_const(ERRSV);
1565 SV * const nsv = cx->blk_eval.old_namesv;
1566 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1568 DIE(aTHX_ "%sCompilation failed in require",
1569 *msg ? msg : "Unknown error\n");
1571 assert(CxTYPE(cx) == CXt_EVAL);
1572 return cx->blk_eval.retop;
1576 message = SvPVx_const(ERRSV, msglen);
1578 write_to_stderr(message, msglen);
1586 dVAR; dSP; dPOPTOPssrl;
1587 if (SvTRUE(left) != SvTRUE(right))
1597 register I32 cxix = dopoptosub(cxstack_ix);
1598 register const PERL_CONTEXT *cx;
1599 register const PERL_CONTEXT *ccstack = cxstack;
1600 const PERL_SI *top_si = PL_curstackinfo;
1602 const char *stashname;
1609 /* we may be in a higher stacklevel, so dig down deeper */
1610 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1611 top_si = top_si->si_prev;
1612 ccstack = top_si->si_cxstack;
1613 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1616 if (GIMME != G_ARRAY) {
1622 /* caller() should not report the automatic calls to &DB::sub */
1623 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1624 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1628 cxix = dopoptosub_at(ccstack, cxix - 1);
1631 cx = &ccstack[cxix];
1632 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1633 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1634 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1635 field below is defined for any cx. */
1636 /* caller() should not report the automatic calls to &DB::sub */
1637 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1638 cx = &ccstack[dbcxix];
1641 stashname = CopSTASHPV(cx->blk_oldcop);
1642 if (GIMME != G_ARRAY) {
1645 PUSHs(&PL_sv_undef);
1648 sv_setpv(TARG, stashname);
1657 PUSHs(&PL_sv_undef);
1659 mPUSHs(newSVpv(stashname, 0));
1660 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1661 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1664 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1665 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1666 /* So is ccstack[dbcxix]. */
1668 SV * const sv = newSV(0);
1669 gv_efullname3(sv, cvgv, NULL);
1671 PUSHs(boolSV(CxHASARGS(cx)));
1674 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1675 PUSHs(boolSV(CxHASARGS(cx)));
1679 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1682 gimme = (I32)cx->blk_gimme;
1683 if (gimme == G_VOID)
1684 PUSHs(&PL_sv_undef);
1686 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1687 if (CxTYPE(cx) == CXt_EVAL) {
1689 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1690 PUSHs(cx->blk_eval.cur_text);
1694 else if (cx->blk_eval.old_namesv) {
1695 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1698 /* eval BLOCK (try blocks have old_namesv == 0) */
1700 PUSHs(&PL_sv_undef);
1701 PUSHs(&PL_sv_undef);
1705 PUSHs(&PL_sv_undef);
1706 PUSHs(&PL_sv_undef);
1708 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1709 && CopSTASH_eq(PL_curcop, PL_debstash))
1711 AV * const ary = cx->blk_sub.argarray;
1712 const int off = AvARRAY(ary) - AvALLOC(ary);
1715 GV* const tmpgv = gv_fetchpvs("DB::args", GV_ADD, SVt_PVAV);
1716 PL_dbargs = GvAV(gv_AVadd(tmpgv));
1718 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1721 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1722 av_extend(PL_dbargs, AvFILLp(ary) + off);
1723 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1724 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1726 /* XXX only hints propagated via op_private are currently
1727 * visible (others are not easily accessible, since they
1728 * use the global PL_hints) */
1729 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1732 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1734 if (old_warnings == pWARN_NONE ||
1735 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1736 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1737 else if (old_warnings == pWARN_ALL ||
1738 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1739 /* Get the bit mask for $warnings::Bits{all}, because
1740 * it could have been extended by warnings::register */
1742 HV * const bits = get_hv("warnings::Bits", FALSE);
1743 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1744 mask = newSVsv(*bits_all);
1747 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1751 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1755 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1756 sv_2mortal(newRV_noinc(
1757 (SV*)Perl_refcounted_he_chain_2hv(aTHX_
1758 cx->blk_oldcop->cop_hints_hash)))
1767 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1768 sv_reset(tmps, CopSTASH(PL_curcop));
1773 /* like pp_nextstate, but used instead when the debugger is active */
1778 PL_curcop = (COP*)PL_op;
1779 TAINT_NOT; /* Each statement is presumed innocent */
1780 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1783 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1784 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1787 register PERL_CONTEXT *cx;
1788 const I32 gimme = G_ARRAY;
1790 GV * const gv = PL_DBgv;
1791 register CV * const cv = GvCV(gv);
1794 DIE(aTHX_ "No DB::DB routine defined");
1796 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1797 /* don't do recursive DB::DB call */
1812 (void)(*CvXSUB(cv))(aTHX_ cv);
1819 PUSHBLOCK(cx, CXt_SUB, SP);
1821 cx->blk_sub.retop = PL_op->op_next;
1824 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1825 RETURNOP(CvSTART(cv));
1835 register PERL_CONTEXT *cx;
1836 const I32 gimme = GIMME_V;
1838 U8 cxtype = CXt_LOOP_FOR;
1846 if (PL_op->op_targ) {
1847 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1848 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1849 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1850 SVs_PADSTALE, SVs_PADSTALE);
1852 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1853 #ifndef USE_ITHREADS
1854 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1856 iterdata = INT2PTR(void*, PL_op->op_targ);
1857 cxtype |= CXp_PADVAR;
1861 GV * const gv = (GV*)POPs;
1862 svp = &GvSV(gv); /* symbol table variable */
1863 SAVEGENERICSV(*svp);
1866 iterdata = (void*)gv;
1870 if (PL_op->op_private & OPpITER_DEF)
1871 cxtype |= CXp_FOR_DEF;
1875 PUSHBLOCK(cx, cxtype, SP);
1877 PUSHLOOP_FOR(cx, iterdata, MARK);
1879 PUSHLOOP_FOR(cx, svp, MARK);
1881 if (PL_op->op_flags & OPf_STACKED) {
1882 SV *maybe_ary = POPs;
1883 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1885 SV * const right = maybe_ary;
1888 if (RANGE_IS_NUMERIC(sv,right)) {
1889 cx->cx_type &= ~CXTYPEMASK;
1890 cx->cx_type |= CXt_LOOP_LAZYIV;
1891 /* Make sure that no-one re-orders cop.h and breaks our
1893 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
1894 #ifdef NV_PRESERVES_UV
1895 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1896 (SvNV(sv) > (NV)IV_MAX)))
1898 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1899 (SvNV(right) < (NV)IV_MIN))))
1901 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1904 ((SvUV(sv) > (UV)IV_MAX) ||
1905 (SvNV(sv) > (NV)UV_MAX)))))
1907 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1909 ((SvNV(right) > 0) &&
1910 ((SvUV(right) > (UV)IV_MAX) ||
1911 (SvNV(right) > (NV)UV_MAX))))))
1913 DIE(aTHX_ "Range iterator outside integer range");
1914 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
1915 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
1917 /* for correct -Dstv display */
1918 cx->blk_oldsp = sp - PL_stack_base;
1922 cx->cx_type &= ~CXTYPEMASK;
1923 cx->cx_type |= CXt_LOOP_LAZYSV;
1924 /* Make sure that no-one re-orders cop.h and breaks our
1926 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
1927 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
1928 cx->blk_loop.state_u.lazysv.end = right;
1929 SvREFCNT_inc(right);
1930 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
1931 /* This will do the upgrade to SVt_PV, and warn if the value
1932 is uninitialised. */
1933 (void) SvPV_nolen_const(right);
1934 /* Doing this avoids a check every time in pp_iter in pp_hot.c
1935 to replace !SvOK() with a pointer to "". */
1937 SvREFCNT_dec(right);
1938 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
1942 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
1943 cx->blk_loop.state_u.ary.ary = (AV*)maybe_ary;
1944 SvREFCNT_inc(maybe_ary);
1945 cx->blk_loop.state_u.ary.ix =
1946 (PL_op->op_private & OPpITER_REVERSED) ?
1947 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
1951 else { /* iterating over items on the stack */
1952 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
1953 if (PL_op->op_private & OPpITER_REVERSED) {
1954 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
1957 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
1967 register PERL_CONTEXT *cx;
1968 const I32 gimme = GIMME_V;
1974 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
1975 PUSHLOOP_PLAIN(cx, SP);
1983 register PERL_CONTEXT *cx;
1990 assert(CxTYPE_is_LOOP(cx));
1992 newsp = PL_stack_base + cx->blk_loop.resetsp;
1995 if (gimme == G_VOID)
1997 else if (gimme == G_SCALAR) {
1999 *++newsp = sv_mortalcopy(*SP);
2001 *++newsp = &PL_sv_undef;
2005 *++newsp = sv_mortalcopy(*++mark);
2006 TAINT_NOT; /* Each item is independent */
2012 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2013 PL_curpm = newpm; /* ... and pop $1 et al */
2024 register PERL_CONTEXT *cx;
2025 bool popsub2 = FALSE;
2026 bool clear_errsv = FALSE;
2034 const I32 cxix = dopoptosub(cxstack_ix);
2037 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2038 * sort block, which is a CXt_NULL
2041 PL_stack_base[1] = *PL_stack_sp;
2042 PL_stack_sp = PL_stack_base + 1;
2046 DIE(aTHX_ "Can't return outside a subroutine");
2048 if (cxix < cxstack_ix)
2051 if (CxMULTICALL(&cxstack[cxix])) {
2052 gimme = cxstack[cxix].blk_gimme;
2053 if (gimme == G_VOID)
2054 PL_stack_sp = PL_stack_base;
2055 else if (gimme == G_SCALAR) {
2056 PL_stack_base[1] = *PL_stack_sp;
2057 PL_stack_sp = PL_stack_base + 1;
2063 switch (CxTYPE(cx)) {
2066 retop = cx->blk_sub.retop;
2067 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2070 if (!(PL_in_eval & EVAL_KEEPERR))
2073 retop = cx->blk_eval.retop;
2077 if (optype == OP_REQUIRE &&
2078 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2080 /* Unassume the success we assumed earlier. */
2081 SV * const nsv = cx->blk_eval.old_namesv;
2082 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
2083 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
2088 retop = cx->blk_sub.retop;
2091 DIE(aTHX_ "panic: return");
2095 if (gimme == G_SCALAR) {
2098 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2100 *++newsp = SvREFCNT_inc(*SP);
2105 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2107 *++newsp = sv_mortalcopy(sv);
2112 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2115 *++newsp = sv_mortalcopy(*SP);
2118 *++newsp = &PL_sv_undef;
2120 else if (gimme == G_ARRAY) {
2121 while (++MARK <= SP) {
2122 *++newsp = (popsub2 && SvTEMP(*MARK))
2123 ? *MARK : sv_mortalcopy(*MARK);
2124 TAINT_NOT; /* Each item is independent */
2127 PL_stack_sp = newsp;
2130 /* Stack values are safe: */
2133 POPSUB(cx,sv); /* release CV and @_ ... */
2137 PL_curpm = newpm; /* ... and pop $1 et al */
2141 sv_setpvn(ERRSV,"",0);
2149 register PERL_CONTEXT *cx;
2160 if (PL_op->op_flags & OPf_SPECIAL) {
2161 cxix = dopoptoloop(cxstack_ix);
2163 DIE(aTHX_ "Can't \"last\" outside a loop block");
2166 cxix = dopoptolabel(cPVOP->op_pv);
2168 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2170 if (cxix < cxstack_ix)
2174 cxstack_ix++; /* temporarily protect top context */
2176 switch (CxTYPE(cx)) {
2177 case CXt_LOOP_LAZYIV:
2178 case CXt_LOOP_LAZYSV:
2180 case CXt_LOOP_PLAIN:
2182 newsp = PL_stack_base + cx->blk_loop.resetsp;
2183 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2187 nextop = cx->blk_sub.retop;
2191 nextop = cx->blk_eval.retop;
2195 nextop = cx->blk_sub.retop;
2198 DIE(aTHX_ "panic: last");
2202 if (gimme == G_SCALAR) {
2204 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2205 ? *SP : sv_mortalcopy(*SP);
2207 *++newsp = &PL_sv_undef;
2209 else if (gimme == G_ARRAY) {
2210 while (++MARK <= SP) {
2211 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2212 ? *MARK : sv_mortalcopy(*MARK);
2213 TAINT_NOT; /* Each item is independent */
2221 /* Stack values are safe: */
2223 case CXt_LOOP_LAZYIV:
2224 case CXt_LOOP_PLAIN:
2225 case CXt_LOOP_LAZYSV:
2227 POPLOOP(cx); /* release loop vars ... */
2231 POPSUB(cx,sv); /* release CV and @_ ... */
2234 PL_curpm = newpm; /* ... and pop $1 et al */
2237 PERL_UNUSED_VAR(optype);
2238 PERL_UNUSED_VAR(gimme);
2246 register PERL_CONTEXT *cx;
2249 if (PL_op->op_flags & OPf_SPECIAL) {
2250 cxix = dopoptoloop(cxstack_ix);
2252 DIE(aTHX_ "Can't \"next\" outside a loop block");
2255 cxix = dopoptolabel(cPVOP->op_pv);
2257 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2259 if (cxix < cxstack_ix)
2262 /* clear off anything above the scope we're re-entering, but
2263 * save the rest until after a possible continue block */
2264 inner = PL_scopestack_ix;
2266 if (PL_scopestack_ix < inner)
2267 leave_scope(PL_scopestack[PL_scopestack_ix]);
2268 PL_curcop = cx->blk_oldcop;
2269 return CX_LOOP_NEXTOP_GET(cx);
2276 register PERL_CONTEXT *cx;
2280 if (PL_op->op_flags & OPf_SPECIAL) {
2281 cxix = dopoptoloop(cxstack_ix);
2283 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2286 cxix = dopoptolabel(cPVOP->op_pv);
2288 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2290 if (cxix < cxstack_ix)
2293 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2294 if (redo_op->op_type == OP_ENTER) {
2295 /* pop one less context to avoid $x being freed in while (my $x..) */
2297 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2298 redo_op = redo_op->op_next;
2302 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2303 LEAVE_SCOPE(oldsave);
2305 PL_curcop = cx->blk_oldcop;
2310 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2314 static const char too_deep[] = "Target of goto is too deeply nested";
2317 Perl_croak(aTHX_ too_deep);
2318 if (o->op_type == OP_LEAVE ||
2319 o->op_type == OP_SCOPE ||
2320 o->op_type == OP_LEAVELOOP ||
2321 o->op_type == OP_LEAVESUB ||
2322 o->op_type == OP_LEAVETRY)
2324 *ops++ = cUNOPo->op_first;
2326 Perl_croak(aTHX_ too_deep);
2329 if (o->op_flags & OPf_KIDS) {
2331 /* First try all the kids at this level, since that's likeliest. */
2332 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2333 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2334 kCOP->cop_label && strEQ(kCOP->cop_label, label))
2337 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2338 if (kid == PL_lastgotoprobe)
2340 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2343 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2344 ops[-1]->op_type == OP_DBSTATE)
2349 if ((o = dofindlabel(kid, label, ops, oplimit)))
2362 register PERL_CONTEXT *cx;
2363 #define GOTO_DEPTH 64
2364 OP *enterops[GOTO_DEPTH];
2365 const char *label = NULL;
2366 const bool do_dump = (PL_op->op_type == OP_DUMP);
2367 static const char must_have_label[] = "goto must have label";
2369 if (PL_op->op_flags & OPf_STACKED) {
2370 SV * const sv = POPs;
2372 /* This egregious kludge implements goto &subroutine */
2373 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2375 register PERL_CONTEXT *cx;
2376 CV* cv = (CV*)SvRV(sv);
2383 if (!CvROOT(cv) && !CvXSUB(cv)) {
2384 const GV * const gv = CvGV(cv);
2388 /* autoloaded stub? */
2389 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2391 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2392 GvNAMELEN(gv), FALSE);
2393 if (autogv && (cv = GvCV(autogv)))
2395 tmpstr = sv_newmortal();
2396 gv_efullname3(tmpstr, gv, NULL);
2397 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2399 DIE(aTHX_ "Goto undefined subroutine");
2402 /* First do some returnish stuff. */
2403 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2405 cxix = dopoptosub(cxstack_ix);
2407 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2408 if (cxix < cxstack_ix)
2412 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2413 if (CxTYPE(cx) == CXt_EVAL) {
2415 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2417 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2419 else if (CxMULTICALL(cx))
2420 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2421 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2422 /* put @_ back onto stack */
2423 AV* av = cx->blk_sub.argarray;
2425 items = AvFILLp(av) + 1;
2426 EXTEND(SP, items+1); /* @_ could have been extended. */
2427 Copy(AvARRAY(av), SP + 1, items, SV*);
2428 SvREFCNT_dec(GvAV(PL_defgv));
2429 GvAV(PL_defgv) = cx->blk_sub.savearray;
2431 /* abandon @_ if it got reified */
2436 av_extend(av, items-1);
2438 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2441 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2442 AV* const av = GvAV(PL_defgv);
2443 items = AvFILLp(av) + 1;
2444 EXTEND(SP, items+1); /* @_ could have been extended. */
2445 Copy(AvARRAY(av), SP + 1, items, SV*);
2449 if (CxTYPE(cx) == CXt_SUB &&
2450 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2451 SvREFCNT_dec(cx->blk_sub.cv);
2452 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2453 LEAVE_SCOPE(oldsave);
2455 /* Now do some callish stuff. */
2457 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2459 OP* const retop = cx->blk_sub.retop;
2464 for (index=0; index<items; index++)
2465 sv_2mortal(SP[-index]);
2468 /* XS subs don't have a CxSUB, so pop it */
2469 POPBLOCK(cx, PL_curpm);
2470 /* Push a mark for the start of arglist */
2473 (void)(*CvXSUB(cv))(aTHX_ cv);
2478 AV* const padlist = CvPADLIST(cv);
2479 if (CxTYPE(cx) == CXt_EVAL) {
2480 PL_in_eval = CxOLD_IN_EVAL(cx);
2481 PL_eval_root = cx->blk_eval.old_eval_root;
2482 cx->cx_type = CXt_SUB;
2484 cx->blk_sub.cv = cv;
2485 cx->blk_sub.olddepth = CvDEPTH(cv);
2488 if (CvDEPTH(cv) < 2)
2489 SvREFCNT_inc_simple_void_NN(cv);
2491 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2492 sub_crush_depth(cv);
2493 pad_push(padlist, CvDEPTH(cv));
2496 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2499 AV* const av = (AV*)PAD_SVl(0);
2501 cx->blk_sub.savearray = GvAV(PL_defgv);
2502 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2503 CX_CURPAD_SAVE(cx->blk_sub);
2504 cx->blk_sub.argarray = av;
2506 if (items >= AvMAX(av) + 1) {
2507 SV **ary = AvALLOC(av);
2508 if (AvARRAY(av) != ary) {
2509 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2512 if (items >= AvMAX(av) + 1) {
2513 AvMAX(av) = items - 1;
2514 Renew(ary,items+1,SV*);
2520 Copy(mark,AvARRAY(av),items,SV*);
2521 AvFILLp(av) = items - 1;
2522 assert(!AvREAL(av));
2524 /* transfer 'ownership' of refcnts to new @_ */
2534 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2535 Perl_get_db_sub(aTHX_ NULL, cv);
2537 CV * const gotocv = get_cv("DB::goto", FALSE);
2539 PUSHMARK( PL_stack_sp );
2540 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2545 RETURNOP(CvSTART(cv));
2549 label = SvPV_nolen_const(sv);
2550 if (!(do_dump || *label))
2551 DIE(aTHX_ must_have_label);
2554 else if (PL_op->op_flags & OPf_SPECIAL) {
2556 DIE(aTHX_ must_have_label);
2559 label = cPVOP->op_pv;
2561 if (label && *label) {
2562 OP *gotoprobe = NULL;
2563 bool leaving_eval = FALSE;
2564 bool in_block = FALSE;
2565 PERL_CONTEXT *last_eval_cx = NULL;
2569 PL_lastgotoprobe = NULL;
2571 for (ix = cxstack_ix; ix >= 0; ix--) {
2573 switch (CxTYPE(cx)) {
2575 leaving_eval = TRUE;
2576 if (!CxTRYBLOCK(cx)) {
2577 gotoprobe = (last_eval_cx ?
2578 last_eval_cx->blk_eval.old_eval_root :
2583 /* else fall through */
2584 case CXt_LOOP_LAZYIV:
2585 case CXt_LOOP_LAZYSV:
2587 case CXt_LOOP_PLAIN:
2588 gotoprobe = cx->blk_oldcop->op_sibling;
2594 gotoprobe = cx->blk_oldcop->op_sibling;
2597 gotoprobe = PL_main_root;
2600 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2601 gotoprobe = CvROOT(cx->blk_sub.cv);
2607 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2610 DIE(aTHX_ "panic: goto");
2611 gotoprobe = PL_main_root;
2615 retop = dofindlabel(gotoprobe, label,
2616 enterops, enterops + GOTO_DEPTH);
2620 PL_lastgotoprobe = gotoprobe;
2623 DIE(aTHX_ "Can't find label %s", label);
2625 /* if we're leaving an eval, check before we pop any frames
2626 that we're not going to punt, otherwise the error
2629 if (leaving_eval && *enterops && enterops[1]) {
2631 for (i = 1; enterops[i]; i++)
2632 if (enterops[i]->op_type == OP_ENTERITER)
2633 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2636 /* pop unwanted frames */
2638 if (ix < cxstack_ix) {
2645 oldsave = PL_scopestack[PL_scopestack_ix];
2646 LEAVE_SCOPE(oldsave);
2649 /* push wanted frames */
2651 if (*enterops && enterops[1]) {
2652 OP * const oldop = PL_op;
2653 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2654 for (; enterops[ix]; ix++) {
2655 PL_op = enterops[ix];
2656 /* Eventually we may want to stack the needed arguments
2657 * for each op. For now, we punt on the hard ones. */
2658 if (PL_op->op_type == OP_ENTERITER)
2659 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2660 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2668 if (!retop) retop = PL_main_start;
2670 PL_restartop = retop;
2671 PL_do_undump = TRUE;
2675 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2676 PL_do_undump = FALSE;
2693 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2695 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2698 PL_exit_flags |= PERL_EXIT_EXPECTED;
2700 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2701 if (anum || !(PL_minus_c && PL_madskills))
2706 PUSHs(&PL_sv_undef);
2713 S_save_lines(pTHX_ AV *array, SV *sv)
2715 const char *s = SvPVX_const(sv);
2716 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2719 while (s && s < send) {
2721 SV * const tmpstr = newSV_type(SVt_PVMG);
2723 t = strchr(s, '\n');
2729 sv_setpvn(tmpstr, s, t - s);
2730 av_store(array, line++, tmpstr);
2736 S_docatch(pTHX_ OP *o)
2740 OP * const oldop = PL_op;
2744 assert(CATCH_GET == TRUE);
2751 assert(cxstack_ix >= 0);
2752 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2753 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2758 /* die caught by an inner eval - continue inner loop */
2760 /* NB XXX we rely on the old popped CxEVAL still being at the top
2761 * of the stack; the way die_where() currently works, this
2762 * assumption is valid. In theory The cur_top_env value should be
2763 * returned in another global, the way retop (aka PL_restartop)
2765 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2768 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2770 PL_op = PL_restartop;
2787 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2788 /* sv Text to convert to OP tree. */
2789 /* startop op_free() this to undo. */
2790 /* code Short string id of the caller. */
2792 /* FIXME - how much of this code is common with pp_entereval? */
2793 dVAR; dSP; /* Make POPBLOCK work. */
2799 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2800 char *tmpbuf = tbuf;
2803 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2807 lex_start(sv, NULL, FALSE);
2809 /* switch to eval mode */
2811 if (IN_PERL_COMPILETIME) {
2812 SAVECOPSTASH_FREE(&PL_compiling);
2813 CopSTASH_set(&PL_compiling, PL_curstash);
2815 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2816 SV * const sv = sv_newmortal();
2817 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2818 code, (unsigned long)++PL_evalseq,
2819 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2824 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2825 (unsigned long)++PL_evalseq);
2826 SAVECOPFILE_FREE(&PL_compiling);
2827 CopFILE_set(&PL_compiling, tmpbuf+2);
2828 SAVECOPLINE(&PL_compiling);
2829 CopLINE_set(&PL_compiling, 1);
2830 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2831 deleting the eval's FILEGV from the stash before gv_check() runs
2832 (i.e. before run-time proper). To work around the coredump that
2833 ensues, we always turn GvMULTI_on for any globals that were
2834 introduced within evals. See force_ident(). GSAR 96-10-12 */
2835 safestr = savepvn(tmpbuf, len);
2836 SAVEDELETE(PL_defstash, safestr, len);
2838 #ifdef OP_IN_REGISTER
2844 /* we get here either during compilation, or via pp_regcomp at runtime */
2845 runtime = IN_PERL_RUNTIME;
2847 runcv = find_runcv(NULL);
2850 PL_op->op_type = OP_ENTEREVAL;
2851 PL_op->op_flags = 0; /* Avoid uninit warning. */
2852 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2853 PUSHEVAL(cx, 0, NULL);
2856 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2858 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2859 POPBLOCK(cx,PL_curpm);
2862 (*startop)->op_type = OP_NULL;
2863 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2865 /* XXX DAPM do this properly one year */
2866 *padp = (AV*)SvREFCNT_inc_simple(PL_comppad);
2868 if (IN_PERL_COMPILETIME)
2869 CopHINTS_set(&PL_compiling, PL_hints);
2870 #ifdef OP_IN_REGISTER
2873 PERL_UNUSED_VAR(newsp);
2874 PERL_UNUSED_VAR(optype);
2876 return PL_eval_start;
2881 =for apidoc find_runcv
2883 Locate the CV corresponding to the currently executing sub or eval.
2884 If db_seqp is non_null, skip CVs that are in the DB package and populate
2885 *db_seqp with the cop sequence number at the point that the DB:: code was
2886 entered. (allows debuggers to eval in the scope of the breakpoint rather
2887 than in the scope of the debugger itself).
2893 Perl_find_runcv(pTHX_ U32 *db_seqp)
2899 *db_seqp = PL_curcop->cop_seq;
2900 for (si = PL_curstackinfo; si; si = si->si_prev) {
2902 for (ix = si->si_cxix; ix >= 0; ix--) {
2903 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2904 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2905 CV * const cv = cx->blk_sub.cv;
2906 /* skip DB:: code */
2907 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2908 *db_seqp = cx->blk_oldcop->cop_seq;
2913 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2921 /* Compile a require/do, an eval '', or a /(?{...})/.
2922 * In the last case, startop is non-null, and contains the address of
2923 * a pointer that should be set to the just-compiled code.
2924 * outside is the lexically enclosing CV (if any) that invoked us.
2925 * Returns a bool indicating whether the compile was successful; if so,
2926 * PL_eval_start contains the first op of the compiled ocde; otherwise,
2927 * pushes undef (also croaks if startop != NULL).
2931 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2934 OP * const saveop = PL_op;
2936 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2937 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2942 SAVESPTR(PL_compcv);
2943 PL_compcv = (CV*)newSV_type(SVt_PVCV);
2944 CvEVAL_on(PL_compcv);
2945 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2946 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2948 CvOUTSIDE_SEQ(PL_compcv) = seq;
2949 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc_simple(outside);
2951 /* set up a scratch pad */
2953 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2954 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
2958 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2960 /* make sure we compile in the right package */
2962 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2963 SAVESPTR(PL_curstash);
2964 PL_curstash = CopSTASH(PL_curcop);
2966 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
2967 SAVESPTR(PL_beginav);
2968 PL_beginav = newAV();
2969 SAVEFREESV(PL_beginav);
2970 SAVESPTR(PL_unitcheckav);
2971 PL_unitcheckav = newAV();
2972 SAVEFREESV(PL_unitcheckav);
2975 SAVEBOOL(PL_madskills);
2979 /* try to compile it */
2981 PL_eval_root = NULL;
2982 PL_curcop = &PL_compiling;
2983 CopARYBASE_set(PL_curcop, 0);
2984 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
2985 PL_in_eval |= EVAL_KEEPERR;
2987 sv_setpvn(ERRSV,"",0);
2988 if (yyparse() || PL_parser->error_count || !PL_eval_root) {
2989 SV **newsp; /* Used by POPBLOCK. */
2990 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
2991 I32 optype = 0; /* Might be reset by POPEVAL. */
2996 op_free(PL_eval_root);
2997 PL_eval_root = NULL;
2999 SP = PL_stack_base + POPMARK; /* pop original mark */
3001 POPBLOCK(cx,PL_curpm);
3007 msg = SvPVx_nolen_const(ERRSV);
3008 if (optype == OP_REQUIRE) {
3009 const SV * const nsv = cx->blk_eval.old_namesv;
3010 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
3012 Perl_croak(aTHX_ "%sCompilation failed in require",
3013 *msg ? msg : "Unknown error\n");
3016 POPBLOCK(cx,PL_curpm);
3018 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3019 (*msg ? msg : "Unknown error\n"));
3023 sv_setpvs(ERRSV, "Compilation error");
3026 PERL_UNUSED_VAR(newsp);
3027 PUSHs(&PL_sv_undef);
3031 CopLINE_set(&PL_compiling, 0);
3033 *startop = PL_eval_root;
3035 SAVEFREEOP(PL_eval_root);
3037 /* Set the context for this new optree.
3038 * If the last op is an OP_REQUIRE, force scalar context.
3039 * Otherwise, propagate the context from the eval(). */
3040 if (PL_eval_root->op_type == OP_LEAVEEVAL
3041 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3042 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3044 scalar(PL_eval_root);
3045 else if ((gimme & G_WANT) == G_VOID)
3046 scalarvoid(PL_eval_root);
3047 else if ((gimme & G_WANT) == G_ARRAY)
3050 scalar(PL_eval_root);
3052 DEBUG_x(dump_eval());
3054 /* Register with debugger: */
3055 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3056 CV * const cv = get_cv("DB::postponed", FALSE);
3060 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3062 call_sv((SV*)cv, G_DISCARD);
3067 call_list(PL_scopestack_ix, PL_unitcheckav);
3069 /* compiled okay, so do it */
3071 CvDEPTH(PL_compcv) = 1;
3072 SP = PL_stack_base + POPMARK; /* pop original mark */
3073 PL_op = saveop; /* The caller may need it. */
3074 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3081 S_check_type_and_open(pTHX_ const char *name)
3084 const int st_rc = PerlLIO_stat(name, &st);
3086 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3090 return PerlIO_open(name, PERL_SCRIPT_MODE);
3093 #ifndef PERL_DISABLE_PMC
3095 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3099 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3100 SV *const pmcsv = newSV(namelen + 2);
3101 char *const pmc = SvPVX(pmcsv);
3104 memcpy(pmc, name, namelen);
3106 pmc[namelen + 1] = '\0';
3108 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3109 fp = check_type_and_open(name);
3112 fp = check_type_and_open(pmc);
3114 SvREFCNT_dec(pmcsv);
3117 fp = check_type_and_open(name);
3122 # define doopen_pm(name, namelen) check_type_and_open(name)
3123 #endif /* !PERL_DISABLE_PMC */
3128 register PERL_CONTEXT *cx;
3135 int vms_unixname = 0;
3137 const char *tryname = NULL;
3139 const I32 gimme = GIMME_V;
3140 int filter_has_file = 0;
3141 PerlIO *tryrsfp = NULL;
3142 SV *filter_cache = NULL;
3143 SV *filter_state = NULL;
3144 SV *filter_sub = NULL;
3150 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3151 sv = new_version(sv);
3152 if (!sv_derived_from(PL_patchlevel, "version"))
3153 upg_version(PL_patchlevel, TRUE);
3154 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3155 if ( vcmp(sv,PL_patchlevel) <= 0 )
3156 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3157 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3160 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3163 SV * const req = SvRV(sv);
3164 SV * const pv = *hv_fetchs((HV*)req, "original", FALSE);
3166 /* get the left hand term */
3167 lav = (AV *)SvRV(*hv_fetchs((HV*)req, "version", FALSE));
3169 first = SvIV(*av_fetch(lav,0,0));
3170 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3171 || hv_exists((HV*)req, "qv", 2 ) /* qv style */
3172 || av_len(lav) > 1 /* FP with > 3 digits */
3173 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3175 DIE(aTHX_ "Perl %"SVf" required--this is only "
3176 "%"SVf", stopped", SVfARG(vnormal(req)),
3177 SVfARG(vnormal(PL_patchlevel)));
3179 else { /* probably 'use 5.10' or 'use 5.8' */
3180 SV * hintsv = newSV(0);
3184 second = SvIV(*av_fetch(lav,1,0));
3186 second /= second >= 600 ? 100 : 10;
3187 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.%d",
3188 (int)first, (int)second,0);
3189 upg_version(hintsv, TRUE);
3191 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3192 "--this is only %"SVf", stopped",
3193 SVfARG(vnormal(req)),
3194 SVfARG(vnormal(hintsv)),
3195 SVfARG(vnormal(PL_patchlevel)));
3200 /* We do this only with use, not require. */
3202 /* If we request a version >= 5.9.5, load feature.pm with the
3203 * feature bundle that corresponds to the required version. */
3204 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3205 SV *const importsv = vnormal(sv);
3206 *SvPVX_mutable(importsv) = ':';
3208 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3214 name = SvPV_const(sv, len);
3215 if (!(name && len > 0 && *name))
3216 DIE(aTHX_ "Null filename used");
3217 TAINT_PROPER("require");
3221 /* The key in the %ENV hash is in the syntax of file passed as the argument
3222 * usually this is in UNIX format, but sometimes in VMS format, which
3223 * can result in a module being pulled in more than once.
3224 * To prevent this, the key must be stored in UNIX format if the VMS
3225 * name can be translated to UNIX.
3227 if ((unixname = tounixspec(name, NULL)) != NULL) {
3228 unixlen = strlen(unixname);
3234 /* if not VMS or VMS name can not be translated to UNIX, pass it
3237 unixname = (char *) name;
3240 if (PL_op->op_type == OP_REQUIRE) {
3241 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3242 unixname, unixlen, 0);
3244 if (*svp != &PL_sv_undef)
3247 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3248 "Compilation failed in require", unixname);
3252 /* prepare to compile file */
3254 if (path_is_absolute(name)) {
3256 tryrsfp = doopen_pm(name, len);
3258 #ifdef MACOS_TRADITIONAL
3262 MacPerl_CanonDir(name, newname, 1);
3263 if (path_is_absolute(newname)) {
3265 tryrsfp = doopen_pm(newname, strlen(newname));
3270 AV * const ar = GvAVn(PL_incgv);
3276 namesv = newSV_type(SVt_PV);
3277 for (i = 0; i <= AvFILL(ar); i++) {
3278 SV * const dirsv = *av_fetch(ar, i, TRUE);
3280 if (SvTIED_mg((SV*)ar, PERL_MAGIC_tied))
3287 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3288 && !sv_isobject(loader))
3290 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3293 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3294 PTR2UV(SvRV(dirsv)), name);
3295 tryname = SvPVX_const(namesv);
3306 if (sv_isobject(loader))
3307 count = call_method("INC", G_ARRAY);
3309 count = call_sv(loader, G_ARRAY);
3312 /* Adjust file name if the hook has set an %INC entry */
3313 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3315 tryname = SvPVX_const(*svp);
3324 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3325 && !isGV_with_GP(SvRV(arg))) {
3326 filter_cache = SvRV(arg);
3327 SvREFCNT_inc_simple_void_NN(filter_cache);
3334 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3338 if (SvTYPE(arg) == SVt_PVGV) {
3339 IO * const io = GvIO((GV *)arg);
3344 tryrsfp = IoIFP(io);
3345 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3346 PerlIO_close(IoOFP(io));
3357 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3359 SvREFCNT_inc_simple_void_NN(filter_sub);
3362 filter_state = SP[i];
3363 SvREFCNT_inc_simple_void(filter_state);
3367 if (!tryrsfp && (filter_cache || filter_sub)) {
3368 tryrsfp = PerlIO_open(BIT_BUCKET,
3383 filter_has_file = 0;
3385 SvREFCNT_dec(filter_cache);
3386 filter_cache = NULL;
3389 SvREFCNT_dec(filter_state);
3390 filter_state = NULL;
3393 SvREFCNT_dec(filter_sub);
3398 if (!path_is_absolute(name)
3399 #ifdef MACOS_TRADITIONAL
3400 /* We consider paths of the form :a:b ambiguous and interpret them first
3401 as global then as local
3403 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3410 dir = SvPV_const(dirsv, dirlen);
3416 #ifdef MACOS_TRADITIONAL
3420 MacPerl_CanonDir(name, buf2, 1);
3421 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3425 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3427 sv_setpv(namesv, unixdir);
3428 sv_catpv(namesv, unixname);
3430 # ifdef __SYMBIAN32__
3431 if (PL_origfilename[0] &&
3432 PL_origfilename[1] == ':' &&
3433 !(dir[0] && dir[1] == ':'))
3434 Perl_sv_setpvf(aTHX_ namesv,
3439 Perl_sv_setpvf(aTHX_ namesv,
3443 /* The equivalent of
3444 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3445 but without the need to parse the format string, or
3446 call strlen on either pointer, and with the correct
3447 allocation up front. */
3449 char *tmp = SvGROW(namesv, dirlen + len + 2);
3451 memcpy(tmp, dir, dirlen);
3454 /* name came from an SV, so it will have a '\0' at the
3455 end that we can copy as part of this memcpy(). */
3456 memcpy(tmp, name, len + 1);
3458 SvCUR_set(namesv, dirlen + len + 1);
3460 /* Don't even actually have to turn SvPOK_on() as we
3461 access it directly with SvPVX() below. */
3466 TAINT_PROPER("require");
3467 tryname = SvPVX_const(namesv);
3468 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3470 if (tryname[0] == '.' && tryname[1] == '/')
3474 else if (errno == EMFILE)
3475 /* no point in trying other paths if out of handles */
3482 SAVECOPFILE_FREE(&PL_compiling);
3483 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3484 SvREFCNT_dec(namesv);
3486 if (PL_op->op_type == OP_REQUIRE) {
3487 const char *msgstr = name;
3488 if(errno == EMFILE) {
3490 = sv_2mortal(Perl_newSVpvf(aTHX_ "%s: %s", msgstr,
3492 msgstr = SvPV_nolen_const(msg);
3494 if (namesv) { /* did we lookup @INC? */
3495 AV * const ar = GvAVn(PL_incgv);
3497 SV * const msg = sv_2mortal(Perl_newSVpvf(aTHX_
3498 "%s in @INC%s%s (@INC contains:",
3500 (instr(msgstr, ".h ")
3501 ? " (change .h to .ph maybe?)" : ""),
3502 (instr(msgstr, ".ph ")
3503 ? " (did you run h2ph?)" : "")
3506 for (i = 0; i <= AvFILL(ar); i++) {
3507 sv_catpvs(msg, " ");
3508 sv_catsv(msg, *av_fetch(ar, i, TRUE));
3510 sv_catpvs(msg, ")");
3511 msgstr = SvPV_nolen_const(msg);
3514 DIE(aTHX_ "Can't locate %s", msgstr);
3520 SETERRNO(0, SS_NORMAL);
3522 /* Assume success here to prevent recursive requirement. */
3523 /* name is never assigned to again, so len is still strlen(name) */
3524 /* Check whether a hook in @INC has already filled %INC */
3526 (void)hv_store(GvHVn(PL_incgv),
3527 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3529 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3531 (void)hv_store(GvHVn(PL_incgv),
3532 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3537 lex_start(NULL, tryrsfp, TRUE);
3541 SAVECOMPILEWARNINGS();
3542 if (PL_dowarn & G_WARN_ALL_ON)
3543 PL_compiling.cop_warnings = pWARN_ALL ;
3544 else if (PL_dowarn & G_WARN_ALL_OFF)
3545 PL_compiling.cop_warnings = pWARN_NONE ;
3547 PL_compiling.cop_warnings = pWARN_STD ;
3549 if (filter_sub || filter_cache) {
3550 SV * const datasv = filter_add(S_run_user_filter, NULL);
3551 IoLINES(datasv) = filter_has_file;
3552 IoTOP_GV(datasv) = (GV *)filter_state;
3553 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3554 IoFMT_GV(datasv) = (GV *)filter_cache;
3557 /* switch to eval mode */
3558 PUSHBLOCK(cx, CXt_EVAL, SP);
3559 PUSHEVAL(cx, name, NULL);
3560 cx->blk_eval.retop = PL_op->op_next;
3562 SAVECOPLINE(&PL_compiling);
3563 CopLINE_set(&PL_compiling, 0);
3567 /* Store and reset encoding. */
3568 encoding = PL_encoding;
3571 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3572 op = DOCATCH(PL_eval_start);
3574 op = PL_op->op_next;
3576 /* Restore encoding. */
3577 PL_encoding = encoding;
3585 register PERL_CONTEXT *cx;
3587 const I32 gimme = GIMME_V;
3588 const I32 was = PL_sub_generation;
3589 char tbuf[TYPE_DIGITS(long) + 12];
3590 char *tmpbuf = tbuf;
3596 HV *saved_hh = NULL;
3597 const char * const fakestr = "_<(eval )";
3598 const int fakelen = 9 + 1;
3600 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3601 saved_hh = (HV*) SvREFCNT_inc(POPs);
3605 TAINT_IF(SvTAINTED(sv));
3606 TAINT_PROPER("eval");
3609 lex_start(sv, NULL, FALSE);
3612 /* switch to eval mode */
3614 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3615 SV * const temp_sv = sv_newmortal();
3616 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3617 (unsigned long)++PL_evalseq,
3618 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3619 tmpbuf = SvPVX(temp_sv);
3620 len = SvCUR(temp_sv);
3623 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3624 SAVECOPFILE_FREE(&PL_compiling);
3625 CopFILE_set(&PL_compiling, tmpbuf+2);
3626 SAVECOPLINE(&PL_compiling);
3627 CopLINE_set(&PL_compiling, 1);
3628 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3629 deleting the eval's FILEGV from the stash before gv_check() runs
3630 (i.e. before run-time proper). To work around the coredump that
3631 ensues, we always turn GvMULTI_on for any globals that were
3632 introduced within evals. See force_ident(). GSAR 96-10-12 */
3633 safestr = savepvn(tmpbuf, len);
3634 SAVEDELETE(PL_defstash, safestr, len);
3636 PL_hints = PL_op->op_targ;
3638 GvHV(PL_hintgv) = saved_hh;
3639 SAVECOMPILEWARNINGS();
3640 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3641 if (PL_compiling.cop_hints_hash) {
3642 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3644 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3645 if (PL_compiling.cop_hints_hash) {
3647 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3648 HINTS_REFCNT_UNLOCK;
3650 /* special case: an eval '' executed within the DB package gets lexically
3651 * placed in the first non-DB CV rather than the current CV - this
3652 * allows the debugger to execute code, find lexicals etc, in the
3653 * scope of the code being debugged. Passing &seq gets find_runcv
3654 * to do the dirty work for us */
3655 runcv = find_runcv(&seq);
3657 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3658 PUSHEVAL(cx, 0, NULL);
3659 cx->blk_eval.retop = PL_op->op_next;
3661 /* prepare to compile string */
3663 if (PERLDB_LINE && PL_curstash != PL_debstash)
3664 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3666 ok = doeval(gimme, NULL, runcv, seq);
3667 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3669 /* Copy in anything fake and short. */
3670 my_strlcpy(safestr, fakestr, fakelen);
3672 return ok ? DOCATCH(PL_eval_start) : PL_op->op_next;
3682 register PERL_CONTEXT *cx;
3684 const U8 save_flags = PL_op -> op_flags;
3689 retop = cx->blk_eval.retop;
3692 if (gimme == G_VOID)
3694 else if (gimme == G_SCALAR) {
3697 if (SvFLAGS(TOPs) & SVs_TEMP)
3700 *MARK = sv_mortalcopy(TOPs);
3704 *MARK = &PL_sv_undef;
3709 /* in case LEAVE wipes old return values */
3710 for (mark = newsp + 1; mark <= SP; mark++) {
3711 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3712 *mark = sv_mortalcopy(*mark);
3713 TAINT_NOT; /* Each item is independent */
3717 PL_curpm = newpm; /* Don't pop $1 et al till now */
3720 assert(CvDEPTH(PL_compcv) == 1);
3722 CvDEPTH(PL_compcv) = 0;
3725 if (optype == OP_REQUIRE &&
3726 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3728 /* Unassume the success we assumed earlier. */
3729 SV * const nsv = cx->blk_eval.old_namesv;
3730 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3731 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
3732 /* die_where() did LEAVE, or we won't be here */
3736 if (!(save_flags & OPf_SPECIAL))
3737 sv_setpvn(ERRSV,"",0);
3743 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3744 close to the related Perl_create_eval_scope. */
3746 Perl_delete_eval_scope(pTHX)
3751 register PERL_CONTEXT *cx;
3758 PERL_UNUSED_VAR(newsp);
3759 PERL_UNUSED_VAR(gimme);
3760 PERL_UNUSED_VAR(optype);
3763 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3764 also needed by Perl_fold_constants. */
3766 Perl_create_eval_scope(pTHX_ U32 flags)
3769 const I32 gimme = GIMME_V;
3774 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3777 PL_in_eval = EVAL_INEVAL;
3778 if (flags & G_KEEPERR)
3779 PL_in_eval |= EVAL_KEEPERR;
3781 sv_setpvn(ERRSV,"",0);
3782 if (flags & G_FAKINGEVAL) {
3783 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3791 PERL_CONTEXT * const cx = create_eval_scope(0);
3792 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3793 return DOCATCH(PL_op->op_next);
3802 register PERL_CONTEXT *cx;
3807 PERL_UNUSED_VAR(optype);
3810 if (gimme == G_VOID)
3812 else if (gimme == G_SCALAR) {
3816 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3819 *MARK = sv_mortalcopy(TOPs);
3823 *MARK = &PL_sv_undef;
3828 /* in case LEAVE wipes old return values */
3830 for (mark = newsp + 1; mark <= SP; mark++) {
3831 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3832 *mark = sv_mortalcopy(*mark);
3833 TAINT_NOT; /* Each item is independent */
3837 PL_curpm = newpm; /* Don't pop $1 et al till now */
3840 sv_setpvn(ERRSV,"",0);
3847 register PERL_CONTEXT *cx;
3848 const I32 gimme = GIMME_V;
3853 if (PL_op->op_targ == 0) {
3854 SV ** const defsv_p = &GvSV(PL_defgv);
3855 *defsv_p = newSVsv(POPs);
3856 SAVECLEARSV(*defsv_p);
3859 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
3861 PUSHBLOCK(cx, CXt_GIVEN, SP);
3870 register PERL_CONTEXT *cx;
3874 PERL_UNUSED_CONTEXT;
3877 assert(CxTYPE(cx) == CXt_GIVEN);
3882 PL_curpm = newpm; /* pop $1 et al */
3889 /* Helper routines used by pp_smartmatch */
3891 S_make_matcher(pTHX_ REGEXP *re)
3894 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
3895 PM_SETRE(matcher, ReREFCNT_inc(re));
3897 SAVEFREEOP((OP *) matcher);
3904 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
3909 PL_op = (OP *) matcher;
3914 return (SvTRUEx(POPs));
3918 S_destroy_matcher(pTHX_ PMOP *matcher)
3921 PERL_UNUSED_ARG(matcher);
3926 /* Do a smart match */
3929 return do_smartmatch(NULL, NULL);
3932 /* This version of do_smartmatch() implements the
3933 * table of smart matches that is found in perlsyn.
3936 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
3941 SV *e = TOPs; /* e is for 'expression' */
3942 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
3943 SV *This, *Other; /* 'This' (and Other to match) to play with C++ */
3944 REGEXP *this_regex, *other_regex;
3946 # define NOT_EMPTY_PROTO(cv) (!SvPOK(cv) || SvCUR(cv) == 0)
3948 # define SM_REF(type) ( \
3949 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_##type) && (Other = e)) \
3950 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_##type) && (Other = d)))
3952 # define SM_CV_NEP /* Find a code ref without an empty prototype */ \
3953 ((SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_PVCV) \
3954 && NOT_EMPTY_PROTO(This) && (Other = e)) \
3955 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_PVCV) \
3956 && NOT_EMPTY_PROTO(This) && (Other = d)))
3958 # define SM_REGEX ( \
3959 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_REGEXP) \
3960 && (this_regex = (REGEXP*) This) \
3963 (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_REGEXP) \
3964 && (this_regex = (REGEXP*) This) \
3968 # define SM_OTHER_REF(type) \
3969 (SvROK(Other) && SvTYPE(SvRV(Other)) == SVt_##type)
3971 # define SM_OTHER_REGEX (SvROK(Other) \
3972 && (SvTYPE(SvRV(Other)) == SVt_REGEXP) \
3973 && (other_regex = (REGEXP*) SvRV(Other)))
3976 # define SM_SEEN_THIS(sv) hv_exists_ent(seen_this, \
3977 sv_2mortal(newSViv(PTR2IV(sv))), 0)
3979 # define SM_SEEN_OTHER(sv) hv_exists_ent(seen_other, \
3980 sv_2mortal(newSViv(PTR2IV(sv))), 0)
3982 tryAMAGICbinSET(smart, 0);
3984 SP -= 2; /* Pop the values */
3986 /* Take care only to invoke mg_get() once for each argument.
3987 * Currently we do this by copying the SV if it's magical. */
3990 d = sv_mortalcopy(d);
3997 e = sv_mortalcopy(e);
4002 if ( SM_OTHER_REF(PVCV) && NOT_EMPTY_PROTO(SvRV(Other)) )
4004 if (This == SvRV(Other))
4015 c = call_sv(This, G_SCALAR);
4019 else if (SvTEMP(TOPs))
4020 SvREFCNT_inc_void(TOPs);
4025 else if (SM_REF(PVHV)) {
4026 if (SM_OTHER_REF(PVHV)) {
4027 /* Check that the key-sets are identical */
4029 HV *other_hv = (HV *) SvRV(Other);
4031 bool other_tied = FALSE;
4032 U32 this_key_count = 0,
4033 other_key_count = 0;
4035 /* Tied hashes don't know how many keys they have. */
4036 if (SvTIED_mg(This, PERL_MAGIC_tied)) {
4039 else if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied)) {
4040 HV * const temp = other_hv;
4041 other_hv = (HV *) This;
4045 if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied))
4048 if (!tied && HvUSEDKEYS((HV *) This) != HvUSEDKEYS(other_hv))
4051 /* The hashes have the same number of keys, so it suffices
4052 to check that one is a subset of the other. */
4053 (void) hv_iterinit((HV *) This);
4054 while ( (he = hv_iternext((HV *) This)) ) {
4056 char * const key = hv_iterkey(he, &key_len);
4060 if(!hv_exists(other_hv, key, key_len)) {
4061 (void) hv_iterinit((HV *) This); /* reset iterator */
4067 (void) hv_iterinit(other_hv);
4068 while ( hv_iternext(other_hv) )
4072 other_key_count = HvUSEDKEYS(other_hv);
4074 if (this_key_count != other_key_count)
4079 else if (SM_OTHER_REF(PVAV)) {
4080 AV * const other_av = (AV *) SvRV(Other);
4081 const I32 other_len = av_len(other_av) + 1;
4084 for (i = 0; i < other_len; ++i) {
4085 SV ** const svp = av_fetch(other_av, i, FALSE);
4089 if (svp) { /* ??? When can this not happen? */
4090 key = SvPV(*svp, key_len);
4091 if (hv_exists((HV *) This, key, key_len))
4097 else if (SM_OTHER_REGEX) {
4098 PMOP * const matcher = make_matcher(other_regex);
4101 (void) hv_iterinit((HV *) This);
4102 while ( (he = hv_iternext((HV *) This)) ) {
4103 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4104 (void) hv_iterinit((HV *) This);
4105 destroy_matcher(matcher);
4109 destroy_matcher(matcher);
4113 if (hv_exists_ent((HV *) This, Other, 0))
4119 else if (SM_REF(PVAV)) {
4120 if (SM_OTHER_REF(PVAV)) {
4121 AV *other_av = (AV *) SvRV(Other);
4122 if (av_len((AV *) This) != av_len(other_av))
4126 const I32 other_len = av_len(other_av);
4128 if (NULL == seen_this) {
4129 seen_this = newHV();
4130 (void) sv_2mortal((SV *) seen_this);
4132 if (NULL == seen_other) {
4133 seen_this = newHV();
4134 (void) sv_2mortal((SV *) seen_other);
4136 for(i = 0; i <= other_len; ++i) {
4137 SV * const * const this_elem = av_fetch((AV *)This, i, FALSE);
4138 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4140 if (!this_elem || !other_elem) {
4141 if (this_elem || other_elem)
4144 else if (SM_SEEN_THIS(*this_elem)
4145 || SM_SEEN_OTHER(*other_elem))
4147 if (*this_elem != *other_elem)
4151 (void)hv_store_ent(seen_this,
4152 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4154 (void)hv_store_ent(seen_other,
4155 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4161 (void) do_smartmatch(seen_this, seen_other);
4171 else if (SM_OTHER_REGEX) {
4172 PMOP * const matcher = make_matcher(other_regex);
4173 const I32 this_len = av_len((AV *) This);
4176 for(i = 0; i <= this_len; ++i) {
4177 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4178 if (svp && matcher_matches_sv(matcher, *svp)) {
4179 destroy_matcher(matcher);
4183 destroy_matcher(matcher);
4186 else if (SvIOK(Other) || SvNOK(Other)) {
4189 for(i = 0; i <= AvFILL((AV *) This); ++i) {
4190 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4197 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4207 else if (SvPOK(Other)) {
4208 const I32 this_len = av_len((AV *) This);
4211 for(i = 0; i <= this_len; ++i) {
4212 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4227 else if (!SvOK(d) || !SvOK(e)) {
4228 if (!SvOK(d) && !SvOK(e))
4233 else if (SM_REGEX) {
4234 PMOP * const matcher = make_matcher(this_regex);
4237 PUSHs(matcher_matches_sv(matcher, Other)
4240 destroy_matcher(matcher);
4243 else if (SM_REF(PVCV)) {
4245 /* This must be a null-prototyped sub, because we
4246 already checked for the other kind. */
4252 c = call_sv(This, G_SCALAR);
4255 PUSHs(&PL_sv_undef);
4256 else if (SvTEMP(TOPs))
4257 SvREFCNT_inc_void(TOPs);
4259 if (SM_OTHER_REF(PVCV)) {
4260 /* This one has to be null-proto'd too.
4261 Call both of 'em, and compare the results */
4263 c = call_sv(SvRV(Other), G_SCALAR);
4266 PUSHs(&PL_sv_undef);
4267 else if (SvTEMP(TOPs))
4268 SvREFCNT_inc_void(TOPs);
4279 else if ( ((SvIOK(d) || SvNOK(d)) && (This = d) && (Other = e))
4280 || ((SvIOK(e) || SvNOK(e)) && (This = e) && (Other = d)) )
4282 if (SvPOK(Other) && !looks_like_number(Other)) {
4283 /* String comparison */
4288 /* Otherwise, numeric comparison */
4291 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4302 /* As a last resort, use string comparison */
4311 register PERL_CONTEXT *cx;
4312 const I32 gimme = GIMME_V;
4314 /* This is essentially an optimization: if the match
4315 fails, we don't want to push a context and then
4316 pop it again right away, so we skip straight
4317 to the op that follows the leavewhen.
4319 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4320 return cLOGOP->op_other->op_next;
4325 PUSHBLOCK(cx, CXt_WHEN, SP);
4334 register PERL_CONTEXT *cx;
4340 assert(CxTYPE(cx) == CXt_WHEN);
4345 PL_curpm = newpm; /* pop $1 et al */
4355 register PERL_CONTEXT *cx;
4358 cxix = dopoptowhen(cxstack_ix);
4360 DIE(aTHX_ "Can't \"continue\" outside a when block");
4361 if (cxix < cxstack_ix)
4364 /* clear off anything above the scope we're re-entering */
4365 inner = PL_scopestack_ix;
4367 if (PL_scopestack_ix < inner)
4368 leave_scope(PL_scopestack[PL_scopestack_ix]);
4369 PL_curcop = cx->blk_oldcop;
4370 return cx->blk_givwhen.leave_op;
4377 register PERL_CONTEXT *cx;
4380 cxix = dopoptogiven(cxstack_ix);
4382 if (PL_op->op_flags & OPf_SPECIAL)
4383 DIE(aTHX_ "Can't use when() outside a topicalizer");
4385 DIE(aTHX_ "Can't \"break\" outside a given block");
4387 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4388 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4390 if (cxix < cxstack_ix)
4393 /* clear off anything above the scope we're re-entering */
4394 inner = PL_scopestack_ix;
4396 if (PL_scopestack_ix < inner)
4397 leave_scope(PL_scopestack[PL_scopestack_ix]);
4398 PL_curcop = cx->blk_oldcop;
4401 return CX_LOOP_NEXTOP_GET(cx);
4403 return cx->blk_givwhen.leave_op;
4407 S_doparseform(pTHX_ SV *sv)
4410 register char *s = SvPV_force(sv, len);
4411 register char * const send = s + len;
4412 register char *base = NULL;
4413 register I32 skipspaces = 0;
4414 bool noblank = FALSE;
4415 bool repeat = FALSE;
4416 bool postspace = FALSE;
4422 bool unchopnum = FALSE;
4423 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4426 Perl_croak(aTHX_ "Null picture in formline");
4428 /* estimate the buffer size needed */
4429 for (base = s; s <= send; s++) {
4430 if (*s == '\n' || *s == '@' || *s == '^')
4436 Newx(fops, maxops, U32);
4441 *fpc++ = FF_LINEMARK;
4442 noblank = repeat = FALSE;
4460 case ' ': case '\t':
4467 } /* else FALL THROUGH */
4475 *fpc++ = FF_LITERAL;
4483 *fpc++ = (U16)skipspaces;
4487 *fpc++ = FF_NEWLINE;
4491 arg = fpc - linepc + 1;
4498 *fpc++ = FF_LINEMARK;
4499 noblank = repeat = FALSE;
4508 ischop = s[-1] == '^';
4514 arg = (s - base) - 1;
4516 *fpc++ = FF_LITERAL;
4524 *fpc++ = 2; /* skip the @* or ^* */
4526 *fpc++ = FF_LINESNGL;
4529 *fpc++ = FF_LINEGLOB;
4531 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4532 arg = ischop ? 512 : 0;
4537 const char * const f = ++s;
4540 arg |= 256 + (s - f);
4542 *fpc++ = s - base; /* fieldsize for FETCH */
4543 *fpc++ = FF_DECIMAL;
4545 unchopnum |= ! ischop;
4547 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4548 arg = ischop ? 512 : 0;
4550 s++; /* skip the '0' first */
4554 const char * const f = ++s;
4557 arg |= 256 + (s - f);
4559 *fpc++ = s - base; /* fieldsize for FETCH */
4560 *fpc++ = FF_0DECIMAL;
4562 unchopnum |= ! ischop;
4566 bool ismore = FALSE;
4569 while (*++s == '>') ;
4570 prespace = FF_SPACE;
4572 else if (*s == '|') {
4573 while (*++s == '|') ;
4574 prespace = FF_HALFSPACE;
4579 while (*++s == '<') ;
4582 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4586 *fpc++ = s - base; /* fieldsize for FETCH */
4588 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4591 *fpc++ = (U16)prespace;
4605 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4607 { /* need to jump to the next word */
4609 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4610 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4611 s = SvPVX(sv) + SvCUR(sv) + z;
4613 Copy(fops, s, arg, U32);
4615 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4618 if (unchopnum && repeat)
4619 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4625 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4627 /* Can value be printed in fldsize chars, using %*.*f ? */
4631 int intsize = fldsize - (value < 0 ? 1 : 0);
4638 while (intsize--) pwr *= 10.0;
4639 while (frcsize--) eps /= 10.0;
4642 if (value + eps >= pwr)
4645 if (value - eps <= -pwr)
4652 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4655 SV * const datasv = FILTER_DATA(idx);
4656 const int filter_has_file = IoLINES(datasv);
4657 SV * const filter_state = (SV *)IoTOP_GV(datasv);
4658 SV * const filter_sub = (SV *)IoBOTTOM_GV(datasv);
4662 const char *got_p = NULL;
4663 const char *prune_from = NULL;
4664 bool read_from_cache = FALSE;
4667 assert(maxlen >= 0);
4670 /* I was having segfault trouble under Linux 2.2.5 after a
4671 parse error occured. (Had to hack around it with a test
4672 for PL_parser->error_count == 0.) Solaris doesn't segfault --
4673 not sure where the trouble is yet. XXX */
4675 if (IoFMT_GV(datasv)) {
4676 SV *const cache = (SV *)IoFMT_GV(datasv);
4679 const char *cache_p = SvPV(cache, cache_len);
4683 /* Running in block mode and we have some cached data already.
4685 if (cache_len >= umaxlen) {
4686 /* In fact, so much data we don't even need to call
4691 const char *const first_nl =
4692 (const char *)memchr(cache_p, '\n', cache_len);
4694 take = first_nl + 1 - cache_p;
4698 sv_catpvn(buf_sv, cache_p, take);
4699 sv_chop(cache, cache_p + take);
4700 /* Definately not EOF */
4704 sv_catsv(buf_sv, cache);
4706 umaxlen -= cache_len;
4709 read_from_cache = TRUE;
4713 /* Filter API says that the filter appends to the contents of the buffer.
4714 Usually the buffer is "", so the details don't matter. But if it's not,
4715 then clearly what it contains is already filtered by this filter, so we
4716 don't want to pass it in a second time.
4717 I'm going to use a mortal in case the upstream filter croaks. */
4718 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
4719 ? sv_newmortal() : buf_sv;
4720 SvUPGRADE(upstream, SVt_PV);
4722 if (filter_has_file) {
4723 status = FILTER_READ(idx+1, upstream, 0);
4726 if (filter_sub && status >= 0) {
4739 PUSHs(filter_state);
4742 count = call_sv(filter_sub, G_SCALAR);
4757 if(SvOK(upstream)) {
4758 got_p = SvPV(upstream, got_len);
4760 if (got_len > umaxlen) {
4761 prune_from = got_p + umaxlen;
4764 const char *const first_nl =
4765 (const char *)memchr(got_p, '\n', got_len);
4766 if (first_nl && first_nl + 1 < got_p + got_len) {
4767 /* There's a second line here... */
4768 prune_from = first_nl + 1;
4773 /* Oh. Too long. Stuff some in our cache. */
4774 STRLEN cached_len = got_p + got_len - prune_from;
4775 SV *cache = (SV *)IoFMT_GV(datasv);
4778 IoFMT_GV(datasv) = (GV*) (cache = newSV(got_len - umaxlen));
4779 } else if (SvOK(cache)) {
4780 /* Cache should be empty. */
4781 assert(!SvCUR(cache));
4784 sv_setpvn(cache, prune_from, cached_len);
4785 /* If you ask for block mode, you may well split UTF-8 characters.
4786 "If it breaks, you get to keep both parts"
4787 (Your code is broken if you don't put them back together again
4788 before something notices.) */
4789 if (SvUTF8(upstream)) {
4792 SvCUR_set(upstream, got_len - cached_len);
4793 /* Can't yet be EOF */
4798 /* If they are at EOF but buf_sv has something in it, then they may never
4799 have touched the SV upstream, so it may be undefined. If we naively
4800 concatenate it then we get a warning about use of uninitialised value.
4802 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
4803 sv_catsv(buf_sv, upstream);
4807 IoLINES(datasv) = 0;
4808 SvREFCNT_dec(IoFMT_GV(datasv));
4810 SvREFCNT_dec(filter_state);
4811 IoTOP_GV(datasv) = NULL;
4814 SvREFCNT_dec(filter_sub);
4815 IoBOTTOM_GV(datasv) = NULL;
4817 filter_del(S_run_user_filter);
4819 if (status == 0 && read_from_cache) {
4820 /* If we read some data from the cache (and by getting here it implies
4821 that we emptied the cache) then we aren't yet at EOF, and mustn't
4822 report that to our caller. */
4828 /* perhaps someone can come up with a better name for
4829 this? it is not really "absolute", per se ... */
4831 S_path_is_absolute(const char *name)
4833 if (PERL_FILE_IS_ABSOLUTE(name)
4834 #ifdef MACOS_TRADITIONAL
4837 || (*name == '.' && (name[1] == '/' ||
4838 (name[1] == '.' && name[2] == '/')))
4850 * c-indentation-style: bsd
4852 * indent-tabs-mode: t
4855 * ex: set ts=8 sts=4 sw=4 noet: