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