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