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);
236 if (CxONCE(cx) || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
237 s == m, cx->sb_targ, NULL,
238 ((cx->sb_rflags & REXEC_COPY_STR)
239 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
240 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
242 SV * const targ = cx->sb_targ;
244 assert(cx->sb_strend >= s);
245 if(cx->sb_strend > s) {
246 if (DO_UTF8(dstr) && !SvUTF8(targ))
247 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
249 sv_catpvn(dstr, s, cx->sb_strend - s);
251 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
253 #ifdef PERL_OLD_COPY_ON_WRITE
255 sv_force_normal_flags(targ, SV_COW_DROP_PV);
261 SvPV_set(targ, SvPVX(dstr));
262 SvCUR_set(targ, SvCUR(dstr));
263 SvLEN_set(targ, SvLEN(dstr));
266 SvPV_set(dstr, NULL);
268 TAINT_IF(cx->sb_rxtainted & 1);
269 mPUSHi(saviters - 1);
271 (void)SvPOK_only_UTF8(targ);
272 TAINT_IF(cx->sb_rxtainted);
276 LEAVE_SCOPE(cx->sb_oldsave);
278 RETURNOP(pm->op_next);
280 cx->sb_iters = saviters;
282 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
285 cx->sb_orig = orig = RX_SUBBEG(rx);
287 cx->sb_strend = s + (cx->sb_strend - m);
289 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
291 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
292 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
294 sv_catpvn(dstr, s, m-s);
296 cx->sb_s = RX_OFFS(rx)[0].end + orig;
297 { /* Update the pos() information. */
298 SV * const sv = cx->sb_targ;
300 SvUPGRADE(sv, SVt_PVMG);
301 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
302 #ifdef PERL_OLD_COPY_ON_WRITE
304 sv_force_normal_flags(sv, 0);
306 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
309 mg->mg_len = m - orig;
312 (void)ReREFCNT_inc(rx);
313 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
314 rxres_save(&cx->sb_rxres, rx);
315 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
319 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
324 PERL_ARGS_ASSERT_RXRES_SAVE;
327 if (!p || p[1] < RX_NPARENS(rx)) {
328 #ifdef PERL_OLD_COPY_ON_WRITE
329 i = 7 + RX_NPARENS(rx) * 2;
331 i = 6 + RX_NPARENS(rx) * 2;
340 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
341 RX_MATCH_COPIED_off(rx);
343 #ifdef PERL_OLD_COPY_ON_WRITE
344 *p++ = PTR2UV(RX_SAVED_COPY(rx));
345 RX_SAVED_COPY(rx) = NULL;
348 *p++ = RX_NPARENS(rx);
350 *p++ = PTR2UV(RX_SUBBEG(rx));
351 *p++ = (UV)RX_SUBLEN(rx);
352 for (i = 0; i <= RX_NPARENS(rx); ++i) {
353 *p++ = (UV)RX_OFFS(rx)[i].start;
354 *p++ = (UV)RX_OFFS(rx)[i].end;
359 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
364 PERL_ARGS_ASSERT_RXRES_RESTORE;
367 RX_MATCH_COPY_FREE(rx);
368 RX_MATCH_COPIED_set(rx, *p);
371 #ifdef PERL_OLD_COPY_ON_WRITE
372 if (RX_SAVED_COPY(rx))
373 SvREFCNT_dec (RX_SAVED_COPY(rx));
374 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
378 RX_NPARENS(rx) = *p++;
380 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
381 RX_SUBLEN(rx) = (I32)(*p++);
382 for (i = 0; i <= RX_NPARENS(rx); ++i) {
383 RX_OFFS(rx)[i].start = (I32)(*p++);
384 RX_OFFS(rx)[i].end = (I32)(*p++);
389 Perl_rxres_free(pTHX_ void **rsp)
391 UV * const p = (UV*)*rsp;
393 PERL_ARGS_ASSERT_RXRES_FREE;
398 void *tmp = INT2PTR(char*,*p);
401 PoisonFree(*p, 1, sizeof(*p));
403 Safefree(INT2PTR(char*,*p));
405 #ifdef PERL_OLD_COPY_ON_WRITE
407 SvREFCNT_dec (INT2PTR(SV*,p[1]));
417 dVAR; dSP; dMARK; dORIGMARK;
418 register SV * const tmpForm = *++MARK;
423 register SV *sv = NULL;
424 const char *item = NULL;
428 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
429 const char *chophere = NULL;
430 char *linemark = NULL;
432 bool gotsome = FALSE;
434 const STRLEN fudge = SvPOK(tmpForm)
435 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
436 bool item_is_utf8 = FALSE;
437 bool targ_is_utf8 = FALSE;
439 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);
509 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
510 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
512 sv_utf8_upgrade(PL_formtarget);
513 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
514 t = SvEND(PL_formtarget);
534 if (ckWARN(WARN_SYNTAX))
535 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
542 const char *s = item = SvPV_const(sv, len);
545 itemsize = sv_len_utf8(sv);
546 if (itemsize != (I32)len) {
548 if (itemsize > fieldsize) {
549 itemsize = fieldsize;
550 itembytes = itemsize;
551 sv_pos_u2b(sv, &itembytes, 0);
555 send = chophere = s + itembytes;
565 sv_pos_b2u(sv, &itemsize);
569 item_is_utf8 = FALSE;
570 if (itemsize > fieldsize)
571 itemsize = fieldsize;
572 send = chophere = s + itemsize;
586 const char *s = item = SvPV_const(sv, len);
589 itemsize = sv_len_utf8(sv);
590 if (itemsize != (I32)len) {
592 if (itemsize <= fieldsize) {
593 const char *send = chophere = s + itemsize;
606 itemsize = fieldsize;
607 itembytes = itemsize;
608 sv_pos_u2b(sv, &itembytes, 0);
609 send = chophere = s + itembytes;
610 while (s < send || (s == send && isSPACE(*s))) {
620 if (strchr(PL_chopset, *s))
625 itemsize = chophere - item;
626 sv_pos_b2u(sv, &itemsize);
632 item_is_utf8 = FALSE;
633 if (itemsize <= fieldsize) {
634 const char *const send = chophere = s + itemsize;
647 itemsize = fieldsize;
648 send = chophere = s + itemsize;
649 while (s < send || (s == send && isSPACE(*s))) {
659 if (strchr(PL_chopset, *s))
664 itemsize = chophere - item;
670 arg = fieldsize - itemsize;
679 arg = fieldsize - itemsize;
690 const char *s = item;
694 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
696 sv_utf8_upgrade(PL_formtarget);
697 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
698 t = SvEND(PL_formtarget);
702 if (UTF8_IS_CONTINUED(*s)) {
703 STRLEN skip = UTF8SKIP(s);
720 if ( !((*t++ = *s++) & ~31) )
726 if (targ_is_utf8 && !item_is_utf8) {
727 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
729 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
730 for (; t < SvEND(PL_formtarget); t++) {
743 const int ch = *t++ = *s++;
746 if ( !((*t++ = *s++) & ~31) )
755 const char *s = chophere;
769 const bool oneline = fpc[-1] == FF_LINESNGL;
770 const char *s = item = SvPV_const(sv, len);
771 item_is_utf8 = DO_UTF8(sv);
774 bool chopped = FALSE;
775 const char *const send = s + len;
777 chophere = s + itemsize;
793 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
795 SvCUR_set(sv, chophere - item);
796 sv_catsv(PL_formtarget, sv);
797 SvCUR_set(sv, itemsize);
799 sv_catsv(PL_formtarget, sv);
801 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
802 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
803 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
806 sv_pos_b2u(sv, &itemsize);
814 #if defined(USE_LONG_DOUBLE)
817 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
821 "%#0*.*f" : "%0*.*f");
826 #if defined(USE_LONG_DOUBLE)
828 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
831 ((arg & 256) ? "%#*.*f" : "%*.*f");
834 /* If the field is marked with ^ and the value is undefined,
836 if ((arg & 512) && !SvOK(sv)) {
844 /* overflow evidence */
845 if (num_overflow(value, fieldsize, arg)) {
851 /* Formats aren't yet marked for locales, so assume "yes". */
853 STORE_NUMERIC_STANDARD_SET_LOCAL();
854 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
855 RESTORE_NUMERIC_STANDARD();
862 while (t-- > linemark && *t == ' ') ;
870 if (arg) { /* repeat until fields exhausted? */
872 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
873 lines += FmLINES(PL_formtarget);
876 if (strnEQ(linemark, linemark - arg, arg))
877 DIE(aTHX_ "Runaway format");
880 SvUTF8_on(PL_formtarget);
881 FmLINES(PL_formtarget) = lines;
883 RETURNOP(cLISTOP->op_first);
894 const char *s = chophere;
895 const char *send = item + len;
897 while (isSPACE(*s) && (s < send))
902 arg = fieldsize - itemsize;
909 if (strnEQ(s1," ",3)) {
910 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
921 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
923 SvUTF8_on(PL_formtarget);
924 FmLINES(PL_formtarget) += lines;
936 if (PL_stack_base + *PL_markstack_ptr == SP) {
938 if (GIMME_V == G_SCALAR)
940 RETURNOP(PL_op->op_next->op_next);
942 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
943 pp_pushmark(); /* push dst */
944 pp_pushmark(); /* push src */
945 ENTER; /* enter outer scope */
948 if (PL_op->op_private & OPpGREP_LEX)
949 SAVESPTR(PAD_SVl(PL_op->op_targ));
952 ENTER; /* enter inner scope */
955 src = PL_stack_base[*PL_markstack_ptr];
957 if (PL_op->op_private & OPpGREP_LEX)
958 PAD_SVl(PL_op->op_targ) = src;
963 if (PL_op->op_type == OP_MAPSTART)
964 pp_pushmark(); /* push top */
965 return ((LOGOP*)PL_op->op_next)->op_other;
971 const I32 gimme = GIMME_V;
972 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
978 /* first, move source pointer to the next item in the source list */
979 ++PL_markstack_ptr[-1];
981 /* if there are new items, push them into the destination list */
982 if (items && gimme != G_VOID) {
983 /* might need to make room back there first */
984 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
985 /* XXX this implementation is very pessimal because the stack
986 * is repeatedly extended for every set of items. Is possible
987 * to do this without any stack extension or copying at all
988 * by maintaining a separate list over which the map iterates
989 * (like foreach does). --gsar */
991 /* everything in the stack after the destination list moves
992 * towards the end the stack by the amount of room needed */
993 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
995 /* items to shift up (accounting for the moved source pointer) */
996 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
998 /* This optimization is by Ben Tilly and it does
999 * things differently from what Sarathy (gsar)
1000 * is describing. The downside of this optimization is
1001 * that leaves "holes" (uninitialized and hopefully unused areas)
1002 * to the Perl stack, but on the other hand this
1003 * shouldn't be a problem. If Sarathy's idea gets
1004 * implemented, this optimization should become
1005 * irrelevant. --jhi */
1007 shift = count; /* Avoid shifting too often --Ben Tilly */
1011 dst = (SP += shift);
1012 PL_markstack_ptr[-1] += shift;
1013 *PL_markstack_ptr += shift;
1017 /* copy the new items down to the destination list */
1018 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1019 if (gimme == G_ARRAY) {
1021 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1024 /* scalar context: we don't care about which values map returns
1025 * (we use undef here). And so we certainly don't want to do mortal
1026 * copies of meaningless values. */
1027 while (items-- > 0) {
1029 *dst-- = &PL_sv_undef;
1033 LEAVE; /* exit inner scope */
1036 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1038 (void)POPMARK; /* pop top */
1039 LEAVE; /* exit outer scope */
1040 (void)POPMARK; /* pop src */
1041 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1042 (void)POPMARK; /* pop dst */
1043 SP = PL_stack_base + POPMARK; /* pop original mark */
1044 if (gimme == G_SCALAR) {
1045 if (PL_op->op_private & OPpGREP_LEX) {
1046 SV* sv = sv_newmortal();
1047 sv_setiv(sv, items);
1055 else if (gimme == G_ARRAY)
1062 ENTER; /* enter inner scope */
1065 /* set $_ to the new source item */
1066 src = PL_stack_base[PL_markstack_ptr[-1]];
1068 if (PL_op->op_private & OPpGREP_LEX)
1069 PAD_SVl(PL_op->op_targ) = src;
1073 RETURNOP(cLOGOP->op_other);
1082 if (GIMME == G_ARRAY)
1084 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1085 return cLOGOP->op_other;
1095 if (GIMME == G_ARRAY) {
1096 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1100 SV * const targ = PAD_SV(PL_op->op_targ);
1103 if (PL_op->op_private & OPpFLIP_LINENUM) {
1104 if (GvIO(PL_last_in_gv)) {
1105 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1108 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1110 flip = SvIV(sv) == SvIV(GvSV(gv));
1116 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1117 if (PL_op->op_flags & OPf_SPECIAL) {
1125 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1128 sv_setpvn(TARG, "", 0);
1134 /* This code tries to decide if "$left .. $right" should use the
1135 magical string increment, or if the range is numeric (we make
1136 an exception for .."0" [#18165]). AMS 20021031. */
1138 #define RANGE_IS_NUMERIC(left,right) ( \
1139 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1140 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1141 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1142 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1143 && (!SvOK(right) || looks_like_number(right))))
1149 if (GIMME == G_ARRAY) {
1155 if (RANGE_IS_NUMERIC(left,right)) {
1158 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1159 (SvOK(right) && SvNV(right) > IV_MAX))
1160 DIE(aTHX_ "Range iterator outside integer range");
1171 SV * const sv = sv_2mortal(newSViv(i++));
1176 SV * const final = sv_mortalcopy(right);
1178 const char * const tmps = SvPV_const(final, len);
1180 SV *sv = sv_mortalcopy(left);
1181 SvPV_force_nolen(sv);
1182 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1184 if (strEQ(SvPVX_const(sv),tmps))
1186 sv = sv_2mortal(newSVsv(sv));
1193 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1197 if (PL_op->op_private & OPpFLIP_LINENUM) {
1198 if (GvIO(PL_last_in_gv)) {
1199 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1202 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1203 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1211 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1212 sv_catpvs(targ, "E0");
1222 static const char * const context_name[] = {
1225 NULL, /* CXt_BLOCK never actually needs "block" */
1227 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1228 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1229 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1230 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1238 S_dopoptolabel(pTHX_ const char *label)
1243 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1245 for (i = cxstack_ix; i >= 0; i--) {
1246 register const PERL_CONTEXT * const cx = &cxstack[i];
1247 switch (CxTYPE(cx)) {
1255 if (ckWARN(WARN_EXITING))
1256 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1257 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1258 if (CxTYPE(cx) == CXt_NULL)
1261 case CXt_LOOP_LAZYIV:
1262 case CXt_LOOP_LAZYSV:
1264 case CXt_LOOP_PLAIN:
1265 if ( !CxLABEL(cx) || strNE(label, CxLABEL(cx)) ) {
1266 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1267 (long)i, CxLABEL(cx)));
1270 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1280 Perl_dowantarray(pTHX)
1283 const I32 gimme = block_gimme();
1284 return (gimme == G_VOID) ? G_SCALAR : gimme;
1288 Perl_block_gimme(pTHX)
1291 const I32 cxix = dopoptosub(cxstack_ix);
1295 switch (cxstack[cxix].blk_gimme) {
1303 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1310 Perl_is_lvalue_sub(pTHX)
1313 const I32 cxix = dopoptosub(cxstack_ix);
1314 assert(cxix >= 0); /* We should only be called from inside subs */
1316 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1317 return CxLVAL(cxstack + cxix);
1323 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1328 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1330 for (i = startingblock; i >= 0; i--) {
1331 register const PERL_CONTEXT * const cx = &cxstk[i];
1332 switch (CxTYPE(cx)) {
1338 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1346 S_dopoptoeval(pTHX_ I32 startingblock)
1350 for (i = startingblock; i >= 0; i--) {
1351 register const PERL_CONTEXT *cx = &cxstack[i];
1352 switch (CxTYPE(cx)) {
1356 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1364 S_dopoptoloop(pTHX_ I32 startingblock)
1368 for (i = startingblock; i >= 0; i--) {
1369 register const PERL_CONTEXT * const cx = &cxstack[i];
1370 switch (CxTYPE(cx)) {
1376 if (ckWARN(WARN_EXITING))
1377 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1378 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1379 if ((CxTYPE(cx)) == CXt_NULL)
1382 case CXt_LOOP_LAZYIV:
1383 case CXt_LOOP_LAZYSV:
1385 case CXt_LOOP_PLAIN:
1386 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1394 S_dopoptogiven(pTHX_ I32 startingblock)
1398 for (i = startingblock; i >= 0; i--) {
1399 register const PERL_CONTEXT *cx = &cxstack[i];
1400 switch (CxTYPE(cx)) {
1404 DEBUG_l( Perl_deb(aTHX_ "(Found given #%ld)\n", (long)i));
1406 case CXt_LOOP_PLAIN:
1407 assert(!CxFOREACHDEF(cx));
1409 case CXt_LOOP_LAZYIV:
1410 case CXt_LOOP_LAZYSV:
1412 if (CxFOREACHDEF(cx)) {
1413 DEBUG_l( Perl_deb(aTHX_ "(Found foreach #%ld)\n", (long)i));
1422 S_dopoptowhen(pTHX_ I32 startingblock)
1426 for (i = startingblock; i >= 0; i--) {
1427 register const PERL_CONTEXT *cx = &cxstack[i];
1428 switch (CxTYPE(cx)) {
1432 DEBUG_l( Perl_deb(aTHX_ "(Found when #%ld)\n", (long)i));
1440 Perl_dounwind(pTHX_ I32 cxix)
1445 while (cxstack_ix > cxix) {
1447 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1448 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1449 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1450 /* Note: we don't need to restore the base context info till the end. */
1451 switch (CxTYPE(cx)) {
1454 continue; /* not break */
1462 case CXt_LOOP_LAZYIV:
1463 case CXt_LOOP_LAZYSV:
1465 case CXt_LOOP_PLAIN:
1476 PERL_UNUSED_VAR(optype);
1480 Perl_qerror(pTHX_ SV *err)
1484 PERL_ARGS_ASSERT_QERROR;
1487 sv_catsv(ERRSV, err);
1489 sv_catsv(PL_errors, err);
1491 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1493 ++PL_parser->error_count;
1497 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1506 if (PL_in_eval & EVAL_KEEPERR) {
1507 static const char prefix[] = "\t(in cleanup) ";
1508 SV * const err = ERRSV;
1509 const char *e = NULL;
1511 sv_setpvn(err,"",0);
1512 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1514 e = SvPV_const(err, len);
1516 if (*e != *message || strNE(e,message))
1520 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1521 sv_catpvn(err, prefix, sizeof(prefix)-1);
1522 sv_catpvn(err, message, msglen);
1523 if (ckWARN(WARN_MISC)) {
1524 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1525 Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX_const(err)+start);
1530 sv_setpvn(ERRSV, message, msglen);
1534 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1535 && PL_curstackinfo->si_prev)
1543 register PERL_CONTEXT *cx;
1546 if (cxix < cxstack_ix)
1549 POPBLOCK(cx,PL_curpm);
1550 if (CxTYPE(cx) != CXt_EVAL) {
1552 message = SvPVx_const(ERRSV, msglen);
1553 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1554 PerlIO_write(Perl_error_log, message, msglen);
1559 if (gimme == G_SCALAR)
1560 *++newsp = &PL_sv_undef;
1561 PL_stack_sp = newsp;
1565 /* LEAVE could clobber PL_curcop (see save_re_context())
1566 * XXX it might be better to find a way to avoid messing with
1567 * PL_curcop in save_re_context() instead, but this is a more
1568 * minimal fix --GSAR */
1569 PL_curcop = cx->blk_oldcop;
1571 if (optype == OP_REQUIRE) {
1572 const char* const msg = SvPVx_nolen_const(ERRSV);
1573 SV * const nsv = cx->blk_eval.old_namesv;
1574 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1576 DIE(aTHX_ "%sCompilation failed in require",
1577 *msg ? msg : "Unknown error\n");
1579 assert(CxTYPE(cx) == CXt_EVAL);
1580 return cx->blk_eval.retop;
1584 message = SvPVx_const(ERRSV, msglen);
1586 write_to_stderr(message, msglen);
1594 dVAR; dSP; dPOPTOPssrl;
1595 if (SvTRUE(left) != SvTRUE(right))
1605 register I32 cxix = dopoptosub(cxstack_ix);
1606 register const PERL_CONTEXT *cx;
1607 register const PERL_CONTEXT *ccstack = cxstack;
1608 const PERL_SI *top_si = PL_curstackinfo;
1610 const char *stashname;
1617 /* we may be in a higher stacklevel, so dig down deeper */
1618 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1619 top_si = top_si->si_prev;
1620 ccstack = top_si->si_cxstack;
1621 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1624 if (GIMME != G_ARRAY) {
1630 /* caller() should not report the automatic calls to &DB::sub */
1631 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1632 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1636 cxix = dopoptosub_at(ccstack, cxix - 1);
1639 cx = &ccstack[cxix];
1640 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1641 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1642 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1643 field below is defined for any cx. */
1644 /* caller() should not report the automatic calls to &DB::sub */
1645 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1646 cx = &ccstack[dbcxix];
1649 stashname = CopSTASHPV(cx->blk_oldcop);
1650 if (GIMME != G_ARRAY) {
1653 PUSHs(&PL_sv_undef);
1656 sv_setpv(TARG, stashname);
1665 PUSHs(&PL_sv_undef);
1667 mPUSHs(newSVpv(stashname, 0));
1668 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1669 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1672 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1673 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1674 /* So is ccstack[dbcxix]. */
1676 SV * const sv = newSV(0);
1677 gv_efullname3(sv, cvgv, NULL);
1679 PUSHs(boolSV(CxHASARGS(cx)));
1682 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1683 PUSHs(boolSV(CxHASARGS(cx)));
1687 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1690 gimme = (I32)cx->blk_gimme;
1691 if (gimme == G_VOID)
1692 PUSHs(&PL_sv_undef);
1694 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1695 if (CxTYPE(cx) == CXt_EVAL) {
1697 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1698 PUSHs(cx->blk_eval.cur_text);
1702 else if (cx->blk_eval.old_namesv) {
1703 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1706 /* eval BLOCK (try blocks have old_namesv == 0) */
1708 PUSHs(&PL_sv_undef);
1709 PUSHs(&PL_sv_undef);
1713 PUSHs(&PL_sv_undef);
1714 PUSHs(&PL_sv_undef);
1716 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1717 && CopSTASH_eq(PL_curcop, PL_debstash))
1719 AV * const ary = cx->blk_sub.argarray;
1720 const int off = AvARRAY(ary) - AvALLOC(ary);
1723 GV* const tmpgv = gv_fetchpvs("DB::args", GV_ADD, SVt_PVAV);
1724 PL_dbargs = GvAV(gv_AVadd(tmpgv));
1726 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1729 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1730 av_extend(PL_dbargs, AvFILLp(ary) + off);
1731 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1732 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1734 /* XXX only hints propagated via op_private are currently
1735 * visible (others are not easily accessible, since they
1736 * use the global PL_hints) */
1737 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1740 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1742 if (old_warnings == pWARN_NONE ||
1743 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1744 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1745 else if (old_warnings == pWARN_ALL ||
1746 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1747 /* Get the bit mask for $warnings::Bits{all}, because
1748 * it could have been extended by warnings::register */
1750 HV * const bits = get_hv("warnings::Bits", FALSE);
1751 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1752 mask = newSVsv(*bits_all);
1755 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1759 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1763 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1764 sv_2mortal(newRV_noinc(
1765 (SV*)Perl_refcounted_he_chain_2hv(aTHX_
1766 cx->blk_oldcop->cop_hints_hash)))
1775 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1776 sv_reset(tmps, CopSTASH(PL_curcop));
1781 /* like pp_nextstate, but used instead when the debugger is active */
1786 PL_curcop = (COP*)PL_op;
1787 TAINT_NOT; /* Each statement is presumed innocent */
1788 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1791 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1792 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1795 register PERL_CONTEXT *cx;
1796 const I32 gimme = G_ARRAY;
1798 GV * const gv = PL_DBgv;
1799 register CV * const cv = GvCV(gv);
1802 DIE(aTHX_ "No DB::DB routine defined");
1804 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1805 /* don't do recursive DB::DB call */
1820 (void)(*CvXSUB(cv))(aTHX_ cv);
1827 PUSHBLOCK(cx, CXt_SUB, SP);
1829 cx->blk_sub.retop = PL_op->op_next;
1832 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1833 RETURNOP(CvSTART(cv));
1843 register PERL_CONTEXT *cx;
1844 const I32 gimme = GIMME_V;
1846 U8 cxtype = CXt_LOOP_FOR;
1854 if (PL_op->op_targ) {
1855 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1856 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1857 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1858 SVs_PADSTALE, SVs_PADSTALE);
1860 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1861 #ifndef USE_ITHREADS
1862 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1868 GV * const gv = (GV*)POPs;
1869 svp = &GvSV(gv); /* symbol table variable */
1870 SAVEGENERICSV(*svp);
1873 iterdata = (PAD*)gv;
1877 if (PL_op->op_private & OPpITER_DEF)
1878 cxtype |= CXp_FOR_DEF;
1882 PUSHBLOCK(cx, cxtype, SP);
1884 PUSHLOOP_FOR(cx, iterdata, MARK, PL_op->op_targ);
1886 PUSHLOOP_FOR(cx, svp, MARK, 0);
1888 if (PL_op->op_flags & OPf_STACKED) {
1889 SV *maybe_ary = POPs;
1890 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1892 SV * const right = maybe_ary;
1895 if (RANGE_IS_NUMERIC(sv,right)) {
1896 cx->cx_type &= ~CXTYPEMASK;
1897 cx->cx_type |= CXt_LOOP_LAZYIV;
1898 /* Make sure that no-one re-orders cop.h and breaks our
1900 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
1901 #ifdef NV_PRESERVES_UV
1902 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1903 (SvNV(sv) > (NV)IV_MAX)))
1905 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1906 (SvNV(right) < (NV)IV_MIN))))
1908 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1911 ((SvUV(sv) > (UV)IV_MAX) ||
1912 (SvNV(sv) > (NV)UV_MAX)))))
1914 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1916 ((SvNV(right) > 0) &&
1917 ((SvUV(right) > (UV)IV_MAX) ||
1918 (SvNV(right) > (NV)UV_MAX))))))
1920 DIE(aTHX_ "Range iterator outside integer range");
1921 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
1922 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
1924 /* for correct -Dstv display */
1925 cx->blk_oldsp = sp - PL_stack_base;
1929 cx->cx_type &= ~CXTYPEMASK;
1930 cx->cx_type |= CXt_LOOP_LAZYSV;
1931 /* Make sure that no-one re-orders cop.h and breaks our
1933 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
1934 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
1935 cx->blk_loop.state_u.lazysv.end = right;
1936 SvREFCNT_inc(right);
1937 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
1938 /* This will do the upgrade to SVt_PV, and warn if the value
1939 is uninitialised. */
1940 (void) SvPV_nolen_const(right);
1941 /* Doing this avoids a check every time in pp_iter in pp_hot.c
1942 to replace !SvOK() with a pointer to "". */
1944 SvREFCNT_dec(right);
1945 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
1949 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
1950 cx->blk_loop.state_u.ary.ary = (AV*)maybe_ary;
1951 SvREFCNT_inc(maybe_ary);
1952 cx->blk_loop.state_u.ary.ix =
1953 (PL_op->op_private & OPpITER_REVERSED) ?
1954 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
1958 else { /* iterating over items on the stack */
1959 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
1960 if (PL_op->op_private & OPpITER_REVERSED) {
1961 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
1964 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
1974 register PERL_CONTEXT *cx;
1975 const I32 gimme = GIMME_V;
1981 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
1982 PUSHLOOP_PLAIN(cx, SP);
1990 register PERL_CONTEXT *cx;
1997 assert(CxTYPE_is_LOOP(cx));
1999 newsp = PL_stack_base + cx->blk_loop.resetsp;
2002 if (gimme == G_VOID)
2004 else if (gimme == G_SCALAR) {
2006 *++newsp = sv_mortalcopy(*SP);
2008 *++newsp = &PL_sv_undef;
2012 *++newsp = sv_mortalcopy(*++mark);
2013 TAINT_NOT; /* Each item is independent */
2019 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2020 PL_curpm = newpm; /* ... and pop $1 et al */
2031 register PERL_CONTEXT *cx;
2032 bool popsub2 = FALSE;
2033 bool clear_errsv = FALSE;
2041 const I32 cxix = dopoptosub(cxstack_ix);
2044 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2045 * sort block, which is a CXt_NULL
2048 PL_stack_base[1] = *PL_stack_sp;
2049 PL_stack_sp = PL_stack_base + 1;
2053 DIE(aTHX_ "Can't return outside a subroutine");
2055 if (cxix < cxstack_ix)
2058 if (CxMULTICALL(&cxstack[cxix])) {
2059 gimme = cxstack[cxix].blk_gimme;
2060 if (gimme == G_VOID)
2061 PL_stack_sp = PL_stack_base;
2062 else if (gimme == G_SCALAR) {
2063 PL_stack_base[1] = *PL_stack_sp;
2064 PL_stack_sp = PL_stack_base + 1;
2070 switch (CxTYPE(cx)) {
2073 retop = cx->blk_sub.retop;
2074 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2077 if (!(PL_in_eval & EVAL_KEEPERR))
2080 retop = cx->blk_eval.retop;
2084 if (optype == OP_REQUIRE &&
2085 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2087 /* Unassume the success we assumed earlier. */
2088 SV * const nsv = cx->blk_eval.old_namesv;
2089 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
2090 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
2095 retop = cx->blk_sub.retop;
2098 DIE(aTHX_ "panic: return");
2102 if (gimme == G_SCALAR) {
2105 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2107 *++newsp = SvREFCNT_inc(*SP);
2112 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2114 *++newsp = sv_mortalcopy(sv);
2119 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2122 *++newsp = sv_mortalcopy(*SP);
2125 *++newsp = &PL_sv_undef;
2127 else if (gimme == G_ARRAY) {
2128 while (++MARK <= SP) {
2129 *++newsp = (popsub2 && SvTEMP(*MARK))
2130 ? *MARK : sv_mortalcopy(*MARK);
2131 TAINT_NOT; /* Each item is independent */
2134 PL_stack_sp = newsp;
2137 /* Stack values are safe: */
2140 POPSUB(cx,sv); /* release CV and @_ ... */
2144 PL_curpm = newpm; /* ... and pop $1 et al */
2157 register PERL_CONTEXT *cx;
2168 if (PL_op->op_flags & OPf_SPECIAL) {
2169 cxix = dopoptoloop(cxstack_ix);
2171 DIE(aTHX_ "Can't \"last\" outside a loop block");
2174 cxix = dopoptolabel(cPVOP->op_pv);
2176 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2178 if (cxix < cxstack_ix)
2182 cxstack_ix++; /* temporarily protect top context */
2184 switch (CxTYPE(cx)) {
2185 case CXt_LOOP_LAZYIV:
2186 case CXt_LOOP_LAZYSV:
2188 case CXt_LOOP_PLAIN:
2190 newsp = PL_stack_base + cx->blk_loop.resetsp;
2191 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2195 nextop = cx->blk_sub.retop;
2199 nextop = cx->blk_eval.retop;
2203 nextop = cx->blk_sub.retop;
2206 DIE(aTHX_ "panic: last");
2210 if (gimme == G_SCALAR) {
2212 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2213 ? *SP : sv_mortalcopy(*SP);
2215 *++newsp = &PL_sv_undef;
2217 else if (gimme == G_ARRAY) {
2218 while (++MARK <= SP) {
2219 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2220 ? *MARK : sv_mortalcopy(*MARK);
2221 TAINT_NOT; /* Each item is independent */
2229 /* Stack values are safe: */
2231 case CXt_LOOP_LAZYIV:
2232 case CXt_LOOP_PLAIN:
2233 case CXt_LOOP_LAZYSV:
2235 POPLOOP(cx); /* release loop vars ... */
2239 POPSUB(cx,sv); /* release CV and @_ ... */
2242 PL_curpm = newpm; /* ... and pop $1 et al */
2245 PERL_UNUSED_VAR(optype);
2246 PERL_UNUSED_VAR(gimme);
2254 register PERL_CONTEXT *cx;
2257 if (PL_op->op_flags & OPf_SPECIAL) {
2258 cxix = dopoptoloop(cxstack_ix);
2260 DIE(aTHX_ "Can't \"next\" outside a loop block");
2263 cxix = dopoptolabel(cPVOP->op_pv);
2265 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2267 if (cxix < cxstack_ix)
2270 /* clear off anything above the scope we're re-entering, but
2271 * save the rest until after a possible continue block */
2272 inner = PL_scopestack_ix;
2274 if (PL_scopestack_ix < inner)
2275 leave_scope(PL_scopestack[PL_scopestack_ix]);
2276 PL_curcop = cx->blk_oldcop;
2277 return CX_LOOP_NEXTOP_GET(cx);
2284 register PERL_CONTEXT *cx;
2288 if (PL_op->op_flags & OPf_SPECIAL) {
2289 cxix = dopoptoloop(cxstack_ix);
2291 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2294 cxix = dopoptolabel(cPVOP->op_pv);
2296 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2298 if (cxix < cxstack_ix)
2301 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2302 if (redo_op->op_type == OP_ENTER) {
2303 /* pop one less context to avoid $x being freed in while (my $x..) */
2305 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2306 redo_op = redo_op->op_next;
2310 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2311 LEAVE_SCOPE(oldsave);
2313 PL_curcop = cx->blk_oldcop;
2318 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2322 static const char too_deep[] = "Target of goto is too deeply nested";
2324 PERL_ARGS_ASSERT_DOFINDLABEL;
2327 Perl_croak(aTHX_ too_deep);
2328 if (o->op_type == OP_LEAVE ||
2329 o->op_type == OP_SCOPE ||
2330 o->op_type == OP_LEAVELOOP ||
2331 o->op_type == OP_LEAVESUB ||
2332 o->op_type == OP_LEAVETRY)
2334 *ops++ = cUNOPo->op_first;
2336 Perl_croak(aTHX_ too_deep);
2339 if (o->op_flags & OPf_KIDS) {
2341 /* First try all the kids at this level, since that's likeliest. */
2342 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2343 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2344 CopLABEL(kCOP) && strEQ(CopLABEL(kCOP), label))
2347 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2348 if (kid == PL_lastgotoprobe)
2350 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2353 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2354 ops[-1]->op_type == OP_DBSTATE)
2359 if ((o = dofindlabel(kid, label, ops, oplimit)))
2372 register PERL_CONTEXT *cx;
2373 #define GOTO_DEPTH 64
2374 OP *enterops[GOTO_DEPTH];
2375 const char *label = NULL;
2376 const bool do_dump = (PL_op->op_type == OP_DUMP);
2377 static const char must_have_label[] = "goto must have label";
2379 if (PL_op->op_flags & OPf_STACKED) {
2380 SV * const sv = POPs;
2382 /* This egregious kludge implements goto &subroutine */
2383 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2385 register PERL_CONTEXT *cx;
2386 CV* cv = (CV*)SvRV(sv);
2393 if (!CvROOT(cv) && !CvXSUB(cv)) {
2394 const GV * const gv = CvGV(cv);
2398 /* autoloaded stub? */
2399 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2401 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2402 GvNAMELEN(gv), FALSE);
2403 if (autogv && (cv = GvCV(autogv)))
2405 tmpstr = sv_newmortal();
2406 gv_efullname3(tmpstr, gv, NULL);
2407 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2409 DIE(aTHX_ "Goto undefined subroutine");
2412 /* First do some returnish stuff. */
2413 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2415 cxix = dopoptosub(cxstack_ix);
2417 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2418 if (cxix < cxstack_ix)
2422 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2423 if (CxTYPE(cx) == CXt_EVAL) {
2425 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2427 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2429 else if (CxMULTICALL(cx))
2430 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2431 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2432 /* put @_ back onto stack */
2433 AV* av = cx->blk_sub.argarray;
2435 items = AvFILLp(av) + 1;
2436 EXTEND(SP, items+1); /* @_ could have been extended. */
2437 Copy(AvARRAY(av), SP + 1, items, SV*);
2438 SvREFCNT_dec(GvAV(PL_defgv));
2439 GvAV(PL_defgv) = cx->blk_sub.savearray;
2441 /* abandon @_ if it got reified */
2446 av_extend(av, items-1);
2448 PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2451 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2452 AV* const av = GvAV(PL_defgv);
2453 items = AvFILLp(av) + 1;
2454 EXTEND(SP, items+1); /* @_ could have been extended. */
2455 Copy(AvARRAY(av), SP + 1, items, SV*);
2459 if (CxTYPE(cx) == CXt_SUB &&
2460 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2461 SvREFCNT_dec(cx->blk_sub.cv);
2462 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2463 LEAVE_SCOPE(oldsave);
2465 /* Now do some callish stuff. */
2467 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2469 OP* const retop = cx->blk_sub.retop;
2474 for (index=0; index<items; index++)
2475 sv_2mortal(SP[-index]);
2478 /* XS subs don't have a CxSUB, so pop it */
2479 POPBLOCK(cx, PL_curpm);
2480 /* Push a mark for the start of arglist */
2483 (void)(*CvXSUB(cv))(aTHX_ cv);
2488 AV* const padlist = CvPADLIST(cv);
2489 if (CxTYPE(cx) == CXt_EVAL) {
2490 PL_in_eval = CxOLD_IN_EVAL(cx);
2491 PL_eval_root = cx->blk_eval.old_eval_root;
2492 cx->cx_type = CXt_SUB;
2494 cx->blk_sub.cv = cv;
2495 cx->blk_sub.olddepth = CvDEPTH(cv);
2498 if (CvDEPTH(cv) < 2)
2499 SvREFCNT_inc_simple_void_NN(cv);
2501 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2502 sub_crush_depth(cv);
2503 pad_push(padlist, CvDEPTH(cv));
2506 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2509 AV* const av = (AV*)PAD_SVl(0);
2511 cx->blk_sub.savearray = GvAV(PL_defgv);
2512 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2513 CX_CURPAD_SAVE(cx->blk_sub);
2514 cx->blk_sub.argarray = av;
2516 if (items >= AvMAX(av) + 1) {
2517 SV **ary = AvALLOC(av);
2518 if (AvARRAY(av) != ary) {
2519 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2522 if (items >= AvMAX(av) + 1) {
2523 AvMAX(av) = items - 1;
2524 Renew(ary,items+1,SV*);
2530 Copy(mark,AvARRAY(av),items,SV*);
2531 AvFILLp(av) = items - 1;
2532 assert(!AvREAL(av));
2534 /* transfer 'ownership' of refcnts to new @_ */
2544 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2545 Perl_get_db_sub(aTHX_ NULL, cv);
2547 CV * const gotocv = get_cv("DB::goto", FALSE);
2549 PUSHMARK( PL_stack_sp );
2550 call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2555 RETURNOP(CvSTART(cv));
2559 label = SvPV_nolen_const(sv);
2560 if (!(do_dump || *label))
2561 DIE(aTHX_ must_have_label);
2564 else if (PL_op->op_flags & OPf_SPECIAL) {
2566 DIE(aTHX_ must_have_label);
2569 label = cPVOP->op_pv;
2571 if (label && *label) {
2572 OP *gotoprobe = NULL;
2573 bool leaving_eval = FALSE;
2574 bool in_block = FALSE;
2575 PERL_CONTEXT *last_eval_cx = NULL;
2579 PL_lastgotoprobe = NULL;
2581 for (ix = cxstack_ix; ix >= 0; ix--) {
2583 switch (CxTYPE(cx)) {
2585 leaving_eval = TRUE;
2586 if (!CxTRYBLOCK(cx)) {
2587 gotoprobe = (last_eval_cx ?
2588 last_eval_cx->blk_eval.old_eval_root :
2593 /* else fall through */
2594 case CXt_LOOP_LAZYIV:
2595 case CXt_LOOP_LAZYSV:
2597 case CXt_LOOP_PLAIN:
2598 gotoprobe = cx->blk_oldcop->op_sibling;
2604 gotoprobe = cx->blk_oldcop->op_sibling;
2607 gotoprobe = PL_main_root;
2610 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2611 gotoprobe = CvROOT(cx->blk_sub.cv);
2617 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2620 DIE(aTHX_ "panic: goto");
2621 gotoprobe = PL_main_root;
2625 retop = dofindlabel(gotoprobe, label,
2626 enterops, enterops + GOTO_DEPTH);
2630 PL_lastgotoprobe = gotoprobe;
2633 DIE(aTHX_ "Can't find label %s", label);
2635 /* if we're leaving an eval, check before we pop any frames
2636 that we're not going to punt, otherwise the error
2639 if (leaving_eval && *enterops && enterops[1]) {
2641 for (i = 1; enterops[i]; i++)
2642 if (enterops[i]->op_type == OP_ENTERITER)
2643 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2646 /* pop unwanted frames */
2648 if (ix < cxstack_ix) {
2655 oldsave = PL_scopestack[PL_scopestack_ix];
2656 LEAVE_SCOPE(oldsave);
2659 /* push wanted frames */
2661 if (*enterops && enterops[1]) {
2662 OP * const oldop = PL_op;
2663 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2664 for (; enterops[ix]; ix++) {
2665 PL_op = enterops[ix];
2666 /* Eventually we may want to stack the needed arguments
2667 * for each op. For now, we punt on the hard ones. */
2668 if (PL_op->op_type == OP_ENTERITER)
2669 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2670 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2678 if (!retop) retop = PL_main_start;
2680 PL_restartop = retop;
2681 PL_do_undump = TRUE;
2685 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2686 PL_do_undump = FALSE;
2703 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2705 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2708 PL_exit_flags |= PERL_EXIT_EXPECTED;
2710 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2711 if (anum || !(PL_minus_c && PL_madskills))
2716 PUSHs(&PL_sv_undef);
2723 S_save_lines(pTHX_ AV *array, SV *sv)
2725 const char *s = SvPVX_const(sv);
2726 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2729 PERL_ARGS_ASSERT_SAVE_LINES;
2731 while (s && s < send) {
2733 SV * const tmpstr = newSV_type(SVt_PVMG);
2735 t = strchr(s, '\n');
2741 sv_setpvn(tmpstr, s, t - s);
2742 av_store(array, line++, tmpstr);
2748 S_docatch(pTHX_ OP *o)
2752 OP * const oldop = PL_op;
2756 assert(CATCH_GET == TRUE);
2763 assert(cxstack_ix >= 0);
2764 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2765 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2770 /* die caught by an inner eval - continue inner loop */
2772 /* NB XXX we rely on the old popped CxEVAL still being at the top
2773 * of the stack; the way die_where() currently works, this
2774 * assumption is valid. In theory The cur_top_env value should be
2775 * returned in another global, the way retop (aka PL_restartop)
2777 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2780 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2782 PL_op = PL_restartop;
2799 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2800 /* sv Text to convert to OP tree. */
2801 /* startop op_free() this to undo. */
2802 /* code Short string id of the caller. */
2804 /* FIXME - how much of this code is common with pp_entereval? */
2805 dVAR; dSP; /* Make POPBLOCK work. */
2811 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2812 char *tmpbuf = tbuf;
2815 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2818 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2821 lex_start(sv, NULL, FALSE);
2823 /* switch to eval mode */
2825 if (IN_PERL_COMPILETIME) {
2826 SAVECOPSTASH_FREE(&PL_compiling);
2827 CopSTASH_set(&PL_compiling, PL_curstash);
2829 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2830 SV * const sv = sv_newmortal();
2831 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2832 code, (unsigned long)++PL_evalseq,
2833 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2838 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2839 (unsigned long)++PL_evalseq);
2840 SAVECOPFILE_FREE(&PL_compiling);
2841 CopFILE_set(&PL_compiling, tmpbuf+2);
2842 SAVECOPLINE(&PL_compiling);
2843 CopLINE_set(&PL_compiling, 1);
2844 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2845 deleting the eval's FILEGV from the stash before gv_check() runs
2846 (i.e. before run-time proper). To work around the coredump that
2847 ensues, we always turn GvMULTI_on for any globals that were
2848 introduced within evals. See force_ident(). GSAR 96-10-12 */
2849 safestr = savepvn(tmpbuf, len);
2850 SAVEDELETE(PL_defstash, safestr, len);
2852 #ifdef OP_IN_REGISTER
2858 /* we get here either during compilation, or via pp_regcomp at runtime */
2859 runtime = IN_PERL_RUNTIME;
2861 runcv = find_runcv(NULL);
2864 PL_op->op_type = OP_ENTEREVAL;
2865 PL_op->op_flags = 0; /* Avoid uninit warning. */
2866 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2870 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2872 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2873 POPBLOCK(cx,PL_curpm);
2876 (*startop)->op_type = OP_NULL;
2877 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2879 /* XXX DAPM do this properly one year */
2880 *padp = (AV*)SvREFCNT_inc_simple(PL_comppad);
2882 if (IN_PERL_COMPILETIME)
2883 CopHINTS_set(&PL_compiling, PL_hints);
2884 #ifdef OP_IN_REGISTER
2887 PERL_UNUSED_VAR(newsp);
2888 PERL_UNUSED_VAR(optype);
2890 return PL_eval_start;
2895 =for apidoc find_runcv
2897 Locate the CV corresponding to the currently executing sub or eval.
2898 If db_seqp is non_null, skip CVs that are in the DB package and populate
2899 *db_seqp with the cop sequence number at the point that the DB:: code was
2900 entered. (allows debuggers to eval in the scope of the breakpoint rather
2901 than in the scope of the debugger itself).
2907 Perl_find_runcv(pTHX_ U32 *db_seqp)
2913 *db_seqp = PL_curcop->cop_seq;
2914 for (si = PL_curstackinfo; si; si = si->si_prev) {
2916 for (ix = si->si_cxix; ix >= 0; ix--) {
2917 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2918 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2919 CV * const cv = cx->blk_sub.cv;
2920 /* skip DB:: code */
2921 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2922 *db_seqp = cx->blk_oldcop->cop_seq;
2927 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2935 /* Compile a require/do, an eval '', or a /(?{...})/.
2936 * In the last case, startop is non-null, and contains the address of
2937 * a pointer that should be set to the just-compiled code.
2938 * outside is the lexically enclosing CV (if any) that invoked us.
2939 * Returns a bool indicating whether the compile was successful; if so,
2940 * PL_eval_start contains the first op of the compiled ocde; otherwise,
2941 * pushes undef (also croaks if startop != NULL).
2945 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2948 OP * const saveop = PL_op;
2950 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2951 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2956 SAVESPTR(PL_compcv);
2957 PL_compcv = (CV*)newSV_type(SVt_PVCV);
2958 CvEVAL_on(PL_compcv);
2959 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2960 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2962 CvOUTSIDE_SEQ(PL_compcv) = seq;
2963 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc_simple(outside);
2965 /* set up a scratch pad */
2967 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2968 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
2972 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2974 /* make sure we compile in the right package */
2976 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2977 SAVESPTR(PL_curstash);
2978 PL_curstash = CopSTASH(PL_curcop);
2980 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
2981 SAVESPTR(PL_beginav);
2982 PL_beginav = newAV();
2983 SAVEFREESV(PL_beginav);
2984 SAVESPTR(PL_unitcheckav);
2985 PL_unitcheckav = newAV();
2986 SAVEFREESV(PL_unitcheckav);
2989 SAVEBOOL(PL_madskills);
2993 /* try to compile it */
2995 PL_eval_root = NULL;
2996 PL_curcop = &PL_compiling;
2997 CopARYBASE_set(PL_curcop, 0);
2998 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
2999 PL_in_eval |= EVAL_KEEPERR;
3002 if (yyparse() || PL_parser->error_count || !PL_eval_root) {
3003 SV **newsp; /* Used by POPBLOCK. */
3004 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
3005 I32 optype = 0; /* Might be reset by POPEVAL. */
3010 op_free(PL_eval_root);
3011 PL_eval_root = NULL;
3013 SP = PL_stack_base + POPMARK; /* pop original mark */
3015 POPBLOCK(cx,PL_curpm);
3021 msg = SvPVx_nolen_const(ERRSV);
3022 if (optype == OP_REQUIRE) {
3023 const SV * const nsv = cx->blk_eval.old_namesv;
3024 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
3026 Perl_croak(aTHX_ "%sCompilation failed in require",
3027 *msg ? msg : "Unknown error\n");
3030 POPBLOCK(cx,PL_curpm);
3032 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3033 (*msg ? msg : "Unknown error\n"));
3037 sv_setpvs(ERRSV, "Compilation error");
3040 PERL_UNUSED_VAR(newsp);
3041 PUSHs(&PL_sv_undef);
3045 CopLINE_set(&PL_compiling, 0);
3047 *startop = PL_eval_root;
3049 SAVEFREEOP(PL_eval_root);
3051 /* Set the context for this new optree.
3052 * If the last op is an OP_REQUIRE, force scalar context.
3053 * Otherwise, propagate the context from the eval(). */
3054 if (PL_eval_root->op_type == OP_LEAVEEVAL
3055 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3056 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3058 scalar(PL_eval_root);
3059 else if ((gimme & G_WANT) == G_VOID)
3060 scalarvoid(PL_eval_root);
3061 else if ((gimme & G_WANT) == G_ARRAY)
3064 scalar(PL_eval_root);
3066 DEBUG_x(dump_eval());
3068 /* Register with debugger: */
3069 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3070 CV * const cv = get_cv("DB::postponed", FALSE);
3074 XPUSHs((SV*)CopFILEGV(&PL_compiling));
3076 call_sv((SV*)cv, G_DISCARD);
3081 call_list(PL_scopestack_ix, PL_unitcheckav);
3083 /* compiled okay, so do it */
3085 CvDEPTH(PL_compcv) = 1;
3086 SP = PL_stack_base + POPMARK; /* pop original mark */
3087 PL_op = saveop; /* The caller may need it. */
3088 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3095 S_check_type_and_open(pTHX_ const char *name)
3098 const int st_rc = PerlLIO_stat(name, &st);
3100 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3102 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3106 return PerlIO_open(name, PERL_SCRIPT_MODE);
3109 #ifndef PERL_DISABLE_PMC
3111 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3115 PERL_ARGS_ASSERT_DOOPEN_PM;
3117 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3118 SV *const pmcsv = newSV(namelen + 2);
3119 char *const pmc = SvPVX(pmcsv);
3122 memcpy(pmc, name, namelen);
3124 pmc[namelen + 1] = '\0';
3126 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3127 fp = check_type_and_open(name);
3130 fp = check_type_and_open(pmc);
3132 SvREFCNT_dec(pmcsv);
3135 fp = check_type_and_open(name);
3140 # define doopen_pm(name, namelen) check_type_and_open(name)
3141 #endif /* !PERL_DISABLE_PMC */
3146 register PERL_CONTEXT *cx;
3153 int vms_unixname = 0;
3155 const char *tryname = NULL;
3157 const I32 gimme = GIMME_V;
3158 int filter_has_file = 0;
3159 PerlIO *tryrsfp = NULL;
3160 SV *filter_cache = NULL;
3161 SV *filter_state = NULL;
3162 SV *filter_sub = NULL;
3168 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3169 sv = new_version(sv);
3170 if (!sv_derived_from(PL_patchlevel, "version"))
3171 upg_version(PL_patchlevel, TRUE);
3172 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3173 if ( vcmp(sv,PL_patchlevel) <= 0 )
3174 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3175 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3178 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3181 SV * const req = SvRV(sv);
3182 SV * const pv = *hv_fetchs((HV*)req, "original", FALSE);
3184 /* get the left hand term */
3185 lav = (AV *)SvRV(*hv_fetchs((HV*)req, "version", FALSE));
3187 first = SvIV(*av_fetch(lav,0,0));
3188 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3189 || hv_exists((HV*)req, "qv", 2 ) /* qv style */
3190 || av_len(lav) > 1 /* FP with > 3 digits */
3191 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3193 DIE(aTHX_ "Perl %"SVf" required--this is only "
3194 "%"SVf", stopped", SVfARG(vnormal(req)),
3195 SVfARG(vnormal(PL_patchlevel)));
3197 else { /* probably 'use 5.10' or 'use 5.8' */
3198 SV * hintsv = newSV(0);
3202 second = SvIV(*av_fetch(lav,1,0));
3204 second /= second >= 600 ? 100 : 10;
3205 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.%d",
3206 (int)first, (int)second,0);
3207 upg_version(hintsv, TRUE);
3209 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3210 "--this is only %"SVf", stopped",
3211 SVfARG(vnormal(req)),
3212 SVfARG(vnormal(hintsv)),
3213 SVfARG(vnormal(PL_patchlevel)));
3218 /* We do this only with use, not require. */
3220 /* If we request a version >= 5.9.5, load feature.pm with the
3221 * feature bundle that corresponds to the required version. */
3222 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3223 SV *const importsv = vnormal(sv);
3224 *SvPVX_mutable(importsv) = ':';
3226 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3232 name = SvPV_const(sv, len);
3233 if (!(name && len > 0 && *name))
3234 DIE(aTHX_ "Null filename used");
3235 TAINT_PROPER("require");
3239 /* The key in the %ENV hash is in the syntax of file passed as the argument
3240 * usually this is in UNIX format, but sometimes in VMS format, which
3241 * can result in a module being pulled in more than once.
3242 * To prevent this, the key must be stored in UNIX format if the VMS
3243 * name can be translated to UNIX.
3245 if ((unixname = tounixspec(name, NULL)) != NULL) {
3246 unixlen = strlen(unixname);
3252 /* if not VMS or VMS name can not be translated to UNIX, pass it
3255 unixname = (char *) name;
3258 if (PL_op->op_type == OP_REQUIRE) {
3259 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3260 unixname, unixlen, 0);
3262 if (*svp != &PL_sv_undef)
3265 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3266 "Compilation failed in require", unixname);
3270 /* prepare to compile file */
3272 if (path_is_absolute(name)) {
3274 tryrsfp = doopen_pm(name, len);
3276 #ifdef MACOS_TRADITIONAL
3280 MacPerl_CanonDir(name, newname, 1);
3281 if (path_is_absolute(newname)) {
3283 tryrsfp = doopen_pm(newname, strlen(newname));
3288 AV * const ar = GvAVn(PL_incgv);
3294 namesv = newSV_type(SVt_PV);
3295 for (i = 0; i <= AvFILL(ar); i++) {
3296 SV * const dirsv = *av_fetch(ar, i, TRUE);
3298 if (SvTIED_mg((SV*)ar, PERL_MAGIC_tied))
3305 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3306 && !sv_isobject(loader))
3308 loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3311 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3312 PTR2UV(SvRV(dirsv)), name);
3313 tryname = SvPVX_const(namesv);
3324 if (sv_isobject(loader))
3325 count = call_method("INC", G_ARRAY);
3327 count = call_sv(loader, G_ARRAY);
3330 /* Adjust file name if the hook has set an %INC entry */
3331 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3333 tryname = SvPVX_const(*svp);
3342 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3343 && !isGV_with_GP(SvRV(arg))) {
3344 filter_cache = SvRV(arg);
3345 SvREFCNT_inc_simple_void_NN(filter_cache);
3352 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3356 if (isGV_with_GP(arg)) {
3357 IO * const io = GvIO((GV *)arg);
3362 tryrsfp = IoIFP(io);
3363 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3364 PerlIO_close(IoOFP(io));
3375 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3377 SvREFCNT_inc_simple_void_NN(filter_sub);
3380 filter_state = SP[i];
3381 SvREFCNT_inc_simple_void(filter_state);
3385 if (!tryrsfp && (filter_cache || filter_sub)) {
3386 tryrsfp = PerlIO_open(BIT_BUCKET,
3401 filter_has_file = 0;
3403 SvREFCNT_dec(filter_cache);
3404 filter_cache = NULL;
3407 SvREFCNT_dec(filter_state);
3408 filter_state = NULL;
3411 SvREFCNT_dec(filter_sub);
3416 if (!path_is_absolute(name)
3417 #ifdef MACOS_TRADITIONAL
3418 /* We consider paths of the form :a:b ambiguous and interpret them first
3419 as global then as local
3421 || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3428 dir = SvPV_const(dirsv, dirlen);
3434 #ifdef MACOS_TRADITIONAL
3438 MacPerl_CanonDir(name, buf2, 1);
3439 Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3443 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3445 sv_setpv(namesv, unixdir);
3446 sv_catpv(namesv, unixname);
3448 # ifdef __SYMBIAN32__
3449 if (PL_origfilename[0] &&
3450 PL_origfilename[1] == ':' &&
3451 !(dir[0] && dir[1] == ':'))
3452 Perl_sv_setpvf(aTHX_ namesv,
3457 Perl_sv_setpvf(aTHX_ namesv,
3461 /* The equivalent of
3462 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3463 but without the need to parse the format string, or
3464 call strlen on either pointer, and with the correct
3465 allocation up front. */
3467 char *tmp = SvGROW(namesv, dirlen + len + 2);
3469 memcpy(tmp, dir, dirlen);
3472 /* name came from an SV, so it will have a '\0' at the
3473 end that we can copy as part of this memcpy(). */
3474 memcpy(tmp, name, len + 1);
3476 SvCUR_set(namesv, dirlen + len + 1);
3478 /* Don't even actually have to turn SvPOK_on() as we
3479 access it directly with SvPVX() below. */
3484 TAINT_PROPER("require");
3485 tryname = SvPVX_const(namesv);
3486 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3488 if (tryname[0] == '.' && tryname[1] == '/')
3492 else if (errno == EMFILE)
3493 /* no point in trying other paths if out of handles */
3500 SAVECOPFILE_FREE(&PL_compiling);
3501 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3502 SvREFCNT_dec(namesv);
3504 if (PL_op->op_type == OP_REQUIRE) {
3505 const char *msgstr = name;
3506 if(errno == EMFILE) {
3508 = sv_2mortal(Perl_newSVpvf(aTHX_ "%s: %s", msgstr,
3510 msgstr = SvPV_nolen_const(msg);
3512 if (namesv) { /* did we lookup @INC? */
3513 AV * const ar = GvAVn(PL_incgv);
3515 SV * const msg = sv_2mortal(Perl_newSVpvf(aTHX_
3516 "%s in @INC%s%s (@INC contains:",
3518 (instr(msgstr, ".h ")
3519 ? " (change .h to .ph maybe?)" : ""),
3520 (instr(msgstr, ".ph ")
3521 ? " (did you run h2ph?)" : "")
3524 for (i = 0; i <= AvFILL(ar); i++) {
3525 sv_catpvs(msg, " ");
3526 sv_catsv(msg, *av_fetch(ar, i, TRUE));
3528 sv_catpvs(msg, ")");
3529 msgstr = SvPV_nolen_const(msg);
3532 DIE(aTHX_ "Can't locate %s", msgstr);
3538 SETERRNO(0, SS_NORMAL);
3540 /* Assume success here to prevent recursive requirement. */
3541 /* name is never assigned to again, so len is still strlen(name) */
3542 /* Check whether a hook in @INC has already filled %INC */
3544 (void)hv_store(GvHVn(PL_incgv),
3545 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3547 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3549 (void)hv_store(GvHVn(PL_incgv),
3550 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3555 lex_start(NULL, tryrsfp, TRUE);
3559 if (PL_compiling.cop_hints_hash) {
3560 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3561 PL_compiling.cop_hints_hash = NULL;
3564 SAVECOMPILEWARNINGS();
3565 if (PL_dowarn & G_WARN_ALL_ON)
3566 PL_compiling.cop_warnings = pWARN_ALL ;
3567 else if (PL_dowarn & G_WARN_ALL_OFF)
3568 PL_compiling.cop_warnings = pWARN_NONE ;
3570 PL_compiling.cop_warnings = pWARN_STD ;
3572 if (filter_sub || filter_cache) {
3573 SV * const datasv = filter_add(S_run_user_filter, NULL);
3574 IoLINES(datasv) = filter_has_file;
3575 IoTOP_GV(datasv) = (GV *)filter_state;
3576 IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3577 IoFMT_GV(datasv) = (GV *)filter_cache;
3580 /* switch to eval mode */
3581 PUSHBLOCK(cx, CXt_EVAL, SP);
3583 cx->blk_eval.retop = PL_op->op_next;
3585 SAVECOPLINE(&PL_compiling);
3586 CopLINE_set(&PL_compiling, 0);
3590 /* Store and reset encoding. */
3591 encoding = PL_encoding;
3594 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3595 op = DOCATCH(PL_eval_start);
3597 op = PL_op->op_next;
3599 /* Restore encoding. */
3600 PL_encoding = encoding;
3605 /* This is a op added to hold the hints hash for
3606 pp_entereval. The hash can be modified by the code
3607 being eval'ed, so we return a copy instead. */
3613 mXPUSHs((SV*)Perl_hv_copy_hints_hv(aTHX_ (HV*)cSVOP_sv));
3621 register PERL_CONTEXT *cx;
3623 const I32 gimme = GIMME_V;
3624 const I32 was = PL_sub_generation;
3625 char tbuf[TYPE_DIGITS(long) + 12];
3626 char *tmpbuf = tbuf;
3632 HV *saved_hh = NULL;
3633 const char * const fakestr = "_<(eval )";
3634 const int fakelen = 9 + 1;
3636 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3637 saved_hh = (HV*) SvREFCNT_inc(POPs);
3641 TAINT_IF(SvTAINTED(sv));
3642 TAINT_PROPER("eval");
3645 lex_start(sv, NULL, FALSE);
3648 /* switch to eval mode */
3650 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3651 SV * const temp_sv = sv_newmortal();
3652 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3653 (unsigned long)++PL_evalseq,
3654 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3655 tmpbuf = SvPVX(temp_sv);
3656 len = SvCUR(temp_sv);
3659 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3660 SAVECOPFILE_FREE(&PL_compiling);
3661 CopFILE_set(&PL_compiling, tmpbuf+2);
3662 SAVECOPLINE(&PL_compiling);
3663 CopLINE_set(&PL_compiling, 1);
3664 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3665 deleting the eval's FILEGV from the stash before gv_check() runs
3666 (i.e. before run-time proper). To work around the coredump that
3667 ensues, we always turn GvMULTI_on for any globals that were
3668 introduced within evals. See force_ident(). GSAR 96-10-12 */
3669 safestr = savepvn(tmpbuf, len);
3670 SAVEDELETE(PL_defstash, safestr, len);
3672 PL_hints = PL_op->op_targ;
3674 GvHV(PL_hintgv) = saved_hh;
3675 SAVECOMPILEWARNINGS();
3676 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3677 if (PL_compiling.cop_hints_hash) {
3678 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3680 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3681 if (PL_compiling.cop_hints_hash) {
3683 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3684 HINTS_REFCNT_UNLOCK;
3686 /* special case: an eval '' executed within the DB package gets lexically
3687 * placed in the first non-DB CV rather than the current CV - this
3688 * allows the debugger to execute code, find lexicals etc, in the
3689 * scope of the code being debugged. Passing &seq gets find_runcv
3690 * to do the dirty work for us */
3691 runcv = find_runcv(&seq);
3693 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3695 cx->blk_eval.retop = PL_op->op_next;
3697 /* prepare to compile string */
3699 if (PERLDB_LINE && PL_curstash != PL_debstash)
3700 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3702 ok = doeval(gimme, NULL, runcv, seq);
3703 if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3705 /* Copy in anything fake and short. */
3706 my_strlcpy(safestr, fakestr, fakelen);
3708 return ok ? DOCATCH(PL_eval_start) : PL_op->op_next;
3718 register PERL_CONTEXT *cx;
3720 const U8 save_flags = PL_op -> op_flags;
3725 retop = cx->blk_eval.retop;
3728 if (gimme == G_VOID)
3730 else if (gimme == G_SCALAR) {
3733 if (SvFLAGS(TOPs) & SVs_TEMP)
3736 *MARK = sv_mortalcopy(TOPs);
3740 *MARK = &PL_sv_undef;
3745 /* in case LEAVE wipes old return values */
3746 for (mark = newsp + 1; mark <= SP; mark++) {
3747 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3748 *mark = sv_mortalcopy(*mark);
3749 TAINT_NOT; /* Each item is independent */
3753 PL_curpm = newpm; /* Don't pop $1 et al till now */
3756 assert(CvDEPTH(PL_compcv) == 1);
3758 CvDEPTH(PL_compcv) = 0;
3761 if (optype == OP_REQUIRE &&
3762 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3764 /* Unassume the success we assumed earlier. */
3765 SV * const nsv = cx->blk_eval.old_namesv;
3766 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3767 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
3768 /* die_where() did LEAVE, or we won't be here */
3772 if (!(save_flags & OPf_SPECIAL)) {
3780 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3781 close to the related Perl_create_eval_scope. */
3783 Perl_delete_eval_scope(pTHX)
3788 register PERL_CONTEXT *cx;
3795 PERL_UNUSED_VAR(newsp);
3796 PERL_UNUSED_VAR(gimme);
3797 PERL_UNUSED_VAR(optype);
3800 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3801 also needed by Perl_fold_constants. */
3803 Perl_create_eval_scope(pTHX_ U32 flags)
3806 const I32 gimme = GIMME_V;
3811 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3814 PL_in_eval = EVAL_INEVAL;
3815 if (flags & G_KEEPERR)
3816 PL_in_eval |= EVAL_KEEPERR;
3819 if (flags & G_FAKINGEVAL) {
3820 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3828 PERL_CONTEXT * const cx = create_eval_scope(0);
3829 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3830 return DOCATCH(PL_op->op_next);
3839 register PERL_CONTEXT *cx;
3844 PERL_UNUSED_VAR(optype);
3847 if (gimme == G_VOID)
3849 else if (gimme == G_SCALAR) {
3853 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3856 *MARK = sv_mortalcopy(TOPs);
3860 *MARK = &PL_sv_undef;
3865 /* in case LEAVE wipes old return values */
3867 for (mark = newsp + 1; mark <= SP; mark++) {
3868 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3869 *mark = sv_mortalcopy(*mark);
3870 TAINT_NOT; /* Each item is independent */
3874 PL_curpm = newpm; /* Don't pop $1 et al till now */
3884 register PERL_CONTEXT *cx;
3885 const I32 gimme = GIMME_V;
3890 if (PL_op->op_targ == 0) {
3891 SV ** const defsv_p = &GvSV(PL_defgv);
3892 *defsv_p = newSVsv(POPs);
3893 SAVECLEARSV(*defsv_p);
3896 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
3898 PUSHBLOCK(cx, CXt_GIVEN, SP);
3907 register PERL_CONTEXT *cx;
3911 PERL_UNUSED_CONTEXT;
3914 assert(CxTYPE(cx) == CXt_GIVEN);
3919 PL_curpm = newpm; /* pop $1 et al */
3926 /* Helper routines used by pp_smartmatch */
3928 S_make_matcher(pTHX_ REGEXP *re)
3931 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
3933 PERL_ARGS_ASSERT_MAKE_MATCHER;
3935 PM_SETRE(matcher, ReREFCNT_inc(re));
3937 SAVEFREEOP((OP *) matcher);
3944 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
3949 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
3951 PL_op = (OP *) matcher;
3956 return (SvTRUEx(POPs));
3960 S_destroy_matcher(pTHX_ PMOP *matcher)
3964 PERL_ARGS_ASSERT_DESTROY_MATCHER;
3965 PERL_UNUSED_ARG(matcher);
3971 /* Do a smart match */
3974 return do_smartmatch(NULL, NULL);
3977 /* This version of do_smartmatch() implements the
3978 * table of smart matches that is found in perlsyn.
3981 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
3986 SV *e = TOPs; /* e is for 'expression' */
3987 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
3988 SV *This, *Other; /* 'This' (and Other to match) to play with C++ */
3989 REGEXP *this_regex, *other_regex;
3991 # define NOT_EMPTY_PROTO(cv) (!SvPOK(cv) || SvCUR(cv) == 0)
3993 # define SM_REF(type) ( \
3994 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_##type) && (Other = e)) \
3995 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_##type) && (Other = d)))
3997 # define SM_CV_NEP /* Find a code ref without an empty prototype */ \
3998 ((SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_PVCV) \
3999 && NOT_EMPTY_PROTO(This) && (Other = e)) \
4000 || (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_PVCV) \
4001 && NOT_EMPTY_PROTO(This) && (Other = d)))
4003 # define SM_REGEX ( \
4004 (SvROK(d) && (SvTYPE(This = SvRV(d)) == SVt_REGEXP) \
4005 && (this_regex = (REGEXP*) This) \
4008 (SvROK(e) && (SvTYPE(This = SvRV(e)) == SVt_REGEXP) \
4009 && (this_regex = (REGEXP*) This) \
4013 # define SM_OBJECT ( \
4014 (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP)) \
4016 (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) ) \
4018 # define SM_OTHER_REF(type) \
4019 (SvROK(Other) && SvTYPE(SvRV(Other)) == SVt_##type)
4021 # define SM_OTHER_REGEX (SvROK(Other) \
4022 && (SvTYPE(SvRV(Other)) == SVt_REGEXP) \
4023 && (other_regex = (REGEXP*) SvRV(Other)))
4026 # define SM_SEEN_THIS(sv) hv_exists_ent(seen_this, \
4027 sv_2mortal(newSViv(PTR2IV(sv))), 0)
4029 # define SM_SEEN_OTHER(sv) hv_exists_ent(seen_other, \
4030 sv_2mortal(newSViv(PTR2IV(sv))), 0)
4032 tryAMAGICbinSET(smart, 0);
4034 SP -= 2; /* Pop the values */
4036 /* Take care only to invoke mg_get() once for each argument.
4037 * Currently we do this by copying the SV if it's magical. */
4040 d = sv_mortalcopy(d);
4047 e = sv_mortalcopy(e);
4050 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4055 if ( SM_OTHER_REF(PVCV) && NOT_EMPTY_PROTO(SvRV(Other)) )
4057 if (This == SvRV(Other))
4068 c = call_sv(This, G_SCALAR);
4072 else if (SvTEMP(TOPs))
4073 SvREFCNT_inc_void(TOPs);
4078 else if (SM_REF(PVHV)) {
4079 if (SM_OTHER_REF(PVHV)) {
4080 /* Check that the key-sets are identical */
4082 HV *other_hv = (HV *) SvRV(Other);
4084 bool other_tied = FALSE;
4085 U32 this_key_count = 0,
4086 other_key_count = 0;
4088 /* Tied hashes don't know how many keys they have. */
4089 if (SvTIED_mg(This, PERL_MAGIC_tied)) {
4092 else if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied)) {
4093 HV * const temp = other_hv;
4094 other_hv = (HV *) This;
4098 if (SvTIED_mg((SV *) other_hv, PERL_MAGIC_tied))
4101 if (!tied && HvUSEDKEYS((HV *) This) != HvUSEDKEYS(other_hv))
4104 /* The hashes have the same number of keys, so it suffices
4105 to check that one is a subset of the other. */
4106 (void) hv_iterinit((HV *) This);
4107 while ( (he = hv_iternext((HV *) This)) ) {
4109 char * const key = hv_iterkey(he, &key_len);
4113 if(!hv_exists(other_hv, key, key_len)) {
4114 (void) hv_iterinit((HV *) This); /* reset iterator */
4120 (void) hv_iterinit(other_hv);
4121 while ( hv_iternext(other_hv) )
4125 other_key_count = HvUSEDKEYS(other_hv);
4127 if (this_key_count != other_key_count)
4132 else if (SM_OTHER_REF(PVAV)) {
4133 AV * const other_av = (AV *) SvRV(Other);
4134 const I32 other_len = av_len(other_av) + 1;
4137 for (i = 0; i < other_len; ++i) {
4138 SV ** const svp = av_fetch(other_av, i, FALSE);
4142 if (svp) { /* ??? When can this not happen? */
4143 key = SvPV(*svp, key_len);
4144 if (hv_exists((HV *) This, key, key_len))
4150 else if (SM_OTHER_REGEX) {
4151 PMOP * const matcher = make_matcher(other_regex);
4154 (void) hv_iterinit((HV *) This);
4155 while ( (he = hv_iternext((HV *) This)) ) {
4156 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4157 (void) hv_iterinit((HV *) This);
4158 destroy_matcher(matcher);
4162 destroy_matcher(matcher);
4166 if (hv_exists_ent((HV *) This, Other, 0))
4172 else if (SM_REF(PVAV)) {
4173 if (SM_OTHER_REF(PVAV)) {
4174 AV *other_av = (AV *) SvRV(Other);
4175 if (av_len((AV *) This) != av_len(other_av))
4179 const I32 other_len = av_len(other_av);
4181 if (NULL == seen_this) {
4182 seen_this = newHV();
4183 (void) sv_2mortal((SV *) seen_this);
4185 if (NULL == seen_other) {
4186 seen_this = newHV();
4187 (void) sv_2mortal((SV *) seen_other);
4189 for(i = 0; i <= other_len; ++i) {
4190 SV * const * const this_elem = av_fetch((AV *)This, i, FALSE);
4191 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4193 if (!this_elem || !other_elem) {
4194 if (this_elem || other_elem)
4197 else if (SM_SEEN_THIS(*this_elem)
4198 || SM_SEEN_OTHER(*other_elem))
4200 if (*this_elem != *other_elem)
4204 (void)hv_store_ent(seen_this,
4205 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4207 (void)hv_store_ent(seen_other,
4208 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4214 (void) do_smartmatch(seen_this, seen_other);
4224 else if (SM_OTHER_REGEX) {
4225 PMOP * const matcher = make_matcher(other_regex);
4226 const I32 this_len = av_len((AV *) This);
4229 for(i = 0; i <= this_len; ++i) {
4230 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4231 if (svp && matcher_matches_sv(matcher, *svp)) {
4232 destroy_matcher(matcher);
4236 destroy_matcher(matcher);
4239 else if (SvIOK(Other) || SvNOK(Other)) {
4242 for(i = 0; i <= AvFILL((AV *) This); ++i) {
4243 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4250 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4260 else if (SvPOK(Other)) {
4261 const I32 this_len = av_len((AV *) This);
4264 for(i = 0; i <= this_len; ++i) {
4265 SV * const * const svp = av_fetch((AV *)This, i, FALSE);
4280 else if (!SvOK(d) || !SvOK(e)) {
4281 if (!SvOK(d) && !SvOK(e))
4286 else if (SM_REGEX) {
4287 PMOP * const matcher = make_matcher(this_regex);
4290 PUSHs(matcher_matches_sv(matcher, Other)
4293 destroy_matcher(matcher);
4296 else if (SM_REF(PVCV)) {
4298 /* This must be a null-prototyped sub, because we
4299 already checked for the other kind. */
4305 c = call_sv(This, G_SCALAR);
4308 PUSHs(&PL_sv_undef);
4309 else if (SvTEMP(TOPs))
4310 SvREFCNT_inc_void(TOPs);
4312 if (SM_OTHER_REF(PVCV)) {
4313 /* This one has to be null-proto'd too.
4314 Call both of 'em, and compare the results */
4316 c = call_sv(SvRV(Other), G_SCALAR);
4319 PUSHs(&PL_sv_undef);
4320 else if (SvTEMP(TOPs))
4321 SvREFCNT_inc_void(TOPs);
4332 else if ( ((SvIOK(d) || SvNOK(d)) && (This = d) && (Other = e))
4333 || ((SvIOK(e) || SvNOK(e)) && (This = e) && (Other = d)) )
4335 if (SvPOK(Other) && !looks_like_number(Other)) {
4336 /* String comparison */
4341 /* Otherwise, numeric comparison */
4344 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4355 /* As a last resort, use string comparison */
4364 register PERL_CONTEXT *cx;
4365 const I32 gimme = GIMME_V;
4367 /* This is essentially an optimization: if the match
4368 fails, we don't want to push a context and then
4369 pop it again right away, so we skip straight
4370 to the op that follows the leavewhen.
4372 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4373 return cLOGOP->op_other->op_next;
4378 PUSHBLOCK(cx, CXt_WHEN, SP);
4387 register PERL_CONTEXT *cx;
4393 assert(CxTYPE(cx) == CXt_WHEN);
4398 PL_curpm = newpm; /* pop $1 et al */
4408 register PERL_CONTEXT *cx;
4411 cxix = dopoptowhen(cxstack_ix);
4413 DIE(aTHX_ "Can't \"continue\" outside a when block");
4414 if (cxix < cxstack_ix)
4417 /* clear off anything above the scope we're re-entering */
4418 inner = PL_scopestack_ix;
4420 if (PL_scopestack_ix < inner)
4421 leave_scope(PL_scopestack[PL_scopestack_ix]);
4422 PL_curcop = cx->blk_oldcop;
4423 return cx->blk_givwhen.leave_op;
4430 register PERL_CONTEXT *cx;
4433 cxix = dopoptogiven(cxstack_ix);
4435 if (PL_op->op_flags & OPf_SPECIAL)
4436 DIE(aTHX_ "Can't use when() outside a topicalizer");
4438 DIE(aTHX_ "Can't \"break\" outside a given block");
4440 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4441 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4443 if (cxix < cxstack_ix)
4446 /* clear off anything above the scope we're re-entering */
4447 inner = PL_scopestack_ix;
4449 if (PL_scopestack_ix < inner)
4450 leave_scope(PL_scopestack[PL_scopestack_ix]);
4451 PL_curcop = cx->blk_oldcop;
4454 return CX_LOOP_NEXTOP_GET(cx);
4456 return cx->blk_givwhen.leave_op;
4460 S_doparseform(pTHX_ SV *sv)
4463 register char *s = SvPV_force(sv, len);
4464 register char * const send = s + len;
4465 register char *base = NULL;
4466 register I32 skipspaces = 0;
4467 bool noblank = FALSE;
4468 bool repeat = FALSE;
4469 bool postspace = FALSE;
4475 bool unchopnum = FALSE;
4476 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4478 PERL_ARGS_ASSERT_DOPARSEFORM;
4481 Perl_croak(aTHX_ "Null picture in formline");
4483 /* estimate the buffer size needed */
4484 for (base = s; s <= send; s++) {
4485 if (*s == '\n' || *s == '@' || *s == '^')
4491 Newx(fops, maxops, U32);
4496 *fpc++ = FF_LINEMARK;
4497 noblank = repeat = FALSE;
4515 case ' ': case '\t':
4522 } /* else FALL THROUGH */
4530 *fpc++ = FF_LITERAL;
4538 *fpc++ = (U16)skipspaces;
4542 *fpc++ = FF_NEWLINE;
4546 arg = fpc - linepc + 1;
4553 *fpc++ = FF_LINEMARK;
4554 noblank = repeat = FALSE;
4563 ischop = s[-1] == '^';
4569 arg = (s - base) - 1;
4571 *fpc++ = FF_LITERAL;
4579 *fpc++ = 2; /* skip the @* or ^* */
4581 *fpc++ = FF_LINESNGL;
4584 *fpc++ = FF_LINEGLOB;
4586 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4587 arg = ischop ? 512 : 0;
4592 const char * const f = ++s;
4595 arg |= 256 + (s - f);
4597 *fpc++ = s - base; /* fieldsize for FETCH */
4598 *fpc++ = FF_DECIMAL;
4600 unchopnum |= ! ischop;
4602 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4603 arg = ischop ? 512 : 0;
4605 s++; /* skip the '0' first */
4609 const char * const f = ++s;
4612 arg |= 256 + (s - f);
4614 *fpc++ = s - base; /* fieldsize for FETCH */
4615 *fpc++ = FF_0DECIMAL;
4617 unchopnum |= ! ischop;
4621 bool ismore = FALSE;
4624 while (*++s == '>') ;
4625 prespace = FF_SPACE;
4627 else if (*s == '|') {
4628 while (*++s == '|') ;
4629 prespace = FF_HALFSPACE;
4634 while (*++s == '<') ;
4637 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4641 *fpc++ = s - base; /* fieldsize for FETCH */
4643 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4646 *fpc++ = (U16)prespace;
4660 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4662 { /* need to jump to the next word */
4664 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4665 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4666 s = SvPVX(sv) + SvCUR(sv) + z;
4668 Copy(fops, s, arg, U32);
4670 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4673 if (unchopnum && repeat)
4674 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4680 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4682 /* Can value be printed in fldsize chars, using %*.*f ? */
4686 int intsize = fldsize - (value < 0 ? 1 : 0);
4693 while (intsize--) pwr *= 10.0;
4694 while (frcsize--) eps /= 10.0;
4697 if (value + eps >= pwr)
4700 if (value - eps <= -pwr)
4707 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4710 SV * const datasv = FILTER_DATA(idx);
4711 const int filter_has_file = IoLINES(datasv);
4712 SV * const filter_state = (SV *)IoTOP_GV(datasv);
4713 SV * const filter_sub = (SV *)IoBOTTOM_GV(datasv);
4717 const char *got_p = NULL;
4718 const char *prune_from = NULL;
4719 bool read_from_cache = FALSE;
4722 PERL_ARGS_ASSERT_RUN_USER_FILTER;
4724 assert(maxlen >= 0);
4727 /* I was having segfault trouble under Linux 2.2.5 after a
4728 parse error occured. (Had to hack around it with a test
4729 for PL_parser->error_count == 0.) Solaris doesn't segfault --
4730 not sure where the trouble is yet. XXX */
4732 if (IoFMT_GV(datasv)) {
4733 SV *const cache = (SV *)IoFMT_GV(datasv);
4736 const char *cache_p = SvPV(cache, cache_len);
4740 /* Running in block mode and we have some cached data already.
4742 if (cache_len >= umaxlen) {
4743 /* In fact, so much data we don't even need to call
4748 const char *const first_nl =
4749 (const char *)memchr(cache_p, '\n', cache_len);
4751 take = first_nl + 1 - cache_p;
4755 sv_catpvn(buf_sv, cache_p, take);
4756 sv_chop(cache, cache_p + take);
4757 /* Definately not EOF */
4761 sv_catsv(buf_sv, cache);
4763 umaxlen -= cache_len;
4766 read_from_cache = TRUE;
4770 /* Filter API says that the filter appends to the contents of the buffer.
4771 Usually the buffer is "", so the details don't matter. But if it's not,
4772 then clearly what it contains is already filtered by this filter, so we
4773 don't want to pass it in a second time.
4774 I'm going to use a mortal in case the upstream filter croaks. */
4775 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
4776 ? sv_newmortal() : buf_sv;
4777 SvUPGRADE(upstream, SVt_PV);
4779 if (filter_has_file) {
4780 status = FILTER_READ(idx+1, upstream, 0);
4783 if (filter_sub && status >= 0) {
4796 PUSHs(filter_state);
4799 count = call_sv(filter_sub, G_SCALAR);
4814 if(SvOK(upstream)) {
4815 got_p = SvPV(upstream, got_len);
4817 if (got_len > umaxlen) {
4818 prune_from = got_p + umaxlen;
4821 const char *const first_nl =
4822 (const char *)memchr(got_p, '\n', got_len);
4823 if (first_nl && first_nl + 1 < got_p + got_len) {
4824 /* There's a second line here... */
4825 prune_from = first_nl + 1;
4830 /* Oh. Too long. Stuff some in our cache. */
4831 STRLEN cached_len = got_p + got_len - prune_from;
4832 SV *cache = (SV *)IoFMT_GV(datasv);
4835 IoFMT_GV(datasv) = (GV*) (cache = newSV(got_len - umaxlen));
4836 } else if (SvOK(cache)) {
4837 /* Cache should be empty. */
4838 assert(!SvCUR(cache));
4841 sv_setpvn(cache, prune_from, cached_len);
4842 /* If you ask for block mode, you may well split UTF-8 characters.
4843 "If it breaks, you get to keep both parts"
4844 (Your code is broken if you don't put them back together again
4845 before something notices.) */
4846 if (SvUTF8(upstream)) {
4849 SvCUR_set(upstream, got_len - cached_len);
4850 /* Can't yet be EOF */
4855 /* If they are at EOF but buf_sv has something in it, then they may never
4856 have touched the SV upstream, so it may be undefined. If we naively
4857 concatenate it then we get a warning about use of uninitialised value.
4859 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
4860 sv_catsv(buf_sv, upstream);
4864 IoLINES(datasv) = 0;
4865 SvREFCNT_dec(IoFMT_GV(datasv));
4867 SvREFCNT_dec(filter_state);
4868 IoTOP_GV(datasv) = NULL;
4871 SvREFCNT_dec(filter_sub);
4872 IoBOTTOM_GV(datasv) = NULL;
4874 filter_del(S_run_user_filter);
4876 if (status == 0 && read_from_cache) {
4877 /* If we read some data from the cache (and by getting here it implies
4878 that we emptied the cache) then we aren't yet at EOF, and mustn't
4879 report that to our caller. */
4885 /* perhaps someone can come up with a better name for
4886 this? it is not really "absolute", per se ... */
4888 S_path_is_absolute(const char *name)
4890 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
4892 if (PERL_FILE_IS_ABSOLUTE(name)
4893 #ifdef MACOS_TRADITIONAL
4896 || (*name == '.' && (name[1] == '/' ||
4897 (name[1] == '.' && name[2] == '/')))
4909 * c-indentation-style: bsd
4911 * indent-tabs-mode: t
4914 * ex: set ts=8 sts=4 sw=4 noet: