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
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
39 #define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
46 const PERL_CONTEXT *cx;
49 if (PL_op->op_private & OPpOFFBYONE) {
50 if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
53 cxix = dopoptosub(cxstack_ix);
59 switch (cx->blk_gimme) {
72 /* XXXX Should store the old value to allow for tie/overload - and
73 restore in regcomp, where marked with XXXX. */
83 register PMOP *pm = (PMOP*)cLOGOP->op_other;
87 /* prevent recompiling under /o and ithreads. */
88 #if defined(USE_ITHREADS)
89 if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm)) {
90 if (PL_op->op_flags & OPf_STACKED) {
100 #define tryAMAGICregexp(rx) \
103 if (SvROK(rx) && SvAMAGIC(rx)) { \
104 SV *sv = AMG_CALLunary(rx, regexp_amg); \
108 if (SvTYPE(sv) != SVt_REGEXP) \
109 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
116 if (PL_op->op_flags & OPf_STACKED) {
117 /* multiple args; concatenate them */
119 tmpstr = PAD_SV(ARGTARG);
120 sv_setpvs(tmpstr, "");
121 while (++MARK <= SP) {
125 tryAMAGICregexp(msv);
127 if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
128 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
130 sv_setsv(tmpstr, sv);
133 sv_catsv_nomg(tmpstr, msv);
140 tryAMAGICregexp(tmpstr);
143 #undef tryAMAGICregexp
146 SV * const sv = SvRV(tmpstr);
147 if (SvTYPE(sv) == SVt_REGEXP)
150 else if (SvTYPE(tmpstr) == SVt_REGEXP)
151 re = (REGEXP*) tmpstr;
154 /* The match's LHS's get-magic might need to access this op's reg-
155 exp (as is sometimes the case with $'; see bug 70764). So we
156 must call get-magic now before we replace the regexp. Hopeful-
157 ly this hack can be replaced with the approach described at
158 http://www.nntp.perl.org/group/perl.perl5.porters/2007/03
159 /msg122415.html some day. */
160 if(pm->op_type == OP_MATCH) {
162 const bool was_tainted = PL_tainted;
163 if (pm->op_flags & OPf_STACKED)
165 else if (pm->op_private & OPpTARGET_MY)
166 lhs = PAD_SV(pm->op_targ);
169 /* Restore the previous value of PL_tainted (which may have been
170 modified by get-magic), to avoid incorrectly setting the
171 RXf_TAINTED flag further down. */
172 PL_tainted = was_tainted;
175 re = reg_temp_copy(NULL, re);
176 ReREFCNT_dec(PM_GETRE(pm));
181 const char *t = SvOK(tmpstr) ? SvPV_nomg_const(tmpstr, len) : "";
184 assert (re != (REGEXP*) &PL_sv_undef);
186 /* Check against the last compiled regexp. */
187 if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
188 memNE(RX_PRECOMP(re), t, len))
190 const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
191 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
195 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
197 PM_SETRE(pm, NULL); /* crucial if regcomp aborts */
199 } else if (PL_curcop->cop_hints_hash) {
200 SV *ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0);
201 if (ptr && SvIOK(ptr) && SvIV(ptr))
202 eng = INT2PTR(regexp_engine*,SvIV(ptr));
205 if (PL_op->op_flags & OPf_SPECIAL)
206 PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
208 if (!DO_UTF8(tmpstr) && 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);
217 else if (SvAMAGIC(tmpstr) || SvGMAGICAL(tmpstr)) {
218 /* make a copy to avoid extra stringifies */
219 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
223 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
225 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
227 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
228 inside tie/overload accessors. */
234 #ifndef INCOMPLETE_TAINTS
237 SvTAINTED_on((SV*)re);
238 RX_EXTFLAGS(re) |= RXf_TAINTED;
243 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
247 #if !defined(USE_ITHREADS)
248 /* can't change the optree at runtime either */
249 /* PMf_KEEP is handled differently under threads to avoid these problems */
250 if (pm->op_pmflags & PMf_KEEP) {
251 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
252 cLOGOP->op_first->op_next = PL_op->op_next;
262 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
263 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
264 register SV * const dstr = cx->sb_dstr;
265 register char *s = cx->sb_s;
266 register char *m = cx->sb_m;
267 char *orig = cx->sb_orig;
268 register REGEXP * const rx = cx->sb_rx;
270 REGEXP *old = PM_GETRE(pm);
277 PM_SETRE(pm,ReREFCNT_inc(rx));
280 rxres_restore(&cx->sb_rxres, rx);
281 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
283 if (cx->sb_iters++) {
284 const I32 saviters = cx->sb_iters;
285 if (cx->sb_iters > cx->sb_maxiters)
286 DIE(aTHX_ "Substitution loop");
288 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
290 /* See "how taint works" above pp_subst() */
292 cx->sb_rxtainted |= SUBST_TAINT_REPL;
293 sv_catsv_nomg(dstr, POPs);
294 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
298 /* I believe that we can't set REXEC_SCREAM here if
299 SvSCREAM(cx->sb_targ) is true because SvPVX(cx->sb_targ) isn't always
300 equal to s. [See the comment before Perl_re_intuit_start(), which is
301 called from Perl_regexec_flags(), which says that it should be when
302 SvSCREAM() is true.] s, cx->sb_strend and orig will be consistent
303 with SvPVX(cx->sb_targ), as substconst doesn't modify cx->sb_targ
305 if (CxONCE(cx) || s < orig ||
306 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
307 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
308 ((cx->sb_rflags & REXEC_COPY_STR)
309 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
310 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
312 SV *targ = cx->sb_targ;
314 assert(cx->sb_strend >= s);
315 if(cx->sb_strend > s) {
316 if (DO_UTF8(dstr) && !SvUTF8(targ))
317 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
319 sv_catpvn(dstr, s, cx->sb_strend - s);
321 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
322 cx->sb_rxtainted |= SUBST_TAINT_PAT;
324 if (pm->op_pmflags & PMf_NONDESTRUCT) {
326 /* From here on down we're using the copy, and leaving the
327 original untouched. */
332 sv_force_normal_flags(targ, SV_COW_DROP_PV);
337 SvPV_set(targ, SvPVX(dstr));
338 SvCUR_set(targ, SvCUR(dstr));
339 SvLEN_set(targ, SvLEN(dstr));
342 SvPV_set(dstr, NULL);
344 mPUSHi(saviters - 1);
346 (void)SvPOK_only_UTF8(targ);
349 /* update the taint state of various various variables in
350 * preparation for final exit.
351 * See "how taint works" above pp_subst() */
353 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
354 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
355 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
357 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
359 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
360 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
362 SvTAINTED_on(TOPs); /* taint return value */
363 /* needed for mg_set below */
364 PL_tainted = cBOOL(cx->sb_rxtainted &
365 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
368 /* PL_tainted must be correctly set for this mg_set */
371 LEAVE_SCOPE(cx->sb_oldsave);
373 RETURNOP(pm->op_next);
376 cx->sb_iters = saviters;
378 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
381 cx->sb_orig = orig = RX_SUBBEG(rx);
383 cx->sb_strend = s + (cx->sb_strend - m);
385 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
387 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
388 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
390 sv_catpvn(dstr, s, m-s);
392 cx->sb_s = RX_OFFS(rx)[0].end + orig;
393 { /* Update the pos() information. */
395 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
397 SvUPGRADE(sv, SVt_PVMG);
398 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
399 #ifdef PERL_OLD_COPY_ON_WRITE
401 sv_force_normal_flags(sv, 0);
403 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
406 mg->mg_len = m - orig;
409 (void)ReREFCNT_inc(rx);
410 /* update the taint state of various various variables in preparation
411 * for calling the code block.
412 * See "how taint works" above pp_subst() */
414 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
415 cx->sb_rxtainted |= SUBST_TAINT_PAT;
417 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
418 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
419 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
421 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
423 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
424 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
425 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
426 ? cx->sb_dstr : cx->sb_targ);
429 rxres_save(&cx->sb_rxres, rx);
431 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
435 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
440 PERL_ARGS_ASSERT_RXRES_SAVE;
443 if (!p || p[1] < RX_NPARENS(rx)) {
444 #ifdef PERL_OLD_COPY_ON_WRITE
445 i = 7 + RX_NPARENS(rx) * 2;
447 i = 6 + RX_NPARENS(rx) * 2;
456 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
457 RX_MATCH_COPIED_off(rx);
459 #ifdef PERL_OLD_COPY_ON_WRITE
460 *p++ = PTR2UV(RX_SAVED_COPY(rx));
461 RX_SAVED_COPY(rx) = NULL;
464 *p++ = RX_NPARENS(rx);
466 *p++ = PTR2UV(RX_SUBBEG(rx));
467 *p++ = (UV)RX_SUBLEN(rx);
468 for (i = 0; i <= RX_NPARENS(rx); ++i) {
469 *p++ = (UV)RX_OFFS(rx)[i].start;
470 *p++ = (UV)RX_OFFS(rx)[i].end;
475 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
480 PERL_ARGS_ASSERT_RXRES_RESTORE;
483 RX_MATCH_COPY_FREE(rx);
484 RX_MATCH_COPIED_set(rx, *p);
487 #ifdef PERL_OLD_COPY_ON_WRITE
488 if (RX_SAVED_COPY(rx))
489 SvREFCNT_dec (RX_SAVED_COPY(rx));
490 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
494 RX_NPARENS(rx) = *p++;
496 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
497 RX_SUBLEN(rx) = (I32)(*p++);
498 for (i = 0; i <= RX_NPARENS(rx); ++i) {
499 RX_OFFS(rx)[i].start = (I32)(*p++);
500 RX_OFFS(rx)[i].end = (I32)(*p++);
505 S_rxres_free(pTHX_ void **rsp)
507 UV * const p = (UV*)*rsp;
509 PERL_ARGS_ASSERT_RXRES_FREE;
514 void *tmp = INT2PTR(char*,*p);
517 PoisonFree(*p, 1, sizeof(*p));
519 Safefree(INT2PTR(char*,*p));
521 #ifdef PERL_OLD_COPY_ON_WRITE
523 SvREFCNT_dec (INT2PTR(SV*,p[1]));
531 #define FORM_NUM_BLANK (1<<30)
532 #define FORM_NUM_POINT (1<<29)
536 dVAR; dSP; dMARK; dORIGMARK;
537 register SV * const tmpForm = *++MARK;
538 SV *formsv; /* contains text of original format */
539 register U32 *fpc; /* format ops program counter */
540 register char *t; /* current append position in target string */
541 const char *f; /* current position in format string */
543 register SV *sv = NULL; /* current item */
544 const char *item = NULL;/* string value of current item */
545 I32 itemsize = 0; /* length of current item, possibly truncated */
546 I32 fieldsize = 0; /* width of current field */
547 I32 lines = 0; /* number of lines that have been output */
548 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
549 const char *chophere = NULL; /* where to chop current item */
550 STRLEN linemark = 0; /* pos of start of line in output */
552 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
554 STRLEN linemax; /* estimate of output size in bytes */
555 bool item_is_utf8 = FALSE;
556 bool targ_is_utf8 = FALSE;
559 U8 *source; /* source of bytes to append */
560 STRLEN to_copy; /* how may bytes to append */
561 char trans; /* what chars to translate */
563 mg = doparseform(tmpForm);
565 fpc = (U32*)mg->mg_ptr;
566 /* the actual string the format was compiled from.
567 * with overload etc, this may not match tmpForm */
571 SvPV_force(PL_formtarget, len);
572 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
573 SvTAINTED_on(PL_formtarget);
574 if (DO_UTF8(PL_formtarget))
576 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
577 t = SvGROW(PL_formtarget, len + linemax + 1);
578 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
580 f = SvPV_const(formsv, len);
584 const char *name = "???";
587 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
588 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
589 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
590 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
591 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
593 case FF_CHECKNL: name = "CHECKNL"; break;
594 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
595 case FF_SPACE: name = "SPACE"; break;
596 case FF_HALFSPACE: name = "HALFSPACE"; break;
597 case FF_ITEM: name = "ITEM"; break;
598 case FF_CHOP: name = "CHOP"; break;
599 case FF_LINEGLOB: name = "LINEGLOB"; break;
600 case FF_NEWLINE: name = "NEWLINE"; break;
601 case FF_MORE: name = "MORE"; break;
602 case FF_LINEMARK: name = "LINEMARK"; break;
603 case FF_END: name = "END"; break;
604 case FF_0DECIMAL: name = "0DECIMAL"; break;
605 case FF_LINESNGL: name = "LINESNGL"; break;
608 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
610 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
614 linemark = t - SvPVX(PL_formtarget);
624 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
640 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
643 SvTAINTED_on(PL_formtarget);
649 const char *s = item = SvPV_const(sv, len);
652 itemsize = sv_len_utf8(sv);
653 if (itemsize != (I32)len) {
655 if (itemsize > fieldsize) {
656 itemsize = fieldsize;
657 itembytes = itemsize;
658 sv_pos_u2b(sv, &itembytes, 0);
662 send = chophere = s + itembytes;
672 sv_pos_b2u(sv, &itemsize);
676 item_is_utf8 = FALSE;
677 if (itemsize > fieldsize)
678 itemsize = fieldsize;
679 send = chophere = s + itemsize;
693 const char *s = item = SvPV_const(sv, len);
696 itemsize = sv_len_utf8(sv);
697 if (itemsize != (I32)len) {
699 if (itemsize <= fieldsize) {
700 const char *send = chophere = s + itemsize;
713 itemsize = fieldsize;
714 itembytes = itemsize;
715 sv_pos_u2b(sv, &itembytes, 0);
716 send = chophere = s + itembytes;
717 while (s < send || (s == send && isSPACE(*s))) {
727 if (strchr(PL_chopset, *s))
732 itemsize = chophere - item;
733 sv_pos_b2u(sv, &itemsize);
739 item_is_utf8 = FALSE;
740 if (itemsize <= fieldsize) {
741 const char *const send = chophere = s + itemsize;
754 itemsize = fieldsize;
755 send = chophere = s + itemsize;
756 while (s < send || (s == send && isSPACE(*s))) {
766 if (strchr(PL_chopset, *s))
771 itemsize = chophere - item;
777 arg = fieldsize - itemsize;
786 arg = fieldsize - itemsize;
800 /* convert to_copy from chars to bytes */
804 to_copy = s - source;
810 const char *s = chophere;
824 const bool oneline = fpc[-1] == FF_LINESNGL;
825 const char *s = item = SvPV_const(sv, len);
826 const char *const send = s + len;
828 item_is_utf8 = DO_UTF8(sv);
839 to_copy = s - SvPVX_const(sv) - 1;
853 /* append to_copy bytes from source to PL_formstring.
854 * item_is_utf8 implies source is utf8.
855 * if trans, translate certain characters during the copy */
860 SvCUR_set(PL_formtarget,
861 t - SvPVX_const(PL_formtarget));
863 if (targ_is_utf8 && !item_is_utf8) {
864 source = tmp = bytes_to_utf8(source, &to_copy);
866 if (item_is_utf8 && !targ_is_utf8) {
868 /* Upgrade targ to UTF8, and then we reduce it to
869 a problem we have a simple solution for.
870 Don't need get magic. */
871 sv_utf8_upgrade_nomg(PL_formtarget);
873 /* re-calculate linemark */
874 s = (U8*)SvPVX(PL_formtarget);
875 /* the bytes we initially allocated to append the
876 * whole line may have been gobbled up during the
877 * upgrade, so allocate a whole new line's worth
882 linemark = s - (U8*)SvPVX(PL_formtarget);
884 /* Easy. They agree. */
885 assert (item_is_utf8 == targ_is_utf8);
888 /* @* and ^* are the only things that can exceed
889 * the linemax, so grow by the output size, plus
890 * a whole new form's worth in case of any further
892 grow = linemax + to_copy;
894 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
895 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
897 Copy(source, t, to_copy, char);
899 /* blank out ~ or control chars, depending on trans.
900 * works on bytes not chars, so relies on not
901 * matching utf8 continuation bytes */
903 U8 *send = s + to_copy;
906 if (trans == '~' ? (ch == '~') :
919 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
927 #if defined(USE_LONG_DOUBLE)
929 ((arg & FORM_NUM_POINT) ?
930 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
933 ((arg & FORM_NUM_POINT) ?
934 "%#0*.*f" : "%0*.*f");
939 #if defined(USE_LONG_DOUBLE)
941 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
944 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
947 /* If the field is marked with ^ and the value is undefined,
949 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
957 /* overflow evidence */
958 if (num_overflow(value, fieldsize, arg)) {
964 /* Formats aren't yet marked for locales, so assume "yes". */
966 STORE_NUMERIC_STANDARD_SET_LOCAL();
967 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
968 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
969 RESTORE_NUMERIC_STANDARD();
976 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
984 if (arg) { /* repeat until fields exhausted? */
990 t = SvPVX(PL_formtarget) + linemark;
997 const char *s = chophere;
998 const char *send = item + len;
1000 while (isSPACE(*s) && (s < send))
1005 arg = fieldsize - itemsize;
1012 if (strnEQ(s1," ",3)) {
1013 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1024 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
1026 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1028 SvUTF8_on(PL_formtarget);
1029 FmLINES(PL_formtarget) += lines;
1031 if (fpc[-1] == FF_BLANK)
1032 RETURNOP(cLISTOP->op_first);
1044 if (PL_stack_base + *PL_markstack_ptr == SP) {
1046 if (GIMME_V == G_SCALAR)
1048 RETURNOP(PL_op->op_next->op_next);
1050 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1051 Perl_pp_pushmark(aTHX); /* push dst */
1052 Perl_pp_pushmark(aTHX); /* push src */
1053 ENTER_with_name("grep"); /* enter outer scope */
1056 if (PL_op->op_private & OPpGREP_LEX)
1057 SAVESPTR(PAD_SVl(PL_op->op_targ));
1060 ENTER_with_name("grep_item"); /* enter inner scope */
1063 src = PL_stack_base[*PL_markstack_ptr];
1065 if (PL_op->op_private & OPpGREP_LEX)
1066 PAD_SVl(PL_op->op_targ) = src;
1071 if (PL_op->op_type == OP_MAPSTART)
1072 Perl_pp_pushmark(aTHX); /* push top */
1073 return ((LOGOP*)PL_op->op_next)->op_other;
1079 const I32 gimme = GIMME_V;
1080 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1086 /* first, move source pointer to the next item in the source list */
1087 ++PL_markstack_ptr[-1];
1089 /* if there are new items, push them into the destination list */
1090 if (items && gimme != G_VOID) {
1091 /* might need to make room back there first */
1092 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1093 /* XXX this implementation is very pessimal because the stack
1094 * is repeatedly extended for every set of items. Is possible
1095 * to do this without any stack extension or copying at all
1096 * by maintaining a separate list over which the map iterates
1097 * (like foreach does). --gsar */
1099 /* everything in the stack after the destination list moves
1100 * towards the end the stack by the amount of room needed */
1101 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1103 /* items to shift up (accounting for the moved source pointer) */
1104 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1106 /* This optimization is by Ben Tilly and it does
1107 * things differently from what Sarathy (gsar)
1108 * is describing. The downside of this optimization is
1109 * that leaves "holes" (uninitialized and hopefully unused areas)
1110 * to the Perl stack, but on the other hand this
1111 * shouldn't be a problem. If Sarathy's idea gets
1112 * implemented, this optimization should become
1113 * irrelevant. --jhi */
1115 shift = count; /* Avoid shifting too often --Ben Tilly */
1119 dst = (SP += shift);
1120 PL_markstack_ptr[-1] += shift;
1121 *PL_markstack_ptr += shift;
1125 /* copy the new items down to the destination list */
1126 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1127 if (gimme == G_ARRAY) {
1128 /* add returned items to the collection (making mortal copies
1129 * if necessary), then clear the current temps stack frame
1130 * *except* for those items. We do this splicing the items
1131 * into the start of the tmps frame (so some items may be on
1132 * the tmps stack twice), then moving PL_tmps_floor above
1133 * them, then freeing the frame. That way, the only tmps that
1134 * accumulate over iterations are the return values for map.
1135 * We have to do to this way so that everything gets correctly
1136 * freed if we die during the map.
1140 /* make space for the slice */
1141 EXTEND_MORTAL(items);
1142 tmpsbase = PL_tmps_floor + 1;
1143 Move(PL_tmps_stack + tmpsbase,
1144 PL_tmps_stack + tmpsbase + items,
1145 PL_tmps_ix - PL_tmps_floor,
1147 PL_tmps_ix += items;
1152 sv = sv_mortalcopy(sv);
1154 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1156 /* clear the stack frame except for the items */
1157 PL_tmps_floor += items;
1159 /* FREETMPS may have cleared the TEMP flag on some of the items */
1162 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1165 /* scalar context: we don't care about which values map returns
1166 * (we use undef here). And so we certainly don't want to do mortal
1167 * copies of meaningless values. */
1168 while (items-- > 0) {
1170 *dst-- = &PL_sv_undef;
1178 LEAVE_with_name("grep_item"); /* exit inner scope */
1181 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1183 (void)POPMARK; /* pop top */
1184 LEAVE_with_name("grep"); /* exit outer scope */
1185 (void)POPMARK; /* pop src */
1186 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1187 (void)POPMARK; /* pop dst */
1188 SP = PL_stack_base + POPMARK; /* pop original mark */
1189 if (gimme == G_SCALAR) {
1190 if (PL_op->op_private & OPpGREP_LEX) {
1191 SV* sv = sv_newmortal();
1192 sv_setiv(sv, items);
1200 else if (gimme == G_ARRAY)
1207 ENTER_with_name("grep_item"); /* enter inner scope */
1210 /* set $_ to the new source item */
1211 src = PL_stack_base[PL_markstack_ptr[-1]];
1213 if (PL_op->op_private & OPpGREP_LEX)
1214 PAD_SVl(PL_op->op_targ) = src;
1218 RETURNOP(cLOGOP->op_other);
1227 if (GIMME == G_ARRAY)
1229 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1230 return cLOGOP->op_other;
1240 if (GIMME == G_ARRAY) {
1241 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1245 SV * const targ = PAD_SV(PL_op->op_targ);
1248 if (PL_op->op_private & OPpFLIP_LINENUM) {
1249 if (GvIO(PL_last_in_gv)) {
1250 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1253 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1255 flip = SvIV(sv) == SvIV(GvSV(gv));
1261 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1262 if (PL_op->op_flags & OPf_SPECIAL) {
1270 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1273 sv_setpvs(TARG, "");
1279 /* This code tries to decide if "$left .. $right" should use the
1280 magical string increment, or if the range is numeric (we make
1281 an exception for .."0" [#18165]). AMS 20021031. */
1283 #define RANGE_IS_NUMERIC(left,right) ( \
1284 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1285 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1286 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1287 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1288 && (!SvOK(right) || looks_like_number(right))))
1294 if (GIMME == G_ARRAY) {
1300 if (RANGE_IS_NUMERIC(left,right)) {
1303 if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) ||
1304 (SvOK(right) && SvNV_nomg(right) > IV_MAX))
1305 DIE(aTHX_ "Range iterator outside integer range");
1306 i = SvIV_nomg(left);
1307 max = SvIV_nomg(right);
1316 SV * const sv = sv_2mortal(newSViv(i++));
1322 const char * const lpv = SvPV_nomg_const(left, llen);
1323 const char * const tmps = SvPV_nomg_const(right, len);
1325 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1326 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1328 if (strEQ(SvPVX_const(sv),tmps))
1330 sv = sv_2mortal(newSVsv(sv));
1337 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1341 if (PL_op->op_private & OPpFLIP_LINENUM) {
1342 if (GvIO(PL_last_in_gv)) {
1343 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1346 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1347 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1355 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1356 sv_catpvs(targ, "E0");
1366 static const char * const context_name[] = {
1368 NULL, /* CXt_WHEN never actually needs "block" */
1369 NULL, /* CXt_BLOCK never actually needs "block" */
1370 NULL, /* CXt_GIVEN never actually needs "block" */
1371 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1372 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1373 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1374 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1382 S_dopoptolabel(pTHX_ const char *label)
1387 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1389 for (i = cxstack_ix; i >= 0; i--) {
1390 register const PERL_CONTEXT * const cx = &cxstack[i];
1391 switch (CxTYPE(cx)) {
1397 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1398 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1399 if (CxTYPE(cx) == CXt_NULL)
1402 case CXt_LOOP_LAZYIV:
1403 case CXt_LOOP_LAZYSV:
1405 case CXt_LOOP_PLAIN:
1407 const char *cx_label = CxLABEL(cx);
1408 if (!cx_label || strNE(label, cx_label) ) {
1409 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1410 (long)i, cx_label));
1413 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1424 Perl_dowantarray(pTHX)
1427 const I32 gimme = block_gimme();
1428 return (gimme == G_VOID) ? G_SCALAR : gimme;
1432 Perl_block_gimme(pTHX)
1435 const I32 cxix = dopoptosub(cxstack_ix);
1439 switch (cxstack[cxix].blk_gimme) {
1447 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1454 Perl_is_lvalue_sub(pTHX)
1457 const I32 cxix = dopoptosub(cxstack_ix);
1458 assert(cxix >= 0); /* We should only be called from inside subs */
1460 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1461 return CxLVAL(cxstack + cxix);
1466 /* only used by PUSHSUB */
1468 Perl_was_lvalue_sub(pTHX)
1471 const I32 cxix = dopoptosub(cxstack_ix-1);
1472 assert(cxix >= 0); /* We should only be called from inside subs */
1474 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1475 return CxLVAL(cxstack + cxix);
1481 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1486 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1488 for (i = startingblock; i >= 0; i--) {
1489 register const PERL_CONTEXT * const cx = &cxstk[i];
1490 switch (CxTYPE(cx)) {
1496 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1504 S_dopoptoeval(pTHX_ I32 startingblock)
1508 for (i = startingblock; i >= 0; i--) {
1509 register const PERL_CONTEXT *cx = &cxstack[i];
1510 switch (CxTYPE(cx)) {
1514 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1522 S_dopoptoloop(pTHX_ I32 startingblock)
1526 for (i = startingblock; i >= 0; i--) {
1527 register const PERL_CONTEXT * const cx = &cxstack[i];
1528 switch (CxTYPE(cx)) {
1534 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1535 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1536 if ((CxTYPE(cx)) == CXt_NULL)
1539 case CXt_LOOP_LAZYIV:
1540 case CXt_LOOP_LAZYSV:
1542 case CXt_LOOP_PLAIN:
1543 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1551 S_dopoptogiven(pTHX_ I32 startingblock)
1555 for (i = startingblock; i >= 0; i--) {
1556 register const PERL_CONTEXT *cx = &cxstack[i];
1557 switch (CxTYPE(cx)) {
1561 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1563 case CXt_LOOP_PLAIN:
1564 assert(!CxFOREACHDEF(cx));
1566 case CXt_LOOP_LAZYIV:
1567 case CXt_LOOP_LAZYSV:
1569 if (CxFOREACHDEF(cx)) {
1570 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1579 S_dopoptowhen(pTHX_ I32 startingblock)
1583 for (i = startingblock; i >= 0; i--) {
1584 register const PERL_CONTEXT *cx = &cxstack[i];
1585 switch (CxTYPE(cx)) {
1589 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1597 Perl_dounwind(pTHX_ I32 cxix)
1602 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1605 while (cxstack_ix > cxix) {
1607 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1608 DEBUG_CX("UNWIND"); \
1609 /* Note: we don't need to restore the base context info till the end. */
1610 switch (CxTYPE(cx)) {
1613 continue; /* not break */
1621 case CXt_LOOP_LAZYIV:
1622 case CXt_LOOP_LAZYSV:
1624 case CXt_LOOP_PLAIN:
1635 PERL_UNUSED_VAR(optype);
1639 Perl_qerror(pTHX_ SV *err)
1643 PERL_ARGS_ASSERT_QERROR;
1646 if (PL_in_eval & EVAL_KEEPERR) {
1647 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1651 sv_catsv(ERRSV, err);
1654 sv_catsv(PL_errors, err);
1656 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1658 ++PL_parser->error_count;
1662 Perl_die_unwind(pTHX_ SV *msv)
1665 SV *exceptsv = sv_mortalcopy(msv);
1666 U8 in_eval = PL_in_eval;
1667 PERL_ARGS_ASSERT_DIE_UNWIND;
1674 * Historically, perl used to set ERRSV ($@) early in the die
1675 * process and rely on it not getting clobbered during unwinding.
1676 * That sucked, because it was liable to get clobbered, so the
1677 * setting of ERRSV used to emit the exception from eval{} has
1678 * been moved to much later, after unwinding (see just before
1679 * JMPENV_JUMP below). However, some modules were relying on the
1680 * early setting, by examining $@ during unwinding to use it as
1681 * a flag indicating whether the current unwinding was caused by
1682 * an exception. It was never a reliable flag for that purpose,
1683 * being totally open to false positives even without actual
1684 * clobberage, but was useful enough for production code to
1685 * semantically rely on it.
1687 * We'd like to have a proper introspective interface that
1688 * explicitly describes the reason for whatever unwinding
1689 * operations are currently in progress, so that those modules
1690 * work reliably and $@ isn't further overloaded. But we don't
1691 * have one yet. In its absence, as a stopgap measure, ERRSV is
1692 * now *additionally* set here, before unwinding, to serve as the
1693 * (unreliable) flag that it used to.
1695 * This behaviour is temporary, and should be removed when a
1696 * proper way to detect exceptional unwinding has been developed.
1697 * As of 2010-12, the authors of modules relying on the hack
1698 * are aware of the issue, because the modules failed on
1699 * perls 5.13.{1..7} which had late setting of $@ without this
1700 * early-setting hack.
1702 if (!(in_eval & EVAL_KEEPERR)) {
1703 SvTEMP_off(exceptsv);
1704 sv_setsv(ERRSV, exceptsv);
1707 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1708 && PL_curstackinfo->si_prev)
1717 register PERL_CONTEXT *cx;
1720 JMPENV *restartjmpenv;
1723 if (cxix < cxstack_ix)
1726 POPBLOCK(cx,PL_curpm);
1727 if (CxTYPE(cx) != CXt_EVAL) {
1729 const char* message = SvPVx_const(exceptsv, msglen);
1730 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1731 PerlIO_write(Perl_error_log, message, msglen);
1735 namesv = cx->blk_eval.old_namesv;
1736 oldcop = cx->blk_oldcop;
1737 restartjmpenv = cx->blk_eval.cur_top_env;
1738 restartop = cx->blk_eval.retop;
1740 if (gimme == G_SCALAR)
1741 *++newsp = &PL_sv_undef;
1742 PL_stack_sp = newsp;
1746 /* LEAVE could clobber PL_curcop (see save_re_context())
1747 * XXX it might be better to find a way to avoid messing with
1748 * PL_curcop in save_re_context() instead, but this is a more
1749 * minimal fix --GSAR */
1752 if (optype == OP_REQUIRE) {
1753 (void)hv_store(GvHVn(PL_incgv),
1754 SvPVX_const(namesv),
1755 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1757 /* note that unlike pp_entereval, pp_require isn't
1758 * supposed to trap errors. So now that we've popped the
1759 * EVAL that pp_require pushed, and processed the error
1760 * message, rethrow the error */
1761 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1762 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1765 if (in_eval & EVAL_KEEPERR) {
1766 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1770 sv_setsv(ERRSV, exceptsv);
1772 PL_restartjmpenv = restartjmpenv;
1773 PL_restartop = restartop;
1779 write_to_stderr(exceptsv);
1786 dVAR; dSP; dPOPTOPssrl;
1787 if (SvTRUE(left) != SvTRUE(right))
1794 =for apidoc caller_cx
1796 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1797 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1798 information returned to Perl by C<caller>. Note that XSUBs don't get a
1799 stack frame, so C<caller_cx(0, NULL)> will return information for the
1800 immediately-surrounding Perl code.
1802 This function skips over the automatic calls to C<&DB::sub> made on the
1803 behalf of the debugger. If the stack frame requested was a sub called by
1804 C<DB::sub>, the return value will be the frame for the call to
1805 C<DB::sub>, since that has the correct line number/etc. for the call
1806 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1807 frame for the sub call itself.
1812 const PERL_CONTEXT *
1813 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1815 register I32 cxix = dopoptosub(cxstack_ix);
1816 register const PERL_CONTEXT *cx;
1817 register const PERL_CONTEXT *ccstack = cxstack;
1818 const PERL_SI *top_si = PL_curstackinfo;
1821 /* we may be in a higher stacklevel, so dig down deeper */
1822 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1823 top_si = top_si->si_prev;
1824 ccstack = top_si->si_cxstack;
1825 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1829 /* caller() should not report the automatic calls to &DB::sub */
1830 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1831 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1835 cxix = dopoptosub_at(ccstack, cxix - 1);
1838 cx = &ccstack[cxix];
1839 if (dbcxp) *dbcxp = cx;
1841 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1842 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1843 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1844 field below is defined for any cx. */
1845 /* caller() should not report the automatic calls to &DB::sub */
1846 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1847 cx = &ccstack[dbcxix];
1857 register const PERL_CONTEXT *cx;
1858 const PERL_CONTEXT *dbcx;
1860 const HEK *stash_hek;
1862 bool has_arg = MAXARG && TOPs;
1870 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1872 if (GIMME != G_ARRAY) {
1879 stash_hek = HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop));
1880 if (GIMME != G_ARRAY) {
1883 PUSHs(&PL_sv_undef);
1886 sv_sethek(TARG, stash_hek);
1895 PUSHs(&PL_sv_undef);
1898 sv_sethek(TARG, stash_hek);
1901 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1902 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1905 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1906 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1907 /* So is ccstack[dbcxix]. */
1909 SV * const sv = newSV(0);
1910 gv_efullname3(sv, cvgv, NULL);
1912 PUSHs(boolSV(CxHASARGS(cx)));
1915 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1916 PUSHs(boolSV(CxHASARGS(cx)));
1920 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1923 gimme = (I32)cx->blk_gimme;
1924 if (gimme == G_VOID)
1925 PUSHs(&PL_sv_undef);
1927 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1928 if (CxTYPE(cx) == CXt_EVAL) {
1930 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1931 PUSHs(cx->blk_eval.cur_text);
1935 else if (cx->blk_eval.old_namesv) {
1936 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1939 /* eval BLOCK (try blocks have old_namesv == 0) */
1941 PUSHs(&PL_sv_undef);
1942 PUSHs(&PL_sv_undef);
1946 PUSHs(&PL_sv_undef);
1947 PUSHs(&PL_sv_undef);
1949 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1950 && CopSTASH_eq(PL_curcop, PL_debstash))
1952 AV * const ary = cx->blk_sub.argarray;
1953 const int off = AvARRAY(ary) - AvALLOC(ary);
1955 Perl_init_dbargs(aTHX);
1957 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1958 av_extend(PL_dbargs, AvFILLp(ary) + off);
1959 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1960 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1962 /* XXX only hints propagated via op_private are currently
1963 * visible (others are not easily accessible, since they
1964 * use the global PL_hints) */
1965 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1968 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1970 if (old_warnings == pWARN_NONE ||
1971 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1972 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1973 else if (old_warnings == pWARN_ALL ||
1974 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1975 /* Get the bit mask for $warnings::Bits{all}, because
1976 * it could have been extended by warnings::register */
1978 HV * const bits = get_hv("warnings::Bits", 0);
1979 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1980 mask = newSVsv(*bits_all);
1983 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1987 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1991 PUSHs(cx->blk_oldcop->cop_hints_hash ?
1992 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2001 const char * const tmps =
2002 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
2003 sv_reset(tmps, CopSTASH(PL_curcop));
2008 /* like pp_nextstate, but used instead when the debugger is active */
2013 PL_curcop = (COP*)PL_op;
2014 TAINT_NOT; /* Each statement is presumed innocent */
2015 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2020 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2021 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2024 register PERL_CONTEXT *cx;
2025 const I32 gimme = G_ARRAY;
2027 GV * const gv = PL_DBgv;
2028 register CV * const cv = GvCV(gv);
2031 DIE(aTHX_ "No DB::DB routine defined");
2033 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2034 /* don't do recursive DB::DB call */
2049 (void)(*CvXSUB(cv))(aTHX_ cv);
2056 PUSHBLOCK(cx, CXt_SUB, SP);
2058 cx->blk_sub.retop = PL_op->op_next;
2061 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2062 RETURNOP(CvSTART(cv));
2070 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2073 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2075 if (flags & SVs_PADTMP) {
2076 flags &= ~SVs_PADTMP;
2079 if (gimme == G_SCALAR) {
2081 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2082 ? *SP : sv_mortalcopy(*SP);
2084 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2087 *++MARK = &PL_sv_undef;
2091 else if (gimme == G_ARRAY) {
2092 /* in case LEAVE wipes old return values */
2093 while (++MARK <= SP) {
2094 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2097 *++newsp = sv_mortalcopy(*MARK);
2098 TAINT_NOT; /* Each item is independent */
2101 /* When this function was called with MARK == newsp, we reach this
2102 * point with SP == newsp. */
2111 register PERL_CONTEXT *cx;
2112 I32 gimme = GIMME_V;
2114 ENTER_with_name("block");
2117 PUSHBLOCK(cx, CXt_BLOCK, SP);
2125 register PERL_CONTEXT *cx;
2130 if (PL_op->op_flags & OPf_SPECIAL) {
2131 cx = &cxstack[cxstack_ix];
2132 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2137 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2140 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2141 PL_curpm = newpm; /* Don't pop $1 et al till now */
2143 LEAVE_with_name("block");
2151 register PERL_CONTEXT *cx;
2152 const I32 gimme = GIMME_V;
2153 void *itervar; /* location of the iteration variable */
2154 U8 cxtype = CXt_LOOP_FOR;
2156 ENTER_with_name("loop1");
2159 if (PL_op->op_targ) { /* "my" variable */
2160 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2161 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2162 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2163 SVs_PADSTALE, SVs_PADSTALE);
2165 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2167 itervar = PL_comppad;
2169 itervar = &PAD_SVl(PL_op->op_targ);
2172 else { /* symbol table variable */
2173 GV * const gv = MUTABLE_GV(POPs);
2174 SV** svp = &GvSV(gv);
2175 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2177 itervar = (void *)gv;
2180 if (PL_op->op_private & OPpITER_DEF)
2181 cxtype |= CXp_FOR_DEF;
2183 ENTER_with_name("loop2");
2185 PUSHBLOCK(cx, cxtype, SP);
2186 PUSHLOOP_FOR(cx, itervar, MARK);
2187 if (PL_op->op_flags & OPf_STACKED) {
2188 SV *maybe_ary = POPs;
2189 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2191 SV * const right = maybe_ary;
2194 if (RANGE_IS_NUMERIC(sv,right)) {
2195 cx->cx_type &= ~CXTYPEMASK;
2196 cx->cx_type |= CXt_LOOP_LAZYIV;
2197 /* Make sure that no-one re-orders cop.h and breaks our
2199 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2200 #ifdef NV_PRESERVES_UV
2201 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2202 (SvNV_nomg(sv) > (NV)IV_MAX)))
2204 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2205 (SvNV_nomg(right) < (NV)IV_MIN))))
2207 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2209 ((SvNV_nomg(sv) > 0) &&
2210 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2211 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2213 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2215 ((SvNV_nomg(right) > 0) &&
2216 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2217 (SvNV_nomg(right) > (NV)UV_MAX))
2220 DIE(aTHX_ "Range iterator outside integer range");
2221 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2222 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2224 /* for correct -Dstv display */
2225 cx->blk_oldsp = sp - PL_stack_base;
2229 cx->cx_type &= ~CXTYPEMASK;
2230 cx->cx_type |= CXt_LOOP_LAZYSV;
2231 /* Make sure that no-one re-orders cop.h and breaks our
2233 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2234 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2235 cx->blk_loop.state_u.lazysv.end = right;
2236 SvREFCNT_inc(right);
2237 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2238 /* This will do the upgrade to SVt_PV, and warn if the value
2239 is uninitialised. */
2240 (void) SvPV_nolen_const(right);
2241 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2242 to replace !SvOK() with a pointer to "". */
2244 SvREFCNT_dec(right);
2245 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2249 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2250 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2251 SvREFCNT_inc(maybe_ary);
2252 cx->blk_loop.state_u.ary.ix =
2253 (PL_op->op_private & OPpITER_REVERSED) ?
2254 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2258 else { /* iterating over items on the stack */
2259 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2260 if (PL_op->op_private & OPpITER_REVERSED) {
2261 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2264 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2274 register PERL_CONTEXT *cx;
2275 const I32 gimme = GIMME_V;
2277 ENTER_with_name("loop1");
2279 ENTER_with_name("loop2");
2281 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2282 PUSHLOOP_PLAIN(cx, SP);
2290 register PERL_CONTEXT *cx;
2297 assert(CxTYPE_is_LOOP(cx));
2299 newsp = PL_stack_base + cx->blk_loop.resetsp;
2302 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2305 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2306 PL_curpm = newpm; /* ... and pop $1 et al */
2308 LEAVE_with_name("loop2");
2309 LEAVE_with_name("loop1");
2315 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2316 PERL_CONTEXT *cx, PMOP *newpm)
2318 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2319 if (gimme == G_SCALAR) {
2320 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2322 const char *what = NULL;
2324 assert(MARK+1 == SP);
2325 if ((SvPADTMP(TOPs) ||
2326 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2329 !SvSMAGICAL(TOPs)) {
2331 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2332 : "a readonly value" : "a temporary";
2337 /* sub:lvalue{} will take us here. */
2346 "Can't return %s from lvalue subroutine", what
2351 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2352 *++newsp = SvREFCNT_inc(*SP);
2359 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2364 *++newsp = &PL_sv_undef;
2366 if (CxLVAL(cx) & OPpDEREF) {
2369 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2373 else if (gimme == G_ARRAY) {
2374 assert (!(CxLVAL(cx) & OPpDEREF));
2375 if (ref || !CxLVAL(cx))
2376 while (++MARK <= SP)
2380 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2381 ? sv_mortalcopy(*MARK)
2382 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2383 else while (++MARK <= SP) {
2384 if (*MARK != &PL_sv_undef
2386 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2391 /* Might be flattened array after $#array = */
2399 "Can't return a %s from lvalue subroutine",
2400 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2406 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2409 PL_stack_sp = newsp;
2415 register PERL_CONTEXT *cx;
2416 bool popsub2 = FALSE;
2417 bool clear_errsv = FALSE;
2427 const I32 cxix = dopoptosub(cxstack_ix);
2430 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2431 * sort block, which is a CXt_NULL
2434 PL_stack_base[1] = *PL_stack_sp;
2435 PL_stack_sp = PL_stack_base + 1;
2439 DIE(aTHX_ "Can't return outside a subroutine");
2441 if (cxix < cxstack_ix)
2444 if (CxMULTICALL(&cxstack[cxix])) {
2445 gimme = cxstack[cxix].blk_gimme;
2446 if (gimme == G_VOID)
2447 PL_stack_sp = PL_stack_base;
2448 else if (gimme == G_SCALAR) {
2449 PL_stack_base[1] = *PL_stack_sp;
2450 PL_stack_sp = PL_stack_base + 1;
2456 switch (CxTYPE(cx)) {
2459 lval = !!CvLVALUE(cx->blk_sub.cv);
2460 retop = cx->blk_sub.retop;
2461 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2464 if (!(PL_in_eval & EVAL_KEEPERR))
2467 namesv = cx->blk_eval.old_namesv;
2468 retop = cx->blk_eval.retop;
2471 if (optype == OP_REQUIRE &&
2472 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2474 /* Unassume the success we assumed earlier. */
2475 (void)hv_delete(GvHVn(PL_incgv),
2476 SvPVX_const(namesv),
2477 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2479 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2484 retop = cx->blk_sub.retop;
2487 DIE(aTHX_ "panic: return");
2491 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2493 if (gimme == G_SCALAR) {
2496 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2497 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2498 *++newsp = SvREFCNT_inc(*SP);
2503 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2505 *++newsp = sv_mortalcopy(sv);
2509 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2513 *++newsp = sv_mortalcopy(*SP);
2516 *++newsp = sv_mortalcopy(*SP);
2519 *++newsp = &PL_sv_undef;
2521 else if (gimme == G_ARRAY) {
2522 while (++MARK <= SP) {
2523 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2524 ? *MARK : sv_mortalcopy(*MARK);
2525 TAINT_NOT; /* Each item is independent */
2528 PL_stack_sp = newsp;
2532 /* Stack values are safe: */
2535 POPSUB(cx,sv); /* release CV and @_ ... */
2539 PL_curpm = newpm; /* ... and pop $1 et al */
2548 /* This duplicates parts of pp_leavesub, so that it can share code with
2556 register PERL_CONTEXT *cx;
2559 if (CxMULTICALL(&cxstack[cxstack_ix]))
2563 cxstack_ix++; /* temporarily protect top context */
2567 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2571 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2572 PL_curpm = newpm; /* ... and pop $1 et al */
2575 return cx->blk_sub.retop;
2582 register PERL_CONTEXT *cx;
2593 if (PL_op->op_flags & OPf_SPECIAL) {
2594 cxix = dopoptoloop(cxstack_ix);
2596 DIE(aTHX_ "Can't \"last\" outside a loop block");
2599 cxix = dopoptolabel(cPVOP->op_pv);
2601 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2603 if (cxix < cxstack_ix)
2607 cxstack_ix++; /* temporarily protect top context */
2609 switch (CxTYPE(cx)) {
2610 case CXt_LOOP_LAZYIV:
2611 case CXt_LOOP_LAZYSV:
2613 case CXt_LOOP_PLAIN:
2615 newsp = PL_stack_base + cx->blk_loop.resetsp;
2616 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2620 nextop = cx->blk_sub.retop;
2624 nextop = cx->blk_eval.retop;
2628 nextop = cx->blk_sub.retop;
2631 DIE(aTHX_ "panic: last");
2635 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2636 pop2 == CXt_SUB ? SVs_TEMP : 0);
2641 /* Stack values are safe: */
2643 case CXt_LOOP_LAZYIV:
2644 case CXt_LOOP_PLAIN:
2645 case CXt_LOOP_LAZYSV:
2647 POPLOOP(cx); /* release loop vars ... */
2651 POPSUB(cx,sv); /* release CV and @_ ... */
2654 PL_curpm = newpm; /* ... and pop $1 et al */
2657 PERL_UNUSED_VAR(optype);
2658 PERL_UNUSED_VAR(gimme);
2666 register PERL_CONTEXT *cx;
2669 if (PL_op->op_flags & OPf_SPECIAL) {
2670 cxix = dopoptoloop(cxstack_ix);
2672 DIE(aTHX_ "Can't \"next\" outside a loop block");
2675 cxix = dopoptolabel(cPVOP->op_pv);
2677 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2679 if (cxix < cxstack_ix)
2682 /* clear off anything above the scope we're re-entering, but
2683 * save the rest until after a possible continue block */
2684 inner = PL_scopestack_ix;
2686 if (PL_scopestack_ix < inner)
2687 leave_scope(PL_scopestack[PL_scopestack_ix]);
2688 PL_curcop = cx->blk_oldcop;
2689 return (cx)->blk_loop.my_op->op_nextop;
2696 register PERL_CONTEXT *cx;
2700 if (PL_op->op_flags & OPf_SPECIAL) {
2701 cxix = dopoptoloop(cxstack_ix);
2703 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2706 cxix = dopoptolabel(cPVOP->op_pv);
2708 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2710 if (cxix < cxstack_ix)
2713 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2714 if (redo_op->op_type == OP_ENTER) {
2715 /* pop one less context to avoid $x being freed in while (my $x..) */
2717 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2718 redo_op = redo_op->op_next;
2722 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2723 LEAVE_SCOPE(oldsave);
2725 PL_curcop = cx->blk_oldcop;
2730 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2734 static const char too_deep[] = "Target of goto is too deeply nested";
2736 PERL_ARGS_ASSERT_DOFINDLABEL;
2739 Perl_croak(aTHX_ too_deep);
2740 if (o->op_type == OP_LEAVE ||
2741 o->op_type == OP_SCOPE ||
2742 o->op_type == OP_LEAVELOOP ||
2743 o->op_type == OP_LEAVESUB ||
2744 o->op_type == OP_LEAVETRY)
2746 *ops++ = cUNOPo->op_first;
2748 Perl_croak(aTHX_ too_deep);
2751 if (o->op_flags & OPf_KIDS) {
2753 /* First try all the kids at this level, since that's likeliest. */
2754 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2755 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2756 const char *kid_label = CopLABEL(kCOP);
2757 if (kid_label && strEQ(kid_label, label))
2761 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2762 if (kid == PL_lastgotoprobe)
2764 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2767 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2768 ops[-1]->op_type == OP_DBSTATE)
2773 if ((o = dofindlabel(kid, label, ops, oplimit)))
2786 register PERL_CONTEXT *cx;
2787 #define GOTO_DEPTH 64
2788 OP *enterops[GOTO_DEPTH];
2789 const char *label = NULL;
2790 const bool do_dump = (PL_op->op_type == OP_DUMP);
2791 static const char must_have_label[] = "goto must have label";
2793 if (PL_op->op_flags & OPf_STACKED) {
2794 SV * const sv = POPs;
2796 /* This egregious kludge implements goto &subroutine */
2797 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2799 register PERL_CONTEXT *cx;
2800 CV *cv = MUTABLE_CV(SvRV(sv));
2807 if (!CvROOT(cv) && !CvXSUB(cv)) {
2808 const GV * const gv = CvGV(cv);
2812 /* autoloaded stub? */
2813 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2815 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2817 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2818 if (autogv && (cv = GvCV(autogv)))
2820 tmpstr = sv_newmortal();
2821 gv_efullname3(tmpstr, gv, NULL);
2822 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2824 DIE(aTHX_ "Goto undefined subroutine");
2827 /* First do some returnish stuff. */
2828 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2830 cxix = dopoptosub(cxstack_ix);
2832 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2833 if (cxix < cxstack_ix)
2837 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2838 if (CxTYPE(cx) == CXt_EVAL) {
2840 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2842 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2844 else if (CxMULTICALL(cx))
2845 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2846 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2847 /* put @_ back onto stack */
2848 AV* av = cx->blk_sub.argarray;
2850 items = AvFILLp(av) + 1;
2851 EXTEND(SP, items+1); /* @_ could have been extended. */
2852 Copy(AvARRAY(av), SP + 1, items, SV*);
2853 SvREFCNT_dec(GvAV(PL_defgv));
2854 GvAV(PL_defgv) = cx->blk_sub.savearray;
2856 /* abandon @_ if it got reified */
2861 av_extend(av, items-1);
2863 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2866 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2867 AV* const av = GvAV(PL_defgv);
2868 items = AvFILLp(av) + 1;
2869 EXTEND(SP, items+1); /* @_ could have been extended. */
2870 Copy(AvARRAY(av), SP + 1, items, SV*);
2874 if (CxTYPE(cx) == CXt_SUB &&
2875 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2876 SvREFCNT_dec(cx->blk_sub.cv);
2877 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2878 LEAVE_SCOPE(oldsave);
2880 /* A destructor called during LEAVE_SCOPE could have undefined
2881 * our precious cv. See bug #99850. */
2882 if (!CvROOT(cv) && !CvXSUB(cv)) {
2883 const GV * const gv = CvGV(cv);
2885 SV * const tmpstr = sv_newmortal();
2886 gv_efullname3(tmpstr, gv, NULL);
2887 DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2890 DIE(aTHX_ "Goto undefined subroutine");
2893 /* Now do some callish stuff. */
2895 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2897 OP* const retop = cx->blk_sub.retop;
2898 SV **newsp PERL_UNUSED_DECL;
2899 I32 gimme PERL_UNUSED_DECL;
2902 for (index=0; index<items; index++)
2903 sv_2mortal(SP[-index]);
2906 /* XS subs don't have a CxSUB, so pop it */
2907 POPBLOCK(cx, PL_curpm);
2908 /* Push a mark for the start of arglist */
2911 (void)(*CvXSUB(cv))(aTHX_ cv);
2916 AV* const padlist = CvPADLIST(cv);
2917 if (CxTYPE(cx) == CXt_EVAL) {
2918 PL_in_eval = CxOLD_IN_EVAL(cx);
2919 PL_eval_root = cx->blk_eval.old_eval_root;
2920 cx->cx_type = CXt_SUB;
2922 cx->blk_sub.cv = cv;
2923 cx->blk_sub.olddepth = CvDEPTH(cv);
2926 if (CvDEPTH(cv) < 2)
2927 SvREFCNT_inc_simple_void_NN(cv);
2929 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2930 sub_crush_depth(cv);
2931 pad_push(padlist, CvDEPTH(cv));
2933 PL_curcop = cx->blk_oldcop;
2935 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2938 AV *const av = MUTABLE_AV(PAD_SVl(0));
2940 cx->blk_sub.savearray = GvAV(PL_defgv);
2941 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2942 CX_CURPAD_SAVE(cx->blk_sub);
2943 cx->blk_sub.argarray = av;
2945 if (items >= AvMAX(av) + 1) {
2946 SV **ary = AvALLOC(av);
2947 if (AvARRAY(av) != ary) {
2948 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2951 if (items >= AvMAX(av) + 1) {
2952 AvMAX(av) = items - 1;
2953 Renew(ary,items+1,SV*);
2959 Copy(mark,AvARRAY(av),items,SV*);
2960 AvFILLp(av) = items - 1;
2961 assert(!AvREAL(av));
2963 /* transfer 'ownership' of refcnts to new @_ */
2973 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2974 Perl_get_db_sub(aTHX_ NULL, cv);
2976 CV * const gotocv = get_cvs("DB::goto", 0);
2978 PUSHMARK( PL_stack_sp );
2979 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2984 RETURNOP(CvSTART(cv));
2988 label = SvPV_nolen_const(sv);
2989 if (!(do_dump || *label))
2990 DIE(aTHX_ must_have_label);
2993 else if (PL_op->op_flags & OPf_SPECIAL) {
2995 DIE(aTHX_ must_have_label);
2998 label = cPVOP->op_pv;
3002 if (label && *label) {
3003 OP *gotoprobe = NULL;
3004 bool leaving_eval = FALSE;
3005 bool in_block = FALSE;
3006 PERL_CONTEXT *last_eval_cx = NULL;
3010 PL_lastgotoprobe = NULL;
3012 for (ix = cxstack_ix; ix >= 0; ix--) {
3014 switch (CxTYPE(cx)) {
3016 leaving_eval = TRUE;
3017 if (!CxTRYBLOCK(cx)) {
3018 gotoprobe = (last_eval_cx ?
3019 last_eval_cx->blk_eval.old_eval_root :
3024 /* else fall through */
3025 case CXt_LOOP_LAZYIV:
3026 case CXt_LOOP_LAZYSV:
3028 case CXt_LOOP_PLAIN:
3031 gotoprobe = cx->blk_oldcop->op_sibling;
3037 gotoprobe = cx->blk_oldcop->op_sibling;
3040 gotoprobe = PL_main_root;
3043 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3044 gotoprobe = CvROOT(cx->blk_sub.cv);
3050 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3053 DIE(aTHX_ "panic: goto");
3054 gotoprobe = PL_main_root;
3058 retop = dofindlabel(gotoprobe, label,
3059 enterops, enterops + GOTO_DEPTH);
3062 if (gotoprobe->op_sibling &&
3063 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3064 gotoprobe->op_sibling->op_sibling) {
3065 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3066 label, enterops, enterops + GOTO_DEPTH);
3071 PL_lastgotoprobe = gotoprobe;
3074 DIE(aTHX_ "Can't find label %s", label);
3076 /* if we're leaving an eval, check before we pop any frames
3077 that we're not going to punt, otherwise the error
3080 if (leaving_eval && *enterops && enterops[1]) {
3082 for (i = 1; enterops[i]; i++)
3083 if (enterops[i]->op_type == OP_ENTERITER)
3084 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3087 if (*enterops && enterops[1]) {
3088 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3090 deprecate("\"goto\" to jump into a construct");
3093 /* pop unwanted frames */
3095 if (ix < cxstack_ix) {
3102 oldsave = PL_scopestack[PL_scopestack_ix];
3103 LEAVE_SCOPE(oldsave);
3106 /* push wanted frames */
3108 if (*enterops && enterops[1]) {
3109 OP * const oldop = PL_op;
3110 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3111 for (; enterops[ix]; ix++) {
3112 PL_op = enterops[ix];
3113 /* Eventually we may want to stack the needed arguments
3114 * for each op. For now, we punt on the hard ones. */
3115 if (PL_op->op_type == OP_ENTERITER)
3116 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3117 PL_op->op_ppaddr(aTHX);
3125 if (!retop) retop = PL_main_start;
3127 PL_restartop = retop;
3128 PL_do_undump = TRUE;
3132 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3133 PL_do_undump = FALSE;
3148 anum = 0; (void)POPs;
3153 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3155 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3158 PL_exit_flags |= PERL_EXIT_EXPECTED;
3160 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3161 if (anum || !(PL_minus_c && PL_madskills))
3166 PUSHs(&PL_sv_undef);
3173 S_save_lines(pTHX_ AV *array, SV *sv)
3175 const char *s = SvPVX_const(sv);
3176 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3179 PERL_ARGS_ASSERT_SAVE_LINES;
3181 while (s && s < send) {
3183 SV * const tmpstr = newSV_type(SVt_PVMG);
3185 t = (const char *)memchr(s, '\n', send - s);
3191 sv_setpvn(tmpstr, s, t - s);
3192 av_store(array, line++, tmpstr);
3200 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3202 0 is used as continue inside eval,
3204 3 is used for a die caught by an inner eval - continue inner loop
3206 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3207 establish a local jmpenv to handle exception traps.
3212 S_docatch(pTHX_ OP *o)
3216 OP * const oldop = PL_op;
3220 assert(CATCH_GET == TRUE);
3227 assert(cxstack_ix >= 0);
3228 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3229 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3234 /* die caught by an inner eval - continue inner loop */
3235 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3236 PL_restartjmpenv = NULL;
3237 PL_op = PL_restartop;
3253 /* James Bond: Do you expect me to talk?
3254 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3256 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3257 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3259 Currently it is not used outside the core code. Best if it stays that way.
3261 Hence it's now deprecated, and will be removed.
3264 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3265 /* sv Text to convert to OP tree. */
3266 /* startop op_free() this to undo. */
3267 /* code Short string id of the caller. */
3269 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3270 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3273 /* Don't use this. It will go away without warning once the regexp engine is
3274 refactored not to use it. */
3276 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3279 dVAR; dSP; /* Make POPBLOCK work. */
3285 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3286 char *tmpbuf = tbuf;
3289 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3293 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3295 ENTER_with_name("eval");
3296 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3298 /* switch to eval mode */
3300 if (IN_PERL_COMPILETIME) {
3301 SAVECOPSTASH_FREE(&PL_compiling);
3302 CopSTASH_set(&PL_compiling, PL_curstash);
3304 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3305 SV * const sv = sv_newmortal();
3306 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3307 code, (unsigned long)++PL_evalseq,
3308 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3313 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3314 (unsigned long)++PL_evalseq);
3315 SAVECOPFILE_FREE(&PL_compiling);
3316 CopFILE_set(&PL_compiling, tmpbuf+2);
3317 SAVECOPLINE(&PL_compiling);
3318 CopLINE_set(&PL_compiling, 1);
3319 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3320 deleting the eval's FILEGV from the stash before gv_check() runs
3321 (i.e. before run-time proper). To work around the coredump that
3322 ensues, we always turn GvMULTI_on for any globals that were
3323 introduced within evals. See force_ident(). GSAR 96-10-12 */
3324 safestr = savepvn(tmpbuf, len);
3325 SAVEDELETE(PL_defstash, safestr, len);
3327 #ifdef OP_IN_REGISTER
3333 /* we get here either during compilation, or via pp_regcomp at runtime */
3334 runtime = IN_PERL_RUNTIME;
3337 runcv = find_runcv(NULL);
3339 /* At run time, we have to fetch the hints from PL_curcop. */
3340 PL_hints = PL_curcop->cop_hints;
3341 if (PL_hints & HINT_LOCALIZE_HH) {
3342 /* SAVEHINTS created a new HV in PL_hintgv, which we
3344 SvREFCNT_dec(GvHV(PL_hintgv));
3346 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3347 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3349 SAVECOMPILEWARNINGS();
3350 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3351 cophh_free(CopHINTHASH_get(&PL_compiling));
3352 /* XXX Does this need to avoid copying a label? */
3353 PL_compiling.cop_hints_hash
3354 = cophh_copy(PL_curcop->cop_hints_hash);
3358 PL_op->op_type = OP_ENTEREVAL;
3359 PL_op->op_flags = 0; /* Avoid uninit warning. */
3360 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3362 need_catch = CATCH_GET;
3366 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq, NULL);
3368 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax, NULL);
3369 CATCH_SET(need_catch);
3370 POPBLOCK(cx,PL_curpm);
3373 (*startop)->op_type = OP_NULL;
3374 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3375 /* XXX DAPM do this properly one year */
3376 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3377 LEAVE_with_name("eval");
3378 if (IN_PERL_COMPILETIME)
3379 CopHINTS_set(&PL_compiling, PL_hints);
3380 #ifdef OP_IN_REGISTER
3383 PERL_UNUSED_VAR(newsp);
3384 PERL_UNUSED_VAR(optype);
3386 return PL_eval_start;
3391 =for apidoc find_runcv
3393 Locate the CV corresponding to the currently executing sub or eval.
3394 If db_seqp is non_null, skip CVs that are in the DB package and populate
3395 *db_seqp with the cop sequence number at the point that the DB:: code was
3396 entered. (allows debuggers to eval in the scope of the breakpoint rather
3397 than in the scope of the debugger itself).
3403 Perl_find_runcv(pTHX_ U32 *db_seqp)
3409 *db_seqp = PL_curcop->cop_seq;
3410 for (si = PL_curstackinfo; si; si = si->si_prev) {
3412 for (ix = si->si_cxix; ix >= 0; ix--) {
3413 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3414 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3415 CV * const cv = cx->blk_sub.cv;
3416 /* skip DB:: code */
3417 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3418 *db_seqp = cx->blk_oldcop->cop_seq;
3423 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3424 return cx->blk_eval.cv;
3431 /* Run yyparse() in a setjmp wrapper. Returns:
3432 * 0: yyparse() successful
3433 * 1: yyparse() failed
3437 S_try_yyparse(pTHX_ int gramtype)
3442 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3446 ret = yyparse(gramtype) ? 1 : 0;
3460 /* Compile a require/do, an eval '', or a /(?{...})/.
3461 * In the last case, startop is non-null, and contains the address of
3462 * a pointer that should be set to the just-compiled code.
3463 * outside is the lexically enclosing CV (if any) that invoked us.
3464 * Returns a bool indicating whether the compile was successful; if so,
3465 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3466 * pushes undef (also croaks if startop != NULL).
3469 /* This function is called from three places, sv_compile_2op, pp_return
3470 * and pp_entereval. These can be distinguished as follows:
3471 * sv_compile_2op - startop is non-null
3472 * pp_require - startop is null; in_require is true
3473 * pp_entereval - stortop is null; in_require is false
3477 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq, HV *hh)
3480 OP * const saveop = PL_op;
3481 COP * const oldcurcop = PL_curcop;
3482 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3486 PL_in_eval = (in_require
3487 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3492 evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3494 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3495 cxstack[cxstack_ix].blk_eval.cv = evalcv;
3496 cxstack[cxstack_ix].blk_gimme = gimme;
3498 CvOUTSIDE_SEQ(evalcv) = seq;
3499 CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3501 /* set up a scratch pad */
3503 CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3504 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3508 SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
3510 /* make sure we compile in the right package */
3512 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3513 SAVEGENERICSV(PL_curstash);
3514 PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3516 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3517 SAVESPTR(PL_beginav);
3518 PL_beginav = newAV();
3519 SAVEFREESV(PL_beginav);
3520 SAVESPTR(PL_unitcheckav);
3521 PL_unitcheckav = newAV();
3522 SAVEFREESV(PL_unitcheckav);
3525 SAVEBOOL(PL_madskills);
3529 if (!startop) ENTER_with_name("evalcomp");
3530 SAVESPTR(PL_compcv);
3533 /* try to compile it */
3535 PL_eval_root = NULL;
3536 PL_curcop = &PL_compiling;
3537 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3538 PL_in_eval |= EVAL_KEEPERR;
3546 hv_clear(GvHV(PL_hintgv));
3549 PL_hints = saveop->op_private & OPpEVAL_COPHH
3550 ? oldcurcop->cop_hints : saveop->op_targ;
3552 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3553 SvREFCNT_dec(GvHV(PL_hintgv));
3554 GvHV(PL_hintgv) = hh;
3557 SAVECOMPILEWARNINGS();
3559 if (PL_dowarn & G_WARN_ALL_ON)
3560 PL_compiling.cop_warnings = pWARN_ALL ;
3561 else if (PL_dowarn & G_WARN_ALL_OFF)
3562 PL_compiling.cop_warnings = pWARN_NONE ;
3564 PL_compiling.cop_warnings = pWARN_STD ;
3567 PL_compiling.cop_warnings =
3568 DUP_WARNINGS(oldcurcop->cop_warnings);
3569 cophh_free(CopHINTHASH_get(&PL_compiling));
3570 if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3571 /* The label, if present, is the first entry on the chain. So rather
3572 than writing a blank label in front of it (which involves an
3573 allocation), just use the next entry in the chain. */
3574 PL_compiling.cop_hints_hash
3575 = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3576 /* Check the assumption that this removed the label. */
3577 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3580 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3584 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3586 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3587 * so honour CATCH_GET and trap it here if necessary */
3589 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3591 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3592 SV **newsp; /* Used by POPBLOCK. */
3594 I32 optype; /* Used by POPEVAL. */
3599 PERL_UNUSED_VAR(newsp);
3600 PERL_UNUSED_VAR(optype);
3602 /* note that if yystatus == 3, then the EVAL CX block has already
3603 * been popped, and various vars restored */
3605 if (yystatus != 3) {
3607 op_free(PL_eval_root);
3608 PL_eval_root = NULL;
3610 SP = PL_stack_base + POPMARK; /* pop original mark */
3612 POPBLOCK(cx,PL_curpm);
3614 namesv = cx->blk_eval.old_namesv;
3616 /* POPBLOCK renders LEAVE_with_name("evalcomp") unnecessary. */
3617 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3622 /* If cx is still NULL, it means that we didn't go in the
3623 * POPEVAL branch. */
3624 cx = &cxstack[cxstack_ix];
3625 assert(CxTYPE(cx) == CXt_EVAL);
3626 namesv = cx->blk_eval.old_namesv;
3628 (void)hv_store(GvHVn(PL_incgv),
3629 SvPVX_const(namesv),
3630 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3632 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3635 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3638 if (yystatus != 3) {
3639 POPBLOCK(cx,PL_curpm);
3642 Perl_croak(aTHX_ "%"SVf"Compilation failed in regexp",
3645 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3648 if (!*(SvPVx_nolen_const(ERRSV))) {
3649 sv_setpvs(ERRSV, "Compilation error");
3652 if (gimme != G_ARRAY) PUSHs(&PL_sv_undef);
3656 else if (!startop) LEAVE_with_name("evalcomp");
3657 CopLINE_set(&PL_compiling, 0);
3659 *startop = PL_eval_root;
3661 SAVEFREEOP(PL_eval_root);
3663 DEBUG_x(dump_eval());
3665 /* Register with debugger: */
3666 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3667 CV * const cv = get_cvs("DB::postponed", 0);
3671 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3673 call_sv(MUTABLE_SV(cv), G_DISCARD);
3677 if (PL_unitcheckav) {
3678 OP *es = PL_eval_start;
3679 call_list(PL_scopestack_ix, PL_unitcheckav);
3683 /* compiled okay, so do it */
3685 CvDEPTH(evalcv) = 1;
3686 SP = PL_stack_base + POPMARK; /* pop original mark */
3687 PL_op = saveop; /* The caller may need it. */
3688 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3695 S_check_type_and_open(pTHX_ SV *name)
3698 const char *p = SvPV_nolen_const(name);
3699 const int st_rc = PerlLIO_stat(p, &st);
3701 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3703 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3707 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3708 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3710 return PerlIO_open(p, PERL_SCRIPT_MODE);
3714 #ifndef PERL_DISABLE_PMC
3716 S_doopen_pm(pTHX_ SV *name)
3719 const char *p = SvPV_const(name, namelen);
3721 PERL_ARGS_ASSERT_DOOPEN_PM;
3723 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3724 SV *const pmcsv = sv_newmortal();
3727 SvSetSV_nosteal(pmcsv,name);
3728 sv_catpvn(pmcsv, "c", 1);
3730 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3731 return check_type_and_open(pmcsv);
3733 return check_type_and_open(name);
3736 # define doopen_pm(name) check_type_and_open(name)
3737 #endif /* !PERL_DISABLE_PMC */
3742 register PERL_CONTEXT *cx;
3749 int vms_unixname = 0;
3751 const char *tryname = NULL;
3753 const I32 gimme = GIMME_V;
3754 int filter_has_file = 0;
3755 PerlIO *tryrsfp = NULL;
3756 SV *filter_cache = NULL;
3757 SV *filter_state = NULL;
3758 SV *filter_sub = NULL;
3764 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3765 sv = sv_2mortal(new_version(sv));
3766 if (!sv_derived_from(PL_patchlevel, "version"))
3767 upg_version(PL_patchlevel, TRUE);
3768 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3769 if ( vcmp(sv,PL_patchlevel) <= 0 )
3770 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3771 SVfARG(sv_2mortal(vnormal(sv))),
3772 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3776 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3779 SV * const req = SvRV(sv);
3780 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3782 /* get the left hand term */
3783 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3785 first = SvIV(*av_fetch(lav,0,0));
3786 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3787 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3788 || av_len(lav) > 1 /* FP with > 3 digits */
3789 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3791 DIE(aTHX_ "Perl %"SVf" required--this is only "
3793 SVfARG(sv_2mortal(vnormal(req))),
3794 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3797 else { /* probably 'use 5.10' or 'use 5.8' */
3802 second = SvIV(*av_fetch(lav,1,0));
3804 second /= second >= 600 ? 100 : 10;
3805 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3806 (int)first, (int)second);
3807 upg_version(hintsv, TRUE);
3809 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3810 "--this is only %"SVf", stopped",
3811 SVfARG(sv_2mortal(vnormal(req))),
3812 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3813 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3821 name = SvPV_const(sv, len);
3822 if (!(name && len > 0 && *name))
3823 DIE(aTHX_ "Null filename used");
3824 TAINT_PROPER("require");
3828 /* The key in the %ENV hash is in the syntax of file passed as the argument
3829 * usually this is in UNIX format, but sometimes in VMS format, which
3830 * can result in a module being pulled in more than once.
3831 * To prevent this, the key must be stored in UNIX format if the VMS
3832 * name can be translated to UNIX.
3834 if ((unixname = tounixspec(name, NULL)) != NULL) {
3835 unixlen = strlen(unixname);
3841 /* if not VMS or VMS name can not be translated to UNIX, pass it
3844 unixname = (char *) name;
3847 if (PL_op->op_type == OP_REQUIRE) {
3848 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3849 unixname, unixlen, 0);
3851 if (*svp != &PL_sv_undef)
3854 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3855 "Compilation failed in require", unixname);
3859 /* prepare to compile file */
3861 if (path_is_absolute(name)) {
3862 /* At this point, name is SvPVX(sv) */
3864 tryrsfp = doopen_pm(sv);
3867 AV * const ar = GvAVn(PL_incgv);
3873 namesv = newSV_type(SVt_PV);
3874 for (i = 0; i <= AvFILL(ar); i++) {
3875 SV * const dirsv = *av_fetch(ar, i, TRUE);
3877 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3884 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3885 && !sv_isobject(loader))
3887 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3890 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3891 PTR2UV(SvRV(dirsv)), name);
3892 tryname = SvPVX_const(namesv);
3895 ENTER_with_name("call_INC");
3903 if (sv_isobject(loader))
3904 count = call_method("INC", G_ARRAY);
3906 count = call_sv(loader, G_ARRAY);
3916 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3917 && !isGV_with_GP(SvRV(arg))) {
3918 filter_cache = SvRV(arg);
3919 SvREFCNT_inc_simple_void_NN(filter_cache);
3926 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3930 if (isGV_with_GP(arg)) {
3931 IO * const io = GvIO((const GV *)arg);
3936 tryrsfp = IoIFP(io);
3937 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3938 PerlIO_close(IoOFP(io));
3949 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3951 SvREFCNT_inc_simple_void_NN(filter_sub);
3954 filter_state = SP[i];
3955 SvREFCNT_inc_simple_void(filter_state);
3959 if (!tryrsfp && (filter_cache || filter_sub)) {
3960 tryrsfp = PerlIO_open(BIT_BUCKET,
3968 LEAVE_with_name("call_INC");
3970 /* Adjust file name if the hook has set an %INC entry.
3971 This needs to happen after the FREETMPS above. */
3972 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3974 tryname = SvPV_nolen_const(*svp);
3981 filter_has_file = 0;
3983 SvREFCNT_dec(filter_cache);
3984 filter_cache = NULL;
3987 SvREFCNT_dec(filter_state);
3988 filter_state = NULL;
3991 SvREFCNT_dec(filter_sub);
3996 if (!path_is_absolute(name)
4002 dir = SvPV_const(dirsv, dirlen);
4010 if ((unixdir = tounixpath(dir, NULL)) == NULL)
4012 sv_setpv(namesv, unixdir);
4013 sv_catpv(namesv, unixname);
4015 # ifdef __SYMBIAN32__
4016 if (PL_origfilename[0] &&
4017 PL_origfilename[1] == ':' &&
4018 !(dir[0] && dir[1] == ':'))
4019 Perl_sv_setpvf(aTHX_ namesv,
4024 Perl_sv_setpvf(aTHX_ namesv,
4028 /* The equivalent of
4029 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4030 but without the need to parse the format string, or
4031 call strlen on either pointer, and with the correct
4032 allocation up front. */
4034 char *tmp = SvGROW(namesv, dirlen + len + 2);
4036 memcpy(tmp, dir, dirlen);
4039 /* name came from an SV, so it will have a '\0' at the
4040 end that we can copy as part of this memcpy(). */
4041 memcpy(tmp, name, len + 1);
4043 SvCUR_set(namesv, dirlen + len + 1);
4048 TAINT_PROPER("require");
4049 tryname = SvPVX_const(namesv);
4050 tryrsfp = doopen_pm(namesv);
4052 if (tryname[0] == '.' && tryname[1] == '/') {
4054 while (*++tryname == '/');
4058 else if (errno == EMFILE)
4059 /* no point in trying other paths if out of handles */
4068 if (PL_op->op_type == OP_REQUIRE) {
4069 if(errno == EMFILE) {
4070 /* diag_listed_as: Can't locate %s */
4071 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4073 if (namesv) { /* did we lookup @INC? */
4074 AV * const ar = GvAVn(PL_incgv);
4076 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4077 for (i = 0; i <= AvFILL(ar); i++) {
4078 sv_catpvs(inc, " ");
4079 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4082 /* diag_listed_as: Can't locate %s */
4084 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4086 (memEQ(name + len - 2, ".h", 3)
4087 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4088 (memEQ(name + len - 3, ".ph", 4)
4089 ? " (did you run h2ph?)" : ""),
4094 DIE(aTHX_ "Can't locate %s", name);
4100 SETERRNO(0, SS_NORMAL);
4102 /* Assume success here to prevent recursive requirement. */
4103 /* name is never assigned to again, so len is still strlen(name) */
4104 /* Check whether a hook in @INC has already filled %INC */
4106 (void)hv_store(GvHVn(PL_incgv),
4107 unixname, unixlen, newSVpv(tryname,0),0);
4109 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4111 (void)hv_store(GvHVn(PL_incgv),
4112 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4115 ENTER_with_name("eval");
4117 SAVECOPFILE_FREE(&PL_compiling);
4118 CopFILE_set(&PL_compiling, tryname);
4119 lex_start(NULL, tryrsfp, 0);
4121 if (filter_sub || filter_cache) {
4122 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4123 than hanging another SV from it. In turn, filter_add() optionally
4124 takes the SV to use as the filter (or creates a new SV if passed
4125 NULL), so simply pass in whatever value filter_cache has. */
4126 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4127 IoLINES(datasv) = filter_has_file;
4128 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4129 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4132 /* switch to eval mode */
4133 PUSHBLOCK(cx, CXt_EVAL, SP);
4135 cx->blk_eval.retop = PL_op->op_next;
4137 SAVECOPLINE(&PL_compiling);
4138 CopLINE_set(&PL_compiling, 0);
4142 /* Store and reset encoding. */
4143 encoding = PL_encoding;
4146 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq, NULL))
4147 op = DOCATCH(PL_eval_start);
4149 op = PL_op->op_next;
4151 /* Restore encoding. */
4152 PL_encoding = encoding;
4157 /* This is a op added to hold the hints hash for
4158 pp_entereval. The hash can be modified by the code
4159 being eval'ed, so we return a copy instead. */
4165 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4173 register PERL_CONTEXT *cx;
4175 const I32 gimme = GIMME_V;
4176 const U32 was = PL_breakable_sub_gen;
4177 char tbuf[TYPE_DIGITS(long) + 12];
4178 bool saved_delete = FALSE;
4179 char *tmpbuf = tbuf;
4182 U32 seq, lex_flags = 0;
4183 HV *saved_hh = NULL;
4184 const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4186 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4187 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4189 else if (PL_hints & HINT_LOCALIZE_HH || (
4190 PL_op->op_private & OPpEVAL_COPHH
4191 && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4193 saved_hh = cop_hints_2hv(PL_curcop, 0);
4194 hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4198 /* make sure we've got a plain PV (no overload etc) before testing
4199 * for taint. Making a copy here is probably overkill, but better
4200 * safe than sorry */
4202 const char * const p = SvPV_const(sv, len);
4204 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4205 lex_flags |= LEX_START_COPIED;
4207 if (bytes && SvUTF8(sv))
4208 SvPVbyte_force(sv, len);
4210 else if (bytes && SvUTF8(sv)) {
4211 /* Don't modify someone else's scalar */
4214 (void)sv_2mortal(sv);
4215 SvPVbyte_force(sv,len);
4216 lex_flags |= LEX_START_COPIED;
4219 TAINT_IF(SvTAINTED(sv));
4220 TAINT_PROPER("eval");
4222 ENTER_with_name("eval");
4223 lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4224 ? LEX_IGNORE_UTF8_HINTS
4225 : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4230 /* switch to eval mode */
4232 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4233 SV * const temp_sv = sv_newmortal();
4234 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4235 (unsigned long)++PL_evalseq,
4236 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4237 tmpbuf = SvPVX(temp_sv);
4238 len = SvCUR(temp_sv);
4241 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4242 SAVECOPFILE_FREE(&PL_compiling);
4243 CopFILE_set(&PL_compiling, tmpbuf+2);
4244 SAVECOPLINE(&PL_compiling);
4245 CopLINE_set(&PL_compiling, 1);
4246 /* special case: an eval '' executed within the DB package gets lexically
4247 * placed in the first non-DB CV rather than the current CV - this
4248 * allows the debugger to execute code, find lexicals etc, in the
4249 * scope of the code being debugged. Passing &seq gets find_runcv
4250 * to do the dirty work for us */
4251 runcv = find_runcv(&seq);
4253 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4255 cx->blk_eval.retop = PL_op->op_next;
4257 /* prepare to compile string */
4259 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4260 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4262 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4263 deleting the eval's FILEGV from the stash before gv_check() runs
4264 (i.e. before run-time proper). To work around the coredump that
4265 ensues, we always turn GvMULTI_on for any globals that were
4266 introduced within evals. See force_ident(). GSAR 96-10-12 */
4267 char *const safestr = savepvn(tmpbuf, len);
4268 SAVEDELETE(PL_defstash, safestr, len);
4269 saved_delete = TRUE;
4274 if (doeval(gimme, NULL, runcv, seq, saved_hh)) {
4275 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4276 ? (PERLDB_LINE || PERLDB_SAVESRC)
4277 : PERLDB_SAVESRC_NOSUBS) {
4278 /* Retain the filegv we created. */
4279 } else if (!saved_delete) {
4280 char *const safestr = savepvn(tmpbuf, len);
4281 SAVEDELETE(PL_defstash, safestr, len);
4283 return DOCATCH(PL_eval_start);
4285 /* We have already left the scope set up earlier thanks to the LEAVE
4287 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4288 ? (PERLDB_LINE || PERLDB_SAVESRC)
4289 : PERLDB_SAVESRC_INVALID) {
4290 /* Retain the filegv we created. */
4291 } else if (!saved_delete) {
4292 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4294 return PL_op->op_next;
4304 register PERL_CONTEXT *cx;
4306 const U8 save_flags = PL_op -> op_flags;
4314 namesv = cx->blk_eval.old_namesv;
4315 retop = cx->blk_eval.retop;
4316 evalcv = cx->blk_eval.cv;
4319 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4321 PL_curpm = newpm; /* Don't pop $1 et al till now */
4324 assert(CvDEPTH(evalcv) == 1);
4326 CvDEPTH(evalcv) = 0;
4328 if (optype == OP_REQUIRE &&
4329 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4331 /* Unassume the success we assumed earlier. */
4332 (void)hv_delete(GvHVn(PL_incgv),
4333 SvPVX_const(namesv),
4334 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4336 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4338 /* die_unwind() did LEAVE, or we won't be here */
4341 LEAVE_with_name("eval");
4342 if (!(save_flags & OPf_SPECIAL)) {
4350 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4351 close to the related Perl_create_eval_scope. */
4353 Perl_delete_eval_scope(pTHX)
4358 register PERL_CONTEXT *cx;
4364 LEAVE_with_name("eval_scope");
4365 PERL_UNUSED_VAR(newsp);
4366 PERL_UNUSED_VAR(gimme);
4367 PERL_UNUSED_VAR(optype);
4370 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4371 also needed by Perl_fold_constants. */
4373 Perl_create_eval_scope(pTHX_ U32 flags)
4376 const I32 gimme = GIMME_V;
4378 ENTER_with_name("eval_scope");
4381 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4384 PL_in_eval = EVAL_INEVAL;
4385 if (flags & G_KEEPERR)
4386 PL_in_eval |= EVAL_KEEPERR;
4389 if (flags & G_FAKINGEVAL) {
4390 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4398 PERL_CONTEXT * const cx = create_eval_scope(0);
4399 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4400 return DOCATCH(PL_op->op_next);
4409 register PERL_CONTEXT *cx;
4415 PERL_UNUSED_VAR(optype);
4418 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4419 PL_curpm = newpm; /* Don't pop $1 et al till now */
4421 LEAVE_with_name("eval_scope");
4429 register PERL_CONTEXT *cx;
4430 const I32 gimme = GIMME_V;
4432 ENTER_with_name("given");
4435 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4436 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4438 PUSHBLOCK(cx, CXt_GIVEN, SP);
4447 register PERL_CONTEXT *cx;
4451 PERL_UNUSED_CONTEXT;
4454 assert(CxTYPE(cx) == CXt_GIVEN);
4457 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4458 PL_curpm = newpm; /* Don't pop $1 et al till now */
4460 LEAVE_with_name("given");
4464 /* Helper routines used by pp_smartmatch */
4466 S_make_matcher(pTHX_ REGEXP *re)
4469 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4471 PERL_ARGS_ASSERT_MAKE_MATCHER;
4473 PM_SETRE(matcher, ReREFCNT_inc(re));
4475 SAVEFREEOP((OP *) matcher);
4476 ENTER_with_name("matcher"); SAVETMPS;
4482 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4487 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4489 PL_op = (OP *) matcher;
4492 (void) Perl_pp_match(aTHX);
4494 return (SvTRUEx(POPs));
4498 S_destroy_matcher(pTHX_ PMOP *matcher)
4502 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4503 PERL_UNUSED_ARG(matcher);
4506 LEAVE_with_name("matcher");
4509 /* Do a smart match */
4512 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4513 return do_smartmatch(NULL, NULL, 0);
4516 /* This version of do_smartmatch() implements the
4517 * table of smart matches that is found in perlsyn.
4520 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4525 bool object_on_left = FALSE;
4526 SV *e = TOPs; /* e is for 'expression' */
4527 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4529 /* Take care only to invoke mg_get() once for each argument.
4530 * Currently we do this by copying the SV if it's magical. */
4532 if (!copied && SvGMAGICAL(d))
4533 d = sv_mortalcopy(d);
4540 e = sv_mortalcopy(e);
4542 /* First of all, handle overload magic of the rightmost argument */
4545 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4546 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4548 tmpsv = amagic_call(d, e, smart_amg, 0);
4555 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4558 SP -= 2; /* Pop the values */
4563 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4570 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4571 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4572 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4574 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4575 object_on_left = TRUE;
4578 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4580 if (object_on_left) {
4581 goto sm_any_sub; /* Treat objects like scalars */
4583 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4584 /* Test sub truth for each key */
4586 bool andedresults = TRUE;
4587 HV *hv = (HV*) SvRV(d);
4588 I32 numkeys = hv_iterinit(hv);
4589 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4592 while ( (he = hv_iternext(hv)) ) {
4593 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4594 ENTER_with_name("smartmatch_hash_key_test");
4597 PUSHs(hv_iterkeysv(he));
4599 c = call_sv(e, G_SCALAR);
4602 andedresults = FALSE;
4604 andedresults = SvTRUEx(POPs) && andedresults;
4606 LEAVE_with_name("smartmatch_hash_key_test");
4613 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4614 /* Test sub truth for each element */
4616 bool andedresults = TRUE;
4617 AV *av = (AV*) SvRV(d);
4618 const I32 len = av_len(av);
4619 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4622 for (i = 0; i <= len; ++i) {
4623 SV * const * const svp = av_fetch(av, i, FALSE);
4624 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4625 ENTER_with_name("smartmatch_array_elem_test");
4631 c = call_sv(e, G_SCALAR);
4634 andedresults = FALSE;
4636 andedresults = SvTRUEx(POPs) && andedresults;
4638 LEAVE_with_name("smartmatch_array_elem_test");
4647 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4648 ENTER_with_name("smartmatch_coderef");
4653 c = call_sv(e, G_SCALAR);
4657 else if (SvTEMP(TOPs))
4658 SvREFCNT_inc_void(TOPs);
4660 LEAVE_with_name("smartmatch_coderef");
4665 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4666 if (object_on_left) {
4667 goto sm_any_hash; /* Treat objects like scalars */
4669 else if (!SvOK(d)) {
4670 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4673 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4674 /* Check that the key-sets are identical */
4676 HV *other_hv = MUTABLE_HV(SvRV(d));
4678 bool other_tied = FALSE;
4679 U32 this_key_count = 0,
4680 other_key_count = 0;
4681 HV *hv = MUTABLE_HV(SvRV(e));
4683 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4684 /* Tied hashes don't know how many keys they have. */
4685 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4688 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4689 HV * const temp = other_hv;
4694 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4697 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4700 /* The hashes have the same number of keys, so it suffices
4701 to check that one is a subset of the other. */
4702 (void) hv_iterinit(hv);
4703 while ( (he = hv_iternext(hv)) ) {
4704 SV *key = hv_iterkeysv(he);
4706 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4709 if(!hv_exists_ent(other_hv, key, 0)) {
4710 (void) hv_iterinit(hv); /* reset iterator */
4716 (void) hv_iterinit(other_hv);
4717 while ( hv_iternext(other_hv) )
4721 other_key_count = HvUSEDKEYS(other_hv);
4723 if (this_key_count != other_key_count)
4728 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4729 AV * const other_av = MUTABLE_AV(SvRV(d));
4730 const I32 other_len = av_len(other_av) + 1;
4732 HV *hv = MUTABLE_HV(SvRV(e));
4734 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4735 for (i = 0; i < other_len; ++i) {
4736 SV ** const svp = av_fetch(other_av, i, FALSE);
4737 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4738 if (svp) { /* ??? When can this not happen? */
4739 if (hv_exists_ent(hv, *svp, 0))
4745 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4746 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4749 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4751 HV *hv = MUTABLE_HV(SvRV(e));
4753 (void) hv_iterinit(hv);
4754 while ( (he = hv_iternext(hv)) ) {
4755 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4756 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4757 (void) hv_iterinit(hv);
4758 destroy_matcher(matcher);
4762 destroy_matcher(matcher);
4768 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4769 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4776 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4777 if (object_on_left) {
4778 goto sm_any_array; /* Treat objects like scalars */
4780 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4781 AV * const other_av = MUTABLE_AV(SvRV(e));
4782 const I32 other_len = av_len(other_av) + 1;
4785 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4786 for (i = 0; i < other_len; ++i) {
4787 SV ** const svp = av_fetch(other_av, i, FALSE);
4789 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4790 if (svp) { /* ??? When can this not happen? */
4791 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4797 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4798 AV *other_av = MUTABLE_AV(SvRV(d));
4799 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4800 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4804 const I32 other_len = av_len(other_av);
4806 if (NULL == seen_this) {
4807 seen_this = newHV();
4808 (void) sv_2mortal(MUTABLE_SV(seen_this));
4810 if (NULL == seen_other) {
4811 seen_other = newHV();
4812 (void) sv_2mortal(MUTABLE_SV(seen_other));
4814 for(i = 0; i <= other_len; ++i) {
4815 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4816 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4818 if (!this_elem || !other_elem) {
4819 if ((this_elem && SvOK(*this_elem))
4820 || (other_elem && SvOK(*other_elem)))
4823 else if (hv_exists_ent(seen_this,
4824 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4825 hv_exists_ent(seen_other,
4826 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4828 if (*this_elem != *other_elem)
4832 (void)hv_store_ent(seen_this,
4833 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4835 (void)hv_store_ent(seen_other,
4836 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4842 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4843 (void) do_smartmatch(seen_this, seen_other, 0);
4845 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4854 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4855 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4858 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4859 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4862 for(i = 0; i <= this_len; ++i) {
4863 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4864 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4865 if (svp && matcher_matches_sv(matcher, *svp)) {
4866 destroy_matcher(matcher);
4870 destroy_matcher(matcher);
4874 else if (!SvOK(d)) {
4875 /* undef ~~ array */
4876 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4879 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4880 for (i = 0; i <= this_len; ++i) {
4881 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4882 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4883 if (!svp || !SvOK(*svp))
4892 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4894 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4895 for (i = 0; i <= this_len; ++i) {
4896 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4903 /* infinite recursion isn't supposed to happen here */
4904 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4905 (void) do_smartmatch(NULL, NULL, 1);
4907 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4916 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4917 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4918 SV *t = d; d = e; e = t;
4919 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4922 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4923 SV *t = d; d = e; e = t;
4924 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4925 goto sm_regex_array;
4928 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4930 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4932 PUSHs(matcher_matches_sv(matcher, d)
4935 destroy_matcher(matcher);
4940 /* See if there is overload magic on left */
4941 else if (object_on_left && SvAMAGIC(d)) {
4943 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4944 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4947 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4955 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4958 else if (!SvOK(d)) {
4959 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4960 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4965 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4966 DEBUG_M(if (SvNIOK(e))
4967 Perl_deb(aTHX_ " applying rule Any-Num\n");
4969 Perl_deb(aTHX_ " applying rule Num-numish\n");
4971 /* numeric comparison */
4974 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4975 (void) Perl_pp_i_eq(aTHX);
4977 (void) Perl_pp_eq(aTHX);
4985 /* As a last resort, use string comparison */
4986 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4989 return Perl_pp_seq(aTHX);
4995 register PERL_CONTEXT *cx;
4996 const I32 gimme = GIMME_V;
4998 /* This is essentially an optimization: if the match
4999 fails, we don't want to push a context and then
5000 pop it again right away, so we skip straight
5001 to the op that follows the leavewhen.
5002 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
5004 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
5005 RETURNOP(cLOGOP->op_other->op_next);
5007 ENTER_with_name("when");
5010 PUSHBLOCK(cx, CXt_WHEN, SP);
5020 register PERL_CONTEXT *cx;
5025 cxix = dopoptogiven(cxstack_ix);
5027 DIE(aTHX_ "Can't use when() outside a topicalizer");
5030 assert(CxTYPE(cx) == CXt_WHEN);
5033 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
5034 PL_curpm = newpm; /* pop $1 et al */
5036 LEAVE_with_name("when");
5038 if (cxix < cxstack_ix)
5041 cx = &cxstack[cxix];
5043 if (CxFOREACH(cx)) {
5044 /* clear off anything above the scope we're re-entering */
5045 I32 inner = PL_scopestack_ix;
5048 if (PL_scopestack_ix < inner)
5049 leave_scope(PL_scopestack[PL_scopestack_ix]);
5050 PL_curcop = cx->blk_oldcop;
5052 return cx->blk_loop.my_op->op_nextop;
5055 RETURNOP(cx->blk_givwhen.leave_op);
5062 register PERL_CONTEXT *cx;
5067 PERL_UNUSED_VAR(gimme);
5069 cxix = dopoptowhen(cxstack_ix);
5071 DIE(aTHX_ "Can't \"continue\" outside a when block");
5073 if (cxix < cxstack_ix)
5077 assert(CxTYPE(cx) == CXt_WHEN);
5080 PL_curpm = newpm; /* pop $1 et al */
5082 LEAVE_with_name("when");
5083 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5090 register PERL_CONTEXT *cx;
5092 cxix = dopoptogiven(cxstack_ix);
5094 DIE(aTHX_ "Can't \"break\" outside a given block");
5096 cx = &cxstack[cxix];
5098 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5100 if (cxix < cxstack_ix)
5103 /* Restore the sp at the time we entered the given block */
5106 return cx->blk_givwhen.leave_op;
5110 S_doparseform(pTHX_ SV *sv)
5113 register char *s = SvPV(sv, len);
5114 register char *send;
5115 register char *base = NULL; /* start of current field */
5116 register I32 skipspaces = 0; /* number of contiguous spaces seen */
5117 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5118 bool repeat = FALSE; /* ~~ seen on this line */
5119 bool postspace = FALSE; /* a text field may need right padding */
5122 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5124 bool ischop; /* it's a ^ rather than a @ */
5125 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5126 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5130 PERL_ARGS_ASSERT_DOPARSEFORM;
5133 Perl_croak(aTHX_ "Null picture in formline");
5135 if (SvTYPE(sv) >= SVt_PVMG) {
5136 /* This might, of course, still return NULL. */
5137 mg = mg_find(sv, PERL_MAGIC_fm);
5139 sv_upgrade(sv, SVt_PVMG);
5143 /* still the same as previously-compiled string? */
5144 SV *old = mg->mg_obj;
5145 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5146 && len == SvCUR(old)
5147 && strnEQ(SvPVX(old), SvPVX(sv), len)
5149 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5153 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5154 Safefree(mg->mg_ptr);
5160 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5161 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5164 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5165 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5169 /* estimate the buffer size needed */
5170 for (base = s; s <= send; s++) {
5171 if (*s == '\n' || *s == '@' || *s == '^')
5177 Newx(fops, maxops, U32);
5182 *fpc++ = FF_LINEMARK;
5183 noblank = repeat = FALSE;
5201 case ' ': case '\t':
5208 } /* else FALL THROUGH */
5216 *fpc++ = FF_LITERAL;
5224 *fpc++ = (U32)skipspaces;
5228 *fpc++ = FF_NEWLINE;
5232 arg = fpc - linepc + 1;
5239 *fpc++ = FF_LINEMARK;
5240 noblank = repeat = FALSE;
5249 ischop = s[-1] == '^';
5255 arg = (s - base) - 1;
5257 *fpc++ = FF_LITERAL;
5263 if (*s == '*') { /* @* or ^* */
5265 *fpc++ = 2; /* skip the @* or ^* */
5267 *fpc++ = FF_LINESNGL;
5270 *fpc++ = FF_LINEGLOB;
5272 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5273 arg = ischop ? FORM_NUM_BLANK : 0;
5278 const char * const f = ++s;
5281 arg |= FORM_NUM_POINT + (s - f);
5283 *fpc++ = s - base; /* fieldsize for FETCH */
5284 *fpc++ = FF_DECIMAL;
5286 unchopnum |= ! ischop;
5288 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5289 arg = ischop ? FORM_NUM_BLANK : 0;
5291 s++; /* skip the '0' first */
5295 const char * const f = ++s;
5298 arg |= FORM_NUM_POINT + (s - f);
5300 *fpc++ = s - base; /* fieldsize for FETCH */
5301 *fpc++ = FF_0DECIMAL;
5303 unchopnum |= ! ischop;
5305 else { /* text field */
5307 bool ismore = FALSE;
5310 while (*++s == '>') ;
5311 prespace = FF_SPACE;
5313 else if (*s == '|') {
5314 while (*++s == '|') ;
5315 prespace = FF_HALFSPACE;
5320 while (*++s == '<') ;
5323 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5327 *fpc++ = s - base; /* fieldsize for FETCH */
5329 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5332 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5346 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5349 mg->mg_ptr = (char *) fops;
5350 mg->mg_len = arg * sizeof(U32);
5351 mg->mg_obj = sv_copy;
5352 mg->mg_flags |= MGf_REFCOUNTED;
5354 if (unchopnum && repeat)
5355 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5362 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5364 /* Can value be printed in fldsize chars, using %*.*f ? */
5368 int intsize = fldsize - (value < 0 ? 1 : 0);
5370 if (frcsize & FORM_NUM_POINT)
5372 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5375 while (intsize--) pwr *= 10.0;
5376 while (frcsize--) eps /= 10.0;
5379 if (value + eps >= pwr)
5382 if (value - eps <= -pwr)
5389 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5392 SV * const datasv = FILTER_DATA(idx);
5393 const int filter_has_file = IoLINES(datasv);
5394 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5395 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5400 char *prune_from = NULL;
5401 bool read_from_cache = FALSE;
5404 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5406 assert(maxlen >= 0);
5409 /* I was having segfault trouble under Linux 2.2.5 after a
5410 parse error occured. (Had to hack around it with a test
5411 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5412 not sure where the trouble is yet. XXX */
5415 SV *const cache = datasv;
5418 const char *cache_p = SvPV(cache, cache_len);
5422 /* Running in block mode and we have some cached data already.
5424 if (cache_len >= umaxlen) {
5425 /* In fact, so much data we don't even need to call
5430 const char *const first_nl =
5431 (const char *)memchr(cache_p, '\n', cache_len);
5433 take = first_nl + 1 - cache_p;
5437 sv_catpvn(buf_sv, cache_p, take);
5438 sv_chop(cache, cache_p + take);
5439 /* Definitely not EOF */
5443 sv_catsv(buf_sv, cache);
5445 umaxlen -= cache_len;
5448 read_from_cache = TRUE;
5452 /* Filter API says that the filter appends to the contents of the buffer.
5453 Usually the buffer is "", so the details don't matter. But if it's not,
5454 then clearly what it contains is already filtered by this filter, so we
5455 don't want to pass it in a second time.
5456 I'm going to use a mortal in case the upstream filter croaks. */
5457 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5458 ? sv_newmortal() : buf_sv;
5459 SvUPGRADE(upstream, SVt_PV);
5461 if (filter_has_file) {
5462 status = FILTER_READ(idx+1, upstream, 0);
5465 if (filter_sub && status >= 0) {
5469 ENTER_with_name("call_filter_sub");
5470 save_gp(PL_defgv, 0);
5471 GvINTRO_off(PL_defgv);
5472 SAVEGENERICSV(GvSV(PL_defgv));
5476 DEFSV_set(upstream);
5477 SvREFCNT_inc_simple_void_NN(upstream);
5481 PUSHs(filter_state);
5484 count = call_sv(filter_sub, G_SCALAR);
5496 LEAVE_with_name("call_filter_sub");
5499 if(SvOK(upstream)) {
5500 got_p = SvPV(upstream, got_len);
5502 if (got_len > umaxlen) {
5503 prune_from = got_p + umaxlen;
5506 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5507 if (first_nl && first_nl + 1 < got_p + got_len) {
5508 /* There's a second line here... */
5509 prune_from = first_nl + 1;
5514 /* Oh. Too long. Stuff some in our cache. */
5515 STRLEN cached_len = got_p + got_len - prune_from;
5516 SV *const cache = datasv;
5519 /* Cache should be empty. */
5520 assert(!SvCUR(cache));
5523 sv_setpvn(cache, prune_from, cached_len);
5524 /* If you ask for block mode, you may well split UTF-8 characters.
5525 "If it breaks, you get to keep both parts"
5526 (Your code is broken if you don't put them back together again
5527 before something notices.) */
5528 if (SvUTF8(upstream)) {
5531 SvCUR_set(upstream, got_len - cached_len);
5533 /* Can't yet be EOF */
5538 /* If they are at EOF but buf_sv has something in it, then they may never
5539 have touched the SV upstream, so it may be undefined. If we naively
5540 concatenate it then we get a warning about use of uninitialised value.
5542 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5543 sv_catsv(buf_sv, upstream);
5547 IoLINES(datasv) = 0;
5549 SvREFCNT_dec(filter_state);
5550 IoTOP_GV(datasv) = NULL;
5553 SvREFCNT_dec(filter_sub);
5554 IoBOTTOM_GV(datasv) = NULL;
5556 filter_del(S_run_user_filter);
5558 if (status == 0 && read_from_cache) {
5559 /* If we read some data from the cache (and by getting here it implies
5560 that we emptied the cache) then we aren't yet at EOF, and mustn't
5561 report that to our caller. */
5567 /* perhaps someone can come up with a better name for
5568 this? it is not really "absolute", per se ... */
5570 S_path_is_absolute(const char *name)
5572 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5574 if (PERL_FILE_IS_ABSOLUTE(name)
5576 || (*name == '.' && ((name[1] == '/' ||
5577 (name[1] == '.' && name[2] == '/'))
5578 || (name[1] == '\\' ||
5579 ( name[1] == '.' && name[2] == '\\')))
5582 || (*name == '.' && (name[1] == '/' ||
5583 (name[1] == '.' && name[2] == '/')))
5595 * c-indentation-style: bsd
5597 * indent-tabs-mode: t
5600 * ex: set ts=8 sts=4 sw=4 noet: