This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
2d93cc14cd0742a15404570ca0d1948f244b10d6
[perl5.git] / pp_ctl.c
1 /*    pp_ctl.c
2  *
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
5  *
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.
8  *
9  */
10
11 /*
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.
18  *
19  *     [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
20  */
21
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.
27  *
28  * Control-oriented means things like pp_enteriter() and pp_next(), which
29  * alter the flow of control of the program.
30  */
31
32
33 #include "EXTERN.h"
34 #define PERL_IN_PP_CTL_C
35 #include "perl.h"
36
37 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
38
39 #define dopoptosub(plop)        dopoptosub_at(cxstack, (plop))
40
41 PP(pp_wantarray)
42 {
43     dVAR;
44     dSP;
45     I32 cxix;
46     const PERL_CONTEXT *cx;
47     EXTEND(SP, 1);
48
49     if (PL_op->op_private & OPpOFFBYONE) {
50         if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
51     }
52     else {
53       cxix = dopoptosub(cxstack_ix);
54       if (cxix < 0)
55         RETPUSHUNDEF;
56       cx = &cxstack[cxix];
57     }
58
59     switch (cx->blk_gimme) {
60     case G_ARRAY:
61         RETPUSHYES;
62     case G_SCALAR:
63         RETPUSHNO;
64     default:
65         RETPUSHUNDEF;
66     }
67 }
68
69 PP(pp_regcreset)
70 {
71     dVAR;
72     /* XXXX Should store the old value to allow for tie/overload - and
73        restore in regcomp, where marked with XXXX. */
74     PL_reginterp_cnt = 0;
75     TAINT_NOT;
76     return NORMAL;
77 }
78
79 PP(pp_regcomp)
80 {
81     dVAR;
82     dSP;
83     register PMOP *pm = (PMOP*)cLOGOP->op_other;
84     SV *tmpstr;
85     REGEXP *re = NULL;
86
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) {
91             dMARK;
92             SP = MARK;
93         }
94         else
95             (void)POPs;
96         RETURN;
97     }
98 #endif
99
100 #define tryAMAGICregexp(rx)                     \
101     STMT_START {                                \
102         SvGETMAGIC(rx);                         \
103         if (SvROK(rx) && SvAMAGIC(rx)) {        \
104             SV *sv = AMG_CALLunary(rx, regexp_amg); \
105             if (sv) {                           \
106                 if (SvROK(sv))                  \
107                     sv = SvRV(sv);              \
108                 if (SvTYPE(sv) != SVt_REGEXP)   \
109                     Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP"); \
110                 rx = sv;                        \
111             }                                   \
112         }                                       \
113     } STMT_END
114             
115
116     if (PL_op->op_flags & OPf_STACKED) {
117         /* multiple args; concatenate them */
118         dMARK; dORIGMARK;
119         tmpstr = PAD_SV(ARGTARG);
120         sv_setpvs(tmpstr, "");
121         while (++MARK <= SP) {
122             SV *msv = *MARK;
123             SV *sv;
124
125             tryAMAGICregexp(msv);
126
127             if ((SvAMAGIC(tmpstr) || SvAMAGIC(msv)) &&
128                 (sv = amagic_call(tmpstr, msv, concat_amg, AMGf_assign)))
129             {
130                sv_setsv(tmpstr, sv);
131                continue;
132             }
133             sv_catsv_nomg(tmpstr, msv);
134         }
135         SvSETMAGIC(tmpstr);
136         SP = ORIGMARK;
137     }
138     else {
139         tmpstr = POPs;
140         tryAMAGICregexp(tmpstr);
141     }
142
143 #undef tryAMAGICregexp
144
145     if (SvROK(tmpstr)) {
146         SV * const sv = SvRV(tmpstr);
147         if (SvTYPE(sv) == SVt_REGEXP)
148             re = (REGEXP*) sv;
149     }
150     else if (SvTYPE(tmpstr) == SVt_REGEXP)
151         re = (REGEXP*) tmpstr;
152
153     if (re) {
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) {
161          SV *lhs;
162          const bool was_tainted = PL_tainted;
163          if (pm->op_flags & OPf_STACKED)
164             lhs = TOPs;
165          else if (pm->op_private & OPpTARGET_MY)
166             lhs = PAD_SV(pm->op_targ);
167          else lhs = DEFSV;
168          SvGETMAGIC(lhs);
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;
173         }
174
175         re = reg_temp_copy(NULL, re);
176         ReREFCNT_dec(PM_GETRE(pm));
177         PM_SETRE(pm, re);
178     }
179     else {
180         STRLEN len = 0;
181         const char *t = SvOK(tmpstr) ? SvPV_nomg_const(tmpstr, len) : "";
182
183         re = PM_GETRE(pm);
184         assert (re != (REGEXP*) &PL_sv_undef);
185
186         /* Check against the last compiled regexp. */
187         if (!re || !RX_PRECOMP(re) || RX_PRELEN(re) != len ||
188             memNE(RX_PRECOMP(re), t, len))
189         {
190             const regexp_engine *eng = re ? RX_ENGINE(re) : NULL;
191             U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
192             if (re) {
193                 ReREFCNT_dec(re);
194 #ifdef USE_ITHREADS
195                 PM_SETRE(pm, (REGEXP*) &PL_sv_undef);
196 #else
197                 PM_SETRE(pm, NULL);     /* crucial if regcomp aborts */
198 #endif
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));
203             }
204
205             if (PL_op->op_flags & OPf_SPECIAL)
206                 PL_reginterp_cnt = I32_MAX; /* Mark as safe.  */
207
208             if (!DO_UTF8(tmpstr) && SvUTF8(tmpstr)) {
209                 /* Not doing UTF-8, despite what the SV says. Is this only if
210                    we're trapped in use 'bytes'?  */
211                 /* Make a copy of the octet sequence, but without the flag on,
212                    as the compiler now honours the SvUTF8 flag on tmpstr.  */
213                 STRLEN len;
214                 const char *const p = SvPV(tmpstr, len);
215                 tmpstr = newSVpvn_flags(p, len, SVs_TEMP);
216             }
217             else if (SvAMAGIC(tmpstr) || SvGMAGICAL(tmpstr)) {
218                 /* make a copy to avoid extra stringifies */
219                 tmpstr = newSVpvn_flags(t, len, SVs_TEMP | SvUTF8(tmpstr));
220             }
221
222             if (eng)
223                 PM_SETRE(pm, CALLREGCOMP_ENG(eng, tmpstr, pm_flags));
224             else
225                 PM_SETRE(pm, CALLREGCOMP(tmpstr, pm_flags));
226
227             PL_reginterp_cnt = 0;       /* XXXX Be extra paranoid - needed
228                                            inside tie/overload accessors.  */
229         }
230     }
231     
232     re = PM_GETRE(pm);
233
234 #ifndef INCOMPLETE_TAINTS
235     if (PL_tainting) {
236         if (PL_tainted) {
237             SvTAINTED_on((SV*)re);
238             RX_EXTFLAGS(re) |= RXf_TAINTED;
239         }
240     }
241 #endif
242
243     if (!RX_PRELEN(PM_GETRE(pm)) && PL_curpm)
244         pm = PL_curpm;
245
246
247 #if !defined(USE_ITHREADS)
248     /* can't change the optree at runtime either */
249     /* PMf_KEEP is handled differently under threads to avoid these problems */
250     if (pm->op_pmflags & PMf_KEEP) {
251         pm->op_private &= ~OPpRUNTIME;  /* no point compiling again */
252         cLOGOP->op_first->op_next = PL_op->op_next;
253     }
254 #endif
255     RETURN;
256 }
257
258 PP(pp_substcont)
259 {
260     dVAR;
261     dSP;
262     register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
263     register PMOP * const pm = (PMOP*) cLOGOP->op_other;
264     register SV * const dstr = cx->sb_dstr;
265     register char *s = cx->sb_s;
266     register char *m = cx->sb_m;
267     char *orig = cx->sb_orig;
268     register REGEXP * const rx = cx->sb_rx;
269     SV *nsv = NULL;
270     REGEXP *old = PM_GETRE(pm);
271
272     PERL_ASYNC_CHECK();
273
274     if(old != rx) {
275         if(old)
276             ReREFCNT_dec(old);
277         PM_SETRE(pm,ReREFCNT_inc(rx));
278     }
279
280     rxres_restore(&cx->sb_rxres, rx);
281     RX_MATCH_UTF8_set(rx, DO_UTF8(cx->sb_targ));
282
283     if (cx->sb_iters++) {
284         const I32 saviters = cx->sb_iters;
285         if (cx->sb_iters > cx->sb_maxiters)
286             DIE(aTHX_ "Substitution loop");
287
288         SvGETMAGIC(TOPs); /* possibly clear taint on $1 etc: #67962 */
289
290         /* See "how taint works" above pp_subst() */
291         if (SvTAINTED(TOPs))
292             cx->sb_rxtainted |= SUBST_TAINT_REPL;
293         sv_catsv_nomg(dstr, POPs);
294         /* XXX: adjust for positive offsets of \G for instance s/(.)\G//g with positive pos() */
295         s -= RX_GOFS(rx);
296
297         /* Are we done */
298         /* I believe that we can't set REXEC_SCREAM here if
299            SvSCREAM(cx->sb_targ) is true because SvPVX(cx->sb_targ) isn't always
300            equal to s.  [See the comment before Perl_re_intuit_start(), which is
301            called from Perl_regexec_flags(), which says that it should be when
302            SvSCREAM() is true.]  s, cx->sb_strend and orig will be consistent
303            with SvPVX(cx->sb_targ), as substconst doesn't modify cx->sb_targ
304            during the match.  */
305         if (CxONCE(cx) || s < orig ||
306                 !CALLREGEXEC(rx, s, cx->sb_strend, orig,
307                              (s == m) + RX_GOFS(rx), cx->sb_targ, NULL,
308                              ((cx->sb_rflags & REXEC_COPY_STR)
309                               ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
310                               : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
311         {
312             SV *targ = cx->sb_targ;
313
314             assert(cx->sb_strend >= s);
315             if(cx->sb_strend > s) {
316                  if (DO_UTF8(dstr) && !SvUTF8(targ))
317                       sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
318                  else
319                       sv_catpvn(dstr, s, cx->sb_strend - s);
320             }
321             if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
322                 cx->sb_rxtainted |= SUBST_TAINT_PAT;
323
324             if (pm->op_pmflags & PMf_NONDESTRUCT) {
325                 PUSHs(dstr);
326                 /* From here on down we're using the copy, and leaving the
327                    original untouched.  */
328                 targ = dstr;
329             }
330             else {
331 #ifdef PERL_OLD_COPY_ON_WRITE
332                 if (SvIsCOW(targ)) {
333                     sv_force_normal_flags(targ, SV_COW_DROP_PV);
334                 } else
335 #endif
336                 {
337                     SvPV_free(targ);
338                 }
339                 SvPV_set(targ, SvPVX(dstr));
340                 SvCUR_set(targ, SvCUR(dstr));
341                 SvLEN_set(targ, SvLEN(dstr));
342                 if (DO_UTF8(dstr))
343                     SvUTF8_on(targ);
344                 SvPV_set(dstr, NULL);
345
346                 mPUSHi(saviters - 1);
347
348                 (void)SvPOK_only_UTF8(targ);
349             }
350
351             /* update the taint state of various various variables in
352              * preparation for final exit.
353              * See "how taint works" above pp_subst() */
354             if (PL_tainting) {
355                 if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
356                     ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
357                                     == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
358                 )
359                     (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
360
361                 if (!(cx->sb_rxtainted & SUBST_TAINT_BOOLRET)
362                     && (cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
363                 )
364                     SvTAINTED_on(TOPs);  /* taint return value */
365                 /* needed for mg_set below */
366                 PL_tainted = cBOOL(cx->sb_rxtainted &
367                             (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
368                 SvTAINT(TARG);
369             }
370             /* PL_tainted must be correctly set for this mg_set */
371             SvSETMAGIC(TARG);
372             TAINT_NOT;
373             LEAVE_SCOPE(cx->sb_oldsave);
374             POPSUBST(cx);
375             RETURNOP(pm->op_next);
376             /* NOTREACHED */
377         }
378         cx->sb_iters = saviters;
379     }
380     if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
381         m = s;
382         s = orig;
383         cx->sb_orig = orig = RX_SUBBEG(rx);
384         s = orig + (m - s);
385         cx->sb_strend = s + (cx->sb_strend - m);
386     }
387     cx->sb_m = m = RX_OFFS(rx)[0].start + orig;
388     if (m > s) {
389         if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ))
390             sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
391         else
392             sv_catpvn(dstr, s, m-s);
393     }
394     cx->sb_s = RX_OFFS(rx)[0].end + orig;
395     { /* Update the pos() information. */
396         SV * const sv
397             = (pm->op_pmflags & PMf_NONDESTRUCT) ? cx->sb_dstr : cx->sb_targ;
398         MAGIC *mg;
399         SvUPGRADE(sv, SVt_PVMG);
400         if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
401 #ifdef PERL_OLD_COPY_ON_WRITE
402             if (SvIsCOW(sv))
403                 sv_force_normal_flags(sv, 0);
404 #endif
405             mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
406                              NULL, 0);
407         }
408         mg->mg_len = m - orig;
409     }
410     if (old != rx)
411         (void)ReREFCNT_inc(rx);
412     /* update the taint state of various various variables in preparation
413      * for calling the code block.
414      * See "how taint works" above pp_subst() */
415     if (PL_tainting) {
416         if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
417             cx->sb_rxtainted |= SUBST_TAINT_PAT;
418
419         if ((cx->sb_rxtainted & SUBST_TAINT_PAT) ||
420             ((cx->sb_rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
421                             == (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
422         )
423             (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
424
425         if (cx->sb_iters > 1 && (cx->sb_rxtainted & 
426                         (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL)))
427             SvTAINTED_on((pm->op_pmflags & PMf_NONDESTRUCT)
428                          ? cx->sb_dstr : cx->sb_targ);
429         TAINT_NOT;
430     }
431     rxres_save(&cx->sb_rxres, rx);
432     PL_curpm = pm;
433     RETURNOP(pm->op_pmstashstartu.op_pmreplstart);
434 }
435
436 void
437 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
438 {
439     UV *p = (UV*)*rsp;
440     U32 i;
441
442     PERL_ARGS_ASSERT_RXRES_SAVE;
443     PERL_UNUSED_CONTEXT;
444
445     if (!p || p[1] < RX_NPARENS(rx)) {
446 #ifdef PERL_OLD_COPY_ON_WRITE
447         i = 7 + RX_NPARENS(rx) * 2;
448 #else
449         i = 6 + RX_NPARENS(rx) * 2;
450 #endif
451         if (!p)
452             Newx(p, i, UV);
453         else
454             Renew(p, i, UV);
455         *rsp = (void*)p;
456     }
457
458     *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? RX_SUBBEG(rx) : NULL);
459     RX_MATCH_COPIED_off(rx);
460
461 #ifdef PERL_OLD_COPY_ON_WRITE
462     *p++ = PTR2UV(RX_SAVED_COPY(rx));
463     RX_SAVED_COPY(rx) = NULL;
464 #endif
465
466     *p++ = RX_NPARENS(rx);
467
468     *p++ = PTR2UV(RX_SUBBEG(rx));
469     *p++ = (UV)RX_SUBLEN(rx);
470     for (i = 0; i <= RX_NPARENS(rx); ++i) {
471         *p++ = (UV)RX_OFFS(rx)[i].start;
472         *p++ = (UV)RX_OFFS(rx)[i].end;
473     }
474 }
475
476 static void
477 S_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
478 {
479     UV *p = (UV*)*rsp;
480     U32 i;
481
482     PERL_ARGS_ASSERT_RXRES_RESTORE;
483     PERL_UNUSED_CONTEXT;
484
485     RX_MATCH_COPY_FREE(rx);
486     RX_MATCH_COPIED_set(rx, *p);
487     *p++ = 0;
488
489 #ifdef PERL_OLD_COPY_ON_WRITE
490     if (RX_SAVED_COPY(rx))
491         SvREFCNT_dec (RX_SAVED_COPY(rx));
492     RX_SAVED_COPY(rx) = INT2PTR(SV*,*p);
493     *p++ = 0;
494 #endif
495
496     RX_NPARENS(rx) = *p++;
497
498     RX_SUBBEG(rx) = INT2PTR(char*,*p++);
499     RX_SUBLEN(rx) = (I32)(*p++);
500     for (i = 0; i <= RX_NPARENS(rx); ++i) {
501         RX_OFFS(rx)[i].start = (I32)(*p++);
502         RX_OFFS(rx)[i].end = (I32)(*p++);
503     }
504 }
505
506 static void
507 S_rxres_free(pTHX_ void **rsp)
508 {
509     UV * const p = (UV*)*rsp;
510
511     PERL_ARGS_ASSERT_RXRES_FREE;
512     PERL_UNUSED_CONTEXT;
513
514     if (p) {
515 #ifdef PERL_POISON
516         void *tmp = INT2PTR(char*,*p);
517         Safefree(tmp);
518         if (*p)
519             PoisonFree(*p, 1, sizeof(*p));
520 #else
521         Safefree(INT2PTR(char*,*p));
522 #endif
523 #ifdef PERL_OLD_COPY_ON_WRITE
524         if (p[1]) {
525             SvREFCNT_dec (INT2PTR(SV*,p[1]));
526         }
527 #endif
528         Safefree(p);
529         *rsp = NULL;
530     }
531 }
532
533 #define FORM_NUM_BLANK (1<<30)
534 #define FORM_NUM_POINT (1<<29)
535
536 PP(pp_formline)
537 {
538     dVAR; dSP; dMARK; dORIGMARK;
539     register SV * const tmpForm = *++MARK;
540     SV *formsv;             /* contains text of original format */
541     register U32 *fpc;      /* format ops program counter */
542     register char *t;       /* current append position in target string */
543     const char *f;          /* current position in format string */
544     register I32 arg;
545     register SV *sv = NULL; /* current item */
546     const char *item = NULL;/* string value of current item */
547     I32 itemsize  = 0;      /* length of current item, possibly truncated */
548     I32 fieldsize = 0;      /* width of current field */
549     I32 lines = 0;          /* number of lines that have been output */
550     bool chopspace = (strchr(PL_chopset, ' ') != NULL); /* does $: have space */
551     const char *chophere = NULL; /* where to chop current item */
552     STRLEN linemark = 0;    /* pos of start of line in output */
553     NV value;
554     bool gotsome = FALSE;   /* seen at least one non-blank item on this line */
555     STRLEN len;
556     STRLEN linemax;         /* estimate of output size in bytes */
557     bool item_is_utf8 = FALSE;
558     bool targ_is_utf8 = FALSE;
559     const char *fmt;
560     MAGIC *mg = NULL;
561     U8 *source;             /* source of bytes to append */
562     STRLEN to_copy;         /* how may bytes to append */
563     char trans;             /* what chars to translate */
564
565     mg = doparseform(tmpForm);
566
567     fpc = (U32*)mg->mg_ptr;
568     /* the actual string the format was compiled from.
569      * with overload etc, this may not match tmpForm */
570     formsv = mg->mg_obj;
571
572
573     SvPV_force(PL_formtarget, len);
574     if (SvTAINTED(tmpForm) || SvTAINTED(formsv))
575         SvTAINTED_on(PL_formtarget);
576     if (DO_UTF8(PL_formtarget))
577         targ_is_utf8 = TRUE;
578     linemax = (SvCUR(formsv) * (IN_BYTES ? 1 : 3) + 1);
579     t = SvGROW(PL_formtarget, len + linemax + 1);
580     /* XXX from now onwards, SvCUR(PL_formtarget) is invalid */
581     t += len;
582     f = SvPV_const(formsv, len);
583
584     for (;;) {
585         DEBUG_f( {
586             const char *name = "???";
587             arg = -1;
588             switch (*fpc) {
589             case FF_LITERAL:    arg = fpc[1]; name = "LITERAL"; break;
590             case FF_BLANK:      arg = fpc[1]; name = "BLANK";   break;
591             case FF_SKIP:       arg = fpc[1]; name = "SKIP";    break;
592             case FF_FETCH:      arg = fpc[1]; name = "FETCH";   break;
593             case FF_DECIMAL:    arg = fpc[1]; name = "DECIMAL"; break;
594
595             case FF_CHECKNL:    name = "CHECKNL";       break;
596             case FF_CHECKCHOP:  name = "CHECKCHOP";     break;
597             case FF_SPACE:      name = "SPACE";         break;
598             case FF_HALFSPACE:  name = "HALFSPACE";     break;
599             case FF_ITEM:       name = "ITEM";          break;
600             case FF_CHOP:       name = "CHOP";          break;
601             case FF_LINEGLOB:   name = "LINEGLOB";      break;
602             case FF_NEWLINE:    name = "NEWLINE";       break;
603             case FF_MORE:       name = "MORE";          break;
604             case FF_LINEMARK:   name = "LINEMARK";      break;
605             case FF_END:        name = "END";           break;
606             case FF_0DECIMAL:   name = "0DECIMAL";      break;
607             case FF_LINESNGL:   name = "LINESNGL";      break;
608             }
609             if (arg >= 0)
610                 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
611             else
612                 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
613         } );
614         switch (*fpc++) {
615         case FF_LINEMARK:
616             linemark = t - SvPVX(PL_formtarget);
617             lines++;
618             gotsome = FALSE;
619             break;
620
621         case FF_LITERAL:
622             to_copy = *fpc++;
623             source = (U8 *)f;
624             f += to_copy;
625             trans = '~';
626             item_is_utf8 = targ_is_utf8 ? !!DO_UTF8(formsv) : !!SvUTF8(formsv);
627             goto append;
628
629         case FF_SKIP:
630             f += *fpc++;
631             break;
632
633         case FF_FETCH:
634             arg = *fpc++;
635             f += arg;
636             fieldsize = arg;
637
638             if (MARK < SP)
639                 sv = *++MARK;
640             else {
641                 sv = &PL_sv_no;
642                 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
643             }
644             if (SvTAINTED(sv))
645                 SvTAINTED_on(PL_formtarget);
646             break;
647
648         case FF_CHECKNL:
649             {
650                 const char *send;
651                 const char *s = item = SvPV_const(sv, len);
652                 itemsize = len;
653                 if (DO_UTF8(sv)) {
654                     itemsize = sv_len_utf8(sv);
655                     if (itemsize != (I32)len) {
656                         I32 itembytes;
657                         if (itemsize > fieldsize) {
658                             itemsize = fieldsize;
659                             itembytes = itemsize;
660                             sv_pos_u2b(sv, &itembytes, 0);
661                         }
662                         else
663                             itembytes = len;
664                         send = chophere = s + itembytes;
665                         while (s < send) {
666                             if (*s & ~31)
667                                 gotsome = TRUE;
668                             else if (*s == '\n')
669                                 break;
670                             s++;
671                         }
672                         item_is_utf8 = TRUE;
673                         itemsize = s - item;
674                         sv_pos_b2u(sv, &itemsize);
675                         break;
676                     }
677                 }
678                 item_is_utf8 = FALSE;
679                 if (itemsize > fieldsize)
680                     itemsize = fieldsize;
681                 send = chophere = s + itemsize;
682                 while (s < send) {
683                     if (*s & ~31)
684                         gotsome = TRUE;
685                     else if (*s == '\n')
686                         break;
687                     s++;
688                 }
689                 itemsize = s - item;
690                 break;
691             }
692
693         case FF_CHECKCHOP:
694             {
695                 const char *s = item = SvPV_const(sv, len);
696                 itemsize = len;
697                 if (DO_UTF8(sv)) {
698                     itemsize = sv_len_utf8(sv);
699                     if (itemsize != (I32)len) {
700                         I32 itembytes;
701                         if (itemsize <= fieldsize) {
702                             const char *send = chophere = s + itemsize;
703                             while (s < send) {
704                                 if (*s == '\r') {
705                                     itemsize = s - item;
706                                     chophere = s;
707                                     break;
708                                 }
709                                 if (*s++ & ~31)
710                                     gotsome = TRUE;
711                             }
712                         }
713                         else {
714                             const char *send;
715                             itemsize = fieldsize;
716                             itembytes = itemsize;
717                             sv_pos_u2b(sv, &itembytes, 0);
718                             send = chophere = s + itembytes;
719                             while (s < send || (s == send && isSPACE(*s))) {
720                                 if (isSPACE(*s)) {
721                                     if (chopspace)
722                                         chophere = s;
723                                     if (*s == '\r')
724                                         break;
725                                 }
726                                 else {
727                                     if (*s & ~31)
728                                         gotsome = TRUE;
729                                     if (strchr(PL_chopset, *s))
730                                         chophere = s + 1;
731                                 }
732                                 s++;
733                             }
734                             itemsize = chophere - item;
735                             sv_pos_b2u(sv, &itemsize);
736                         }
737                         item_is_utf8 = TRUE;
738                         break;
739                     }
740                 }
741                 item_is_utf8 = FALSE;
742                 if (itemsize <= fieldsize) {
743                     const char *const send = chophere = s + itemsize;
744                     while (s < send) {
745                         if (*s == '\r') {
746                             itemsize = s - item;
747                             chophere = s;
748                             break;
749                         }
750                         if (*s++ & ~31)
751                             gotsome = TRUE;
752                     }
753                 }
754                 else {
755                     const char *send;
756                     itemsize = fieldsize;
757                     send = chophere = s + itemsize;
758                     while (s < send || (s == send && isSPACE(*s))) {
759                         if (isSPACE(*s)) {
760                             if (chopspace)
761                                 chophere = s;
762                             if (*s == '\r')
763                                 break;
764                         }
765                         else {
766                             if (*s & ~31)
767                                 gotsome = TRUE;
768                             if (strchr(PL_chopset, *s))
769                                 chophere = s + 1;
770                         }
771                         s++;
772                     }
773                     itemsize = chophere - item;
774                 }
775                 break;
776             }
777
778         case FF_SPACE:
779             arg = fieldsize - itemsize;
780             if (arg) {
781                 fieldsize -= arg;
782                 while (arg-- > 0)
783                     *t++ = ' ';
784             }
785             break;
786
787         case FF_HALFSPACE:
788             arg = fieldsize - itemsize;
789             if (arg) {
790                 arg /= 2;
791                 fieldsize -= arg;
792                 while (arg-- > 0)
793                     *t++ = ' ';
794             }
795             break;
796
797         case FF_ITEM:
798             to_copy = itemsize;
799             source = (U8 *)item;
800             trans = 1;
801             if (item_is_utf8) {
802                 /* convert to_copy from chars to bytes */
803                 U8 *s = source;
804                 while (to_copy--)
805                    s += UTF8SKIP(s);
806                 to_copy = s - source;
807             }
808             goto append;
809
810         case FF_CHOP:
811             {
812                 const char *s = chophere;
813                 if (chopspace) {
814                     while (isSPACE(*s))
815                         s++;
816                 }
817                 sv_chop(sv,s);
818                 SvSETMAGIC(sv);
819                 break;
820             }
821
822         case FF_LINESNGL:
823             chopspace = 0;
824         case FF_LINEGLOB:
825             {
826                 const bool oneline = fpc[-1] == FF_LINESNGL;
827                 const char *s = item = SvPV_const(sv, len);
828                 const char *const send = s + len;
829
830                 item_is_utf8 = DO_UTF8(sv);
831                 if (!len)
832                     break;
833                 trans = 0;
834                 gotsome = TRUE;
835                 chophere = s + len;
836                 source = (U8 *) s;
837                 to_copy = len;
838                 while (s < send) {
839                     if (*s++ == '\n') {
840                         if (oneline) {
841                             to_copy = s - SvPVX_const(sv) - 1;
842                             chophere = s;
843                             break;
844                         } else {
845                             if (s == send) {
846                                 to_copy--;
847                             } else
848                                 lines++;
849                         }
850                     }
851                 }
852             }
853
854         append:
855             /* append to_copy bytes from source to PL_formstring.
856              * item_is_utf8 implies source is utf8.
857              * if trans, translate certain characters during the copy */
858             {
859                 U8 *tmp = NULL;
860                 STRLEN grow = 0;
861
862                 SvCUR_set(PL_formtarget,
863                           t - SvPVX_const(PL_formtarget));
864
865                 if (targ_is_utf8 && !item_is_utf8) {
866                     source = tmp = bytes_to_utf8(source, &to_copy);
867                 } else {
868                     if (item_is_utf8 && !targ_is_utf8) {
869                         U8 *s;
870                         /* Upgrade targ to UTF8, and then we reduce it to
871                            a problem we have a simple solution for.
872                            Don't need get magic.  */
873                         sv_utf8_upgrade_nomg(PL_formtarget);
874                         targ_is_utf8 = TRUE;
875                         /* re-calculate linemark */
876                         s = (U8*)SvPVX(PL_formtarget);
877                         /* the bytes we initially allocated to append the
878                          * whole line may have been gobbled up during the
879                          * upgrade, so allocate a whole new line's worth
880                          * for safety */
881                         grow = linemax;
882                         while (linemark--)
883                             s += UTF8SKIP(s);
884                         linemark = s - (U8*)SvPVX(PL_formtarget);
885                     }
886                     /* Easy. They agree.  */
887                     assert (item_is_utf8 == targ_is_utf8);
888                 }
889                 if (!trans)
890                     /* @* and ^* are the only things that can exceed
891                      * the linemax, so grow by the output size, plus
892                      * a whole new form's worth in case of any further
893                      * output */
894                     grow = linemax + to_copy;
895                 if (grow)
896                     SvGROW(PL_formtarget, SvCUR(PL_formtarget) + grow + 1);
897                 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
898
899                 Copy(source, t, to_copy, char);
900                 if (trans) {
901                     /* blank out ~ or control chars, depending on trans.
902                      * works on bytes not chars, so relies on not
903                      * matching utf8 continuation bytes */
904                     U8 *s = (U8*)t;
905                     U8 *send = s + to_copy;
906                     while (s < send) {
907                         const int ch = *s;
908                         if (trans == '~' ? (ch == '~') :
909 #ifdef EBCDIC
910                                iscntrl(ch)
911 #else
912                                (!(ch & ~31))
913 #endif
914                         )
915                             *s = ' ';
916                         s++;
917                     }
918                 }
919
920                 t += to_copy;
921                 SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) + to_copy);
922                 if (tmp)
923                     Safefree(tmp);
924                 break;
925             }
926
927         case FF_0DECIMAL:
928             arg = *fpc++;
929 #if defined(USE_LONG_DOUBLE)
930             fmt = (const char *)
931                 ((arg & FORM_NUM_POINT) ?
932                  "%#0*.*" PERL_PRIfldbl : "%0*.*" PERL_PRIfldbl);
933 #else
934             fmt = (const char *)
935                 ((arg & FORM_NUM_POINT) ?
936                  "%#0*.*f"              : "%0*.*f");
937 #endif
938             goto ff_dec;
939         case FF_DECIMAL:
940             arg = *fpc++;
941 #if defined(USE_LONG_DOUBLE)
942             fmt = (const char *)
943                 ((arg & FORM_NUM_POINT) ? "%#*.*" PERL_PRIfldbl : "%*.*" PERL_PRIfldbl);
944 #else
945             fmt = (const char *)
946                 ((arg & FORM_NUM_POINT) ? "%#*.*f"              : "%*.*f");
947 #endif
948         ff_dec:
949             /* If the field is marked with ^ and the value is undefined,
950                blank it out. */
951             if ((arg & FORM_NUM_BLANK) && !SvOK(sv)) {
952                 arg = fieldsize;
953                 while (arg--)
954                     *t++ = ' ';
955                 break;
956             }
957             gotsome = TRUE;
958             value = SvNV(sv);
959             /* overflow evidence */
960             if (num_overflow(value, fieldsize, arg)) {
961                 arg = fieldsize;
962                 while (arg--)
963                     *t++ = '#';
964                 break;
965             }
966             /* Formats aren't yet marked for locales, so assume "yes". */
967             {
968                 STORE_NUMERIC_STANDARD_SET_LOCAL();
969                 arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
970                 my_snprintf(t, SvLEN(PL_formtarget) - (t - SvPVX(PL_formtarget)), fmt, (int) fieldsize, (int) arg, value);
971                 RESTORE_NUMERIC_STANDARD();
972             }
973             t += fieldsize;
974             break;
975
976         case FF_NEWLINE:
977             f++;
978             while (t-- > (SvPVX(PL_formtarget) + linemark) && *t == ' ') ;
979             t++;
980             *t++ = '\n';
981             break;
982
983         case FF_BLANK:
984             arg = *fpc++;
985             if (gotsome) {
986                 if (arg) {              /* repeat until fields exhausted? */
987                     fpc--;
988                     goto end;
989                 }
990             }
991             else {
992                 t = SvPVX(PL_formtarget) + linemark;
993                 lines--;
994             }
995             break;
996
997         case FF_MORE:
998             {
999                 const char *s = chophere;
1000                 const char *send = item + len;
1001                 if (chopspace) {
1002                     while (isSPACE(*s) && (s < send))
1003                         s++;
1004                 }
1005                 if (s < send) {
1006                     char *s1;
1007                     arg = fieldsize - itemsize;
1008                     if (arg) {
1009                         fieldsize -= arg;
1010                         while (arg-- > 0)
1011                             *t++ = ' ';
1012                     }
1013                     s1 = t - 3;
1014                     if (strnEQ(s1,"   ",3)) {
1015                         while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
1016                             s1--;
1017                     }
1018                     *s1++ = '.';
1019                     *s1++ = '.';
1020                     *s1++ = '.';
1021                 }
1022                 break;
1023             }
1024         case FF_END:
1025         end:
1026             assert(t < SvPVX_const(PL_formtarget) + SvLEN(PL_formtarget));
1027             *t = '\0';
1028             SvCUR_set(PL_formtarget, t - SvPVX_const(PL_formtarget));
1029             if (targ_is_utf8)
1030                 SvUTF8_on(PL_formtarget);
1031             FmLINES(PL_formtarget) += lines;
1032             SP = ORIGMARK;
1033             if (fpc[-1] == FF_BLANK)
1034                 RETURNOP(cLISTOP->op_first);
1035             else
1036                 RETPUSHYES;
1037         }
1038     }
1039 }
1040
1041 PP(pp_grepstart)
1042 {
1043     dVAR; dSP;
1044     SV *src;
1045
1046     if (PL_stack_base + *PL_markstack_ptr == SP) {
1047         (void)POPMARK;
1048         if (GIMME_V == G_SCALAR)
1049             mXPUSHi(0);
1050         RETURNOP(PL_op->op_next->op_next);
1051     }
1052     PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
1053     Perl_pp_pushmark(aTHX);                             /* push dst */
1054     Perl_pp_pushmark(aTHX);                             /* push src */
1055     ENTER_with_name("grep");                                    /* enter outer scope */
1056
1057     SAVETMPS;
1058     if (PL_op->op_private & OPpGREP_LEX)
1059         SAVESPTR(PAD_SVl(PL_op->op_targ));
1060     else
1061         SAVE_DEFSV;
1062     ENTER_with_name("grep_item");                                       /* enter inner scope */
1063     SAVEVPTR(PL_curpm);
1064
1065     src = PL_stack_base[*PL_markstack_ptr];
1066     SvTEMP_off(src);
1067     if (PL_op->op_private & OPpGREP_LEX)
1068         PAD_SVl(PL_op->op_targ) = src;
1069     else
1070         DEFSV_set(src);
1071
1072     PUTBACK;
1073     if (PL_op->op_type == OP_MAPSTART)
1074         Perl_pp_pushmark(aTHX);                 /* push top */
1075     return ((LOGOP*)PL_op->op_next)->op_other;
1076 }
1077
1078 PP(pp_mapwhile)
1079 {
1080     dVAR; dSP;
1081     const I32 gimme = GIMME_V;
1082     I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
1083     I32 count;
1084     I32 shift;
1085     SV** src;
1086     SV** dst;
1087
1088     /* first, move source pointer to the next item in the source list */
1089     ++PL_markstack_ptr[-1];
1090
1091     /* if there are new items, push them into the destination list */
1092     if (items && gimme != G_VOID) {
1093         /* might need to make room back there first */
1094         if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
1095             /* XXX this implementation is very pessimal because the stack
1096              * is repeatedly extended for every set of items.  Is possible
1097              * to do this without any stack extension or copying at all
1098              * by maintaining a separate list over which the map iterates
1099              * (like foreach does). --gsar */
1100
1101             /* everything in the stack after the destination list moves
1102              * towards the end the stack by the amount of room needed */
1103             shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
1104
1105             /* items to shift up (accounting for the moved source pointer) */
1106             count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
1107
1108             /* This optimization is by Ben Tilly and it does
1109              * things differently from what Sarathy (gsar)
1110              * is describing.  The downside of this optimization is
1111              * that leaves "holes" (uninitialized and hopefully unused areas)
1112              * to the Perl stack, but on the other hand this
1113              * shouldn't be a problem.  If Sarathy's idea gets
1114              * implemented, this optimization should become
1115              * irrelevant.  --jhi */
1116             if (shift < count)
1117                 shift = count; /* Avoid shifting too often --Ben Tilly */
1118
1119             EXTEND(SP,shift);
1120             src = SP;
1121             dst = (SP += shift);
1122             PL_markstack_ptr[-1] += shift;
1123             *PL_markstack_ptr += shift;
1124             while (count--)
1125                 *dst-- = *src--;
1126         }
1127         /* copy the new items down to the destination list */
1128         dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
1129         if (gimme == G_ARRAY) {
1130             /* add returned items to the collection (making mortal copies
1131              * if necessary), then clear the current temps stack frame
1132              * *except* for those items. We do this splicing the items
1133              * into the start of the tmps frame (so some items may be on
1134              * the tmps stack twice), then moving PL_tmps_floor above
1135              * them, then freeing the frame. That way, the only tmps that
1136              * accumulate over iterations are the return values for map.
1137              * We have to do to this way so that everything gets correctly
1138              * freed if we die during the map.
1139              */
1140             I32 tmpsbase;
1141             I32 i = items;
1142             /* make space for the slice */
1143             EXTEND_MORTAL(items);
1144             tmpsbase = PL_tmps_floor + 1;
1145             Move(PL_tmps_stack + tmpsbase,
1146                  PL_tmps_stack + tmpsbase + items,
1147                  PL_tmps_ix - PL_tmps_floor,
1148                  SV*);
1149             PL_tmps_ix += items;
1150
1151             while (i-- > 0) {
1152                 SV *sv = POPs;
1153                 if (!SvTEMP(sv))
1154                     sv = sv_mortalcopy(sv);
1155                 *dst-- = sv;
1156                 PL_tmps_stack[tmpsbase++] = SvREFCNT_inc_simple(sv);
1157             }
1158             /* clear the stack frame except for the items */
1159             PL_tmps_floor += items;
1160             FREETMPS;
1161             /* FREETMPS may have cleared the TEMP flag on some of the items */
1162             i = items;
1163             while (i-- > 0)
1164                 SvTEMP_on(PL_tmps_stack[--tmpsbase]);
1165         }
1166         else {
1167             /* scalar context: we don't care about which values map returns
1168              * (we use undef here). And so we certainly don't want to do mortal
1169              * copies of meaningless values. */
1170             while (items-- > 0) {
1171                 (void)POPs;
1172                 *dst-- = &PL_sv_undef;
1173             }
1174             FREETMPS;
1175         }
1176     }
1177     else {
1178         FREETMPS;
1179     }
1180     LEAVE_with_name("grep_item");                                       /* exit inner scope */
1181
1182     /* All done yet? */
1183     if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
1184
1185         (void)POPMARK;                          /* pop top */
1186         LEAVE_with_name("grep");                                        /* exit outer scope */
1187         (void)POPMARK;                          /* pop src */
1188         items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
1189         (void)POPMARK;                          /* pop dst */
1190         SP = PL_stack_base + POPMARK;           /* pop original mark */
1191         if (gimme == G_SCALAR) {
1192             if (PL_op->op_private & OPpGREP_LEX) {
1193                 SV* sv = sv_newmortal();
1194                 sv_setiv(sv, items);
1195                 PUSHs(sv);
1196             }
1197             else {
1198                 dTARGET;
1199                 XPUSHi(items);
1200             }
1201         }
1202         else if (gimme == G_ARRAY)
1203             SP += items;
1204         RETURN;
1205     }
1206     else {
1207         SV *src;
1208
1209         ENTER_with_name("grep_item");                                   /* enter inner scope */
1210         SAVEVPTR(PL_curpm);
1211
1212         /* set $_ to the new source item */
1213         src = PL_stack_base[PL_markstack_ptr[-1]];
1214         SvTEMP_off(src);
1215         if (PL_op->op_private & OPpGREP_LEX)
1216             PAD_SVl(PL_op->op_targ) = src;
1217         else
1218             DEFSV_set(src);
1219
1220         RETURNOP(cLOGOP->op_other);
1221     }
1222 }
1223
1224 /* Range stuff. */
1225
1226 PP(pp_range)
1227 {
1228     dVAR;
1229     if (GIMME == G_ARRAY)
1230         return NORMAL;
1231     if (SvTRUEx(PAD_SV(PL_op->op_targ)))
1232         return cLOGOP->op_other;
1233     else
1234         return NORMAL;
1235 }
1236
1237 PP(pp_flip)
1238 {
1239     dVAR;
1240     dSP;
1241
1242     if (GIMME == G_ARRAY) {
1243         RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1244     }
1245     else {
1246         dTOPss;
1247         SV * const targ = PAD_SV(PL_op->op_targ);
1248         int flip = 0;
1249
1250         if (PL_op->op_private & OPpFLIP_LINENUM) {
1251             if (GvIO(PL_last_in_gv)) {
1252                 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1253             }
1254             else {
1255                 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1256                 if (gv && GvSV(gv))
1257                     flip = SvIV(sv) == SvIV(GvSV(gv));
1258             }
1259         } else {
1260             flip = SvTRUE(sv);
1261         }
1262         if (flip) {
1263             sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1264             if (PL_op->op_flags & OPf_SPECIAL) {
1265                 sv_setiv(targ, 1);
1266                 SETs(targ);
1267                 RETURN;
1268             }
1269             else {
1270                 sv_setiv(targ, 0);
1271                 SP--;
1272                 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1273             }
1274         }
1275         sv_setpvs(TARG, "");
1276         SETs(targ);
1277         RETURN;
1278     }
1279 }
1280
1281 /* This code tries to decide if "$left .. $right" should use the
1282    magical string increment, or if the range is numeric (we make
1283    an exception for .."0" [#18165]). AMS 20021031. */
1284
1285 #define RANGE_IS_NUMERIC(left,right) ( \
1286         SvNIOKp(left)  || (SvOK(left)  && !SvPOKp(left))  || \
1287         SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
1288         (((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
1289           looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
1290          && (!SvOK(right) || looks_like_number(right))))
1291
1292 PP(pp_flop)
1293 {
1294     dVAR; dSP;
1295
1296     if (GIMME == G_ARRAY) {
1297         dPOPPOPssrl;
1298
1299         SvGETMAGIC(left);
1300         SvGETMAGIC(right);
1301
1302         if (RANGE_IS_NUMERIC(left,right)) {
1303             register IV i, j;
1304             IV max;
1305             if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) ||
1306                 (SvOK(right) && SvNV_nomg(right) > IV_MAX))
1307                 DIE(aTHX_ "Range iterator outside integer range");
1308             i = SvIV_nomg(left);
1309             max = SvIV_nomg(right);
1310             if (max >= i) {
1311                 j = max - i + 1;
1312                 EXTEND_MORTAL(j);
1313                 EXTEND(SP, j);
1314             }
1315             else
1316                 j = 0;
1317             while (j--) {
1318                 SV * const sv = sv_2mortal(newSViv(i++));
1319                 PUSHs(sv);
1320             }
1321         }
1322         else {
1323             STRLEN len, llen;
1324             const char * const lpv = SvPV_nomg_const(left, llen);
1325             const char * const tmps = SvPV_nomg_const(right, len);
1326
1327             SV *sv = newSVpvn_flags(lpv, llen, SvUTF8(left)|SVs_TEMP);
1328             while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1329                 XPUSHs(sv);
1330                 if (strEQ(SvPVX_const(sv),tmps))
1331                     break;
1332                 sv = sv_2mortal(newSVsv(sv));
1333                 sv_inc(sv);
1334             }
1335         }
1336     }
1337     else {
1338         dTOPss;
1339         SV * const targ = PAD_SV(cUNOP->op_first->op_targ);
1340         int flop = 0;
1341         sv_inc(targ);
1342
1343         if (PL_op->op_private & OPpFLIP_LINENUM) {
1344             if (GvIO(PL_last_in_gv)) {
1345                 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1346             }
1347             else {
1348                 GV * const gv = gv_fetchpvs(".", GV_ADD|GV_NOTQUAL, SVt_PV);
1349                 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1350             }
1351         }
1352         else {
1353             flop = SvTRUE(sv);
1354         }
1355
1356         if (flop) {
1357             sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1358             sv_catpvs(targ, "E0");
1359         }
1360         SETs(targ);
1361     }
1362
1363     RETURN;
1364 }
1365
1366 /* Control. */
1367
1368 static const char * const context_name[] = {
1369     "pseudo-block",
1370     NULL, /* CXt_WHEN never actually needs "block" */
1371     NULL, /* CXt_BLOCK never actually needs "block" */
1372     NULL, /* CXt_GIVEN never actually needs "block" */
1373     NULL, /* CXt_LOOP_FOR never actually needs "loop" */
1374     NULL, /* CXt_LOOP_PLAIN never actually needs "loop" */
1375     NULL, /* CXt_LOOP_LAZYSV never actually needs "loop" */
1376     NULL, /* CXt_LOOP_LAZYIV never actually needs "loop" */
1377     "subroutine",
1378     "format",
1379     "eval",
1380     "substitution",
1381 };
1382
1383 STATIC I32
1384 S_dopoptolabel(pTHX_ const char *label)
1385 {
1386     dVAR;
1387     register I32 i;
1388
1389     PERL_ARGS_ASSERT_DOPOPTOLABEL;
1390
1391     for (i = cxstack_ix; i >= 0; i--) {
1392         register const PERL_CONTEXT * const cx = &cxstack[i];
1393         switch (CxTYPE(cx)) {
1394         case CXt_SUBST:
1395         case CXt_SUB:
1396         case CXt_FORMAT:
1397         case CXt_EVAL:
1398         case CXt_NULL:
1399             Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1400                            context_name[CxTYPE(cx)], OP_NAME(PL_op));
1401             if (CxTYPE(cx) == CXt_NULL)
1402                 return -1;
1403             break;
1404         case CXt_LOOP_LAZYIV:
1405         case CXt_LOOP_LAZYSV:
1406         case CXt_LOOP_FOR:
1407         case CXt_LOOP_PLAIN:
1408           {
1409             const char *cx_label = CxLABEL(cx);
1410             if (!cx_label || strNE(label, cx_label) ) {
1411                 DEBUG_l(Perl_deb(aTHX_ "(poptolabel(): skipping label at cx=%ld %s)\n",
1412                         (long)i, cx_label));
1413                 continue;
1414             }
1415             DEBUG_l( Perl_deb(aTHX_ "(poptolabel(): found label at cx=%ld %s)\n", (long)i, label));
1416             return i;
1417           }
1418         }
1419     }
1420     return i;
1421 }
1422
1423
1424
1425 I32
1426 Perl_dowantarray(pTHX)
1427 {
1428     dVAR;
1429     const I32 gimme = block_gimme();
1430     return (gimme == G_VOID) ? G_SCALAR : gimme;
1431 }
1432
1433 I32
1434 Perl_block_gimme(pTHX)
1435 {
1436     dVAR;
1437     const I32 cxix = dopoptosub(cxstack_ix);
1438     if (cxix < 0)
1439         return G_VOID;
1440
1441     switch (cxstack[cxix].blk_gimme) {
1442     case G_VOID:
1443         return G_VOID;
1444     case G_SCALAR:
1445         return G_SCALAR;
1446     case G_ARRAY:
1447         return G_ARRAY;
1448     default:
1449         Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1450         /* NOTREACHED */
1451         return 0;
1452     }
1453 }
1454
1455 I32
1456 Perl_is_lvalue_sub(pTHX)
1457 {
1458     dVAR;
1459     const I32 cxix = dopoptosub(cxstack_ix);
1460     assert(cxix >= 0);  /* We should only be called from inside subs */
1461
1462     if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1463         return CxLVAL(cxstack + cxix);
1464     else
1465         return 0;
1466 }
1467
1468 /* only used by PUSHSUB */
1469 I32
1470 Perl_was_lvalue_sub(pTHX)
1471 {
1472     dVAR;
1473     const I32 cxix = dopoptosub(cxstack_ix-1);
1474     assert(cxix >= 0);  /* We should only be called from inside subs */
1475
1476     if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
1477         return CxLVAL(cxstack + cxix);
1478     else
1479         return 0;
1480 }
1481
1482 STATIC I32
1483 S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock)
1484 {
1485     dVAR;
1486     I32 i;
1487
1488     PERL_ARGS_ASSERT_DOPOPTOSUB_AT;
1489
1490     for (i = startingblock; i >= 0; i--) {
1491         register const PERL_CONTEXT * const cx = &cxstk[i];
1492         switch (CxTYPE(cx)) {
1493         default:
1494             continue;
1495         case CXt_EVAL:
1496         case CXt_SUB:
1497         case CXt_FORMAT:
1498             DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i));
1499             return i;
1500         }
1501     }
1502     return i;
1503 }
1504
1505 STATIC I32
1506 S_dopoptoeval(pTHX_ I32 startingblock)
1507 {
1508     dVAR;
1509     I32 i;
1510     for (i = startingblock; i >= 0; i--) {
1511         register const PERL_CONTEXT *cx = &cxstack[i];
1512         switch (CxTYPE(cx)) {
1513         default:
1514             continue;
1515         case CXt_EVAL:
1516             DEBUG_l( Perl_deb(aTHX_ "(dopoptoeval(): found eval at cx=%ld)\n", (long)i));
1517             return i;
1518         }
1519     }
1520     return i;
1521 }
1522
1523 STATIC I32
1524 S_dopoptoloop(pTHX_ I32 startingblock)
1525 {
1526     dVAR;
1527     I32 i;
1528     for (i = startingblock; i >= 0; i--) {
1529         register const PERL_CONTEXT * const cx = &cxstack[i];
1530         switch (CxTYPE(cx)) {
1531         case CXt_SUBST:
1532         case CXt_SUB:
1533         case CXt_FORMAT:
1534         case CXt_EVAL:
1535         case CXt_NULL:
1536             Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1537                            context_name[CxTYPE(cx)], OP_NAME(PL_op));
1538             if ((CxTYPE(cx)) == CXt_NULL)
1539                 return -1;
1540             break;
1541         case CXt_LOOP_LAZYIV:
1542         case CXt_LOOP_LAZYSV:
1543         case CXt_LOOP_FOR:
1544         case CXt_LOOP_PLAIN:
1545             DEBUG_l( Perl_deb(aTHX_ "(dopoptoloop(): found loop at cx=%ld)\n", (long)i));
1546             return i;
1547         }
1548     }
1549     return i;
1550 }
1551
1552 STATIC I32
1553 S_dopoptogiven(pTHX_ I32 startingblock)
1554 {
1555     dVAR;
1556     I32 i;
1557     for (i = startingblock; i >= 0; i--) {
1558         register const PERL_CONTEXT *cx = &cxstack[i];
1559         switch (CxTYPE(cx)) {
1560         default:
1561             continue;
1562         case CXt_GIVEN:
1563             DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found given at cx=%ld)\n", (long)i));
1564             return i;
1565         case CXt_LOOP_PLAIN:
1566             assert(!CxFOREACHDEF(cx));
1567             break;
1568         case CXt_LOOP_LAZYIV:
1569         case CXt_LOOP_LAZYSV:
1570         case CXt_LOOP_FOR:
1571             if (CxFOREACHDEF(cx)) {
1572                 DEBUG_l( Perl_deb(aTHX_ "(dopoptogiven(): found foreach at cx=%ld)\n", (long)i));
1573                 return i;
1574             }
1575         }
1576     }
1577     return i;
1578 }
1579
1580 STATIC I32
1581 S_dopoptowhen(pTHX_ I32 startingblock)
1582 {
1583     dVAR;
1584     I32 i;
1585     for (i = startingblock; i >= 0; i--) {
1586         register const PERL_CONTEXT *cx = &cxstack[i];
1587         switch (CxTYPE(cx)) {
1588         default:
1589             continue;
1590         case CXt_WHEN:
1591             DEBUG_l( Perl_deb(aTHX_ "(dopoptowhen(): found when at cx=%ld)\n", (long)i));
1592             return i;
1593         }
1594     }
1595     return i;
1596 }
1597
1598 void
1599 Perl_dounwind(pTHX_ I32 cxix)
1600 {
1601     dVAR;
1602     I32 optype;
1603
1604     if (!PL_curstackinfo) /* can happen if die during thread cloning */
1605         return;
1606
1607     while (cxstack_ix > cxix) {
1608         SV *sv;
1609         register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
1610         DEBUG_CX("UNWIND");                                             \
1611         /* Note: we don't need to restore the base context info till the end. */
1612         switch (CxTYPE(cx)) {
1613         case CXt_SUBST:
1614             POPSUBST(cx);
1615             continue;  /* not break */
1616         case CXt_SUB:
1617             POPSUB(cx,sv);
1618             LEAVESUB(sv);
1619             break;
1620         case CXt_EVAL:
1621             POPEVAL(cx);
1622             break;
1623         case CXt_LOOP_LAZYIV:
1624         case CXt_LOOP_LAZYSV:
1625         case CXt_LOOP_FOR:
1626         case CXt_LOOP_PLAIN:
1627             POPLOOP(cx);
1628             break;
1629         case CXt_NULL:
1630             break;
1631         case CXt_FORMAT:
1632             POPFORMAT(cx);
1633             break;
1634         }
1635         cxstack_ix--;
1636     }
1637     PERL_UNUSED_VAR(optype);
1638 }
1639
1640 void
1641 Perl_qerror(pTHX_ SV *err)
1642 {
1643     dVAR;
1644
1645     PERL_ARGS_ASSERT_QERROR;
1646
1647     if (PL_in_eval) {
1648         if (PL_in_eval & EVAL_KEEPERR) {
1649                 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1650                                                     SVfARG(err));
1651         }
1652         else
1653             sv_catsv(ERRSV, err);
1654     }
1655     else if (PL_errors)
1656         sv_catsv(PL_errors, err);
1657     else
1658         Perl_warn(aTHX_ "%"SVf, SVfARG(err));
1659     if (PL_parser)
1660         ++PL_parser->error_count;
1661 }
1662
1663 void
1664 Perl_die_unwind(pTHX_ SV *msv)
1665 {
1666     dVAR;
1667     SV *exceptsv = sv_mortalcopy(msv);
1668     U8 in_eval = PL_in_eval;
1669     PERL_ARGS_ASSERT_DIE_UNWIND;
1670
1671     if (in_eval) {
1672         I32 cxix;
1673         I32 gimme;
1674
1675         /*
1676          * Historically, perl used to set ERRSV ($@) early in the die
1677          * process and rely on it not getting clobbered during unwinding.
1678          * That sucked, because it was liable to get clobbered, so the
1679          * setting of ERRSV used to emit the exception from eval{} has
1680          * been moved to much later, after unwinding (see just before
1681          * JMPENV_JUMP below).  However, some modules were relying on the
1682          * early setting, by examining $@ during unwinding to use it as
1683          * a flag indicating whether the current unwinding was caused by
1684          * an exception.  It was never a reliable flag for that purpose,
1685          * being totally open to false positives even without actual
1686          * clobberage, but was useful enough for production code to
1687          * semantically rely on it.
1688          *
1689          * We'd like to have a proper introspective interface that
1690          * explicitly describes the reason for whatever unwinding
1691          * operations are currently in progress, so that those modules
1692          * work reliably and $@ isn't further overloaded.  But we don't
1693          * have one yet.  In its absence, as a stopgap measure, ERRSV is
1694          * now *additionally* set here, before unwinding, to serve as the
1695          * (unreliable) flag that it used to.
1696          *
1697          * This behaviour is temporary, and should be removed when a
1698          * proper way to detect exceptional unwinding has been developed.
1699          * As of 2010-12, the authors of modules relying on the hack
1700          * are aware of the issue, because the modules failed on
1701          * perls 5.13.{1..7} which had late setting of $@ without this
1702          * early-setting hack.
1703          */
1704         if (!(in_eval & EVAL_KEEPERR)) {
1705             SvTEMP_off(exceptsv);
1706             sv_setsv(ERRSV, exceptsv);
1707         }
1708
1709         while ((cxix = dopoptoeval(cxstack_ix)) < 0
1710                && PL_curstackinfo->si_prev)
1711         {
1712             dounwind(-1);
1713             POPSTACK;
1714         }
1715
1716         if (cxix >= 0) {
1717             I32 optype;
1718             SV *namesv;
1719             register PERL_CONTEXT *cx;
1720             SV **newsp;
1721             COP *oldcop;
1722             JMPENV *restartjmpenv;
1723             OP *restartop;
1724
1725             if (cxix < cxstack_ix)
1726                 dounwind(cxix);
1727
1728             POPBLOCK(cx,PL_curpm);
1729             if (CxTYPE(cx) != CXt_EVAL) {
1730                 STRLEN msglen;
1731                 const char* message = SvPVx_const(exceptsv, msglen);
1732                 PerlIO_write(Perl_error_log, (const char *)"panic: die ", 11);
1733                 PerlIO_write(Perl_error_log, message, msglen);
1734                 my_exit(1);
1735             }
1736             POPEVAL(cx);
1737             namesv = cx->blk_eval.old_namesv;
1738             oldcop = cx->blk_oldcop;
1739             restartjmpenv = cx->blk_eval.cur_top_env;
1740             restartop = cx->blk_eval.retop;
1741
1742             if (gimme == G_SCALAR)
1743                 *++newsp = &PL_sv_undef;
1744             PL_stack_sp = newsp;
1745
1746             LEAVE;
1747
1748             /* LEAVE could clobber PL_curcop (see save_re_context())
1749              * XXX it might be better to find a way to avoid messing with
1750              * PL_curcop in save_re_context() instead, but this is a more
1751              * minimal fix --GSAR */
1752             PL_curcop = oldcop;
1753
1754             if (optype == OP_REQUIRE) {
1755                 (void)hv_store(GvHVn(PL_incgv),
1756                                SvPVX_const(namesv),
1757                                SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
1758                                &PL_sv_undef, 0);
1759                 /* note that unlike pp_entereval, pp_require isn't
1760                  * supposed to trap errors. So now that we've popped the
1761                  * EVAL that pp_require pushed, and processed the error
1762                  * message, rethrow the error */
1763                 Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
1764                            SVfARG(exceptsv ? exceptsv : newSVpvs_flags("Unknown error\n",
1765                                                                     SVs_TEMP)));
1766             }
1767             if (in_eval & EVAL_KEEPERR) {
1768                 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %"SVf,
1769                                SVfARG(exceptsv));
1770             }
1771             else {
1772                 sv_setsv(ERRSV, exceptsv);
1773             }
1774             PL_restartjmpenv = restartjmpenv;
1775             PL_restartop = restartop;
1776             JMPENV_JUMP(3);
1777             /* NOTREACHED */
1778         }
1779     }
1780
1781     write_to_stderr(exceptsv);
1782     my_failure_exit();
1783     /* NOTREACHED */
1784 }
1785
1786 PP(pp_xor)
1787 {
1788     dVAR; dSP; dPOPTOPssrl;
1789     if (SvTRUE(left) != SvTRUE(right))
1790         RETSETYES;
1791     else
1792         RETSETNO;
1793 }
1794
1795 /*
1796 =for apidoc caller_cx
1797
1798 The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
1799 returned C<PERL_CONTEXT> structure can be interrogated to find all the
1800 information returned to Perl by C<caller>. Note that XSUBs don't get a
1801 stack frame, so C<caller_cx(0, NULL)> will return information for the
1802 immediately-surrounding Perl code.
1803
1804 This function skips over the automatic calls to C<&DB::sub> made on the
1805 behalf of the debugger. If the stack frame requested was a sub called by
1806 C<DB::sub>, the return value will be the frame for the call to
1807 C<DB::sub>, since that has the correct line number/etc. for the call
1808 site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
1809 frame for the sub call itself.
1810
1811 =cut
1812 */
1813
1814 const PERL_CONTEXT *
1815 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
1816 {
1817     register I32 cxix = dopoptosub(cxstack_ix);
1818     register const PERL_CONTEXT *cx;
1819     register const PERL_CONTEXT *ccstack = cxstack;
1820     const PERL_SI *top_si = PL_curstackinfo;
1821
1822     for (;;) {
1823         /* we may be in a higher stacklevel, so dig down deeper */
1824         while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1825             top_si = top_si->si_prev;
1826             ccstack = top_si->si_cxstack;
1827             cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1828         }
1829         if (cxix < 0)
1830             return NULL;
1831         /* caller() should not report the automatic calls to &DB::sub */
1832         if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
1833                 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1834             count++;
1835         if (!count--)
1836             break;
1837         cxix = dopoptosub_at(ccstack, cxix - 1);
1838     }
1839
1840     cx = &ccstack[cxix];
1841     if (dbcxp) *dbcxp = cx;
1842
1843     if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1844         const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
1845         /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1846            field below is defined for any cx. */
1847         /* caller() should not report the automatic calls to &DB::sub */
1848         if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1849             cx = &ccstack[dbcxix];
1850     }
1851
1852     return cx;
1853 }
1854
1855 PP(pp_caller)
1856 {
1857     dVAR;
1858     dSP;
1859     register const PERL_CONTEXT *cx;
1860     const PERL_CONTEXT *dbcx;
1861     I32 gimme;
1862     const HEK *stash_hek;
1863     I32 count = 0;
1864     bool has_arg = MAXARG && TOPs;
1865
1866     if (MAXARG) {
1867       if (has_arg)
1868         count = POPi;
1869       else (void)POPs;
1870     }
1871
1872     cx = caller_cx(count + !!(PL_op->op_private & OPpOFFBYONE), &dbcx);
1873     if (!cx) {
1874         if (GIMME != G_ARRAY) {
1875             EXTEND(SP, 1);
1876             RETPUSHUNDEF;
1877         }
1878         RETURN;
1879     }
1880
1881     stash_hek = HvNAME_HEK((HV*)CopSTASH(cx->blk_oldcop));
1882     if (GIMME != G_ARRAY) {
1883         EXTEND(SP, 1);
1884         if (!stash_hek)
1885             PUSHs(&PL_sv_undef);
1886         else {
1887             dTARGET;
1888             sv_sethek(TARG, stash_hek);
1889             PUSHs(TARG);
1890         }
1891         RETURN;
1892     }
1893
1894     EXTEND(SP, 11);
1895
1896     if (!stash_hek)
1897         PUSHs(&PL_sv_undef);
1898     else {
1899         dTARGET;
1900         sv_sethek(TARG, stash_hek);
1901         PUSHTARG;
1902     }
1903     mPUSHs(newSVpv(OutCopFILE(cx->blk_oldcop), 0));
1904     mPUSHi((I32)CopLINE(cx->blk_oldcop));
1905     if (!has_arg)
1906         RETURN;
1907     if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1908         GV * const cvgv = CvGV(dbcx->blk_sub.cv);
1909         /* So is ccstack[dbcxix]. */
1910         if (isGV(cvgv)) {
1911             SV * const sv = newSV(0);
1912             gv_efullname3(sv, cvgv, NULL);
1913             mPUSHs(sv);
1914             PUSHs(boolSV(CxHASARGS(cx)));
1915         }
1916         else {
1917             PUSHs(newSVpvs_flags("(unknown)", SVs_TEMP));
1918             PUSHs(boolSV(CxHASARGS(cx)));
1919         }
1920     }
1921     else {
1922         PUSHs(newSVpvs_flags("(eval)", SVs_TEMP));
1923         mPUSHi(0);
1924     }
1925     gimme = (I32)cx->blk_gimme;
1926     if (gimme == G_VOID)
1927         PUSHs(&PL_sv_undef);
1928     else
1929         PUSHs(boolSV((gimme & G_WANT) == G_ARRAY));
1930     if (CxTYPE(cx) == CXt_EVAL) {
1931         /* eval STRING */
1932         if (CxOLD_OP_TYPE(cx) == OP_ENTEREVAL) {
1933             PUSHs(cx->blk_eval.cur_text);
1934             PUSHs(&PL_sv_no);
1935         }
1936         /* require */
1937         else if (cx->blk_eval.old_namesv) {
1938             mPUSHs(newSVsv(cx->blk_eval.old_namesv));
1939             PUSHs(&PL_sv_yes);
1940         }
1941         /* eval BLOCK (try blocks have old_namesv == 0) */
1942         else {
1943             PUSHs(&PL_sv_undef);
1944             PUSHs(&PL_sv_undef);
1945         }
1946     }
1947     else {
1948         PUSHs(&PL_sv_undef);
1949         PUSHs(&PL_sv_undef);
1950     }
1951     if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)
1952         && CopSTASH_eq(PL_curcop, PL_debstash))
1953     {
1954         AV * const ary = cx->blk_sub.argarray;
1955         const int off = AvARRAY(ary) - AvALLOC(ary);
1956
1957         Perl_init_dbargs(aTHX);
1958
1959         if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1960             av_extend(PL_dbargs, AvFILLp(ary) + off);
1961         Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1962         AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1963     }
1964     /* XXX only hints propagated via op_private are currently
1965      * visible (others are not easily accessible, since they
1966      * use the global PL_hints) */
1967     mPUSHi(CopHINTS_get(cx->blk_oldcop));
1968     {
1969         SV * mask ;
1970         STRLEN * const old_warnings = cx->blk_oldcop->cop_warnings ;
1971
1972         if  (old_warnings == pWARN_NONE ||
1973                 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1974             mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1975         else if (old_warnings == pWARN_ALL ||
1976                   (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1977             /* Get the bit mask for $warnings::Bits{all}, because
1978              * it could have been extended by warnings::register */
1979             SV **bits_all;
1980             HV * const bits = get_hv("warnings::Bits", 0);
1981             if (bits && (bits_all=hv_fetchs(bits, "all", FALSE))) {
1982                 mask = newSVsv(*bits_all);
1983             }
1984             else {
1985                 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1986             }
1987         }
1988         else
1989             mask = newSVpvn((char *) (old_warnings + 1), old_warnings[0]);
1990         mPUSHs(mask);
1991     }
1992
1993     PUSHs(cx->blk_oldcop->cop_hints_hash ?
1994           sv_2mortal(newRV_noinc(MUTABLE_SV(cop_hints_2hv(cx->blk_oldcop, 0))))
1995           : &PL_sv_undef);
1996     RETURN;
1997 }
1998
1999 PP(pp_reset)
2000 {
2001     dVAR;
2002     dSP;
2003     const char * const tmps =
2004         (MAXARG < 1 || (!TOPs && !POPs)) ? (const char *)"" : POPpconstx;
2005     sv_reset(tmps, CopSTASH(PL_curcop));
2006     PUSHs(&PL_sv_yes);
2007     RETURN;
2008 }
2009
2010 /* like pp_nextstate, but used instead when the debugger is active */
2011
2012 PP(pp_dbstate)
2013 {
2014     dVAR;
2015     PL_curcop = (COP*)PL_op;
2016     TAINT_NOT;          /* Each statement is presumed innocent */
2017     PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
2018     FREETMPS;
2019
2020     PERL_ASYNC_CHECK();
2021
2022     if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
2023             || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
2024     {
2025         dSP;
2026         register PERL_CONTEXT *cx;
2027         const I32 gimme = G_ARRAY;
2028         U8 hasargs;
2029         GV * const gv = PL_DBgv;
2030         register CV * const cv = GvCV(gv);
2031
2032         if (!cv)
2033             DIE(aTHX_ "No DB::DB routine defined");
2034
2035         if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
2036             /* don't do recursive DB::DB call */
2037             return NORMAL;
2038
2039         ENTER;
2040         SAVETMPS;
2041
2042         SAVEI32(PL_debug);
2043         SAVESTACK_POS();
2044         PL_debug = 0;
2045         hasargs = 0;
2046         SPAGAIN;
2047
2048         if (CvISXSUB(cv)) {
2049             CvDEPTH(cv)++;
2050             PUSHMARK(SP);
2051             (void)(*CvXSUB(cv))(aTHX_ cv);
2052             CvDEPTH(cv)--;
2053             FREETMPS;
2054             LEAVE;
2055             return NORMAL;
2056         }
2057         else {
2058             PUSHBLOCK(cx, CXt_SUB, SP);
2059             PUSHSUB_DB(cx);
2060             cx->blk_sub.retop = PL_op->op_next;
2061             CvDEPTH(cv)++;
2062             SAVECOMPPAD();
2063             PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1);
2064             RETURNOP(CvSTART(cv));
2065         }
2066     }
2067     else
2068         return NORMAL;
2069 }
2070
2071 STATIC SV **
2072 S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags)
2073 {
2074     bool padtmp = 0;
2075     PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE;
2076
2077     if (flags & SVs_PADTMP) {
2078         flags &= ~SVs_PADTMP;
2079         padtmp = 1;
2080     }
2081     if (gimme == G_SCALAR) {
2082         if (MARK < SP)
2083             *++newsp = ((SvFLAGS(*SP) & flags) || (padtmp && SvPADTMP(*SP)))
2084                             ? *SP : sv_mortalcopy(*SP);
2085         else {
2086             /* MEXTEND() only updates MARK, so reuse it instead of newsp. */
2087             MARK = newsp;
2088             MEXTEND(MARK, 1);
2089             *++MARK = &PL_sv_undef;
2090             return MARK;
2091         }
2092     }
2093     else if (gimme == G_ARRAY) {
2094         /* in case LEAVE wipes old return values */
2095         while (++MARK <= SP) {
2096             if ((SvFLAGS(*MARK) & flags) || (padtmp && SvPADTMP(*MARK)))
2097                 *++newsp = *MARK;
2098             else {
2099                 *++newsp = sv_mortalcopy(*MARK);
2100                 TAINT_NOT;      /* Each item is independent */
2101             }
2102         }
2103         /* When this function was called with MARK == newsp, we reach this
2104          * point with SP == newsp. */
2105     }
2106
2107     return newsp;
2108 }
2109
2110 PP(pp_enter)
2111 {
2112     dVAR; dSP;
2113     register PERL_CONTEXT *cx;
2114     I32 gimme = GIMME_V;
2115
2116     ENTER_with_name("block");
2117
2118     SAVETMPS;
2119     PUSHBLOCK(cx, CXt_BLOCK, SP);
2120
2121     RETURN;
2122 }
2123
2124 PP(pp_leave)
2125 {
2126     dVAR; dSP;
2127     register PERL_CONTEXT *cx;
2128     SV **newsp;
2129     PMOP *newpm;
2130     I32 gimme;
2131
2132     if (PL_op->op_flags & OPf_SPECIAL) {
2133         cx = &cxstack[cxstack_ix];
2134         cx->blk_oldpm = PL_curpm;       /* fake block should preserve $1 et al */
2135     }
2136
2137     POPBLOCK(cx,newpm);
2138
2139     gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
2140
2141     TAINT_NOT;
2142     SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
2143     PL_curpm = newpm;   /* Don't pop $1 et al till now */
2144
2145     LEAVE_with_name("block");
2146
2147     RETURN;
2148 }
2149
2150 PP(pp_enteriter)
2151 {
2152     dVAR; dSP; dMARK;
2153     register PERL_CONTEXT *cx;
2154     const I32 gimme = GIMME_V;
2155     void *itervar; /* location of the iteration variable */
2156     U8 cxtype = CXt_LOOP_FOR;
2157
2158     ENTER_with_name("loop1");
2159     SAVETMPS;
2160
2161     if (PL_op->op_targ) {                        /* "my" variable */
2162         if (PL_op->op_private & OPpLVAL_INTRO) {        /* for my $x (...) */
2163             SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
2164             SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
2165                     SVs_PADSTALE, SVs_PADSTALE);
2166         }
2167         SAVEPADSVANDMORTALIZE(PL_op->op_targ);
2168 #ifdef USE_ITHREADS
2169         itervar = PL_comppad;
2170 #else
2171         itervar = &PAD_SVl(PL_op->op_targ);
2172 #endif
2173     }
2174     else {                                      /* symbol table variable */
2175         GV * const gv = MUTABLE_GV(POPs);
2176         SV** svp = &GvSV(gv);
2177         save_pushptrptr(gv, SvREFCNT_inc(*svp), SAVEt_GVSV);
2178         *svp = newSV(0);
2179         itervar = (void *)gv;
2180     }
2181
2182     if (PL_op->op_private & OPpITER_DEF)
2183         cxtype |= CXp_FOR_DEF;
2184
2185     ENTER_with_name("loop2");
2186
2187     PUSHBLOCK(cx, cxtype, SP);
2188     PUSHLOOP_FOR(cx, itervar, MARK);
2189     if (PL_op->op_flags & OPf_STACKED) {
2190         SV *maybe_ary = POPs;
2191         if (SvTYPE(maybe_ary) != SVt_PVAV) {
2192             dPOPss;
2193             SV * const right = maybe_ary;
2194             SvGETMAGIC(sv);
2195             SvGETMAGIC(right);
2196             if (RANGE_IS_NUMERIC(sv,right)) {
2197                 cx->cx_type &= ~CXTYPEMASK;
2198                 cx->cx_type |= CXt_LOOP_LAZYIV;
2199                 /* Make sure that no-one re-orders cop.h and breaks our
2200                    assumptions */
2201                 assert(CxTYPE(cx) == CXt_LOOP_LAZYIV);
2202 #ifdef NV_PRESERVES_UV
2203                 if ((SvOK(sv) && ((SvNV_nomg(sv) < (NV)IV_MIN) ||
2204                                   (SvNV_nomg(sv) > (NV)IV_MAX)))
2205                         ||
2206                     (SvOK(right) && ((SvNV_nomg(right) > (NV)IV_MAX) ||
2207                                      (SvNV_nomg(right) < (NV)IV_MIN))))
2208 #else
2209                 if ((SvOK(sv) && ((SvNV_nomg(sv) <= (NV)IV_MIN)
2210                                   ||
2211                                   ((SvNV_nomg(sv) > 0) &&
2212                                         ((SvUV_nomg(sv) > (UV)IV_MAX) ||
2213                                          (SvNV_nomg(sv) > (NV)UV_MAX)))))
2214                         ||
2215                     (SvOK(right) && ((SvNV_nomg(right) <= (NV)IV_MIN)
2216                                      ||
2217                                      ((SvNV_nomg(right) > 0) &&
2218                                         ((SvUV_nomg(right) > (UV)IV_MAX) ||
2219                                          (SvNV_nomg(right) > (NV)UV_MAX))
2220                                      ))))
2221 #endif
2222                     DIE(aTHX_ "Range iterator outside integer range");
2223                 cx->blk_loop.state_u.lazyiv.cur = SvIV_nomg(sv);
2224                 cx->blk_loop.state_u.lazyiv.end = SvIV_nomg(right);
2225 #ifdef DEBUGGING
2226                 /* for correct -Dstv display */
2227                 cx->blk_oldsp = sp - PL_stack_base;
2228 #endif
2229             }
2230             else {
2231                 cx->cx_type &= ~CXTYPEMASK;
2232                 cx->cx_type |= CXt_LOOP_LAZYSV;
2233                 /* Make sure that no-one re-orders cop.h and breaks our
2234                    assumptions */
2235                 assert(CxTYPE(cx) == CXt_LOOP_LAZYSV);
2236                 cx->blk_loop.state_u.lazysv.cur = newSVsv(sv);
2237                 cx->blk_loop.state_u.lazysv.end = right;
2238                 SvREFCNT_inc(right);
2239                 (void) SvPV_force_nolen(cx->blk_loop.state_u.lazysv.cur);
2240                 /* This will do the upgrade to SVt_PV, and warn if the value
2241                    is uninitialised.  */
2242                 (void) SvPV_nolen_const(right);
2243                 /* Doing this avoids a check every time in pp_iter in pp_hot.c
2244                    to replace !SvOK() with a pointer to "".  */
2245                 if (!SvOK(right)) {
2246                     SvREFCNT_dec(right);
2247                     cx->blk_loop.state_u.lazysv.end = &PL_sv_no;
2248                 }
2249             }
2250         }
2251         else /* SvTYPE(maybe_ary) == SVt_PVAV */ {
2252             cx->blk_loop.state_u.ary.ary = MUTABLE_AV(maybe_ary);
2253             SvREFCNT_inc(maybe_ary);
2254             cx->blk_loop.state_u.ary.ix =
2255                 (PL_op->op_private & OPpITER_REVERSED) ?
2256                 AvFILL(cx->blk_loop.state_u.ary.ary) + 1 :
2257                 -1;
2258         }
2259     }
2260     else { /* iterating over items on the stack */
2261         cx->blk_loop.state_u.ary.ary = NULL; /* means to use the stack */
2262         if (PL_op->op_private & OPpITER_REVERSED) {
2263             cx->blk_loop.state_u.ary.ix = cx->blk_oldsp + 1;
2264         }
2265         else {
2266             cx->blk_loop.state_u.ary.ix = MARK - PL_stack_base;
2267         }
2268     }
2269
2270     RETURN;
2271 }
2272
2273 PP(pp_enterloop)
2274 {
2275     dVAR; dSP;
2276     register PERL_CONTEXT *cx;
2277     const I32 gimme = GIMME_V;
2278
2279     ENTER_with_name("loop1");
2280     SAVETMPS;
2281     ENTER_with_name("loop2");
2282
2283     PUSHBLOCK(cx, CXt_LOOP_PLAIN, SP);
2284     PUSHLOOP_PLAIN(cx, SP);
2285
2286     RETURN;
2287 }
2288
2289 PP(pp_leaveloop)
2290 {
2291     dVAR; dSP;
2292     register PERL_CONTEXT *cx;
2293     I32 gimme;
2294     SV **newsp;
2295     PMOP *newpm;
2296     SV **mark;
2297
2298     POPBLOCK(cx,newpm);
2299     assert(CxTYPE_is_LOOP(cx));
2300     mark = newsp;
2301     newsp = PL_stack_base + cx->blk_loop.resetsp;
2302
2303     TAINT_NOT;
2304     SP = adjust_stack_on_leave(newsp, SP, MARK, gimme, 0);
2305     PUTBACK;
2306
2307     POPLOOP(cx);        /* Stack values are safe: release loop vars ... */
2308     PL_curpm = newpm;   /* ... and pop $1 et al */
2309
2310     LEAVE_with_name("loop2");
2311     LEAVE_with_name("loop1");
2312
2313     return NORMAL;
2314 }
2315
2316 STATIC void
2317 S_return_lvalues(pTHX_ SV **mark, SV **sp, SV **newsp, I32 gimme,
2318                        PERL_CONTEXT *cx, PMOP *newpm)
2319 {
2320     const bool ref = !!(CxLVAL(cx) & OPpENTERSUB_INARGS);
2321     if (gimme == G_SCALAR) {
2322         if (CxLVAL(cx) && !ref) {     /* Leave it as it is if we can. */
2323             SV *sv;
2324             const char *what = NULL;
2325             if (MARK < SP) {
2326                 assert(MARK+1 == SP);
2327                 if ((SvPADTMP(TOPs) ||
2328                      (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2329                        == SVf_READONLY
2330                     ) &&
2331                     !SvSMAGICAL(TOPs)) {
2332                     what =
2333                         SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2334                         : "a readonly value" : "a temporary";
2335                 }
2336                 else goto copy_sv;
2337             }
2338             else {
2339                 /* sub:lvalue{} will take us here. */
2340                 what = "undef";
2341             }
2342             LEAVE;
2343             cxstack_ix--;
2344             POPSUB(cx,sv);
2345             PL_curpm = newpm;
2346             LEAVESUB(sv);
2347             Perl_croak(aTHX_
2348                       "Can't return %s from lvalue subroutine", what
2349             );
2350         }
2351         if (MARK < SP) {
2352               copy_sv:
2353                 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2354                         *++newsp = SvREFCNT_inc(*SP);
2355                         FREETMPS;
2356                         sv_2mortal(*newsp);
2357                 }
2358                 else
2359                     *++newsp =
2360                         !SvTEMP(*SP)
2361                           ? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
2362                           : *SP;
2363         }
2364         else {
2365             EXTEND(newsp,1);
2366             *++newsp = &PL_sv_undef;
2367         }
2368         if (CxLVAL(cx) & OPpDEREF) {
2369             SvGETMAGIC(TOPs);
2370             if (!SvOK(TOPs)) {
2371                 TOPs = vivify_ref(TOPs, CxLVAL(cx) & OPpDEREF);
2372             }
2373         }
2374     }
2375     else if (gimme == G_ARRAY) {
2376         assert (!(CxLVAL(cx) & OPpDEREF));
2377         if (ref || !CxLVAL(cx))
2378             while (++MARK <= SP)
2379                 *++newsp =
2380                      SvTEMP(*MARK)
2381                        ? *MARK
2382                        : ref && SvFLAGS(*MARK) & SVs_PADTMP
2383                            ? sv_mortalcopy(*MARK)
2384                            : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2385         else while (++MARK <= SP) {
2386             if (*MARK != &PL_sv_undef
2387                     && (SvPADTMP(*MARK)
2388                        || (SvFLAGS(*MARK) & (SVf_READONLY|SVf_FAKE))
2389                              == SVf_READONLY
2390                        )
2391             ) {
2392                     SV *sv;
2393                     /* Might be flattened array after $#array =  */
2394                     PUTBACK;
2395                     LEAVE;
2396                     cxstack_ix--;
2397                     POPSUB(cx,sv);
2398                     PL_curpm = newpm;
2399                     LEAVESUB(sv);
2400                     Perl_croak(aTHX_
2401                         "Can't return a %s from lvalue subroutine",
2402                         SvREADONLY(TOPs) ? "readonly value" : "temporary");
2403             }
2404             else
2405                 *++newsp =
2406                     SvTEMP(*MARK)
2407                        ? *MARK
2408                        : sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
2409         }
2410     }
2411     PL_stack_sp = newsp;
2412 }
2413
2414 PP(pp_return)
2415 {
2416     dVAR; dSP; dMARK;
2417     register PERL_CONTEXT *cx;
2418     bool popsub2 = FALSE;
2419     bool clear_errsv = FALSE;
2420     bool lval = FALSE;
2421     I32 gimme;
2422     SV **newsp;
2423     PMOP *newpm;
2424     I32 optype = 0;
2425     SV *namesv;
2426     SV *sv;
2427     OP *retop = NULL;
2428
2429     const I32 cxix = dopoptosub(cxstack_ix);
2430
2431     if (cxix < 0) {
2432         if (CxMULTICALL(cxstack)) { /* In this case we must be in a
2433                                      * sort block, which is a CXt_NULL
2434                                      * not a CXt_SUB */
2435             dounwind(0);
2436             PL_stack_base[1] = *PL_stack_sp;
2437             PL_stack_sp = PL_stack_base + 1;
2438             return 0;
2439         }
2440         else
2441             DIE(aTHX_ "Can't return outside a subroutine");
2442     }
2443     if (cxix < cxstack_ix)
2444         dounwind(cxix);
2445
2446     if (CxMULTICALL(&cxstack[cxix])) {
2447         gimme = cxstack[cxix].blk_gimme;
2448         if (gimme == G_VOID)
2449             PL_stack_sp = PL_stack_base;
2450         else if (gimme == G_SCALAR) {
2451             PL_stack_base[1] = *PL_stack_sp;
2452             PL_stack_sp = PL_stack_base + 1;
2453         }
2454         return 0;
2455     }
2456
2457     POPBLOCK(cx,newpm);
2458     switch (CxTYPE(cx)) {
2459     case CXt_SUB:
2460         popsub2 = TRUE;
2461         lval = !!CvLVALUE(cx->blk_sub.cv);
2462         retop = cx->blk_sub.retop;
2463         cxstack_ix++; /* preserve cx entry on stack for use by POPSUB */
2464         break;
2465     case CXt_EVAL:
2466         if (!(PL_in_eval & EVAL_KEEPERR))
2467             clear_errsv = TRUE;
2468         POPEVAL(cx);
2469         namesv = cx->blk_eval.old_namesv;
2470         retop = cx->blk_eval.retop;
2471         if (CxTRYBLOCK(cx))
2472             break;
2473         if (optype == OP_REQUIRE &&
2474             (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
2475         {
2476             /* Unassume the success we assumed earlier. */
2477             (void)hv_delete(GvHVn(PL_incgv),
2478                             SvPVX_const(namesv),
2479                             SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
2480                             G_DISCARD);
2481             DIE(aTHX_ "%"SVf" did not return a true value", SVfARG(namesv));
2482         }
2483         break;
2484     case CXt_FORMAT:
2485         POPFORMAT(cx);
2486         retop = cx->blk_sub.retop;
2487         break;
2488     default:
2489         DIE(aTHX_ "panic: return");
2490     }
2491
2492     TAINT_NOT;
2493     if (lval) S_return_lvalues(aTHX_ MARK, SP, newsp, gimme, cx, newpm);
2494     else {
2495       if (gimme == G_SCALAR) {
2496         if (MARK < SP) {
2497             if (popsub2) {
2498                 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2499                     if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2500                         *++newsp = SvREFCNT_inc(*SP);
2501                         FREETMPS;
2502                         sv_2mortal(*newsp);
2503                     }
2504                     else {
2505                         sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
2506                         FREETMPS;
2507                         *++newsp = sv_mortalcopy(sv);
2508                         SvREFCNT_dec(sv);
2509                     }
2510                 }
2511                 else if (SvTEMP(*SP) && SvREFCNT(*SP) == 1) {
2512                     *++newsp = *SP;
2513                 }
2514                 else
2515                     *++newsp = sv_mortalcopy(*SP);
2516             }
2517             else
2518                 *++newsp = sv_mortalcopy(*SP);
2519         }
2520         else
2521             *++newsp = &PL_sv_undef;
2522       }
2523       else if (gimme == G_ARRAY) {
2524         while (++MARK <= SP) {
2525             *++newsp = popsub2 && SvTEMP(*MARK) && SvREFCNT(*MARK) == 1
2526                         ? *MARK : sv_mortalcopy(*MARK);
2527             TAINT_NOT;          /* Each item is independent */
2528         }
2529       }
2530       PL_stack_sp = newsp;
2531     }
2532
2533     LEAVE;
2534     /* Stack values are safe: */
2535     if (popsub2) {
2536         cxstack_ix--;
2537         POPSUB(cx,sv);  /* release CV and @_ ... */
2538     }
2539     else
2540         sv = NULL;
2541     PL_curpm = newpm;   /* ... and pop $1 et al */
2542
2543     LEAVESUB(sv);
2544     if (clear_errsv) {
2545         CLEAR_ERRSV();
2546     }
2547     return retop;
2548 }
2549
2550 /* This duplicates parts of pp_leavesub, so that it can share code with
2551  * pp_return */
2552 PP(pp_leavesublv)
2553 {
2554     dVAR; dSP;
2555     SV **newsp;
2556     PMOP *newpm;
2557     I32 gimme;
2558     register PERL_CONTEXT *cx;
2559     SV *sv;
2560
2561     if (CxMULTICALL(&cxstack[cxstack_ix]))
2562         return 0;
2563
2564     POPBLOCK(cx,newpm);
2565     cxstack_ix++; /* temporarily protect top context */
2566
2567     TAINT_NOT;
2568
2569     S_return_lvalues(aTHX_ newsp, SP, newsp, gimme, cx, newpm);
2570
2571     LEAVE;
2572     cxstack_ix--;
2573     POPSUB(cx,sv);      /* Stack values are safe: release CV and @_ ... */
2574     PL_curpm = newpm;   /* ... and pop $1 et al */
2575
2576     LEAVESUB(sv);
2577     return cx->blk_sub.retop;
2578 }
2579
2580 PP(pp_last)
2581 {
2582     dVAR; dSP;
2583     I32 cxix;
2584     register PERL_CONTEXT *cx;
2585     I32 pop2 = 0;
2586     I32 gimme;
2587     I32 optype;
2588     OP *nextop = NULL;
2589     SV **newsp;
2590     PMOP *newpm;
2591     SV **mark;
2592     SV *sv = NULL;
2593
2594
2595     if (PL_op->op_flags & OPf_SPECIAL) {
2596         cxix = dopoptoloop(cxstack_ix);
2597         if (cxix < 0)
2598             DIE(aTHX_ "Can't \"last\" outside a loop block");
2599     }
2600     else {
2601         cxix = dopoptolabel(cPVOP->op_pv);
2602         if (cxix < 0)
2603             DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
2604     }
2605     if (cxix < cxstack_ix)
2606         dounwind(cxix);
2607
2608     POPBLOCK(cx,newpm);
2609     cxstack_ix++; /* temporarily protect top context */
2610     mark = newsp;
2611     switch (CxTYPE(cx)) {
2612     case CXt_LOOP_LAZYIV:
2613     case CXt_LOOP_LAZYSV:
2614     case CXt_LOOP_FOR:
2615     case CXt_LOOP_PLAIN:
2616         pop2 = CxTYPE(cx);
2617         newsp = PL_stack_base + cx->blk_loop.resetsp;
2618         nextop = cx->blk_loop.my_op->op_lastop->op_next;
2619         break;
2620     case CXt_SUB:
2621         pop2 = CXt_SUB;
2622         nextop = cx->blk_sub.retop;
2623         break;
2624     case CXt_EVAL:
2625         POPEVAL(cx);
2626         nextop = cx->blk_eval.retop;
2627         break;
2628     case CXt_FORMAT:
2629         POPFORMAT(cx);
2630         nextop = cx->blk_sub.retop;
2631         break;
2632     default:
2633         DIE(aTHX_ "panic: last");
2634     }
2635
2636     TAINT_NOT;
2637     SP = adjust_stack_on_leave(newsp, SP, MARK, gimme,
2638                                 pop2 == CXt_SUB ? SVs_TEMP : 0);
2639     PUTBACK;
2640
2641     LEAVE;
2642     cxstack_ix--;
2643     /* Stack values are safe: */
2644     switch (pop2) {
2645     case CXt_LOOP_LAZYIV:
2646     case CXt_LOOP_PLAIN:
2647     case CXt_LOOP_LAZYSV:
2648     case CXt_LOOP_FOR:
2649         POPLOOP(cx);    /* release loop vars ... */
2650         LEAVE;
2651         break;
2652     case CXt_SUB:
2653         POPSUB(cx,sv);  /* release CV and @_ ... */
2654         break;
2655     }
2656     PL_curpm = newpm;   /* ... and pop $1 et al */
2657
2658     LEAVESUB(sv);
2659     PERL_UNUSED_VAR(optype);
2660     PERL_UNUSED_VAR(gimme);
2661     return nextop;
2662 }
2663
2664 PP(pp_next)
2665 {
2666     dVAR;
2667     I32 cxix;
2668     register PERL_CONTEXT *cx;
2669     I32 inner;
2670
2671     if (PL_op->op_flags & OPf_SPECIAL) {
2672         cxix = dopoptoloop(cxstack_ix);
2673         if (cxix < 0)
2674             DIE(aTHX_ "Can't \"next\" outside a loop block");
2675     }
2676     else {
2677         cxix = dopoptolabel(cPVOP->op_pv);
2678         if (cxix < 0)
2679             DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2680     }
2681     if (cxix < cxstack_ix)
2682         dounwind(cxix);
2683
2684     /* clear off anything above the scope we're re-entering, but
2685      * save the rest until after a possible continue block */
2686     inner = PL_scopestack_ix;
2687     TOPBLOCK(cx);
2688     if (PL_scopestack_ix < inner)
2689         leave_scope(PL_scopestack[PL_scopestack_ix]);
2690     PL_curcop = cx->blk_oldcop;
2691     return (cx)->blk_loop.my_op->op_nextop;
2692 }
2693
2694 PP(pp_redo)
2695 {
2696     dVAR;
2697     I32 cxix;
2698     register PERL_CONTEXT *cx;
2699     I32 oldsave;
2700     OP* redo_op;
2701
2702     if (PL_op->op_flags & OPf_SPECIAL) {
2703         cxix = dopoptoloop(cxstack_ix);
2704         if (cxix < 0)
2705             DIE(aTHX_ "Can't \"redo\" outside a loop block");
2706     }
2707     else {
2708         cxix = dopoptolabel(cPVOP->op_pv);
2709         if (cxix < 0)
2710             DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2711     }
2712     if (cxix < cxstack_ix)
2713         dounwind(cxix);
2714
2715     redo_op = cxstack[cxix].blk_loop.my_op->op_redoop;
2716     if (redo_op->op_type == OP_ENTER) {
2717         /* pop one less context to avoid $x being freed in while (my $x..) */
2718         cxstack_ix++;
2719         assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_BLOCK);
2720         redo_op = redo_op->op_next;
2721     }
2722
2723     TOPBLOCK(cx);
2724     oldsave = PL_scopestack[PL_scopestack_ix - 1];
2725     LEAVE_SCOPE(oldsave);
2726     FREETMPS;
2727     PL_curcop = cx->blk_oldcop;
2728     return redo_op;
2729 }
2730
2731 STATIC OP *
2732 S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit)
2733 {
2734     dVAR;
2735     OP **ops = opstack;
2736     static const char too_deep[] = "Target of goto is too deeply nested";
2737
2738     PERL_ARGS_ASSERT_DOFINDLABEL;
2739
2740     if (ops >= oplimit)
2741         Perl_croak(aTHX_ too_deep);
2742     if (o->op_type == OP_LEAVE ||
2743         o->op_type == OP_SCOPE ||
2744         o->op_type == OP_LEAVELOOP ||
2745         o->op_type == OP_LEAVESUB ||
2746         o->op_type == OP_LEAVETRY)
2747     {
2748         *ops++ = cUNOPo->op_first;
2749         if (ops >= oplimit)
2750             Perl_croak(aTHX_ too_deep);
2751     }
2752     *ops = 0;
2753     if (o->op_flags & OPf_KIDS) {
2754         OP *kid;
2755         /* First try all the kids at this level, since that's likeliest. */
2756         for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2757             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2758                 const char *kid_label = CopLABEL(kCOP);
2759                 if (kid_label && strEQ(kid_label, label))
2760                     return kid;
2761             }
2762         }
2763         for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2764             if (kid == PL_lastgotoprobe)
2765                 continue;
2766             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2767                 if (ops == opstack)
2768                     *ops++ = kid;
2769                 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2770                          ops[-1]->op_type == OP_DBSTATE)
2771                     ops[-1] = kid;
2772                 else
2773                     *ops++ = kid;
2774             }
2775             if ((o = dofindlabel(kid, label, ops, oplimit)))
2776                 return o;
2777         }
2778     }
2779     *ops = 0;
2780     return 0;
2781 }
2782
2783 PP(pp_goto)
2784 {
2785     dVAR; dSP;
2786     OP *retop = NULL;
2787     I32 ix;
2788     register PERL_CONTEXT *cx;
2789 #define GOTO_DEPTH 64
2790     OP *enterops[GOTO_DEPTH];
2791     const char *label = NULL;
2792     const bool do_dump = (PL_op->op_type == OP_DUMP);
2793     static const char must_have_label[] = "goto must have label";
2794
2795     if (PL_op->op_flags & OPf_STACKED) {
2796         SV * const sv = POPs;
2797
2798         /* This egregious kludge implements goto &subroutine */
2799         if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2800             I32 cxix;
2801             register PERL_CONTEXT *cx;
2802             CV *cv = MUTABLE_CV(SvRV(sv));
2803             SV** mark;
2804             I32 items = 0;
2805             I32 oldsave;
2806             bool reified = 0;
2807
2808         retry:
2809             if (!CvROOT(cv) && !CvXSUB(cv)) {
2810                 const GV * const gv = CvGV(cv);
2811                 if (gv) {
2812                     GV *autogv;
2813                     SV *tmpstr;
2814                     /* autoloaded stub? */
2815                     if (cv != GvCV(gv) && (cv = GvCV(gv)))
2816                         goto retry;
2817                     autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv),
2818                                           GvNAMELEN(gv),
2819                                           GvNAMEUTF8(gv) ? SVf_UTF8 : 0);
2820                     if (autogv && (cv = GvCV(autogv)))
2821                         goto retry;
2822                     tmpstr = sv_newmortal();
2823                     gv_efullname3(tmpstr, gv, NULL);
2824                     DIE(aTHX_ "Goto undefined subroutine &%"SVf"", SVfARG(tmpstr));
2825                 }
2826                 DIE(aTHX_ "Goto undefined subroutine");
2827             }
2828
2829             /* First do some returnish stuff. */
2830             SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */
2831             FREETMPS;
2832             cxix = dopoptosub(cxstack_ix);
2833             if (cxix < 0)
2834                 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2835             if (cxix < cxstack_ix)
2836                 dounwind(cxix);
2837             TOPBLOCK(cx);
2838             SPAGAIN;
2839             /* ban goto in eval: see <20050521150056.GC20213@iabyn.com> */
2840             if (CxTYPE(cx) == CXt_EVAL) {
2841                 if (CxREALEVAL(cx))
2842                     DIE(aTHX_ "Can't goto subroutine from an eval-string");
2843                 else
2844                     DIE(aTHX_ "Can't goto subroutine from an eval-block");
2845             }
2846             else if (CxMULTICALL(cx))
2847                 DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)");
2848             if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) {
2849                 /* put @_ back onto stack */
2850                 AV* av = cx->blk_sub.argarray;
2851
2852                 items = AvFILLp(av) + 1;
2853                 EXTEND(SP, items+1); /* @_ could have been extended. */
2854                 Copy(AvARRAY(av), SP + 1, items, SV*);
2855                 SvREFCNT_dec(GvAV(PL_defgv));
2856                 GvAV(PL_defgv) = cx->blk_sub.savearray;
2857                 CLEAR_ARGARRAY(av);
2858                 /* abandon @_ if it got reified */
2859                 if (AvREAL(av)) {
2860                     reified = 1;
2861                     SvREFCNT_dec(av);
2862                     av = newAV();
2863                     av_extend(av, items-1);
2864                     AvREIFY_only(av);
2865                     PAD_SVl(0) = MUTABLE_SV(cx->blk_sub.argarray = av);
2866                 }
2867             }
2868             else if (CvISXSUB(cv)) {    /* put GvAV(defgv) back onto stack */
2869                 AV* const av = GvAV(PL_defgv);
2870                 items = AvFILLp(av) + 1;
2871                 EXTEND(SP, items+1); /* @_ could have been extended. */
2872                 Copy(AvARRAY(av), SP + 1, items, SV*);
2873             }
2874             mark = SP;
2875             SP += items;
2876             if (CxTYPE(cx) == CXt_SUB &&
2877                 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2878                 SvREFCNT_dec(cx->blk_sub.cv);
2879             oldsave = PL_scopestack[PL_scopestack_ix - 1];
2880             LEAVE_SCOPE(oldsave);
2881
2882             /* A destructor called during LEAVE_SCOPE could have undefined
2883              * our precious cv.  See bug #99850. */
2884             if (!CvROOT(cv) && !CvXSUB(cv)) {
2885                 const GV * const gv = CvGV(cv);
2886                 if (gv) {
2887                     SV * const tmpstr = sv_newmortal();
2888                     gv_efullname3(tmpstr, gv, NULL);
2889                     DIE(aTHX_ "Goto undefined subroutine &%"SVf"",
2890                                SVfARG(tmpstr));
2891                 }
2892                 DIE(aTHX_ "Goto undefined subroutine");
2893             }
2894
2895             /* Now do some callish stuff. */
2896             SAVETMPS;
2897             SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2898             if (CvISXSUB(cv)) {
2899                 OP* const retop = cx->blk_sub.retop;
2900                 SV **newsp PERL_UNUSED_DECL;
2901                 I32 gimme PERL_UNUSED_DECL;
2902                 if (reified) {
2903                     I32 index;
2904                     for (index=0; index<items; index++)
2905                         sv_2mortal(SP[-index]);
2906                 }
2907
2908                 /* XS subs don't have a CxSUB, so pop it */
2909                 POPBLOCK(cx, PL_curpm);
2910                 /* Push a mark for the start of arglist */
2911                 PUSHMARK(mark);
2912                 PUTBACK;
2913                 (void)(*CvXSUB(cv))(aTHX_ cv);
2914                 LEAVE;
2915                 return retop;
2916             }
2917             else {
2918                 AV* const padlist = CvPADLIST(cv);
2919                 if (CxTYPE(cx) == CXt_EVAL) {
2920                     PL_in_eval = CxOLD_IN_EVAL(cx);
2921                     PL_eval_root = cx->blk_eval.old_eval_root;
2922                     cx->cx_type = CXt_SUB;
2923                 }
2924                 cx->blk_sub.cv = cv;
2925                 cx->blk_sub.olddepth = CvDEPTH(cv);
2926
2927                 CvDEPTH(cv)++;
2928                 if (CvDEPTH(cv) < 2)
2929                     SvREFCNT_inc_simple_void_NN(cv);
2930                 else {
2931                     if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2932                         sub_crush_depth(cv);
2933                     pad_push(padlist, CvDEPTH(cv));
2934                 }
2935                 PL_curcop = cx->blk_oldcop;
2936                 SAVECOMPPAD();
2937                 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2938                 if (CxHASARGS(cx))
2939                 {
2940                     AV *const av = MUTABLE_AV(PAD_SVl(0));
2941
2942                     cx->blk_sub.savearray = GvAV(PL_defgv);
2943                     GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2944                     CX_CURPAD_SAVE(cx->blk_sub);
2945                     cx->blk_sub.argarray = av;
2946
2947                     if (items >= AvMAX(av) + 1) {
2948                         SV **ary = AvALLOC(av);
2949                         if (AvARRAY(av) != ary) {
2950                             AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2951                             AvARRAY(av) = ary;
2952                         }
2953                         if (items >= AvMAX(av) + 1) {
2954                             AvMAX(av) = items - 1;
2955                             Renew(ary,items+1,SV*);
2956                             AvALLOC(av) = ary;
2957                             AvARRAY(av) = ary;
2958                         }
2959                     }
2960                     ++mark;
2961                     Copy(mark,AvARRAY(av),items,SV*);
2962                     AvFILLp(av) = items - 1;
2963                     assert(!AvREAL(av));
2964                     if (reified) {
2965                         /* transfer 'ownership' of refcnts to new @_ */
2966                         AvREAL_on(av);
2967                         AvREIFY_off(av);
2968                     }
2969                     while (items--) {
2970                         if (*mark)
2971                             SvTEMP_off(*mark);
2972                         mark++;
2973                     }
2974                 }
2975                 if (PERLDB_SUB) {       /* Checking curstash breaks DProf. */
2976                     Perl_get_db_sub(aTHX_ NULL, cv);
2977                     if (PERLDB_GOTO) {
2978                         CV * const gotocv = get_cvs("DB::goto", 0);
2979                         if (gotocv) {
2980                             PUSHMARK( PL_stack_sp );
2981                             call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2982                             PL_stack_sp--;
2983                         }
2984                     }
2985                 }
2986                 RETURNOP(CvSTART(cv));
2987             }
2988         }
2989         else {
2990             label = SvPV_nolen_const(sv);
2991             if (!(do_dump || *label))
2992                 DIE(aTHX_ must_have_label);
2993         }
2994     }
2995     else if (PL_op->op_flags & OPf_SPECIAL) {
2996         if (! do_dump)
2997             DIE(aTHX_ must_have_label);
2998     }
2999     else
3000         label = cPVOP->op_pv;
3001
3002     PERL_ASYNC_CHECK();
3003
3004     if (label && *label) {
3005         OP *gotoprobe = NULL;
3006         bool leaving_eval = FALSE;
3007         bool in_block = FALSE;
3008         PERL_CONTEXT *last_eval_cx = NULL;
3009
3010         /* find label */
3011
3012         PL_lastgotoprobe = NULL;
3013         *enterops = 0;
3014         for (ix = cxstack_ix; ix >= 0; ix--) {
3015             cx = &cxstack[ix];
3016             switch (CxTYPE(cx)) {
3017             case CXt_EVAL:
3018                 leaving_eval = TRUE;
3019                 if (!CxTRYBLOCK(cx)) {
3020                     gotoprobe = (last_eval_cx ?
3021                                 last_eval_cx->blk_eval.old_eval_root :
3022                                 PL_eval_root);
3023                     last_eval_cx = cx;
3024                     break;
3025                 }
3026                 /* else fall through */
3027             case CXt_LOOP_LAZYIV:
3028             case CXt_LOOP_LAZYSV:
3029             case CXt_LOOP_FOR:
3030             case CXt_LOOP_PLAIN:
3031             case CXt_GIVEN:
3032             case CXt_WHEN:
3033                 gotoprobe = cx->blk_oldcop->op_sibling;
3034                 break;
3035             case CXt_SUBST:
3036                 continue;
3037             case CXt_BLOCK:
3038                 if (ix) {
3039                     gotoprobe = cx->blk_oldcop->op_sibling;
3040                     in_block = TRUE;
3041                 } else
3042                     gotoprobe = PL_main_root;
3043                 break;
3044             case CXt_SUB:
3045                 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3046                     gotoprobe = CvROOT(cx->blk_sub.cv);
3047                     break;
3048                 }
3049                 /* FALL THROUGH */
3050             case CXt_FORMAT:
3051             case CXt_NULL:
3052                 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3053             default:
3054                 if (ix)
3055                     DIE(aTHX_ "panic: goto");
3056                 gotoprobe = PL_main_root;
3057                 break;
3058             }
3059             if (gotoprobe) {
3060                 retop = dofindlabel(gotoprobe, label,
3061                                     enterops, enterops + GOTO_DEPTH);
3062                 if (retop)
3063                     break;
3064                 if (gotoprobe->op_sibling &&
3065                         gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3066                         gotoprobe->op_sibling->op_sibling) {
3067                     retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3068                                         label, enterops, enterops + GOTO_DEPTH);
3069                     if (retop)
3070                         break;
3071                 }
3072             }
3073             PL_lastgotoprobe = gotoprobe;
3074         }
3075         if (!retop)
3076             DIE(aTHX_ "Can't find label %s", label);
3077
3078         /* if we're leaving an eval, check before we pop any frames
3079            that we're not going to punt, otherwise the error
3080            won't be caught */
3081
3082         if (leaving_eval && *enterops && enterops[1]) {
3083             I32 i;
3084             for (i = 1; enterops[i]; i++)
3085                 if (enterops[i]->op_type == OP_ENTERITER)
3086                     DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3087         }
3088
3089         if (*enterops && enterops[1]) {
3090             I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3091             if (enterops[i])
3092                 deprecate("\"goto\" to jump into a construct");
3093         }
3094
3095         /* pop unwanted frames */
3096
3097         if (ix < cxstack_ix) {
3098             I32 oldsave;
3099
3100             if (ix < 0)
3101                 ix = 0;
3102             dounwind(ix);
3103             TOPBLOCK(cx);
3104             oldsave = PL_scopestack[PL_scopestack_ix];
3105             LEAVE_SCOPE(oldsave);
3106         }
3107
3108         /* push wanted frames */
3109
3110         if (*enterops && enterops[1]) {
3111             OP * const oldop = PL_op;
3112             ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3113             for (; enterops[ix]; ix++) {
3114                 PL_op = enterops[ix];
3115                 /* Eventually we may want to stack the needed arguments
3116                  * for each op.  For now, we punt on the hard ones. */
3117                 if (PL_op->op_type == OP_ENTERITER)
3118                     DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3119                 PL_op->op_ppaddr(aTHX);
3120             }
3121             PL_op = oldop;
3122         }
3123     }
3124
3125     if (do_dump) {
3126 #ifdef VMS
3127         if (!retop) retop = PL_main_start;
3128 #endif
3129         PL_restartop = retop;
3130         PL_do_undump = TRUE;
3131
3132         my_unexec();
3133
3134         PL_restartop = 0;               /* hmm, must be GNU unexec().. */
3135         PL_do_undump = FALSE;
3136     }
3137
3138     RETURNOP(retop);
3139 }
3140
3141 PP(pp_exit)
3142 {
3143     dVAR;
3144     dSP;
3145     I32 anum;
3146
3147     if (MAXARG < 1)
3148         anum = 0;
3149     else if (!TOPs) {
3150         anum = 0; (void)POPs;
3151     }
3152     else {
3153         anum = SvIVx(POPs);
3154 #ifdef VMS
3155         if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3156             anum = 0;
3157         VMSISH_HUSHED  = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3158 #endif
3159     }
3160     PL_exit_flags |= PERL_EXIT_EXPECTED;
3161 #ifdef PERL_MAD
3162     /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3163     if (anum || !(PL_minus_c && PL_madskills))
3164         my_exit(anum);
3165 #else
3166     my_exit(anum);
3167 #endif
3168     PUSHs(&PL_sv_undef);
3169     RETURN;
3170 }
3171
3172 /* Eval. */
3173
3174 STATIC void
3175 S_save_lines(pTHX_ AV *array, SV *sv)
3176 {
3177     const char *s = SvPVX_const(sv);
3178     const char * const send = SvPVX_const(sv) + SvCUR(sv);
3179     I32 line = 1;
3180
3181     PERL_ARGS_ASSERT_SAVE_LINES;
3182
3183     while (s && s < send) {
3184         const char *t;
3185         SV * const tmpstr = newSV_type(SVt_PVMG);
3186
3187         t = (const char *)memchr(s, '\n', send - s);
3188         if (t)
3189             t++;
3190         else
3191             t = send;
3192
3193         sv_setpvn(tmpstr, s, t - s);
3194         av_store(array, line++, tmpstr);
3195         s = t;
3196     }
3197 }
3198
3199 /*
3200 =for apidoc docatch
3201
3202 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3203
3204 0 is used as continue inside eval,
3205
3206 3 is used for a die caught by an inner eval - continue inner loop
3207
3208 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3209 establish a local jmpenv to handle exception traps.
3210
3211 =cut
3212 */
3213 STATIC OP *
3214 S_docatch(pTHX_ OP *o)
3215 {
3216     dVAR;
3217     int ret;
3218     OP * const oldop = PL_op;
3219     dJMPENV;
3220
3221 #ifdef DEBUGGING
3222     assert(CATCH_GET == TRUE);
3223 #endif
3224     PL_op = o;
3225
3226     JMPENV_PUSH(ret);
3227     switch (ret) {
3228     case 0:
3229         assert(cxstack_ix >= 0);
3230         assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3231         cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3232  redo_body:
3233         CALLRUNOPS(aTHX);
3234         break;
3235     case 3:
3236         /* die caught by an inner eval - continue inner loop */
3237         if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3238             PL_restartjmpenv = NULL;
3239             PL_op = PL_restartop;
3240             PL_restartop = 0;
3241             goto redo_body;
3242         }
3243         /* FALL THROUGH */
3244     default:
3245         JMPENV_POP;
3246         PL_op = oldop;
3247         JMPENV_JUMP(ret);
3248         /* NOTREACHED */
3249     }
3250     JMPENV_POP;
3251     PL_op = oldop;
3252     return NULL;
3253 }
3254
3255 /* James Bond: Do you expect me to talk?
3256    Auric Goldfinger: No, Mr. Bond. I expect you to die.
3257
3258    This code is an ugly hack, doesn't work with lexicals in subroutines that are
3259    called more than once, and is only used by regcomp.c, for (?{}) blocks.
3260
3261    Currently it is not used outside the core code. Best if it stays that way.
3262
3263    Hence it's now deprecated, and will be removed.
3264 */
3265 OP *
3266 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3267 /* sv Text to convert to OP tree. */
3268 /* startop op_free() this to undo. */
3269 /* code Short string id of the caller. */
3270 {
3271     PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3272     return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3273 }
3274
3275 /* Don't use this. It will go away without warning once the regexp engine is
3276    refactored not to use it.  */
3277 OP *
3278 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3279                               PAD **padp)
3280 {
3281     dVAR; dSP;                          /* Make POPBLOCK work. */
3282     PERL_CONTEXT *cx;
3283     SV **newsp;
3284     I32 gimme = G_VOID;
3285     I32 optype;
3286     OP dummy;
3287     char tbuf[TYPE_DIGITS(long) + 12 + 10];
3288     char *tmpbuf = tbuf;
3289     char *safestr;
3290     int runtime;
3291     CV* runcv = NULL;   /* initialise to avoid compiler warnings */
3292     STRLEN len;
3293     bool need_catch;
3294
3295     PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3296
3297     ENTER_with_name("eval");
3298     lex_start(sv, NULL, LEX_START_SAME_FILTER);
3299     SAVETMPS;
3300     /* switch to eval mode */
3301
3302     if (IN_PERL_COMPILETIME) {
3303         SAVECOPSTASH_FREE(&PL_compiling);
3304         CopSTASH_set(&PL_compiling, PL_curstash);
3305     }
3306     if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3307         SV * const sv = sv_newmortal();
3308         Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3309                        code, (unsigned long)++PL_evalseq,
3310                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3311         tmpbuf = SvPVX(sv);
3312         len = SvCUR(sv);
3313     }
3314     else
3315         len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3316                           (unsigned long)++PL_evalseq);
3317     SAVECOPFILE_FREE(&PL_compiling);
3318     CopFILE_set(&PL_compiling, tmpbuf+2);
3319     SAVECOPLINE(&PL_compiling);
3320     CopLINE_set(&PL_compiling, 1);
3321     /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3322        deleting the eval's FILEGV from the stash before gv_check() runs
3323        (i.e. before run-time proper). To work around the coredump that
3324        ensues, we always turn GvMULTI_on for any globals that were
3325        introduced within evals. See force_ident(). GSAR 96-10-12 */
3326     safestr = savepvn(tmpbuf, len);
3327     SAVEDELETE(PL_defstash, safestr, len);
3328     SAVEHINTS();
3329 #ifdef OP_IN_REGISTER
3330     PL_opsave = op;
3331 #else
3332     SAVEVPTR(PL_op);
3333 #endif
3334
3335     /* we get here either during compilation, or via pp_regcomp at runtime */
3336     runtime = IN_PERL_RUNTIME;
3337     if (runtime)
3338     {
3339         runcv = find_runcv(NULL);
3340
3341         /* At run time, we have to fetch the hints from PL_curcop. */
3342         PL_hints = PL_curcop->cop_hints;
3343         if (PL_hints & HINT_LOCALIZE_HH) {
3344             /* SAVEHINTS created a new HV in PL_hintgv, which we
3345                need to GC */
3346             SvREFCNT_dec(GvHV(PL_hintgv));
3347             GvHV(PL_hintgv) =
3348              refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3349             hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3350         }
3351         SAVECOMPILEWARNINGS();
3352         PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3353         cophh_free(CopHINTHASH_get(&PL_compiling));
3354         /* XXX Does this need to avoid copying a label? */
3355         PL_compiling.cop_hints_hash
3356          = cophh_copy(PL_curcop->cop_hints_hash);
3357     }
3358
3359     PL_op = &dummy;
3360     PL_op->op_type = OP_ENTEREVAL;
3361     PL_op->op_flags = 0;                        /* Avoid uninit warning. */
3362     PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3363     PUSHEVAL(cx, 0);
3364     need_catch = CATCH_GET;
3365     CATCH_SET(TRUE);
3366
3367     if (runtime)
3368         (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq, NULL);
3369     else
3370         (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax, NULL);
3371     CATCH_SET(need_catch);
3372     POPBLOCK(cx,PL_curpm);
3373     POPEVAL(cx);
3374
3375     (*startop)->op_type = OP_NULL;
3376     (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3377     /* XXX DAPM do this properly one year */
3378     *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3379     LEAVE_with_name("eval");
3380     if (IN_PERL_COMPILETIME)
3381         CopHINTS_set(&PL_compiling, PL_hints);
3382 #ifdef OP_IN_REGISTER
3383     op = PL_opsave;
3384 #endif
3385     PERL_UNUSED_VAR(newsp);
3386     PERL_UNUSED_VAR(optype);
3387
3388     return PL_eval_start;
3389 }
3390
3391
3392 /*
3393 =for apidoc find_runcv
3394
3395 Locate the CV corresponding to the currently executing sub or eval.
3396 If db_seqp is non_null, skip CVs that are in the DB package and populate
3397 *db_seqp with the cop sequence number at the point that the DB:: code was
3398 entered. (allows debuggers to eval in the scope of the breakpoint rather
3399 than in the scope of the debugger itself).
3400
3401 =cut
3402 */
3403
3404 CV*
3405 Perl_find_runcv(pTHX_ U32 *db_seqp)
3406 {
3407     dVAR;
3408     PERL_SI      *si;
3409
3410     if (db_seqp)
3411         *db_seqp = PL_curcop->cop_seq;
3412     for (si = PL_curstackinfo; si; si = si->si_prev) {
3413         I32 ix;
3414         for (ix = si->si_cxix; ix >= 0; ix--) {
3415             const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3416             if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3417                 CV * const cv = cx->blk_sub.cv;
3418                 /* skip DB:: code */
3419                 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3420                     *db_seqp = cx->blk_oldcop->cop_seq;
3421                     continue;
3422                 }
3423                 return cv;
3424             }
3425             else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3426                 return cx->blk_eval.cv;
3427         }
3428     }
3429     return PL_main_cv;
3430 }
3431
3432
3433 /* Run yyparse() in a setjmp wrapper. Returns:
3434  *   0: yyparse() successful
3435  *   1: yyparse() failed
3436  *   3: yyparse() died
3437  */
3438 STATIC int
3439 S_try_yyparse(pTHX_ int gramtype)
3440 {
3441     int ret;
3442     dJMPENV;
3443
3444     assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3445     JMPENV_PUSH(ret);
3446     switch (ret) {
3447     case 0:
3448         ret = yyparse(gramtype) ? 1 : 0;
3449         break;
3450     case 3:
3451         break;
3452     default:
3453         JMPENV_POP;
3454         JMPENV_JUMP(ret);
3455         /* NOTREACHED */
3456     }
3457     JMPENV_POP;
3458     return ret;
3459 }
3460
3461
3462 /* Compile a require/do, an eval '', or a /(?{...})/.
3463  * In the last case, startop is non-null, and contains the address of
3464  * a pointer that should be set to the just-compiled code.
3465  * outside is the lexically enclosing CV (if any) that invoked us.
3466  * Returns a bool indicating whether the compile was successful; if so,
3467  * PL_eval_start contains the first op of the compiled ocde; otherwise,
3468  * pushes undef (also croaks if startop != NULL).
3469  */
3470
3471 /* This function is called from three places, sv_compile_2op, pp_return
3472  * and pp_entereval.  These can be distinguished as follows:
3473  *    sv_compile_2op - startop is non-null
3474  *    pp_require     - startop is null; in_require is true
3475  *    pp_entereval   - stortop is null; in_require is false
3476  */
3477
3478 STATIC bool
3479 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq, HV *hh)
3480 {
3481     dVAR; dSP;
3482     OP * const saveop = PL_op;
3483     COP * const oldcurcop = PL_curcop;
3484     bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3485     int yystatus;
3486     CV *evalcv;
3487
3488     PL_in_eval = (in_require
3489                   ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3490                   : EVAL_INEVAL);
3491
3492     PUSHMARK(SP);
3493
3494     evalcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3495     CvEVAL_on(evalcv);
3496     assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3497     cxstack[cxstack_ix].blk_eval.cv = evalcv;
3498     cxstack[cxstack_ix].blk_gimme = gimme;
3499
3500     CvOUTSIDE_SEQ(evalcv) = seq;
3501     CvOUTSIDE(evalcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3502
3503     /* set up a scratch pad */
3504
3505     CvPADLIST(evalcv) = pad_new(padnew_SAVE);
3506     PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3507
3508
3509     if (!PL_madskills)
3510         SAVEMORTALIZESV(evalcv);        /* must remain until end of current statement */
3511
3512     /* make sure we compile in the right package */
3513
3514     if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3515         SAVEGENERICSV(PL_curstash);
3516         PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3517     }
3518     /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3519     SAVESPTR(PL_beginav);
3520     PL_beginav = newAV();
3521     SAVEFREESV(PL_beginav);
3522     SAVESPTR(PL_unitcheckav);
3523     PL_unitcheckav = newAV();
3524     SAVEFREESV(PL_unitcheckav);
3525
3526 #ifdef PERL_MAD
3527     SAVEBOOL(PL_madskills);
3528     PL_madskills = 0;
3529 #endif
3530
3531     if (!startop) ENTER_with_name("evalcomp");
3532     SAVESPTR(PL_compcv);
3533     PL_compcv = evalcv;
3534
3535     /* try to compile it */
3536
3537     PL_eval_root = NULL;
3538     PL_curcop = &PL_compiling;
3539     if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3540         PL_in_eval |= EVAL_KEEPERR;
3541     else
3542         CLEAR_ERRSV();
3543
3544     if (!startop) {
3545         SAVEHINTS();
3546         if (in_require) {
3547             PL_hints = 0;
3548             hv_clear(GvHV(PL_hintgv));
3549         }
3550         else {
3551             PL_hints = saveop->op_private & OPpEVAL_COPHH
3552                          ? oldcurcop->cop_hints : saveop->op_targ;
3553             if (hh) {
3554                 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3555                 SvREFCNT_dec(GvHV(PL_hintgv));
3556                 GvHV(PL_hintgv) = hh;
3557             }
3558         }
3559         SAVECOMPILEWARNINGS();
3560         if (in_require) {
3561             if (PL_dowarn & G_WARN_ALL_ON)
3562                 PL_compiling.cop_warnings = pWARN_ALL ;
3563             else if (PL_dowarn & G_WARN_ALL_OFF)
3564                 PL_compiling.cop_warnings = pWARN_NONE ;
3565             else
3566                 PL_compiling.cop_warnings = pWARN_STD ;
3567         }
3568         else {
3569             PL_compiling.cop_warnings =
3570                 DUP_WARNINGS(oldcurcop->cop_warnings);
3571             cophh_free(CopHINTHASH_get(&PL_compiling));
3572             if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3573                 /* The label, if present, is the first entry on the chain. So rather
3574                    than writing a blank label in front of it (which involves an
3575                    allocation), just use the next entry in the chain.  */
3576                 PL_compiling.cop_hints_hash
3577                     = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3578                 /* Check the assumption that this removed the label.  */
3579                 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3580             }
3581             else
3582                 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3583         }
3584     }
3585
3586     CALL_BLOCK_HOOKS(bhk_eval, saveop);
3587
3588     /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3589      * so honour CATCH_GET and trap it here if necessary */
3590
3591     yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3592
3593     if (!startop && yystatus != 3) LEAVE_with_name("evalcomp");
3594
3595     if (yystatus || PL_parser->error_count || !PL_eval_root) {
3596         SV **newsp;                     /* Used by POPBLOCK. */
3597         PERL_CONTEXT *cx;
3598         I32 optype;                     /* Used by POPEVAL. */
3599         SV *namesv;
3600
3601         cx = NULL;
3602         namesv = NULL;
3603         PERL_UNUSED_VAR(newsp);
3604         PERL_UNUSED_VAR(optype);
3605
3606         /* note that if yystatus == 3, then the EVAL CX block has already
3607          * been popped, and various vars restored */
3608         PL_op = saveop;
3609         if (yystatus != 3) {
3610             if (PL_eval_root) {
3611                 op_free(PL_eval_root);
3612                 PL_eval_root = NULL;
3613             }
3614             SP = PL_stack_base + POPMARK;       /* pop original mark */
3615             if (!startop) {
3616                 POPBLOCK(cx,PL_curpm);
3617                 POPEVAL(cx);
3618                 namesv = cx->blk_eval.old_namesv;
3619             }
3620             LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE.  */
3621         }
3622
3623         if (in_require) {
3624             if (!cx) {
3625                 /* If cx is still NULL, it means that we didn't go in the
3626                  * POPEVAL branch. */
3627                 cx = &cxstack[cxstack_ix];
3628                 assert(CxTYPE(cx) == CXt_EVAL);
3629                 namesv = cx->blk_eval.old_namesv;
3630             }
3631             (void)hv_store(GvHVn(PL_incgv),
3632                            SvPVX_const(namesv),
3633                            SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3634                            &PL_sv_undef, 0);
3635             Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3636                        SVfARG(ERRSV
3637                                 ? ERRSV
3638                                 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3639         }
3640         else if (startop) {
3641             if (yystatus != 3) {
3642                 POPBLOCK(cx,PL_curpm);
3643                 POPEVAL(cx);
3644             }
3645             Perl_croak(aTHX_ "%"SVf"Compilation failed in regexp",
3646                        SVfARG(ERRSV
3647                                 ? ERRSV
3648                                 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3649         }
3650         else {
3651             if (!*(SvPVx_nolen_const(ERRSV))) {
3652                 sv_setpvs(ERRSV, "Compilation error");
3653             }
3654         }
3655         PUSHs(&PL_sv_undef);
3656         PUTBACK;
3657         return FALSE;
3658     }
3659     CopLINE_set(&PL_compiling, 0);
3660     if (startop) {
3661         *startop = PL_eval_root;
3662     } else
3663         SAVEFREEOP(PL_eval_root);
3664
3665     DEBUG_x(dump_eval());
3666
3667     /* Register with debugger: */
3668     if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3669         CV * const cv = get_cvs("DB::postponed", 0);
3670         if (cv) {
3671             dSP;
3672             PUSHMARK(SP);
3673             XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3674             PUTBACK;
3675             call_sv(MUTABLE_SV(cv), G_DISCARD);
3676         }
3677     }
3678
3679     if (PL_unitcheckav) {
3680         OP *es = PL_eval_start;
3681         call_list(PL_scopestack_ix, PL_unitcheckav);
3682         PL_eval_start = es;
3683     }
3684
3685     /* compiled okay, so do it */
3686
3687     CvDEPTH(evalcv) = 1;
3688     SP = PL_stack_base + POPMARK;               /* pop original mark */
3689     PL_op = saveop;                     /* The caller may need it. */
3690     PL_parser->lex_state = LEX_NOTPARSING;      /* $^S needs this. */
3691
3692     PUTBACK;
3693     return TRUE;
3694 }
3695
3696 STATIC PerlIO *
3697 S_check_type_and_open(pTHX_ SV *name)
3698 {
3699     Stat_t st;
3700     const char *p = SvPV_nolen_const(name);
3701     const int st_rc = PerlLIO_stat(p, &st);
3702
3703     PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3704
3705     if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3706         return NULL;
3707     }
3708
3709 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3710     return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3711 #else
3712     return PerlIO_open(p, PERL_SCRIPT_MODE);
3713 #endif
3714 }
3715
3716 #ifndef PERL_DISABLE_PMC
3717 STATIC PerlIO *
3718 S_doopen_pm(pTHX_ SV *name)
3719 {
3720     STRLEN namelen;
3721     const char *p = SvPV_const(name, namelen);
3722
3723     PERL_ARGS_ASSERT_DOOPEN_PM;
3724
3725     if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3726         SV *const pmcsv = sv_newmortal();
3727         Stat_t pmcstat;
3728
3729         SvSetSV_nosteal(pmcsv,name);
3730         sv_catpvn(pmcsv, "c", 1);
3731
3732         if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3733             return check_type_and_open(pmcsv);
3734     }
3735     return check_type_and_open(name);
3736 }
3737 #else
3738 #  define doopen_pm(name) check_type_and_open(name)
3739 #endif /* !PERL_DISABLE_PMC */
3740
3741 PP(pp_require)
3742 {
3743     dVAR; dSP;
3744     register PERL_CONTEXT *cx;
3745     SV *sv;
3746     const char *name;
3747     STRLEN len;
3748     char * unixname;
3749     STRLEN unixlen;
3750 #ifdef VMS
3751     int vms_unixname = 0;
3752 #endif
3753     const char *tryname = NULL;
3754     SV *namesv = NULL;
3755     const I32 gimme = GIMME_V;
3756     int filter_has_file = 0;
3757     PerlIO *tryrsfp = NULL;
3758     SV *filter_cache = NULL;
3759     SV *filter_state = NULL;
3760     SV *filter_sub = NULL;
3761     SV *hook_sv = NULL;
3762     SV *encoding;
3763     OP *op;
3764
3765     sv = POPs;
3766     if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3767         sv = sv_2mortal(new_version(sv));
3768         if (!sv_derived_from(PL_patchlevel, "version"))
3769             upg_version(PL_patchlevel, TRUE);
3770         if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3771             if ( vcmp(sv,PL_patchlevel) <= 0 )
3772                 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3773                     SVfARG(sv_2mortal(vnormal(sv))),
3774                     SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3775                 );
3776         }
3777         else {
3778             if ( vcmp(sv,PL_patchlevel) > 0 ) {
3779                 I32 first = 0;
3780                 AV *lav;
3781                 SV * const req = SvRV(sv);
3782                 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3783
3784                 /* get the left hand term */
3785                 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3786
3787                 first  = SvIV(*av_fetch(lav,0,0));
3788                 if (   first > (int)PERL_REVISION    /* probably 'use 6.0' */
3789                     || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3790                     || av_len(lav) > 1               /* FP with > 3 digits */
3791                     || strstr(SvPVX(pv),".0")        /* FP with leading 0 */
3792                    ) {
3793                     DIE(aTHX_ "Perl %"SVf" required--this is only "
3794                         "%"SVf", stopped",
3795                         SVfARG(sv_2mortal(vnormal(req))),
3796                         SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3797                     );
3798                 }
3799                 else { /* probably 'use 5.10' or 'use 5.8' */
3800                     SV *hintsv;
3801                     I32 second = 0;
3802
3803                     if (av_len(lav)>=1) 
3804                         second = SvIV(*av_fetch(lav,1,0));
3805
3806                     second /= second >= 600  ? 100 : 10;
3807                     hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3808                                            (int)first, (int)second);
3809                     upg_version(hintsv, TRUE);
3810
3811                     DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3812                         "--this is only %"SVf", stopped",
3813                         SVfARG(sv_2mortal(vnormal(req))),
3814                         SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3815                         SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3816                     );
3817                 }
3818             }
3819         }
3820
3821         RETPUSHYES;
3822     }
3823     name = SvPV_const(sv, len);
3824     if (!(name && len > 0 && *name))
3825         DIE(aTHX_ "Null filename used");
3826     TAINT_PROPER("require");
3827
3828
3829 #ifdef VMS
3830     /* The key in the %ENV hash is in the syntax of file passed as the argument
3831      * usually this is in UNIX format, but sometimes in VMS format, which
3832      * can result in a module being pulled in more than once.
3833      * To prevent this, the key must be stored in UNIX format if the VMS
3834      * name can be translated to UNIX.
3835      */
3836     if ((unixname = tounixspec(name, NULL)) != NULL) {
3837         unixlen = strlen(unixname);
3838         vms_unixname = 1;
3839     }
3840     else
3841 #endif
3842     {
3843         /* if not VMS or VMS name can not be translated to UNIX, pass it
3844          * through.
3845          */
3846         unixname = (char *) name;
3847         unixlen = len;
3848     }
3849     if (PL_op->op_type == OP_REQUIRE) {
3850         SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3851                                           unixname, unixlen, 0);
3852         if ( svp ) {
3853             if (*svp != &PL_sv_undef)
3854                 RETPUSHYES;
3855             else
3856                 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3857                             "Compilation failed in require", unixname);
3858         }
3859     }
3860
3861     /* prepare to compile file */
3862
3863     if (path_is_absolute(name)) {
3864         /* At this point, name is SvPVX(sv)  */
3865         tryname = name;
3866         tryrsfp = doopen_pm(sv);
3867     }
3868     if (!tryrsfp) {
3869         AV * const ar = GvAVn(PL_incgv);
3870         I32 i;
3871 #ifdef VMS
3872         if (vms_unixname)
3873 #endif
3874         {
3875             namesv = newSV_type(SVt_PV);
3876             for (i = 0; i <= AvFILL(ar); i++) {
3877                 SV * const dirsv = *av_fetch(ar, i, TRUE);
3878
3879                 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3880                     mg_get(dirsv);
3881                 if (SvROK(dirsv)) {
3882                     int count;
3883                     SV **svp;
3884                     SV *loader = dirsv;
3885
3886                     if (SvTYPE(SvRV(loader)) == SVt_PVAV
3887                         && !sv_isobject(loader))
3888                     {
3889                         loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3890                     }
3891
3892                     Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3893                                    PTR2UV(SvRV(dirsv)), name);
3894                     tryname = SvPVX_const(namesv);
3895                     tryrsfp = NULL;
3896
3897                     ENTER_with_name("call_INC");
3898                     SAVETMPS;
3899                     EXTEND(SP, 2);
3900
3901                     PUSHMARK(SP);
3902                     PUSHs(dirsv);
3903                     PUSHs(sv);
3904                     PUTBACK;
3905                     if (sv_isobject(loader))
3906                         count = call_method("INC", G_ARRAY);
3907                     else
3908                         count = call_sv(loader, G_ARRAY);
3909                     SPAGAIN;
3910
3911                     if (count > 0) {
3912                         int i = 0;
3913                         SV *arg;
3914
3915                         SP -= count - 1;
3916                         arg = SP[i++];
3917
3918                         if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3919                             && !isGV_with_GP(SvRV(arg))) {
3920                             filter_cache = SvRV(arg);
3921                             SvREFCNT_inc_simple_void_NN(filter_cache);
3922
3923                             if (i < count) {
3924                                 arg = SP[i++];
3925                             }
3926                         }
3927
3928                         if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3929                             arg = SvRV(arg);
3930                         }
3931
3932                         if (isGV_with_GP(arg)) {
3933                             IO * const io = GvIO((const GV *)arg);
3934
3935                             ++filter_has_file;
3936
3937                             if (io) {
3938                                 tryrsfp = IoIFP(io);
3939                                 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3940                                     PerlIO_close(IoOFP(io));
3941                                 }
3942                                 IoIFP(io) = NULL;
3943                                 IoOFP(io) = NULL;
3944                             }
3945
3946                             if (i < count) {
3947                                 arg = SP[i++];
3948                             }
3949                         }
3950
3951                         if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3952                             filter_sub = arg;
3953                             SvREFCNT_inc_simple_void_NN(filter_sub);
3954
3955                             if (i < count) {
3956                                 filter_state = SP[i];
3957                                 SvREFCNT_inc_simple_void(filter_state);
3958                             }
3959                         }
3960
3961                         if (!tryrsfp && (filter_cache || filter_sub)) {
3962                             tryrsfp = PerlIO_open(BIT_BUCKET,
3963                                                   PERL_SCRIPT_MODE);
3964                         }
3965                         SP--;
3966                     }
3967
3968                     PUTBACK;
3969                     FREETMPS;
3970                     LEAVE_with_name("call_INC");
3971
3972                     /* Adjust file name if the hook has set an %INC entry.
3973                        This needs to happen after the FREETMPS above.  */
3974                     svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3975                     if (svp)
3976                         tryname = SvPV_nolen_const(*svp);
3977
3978                     if (tryrsfp) {
3979                         hook_sv = dirsv;
3980                         break;
3981                     }
3982
3983                     filter_has_file = 0;
3984                     if (filter_cache) {
3985                         SvREFCNT_dec(filter_cache);
3986                         filter_cache = NULL;
3987                     }
3988                     if (filter_state) {
3989                         SvREFCNT_dec(filter_state);
3990                         filter_state = NULL;
3991                     }
3992                     if (filter_sub) {
3993                         SvREFCNT_dec(filter_sub);
3994                         filter_sub = NULL;
3995                     }
3996                 }
3997                 else {
3998                   if (!path_is_absolute(name)
3999                   ) {
4000                     const char *dir;
4001                     STRLEN dirlen;
4002
4003                     if (SvOK(dirsv)) {
4004                         dir = SvPV_const(dirsv, dirlen);
4005                     } else {
4006                         dir = "";
4007                         dirlen = 0;
4008                     }
4009
4010 #ifdef VMS
4011                     char *unixdir;
4012                     if ((unixdir = tounixpath(dir, NULL)) == NULL)
4013                         continue;
4014                     sv_setpv(namesv, unixdir);
4015                     sv_catpv(namesv, unixname);
4016 #else
4017 #  ifdef __SYMBIAN32__
4018                     if (PL_origfilename[0] &&
4019                         PL_origfilename[1] == ':' &&
4020                         !(dir[0] && dir[1] == ':'))
4021                         Perl_sv_setpvf(aTHX_ namesv,
4022                                        "%c:%s\\%s",
4023                                        PL_origfilename[0],
4024                                        dir, name);
4025                     else
4026                         Perl_sv_setpvf(aTHX_ namesv,
4027                                        "%s\\%s",
4028                                        dir, name);
4029 #  else
4030                     /* The equivalent of                    
4031                        Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4032                        but without the need to parse the format string, or
4033                        call strlen on either pointer, and with the correct
4034                        allocation up front.  */
4035                     {
4036                         char *tmp = SvGROW(namesv, dirlen + len + 2);
4037
4038                         memcpy(tmp, dir, dirlen);
4039                         tmp +=dirlen;
4040                         *tmp++ = '/';
4041                         /* name came from an SV, so it will have a '\0' at the
4042                            end that we can copy as part of this memcpy().  */
4043                         memcpy(tmp, name, len + 1);
4044
4045                         SvCUR_set(namesv, dirlen + len + 1);
4046                         SvPOK_on(namesv);
4047                     }
4048 #  endif
4049 #endif
4050                     TAINT_PROPER("require");
4051                     tryname = SvPVX_const(namesv);
4052                     tryrsfp = doopen_pm(namesv);
4053                     if (tryrsfp) {
4054                         if (tryname[0] == '.' && tryname[1] == '/') {
4055                             ++tryname;
4056                             while (*++tryname == '/');
4057                         }
4058                         break;
4059                     }
4060                     else if (errno == EMFILE)
4061                         /* no point in trying other paths if out of handles */
4062                         break;
4063                   }
4064                 }
4065             }
4066         }
4067     }
4068     sv_2mortal(namesv);
4069     if (!tryrsfp) {
4070         if (PL_op->op_type == OP_REQUIRE) {
4071             if(errno == EMFILE) {
4072                 /* diag_listed_as: Can't locate %s */
4073                 DIE(aTHX_ "Can't locate %s:   %s", name, Strerror(errno));
4074             } else {
4075                 if (namesv) {                   /* did we lookup @INC? */
4076                     AV * const ar = GvAVn(PL_incgv);
4077                     I32 i;
4078                     SV *const inc = newSVpvs_flags("", SVs_TEMP);
4079                     for (i = 0; i <= AvFILL(ar); i++) {
4080                         sv_catpvs(inc, " ");
4081                         sv_catsv(inc, *av_fetch(ar, i, TRUE));
4082                     }
4083
4084                     /* diag_listed_as: Can't locate %s */
4085                     DIE(aTHX_
4086                         "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4087                         name,
4088                         (memEQ(name + len - 2, ".h", 3)
4089                          ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4090                         (memEQ(name + len - 3, ".ph", 4)
4091                          ? " (did you run h2ph?)" : ""),
4092                         inc
4093                         );
4094                 }
4095             }
4096             DIE(aTHX_ "Can't locate %s", name);
4097         }
4098
4099         RETPUSHUNDEF;
4100     }
4101     else
4102         SETERRNO(0, SS_NORMAL);
4103
4104     /* Assume success here to prevent recursive requirement. */
4105     /* name is never assigned to again, so len is still strlen(name)  */
4106     /* Check whether a hook in @INC has already filled %INC */
4107     if (!hook_sv) {
4108         (void)hv_store(GvHVn(PL_incgv),
4109                        unixname, unixlen, newSVpv(tryname,0),0);
4110     } else {
4111         SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4112         if (!svp)
4113             (void)hv_store(GvHVn(PL_incgv),
4114                            unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4115     }
4116
4117     ENTER_with_name("eval");
4118     SAVETMPS;
4119     SAVECOPFILE_FREE(&PL_compiling);
4120     CopFILE_set(&PL_compiling, tryname);
4121     lex_start(NULL, tryrsfp, 0);
4122
4123     if (filter_sub || filter_cache) {
4124         /* We can use the SvPV of the filter PVIO itself as our cache, rather
4125            than hanging another SV from it. In turn, filter_add() optionally
4126            takes the SV to use as the filter (or creates a new SV if passed
4127            NULL), so simply pass in whatever value filter_cache has.  */
4128         SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4129         IoLINES(datasv) = filter_has_file;
4130         IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4131         IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4132     }
4133
4134     /* switch to eval mode */
4135     PUSHBLOCK(cx, CXt_EVAL, SP);
4136     PUSHEVAL(cx, name);
4137     cx->blk_eval.retop = PL_op->op_next;
4138
4139     SAVECOPLINE(&PL_compiling);
4140     CopLINE_set(&PL_compiling, 0);
4141
4142     PUTBACK;
4143
4144     /* Store and reset encoding. */
4145     encoding = PL_encoding;
4146     PL_encoding = NULL;
4147
4148     if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq, NULL))
4149         op = DOCATCH(PL_eval_start);
4150     else
4151         op = PL_op->op_next;
4152
4153     /* Restore encoding. */
4154     PL_encoding = encoding;
4155
4156     return op;
4157 }
4158
4159 /* This is a op added to hold the hints hash for
4160    pp_entereval. The hash can be modified by the code
4161    being eval'ed, so we return a copy instead. */
4162
4163 PP(pp_hintseval)
4164 {
4165     dVAR;
4166     dSP;
4167     mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4168     RETURN;
4169 }
4170
4171
4172 PP(pp_entereval)
4173 {
4174     dVAR; dSP;
4175     register PERL_CONTEXT *cx;
4176     SV *sv;
4177     const I32 gimme = GIMME_V;
4178     const U32 was = PL_breakable_sub_gen;
4179     char tbuf[TYPE_DIGITS(long) + 12];
4180     bool saved_delete = FALSE;
4181     char *tmpbuf = tbuf;
4182     STRLEN len;
4183     CV* runcv;
4184     U32 seq, lex_flags = 0;
4185     HV *saved_hh = NULL;
4186     const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4187
4188     if (PL_op->op_private & OPpEVAL_HAS_HH) {
4189         saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4190     }
4191     else if (PL_hints & HINT_LOCALIZE_HH || (
4192                 PL_op->op_private & OPpEVAL_COPHH
4193              && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4194             )) {
4195         saved_hh = cop_hints_2hv(PL_curcop, 0);
4196         hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4197     }
4198     sv = POPs;
4199     if (!SvPOK(sv)) {
4200         /* make sure we've got a plain PV (no overload etc) before testing
4201          * for taint. Making a copy here is probably overkill, but better
4202          * safe than sorry */
4203         STRLEN len;
4204         const char * const p = SvPV_const(sv, len);
4205
4206         sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4207         lex_flags |= LEX_START_COPIED;
4208
4209         if (bytes && SvUTF8(sv))
4210             SvPVbyte_force(sv, len);
4211     }
4212     else if (bytes && SvUTF8(sv)) {
4213         /* Don't modify someone else's scalar */
4214         STRLEN len;
4215         sv = newSVsv(sv);
4216         (void)sv_2mortal(sv);
4217         SvPVbyte_force(sv,len);
4218         lex_flags |= LEX_START_COPIED;
4219     }
4220
4221     TAINT_IF(SvTAINTED(sv));
4222     TAINT_PROPER("eval");
4223
4224     ENTER_with_name("eval");
4225     lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4226                            ? LEX_IGNORE_UTF8_HINTS
4227                            : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4228                         )
4229              );
4230     SAVETMPS;
4231
4232     /* switch to eval mode */
4233
4234     if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4235         SV * const temp_sv = sv_newmortal();
4236         Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4237                        (unsigned long)++PL_evalseq,
4238                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4239         tmpbuf = SvPVX(temp_sv);
4240         len = SvCUR(temp_sv);
4241     }
4242     else
4243         len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4244     SAVECOPFILE_FREE(&PL_compiling);
4245     CopFILE_set(&PL_compiling, tmpbuf+2);
4246     SAVECOPLINE(&PL_compiling);
4247     CopLINE_set(&PL_compiling, 1);
4248     /* special case: an eval '' executed within the DB package gets lexically
4249      * placed in the first non-DB CV rather than the current CV - this
4250      * allows the debugger to execute code, find lexicals etc, in the
4251      * scope of the code being debugged. Passing &seq gets find_runcv
4252      * to do the dirty work for us */
4253     runcv = find_runcv(&seq);
4254
4255     PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4256     PUSHEVAL(cx, 0);
4257     cx->blk_eval.retop = PL_op->op_next;
4258
4259     /* prepare to compile string */
4260
4261     if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4262         save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4263     else {
4264         /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4265            deleting the eval's FILEGV from the stash before gv_check() runs
4266            (i.e. before run-time proper). To work around the coredump that
4267            ensues, we always turn GvMULTI_on for any globals that were
4268            introduced within evals. See force_ident(). GSAR 96-10-12 */
4269         char *const safestr = savepvn(tmpbuf, len);
4270         SAVEDELETE(PL_defstash, safestr, len);
4271         saved_delete = TRUE;
4272     }
4273     
4274     PUTBACK;
4275
4276     if (doeval(gimme, NULL, runcv, seq, saved_hh)) {
4277         if (was != PL_breakable_sub_gen /* Some subs defined here. */
4278             ? (PERLDB_LINE || PERLDB_SAVESRC)
4279             :  PERLDB_SAVESRC_NOSUBS) {
4280             /* Retain the filegv we created.  */
4281         } else if (!saved_delete) {
4282             char *const safestr = savepvn(tmpbuf, len);
4283             SAVEDELETE(PL_defstash, safestr, len);
4284         }
4285         return DOCATCH(PL_eval_start);
4286     } else {
4287         /* We have already left the scope set up earlier thanks to the LEAVE
4288            in doeval().  */
4289         if (was != PL_breakable_sub_gen /* Some subs defined here. */
4290             ? (PERLDB_LINE || PERLDB_SAVESRC)
4291             :  PERLDB_SAVESRC_INVALID) {
4292             /* Retain the filegv we created.  */
4293         } else if (!saved_delete) {
4294             (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4295         }
4296         return PL_op->op_next;
4297     }
4298 }
4299
4300 PP(pp_leaveeval)
4301 {
4302     dVAR; dSP;
4303     SV **newsp;
4304     PMOP *newpm;
4305     I32 gimme;
4306     register PERL_CONTEXT *cx;
4307     OP *retop;
4308     const U8 save_flags = PL_op -> op_flags;
4309     I32 optype;
4310     SV *namesv;
4311     CV *evalcv;
4312
4313     PERL_ASYNC_CHECK();
4314     POPBLOCK(cx,newpm);
4315     POPEVAL(cx);
4316     namesv = cx->blk_eval.old_namesv;
4317     retop = cx->blk_eval.retop;
4318     evalcv = cx->blk_eval.cv;
4319
4320     TAINT_NOT;
4321     SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4322                                 gimme, SVs_TEMP);
4323     PL_curpm = newpm;   /* Don't pop $1 et al till now */
4324
4325 #ifdef DEBUGGING
4326     assert(CvDEPTH(evalcv) == 1);
4327 #endif
4328     CvDEPTH(evalcv) = 0;
4329
4330     if (optype == OP_REQUIRE &&
4331         !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4332     {
4333         /* Unassume the success we assumed earlier. */
4334         (void)hv_delete(GvHVn(PL_incgv),
4335                         SvPVX_const(namesv),
4336                         SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4337                         G_DISCARD);
4338         retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4339                                SVfARG(namesv));
4340         /* die_unwind() did LEAVE, or we won't be here */
4341     }
4342     else {
4343         LEAVE_with_name("eval");
4344         if (!(save_flags & OPf_SPECIAL)) {
4345             CLEAR_ERRSV();
4346         }
4347     }
4348
4349     RETURNOP(retop);
4350 }
4351
4352 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4353    close to the related Perl_create_eval_scope.  */
4354 void
4355 Perl_delete_eval_scope(pTHX)
4356 {
4357     SV **newsp;
4358     PMOP *newpm;
4359     I32 gimme;
4360     register PERL_CONTEXT *cx;
4361     I32 optype;
4362         
4363     POPBLOCK(cx,newpm);
4364     POPEVAL(cx);
4365     PL_curpm = newpm;
4366     LEAVE_with_name("eval_scope");
4367     PERL_UNUSED_VAR(newsp);
4368     PERL_UNUSED_VAR(gimme);
4369     PERL_UNUSED_VAR(optype);
4370 }
4371
4372 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4373    also needed by Perl_fold_constants.  */
4374 PERL_CONTEXT *
4375 Perl_create_eval_scope(pTHX_ U32 flags)
4376 {
4377     PERL_CONTEXT *cx;
4378     const I32 gimme = GIMME_V;
4379         
4380     ENTER_with_name("eval_scope");
4381     SAVETMPS;
4382
4383     PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4384     PUSHEVAL(cx, 0);
4385
4386     PL_in_eval = EVAL_INEVAL;
4387     if (flags & G_KEEPERR)
4388         PL_in_eval |= EVAL_KEEPERR;
4389     else
4390         CLEAR_ERRSV();
4391     if (flags & G_FAKINGEVAL) {
4392         PL_eval_root = PL_op; /* Only needed so that goto works right. */
4393     }
4394     return cx;
4395 }
4396     
4397 PP(pp_entertry)
4398 {
4399     dVAR;
4400     PERL_CONTEXT * const cx = create_eval_scope(0);
4401     cx->blk_eval.retop = cLOGOP->op_other->op_next;
4402     return DOCATCH(PL_op->op_next);
4403 }
4404
4405 PP(pp_leavetry)
4406 {
4407     dVAR; dSP;
4408     SV **newsp;
4409     PMOP *newpm;
4410     I32 gimme;
4411     register PERL_CONTEXT *cx;
4412     I32 optype;
4413
4414     PERL_ASYNC_CHECK();
4415     POPBLOCK(cx,newpm);
4416     POPEVAL(cx);
4417     PERL_UNUSED_VAR(optype);
4418
4419     TAINT_NOT;
4420     SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4421     PL_curpm = newpm;   /* Don't pop $1 et al till now */
4422
4423     LEAVE_with_name("eval_scope");
4424     CLEAR_ERRSV();
4425     RETURN;
4426 }
4427
4428 PP(pp_entergiven)
4429 {
4430     dVAR; dSP;
4431     register PERL_CONTEXT *cx;
4432     const I32 gimme = GIMME_V;
4433     
4434     ENTER_with_name("given");
4435     SAVETMPS;
4436
4437     SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4438     sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4439
4440     PUSHBLOCK(cx, CXt_GIVEN, SP);
4441     PUSHGIVEN(cx);
4442
4443     RETURN;
4444 }
4445
4446 PP(pp_leavegiven)
4447 {
4448     dVAR; dSP;
4449     register PERL_CONTEXT *cx;
4450     I32 gimme;
4451     SV **newsp;
4452     PMOP *newpm;
4453     PERL_UNUSED_CONTEXT;
4454
4455     POPBLOCK(cx,newpm);
4456     assert(CxTYPE(cx) == CXt_GIVEN);
4457
4458     TAINT_NOT;
4459     SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4460     PL_curpm = newpm;   /* Don't pop $1 et al till now */
4461
4462     LEAVE_with_name("given");
4463     RETURN;
4464 }
4465
4466 /* Helper routines used by pp_smartmatch */
4467 STATIC PMOP *
4468 S_make_matcher(pTHX_ REGEXP *re)
4469 {
4470     dVAR;
4471     PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4472
4473     PERL_ARGS_ASSERT_MAKE_MATCHER;
4474
4475     PM_SETRE(matcher, ReREFCNT_inc(re));
4476
4477     SAVEFREEOP((OP *) matcher);
4478     ENTER_with_name("matcher"); SAVETMPS;
4479     SAVEOP();
4480     return matcher;
4481 }
4482
4483 STATIC bool
4484 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4485 {
4486     dVAR;