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)) {
209 assert (SvUTF8(tmpstr));
210 } else if (SvUTF8(tmpstr)) {
211 /* Not doing UTF-8, despite what the SV says. Is this only if
212 we're trapped in use 'bytes'? */
213 /* Make a copy of the octet sequence, but without the flag on,
214 as the compiler now honours the SvUTF8 flag on tmpstr. */
216 const char *const p = SvPV(tmpstr, len);
217 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
219 else if (SvAMAGIC(tmpstr)) {
220 /* make a copy to avoid extra stringifies */
221 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
224 /* If it is gmagical, create a mortal copy, but without calling
225 get-magic, as we have already done that. */
226 if(SvGMAGICAL(tmpstr)) {
227 SV *mortalcopy = sv_newmortal();
228 sv_setsv_flags(mortalcopy, tmpstr, 0);
233 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
235 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
237 PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
238 inside tie/overload accessors. */
244 #ifndef INCOMPLETE_TAINTS
247 SvTAINTED_on((SV*)re);
248 RX_EXTFLAGS(re) |= RXf_TAINTED;
253 if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
257 #if !defined(USE_ITHREADS)
258 /* can't change the optree at runtime either */
259 /* PMf_KEEP is handled differently under threads to avoid these problems */
260 if (pm->op_pmflags & PMf_KEEP) {
261 pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
262 cLOGOP->op_first->op_next = PL_op->op_next;
272 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
273 register PMOP * const pm = (PMOP*) cLOGOP->op_other;
274 register SV * const dstr = cx->sb_dstr;
275 register char *s = cx->sb_s;
276 register char *m = cx->sb_m;
277 char *orig = cx->sb_orig;
278 register REGEXP * const rx = cx->sb_rx;
280 REGEXP *old = PM_GETRE(pm);
287 PM_SETRE(pm,ReREFCNT_inc(rx));
290 rxres_restore(&cx->sb_rxres, rx);
291 RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
293 if (cx->sb_iters++) {
294 const I32 saviters = cx->sb_iters;
295 if (cx->sb_iters > cx->sb_maxiters)
296 DIE(aTHX_ "Substitution loop");
298 SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
300 /* See "how taint works" above pp_subst() */
302 cx->sb_rxtainted |= SUBST_TAINT_REPL;
303 sv_catsv_nomg(dstr, POPs);
304 /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
308 /* I believe that we can't set REXEC_SCREAM here if
309 SvSCREAM(cx->sb_targ) is true because SvPVX(cx->sb_targ) isn't always
310 equal to s. [See the comment before Perl_re_intuit_start(), which is
311 called from Perl_regexec_flags(), which says that it should be when
312 SvSCREAM() is true.] s, cx->sb_strend and orig will be consistent
313 with SvPVX(cx->sb_targ), as substconst doesn't modify cx->sb_targ
315 if (CxONCE(cx) || s < orig ||
316 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
317 (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
318 ((cx->sb_rflags & REXEC_COPY_STR)
319 ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
320 : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
322 SV *targ = cx->sb_targ;
324 assert(cx->sb_strend >= s);
325 if(cx->sb_strend > s) {
326 if (DO_UTF8(dstr) && !SvUTF8(targ))
327 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
329 sv_catpvn(dstr, s, cx->sb_strend - s);
331 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
332 cx->sb_rxtainted |= SUBST_TAINT_PAT;
334 if (pm->op_pmflags & PMf_NONDESTRUCT) {
336 /* From here on down we're using the copy, and leaving the
337 original untouched. */
341 #ifdef PERL_OLD_COPY_ON_WRITE
343 sv_force_normal_flags(targ, SV_COW_DROP_PV);
349 SvPV_set(targ, SvPVX(dstr));
350 SvCUR_set(targ, SvCUR(dstr));
351 SvLEN_set(targ, SvLEN(dstr));
354 SvPV_set(dstr, NULL);
356 mPUSHi(saviters - 1);
358 (void)SvPOK_only_UTF8(targ);
361 /* update the taint state of various various variables in
362 * preparation for final exit.
363 * See "how taint works" above pp_subst() */
365 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
366 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
367 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
369 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
371 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
372 && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
374 SvTAINTED_on(TOPs); /* taint return value */
375 /* needed for mg_set below */
376 PL_tainted = cBOOL(cx->sb_rxtainted &
377 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
380 /* PL_tainted must be correctly set for this mg_set */
383 LEAVE_SCOPE(cx->sb_oldsave);
385 RETURNOP(pm->op_next);
388 cx->sb_iters = saviters;
390 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
393 cx->sb_orig = orig = RX_SUBBEG(rx);
395 cx->sb_strend = s + (cx->sb_strend - m);
397 cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
399 if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
400 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
402 sv_catpvn(dstr, s, m-s);
404 cx->sb_s = RX_OFFS(rx)[0].end + orig;
405 { /* Update the pos() information. */
407 = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
409 SvUPGRADE(sv, SVt_PVMG);
410 if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
411 #ifdef PERL_OLD_COPY_ON_WRITE
413 sv_force_normal_flags(sv, 0);
415 mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
418 mg->mg_len = m - orig;
421 (void)ReREFCNT_inc(rx);
422 /* update the taint state of various various variables in preparation
423 * for calling the code block.
424 * See "how taint works" above pp_subst() */
426 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
427 cx->sb_rxtainted |= SUBST_TAINT_PAT;
429 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
430 ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
431 == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
433 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
435 if (cx->sb_iters > 1 && (cx->sb_rxtainted &
436 (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
437 SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
438 ? cx->sb_dstr : cx->sb_targ);
441 rxres_save(&cx->sb_rxres, rx);
443 RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
447 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
452 PERL_ARGS_ASSERT_RXRES_SAVE;
455 if (!p || p[1] < RX_NPARENS(rx)) {
456 #ifdef PERL_OLD_COPY_ON_WRITE
457 i = 7 + RX_NPARENS(rx) * 2;
459 i = 6 + RX_NPARENS(rx) * 2;
468 *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
469 RX_MATCH_COPIED_off(rx);
471 #ifdef PERL_OLD_COPY_ON_WRITE
472 *p++ = PTR2UV(RX_SAVED_COPY(rx));
473 RX_SAVED_COPY(rx) = NULL;
476 *p++ = RX_NPARENS(rx);
478 *p++ = PTR2UV(RX_SUBBEG(rx));
479 *p++ = (UV)RX_SUBLEN(rx);
480 for (i = 0; i <= RX_NPARENS(rx); ++i) {
481 *p++ = (UV)RX_OFFS(rx)[i].start;
482 *p++ = (UV)RX_OFFS(rx)[i].end;
487 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
492 PERL_ARGS_ASSERT_RXRES_RESTORE;
495 RX_MATCH_COPY_FREE(rx);
496 RX_MATCH_COPIED_set(rx, *p);
499 #ifdef PERL_OLD_COPY_ON_WRITE
500 if (RX_SAVED_COPY(rx))
501 SvREFCNT_dec (RX_SAVED_COPY(rx));
502 RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
506 RX_NPARENS(rx) = *p++;
508 RX_SUBBEG(rx) = INT2PTR(char*,*p++);
509 RX_SUBLEN(rx) = (I32)(*p++);
510 for (i = 0; i <= RX_NPARENS(rx); ++i) {
511 RX_OFFS(rx)[i].start = (I32)(*p++);
512 RX_OFFS(rx)[i].end = (I32)(*p++);
517 S_rxres_free(pTHX_ void **rsp)
519 UV * const p = (UV*)*rsp;
521 PERL_ARGS_ASSERT_RXRES_FREE;
526 void *tmp = INT2PTR(char*,*p);
529 PoisonFree(*p, 1, sizeof(*p));
531 Safefree(INT2PTR(char*,*p));
533 #ifdef PERL_OLD_COPY_ON_WRITE
535 SvREFCNT_dec (INT2PTR(SV*,p[1]));
543 #define FORM_NUM_BLANK (1<<30)
544 #define FORM_NUM_POINT (1<<29)
548 dVAR; dSP; dMARK; dORIGMARK;
549 register SV * const tmpForm = *++MARK;
550 SV *formsv; /* contains text of original format */
551 register U32 *fpc; /* format ops program counter */
552 register char *t; /* current append position in target string */
553 const char *f; /* current position in format string */
555 register SV *sv = NULL; /* current item */
556 const char *item = NULL;/* string value of current item */
557 I32 itemsize = 0; /* length of current item, possibly truncated */
558 I32 fieldsize = 0; /* width of current field */
559 I32 lines = 0; /* number of lines that have been output */
560 bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
561 const char *chophere = NULL; /* where to chop current item */
562 STRLEN linemark = 0; /* pos of start of line in output */
564 bool gotsome = FALSE; /* seen at least one non-blank item on this line */
566 STRLEN linemax; /* estimate of output size in bytes */
567 bool item_is_utf8 = FALSE;
568 bool targ_is_utf8 = FALSE;
571 U8 *source; /* source of bytes to append */
572 STRLEN to_copy; /* how may bytes to append */
573 char trans; /* what chars to translate */
575 mg = doparseform(tmpForm);
577 fpc = (U32*)mg->mg_ptr;
578 /* the actual string the format was compiled from.
579 * with overload etc, this may not match tmpForm */
583 SvPV_force(PL_formtarget, len);
584 if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
585 SvTAINTED_on(PL_formtarget);
586 if (DO_UTF8(PL_formtarget))
588 linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
589 t = SvGROW(PL_formtarget, len + linemax + 1);
590 /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
592 f = SvPV_const(formsv, len);
596 const char *name = "???";
599 case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
600 case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
601 case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
602 case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
603 case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
605 case FF_CHECKNL: name = "CHECKNL"; break;
606 case FF_CHECKCHOP: name = "CHECKCHOP"; break;
607 case FF_SPACE: name = "SPACE"; break;
608 case FF_HALFSPACE: name = "HALFSPACE"; break;
609 case FF_ITEM: name = "ITEM"; break;
610 case FF_CHOP: name = "CHOP"; break;
611 case FF_LINEGLOB: name = "LINEGLOB"; break;
612 case FF_NEWLINE: name = "NEWLINE"; break;
613 case FF_MORE: name = "MORE"; break;
614 case FF_LINEMARK: name = "LINEMARK"; break;
615 case FF_END: name = "END"; break;
616 case FF_0DECIMAL: name = "0DECIMAL"; break;
617 case FF_LINESNGL: name = "LINESNGL"; break;
620 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
622 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
626 linemark = t - SvPVX(PL_formtarget);
636 item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
652 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
655 SvTAINTED_on(PL_formtarget);
661 const char *s = item = SvPV_const(sv, len);
664 itemsize = sv_len_utf8(sv);
665 if (itemsize != (I32)len) {
667 if (itemsize > fieldsize) {
668 itemsize = fieldsize;
669 itembytes = itemsize;
670 sv_pos_u2b(sv, &itembytes, 0);
674 send = chophere = s + itembytes;
684 sv_pos_b2u(sv, &itemsize);
688 item_is_utf8 = FALSE;
689 if (itemsize > fieldsize)
690 itemsize = fieldsize;
691 send = chophere = s + itemsize;
705 const char *s = item = SvPV_const(sv, len);
708 itemsize = sv_len_utf8(sv);
709 if (itemsize != (I32)len) {
711 if (itemsize <= fieldsize) {
712 const char *send = chophere = s + itemsize;
725 itemsize = fieldsize;
726 itembytes = itemsize;
727 sv_pos_u2b(sv, &itembytes, 0);
728 send = chophere = s + itembytes;
729 while (s < send || (s == send && isSPACE(*s))) {
739 if (strchr(PL_chopset, *s))
744 itemsize = chophere - item;
745 sv_pos_b2u(sv, &itemsize);
751 item_is_utf8 = FALSE;
752 if (itemsize <= fieldsize) {
753 const char *const send = chophere = s + itemsize;
766 itemsize = fieldsize;
767 send = chophere = s + itemsize;
768 while (s < send || (s == send && isSPACE(*s))) {
778 if (strchr(PL_chopset, *s))
783 itemsize = chophere - item;
789 arg = fieldsize - itemsize;
798 arg = fieldsize - itemsize;
812 /* convert to_copy from chars to bytes */
816 to_copy = s - source;
822 const char *s = chophere;
836 const bool oneline = fpc[-1] == FF_LINESNGL;
837 const char *s = item = SvPV_const(sv, len);
838 const char *const send = s + len;
840 item_is_utf8 = DO_UTF8(sv);
851 to_copy = s - SvPVX_const(sv) - 1;
865 /* append to_copy bytes from source to PL_formstring.
866 * item_is_utf8 implies source is utf8.
867 * if trans, translate certain characters during the copy */
872 SvCUR_set(PL_formtarget,
873 t - SvPVX_const(PL_formtarget));
875 if (targ_is_utf8 && !item_is_utf8) {
876 source = tmp = bytes_to_utf8(source, &to_copy);
878 if (item_is_utf8 && !targ_is_utf8) {
880 /* Upgrade targ to UTF8, and then we reduce it to
881 a problem we have a simple solution for.
882 Don't need get magic. */
883 sv_utf8_upgrade_nomg(PL_formtarget);
885 /* re-calculate linemark */
886 s = (U8*)SvPVX(PL_formtarget);
887 /* the bytes we initially allocated to append the
888 * whole line may have been gobbled up during the
889 * upgrade, so allocate a whole new line's worth
894 linemark = s - (U8*)SvPVX(PL_formtarget);
896 /* Easy. They agree. */
897 assert (item_is_utf8 == targ_is_utf8);
900 /* @* and ^* are the only things that can exceed
901 * the linemax, so grow by the output size, plus
902 * a whole new form's worth in case of any further
904 grow = linemax + to_copy;
906 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
907 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
909 Copy(source, t, to_copy, char);
911 /* blank out ~ or control chars, depending on trans.
912 * works on bytes not chars, so relies on not
913 * matching utf8 continuation bytes */
915 U8 *send = s + to_copy;
918 if (trans == '~' ? (ch == '~') :
931 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
939 #if defined(USE_LONG_DOUBLE)
941 ((arg & FORM_NUM_POINT) ?
942 "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
945 ((arg & FORM_NUM_POINT) ?
946 "%#0*.*f" : "%0*.*f");
951 #if defined(USE_LONG_DOUBLE)
953 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
956 ((arg & FORM_NUM_POINT) ? "%#*.*f" : "%*.*f");
959 /* If the field is marked with ^ and the value is undefined,
961 if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
969 /* overflow evidence */
970 if (num_overflow(value, fieldsize, arg)) {
976 /* Formats aren't yet marked for locales, so assume "yes". */
978 STORE_NUMERIC_STANDARD_SET_LOCAL();
979 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
980 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
981 RESTORE_NUMERIC_STANDARD();
988 while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
996 if (arg) { /* repeat until fields exhausted? */
1002 t = SvPVX(PL_formtarget) + linemark;
1009 const char *s = chophere;
1010 const char *send = item + len;
1012 while (isSPACE(*s) && (s < send))
1017 arg = fieldsize - itemsize;
1024 if (strnEQ(s1," ",3)) {
1025 while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1036 assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
1038 SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1040 SvUTF8_on(PL_formtarget);
1041 FmLINES(PL_formtarget) += lines;
1043 if (fpc[-1] == FF_BLANK)
1044 RETURNOP(cLISTOP->op_first);
1056 if (PL_stack_base + *PL_markstack_ptr == SP) {
1058 if (GIMME_V == G_SCALAR)
1060 RETURNOP(PL_op->op_next->op_next);
1062 PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1063 Perl_pp_pushmark(aTHX); /* push dst */
1064 Perl_pp_pushmark(aTHX); /* push src */
1065 ENTER_with_name("grep"); /* enter outer scope */
1068 if (PL_op->op_private & OPpGREP_LEX)
1069 SAVESPTR(PAD_SVl(PL_op->op_targ));
1072 ENTER_with_name("grep_item"); /* enter inner scope */
1075 src = PL_stack_base[*PL_markstack_ptr];
1077 if (PL_op->op_private & OPpGREP_LEX)
1078 PAD_SVl(PL_op->op_targ) = src;
1083 if (PL_op->op_type == OP_MAPSTART)
1084 Perl_pp_pushmark(aTHX); /* push top */
1085 return ((LOGOP*)PL_op->op_next)->op_other;
1091 const I32 gimme = GIMME_V;
1092 I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1098 /* first, move source pointer to the next item in the source list */
1099 ++PL_markstack_ptr[-1];
1101 /* if there are new items, push them into the destination list */
1102 if (items && gimme != G_VOID) {
1103 /* might need to make room back there first */
1104 if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1105 /* XXX this implementation is very pessimal because the stack
1106 * is repeatedly extended for every set of items. Is possible
1107 * to do this without any stack extension or copying at all
1108 * by maintaining a separate list over which the map iterates
1109 * (like foreach does). --gsar */
1111 /* everything in the stack after the destination list moves
1112 * towards the end the stack by the amount of room needed */
1113 shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1115 /* items to shift up (accounting for the moved source pointer) */
1116 count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1118 /* This optimization is by Ben Tilly and it does
1119 * things differently from what Sarathy (gsar)
1120 * is describing. The downside of this optimization is
1121 * that leaves "holes" (uninitialized and hopefully unused areas)
1122 * to the Perl stack, but on the other hand this
1123 * shouldn't be a problem. If Sarathy's idea gets
1124 * implemented, this optimization should become
1125 * irrelevant. --jhi */
1127 shift = count; /* Avoid shifting too often --Ben Tilly */
1131 dst = (SP += shift);
1132 PL_markstack_ptr[-1] += shift;
1133 *PL_markstack_ptr += shift;
1137 /* copy the new items down to the destination list */
1138 dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1139 if (gimme == G_ARRAY) {
1140 /* add returned items to the collection (making mortal copies
1141 * if necessary), then clear the current temps stack frame
1142 * *except* for those items. We do this splicing the items
1143 * into the start of the tmps frame (so some items may be on
1144 * the tmps stack twice), then moving PL_tmps_floor above
1145 * them, then freeing the frame. That way, the only tmps that
1146 * accumulate over iterations are the return values for map.
1147 * We have to do to this way so that everything gets correctly
1148 * freed if we die during the map.
1152 /* make space for the slice */
1153 EXTEND_MORTAL(items);
1154 tmpsbase = PL_tmps_floor + 1;
1155 Move(PL_tmps_stack + tmpsbase,
1156 PL_tmps_stack + tmpsbase + items,
1157 PL_tmps_ix - PL_tmps_floor,
1159 PL_tmps_ix += items;
1164 sv = sv_mortalcopy(sv);
1166 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1168 /* clear the stack frame except for the items */
1169 PL_tmps_floor += items;
1171 /* FREETMPS may have cleared the TEMP flag on some of the items */
1174 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1177 /* scalar context: we don't care about which values map returns
1178 * (we use undef here). And so we certainly don't want to do mortal
1179 * copies of meaningless values. */
1180 while (items-- > 0) {
1182 *dst-- = &PL_sv_undef;
1190 LEAVE_with_name("grep_item"); /* exit inner scope */
1193 if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1195 (void)POPMARK; /* pop top */
1196 LEAVE_with_name("grep"); /* exit outer scope */
1197 (void)POPMARK; /* pop src */
1198 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1199 (void)POPMARK; /* pop dst */
1200 SP = PL_stack_base + POPMARK; /* pop original mark */
1201 if (gimme == G_SCALAR) {
1202 if (PL_op->op_private & OPpGREP_LEX) {
1203 SV* sv = sv_newmortal();
1204 sv_setiv(sv, items);
1212 else if (gimme == G_ARRAY)
1219 ENTER_with_name("grep_item"); /* enter inner scope */
1222 /* set $_ to the new source item */
1223 src = PL_stack_base[PL_markstack_ptr[-1]];
1225 if (PL_op->op_private & OPpGREP_LEX)
1226 PAD_SVl(PL_op->op_targ) = src;
1230 RETURNOP(cLOGOP->op_other);
1239 if (GIMME == G_ARRAY)
1241 if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1242 return cLOGOP->op_other;
1252 if (GIMME == G_ARRAY) {
1253 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1257 SV * const targ = PAD_SV(PL_op->op_targ);
1260 if (PL_op->op_private & OPpFLIP_LINENUM) {
1261 if (GvIO(PL_last_in_gv)) {
1262 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1265 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1267 flip = SvIV(sv) == SvIV(GvSV(gv));
1273 sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1274 if (PL_op->op_flags & OPf_SPECIAL) {
1282 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1285 sv_setpvs(TARG, "");
1291 /* This code tries to decide if "$left .. $right" should use the
1292 magical string increment, or if the range is numeric (we make
1293 an exception for .."0" [#18165]). AMS 20021031. */
1295 #define RANGE_IS_NUMERIC(left,right) ( \
1296 SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
1297 SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1298 (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1299 looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1300 && (!SvOK(right) || looks_like_number(right))))
1306 if (GIMME == G_ARRAY) {
1312 if (RANGE_IS_NUMERIC(left,right)) {
1315 if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) ||
1316 (SvOK(right) && SvNV_nomg(right) > IV_MAX))
1317 DIE(aTHX_ "Range iterator outside integer range");
1318 i = SvIV_nomg(left);
1319 max = SvIV_nomg(right);
1328 SV * const sv = sv_2mortal(newSViv(i++));
1334 const char * const lpv = SvPV_nomg_const(left, llen);
1335 const char * const tmps = SvPV_nomg_const(right, len);
1337 SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1338 while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1340 if (strEQ(SvPVX_const(sv),tmps))
1342 sv = sv_2mortal(newSVsv(sv));
1349 SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1353 if (PL_op->op_private & OPpFLIP_LINENUM) {
1354 if (GvIO(PL_last_in_gv)) {
1355 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1358 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1359 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1367 sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1368 sv_catpvs(targ, "E0");
1378 static const char * const context_name[] = {
1380 NULL, /* CXt_WHEN never actually needs "block" */
1381 NULL, /* CXt_BLOCK never actually needs "block" */
1382 NULL, /* CXt_GIVEN never actually needs "block" */
1383 NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1384 NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1385 NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1386 NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1394 S_dopoptolabel(pTHX_ const char *label)
1399 PERL_ARGS_ASSERT_DOPOPTOLABEL;
1401 for (i = cxstack_ix; i >= 0; i--) {
1402 register const PERL_CONTEXT * const cx = &cxstack[i];
1403 switch (CxTYPE(cx)) {
1409 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1410 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1411 if (CxTYPE(cx) == CXt_NULL)
1414 case CXt_LOOP_LAZYIV:
1415 case CXt_LOOP_LAZYSV:
1417 case CXt_LOOP_PLAIN:
1419 const char *cx_label = CxLABEL(cx);
1420 if (!cx_label || strNE(label, cx_label) ) {
1421 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1422 (long)i, cx_label));
1425 DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1436 Perl_dowantarray(pTHX)
1439 const I32 gimme = block_gimme();
1440 return (gimme == G_VOID) ? G_SCALAR : gimme;
1444 Perl_block_gimme(pTHX)
1447 const I32 cxix = dopoptosub(cxstack_ix);
1451 switch (cxstack[cxix].blk_gimme) {
1459 Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1466 Perl_is_lvalue_sub(pTHX)
1469 const I32 cxix = dopoptosub(cxstack_ix);
1470 assert(cxix >= 0); /* We should only be called from inside subs */
1472 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1473 return CxLVAL(cxstack + cxix);
1478 /* only used by PUSHSUB */
1480 Perl_was_lvalue_sub(pTHX)
1483 const I32 cxix = dopoptosub(cxstack_ix-1);
1484 assert(cxix >= 0); /* We should only be called from inside subs */
1486 if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1487 return CxLVAL(cxstack + cxix);
1493 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1498 PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1500 for (i = startingblock; i >= 0; i--) {
1501 register const PERL_CONTEXT * const cx = &cxstk[i];
1502 switch (CxTYPE(cx)) {
1508 DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1516 S_dopoptoeval(pTHX_ I32 startingblock)
1520 for (i = startingblock; i >= 0; i--) {
1521 register const PERL_CONTEXT *cx = &cxstack[i];
1522 switch (CxTYPE(cx)) {
1526 DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1534 S_dopoptoloop(pTHX_ I32 startingblock)
1538 for (i = startingblock; i >= 0; i--) {
1539 register const PERL_CONTEXT * const cx = &cxstack[i];
1540 switch (CxTYPE(cx)) {
1546 Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1547 context_name[CxTYPE(cx)], OP_NAME(PL_op));
1548 if ((CxTYPE(cx)) == CXt_NULL)
1551 case CXt_LOOP_LAZYIV:
1552 case CXt_LOOP_LAZYSV:
1554 case CXt_LOOP_PLAIN:
1555 DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1563 S_dopoptogiven(pTHX_ I32 startingblock)
1567 for (i = startingblock; i >= 0; i--) {
1568 register const PERL_CONTEXT *cx = &cxstack[i];
1569 switch (CxTYPE(cx)) {
1573 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1575 case CXt_LOOP_PLAIN:
1576 assert(!CxFOREACHDEF(cx));
1578 case CXt_LOOP_LAZYIV:
1579 case CXt_LOOP_LAZYSV:
1581 if (CxFOREACHDEF(cx)) {
1582 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1591 S_dopoptowhen(pTHX_ I32 startingblock)
1595 for (i = startingblock; i >= 0; i--) {
1596 register const PERL_CONTEXT *cx = &cxstack[i];
1597 switch (CxTYPE(cx)) {
1601 DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1609 Perl_dounwind(pTHX_ I32 cxix)
1614 if (!PL_curstackinfo) /* can happen if die during thread cloning */
1617 while (cxstack_ix > cxix) {
1619 register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1620 DEBUG_CX("UNWIND"); \
1621 /* Note: we don't need to restore the base context info till the end. */
1622 switch (CxTYPE(cx)) {
1625 continue; /* not break */
1633 case CXt_LOOP_LAZYIV:
1634 case CXt_LOOP_LAZYSV:
1636 case CXt_LOOP_PLAIN:
1647 PERL_UNUSED_VAR(optype);
1651 Perl_qerror(pTHX_ SV *err)
1655 PERL_ARGS_ASSERT_QERROR;
1658 if (PL_in_eval & EVAL_KEEPERR) {
1659 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1663 sv_catsv(ERRSV, err);
1666 sv_catsv(PL_errors, err);
1668 Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1670 ++PL_parser->error_count;
1674 Perl_die_unwind(pTHX_ SV *msv)
1677 SV *exceptsv = sv_mortalcopy(msv);
1678 U8 in_eval = PL_in_eval;
1679 PERL_ARGS_ASSERT_DIE_UNWIND;
1686 * Historically, perl used to set ERRSV ($@) early in the die
1687 * process and rely on it not getting clobbered during unwinding.
1688 * That sucked, because it was liable to get clobbered, so the
1689 * setting of ERRSV used to emit the exception from eval{} has
1690 * been moved to much later, after unwinding (see just before
1691 * JMPENV_JUMP below). However, some modules were relying on the
1692 * early setting, by examining $@ during unwinding to use it as
1693 * a flag indicating whether the current unwinding was caused by
1694 * an exception. It was never a reliable flag for that purpose,
1695 * being totally open to false positives even without actual
1696 * clobberage, but was useful enough for production code to
1697 * semantically rely on it.
1699 * We'd like to have a proper introspective interface that
1700 * explicitly describes the reason for whatever unwinding
1701 * operations are currently in progress, so that those modules
1702 * work reliably and $@ isn't further overloaded. But we don't
1703 * have one yet. In its absence, as a stopgap measure, ERRSV is
1704 * now *additionally* set here, before unwinding, to serve as the
1705 * (unreliable) flag that it used to.
1707 * This behaviour is temporary, and should be removed when a
1708 * proper way to detect exceptional unwinding has been developed.
1709 * As of 2010-12, the authors of modules relying on the hack
1710 * are aware of the issue, because the modules failed on
1711 * perls 5.13.{1..7} which had late setting of $@ without this
1712 * early-setting hack.
1714 if (!(in_eval & EVAL_KEEPERR)) {
1715 SvTEMP_off(exceptsv);
1716 sv_setsv(ERRSV, exceptsv);
1719 while ((cxix = dopoptoeval(cxstack_ix)) < 0
1720 && PL_curstackinfo->si_prev)
1729 register PERL_CONTEXT *cx;
1732 JMPENV *restartjmpenv;
1735 if (cxix < cxstack_ix)
1738 POPBLOCK(cx,PL_curpm);
1739 if (CxTYPE(cx) != CXt_EVAL) {
1741 const char* message = SvPVx_const(exceptsv, msglen);
1742 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1743 PerlIO_write(Perl_error_log, message, msglen);
1747 namesv = cx->blk_eval.old_namesv;
1748 oldcop = cx->blk_oldcop;
1749 restartjmpenv = cx->blk_eval.cur_top_env;
1750 restartop = cx->blk_eval.retop;
1752 if (gimme == G_SCALAR)
1753 *++newsp = &PL_sv_undef;
1754 PL_stack_sp = newsp;
1758 /* LEAVE could clobber PL_curcop (see save_re_context())
1759 * XXX it might be better to find a way to avoid messing with
1760 * PL_curcop in save_re_context() instead, but this is a more
1761 * minimal fix --GSAR */
1764 if (optype == OP_REQUIRE) {
1765 (void)hv_store(GvHVn(PL_incgv),
1766 SvPVX_const(namesv),
1767 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1769 /* note that unlike pp_entereval, pp_require isn't
1770 * supposed to trap errors. So now that we've popped the
1771 * EVAL that pp_require pushed, and processed the error
1772 * message, rethrow the error */
1773 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1774 SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1777 if (in_eval & EVAL_KEEPERR) {
1778 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1782 sv_setsv(ERRSV, exceptsv);
1784 PL_restartjmpenv = restartjmpenv;
1785 PL_restartop = restartop;
1791 write_to_stderr(exceptsv);
1798 dVAR; dSP; dPOPTOPssrl;
1799 if (SvTRUE(left) != SvTRUE(right))
1806 =for apidoc caller_cx
1808 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1809 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1810 information returned to Perl by C<caller>. Note that XSUBs don't get a
1811 stack frame, so C<caller_cx(0, NULL)> will return information for the
1812 immediately-surrounding Perl code.
1814 This function skips over the automatic calls to C<&DB::sub> made on the
1815 behalf of the debugger. If the stack frame requested was a sub called by
1816 C<DB::sub>, the return value will be the frame for the call to
1817 C<DB::sub>, since that has the correct line number/etc. for the call
1818 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1819 frame for the sub call itself.
1824 const PERL_CONTEXT *
1825 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1827 register I32 cxix = dopoptosub(cxstack_ix);
1828 register const PERL_CONTEXT *cx;
1829 register const PERL_CONTEXT *ccstack = cxstack;
1830 const PERL_SI *top_si = PL_curstackinfo;
1833 /* we may be in a higher stacklevel, so dig down deeper */
1834 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1835 top_si = top_si->si_prev;
1836 ccstack = top_si->si_cxstack;
1837 cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1841 /* caller() should not report the automatic calls to &DB::sub */
1842 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1843 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1847 cxix = dopoptosub_at(ccstack, cxix - 1);
1850 cx = &ccstack[cxix];
1851 if (dbcxp) *dbcxp = cx;
1853 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1854 const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1855 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1856 field below is defined for any cx. */
1857 /* caller() should not report the automatic calls to &DB::sub */
1858 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1859 cx = &ccstack[dbcxix];
1869 register const PERL_CONTEXT *cx;
1870 const PERL_CONTEXT *dbcx;
1872 const HEK *stash_hek;
1874 bool has_arg = MAXARG && TOPs;
1882 cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1884 if (GIMME != G_ARRAY) {
1891 stash_hek = HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop));
1892 if (GIMME != G_ARRAY) {
1895 PUSHs(&PL_sv_undef);
1898 sv_sethek(TARG, stash_hek);
1907 PUSHs(&PL_sv_undef);
1910 sv_sethek(TARG, stash_hek);
1913 mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1914 mPUSHi((I32)CopLINE(cx->blk_oldcop));
1917 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1918 GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1919 /* So is ccstack[dbcxix]. */
1921 SV * const sv = newSV(0);
1922 gv_efullname3(sv, cvgv, NULL);
1924 PUSHs(boolSV(CxHASARGS(cx)));
1927 PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1928 PUSHs(boolSV(CxHASARGS(cx)));
1932 PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1935 gimme = (I32)cx->blk_gimme;
1936 if (gimme == G_VOID)
1937 PUSHs(&PL_sv_undef);
1939 PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1940 if (CxTYPE(cx) == CXt_EVAL) {
1942 if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1943 PUSHs(cx->blk_eval.cur_text);
1947 else if (cx->blk_eval.old_namesv) {
1948 mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1951 /* eval BLOCK (try blocks have old_namesv == 0) */
1953 PUSHs(&PL_sv_undef);
1954 PUSHs(&PL_sv_undef);
1958 PUSHs(&PL_sv_undef);
1959 PUSHs(&PL_sv_undef);
1961 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1962 && CopSTASH_eq(PL_curcop, PL_debstash))
1964 AV * const ary = cx->blk_sub.argarray;
1965 const int off = AvARRAY(ary) - AvALLOC(ary);
1967 Perl_init_dbargs(aTHX);
1969 if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1970 av_extend(PL_dbargs, AvFILLp(ary) + off);
1971 Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1972 AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1974 /* XXX only hints propagated via op_private are currently
1975 * visible (others are not easily accessible, since they
1976 * use the global PL_hints) */
1977 mPUSHi(CopHINTS_get(cx->blk_oldcop));
1980 STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1982 if (old_warnings == pWARN_NONE ||
1983 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1984 mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1985 else if (old_warnings == pWARN_ALL ||
1986 (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1987 /* Get the bit mask for $warnings::Bits{all}, because
1988 * it could have been extended by warnings::register */
1990 HV * const bits = get_hv("warnings::Bits", 0);
1991 if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1992 mask = newSVsv(*bits_all);
1995 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1999 mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
2003 PUSHs(cx->blk_oldcop->cop_hints_hash ?
2004 sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
2013 const char * const tmps =
2014 (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
2015 sv_reset(tmps, CopSTASH(PL_curcop));
2020 /* like pp_nextstate, but used instead when the debugger is active */
2025 PL_curcop = (COP*)PL_op;
2026 TAINT_NOT; /* Each statement is presumed innocent */
2027 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2032 if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2033 || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2036 register PERL_CONTEXT *cx;
2037 const I32 gimme = G_ARRAY;
2039 GV * const gv = PL_DBgv;
2040 register CV * const cv = GvCV(gv);
2043 DIE(aTHX_ "No DB::DB routine defined");
2045 if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2046 /* don't do recursive DB::DB call */
2061 (void)(*CvXSUB(cv))(aTHX_ cv);
2068 PUSHBLOCK(cx, CXt_SUB, SP);
2070 cx->blk_sub.retop = PL_op->op_next;
2073 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2074 RETURNOP(CvSTART(cv));
2082 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2085 PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2087 if (flags & SVs_PADTMP) {
2088 flags &= ~SVs_PADTMP;
2091 if (gimme == G_SCALAR) {
2093 *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2094 ? *SP : sv_mortalcopy(*SP);
2096 /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2099 *++MARK = &PL_sv_undef;
2103 else if (gimme == G_ARRAY) {
2104 /* in case LEAVE wipes old return values */
2105 while (++MARK <= SP) {
2106 if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2109 *++newsp = sv_mortalcopy(*MARK);
2110 TAINT_NOT; /* Each item is independent */
2113 /* When this function was called with MARK == newsp, we reach this
2114 * point with SP == newsp. */
2123 register PERL_CONTEXT *cx;
2124 I32 gimme = GIMME_V;
2126 ENTER_with_name("block");
2129 PUSHBLOCK(cx, CXt_BLOCK, SP);
2137 register PERL_CONTEXT *cx;
2142 if (PL_op->op_flags & OPf_SPECIAL) {
2143 cx = &cxstack[cxstack_ix];
2144 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
2149 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2152 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2153 PL_curpm = newpm; /* Don't pop $1 et al till now */
2155 LEAVE_with_name("block");
2163 register PERL_CONTEXT *cx;
2164 const I32 gimme = GIMME_V;
2165 void *itervar; /* location of the iteration variable */
2166 U8 cxtype = CXt_LOOP_FOR;
2168 ENTER_with_name("loop1");
2171 if (PL_op->op_targ) { /* "my" variable */
2172 if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
2173 SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2174 SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2175 SVs_PADSTALE, SVs_PADSTALE);
2177 SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2179 itervar = PL_comppad;
2181 itervar = &PAD_SVl(PL_op->op_targ);
2184 else { /* symbol table variable */
2185 GV * const gv = MUTABLE_GV(POPs);
2186 SV** svp = &GvSV(gv);
2187 save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2189 itervar = (void *)gv;
2192 if (PL_op->op_private & OPpITER_DEF)
2193 cxtype |= CXp_FOR_DEF;
2195 ENTER_with_name("loop2");
2197 PUSHBLOCK(cx, cxtype, SP);
2198 PUSHLOOP_FOR(cx, itervar, MARK);
2199 if (PL_op->op_flags & OPf_STACKED) {
2200 SV *maybe_ary = POPs;
2201 if (SvTYPE(maybe_ary) != SVt_PVAV) {
2203 SV * const right = maybe_ary;
2206 if (RANGE_IS_NUMERIC(sv,right)) {
2207 cx->cx_type &= ~CXTYPEMASK;
2208 cx->cx_type |= CXt_LOOP_LAZYIV;
2209 /* Make sure that no-one re-orders cop.h and breaks our
2211 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2212 #ifdef NV_PRESERVES_UV
2213 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2214 (SvNV_nomg(sv) > (NV)IV_MAX)))
2216 (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2217 (SvNV_nomg(right) < (NV)IV_MIN))))
2219 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2221 ((SvNV_nomg(sv) > 0) &&
2222 ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2223 (SvNV_nomg(sv) > (NV)UV_MAX)))))
2225 (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2227 ((SvNV_nomg(right) > 0) &&
2228 ((SvUV_nomg(right) > (UV)IV_MAX) ||
2229 (SvNV_nomg(right) > (NV)UV_MAX))
2232 DIE(aTHX_ "Range iterator outside integer range");
2233 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2234 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2236 /* for correct -Dstv display */
2237 cx->blk_oldsp = sp - PL_stack_base;
2241 cx->cx_type &= ~CXTYPEMASK;
2242 cx->cx_type |= CXt_LOOP_LAZYSV;
2243 /* Make sure that no-one re-orders cop.h and breaks our
2245 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2246 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2247 cx->blk_loop.state_u.lazysv.end = right;
2248 SvREFCNT_inc(right);
2249 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2250 /* This will do the upgrade to SVt_PV, and warn if the value
2251 is uninitialised. */
2252 (void) SvPV_nolen_const(right);
2253 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2254 to replace !SvOK() with a pointer to "". */
2256 SvREFCNT_dec(right);
2257 cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2261 else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2262 cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2263 SvREFCNT_inc(maybe_ary);
2264 cx->blk_loop.state_u.ary.ix =
2265 (PL_op->op_private & OPpITER_REVERSED) ?
2266 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2270 else { /* iterating over items on the stack */
2271 cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2272 if (PL_op->op_private & OPpITER_REVERSED) {
2273 cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2276 cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2286 register PERL_CONTEXT *cx;
2287 const I32 gimme = GIMME_V;
2289 ENTER_with_name("loop1");
2291 ENTER_with_name("loop2");
2293 PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2294 PUSHLOOP_PLAIN(cx, SP);
2302 register PERL_CONTEXT *cx;
2309 assert(CxTYPE_is_LOOP(cx));
2311 newsp = PL_stack_base + cx->blk_loop.resetsp;
2314 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2317 POPLOOP(cx); /* Stack values are safe: release loop vars ... */
2318 PL_curpm = newpm; /* ... and pop $1 et al */
2320 LEAVE_with_name("loop2");
2321 LEAVE_with_name("loop1");
2327 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2328 PERL_CONTEXT *cx, PMOP *newpm)
2330 const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2331 if (gimme == G_SCALAR) {
2332 if (CxLVAL(cx) && !ref) { /* Leave it as it is if we can. */
2334 const char *what = NULL;
2336 assert(MARK+1 == SP);
2337 if ((SvPADTMP(TOPs) ||
2338 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2341 !SvSMAGICAL(TOPs)) {
2343 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2344 : "a readonly value" : "a temporary";
2349 /* sub:lvalue{} will take us here. */
2358 "Can't return %s from lvalue subroutine", what
2363 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2364 *++newsp = SvREFCNT_inc(*SP);
2371 ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2376 *++newsp = &PL_sv_undef;
2378 if (CxLVAL(cx) & OPpDEREF) {
2381 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2385 else if (gimme == G_ARRAY) {
2386 assert (!(CxLVAL(cx) & OPpDEREF));
2387 if (ref || !CxLVAL(cx))
2388 while (++MARK <= SP)
2392 : ref && SvFLAGS(*MARK) & SVs_PADTMP
2393 ? sv_mortalcopy(*MARK)
2394 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2395 else while (++MARK <= SP) {
2396 if (*MARK != &PL_sv_undef
2398 || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2403 /* Might be flattened array after $#array = */
2411 "Can't return a %s from lvalue subroutine",
2412 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2418 : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2421 PL_stack_sp = newsp;
2427 register PERL_CONTEXT *cx;
2428 bool popsub2 = FALSE;
2429 bool clear_errsv = FALSE;
2439 const I32 cxix = dopoptosub(cxstack_ix);
2442 if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2443 * sort block, which is a CXt_NULL
2446 PL_stack_base[1] = *PL_stack_sp;
2447 PL_stack_sp = PL_stack_base + 1;
2451 DIE(aTHX_ "Can't return outside a subroutine");
2453 if (cxix < cxstack_ix)
2456 if (CxMULTICALL(&cxstack[cxix])) {
2457 gimme = cxstack[cxix].blk_gimme;
2458 if (gimme == G_VOID)
2459 PL_stack_sp = PL_stack_base;
2460 else if (gimme == G_SCALAR) {
2461 PL_stack_base[1] = *PL_stack_sp;
2462 PL_stack_sp = PL_stack_base + 1;
2468 switch (CxTYPE(cx)) {
2471 lval = !!CvLVALUE(cx->blk_sub.cv);
2472 retop = cx->blk_sub.retop;
2473 cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2476 if (!(PL_in_eval & EVAL_KEEPERR))
2479 namesv = cx->blk_eval.old_namesv;
2480 retop = cx->blk_eval.retop;
2483 if (optype == OP_REQUIRE &&
2484 (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2486 /* Unassume the success we assumed earlier. */
2487 (void)hv_delete(GvHVn(PL_incgv),
2488 SvPVX_const(namesv),
2489 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2491 DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2496 retop = cx->blk_sub.retop;
2499 DIE(aTHX_ "panic: return");
2503 if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2505 if (gimme == G_SCALAR) {
2508 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2509 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2510 *++newsp = SvREFCNT_inc(*SP);
2515 sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2517 *++newsp = sv_mortalcopy(sv);
2521 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2525 *++newsp = sv_mortalcopy(*SP);
2528 *++newsp = sv_mortalcopy(*SP);
2531 *++newsp = &PL_sv_undef;
2533 else if (gimme == G_ARRAY) {
2534 while (++MARK <= SP) {
2535 *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2536 ? *MARK : sv_mortalcopy(*MARK);
2537 TAINT_NOT; /* Each item is independent */
2540 PL_stack_sp = newsp;
2544 /* Stack values are safe: */
2547 POPSUB(cx,sv); /* release CV and @_ ... */
2551 PL_curpm = newpm; /* ... and pop $1 et al */
2560 /* This duplicates parts of pp_leavesub, so that it can share code with
2568 register PERL_CONTEXT *cx;
2571 if (CxMULTICALL(&cxstack[cxstack_ix]))
2575 cxstack_ix++; /* temporarily protect top context */
2579 S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2583 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2584 PL_curpm = newpm; /* ... and pop $1 et al */
2587 return cx->blk_sub.retop;
2594 register PERL_CONTEXT *cx;
2605 if (PL_op->op_flags & OPf_SPECIAL) {
2606 cxix = dopoptoloop(cxstack_ix);
2608 DIE(aTHX_ "Can't \"last\" outside a loop block");
2611 cxix = dopoptolabel(cPVOP->op_pv);
2613 DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2615 if (cxix < cxstack_ix)
2619 cxstack_ix++; /* temporarily protect top context */
2621 switch (CxTYPE(cx)) {
2622 case CXt_LOOP_LAZYIV:
2623 case CXt_LOOP_LAZYSV:
2625 case CXt_LOOP_PLAIN:
2627 newsp = PL_stack_base + cx->blk_loop.resetsp;
2628 nextop = cx->blk_loop.my_op->op_lastop->op_next;
2632 nextop = cx->blk_sub.retop;
2636 nextop = cx->blk_eval.retop;
2640 nextop = cx->blk_sub.retop;
2643 DIE(aTHX_ "panic: last");
2647 SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2648 pop2 == CXt_SUB ? SVs_TEMP : 0);
2653 /* Stack values are safe: */
2655 case CXt_LOOP_LAZYIV:
2656 case CXt_LOOP_PLAIN:
2657 case CXt_LOOP_LAZYSV:
2659 POPLOOP(cx); /* release loop vars ... */
2663 POPSUB(cx,sv); /* release CV and @_ ... */
2666 PL_curpm = newpm; /* ... and pop $1 et al */
2669 PERL_UNUSED_VAR(optype);
2670 PERL_UNUSED_VAR(gimme);
2678 register PERL_CONTEXT *cx;
2681 if (PL_op->op_flags & OPf_SPECIAL) {
2682 cxix = dopoptoloop(cxstack_ix);
2684 DIE(aTHX_ "Can't \"next\" outside a loop block");
2687 cxix = dopoptolabel(cPVOP->op_pv);
2689 DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2691 if (cxix < cxstack_ix)
2694 /* clear off anything above the scope we're re-entering, but
2695 * save the rest until after a possible continue block */
2696 inner = PL_scopestack_ix;
2698 if (PL_scopestack_ix < inner)
2699 leave_scope(PL_scopestack[PL_scopestack_ix]);
2700 PL_curcop = cx->blk_oldcop;
2701 return (cx)->blk_loop.my_op->op_nextop;
2708 register PERL_CONTEXT *cx;
2712 if (PL_op->op_flags & OPf_SPECIAL) {
2713 cxix = dopoptoloop(cxstack_ix);
2715 DIE(aTHX_ "Can't \"redo\" outside a loop block");
2718 cxix = dopoptolabel(cPVOP->op_pv);
2720 DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2722 if (cxix < cxstack_ix)
2725 redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2726 if (redo_op->op_type == OP_ENTER) {
2727 /* pop one less context to avoid $x being freed in while (my $x..) */
2729 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2730 redo_op = redo_op->op_next;
2734 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2735 LEAVE_SCOPE(oldsave);
2737 PL_curcop = cx->blk_oldcop;
2742 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2746 static const char too_deep[] = "Target of goto is too deeply nested";
2748 PERL_ARGS_ASSERT_DOFINDLABEL;
2751 Perl_croak(aTHX_ too_deep);
2752 if (o->op_type == OP_LEAVE ||
2753 o->op_type == OP_SCOPE ||
2754 o->op_type == OP_LEAVELOOP ||
2755 o->op_type == OP_LEAVESUB ||
2756 o->op_type == OP_LEAVETRY)
2758 *ops++ = cUNOPo->op_first;
2760 Perl_croak(aTHX_ too_deep);
2763 if (o->op_flags & OPf_KIDS) {
2765 /* First try all the kids at this level, since that's likeliest. */
2766 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2767 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2768 const char *kid_label = CopLABEL(kCOP);
2769 if (kid_label && strEQ(kid_label, label))
2773 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2774 if (kid == PL_lastgotoprobe)
2776 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2779 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2780 ops[-1]->op_type == OP_DBSTATE)
2785 if ((o = dofindlabel(kid, label, ops, oplimit)))
2798 register PERL_CONTEXT *cx;
2799 #define GOTO_DEPTH 64
2800 OP *enterops[GOTO_DEPTH];
2801 const char *label = NULL;
2802 const bool do_dump = (PL_op->op_type == OP_DUMP);
2803 static const char must_have_label[] = "goto must have label";
2805 if (PL_op->op_flags & OPf_STACKED) {
2806 SV * const sv = POPs;
2808 /* This egregious kludge implements goto &subroutine */
2809 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2811 register PERL_CONTEXT *cx;
2812 CV *cv = MUTABLE_CV(SvRV(sv));
2819 if (!CvROOT(cv) && !CvXSUB(cv)) {
2820 const GV * const gv = CvGV(cv);
2824 /* autoloaded stub? */
2825 if (cv != GvCV(gv) && (cv = GvCV(gv)))
2827 autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2829 GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2830 if (autogv && (cv = GvCV(autogv)))
2832 tmpstr = sv_newmortal();
2833 gv_efullname3(tmpstr, gv, NULL);
2834 DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2836 DIE(aTHX_ "Goto undefined subroutine");
2839 /* First do some returnish stuff. */
2840 SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2842 cxix = dopoptosub(cxstack_ix);
2844 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2845 if (cxix < cxstack_ix)
2849 /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2850 if (CxTYPE(cx) == CXt_EVAL) {
2852 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2854 DIE(aTHX_ "Can't goto subroutine from an eval-block");
2856 else if (CxMULTICALL(cx))
2857 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2858 if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2859 /* put @_ back onto stack */
2860 AV* av = cx->blk_sub.argarray;
2862 items = AvFILLp(av) + 1;
2863 EXTEND(SP, items+1); /* @_ could have been extended. */
2864 Copy(AvARRAY(av), SP + 1, items, SV*);
2865 SvREFCNT_dec(GvAV(PL_defgv));
2866 GvAV(PL_defgv) = cx->blk_sub.savearray;
2868 /* abandon @_ if it got reified */
2873 av_extend(av, items-1);
2875 PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2878 else if (CvISXSUB(cv)) { /* put GvAV(defgv) back onto stack */
2879 AV* const av = GvAV(PL_defgv);
2880 items = AvFILLp(av) + 1;
2881 EXTEND(SP, items+1); /* @_ could have been extended. */
2882 Copy(AvARRAY(av), SP + 1, items, SV*);
2886 if (CxTYPE(cx) == CXt_SUB &&
2887 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2888 SvREFCNT_dec(cx->blk_sub.cv);
2889 oldsave = PL_scopestack[PL_scopestack_ix - 1];
2890 LEAVE_SCOPE(oldsave);
2892 /* Now do some callish stuff. */
2894 SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2896 OP* const retop = cx->blk_sub.retop;
2897 SV **newsp __attribute__unused__;
2898 I32 gimme __attribute__unused__;
2901 for (index=0; index<items; index++)
2902 sv_2mortal(SP[-index]);
2905 /* XS subs don't have a CxSUB, so pop it */
2906 POPBLOCK(cx, PL_curpm);
2907 /* Push a mark for the start of arglist */
2910 (void)(*CvXSUB(cv))(aTHX_ cv);
2915 AV* const padlist = CvPADLIST(cv);
2916 if (CxTYPE(cx) == CXt_EVAL) {
2917 PL_in_eval = CxOLD_IN_EVAL(cx);
2918 PL_eval_root = cx->blk_eval.old_eval_root;
2919 cx->cx_type = CXt_SUB;
2921 cx->blk_sub.cv = cv;
2922 cx->blk_sub.olddepth = CvDEPTH(cv);
2925 if (CvDEPTH(cv) < 2)
2926 SvREFCNT_inc_simple_void_NN(cv);
2928 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2929 sub_crush_depth(cv);
2930 pad_push(padlist, CvDEPTH(cv));
2932 PL_curcop = cx->blk_oldcop;
2934 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2937 AV *const av = MUTABLE_AV(PAD_SVl(0));
2939 cx->blk_sub.savearray = GvAV(PL_defgv);
2940 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2941 CX_CURPAD_SAVE(cx->blk_sub);
2942 cx->blk_sub.argarray = av;
2944 if (items >= AvMAX(av) + 1) {
2945 SV **ary = AvALLOC(av);
2946 if (AvARRAY(av) != ary) {
2947 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2950 if (items >= AvMAX(av) + 1) {
2951 AvMAX(av) = items - 1;
2952 Renew(ary,items+1,SV*);
2958 Copy(mark,AvARRAY(av),items,SV*);
2959 AvFILLp(av) = items - 1;
2960 assert(!AvREAL(av));
2962 /* transfer 'ownership' of refcnts to new @_ */
2972 if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
2973 Perl_get_db_sub(aTHX_ NULL, cv);
2975 CV * const gotocv = get_cvs("DB::goto", 0);
2977 PUSHMARK( PL_stack_sp );
2978 call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2983 RETURNOP(CvSTART(cv));
2987 label = SvPV_nolen_const(sv);
2988 if (!(do_dump || *label))
2989 DIE(aTHX_ must_have_label);
2992 else if (PL_op->op_flags & OPf_SPECIAL) {
2994 DIE(aTHX_ must_have_label);
2997 label = cPVOP->op_pv;
3001 if (label && *label) {
3002 OP *gotoprobe = NULL;
3003 bool leaving_eval = FALSE;
3004 bool in_block = FALSE;
3005 PERL_CONTEXT *last_eval_cx = NULL;
3009 PL_lastgotoprobe = NULL;
3011 for (ix = cxstack_ix; ix >= 0; ix--) {
3013 switch (CxTYPE(cx)) {
3015 leaving_eval = TRUE;
3016 if (!CxTRYBLOCK(cx)) {
3017 gotoprobe = (last_eval_cx ?
3018 last_eval_cx->blk_eval.old_eval_root :
3023 /* else fall through */
3024 case CXt_LOOP_LAZYIV:
3025 case CXt_LOOP_LAZYSV:
3027 case CXt_LOOP_PLAIN:
3030 gotoprobe = cx->blk_oldcop->op_sibling;
3036 gotoprobe = cx->blk_oldcop->op_sibling;
3039 gotoprobe = PL_main_root;
3042 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3043 gotoprobe = CvROOT(cx->blk_sub.cv);
3049 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3052 DIE(aTHX_ "panic: goto");
3053 gotoprobe = PL_main_root;
3057 retop = dofindlabel(gotoprobe, label,
3058 enterops, enterops + GOTO_DEPTH);
3061 if (gotoprobe->op_sibling &&
3062 gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3063 gotoprobe->op_sibling->op_sibling) {
3064 retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3065 label, enterops, enterops + GOTO_DEPTH);
3070 PL_lastgotoprobe = gotoprobe;
3073 DIE(aTHX_ "Can't find label %s", label);
3075 /* if we're leaving an eval, check before we pop any frames
3076 that we're not going to punt, otherwise the error
3079 if (leaving_eval && *enterops && enterops[1]) {
3081 for (i = 1; enterops[i]; i++)
3082 if (enterops[i]->op_type == OP_ENTERITER)
3083 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3086 if (*enterops && enterops[1]) {
3087 I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3089 deprecate("\"goto\" to jump into a construct");
3092 /* pop unwanted frames */
3094 if (ix < cxstack_ix) {
3101 oldsave = PL_scopestack[PL_scopestack_ix];
3102 LEAVE_SCOPE(oldsave);
3105 /* push wanted frames */
3107 if (*enterops && enterops[1]) {
3108 OP * const oldop = PL_op;
3109 ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3110 for (; enterops[ix]; ix++) {
3111 PL_op = enterops[ix];
3112 /* Eventually we may want to stack the needed arguments
3113 * for each op. For now, we punt on the hard ones. */
3114 if (PL_op->op_type == OP_ENTERITER)
3115 DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3116 PL_op->op_ppaddr(aTHX);
3124 if (!retop) retop = PL_main_start;
3126 PL_restartop = retop;
3127 PL_do_undump = TRUE;
3131 PL_restartop = 0; /* hmm, must be GNU unexec().. */
3132 PL_do_undump = FALSE;
3147 anum = 0; (void)POPs;
3152 if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3154 VMSISH_HUSHED = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3157 PL_exit_flags |= PERL_EXIT_EXPECTED;
3159 /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3160 if (anum || !(PL_minus_c && PL_madskills))
3165 PUSHs(&PL_sv_undef);
3172 S_save_lines(pTHX_ AV *array, SV *sv)
3174 const char *s = SvPVX_const(sv);
3175 const char * const send = SvPVX_const(sv) + SvCUR(sv);
3178 PERL_ARGS_ASSERT_SAVE_LINES;
3180 while (s && s < send) {
3182 SV * const tmpstr = newSV_type(SVt_PVMG);
3184 t = (const char *)memchr(s, '\n', send - s);
3190 sv_setpvn(tmpstr, s, t - s);
3191 av_store(array, line++, tmpstr);
3199 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3201 0 is used as continue inside eval,
3203 3 is used for a die caught by an inner eval - continue inner loop
3205 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3206 establish a local jmpenv to handle exception traps.
3211 S_docatch(pTHX_ OP *o)
3215 OP * const oldop = PL_op;
3219 assert(CATCH_GET == TRUE);
3226 assert(cxstack_ix >= 0);
3227 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3228 cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3233 /* die caught by an inner eval - continue inner loop */
3234 if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3235 PL_restartjmpenv = NULL;
3236 PL_op = PL_restartop;
3252 /* James Bond: Do you expect me to talk?
3253 Auric Goldfinger: No, Mr. Bond. I expect you to die.
3255 This code is an ugly hack, doesn't work with lexicals in subroutines that are
3256 called more than once, and is only used by regcomp.c, for (?{}) blocks.
3258 Currently it is not used outside the core code. Best if it stays that way.
3260 Hence it's now deprecated, and will be removed.
3263 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3264 /* sv Text to convert to OP tree. */
3265 /* startop op_free() this to undo. */
3266 /* code Short string id of the caller. */
3268 PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3269 return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3272 /* Don't use this. It will go away without warning once the regexp engine is
3273 refactored not to use it. */
3275 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3278 dVAR; dSP; /* Make POPBLOCK work. */
3284 char tbuf[TYPE_DIGITS(long) + 12 + 10];
3285 char *tmpbuf = tbuf;
3288 CV* runcv = NULL; /* initialise to avoid compiler warnings */
3292 PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3294 ENTER_with_name("eval");
3295 lex_start(sv, NULL, LEX_START_SAME_FILTER);
3297 /* switch to eval mode */
3299 if (IN_PERL_COMPILETIME) {
3300 SAVECOPSTASH_FREE(&PL_compiling);
3301 CopSTASH_set(&PL_compiling, PL_curstash);
3303 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3304 SV * const sv = sv_newmortal();
3305 Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3306 code, (unsigned long)++PL_evalseq,
3307 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3312 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3313 (unsigned long)++PL_evalseq);
3314 SAVECOPFILE_FREE(&PL_compiling);
3315 CopFILE_set(&PL_compiling, tmpbuf+2);
3316 SAVECOPLINE(&PL_compiling);
3317 CopLINE_set(&PL_compiling, 1);
3318 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3319 deleting the eval's FILEGV from the stash before gv_check() runs
3320 (i.e. before run-time proper). To work around the coredump that
3321 ensues, we always turn GvMULTI_on for any globals that were
3322 introduced within evals. See force_ident(). GSAR 96-10-12 */
3323 safestr = savepvn(tmpbuf, len);
3324 SAVEDELETE(PL_defstash, safestr, len);
3326 #ifdef OP_IN_REGISTER
3332 /* we get here either during compilation, or via pp_regcomp at runtime */
3333 runtime = IN_PERL_RUNTIME;
3336 runcv = find_runcv(NULL);
3338 /* At run time, we have to fetch the hints from PL_curcop. */
3339 PL_hints = PL_curcop->cop_hints;
3340 if (PL_hints & HINT_LOCALIZE_HH) {
3341 /* SAVEHINTS created a new HV in PL_hintgv, which we
3343 SvREFCNT_dec(GvHV(PL_hintgv));
3345 refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3346 hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3348 SAVECOMPILEWARNINGS();
3349 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3350 cophh_free(CopHINTHASH_get(&PL_compiling));
3351 /* XXX Does this need to avoid copying a label? */
3352 PL_compiling.cop_hints_hash
3353 = cophh_copy(PL_curcop->cop_hints_hash);
3357 PL_op->op_type = OP_ENTEREVAL;
3358 PL_op->op_flags = 0; /* Avoid uninit warning. */
3359 PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3361 need_catch = CATCH_GET;
3365 (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
3367 (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
3368 CATCH_SET(need_catch);
3369 POPBLOCK(cx,PL_curpm);
3372 (*startop)->op_type = OP_NULL;
3373 (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3374 /* XXX DAPM do this properly one year */
3375 *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3376 LEAVE_with_name("eval");
3377 if (IN_PERL_COMPILETIME)
3378 CopHINTS_set(&PL_compiling, PL_hints);
3379 #ifdef OP_IN_REGISTER
3382 PERL_UNUSED_VAR(newsp);
3383 PERL_UNUSED_VAR(optype);
3385 return PL_eval_start;
3390 =for apidoc find_runcv
3392 Locate the CV corresponding to the currently executing sub or eval.
3393 If db_seqp is non_null, skip CVs that are in the DB package and populate
3394 *db_seqp with the cop sequence number at the point that the DB:: code was
3395 entered. (allows debuggers to eval in the scope of the breakpoint rather
3396 than in the scope of the debugger itself).
3402 Perl_find_runcv(pTHX_ U32 *db_seqp)
3408 *db_seqp = PL_curcop->cop_seq;
3409 for (si = PL_curstackinfo; si; si = si->si_prev) {
3411 for (ix = si->si_cxix; ix >= 0; ix--) {
3412 const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3413 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3414 CV * const cv = cx->blk_sub.cv;
3415 /* skip DB:: code */
3416 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3417 *db_seqp = cx->blk_oldcop->cop_seq;
3422 else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3430 /* Run yyparse() in a setjmp wrapper. Returns:
3431 * 0: yyparse() successful
3432 * 1: yyparse() failed
3436 S_try_yyparse(pTHX_ int gramtype)
3441 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3445 ret = yyparse(gramtype) ? 1 : 0;
3459 /* Compile a require/do, an eval '', or a /(?{...})/.
3460 * In the last case, startop is non-null, and contains the address of
3461 * a pointer that should be set to the just-compiled code.
3462 * outside is the lexically enclosing CV (if any) that invoked us.
3463 * Returns a bool indicating whether the compile was successful; if so,
3464 * PL_eval_start contains the first op of the compiled ocde; otherwise,
3465 * pushes undef (also croaks if startop != NULL).
3469 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
3472 OP * const saveop = PL_op;
3473 bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3476 PL_in_eval = (in_require
3477 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3482 SAVESPTR(PL_compcv);
3483 PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3484 CvEVAL_on(PL_compcv);
3485 assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3486 cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3487 cxstack[cxstack_ix].blk_gimme = gimme;
3489 CvOUTSIDE_SEQ(PL_compcv) = seq;
3490 CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3492 /* set up a scratch pad */
3494 CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3495 PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3499 SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
3501 /* make sure we compile in the right package */
3503 if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3504 SAVESPTR(PL_curstash);
3505 PL_curstash = CopSTASH(PL_curcop);
3507 /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3508 SAVESPTR(PL_beginav);
3509 PL_beginav = newAV();
3510 SAVEFREESV(PL_beginav);
3511 SAVESPTR(PL_unitcheckav);
3512 PL_unitcheckav = newAV();
3513 SAVEFREESV(PL_unitcheckav);
3516 SAVEBOOL(PL_madskills);
3520 /* try to compile it */
3522 PL_eval_root = NULL;
3523 PL_curcop = &PL_compiling;
3524 if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3525 PL_in_eval |= EVAL_KEEPERR;
3529 CALL_BLOCK_HOOKS(bhk_eval, saveop);
3531 /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3532 * so honour CATCH_GET and trap it here if necessary */
3534 yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3536 if (yystatus || PL_parser->error_count || !PL_eval_root) {
3537 SV **newsp; /* Used by POPBLOCK. */
3539 I32 optype; /* Used by POPEVAL. */
3544 PERL_UNUSED_VAR(newsp);
3545 PERL_UNUSED_VAR(optype);
3547 /* note that if yystatus == 3, then the EVAL CX block has already
3548 * been popped, and various vars restored */
3550 if (yystatus != 3) {
3552 op_free(PL_eval_root);
3553 PL_eval_root = NULL;
3555 SP = PL_stack_base + POPMARK; /* pop original mark */
3557 POPBLOCK(cx,PL_curpm);
3559 namesv = cx->blk_eval.old_namesv;
3563 LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE. */
3567 /* If cx is still NULL, it means that we didn't go in the
3568 * POPEVAL branch. */
3569 cx = &cxstack[cxstack_ix];
3570 assert(CxTYPE(cx) == CXt_EVAL);
3571 namesv = cx->blk_eval.old_namesv;
3573 (void)hv_store(GvHVn(PL_incgv),
3574 SvPVX_const(namesv),
3575 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3577 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3580 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3583 if (yystatus != 3) {
3584 POPBLOCK(cx,PL_curpm);
3587 Perl_croak(aTHX_ "%"SVf"Compilation failed in regexp",
3590 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3593 if (!*(SvPVx_nolen_const(ERRSV))) {
3594 sv_setpvs(ERRSV, "Compilation error");
3597 PUSHs(&PL_sv_undef);
3601 CopLINE_set(&PL_compiling, 0);
3603 *startop = PL_eval_root;
3605 SAVEFREEOP(PL_eval_root);
3607 DEBUG_x(dump_eval());
3609 /* Register with debugger: */
3610 if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3611 CV * const cv = get_cvs("DB::postponed", 0);
3615 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3617 call_sv(MUTABLE_SV(cv), G_DISCARD);
3621 if (PL_unitcheckav) {
3622 OP *es = PL_eval_start;
3623 call_list(PL_scopestack_ix, PL_unitcheckav);
3627 /* compiled okay, so do it */
3629 CvDEPTH(PL_compcv) = 1;
3630 SP = PL_stack_base + POPMARK; /* pop original mark */
3631 PL_op = saveop; /* The caller may need it. */
3632 PL_parser->lex_state = LEX_NOTPARSING; /* $^S needs this. */
3639 S_check_type_and_open(pTHX_ SV *name)
3642 const char *p = SvPV_nolen_const(name);
3643 const int st_rc = PerlLIO_stat(p, &st);
3645 PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3647 if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3651 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3652 return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3654 return PerlIO_open(p, PERL_SCRIPT_MODE);
3658 #ifndef PERL_DISABLE_PMC
3660 S_doopen_pm(pTHX_ SV *name)
3663 const char *p = SvPV_const(name, namelen);
3665 PERL_ARGS_ASSERT_DOOPEN_PM;
3667 if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3668 SV *const pmcsv = sv_newmortal();
3671 SvSetSV_nosteal(pmcsv,name);
3672 sv_catpvn(pmcsv, "c", 1);
3674 if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3675 return check_type_and_open(pmcsv);
3677 return check_type_and_open(name);
3680 # define doopen_pm(name) check_type_and_open(name)
3681 #endif /* !PERL_DISABLE_PMC */
3686 register PERL_CONTEXT *cx;
3693 int vms_unixname = 0;
3695 const char *tryname = NULL;
3697 const I32 gimme = GIMME_V;
3698 int filter_has_file = 0;
3699 PerlIO *tryrsfp = NULL;
3700 SV *filter_cache = NULL;
3701 SV *filter_state = NULL;
3702 SV *filter_sub = NULL;
3708 if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3709 sv = sv_2mortal(new_version(sv));
3710 if (!sv_derived_from(PL_patchlevel, "version"))
3711 upg_version(PL_patchlevel, TRUE);
3712 if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3713 if ( vcmp(sv,PL_patchlevel) <= 0 )
3714 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3715 SVfARG(sv_2mortal(vnormal(sv))),
3716 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3720 if ( vcmp(sv,PL_patchlevel) > 0 ) {
3723 SV * const req = SvRV(sv);
3724 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3726 /* get the left hand term */
3727 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3729 first = SvIV(*av_fetch(lav,0,0));
3730 if ( first > (int)PERL_REVISION /* probably 'use 6.0' */
3731 || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3732 || av_len(lav) > 1 /* FP with > 3 digits */
3733 || strstr(SvPVX(pv),".0") /* FP with leading 0 */
3735 DIE(aTHX_ "Perl %"SVf" required--this is only "
3737 SVfARG(sv_2mortal(vnormal(req))),
3738 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3741 else { /* probably 'use 5.10' or 'use 5.8' */
3746 second = SvIV(*av_fetch(lav,1,0));
3748 second /= second >= 600 ? 100 : 10;
3749 hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3750 (int)first, (int)second);
3751 upg_version(hintsv, TRUE);
3753 DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3754 "--this is only %"SVf", stopped",
3755 SVfARG(sv_2mortal(vnormal(req))),
3756 SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3757 SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3765 name = SvPV_const(sv, len);
3766 if (!(name && len > 0 && *name))
3767 DIE(aTHX_ "Null filename used");
3768 TAINT_PROPER("require");
3772 /* The key in the %ENV hash is in the syntax of file passed as the argument
3773 * usually this is in UNIX format, but sometimes in VMS format, which
3774 * can result in a module being pulled in more than once.
3775 * To prevent this, the key must be stored in UNIX format if the VMS
3776 * name can be translated to UNIX.
3778 if ((unixname = tounixspec(name, NULL)) != NULL) {
3779 unixlen = strlen(unixname);
3785 /* if not VMS or VMS name can not be translated to UNIX, pass it
3788 unixname = (char *) name;
3791 if (PL_op->op_type == OP_REQUIRE) {
3792 SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3793 unixname, unixlen, 0);
3795 if (*svp != &PL_sv_undef)
3798 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3799 "Compilation failed in require", unixname);
3803 /* prepare to compile file */
3805 if (path_is_absolute(name)) {
3806 /* At this point, name is SvPVX(sv) */
3808 tryrsfp = doopen_pm(sv);
3811 AV * const ar = GvAVn(PL_incgv);
3817 namesv = newSV_type(SVt_PV);
3818 for (i = 0; i <= AvFILL(ar); i++) {
3819 SV * const dirsv = *av_fetch(ar, i, TRUE);
3821 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3828 if (SvTYPE(SvRV(loader)) == SVt_PVAV
3829 && !sv_isobject(loader))
3831 loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3834 Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3835 PTR2UV(SvRV(dirsv)), name);
3836 tryname = SvPVX_const(namesv);
3839 ENTER_with_name("call_INC");
3847 if (sv_isobject(loader))
3848 count = call_method("INC", G_ARRAY);
3850 count = call_sv(loader, G_ARRAY);
3860 if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3861 && !isGV_with_GP(SvRV(arg))) {
3862 filter_cache = SvRV(arg);
3863 SvREFCNT_inc_simple_void_NN(filter_cache);
3870 if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3874 if (isGV_with_GP(arg)) {
3875 IO * const io = GvIO((const GV *)arg);
3880 tryrsfp = IoIFP(io);
3881 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3882 PerlIO_close(IoOFP(io));
3893 if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3895 SvREFCNT_inc_simple_void_NN(filter_sub);
3898 filter_state = SP[i];
3899 SvREFCNT_inc_simple_void(filter_state);
3903 if (!tryrsfp && (filter_cache || filter_sub)) {
3904 tryrsfp = PerlIO_open(BIT_BUCKET,
3912 LEAVE_with_name("call_INC");
3914 /* Adjust file name if the hook has set an %INC entry.
3915 This needs to happen after the FREETMPS above. */
3916 svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3918 tryname = SvPV_nolen_const(*svp);
3925 filter_has_file = 0;
3927 SvREFCNT_dec(filter_cache);
3928 filter_cache = NULL;
3931 SvREFCNT_dec(filter_state);
3932 filter_state = NULL;
3935 SvREFCNT_dec(filter_sub);
3940 if (!path_is_absolute(name)
3946 dir = SvPV_const(dirsv, dirlen);
3954 if ((unixdir = tounixpath(dir, NULL)) == NULL)
3956 sv_setpv(namesv, unixdir);
3957 sv_catpv(namesv, unixname);
3959 # ifdef __SYMBIAN32__
3960 if (PL_origfilename[0] &&
3961 PL_origfilename[1] == ':' &&
3962 !(dir[0] && dir[1] == ':'))
3963 Perl_sv_setpvf(aTHX_ namesv,
3968 Perl_sv_setpvf(aTHX_ namesv,
3972 /* The equivalent of
3973 Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3974 but without the need to parse the format string, or
3975 call strlen on either pointer, and with the correct
3976 allocation up front. */
3978 char *tmp = SvGROW(namesv, dirlen + len + 2);
3980 memcpy(tmp, dir, dirlen);
3983 /* name came from an SV, so it will have a '\0' at the
3984 end that we can copy as part of this memcpy(). */
3985 memcpy(tmp, name, len + 1);
3987 SvCUR_set(namesv, dirlen + len + 1);
3992 TAINT_PROPER("require");
3993 tryname = SvPVX_const(namesv);
3994 tryrsfp = doopen_pm(namesv);
3996 if (tryname[0] == '.' && tryname[1] == '/') {
3998 while (*++tryname == '/');
4002 else if (errno == EMFILE)
4003 /* no point in trying other paths if out of handles */
4012 if (PL_op->op_type == OP_REQUIRE) {
4013 if(errno == EMFILE) {
4014 /* diag_listed_as: Can't locate %s */
4015 DIE(aTHX_ "Can't locate %s: %s", name, Strerror(errno));
4017 if (namesv) { /* did we lookup @INC? */
4018 AV * const ar = GvAVn(PL_incgv);
4020 SV *const inc = newSVpvs_flags("", SVs_TEMP);
4021 for (i = 0; i <= AvFILL(ar); i++) {
4022 sv_catpvs(inc, " ");
4023 sv_catsv(inc, *av_fetch(ar, i, TRUE));
4026 /* diag_listed_as: Can't locate %s */
4028 "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4030 (memEQ(name + len - 2, ".h", 3)
4031 ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4032 (memEQ(name + len - 3, ".ph", 4)
4033 ? " (did you run h2ph?)" : ""),
4038 DIE(aTHX_ "Can't locate %s", name);
4044 SETERRNO(0, SS_NORMAL);
4046 /* Assume success here to prevent recursive requirement. */
4047 /* name is never assigned to again, so len is still strlen(name) */
4048 /* Check whether a hook in @INC has already filled %INC */
4050 (void)hv_store(GvHVn(PL_incgv),
4051 unixname, unixlen, newSVpv(tryname,0),0);
4053 SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4055 (void)hv_store(GvHVn(PL_incgv),
4056 unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4059 ENTER_with_name("eval");
4061 SAVECOPFILE_FREE(&PL_compiling);
4062 CopFILE_set(&PL_compiling, tryname);
4063 lex_start(NULL, tryrsfp, 0);
4067 hv_clear(GvHV(PL_hintgv));
4069 SAVECOMPILEWARNINGS();
4070 if (PL_dowarn & G_WARN_ALL_ON)
4071 PL_compiling.cop_warnings = pWARN_ALL ;
4072 else if (PL_dowarn & G_WARN_ALL_OFF)
4073 PL_compiling.cop_warnings = pWARN_NONE ;
4075 PL_compiling.cop_warnings = pWARN_STD ;
4077 if (filter_sub || filter_cache) {
4078 /* We can use the SvPV of the filter PVIO itself as our cache, rather
4079 than hanging another SV from it. In turn, filter_add() optionally
4080 takes the SV to use as the filter (or creates a new SV if passed
4081 NULL), so simply pass in whatever value filter_cache has. */
4082 SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4083 IoLINES(datasv) = filter_has_file;
4084 IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4085 IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4088 /* switch to eval mode */
4089 PUSHBLOCK(cx, CXt_EVAL, SP);
4091 cx->blk_eval.retop = PL_op->op_next;
4093 SAVECOPLINE(&PL_compiling);
4094 CopLINE_set(&PL_compiling, 0);
4098 /* Store and reset encoding. */
4099 encoding = PL_encoding;
4102 if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
4103 op = DOCATCH(PL_eval_start);
4105 op = PL_op->op_next;
4107 /* Restore encoding. */
4108 PL_encoding = encoding;
4113 /* This is a op added to hold the hints hash for
4114 pp_entereval. The hash can be modified by the code
4115 being eval'ed, so we return a copy instead. */
4121 mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4129 register PERL_CONTEXT *cx;
4131 const I32 gimme = GIMME_V;
4132 const U32 was = PL_breakable_sub_gen;
4133 char tbuf[TYPE_DIGITS(long) + 12];
4134 bool saved_delete = FALSE;
4135 char *tmpbuf = tbuf;
4139 HV *saved_hh = NULL;
4141 if (PL_op->op_private & OPpEVAL_HAS_HH) {
4142 saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4146 /* make sure we've got a plain PV (no overload etc) before testing
4147 * for taint. Making a copy here is probably overkill, but better
4148 * safe than sorry */
4150 const char * const p = SvPV_const(sv, len);
4152 sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4155 TAINT_IF(SvTAINTED(sv));
4156 TAINT_PROPER("eval");
4158 ENTER_with_name("eval");
4159 lex_start(sv, NULL, LEX_START_SAME_FILTER);
4162 /* switch to eval mode */
4164 if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4165 SV * const temp_sv = sv_newmortal();
4166 Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4167 (unsigned long)++PL_evalseq,
4168 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4169 tmpbuf = SvPVX(temp_sv);
4170 len = SvCUR(temp_sv);
4173 len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4174 SAVECOPFILE_FREE(&PL_compiling);
4175 CopFILE_set(&PL_compiling, tmpbuf+2);
4176 SAVECOPLINE(&PL_compiling);
4177 CopLINE_set(&PL_compiling, 1);
4178 /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4179 deleting the eval's FILEGV from the stash before gv_check() runs
4180 (i.e. before run-time proper). To work around the coredump that
4181 ensues, we always turn GvMULTI_on for any globals that were
4182 introduced within evals. See force_ident(). GSAR 96-10-12 */
4184 PL_hints = PL_op->op_targ;
4186 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
4187 SvREFCNT_dec(GvHV(PL_hintgv));
4188 GvHV(PL_hintgv) = saved_hh;
4190 SAVECOMPILEWARNINGS();
4191 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4192 cophh_free(CopHINTHASH_get(&PL_compiling));
4193 if (Perl_cop_fetch_label(aTHX_ PL_curcop, NULL, NULL)) {
4194 /* The label, if present, is the first entry on the chain. So rather
4195 than writing a blank label in front of it (which involves an
4196 allocation), just use the next entry in the chain. */
4197 PL_compiling.cop_hints_hash
4198 = cophh_copy(PL_curcop->cop_hints_hash->refcounted_he_next);
4199 /* Check the assumption that this removed the label. */
4200 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
4203 PL_compiling.cop_hints_hash = cophh_copy(PL_curcop->cop_hints_hash);
4204 /* special case: an eval '' executed within the DB package gets lexically
4205 * placed in the first non-DB CV rather than the current CV - this
4206 * allows the debugger to execute code, find lexicals etc, in the
4207 * scope of the code being debugged. Passing &seq gets find_runcv
4208 * to do the dirty work for us */
4209 runcv = find_runcv(&seq);
4211 PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4213 cx->blk_eval.retop = PL_op->op_next;
4215 /* prepare to compile string */
4217 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4218 save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4220 char *const safestr = savepvn(tmpbuf, len);
4221 SAVEDELETE(PL_defstash, safestr, len);
4222 saved_delete = TRUE;
4227 if (doeval(gimme, NULL, runcv, seq)) {
4228 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4229 ? (PERLDB_LINE || PERLDB_SAVESRC)
4230 : PERLDB_SAVESRC_NOSUBS) {
4231 /* Retain the filegv we created. */
4232 } else if (!saved_delete) {
4233 char *const safestr = savepvn(tmpbuf, len);
4234 SAVEDELETE(PL_defstash, safestr, len);
4236 return DOCATCH(PL_eval_start);
4238 /* We have already left the scope set up earlier thanks to the LEAVE
4240 if (was != PL_breakable_sub_gen /* Some subs defined here. */
4241 ? (PERLDB_LINE || PERLDB_SAVESRC)
4242 : PERLDB_SAVESRC_INVALID) {
4243 /* Retain the filegv we created. */
4244 } else if (!saved_delete) {
4245 (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4247 return PL_op->op_next;
4257 register PERL_CONTEXT *cx;
4259 const U8 save_flags = PL_op -> op_flags;
4266 namesv = cx->blk_eval.old_namesv;
4267 retop = cx->blk_eval.retop;
4270 SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4272 PL_curpm = newpm; /* Don't pop $1 et al till now */
4275 assert(CvDEPTH(PL_compcv) == 1);
4277 CvDEPTH(PL_compcv) = 0;
4279 if (optype == OP_REQUIRE &&
4280 !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4282 /* Unassume the success we assumed earlier. */
4283 (void)hv_delete(GvHVn(PL_incgv),
4284 SvPVX_const(namesv),
4285 SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4287 retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4289 /* die_unwind() did LEAVE, or we won't be here */
4292 LEAVE_with_name("eval");
4293 if (!(save_flags & OPf_SPECIAL)) {
4301 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4302 close to the related Perl_create_eval_scope. */
4304 Perl_delete_eval_scope(pTHX)
4309 register PERL_CONTEXT *cx;
4315 LEAVE_with_name("eval_scope");
4316 PERL_UNUSED_VAR(newsp);
4317 PERL_UNUSED_VAR(gimme);
4318 PERL_UNUSED_VAR(optype);
4321 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4322 also needed by Perl_fold_constants. */
4324 Perl_create_eval_scope(pTHX_ U32 flags)
4327 const I32 gimme = GIMME_V;
4329 ENTER_with_name("eval_scope");
4332 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4335 PL_in_eval = EVAL_INEVAL;
4336 if (flags & G_KEEPERR)
4337 PL_in_eval |= EVAL_KEEPERR;
4340 if (flags & G_FAKINGEVAL) {
4341 PL_eval_root = PL_op; /* Only needed so that goto works right. */
4349 PERL_CONTEXT * const cx = create_eval_scope(0);
4350 cx->blk_eval.retop = cLOGOP->op_other->op_next;
4351 return DOCATCH(PL_op->op_next);
4360 register PERL_CONTEXT *cx;
4366 PERL_UNUSED_VAR(optype);
4369 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4370 PL_curpm = newpm; /* Don't pop $1 et al till now */
4372 LEAVE_with_name("eval_scope");
4380 register PERL_CONTEXT *cx;
4381 const I32 gimme = GIMME_V;
4383 ENTER_with_name("given");
4386 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4387 sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4389 PUSHBLOCK(cx, CXt_GIVEN, SP);
4398 register PERL_CONTEXT *cx;
4402 PERL_UNUSED_CONTEXT;
4405 assert(CxTYPE(cx) == CXt_GIVEN);
4408 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4409 PL_curpm = newpm; /* Don't pop $1 et al till now */
4411 LEAVE_with_name("given");
4415 /* Helper routines used by pp_smartmatch */
4417 S_make_matcher(pTHX_ REGEXP *re)
4420 PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4422 PERL_ARGS_ASSERT_MAKE_MATCHER;
4424 PM_SETRE(matcher, ReREFCNT_inc(re));
4426 SAVEFREEOP((OP *) matcher);
4427 ENTER_with_name("matcher"); SAVETMPS;
4433 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4438 PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4440 PL_op = (OP *) matcher;
4443 (void) Perl_pp_match(aTHX);
4445 return (SvTRUEx(POPs));
4449 S_destroy_matcher(pTHX_ PMOP *matcher)
4453 PERL_ARGS_ASSERT_DESTROY_MATCHER;
4454 PERL_UNUSED_ARG(matcher);
4457 LEAVE_with_name("matcher");
4460 /* Do a smart match */
4463 DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4464 return do_smartmatch(NULL, NULL, 0);
4467 /* This version of do_smartmatch() implements the
4468 * table of smart matches that is found in perlsyn.
4471 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4476 bool object_on_left = FALSE;
4477 SV *e = TOPs; /* e is for 'expression' */
4478 SV *d = TOPm1s; /* d is for 'default', as in PL_defgv */
4480 /* Take care only to invoke mg_get() once for each argument.
4481 * Currently we do this by copying the SV if it's magical. */
4483 if (!copied && SvGMAGICAL(d))
4484 d = sv_mortalcopy(d);
4491 e = sv_mortalcopy(e);
4493 /* First of all, handle overload magic of the rightmost argument */
4496 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4497 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4499 tmpsv = amagic_call(d, e, smart_amg, 0);
4506 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; continuing...\n"));
4509 SP -= 2; /* Pop the values */
4514 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-undef\n"));
4521 if (sv_isobject(e) && (SvTYPE(SvRV(e)) != SVt_REGEXP)) {
4522 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Object\n"));
4523 Perl_croak(aTHX_ "Smart matching a non-overloaded object breaks encapsulation");
4525 if (sv_isobject(d) && (SvTYPE(SvRV(d)) != SVt_REGEXP))
4526 object_on_left = TRUE;
4529 if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVCV) {
4531 if (object_on_left) {
4532 goto sm_any_sub; /* Treat objects like scalars */
4534 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4535 /* Test sub truth for each key */
4537 bool andedresults = TRUE;
4538 HV *hv = (HV*) SvRV(d);
4539 I32 numkeys = hv_iterinit(hv);
4540 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-CodeRef\n"));
4543 while ( (he = hv_iternext(hv)) ) {
4544 DEBUG_M(Perl_deb(aTHX_ " testing hash key...\n"));
4545 ENTER_with_name("smartmatch_hash_key_test");
4548 PUSHs(hv_iterkeysv(he));
4550 c = call_sv(e, G_SCALAR);
4553 andedresults = FALSE;
4555 andedresults = SvTRUEx(POPs) && andedresults;
4557 LEAVE_with_name("smartmatch_hash_key_test");
4564 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4565 /* Test sub truth for each element */
4567 bool andedresults = TRUE;
4568 AV *av = (AV*) SvRV(d);
4569 const I32 len = av_len(av);
4570 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-CodeRef\n"));
4573 for (i = 0; i <= len; ++i) {
4574 SV * const * const svp = av_fetch(av, i, FALSE);
4575 DEBUG_M(Perl_deb(aTHX_ " testing array element...\n"));
4576 ENTER_with_name("smartmatch_array_elem_test");
4582 c = call_sv(e, G_SCALAR);
4585 andedresults = FALSE;
4587 andedresults = SvTRUEx(POPs) && andedresults;
4589 LEAVE_with_name("smartmatch_array_elem_test");
4598 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-CodeRef\n"));
4599 ENTER_with_name("smartmatch_coderef");
4604 c = call_sv(e, G_SCALAR);
4608 else if (SvTEMP(TOPs))
4609 SvREFCNT_inc_void(TOPs);
4611 LEAVE_with_name("smartmatch_coderef");
4616 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVHV) {
4617 if (object_on_left) {
4618 goto sm_any_hash; /* Treat objects like scalars */
4620 else if (!SvOK(d)) {
4621 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash ($a undef)\n"));
4624 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4625 /* Check that the key-sets are identical */
4627 HV *other_hv = MUTABLE_HV(SvRV(d));
4629 bool other_tied = FALSE;
4630 U32 this_key_count = 0,
4631 other_key_count = 0;
4632 HV *hv = MUTABLE_HV(SvRV(e));
4634 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Hash\n"));
4635 /* Tied hashes don't know how many keys they have. */
4636 if (SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) {
4639 else if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied)) {
4640 HV * const temp = other_hv;
4645 if (SvTIED_mg((const SV *)other_hv, PERL_MAGIC_tied))
4648 if (!tied && HvUSEDKEYS((const HV *) hv) != HvUSEDKEYS(other_hv))
4651 /* The hashes have the same number of keys, so it suffices
4652 to check that one is a subset of the other. */
4653 (void) hv_iterinit(hv);
4654 while ( (he = hv_iternext(hv)) ) {
4655 SV *key = hv_iterkeysv(he);
4657 DEBUG_M(Perl_deb(aTHX_ " comparing hash key...\n"));
4660 if(!hv_exists_ent(other_hv, key, 0)) {
4661 (void) hv_iterinit(hv); /* reset iterator */
4667 (void) hv_iterinit(other_hv);
4668 while ( hv_iternext(other_hv) )
4672 other_key_count = HvUSEDKEYS(other_hv);
4674 if (this_key_count != other_key_count)
4679 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4680 AV * const other_av = MUTABLE_AV(SvRV(d));
4681 const I32 other_len = av_len(other_av) + 1;
4683 HV *hv = MUTABLE_HV(SvRV(e));
4685 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Hash\n"));
4686 for (i = 0; i < other_len; ++i) {
4687 SV ** const svp = av_fetch(other_av, i, FALSE);
4688 DEBUG_M(Perl_deb(aTHX_ " checking for key existence...\n"));
4689 if (svp) { /* ??? When can this not happen? */
4690 if (hv_exists_ent(hv, *svp, 0))
4696 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4697 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Hash\n"));
4700 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4702 HV *hv = MUTABLE_HV(SvRV(e));
4704 (void) hv_iterinit(hv);
4705 while ( (he = hv_iternext(hv)) ) {
4706 DEBUG_M(Perl_deb(aTHX_ " testing key against pattern...\n"));
4707 if (matcher_matches_sv(matcher, hv_iterkeysv(he))) {
4708 (void) hv_iterinit(hv);
4709 destroy_matcher(matcher);
4713 destroy_matcher(matcher);
4719 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Hash\n"));
4720 if (hv_exists_ent(MUTABLE_HV(SvRV(e)), d, 0))
4727 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_PVAV) {
4728 if (object_on_left) {
4729 goto sm_any_array; /* Treat objects like scalars */
4731 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4732 AV * const other_av = MUTABLE_AV(SvRV(e));
4733 const I32 other_len = av_len(other_av) + 1;
4736 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Array\n"));
4737 for (i = 0; i < other_len; ++i) {
4738 SV ** const svp = av_fetch(other_av, i, FALSE);
4740 DEBUG_M(Perl_deb(aTHX_ " testing for key existence...\n"));
4741 if (svp) { /* ??? When can this not happen? */
4742 if (hv_exists_ent(MUTABLE_HV(SvRV(d)), *svp, 0))
4748 if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4749 AV *other_av = MUTABLE_AV(SvRV(d));
4750 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Array\n"));
4751 if (av_len(MUTABLE_AV(SvRV(e))) != av_len(other_av))
4755 const I32 other_len = av_len(other_av);
4757 if (NULL == seen_this) {
4758 seen_this = newHV();
4759 (void) sv_2mortal(MUTABLE_SV(seen_this));
4761 if (NULL == seen_other) {
4762 seen_other = newHV();
4763 (void) sv_2mortal(MUTABLE_SV(seen_other));
4765 for(i = 0; i <= other_len; ++i) {
4766 SV * const * const this_elem = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4767 SV * const * const other_elem = av_fetch(other_av, i, FALSE);
4769 if (!this_elem || !other_elem) {
4770 if ((this_elem && SvOK(*this_elem))
4771 || (other_elem && SvOK(*other_elem)))
4774 else if (hv_exists_ent(seen_this,
4775 sv_2mortal(newSViv(PTR2IV(*this_elem))), 0) ||
4776 hv_exists_ent(seen_other,
4777 sv_2mortal(newSViv(PTR2IV(*other_elem))), 0))
4779 if (*this_elem != *other_elem)
4783 (void)hv_store_ent(seen_this,
4784 sv_2mortal(newSViv(PTR2IV(*this_elem))),
4786 (void)hv_store_ent(seen_other,
4787 sv_2mortal(newSViv(PTR2IV(*other_elem))),
4793 DEBUG_M(Perl_deb(aTHX_ " recursively comparing array element...\n"));
4794 (void) do_smartmatch(seen_this, seen_other, 0);
4796 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4805 else if (SvROK(d) && SvTYPE(SvRV(d)) == SVt_REGEXP) {
4806 DEBUG_M(Perl_deb(aTHX_ " applying rule Regex-Array\n"));
4809 PMOP * const matcher = make_matcher((REGEXP*) SvRV(d));
4810 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4813 for(i = 0; i <= this_len; ++i) {
4814 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4815 DEBUG_M(Perl_deb(aTHX_ " testing element against pattern...\n"));
4816 if (svp && matcher_matches_sv(matcher, *svp)) {
4817 destroy_matcher(matcher);
4821 destroy_matcher(matcher);
4825 else if (!SvOK(d)) {
4826 /* undef ~~ array */
4827 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4830 DEBUG_M(Perl_deb(aTHX_ " applying rule Undef-Array\n"));
4831 for (i = 0; i <= this_len; ++i) {
4832 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4833 DEBUG_M(Perl_deb(aTHX_ " testing for undef element...\n"));
4834 if (!svp || !SvOK(*svp))
4843 const I32 this_len = av_len(MUTABLE_AV(SvRV(e)));
4845 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Array\n"));
4846 for (i = 0; i <= this_len; ++i) {
4847 SV * const * const svp = av_fetch(MUTABLE_AV(SvRV(e)), i, FALSE);
4854 /* infinite recursion isn't supposed to happen here */
4855 DEBUG_M(Perl_deb(aTHX_ " recursively testing array element...\n"));
4856 (void) do_smartmatch(NULL, NULL, 1);
4858 DEBUG_M(Perl_deb(aTHX_ " recursion finished\n"));
4867 else if (SvROK(e) && SvTYPE(SvRV(e)) == SVt_REGEXP) {
4868 if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVHV) {
4869 SV *t = d; d = e; e = t;
4870 DEBUG_M(Perl_deb(aTHX_ " applying rule Hash-Regex\n"));
4873 else if (!object_on_left && SvROK(d) && SvTYPE(SvRV(d)) == SVt_PVAV) {
4874 SV *t = d; d = e; e = t;
4875 DEBUG_M(Perl_deb(aTHX_ " applying rule Array-Regex\n"));
4876 goto sm_regex_array;
4879 PMOP * const matcher = make_matcher((REGEXP*) SvRV(e));
4881 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Regex\n"));
4883 PUSHs(matcher_matches_sv(matcher, d)
4886 destroy_matcher(matcher);
4891 /* See if there is overload magic on left */
4892 else if (object_on_left && SvAMAGIC(d)) {
4894 DEBUG_M(Perl_deb(aTHX_ " applying rule Object-Any\n"));
4895 DEBUG_M(Perl_deb(aTHX_ " attempting overload\n"));
4898 tmpsv = amagic_call(d, e, smart_amg, AMGf_noright);
4906 DEBUG_M(Perl_deb(aTHX_ " failed to run overload method; falling back...\n"));
4909 else if (!SvOK(d)) {
4910 /* undef ~~ scalar ; we already know that the scalar is SvOK */
4911 DEBUG_M(Perl_deb(aTHX_ " applying rule undef-Any\n"));
4916 if (SvNIOK(e) || (SvPOK(e) && looks_like_number(e) && SvNIOK(d))) {
4917 DEBUG_M(if (SvNIOK(e))
4918 Perl_deb(aTHX_ " applying rule Any-Num\n");
4920 Perl_deb(aTHX_ " applying rule Num-numish\n");
4922 /* numeric comparison */
4925 if (CopHINTS_get(PL_curcop) & HINT_INTEGER)
4926 (void) Perl_pp_i_eq(aTHX);
4928 (void) Perl_pp_eq(aTHX);
4936 /* As a last resort, use string comparison */
4937 DEBUG_M(Perl_deb(aTHX_ " applying rule Any-Any\n"));
4940 return Perl_pp_seq(aTHX);
4946 register PERL_CONTEXT *cx;
4947 const I32 gimme = GIMME_V;
4949 /* This is essentially an optimization: if the match
4950 fails, we don't want to push a context and then
4951 pop it again right away, so we skip straight
4952 to the op that follows the leavewhen.
4953 RETURNOP calls PUTBACK which restores the stack pointer after the POPs.
4955 if ((0 == (PL_op->op_flags & OPf_SPECIAL)) && !SvTRUEx(POPs))
4956 RETURNOP(cLOGOP->op_other->op_next);
4958 ENTER_with_name("when");
4961 PUSHBLOCK(cx, CXt_WHEN, SP);
4971 register PERL_CONTEXT *cx;
4976 cxix = dopoptogiven(cxstack_ix);
4978 DIE(aTHX_ "Can't use when() outside a topicalizer");
4981 assert(CxTYPE(cx) == CXt_WHEN);
4984 SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4985 PL_curpm = newpm; /* pop $1 et al */
4987 LEAVE_with_name("when");
4989 if (cxix < cxstack_ix)
4992 cx = &cxstack[cxix];
4994 if (CxFOREACH(cx)) {
4995 /* clear off anything above the scope we're re-entering */
4996 I32 inner = PL_scopestack_ix;
4999 if (PL_scopestack_ix < inner)
5000 leave_scope(PL_scopestack[PL_scopestack_ix]);
5001 PL_curcop = cx->blk_oldcop;
5003 return cx->blk_loop.my_op->op_nextop;
5006 RETURNOP(cx->blk_givwhen.leave_op);
5013 register PERL_CONTEXT *cx;
5018 PERL_UNUSED_VAR(gimme);
5020 cxix = dopoptowhen(cxstack_ix);
5022 DIE(aTHX_ "Can't \"continue\" outside a when block");
5024 if (cxix < cxstack_ix)
5028 assert(CxTYPE(cx) == CXt_WHEN);
5031 PL_curpm = newpm; /* pop $1 et al */
5033 LEAVE_with_name("when");
5034 RETURNOP(cx->blk_givwhen.leave_op->op_next);
5041 register PERL_CONTEXT *cx;
5043 cxix = dopoptogiven(cxstack_ix);
5045 DIE(aTHX_ "Can't \"break\" outside a given block");
5047 cx = &cxstack[cxix];
5049 DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
5051 if (cxix < cxstack_ix)
5054 /* Restore the sp at the time we entered the given block */
5057 return cx->blk_givwhen.leave_op;
5061 S_doparseform(pTHX_ SV *sv)
5064 register char *s = SvPV(sv, len);
5065 register char *send;
5066 register char *base = NULL; /* start of current field */
5067 register I32 skipspaces = 0; /* number of contiguous spaces seen */
5068 bool noblank = FALSE; /* ~ or ~~ seen on this line */
5069 bool repeat = FALSE; /* ~~ seen on this line */
5070 bool postspace = FALSE; /* a text field may need right padding */
5073 U32 *linepc = NULL; /* position of last FF_LINEMARK */
5075 bool ischop; /* it's a ^ rather than a @ */
5076 bool unchopnum = FALSE; /* at least one @ (i.e. non-chop) num field seen */
5077 int maxops = 12; /* FF_LINEMARK + FF_END + 10 (\0 without preceding \n) */
5081 PERL_ARGS_ASSERT_DOPARSEFORM;
5084 Perl_croak(aTHX_ "Null picture in formline");
5086 if (SvTYPE(sv) >= SVt_PVMG) {
5087 /* This might, of course, still return NULL. */
5088 mg = mg_find(sv, PERL_MAGIC_fm);
5090 sv_upgrade(sv, SVt_PVMG);
5094 /* still the same as previously-compiled string? */
5095 SV *old = mg->mg_obj;
5096 if ( !(!!SvUTF8(old) ^ !!SvUTF8(sv))
5097 && len == SvCUR(old)
5098 && strnEQ(SvPVX(old), SvPVX(sv), len)
5100 DEBUG_f(PerlIO_printf(Perl_debug_log,"Re-using compiled format\n"));
5104 DEBUG_f(PerlIO_printf(Perl_debug_log, "Re-compiling format\n"));
5105 Safefree(mg->mg_ptr);
5111 DEBUG_f(PerlIO_printf(Perl_debug_log, "Compiling format\n"));
5112 mg = sv_magicext(sv, NULL, PERL_MAGIC_fm, &PL_vtbl_fm, NULL, 0);
5115 sv_copy = newSVpvn_utf8(s, len, SvUTF8(sv));
5116 s = SvPV(sv_copy, len); /* work on the copy, not the original */
5120 /* estimate the buffer size needed */
5121 for (base = s; s <= send; s++) {
5122 if (*s == '\n' || *s == '@' || *s == '^')
5128 Newx(fops, maxops, U32);
5133 *fpc++ = FF_LINEMARK;
5134 noblank = repeat = FALSE;
5152 case ' ': case '\t':
5159 } /* else FALL THROUGH */
5167 *fpc++ = FF_LITERAL;
5175 *fpc++ = (U32)skipspaces;
5179 *fpc++ = FF_NEWLINE;
5183 arg = fpc - linepc + 1;
5190 *fpc++ = FF_LINEMARK;
5191 noblank = repeat = FALSE;
5200 ischop = s[-1] == '^';
5206 arg = (s - base) - 1;
5208 *fpc++ = FF_LITERAL;
5214 if (*s == '*') { /* @* or ^* */
5216 *fpc++ = 2; /* skip the @* or ^* */
5218 *fpc++ = FF_LINESNGL;
5221 *fpc++ = FF_LINEGLOB;
5223 else if (*s == '#' || (*s == '.' && s[1] == '#')) { /* @###, ^### */
5224 arg = ischop ? FORM_NUM_BLANK : 0;
5229 const char * const f = ++s;
5232 arg |= FORM_NUM_POINT + (s - f);
5234 *fpc++ = s - base; /* fieldsize for FETCH */
5235 *fpc++ = FF_DECIMAL;
5237 unchopnum |= ! ischop;
5239 else if (*s == '0' && s[1] == '#') { /* Zero padded decimals */
5240 arg = ischop ? FORM_NUM_BLANK : 0;
5242 s++; /* skip the '0' first */
5246 const char * const f = ++s;
5249 arg |= FORM_NUM_POINT + (s - f);
5251 *fpc++ = s - base; /* fieldsize for FETCH */
5252 *fpc++ = FF_0DECIMAL;
5254 unchopnum |= ! ischop;
5256 else { /* text field */
5258 bool ismore = FALSE;
5261 while (*++s == '>') ;
5262 prespace = FF_SPACE;
5264 else if (*s == '|') {
5265 while (*++s == '|') ;
5266 prespace = FF_HALFSPACE;
5271 while (*++s == '<') ;
5274 if (*s == '.' && s[1] == '.' && s[2] == '.') {
5278 *fpc++ = s - base; /* fieldsize for FETCH */
5280 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
5283 *fpc++ = (U32)prespace; /* add SPACE or HALFSPACE */
5297 assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
5300 mg->mg_ptr = (char *) fops;
5301 mg->mg_len = arg * sizeof(U32);
5302 mg->mg_obj = sv_copy;
5303 mg->mg_flags |= MGf_REFCOUNTED;
5305 if (unchopnum && repeat)
5306 Perl_die(aTHX_ "Repeated format line will never terminate (~~ and @#)");
5313 S_num_overflow(NV value, I32 fldsize, I32 frcsize)
5315 /* Can value be printed in fldsize chars, using %*.*f ? */
5319 int intsize = fldsize - (value < 0 ? 1 : 0);
5321 if (frcsize & FORM_NUM_POINT)
5323 frcsize &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
5326 while (intsize--) pwr *= 10.0;
5327 while (frcsize--) eps /= 10.0;
5330 if (value + eps >= pwr)
5333 if (value - eps <= -pwr)
5340 S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
5343 SV * const datasv = FILTER_DATA(idx);
5344 const int filter_has_file = IoLINES(datasv);
5345 SV * const filter_state = MUTABLE_SV(IoTOP_GV(datasv));
5346 SV * const filter_sub = MUTABLE_SV(IoBOTTOM_GV(datasv));
5351 char *prune_from = NULL;
5352 bool read_from_cache = FALSE;
5355 PERL_ARGS_ASSERT_RUN_USER_FILTER;
5357 assert(maxlen >= 0);
5360 /* I was having segfault trouble under Linux 2.2.5 after a
5361 parse error occured. (Had to hack around it with a test
5362 for PL_parser->error_count == 0.) Solaris doesn't segfault --
5363 not sure where the trouble is yet. XXX */
5366 SV *const cache = datasv;
5369 const char *cache_p = SvPV(cache, cache_len);
5373 /* Running in block mode and we have some cached data already.
5375 if (cache_len >= umaxlen) {
5376 /* In fact, so much data we don't even need to call
5381 const char *const first_nl =
5382 (const char *)memchr(cache_p, '\n', cache_len);
5384 take = first_nl + 1 - cache_p;
5388 sv_catpvn(buf_sv, cache_p, take);
5389 sv_chop(cache, cache_p + take);
5390 /* Definitely not EOF */
5394 sv_catsv(buf_sv, cache);
5396 umaxlen -= cache_len;
5399 read_from_cache = TRUE;
5403 /* Filter API says that the filter appends to the contents of the buffer.
5404 Usually the buffer is "", so the details don't matter. But if it's not,
5405 then clearly what it contains is already filtered by this filter, so we
5406 don't want to pass it in a second time.
5407 I'm going to use a mortal in case the upstream filter croaks. */
5408 upstream = ((SvOK(buf_sv) && sv_len(buf_sv)) || SvGMAGICAL(buf_sv))
5409 ? sv_newmortal() : buf_sv;
5410 SvUPGRADE(upstream, SVt_PV);
5412 if (filter_has_file) {
5413 status = FILTER_READ(idx+1, upstream, 0);
5416 if (filter_sub && status >= 0) {
5420 ENTER_with_name("call_filter_sub");
5421 save_gp(PL_defgv, 0);
5422 GvINTRO_off(PL_defgv);
5423 SAVEGENERICSV(GvSV(PL_defgv));
5427 DEFSV_set(upstream);
5428 SvREFCNT_inc_simple_void_NN(upstream);
5432 PUSHs(filter_state);
5435 count = call_sv(filter_sub, G_SCALAR);
5447 LEAVE_with_name("call_filter_sub");
5450 if(SvOK(upstream)) {
5451 got_p = SvPV(upstream, got_len);
5453 if (got_len > umaxlen) {
5454 prune_from = got_p + umaxlen;
5457 char *const first_nl = (char *)memchr(got_p, '\n', got_len);
5458 if (first_nl && first_nl + 1 < got_p + got_len) {
5459 /* There's a second line here... */
5460 prune_from = first_nl + 1;
5465 /* Oh. Too long. Stuff some in our cache. */
5466 STRLEN cached_len = got_p + got_len - prune_from;
5467 SV *const cache = datasv;
5470 /* Cache should be empty. */
5471 assert(!SvCUR(cache));
5474 sv_setpvn(cache, prune_from, cached_len);
5475 /* If you ask for block mode, you may well split UTF-8 characters.
5476 "If it breaks, you get to keep both parts"
5477 (Your code is broken if you don't put them back together again
5478 before something notices.) */
5479 if (SvUTF8(upstream)) {
5482 SvCUR_set(upstream, got_len - cached_len);
5484 /* Can't yet be EOF */
5489 /* If they are at EOF but buf_sv has something in it, then they may never
5490 have touched the SV upstream, so it may be undefined. If we naively
5491 concatenate it then we get a warning about use of uninitialised value.
5493 if (upstream != buf_sv && (SvOK(upstream) || SvGMAGICAL(upstream))) {
5494 sv_catsv(buf_sv, upstream);
5498 IoLINES(datasv) = 0;
5500 SvREFCNT_dec(filter_state);
5501 IoTOP_GV(datasv) = NULL;
5504 SvREFCNT_dec(filter_sub);
5505 IoBOTTOM_GV(datasv) = NULL;
5507 filter_del(S_run_user_filter);
5509 if (status == 0 && read_from_cache) {
5510 /* If we read some data from the cache (and by getting here it implies
5511 that we emptied the cache) then we aren't yet at EOF, and mustn't
5512 report that to our caller. */
5518 /* perhaps someone can come up with a better name for
5519 this? it is not really "absolute", per se ... */
5521 S_path_is_absolute(const char *name)
5523 PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE;
5525 if (PERL_FILE_IS_ABSOLUTE(name)
5527 || (*name == '.' && ((name[1] == '/' ||
5528 (name[1] == '.' && name[2] == '/'))
5529 || (name[1] == '\\' ||
5530 ( name[1] == '.' && name[2] == '\\')))
5533 || (*name == '.' && (name[1] == '/' ||
5534 (name[1] == '.' && name[2] == '/')))
5546 * c-indentation-style: bsd
5548 * indent-tabs-mode: t
5551 * ex: set ts=8 sts=4 sw=4 noet: