3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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.
19 * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains control-oriented pp ("push/pop") functions that
23 * execute the opcodes that make up a perl program. A typical pp function
24 * expects to find its arguments on the stack, and usually pushes its
25 * results onto the stack, hence the 'pp' terminology. Each OP structure
26 * contains a pointer to the relevant pp_foo() function.
28 * Control-oriented means things like pp_enteriter() and pp_next(), which
29 * alter the flow of control of the program.
34 #define PERL_IN_PP_CTL_C
38 #define WORD_ALIGN sizeof(U32)
41 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
43 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
52 cxix = dopoptosub(cxstack_ix);
56 switch (cxstack[cxix].blk_gimme) {
69 /* XXXX Should store the old value to allow for tie/overload - and
70 restore in regcomp, where marked with XXXX. */
80 register PMOP *pm = (PMOP*)cLOGOP->op_other;
84 /* prevent recompiling under /o and ithreads. */
85 #if defined(USE_ITHREADS)
86 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
87 if (PL_op->op_flags & OPf_STACKED) {
96 if (PL_op->op_flags & OPf_STACKED) {
97 /* multiple args; concatentate them */
99 tmpstr = PAD_SV(ARGTARG);
100 sv_setpvs(tmpstr, "");
101 while (++MARK <= SP) {
102 if (PL_amagic_generation) {
104 if ((SvAMAGIC(tmpstr) || SvAMAGIC(*MARK)) &&
105 (sv = amagic_call(tmpstr, *MARK, concat_amg, AMGf_assign)))
107 sv_setsv(tmpstr, sv);
111 sv_catsv(tmpstr, *MARK);
120 SV * const sv = SvRV(tmpstr);
121 if (SvTYPE(sv) == SVt_REGEXP)
125 re = reg_temp_copy(re);
126 ReREFCNT_dec(PM_GETRE(pm));
131 const char *t = SvOK(tmpstr) ? SvPV_const(tmpstr, len) : "";
133 assert (re != (REGEXP*) &PL_sv_undef);
135 /* Check against the last compiled regexp. */
136 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
137 memNE(RX_PRECOMP(re), t, len))
139 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
140 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
144 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
146 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
148 } else if (PL_curcop->cop_hints_hash) {
149 SV *ptr = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, 0,
151 if (ptr && SvIOK(ptr) && SvIV(ptr))
152 eng = INT2PTR(regexp_engine*,SvIV(ptr));
155 if (PL_op->op_flags & OPf_SPECIAL)
156 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
158 if (DO_UTF8(tmpstr)) {
159 assert (SvUTF8(tmpstr));
160 } else if (SvUTF8(tmpstr)) {
161 /* Not doing UTF-8, despite what the SV says. Is this only if
162 we're trapped in use 'bytes'? */
163 /* Make a copy of the octet sequence, but without the flag on,
164 as the compiler now honours the SvUTF8 flag on tmpstr. */
166 const char *const p = SvPV(tmpstr, len);
167 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
171 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
173 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
175 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
176 inside tie/overload accessors. */
182 #ifndef INCOMPLETE_TAINTS
185 RX_EXTFLAGS(re) |= RXf_TAINTED;
187 RX_EXTFLAGS(re) &= ~RXf_TAINTED;
191 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
195 #if !defined(USE_ITHREADS)
196 /* can't change the optree at runtime either */
197 /* PMf_KEEP is handled differently under threads to avoid these problems */
198 if (pm->op_pmflags & PMf_KEEP) {
199 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
200 cLOGOP->op_first->op_next = PL_op->op_next;
210 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
211 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
212 register SV * const dstr = cx->sb_dstr;
213 register char *s = cx->sb_s;
214 register char *m = cx->sb_m;
215 char *orig = cx->sb_orig;
216 register REGEXP * const rx = cx->sb_rx;
218 REGEXP *old = PM_GETRE(pm);
222 PM_SETRE(pm,ReREFCNT_inc(rx));
225 rxres_restore(&cx->sb_rxres, rx);
226 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
228 if (cx->sb_iters++) {
229 const I32 saviters = cx->sb_iters;
230 if (cx->sb_iters > cx->sb_maxiters)
231 DIE(aTHX_ "Substitution loop");
233 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
234 cx->sb_rxtainted |= 2;
235 sv_catsv(dstr, POPs);
238 if (CxONCE(cx) || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
239 s == m, cx->sb_targ, NULL,
240 ((cx->sb_rflags & REXEC_COPY_STR)
241 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
242 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
244 SV * const targ = cx->sb_targ;
246 assert(cx->sb_strend >= s);
247 if(cx->sb_strend > s) {
248 if (DO_UTF8(dstr) && !SvUTF8(targ))
249 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
251 sv_catpvn(dstr, s, cx->sb_strend - s);
253 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
255 #ifdef PERL_OLD_COPY_ON_WRITE
257 sv_force_normal_flags(targ, SV_COW_DROP_PV);
263 SvPV_set(targ, SvPVX(dstr));
264 SvCUR_set(targ, SvCUR(dstr));
265 SvLEN_set(targ, SvLEN(dstr));
268 SvPV_set(dstr, NULL);
270 TAINT_IF(cx->sb_rxtainted & 1);
271 mPUSHi(saviters - 1);
273 (void)SvPOK_only_UTF8(targ);
274 TAINT_IF(cx->sb_rxtainted);
278 LEAVE_SCOPE(cx->sb_oldsave);
280 RETURNOP(pm->op_next);
282 cx->sb_iters = saviters;
284 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
287 cx->sb_orig = orig = RX_SUBBEG(rx);
289 cx->sb_strend = s + (cx->sb_strend - m);
291 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
293 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
294 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
296 sv_catpvn(dstr, s, m-s);
298 cx->sb_s = RX_OFFS(rx)[0].end + orig;
299 { /* Update the pos() information. */
300 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,
311 mg->mg_len = m - orig;
314 (void)ReREFCNT_inc(rx);
315 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
316 rxres_save(&cx->sb_rxres, rx);
317 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
321 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
326 PERL_ARGS_ASSERT_RXRES_SAVE;
329 if (!p || p[1] < RX_NPARENS(rx)) {
330 #ifdef PERL_OLD_COPY_ON_WRITE
331 i = 7 + RX_NPARENS(rx) * 2;
333 i = 6 + RX_NPARENS(rx) * 2;
342 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
343 RX_MATCH_COPIED_off(rx);
345 #ifdef PERL_OLD_COPY_ON_WRITE
346 *p++ = PTR2UV(RX_SAVED_COPY(rx));
347 RX_SAVED_COPY(rx) = NULL;
350 *p++ = RX_NPARENS(rx);
352 *p++ = PTR2UV(RX_SUBBEG(rx));
353 *p++ = (UV)RX_SUBLEN(rx);
354 for (i = 0; i <= RX_NPARENS(rx); ++i) {
355 *p++ = (UV)RX_OFFS(rx)[i].start;
356 *p++ = (UV)RX_OFFS(rx)[i].end;
361 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
366 PERL_ARGS_ASSERT_RXRES_RESTORE;
369 RX_MATCH_COPY_FREE(rx);
370 RX_MATCH_COPIED_set(rx, *p);
373 #ifdef PERL_OLD_COPY_ON_WRITE
374 if (RX_SAVED_COPY(rx))
375 SvREFCNT_dec (RX_SAVED_COPY(rx));
376 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
380 RX_NPARENS(rx) = *p++;
382 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
383 RX_SUBLEN(rx) = (I32)(*p++);
384 for (i = 0; i <= RX_NPARENS(rx); ++i) {
385 RX_OFFS(rx)[i].start = (I32)(*p++);
386 RX_OFFS(rx)[i].end = (I32)(*p++);
391 S_rxres_free(pTHX_ void **rsp)
393 UV * const p = (UV*)*rsp;
395 PERL_ARGS_ASSERT_RXRES_FREE;
400 void *tmp = INT2PTR(char*,*p);
403 PoisonFree(*p, 1, sizeof(*p));
405 Safefree(INT2PTR(char*,*p));
407 #ifdef PERL_OLD_COPY_ON_WRITE
409 SvREFCNT_dec (INT2PTR(SV*,p[1]));
419 dVAR; dSP; dMARK; dORIGMARK;
420 register SV * const tmpForm = *++MARK;
425 register SV *sv = NULL;
426 const char *item = NULL;
430 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
431 const char *chophere = NULL;
432 char *linemark = NULL;
434 bool gotsome = FALSE;
436 const STRLEN fudge = SvPOK(tmpForm)
437 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
438 bool item_is_utf8 = FALSE;
439 bool targ_is_utf8 = FALSE;
441 OP * parseres = NULL;
444 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
445 if (SvREADONLY(tmpForm)) {
446 SvREADONLY_off(tmpForm);
447 parseres = doparseform(tmpForm);
448 SvREADONLY_on(tmpForm);
451 parseres = doparseform(tmpForm);
455 SvPV_force(PL_formtarget, len);
456 if (DO_UTF8(PL_formtarget))
458 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
460 f = SvPV_const(tmpForm, len);
461 /* need to jump to the next word */
462 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
466 const char *name = "???";
469 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
470 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
471 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
472 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
473 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
475 case FF_CHECKNL: name = "CHECKNL"; break;
476 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
477 case FF_SPACE: name = "SPACE"; break;
478 case FF_HALFSPACE: name = "HALFSPACE"; break;
479 case FF_ITEM: name = "ITEM"; break;
480 case FF_CHOP: name = "CHOP"; break;
481 case FF_LINEGLOB: name = "LINEGLOB"; break;
482 case FF_NEWLINE: name = "NEWLINE"; break;
483 case FF_MORE: name = "MORE"; break;
484 case FF_LINEMARK: name = "LINEMARK"; break;
485 case FF_END: name = "END"; break;
486 case FF_0DECIMAL: name = "0DECIMAL"; break;
487 case FF_LINESNGL: name = "LINESNGL"; break;
490 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
492 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
503 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
504 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
506 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
507 t = SvEND(PL_formtarget);
511 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
512 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
514 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC, fudge + 1);
515 t = SvEND(PL_formtarget);
535 if (ckWARN(WARN_SYNTAX))
536 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
543 const char *s = item = SvPV_const(sv, len);
546 itemsize = sv_len_utf8(sv);
547 if (itemsize != (I32)len) {
549 if (itemsize > fieldsize) {
550 itemsize = fieldsize;
551 itembytes = itemsize;
552 sv_pos_u2b(sv, &itembytes, 0);
556 send = chophere = s + itembytes;
566 sv_pos_b2u(sv, &itemsize);
570 item_is_utf8 = FALSE;
571 if (itemsize > fieldsize)
572 itemsize = fieldsize;
573 send = chophere = s + itemsize;
587 const char *s = item = SvPV_const(sv, len);
590 itemsize = sv_len_utf8(sv);
591 if (itemsize != (I32)len) {
593 if (itemsize <= fieldsize) {
594 const char *send = chophere = s + itemsize;
607 itemsize = fieldsize;
608 itembytes = itemsize;
609 sv_pos_u2b(sv, &itembytes, 0);
610 send = chophere = s + itembytes;
611 while (s < send || (s == send && isSPACE(*s))) {
621 if (strchr(PL_chopset, *s))
626 itemsize = chophere - item;
627 sv_pos_b2u(sv, &itemsize);
633 item_is_utf8 = FALSE;
634 if (itemsize <= fieldsize) {
635 const char *const send = chophere = s + itemsize;
648 itemsize = fieldsize;
649 send = chophere = s + itemsize;
650 while (s < send || (s == send && isSPACE(*s))) {
660 if (strchr(PL_chopset, *s))
665 itemsize = chophere - item;
671 arg = fieldsize - itemsize;
680 arg = fieldsize - itemsize;
691 const char *s = item;
695 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
697 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC,
699 t = SvEND(PL_formtarget);
703 if (UTF8_IS_CONTINUED(*s)) {
704 STRLEN skip = UTF8SKIP(s);
721 if ( !((*t++ = *s++) & ~31) )
727 if (targ_is_utf8 && !item_is_utf8) {
728 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
730 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
731 for (; t < SvEND(PL_formtarget); t++) {
744 const int ch = *t++ = *s++;
747 if ( !((*t++ = *s++) & ~31) )
756 const char *s = chophere;
770 const bool oneline = fpc[-1] == FF_LINESNGL;
771 const char *s = item = SvPV_const(sv, len);
772 item_is_utf8 = DO_UTF8(sv);
775 STRLEN to_copy = itemsize;
776 const char *const send = s + len;
777 const U8 *source = (const U8 *) s;
781 chophere = s + itemsize;
785 to_copy = s - SvPVX_const(sv) - 1;
797 if (targ_is_utf8 && !item_is_utf8) {
798 source = tmp = bytes_to_utf8(source, &to_copy);
799 SvCUR_set(PL_formtarget,
800 t - SvPVX_const(PL_formtarget));
802 if (item_is_utf8 && !targ_is_utf8) {
803 /* Upgrade targ to UTF8, and then we reduce it to
804 a problem we have a simple solution for. */
805 SvCUR_set(PL_formtarget,
806 t - SvPVX_const(PL_formtarget));
808 /* Don't need get magic. */
809 sv_utf8_upgrade_nomg(PL_formtarget);
811 SvCUR_set(PL_formtarget,
812 t - SvPVX_const(PL_formtarget));
815 /* Easy. They agree. */
816 assert (item_is_utf8 == targ_is_utf8);
818 SvGROW(PL_formtarget,
819 SvCUR(PL_formtarget) + to_copy + fudge + 1);
820 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
822 Copy(source, t, to_copy, char);
824 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
826 if (SvGMAGICAL(sv)) {
827 /* Mustn't call sv_pos_b2u() as it does a second
828 mg_get(). Is this a bug? Do we need a _flags()
830 itemsize = utf8_length(source, source + itemsize);
832 sv_pos_b2u(sv, &itemsize);
844 #if defined(USE_LONG_DOUBLE)
847 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
851 "%#0*.*f" : "%0*.*f");
856 #if defined(USE_LONG_DOUBLE)
858 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
861 ((arg & 256) ? "%#*.*f" : "%*.*f");
864 /* If the field is marked with ^ and the value is undefined,
866 if ((arg & 512) && !SvOK(sv)) {
874 /* overflow evidence */
875 if (num_overflow(value, fieldsize, arg)) {
881 /* Formats aren't yet marked for locales, so assume "yes". */
883 STORE_NUMERIC_STANDARD_SET_LOCAL();
884 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
885 RESTORE_NUMERIC_STANDARD();
892 while (t-- > linemark && *t == ' ') ;
900 if (arg) { /* repeat until fields exhausted? */
902 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
903 lines += FmLINES(PL_formtarget);
906 if (strnEQ(linemark, linemark - arg, arg))
907 DIE(aTHX_ "Runaway format");
910 SvUTF8_on(PL_formtarget);
911 FmLINES(PL_formtarget) = lines;
913 RETURNOP(cLISTOP->op_first);
924 const char *s = chophere;
925 const char *send = item + len;
927 while (isSPACE(*s) && (s < send))
932 arg = fieldsize - itemsize;
939 if (strnEQ(s1," ",3)) {
940 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
951 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
953 SvUTF8_on(PL_formtarget);
954 FmLINES(PL_formtarget) += lines;
966 if (PL_stack_base + *PL_markstack_ptr == SP) {
968 if (GIMME_V == G_SCALAR)
970 RETURNOP(PL_op->op_next->op_next);
972 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
973 pp_pushmark(); /* push dst */
974 pp_pushmark(); /* push src */
975 ENTER; /* enter outer scope */
978 if (PL_op->op_private & OPpGREP_LEX)
979 SAVESPTR(PAD_SVl(PL_op->op_targ));
982 ENTER; /* enter inner scope */
985 src = PL_stack_base[*PL_markstack_ptr];
987 if (PL_op->op_private & OPpGREP_LEX)
988 PAD_SVl(PL_op->op_targ) = src;
993 if (PL_op->op_type == OP_MAPSTART)
994 pp_pushmark(); /* push top */
995 return ((LOGOP*)PL_op->op_next)->op_other;
1001 const I32 gimme = GIMME_V;
1002 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1008 /* first, move source pointer to the next item in the source list */
1009 ++PL_markstack_ptr[-1];
1011 /* if there are new items, push them into the destination list */
1012 if (items && gimme != G_VOID) {
1013 /* might need to make room back there first */
1014 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1015 /* XXX this implementation is very pessimal because the stack
1016 * is repeatedly extended for every set of items. Is possible
1017 * to do this without any stack extension or copying at all
1018 * by maintaining a separate list over which the map iterates
1019 * (like foreach does). --gsar */
1021 /* everything in the stack after the destination list moves
1022 * towards the end the stack by the amount of room needed */
1023 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1025 /* items to shift up (accounting for the moved source pointer) */
1026 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1028 /* This optimization is by Ben Tilly and it does
1029 * things differently from what Sarathy (gsar)
1030 * is describing. The downside of this optimization is
1031 * that leaves "holes" (uninitialized and hopefully unused areas)
1032 * to the Perl stack, but on the other hand this
1033 * shouldn't be a problem. If Sarathy's idea gets
1034 * implemented, this optimization should become
1035 * irrelevant. --jhi */
1037 shift = count; /* Avoid shifting too often --Ben Tilly */
1041 dst = (SP += shift);
1042 PL_markstack_ptr[-1] += shift;
1043 *PL_markstack_ptr += shift;
1047 /* copy the new items down to the destination list */
1048 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1049 if (gimme == G_ARRAY) {
1051 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1054 /* scalar context: we don't care about which values map returns
1055 * (we use undef here). And so we certainly don't want to do mortal
1056 * copies of meaningless values. */
1057 while (items-- > 0) {
1059 *dst-- = &PL_sv_undef;
1063 LEAVE; /* exit inner scope */
1066 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1068 (void)POPMARK; /* pop top */
1069 LEAVE; /* exit outer scope */
1070 (void)POPMARK; /* pop src */
1071 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1072 (void)POPMARK; /* pop dst */
1073 SP = PL_stack_base + POPMARK; /* pop original mark */
1074 if (gimme == G_SCALAR) {
1075 if (PL_op->op_private & OPpGREP_LEX) {
1076 SV* sv = sv_newmortal();
1077 sv_setiv(sv, items);
1085 else if (gimme == G_ARRAY)
1092 ENTER; /* enter inner scope */
1095 /* set $_ to the new source item */
1096 src = PL_stack_base[PL_markstack_ptr[-1]];
1098 if (PL_op->op_private & OPpGREP_LEX)
1099 PAD_SVl(PL_op->op_targ) = src;
1103 RETURNOP(cLOGOP->op_other);
1112 if (GIMME == G_ARRAY)
1114 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1115 return cLOGOP->op_other;
1125 if (GIMME == G_ARRAY) {
1126 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1130 SV * const targ = PAD_SV(PL_op->op_targ);
1133 if (PL_op->op_private & OPpFLIP_LINENUM) {
1134 if (GvIO(PL_last_in_gv)) {
1135 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1138 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1140 flip = SvIV(sv) == SvIV(GvSV(gv));
1146 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1147 if (PL_op->op_flags & OPf_SPECIAL) {
1155 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1158 sv_setpvs(TARG, "");
1164 /* This code tries to decide if "$left .. $right" should use the
1165 magical string increment, or if the range is numeric (we make
1166 an exception for .."0" [#18165]). AMS 20021031. */
1168 #define RANGE_IS_NUMERIC(left,right) ( \
1169 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1170 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1171 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1172 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1173 && (!SvOK(right) || looks_like_number(right))))
1179 if (GIMME == G_ARRAY) {
1185 if (RANGE_IS_NUMERIC(left,right)) {
1188 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1189 (SvOK(right) && SvNV(right) > IV_MAX))
1190 DIE(aTHX_ "Range iterator outside integer range");
1201 SV * const sv = sv_2mortal(newSViv(i++));
1206 SV * const final = sv_mortalcopy(right);
1208 const char * const tmps = SvPV_const(final, len);
1210 SV *sv = sv_mortalcopy(left);
1211 SvPV_force_nolen(sv);
1212 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1214 if (strEQ(SvPVX_const(sv),tmps))
1216 sv = sv_2mortal(newSVsv(sv));
1223 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1227 if (PL_op->op_private & OPpFLIP_LINENUM) {
1228 if (GvIO(PL_last_in_gv)) {
1229 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1232 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1233 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1241 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1242 sv_catpvs(targ, "E0");
1252 static const char * const context_name[] = {
1254 NULL, /* CXt_WHEN never actually needs "block" */
1255 NULL, /* CXt_BLOCK never actually needs "block" */
1256 NULL, /* CXt_GIVEN never actually needs "block" */
1257 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1258 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1259 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1260 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1268 S_dopoptolabel(pTHX_ const char *label)
1273 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1275 for (i = cxstack_ix; i >= 0; i--) {
1276 register const PERL_CONTEXT * const cx = &cxstack[i];
1277 switch (CxTYPE(cx)) {
1283 if (ckWARN(WARN_EXITING))
1284 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1285 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1286 if (CxTYPE(cx) == CXt_NULL)
1289 case CXt_LOOP_LAZYIV:
1290 case CXt_LOOP_LAZYSV:
1292 case CXt_LOOP_PLAIN:
1293 if ( !CxLABEL(cx) || strNE(label, CxLABEL(cx)) ) {
1294 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1295 (long)i, CxLABEL(cx)));
1298 DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1308 Perl_dowantarray(pTHX)
1311 const I32 gimme = block_gimme();
1312 return (gimme == G_VOID) ? G_SCALAR : gimme;
1316 Perl_block_gimme(pTHX)
1319 const I32 cxix = dopoptosub(cxstack_ix);
1323 switch (cxstack[cxix].blk_gimme) {
1331 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1338 Perl_is_lvalue_sub(pTHX)
1341 const I32 cxix = dopoptosub(cxstack_ix);
1342 assert(cxix >= 0); /* We should only be called from inside subs */
1344 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1345 return CxLVAL(cxstack + cxix);
1351 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1356 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1358 for (i = startingblock; i >= 0; i--) {
1359 register const PERL_CONTEXT * const cx = &cxstk[i];
1360 switch (CxTYPE(cx)) {
1366 DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1374 S_dopoptoeval(pTHX_ I32 startingblock)
1378 for (i = startingblock; i >= 0; i--) {
1379 register const PERL_CONTEXT *cx = &cxstack[i];
1380 switch (CxTYPE(cx)) {
1384 DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1392 S_dopoptoloop(pTHX_ I32 startingblock)
1396 for (i = startingblock; i >= 0; i--) {
1397 register const PERL_CONTEXT * const cx = &cxstack[i];
1398 switch (CxTYPE(cx)) {
1404 if (ckWARN(WARN_EXITING))
1405 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1406 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1407 if ((CxTYPE(cx)) == CXt_NULL)
1410 case CXt_LOOP_LAZYIV:
1411 case CXt_LOOP_LAZYSV:
1413 case CXt_LOOP_PLAIN:
1414 DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1422 S_dopoptogiven(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 given #%ld)\n", (long)i));
1434 case CXt_LOOP_PLAIN:
1435 assert(!CxFOREACHDEF(cx));
1437 case CXt_LOOP_LAZYIV:
1438 case CXt_LOOP_LAZYSV:
1440 if (CxFOREACHDEF(cx)) {
1441 DEBUG_l( Perl_deb(aTHX_ "(Found foreach #%ld)\n", (long)i));
1450 S_dopoptowhen(pTHX_ I32 startingblock)
1454 for (i = startingblock; i >= 0; i--) {
1455 register const PERL_CONTEXT *cx = &cxstack[i];
1456 switch (CxTYPE(cx)) {
1460 DEBUG_l( Perl_deb(aTHX_ "(Found when #%ld)\n", (long)i));
1468 Perl_dounwind(pTHX_ I32 cxix)
1473 while (cxstack_ix > cxix) {
1475 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1476 DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1477 (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1478 /* Note: we don't need to restore the base context info till the end. */
1479 switch (CxTYPE(cx)) {
1482 continue; /* not break */
1490 case CXt_LOOP_LAZYIV:
1491 case CXt_LOOP_LAZYSV:
1493 case CXt_LOOP_PLAIN:
1504 PERL_UNUSED_VAR(optype);
1508 Perl_qerror(pTHX_ SV *err)
1512 PERL_ARGS_ASSERT_QERROR;
1515 sv_catsv(ERRSV, err);
1517 sv_catsv(PL_errors, err);
1519 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1521 ++PL_parser->error_count;
1525 Perl_die_where(pTHX_ const char *message, STRLEN msglen)
1534 if (PL_in_eval & EVAL_KEEPERR) {
1535 static const char prefix[] = "\t(in cleanup) ";
1536 SV * const err = ERRSV;
1537 const char *e = NULL;
1540 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1542 e = SvPV_const(err, len);
1544 if (*e != *message || strNE(e,message))
1548 SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1549 sv_catpvn(err, prefix, sizeof(prefix)-1);
1550 sv_catpvn(err, message, msglen);
1551 if (ckWARN(WARN_MISC)) {
1552 const STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1553 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s",
1554 SvPVX_const(err)+start);
1559 sv_setpvn(ERRSV, message, msglen);
1563 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1564 && PL_curstackinfo->si_prev)
1572 register PERL_CONTEXT *cx;
1575 if (cxix < cxstack_ix)
1578 POPBLOCK(cx,PL_curpm);
1579 if (CxTYPE(cx) != CXt_EVAL) {
1581 message = SvPVx_const(ERRSV, msglen);
1582 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1583 PerlIO_write(Perl_error_log, message, msglen);
1588 if (gimme == G_SCALAR)
1589 *++newsp = &PL_sv_undef;
1590 PL_stack_sp = newsp;
1594 /* LEAVE could clobber PL_curcop (see save_re_context())
1595 * XXX it might be better to find a way to avoid messing with
1596 * PL_curcop in save_re_context() instead, but this is a more
1597 * minimal fix --GSAR */
1598 PL_curcop = cx->blk_oldcop;
1600 if (optype == OP_REQUIRE) {
1601 const char* const msg = SvPVx_nolen_const(ERRSV);
1602 SV * const nsv = cx->blk_eval.old_namesv;
1603 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1605 DIE(aTHX_ "%sCompilation failed in require",
1606 *msg ? msg : "Unknown error\n");
1608 assert(CxTYPE(cx) == CXt_EVAL);
1609 return cx->blk_eval.retop;
1613 message = SvPVx_const(ERRSV, msglen);
1615 write_to_stderr(message, msglen);
1623 dVAR; dSP; dPOPTOPssrl;
1624 if (SvTRUE(left) != SvTRUE(right))
1634 register I32 cxix = dopoptosub(cxstack_ix);
1635 register const PERL_CONTEXT *cx;
1636 register const PERL_CONTEXT *ccstack = cxstack;
1637 const PERL_SI *top_si = PL_curstackinfo;
1639 const char *stashname;
1646 /* we may be in a higher stacklevel, so dig down deeper */
1647 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1648 top_si = top_si->si_prev;
1649 ccstack = top_si->si_cxstack;
1650 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1653 if (GIMME != G_ARRAY) {
1659 /* caller() should not report the automatic calls to &DB::sub */
1660 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1661 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1665 cxix = dopoptosub_at(ccstack, cxix - 1);
1668 cx = &ccstack[cxix];
1669 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1670 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1671 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1672 field below is defined for any cx. */
1673 /* caller() should not report the automatic calls to &DB::sub */
1674 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1675 cx = &ccstack[dbcxix];
1678 stashname = CopSTASHPV(cx->blk_oldcop);
1679 if (GIMME != G_ARRAY) {
1682 PUSHs(&PL_sv_undef);
1685 sv_setpv(TARG, stashname);
1694 PUSHs(&PL_sv_undef);
1696 mPUSHs(newSVpv(stashname, 0));
1697 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1698 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1701 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1702 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1703 /* So is ccstack[dbcxix]. */
1705 SV * const sv = newSV(0);
1706 gv_efullname3(sv, cvgv, NULL);
1708 PUSHs(boolSV(CxHASARGS(cx)));
1711 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1712 PUSHs(boolSV(CxHASARGS(cx)));
1716 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1719 gimme = (I32)cx->blk_gimme;
1720 if (gimme == G_VOID)
1721 PUSHs(&PL_sv_undef);
1723 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1724 if (CxTYPE(cx) == CXt_EVAL) {
1726 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1727 PUSHs(cx->blk_eval.cur_text);
1731 else if (cx->blk_eval.old_namesv) {
1732 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1735 /* eval BLOCK (try blocks have old_namesv == 0) */
1737 PUSHs(&PL_sv_undef);
1738 PUSHs(&PL_sv_undef);
1742 PUSHs(&PL_sv_undef);
1743 PUSHs(&PL_sv_undef);
1745 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1746 && CopSTASH_eq(PL_curcop, PL_debstash))
1748 AV * const ary = cx->blk_sub.argarray;
1749 const int off = AvARRAY(ary) - AvALLOC(ary);
1752 GV* const tmpgv = gv_fetchpvs("DB::args", GV_ADD, SVt_PVAV);
1753 PL_dbargs = GvAV(gv_AVadd(tmpgv));
1755 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1758 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1759 av_extend(PL_dbargs, AvFILLp(ary) + off);
1760 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1761 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1763 /* XXX only hints propagated via op_private are currently
1764 * visible (others are not easily accessible, since they
1765 * use the global PL_hints) */
1766 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1769 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1771 if (old_warnings == pWARN_NONE ||
1772 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1773 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1774 else if (old_warnings == pWARN_ALL ||
1775 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1776 /* Get the bit mask for $warnings::Bits{all}, because
1777 * it could have been extended by warnings::register */
1779 HV * const bits = get_hv("warnings::Bits", 0);
1780 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1781 mask = newSVsv(*bits_all);
1784 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1788 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1792 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1793 sv_2mortal(newRV_noinc(
1794 MUTABLE_SV(Perl_refcounted_he_chain_2hv(aTHX_
1795 cx->blk_oldcop->cop_hints_hash))))
1804 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1805 sv_reset(tmps, CopSTASH(PL_curcop));
1810 /* like pp_nextstate, but used instead when the debugger is active */
1815 PL_curcop = (COP*)PL_op;
1816 TAINT_NOT; /* Each statement is presumed innocent */
1817 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1820 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1821 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1824 register PERL_CONTEXT *cx;
1825 const I32 gimme = G_ARRAY;
1827 GV * const gv = PL_DBgv;
1828 register CV * const cv = GvCV(gv);
1831 DIE(aTHX_ "No DB::DB routine defined");
1833 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1834 /* don't do recursive DB::DB call */
1849 (void)(*CvXSUB(cv))(aTHX_ cv);
1856 PUSHBLOCK(cx, CXt_SUB, SP);
1858 cx->blk_sub.retop = PL_op->op_next;
1861 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1862 RETURNOP(CvSTART(cv));
1872 register PERL_CONTEXT *cx;
1873 const I32 gimme = GIMME_V;
1875 U8 cxtype = CXt_LOOP_FOR;
1883 if (PL_op->op_targ) {
1884 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1885 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1886 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1887 SVs_PADSTALE, SVs_PADSTALE);
1889 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1890 #ifndef USE_ITHREADS
1891 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1897 GV * const gv = MUTABLE_GV(POPs);
1898 svp = &GvSV(gv); /* symbol table variable */
1899 SAVEGENERICSV(*svp);
1902 iterdata = (PAD*)gv;
1906 if (PL_op->op_private & OPpITER_DEF)
1907 cxtype |= CXp_FOR_DEF;
1911 PUSHBLOCK(cx, cxtype, SP);
1913 PUSHLOOP_FOR(cx, iterdata, MARK, PL_op->op_targ);
1915 PUSHLOOP_FOR(cx, svp, MARK, 0);
1917 if (PL_op->op_flags & OPf_STACKED) {
1918 SV *maybe_ary = POPs;
1919 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1921 SV * const right = maybe_ary;
1924 if (RANGE_IS_NUMERIC(sv,right)) {
1925 cx->cx_type &= ~CXTYPEMASK;
1926 cx->cx_type |= CXt_LOOP_LAZYIV;
1927 /* Make sure that no-one re-orders cop.h and breaks our
1929 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
1930 #ifdef NV_PRESERVES_UV
1931 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1932 (SvNV(sv) > (NV)IV_MAX)))
1934 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1935 (SvNV(right) < (NV)IV_MIN))))
1937 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1940 ((SvUV(sv) > (UV)IV_MAX) ||
1941 (SvNV(sv) > (NV)UV_MAX)))))
1943 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1945 ((SvNV(right) > 0) &&
1946 ((SvUV(right) > (UV)IV_MAX) ||
1947 (SvNV(right) > (NV)UV_MAX))))))
1949 DIE(aTHX_ "Range iterator outside integer range");
1950 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
1951 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
1953 /* for correct -Dstv display */
1954 cx->blk_oldsp = sp - PL_stack_base;
1958 cx->cx_type &= ~CXTYPEMASK;
1959 cx->cx_type |= CXt_LOOP_LAZYSV;
1960 /* Make sure that no-one re-orders cop.h and breaks our
1962 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
1963 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
1964 cx->blk_loop.state_u.lazysv.end = right;
1965 SvREFCNT_inc(right);
1966 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
1967 /* This will do the upgrade to SVt_PV, and warn if the value
1968 is uninitialised. */
1969 (void) SvPV_nolen_const(right);
1970 /* Doing this avoids a check every time in pp_iter in pp_hot.c
1971 to replace !SvOK() with a pointer to "". */
1973 SvREFCNT_dec(right);
1974 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
1978 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
1979 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
1980 SvREFCNT_inc(maybe_ary);
1981 cx->blk_loop.state_u.ary.ix =
1982 (PL_op->op_private & OPpITER_REVERSED) ?
1983 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
1987 else { /* iterating over items on the stack */
1988 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
1989 if (PL_op->op_private & OPpITER_REVERSED) {
1990 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
1993 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2003 register PERL_CONTEXT *cx;
2004 const I32 gimme = GIMME_V;
2010 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2011 PUSHLOOP_PLAIN(cx, SP);
2019 register PERL_CONTEXT *cx;
2026 assert(CxTYPE_is_LOOP(cx));
2028 newsp = PL_stack_base + cx->blk_loop.resetsp;
2031 if (gimme == G_VOID)
2033 else if (gimme == G_SCALAR) {
2035 *++newsp = sv_mortalcopy(*SP);
2037 *++newsp = &PL_sv_undef;
2041 *++newsp = sv_mortalcopy(*++mark);
2042 TAINT_NOT; /* Each item is independent */
2048 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2049 PL_curpm = newpm; /* ... and pop $1 et al */
2060 register PERL_CONTEXT *cx;
2061 bool popsub2 = FALSE;
2062 bool clear_errsv = FALSE;
2070 const I32 cxix = dopoptosub(cxstack_ix);
2073 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2074 * sort block, which is a CXt_NULL
2077 PL_stack_base[1] = *PL_stack_sp;
2078 PL_stack_sp = PL_stack_base + 1;
2082 DIE(aTHX_ "Can't return outside a subroutine");
2084 if (cxix < cxstack_ix)
2087 if (CxMULTICALL(&cxstack[cxix])) {
2088 gimme = cxstack[cxix].blk_gimme;
2089 if (gimme == G_VOID)
2090 PL_stack_sp = PL_stack_base;
2091 else if (gimme == G_SCALAR) {
2092 PL_stack_base[1] = *PL_stack_sp;
2093 PL_stack_sp = PL_stack_base + 1;
2099 switch (CxTYPE(cx)) {
2102 retop = cx->blk_sub.retop;
2103 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2106 if (!(PL_in_eval & EVAL_KEEPERR))
2109 retop = cx->blk_eval.retop;
2113 if (optype == OP_REQUIRE &&
2114 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2116 /* Unassume the success we assumed earlier. */
2117 SV * const nsv = cx->blk_eval.old_namesv;
2118 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
2119 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
2124 retop = cx->blk_sub.retop;
2127 DIE(aTHX_ "panic: return");
2131 if (gimme == G_SCALAR) {
2134 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2136 *++newsp = SvREFCNT_inc(*SP);
2141 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2143 *++newsp = sv_mortalcopy(sv);
2148 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2151 *++newsp = sv_mortalcopy(*SP);
2154 *++newsp = &PL_sv_undef;
2156 else if (gimme == G_ARRAY) {
2157 while (++MARK <= SP) {
2158 *++newsp = (popsub2 && SvTEMP(*MARK))
2159 ? *MARK : sv_mortalcopy(*MARK);
2160 TAINT_NOT; /* Each item is independent */
2163 PL_stack_sp = newsp;
2166 /* Stack values are safe: */
2169 POPSUB(cx,sv); /* release CV and @_ ... */
2173 PL_curpm = newpm; /* ... and pop $1 et al */
2186 register PERL_CONTEXT *cx;
2197 if (PL_op->op_flags & OPf_SPECIAL) {
2198 cxix = dopoptoloop(cxstack_ix);
2200 DIE(aTHX_ "Can't \"last\" outside a loop block");
2203 cxix = dopoptolabel(cPVOP->op_pv);
2205 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2207 if (cxix < cxstack_ix)
2211 cxstack_ix++; /* temporarily protect top context */
2213 switch (CxTYPE(cx)) {
2214 case CXt_LOOP_LAZYIV:
2215 case CXt_LOOP_LAZYSV:
2217 case CXt_LOOP_PLAIN:
2219 newsp = PL_stack_base + cx->blk_loop.resetsp;
2220 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2224 nextop = cx->blk_sub.retop;
2228 nextop = cx->blk_eval.retop;
2232 nextop = cx->blk_sub.retop;
2235 DIE(aTHX_ "panic: last");
2239 if (gimme == G_SCALAR) {
2241 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2242 ? *SP : sv_mortalcopy(*SP);
2244 *++newsp = &PL_sv_undef;
2246 else if (gimme == G_ARRAY) {
2247 while (++MARK <= SP) {
2248 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2249 ? *MARK : sv_mortalcopy(*MARK);
2250 TAINT_NOT; /* Each item is independent */
2258 /* Stack values are safe: */
2260 case CXt_LOOP_LAZYIV:
2261 case CXt_LOOP_PLAIN:
2262 case CXt_LOOP_LAZYSV:
2264 POPLOOP(cx); /* release loop vars ... */
2268 POPSUB(cx,sv); /* release CV and @_ ... */
2271 PL_curpm = newpm; /* ... and pop $1 et al */
2274 PERL_UNUSED_VAR(optype);
2275 PERL_UNUSED_VAR(gimme);
2283 register PERL_CONTEXT *cx;
2286 if (PL_op->op_flags & OPf_SPECIAL) {
2287 cxix = dopoptoloop(cxstack_ix);
2289 DIE(aTHX_ "Can't \"next\" outside a loop block");
2292 cxix = dopoptolabel(cPVOP->op_pv);
2294 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2296 if (cxix < cxstack_ix)
2299 /* clear off anything above the scope we're re-entering, but
2300 * save the rest until after a possible continue block */
2301 inner = PL_scopestack_ix;
2303 if (PL_scopestack_ix < inner)
2304 leave_scope(PL_scopestack[PL_scopestack_ix]);
2305 PL_curcop = cx->blk_oldcop;
2306 return CX_LOOP_NEXTOP_GET(cx);
2313 register PERL_CONTEXT *cx;
2317 if (PL_op->op_flags & OPf_SPECIAL) {
2318 cxix = dopoptoloop(cxstack_ix);
2320 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2323 cxix = dopoptolabel(cPVOP->op_pv);
2325 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2327 if (cxix < cxstack_ix)
2330 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2331 if (redo_op->op_type == OP_ENTER) {
2332 /* pop one less context to avoid $x being freed in while (my $x..) */
2334 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2335 redo_op = redo_op->op_next;
2339 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2340 LEAVE_SCOPE(oldsave);
2342 PL_curcop = cx->blk_oldcop;
2347 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2351 static const char too_deep[] = "Target of goto is too deeply nested";
2353 PERL_ARGS_ASSERT_DOFINDLABEL;
2356 Perl_croak(aTHX_ too_deep);
2357 if (o->op_type == OP_LEAVE ||
2358 o->op_type == OP_SCOPE ||
2359 o->op_type == OP_LEAVELOOP ||
2360 o->op_type == OP_LEAVESUB ||
2361 o->op_type == OP_LEAVETRY)
2363 *ops++ = cUNOPo->op_first;
2365 Perl_croak(aTHX_ too_deep);
2368 if (o->op_flags & OPf_KIDS) {
2370 /* First try all the kids at this level, since that's likeliest. */
2371 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2372 if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2373 CopLABEL(kCOP) && strEQ(CopLABEL(kCOP), label))
2376 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2377 if (kid == PL_lastgotoprobe)
2379 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2382 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2383 ops[-1]->op_type == OP_DBSTATE)
2388 if ((o = dofindlabel(kid, label, ops, oplimit)))
2401 register PERL_CONTEXT *cx;
2402 #define GOTO_DEPTH 64
2403 OP *enterops[GOTO_DEPTH];
2404 const char *label = NULL;
2405 const bool do_dump = (PL_op->op_type == OP_DUMP);
2406 static const char must_have_label[] = "goto must have label";
2408 if (PL_op->op_flags & OPf_STACKED) {
2409 SV * const sv = POPs;
2411 /* This egregious kludge implements goto &subroutine */
2412 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2414 register PERL_CONTEXT *cx;
2415 CV *cv = MUTABLE_CV(SvRV(sv));
2422 if (!CvROOT(cv) && !CvXSUB(cv)) {
2423 const GV * const gv = CvGV(cv);
2427 /* autoloaded stub? */
2428 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2430 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2431 GvNAMELEN(gv), FALSE);
2432 if (autogv && (cv = GvCV(autogv)))
2434 tmpstr = sv_newmortal();
2435 gv_efullname3(tmpstr, gv, NULL);
2436 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2438 DIE(aTHX_ "Goto undefined subroutine");
2441 /* First do some returnish stuff. */
2442 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2444 cxix = dopoptosub(cxstack_ix);
2446 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2447 if (cxix < cxstack_ix)
2451 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2452 if (CxTYPE(cx) == CXt_EVAL) {
2454 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2456 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2458 else if (CxMULTICALL(cx))
2459 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2460 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2461 /* put @_ back onto stack */
2462 AV* av = cx->blk_sub.argarray;
2464 items = AvFILLp(av) + 1;
2465 EXTEND(SP, items+1); /* @_ could have been extended. */
2466 Copy(AvARRAY(av), SP + 1, items, SV*);
2467 SvREFCNT_dec(GvAV(PL_defgv));
2468 GvAV(PL_defgv) = cx->blk_sub.savearray;
2470 /* abandon @_ if it got reified */
2475 av_extend(av, items-1);
2477 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2480 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2481 AV* const av = GvAV(PL_defgv);
2482 items = AvFILLp(av) + 1;
2483 EXTEND(SP, items+1); /* @_ could have been extended. */
2484 Copy(AvARRAY(av), SP + 1, items, SV*);
2488 if (CxTYPE(cx) == CXt_SUB &&
2489 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2490 SvREFCNT_dec(cx->blk_sub.cv);
2491 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2492 LEAVE_SCOPE(oldsave);
2494 /* Now do some callish stuff. */
2496 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2498 OP* const retop = cx->blk_sub.retop;
2503 for (index=0; index<items; index++)
2504 sv_2mortal(SP[-index]);
2507 /* XS subs don't have a CxSUB, so pop it */
2508 POPBLOCK(cx, PL_curpm);
2509 /* Push a mark for the start of arglist */
2512 (void)(*CvXSUB(cv))(aTHX_ cv);
2517 AV* const padlist = CvPADLIST(cv);
2518 if (CxTYPE(cx) == CXt_EVAL) {
2519 PL_in_eval = CxOLD_IN_EVAL(cx);
2520 PL_eval_root = cx->blk_eval.old_eval_root;
2521 cx->cx_type = CXt_SUB;
2523 cx->blk_sub.cv = cv;
2524 cx->blk_sub.olddepth = CvDEPTH(cv);
2527 if (CvDEPTH(cv) < 2)
2528 SvREFCNT_inc_simple_void_NN(cv);
2530 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2531 sub_crush_depth(cv);
2532 pad_push(padlist, CvDEPTH(cv));
2535 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2538 AV *const av = MUTABLE_AV(PAD_SVl(0));
2540 cx->blk_sub.savearray = GvAV(PL_defgv);
2541 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2542 CX_CURPAD_SAVE(cx->blk_sub);
2543 cx->blk_sub.argarray = av;
2545 if (items >= AvMAX(av) + 1) {
2546 SV **ary = AvALLOC(av);
2547 if (AvARRAY(av) != ary) {
2548 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2551 if (items >= AvMAX(av) + 1) {
2552 AvMAX(av) = items - 1;
2553 Renew(ary,items+1,SV*);
2559 Copy(mark,AvARRAY(av),items,SV*);
2560 AvFILLp(av) = items - 1;
2561 assert(!AvREAL(av));
2563 /* transfer 'ownership' of refcnts to new @_ */
2573 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2574 Perl_get_db_sub(aTHX_ NULL, cv);
2576 CV * const gotocv = get_cvs("DB::goto", 0);
2578 PUSHMARK( PL_stack_sp );
2579 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2584 RETURNOP(CvSTART(cv));
2588 label = SvPV_nolen_const(sv);
2589 if (!(do_dump || *label))
2590 DIE(aTHX_ must_have_label);
2593 else if (PL_op->op_flags & OPf_SPECIAL) {
2595 DIE(aTHX_ must_have_label);
2598 label = cPVOP->op_pv;
2600 if (label && *label) {
2601 OP *gotoprobe = NULL;
2602 bool leaving_eval = FALSE;
2603 bool in_block = FALSE;
2604 PERL_CONTEXT *last_eval_cx = NULL;
2608 PL_lastgotoprobe = NULL;
2610 for (ix = cxstack_ix; ix >= 0; ix--) {
2612 switch (CxTYPE(cx)) {
2614 leaving_eval = TRUE;
2615 if (!CxTRYBLOCK(cx)) {
2616 gotoprobe = (last_eval_cx ?
2617 last_eval_cx->blk_eval.old_eval_root :
2622 /* else fall through */
2623 case CXt_LOOP_LAZYIV:
2624 case CXt_LOOP_LAZYSV:
2626 case CXt_LOOP_PLAIN:
2627 gotoprobe = cx->blk_oldcop->op_sibling;
2633 gotoprobe = cx->blk_oldcop->op_sibling;
2636 gotoprobe = PL_main_root;
2639 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2640 gotoprobe = CvROOT(cx->blk_sub.cv);
2646 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2649 DIE(aTHX_ "panic: goto");
2650 gotoprobe = PL_main_root;
2654 retop = dofindlabel(gotoprobe, label,
2655 enterops, enterops + GOTO_DEPTH);
2659 PL_lastgotoprobe = gotoprobe;
2662 DIE(aTHX_ "Can't find label %s", label);
2664 /* if we're leaving an eval, check before we pop any frames
2665 that we're not going to punt, otherwise the error
2668 if (leaving_eval && *enterops && enterops[1]) {
2670 for (i = 1; enterops[i]; i++)
2671 if (enterops[i]->op_type == OP_ENTERITER)
2672 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2675 /* pop unwanted frames */
2677 if (ix < cxstack_ix) {
2684 oldsave = PL_scopestack[PL_scopestack_ix];
2685 LEAVE_SCOPE(oldsave);
2688 /* push wanted frames */
2690 if (*enterops && enterops[1]) {
2691 OP * const oldop = PL_op;
2692 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2693 for (; enterops[ix]; ix++) {
2694 PL_op = enterops[ix];
2695 /* Eventually we may want to stack the needed arguments
2696 * for each op. For now, we punt on the hard ones. */
2697 if (PL_op->op_type == OP_ENTERITER)
2698 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2699 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2707 if (!retop) retop = PL_main_start;
2709 PL_restartop = retop;
2710 PL_do_undump = TRUE;
2714 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2715 PL_do_undump = FALSE;
2732 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2734 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2737 PL_exit_flags |= PERL_EXIT_EXPECTED;
2739 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2740 if (anum || !(PL_minus_c && PL_madskills))
2745 PUSHs(&PL_sv_undef);
2752 S_save_lines(pTHX_ AV *array, SV *sv)
2754 const char *s = SvPVX_const(sv);
2755 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2758 PERL_ARGS_ASSERT_SAVE_LINES;
2760 while (s && s < send) {
2762 SV * const tmpstr = newSV_type(SVt_PVMG);
2764 t = (const char *)memchr(s, '\n', send - s);
2770 sv_setpvn(tmpstr, s, t - s);
2771 av_store(array, line++, tmpstr);
2777 S_docatch(pTHX_ OP *o)
2781 OP * const oldop = PL_op;
2785 assert(CATCH_GET == TRUE);
2792 assert(cxstack_ix >= 0);
2793 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2794 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2799 /* die caught by an inner eval - continue inner loop */
2801 /* NB XXX we rely on the old popped CxEVAL still being at the top
2802 * of the stack; the way die_where() currently works, this
2803 * assumption is valid. In theory The cur_top_env value should be
2804 * returned in another global, the way retop (aka PL_restartop)
2806 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2809 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2811 PL_op = PL_restartop;
2828 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2829 /* sv Text to convert to OP tree. */
2830 /* startop op_free() this to undo. */
2831 /* code Short string id of the caller. */
2833 /* FIXME - how much of this code is common with pp_entereval? */
2834 dVAR; dSP; /* Make POPBLOCK work. */
2840 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2841 char *tmpbuf = tbuf;
2844 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2847 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2850 lex_start(sv, NULL, FALSE);
2852 /* switch to eval mode */
2854 if (IN_PERL_COMPILETIME) {
2855 SAVECOPSTASH_FREE(&PL_compiling);
2856 CopSTASH_set(&PL_compiling, PL_curstash);
2858 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2859 SV * const sv = sv_newmortal();
2860 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2861 code, (unsigned long)++PL_evalseq,
2862 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2867 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2868 (unsigned long)++PL_evalseq);
2869 SAVECOPFILE_FREE(&PL_compiling);
2870 CopFILE_set(&PL_compiling, tmpbuf+2);
2871 SAVECOPLINE(&PL_compiling);
2872 CopLINE_set(&PL_compiling, 1);
2873 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2874 deleting the eval's FILEGV from the stash before gv_check() runs
2875 (i.e. before run-time proper). To work around the coredump that
2876 ensues, we always turn GvMULTI_on for any globals that were
2877 introduced within evals. See force_ident(). GSAR 96-10-12 */
2878 safestr = savepvn(tmpbuf, len);
2879 SAVEDELETE(PL_defstash, safestr, len);
2881 #ifdef OP_IN_REGISTER
2887 /* we get here either during compilation, or via pp_regcomp at runtime */
2888 runtime = IN_PERL_RUNTIME;
2890 runcv = find_runcv(NULL);
2893 PL_op->op_type = OP_ENTEREVAL;
2894 PL_op->op_flags = 0; /* Avoid uninit warning. */
2895 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2899 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2901 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2902 POPBLOCK(cx,PL_curpm);
2905 (*startop)->op_type = OP_NULL;
2906 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2908 /* XXX DAPM do this properly one year */
2909 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
2911 if (IN_PERL_COMPILETIME)
2912 CopHINTS_set(&PL_compiling, PL_hints);
2913 #ifdef OP_IN_REGISTER
2916 PERL_UNUSED_VAR(newsp);
2917 PERL_UNUSED_VAR(optype);
2919 return PL_eval_start;
2924 =for apidoc find_runcv
2926 Locate the CV corresponding to the currently executing sub or eval.
2927 If db_seqp is non_null, skip CVs that are in the DB package and populate
2928 *db_seqp with the cop sequence number at the point that the DB:: code was
2929 entered. (allows debuggers to eval in the scope of the breakpoint rather
2930 than in the scope of the debugger itself).
2936 Perl_find_runcv(pTHX_ U32 *db_seqp)
2942 *db_seqp = PL_curcop->cop_seq;
2943 for (si = PL_curstackinfo; si; si = si->si_prev) {
2945 for (ix = si->si_cxix; ix >= 0; ix--) {
2946 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
2947 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2948 CV * const cv = cx->blk_sub.cv;
2949 /* skip DB:: code */
2950 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2951 *db_seqp = cx->blk_oldcop->cop_seq;
2956 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2964 /* Compile a require/do, an eval '', or a /(?{...})/.
2965 * In the last case, startop is non-null, and contains the address of
2966 * a pointer that should be set to the just-compiled code.
2967 * outside is the lexically enclosing CV (if any) that invoked us.
2968 * Returns a bool indicating whether the compile was successful; if so,
2969 * PL_eval_start contains the first op of the compiled ocde; otherwise,
2970 * pushes undef (also croaks if startop != NULL).
2974 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2977 OP * const saveop = PL_op;
2979 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2980 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2985 SAVESPTR(PL_compcv);
2986 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
2987 CvEVAL_on(PL_compcv);
2988 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2989 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2991 CvOUTSIDE_SEQ(PL_compcv) = seq;
2992 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
2994 /* set up a scratch pad */
2996 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2997 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3001 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3003 /* make sure we compile in the right package */
3005 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3006 SAVESPTR(PL_curstash);
3007 PL_curstash = CopSTASH(PL_curcop);
3009 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3010 SAVESPTR(PL_beginav);
3011 PL_beginav = newAV();
3012 SAVEFREESV(PL_beginav);
3013 SAVESPTR(PL_unitcheckav);
3014 PL_unitcheckav = newAV();
3015 SAVEFREESV(PL_unitcheckav);
3018 SAVEBOOL(PL_madskills);
3022 /* try to compile it */
3024 PL_eval_root = NULL;
3025 PL_curcop = &PL_compiling;
3026 CopARYBASE_set(PL_curcop, 0);
3027 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3028 PL_in_eval |= EVAL_KEEPERR;
3031 if (yyparse() || PL_parser->error_count || !PL_eval_root) {
3032 SV **newsp; /* Used by POPBLOCK. */
3033 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
3034 I32 optype = 0; /* Might be reset by POPEVAL. */
3039 op_free(PL_eval_root);
3040 PL_eval_root = NULL;
3042 SP = PL_stack_base + POPMARK; /* pop original mark */
3044 POPBLOCK(cx,PL_curpm);
3048 LEAVE; /* pp_entereval knows about this LEAVE. */
3050 msg = SvPVx_nolen_const(ERRSV);
3051 if (optype == OP_REQUIRE) {
3052 const SV * const nsv = cx->blk_eval.old_namesv;
3053 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
3055 Perl_croak(aTHX_ "%sCompilation failed in require",
3056 *msg ? msg : "Unknown error\n");
3059 POPBLOCK(cx,PL_curpm);
3061 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3062 (*msg ? msg : "Unknown error\n"));
3066 sv_setpvs(ERRSV, "Compilation error");
3069 PERL_UNUSED_VAR(newsp);
3070 PUSHs(&PL_sv_undef);
3074 CopLINE_set(&PL_compiling, 0);
3076 *startop = PL_eval_root;
3078 SAVEFREEOP(PL_eval_root);
3080 /* Set the context for this new optree.
3081 * If the last op is an OP_REQUIRE, force scalar context.
3082 * Otherwise, propagate the context from the eval(). */
3083 if (PL_eval_root->op_type == OP_LEAVEEVAL
3084 && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
3085 && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
3087 scalar(PL_eval_root);
3088 else if ((gimme & G_WANT) == G_VOID)
3089 scalarvoid(PL_eval_root);
3090 else if ((gimme & G_WANT) == G_ARRAY)
3093 scalar(PL_eval_root);
3095 DEBUG_x(dump_eval());
3097 /* Register with debugger: */
3098 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3099 CV * const cv = get_cvs("DB::postponed", 0);
3103 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3105 call_sv(MUTABLE_SV(cv), G_DISCARD);
3110 call_list(PL_scopestack_ix, PL_unitcheckav);
3112 /* compiled okay, so do it */
3114 CvDEPTH(PL_compcv) = 1;
3115 SP = PL_stack_base + POPMARK; /* pop original mark */
3116 PL_op = saveop; /* The caller may need it. */
3117 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3124 S_check_type_and_open(pTHX_ const char *name)
3127 const int st_rc = PerlLIO_stat(name, &st);
3129 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3131 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3135 return PerlIO_open(name, PERL_SCRIPT_MODE);
3138 #ifndef PERL_DISABLE_PMC
3140 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3144 PERL_ARGS_ASSERT_DOOPEN_PM;
3146 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3147 SV *const pmcsv = newSV(namelen + 2);
3148 char *const pmc = SvPVX(pmcsv);
3151 memcpy(pmc, name, namelen);
3153 pmc[namelen + 1] = '\0';
3155 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3156 fp = check_type_and_open(name);
3159 fp = check_type_and_open(pmc);
3161 SvREFCNT_dec(pmcsv);
3164 fp = check_type_and_open(name);
3169 # define doopen_pm(name, namelen) check_type_and_open(name)
3170 #endif /* !PERL_DISABLE_PMC */
3175 register PERL_CONTEXT *cx;
3182 int vms_unixname = 0;
3184 const char *tryname = NULL;
3186 const I32 gimme = GIMME_V;
3187 int filter_has_file = 0;
3188 PerlIO *tryrsfp = NULL;
3189 SV *filter_cache = NULL;
3190 SV *filter_state = NULL;
3191 SV *filter_sub = NULL;
3197 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3198 sv = new_version(sv);
3199 if (!sv_derived_from(PL_patchlevel, "version"))
3200 upg_version(PL_patchlevel, TRUE);
3201 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3202 if ( vcmp(sv,PL_patchlevel) <= 0 )
3203 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3204 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3207 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3210 SV * const req = SvRV(sv);
3211 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3213 /* get the left hand term */
3214 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3216 first = SvIV(*av_fetch(lav,0,0));
3217 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3218 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3219 || av_len(lav) > 1 /* FP with > 3 digits */
3220 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3222 DIE(aTHX_ "Perl %"SVf" required--this is only "
3223 "%"SVf", stopped", SVfARG(vnormal(req)),
3224 SVfARG(vnormal(PL_patchlevel)));
3226 else { /* probably 'use 5.10' or 'use 5.8' */
3227 SV * hintsv = newSV(0);
3231 second = SvIV(*av_fetch(lav,1,0));
3233 second /= second >= 600 ? 100 : 10;
3234 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.%d",
3235 (int)first, (int)second,0);
3236 upg_version(hintsv, TRUE);
3238 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3239 "--this is only %"SVf", stopped",
3240 SVfARG(vnormal(req)),
3241 SVfARG(vnormal(hintsv)),
3242 SVfARG(vnormal(PL_patchlevel)));
3247 /* We do this only with use, not require. */
3249 /* If we request a version >= 5.9.5, load feature.pm with the
3250 * feature bundle that corresponds to the required version. */
3251 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3252 SV *const importsv = vnormal(sv);
3253 *SvPVX_mutable(importsv) = ':';
3255 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3258 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3260 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3262 Perl_load_module(aTHX_ 0, newSVpvs("strict"), NULL, NULL, NULL);
3269 name = SvPV_const(sv, len);
3270 if (!(name && len > 0 && *name))
3271 DIE(aTHX_ "Null filename used");
3272 TAINT_PROPER("require");
3276 /* The key in the %ENV hash is in the syntax of file passed as the argument
3277 * usually this is in UNIX format, but sometimes in VMS format, which
3278 * can result in a module being pulled in more than once.
3279 * To prevent this, the key must be stored in UNIX format if the VMS
3280 * name can be translated to UNIX.
3282 if ((unixname = tounixspec(name, NULL)) != NULL) {
3283 unixlen = strlen(unixname);
3289 /* if not VMS or VMS name can not be translated to UNIX, pass it
3292 unixname = (char *) name;
3295 if (PL_op->op_type == OP_REQUIRE) {
3296 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3297 unixname, unixlen, 0);
3299 if (*svp != &PL_sv_undef)
3302 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3303 "Compilation failed in require", unixname);
3307 /* prepare to compile file */
3309 if (path_is_absolute(name)) {
3311 tryrsfp = doopen_pm(name, len);
3314 AV * const ar = GvAVn(PL_incgv);
3320 namesv = newSV_type(SVt_PV);
3321 for (i = 0; i <= AvFILL(ar); i++) {
3322 SV * const dirsv = *av_fetch(ar, i, TRUE);
3324 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3331 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3332 && !sv_isobject(loader))
3334 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3337 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3338 PTR2UV(SvRV(dirsv)), name);
3339 tryname = SvPVX_const(namesv);
3350 if (sv_isobject(loader))
3351 count = call_method("INC", G_ARRAY);
3353 count = call_sv(loader, G_ARRAY);
3356 /* Adjust file name if the hook has set an %INC entry */
3357 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3359 tryname = SvPVX_const(*svp);
3368 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3369 && !isGV_with_GP(SvRV(arg))) {
3370 filter_cache = SvRV(arg);
3371 SvREFCNT_inc_simple_void_NN(filter_cache);
3378 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3382 if (isGV_with_GP(arg)) {
3383 IO * const io = GvIO((const GV *)arg);
3388 tryrsfp = IoIFP(io);
3389 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3390 PerlIO_close(IoOFP(io));
3401 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3403 SvREFCNT_inc_simple_void_NN(filter_sub);
3406 filter_state = SP[i];
3407 SvREFCNT_inc_simple_void(filter_state);
3411 if (!tryrsfp && (filter_cache || filter_sub)) {
3412 tryrsfp = PerlIO_open(BIT_BUCKET,
3427 filter_has_file = 0;
3429 SvREFCNT_dec(filter_cache);
3430 filter_cache = NULL;
3433 SvREFCNT_dec(filter_state);
3434 filter_state = NULL;
3437 SvREFCNT_dec(filter_sub);
3442 if (!path_is_absolute(name)
3448 dir = SvPV_const(dirsv, dirlen);
3456 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3458 sv_setpv(namesv, unixdir);
3459 sv_catpv(namesv, unixname);
3461 # ifdef __SYMBIAN32__
3462 if (PL_origfilename[0] &&
3463 PL_origfilename[1] == ':' &&
3464 !(dir[0] && dir[1] == ':'))
3465 Perl_sv_setpvf(aTHX_ namesv,
3470 Perl_sv_setpvf(aTHX_ namesv,
3474 /* The equivalent of
3475 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3476 but without the need to parse the format string, or
3477 call strlen on either pointer, and with the correct
3478 allocation up front. */
3480 char *tmp = SvGROW(namesv, dirlen + len + 2);
3482 memcpy(tmp, dir, dirlen);
3485 /* name came from an SV, so it will have a '\0' at the
3486 end that we can copy as part of this memcpy(). */
3487 memcpy(tmp, name, len + 1);
3489 SvCUR_set(namesv, dirlen + len + 1);
3491 /* Don't even actually have to turn SvPOK_on() as we
3492 access it directly with SvPVX() below. */
3496 TAINT_PROPER("require");
3497 tryname = SvPVX_const(namesv);
3498 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3500 if (tryname[0] == '.' && tryname[1] == '/') {
3502 while (*++tryname == '/');
3506 else if (errno == EMFILE)
3507 /* no point in trying other paths if out of handles */
3514 SAVECOPFILE_FREE(&PL_compiling);
3515 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3516 SvREFCNT_dec(namesv);
3518 if (PL_op->op_type == OP_REQUIRE) {
3519 const char *msgstr = name;
3520 if(errno == EMFILE) {
3522 = sv_2mortal(Perl_newSVpvf(aTHX_ "%s: %s", msgstr,
3524 msgstr = SvPV_nolen_const(msg);
3526 if (namesv) { /* did we lookup @INC? */
3527 AV * const ar = GvAVn(PL_incgv);
3529 SV * const msg = sv_2mortal(Perl_newSVpvf(aTHX_
3530 "%s in @INC%s%s (@INC contains:",
3532 (instr(msgstr, ".h ")
3533 ? " (change .h to .ph maybe?)" : ""),
3534 (instr(msgstr, ".ph ")
3535 ? " (did you run h2ph?)" : "")
3538 for (i = 0; i <= AvFILL(ar); i++) {
3539 sv_catpvs(msg, " ");
3540 sv_catsv(msg, *av_fetch(ar, i, TRUE));
3542 sv_catpvs(msg, ")");
3543 msgstr = SvPV_nolen_const(msg);
3546 DIE(aTHX_ "Can't locate %s", msgstr);
3552 SETERRNO(0, SS_NORMAL);
3554 /* Assume success here to prevent recursive requirement. */
3555 /* name is never assigned to again, so len is still strlen(name) */
3556 /* Check whether a hook in @INC has already filled %INC */
3558 (void)hv_store(GvHVn(PL_incgv),
3559 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3561 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3563 (void)hv_store(GvHVn(PL_incgv),
3564 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3569 lex_start(NULL, tryrsfp, TRUE);
3573 if (PL_compiling.cop_hints_hash) {
3574 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3575 PL_compiling.cop_hints_hash = NULL;
3578 SAVECOMPILEWARNINGS();
3579 if (PL_dowarn & G_WARN_ALL_ON)
3580 PL_compiling.cop_warnings = pWARN_ALL ;
3581 else if (PL_dowarn & G_WARN_ALL_OFF)
3582 PL_compiling.cop_warnings = pWARN_NONE ;
3584 PL_compiling.cop_warnings = pWARN_STD ;
3586 if (filter_sub || filter_cache) {
3587 SV * const datasv = filter_add(S_run_user_filter, NULL);
3588 IoLINES(datasv) = filter_has_file;
3589 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3590 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3591 IoFMT_GV(datasv) = MUTABLE_GV(filter_cache);
3594 /* switch to eval mode */
3595 PUSHBLOCK(cx, CXt_EVAL, SP);
3597 cx->blk_eval.retop = PL_op->op_next;
3599 SAVECOPLINE(&PL_compiling);
3600 CopLINE_set(&PL_compiling, 0);
3604 /* Store and reset encoding. */
3605 encoding = PL_encoding;
3608 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3609 op = DOCATCH(PL_eval_start);
3611 op = PL_op->op_next;
3613 /* Restore encoding. */
3614 PL_encoding = encoding;
3619 /* This is a op added to hold the hints hash for
3620 pp_entereval. The hash can be modified by the code
3621 being eval'ed, so we return a copy instead. */
3627 mXPUSHs(MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ MUTABLE_HV(cSVOP_sv))));
3635 register PERL_CONTEXT *cx;
3637 const I32 gimme = GIMME_V;
3638 const U32 was = PL_breakable_sub_gen;
3639 char tbuf[TYPE_DIGITS(long) + 12];
3640 char *tmpbuf = tbuf;
3644 HV *saved_hh = NULL;
3646 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3647 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3651 TAINT_IF(SvTAINTED(sv));
3652 TAINT_PROPER("eval");
3655 lex_start(sv, NULL, FALSE);
3658 /* switch to eval mode */
3660 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3661 SV * const temp_sv = sv_newmortal();
3662 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3663 (unsigned long)++PL_evalseq,
3664 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3665 tmpbuf = SvPVX(temp_sv);
3666 len = SvCUR(temp_sv);
3669 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3670 SAVECOPFILE_FREE(&PL_compiling);
3671 CopFILE_set(&PL_compiling, tmpbuf+2);
3672 SAVECOPLINE(&PL_compiling);
3673 CopLINE_set(&PL_compiling, 1);
3674 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3675 deleting the eval's FILEGV from the stash before gv_check() runs
3676 (i.e. before run-time proper). To work around the coredump that
3677 ensues, we always turn GvMULTI_on for any globals that were
3678 introduced within evals. See force_ident(). GSAR 96-10-12 */
3680 PL_hints = PL_op->op_targ;
3682 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3683 SvREFCNT_dec(GvHV(PL_hintgv));
3684 GvHV(PL_hintgv) = saved_hh;
3686 SAVECOMPILEWARNINGS();
3687 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3688 if (PL_compiling.cop_hints_hash) {
3689 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3691 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3692 if (PL_compiling.cop_hints_hash) {
3694 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3695 HINTS_REFCNT_UNLOCK;
3697 /* special case: an eval '' executed within the DB package gets lexically
3698 * placed in the first non-DB CV rather than the current CV - this
3699 * allows the debugger to execute code, find lexicals etc, in the
3700 * scope of the code being debugged. Passing &seq gets find_runcv
3701 * to do the dirty work for us */
3702 runcv = find_runcv(&seq);
3704 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3706 cx->blk_eval.retop = PL_op->op_next;
3708 /* prepare to compile string */
3710 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3711 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3714 if (doeval(gimme, NULL, runcv, seq)) {
3715 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3716 ? (PERLDB_LINE || PERLDB_SAVESRC)
3717 : PERLDB_SAVESRC_NOSUBS) {
3718 /* Retain the filegv we created. */
3720 char *const safestr = savepvn(tmpbuf, len);
3721 SAVEDELETE(PL_defstash, safestr, len);
3723 return DOCATCH(PL_eval_start);
3725 /* We have already left the scope set up earler thanks to the LEAVE
3727 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3728 ? (PERLDB_LINE || PERLDB_SAVESRC)
3729 : PERLDB_SAVESRC_INVALID) {
3730 /* Retain the filegv we created. */
3732 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3734 return PL_op->op_next;
3745 register PERL_CONTEXT *cx;
3747 const U8 save_flags = PL_op -> op_flags;
3752 retop = cx->blk_eval.retop;
3755 if (gimme == G_VOID)
3757 else if (gimme == G_SCALAR) {
3760 if (SvFLAGS(TOPs) & SVs_TEMP)
3763 *MARK = sv_mortalcopy(TOPs);
3767 *MARK = &PL_sv_undef;
3772 /* in case LEAVE wipes old return values */
3773 for (mark = newsp + 1; mark <= SP; mark++) {
3774 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3775 *mark = sv_mortalcopy(*mark);
3776 TAINT_NOT; /* Each item is independent */
3780 PL_curpm = newpm; /* Don't pop $1 et al till now */
3783 assert(CvDEPTH(PL_compcv) == 1);
3785 CvDEPTH(PL_compcv) = 0;
3788 if (optype == OP_REQUIRE &&
3789 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3791 /* Unassume the success we assumed earlier. */
3792 SV * const nsv = cx->blk_eval.old_namesv;
3793 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3794 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
3795 /* die_where() did LEAVE, or we won't be here */
3799 if (!(save_flags & OPf_SPECIAL)) {
3807 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3808 close to the related Perl_create_eval_scope. */
3810 Perl_delete_eval_scope(pTHX)
3815 register PERL_CONTEXT *cx;
3822 PERL_UNUSED_VAR(newsp);
3823 PERL_UNUSED_VAR(gimme);
3824 PERL_UNUSED_VAR(optype);
3827 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3828 also needed by Perl_fold_constants. */
3830 Perl_create_eval_scope(pTHX_ U32 flags)
3833 const I32 gimme = GIMME_V;
3838 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3841 PL_in_eval = EVAL_INEVAL;
3842 if (flags & G_KEEPERR)
3843 PL_in_eval |= EVAL_KEEPERR;
3846 if (flags & G_FAKINGEVAL) {
3847 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3855 PERL_CONTEXT * const cx = create_eval_scope(0);
3856 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3857 return DOCATCH(PL_op->op_next);
3866 register PERL_CONTEXT *cx;
3871 PERL_UNUSED_VAR(optype);
3874 if (gimme == G_VOID)
3876 else if (gimme == G_SCALAR) {
3880 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3883 *MARK = sv_mortalcopy(TOPs);
3887 *MARK = &PL_sv_undef;
3892 /* in case LEAVE wipes old return values */
3894 for (mark = newsp + 1; mark <= SP; mark++) {
3895 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3896 *mark = sv_mortalcopy(*mark);
3897 TAINT_NOT; /* Each item is independent */
3901 PL_curpm = newpm; /* Don't pop $1 et al till now */
3911 register PERL_CONTEXT *cx;
3912 const I32 gimme = GIMME_V;
3917 if (PL_op->op_targ == 0) {
3918 SV ** const defsv_p = &GvSV(PL_defgv);
3919 *defsv_p = newSVsv(POPs);
3920 SAVECLEARSV(*defsv_p);
3923 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
3925 PUSHBLOCK(cx, CXt_GIVEN, SP);
3934 register PERL_CONTEXT *cx;
3938 PERL_UNUSED_CONTEXT;
3941 assert(CxTYPE(cx) == CXt_GIVEN);
3946 PL_curpm = newpm; /* pop $1 et al */
3953 /* Helper routines used by pp_smartmatch */
3955 S_make_matcher(pTHX_ REGEXP *re)
3958 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
3960 PERL_ARGS_ASSERT_MAKE_MATCHER;
3962 PM_SETRE(matcher, ReREFCNT_inc(re));
3964 SAVEFREEOP((OP *) matcher);
3971 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
3976 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
3978 PL_op = (OP *) matcher;
3983 return (SvTRUEx(POPs));
3987 S_destroy_matcher(pTHX_ PMOP *matcher)
3991 PERL_ARGS_ASSERT_DESTROY_MATCHER;
3992 PERL_UNUSED_ARG(matcher);
3998 /* Do a smart match */
4001 return do_smartmatch(NULL, NULL);
4004 /* This version of do_smartmatch() implements the
4005 * table of smart matches that is found in perlsyn.
4008 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4013 bool object_on_left = FALSE;
4014 SV *e = TOPs; /* e is for 'expression' */
4015 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4017 /* First of all, handle overload magic of the rightmost argument */
4019 SV * const tmpsv = amagic_call(d, e, smart_amg, 0);
4028 SP -= 2; /* Pop the values */
4030 /* Take care only to invoke mg_get() once for each argument.
4031 * Currently we do this by copying the SV if it's magical. */
4034 d = sv_mortalcopy(d);
4041 e = sv_mortalcopy(e);
4051 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP))
4052 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4053 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4054 object_on_left = TRUE;
4057 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4059 if (object_on_left) {
4060 goto sm_any_sub; /* Treat objects like scalars */
4062 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4063 /* Test sub truth for each key */
4065 bool andedresults = TRUE;
4066 HV *hv = (HV*) SvRV(d);
4067 I32 numkeys = hv_iterinit(hv);
4070 while ( (he = hv_iternext(hv)) ) {
4074 PUSHs(hv_iterkeysv(he));
4076 c = call_sv(e, G_SCALAR);
4079 andedresults = FALSE;
4081 andedresults = SvTRUEx(POPs) && andedresults;
4090 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4091 /* Test sub truth for each element */
4093 bool andedresults = TRUE;
4094 AV *av = (AV*) SvRV(d);
4095 const I32 len = av_len(av);
4098 for (i = 0; i <= len; ++i) {
4099 SV * const * const svp = av_fetch(av, i, FALSE);
4106 c = call_sv(e, G_SCALAR);
4109 andedresults = FALSE;
4111 andedresults = SvTRUEx(POPs) && andedresults;
4127 c = call_sv(e, G_SCALAR);
4131 else if (SvTEMP(TOPs))
4132 SvREFCNT_inc_void(TOPs);
4139 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4140 if (object_on_left) {
4141 goto sm_any_hash; /* Treat objects like scalars */
4143 else if (!SvOK(d)) {
4146 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4147 /* Check that the key-sets are identical */
4149 HV *other_hv = MUTABLE_HV(SvRV(d));
4151 bool other_tied = FALSE;
4152 U32 this_key_count = 0,
4153 other_key_count = 0;
4154 HV *hv = MUTABLE_HV(SvRV(e));
4156 /* Tied hashes don't know how many keys they have. */
4157 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4160 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4161 HV * const temp = other_hv;
4166 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4169 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4172 /* The hashes have the same number of keys, so it suffices
4173 to check that one is a subset of the other. */
4174 (void) hv_iterinit(hv);
4175 while ( (he = hv_iternext(hv)) ) {
4176 SV *key = hv_iterkeysv(he);
4180 if(!hv_exists_ent(other_hv, key, 0)) {
4181 (void) hv_iterinit(hv); /* reset iterator */
4187 (void) hv_iterinit(other_hv);
4188 while ( hv_iternext(other_hv) )
4192 other_key_count = HvUSEDKEYS(other_hv);
4194 if (this_key_count != other_key_count)
4199 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4200 AV * const other_av = MUTABLE_AV(SvRV(d));
4201 const I32 other_len = av_len(other_av) + 1;
4203 HV *hv = MUTABLE_HV(SvRV(e));
4205 for (i = 0; i < other_len; ++i) {
4206 SV ** const svp = av_fetch(other_av, i, FALSE);
4207 if (svp) { /* ??? When can this not happen? */
4208 if (hv_exists_ent(hv, *svp, 0))
4214 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4217 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4219 HV *hv = MUTABLE_HV(SvRV(e));
4221 (void) hv_iterinit(hv);
4222 while ( (he = hv_iternext(hv)) ) {
4223 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4224 (void) hv_iterinit(hv);
4225 destroy_matcher(matcher);
4229 destroy_matcher(matcher);
4235 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4242 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4243 if (object_on_left) {
4244 goto sm_any_array; /* Treat objects like scalars */
4246 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4247 AV * const other_av = MUTABLE_AV(SvRV(e));
4248 const I32 other_len = av_len(other_av) + 1;
4251 for (i = 0; i < other_len; ++i) {
4252 SV ** const svp = av_fetch(other_av, i, FALSE);
4253 if (svp) { /* ??? When can this not happen? */
4254 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4260 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4261 AV *other_av = MUTABLE_AV(SvRV(d));
4262 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4266 const I32 other_len = av_len(other_av);
4268 if (NULL == seen_this) {
4269 seen_this = newHV();
4270 (void) sv_2mortal(MUTABLE_SV(seen_this));
4272 if (NULL == seen_other) {
4273 seen_this = newHV();
4274 (void) sv_2mortal(MUTABLE_SV(seen_other));
4276 for(i = 0; i <= other_len; ++i) {
4277 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4278 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4280 if (!this_elem || !other_elem) {
4281 if (this_elem || other_elem)
4284 else if (hv_exists_ent(seen_this,
4285 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4286 hv_exists_ent(seen_other,
4287 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4289 if (*this_elem != *other_elem)
4293 (void)hv_store_ent(seen_this,
4294 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4296 (void)hv_store_ent(seen_other,
4297 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4303 (void) do_smartmatch(seen_this, seen_other);
4313 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4316 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4317 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4320 for(i = 0; i <= this_len; ++i) {
4321 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4322 if (svp && matcher_matches_sv(matcher, *svp)) {
4323 destroy_matcher(matcher);
4327 destroy_matcher(matcher);
4331 else if (!SvOK(d)) {
4332 /* undef ~~ array */
4333 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4336 for (i = 0; i <= this_len; ++i) {
4337 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4338 if (!svp || !SvOK(*svp))
4347 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4349 for (i = 0; i <= this_len; ++i) {
4350 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4357 /* infinite recursion isn't supposed to happen here */
4358 (void) do_smartmatch(NULL, NULL);
4368 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4369 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4370 SV *t = d; d = e; e = t;
4373 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4374 SV *t = d; d = e; e = t;
4375 goto sm_regex_array;
4378 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4381 PUSHs(matcher_matches_sv(matcher, d)
4384 destroy_matcher(matcher);
4389 /* See if there is overload magic on left */
4390 else if (object_on_left && SvAMAGIC(d)) {
4394 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4404 else if (!SvOK(d)) {
4405 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4410 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4411 /* numeric comparison */
4414 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4425 /* As a last resort, use string comparison */
4434 register PERL_CONTEXT *cx;
4435 const I32 gimme = GIMME_V;
4437 /* This is essentially an optimization: if the match
4438 fails, we don't want to push a context and then
4439 pop it again right away, so we skip straight
4440 to the op that follows the leavewhen.
4442 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4443 return cLOGOP->op_other->op_next;
4448 PUSHBLOCK(cx, CXt_WHEN, SP);
4457 register PERL_CONTEXT *cx;
4463 assert(CxTYPE(cx) == CXt_WHEN);
4468 PL_curpm = newpm; /* pop $1 et al */
4478 register PERL_CONTEXT *cx;
4481 cxix = dopoptowhen(cxstack_ix);
4483 DIE(aTHX_ "Can't \"continue\" outside a when block");
4484 if (cxix < cxstack_ix)
4487 /* clear off anything above the scope we're re-entering */
4488 inner = PL_scopestack_ix;
4490 if (PL_scopestack_ix < inner)
4491 leave_scope(PL_scopestack[PL_scopestack_ix]);
4492 PL_curcop = cx->blk_oldcop;
4493 return cx->blk_givwhen.leave_op;
4500 register PERL_CONTEXT *cx;
4503 cxix = dopoptogiven(cxstack_ix);
4505 if (PL_op->op_flags & OPf_SPECIAL)
4506 DIE(aTHX_ "Can't use when() outside a topicalizer");
4508 DIE(aTHX_ "Can't \"break\" outside a given block");
4510 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4511 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4513 if (cxix < cxstack_ix)
4516 /* clear off anything above the scope we're re-entering */
4517 inner = PL_scopestack_ix;
4519 if (PL_scopestack_ix < inner)
4520 leave_scope(PL_scopestack[PL_scopestack_ix]);
4521 PL_curcop = cx->blk_oldcop;
4524 return CX_LOOP_NEXTOP_GET(cx);
4526 return cx->blk_givwhen.leave_op;
4530 S_doparseform(pTHX_ SV *sv)
4533 register char *s = SvPV_force(sv, len);
4534 register char * const send = s + len;
4535 register char *base = NULL;
4536 register I32 skipspaces = 0;
4537 bool noblank = FALSE;
4538 bool repeat = FALSE;
4539 bool postspace = FALSE;
4545 bool unchopnum = FALSE;
4546 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4548 PERL_ARGS_ASSERT_DOPARSEFORM;
4551 Perl_croak(aTHX_ "Null picture in formline");
4553 /* estimate the buffer size needed */
4554 for (base = s; s <= send; s++) {
4555 if (*s == '\n' || *s == '@' || *s == '^')
4561 Newx(fops, maxops, U32);
4566 *fpc++ = FF_LINEMARK;
4567 noblank = repeat = FALSE;
4585 case ' ': case '\t':
4592 } /* else FALL THROUGH */
4600 *fpc++ = FF_LITERAL;
4608 *fpc++ = (U16)skipspaces;
4612 *fpc++ = FF_NEWLINE;
4616 arg = fpc - linepc + 1;
4623 *fpc++ = FF_LINEMARK;
4624 noblank = repeat = FALSE;
4633 ischop = s[-1] == '^';
4639 arg = (s - base) - 1;
4641 *fpc++ = FF_LITERAL;
4649 *fpc++ = 2; /* skip the @* or ^* */
4651 *fpc++ = FF_LINESNGL;
4654 *fpc++ = FF_LINEGLOB;
4656 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4657 arg = ischop ? 512 : 0;
4662 const char * const f = ++s;
4665 arg |= 256 + (s - f);
4667 *fpc++ = s - base; /* fieldsize for FETCH */
4668 *fpc++ = FF_DECIMAL;
4670 unchopnum |= ! ischop;
4672 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4673 arg = ischop ? 512 : 0;
4675 s++; /* skip the '0' first */
4679 const char * const f = ++s;
4682 arg |= 256 + (s - f);
4684 *fpc++ = s - base; /* fieldsize for FETCH */
4685 *fpc++ = FF_0DECIMAL;
4687 unchopnum |= ! ischop;
4691 bool ismore = FALSE;
4694 while (*++s == '>') ;
4695 prespace = FF_SPACE;
4697 else if (*s == '|') {
4698 while (*++s == '|') ;
4699 prespace = FF_HALFSPACE;
4704 while (*++s == '<') ;
4707 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4711 *fpc++ = s - base; /* fieldsize for FETCH */
4713 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4716 *fpc++ = (U16)prespace;
4730 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4732 { /* need to jump to the next word */
4734 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4735 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4736 s = SvPVX(sv) + SvCUR(sv) + z;
4738 Copy(fops, s, arg, U32);
4740 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4743 if (unchopnum && repeat)
4744 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4750 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4752 /* Can value be printed in fldsize chars, using %*.*f ? */
4756 int intsize = fldsize - (value < 0 ? 1 : 0);
4763 while (intsize--) pwr *= 10.0;
4764 while (frcsize--) eps /= 10.0;
4767 if (value + eps >= pwr)
4770 if (value - eps <= -pwr)
4777 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4780 SV * const datasv = FILTER_DATA(idx);
4781 const int filter_has_file = IoLINES(datasv);
4782 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
4783 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
4787 const char *got_p = NULL;
4788 const char *prune_from = NULL;
4789 bool read_from_cache = FALSE;
4792 PERL_ARGS_ASSERT_RUN_USER_FILTER;
4794 assert(maxlen >= 0);
4797 /* I was having segfault trouble under Linux 2.2.5 after a
4798 parse error occured. (Had to hack around it with a test
4799 for PL_parser->error_count == 0.) Solaris doesn't segfault --
4800 not sure where the trouble is yet. XXX */
4802 if (IoFMT_GV(datasv)) {
4803 SV *const cache = MUTABLE_SV(IoFMT_GV(datasv));
4806 const char *cache_p = SvPV(cache, cache_len);
4810 /* Running in block mode and we have some cached data already.
4812 if (cache_len >= umaxlen) {
4813 /* In fact, so much data we don't even need to call
4818 const char *const first_nl =
4819 (const char *)memchr(cache_p, '\n', cache_len);
4821 take = first_nl + 1 - cache_p;
4825 sv_catpvn(buf_sv, cache_p, take);
4826 sv_chop(cache, cache_p + take);
4827 /* Definately not EOF */
4831 sv_catsv(buf_sv, cache);
4833 umaxlen -= cache_len;
4836 read_from_cache = TRUE;
4840 /* Filter API says that the filter appends to the contents of the buffer.
4841 Usually the buffer is "", so the details don't matter. But if it's not,
4842 then clearly what it contains is already filtered by this filter, so we
4843 don't want to pass it in a second time.
4844 I'm going to use a mortal in case the upstream filter croaks. */
4845 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
4846 ? sv_newmortal() : buf_sv;
4847 SvUPGRADE(upstream, SVt_PV);
4849 if (filter_has_file) {
4850 status = FILTER_READ(idx+1, upstream, 0);
4853 if (filter_sub && status >= 0) {
4862 DEFSV_set(upstream);
4866 PUSHs(filter_state);
4869 count = call_sv(filter_sub, G_SCALAR);
4884 if(SvOK(upstream)) {
4885 got_p = SvPV(upstream, got_len);
4887 if (got_len > umaxlen) {
4888 prune_from = got_p + umaxlen;
4891 const char *const first_nl =
4892 (const char *)memchr(got_p, '\n', got_len);
4893 if (first_nl && first_nl + 1 < got_p + got_len) {
4894 /* There's a second line here... */
4895 prune_from = first_nl + 1;
4900 /* Oh. Too long. Stuff some in our cache. */
4901 STRLEN cached_len = got_p + got_len - prune_from;
4902 SV *cache = MUTABLE_SV(IoFMT_GV(datasv));
4905 IoFMT_GV(datasv) = MUTABLE_GV((cache = newSV(got_len - umaxlen)));
4906 } else if (SvOK(cache)) {
4907 /* Cache should be empty. */
4908 assert(!SvCUR(cache));
4911 sv_setpvn(cache, prune_from, cached_len);
4912 /* If you ask for block mode, you may well split UTF-8 characters.
4913 "If it breaks, you get to keep both parts"
4914 (Your code is broken if you don't put them back together again
4915 before something notices.) */
4916 if (SvUTF8(upstream)) {
4919 SvCUR_set(upstream, got_len - cached_len);
4920 /* Can't yet be EOF */
4925 /* If they are at EOF but buf_sv has something in it, then they may never
4926 have touched the SV upstream, so it may be undefined. If we naively
4927 concatenate it then we get a warning about use of uninitialised value.
4929 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
4930 sv_catsv(buf_sv, upstream);
4934 IoLINES(datasv) = 0;
4935 SvREFCNT_dec(IoFMT_GV(datasv));
4937 SvREFCNT_dec(filter_state);
4938 IoTOP_GV(datasv) = NULL;
4941 SvREFCNT_dec(filter_sub);
4942 IoBOTTOM_GV(datasv) = NULL;
4944 filter_del(S_run_user_filter);
4946 if (status == 0 && read_from_cache) {
4947 /* If we read some data from the cache (and by getting here it implies
4948 that we emptied the cache) then we aren't yet at EOF, and mustn't
4949 report that to our caller. */
4955 /* perhaps someone can come up with a better name for
4956 this? it is not really "absolute", per se ... */
4958 S_path_is_absolute(const char *name)
4960 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
4962 if (PERL_FILE_IS_ABSOLUTE(name)
4964 || (*name == '.' && ((name[1] == '/' ||
4965 (name[1] == '.' && name[2] == '/'))
4966 || (name[1] == '\\' ||
4967 ( name[1] == '.' && name[2] == '\\')))
4970 || (*name == '.' && (name[1] == '/' ||
4971 (name[1] == '.' && name[2] == '/')))
4983 * c-indentation-style: bsd
4985 * indent-tabs-mode: t
4988 * ex: set ts=8 sts=4 sw=4 noet: