Patch t/test.pl so isa_ok() works with objects.
[perl.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             /* Now do some callish stuff. */
2883             SAVETMPS;
2884             SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2885             if (CvISXSUB(cv)) {
2886                 OP* const retop = cx->blk_sub.retop;
2887                 SV **newsp PERL_UNUSED_DECL;
2888                 I32 gimme PERL_UNUSED_DECL;
2889                 if (reified) {
2890                     I32 index;
2891                     for (index=0; index<items; index++)
2892                         sv_2mortal(SP[-index]);
2893                 }
2894
2895                 /* XS subs don't have a CxSUB, so pop it */
2896                 POPBLOCK(cx, PL_curpm);
2897                 /* Push a mark for the start of arglist */
2898                 PUSHMARK(mark);
2899                 PUTBACK;
2900                 (void)(*CvXSUB(cv))(aTHX_ cv);
2901                 LEAVE;
2902                 return retop;
2903             }
2904             else {
2905                 AV* const padlist = CvPADLIST(cv);
2906                 if (CxTYPE(cx) == CXt_EVAL) {
2907                     PL_in_eval = CxOLD_IN_EVAL(cx);
2908                     PL_eval_root = cx->blk_eval.old_eval_root;
2909                     cx->cx_type = CXt_SUB;
2910                 }
2911                 cx->blk_sub.cv = cv;
2912                 cx->blk_sub.olddepth = CvDEPTH(cv);
2913
2914                 CvDEPTH(cv)++;
2915                 if (CvDEPTH(cv) < 2)
2916                     SvREFCNT_inc_simple_void_NN(cv);
2917                 else {
2918                     if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION))
2919                         sub_crush_depth(cv);
2920                     pad_push(padlist, CvDEPTH(cv));
2921                 }
2922                 PL_curcop = cx->blk_oldcop;
2923                 SAVECOMPPAD();
2924                 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2925                 if (CxHASARGS(cx))
2926                 {
2927                     AV *const av = MUTABLE_AV(PAD_SVl(0));
2928
2929                     cx->blk_sub.savearray = GvAV(PL_defgv);
2930                     GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2931                     CX_CURPAD_SAVE(cx->blk_sub);
2932                     cx->blk_sub.argarray = av;
2933
2934                     if (items >= AvMAX(av) + 1) {
2935                         SV **ary = AvALLOC(av);
2936                         if (AvARRAY(av) != ary) {
2937                             AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2938                             AvARRAY(av) = ary;
2939                         }
2940                         if (items >= AvMAX(av) + 1) {
2941                             AvMAX(av) = items - 1;
2942                             Renew(ary,items+1,SV*);
2943                             AvALLOC(av) = ary;
2944                             AvARRAY(av) = ary;
2945                         }
2946                     }
2947                     ++mark;
2948                     Copy(mark,AvARRAY(av),items,SV*);
2949                     AvFILLp(av) = items - 1;
2950                     assert(!AvREAL(av));
2951                     if (reified) {
2952                         /* transfer 'ownership' of refcnts to new @_ */
2953                         AvREAL_on(av);
2954                         AvREIFY_off(av);
2955                     }
2956                     while (items--) {
2957                         if (*mark)
2958                             SvTEMP_off(*mark);
2959                         mark++;
2960                     }
2961                 }
2962                 if (PERLDB_SUB) {       /* Checking curstash breaks DProf. */
2963                     Perl_get_db_sub(aTHX_ NULL, cv);
2964                     if (PERLDB_GOTO) {
2965                         CV * const gotocv = get_cvs("DB::goto", 0);
2966                         if (gotocv) {
2967                             PUSHMARK( PL_stack_sp );
2968                             call_sv(MUTABLE_SV(gotocv), G_SCALAR | G_NODEBUG);
2969                             PL_stack_sp--;
2970                         }
2971                     }
2972                 }
2973                 RETURNOP(CvSTART(cv));
2974             }
2975         }
2976         else {
2977             label = SvPV_nolen_const(sv);
2978             if (!(do_dump || *label))
2979                 DIE(aTHX_ must_have_label);
2980         }
2981     }
2982     else if (PL_op->op_flags & OPf_SPECIAL) {
2983         if (! do_dump)
2984             DIE(aTHX_ must_have_label);
2985     }
2986     else
2987         label = cPVOP->op_pv;
2988
2989     PERL_ASYNC_CHECK();
2990
2991     if (label && *label) {
2992         OP *gotoprobe = NULL;
2993         bool leaving_eval = FALSE;
2994         bool in_block = FALSE;
2995         PERL_CONTEXT *last_eval_cx = NULL;
2996
2997         /* find label */
2998
2999         PL_lastgotoprobe = NULL;
3000         *enterops = 0;
3001         for (ix = cxstack_ix; ix >= 0; ix--) {
3002             cx = &cxstack[ix];
3003             switch (CxTYPE(cx)) {
3004             case CXt_EVAL:
3005                 leaving_eval = TRUE;
3006                 if (!CxTRYBLOCK(cx)) {
3007                     gotoprobe = (last_eval_cx ?
3008                                 last_eval_cx->blk_eval.old_eval_root :
3009                                 PL_eval_root);
3010                     last_eval_cx = cx;
3011                     break;
3012                 }
3013                 /* else fall through */
3014             case CXt_LOOP_LAZYIV:
3015             case CXt_LOOP_LAZYSV:
3016             case CXt_LOOP_FOR:
3017             case CXt_LOOP_PLAIN:
3018             case CXt_GIVEN:
3019             case CXt_WHEN:
3020                 gotoprobe = cx->blk_oldcop->op_sibling;
3021                 break;
3022             case CXt_SUBST:
3023                 continue;
3024             case CXt_BLOCK:
3025                 if (ix) {
3026                     gotoprobe = cx->blk_oldcop->op_sibling;
3027                     in_block = TRUE;
3028                 } else
3029                     gotoprobe = PL_main_root;
3030                 break;
3031             case CXt_SUB:
3032                 if (CvDEPTH(cx->blk_sub.cv) && !CxMULTICALL(cx)) {
3033                     gotoprobe = CvROOT(cx->blk_sub.cv);
3034                     break;
3035                 }
3036                 /* FALL THROUGH */
3037             case CXt_FORMAT:
3038             case CXt_NULL:
3039                 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
3040             default:
3041                 if (ix)
3042                     DIE(aTHX_ "panic: goto");
3043                 gotoprobe = PL_main_root;
3044                 break;
3045             }
3046             if (gotoprobe) {
3047                 retop = dofindlabel(gotoprobe, label,
3048                                     enterops, enterops + GOTO_DEPTH);
3049                 if (retop)
3050                     break;
3051                 if (gotoprobe->op_sibling &&
3052                         gotoprobe->op_sibling->op_type == OP_UNSTACK &&
3053                         gotoprobe->op_sibling->op_sibling) {
3054                     retop = dofindlabel(gotoprobe->op_sibling->op_sibling,
3055                                         label, enterops, enterops + GOTO_DEPTH);
3056                     if (retop)
3057                         break;
3058                 }
3059             }
3060             PL_lastgotoprobe = gotoprobe;
3061         }
3062         if (!retop)
3063             DIE(aTHX_ "Can't find label %s", label);
3064
3065         /* if we're leaving an eval, check before we pop any frames
3066            that we're not going to punt, otherwise the error
3067            won't be caught */
3068
3069         if (leaving_eval && *enterops && enterops[1]) {
3070             I32 i;
3071             for (i = 1; enterops[i]; i++)
3072                 if (enterops[i]->op_type == OP_ENTERITER)
3073                     DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3074         }
3075
3076         if (*enterops && enterops[1]) {
3077             I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3078             if (enterops[i])
3079                 deprecate("\"goto\" to jump into a construct");
3080         }
3081
3082         /* pop unwanted frames */
3083
3084         if (ix < cxstack_ix) {
3085             I32 oldsave;
3086
3087             if (ix < 0)
3088                 ix = 0;
3089             dounwind(ix);
3090             TOPBLOCK(cx);
3091             oldsave = PL_scopestack[PL_scopestack_ix];
3092             LEAVE_SCOPE(oldsave);
3093         }
3094
3095         /* push wanted frames */
3096
3097         if (*enterops && enterops[1]) {
3098             OP * const oldop = PL_op;
3099             ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
3100             for (; enterops[ix]; ix++) {
3101                 PL_op = enterops[ix];
3102                 /* Eventually we may want to stack the needed arguments
3103                  * for each op.  For now, we punt on the hard ones. */
3104                 if (PL_op->op_type == OP_ENTERITER)
3105                     DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
3106                 PL_op->op_ppaddr(aTHX);
3107             }
3108             PL_op = oldop;
3109         }
3110     }
3111
3112     if (do_dump) {
3113 #ifdef VMS
3114         if (!retop) retop = PL_main_start;
3115 #endif
3116         PL_restartop = retop;
3117         PL_do_undump = TRUE;
3118
3119         my_unexec();
3120
3121         PL_restartop = 0;               /* hmm, must be GNU unexec().. */
3122         PL_do_undump = FALSE;
3123     }
3124
3125     RETURNOP(retop);
3126 }
3127
3128 PP(pp_exit)
3129 {
3130     dVAR;
3131     dSP;
3132     I32 anum;
3133
3134     if (MAXARG < 1)
3135         anum = 0;
3136     else if (!TOPs) {
3137         anum = 0; (void)POPs;
3138     }
3139     else {
3140         anum = SvIVx(POPs);
3141 #ifdef VMS
3142         if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
3143             anum = 0;
3144         VMSISH_HUSHED  = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
3145 #endif
3146     }
3147     PL_exit_flags |= PERL_EXIT_EXPECTED;
3148 #ifdef PERL_MAD
3149     /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
3150     if (anum || !(PL_minus_c && PL_madskills))
3151         my_exit(anum);
3152 #else
3153     my_exit(anum);
3154 #endif
3155     PUSHs(&PL_sv_undef);
3156     RETURN;
3157 }
3158
3159 /* Eval. */
3160
3161 STATIC void
3162 S_save_lines(pTHX_ AV *array, SV *sv)
3163 {
3164     const char *s = SvPVX_const(sv);
3165     const char * const send = SvPVX_const(sv) + SvCUR(sv);
3166     I32 line = 1;
3167
3168     PERL_ARGS_ASSERT_SAVE_LINES;
3169
3170     while (s && s < send) {
3171         const char *t;
3172         SV * const tmpstr = newSV_type(SVt_PVMG);
3173
3174         t = (const char *)memchr(s, '\n', send - s);
3175         if (t)
3176             t++;
3177         else
3178             t = send;
3179
3180         sv_setpvn(tmpstr, s, t - s);
3181         av_store(array, line++, tmpstr);
3182         s = t;
3183     }
3184 }
3185
3186 /*
3187 =for apidoc docatch
3188
3189 Check for the cases 0 or 3 of cur_env.je_ret, only used inside an eval context.
3190
3191 0 is used as continue inside eval,
3192
3193 3 is used for a die caught by an inner eval - continue inner loop
3194
3195 See cop.h: je_mustcatch, when set at any runlevel to TRUE, means eval ops must
3196 establish a local jmpenv to handle exception traps.
3197
3198 =cut
3199 */
3200 STATIC OP *
3201 S_docatch(pTHX_ OP *o)
3202 {
3203     dVAR;
3204     int ret;
3205     OP * const oldop = PL_op;
3206     dJMPENV;
3207
3208 #ifdef DEBUGGING
3209     assert(CATCH_GET == TRUE);
3210 #endif
3211     PL_op = o;
3212
3213     JMPENV_PUSH(ret);
3214     switch (ret) {
3215     case 0:
3216         assert(cxstack_ix >= 0);
3217         assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3218         cxstack[cxstack_ix].blk_eval.cur_top_env = PL_top_env;
3219  redo_body:
3220         CALLRUNOPS(aTHX);
3221         break;
3222     case 3:
3223         /* die caught by an inner eval - continue inner loop */
3224         if (PL_restartop && PL_restartjmpenv == PL_top_env) {
3225             PL_restartjmpenv = NULL;
3226             PL_op = PL_restartop;
3227             PL_restartop = 0;
3228             goto redo_body;
3229         }
3230         /* FALL THROUGH */
3231     default:
3232         JMPENV_POP;
3233         PL_op = oldop;
3234         JMPENV_JUMP(ret);
3235         /* NOTREACHED */
3236     }
3237     JMPENV_POP;
3238     PL_op = oldop;
3239     return NULL;
3240 }
3241
3242 /* James Bond: Do you expect me to talk?
3243    Auric Goldfinger: No, Mr. Bond. I expect you to die.
3244
3245    This code is an ugly hack, doesn't work with lexicals in subroutines that are
3246    called more than once, and is only used by regcomp.c, for (?{}) blocks.
3247
3248    Currently it is not used outside the core code. Best if it stays that way.
3249
3250    Hence it's now deprecated, and will be removed.
3251 */
3252 OP *
3253 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp)
3254 /* sv Text to convert to OP tree. */
3255 /* startop op_free() this to undo. */
3256 /* code Short string id of the caller. */
3257 {
3258     PERL_ARGS_ASSERT_SV_COMPILE_2OP;
3259     return Perl_sv_compile_2op_is_broken(aTHX_ sv, startop, code, padp);
3260 }
3261
3262 /* Don't use this. It will go away without warning once the regexp engine is
3263    refactored not to use it.  */
3264 OP *
3265 Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
3266                               PAD **padp)
3267 {
3268     dVAR; dSP;                          /* Make POPBLOCK work. */
3269     PERL_CONTEXT *cx;
3270     SV **newsp;
3271     I32 gimme = G_VOID;
3272     I32 optype;
3273     OP dummy;
3274     char tbuf[TYPE_DIGITS(long) + 12 + 10];
3275     char *tmpbuf = tbuf;
3276     char *safestr;
3277     int runtime;
3278     CV* runcv = NULL;   /* initialise to avoid compiler warnings */
3279     STRLEN len;
3280     bool need_catch;
3281
3282     PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
3283
3284     ENTER_with_name("eval");
3285     lex_start(sv, NULL, LEX_START_SAME_FILTER);
3286     SAVETMPS;
3287     /* switch to eval mode */
3288
3289     if (IN_PERL_COMPILETIME) {
3290         SAVECOPSTASH_FREE(&PL_compiling);
3291         CopSTASH_set(&PL_compiling, PL_curstash);
3292     }
3293     if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3294         SV * const sv = sv_newmortal();
3295         Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
3296                        code, (unsigned long)++PL_evalseq,
3297                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3298         tmpbuf = SvPVX(sv);
3299         len = SvCUR(sv);
3300     }
3301     else
3302         len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(%.10s_eval %lu)", code,
3303                           (unsigned long)++PL_evalseq);
3304     SAVECOPFILE_FREE(&PL_compiling);
3305     CopFILE_set(&PL_compiling, tmpbuf+2);
3306     SAVECOPLINE(&PL_compiling);
3307     CopLINE_set(&PL_compiling, 1);
3308     /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3309        deleting the eval's FILEGV from the stash before gv_check() runs
3310        (i.e. before run-time proper). To work around the coredump that
3311        ensues, we always turn GvMULTI_on for any globals that were
3312        introduced within evals. See force_ident(). GSAR 96-10-12 */
3313     safestr = savepvn(tmpbuf, len);
3314     SAVEDELETE(PL_defstash, safestr, len);
3315     SAVEHINTS();
3316 #ifdef OP_IN_REGISTER
3317     PL_opsave = op;
3318 #else
3319     SAVEVPTR(PL_op);
3320 #endif
3321
3322     /* we get here either during compilation, or via pp_regcomp at runtime */
3323     runtime = IN_PERL_RUNTIME;
3324     if (runtime)
3325     {
3326         runcv = find_runcv(NULL);
3327
3328         /* At run time, we have to fetch the hints from PL_curcop. */
3329         PL_hints = PL_curcop->cop_hints;
3330         if (PL_hints & HINT_LOCALIZE_HH) {
3331             /* SAVEHINTS created a new HV in PL_hintgv, which we
3332                need to GC */
3333             SvREFCNT_dec(GvHV(PL_hintgv));
3334             GvHV(PL_hintgv) =
3335              refcounted_he_chain_2hv(PL_curcop->cop_hints_hash, 0);
3336             hv_magic(GvHV(PL_hintgv), NULL, PERL_MAGIC_hints);
3337         }
3338         SAVECOMPILEWARNINGS();
3339         PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
3340         cophh_free(CopHINTHASH_get(&PL_compiling));
3341         /* XXX Does this need to avoid copying a label? */
3342         PL_compiling.cop_hints_hash
3343          = cophh_copy(PL_curcop->cop_hints_hash);
3344     }
3345
3346     PL_op = &dummy;
3347     PL_op->op_type = OP_ENTEREVAL;
3348     PL_op->op_flags = 0;                        /* Avoid uninit warning. */
3349     PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP);
3350     PUSHEVAL(cx, 0);
3351     need_catch = CATCH_GET;
3352     CATCH_SET(TRUE);
3353
3354     if (runtime)
3355         (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq, NULL);
3356     else
3357         (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax, NULL);
3358     CATCH_SET(need_catch);
3359     POPBLOCK(cx,PL_curpm);
3360     POPEVAL(cx);
3361
3362     (*startop)->op_type = OP_NULL;
3363     (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
3364     /* XXX DAPM do this properly one year */
3365     *padp = MUTABLE_AV(SvREFCNT_inc_simple(PL_comppad));
3366     LEAVE_with_name("eval");
3367     if (IN_PERL_COMPILETIME)
3368         CopHINTS_set(&PL_compiling, PL_hints);
3369 #ifdef OP_IN_REGISTER
3370     op = PL_opsave;
3371 #endif
3372     PERL_UNUSED_VAR(newsp);
3373     PERL_UNUSED_VAR(optype);
3374
3375     return PL_eval_start;
3376 }
3377
3378
3379 /*
3380 =for apidoc find_runcv
3381
3382 Locate the CV corresponding to the currently executing sub or eval.
3383 If db_seqp is non_null, skip CVs that are in the DB package and populate
3384 *db_seqp with the cop sequence number at the point that the DB:: code was
3385 entered. (allows debuggers to eval in the scope of the breakpoint rather
3386 than in the scope of the debugger itself).
3387
3388 =cut
3389 */
3390
3391 CV*
3392 Perl_find_runcv(pTHX_ U32 *db_seqp)
3393 {
3394     dVAR;
3395     PERL_SI      *si;
3396
3397     if (db_seqp)
3398         *db_seqp = PL_curcop->cop_seq;
3399     for (si = PL_curstackinfo; si; si = si->si_prev) {
3400         I32 ix;
3401         for (ix = si->si_cxix; ix >= 0; ix--) {
3402             const PERL_CONTEXT *cx = &(si->si_cxstack[ix]);
3403             if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
3404                 CV * const cv = cx->blk_sub.cv;
3405                 /* skip DB:: code */
3406                 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
3407                     *db_seqp = cx->blk_oldcop->cop_seq;
3408                     continue;
3409                 }
3410                 return cv;
3411             }
3412             else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
3413                 return PL_compcv;
3414         }
3415     }
3416     return PL_main_cv;
3417 }
3418
3419
3420 /* Run yyparse() in a setjmp wrapper. Returns:
3421  *   0: yyparse() successful
3422  *   1: yyparse() failed
3423  *   3: yyparse() died
3424  */
3425 STATIC int
3426 S_try_yyparse(pTHX_ int gramtype)
3427 {
3428     int ret;
3429     dJMPENV;
3430
3431     assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3432     JMPENV_PUSH(ret);
3433     switch (ret) {
3434     case 0:
3435         ret = yyparse(gramtype) ? 1 : 0;
3436         break;
3437     case 3:
3438         break;
3439     default:
3440         JMPENV_POP;
3441         JMPENV_JUMP(ret);
3442         /* NOTREACHED */
3443     }
3444     JMPENV_POP;
3445     return ret;
3446 }
3447
3448
3449 /* Compile a require/do, an eval '', or a /(?{...})/.
3450  * In the last case, startop is non-null, and contains the address of
3451  * a pointer that should be set to the just-compiled code.
3452  * outside is the lexically enclosing CV (if any) that invoked us.
3453  * Returns a bool indicating whether the compile was successful; if so,
3454  * PL_eval_start contains the first op of the compiled ocde; otherwise,
3455  * pushes undef (also croaks if startop != NULL).
3456  */
3457
3458 /* This function is called from three places, sv_compile_2op, pp_return
3459  * and pp_entereval.  These can be distinguished as follows:
3460  *    sv_compile_2op - startop is non-null
3461  *    pp_require     - startop is null; in_require is true
3462  *    pp_entereval   - stortop is null; in_require is false
3463  */
3464
3465 STATIC bool
3466 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq, HV *hh)
3467 {
3468     dVAR; dSP;
3469     OP * const saveop = PL_op;
3470     COP * const oldcurcop = PL_curcop;
3471     bool in_require = (saveop && saveop->op_type == OP_REQUIRE);
3472     int yystatus;
3473
3474     PL_in_eval = (in_require
3475                   ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
3476                   : EVAL_INEVAL);
3477
3478     PUSHMARK(SP);
3479
3480     SAVESPTR(PL_compcv);
3481     PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3482     CvEVAL_on(PL_compcv);
3483     assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
3484     cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
3485     cxstack[cxstack_ix].blk_gimme = gimme;
3486
3487     CvOUTSIDE_SEQ(PL_compcv) = seq;
3488     CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside));
3489
3490     /* set up a scratch pad */
3491
3492     CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
3493     PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
3494
3495
3496     if (!PL_madskills)
3497         SAVEMORTALIZESV(PL_compcv);     /* must remain until end of current statement */
3498
3499     /* make sure we compile in the right package */
3500
3501     if (CopSTASH_ne(PL_curcop, PL_curstash)) {
3502         SAVEGENERICSV(PL_curstash);
3503         PL_curstash = (HV *)SvREFCNT_inc_simple(CopSTASH(PL_curcop));
3504     }
3505     /* XXX:ajgo do we really need to alloc an AV for begin/checkunit */
3506     SAVESPTR(PL_beginav);
3507     PL_beginav = newAV();
3508     SAVEFREESV(PL_beginav);
3509     SAVESPTR(PL_unitcheckav);
3510     PL_unitcheckav = newAV();
3511     SAVEFREESV(PL_unitcheckav);
3512
3513 #ifdef PERL_MAD
3514     SAVEBOOL(PL_madskills);
3515     PL_madskills = 0;
3516 #endif
3517
3518     /* try to compile it */
3519
3520     PL_eval_root = NULL;
3521     PL_curcop = &PL_compiling;
3522     if (saveop && (saveop->op_type != OP_REQUIRE) && (saveop->op_flags & OPf_SPECIAL))
3523         PL_in_eval |= EVAL_KEEPERR;
3524     else
3525         CLEAR_ERRSV();
3526
3527     if (!startop) {
3528         ENTER_with_name("evalcomp");
3529         SAVEHINTS();
3530         if (in_require) {
3531             PL_hints = 0;
3532             hv_clear(GvHV(PL_hintgv));
3533         }
3534         else {
3535             PL_hints = saveop->op_private & OPpEVAL_COPHH
3536                          ? oldcurcop->cop_hints : saveop->op_targ;
3537             if (hh) {
3538                 /* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
3539                 SvREFCNT_dec(GvHV(PL_hintgv));
3540                 GvHV(PL_hintgv) = hh;
3541             }
3542         }
3543         SAVECOMPILEWARNINGS();
3544         if (in_require) {
3545             if (PL_dowarn & G_WARN_ALL_ON)
3546                 PL_compiling.cop_warnings = pWARN_ALL ;
3547             else if (PL_dowarn & G_WARN_ALL_OFF)
3548                 PL_compiling.cop_warnings = pWARN_NONE ;
3549             else
3550                 PL_compiling.cop_warnings = pWARN_STD ;
3551         }
3552         else {
3553             PL_compiling.cop_warnings =
3554                 DUP_WARNINGS(oldcurcop->cop_warnings);
3555             cophh_free(CopHINTHASH_get(&PL_compiling));
3556             if (Perl_cop_fetch_label(aTHX_ oldcurcop, NULL, NULL)) {
3557                 /* The label, if present, is the first entry on the chain. So rather
3558                    than writing a blank label in front of it (which involves an
3559                    allocation), just use the next entry in the chain.  */
3560                 PL_compiling.cop_hints_hash
3561                     = cophh_copy(oldcurcop->cop_hints_hash->refcounted_he_next);
3562                 /* Check the assumption that this removed the label.  */
3563                 assert(Perl_cop_fetch_label(aTHX_ &PL_compiling, NULL, NULL) == NULL);
3564             }
3565             else
3566                 PL_compiling.cop_hints_hash = cophh_copy(oldcurcop->cop_hints_hash);
3567         }
3568     }
3569
3570     CALL_BLOCK_HOOKS(bhk_eval, saveop);
3571
3572     /* note that yyparse() may raise an exception, e.g. C<BEGIN{die}>,
3573      * so honour CATCH_GET and trap it here if necessary */
3574
3575     yystatus = (!in_require && CATCH_GET) ? S_try_yyparse(aTHX_ GRAMPROG) : yyparse(GRAMPROG);
3576
3577     if (!startop && yystatus != 3) LEAVE_with_name("evalcomp");
3578
3579     if (yystatus || PL_parser->error_count || !PL_eval_root) {
3580         SV **newsp;                     /* Used by POPBLOCK. */
3581         PERL_CONTEXT *cx;
3582         I32 optype;                     /* Used by POPEVAL. */
3583         SV *namesv;
3584
3585         cx = NULL;
3586         namesv = NULL;
3587         PERL_UNUSED_VAR(newsp);
3588         PERL_UNUSED_VAR(optype);
3589
3590         /* note that if yystatus == 3, then the EVAL CX block has already
3591          * been popped, and various vars restored */
3592         PL_op = saveop;
3593         if (yystatus != 3) {
3594             if (PL_eval_root) {
3595                 op_free(PL_eval_root);
3596                 PL_eval_root = NULL;
3597             }
3598             SP = PL_stack_base + POPMARK;       /* pop original mark */
3599             if (!startop) {
3600                 POPBLOCK(cx,PL_curpm);
3601                 POPEVAL(cx);
3602                 namesv = cx->blk_eval.old_namesv;
3603             }
3604             LEAVE_with_name("eval"); /* pp_entereval knows about this LEAVE.  */
3605         }
3606
3607         if (in_require) {
3608             if (!cx) {
3609                 /* If cx is still NULL, it means that we didn't go in the
3610                  * POPEVAL branch. */
3611                 cx = &cxstack[cxstack_ix];
3612                 assert(CxTYPE(cx) == CXt_EVAL);
3613                 namesv = cx->blk_eval.old_namesv;
3614             }
3615             (void)hv_store(GvHVn(PL_incgv),
3616                            SvPVX_const(namesv),
3617                            SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
3618                            &PL_sv_undef, 0);
3619             Perl_croak(aTHX_ "%"SVf"Compilation failed in require",
3620                        SVfARG(ERRSV
3621                                 ? ERRSV
3622                                 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3623         }
3624         else if (startop) {
3625             if (yystatus != 3) {
3626                 POPBLOCK(cx,PL_curpm);
3627                 POPEVAL(cx);
3628             }
3629             Perl_croak(aTHX_ "%"SVf"Compilation failed in regexp",
3630                        SVfARG(ERRSV
3631                                 ? ERRSV
3632                                 : newSVpvs_flags("Unknown error\n", SVs_TEMP)));
3633         }
3634         else {
3635             if (!*(SvPVx_nolen_const(ERRSV))) {
3636                 sv_setpvs(ERRSV, "Compilation error");
3637             }
3638         }
3639         PUSHs(&PL_sv_undef);
3640         PUTBACK;
3641         return FALSE;
3642     }
3643     CopLINE_set(&PL_compiling, 0);
3644     if (startop) {
3645         *startop = PL_eval_root;
3646     } else
3647         SAVEFREEOP(PL_eval_root);
3648
3649     DEBUG_x(dump_eval());
3650
3651     /* Register with debugger: */
3652     if (PERLDB_INTER && saveop && saveop->op_type == OP_REQUIRE) {
3653         CV * const cv = get_cvs("DB::postponed", 0);
3654         if (cv) {
3655             dSP;
3656             PUSHMARK(SP);
3657             XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3658             PUTBACK;
3659             call_sv(MUTABLE_SV(cv), G_DISCARD);
3660         }
3661     }
3662
3663     if (PL_unitcheckav) {
3664         OP *es = PL_eval_start;
3665         call_list(PL_scopestack_ix, PL_unitcheckav);
3666         PL_eval_start = es;
3667     }
3668
3669     /* compiled okay, so do it */
3670
3671     CvDEPTH(PL_compcv) = 1;
3672     SP = PL_stack_base + POPMARK;               /* pop original mark */
3673     PL_op = saveop;                     /* The caller may need it. */
3674     PL_parser->lex_state = LEX_NOTPARSING;      /* $^S needs this. */
3675
3676     PUTBACK;
3677     return TRUE;
3678 }
3679
3680 STATIC PerlIO *
3681 S_check_type_and_open(pTHX_ SV *name)
3682 {
3683     Stat_t st;
3684     const char *p = SvPV_nolen_const(name);
3685     const int st_rc = PerlLIO_stat(p, &st);
3686
3687     PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN;
3688
3689     if (st_rc < 0 || S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode)) {
3690         return NULL;
3691     }
3692
3693 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
3694     return PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
3695 #else
3696     return PerlIO_open(p, PERL_SCRIPT_MODE);
3697 #endif
3698 }
3699
3700 #ifndef PERL_DISABLE_PMC
3701 STATIC PerlIO *
3702 S_doopen_pm(pTHX_ SV *name)
3703 {
3704     STRLEN namelen;
3705     const char *p = SvPV_const(name, namelen);
3706
3707     PERL_ARGS_ASSERT_DOOPEN_PM;
3708
3709     if (namelen > 3 && memEQs(p + namelen - 3, 3, ".pm")) {
3710         SV *const pmcsv = sv_newmortal();
3711         Stat_t pmcstat;
3712
3713         SvSetSV_nosteal(pmcsv,name);
3714         sv_catpvn(pmcsv, "c", 1);
3715
3716         if (PerlLIO_stat(SvPV_nolen_const(pmcsv), &pmcstat) >= 0)
3717             return check_type_and_open(pmcsv);
3718     }
3719     return check_type_and_open(name);
3720 }
3721 #else
3722 #  define doopen_pm(name) check_type_and_open(name)
3723 #endif /* !PERL_DISABLE_PMC */
3724
3725 PP(pp_require)
3726 {
3727     dVAR; dSP;
3728     register PERL_CONTEXT *cx;
3729     SV *sv;
3730     const char *name;
3731     STRLEN len;
3732     char * unixname;
3733     STRLEN unixlen;
3734 #ifdef VMS
3735     int vms_unixname = 0;
3736 #endif
3737     const char *tryname = NULL;
3738     SV *namesv = NULL;
3739     const I32 gimme = GIMME_V;
3740     int filter_has_file = 0;
3741     PerlIO *tryrsfp = NULL;
3742     SV *filter_cache = NULL;
3743     SV *filter_state = NULL;
3744     SV *filter_sub = NULL;
3745     SV *hook_sv = NULL;
3746     SV *encoding;
3747     OP *op;
3748
3749     sv = POPs;
3750     if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
3751         sv = sv_2mortal(new_version(sv));
3752         if (!sv_derived_from(PL_patchlevel, "version"))
3753             upg_version(PL_patchlevel, TRUE);
3754         if (cUNOP->op_first->op_type == OP_CONST && cUNOP->op_first->op_private & OPpCONST_NOVER) {
3755             if ( vcmp(sv,PL_patchlevel) <= 0 )
3756                 DIE(aTHX_ "Perls since %"SVf" too modern--this is %"SVf", stopped",
3757                     SVfARG(sv_2mortal(vnormal(sv))),
3758                     SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3759                 );
3760         }
3761         else {
3762             if ( vcmp(sv,PL_patchlevel) > 0 ) {
3763                 I32 first = 0;
3764                 AV *lav;
3765                 SV * const req = SvRV(sv);
3766                 SV * const pv = *hv_fetchs(MUTABLE_HV(req), "original", FALSE);
3767
3768                 /* get the left hand term */
3769                 lav = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(req), "version", FALSE)));
3770
3771                 first  = SvIV(*av_fetch(lav,0,0));
3772                 if (   first > (int)PERL_REVISION    /* probably 'use 6.0' */
3773                     || hv_exists(MUTABLE_HV(req), "qv", 2 ) /* qv style */
3774                     || av_len(lav) > 1               /* FP with > 3 digits */
3775                     || strstr(SvPVX(pv),".0")        /* FP with leading 0 */
3776                    ) {
3777                     DIE(aTHX_ "Perl %"SVf" required--this is only "
3778                         "%"SVf", stopped",
3779                         SVfARG(sv_2mortal(vnormal(req))),
3780                         SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3781                     );
3782                 }
3783                 else { /* probably 'use 5.10' or 'use 5.8' */
3784                     SV *hintsv;
3785                     I32 second = 0;
3786
3787                     if (av_len(lav)>=1) 
3788                         second = SvIV(*av_fetch(lav,1,0));
3789
3790                     second /= second >= 600  ? 100 : 10;
3791                     hintsv = Perl_newSVpvf(aTHX_ "v%d.%d.0",
3792                                            (int)first, (int)second);
3793                     upg_version(hintsv, TRUE);
3794
3795                     DIE(aTHX_ "Perl %"SVf" required (did you mean %"SVf"?)"
3796                         "--this is only %"SVf", stopped",
3797                         SVfARG(sv_2mortal(vnormal(req))),
3798                         SVfARG(sv_2mortal(vnormal(sv_2mortal(hintsv)))),
3799                         SVfARG(sv_2mortal(vnormal(PL_patchlevel)))
3800                     );
3801                 }
3802             }
3803         }
3804
3805         RETPUSHYES;
3806     }
3807     name = SvPV_const(sv, len);
3808     if (!(name && len > 0 && *name))
3809         DIE(aTHX_ "Null filename used");
3810     TAINT_PROPER("require");
3811
3812
3813 #ifdef VMS
3814     /* The key in the %ENV hash is in the syntax of file passed as the argument
3815      * usually this is in UNIX format, but sometimes in VMS format, which
3816      * can result in a module being pulled in more than once.
3817      * To prevent this, the key must be stored in UNIX format if the VMS
3818      * name can be translated to UNIX.
3819      */
3820     if ((unixname = tounixspec(name, NULL)) != NULL) {
3821         unixlen = strlen(unixname);
3822         vms_unixname = 1;
3823     }
3824     else
3825 #endif
3826     {
3827         /* if not VMS or VMS name can not be translated to UNIX, pass it
3828          * through.
3829          */
3830         unixname = (char *) name;
3831         unixlen = len;
3832     }
3833     if (PL_op->op_type == OP_REQUIRE) {
3834         SV * const * const svp = hv_fetch(GvHVn(PL_incgv),
3835                                           unixname, unixlen, 0);
3836         if ( svp ) {
3837             if (*svp != &PL_sv_undef)
3838                 RETPUSHYES;
3839             else
3840                 DIE(aTHX_ "Attempt to reload %s aborted.\n"
3841                             "Compilation failed in require", unixname);
3842         }
3843     }
3844
3845     /* prepare to compile file */
3846
3847     if (path_is_absolute(name)) {
3848         /* At this point, name is SvPVX(sv)  */
3849         tryname = name;
3850         tryrsfp = doopen_pm(sv);
3851     }
3852     if (!tryrsfp) {
3853         AV * const ar = GvAVn(PL_incgv);
3854         I32 i;
3855 #ifdef VMS
3856         if (vms_unixname)
3857 #endif
3858         {
3859             namesv = newSV_type(SVt_PV);
3860             for (i = 0; i <= AvFILL(ar); i++) {
3861                 SV * const dirsv = *av_fetch(ar, i, TRUE);
3862
3863                 if (SvTIED_mg((const SV *)ar, PERL_MAGIC_tied))
3864                     mg_get(dirsv);
3865                 if (SvROK(dirsv)) {
3866                     int count;
3867                     SV **svp;
3868                     SV *loader = dirsv;
3869
3870                     if (SvTYPE(SvRV(loader)) == SVt_PVAV
3871                         && !sv_isobject(loader))
3872                     {
3873                         loader = *av_fetch(MUTABLE_AV(SvRV(loader)), 0, TRUE);
3874                     }
3875
3876                     Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3877                                    PTR2UV(SvRV(dirsv)), name);
3878                     tryname = SvPVX_const(namesv);
3879                     tryrsfp = NULL;
3880
3881                     ENTER_with_name("call_INC");
3882                     SAVETMPS;
3883                     EXTEND(SP, 2);
3884
3885                     PUSHMARK(SP);
3886                     PUSHs(dirsv);
3887                     PUSHs(sv);
3888                     PUTBACK;
3889                     if (sv_isobject(loader))
3890                         count = call_method("INC", G_ARRAY);
3891                     else
3892                         count = call_sv(loader, G_ARRAY);
3893                     SPAGAIN;
3894
3895                     if (count > 0) {
3896                         int i = 0;
3897                         SV *arg;
3898
3899                         SP -= count - 1;
3900                         arg = SP[i++];
3901
3902                         if (SvROK(arg) && (SvTYPE(SvRV(arg)) <= SVt_PVLV)
3903                             && !isGV_with_GP(SvRV(arg))) {
3904                             filter_cache = SvRV(arg);
3905                             SvREFCNT_inc_simple_void_NN(filter_cache);
3906
3907                             if (i < count) {
3908                                 arg = SP[i++];
3909                             }
3910                         }
3911
3912                         if (SvROK(arg) && isGV_with_GP(SvRV(arg))) {
3913                             arg = SvRV(arg);
3914                         }
3915
3916                         if (isGV_with_GP(arg)) {
3917                             IO * const io = GvIO((const GV *)arg);
3918
3919                             ++filter_has_file;
3920
3921                             if (io) {
3922                                 tryrsfp = IoIFP(io);
3923                                 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3924                                     PerlIO_close(IoOFP(io));
3925                                 }
3926                                 IoIFP(io) = NULL;
3927                                 IoOFP(io) = NULL;
3928                             }
3929
3930                             if (i < count) {
3931                                 arg = SP[i++];
3932                             }
3933                         }
3934
3935                         if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3936                             filter_sub = arg;
3937                             SvREFCNT_inc_simple_void_NN(filter_sub);
3938
3939                             if (i < count) {
3940                                 filter_state = SP[i];
3941                                 SvREFCNT_inc_simple_void(filter_state);
3942                             }
3943                         }
3944
3945                         if (!tryrsfp && (filter_cache || filter_sub)) {
3946                             tryrsfp = PerlIO_open(BIT_BUCKET,
3947                                                   PERL_SCRIPT_MODE);
3948                         }
3949                         SP--;
3950                     }
3951
3952                     PUTBACK;
3953                     FREETMPS;
3954                     LEAVE_with_name("call_INC");
3955
3956                     /* Adjust file name if the hook has set an %INC entry.
3957                        This needs to happen after the FREETMPS above.  */
3958                     svp = hv_fetch(GvHVn(PL_incgv), name, len, 0);
3959                     if (svp)
3960                         tryname = SvPV_nolen_const(*svp);
3961
3962                     if (tryrsfp) {
3963                         hook_sv = dirsv;
3964                         break;
3965                     }
3966
3967                     filter_has_file = 0;
3968                     if (filter_cache) {
3969                         SvREFCNT_dec(filter_cache);
3970                         filter_cache = NULL;
3971                     }
3972                     if (filter_state) {
3973                         SvREFCNT_dec(filter_state);
3974                         filter_state = NULL;
3975                     }
3976                     if (filter_sub) {
3977                         SvREFCNT_dec(filter_sub);
3978                         filter_sub = NULL;
3979                     }
3980                 }
3981                 else {
3982                   if (!path_is_absolute(name)
3983                   ) {
3984                     const char *dir;
3985                     STRLEN dirlen;
3986
3987                     if (SvOK(dirsv)) {
3988                         dir = SvPV_const(dirsv, dirlen);
3989                     } else {
3990                         dir = "";
3991                         dirlen = 0;
3992                     }
3993
3994 #ifdef VMS
3995                     char *unixdir;
3996                     if ((unixdir = tounixpath(dir, NULL)) == NULL)
3997                         continue;
3998                     sv_setpv(namesv, unixdir);
3999                     sv_catpv(namesv, unixname);
4000 #else
4001 #  ifdef __SYMBIAN32__
4002                     if (PL_origfilename[0] &&
4003                         PL_origfilename[1] == ':' &&
4004                         !(dir[0] && dir[1] == ':'))
4005                         Perl_sv_setpvf(aTHX_ namesv,
4006                                        "%c:%s\\%s",
4007                                        PL_origfilename[0],
4008                                        dir, name);
4009                     else
4010                         Perl_sv_setpvf(aTHX_ namesv,
4011                                        "%s\\%s",
4012                                        dir, name);
4013 #  else
4014                     /* The equivalent of                    
4015                        Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
4016                        but without the need to parse the format string, or
4017                        call strlen on either pointer, and with the correct
4018                        allocation up front.  */
4019                     {
4020                         char *tmp = SvGROW(namesv, dirlen + len + 2);
4021
4022                         memcpy(tmp, dir, dirlen);
4023                         tmp +=dirlen;
4024                         *tmp++ = '/';
4025                         /* name came from an SV, so it will have a '\0' at the
4026                            end that we can copy as part of this memcpy().  */
4027                         memcpy(tmp, name, len + 1);
4028
4029                         SvCUR_set(namesv, dirlen + len + 1);
4030                         SvPOK_on(namesv);
4031                     }
4032 #  endif
4033 #endif
4034                     TAINT_PROPER("require");
4035                     tryname = SvPVX_const(namesv);
4036                     tryrsfp = doopen_pm(namesv);
4037                     if (tryrsfp) {
4038                         if (tryname[0] == '.' && tryname[1] == '/') {
4039                             ++tryname;
4040                             while (*++tryname == '/');
4041                         }
4042                         break;
4043                     }
4044                     else if (errno == EMFILE)
4045                         /* no point in trying other paths if out of handles */
4046                         break;
4047                   }
4048                 }
4049             }
4050         }
4051     }
4052     sv_2mortal(namesv);
4053     if (!tryrsfp) {
4054         if (PL_op->op_type == OP_REQUIRE) {
4055             if(errno == EMFILE) {
4056                 /* diag_listed_as: Can't locate %s */
4057                 DIE(aTHX_ "Can't locate %s:   %s", name, Strerror(errno));
4058             } else {
4059                 if (namesv) {                   /* did we lookup @INC? */
4060                     AV * const ar = GvAVn(PL_incgv);
4061                     I32 i;
4062                     SV *const inc = newSVpvs_flags("", SVs_TEMP);
4063                     for (i = 0; i <= AvFILL(ar); i++) {
4064                         sv_catpvs(inc, " ");
4065                         sv_catsv(inc, *av_fetch(ar, i, TRUE));
4066                     }
4067
4068                     /* diag_listed_as: Can't locate %s */
4069                     DIE(aTHX_
4070                         "Can't locate %s in @INC%s%s (@INC contains:%" SVf ")",
4071                         name,
4072                         (memEQ(name + len - 2, ".h", 3)
4073                          ? " (change .h to .ph maybe?) (did you run h2ph?)" : ""),
4074                         (memEQ(name + len - 3, ".ph", 4)
4075                          ? " (did you run h2ph?)" : ""),
4076                         inc
4077                         );
4078                 }
4079             }
4080             DIE(aTHX_ "Can't locate %s", name);
4081         }
4082
4083         RETPUSHUNDEF;
4084     }
4085     else
4086         SETERRNO(0, SS_NORMAL);
4087
4088     /* Assume success here to prevent recursive requirement. */
4089     /* name is never assigned to again, so len is still strlen(name)  */
4090     /* Check whether a hook in @INC has already filled %INC */
4091     if (!hook_sv) {
4092         (void)hv_store(GvHVn(PL_incgv),
4093                        unixname, unixlen, newSVpv(tryname,0),0);
4094     } else {
4095         SV** const svp = hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
4096         if (!svp)
4097             (void)hv_store(GvHVn(PL_incgv),
4098                            unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
4099     }
4100
4101     ENTER_with_name("eval");
4102     SAVETMPS;
4103     SAVECOPFILE_FREE(&PL_compiling);
4104     CopFILE_set(&PL_compiling, tryname);
4105     lex_start(NULL, tryrsfp, 0);
4106
4107     if (filter_sub || filter_cache) {
4108         /* We can use the SvPV of the filter PVIO itself as our cache, rather
4109            than hanging another SV from it. In turn, filter_add() optionally
4110            takes the SV to use as the filter (or creates a new SV if passed
4111            NULL), so simply pass in whatever value filter_cache has.  */
4112         SV * const datasv = filter_add(S_run_user_filter, filter_cache);
4113         IoLINES(datasv) = filter_has_file;
4114         IoTOP_GV(datasv) = MUTABLE_GV(filter_state);
4115         IoBOTTOM_GV(datasv) = MUTABLE_GV(filter_sub);
4116     }
4117
4118     /* switch to eval mode */
4119     PUSHBLOCK(cx, CXt_EVAL, SP);
4120     PUSHEVAL(cx, name);
4121     cx->blk_eval.retop = PL_op->op_next;
4122
4123     SAVECOPLINE(&PL_compiling);
4124     CopLINE_set(&PL_compiling, 0);
4125
4126     PUTBACK;
4127
4128     /* Store and reset encoding. */
4129     encoding = PL_encoding;
4130     PL_encoding = NULL;
4131
4132     if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq, NULL))
4133         op = DOCATCH(PL_eval_start);
4134     else
4135         op = PL_op->op_next;
4136
4137     /* Restore encoding. */
4138     PL_encoding = encoding;
4139
4140     return op;
4141 }
4142
4143 /* This is a op added to hold the hints hash for
4144    pp_entereval. The hash can be modified by the code
4145    being eval'ed, so we return a copy instead. */
4146
4147 PP(pp_hintseval)
4148 {
4149     dVAR;
4150     dSP;
4151     mXPUSHs(MUTABLE_SV(hv_copy_hints_hv(MUTABLE_HV(cSVOP_sv))));
4152     RETURN;
4153 }
4154
4155
4156 PP(pp_entereval)
4157 {
4158     dVAR; dSP;
4159     register PERL_CONTEXT *cx;
4160     SV *sv;
4161     const I32 gimme = GIMME_V;
4162     const U32 was = PL_breakable_sub_gen;
4163     char tbuf[TYPE_DIGITS(long) + 12];
4164     bool saved_delete = FALSE;
4165     char *tmpbuf = tbuf;
4166     STRLEN len;
4167     CV* runcv;
4168     U32 seq, lex_flags = 0;
4169     HV *saved_hh = NULL;
4170     const bool bytes = PL_op->op_private & OPpEVAL_BYTES;
4171
4172     if (PL_op->op_private & OPpEVAL_HAS_HH) {
4173         saved_hh = MUTABLE_HV(SvREFCNT_inc(POPs));
4174     }
4175     else if (PL_hints & HINT_LOCALIZE_HH || (
4176                 PL_op->op_private & OPpEVAL_COPHH
4177              && PL_curcop->cop_hints & HINT_LOCALIZE_HH
4178             )) {
4179         saved_hh = cop_hints_2hv(PL_curcop, 0);
4180         hv_magic(saved_hh, NULL, PERL_MAGIC_hints);
4181     }
4182     sv = POPs;
4183     if (!SvPOK(sv)) {
4184         /* make sure we've got a plain PV (no overload etc) before testing
4185          * for taint. Making a copy here is probably overkill, but better
4186          * safe than sorry */
4187         STRLEN len;
4188         const char * const p = SvPV_const(sv, len);
4189
4190         sv = newSVpvn_flags(p, len, SVs_TEMP | SvUTF8(sv));
4191         lex_flags |= LEX_START_COPIED;
4192
4193         if (bytes && SvUTF8(sv))
4194             SvPVbyte_force(sv, len);
4195     }
4196     else if (bytes && SvUTF8(sv)) {
4197         /* Don't modify someone else's scalar */
4198         STRLEN len;
4199         sv = newSVsv(sv);
4200         (void)sv_2mortal(sv);
4201         SvPVbyte_force(sv,len);
4202         lex_flags |= LEX_START_COPIED;
4203     }
4204
4205     TAINT_IF(SvTAINTED(sv));
4206     TAINT_PROPER("eval");
4207
4208     ENTER_with_name("eval");
4209     lex_start(sv, NULL, lex_flags | (PL_op->op_private & OPpEVAL_UNICODE
4210                            ? LEX_IGNORE_UTF8_HINTS
4211                            : bytes ? LEX_EVALBYTES : LEX_START_SAME_FILTER
4212                         )
4213              );
4214     SAVETMPS;
4215
4216     /* switch to eval mode */
4217
4218     if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
4219         SV * const temp_sv = sv_newmortal();
4220         Perl_sv_setpvf(aTHX_ temp_sv, "_<(eval %lu)[%s:%"IVdf"]",
4221                        (unsigned long)++PL_evalseq,
4222                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
4223         tmpbuf = SvPVX(temp_sv);
4224         len = SvCUR(temp_sv);
4225     }
4226     else
4227         len = my_snprintf(tmpbuf, sizeof(tbuf), "_<(eval %lu)", (unsigned long)++PL_evalseq);
4228     SAVECOPFILE_FREE(&PL_compiling);
4229     CopFILE_set(&PL_compiling, tmpbuf+2);
4230     SAVECOPLINE(&PL_compiling);
4231     CopLINE_set(&PL_compiling, 1);
4232     /* special case: an eval '' executed within the DB package gets lexically
4233      * placed in the first non-DB CV rather than the current CV - this
4234      * allows the debugger to execute code, find lexicals etc, in the
4235      * scope of the code being debugged. Passing &seq gets find_runcv
4236      * to do the dirty work for us */
4237     runcv = find_runcv(&seq);
4238
4239     PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
4240     PUSHEVAL(cx, 0);
4241     cx->blk_eval.retop = PL_op->op_next;
4242
4243     /* prepare to compile string */
4244
4245     if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash)
4246         save_lines(CopFILEAV(&PL_compiling), PL_parser->linestr);
4247     else {
4248         /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
4249            deleting the eval's FILEGV from the stash before gv_check() runs
4250            (i.e. before run-time proper). To work around the coredump that
4251            ensues, we always turn GvMULTI_on for any globals that were
4252            introduced within evals. See force_ident(). GSAR 96-10-12 */
4253         char *const safestr = savepvn(tmpbuf, len);
4254         SAVEDELETE(PL_defstash, safestr, len);
4255         saved_delete = TRUE;
4256     }
4257     
4258     PUTBACK;
4259
4260     if (doeval(gimme, NULL, runcv, seq, saved_hh)) {
4261         if (was != PL_breakable_sub_gen /* Some subs defined here. */
4262             ? (PERLDB_LINE || PERLDB_SAVESRC)
4263             :  PERLDB_SAVESRC_NOSUBS) {
4264             /* Retain the filegv we created.  */
4265         } else if (!saved_delete) {
4266             char *const safestr = savepvn(tmpbuf, len);
4267             SAVEDELETE(PL_defstash, safestr, len);
4268         }
4269         return DOCATCH(PL_eval_start);
4270     } else {
4271         /* We have already left the scope set up earlier thanks to the LEAVE
4272            in doeval().  */
4273         if (was != PL_breakable_sub_gen /* Some subs defined here. */
4274             ? (PERLDB_LINE || PERLDB_SAVESRC)
4275             :  PERLDB_SAVESRC_INVALID) {
4276             /* Retain the filegv we created.  */
4277         } else if (!saved_delete) {
4278             (void)hv_delete(PL_defstash, tmpbuf, len, G_DISCARD);
4279         }
4280         return PL_op->op_next;
4281     }
4282 }
4283
4284 PP(pp_leaveeval)
4285 {
4286     dVAR; dSP;
4287     SV **newsp;
4288     PMOP *newpm;
4289     I32 gimme;
4290     register PERL_CONTEXT *cx;
4291     OP *retop;
4292     const U8 save_flags = PL_op -> op_flags;
4293     I32 optype;
4294     SV *namesv;
4295
4296     PERL_ASYNC_CHECK();
4297     POPBLOCK(cx,newpm);
4298     POPEVAL(cx);
4299     namesv = cx->blk_eval.old_namesv;
4300     retop = cx->blk_eval.retop;
4301
4302     TAINT_NOT;
4303     SP = adjust_stack_on_leave((gimme == G_VOID) ? SP : newsp, SP, newsp,
4304                                 gimme, SVs_TEMP);
4305     PL_curpm = newpm;   /* Don't pop $1 et al till now */
4306
4307 #ifdef DEBUGGING
4308     assert(CvDEPTH(PL_compcv) == 1);
4309 #endif
4310     CvDEPTH(PL_compcv) = 0;
4311
4312     if (optype == OP_REQUIRE &&
4313         !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
4314     {
4315         /* Unassume the success we assumed earlier. */
4316         (void)hv_delete(GvHVn(PL_incgv),
4317                         SvPVX_const(namesv),
4318                         SvUTF8(namesv) ? -(I32)SvCUR(namesv) : (I32)SvCUR(namesv),
4319                         G_DISCARD);
4320         retop = Perl_die(aTHX_ "%"SVf" did not return a true value",
4321                                SVfARG(namesv));
4322         /* die_unwind() did LEAVE, or we won't be here */
4323     }
4324     else {
4325         LEAVE_with_name("eval");
4326         if (!(save_flags & OPf_SPECIAL)) {
4327             CLEAR_ERRSV();
4328         }
4329     }
4330
4331     RETURNOP(retop);
4332 }
4333
4334 /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it
4335    close to the related Perl_create_eval_scope.  */
4336 void
4337 Perl_delete_eval_scope(pTHX)
4338 {
4339     SV **newsp;
4340     PMOP *newpm;
4341     I32 gimme;
4342     register PERL_CONTEXT *cx;
4343     I32 optype;
4344         
4345     POPBLOCK(cx,newpm);
4346     POPEVAL(cx);
4347     PL_curpm = newpm;
4348     LEAVE_with_name("eval_scope");
4349     PERL_UNUSED_VAR(newsp);
4350     PERL_UNUSED_VAR(gimme);
4351     PERL_UNUSED_VAR(optype);
4352 }
4353
4354 /* Common-ish code salvaged from Perl_call_sv and pp_entertry, because it was
4355    also needed by Perl_fold_constants.  */
4356 PERL_CONTEXT *
4357 Perl_create_eval_scope(pTHX_ U32 flags)
4358 {
4359     PERL_CONTEXT *cx;
4360     const I32 gimme = GIMME_V;
4361         
4362     ENTER_with_name("eval_scope");
4363     SAVETMPS;
4364
4365     PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
4366     PUSHEVAL(cx, 0);
4367
4368     PL_in_eval = EVAL_INEVAL;
4369     if (flags & G_KEEPERR)
4370         PL_in_eval |= EVAL_KEEPERR;
4371     else
4372         CLEAR_ERRSV();
4373     if (flags & G_FAKINGEVAL) {
4374         PL_eval_root = PL_op; /* Only needed so that goto works right. */
4375     }
4376     return cx;
4377 }
4378     
4379 PP(pp_entertry)
4380 {
4381     dVAR;
4382     PERL_CONTEXT * const cx = create_eval_scope(0);
4383     cx->blk_eval.retop = cLOGOP->op_other->op_next;
4384     return DOCATCH(PL_op->op_next);
4385 }
4386
4387 PP(pp_leavetry)
4388 {
4389     dVAR; dSP;
4390     SV **newsp;
4391     PMOP *newpm;
4392     I32 gimme;
4393     register PERL_CONTEXT *cx;
4394     I32 optype;
4395
4396     PERL_ASYNC_CHECK();
4397     POPBLOCK(cx,newpm);
4398     POPEVAL(cx);
4399     PERL_UNUSED_VAR(optype);
4400
4401     TAINT_NOT;
4402     SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4403     PL_curpm = newpm;   /* Don't pop $1 et al till now */
4404
4405     LEAVE_with_name("eval_scope");
4406     CLEAR_ERRSV();
4407     RETURN;
4408 }
4409
4410 PP(pp_entergiven)
4411 {
4412     dVAR; dSP;
4413     register PERL_CONTEXT *cx;
4414     const I32 gimme = GIMME_V;
4415     
4416     ENTER_with_name("given");
4417     SAVETMPS;
4418
4419     SAVECLEARSV(PAD_SVl(PL_op->op_targ));
4420     sv_setsv_mg(PAD_SV(PL_op->op_targ), POPs);
4421
4422     PUSHBLOCK(cx, CXt_GIVEN, SP);
4423     PUSHGIVEN(cx);
4424
4425     RETURN;
4426 }
4427
4428 PP(pp_leavegiven)
4429 {
4430     dVAR; dSP;
4431     register PERL_CONTEXT *cx;
4432     I32 gimme;
4433     SV **newsp;
4434     PMOP *newpm;
4435     PERL_UNUSED_CONTEXT;
4436
4437     POPBLOCK(cx,newpm);
4438     assert(CxTYPE(cx) == CXt_GIVEN);
4439
4440     TAINT_NOT;
4441     SP = adjust_stack_on_leave(newsp, SP, newsp, gimme, SVs_PADTMP|SVs_TEMP);
4442     PL_curpm = newpm;   /* Don't pop $1 et al till now */
4443
4444     LEAVE_with_name("given");
4445     RETURN;
4446 }
4447
4448 /* Helper routines used by pp_smartmatch */
4449 STATIC PMOP *
4450 S_make_matcher(pTHX_ REGEXP *re)
4451 {
4452     dVAR;
4453     PMOP *matcher = (PMOP *) newPMOP(OP_MATCH, OPf_WANT_SCALAR | OPf_STACKED);
4454
4455     PERL_ARGS_ASSERT_MAKE_MATCHER;
4456
4457     PM_SETRE(matcher, ReREFCNT_inc(re));
4458
4459     SAVEFREEOP((OP *) matcher);
4460     ENTER_with_name("matcher"); SAVETMPS;
4461     SAVEOP();
4462     return matcher;
4463 }
4464
4465 STATIC bool
4466 S_matcher_matches_sv(pTHX_ PMOP *matcher, SV *sv)
4467 {
4468     dVAR;
4469     dSP;
4470
4471     PERL_ARGS_ASSERT_MATCHER_MATCHES_SV;
4472     
4473     PL_op = (OP *) matcher;
4474     XPUSHs(sv);
4475     PUTBACK;
4476     (void) Perl_pp_match(aTHX);
4477     SPAGAIN;
4478     return (SvTRUEx(POPs));
4479 }
4480
4481 STATIC void
4482 S_destroy_matcher(pTHX_ PMOP *matcher)
4483 {
4484     dVAR;
4485
4486     PERL_ARGS_ASSERT_DESTROY_MATCHER;
4487     PERL_UNUSED_ARG(matcher);
4488
4489     FREETMPS;
4490     LEAVE_with_name("matcher");
4491 }
4492
4493 /* Do a smart match */
4494 PP(pp_smartmatch)
4495 {
4496     DEBUG_M(Perl_deb(aTHX_ "Starting smart match resolution\n"));
4497     return do_smartmatch(NULL, NULL, 0);
4498 }
4499
4500 /* This version of do_smartmatch() implements the
4501  * table of smart matches that is found in perlsyn.
4502  */
4503 STATIC OP *
4504 S_do_smartmatch(pTHX_ HV *seen_this, HV *seen_other, const bool copied)
4505 {
4506     dVAR;
4507     dSP;
4508