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) {
97 #define tryAMAGICregexp(rx) \
99 if (SvROK(rx) && SvAMAGIC(rx)) { \
100 SV *sv = AMG_CALLun(rx, regexp); \
104 if (SvTYPE(sv) != SVt_REGEXP) \
105 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
112 if (PL_op->op_flags & OPf_STACKED) {
113 /* multiple args; concatentate them */
115 tmpstr = PAD_SV(ARGTARG);
116 sv_setpvs(tmpstr, "");
117 while (++MARK <= SP) {
119 if (PL_amagic_generation) {
122 tryAMAGICregexp(msv);
124 if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
125 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
127 sv_setsv(tmpstr, sv);
131 sv_catsv(tmpstr, msv);
138 tryAMAGICregexp(tmpstr);
141 #undef tryAMAGICregexp
144 SV * const sv = SvRV(tmpstr);
145 if (SvTYPE(sv) == SVt_REGEXP)
148 else if (SvTYPE(tmpstr) == SVt_REGEXP)
149 re = (REGEXP*) tmpstr;
152 /* The match's LHS's get-magic might need to access this op's reg-
153 exp (as is sometimes the case with $'; see bug 70764). So we
154 must call get-magic now before we replace the regexp. Hopeful-
155 ly this hack can be replaced with the approach described at
156 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03
157 /msg122415.html some day. */
158 if(pm->op_type == OP_MATCH) {
160 const bool was_tainted = PL_tainted;
161 if (pm->op_flags & OPf_STACKED)
163 else if (pm->op_private & OPpTARGET_MY)
164 lhs = PAD_SV(pm->op_targ);
167 /* Restore the previous value of PL_tainted (which may have been
168 modified by get-magic), to avoid incorrectly setting the
169 RXf_TAINTED flag further down. */
170 PL_tainted = was_tainted;
173 re = reg_temp_copy(NULL, re);
174 ReREFCNT_dec(PM_GETRE(pm));
179 const char *t = SvOK(tmpstr) ? SvPV_const(tmpstr, len) : "";
181 assert (re != (REGEXP*) &PL_sv_undef);
183 /* Check against the last compiled regexp. */
184 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
185 memNE(RX_PRECOMP(re), t, len))
187 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
188 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
192 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
194 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
196 } else if (PL_curcop->cop_hints_hash) {
197 SV *ptr = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash, 0,
199 if (ptr && SvIOK(ptr) && SvIV(ptr))
200 eng = INT2PTR(regexp_engine*,SvIV(ptr));
203 if (PL_op->op_flags & OPf_SPECIAL)
204 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
206 if (DO_UTF8(tmpstr)) {
207 assert (SvUTF8(tmpstr));
208 } else if (SvUTF8(tmpstr)) {
209 /* Not doing UTF-8, despite what the SV says. Is this only if
210 we're trapped in use 'bytes'? */
211 /* Make a copy of the octet sequence, but without the flag on,
212 as the compiler now honours the SvUTF8 flag on tmpstr. */
214 const char *const p = SvPV(tmpstr, len);
215 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
219 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
221 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
223 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
224 inside tie/overload accessors. */
230 #ifndef INCOMPLETE_TAINTS
233 RX_EXTFLAGS(re) |= RXf_TAINTED;
235 RX_EXTFLAGS(re) &= ~RXf_TAINTED;
239 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
243 #if !defined(USE_ITHREADS)
244 /* can't change the optree at runtime either */
245 /* PMf_KEEP is handled differently under threads to avoid these problems */
246 if (pm->op_pmflags & PMf_KEEP) {
247 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
248 cLOGOP->op_first->op_next = PL_op->op_next;
258 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
259 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
260 register SV * const dstr = cx->sb_dstr;
261 register char *s = cx->sb_s;
262 register char *m = cx->sb_m;
263 char *orig = cx->sb_orig;
264 register REGEXP * const rx = cx->sb_rx;
266 REGEXP *old = PM_GETRE(pm);
270 PM_SETRE(pm,ReREFCNT_inc(rx));
273 rxres_restore(&cx->sb_rxres, rx);
274 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
276 if (cx->sb_iters++) {
277 const I32 saviters = cx->sb_iters;
278 if (cx->sb_iters > cx->sb_maxiters)
279 DIE(aTHX_ "Substitution loop");
281 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
283 if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
284 cx->sb_rxtainted |= 2;
285 sv_catsv_nomg(dstr, POPs);
286 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
290 if (CxONCE(cx) || s < orig ||
291 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
292 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
293 ((cx->sb_rflags & REXEC_COPY_STR)
294 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
295 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
297 SV * const targ = cx->sb_targ;
299 assert(cx->sb_strend >= s);
300 if(cx->sb_strend > s) {
301 if (DO_UTF8(dstr) && !SvUTF8(targ))
302 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
304 sv_catpvn(dstr, s, cx->sb_strend - s);
306 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
308 #ifdef PERL_OLD_COPY_ON_WRITE
310 sv_force_normal_flags(targ, SV_COW_DROP_PV);
316 SvPV_set(targ, SvPVX(dstr));
317 SvCUR_set(targ, SvCUR(dstr));
318 SvLEN_set(targ, SvLEN(dstr));
321 SvPV_set(dstr, NULL);
323 TAINT_IF(cx->sb_rxtainted & 1);
324 mPUSHi(saviters - 1);
326 (void)SvPOK_only_UTF8(targ);
327 TAINT_IF(cx->sb_rxtainted);
331 LEAVE_SCOPE(cx->sb_oldsave);
333 RETURNOP(pm->op_next);
335 cx->sb_iters = saviters;
337 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
340 cx->sb_orig = orig = RX_SUBBEG(rx);
342 cx->sb_strend = s + (cx->sb_strend - m);
344 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
346 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
347 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
349 sv_catpvn(dstr, s, m-s);
351 cx->sb_s = RX_OFFS(rx)[0].end + orig;
352 { /* Update the pos() information. */
353 SV * const sv = cx->sb_targ;
355 SvUPGRADE(sv, SVt_PVMG);
356 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
357 #ifdef PERL_OLD_COPY_ON_WRITE
359 sv_force_normal_flags(sv, 0);
361 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
364 mg->mg_len = m - orig;
367 (void)ReREFCNT_inc(rx);
368 cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
369 rxres_save(&cx->sb_rxres, rx);
370 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
374 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
379 PERL_ARGS_ASSERT_RXRES_SAVE;
382 if (!p || p[1] < RX_NPARENS(rx)) {
383 #ifdef PERL_OLD_COPY_ON_WRITE
384 i = 7 + RX_NPARENS(rx) * 2;
386 i = 6 + RX_NPARENS(rx) * 2;
395 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
396 RX_MATCH_COPIED_off(rx);
398 #ifdef PERL_OLD_COPY_ON_WRITE
399 *p++ = PTR2UV(RX_SAVED_COPY(rx));
400 RX_SAVED_COPY(rx) = NULL;
403 *p++ = RX_NPARENS(rx);
405 *p++ = PTR2UV(RX_SUBBEG(rx));
406 *p++ = (UV)RX_SUBLEN(rx);
407 for (i = 0; i <= RX_NPARENS(rx); ++i) {
408 *p++ = (UV)RX_OFFS(rx)[i].start;
409 *p++ = (UV)RX_OFFS(rx)[i].end;
414 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
419 PERL_ARGS_ASSERT_RXRES_RESTORE;
422 RX_MATCH_COPY_FREE(rx);
423 RX_MATCH_COPIED_set(rx, *p);
426 #ifdef PERL_OLD_COPY_ON_WRITE
427 if (RX_SAVED_COPY(rx))
428 SvREFCNT_dec (RX_SAVED_COPY(rx));
429 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
433 RX_NPARENS(rx) = *p++;
435 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
436 RX_SUBLEN(rx) = (I32)(*p++);
437 for (i = 0; i <= RX_NPARENS(rx); ++i) {
438 RX_OFFS(rx)[i].start = (I32)(*p++);
439 RX_OFFS(rx)[i].end = (I32)(*p++);
444 S_rxres_free(pTHX_ void **rsp)
446 UV * const p = (UV*)*rsp;
448 PERL_ARGS_ASSERT_RXRES_FREE;
453 void *tmp = INT2PTR(char*,*p);
456 PoisonFree(*p, 1, sizeof(*p));
458 Safefree(INT2PTR(char*,*p));
460 #ifdef PERL_OLD_COPY_ON_WRITE
462 SvREFCNT_dec (INT2PTR(SV*,p[1]));
472 dVAR; dSP; dMARK; dORIGMARK;
473 register SV * const tmpForm = *++MARK;
478 register SV *sv = NULL;
479 const char *item = NULL;
483 bool chopspace = (strchr(PL_chopset, ' ') != NULL);
484 const char *chophere = NULL;
485 char *linemark = NULL;
487 bool gotsome = FALSE;
489 const STRLEN fudge = SvPOK(tmpForm)
490 ? (SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1) : 0;
491 bool item_is_utf8 = FALSE;
492 bool targ_is_utf8 = FALSE;
494 OP * parseres = NULL;
497 if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
498 if (SvREADONLY(tmpForm)) {
499 SvREADONLY_off(tmpForm);
500 parseres = doparseform(tmpForm);
501 SvREADONLY_on(tmpForm);
504 parseres = doparseform(tmpForm);
508 SvPV_force(PL_formtarget, len);
509 if (DO_UTF8(PL_formtarget))
511 t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
513 f = SvPV_const(tmpForm, len);
514 /* need to jump to the next word */
515 fpc = (U32*)(f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN);
519 const char *name = "???";
522 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
523 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
524 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
525 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
526 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
528 case FF_CHECKNL: name = "CHECKNL"; break;
529 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
530 case FF_SPACE: name = "SPACE"; break;
531 case FF_HALFSPACE: name = "HALFSPACE"; break;
532 case FF_ITEM: name = "ITEM"; break;
533 case FF_CHOP: name = "CHOP"; break;
534 case FF_LINEGLOB: name = "LINEGLOB"; break;
535 case FF_NEWLINE: name = "NEWLINE"; break;
536 case FF_MORE: name = "MORE"; break;
537 case FF_LINEMARK: name = "LINEMARK"; break;
538 case FF_END: name = "END"; break;
539 case FF_0DECIMAL: name = "0DECIMAL"; break;
540 case FF_LINESNGL: name = "LINESNGL"; break;
543 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
545 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
556 if (targ_is_utf8 && !SvUTF8(tmpForm)) {
557 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
559 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
560 t = SvEND(PL_formtarget);
564 if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
565 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
567 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC, fudge + 1);
568 t = SvEND(PL_formtarget);
588 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
595 const char *s = item = SvPV_const(sv, len);
598 itemsize = sv_len_utf8(sv);
599 if (itemsize != (I32)len) {
601 if (itemsize > fieldsize) {
602 itemsize = fieldsize;
603 itembytes = itemsize;
604 sv_pos_u2b(sv, &itembytes, 0);
608 send = chophere = s + itembytes;
618 sv_pos_b2u(sv, &itemsize);
622 item_is_utf8 = FALSE;
623 if (itemsize > fieldsize)
624 itemsize = fieldsize;
625 send = chophere = s + itemsize;
639 const char *s = item = SvPV_const(sv, len);
642 itemsize = sv_len_utf8(sv);
643 if (itemsize != (I32)len) {
645 if (itemsize <= fieldsize) {
646 const char *send = chophere = s + itemsize;
659 itemsize = fieldsize;
660 itembytes = itemsize;
661 sv_pos_u2b(sv, &itembytes, 0);
662 send = chophere = s + itembytes;
663 while (s < send || (s == send && isSPACE(*s))) {
673 if (strchr(PL_chopset, *s))
678 itemsize = chophere - item;
679 sv_pos_b2u(sv, &itemsize);
685 item_is_utf8 = FALSE;
686 if (itemsize <= fieldsize) {
687 const char *const send = chophere = s + itemsize;
700 itemsize = fieldsize;
701 send = chophere = s + itemsize;
702 while (s < send || (s == send && isSPACE(*s))) {
712 if (strchr(PL_chopset, *s))
717 itemsize = chophere - item;
723 arg = fieldsize - itemsize;
732 arg = fieldsize - itemsize;
743 const char *s = item;
747 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
749 sv_utf8_upgrade_flags_grow(PL_formtarget, SV_GMAGIC,
751 t = SvEND(PL_formtarget);
755 if (UTF8_IS_CONTINUED(*s)) {
756 STRLEN skip = UTF8SKIP(s);
773 if ( !((*t++ = *s++) & ~31) )
779 if (targ_is_utf8 && !item_is_utf8) {
780 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
782 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
783 for (; t < SvEND(PL_formtarget); t++) {
796 const int ch = *t++ = *s++;
799 if ( !((*t++ = *s++) & ~31) )
808 const char *s = chophere;
822 const bool oneline = fpc[-1] == FF_LINESNGL;
823 const char *s = item = SvPV_const(sv, len);
824 item_is_utf8 = DO_UTF8(sv);
827 STRLEN to_copy = itemsize;
828 const char *const send = s + len;
829 const U8 *source = (const U8 *) s;
833 chophere = s + itemsize;
837 to_copy = s - SvPVX_const(sv) - 1;
849 if (targ_is_utf8 && !item_is_utf8) {
850 source = tmp = bytes_to_utf8(source, &to_copy);
851 SvCUR_set(PL_formtarget,
852 t - SvPVX_const(PL_formtarget));
854 if (item_is_utf8 && !targ_is_utf8) {
855 /* Upgrade targ to UTF8, and then we reduce it to
856 a problem we have a simple solution for. */
857 SvCUR_set(PL_formtarget,
858 t - SvPVX_const(PL_formtarget));
860 /* Don't need get magic. */
861 sv_utf8_upgrade_nomg(PL_formtarget);
863 SvCUR_set(PL_formtarget,
864 t - SvPVX_const(PL_formtarget));
867 /* Easy. They agree. */
868 assert (item_is_utf8 == targ_is_utf8);
870 SvGROW(PL_formtarget,
871 SvCUR(PL_formtarget) + to_copy + fudge + 1);
872 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
874 Copy(source, t, to_copy, char);
876 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
878 if (SvGMAGICAL(sv)) {
879 /* Mustn't call sv_pos_b2u() as it does a second
880 mg_get(). Is this a bug? Do we need a _flags()
882 itemsize = utf8_length(source, source + itemsize);
884 sv_pos_b2u(sv, &itemsize);
896 #if defined(USE_LONG_DOUBLE)
899 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
903 "%#0*.*f" : "%0*.*f");
908 #if defined(USE_LONG_DOUBLE)
910 ((arg & 256) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
913 ((arg & 256) ? "%#*.*f" : "%*.*f");
916 /* If the field is marked with ^ and the value is undefined,
918 if ((arg & 512) && !SvOK(sv)) {
926 /* overflow evidence */
927 if (num_overflow(value, fieldsize, arg)) {
933 /* Formats aren't yet marked for locales, so assume "yes". */
935 STORE_NUMERIC_STANDARD_SET_LOCAL();
936 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg & 255, value);
937 RESTORE_NUMERIC_STANDARD();
944 while (t-- > linemark && *t == ' ') ;
952 if (arg) { /* repeat until fields exhausted? */
954 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
955 lines += FmLINES(PL_formtarget);
957 SvUTF8_on(PL_formtarget);
958 FmLINES(PL_formtarget) = lines;
960 RETURNOP(cLISTOP->op_first);
971 const char *s = chophere;
972 const char *send = item + len;
974 while (isSPACE(*s) && (s < send))
979 arg = fieldsize - itemsize;
986 if (strnEQ(s1," ",3)) {
987 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
998 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1000 SvUTF8_on(PL_formtarget);
1001 FmLINES(PL_formtarget) += lines;
1013 if (PL_stack_base + *PL_markstack_ptr == SP) {
1015 if (GIMME_V == G_SCALAR)
1017 RETURNOP(PL_op->op_next->op_next);
1019 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1020 pp_pushmark(); /* push dst */
1021 pp_pushmark(); /* push src */
1022 ENTER_with_name("grep"); /* enter outer scope */
1025 if (PL_op->op_private & OPpGREP_LEX)
1026 SAVESPTR(PAD_SVl(PL_op->op_targ));
1029 ENTER_with_name("grep_item"); /* enter inner scope */
1032 src = PL_stack_base[*PL_markstack_ptr];
1034 if (PL_op->op_private & OPpGREP_LEX)
1035 PAD_SVl(PL_op->op_targ) = src;
1040 if (PL_op->op_type == OP_MAPSTART)
1041 pp_pushmark(); /* push top */
1042 return ((LOGOP*)PL_op->op_next)->op_other;
1048 const I32 gimme = GIMME_V;
1049 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1055 /* first, move source pointer to the next item in the source list */
1056 ++PL_markstack_ptr[-1];
1058 /* if there are new items, push them into the destination list */
1059 if (items && gimme != G_VOID) {
1060 /* might need to make room back there first */
1061 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1062 /* XXX this implementation is very pessimal because the stack
1063 * is repeatedly extended for every set of items. Is possible
1064 * to do this without any stack extension or copying at all
1065 * by maintaining a separate list over which the map iterates
1066 * (like foreach does). --gsar */
1068 /* everything in the stack after the destination list moves
1069 * towards the end the stack by the amount of room needed */
1070 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1072 /* items to shift up (accounting for the moved source pointer) */
1073 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1075 /* This optimization is by Ben Tilly and it does
1076 * things differently from what Sarathy (gsar)
1077 * is describing. The downside of this optimization is
1078 * that leaves "holes" (uninitialized and hopefully unused areas)
1079 * to the Perl stack, but on the other hand this
1080 * shouldn't be a problem. If Sarathy's idea gets
1081 * implemented, this optimization should become
1082 * irrelevant. --jhi */
1084 shift = count; /* Avoid shifting too often --Ben Tilly */
1088 dst = (SP += shift);
1089 PL_markstack_ptr[-1] += shift;
1090 *PL_markstack_ptr += shift;
1094 /* copy the new items down to the destination list */
1095 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1096 if (gimme == G_ARRAY) {
1098 *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
1101 /* scalar context: we don't care about which values map returns
1102 * (we use undef here). And so we certainly don't want to do mortal
1103 * copies of meaningless values. */
1104 while (items-- > 0) {
1106 *dst-- = &PL_sv_undef;
1110 LEAVE_with_name("grep_item"); /* exit inner scope */
1113 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1115 (void)POPMARK; /* pop top */
1116 LEAVE_with_name("grep"); /* exit outer scope */
1117 (void)POPMARK; /* pop src */
1118 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1119 (void)POPMARK; /* pop dst */
1120 SP = PL_stack_base + POPMARK; /* pop original mark */
1121 if (gimme == G_SCALAR) {
1122 if (PL_op->op_private & OPpGREP_LEX) {
1123 SV* sv = sv_newmortal();
1124 sv_setiv(sv, items);
1132 else if (gimme == G_ARRAY)
1139 ENTER_with_name("grep_item"); /* enter inner scope */
1142 /* set $_ to the new source item */
1143 src = PL_stack_base[PL_markstack_ptr[-1]];
1145 if (PL_op->op_private & OPpGREP_LEX)
1146 PAD_SVl(PL_op->op_targ) = src;
1150 RETURNOP(cLOGOP->op_other);
1159 if (GIMME == G_ARRAY)
1161 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1162 return cLOGOP->op_other;
1172 if (GIMME == G_ARRAY) {
1173 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1177 SV * const targ = PAD_SV(PL_op->op_targ);
1180 if (PL_op->op_private & OPpFLIP_LINENUM) {
1181 if (GvIO(PL_last_in_gv)) {
1182 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1185 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1187 flip = SvIV(sv) == SvIV(GvSV(gv));
1193 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1194 if (PL_op->op_flags & OPf_SPECIAL) {
1202 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1205 sv_setpvs(TARG, "");
1211 /* This code tries to decide if "$left .. $right" should use the
1212 magical string increment, or if the range is numeric (we make
1213 an exception for .."0" [#18165]). AMS 20021031. */
1215 #define RANGE_IS_NUMERIC(left,right) ( \
1216 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1217 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1218 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1219 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1220 && (!SvOK(right) || looks_like_number(right))))
1226 if (GIMME == G_ARRAY) {
1232 if (RANGE_IS_NUMERIC(left,right)) {
1235 if ((SvOK(left) && SvNV(left) < IV_MIN) ||
1236 (SvOK(right) && SvNV(right) > IV_MAX))
1237 DIE(aTHX_ "Range iterator outside integer range");
1248 SV * const sv = sv_2mortal(newSViv(i++));
1253 SV * const final = sv_mortalcopy(right);
1255 const char * const tmps = SvPV_const(final, len);
1257 SV *sv = sv_mortalcopy(left);
1258 SvPV_force_nolen(sv);
1259 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1261 if (strEQ(SvPVX_const(sv),tmps))
1263 sv = sv_2mortal(newSVsv(sv));
1270 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1274 if (PL_op->op_private & OPpFLIP_LINENUM) {
1275 if (GvIO(PL_last_in_gv)) {
1276 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1279 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1280 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1288 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1289 sv_catpvs(targ, "E0");
1299 static const char * const context_name[] = {
1301 NULL, /* CXt_WHEN never actually needs "block" */
1302 NULL, /* CXt_BLOCK never actually needs "block" */
1303 NULL, /* CXt_GIVEN never actually needs "block" */
1304 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1305 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1306 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1307 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1315 S_dopoptolabel(pTHX_ const char *label)
1320 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1322 for (i = cxstack_ix; i >= 0; i--) {
1323 register const PERL_CONTEXT * const cx = &cxstack[i];
1324 switch (CxTYPE(cx)) {
1330 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1331 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1332 if (CxTYPE(cx) == CXt_NULL)
1335 case CXt_LOOP_LAZYIV:
1336 case CXt_LOOP_LAZYSV:
1338 case CXt_LOOP_PLAIN:
1340 const char *cx_label = CxLABEL(cx);
1341 if (!cx_label || strNE(label, cx_label) ) {
1342 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1343 (long)i, cx_label));
1346 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1357 Perl_dowantarray(pTHX)
1360 const I32 gimme = block_gimme();
1361 return (gimme == G_VOID) ? G_SCALAR : gimme;
1365 Perl_block_gimme(pTHX)
1368 const I32 cxix = dopoptosub(cxstack_ix);
1372 switch (cxstack[cxix].blk_gimme) {
1380 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1387 Perl_is_lvalue_sub(pTHX)
1390 const I32 cxix = dopoptosub(cxstack_ix);
1391 assert(cxix >= 0); /* We should only be called from inside subs */
1393 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1394 return CxLVAL(cxstack + cxix);
1400 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1405 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1407 for (i = startingblock; i >= 0; i--) {
1408 register const PERL_CONTEXT * const cx = &cxstk[i];
1409 switch (CxTYPE(cx)) {
1415 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1423 S_dopoptoeval(pTHX_ I32 startingblock)
1427 for (i = startingblock; i >= 0; i--) {
1428 register const PERL_CONTEXT *cx = &cxstack[i];
1429 switch (CxTYPE(cx)) {
1433 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1441 S_dopoptoloop(pTHX_ I32 startingblock)
1445 for (i = startingblock; i >= 0; i--) {
1446 register const PERL_CONTEXT * const cx = &cxstack[i];
1447 switch (CxTYPE(cx)) {
1453 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1454 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1455 if ((CxTYPE(cx)) == CXt_NULL)
1458 case CXt_LOOP_LAZYIV:
1459 case CXt_LOOP_LAZYSV:
1461 case CXt_LOOP_PLAIN:
1462 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1470 S_dopoptogiven(pTHX_ I32 startingblock)
1474 for (i = startingblock; i >= 0; i--) {
1475 register const PERL_CONTEXT *cx = &cxstack[i];
1476 switch (CxTYPE(cx)) {
1480 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1482 case CXt_LOOP_PLAIN:
1483 assert(!CxFOREACHDEF(cx));
1485 case CXt_LOOP_LAZYIV:
1486 case CXt_LOOP_LAZYSV:
1488 if (CxFOREACHDEF(cx)) {
1489 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1498 S_dopoptowhen(pTHX_ I32 startingblock)
1502 for (i = startingblock; i >= 0; i--) {
1503 register const PERL_CONTEXT *cx = &cxstack[i];
1504 switch (CxTYPE(cx)) {
1508 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1516 Perl_dounwind(pTHX_ I32 cxix)
1521 while (cxstack_ix > cxix) {
1523 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1524 DEBUG_CX("UNWIND"); \
1525 /* Note: we don't need to restore the base context info till the end. */
1526 switch (CxTYPE(cx)) {
1529 continue; /* not break */
1537 case CXt_LOOP_LAZYIV:
1538 case CXt_LOOP_LAZYSV:
1540 case CXt_LOOP_PLAIN:
1551 PERL_UNUSED_VAR(optype);
1555 Perl_qerror(pTHX_ SV *err)
1559 PERL_ARGS_ASSERT_QERROR;
1562 sv_catsv(ERRSV, err);
1564 sv_catsv(PL_errors, err);
1566 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1568 ++PL_parser->error_count;
1572 Perl_die_where(pTHX_ SV *msv)
1581 if (PL_in_eval & EVAL_KEEPERR) {
1582 static const char prefix[] = "\t(in cleanup) ";
1583 SV * const err = ERRSV;
1584 const char *e = NULL;
1587 else if (SvCUR(err) >= sizeof(prefix)+SvCUR(msv)-1) {
1590 const char* message = SvPV_const(msv, msglen);
1591 e = SvPV_const(err, len);
1593 if (*e != *message || strNE(e,message))
1598 SvGROW(err, SvCUR(err)+sizeof(prefix)+SvCUR(msv));
1599 sv_catpvn(err, prefix, sizeof(prefix)-1);
1601 start = SvCUR(err)-SvCUR(msv)-sizeof(prefix)+1;
1602 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "%s",
1603 SvPVX_const(err)+start);
1608 const char* message = SvPV_const(msv, msglen);
1609 sv_setpvn(ERRSV, message, msglen);
1610 SvFLAGS(ERRSV) |= SvFLAGS(msv) & SVf_UTF8;
1614 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1615 && PL_curstackinfo->si_prev)
1623 register PERL_CONTEXT *cx;
1626 if (cxix < cxstack_ix)
1629 POPBLOCK(cx,PL_curpm);
1630 if (CxTYPE(cx) != CXt_EVAL) {
1632 const char* message = SvPVx_const( msv ? msv : ERRSV, msglen);
1633 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1634 PerlIO_write(Perl_error_log, message, msglen);
1639 if (gimme == G_SCALAR)
1640 *++newsp = &PL_sv_undef;
1641 PL_stack_sp = newsp;
1645 /* LEAVE could clobber PL_curcop (see save_re_context())
1646 * XXX it might be better to find a way to avoid messing with
1647 * PL_curcop in save_re_context() instead, but this is a more
1648 * minimal fix --GSAR */
1649 PL_curcop = cx->blk_oldcop;
1651 if (optype == OP_REQUIRE) {
1652 const char* const msg = SvPVx_nolen_const(ERRSV);
1653 SV * const nsv = cx->blk_eval.old_namesv;
1654 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
1656 DIE(aTHX_ "%sCompilation failed in require",
1657 *msg ? msg : "Unknown error\n");
1659 assert(CxTYPE(cx) == CXt_EVAL);
1660 PL_restartop = cx->blk_eval.retop;
1666 write_to_stderr( msv ? msv : ERRSV );
1673 dVAR; dSP; dPOPTOPssrl;
1674 if (SvTRUE(left) != SvTRUE(right))
1684 register I32 cxix = dopoptosub(cxstack_ix);
1685 register const PERL_CONTEXT *cx;
1686 register const PERL_CONTEXT *ccstack = cxstack;
1687 const PERL_SI *top_si = PL_curstackinfo;
1689 const char *stashname;
1696 /* we may be in a higher stacklevel, so dig down deeper */
1697 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1698 top_si = top_si->si_prev;
1699 ccstack = top_si->si_cxstack;
1700 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1703 if (GIMME != G_ARRAY) {
1709 /* caller() should not report the automatic calls to &DB::sub */
1710 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1711 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1715 cxix = dopoptosub_at(ccstack, cxix - 1);
1718 cx = &ccstack[cxix];
1719 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1720 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1721 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1722 field below is defined for any cx. */
1723 /* caller() should not report the automatic calls to &DB::sub */
1724 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1725 cx = &ccstack[dbcxix];
1728 stashname = CopSTASHPV(cx->blk_oldcop);
1729 if (GIMME != G_ARRAY) {
1732 PUSHs(&PL_sv_undef);
1735 sv_setpv(TARG, stashname);
1744 PUSHs(&PL_sv_undef);
1746 mPUSHs(newSVpv(stashname, 0));
1747 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1748 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1751 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1752 GV * const cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1753 /* So is ccstack[dbcxix]. */
1755 SV * const sv = newSV(0);
1756 gv_efullname3(sv, cvgv, NULL);
1758 PUSHs(boolSV(CxHASARGS(cx)));
1761 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1762 PUSHs(boolSV(CxHASARGS(cx)));
1766 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1769 gimme = (I32)cx->blk_gimme;
1770 if (gimme == G_VOID)
1771 PUSHs(&PL_sv_undef);
1773 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1774 if (CxTYPE(cx) == CXt_EVAL) {
1776 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1777 PUSHs(cx->blk_eval.cur_text);
1781 else if (cx->blk_eval.old_namesv) {
1782 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1785 /* eval BLOCK (try blocks have old_namesv == 0) */
1787 PUSHs(&PL_sv_undef);
1788 PUSHs(&PL_sv_undef);
1792 PUSHs(&PL_sv_undef);
1793 PUSHs(&PL_sv_undef);
1795 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1796 && CopSTASH_eq(PL_curcop, PL_debstash))
1798 AV * const ary = cx->blk_sub.argarray;
1799 const int off = AvARRAY(ary) - AvALLOC(ary);
1802 PL_dbargs = GvAV(gv_AVadd(gv_fetchpvs("DB::args", GV_ADDMULTI,
1804 AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
1807 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1808 av_extend(PL_dbargs, AvFILLp(ary) + off);
1809 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1810 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1812 /* XXX only hints propagated via op_private are currently
1813 * visible (others are not easily accessible, since they
1814 * use the global PL_hints) */
1815 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1818 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1820 if (old_warnings == pWARN_NONE ||
1821 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1822 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1823 else if (old_warnings == pWARN_ALL ||
1824 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1825 /* Get the bit mask for $warnings::Bits{all}, because
1826 * it could have been extended by warnings::register */
1828 HV * const bits = get_hv("warnings::Bits", 0);
1829 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1830 mask = newSVsv(*bits_all);
1833 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1837 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1841 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1842 sv_2mortal(newRV_noinc(
1843 MUTABLE_SV(Perl_refcounted_he_chain_2hv(aTHX_
1844 cx->blk_oldcop->cop_hints_hash))))
1853 const char * const tmps = (MAXARG < 1) ? (const char *)"" : POPpconstx;
1854 sv_reset(tmps, CopSTASH(PL_curcop));
1859 /* like pp_nextstate, but used instead when the debugger is active */
1864 PL_curcop = (COP*)PL_op;
1865 TAINT_NOT; /* Each statement is presumed innocent */
1866 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1869 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1870 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1873 register PERL_CONTEXT *cx;
1874 const I32 gimme = G_ARRAY;
1876 GV * const gv = PL_DBgv;
1877 register CV * const cv = GvCV(gv);
1880 DIE(aTHX_ "No DB::DB routine defined");
1882 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1883 /* don't do recursive DB::DB call */
1898 (void)(*CvXSUB(cv))(aTHX_ cv);
1905 PUSHBLOCK(cx, CXt_SUB, SP);
1907 cx->blk_sub.retop = PL_op->op_next;
1910 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
1911 RETURNOP(CvSTART(cv));
1921 register PERL_CONTEXT *cx;
1922 const I32 gimme = GIMME_V;
1924 U8 cxtype = CXt_LOOP_FOR;
1929 ENTER_with_name("loop1");
1932 if (PL_op->op_targ) {
1933 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1934 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1935 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1936 SVs_PADSTALE, SVs_PADSTALE);
1938 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
1939 #ifndef USE_ITHREADS
1940 svp = &PAD_SVl(PL_op->op_targ); /* "my" variable */
1946 GV * const gv = MUTABLE_GV(POPs);
1947 svp = &GvSV(gv); /* symbol table variable */
1948 SAVEGENERICSV(*svp);
1951 iterdata = (PAD*)gv;
1955 if (PL_op->op_private & OPpITER_DEF)
1956 cxtype |= CXp_FOR_DEF;
1958 ENTER_with_name("loop2");
1960 PUSHBLOCK(cx, cxtype, SP);
1962 PUSHLOOP_FOR(cx, iterdata, MARK, PL_op->op_targ);
1964 PUSHLOOP_FOR(cx, svp, MARK, 0);
1966 if (PL_op->op_flags & OPf_STACKED) {
1967 SV *maybe_ary = POPs;
1968 if (SvTYPE(maybe_ary) != SVt_PVAV) {
1970 SV * const right = maybe_ary;
1973 if (RANGE_IS_NUMERIC(sv,right)) {
1974 cx->cx_type &= ~CXTYPEMASK;
1975 cx->cx_type |= CXt_LOOP_LAZYIV;
1976 /* Make sure that no-one re-orders cop.h and breaks our
1978 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
1979 #ifdef NV_PRESERVES_UV
1980 if ((SvOK(sv) && ((SvNV(sv) < (NV)IV_MIN) ||
1981 (SvNV(sv) > (NV)IV_MAX)))
1983 (SvOK(right) && ((SvNV(right) > (NV)IV_MAX) ||
1984 (SvNV(right) < (NV)IV_MIN))))
1986 if ((SvOK(sv) && ((SvNV(sv) <= (NV)IV_MIN)
1989 ((SvUV(sv) > (UV)IV_MAX) ||
1990 (SvNV(sv) > (NV)UV_MAX)))))
1992 (SvOK(right) && ((SvNV(right) <= (NV)IV_MIN)
1994 ((SvNV(right) > 0) &&
1995 ((SvUV(right) > (UV)IV_MAX) ||
1996 (SvNV(right) > (NV)UV_MAX))))))
1998 DIE(aTHX_ "Range iterator outside integer range");
1999 cx->blk_loop.state_u.lazyiv.cur = SvIV(sv);
2000 cx->blk_loop.state_u.lazyiv.end = SvIV(right);
2002 /* for correct -Dstv display */
2003 cx->blk_oldsp = sp - PL_stack_base;
2007 cx->cx_type &= ~CXTYPEMASK;
2008 cx->cx_type |= CXt_LOOP_LAZYSV;
2009 /* Make sure that no-one re-orders cop.h and breaks our
2011 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2012 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2013 cx->blk_loop.state_u.lazysv.end = right;
2014 SvREFCNT_inc(right);
2015 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2016 /* This will do the upgrade to SVt_PV, and warn if the value
2017 is uninitialised. */
2018 (void) SvPV_nolen_const(right);
2019 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2020 to replace !SvOK() with a pointer to "". */
2022 SvREFCNT_dec(right);
2023 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2027 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2028 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2029 SvREFCNT_inc(maybe_ary);
2030 cx->blk_loop.state_u.ary.ix =
2031 (PL_op->op_private & OPpITER_REVERSED) ?
2032 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2036 else { /* iterating over items on the stack */
2037 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2038 if (PL_op->op_private & OPpITER_REVERSED) {
2039 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2042 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2052 register PERL_CONTEXT *cx;
2053 const I32 gimme = GIMME_V;
2055 ENTER_with_name("loop1");
2057 ENTER_with_name("loop2");
2059 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2060 PUSHLOOP_PLAIN(cx, SP);
2068 register PERL_CONTEXT *cx;
2075 assert(CxTYPE_is_LOOP(cx));
2077 newsp = PL_stack_base + cx->blk_loop.resetsp;
2080 if (gimme == G_VOID)
2082 else if (gimme == G_SCALAR) {
2084 *++newsp = sv_mortalcopy(*SP);
2086 *++newsp = &PL_sv_undef;
2090 *++newsp = sv_mortalcopy(*++mark);
2091 TAINT_NOT; /* Each item is independent */
2097 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2098 PL_curpm = newpm; /* ... and pop $1 et al */
2100 LEAVE_with_name("loop2");
2101 LEAVE_with_name("loop1");
2109 register PERL_CONTEXT *cx;
2110 bool popsub2 = FALSE;
2111 bool clear_errsv = FALSE;
2119 const I32 cxix = dopoptosub(cxstack_ix);
2122 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2123 * sort block, which is a CXt_NULL
2126 PL_stack_base[1] = *PL_stack_sp;
2127 PL_stack_sp = PL_stack_base + 1;
2131 DIE(aTHX_ "Can't return outside a subroutine");
2133 if (cxix < cxstack_ix)
2136 if (CxMULTICALL(&cxstack[cxix])) {
2137 gimme = cxstack[cxix].blk_gimme;
2138 if (gimme == G_VOID)
2139 PL_stack_sp = PL_stack_base;
2140 else if (gimme == G_SCALAR) {
2141 PL_stack_base[1] = *PL_stack_sp;
2142 PL_stack_sp = PL_stack_base + 1;
2148 switch (CxTYPE(cx)) {
2151 retop = cx->blk_sub.retop;
2152 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2155 if (!(PL_in_eval & EVAL_KEEPERR))
2158 retop = cx->blk_eval.retop;
2162 if (optype == OP_REQUIRE &&
2163 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2165 /* Unassume the success we assumed earlier. */
2166 SV * const nsv = cx->blk_eval.old_namesv;
2167 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
2168 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
2173 retop = cx->blk_sub.retop;
2176 DIE(aTHX_ "panic: return");
2180 if (gimme == G_SCALAR) {
2183 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2185 *++newsp = SvREFCNT_inc(*SP);
2190 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2192 *++newsp = sv_mortalcopy(sv);
2197 *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
2200 *++newsp = sv_mortalcopy(*SP);
2203 *++newsp = &PL_sv_undef;
2205 else if (gimme == G_ARRAY) {
2206 while (++MARK <= SP) {
2207 *++newsp = (popsub2 && SvTEMP(*MARK))
2208 ? *MARK : sv_mortalcopy(*MARK);
2209 TAINT_NOT; /* Each item is independent */
2212 PL_stack_sp = newsp;
2215 /* Stack values are safe: */
2218 POPSUB(cx,sv); /* release CV and @_ ... */
2222 PL_curpm = newpm; /* ... and pop $1 et al */
2235 register PERL_CONTEXT *cx;
2246 if (PL_op->op_flags & OPf_SPECIAL) {
2247 cxix = dopoptoloop(cxstack_ix);
2249 DIE(aTHX_ "Can't \"last\" outside a loop block");
2252 cxix = dopoptolabel(cPVOP->op_pv);
2254 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2256 if (cxix < cxstack_ix)
2260 cxstack_ix++; /* temporarily protect top context */
2262 switch (CxTYPE(cx)) {
2263 case CXt_LOOP_LAZYIV:
2264 case CXt_LOOP_LAZYSV:
2266 case CXt_LOOP_PLAIN:
2268 newsp = PL_stack_base + cx->blk_loop.resetsp;
2269 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2273 nextop = cx->blk_sub.retop;
2277 nextop = cx->blk_eval.retop;
2281 nextop = cx->blk_sub.retop;
2284 DIE(aTHX_ "panic: last");
2288 if (gimme == G_SCALAR) {
2290 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2291 ? *SP : sv_mortalcopy(*SP);
2293 *++newsp = &PL_sv_undef;
2295 else if (gimme == G_ARRAY) {
2296 while (++MARK <= SP) {
2297 *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2298 ? *MARK : sv_mortalcopy(*MARK);
2299 TAINT_NOT; /* Each item is independent */
2307 /* Stack values are safe: */
2309 case CXt_LOOP_LAZYIV:
2310 case CXt_LOOP_PLAIN:
2311 case CXt_LOOP_LAZYSV:
2313 POPLOOP(cx); /* release loop vars ... */
2317 POPSUB(cx,sv); /* release CV and @_ ... */
2320 PL_curpm = newpm; /* ... and pop $1 et al */
2323 PERL_UNUSED_VAR(optype);
2324 PERL_UNUSED_VAR(gimme);
2332 register PERL_CONTEXT *cx;
2335 if (PL_op->op_flags & OPf_SPECIAL) {
2336 cxix = dopoptoloop(cxstack_ix);
2338 DIE(aTHX_ "Can't \"next\" outside a loop block");
2341 cxix = dopoptolabel(cPVOP->op_pv);
2343 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2345 if (cxix < cxstack_ix)
2348 /* clear off anything above the scope we're re-entering, but
2349 * save the rest until after a possible continue block */
2350 inner = PL_scopestack_ix;
2352 if (PL_scopestack_ix < inner)
2353 leave_scope(PL_scopestack[PL_scopestack_ix]);
2354 PL_curcop = cx->blk_oldcop;
2355 return CX_LOOP_NEXTOP_GET(cx);
2362 register PERL_CONTEXT *cx;
2366 if (PL_op->op_flags & OPf_SPECIAL) {
2367 cxix = dopoptoloop(cxstack_ix);
2369 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2372 cxix = dopoptolabel(cPVOP->op_pv);
2374 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2376 if (cxix < cxstack_ix)
2379 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2380 if (redo_op->op_type == OP_ENTER) {
2381 /* pop one less context to avoid $x being freed in while (my $x..) */
2383 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2384 redo_op = redo_op->op_next;
2388 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2389 LEAVE_SCOPE(oldsave);
2391 PL_curcop = cx->blk_oldcop;
2396 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2400 static const char too_deep[] = "Target of goto is too deeply nested";
2402 PERL_ARGS_ASSERT_DOFINDLABEL;
2405 Perl_croak(aTHX_ too_deep);
2406 if (o->op_type == OP_LEAVE ||
2407 o->op_type == OP_SCOPE ||
2408 o->op_type == OP_LEAVELOOP ||
2409 o->op_type == OP_LEAVESUB ||
2410 o->op_type == OP_LEAVETRY)
2412 *ops++ = cUNOPo->op_first;
2414 Perl_croak(aTHX_ too_deep);
2417 if (o->op_flags & OPf_KIDS) {
2419 /* First try all the kids at this level, since that's likeliest. */
2420 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2421 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2422 const char *kid_label = CopLABEL(kCOP);
2423 if (kid_label && strEQ(kid_label, label))
2427 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2428 if (kid == PL_lastgotoprobe)
2430 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2433 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2434 ops[-1]->op_type == OP_DBSTATE)
2439 if ((o = dofindlabel(kid, label, ops, oplimit)))
2452 register PERL_CONTEXT *cx;
2453 #define GOTO_DEPTH 64
2454 OP *enterops[GOTO_DEPTH];
2455 const char *label = NULL;
2456 const bool do_dump = (PL_op->op_type == OP_DUMP);
2457 static const char must_have_label[] = "goto must have label";
2459 if (PL_op->op_flags & OPf_STACKED) {
2460 SV * const sv = POPs;
2462 /* This egregious kludge implements goto &subroutine */
2463 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2465 register PERL_CONTEXT *cx;
2466 CV *cv = MUTABLE_CV(SvRV(sv));
2473 if (!CvROOT(cv) && !CvXSUB(cv)) {
2474 const GV * const gv = CvGV(cv);
2478 /* autoloaded stub? */
2479 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2481 autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2482 GvNAMELEN(gv), FALSE);
2483 if (autogv && (cv = GvCV(autogv)))
2485 tmpstr = sv_newmortal();
2486 gv_efullname3(tmpstr, gv, NULL);
2487 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2489 DIE(aTHX_ "Goto undefined subroutine");
2492 /* First do some returnish stuff. */
2493 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2495 cxix = dopoptosub(cxstack_ix);
2497 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2498 if (cxix < cxstack_ix)
2502 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2503 if (CxTYPE(cx) == CXt_EVAL) {
2505 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2507 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2509 else if (CxMULTICALL(cx))
2510 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2511 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2512 /* put @_ back onto stack */
2513 AV* av = cx->blk_sub.argarray;
2515 items = AvFILLp(av) + 1;
2516 EXTEND(SP, items+1); /* @_ could have been extended. */
2517 Copy(AvARRAY(av), SP + 1, items, SV*);
2518 SvREFCNT_dec(GvAV(PL_defgv));
2519 GvAV(PL_defgv) = cx->blk_sub.savearray;
2521 /* abandon @_ if it got reified */
2526 av_extend(av, items-1);
2528 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2531 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2532 AV* const av = GvAV(PL_defgv);
2533 items = AvFILLp(av) + 1;
2534 EXTEND(SP, items+1); /* @_ could have been extended. */
2535 Copy(AvARRAY(av), SP + 1, items, SV*);
2539 if (CxTYPE(cx) == CXt_SUB &&
2540 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2541 SvREFCNT_dec(cx->blk_sub.cv);
2542 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2543 LEAVE_SCOPE(oldsave);
2545 /* Now do some callish stuff. */
2547 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2549 OP* const retop = cx->blk_sub.retop;
2554 for (index=0; index<items; index++)
2555 sv_2mortal(SP[-index]);
2558 /* XS subs don't have a CxSUB, so pop it */
2559 POPBLOCK(cx, PL_curpm);
2560 /* Push a mark for the start of arglist */
2563 (void)(*CvXSUB(cv))(aTHX_ cv);
2568 AV* const padlist = CvPADLIST(cv);
2569 if (CxTYPE(cx) == CXt_EVAL) {
2570 PL_in_eval = CxOLD_IN_EVAL(cx);
2571 PL_eval_root = cx->blk_eval.old_eval_root;
2572 cx->cx_type = CXt_SUB;
2574 cx->blk_sub.cv = cv;
2575 cx->blk_sub.olddepth = CvDEPTH(cv);
2578 if (CvDEPTH(cv) < 2)
2579 SvREFCNT_inc_simple_void_NN(cv);
2581 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2582 sub_crush_depth(cv);
2583 pad_push(padlist, CvDEPTH(cv));
2586 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2589 AV *const av = MUTABLE_AV(PAD_SVl(0));
2591 cx->blk_sub.savearray = GvAV(PL_defgv);
2592 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2593 CX_CURPAD_SAVE(cx->blk_sub);
2594 cx->blk_sub.argarray = av;
2596 if (items >= AvMAX(av) + 1) {
2597 SV **ary = AvALLOC(av);
2598 if (AvARRAY(av) != ary) {
2599 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2602 if (items >= AvMAX(av) + 1) {
2603 AvMAX(av) = items - 1;
2604 Renew(ary,items+1,SV*);
2610 Copy(mark,AvARRAY(av),items,SV*);
2611 AvFILLp(av) = items - 1;
2612 assert(!AvREAL(av));
2614 /* transfer 'ownership' of refcnts to new @_ */
2624 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2625 Perl_get_db_sub(aTHX_ NULL, cv);
2627 CV * const gotocv = get_cvs("DB::goto", 0);
2629 PUSHMARK( PL_stack_sp );
2630 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2635 RETURNOP(CvSTART(cv));
2639 label = SvPV_nolen_const(sv);
2640 if (!(do_dump || *label))
2641 DIE(aTHX_ must_have_label);
2644 else if (PL_op->op_flags & OPf_SPECIAL) {
2646 DIE(aTHX_ must_have_label);
2649 label = cPVOP->op_pv;
2651 if (label && *label) {
2652 OP *gotoprobe = NULL;
2653 bool leaving_eval = FALSE;
2654 bool in_block = FALSE;
2655 PERL_CONTEXT *last_eval_cx = NULL;
2659 PL_lastgotoprobe = NULL;
2661 for (ix = cxstack_ix; ix >= 0; ix--) {
2663 switch (CxTYPE(cx)) {
2665 leaving_eval = TRUE;
2666 if (!CxTRYBLOCK(cx)) {
2667 gotoprobe = (last_eval_cx ?
2668 last_eval_cx->blk_eval.old_eval_root :
2673 /* else fall through */
2674 case CXt_LOOP_LAZYIV:
2675 case CXt_LOOP_LAZYSV:
2677 case CXt_LOOP_PLAIN:
2680 gotoprobe = cx->blk_oldcop->op_sibling;
2686 gotoprobe = cx->blk_oldcop->op_sibling;
2689 gotoprobe = PL_main_root;
2692 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
2693 gotoprobe = CvROOT(cx->blk_sub.cv);
2699 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2702 DIE(aTHX_ "panic: goto");
2703 gotoprobe = PL_main_root;
2707 retop = dofindlabel(gotoprobe, label,
2708 enterops, enterops + GOTO_DEPTH);
2712 PL_lastgotoprobe = gotoprobe;
2715 DIE(aTHX_ "Can't find label %s", label);
2717 /* if we're leaving an eval, check before we pop any frames
2718 that we're not going to punt, otherwise the error
2721 if (leaving_eval && *enterops && enterops[1]) {
2723 for (i = 1; enterops[i]; i++)
2724 if (enterops[i]->op_type == OP_ENTERITER)
2725 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2728 if (*enterops && enterops[1]) {
2729 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2731 deprecate("\"goto\" to jump into a construct");
2734 /* pop unwanted frames */
2736 if (ix < cxstack_ix) {
2743 oldsave = PL_scopestack[PL_scopestack_ix];
2744 LEAVE_SCOPE(oldsave);
2747 /* push wanted frames */
2749 if (*enterops && enterops[1]) {
2750 OP * const oldop = PL_op;
2751 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2752 for (; enterops[ix]; ix++) {
2753 PL_op = enterops[ix];
2754 /* Eventually we may want to stack the needed arguments
2755 * for each op. For now, we punt on the hard ones. */
2756 if (PL_op->op_type == OP_ENTERITER)
2757 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2758 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2766 if (!retop) retop = PL_main_start;
2768 PL_restartop = retop;
2769 PL_do_undump = TRUE;
2773 PL_restartop = 0; /* hmm, must be GNU unexec().. */
2774 PL_do_undump = FALSE;
2791 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2793 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2796 PL_exit_flags |= PERL_EXIT_EXPECTED;
2798 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
2799 if (anum || !(PL_minus_c && PL_madskills))
2804 PUSHs(&PL_sv_undef);
2811 S_save_lines(pTHX_ AV *array, SV *sv)
2813 const char *s = SvPVX_const(sv);
2814 const char * const send = SvPVX_const(sv) + SvCUR(sv);
2817 PERL_ARGS_ASSERT_SAVE_LINES;
2819 while (s && s < send) {
2821 SV * const tmpstr = newSV_type(SVt_PVMG);
2823 t = (const char *)memchr(s, '\n', send - s);
2829 sv_setpvn(tmpstr, s, t - s);
2830 av_store(array, line++, tmpstr);
2838 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
2840 0 is used as continue inside eval,
2842 3 is used for a die caught by an inner eval - continue inner loop
2844 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
2845 establish a local jmpenv to handle exception traps.
2850 S_docatch(pTHX_ OP *o)
2854 OP * const oldop = PL_op;
2858 assert(CATCH_GET == TRUE);
2865 assert(cxstack_ix >= 0);
2866 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2867 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
2872 /* die caught by an inner eval - continue inner loop */
2874 /* NB XXX we rely on the old popped CxEVAL still being at the top
2875 * of the stack; the way die_where() currently works, this
2876 * assumption is valid. In theory The cur_top_env value should be
2877 * returned in another global, the way retop (aka PL_restartop)
2879 assert(CxTYPE(&cxstack[cxstack_ix+1]) == CXt_EVAL);
2882 && cxstack[cxstack_ix+1].blk_eval.cur_top_env == PL_top_env)
2884 PL_op = PL_restartop;
2900 /* James Bond: Do you expect me to talk?
2901 Auric Goldfinger: No, Mr. Bond. I expect you to die.
2903 This code is an ugly hack, doesn't work with lexicals in subroutines that are
2904 called more than once, and is only used by regcomp.c, for (?{}) blocks.
2906 Currently it is not used outside the core code. Best if it stays that way.
2909 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
2910 /* sv Text to convert to OP tree. */
2911 /* startop op_free() this to undo. */
2912 /* code Short string id of the caller. */
2914 dVAR; dSP; /* Make POPBLOCK work. */
2920 char tbuf[TYPE_DIGITS(long) + 12 + 10];
2921 char *tmpbuf = tbuf;
2924 CV* runcv = NULL; /* initialise to avoid compiler warnings */
2927 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
2929 ENTER_with_name("eval");
2930 lex_start(sv, NULL, FALSE);
2932 /* switch to eval mode */
2934 if (IN_PERL_COMPILETIME) {
2935 SAVECOPSTASH_FREE(&PL_compiling);
2936 CopSTASH_set(&PL_compiling, PL_curstash);
2938 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2939 SV * const sv = sv_newmortal();
2940 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2941 code, (unsigned long)++PL_evalseq,
2942 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2947 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
2948 (unsigned long)++PL_evalseq);
2949 SAVECOPFILE_FREE(&PL_compiling);
2950 CopFILE_set(&PL_compiling, tmpbuf+2);
2951 SAVECOPLINE(&PL_compiling);
2952 CopLINE_set(&PL_compiling, 1);
2953 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2954 deleting the eval's FILEGV from the stash before gv_check() runs
2955 (i.e. before run-time proper). To work around the coredump that
2956 ensues, we always turn GvMULTI_on for any globals that were
2957 introduced within evals. See force_ident(). GSAR 96-10-12 */
2958 safestr = savepvn(tmpbuf, len);
2959 SAVEDELETE(PL_defstash, safestr, len);
2961 #ifdef OP_IN_REGISTER
2967 /* we get here either during compilation, or via pp_regcomp at runtime */
2968 runtime = IN_PERL_RUNTIME;
2970 runcv = find_runcv(NULL);
2973 PL_op->op_type = OP_ENTEREVAL;
2974 PL_op->op_flags = 0; /* Avoid uninit warning. */
2975 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
2979 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2981 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2982 POPBLOCK(cx,PL_curpm);
2985 (*startop)->op_type = OP_NULL;
2986 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2988 /* XXX DAPM do this properly one year */
2989 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
2990 LEAVE_with_name("eval");
2991 if (IN_PERL_COMPILETIME)
2992 CopHINTS_set(&PL_compiling, PL_hints);
2993 #ifdef OP_IN_REGISTER
2996 PERL_UNUSED_VAR(newsp);
2997 PERL_UNUSED_VAR(optype);
2999 return PL_eval_start;
3004 =for apidoc find_runcv
3006 Locate the CV corresponding to the currently executing sub or eval.
3007 If db_seqp is non_null, skip CVs that are in the DB package and populate
3008 *db_seqp with the cop sequence number at the point that the DB:: code was
3009 entered. (allows debuggers to eval in the scope of the breakpoint rather
3010 than in the scope of the debugger itself).
3016 Perl_find_runcv(pTHX_ U32 *db_seqp)
3022 *db_seqp = PL_curcop->cop_seq;
3023 for (si = PL_curstackinfo; si; si = si->si_prev) {
3025 for (ix = si->si_cxix; ix >= 0; ix--) {
3026 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3027 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3028 CV * const cv = cx->blk_sub.cv;
3029 /* skip DB:: code */
3030 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3031 *db_seqp = cx->blk_oldcop->cop_seq;
3036 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3044 /* Compile a require/do, an eval '', or a /(?{...})/.
3045 * In the last case, startop is non-null, and contains the address of
3046 * a pointer that should be set to the just-compiled code.
3047 * outside is the lexically enclosing CV (if any) that invoked us.
3048 * Returns a bool indicating whether the compile was successful; if so,
3049 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3050 * pushes undef (also croaks if startop != NULL).
3054 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3057 OP * const saveop = PL_op;
3059 PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
3060 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3065 SAVESPTR(PL_compcv);
3066 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3067 CvEVAL_on(PL_compcv);
3068 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3069 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3071 CvOUTSIDE_SEQ(PL_compcv) = seq;
3072 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3074 /* set up a scratch pad */
3076 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3077 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3081 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3083 /* make sure we compile in the right package */
3085 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3086 SAVESPTR(PL_curstash);
3087 PL_curstash = CopSTASH(PL_curcop);
3089 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3090 SAVESPTR(PL_beginav);
3091 PL_beginav = newAV();
3092 SAVEFREESV(PL_beginav);
3093 SAVESPTR(PL_unitcheckav);
3094 PL_unitcheckav = newAV();
3095 SAVEFREESV(PL_unitcheckav);
3098 SAVEBOOL(PL_madskills);
3102 /* try to compile it */
3104 PL_eval_root = NULL;
3105 PL_curcop = &PL_compiling;
3106 CopARYBASE_set(PL_curcop, 0);
3107 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3108 PL_in_eval |= EVAL_KEEPERR;
3111 if (yyparse() || PL_parser->error_count || !PL_eval_root) {
3112 SV **newsp; /* Used by POPBLOCK. */
3113 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
3114 I32 optype = 0; /* Might be reset by POPEVAL. */
3119 op_free(PL_eval_root);
3120 PL_eval_root = NULL;
3122 SP = PL_stack_base + POPMARK; /* pop original mark */
3124 POPBLOCK(cx,PL_curpm);
3128 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3130 msg = SvPVx_nolen_const(ERRSV);
3131 if (optype == OP_REQUIRE) {
3132 const SV * const nsv = cx->blk_eval.old_namesv;
3133 (void)hv_store(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv),
3135 Perl_croak(aTHX_ "%sCompilation failed in require",
3136 *msg ? msg : "Unknown error\n");
3139 POPBLOCK(cx,PL_curpm);
3141 Perl_croak(aTHX_ "%sCompilation failed in regexp",
3142 (*msg ? msg : "Unknown error\n"));
3146 sv_setpvs(ERRSV, "Compilation error");
3149 PERL_UNUSED_VAR(newsp);
3150 PUSHs(&PL_sv_undef);
3154 CopLINE_set(&PL_compiling, 0);
3156 *startop = PL_eval_root;
3158 SAVEFREEOP(PL_eval_root);
3160 /* Set the context for this new optree.
3161 * Propagate the context from the eval(). */
3162 if ((gimme & G_WANT) == G_VOID)
3163 scalarvoid(PL_eval_root);
3164 else if ((gimme & G_WANT) == G_ARRAY)
3167 scalar(PL_eval_root);
3169 DEBUG_x(dump_eval());
3171 /* Register with debugger: */
3172 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3173 CV * const cv = get_cvs("DB::postponed", 0);
3177 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3179 call_sv(MUTABLE_SV(cv), G_DISCARD);
3184 call_list(PL_scopestack_ix, PL_unitcheckav);
3186 /* compiled okay, so do it */
3188 CvDEPTH(PL_compcv) = 1;
3189 SP = PL_stack_base + POPMARK; /* pop original mark */
3190 PL_op = saveop; /* The caller may need it. */
3191 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3198 S_check_type_and_open(pTHX_ const char *name)
3201 const int st_rc = PerlLIO_stat(name, &st);
3203 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3205 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3209 return PerlIO_open(name, PERL_SCRIPT_MODE);
3212 #ifndef PERL_DISABLE_PMC
3214 S_doopen_pm(pTHX_ const char *name, const STRLEN namelen)
3218 PERL_ARGS_ASSERT_DOOPEN_PM;
3220 if (namelen > 3 && memEQs(name + namelen - 3, 3, ".pm")) {
3221 SV *const pmcsv = newSV(namelen + 2);
3222 char *const pmc = SvPVX(pmcsv);
3225 memcpy(pmc, name, namelen);
3227 pmc[namelen + 1] = '\0';
3229 if (PerlLIO_stat(pmc, &pmcstat) < 0) {
3230 fp = check_type_and_open(name);
3233 fp = check_type_and_open(pmc);
3235 SvREFCNT_dec(pmcsv);
3238 fp = check_type_and_open(name);
3243 # define doopen_pm(name, namelen) check_type_and_open(name)
3244 #endif /* !PERL_DISABLE_PMC */
3249 register PERL_CONTEXT *cx;
3256 int vms_unixname = 0;
3258 const char *tryname = NULL;
3260 const I32 gimme = GIMME_V;
3261 int filter_has_file = 0;
3262 PerlIO *tryrsfp = NULL;
3263 SV *filter_cache = NULL;
3264 SV *filter_state = NULL;
3265 SV *filter_sub = NULL;
3271 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3272 sv = new_version(sv);
3273 if (!sv_derived_from(PL_patchlevel, "version"))
3274 upg_version(PL_patchlevel, TRUE);
3275 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3276 if ( vcmp(sv,PL_patchlevel) <= 0 )
3277 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3278 SVfARG(vnormal(sv)), SVfARG(vnormal(PL_patchlevel)));
3281 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3284 SV * const req = SvRV(sv);
3285 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3287 /* get the left hand term */
3288 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3290 first = SvIV(*av_fetch(lav,0,0));
3291 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3292 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3293 || av_len(lav) > 1 /* FP with > 3 digits */
3294 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3296 DIE(aTHX_ "Perl %"SVf" required--this is only "
3297 "%"SVf", stopped", SVfARG(vnormal(req)),
3298 SVfARG(vnormal(PL_patchlevel)));
3300 else { /* probably 'use 5.10' or 'use 5.8' */
3305 second = SvIV(*av_fetch(lav,1,0));
3307 second /= second >= 600 ? 100 : 10;
3308 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3309 (int)first, (int)second);
3310 upg_version(hintsv, TRUE);
3312 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3313 "--this is only %"SVf", stopped",
3314 SVfARG(vnormal(req)),
3315 SVfARG(vnormal(sv_2mortal(hintsv))),
3316 SVfARG(vnormal(PL_patchlevel)));
3321 /* We do this only with use, not require. */
3323 /* If we request a version >= 5.9.5, load feature.pm with the
3324 * feature bundle that corresponds to the required version. */
3325 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
3326 SV *const importsv = vnormal(sv);
3327 *SvPVX_mutable(importsv) = ':';
3328 ENTER_with_name("load_feature");
3329 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
3330 LEAVE_with_name("load_feature");
3332 /* If a version >= 5.11.0 is requested, strictures are on by default! */
3334 vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
3335 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
3340 name = SvPV_const(sv, len);
3341 if (!(name && len > 0 && *name))
3342 DIE(aTHX_ "Null filename used");
3343 TAINT_PROPER("require");
3347 /* The key in the %ENV hash is in the syntax of file passed as the argument
3348 * usually this is in UNIX format, but sometimes in VMS format, which
3349 * can result in a module being pulled in more than once.
3350 * To prevent this, the key must be stored in UNIX format if the VMS
3351 * name can be translated to UNIX.
3353 if ((unixname = tounixspec(name, NULL)) != NULL) {
3354 unixlen = strlen(unixname);
3360 /* if not VMS or VMS name can not be translated to UNIX, pass it
3363 unixname = (char *) name;
3366 if (PL_op->op_type == OP_REQUIRE) {
3367 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3368 unixname, unixlen, 0);
3370 if (*svp != &PL_sv_undef)
3373 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3374 "Compilation failed in require", unixname);
3378 /* prepare to compile file */
3380 if (path_is_absolute(name)) {
3382 tryrsfp = doopen_pm(name, len);
3385 AV * const ar = GvAVn(PL_incgv);
3391 namesv = newSV_type(SVt_PV);
3392 for (i = 0; i <= AvFILL(ar); i++) {
3393 SV * const dirsv = *av_fetch(ar, i, TRUE);
3395 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3402 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3403 && !sv_isobject(loader))
3405 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3408 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3409 PTR2UV(SvRV(dirsv)), name);
3410 tryname = SvPVX_const(namesv);
3413 ENTER_with_name("call_INC");
3421 if (sv_isobject(loader))
3422 count = call_method("INC", G_ARRAY);
3424 count = call_sv(loader, G_ARRAY);
3427 /* Adjust file name if the hook has set an %INC entry */
3428 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3430 tryname = SvPV_nolen_const(*svp);
3439 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3440 && !isGV_with_GP(SvRV(arg))) {
3441 filter_cache = SvRV(arg);
3442 SvREFCNT_inc_simple_void_NN(filter_cache);
3449 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3453 if (isGV_with_GP(arg)) {
3454 IO * const io = GvIO((const GV *)arg);
3459 tryrsfp = IoIFP(io);
3460 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3461 PerlIO_close(IoOFP(io));
3472 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3474 SvREFCNT_inc_simple_void_NN(filter_sub);
3477 filter_state = SP[i];
3478 SvREFCNT_inc_simple_void(filter_state);
3482 if (!tryrsfp && (filter_cache || filter_sub)) {
3483 tryrsfp = PerlIO_open(BIT_BUCKET,
3491 LEAVE_with_name("call_INC");
3498 filter_has_file = 0;
3500 SvREFCNT_dec(filter_cache);
3501 filter_cache = NULL;
3504 SvREFCNT_dec(filter_state);
3505 filter_state = NULL;
3508 SvREFCNT_dec(filter_sub);
3513 if (!path_is_absolute(name)
3519 dir = SvPV_const(dirsv, dirlen);
3527 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3529 sv_setpv(namesv, unixdir);
3530 sv_catpv(namesv, unixname);
3532 # ifdef __SYMBIAN32__
3533 if (PL_origfilename[0] &&
3534 PL_origfilename[1] == ':' &&
3535 !(dir[0] && dir[1] == ':'))
3536 Perl_sv_setpvf(aTHX_ namesv,
3541 Perl_sv_setpvf(aTHX_ namesv,
3545 /* The equivalent of
3546 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3547 but without the need to parse the format string, or
3548 call strlen on either pointer, and with the correct
3549 allocation up front. */
3551 char *tmp = SvGROW(namesv, dirlen + len + 2);
3553 memcpy(tmp, dir, dirlen);
3556 /* name came from an SV, so it will have a '\0' at the
3557 end that we can copy as part of this memcpy(). */
3558 memcpy(tmp, name, len + 1);
3560 SvCUR_set(namesv, dirlen + len + 1);
3562 /* Don't even actually have to turn SvPOK_on() as we
3563 access it directly with SvPVX() below. */
3567 TAINT_PROPER("require");
3568 tryname = SvPVX_const(namesv);
3569 tryrsfp = doopen_pm(tryname, SvCUR(namesv));
3571 if (tryname[0] == '.' && tryname[1] == '/') {
3573 while (*++tryname == '/');
3577 else if (errno == EMFILE)
3578 /* no point in trying other paths if out of handles */
3585 SAVECOPFILE_FREE(&PL_compiling);
3586 CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3587 SvREFCNT_dec(namesv);
3589 if (PL_op->op_type == OP_REQUIRE) {
3590 const char *msgstr = name;
3591 if(errno == EMFILE) {
3593 = sv_2mortal(Perl_newSVpvf(aTHX_ "%s: %s", msgstr,
3595 msgstr = SvPV_nolen_const(msg);
3597 if (namesv) { /* did we lookup @INC? */
3598 AV * const ar = GvAVn(PL_incgv);
3600 SV * const msg = sv_2mortal(Perl_newSVpvf(aTHX_
3601 "%s in @INC%s%s (@INC contains:",
3603 (instr(msgstr, ".h ")
3604 ? " (change .h to .ph maybe?)" : ""),
3605 (instr(msgstr, ".ph ")
3606 ? " (did you run h2ph?)" : "")
3609 for (i = 0; i <= AvFILL(ar); i++) {
3610 sv_catpvs(msg, " ");
3611 sv_catsv(msg, *av_fetch(ar, i, TRUE));
3613 sv_catpvs(msg, ")");
3614 msgstr = SvPV_nolen_const(msg);
3617 DIE(aTHX_ "Can't locate %s", msgstr);
3623 SETERRNO(0, SS_NORMAL);
3625 /* Assume success here to prevent recursive requirement. */
3626 /* name is never assigned to again, so len is still strlen(name) */
3627 /* Check whether a hook in @INC has already filled %INC */
3629 (void)hv_store(GvHVn(PL_incgv),
3630 unixname, unixlen, newSVpv(CopFILE(&PL_compiling),0),0);
3632 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
3634 (void)hv_store(GvHVn(PL_incgv),
3635 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
3638 ENTER_with_name("eval");
3640 lex_start(NULL, tryrsfp, TRUE);
3644 hv_clear(GvHV(PL_hintgv));
3646 SAVECOMPILEWARNINGS();
3647 if (PL_dowarn & G_WARN_ALL_ON)
3648 PL_compiling.cop_warnings = pWARN_ALL ;
3649 else if (PL_dowarn & G_WARN_ALL_OFF)
3650 PL_compiling.cop_warnings = pWARN_NONE ;
3652 PL_compiling.cop_warnings = pWARN_STD ;
3654 if (filter_sub || filter_cache) {
3655 /* We can use the SvPV of the filter PVIO itself as our cache, rather
3656 than hanging another SV from it. In turn, filter_add() optionally
3657 takes the SV to use as the filter (or creates a new SV if passed
3658 NULL), so simply pass in whatever value filter_cache has. */
3659 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
3660 IoLINES(datasv) = filter_has_file;
3661 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
3662 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
3665 /* switch to eval mode */
3666 PUSHBLOCK(cx, CXt_EVAL, SP);
3668 cx->blk_eval.retop = PL_op->op_next;
3670 SAVECOPLINE(&PL_compiling);
3671 CopLINE_set(&PL_compiling, 0);
3675 /* Store and reset encoding. */
3676 encoding = PL_encoding;
3679 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
3680 op = DOCATCH(PL_eval_start);
3682 op = PL_op->op_next;
3684 /* Restore encoding. */
3685 PL_encoding = encoding;
3690 /* This is a op added to hold the hints hash for
3691 pp_entereval. The hash can be modified by the code
3692 being eval'ed, so we return a copy instead. */
3698 mXPUSHs(MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ MUTABLE_HV(cSVOP_sv))));
3706 register PERL_CONTEXT *cx;
3708 const I32 gimme = GIMME_V;
3709 const U32 was = PL_breakable_sub_gen;
3710 char tbuf[TYPE_DIGITS(long) + 12];
3711 char *tmpbuf = tbuf;
3715 HV *saved_hh = NULL;
3717 if (PL_op->op_private & OPpEVAL_HAS_HH) {
3718 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
3722 TAINT_IF(SvTAINTED(sv));
3723 TAINT_PROPER("eval");
3725 ENTER_with_name("eval");
3726 lex_start(sv, NULL, FALSE);
3729 /* switch to eval mode */
3731 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3732 SV * const temp_sv = sv_newmortal();
3733 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
3734 (unsigned long)++PL_evalseq,
3735 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3736 tmpbuf = SvPVX(temp_sv);
3737 len = SvCUR(temp_sv);
3740 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
3741 SAVECOPFILE_FREE(&PL_compiling);
3742 CopFILE_set(&PL_compiling, tmpbuf+2);
3743 SAVECOPLINE(&PL_compiling);
3744 CopLINE_set(&PL_compiling, 1);
3745 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3746 deleting the eval's FILEGV from the stash before gv_check() runs
3747 (i.e. before run-time proper). To work around the coredump that
3748 ensues, we always turn GvMULTI_on for any globals that were
3749 introduced within evals. See force_ident(). GSAR 96-10-12 */
3751 PL_hints = PL_op->op_targ;
3753 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3754 SvREFCNT_dec(GvHV(PL_hintgv));
3755 GvHV(PL_hintgv) = saved_hh;
3757 SAVECOMPILEWARNINGS();
3758 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3759 if (PL_compiling.cop_hints_hash) {
3760 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
3762 PL_compiling.cop_hints_hash = PL_curcop->cop_hints_hash;
3763 if (PL_compiling.cop_hints_hash) {
3765 PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
3766 HINTS_REFCNT_UNLOCK;
3768 /* special case: an eval '' executed within the DB package gets lexically
3769 * placed in the first non-DB CV rather than the current CV - this
3770 * allows the debugger to execute code, find lexicals etc, in the
3771 * scope of the code being debugged. Passing &seq gets find_runcv
3772 * to do the dirty work for us */
3773 runcv = find_runcv(&seq);
3775 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3777 cx->blk_eval.retop = PL_op->op_next;
3779 /* prepare to compile string */
3781 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
3782 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
3785 if (doeval(gimme, NULL, runcv, seq)) {
3786 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3787 ? (PERLDB_LINE || PERLDB_SAVESRC)
3788 : PERLDB_SAVESRC_NOSUBS) {
3789 /* Retain the filegv we created. */
3791 char *const safestr = savepvn(tmpbuf, len);
3792 SAVEDELETE(PL_defstash, safestr, len);
3794 return DOCATCH(PL_eval_start);
3796 /* We have already left the scope set up earler thanks to the LEAVE
3798 if (was != PL_breakable_sub_gen /* Some subs defined here. */
3799 ? (PERLDB_LINE || PERLDB_SAVESRC)
3800 : PERLDB_SAVESRC_INVALID) {
3801 /* Retain the filegv we created. */
3803 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
3805 return PL_op->op_next;
3816 register PERL_CONTEXT *cx;
3818 const U8 save_flags = PL_op -> op_flags;
3823 retop = cx->blk_eval.retop;
3826 if (gimme == G_VOID)
3828 else if (gimme == G_SCALAR) {
3831 if (SvFLAGS(TOPs) & SVs_TEMP)
3834 *MARK = sv_mortalcopy(TOPs);
3838 *MARK = &PL_sv_undef;
3843 /* in case LEAVE wipes old return values */
3844 for (mark = newsp + 1; mark <= SP; mark++) {
3845 if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3846 *mark = sv_mortalcopy(*mark);
3847 TAINT_NOT; /* Each item is independent */
3851 PL_curpm = newpm; /* Don't pop $1 et al till now */
3854 assert(CvDEPTH(PL_compcv) == 1);
3856 CvDEPTH(PL_compcv) = 0;
3859 if (optype == OP_REQUIRE &&
3860 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3862 /* Unassume the success we assumed earlier. */
3863 SV * const nsv = cx->blk_eval.old_namesv;
3864 (void)hv_delete(GvHVn(PL_incgv), SvPVX_const(nsv), SvCUR(nsv), G_DISCARD);
3865 retop = Perl_die(aTHX_ "%"SVf" did not return a true value", SVfARG(nsv));
3866 /* die_where() did LEAVE, or we won't be here */
3869 LEAVE_with_name("eval");
3870 if (!(save_flags & OPf_SPECIAL)) {
3878 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
3879 close to the related Perl_create_eval_scope. */
3881 Perl_delete_eval_scope(pTHX)
3886 register PERL_CONTEXT *cx;
3892 LEAVE_with_name("eval_scope");
3893 PERL_UNUSED_VAR(newsp);
3894 PERL_UNUSED_VAR(gimme);
3895 PERL_UNUSED_VAR(optype);
3898 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
3899 also needed by Perl_fold_constants. */
3901 Perl_create_eval_scope(pTHX_ U32 flags)
3904 const I32 gimme = GIMME_V;
3906 ENTER_with_name("eval_scope");
3909 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
3912 PL_in_eval = EVAL_INEVAL;
3913 if (flags & G_KEEPERR)
3914 PL_in_eval |= EVAL_KEEPERR;
3917 if (flags & G_FAKINGEVAL) {
3918 PL_eval_root = PL_op; /* Only needed so that goto works right. */
3926 PERL_CONTEXT * const cx = create_eval_scope(0);
3927 cx->blk_eval.retop = cLOGOP->op_other->op_next;
3928 return DOCATCH(PL_op->op_next);
3937 register PERL_CONTEXT *cx;
3942 PERL_UNUSED_VAR(optype);
3945 if (gimme == G_VOID)
3947 else if (gimme == G_SCALAR) {
3951 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3954 *MARK = sv_mortalcopy(TOPs);
3958 *MARK = &PL_sv_undef;
3963 /* in case LEAVE wipes old return values */
3965 for (mark = newsp + 1; mark <= SP; mark++) {
3966 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3967 *mark = sv_mortalcopy(*mark);
3968 TAINT_NOT; /* Each item is independent */
3972 PL_curpm = newpm; /* Don't pop $1 et al till now */
3974 LEAVE_with_name("eval_scope");
3982 register PERL_CONTEXT *cx;
3983 const I32 gimme = GIMME_V;
3985 ENTER_with_name("given");
3988 sv_setsv(PAD_SV(PL_op->op_targ), POPs);
3990 PUSHBLOCK(cx, CXt_GIVEN, SP);
3999 register PERL_CONTEXT *cx;
4003 PERL_UNUSED_CONTEXT;
4006 assert(CxTYPE(cx) == CXt_GIVEN);
4011 PL_curpm = newpm; /* pop $1 et al */
4013 LEAVE_with_name("given");
4018 /* Helper routines used by pp_smartmatch */
4020 S_make_matcher(pTHX_ REGEXP *re)
4023 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4025 PERL_ARGS_ASSERT_MAKE_MATCHER;
4027 PM_SETRE(matcher, ReREFCNT_inc(re));
4029 SAVEFREEOP((OP *) matcher);
4030 ENTER_with_name("matcher"); SAVETMPS;
4036 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4041 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4043 PL_op = (OP *) matcher;
4048 return (SvTRUEx(POPs));
4052 S_destroy_matcher(pTHX_ PMOP *matcher)
4056 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4057 PERL_UNUSED_ARG(matcher);
4060 LEAVE_with_name("matcher");
4063 /* Do a smart match */
4066 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4067 return do_smartmatch(NULL, NULL);
4070 /* This version of do_smartmatch() implements the
4071 * table of smart matches that is found in perlsyn.
4074 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other)
4079 bool object_on_left = FALSE;
4080 SV *e = TOPs; /* e is for 'expression' */
4081 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4083 /* First of all, handle overload magic of the rightmost argument */
4086 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4087 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4089 tmpsv = amagic_call(d, e, smart_amg, 0);
4096 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4099 SP -= 2; /* Pop the values */
4101 /* Take care only to invoke mg_get() once for each argument.
4102 * Currently we do this by copying the SV if it's magical. */
4105 d = sv_mortalcopy(d);
4112 e = sv_mortalcopy(e);
4116 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4123 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4124 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4125 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4127 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4128 object_on_left = TRUE;
4131 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4133 if (object_on_left) {
4134 goto sm_any_sub; /* Treat objects like scalars */
4136 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4137 /* Test sub truth for each key */
4139 bool andedresults = TRUE;
4140 HV *hv = (HV*) SvRV(d);
4141 I32 numkeys = hv_iterinit(hv);
4142 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4145 while ( (he = hv_iternext(hv)) ) {
4146 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4147 ENTER_with_name("smartmatch_hash_key_test");
4150 PUSHs(hv_iterkeysv(he));
4152 c = call_sv(e, G_SCALAR);
4155 andedresults = FALSE;
4157 andedresults = SvTRUEx(POPs) && andedresults;
4159 LEAVE_with_name("smartmatch_hash_key_test");
4166 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4167 /* Test sub truth for each element */
4169 bool andedresults = TRUE;
4170 AV *av = (AV*) SvRV(d);
4171 const I32 len = av_len(av);
4172 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4175 for (i = 0; i <= len; ++i) {
4176 SV * const * const svp = av_fetch(av, i, FALSE);
4177 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4178 ENTER_with_name("smartmatch_array_elem_test");
4184 c = call_sv(e, G_SCALAR);
4187 andedresults = FALSE;
4189 andedresults = SvTRUEx(POPs) && andedresults;
4191 LEAVE_with_name("smartmatch_array_elem_test");
4200 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4201 ENTER_with_name("smartmatch_coderef");
4206 c = call_sv(e, G_SCALAR);
4210 else if (SvTEMP(TOPs))
4211 SvREFCNT_inc_void(TOPs);
4213 LEAVE_with_name("smartmatch_coderef");
4218 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4219 if (object_on_left) {
4220 goto sm_any_hash; /* Treat objects like scalars */
4222 else if (!SvOK(d)) {
4223 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4226 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4227 /* Check that the key-sets are identical */
4229 HV *other_hv = MUTABLE_HV(SvRV(d));
4231 bool other_tied = FALSE;
4232 U32 this_key_count = 0,
4233 other_key_count = 0;
4234 HV *hv = MUTABLE_HV(SvRV(e));
4236 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4237 /* Tied hashes don't know how many keys they have. */
4238 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4241 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4242 HV * const temp = other_hv;
4247 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4250 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4253 /* The hashes have the same number of keys, so it suffices
4254 to check that one is a subset of the other. */
4255 (void) hv_iterinit(hv);
4256 while ( (he = hv_iternext(hv)) ) {
4257 SV *key = hv_iterkeysv(he);
4259 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4262 if(!hv_exists_ent(other_hv, key, 0)) {
4263 (void) hv_iterinit(hv); /* reset iterator */
4269 (void) hv_iterinit(other_hv);
4270 while ( hv_iternext(other_hv) )
4274 other_key_count = HvUSEDKEYS(other_hv);
4276 if (this_key_count != other_key_count)
4281 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4282 AV * const other_av = MUTABLE_AV(SvRV(d));
4283 const I32 other_len = av_len(other_av) + 1;
4285 HV *hv = MUTABLE_HV(SvRV(e));
4287 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4288 for (i = 0; i < other_len; ++i) {
4289 SV ** const svp = av_fetch(other_av, i, FALSE);
4290 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4291 if (svp) { /* ??? When can this not happen? */
4292 if (hv_exists_ent(hv, *svp, 0))
4298 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4299 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4302 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4304 HV *hv = MUTABLE_HV(SvRV(e));
4306 (void) hv_iterinit(hv);
4307 while ( (he = hv_iternext(hv)) ) {
4308 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4309 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4310 (void) hv_iterinit(hv);
4311 destroy_matcher(matcher);
4315 destroy_matcher(matcher);
4321 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4322 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4329 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4330 if (object_on_left) {
4331 goto sm_any_array; /* Treat objects like scalars */
4333 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4334 AV * const other_av = MUTABLE_AV(SvRV(e));
4335 const I32 other_len = av_len(other_av) + 1;
4338 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4339 for (i = 0; i < other_len; ++i) {
4340 SV ** const svp = av_fetch(other_av, i, FALSE);
4342 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4343 if (svp) { /* ??? When can this not happen? */
4344 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4350 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4351 AV *other_av = MUTABLE_AV(SvRV(d));
4352 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4353 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4357 const I32 other_len = av_len(other_av);
4359 if (NULL == seen_this) {
4360 seen_this = newHV();
4361 (void) sv_2mortal(MUTABLE_SV(seen_this));
4363 if (NULL == seen_other) {
4364 seen_other = newHV();
4365 (void) sv_2mortal(MUTABLE_SV(seen_other));
4367 for(i = 0; i <= other_len; ++i) {
4368 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4369 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4371 if (!this_elem || !other_elem) {
4372 if ((this_elem && SvOK(*this_elem))
4373 || (other_elem && SvOK(*other_elem)))
4376 else if (hv_exists_ent(seen_this,
4377 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4378 hv_exists_ent(seen_other,
4379 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4381 if (*this_elem != *other_elem)
4385 (void)hv_store_ent(seen_this,
4386 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4388 (void)hv_store_ent(seen_other,
4389 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4395 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4396 (void) do_smartmatch(seen_this, seen_other);
4398 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4407 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4408 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4411 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4412 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4415 for(i = 0; i <= this_len; ++i) {
4416 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4417 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4418 if (svp && matcher_matches_sv(matcher, *svp)) {
4419 destroy_matcher(matcher);
4423 destroy_matcher(matcher);
4427 else if (!SvOK(d)) {
4428 /* undef ~~ array */
4429 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4432 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4433 for (i = 0; i <= this_len; ++i) {
4434 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4435 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4436 if (!svp || !SvOK(*svp))
4445 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4447 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4448 for (i = 0; i <= this_len; ++i) {
4449 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4456 /* infinite recursion isn't supposed to happen here */
4457 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4458 (void) do_smartmatch(NULL, NULL);
4460 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4469 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4470 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4471 SV *t = d; d = e; e = t;
4472 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4475 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4476 SV *t = d; d = e; e = t;
4477 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4478 goto sm_regex_array;
4481 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4483 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4485 PUSHs(matcher_matches_sv(matcher, d)
4488 destroy_matcher(matcher);
4493 /* See if there is overload magic on left */
4494 else if (object_on_left && SvAMAGIC(d)) {
4496 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4497 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4500 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4508 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4511 else if (!SvOK(d)) {
4512 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4513 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4518 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4519 DEBUG_M(if (SvNIOK(e))
4520 Perl_deb(aTHX_ " applying rule Any-Num\n");
4522 Perl_deb(aTHX_ " applying rule Num-numish\n");
4524 /* numeric comparison */
4527 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4538 /* As a last resort, use string comparison */
4539 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4548 register PERL_CONTEXT *cx;
4549 const I32 gimme = GIMME_V;
4551 /* This is essentially an optimization: if the match
4552 fails, we don't want to push a context and then
4553 pop it again right away, so we skip straight
4554 to the op that follows the leavewhen.
4556 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4557 return cLOGOP->op_other->op_next;
4559 ENTER_with_name("eval");
4562 PUSHBLOCK(cx, CXt_WHEN, SP);
4571 register PERL_CONTEXT *cx;
4577 assert(CxTYPE(cx) == CXt_WHEN);
4582 PL_curpm = newpm; /* pop $1 et al */
4584 LEAVE_with_name("eval");
4592 register PERL_CONTEXT *cx;
4595 cxix = dopoptowhen(cxstack_ix);
4597 DIE(aTHX_ "Can't \"continue\" outside a when block");
4598 if (cxix < cxstack_ix)
4601 /* clear off anything above the scope we're re-entering */
4602 inner = PL_scopestack_ix;
4604 if (PL_scopestack_ix < inner)
4605 leave_scope(PL_scopestack[PL_scopestack_ix]);
4606 PL_curcop = cx->blk_oldcop;
4607 return cx->blk_givwhen.leave_op;
4614 register PERL_CONTEXT *cx;
4617 cxix = dopoptogiven(cxstack_ix);
4619 if (PL_op->op_flags & OPf_SPECIAL)
4620 DIE(aTHX_ "Can't use when() outside a topicalizer");
4622 DIE(aTHX_ "Can't \"break\" outside a given block");
4624 if (CxFOREACH(&cxstack[cxix]) && (0 == (PL_op->op_flags & OPf_SPECIAL)))
4625 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
4627 if (cxix < cxstack_ix)
4630 /* clear off anything above the scope we're re-entering */
4631 inner = PL_scopestack_ix;
4633 if (PL_scopestack_ix < inner)
4634 leave_scope(PL_scopestack[PL_scopestack_ix]);
4635 PL_curcop = cx->blk_oldcop;
4638 return CX_LOOP_NEXTOP_GET(cx);
4640 return cx->blk_givwhen.leave_op;
4644 S_doparseform(pTHX_ SV *sv)
4647 register char *s = SvPV_force(sv, len);
4648 register char * const send = s + len;
4649 register char *base = NULL;
4650 register I32 skipspaces = 0;
4651 bool noblank = FALSE;
4652 bool repeat = FALSE;
4653 bool postspace = FALSE;
4659 bool unchopnum = FALSE;
4660 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
4662 PERL_ARGS_ASSERT_DOPARSEFORM;
4665 Perl_croak(aTHX_ "Null picture in formline");
4667 /* estimate the buffer size needed */
4668 for (base = s; s <= send; s++) {
4669 if (*s == '\n' || *s == '@' || *s == '^')
4675 Newx(fops, maxops, U32);
4680 *fpc++ = FF_LINEMARK;
4681 noblank = repeat = FALSE;
4699 case ' ': case '\t':
4706 } /* else FALL THROUGH */
4714 *fpc++ = FF_LITERAL;
4722 *fpc++ = (U16)skipspaces;
4726 *fpc++ = FF_NEWLINE;
4730 arg = fpc - linepc + 1;
4737 *fpc++ = FF_LINEMARK;
4738 noblank = repeat = FALSE;
4747 ischop = s[-1] == '^';
4753 arg = (s - base) - 1;
4755 *fpc++ = FF_LITERAL;
4763 *fpc++ = 2; /* skip the @* or ^* */
4765 *fpc++ = FF_LINESNGL;
4768 *fpc++ = FF_LINEGLOB;
4770 else if (*s == '#' || (*s == '.' && s[1] == '#')) {
4771 arg = ischop ? 512 : 0;
4776 const char * const f = ++s;
4779 arg |= 256 + (s - f);
4781 *fpc++ = s - base; /* fieldsize for FETCH */
4782 *fpc++ = FF_DECIMAL;
4784 unchopnum |= ! ischop;
4786 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
4787 arg = ischop ? 512 : 0;
4789 s++; /* skip the '0' first */
4793 const char * const f = ++s;
4796 arg |= 256 + (s - f);
4798 *fpc++ = s - base; /* fieldsize for FETCH */
4799 *fpc++ = FF_0DECIMAL;
4801 unchopnum |= ! ischop;
4805 bool ismore = FALSE;
4808 while (*++s == '>') ;
4809 prespace = FF_SPACE;
4811 else if (*s == '|') {
4812 while (*++s == '|') ;
4813 prespace = FF_HALFSPACE;
4818 while (*++s == '<') ;
4821 if (*s == '.' && s[1] == '.' && s[2] == '.') {
4825 *fpc++ = s - base; /* fieldsize for FETCH */
4827 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
4830 *fpc++ = (U16)prespace;
4844 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
4846 { /* need to jump to the next word */
4848 z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
4849 SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
4850 s = SvPVX(sv) + SvCUR(sv) + z;
4852 Copy(fops, s, arg, U32);
4854 sv_magic(sv, NULL, PERL_MAGIC_fm, NULL, 0);
4857 if (unchopnum && repeat)
4858 DIE(aTHX_ "Repeated format line will never terminate (~~ and @#)");
4864 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
4866 /* Can value be printed in fldsize chars, using %*.*f ? */
4870 int intsize = fldsize - (value < 0 ? 1 : 0);
4877 while (intsize--) pwr *= 10.0;
4878 while (frcsize--) eps /= 10.0;
4881 if (value + eps >= pwr)
4884 if (value - eps <= -pwr)
4891 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
4894 SV * const datasv = FILTER_DATA(idx);
4895 const int filter_has_file = IoLINES(datasv);
4896 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
4897 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
4902 char *prune_from = NULL;
4903 bool read_from_cache = FALSE;
4906 PERL_ARGS_ASSERT_RUN_USER_FILTER;
4908 assert(maxlen >= 0);
4911 /* I was having segfault trouble under Linux 2.2.5 after a
4912 parse error occured. (Had to hack around it with a test
4913 for PL_parser->error_count == 0.) Solaris doesn't segfault --
4914 not sure where the trouble is yet. XXX */
4917 SV *const cache = datasv;
4920 const char *cache_p = SvPV(cache, cache_len);
4924 /* Running in block mode and we have some cached data already.
4926 if (cache_len >= umaxlen) {
4927 /* In fact, so much data we don't even need to call
4932 const char *const first_nl =
4933 (const char *)memchr(cache_p, '\n', cache_len);
4935 take = first_nl + 1 - cache_p;
4939 sv_catpvn(buf_sv, cache_p, take);
4940 sv_chop(cache, cache_p + take);
4941 /* Definately not EOF */
4945 sv_catsv(buf_sv, cache);
4947 umaxlen -= cache_len;
4950 read_from_cache = TRUE;
4954 /* Filter API says that the filter appends to the contents of the buffer.
4955 Usually the buffer is "", so the details don't matter. But if it's not,
4956 then clearly what it contains is already filtered by this filter, so we
4957 don't want to pass it in a second time.
4958 I'm going to use a mortal in case the upstream filter croaks. */
4959 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
4960 ? sv_newmortal() : buf_sv;
4961 SvUPGRADE(upstream, SVt_PV);
4963 if (filter_has_file) {
4964 status = FILTER_READ(idx+1, upstream, 0);
4967 if (filter_sub && status >= 0) {
4971 ENTER_with_name("call_filter_sub");
4976 DEFSV_set(upstream);
4980 PUSHs(filter_state);
4983 count = call_sv(filter_sub, G_SCALAR);
4995 LEAVE_with_name("call_filter_sub");
4998 if(SvOK(upstream)) {
4999 got_p = SvPV(upstream, got_len);
5001 if (got_len > umaxlen) {
5002 prune_from = got_p + umaxlen;
5005 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5006 if (first_nl && first_nl + 1 < got_p + got_len) {
5007 /* There's a second line here... */
5008 prune_from = first_nl + 1;
5013 /* Oh. Too long. Stuff some in our cache. */
5014 STRLEN cached_len = got_p + got_len - prune_from;
5015 SV *const cache = datasv;
5018 /* Cache should be empty. */
5019 assert(!SvCUR(cache));
5022 sv_setpvn(cache, prune_from, cached_len);
5023 /* If you ask for block mode, you may well split UTF-8 characters.
5024 "If it breaks, you get to keep both parts"
5025 (Your code is broken if you don't put them back together again
5026 before something notices.) */
5027 if (SvUTF8(upstream)) {
5030 SvCUR_set(upstream, got_len - cached_len);
5032 /* Can't yet be EOF */
5037 /* If they are at EOF but buf_sv has something in it, then they may never
5038 have touched the SV upstream, so it may be undefined. If we naively
5039 concatenate it then we get a warning about use of uninitialised value.
5041 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5042 sv_catsv(buf_sv, upstream);
5046 IoLINES(datasv) = 0;
5048 SvREFCNT_dec(filter_state);
5049 IoTOP_GV(datasv) = NULL;
5052 SvREFCNT_dec(filter_sub);
5053 IoBOTTOM_GV(datasv) = NULL;
5055 filter_del(S_run_user_filter);
5057 if (status == 0 && read_from_cache) {
5058 /* If we read some data from the cache (and by getting here it implies
5059 that we emptied the cache) then we aren't yet at EOF, and mustn't
5060 report that to our caller. */
5066 /* perhaps someone can come up with a better name for
5067 this? it is not really "absolute", per se ... */
5069 S_path_is_absolute(const char *name)
5071 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5073 if (PERL_FILE_IS_ABSOLUTE(name)
5075 || (*name == '.' && ((name[1] == '/' ||
5076 (name[1] == '.' && name[2] == '/'))
5077 || (name[1] == '\\' ||
5078 ( name[1] == '.' && name[2] == '\\')))
5081 || (*name == '.' && (name[1] == '/' ||
5082 (name[1] == '.' && name[2] == '/')))
5094 * c-indentation-style: bsd
5096 * indent-tabs-mode: t
5099 * ex: set ts=8 sts=4 sw=4 noet: