This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Encode 1.98.
[perl5.git] / pp_ctl.c
1 /*    pp_ctl.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 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 #include "EXTERN.h"
21 #define PERL_IN_PP_CTL_C
22 #include "perl.h"
23
24 #ifndef WORD_ALIGN
25 #define WORD_ALIGN sizeof(U32)
26 #endif
27
28 #define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
29
30 static I32 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen);
31
32 PP(pp_wantarray)
33 {
34     dSP;
35     I32 cxix;
36     EXTEND(SP, 1);
37
38     cxix = dopoptosub(cxstack_ix);
39     if (cxix < 0)
40         RETPUSHUNDEF;
41
42     switch (cxstack[cxix].blk_gimme) {
43     case G_ARRAY:
44         RETPUSHYES;
45     case G_SCALAR:
46         RETPUSHNO;
47     default:
48         RETPUSHUNDEF;
49     }
50 }
51
52 PP(pp_regcmaybe)
53 {
54     return NORMAL;
55 }
56
57 PP(pp_regcreset)
58 {
59     /* XXXX Should store the old value to allow for tie/overload - and
60        restore in regcomp, where marked with XXXX. */
61     PL_reginterp_cnt = 0;
62     return NORMAL;
63 }
64
65 PP(pp_regcomp)
66 {
67     dSP;
68     register PMOP *pm = (PMOP*)cLOGOP->op_other;
69     register char *t;
70     SV *tmpstr;
71     STRLEN len;
72     MAGIC *mg = Null(MAGIC*);
73     
74     tmpstr = POPs;
75
76     /* prevent recompiling under /o and ithreads. */
77 #if defined(USE_ITHREADS)
78     if (pm->op_pmflags & PMf_KEEP && PM_GETRE(pm))
79          RETURN;
80 #endif
81
82     if (SvROK(tmpstr)) {
83         SV *sv = SvRV(tmpstr);
84         if(SvMAGICAL(sv))
85             mg = mg_find(sv, PERL_MAGIC_qr);
86     }
87     if (mg) {
88         regexp *re = (regexp *)mg->mg_obj;
89         ReREFCNT_dec(PM_GETRE(pm));
90         PM_SETRE(pm, ReREFCNT_inc(re));
91     }
92     else {
93         t = SvPV(tmpstr, len);
94
95         /* Check against the last compiled regexp. */
96         if (!PM_GETRE(pm) || !PM_GETRE(pm)->precomp ||
97             PM_GETRE(pm)->prelen != (I32)len ||
98             memNE(PM_GETRE(pm)->precomp, t, len))
99         {
100             if (PM_GETRE(pm)) {
101                 ReREFCNT_dec(PM_GETRE(pm));
102                 PM_SETRE(pm, Null(REGEXP*));    /* crucial if regcomp aborts */
103             }
104             if (PL_op->op_flags & OPf_SPECIAL)
105                 PL_reginterp_cnt = I32_MAX; /* Mark as safe.  */
106
107             pm->op_pmflags = pm->op_pmpermflags;        /* reset case sensitivity */
108             if (DO_UTF8(tmpstr))
109                 pm->op_pmdynflags |= PMdf_DYN_UTF8;
110             else {
111                 pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
112                 if (pm->op_pmdynflags & PMdf_UTF8)
113                     t = (char*)bytes_to_utf8((U8*)t, &len);
114             }
115             PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
116             if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
117                 Safefree(t);
118             PL_reginterp_cnt = 0;       /* XXXX Be extra paranoid - needed
119                                            inside tie/overload accessors.  */
120         }
121     }
122
123 #ifndef INCOMPLETE_TAINTS
124     if (PL_tainting) {
125         if (PL_tainted)
126             pm->op_pmdynflags |= PMdf_TAINTED;
127         else
128             pm->op_pmdynflags &= ~PMdf_TAINTED;
129     }
130 #endif
131
132     if (!PM_GETRE(pm)->prelen && PL_curpm)
133         pm = PL_curpm;
134     else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
135         pm->op_pmflags |= PMf_WHITE;
136     else
137         pm->op_pmflags &= ~PMf_WHITE;
138
139     /* XXX runtime compiled output needs to move to the pad */
140     if (pm->op_pmflags & PMf_KEEP) {
141         pm->op_private &= ~OPpRUNTIME;  /* no point compiling again */
142 #if !defined(USE_ITHREADS)
143         /* XXX can't change the optree at runtime either */
144         cLOGOP->op_first->op_next = PL_op->op_next;
145 #endif
146     }
147     RETURN;
148 }
149
150 PP(pp_substcont)
151 {
152     dSP;
153     register PMOP *pm = (PMOP*) cLOGOP->op_other;
154     register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
155     register SV *dstr = cx->sb_dstr;
156     register char *s = cx->sb_s;
157     register char *m = cx->sb_m;
158     char *orig = cx->sb_orig;
159     register REGEXP *rx = cx->sb_rx;
160     SV *nsv = Nullsv;
161
162     { 
163       REGEXP *old = PM_GETRE(pm);
164       if(old != rx) {
165         if(old) 
166           ReREFCNT_dec(old);
167         PM_SETRE(pm,rx);
168       }
169     }
170
171     rxres_restore(&cx->sb_rxres, rx);
172     RX_MATCH_UTF8_set(rx, SvUTF8(cx->sb_targ));
173
174     if (cx->sb_iters++) {
175         I32 saviters = cx->sb_iters;
176         if (cx->sb_iters > cx->sb_maxiters)
177             DIE(aTHX_ "Substitution loop");
178
179         if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
180             cx->sb_rxtainted |= 2;
181         sv_catsv(dstr, POPs);
182
183         /* Are we done */
184         if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
185                                      s == m, cx->sb_targ, NULL,
186                                      ((cx->sb_rflags & REXEC_COPY_STR)
187                                       ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
188                                       : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
189         {
190             SV *targ = cx->sb_targ;
191
192             if (DO_UTF8(dstr) && !SvUTF8(targ))
193                 sv_catpvn_utf8_upgrade(dstr, s, cx->sb_strend - s, nsv);
194             else
195                 sv_catpvn(dstr, s, cx->sb_strend - s);
196             cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
197
198 #ifdef PERL_COPY_ON_WRITE
199             if (SvIsCOW(targ)) {
200                 sv_force_normal_flags(targ, SV_COW_DROP_PV);
201             } else
202 #endif
203             {
204                 (void)SvOOK_off(targ);
205                 if (SvLEN(targ))
206                     Safefree(SvPVX(targ));
207             }
208             SvPVX(targ) = SvPVX(dstr);
209             SvCUR_set(targ, SvCUR(dstr));
210             SvLEN_set(targ, SvLEN(dstr));
211             if (DO_UTF8(dstr))
212                 SvUTF8_on(targ);
213             SvPVX(dstr) = 0;
214             sv_free(dstr);
215
216             TAINT_IF(cx->sb_rxtainted & 1);
217             PUSHs(sv_2mortal(newSViv(saviters - 1)));
218
219             (void)SvPOK_only_UTF8(targ);
220             TAINT_IF(cx->sb_rxtainted);
221             SvSETMAGIC(targ);
222             SvTAINT(targ);
223
224             LEAVE_SCOPE(cx->sb_oldsave);
225             ReREFCNT_dec(rx);
226             POPSUBST(cx);
227             RETURNOP(pm->op_next);
228         }
229         cx->sb_iters = saviters;
230     }
231     if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
232         m = s;
233         s = orig;
234         cx->sb_orig = orig = rx->subbeg;
235         s = orig + (m - s);
236         cx->sb_strend = s + (cx->sb_strend - m);
237     }
238     cx->sb_m = m = rx->startp[0] + orig;
239     if (m > s) {
240         if (DO_UTF8(dstr) && !SvUTF8(cx->sb_targ)) 
241             sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
242         else
243             sv_catpvn(dstr, s, m-s);
244     }
245     cx->sb_s = rx->endp[0] + orig;
246     { /* Update the pos() information. */
247         SV *sv = cx->sb_targ;
248         MAGIC *mg;
249         I32 i;
250         if (SvTYPE(sv) < SVt_PVMG)
251             (void)SvUPGRADE(sv, SVt_PVMG);
252         if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
253             sv_magic(sv, Nullsv, PERL_MAGIC_regex_global, Nullch, 0);
254             mg = mg_find(sv, PERL_MAGIC_regex_global);
255         }
256         i = m - orig;
257         if (DO_UTF8(sv))
258             sv_pos_b2u(sv, &i);
259         mg->mg_len = i;
260     }
261     ReREFCNT_inc(rx);
262     cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
263     rxres_save(&cx->sb_rxres, rx);
264     RETURNOP(pm->op_pmreplstart);
265 }
266
267 void
268 Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
269 {
270     UV *p = (UV*)*rsp;
271     U32 i;
272
273     if (!p || p[1] < rx->nparens) {
274 #ifdef PERL_COPY_ON_WRITE
275         i = 7 + rx->nparens * 2;
276 #else
277         i = 6 + rx->nparens * 2;
278 #endif
279         if (!p)
280             New(501, p, i, UV);
281         else
282             Renew(p, i, UV);
283         *rsp = (void*)p;
284     }
285
286     *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
287     RX_MATCH_COPIED_off(rx);
288
289 #ifdef PERL_COPY_ON_WRITE
290     *p++ = PTR2UV(rx->saved_copy);
291     rx->saved_copy = Nullsv;
292 #endif
293
294     *p++ = rx->nparens;
295
296     *p++ = PTR2UV(rx->subbeg);
297     *p++ = (UV)rx->sublen;
298     for (i = 0; i <= rx->nparens; ++i) {
299         *p++ = (UV)rx->startp[i];
300         *p++ = (UV)rx->endp[i];
301     }
302 }
303
304 void
305 Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
306 {
307     UV *p = (UV*)*rsp;
308     U32 i;
309
310     RX_MATCH_COPY_FREE(rx);
311     RX_MATCH_COPIED_set(rx, *p);
312     *p++ = 0;
313
314 #ifdef PERL_COPY_ON_WRITE
315     if (rx->saved_copy)
316         SvREFCNT_dec (rx->saved_copy);
317     rx->saved_copy = INT2PTR(SV*,*p);
318     *p++ = 0;
319 #endif
320
321     rx->nparens = *p++;
322
323     rx->subbeg = INT2PTR(char*,*p++);
324     rx->sublen = (I32)(*p++);
325     for (i = 0; i <= rx->nparens; ++i) {
326         rx->startp[i] = (I32)(*p++);
327         rx->endp[i] = (I32)(*p++);
328     }
329 }
330
331 void
332 Perl_rxres_free(pTHX_ void **rsp)
333 {
334     UV *p = (UV*)*rsp;
335
336     if (p) {
337         Safefree(INT2PTR(char*,*p));
338 #ifdef PERL_COPY_ON_WRITE
339         if (p[1]) {
340             SvREFCNT_dec (INT2PTR(SV*,p[1]));
341         }
342 #endif
343         Safefree(p);
344         *rsp = Null(void*);
345     }
346 }
347
348 PP(pp_formline)
349 {
350     dSP; dMARK; dORIGMARK;
351     register SV *tmpForm = *++MARK;
352     register U32 *fpc;
353     register char *t;
354     register char *f;
355     register char *s;
356     register char *send;
357     register I32 arg;
358     register SV *sv = Nullsv;
359     char *item = Nullch;
360     I32 itemsize  = 0;
361     I32 fieldsize = 0;
362     I32 lines = 0;
363     bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
364     char *chophere = Nullch;
365     char *linemark = Nullch;
366     NV value;
367     bool gotsome = FALSE;
368     STRLEN len;
369     STRLEN fudge = SvCUR(tmpForm) * (IN_BYTES ? 1 : 3) + 1;
370     bool item_is_utf8 = FALSE;
371     bool targ_is_utf8 = FALSE;
372     SV * nsv = Nullsv;
373
374     if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
375         if (SvREADONLY(tmpForm)) {
376             SvREADONLY_off(tmpForm);
377             doparseform(tmpForm);
378             SvREADONLY_on(tmpForm);
379         }
380         else
381             doparseform(tmpForm);
382     }
383     SvPV_force(PL_formtarget, len);
384     if (DO_UTF8(PL_formtarget))
385         targ_is_utf8 = TRUE;
386     t = SvGROW(PL_formtarget, len + fudge + 1);  /* XXX SvCUR bad */
387     t += len;
388     f = SvPV(tmpForm, len);
389     /* need to jump to the next word */
390     s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
391
392     fpc = (U32*)s;
393
394     for (;;) {
395         DEBUG_f( {
396             char *name = "???";
397             arg = -1;
398             switch (*fpc) {
399             case FF_LITERAL:    arg = fpc[1]; name = "LITERAL"; break;
400             case FF_BLANK:      arg = fpc[1]; name = "BLANK";   break;
401             case FF_SKIP:       arg = fpc[1]; name = "SKIP";    break;
402             case FF_FETCH:      arg = fpc[1]; name = "FETCH";   break;
403             case FF_DECIMAL:    arg = fpc[1]; name = "DECIMAL"; break;
404
405             case FF_CHECKNL:    name = "CHECKNL";       break;
406             case FF_CHECKCHOP:  name = "CHECKCHOP";     break;
407             case FF_SPACE:      name = "SPACE";         break;
408             case FF_HALFSPACE:  name = "HALFSPACE";     break;
409             case FF_ITEM:       name = "ITEM";          break;
410             case FF_CHOP:       name = "CHOP";          break;
411             case FF_LINEGLOB:   name = "LINEGLOB";      break;
412             case FF_NEWLINE:    name = "NEWLINE";       break;
413             case FF_MORE:       name = "MORE";          break;
414             case FF_LINEMARK:   name = "LINEMARK";      break;
415             case FF_END:        name = "END";           break;
416             case FF_0DECIMAL:   name = "0DECIMAL";      break;
417             }
418             if (arg >= 0)
419                 PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
420             else
421                 PerlIO_printf(Perl_debug_log, "%-16s\n", name);
422         } );
423         switch (*fpc++) {
424         case FF_LINEMARK:
425             linemark = t;
426             lines++;
427             gotsome = FALSE;
428             break;
429
430         case FF_LITERAL:
431             arg = *fpc++;
432             if (targ_is_utf8 && !SvUTF8(tmpForm)) {
433                 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
434                 *t = '\0';
435                 sv_catpvn_utf8_upgrade(PL_formtarget, f, arg, nsv);
436                 t = SvEND(PL_formtarget);
437                 break;
438             }
439             if (!targ_is_utf8 && DO_UTF8(tmpForm)) {
440                 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
441                 *t = '\0';
442                 sv_utf8_upgrade(PL_formtarget);
443                 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
444                 t = SvEND(PL_formtarget);
445                 targ_is_utf8 = TRUE;
446             }
447             while (arg--)
448                 *t++ = *f++;
449             break;
450
451         case FF_SKIP:
452             f += *fpc++;
453             break;
454
455         case FF_FETCH:
456             arg = *fpc++;
457             f += arg;
458             fieldsize = arg;
459
460             if (MARK < SP)
461                 sv = *++MARK;
462             else {
463                 sv = &PL_sv_no;
464                 if (ckWARN(WARN_SYNTAX))
465                     Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Not enough format arguments");
466             }
467             break;
468
469         case FF_CHECKNL:
470             item = s = SvPV(sv, len);
471             itemsize = len;
472             if (DO_UTF8(sv)) {
473                 itemsize = sv_len_utf8(sv);
474                 if (itemsize != (I32)len) {
475                     I32 itembytes;
476                     if (itemsize > fieldsize) {
477                         itemsize = fieldsize;
478                         itembytes = itemsize;
479                         sv_pos_u2b(sv, &itembytes, 0);
480                     }
481                     else
482                         itembytes = len;
483                     send = chophere = s + itembytes;
484                     while (s < send) {
485                         if (*s & ~31)
486                             gotsome = TRUE;
487                         else if (*s == '\n')
488                             break;
489                         s++;
490                     }
491                     item_is_utf8 = TRUE;
492                     itemsize = s - item;
493                     sv_pos_b2u(sv, &itemsize);
494                     break;
495                 }
496             }
497             item_is_utf8 = FALSE;
498             if (itemsize > fieldsize)
499                 itemsize = fieldsize;
500             send = chophere = s + itemsize;
501             while (s < send) {
502                 if (*s & ~31)
503                     gotsome = TRUE;
504                 else if (*s == '\n')
505                     break;
506                 s++;
507             }
508             itemsize = s - item;
509             break;
510
511         case FF_CHECKCHOP:
512             item = s = SvPV(sv, len);
513             itemsize = len;
514             if (DO_UTF8(sv)) {
515                 itemsize = sv_len_utf8(sv);
516                 if (itemsize != (I32)len) {
517                     I32 itembytes;
518                     if (itemsize <= fieldsize) {
519                         send = chophere = s + itemsize;
520                         while (s < send) {
521                             if (*s == '\r') {
522                                 itemsize = s - item;
523                                 break;
524                             }
525                             if (*s++ & ~31)
526                                 gotsome = TRUE;
527                         }
528                     }
529                     else {
530                         itemsize = fieldsize;
531                         itembytes = itemsize;
532                         sv_pos_u2b(sv, &itembytes, 0);
533                         send = chophere = s + itembytes;
534                         while (s < send || (s == send && isSPACE(*s))) {
535                             if (isSPACE(*s)) {
536                                 if (chopspace)
537                                     chophere = s;
538                                 if (*s == '\r')
539                                     break;
540                             }
541                             else {
542                                 if (*s & ~31)
543                                     gotsome = TRUE;
544                                 if (strchr(PL_chopset, *s))
545                                     chophere = s + 1;
546                             }
547                             s++;
548                         }
549                         itemsize = chophere - item;
550                         sv_pos_b2u(sv, &itemsize);
551                     }
552                     item_is_utf8 = TRUE;
553                     break;
554                 }
555             }
556             item_is_utf8 = FALSE;
557             if (itemsize <= fieldsize) {
558                 send = chophere = s + itemsize;
559                 while (s < send) {
560                     if (*s == '\r') {
561                         itemsize = s - item;
562                         break;
563                     }
564                     if (*s++ & ~31)
565                         gotsome = TRUE;
566                 }
567             }
568             else {
569                 itemsize = fieldsize;
570                 send = chophere = s + itemsize;
571                 while (s < send || (s == send && isSPACE(*s))) {
572                     if (isSPACE(*s)) {
573                         if (chopspace)
574                             chophere = s;
575                         if (*s == '\r')
576                             break;
577                     }
578                     else {
579                         if (*s & ~31)
580                             gotsome = TRUE;
581                         if (strchr(PL_chopset, *s))
582                             chophere = s + 1;
583                     }
584                     s++;
585                 }
586                 itemsize = chophere - item;
587             }
588             break;
589
590         case FF_SPACE:
591             arg = fieldsize - itemsize;
592             if (arg) {
593                 fieldsize -= arg;
594                 while (arg-- > 0)
595                     *t++ = ' ';
596             }
597             break;
598
599         case FF_HALFSPACE:
600             arg = fieldsize - itemsize;
601             if (arg) {
602                 arg /= 2;
603                 fieldsize -= arg;
604                 while (arg-- > 0)
605                     *t++ = ' ';
606             }
607             break;
608
609         case FF_ITEM:
610             arg = itemsize;
611             s = item;
612             if (item_is_utf8) {
613                 if (!targ_is_utf8) {
614                     SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
615                     *t = '\0';
616                     sv_utf8_upgrade(PL_formtarget);
617                     SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
618                     t = SvEND(PL_formtarget);
619                     targ_is_utf8 = TRUE;
620                 }
621                 while (arg--) {
622                     if (UTF8_IS_CONTINUED(*s)) {
623                         STRLEN skip = UTF8SKIP(s);
624                         switch (skip) {
625                         default:
626                             Move(s,t,skip,char);
627                             s += skip;
628                             t += skip;
629                             break;
630                         case 7: *t++ = *s++;
631                         case 6: *t++ = *s++;
632                         case 5: *t++ = *s++;
633                         case 4: *t++ = *s++;
634                         case 3: *t++ = *s++;
635                         case 2: *t++ = *s++;
636                         case 1: *t++ = *s++;
637                         }
638                     }
639                     else {
640                         if ( !((*t++ = *s++) & ~31) )
641                             t[-1] = ' ';
642                     }
643                 }
644                 break;
645             }
646             if (targ_is_utf8 && !item_is_utf8) {
647                 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
648                 *t = '\0';
649                 sv_catpvn_utf8_upgrade(PL_formtarget, s, arg, nsv);
650                 for (; t < SvEND(PL_formtarget); t++) {
651 #ifdef EBCDIC
652                     int ch = *t++ = *s++;
653                     if (iscntrl(ch))
654 #else
655                     if (!(*t & ~31))
656 #endif
657                         *t = ' ';
658                 }
659                 break;
660             }
661             while (arg--) {
662 #ifdef EBCDIC
663                 int ch = *t++ = *s++;
664                 if (iscntrl(ch))
665 #else
666                 if ( !((*t++ = *s++) & ~31) )
667 #endif
668                     t[-1] = ' ';
669             }
670             break;
671
672         case FF_CHOP:
673             s = chophere;
674             if (chopspace) {
675                 while (*s && isSPACE(*s))
676                     s++;
677             }
678             sv_chop(sv,s);
679             SvSETMAGIC(sv);
680             break;
681
682         case FF_LINEGLOB:
683             item = s = SvPV(sv, len);
684             itemsize = len;
685             if ((item_is_utf8 = DO_UTF8(sv)))
686                 itemsize = sv_len_utf8(sv);         
687             if (itemsize) {
688                 bool chopped = FALSE;
689                 gotsome = TRUE;
690                 send = s + len;
691                 while (s < send) {
692                     if (*s++ == '\n') {
693                         if (s == send) {
694                             itemsize--;
695                             chopped = TRUE;
696                         }
697                         else
698                             lines++;
699                     }
700                 }
701                 SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
702                 if (targ_is_utf8)
703                     SvUTF8_on(PL_formtarget);
704                 sv_catsv(PL_formtarget, sv);
705                 if (chopped)
706                     SvCUR_set(PL_formtarget, SvCUR(PL_formtarget) - 1);
707                 SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
708                 t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
709                 if (item_is_utf8)
710                     targ_is_utf8 = TRUE;
711             }
712             break;
713
714         case FF_DECIMAL:
715             /* If the field is marked with ^ and the value is undefined,
716                blank it out. */
717             arg = *fpc++;
718             if ((arg & 512) && !SvOK(sv)) {
719                 arg = fieldsize;
720                 while (arg--)
721                     *t++ = ' ';
722                 break;
723             }
724             gotsome = TRUE;
725             value = SvNV(sv);
726             /* Formats aren't yet marked for locales, so assume "yes". */
727             {
728                 STORE_NUMERIC_STANDARD_SET_LOCAL();
729 #if defined(USE_LONG_DOUBLE)
730                 if (arg & 256) {
731                     sprintf(t, "%#*.*" PERL_PRIfldbl,
732                             (int) fieldsize, (int) arg & 255, value);
733                 } else {
734                     sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
735                 }
736 #else
737                 if (arg & 256) {
738                     sprintf(t, "%#*.*f",
739                             (int) fieldsize, (int) arg & 255, value);
740                 } else {
741                     sprintf(t, "%*.0f",
742                             (int) fieldsize, value);
743                 }
744 #endif
745                 RESTORE_NUMERIC_STANDARD();
746             }
747             t += fieldsize;
748             break;
749
750         case FF_0DECIMAL:
751             /* If the field is marked with ^ and the value is undefined,
752                blank it out. */
753             arg = *fpc++;
754             if ((arg & 512) && !SvOK(sv)) {
755                 arg = fieldsize;
756                 while (arg--)
757                     *t++ = ' ';
758                 break;
759             }
760             gotsome = TRUE;
761             value = SvNV(sv);
762             /* Formats aren't yet marked for locales, so assume "yes". */
763             {
764                 STORE_NUMERIC_STANDARD_SET_LOCAL();
765 #if defined(USE_LONG_DOUBLE)
766                 if (arg & 256) {
767                     sprintf(t, "%#0*.*" PERL_PRIfldbl,
768                             (int) fieldsize, (int) arg & 255, value);
769 /* is this legal? I don't have long doubles */
770                 } else {
771                     sprintf(t, "%0*.0" PERL_PRIfldbl, (int) fieldsize, value);
772                 }
773 #else
774                 if (arg & 256) {
775                     sprintf(t, "%#0*.*f",
776                             (int) fieldsize, (int) arg & 255, value);
777                 } else {
778                     sprintf(t, "%0*.0f",
779                             (int) fieldsize, value);
780                 }
781 #endif
782                 RESTORE_NUMERIC_STANDARD();
783             }
784             t += fieldsize;
785             break;
786         
787         case FF_NEWLINE:
788             f++;
789             while (t-- > linemark && *t == ' ') ;
790             t++;
791             *t++ = '\n';
792             break;
793
794         case FF_BLANK:
795             arg = *fpc++;
796             if (gotsome) {
797                 if (arg) {              /* repeat until fields exhausted? */
798                     *t = '\0';
799                     SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
800                     lines += FmLINES(PL_formtarget);
801                     if (lines == 200) {
802                         arg = t - linemark;
803                         if (strnEQ(linemark, linemark - arg, arg))
804                             DIE(aTHX_ "Runaway format");
805                     }
806                     if (targ_is_utf8)
807                         SvUTF8_on(PL_formtarget);
808                     FmLINES(PL_formtarget) = lines;
809                     SP = ORIGMARK;
810                     RETURNOP(cLISTOP->op_first);
811                 }
812             }
813             else {
814                 t = linemark;
815                 lines--;
816             }
817             break;
818
819         case FF_MORE:
820             s = chophere;
821             send = item + len;
822             if (chopspace) {
823                 while (*s && isSPACE(*s) && s < send)
824                     s++;
825             }
826             if (s < send) {
827                 arg = fieldsize - itemsize;
828                 if (arg) {
829                     fieldsize -= arg;
830                     while (arg-- > 0)
831                         *t++ = ' ';
832                 }
833                 s = t - 3;
834                 if (strnEQ(s,"   ",3)) {
835                     while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
836                         s--;
837                 }
838                 *s++ = '.';
839                 *s++ = '.';
840                 *s++ = '.';
841             }
842             break;
843
844         case FF_END:
845             *t = '\0';
846             SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
847             if (targ_is_utf8)
848                 SvUTF8_on(PL_formtarget);
849             FmLINES(PL_formtarget) += lines;
850             SP = ORIGMARK;
851             RETPUSHYES;
852         }
853     }
854 }
855
856 PP(pp_grepstart)
857 {
858     dSP;
859     SV *src;
860
861     if (PL_stack_base + *PL_markstack_ptr == SP) {
862         (void)POPMARK;
863         if (GIMME_V == G_SCALAR)
864             XPUSHs(sv_2mortal(newSViv(0)));
865         RETURNOP(PL_op->op_next->op_next);
866     }
867     PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
868     pp_pushmark();                              /* push dst */
869     pp_pushmark();                              /* push src */
870     ENTER;                                      /* enter outer scope */
871
872     SAVETMPS;
873     /* SAVE_DEFSV does *not* suffice here for USE_5005THREADS */
874     SAVESPTR(DEFSV);
875     ENTER;                                      /* enter inner scope */
876     SAVEVPTR(PL_curpm);
877
878     src = PL_stack_base[*PL_markstack_ptr];
879     SvTEMP_off(src);
880     DEFSV = src;
881
882     PUTBACK;
883     if (PL_op->op_type == OP_MAPSTART)
884         pp_pushmark();                  /* push top */
885     return ((LOGOP*)PL_op->op_next)->op_other;
886 }
887
888 PP(pp_mapstart)
889 {
890     DIE(aTHX_ "panic: mapstart");       /* uses grepstart */
891 }
892
893 PP(pp_mapwhile)
894 {
895     dSP;
896     I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
897     I32 count;
898     I32 shift;
899     SV** src;
900     SV** dst;
901
902     /* first, move source pointer to the next item in the source list */
903     ++PL_markstack_ptr[-1];
904
905     /* if there are new items, push them into the destination list */
906     if (items) {
907         /* might need to make room back there first */
908         if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
909             /* XXX this implementation is very pessimal because the stack
910              * is repeatedly extended for every set of items.  Is possible
911              * to do this without any stack extension or copying at all
912              * by maintaining a separate list over which the map iterates
913              * (like foreach does). --gsar */
914
915             /* everything in the stack after the destination list moves
916              * towards the end the stack by the amount of room needed */
917             shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
918
919             /* items to shift up (accounting for the moved source pointer) */
920             count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
921
922             /* This optimization is by Ben Tilly and it does
923              * things differently from what Sarathy (gsar)
924              * is describing.  The downside of this optimization is
925              * that leaves "holes" (uninitialized and hopefully unused areas)
926              * to the Perl stack, but on the other hand this
927              * shouldn't be a problem.  If Sarathy's idea gets
928              * implemented, this optimization should become
929              * irrelevant.  --jhi */
930             if (shift < count)
931                 shift = count; /* Avoid shifting too often --Ben Tilly */
932         
933             EXTEND(SP,shift);
934             src = SP;
935             dst = (SP += shift);
936             PL_markstack_ptr[-1] += shift;
937             *PL_markstack_ptr += shift;
938             while (count--)
939                 *dst-- = *src--;
940         }
941         /* copy the new items down to the destination list */
942         dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
943         while (items-- > 0)
944             *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
945     }
946     LEAVE;                                      /* exit inner scope */
947
948     /* All done yet? */
949     if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
950         I32 gimme = GIMME_V;
951
952         (void)POPMARK;                          /* pop top */
953         LEAVE;                                  /* exit outer scope */
954         (void)POPMARK;                          /* pop src */
955         items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
956         (void)POPMARK;                          /* pop dst */
957         SP = PL_stack_base + POPMARK;           /* pop original mark */
958         if (gimme == G_SCALAR) {
959             dTARGET;
960             XPUSHi(items);
961         }
962         else if (gimme == G_ARRAY)
963             SP += items;
964         RETURN;
965     }
966     else {
967         SV *src;
968
969         ENTER;                                  /* enter inner scope */
970         SAVEVPTR(PL_curpm);
971
972         /* set $_ to the new source item */
973         src = PL_stack_base[PL_markstack_ptr[-1]];
974         SvTEMP_off(src);
975         DEFSV = src;
976
977         RETURNOP(cLOGOP->op_other);
978     }
979 }
980
981 /* Range stuff. */
982
983 PP(pp_range)
984 {
985     if (GIMME == G_ARRAY)
986         return NORMAL;
987     if (SvTRUEx(PAD_SV(PL_op->op_targ)))
988         return cLOGOP->op_other;
989     else
990         return NORMAL;
991 }
992
993 PP(pp_flip)
994 {
995     dSP;
996
997     if (GIMME == G_ARRAY) {
998         RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
999     }
1000     else {
1001         dTOPss;
1002         SV *targ = PAD_SV(PL_op->op_targ);
1003         int flip = 0;
1004
1005         if (PL_op->op_private & OPpFLIP_LINENUM) {
1006             if (GvIO(PL_last_in_gv)) {
1007                 flip = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1008             }
1009             else {
1010                 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1011                 if (gv && GvSV(gv)) flip = SvIV(sv) == SvIV(GvSV(gv));
1012             }
1013         } else {
1014             flip = SvTRUE(sv);
1015         }
1016         if (flip) {
1017             sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
1018             if (PL_op->op_flags & OPf_SPECIAL) {
1019                 sv_setiv(targ, 1);
1020                 SETs(targ);
1021                 RETURN;
1022             }
1023             else {
1024                 sv_setiv(targ, 0);
1025                 SP--;
1026                 RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
1027             }
1028         }
1029         sv_setpv(TARG, "");
1030         SETs(targ);
1031         RETURN;
1032     }
1033 }
1034
1035 PP(pp_flop)
1036 {
1037     dSP;
1038
1039     if (GIMME == G_ARRAY) {
1040         dPOPPOPssrl;
1041         register I32 i, j;
1042         register SV *sv;
1043         I32 max;
1044
1045         if (SvGMAGICAL(left))
1046             mg_get(left);
1047         if (SvGMAGICAL(right))
1048             mg_get(right);
1049
1050         /* This code tries to decide if "$left .. $right" should use the
1051            magical string increment, or if the range is numeric (we make
1052            an exception for .."0" [#18165]). AMS 20021031. */
1053
1054         if (SvNIOKp(left) || !SvPOKp(left) ||
1055             SvNIOKp(right) || !SvPOKp(right) ||
1056             (looks_like_number(left) && *SvPVX(left) != '0' &&
1057              looks_like_number(right)))
1058         {
1059             if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
1060                 DIE(aTHX_ "Range iterator outside integer range");
1061             i = SvIV(left);
1062             max = SvIV(right);
1063             if (max >= i) {
1064                 j = max - i + 1;
1065                 EXTEND_MORTAL(j);
1066                 EXTEND(SP, j);
1067             }
1068             else
1069                 j = 0;
1070             while (j--) {
1071                 sv = sv_2mortal(newSViv(i++));
1072                 PUSHs(sv);
1073             }
1074         }
1075         else {
1076             SV *final = sv_mortalcopy(right);
1077             STRLEN len, n_a;
1078             char *tmps = SvPV(final, len);
1079
1080             sv = sv_mortalcopy(left);
1081             SvPV_force(sv,n_a);
1082             while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
1083                 XPUSHs(sv);
1084                 if (strEQ(SvPVX(sv),tmps))
1085                     break;
1086                 sv = sv_2mortal(newSVsv(sv));
1087                 sv_inc(sv);
1088             }
1089         }
1090     }
1091     else {
1092         dTOPss;
1093         SV *targ = PAD_SV(cUNOP->op_first->op_targ);
1094         int flop = 0;
1095         sv_inc(targ);
1096
1097         if (PL_op->op_private & OPpFLIP_LINENUM) {
1098             if (GvIO(PL_last_in_gv)) {
1099                 flop = SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv));
1100             }
1101             else {
1102                 GV *gv = gv_fetchpv(".", TRUE, SVt_PV);
1103                 if (gv && GvSV(gv)) flop = SvIV(sv) == SvIV(GvSV(gv));
1104             }
1105         }
1106         else {
1107             flop = SvTRUE(sv);
1108         }
1109
1110         if (flop) {
1111             sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
1112             sv_catpv(targ, "E0");
1113         }
1114         SETs(targ);
1115     }
1116
1117     RETURN;
1118 }
1119
1120 /* Control. */
1121
1122 static char *context_name[] = {
1123     "pseudo-block",
1124     "subroutine",
1125     "eval",
1126     "loop",
1127     "substitution",
1128     "block",
1129     "format"
1130 };
1131
1132 STATIC I32
1133 S_dopoptolabel(pTHX_ char *label)
1134 {
1135     register I32 i;
1136     register PERL_CONTEXT *cx;
1137
1138     for (i = cxstack_ix; i >= 0; i--) {
1139         cx = &cxstack[i];
1140         switch (CxTYPE(cx)) {
1141         case CXt_SUBST:
1142         case CXt_SUB:
1143         case CXt_FORMAT:
1144         case CXt_EVAL:
1145         case CXt_NULL:
1146             if (ckWARN(WARN_EXITING))
1147                 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1148                         context_name[CxTYPE(cx)], OP_NAME(PL_op));
1149             if (CxTYPE(cx) == CXt_NULL)
1150                 return -1;
1151             break;
1152         case CXt_LOOP:
1153             if (!cx->blk_loop.label ||
1154               strNE(label, cx->blk_loop.label) ) {
1155                 DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
1156                         (long)i, cx->blk_loop.label));
1157                 continue;
1158             }
1159             DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
1160             return i;
1161         }
1162     }
1163     return i;
1164 }
1165
1166 I32
1167 Perl_dowantarray(pTHX)
1168 {
1169     I32 gimme = block_gimme();
1170     return (gimme == G_VOID) ? G_SCALAR : gimme;
1171 }
1172
1173 I32
1174 Perl_block_gimme(pTHX)
1175 {
1176     I32 cxix;
1177
1178     cxix = dopoptosub(cxstack_ix);
1179     if (cxix < 0)
1180         return G_VOID;
1181
1182     switch (cxstack[cxix].blk_gimme) {
1183     case G_VOID:
1184         return G_VOID;
1185     case G_SCALAR:
1186         return G_SCALAR;
1187     case G_ARRAY:
1188         return G_ARRAY;
1189     default:
1190         Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
1191         /* NOTREACHED */
1192         return 0;
1193     }
1194 }
1195
1196 I32
1197 Perl_is_lvalue_sub(pTHX)
1198 {
1199     I32 cxix;
1200
1201     cxix = dopoptosub(cxstack_ix);
1202     assert(cxix >= 0);  /* We should only be called from inside subs */
1203
1204     if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
1205         return cxstack[cxix].blk_sub.lval;
1206     else
1207         return 0;
1208 }
1209
1210 STATIC I32
1211 S_dopoptosub(pTHX_ I32 startingblock)
1212 {
1213     return dopoptosub_at(cxstack, startingblock);
1214 }
1215
1216 STATIC I32
1217 S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
1218 {
1219     I32 i;
1220     register PERL_CONTEXT *cx;
1221     for (i = startingblock; i >= 0; i--) {
1222         cx = &cxstk[i];
1223         switch (CxTYPE(cx)) {
1224         default:
1225             continue;
1226         case CXt_EVAL:
1227         case CXt_SUB:
1228         case CXt_FORMAT:
1229             DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
1230             return i;
1231         }
1232     }
1233     return i;
1234 }
1235
1236 STATIC I32
1237 S_dopoptoeval(pTHX_ I32 startingblock)
1238 {
1239     I32 i;
1240     register PERL_CONTEXT *cx;
1241     for (i = startingblock; i >= 0; i--) {
1242         cx = &cxstack[i];
1243         switch (CxTYPE(cx)) {
1244         default:
1245             continue;
1246         case CXt_EVAL:
1247             DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
1248             return i;
1249         }
1250     }
1251     return i;
1252 }
1253
1254 STATIC I32
1255 S_dopoptoloop(pTHX_ I32 startingblock)
1256 {
1257     I32 i;
1258     register PERL_CONTEXT *cx;
1259     for (i = startingblock; i >= 0; i--) {
1260         cx = &cxstack[i];
1261         switch (CxTYPE(cx)) {
1262         case CXt_SUBST:
1263         case CXt_SUB:
1264         case CXt_FORMAT:
1265         case CXt_EVAL:
1266         case CXt_NULL:
1267             if (ckWARN(WARN_EXITING))
1268                 Perl_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s",
1269                         context_name[CxTYPE(cx)], OP_NAME(PL_op));
1270             if ((CxTYPE(cx)) == CXt_NULL)
1271                 return -1;
1272             break;
1273         case CXt_LOOP:
1274             DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
1275             return i;
1276         }
1277     }
1278     return i;
1279 }
1280
1281 void
1282 Perl_dounwind(pTHX_ I32 cxix)
1283 {
1284     register PERL_CONTEXT *cx;
1285     I32 optype;
1286
1287     while (cxstack_ix > cxix) {
1288         SV *sv;
1289         cx = &cxstack[cxstack_ix];
1290         DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
1291                               (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
1292         /* Note: we don't need to restore the base context info till the end. */
1293         switch (CxTYPE(cx)) {
1294         case CXt_SUBST:
1295             POPSUBST(cx);
1296             continue;  /* not break */
1297         case CXt_SUB:
1298             POPSUB(cx,sv);
1299             LEAVESUB(sv);
1300             break;
1301         case CXt_EVAL:
1302             POPEVAL(cx);
1303             break;
1304         case CXt_LOOP:
1305             POPLOOP(cx);
1306             break;
1307         case CXt_NULL:
1308             break;
1309         case CXt_FORMAT:
1310             POPFORMAT(cx);
1311             break;
1312         }
1313         cxstack_ix--;
1314     }
1315 }
1316
1317 void
1318 Perl_qerror(pTHX_ SV *err)
1319 {
1320     if (PL_in_eval)
1321         sv_catsv(ERRSV, err);
1322     else if (PL_errors)
1323         sv_catsv(PL_errors, err);
1324     else
1325         Perl_warn(aTHX_ "%"SVf, err);
1326     ++PL_error_count;
1327 }
1328
1329 OP *
1330 Perl_die_where(pTHX_ char *message, STRLEN msglen)
1331 {
1332     STRLEN n_a;
1333
1334     if (PL_in_eval) {
1335         I32 cxix;
1336         register PERL_CONTEXT *cx;
1337         I32 gimme;
1338         SV **newsp;
1339
1340         if (message) {
1341             if (PL_in_eval & EVAL_KEEPERR) {
1342                 static char prefix[] = "\t(in cleanup) ";
1343                 SV *err = ERRSV;
1344                 char *e = Nullch;
1345                 if (!SvPOK(err))
1346                     sv_setpv(err,"");
1347                 else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
1348                     e = SvPV(err, n_a);
1349                     e += n_a - msglen;
1350                     if (*e != *message || strNE(e,message))
1351                         e = Nullch;
1352                 }
1353                 if (!e) {
1354                     SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
1355                     sv_catpvn(err, prefix, sizeof(prefix)-1);
1356                     sv_catpvn(err, message, msglen);
1357                     if (ckWARN(WARN_MISC)) {
1358                         STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
1359                         Perl_warner(aTHX_ packWARN(WARN_MISC), SvPVX(err)+start);
1360                     }
1361                 }
1362             }
1363             else {
1364                 sv_setpvn(ERRSV, message, msglen);
1365             }
1366         }
1367
1368         while ((cxix = dopoptoeval(cxstack_ix)) < 0
1369                && PL_curstackinfo->si_prev)
1370         {
1371             dounwind(-1);
1372             POPSTACK;
1373         }
1374
1375         if (cxix >= 0) {
1376             I32 optype;
1377
1378             if (cxix < cxstack_ix)
1379                 dounwind(cxix);
1380
1381             POPBLOCK(cx,PL_curpm);
1382             if (CxTYPE(cx) != CXt_EVAL) {
1383                 if (!message)
1384                     message = SvPVx(ERRSV, msglen);
1385                 PerlIO_write(Perl_error_log, "panic: die ", 11);
1386                 PerlIO_write(Perl_error_log, message, msglen);
1387                 my_exit(1);
1388             }
1389             POPEVAL(cx);
1390
1391             if (gimme == G_SCALAR)
1392                 *++newsp = &PL_sv_undef;
1393             PL_stack_sp = newsp;
1394
1395             LEAVE;
1396
1397             /* LEAVE could clobber PL_curcop (see save_re_context())
1398              * XXX it might be better to find a way to avoid messing with
1399              * PL_curcop in save_re_context() instead, but this is a more
1400              * minimal fix --GSAR */
1401             PL_curcop = cx->blk_oldcop;
1402
1403             if (optype == OP_REQUIRE) {
1404                 char* msg = SvPVx(ERRSV, n_a);
1405                 DIE(aTHX_ "%sCompilation failed in require",
1406                     *msg ? msg : "Unknown error\n");
1407             }
1408             return pop_return();
1409         }
1410     }
1411     if (!message)
1412         message = SvPVx(ERRSV, msglen);
1413
1414     write_to_stderr(message, msglen);
1415     my_failure_exit();
1416     /* NOTREACHED */
1417     return 0;
1418 }
1419
1420 PP(pp_xor)
1421 {
1422     dSP; dPOPTOPssrl;
1423     if (SvTRUE(left) != SvTRUE(right))
1424         RETSETYES;
1425     else
1426         RETSETNO;
1427 }
1428
1429 PP(pp_andassign)
1430 {
1431     dSP;
1432     if (!SvTRUE(TOPs))
1433         RETURN;
1434     else
1435         RETURNOP(cLOGOP->op_other);
1436 }
1437
1438 PP(pp_orassign)
1439 {
1440     dSP;
1441     if (SvTRUE(TOPs))
1442         RETURN;
1443     else
1444         RETURNOP(cLOGOP->op_other);
1445 }
1446
1447 PP(pp_dorassign)
1448 {
1449     dSP;
1450     register SV* sv;
1451
1452     sv = TOPs;
1453     if (!sv || !SvANY(sv)) {
1454         RETURNOP(cLOGOP->op_other);
1455     }
1456
1457     switch (SvTYPE(sv)) {
1458     case SVt_PVAV:
1459         if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1460             RETURN;
1461         break;
1462     case SVt_PVHV:
1463         if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
1464             RETURN;
1465         break;
1466     case SVt_PVCV:
1467         if (CvROOT(sv) || CvXSUB(sv))
1468             RETURN;
1469         break;
1470     default:
1471         if (SvGMAGICAL(sv))
1472             mg_get(sv);
1473         if (SvOK(sv))
1474             RETURN;
1475     }
1476
1477     RETURNOP(cLOGOP->op_other);
1478 }
1479
1480 PP(pp_caller)
1481 {
1482     dSP;
1483     register I32 cxix = dopoptosub(cxstack_ix);
1484     register PERL_CONTEXT *cx;
1485     register PERL_CONTEXT *ccstack = cxstack;
1486     PERL_SI *top_si = PL_curstackinfo;
1487     I32 dbcxix;
1488     I32 gimme;
1489     char *stashname;
1490     SV *sv;
1491     I32 count = 0;
1492
1493     if (MAXARG)
1494         count = POPi;
1495
1496     for (;;) {
1497         /* we may be in a higher stacklevel, so dig down deeper */
1498         while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
1499             top_si = top_si->si_prev;
1500             ccstack = top_si->si_cxstack;
1501             cxix = dopoptosub_at(ccstack, top_si->si_cxix);
1502         }
1503         if (cxix < 0) {
1504             if (GIMME != G_ARRAY) {
1505                 EXTEND(SP, 1);
1506                 RETPUSHUNDEF;
1507             }
1508             RETURN;
1509         }
1510         if (PL_DBsub && cxix >= 0 &&
1511                 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
1512             count++;
1513         if (!count--)
1514             break;
1515         cxix = dopoptosub_at(ccstack, cxix - 1);
1516     }
1517
1518     cx = &ccstack[cxix];
1519     if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1520         dbcxix = dopoptosub_at(ccstack, cxix - 1);
1521         /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
1522            field below is defined for any cx. */
1523         if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
1524             cx = &ccstack[dbcxix];
1525     }
1526
1527     stashname = CopSTASHPV(cx->blk_oldcop);
1528     if (GIMME != G_ARRAY) {
1529         EXTEND(SP, 1);
1530         if (!stashname)
1531             PUSHs(&PL_sv_undef);
1532         else {
1533             dTARGET;
1534             sv_setpv(TARG, stashname);
1535             PUSHs(TARG);
1536         }
1537         RETURN;
1538     }
1539
1540     EXTEND(SP, 10);
1541
1542     if (!stashname)
1543         PUSHs(&PL_sv_undef);
1544     else
1545         PUSHs(sv_2mortal(newSVpv(stashname, 0)));
1546     PUSHs(sv_2mortal(newSVpv(OutCopFILE(cx->blk_oldcop), 0)));
1547     PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
1548     if (!MAXARG)
1549         RETURN;
1550     if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
1551         GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
1552         /* So is ccstack[dbcxix]. */
1553         if (isGV(cvgv)) {
1554             sv = NEWSV(49, 0);
1555             gv_efullname3(sv, cvgv, Nullch);
1556             PUSHs(sv_2mortal(sv));
1557             PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1558         }
1559         else {
1560             PUSHs(sv_2mortal(newSVpvn("(unknown)",9)));
1561             PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
1562         }
1563     }
1564     else {
1565         PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
1566         PUSHs(sv_2mortal(newSViv(0)));
1567     }
1568     gimme = (I32)cx->blk_gimme;
1569     if (gimme == G_VOID)
1570         PUSHs(&PL_sv_undef);
1571     else
1572         PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
1573     if (CxTYPE(cx) == CXt_EVAL) {
1574         /* eval STRING */
1575         if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
1576             PUSHs(cx->blk_eval.cur_text);
1577             PUSHs(&PL_sv_no);
1578         }
1579         /* require */
1580         else if (cx->blk_eval.old_namesv) {
1581             PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
1582             PUSHs(&PL_sv_yes);
1583         }
1584         /* eval BLOCK (try blocks have old_namesv == 0) */
1585         else {
1586             PUSHs(&PL_sv_undef);
1587             PUSHs(&PL_sv_undef);
1588         }
1589     }
1590     else {
1591         PUSHs(&PL_sv_undef);
1592         PUSHs(&PL_sv_undef);
1593     }
1594     if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
1595         && CopSTASH_eq(PL_curcop, PL_debstash))
1596     {
1597         AV *ary = cx->blk_sub.argarray;
1598         int off = AvARRAY(ary) - AvALLOC(ary);
1599
1600         if (!PL_dbargs) {
1601             GV* tmpgv;
1602             PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
1603                                 SVt_PVAV)));
1604             GvMULTI_on(tmpgv);
1605             AvREAL_off(PL_dbargs);      /* XXX should be REIFY (see av.h) */
1606         }
1607
1608         if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
1609             av_extend(PL_dbargs, AvFILLp(ary) + off);
1610         Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
1611         AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
1612     }
1613     /* XXX only hints propagated via op_private are currently
1614      * visible (others are not easily accessible, since they
1615      * use the global PL_hints) */
1616     PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
1617                              HINT_PRIVATE_MASK)));
1618     {
1619         SV * mask ;
1620         SV * old_warnings = cx->blk_oldcop->cop_warnings ;
1621
1622         if  (old_warnings == pWARN_NONE ||
1623                 (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
1624             mask = newSVpvn(WARN_NONEstring, WARNsize) ;
1625         else if (old_warnings == pWARN_ALL ||
1626                   (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) {
1627             /* Get the bit mask for $warnings::Bits{all}, because
1628              * it could have been extended by warnings::register */
1629             SV **bits_all;
1630             HV *bits = get_hv("warnings::Bits", FALSE);
1631             if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) {
1632                 mask = newSVsv(*bits_all);
1633             }
1634             else {
1635                 mask = newSVpvn(WARN_ALLstring, WARNsize) ;
1636             }
1637         }
1638         else
1639             mask = newSVsv(old_warnings);
1640         PUSHs(sv_2mortal(mask));
1641     }
1642     RETURN;
1643 }
1644
1645 PP(pp_reset)
1646 {
1647     dSP;
1648     char *tmps;
1649     STRLEN n_a;
1650
1651     if (MAXARG < 1)
1652         tmps = "";
1653     else
1654         tmps = POPpx;
1655     sv_reset(tmps, CopSTASH(PL_curcop));
1656     PUSHs(&PL_sv_yes);
1657     RETURN;
1658 }
1659
1660 PP(pp_lineseq)
1661 {
1662     return NORMAL;
1663 }
1664
1665 /* like pp_nextstate, but used instead when the debugger is active */
1666
1667 PP(pp_dbstate)
1668 {
1669     PL_curcop = (COP*)PL_op;
1670     TAINT_NOT;          /* Each statement is presumed innocent */
1671     PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
1672     FREETMPS;
1673
1674     if (PL_op->op_flags & OPf_SPECIAL /* breakpoint */
1675             || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
1676     {
1677         dSP;
1678         register CV *cv;
1679         register PERL_CONTEXT *cx;
1680         I32 gimme = G_ARRAY;
1681         U8 hasargs;
1682         GV *gv;
1683
1684         gv = PL_DBgv;
1685         cv = GvCV(gv);
1686         if (!cv)
1687             DIE(aTHX_ "No DB::DB routine defined");
1688
1689         if (CvDEPTH(cv) >= 1 && !(PL_debug & DEBUG_DB_RECURSE_FLAG))
1690             /* don't do recursive DB::DB call */
1691             return NORMAL;
1692
1693         ENTER;
1694         SAVETMPS;
1695
1696         SAVEI32(PL_debug);
1697         SAVESTACK_POS();
1698         PL_debug = 0;
1699         hasargs = 0;
1700         SPAGAIN;
1701
1702         push_return(PL_op->op_next);
1703         PUSHBLOCK(cx, CXt_SUB, SP);
1704         PUSHSUB_DB(cx);
1705         CvDEPTH(cv)++;
1706         (void)SvREFCNT_inc(cv);
1707         PAD_SET_CUR(CvPADLIST(cv),1);
1708         RETURNOP(CvSTART(cv));
1709     }
1710     else
1711         return NORMAL;
1712 }
1713
1714 PP(pp_scope)
1715 {
1716     return NORMAL;
1717 }
1718
1719 PP(pp_enteriter)
1720 {
1721     dSP; dMARK;
1722     register PERL_CONTEXT *cx;
1723     I32 gimme = GIMME_V;
1724     SV **svp;
1725     U32 cxtype = CXt_LOOP;
1726 #ifdef USE_ITHREADS
1727     void *iterdata;
1728 #endif
1729
1730     ENTER;
1731     SAVETMPS;
1732
1733     if (PL_op->op_targ) {
1734         if (PL_op->op_private & OPpLVAL_INTRO) { /* for my $x (...) */
1735             SvPADSTALE_off(PAD_SVl(PL_op->op_targ));
1736             SAVESETSVFLAGS(PAD_SVl(PL_op->op_targ),
1737                     SVs_PADSTALE, SVs_PADSTALE);
1738         }
1739 #ifndef USE_ITHREADS
1740         svp = &PAD_SVl(PL_op->op_targ);         /* "my" variable */
1741         SAVESPTR(*svp);
1742 #else
1743         SAVEPADSV(PL_op->op_targ);
1744         iterdata = INT2PTR(void*, PL_op->op_targ);
1745         cxtype |= CXp_PADVAR;
1746 #endif
1747     }
1748     else {
1749         GV *gv = (GV*)POPs;
1750         svp = &GvSV(gv);                        /* symbol table variable */
1751         SAVEGENERICSV(*svp);
1752         *svp = NEWSV(0,0);
1753 #ifdef USE_ITHREADS
1754         iterdata = (void*)gv;
1755 #endif
1756     }
1757
1758     ENTER;
1759
1760     PUSHBLOCK(cx, cxtype, SP);
1761 #ifdef USE_ITHREADS
1762     PUSHLOOP(cx, iterdata, MARK);
1763 #else
1764     PUSHLOOP(cx, svp, MARK);
1765 #endif
1766     if (PL_op->op_flags & OPf_STACKED) {
1767         cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
1768         if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
1769             dPOPss;
1770             /* See comment in pp_flop() */
1771             if (SvNIOKp(sv) || !SvPOKp(sv) ||
1772                 SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
1773                 (looks_like_number(sv) && *SvPVX(sv) != '0' &&
1774                  looks_like_number((SV*)cx->blk_loop.iterary)))
1775             {
1776                  if (SvNV(sv) < IV_MIN ||
1777                      SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
1778                      DIE(aTHX_ "Range iterator outside integer range");
1779                  cx->blk_loop.iterix = SvIV(sv);
1780                  cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
1781             }
1782             else
1783                 cx->blk_loop.iterlval = newSVsv(sv);
1784         }
1785     }
1786     else {
1787         cx->blk_loop.iterary = PL_curstack;
1788         AvFILLp(PL_curstack) = SP - PL_stack_base;
1789         cx->blk_loop.iterix = MARK - PL_stack_base;
1790     }
1791
1792     RETURN;
1793 }
1794
1795 PP(pp_enterloop)
1796 {
1797     dSP;
1798     register PERL_CONTEXT *cx;
1799     I32 gimme = GIMME_V;
1800
1801     ENTER;
1802     SAVETMPS;
1803     ENTER;
1804
1805     PUSHBLOCK(cx, CXt_LOOP, SP);
1806     PUSHLOOP(cx, 0, SP);
1807
1808     RETURN;
1809 }
1810
1811 PP(pp_leaveloop)
1812 {
1813     dSP;
1814     register PERL_CONTEXT *cx;
1815     I32 gimme;
1816     SV **newsp;
1817     PMOP *newpm;
1818     SV **mark;
1819
1820     POPBLOCK(cx,newpm);
1821     mark = newsp;
1822     newsp = PL_stack_base + cx->blk_loop.resetsp;
1823
1824     TAINT_NOT;
1825     if (gimme == G_VOID)
1826         ; /* do nothing */
1827     else if (gimme == G_SCALAR) {
1828         if (mark < SP)
1829             *++newsp = sv_mortalcopy(*SP);
1830         else
1831             *++newsp = &PL_sv_undef;
1832     }
1833     else {
1834         while (mark < SP) {
1835             *++newsp = sv_mortalcopy(*++mark);
1836             TAINT_NOT;          /* Each item is independent */
1837         }
1838     }
1839     SP = newsp;
1840     PUTBACK;
1841
1842     POPLOOP(cx);        /* Stack values are safe: release loop vars ... */
1843     PL_curpm = newpm;   /* ... and pop $1 et al */
1844
1845     LEAVE;
1846     LEAVE;
1847
1848     return NORMAL;
1849 }
1850
1851 PP(pp_return)
1852 {
1853     dSP; dMARK;
1854     I32 cxix;
1855     register PERL_CONTEXT *cx;
1856     bool popsub2 = FALSE;
1857     bool clear_errsv = FALSE;
1858     I32 gimme;
1859     SV **newsp;
1860     PMOP *newpm;
1861     I32 optype = 0;
1862     SV *sv;
1863
1864     if (PL_curstackinfo->si_type == PERLSI_SORT) {
1865         if (cxstack_ix == PL_sortcxix
1866             || dopoptosub(cxstack_ix) <= PL_sortcxix)
1867         {
1868             if (cxstack_ix > PL_sortcxix)
1869                 dounwind(PL_sortcxix);
1870             AvARRAY(PL_curstack)[1] = *SP;
1871             PL_stack_sp = PL_stack_base + 1;
1872             return 0;
1873         }
1874     }
1875
1876     cxix = dopoptosub(cxstack_ix);
1877     if (cxix < 0)
1878         DIE(aTHX_ "Can't return outside a subroutine");
1879     if (cxix < cxstack_ix)
1880         dounwind(cxix);
1881
1882     POPBLOCK(cx,newpm);
1883     switch (CxTYPE(cx)) {
1884     case CXt_SUB:
1885         popsub2 = TRUE;
1886         break;
1887     case CXt_EVAL:
1888         if (!(PL_in_eval & EVAL_KEEPERR))
1889             clear_errsv = TRUE;
1890         POPEVAL(cx);
1891         if (CxTRYBLOCK(cx))
1892             break;
1893         lex_end();
1894         if (optype == OP_REQUIRE &&
1895             (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
1896         {
1897             /* Unassume the success we assumed earlier. */
1898             SV *nsv = cx->blk_eval.old_namesv;
1899             (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
1900             DIE(aTHX_ "%"SVf" did not return a true value", nsv);
1901         }
1902         break;
1903     case CXt_FORMAT:
1904         POPFORMAT(cx);
1905         break;
1906     default:
1907         DIE(aTHX_ "panic: return");
1908     }
1909
1910     TAINT_NOT;
1911     if (gimme == G_SCALAR) {
1912         if (MARK < SP) {
1913             if (popsub2) {
1914                 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
1915                     if (SvTEMP(TOPs)) {
1916                         *++newsp = SvREFCNT_inc(*SP);
1917                         FREETMPS;
1918                         sv_2mortal(*newsp);
1919                     }
1920                     else {
1921                         sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
1922                         FREETMPS;
1923                         *++newsp = sv_mortalcopy(sv);
1924                         SvREFCNT_dec(sv);
1925                     }
1926                 }
1927                 else
1928                     *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
1929             }
1930             else
1931                 *++newsp = sv_mortalcopy(*SP);
1932         }
1933         else
1934             *++newsp = &PL_sv_undef;
1935     }
1936     else if (gimme == G_ARRAY) {
1937         while (++MARK <= SP) {
1938             *++newsp = (popsub2 && SvTEMP(*MARK))
1939                         ? *MARK : sv_mortalcopy(*MARK);
1940             TAINT_NOT;          /* Each item is independent */
1941         }
1942     }
1943     PL_stack_sp = newsp;
1944
1945     LEAVE;
1946     /* Stack values are safe: */
1947     if (popsub2) {
1948         POPSUB(cx,sv);  /* release CV and @_ ... */
1949     }
1950     else
1951         sv = Nullsv;
1952     PL_curpm = newpm;   /* ... and pop $1 et al */
1953
1954     LEAVESUB(sv);
1955     if (clear_errsv)
1956         sv_setpv(ERRSV,"");
1957     return pop_return();
1958 }
1959
1960 PP(pp_last)
1961 {
1962     dSP;
1963     I32 cxix;
1964     register PERL_CONTEXT *cx;
1965     I32 pop2 = 0;
1966     I32 gimme;
1967     I32 optype;
1968     OP *nextop;
1969     SV **newsp;
1970     PMOP *newpm;
1971     SV **mark;
1972     SV *sv = Nullsv;
1973
1974     if (PL_op->op_flags & OPf_SPECIAL) {
1975         cxix = dopoptoloop(cxstack_ix);
1976         if (cxix < 0)
1977             DIE(aTHX_ "Can't \"last\" outside a loop block");
1978     }
1979     else {
1980         cxix = dopoptolabel(cPVOP->op_pv);
1981         if (cxix < 0)
1982             DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
1983     }
1984     if (cxix < cxstack_ix)
1985         dounwind(cxix);
1986
1987     POPBLOCK(cx,newpm);
1988     mark = newsp;
1989     switch (CxTYPE(cx)) {
1990     case CXt_LOOP:
1991         pop2 = CXt_LOOP;
1992         newsp = PL_stack_base + cx->blk_loop.resetsp;
1993         nextop = cx->blk_loop.last_op->op_next;
1994         break;
1995     case CXt_SUB:
1996         pop2 = CXt_SUB;
1997         nextop = pop_return();
1998         break;
1999     case CXt_EVAL:
2000         POPEVAL(cx);
2001         nextop = pop_return();
2002         break;
2003     case CXt_FORMAT:
2004         POPFORMAT(cx);
2005         nextop = pop_return();
2006         break;
2007     default:
2008         DIE(aTHX_ "panic: last");
2009     }
2010
2011     TAINT_NOT;
2012     if (gimme == G_SCALAR) {
2013         if (MARK < SP)
2014             *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
2015                         ? *SP : sv_mortalcopy(*SP);
2016         else
2017             *++newsp = &PL_sv_undef;
2018     }
2019     else if (gimme == G_ARRAY) {
2020         while (++MARK <= SP) {
2021             *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
2022                         ? *MARK : sv_mortalcopy(*MARK);
2023             TAINT_NOT;          /* Each item is independent */
2024         }
2025     }
2026     SP = newsp;
2027     PUTBACK;
2028
2029     LEAVE;
2030     /* Stack values are safe: */
2031     switch (pop2) {
2032     case CXt_LOOP:
2033         POPLOOP(cx);    /* release loop vars ... */
2034         LEAVE;
2035         break;
2036     case CXt_SUB:
2037         POPSUB(cx,sv);  /* release CV and @_ ... */
2038         break;
2039     }
2040     PL_curpm = newpm;   /* ... and pop $1 et al */
2041
2042     LEAVESUB(sv);
2043     return nextop;
2044 }
2045
2046 PP(pp_next)
2047 {
2048     I32 cxix;
2049     register PERL_CONTEXT *cx;
2050     I32 inner;
2051
2052     if (PL_op->op_flags & OPf_SPECIAL) {
2053         cxix = dopoptoloop(cxstack_ix);
2054         if (cxix < 0)
2055             DIE(aTHX_ "Can't \"next\" outside a loop block");
2056     }
2057     else {
2058         cxix = dopoptolabel(cPVOP->op_pv);
2059         if (cxix < 0)
2060             DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
2061     }
2062     if (cxix < cxstack_ix)
2063         dounwind(cxix);
2064
2065     /* clear off anything above the scope we're re-entering, but
2066      * save the rest until after a possible continue block */
2067     inner = PL_scopestack_ix;
2068     TOPBLOCK(cx);
2069     if (PL_scopestack_ix < inner)
2070         leave_scope(PL_scopestack[PL_scopestack_ix]);
2071     return cx->blk_loop.next_op;
2072 }
2073
2074 PP(pp_redo)
2075 {
2076     I32 cxix;
2077     register PERL_CONTEXT *cx;
2078     I32 oldsave;
2079
2080     if (PL_op->op_flags & OPf_SPECIAL) {
2081         cxix = dopoptoloop(cxstack_ix);
2082         if (cxix < 0)
2083             DIE(aTHX_ "Can't \"redo\" outside a loop block");
2084     }
2085     else {
2086         cxix = dopoptolabel(cPVOP->op_pv);
2087         if (cxix < 0)
2088             DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
2089     }
2090     if (cxix < cxstack_ix)
2091         dounwind(cxix);
2092
2093     TOPBLOCK(cx);
2094     oldsave = PL_scopestack[PL_scopestack_ix - 1];
2095     LEAVE_SCOPE(oldsave);
2096     return cx->blk_loop.redo_op;
2097 }
2098
2099 STATIC OP *
2100 S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
2101 {
2102     OP *kid = Nullop;
2103     OP **ops = opstack;
2104     static char too_deep[] = "Target of goto is too deeply nested";
2105
2106     if (ops >= oplimit)
2107         Perl_croak(aTHX_ too_deep);
2108     if (o->op_type == OP_LEAVE ||
2109         o->op_type == OP_SCOPE ||
2110         o->op_type == OP_LEAVELOOP ||
2111         o->op_type == OP_LEAVESUB ||
2112         o->op_type == OP_LEAVETRY)
2113     {
2114         *ops++ = cUNOPo->op_first;
2115         if (ops >= oplimit)
2116             Perl_croak(aTHX_ too_deep);
2117     }
2118     *ops = 0;
2119     if (o->op_flags & OPf_KIDS) {
2120         /* First try all the kids at this level, since that's likeliest. */
2121         for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2122             if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
2123                     kCOP->cop_label && strEQ(kCOP->cop_label, label))
2124                 return kid;
2125         }
2126         for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
2127             if (kid == PL_lastgotoprobe)
2128                 continue;
2129             if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2130                 if (ops == opstack)
2131                     *ops++ = kid;
2132                 else if (ops[-1]->op_type == OP_NEXTSTATE ||
2133                          ops[-1]->op_type == OP_DBSTATE)
2134                     ops[-1] = kid;
2135                 else
2136                     *ops++ = kid;
2137             }
2138             if ((o = dofindlabel(kid, label, ops, oplimit)))
2139                 return o;
2140         }
2141     }
2142     *ops = 0;
2143     return 0;
2144 }
2145
2146 PP(pp_dump)
2147 {
2148     return pp_goto();
2149     /*NOTREACHED*/
2150 }
2151
2152 PP(pp_goto)
2153 {
2154     dSP;
2155     OP *retop = 0;
2156     I32 ix;
2157     register PERL_CONTEXT *cx;
2158 #define GOTO_DEPTH 64
2159     OP *enterops[GOTO_DEPTH];
2160     char *label;
2161     int do_dump = (PL_op->op_type == OP_DUMP);
2162     static char must_have_label[] = "goto must have label";
2163
2164     label = 0;
2165     if (PL_op->op_flags & OPf_STACKED) {
2166         SV *sv = POPs;
2167         STRLEN n_a;
2168
2169         /* This egregious kludge implements goto &subroutine */
2170         if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
2171             I32 cxix;
2172             register PERL_CONTEXT *cx;
2173             CV* cv = (CV*)SvRV(sv);
2174             SV** mark;
2175             I32 items = 0;
2176             I32 oldsave;
2177
2178         retry:
2179             if (!CvROOT(cv) && !CvXSUB(cv)) {
2180                 GV *gv = CvGV(cv);
2181                 GV *autogv;
2182                 if (gv) {
2183                     SV *tmpstr;
2184                     /* autoloaded stub? */
2185                     if (cv != GvCV(gv) && (cv = GvCV(gv)))
2186                         goto retry;
2187                     autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
2188                                           GvNAMELEN(gv), FALSE);
2189                     if (autogv && (cv = GvCV(autogv)))
2190                         goto retry;
2191                     tmpstr = sv_newmortal();
2192                     gv_efullname3(tmpstr, gv, Nullch);
2193                     DIE(aTHX_ "Goto undefined subroutine &%"SVf"",tmpstr);
2194                 }
2195                 DIE(aTHX_ "Goto undefined subroutine");
2196             }
2197
2198             /* First do some returnish stuff. */
2199             SvREFCNT_inc(cv); /* avoid premature free during unwind */
2200             FREETMPS;
2201             cxix = dopoptosub(cxstack_ix);
2202             if (cxix < 0)
2203                 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
2204             if (cxix < cxstack_ix)
2205                 dounwind(cxix);
2206             TOPBLOCK(cx);
2207             if (CxREALEVAL(cx))
2208                 DIE(aTHX_ "Can't goto subroutine from an eval-string");
2209             mark = PL_stack_sp;
2210             if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
2211                 /* put @_ back onto stack */
2212                 AV* av = cx->blk_sub.argarray;
2213                 
2214                 items = AvFILLp(av) + 1;
2215                 PL_stack_sp++;
2216                 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2217                 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2218                 PL_stack_sp += items;
2219                 SvREFCNT_dec(GvAV(PL_defgv));
2220                 GvAV(PL_defgv) = cx->blk_sub.savearray;
2221                 /* abandon @_ if it got reified */
2222                 if (AvREAL(av)) {
2223                     (void)sv_2mortal((SV*)av);  /* delay until return */
2224                     av = newAV();
2225                     av_extend(av, items-1);
2226                     AvFLAGS(av) = AVf_REIFY;
2227                     PAD_SVl(0) = (SV*)(cx->blk_sub.argarray = av);
2228                 }
2229                 else
2230                     CLEAR_ARGARRAY(av);
2231             }
2232             else if (CvXSUB(cv)) {      /* put GvAV(defgv) back onto stack */
2233                 AV* av;
2234                 av = GvAV(PL_defgv);
2235                 items = AvFILLp(av) + 1;
2236                 PL_stack_sp++;
2237                 EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
2238                 Copy(AvARRAY(av), PL_stack_sp, items, SV*);
2239                 PL_stack_sp += items;
2240             }
2241             if (CxTYPE(cx) == CXt_SUB &&
2242                 !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
2243                 SvREFCNT_dec(cx->blk_sub.cv);
2244             oldsave = PL_scopestack[PL_scopestack_ix - 1];
2245             LEAVE_SCOPE(oldsave);
2246
2247             /* Now do some callish stuff. */
2248             SAVETMPS;
2249             SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
2250             if (CvXSUB(cv)) {
2251 #ifdef PERL_XSUB_OLDSTYLE
2252                 if (CvOLDSTYLE(cv)) {
2253                     I32 (*fp3)(int,int,int);
2254                     while (SP > mark) {
2255                         SP[1] = SP[0];
2256                         SP--;
2257                     }
2258                     fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2259                     items = (*fp3)(CvXSUBANY(cv).any_i32,
2260                                    mark - PL_stack_base + 1,
2261                                    items);
2262                     SP = PL_stack_base + items;
2263                 }
2264                 else
2265 #endif /* PERL_XSUB_OLDSTYLE */
2266                 {
2267                     SV **newsp;
2268                     I32 gimme;
2269
2270                     PL_stack_sp--;              /* There is no cv arg. */
2271                     /* Push a mark for the start of arglist */
2272                     PUSHMARK(mark);
2273                     (void)(*CvXSUB(cv))(aTHX_ cv);
2274                     /* Pop the current context like a decent sub should */
2275                     POPBLOCK(cx, PL_curpm);
2276                     /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
2277                 }
2278                 LEAVE;
2279                 return pop_return();
2280             }
2281             else {
2282                 AV* padlist = CvPADLIST(cv);
2283                 if (CxTYPE(cx) == CXt_EVAL) {
2284                     PL_in_eval = cx->blk_eval.old_in_eval;
2285                     PL_eval_root = cx->blk_eval.old_eval_root;
2286                     cx->cx_type = CXt_SUB;
2287                     cx->blk_sub.hasargs = 0;
2288                 }
2289                 cx->blk_sub.cv = cv;
2290                 cx->blk_sub.olddepth = (U16)CvDEPTH(cv);
2291
2292                 CvDEPTH(cv)++;
2293                 if (CvDEPTH(cv) < 2)
2294                     (void)SvREFCNT_inc(cv);
2295                 else {
2296                     if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
2297                         sub_crush_depth(cv);
2298                     pad_push(padlist, CvDEPTH(cv), cx->blk_sub.hasargs);
2299                 }
2300                 PAD_SET_CUR(padlist, CvDEPTH(cv));
2301                 if (cx->blk_sub.hasargs)
2302                 {
2303                     AV* av = (AV*)PAD_SVl(0);
2304                     SV** ary;
2305
2306                     cx->blk_sub.savearray = GvAV(PL_defgv);
2307                     GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2308                     CX_CURPAD_SAVE(cx->blk_sub);
2309                     cx->blk_sub.argarray = av;
2310                     ++mark;
2311
2312                     if (items >= AvMAX(av) + 1) {
2313                         ary = AvALLOC(av);
2314                         if (AvARRAY(av) != ary) {
2315                             AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2316                             SvPVX(av) = (char*)ary;
2317                         }
2318                         if (items >= AvMAX(av) + 1) {
2319                             AvMAX(av) = items - 1;
2320                             Renew(ary,items+1,SV*);
2321                             AvALLOC(av) = ary;
2322                             SvPVX(av) = (char*)ary;
2323                         }
2324                     }
2325                     Copy(mark,AvARRAY(av),items,SV*);
2326                     AvFILLp(av) = items - 1;
2327                     assert(!AvREAL(av));
2328                     while (items--) {
2329                         if (*mark)
2330                             SvTEMP_off(*mark);
2331                         mark++;
2332                     }
2333                 }
2334                 if (PERLDB_SUB) {       /* Checking curstash breaks DProf. */
2335                     /*
2336                      * We do not care about using sv to call CV;
2337                      * it's for informational purposes only.
2338                      */
2339                     SV *sv = GvSV(PL_DBsub);
2340                     CV *gotocv;
2341                 
2342                     if (PERLDB_SUB_NN) {
2343                         (void)SvUPGRADE(sv, SVt_PVIV);
2344                         (void)SvIOK_on(sv);
2345                         SAVEIV(SvIVX(sv));
2346                         SvIVX(sv) = PTR2IV(cv); /* Do it the quickest way */
2347                     } else {
2348                         save_item(sv);
2349                         gv_efullname3(sv, CvGV(cv), Nullch);
2350                     }
2351                     if (  PERLDB_GOTO
2352                           && (gotocv = get_cv("DB::goto", FALSE)) ) {
2353                         PUSHMARK( PL_stack_sp );
2354                         call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
2355                         PL_stack_sp--;
2356                     }
2357                 }
2358                 RETURNOP(CvSTART(cv));
2359             }
2360         }
2361         else {
2362             label = SvPV(sv,n_a);
2363             if (!(do_dump || *label))
2364                 DIE(aTHX_ must_have_label);
2365         }
2366     }
2367     else if (PL_op->op_flags & OPf_SPECIAL) {
2368         if (! do_dump)
2369             DIE(aTHX_ must_have_label);
2370     }
2371     else
2372         label = cPVOP->op_pv;
2373
2374     if (label && *label) {
2375         OP *gotoprobe = 0;
2376         bool leaving_eval = FALSE;
2377         bool in_block = FALSE;
2378         PERL_CONTEXT *last_eval_cx = 0;
2379
2380         /* find label */
2381
2382         PL_lastgotoprobe = 0;
2383         *enterops = 0;
2384         for (ix = cxstack_ix; ix >= 0; ix--) {
2385             cx = &cxstack[ix];
2386             switch (CxTYPE(cx)) {
2387             case CXt_EVAL:
2388                 leaving_eval = TRUE;
2389                 if (!CxTRYBLOCK(cx)) {
2390                     gotoprobe = (last_eval_cx ?
2391                                 last_eval_cx->blk_eval.old_eval_root :
2392                                 PL_eval_root);
2393                     last_eval_cx = cx;
2394                     break;
2395                 }
2396                 /* else fall through */
2397             case CXt_LOOP:
2398                 gotoprobe = cx->blk_oldcop->op_sibling;
2399                 break;
2400             case CXt_SUBST:
2401                 continue;
2402             case CXt_BLOCK:
2403                 if (ix) {
2404                     gotoprobe = cx->blk_oldcop->op_sibling;
2405                     in_block = TRUE;
2406                 } else
2407                     gotoprobe = PL_main_root;
2408                 break;
2409             case CXt_SUB:
2410                 if (CvDEPTH(cx->blk_sub.cv)) {
2411                     gotoprobe = CvROOT(cx->blk_sub.cv);
2412                     break;
2413                 }
2414                 /* FALL THROUGH */
2415             case CXt_FORMAT:
2416             case CXt_NULL:
2417                 DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
2418             default:
2419                 if (ix)
2420                     DIE(aTHX_ "panic: goto");
2421                 gotoprobe = PL_main_root;
2422                 break;
2423             }
2424             if (gotoprobe) {
2425                 retop = dofindlabel(gotoprobe, label,
2426                                     enterops, enterops + GOTO_DEPTH);
2427                 if (retop)
2428                     break;
2429             }
2430             PL_lastgotoprobe = gotoprobe;
2431         }
2432         if (!retop)
2433             DIE(aTHX_ "Can't find label %s", label);
2434
2435         /* if we're leaving an eval, check before we pop any frames
2436            that we're not going to punt, otherwise the error
2437            won't be caught */
2438
2439         if (leaving_eval && *enterops && enterops[1]) {
2440             I32 i;
2441             for (i = 1; enterops[i]; i++)
2442                 if (enterops[i]->op_type == OP_ENTERITER)
2443                     DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2444         }
2445
2446         /* pop unwanted frames */
2447
2448         if (ix < cxstack_ix) {
2449             I32 oldsave;
2450
2451             if (ix < 0)
2452                 ix = 0;
2453             dounwind(ix);
2454             TOPBLOCK(cx);
2455             oldsave = PL_scopestack[PL_scopestack_ix];
2456             LEAVE_SCOPE(oldsave);
2457         }
2458
2459         /* push wanted frames */
2460
2461         if (*enterops && enterops[1]) {
2462             OP *oldop = PL_op;
2463             ix = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
2464             for (; enterops[ix]; ix++) {
2465                 PL_op = enterops[ix];
2466                 /* Eventually we may want to stack the needed arguments
2467                  * for each op.  For now, we punt on the hard ones. */
2468                 if (PL_op->op_type == OP_ENTERITER)
2469                     DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
2470                 CALL_FPTR(PL_op->op_ppaddr)(aTHX);
2471             }
2472             PL_op = oldop;
2473         }
2474     }
2475
2476     if (do_dump) {
2477 #ifdef VMS
2478         if (!retop) retop = PL_main_start;
2479 #endif
2480         PL_restartop = retop;
2481         PL_do_undump = TRUE;
2482
2483         my_unexec();
2484
2485         PL_restartop = 0;               /* hmm, must be GNU unexec().. */
2486         PL_do_undump = FALSE;
2487     }
2488
2489     RETURNOP(retop);
2490 }
2491
2492 PP(pp_exit)
2493 {
2494     dSP;
2495     I32 anum;
2496
2497     if (MAXARG < 1)
2498         anum = 0;
2499     else {
2500         anum = SvIVx(POPs);
2501 #ifdef VMS
2502         if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
2503             anum = 0;
2504         VMSISH_HUSHED  = VMSISH_HUSHED || (PL_op->op_private & OPpHUSH_VMSISH);
2505 #endif
2506     }
2507     PL_exit_flags |= PERL_EXIT_EXPECTED;
2508     my_exit(anum);
2509     PUSHs(&PL_sv_undef);
2510     RETURN;
2511 }
2512
2513 #ifdef NOTYET
2514 PP(pp_nswitch)
2515 {
2516     dSP;
2517     NV value = SvNVx(GvSV(cCOP->cop_gv));
2518     register I32 match = I_32(value);
2519
2520     if (value < 0.0) {
2521         if (((NV)match) > value)
2522             --match;            /* was fractional--truncate other way */
2523     }
2524     match -= cCOP->uop.scop.scop_offset;
2525     if (match < 0)
2526         match = 0;
2527     else if (match > cCOP->uop.scop.scop_max)
2528         match = cCOP->uop.scop.scop_max;
2529     PL_op = cCOP->uop.scop.scop_next[match];
2530     RETURNOP(PL_op);
2531 }
2532
2533 PP(pp_cswitch)
2534 {
2535     dSP;
2536     register I32 match;
2537
2538     if (PL_multiline)
2539         PL_op = PL_op->op_next;                 /* can't assume anything */
2540     else {
2541         STRLEN n_a;
2542         match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
2543         match -= cCOP->uop.scop.scop_offset;
2544         if (match < 0)
2545             match = 0;
2546         else if (match > cCOP->uop.scop.scop_max)
2547             match = cCOP->uop.scop.scop_max;
2548         PL_op = cCOP->uop.scop.scop_next[match];
2549     }
2550     RETURNOP(PL_op);
2551 }
2552 #endif
2553
2554 /* Eval. */
2555
2556 STATIC void
2557 S_save_lines(pTHX_ AV *array, SV *sv)
2558 {
2559     register char *s = SvPVX(sv);
2560     register char *send = SvPVX(sv) + SvCUR(sv);
2561     register char *t;
2562     register I32 line = 1;
2563
2564     while (s && s < send) {
2565         SV *tmpstr = NEWSV(85,0);
2566
2567         sv_upgrade(tmpstr, SVt_PVMG);
2568         t = strchr(s, '\n');
2569         if (t)
2570             t++;
2571         else
2572             t = send;
2573
2574         sv_setpvn(tmpstr, s, t - s);
2575         av_store(array, line++, tmpstr);
2576         s = t;
2577     }
2578 }
2579
2580 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2581 STATIC void *
2582 S_docatch_body(pTHX_ va_list args)
2583 {
2584     return docatch_body();
2585 }
2586 #endif
2587
2588 STATIC void *
2589 S_docatch_body(pTHX)
2590 {
2591     CALLRUNOPS(aTHX);
2592     return NULL;
2593 }
2594
2595 STATIC OP *
2596 S_docatch(pTHX_ OP *o)
2597 {
2598     int ret;
2599     OP *oldop = PL_op;
2600     OP *retop;
2601     volatile PERL_SI *cursi = PL_curstackinfo;
2602     dJMPENV;
2603
2604 #ifdef DEBUGGING
2605     assert(CATCH_GET == TRUE);
2606 #endif
2607     PL_op = o;
2608
2609     /* Normally, the leavetry at the end of this block of ops will
2610      * pop an op off the return stack and continue there. By setting
2611      * the op to Nullop, we force an exit from the inner runops()
2612      * loop. DAPM.
2613      */
2614     retop = pop_return();
2615     push_return(Nullop);
2616
2617 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2618  redo_body:
2619     CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
2620 #else
2621     JMPENV_PUSH(ret);
2622 #endif
2623     switch (ret) {
2624     case 0:
2625 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2626  redo_body:
2627         docatch_body();
2628 #endif
2629         break;
2630     case 3:
2631         /* die caught by an inner eval - continue inner loop */
2632         if (PL_restartop && cursi == PL_curstackinfo) {
2633             PL_op = PL_restartop;
2634             PL_restartop = 0;
2635             goto redo_body;
2636         }
2637         /* a die in this eval - continue in outer loop */
2638         if (!PL_restartop)
2639             break;
2640         /* FALL THROUGH */
2641     default:
2642         JMPENV_POP;
2643         PL_op = oldop;
2644         JMPENV_JUMP(ret);
2645         /* NOTREACHED */
2646     }
2647     JMPENV_POP;
2648     PL_op = oldop;
2649     return retop;
2650 }
2651
2652 OP *
2653 Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, PAD** padp)
2654 /* sv Text to convert to OP tree. */
2655 /* startop op_free() this to undo. */
2656 /* code Short string id of the caller. */
2657 {
2658     dSP;                                /* Make POPBLOCK work. */
2659     PERL_CONTEXT *cx;
2660     SV **newsp;
2661     I32 gimme = 0;   /* SUSPECT - INITIALZE TO WHAT?  NI-S */
2662     I32 optype;
2663     OP dummy;
2664     OP *rop;
2665     char tbuf[TYPE_DIGITS(long) + 12 + 10];
2666     char *tmpbuf = tbuf;
2667     char *safestr;
2668     int runtime;
2669     CV* runcv = Nullcv; /* initialise to avoid compiler warnings */
2670
2671     ENTER;
2672     lex_start(sv);
2673     SAVETMPS;
2674     /* switch to eval mode */
2675
2676     if (PL_curcop == &PL_compiling) {
2677         SAVECOPSTASH_FREE(&PL_compiling);
2678         CopSTASH_set(&PL_compiling, PL_curstash);
2679     }
2680     if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
2681         SV *sv = sv_newmortal();
2682         Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
2683                        code, (unsigned long)++PL_evalseq,
2684                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
2685         tmpbuf = SvPVX(sv);
2686     }
2687     else
2688         sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
2689     SAVECOPFILE_FREE(&PL_compiling);
2690     CopFILE_set(&PL_compiling, tmpbuf+2);
2691     SAVECOPLINE(&PL_compiling);
2692     CopLINE_set(&PL_compiling, 1);
2693     /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
2694        deleting the eval's FILEGV from the stash before gv_check() runs
2695        (i.e. before run-time proper). To work around the coredump that
2696        ensues, we always turn GvMULTI_on for any globals that were
2697        introduced within evals. See force_ident(). GSAR 96-10-12 */
2698     safestr = savepv(tmpbuf);
2699     SAVEDELETE(PL_defstash, safestr, strlen(safestr));
2700     SAVEHINTS();
2701 #ifdef OP_IN_REGISTER
2702     PL_opsave = op;
2703 #else
2704     SAVEVPTR(PL_op);
2705 #endif
2706     PL_hints &= HINT_UTF8;
2707
2708     /* we get here either during compilation, or via pp_regcomp at runtime */
2709     runtime = PL_op && (PL_op->op_type == OP_REGCOMP);
2710     if (runtime)
2711         runcv = find_runcv(NULL);
2712
2713     PL_op = &dummy;
2714     PL_op->op_type = OP_ENTEREVAL;
2715     PL_op->op_flags = 0;                        /* Avoid uninit warning. */
2716     PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
2717     PUSHEVAL(cx, 0, Nullgv);
2718
2719     if (runtime)
2720         rop = doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq);
2721     else
2722         rop = doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax);
2723     POPBLOCK(cx,PL_curpm);
2724     POPEVAL(cx);
2725
2726     (*startop)->op_type = OP_NULL;
2727     (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
2728     lex_end();
2729     /* XXX DAPM do this properly one year */
2730     *padp = (AV*)SvREFCNT_inc(PL_comppad);
2731     LEAVE;
2732     if (PL_curcop == &PL_compiling)
2733         PL_compiling.op_private = (U8)(PL_hints & HINT_PRIVATE_MASK);
2734 #ifdef OP_IN_REGISTER
2735     op = PL_opsave;
2736 #endif
2737     return rop;
2738 }
2739
2740
2741 /*
2742 =for apidoc find_runcv
2743
2744 Locate the CV corresponding to the currently executing sub or eval.
2745 If db_seqp is non_null, skip CVs that are in the DB package and populate
2746 *db_seqp with the cop sequence number at the point that the DB:: code was
2747 entered. (allows debuggers to eval in the scope of the breakpoint rather
2748 than in in the scope of the debuger itself).
2749
2750 =cut
2751 */
2752
2753 CV*
2754 Perl_find_runcv(pTHX_ U32 *db_seqp)
2755 {
2756     I32          ix;
2757     PERL_SI      *si;
2758     PERL_CONTEXT *cx;
2759
2760     if (db_seqp)
2761         *db_seqp = PL_curcop->cop_seq;
2762     for (si = PL_curstackinfo; si; si = si->si_prev) {
2763         for (ix = si->si_cxix; ix >= 0; ix--) {
2764             cx = &(si->si_cxstack[ix]);
2765             if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
2766                 CV *cv = cx->blk_sub.cv;
2767                 /* skip DB:: code */
2768                 if (db_seqp && PL_debstash && CvSTASH(cv) == PL_debstash) {
2769                     *db_seqp = cx->blk_oldcop->cop_seq;
2770                     continue;
2771                 }
2772                 return cv;
2773             }
2774             else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx))
2775                 return PL_compcv;
2776         }
2777     }
2778     return PL_main_cv;
2779 }
2780
2781
2782 /* Compile a require/do, an eval '', or a /(?{...})/.
2783  * In the last case, startop is non-null, and contains the address of
2784  * a pointer that should be set to the just-compiled code.
2785  * outside is the lexically enclosing CV (if any) that invoked us.
2786  */
2787
2788 /* With USE_5005THREADS, eval_owner must be held on entry to doeval */
2789 STATIC OP *
2790 S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
2791 {
2792     dSP;
2793     OP *saveop = PL_op;
2794
2795     PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
2796                   ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
2797                   : EVAL_INEVAL);
2798
2799     PUSHMARK(SP);
2800
2801     SAVESPTR(PL_compcv);
2802     PL_compcv = (CV*)NEWSV(1104,0);
2803     sv_upgrade((SV *)PL_compcv, SVt_PVCV);
2804     CvEVAL_on(PL_compcv);
2805     assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL);
2806     cxstack[cxstack_ix].blk_eval.cv = PL_compcv;
2807
2808     CvOUTSIDE_SEQ(PL_compcv) = seq;
2809     CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outside);
2810
2811     /* set up a scratch pad */
2812
2813     CvPADLIST(PL_compcv) = pad_new(padnew_SAVE);
2814
2815
2816     SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
2817
2818     /* make sure we compile in the right package */
2819
2820     if (CopSTASH_ne(PL_curcop, PL_curstash)) {
2821         SAVESPTR(PL_curstash);
2822         PL_curstash = CopSTASH(PL_curcop);
2823     }
2824     SAVESPTR(PL_beginav);
2825     PL_beginav = newAV();
2826     SAVEFREESV(PL_beginav);
2827     SAVEI32(PL_error_count);
2828
2829     /* try to compile it */
2830
2831     PL_eval_root = Nullop;
2832     PL_error_count = 0;
2833     PL_curcop = &PL_compiling;
2834     PL_curcop->cop_arybase = 0;
2835     if (saveop && saveop->op_flags & OPf_SPECIAL)
2836         PL_in_eval |= EVAL_KEEPERR;
2837     else
2838         sv_setpv(ERRSV,"");
2839     if (yyparse() || PL_error_count || !PL_eval_root) {
2840         SV **newsp;                     /* Used by POPBLOCK. */
2841         PERL_CONTEXT *cx;
2842         I32 optype = 0;                 /* Might be reset by POPEVAL. */
2843         STRLEN n_a;
2844         
2845         PL_op = saveop;
2846         if (PL_eval_root) {
2847             op_free(PL_eval_root);
2848             PL_eval_root = Nullop;
2849         }
2850         SP = PL_stack_base + POPMARK;           /* pop original mark */
2851         if (!startop) {
2852             POPBLOCK(cx,PL_curpm);
2853             POPEVAL(cx);
2854             pop_return();
2855         }
2856         lex_end();
2857         LEAVE;
2858         if (optype == OP_REQUIRE) {
2859             char* msg = SvPVx(ERRSV, n_a);
2860             DIE(aTHX_ "%sCompilation failed in require",
2861                 *msg ? msg : "Unknown error\n");
2862         }
2863         else if (startop) {
2864             char* msg = SvPVx(ERRSV, n_a);
2865
2866             POPBLOCK(cx,PL_curpm);
2867             POPEVAL(cx);
2868             Perl_croak(aTHX_ "%sCompilation failed in regexp",
2869                        (*msg ? msg : "Unknown error\n"));
2870         }
2871         else {
2872             char* msg = SvPVx(ERRSV, n_a);
2873             if (!*msg) {
2874                 sv_setpv(ERRSV, "Compilation error");
2875             }
2876         }
2877         RETPUSHUNDEF;
2878     }
2879     CopLINE_set(&PL_compiling, 0);
2880     if (startop) {
2881         *startop = PL_eval_root;
2882     } else
2883         SAVEFREEOP(PL_eval_root);
2884
2885     /* Set the context for this new optree.
2886      * If the last op is an OP_REQUIRE, force scalar context.
2887      * Otherwise, propagate the context from the eval(). */
2888     if (PL_eval_root->op_type == OP_LEAVEEVAL
2889             && cUNOPx(PL_eval_root)->op_first->op_type == OP_LINESEQ
2890             && cLISTOPx(cUNOPx(PL_eval_root)->op_first)->op_last->op_type
2891             == OP_REQUIRE)
2892         scalar(PL_eval_root);
2893     else if (gimme & G_VOID)
2894         scalarvoid(PL_eval_root);
2895     else if (gimme & G_ARRAY)
2896         list(PL_eval_root);
2897     else
2898         scalar(PL_eval_root);
2899
2900     DEBUG_x(dump_eval());
2901
2902     /* Register with debugger: */
2903     if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
2904         CV *cv = get_cv("DB::postponed", FALSE);
2905         if (cv) {
2906             dSP;
2907             PUSHMARK(SP);
2908             XPUSHs((SV*)CopFILEGV(&PL_compiling));
2909             PUTBACK;
2910             call_sv((SV*)cv, G_DISCARD);
2911         }
2912     }
2913
2914     /* compiled okay, so do it */
2915
2916     CvDEPTH(PL_compcv) = 1;
2917     SP = PL_stack_base + POPMARK;               /* pop original mark */
2918     PL_op = saveop;                     /* The caller may need it. */
2919     PL_lex_state = LEX_NOTPARSING;      /* $^S needs this. */
2920
2921     RETURNOP(PL_eval_start);
2922 }
2923
2924 STATIC PerlIO *
2925 S_doopen_pm(pTHX_ const char *name, const char *mode)
2926 {
2927 #ifndef PERL_DISABLE_PMC
2928     STRLEN namelen = strlen(name);
2929     PerlIO *fp;
2930
2931     if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
2932         SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
2933         char *pmc = SvPV_nolen(pmcsv);
2934         Stat_t pmstat;
2935         Stat_t pmcstat;
2936         if (PerlLIO_stat(pmc, &pmcstat) < 0) {
2937             fp = PerlIO_open(name, mode);
2938         }
2939         else {
2940             if (PerlLIO_stat(name, &pmstat) < 0 ||
2941                 pmstat.st_mtime < pmcstat.st_mtime)
2942             {
2943                 fp = PerlIO_open(pmc, mode);
2944             }
2945             else {
2946                 fp = PerlIO_open(name, mode);
2947             }
2948         }
2949         SvREFCNT_dec(pmcsv);
2950     }
2951     else {
2952         fp = PerlIO_open(name, mode);
2953     }
2954     return fp;
2955 #else
2956     return PerlIO_open(name, mode);
2957 #endif /* !PERL_DISABLE_PMC */
2958 }
2959
2960 PP(pp_require)
2961 {
2962     dSP;
2963     register PERL_CONTEXT *cx;
2964     SV *sv;
2965     char *name;
2966     STRLEN len;
2967     char *tryname = Nullch;
2968     SV *namesv = Nullsv;
2969     SV** svp;
2970     I32 gimme = GIMME_V;
2971     PerlIO *tryrsfp = 0;
2972     STRLEN n_a;
2973     int filter_has_file = 0;
2974     GV *filter_child_proc = 0;
2975     SV *filter_state = 0;
2976     SV *filter_sub = 0;
2977     SV *hook_sv = 0;
2978     SV *encoding;
2979     OP *op;
2980
2981     sv = POPs;
2982     if (SvNIOKp(sv) && PL_op->op_type != OP_DOFILE) {
2983         if (SvPOK(sv) && SvNOK(sv) && SvNV(sv)) {               /* require v5.6.1 */
2984             UV rev = 0, ver = 0, sver = 0;
2985             STRLEN len;
2986             U8 *s = (U8*)SvPVX(sv);
2987             U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
2988             if (s < end) {
2989                 rev = utf8n_to_uvchr(s, end - s, &len, 0);
2990                 s += len;
2991                 if (s < end) {
2992                     ver = utf8n_to_uvchr(s, end - s, &len, 0);
2993                     s += len;
2994                     if (s < end)
2995                         sver = utf8n_to_uvchr(s, end - s, &len, 0);
2996                 }
2997             }
2998             if (PERL_REVISION < rev
2999                 || (PERL_REVISION == rev
3000                     && (PERL_VERSION < ver
3001                         || (PERL_VERSION == ver
3002                             && PERL_SUBVERSION < sver))))
3003             {
3004                 DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
3005                     "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
3006                     PERL_VERSION, PERL_SUBVERSION);
3007             }
3008             if (ckWARN(WARN_PORTABLE))
3009                 Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
3010                         "v-string in use/require non-portable");
3011             RETPUSHYES;
3012         }
3013         else if (!SvPOKp(sv)) {                 /* require 5.005_03 */
3014             if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
3015                 + ((NV)PERL_SUBVERSION/(NV)1000000)
3016                 + 0.00000099 < SvNV(sv))
3017             {
3018                 NV nrev = SvNV(sv);
3019                 UV rev = (UV)nrev;
3020                 NV nver = (nrev - rev) * 1000;
3021                 UV ver = (UV)(nver + 0.0009);
3022                 NV nsver = (nver - ver) * 1000;
3023                 UV sver = (UV)(nsver + 0.0009);
3024
3025                 /* help out with the "use 5.6" confusion */
3026                 if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
3027                     DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required"
3028                         " (did you mean v%"UVuf".%03"UVuf"?)--"
3029                         "this is only v%d.%d.%d, stopped",
3030                         rev, ver, sver, rev, ver/100,
3031                         PERL_REVISION, PERL_VERSION, PERL_SUBVERSION);
3032                 }
3033                 else {
3034                     DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
3035                         "this is only v%d.%d.%d, stopped",
3036                         rev, ver, sver, PERL_REVISION, PERL_VERSION,
3037                         PERL_SUBVERSION);
3038                 }
3039             }
3040             RETPUSHYES;
3041         }
3042     }
3043     name = SvPV(sv, len);
3044     if (!(name && len > 0 && *name))
3045         DIE(aTHX_ "Null filename used");
3046     TAINT_PROPER("require");
3047     if (PL_op->op_type == OP_REQUIRE &&
3048       (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
3049       *svp != &PL_sv_undef)
3050         RETPUSHYES;
3051
3052     /* prepare to compile file */
3053
3054     if (path_is_absolute(name)) {
3055         tryname = name;
3056         tryrsfp = doopen_pm(name,PERL_SCRIPT_MODE);
3057     }
3058 #ifdef MACOS_TRADITIONAL
3059     if (!tryrsfp) {
3060         char newname[256];
3061
3062         MacPerl_CanonDir(name, newname, 1);
3063         if (path_is_absolute(newname)) {
3064             tryname = newname;
3065             tryrsfp = doopen_pm(newname,PERL_SCRIPT_MODE);
3066         }
3067     }
3068 #endif
3069     if (!tryrsfp) {
3070         AV *ar = GvAVn(PL_incgv);
3071         I32 i;
3072 #ifdef VMS
3073         char *unixname;
3074         if ((unixname = tounixspec(name, Nullch)) != Nullch)
3075 #endif
3076         {
3077             namesv = NEWSV(806, 0);
3078             for (i = 0; i <= AvFILL(ar); i++) {
3079                 SV *dirsv = *av_fetch(ar, i, TRUE);
3080
3081                 if (SvROK(dirsv)) {
3082                     int count;
3083                     SV *loader = dirsv;
3084
3085                     if (SvTYPE(SvRV(loader)) == SVt_PVAV
3086                         && !sv_isobject(loader))
3087                     {
3088                         loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
3089                     }
3090
3091                     Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
3092                                    PTR2UV(SvRV(dirsv)), name);
3093                     tryname = SvPVX(namesv);
3094                     tryrsfp = 0;
3095
3096                     ENTER;
3097                     SAVETMPS;
3098                     EXTEND(SP, 2);
3099
3100                     PUSHMARK(SP);
3101                     PUSHs(dirsv);
3102                     PUSHs(sv);
3103                     PUTBACK;
3104                     if (sv_isobject(loader))
3105                         count = call_method("INC", G_ARRAY);
3106                     else
3107                         count = call_sv(loader, G_ARRAY);
3108                     SPAGAIN;
3109
3110                     if (count > 0) {
3111                         int i = 0;
3112                         SV *arg;
3113
3114                         SP -= count - 1;
3115                         arg = SP[i++];
3116
3117                         if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
3118                             arg = SvRV(arg);
3119                         }
3120
3121                         if (SvTYPE(arg) == SVt_PVGV) {
3122                             IO *io = GvIO((GV *)arg);
3123
3124                             ++filter_has_file;
3125
3126                             if (io) {
3127                                 tryrsfp = IoIFP(io);
3128                                 if (IoTYPE(io) == IoTYPE_PIPE) {
3129                                     /* reading from a child process doesn't
3130                                        nest -- when returning from reading
3131                                        the inner module, the outer one is
3132                                        unreadable (closed?)  I've tried to
3133                                        save the gv to manage the lifespan of
3134                                        the pipe, but this didn't help. XXX */
3135                                     filter_child_proc = (GV *)arg;
3136                                     (void)SvREFCNT_inc(filter_child_proc);
3137                                 }
3138                                 else {
3139                                     if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
3140                                         PerlIO_close(IoOFP(io));
3141                                     }
3142                                     IoIFP(io) = Nullfp;
3143                                     IoOFP(io) = Nullfp;
3144                                 }
3145                             }
3146
3147                             if (i < count) {
3148                                 arg = SP[i++];
3149                             }
3150                         }
3151
3152                         if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
3153                             filter_sub = arg;
3154                             (void)SvREFCNT_inc(filter_sub);
3155
3156                             if (i < count) {
3157                                 filter_state = SP[i];
3158                                 (void)SvREFCNT_inc(filter_state);
3159                             }
3160
3161                             if (tryrsfp == 0) {
3162                                 tryrsfp = PerlIO_open("/dev/null",
3163                                                       PERL_SCRIPT_MODE);
3164                             }
3165                         }
3166                     }
3167
3168                     PUTBACK;
3169                     FREETMPS;
3170                     LEAVE;
3171
3172                     if (tryrsfp) {
3173                         hook_sv = dirsv;
3174                         break;
3175                     }
3176
3177                     filter_has_file = 0;
3178                     if (filter_child_proc) {
3179                         SvREFCNT_dec(filter_child_proc);
3180                         filter_child_proc = 0;
3181                     }
3182                     if (filter_state) {
3183                         SvREFCNT_dec(filter_state);
3184                         filter_state = 0;
3185                     }
3186                     if (filter_sub) {
3187                         SvREFCNT_dec(filter_sub);
3188                         filter_sub = 0;
3189                     }
3190                 }
3191                 else {
3192                   if (!path_is_absolute(name)
3193 #ifdef MACOS_TRADITIONAL
3194                         /* We consider paths of the form :a:b ambiguous and interpret them first
3195                            as global then as local
3196                         */
3197                         || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
3198 #endif
3199                   ) {
3200                     char *dir = SvPVx(dirsv, n_a);
3201 #ifdef MACOS_TRADITIONAL
3202                     char buf1[256];
3203                     char buf2[256];
3204
3205                     MacPerl_CanonDir(name, buf2, 1);
3206                     Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf1, 0), buf2+(buf2[0] == ':'));
3207 #else
3208 #ifdef VMS
3209                     char *unixdir;
3210                     if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
3211                         continue;
3212                     sv_setpv(namesv, unixdir);
3213                     sv_catpv(namesv, unixname);
3214 #else
3215                     Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
3216 #endif
3217 #endif
3218                     TAINT_PROPER("require");
3219                     tryname = SvPVX(namesv);
3220                     tryrsfp = doopen_pm(tryname, PERL_SCRIPT_MODE);
3221                     if (tryrsfp) {
3222                         if (tryname[0] == '.' && tryname[1] == '/')
3223                             tryname += 2;
3224                         break;
3225                     }
3226                   }
3227                 }
3228             }
3229         }
3230     }
3231     SAVECOPFILE_FREE(&PL_compiling);
3232     CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
3233     SvREFCNT_dec(namesv);
3234     if (!tryrsfp) {
3235         if (PL_op->op_type == OP_REQUIRE) {
3236             char *msgstr = name;
3237             if (namesv) {                       /* did we lookup @INC? */
3238                 SV *msg = sv_2mortal(newSVpv(msgstr,0));
3239                 SV *dirmsgsv = NEWSV(0, 0);
3240                 AV *ar = GvAVn(PL_incgv);
3241                 I32 i;
3242                 sv_catpvn(msg, " in @INC", 8);
3243                 if (instr(SvPVX(msg), ".h "))
3244                     sv_catpv(msg, " (change .h to .ph maybe?)");
3245                 if (instr(SvPVX(msg), ".ph "))
3246                     sv_catpv(msg, " (did you run h2ph?)");
3247                 sv_catpv(msg, " (@INC contains:");
3248                 for (i = 0; i <= AvFILL(ar); i++) {
3249                     char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
3250                     Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
3251                     sv_catsv(msg, dirmsgsv);
3252                 }
3253                 sv_catpvn(msg, ")", 1);
3254                 SvREFCNT_dec(dirmsgsv);
3255                 msgstr = SvPV_nolen(msg);
3256             }
3257             DIE(aTHX_ "Can't locate %s", msgstr);
3258         }
3259
3260         RETPUSHUNDEF;
3261     }
3262     else
3263         SETERRNO(0, SS_NORMAL);
3264
3265     /* Assume success here to prevent recursive requirement. */
3266     len = strlen(name);
3267     /* Check whether a hook in @INC has already filled %INC */
3268     if (!hook_sv || !(svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
3269         (void)hv_store(GvHVn(PL_incgv), name, len,
3270                        (hook_sv ? SvREFCNT_inc(hook_sv)
3271                                 : newSVpv(CopFILE(&PL_compiling), 0)),
3272                        0 );
3273     }
3274
3275     ENTER;
3276     SAVETMPS;
3277     lex_start(sv_2mortal(newSVpvn("",0)));
3278     SAVEGENERICSV(PL_rsfp_filters);
3279     PL_rsfp_filters = Nullav;
3280
3281     PL_rsfp = tryrsfp;
3282     SAVEHINTS();
3283     PL_hints = 0;
3284     SAVESPTR(PL_compiling.cop_warnings);
3285     if (PL_dowarn & G_WARN_ALL_ON)
3286         PL_compiling.cop_warnings = pWARN_ALL ;
3287     else if (PL_dowarn & G_WARN_ALL_OFF)
3288         PL_compiling.cop_warnings = pWARN_NONE ;
3289     else if (PL_taint_warn)
3290         PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
3291     else
3292         PL_compiling.cop_warnings = pWARN_STD ;
3293     SAVESPTR(PL_compiling.cop_io);
3294     PL_compiling.cop_io = Nullsv;
3295
3296     if (filter_sub || filter_child_proc) {
3297         SV *datasv = filter_add(run_user_filter, Nullsv);
3298         IoLINES(datasv) = filter_has_file;
3299         IoFMT_GV(datasv) = (GV *)filter_child_proc;
3300         IoTOP_GV(datasv) = (GV *)filter_state;
3301         IoBOTTOM_GV(datasv) = (GV *)filter_sub;
3302     }
3303
3304     /* switch to eval mode */
3305     push_return(PL_op->op_next);
3306     PUSHBLOCK(cx, CXt_EVAL, SP);
3307     PUSHEVAL(cx, name, Nullgv);
3308
3309     SAVECOPLINE(&PL_compiling);
3310     CopLINE_set(&PL_compiling, 0);
3311
3312     PUTBACK;
3313
3314     /* Store and reset encoding. */
3315     encoding = PL_encoding;
3316     PL_encoding = Nullsv;
3317
3318     op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
3319     
3320     /* Restore encoding. */
3321     PL_encoding = encoding;
3322
3323     return op;
3324 }
3325
3326 PP(pp_dofile)
3327 {
3328     return pp_require();
3329 }
3330
3331 PP(pp_entereval)
3332 {
3333     dSP;
3334     register PERL_CONTEXT *cx;
3335     dPOPss;
3336     I32 gimme = GIMME_V, was = PL_sub_generation;
3337     char tbuf[TYPE_DIGITS(long) + 12];
3338     char *tmpbuf = tbuf;
3339     char *safestr;
3340     STRLEN len;
3341     OP *ret;
3342     CV* runcv;
3343     U32 seq;
3344
3345     if (!SvPV(sv,len))
3346         RETPUSHUNDEF;
3347     TAINT_PROPER("eval");
3348
3349     ENTER;
3350     lex_start(sv);
3351     SAVETMPS;
3352
3353     /* switch to eval mode */
3354
3355     if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
3356         SV *sv = sv_newmortal();
3357         Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
3358                        (unsigned long)++PL_evalseq,
3359                        CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
3360         tmpbuf = SvPVX(sv);
3361     }
3362     else
3363         sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
3364     SAVECOPFILE_FREE(&PL_compiling);
3365     CopFILE_set(&PL_compiling, tmpbuf+2);
3366     SAVECOPLINE(&PL_compiling);
3367     CopLINE_set(&PL_compiling, 1);
3368     /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
3369        deleting the eval's FILEGV from the stash before gv_check() runs
3370        (i.e. before run-time proper). To work around the coredump that
3371        ensues, we always turn GvMULTI_on for any globals that were
3372        introduced within evals. See force_ident(). GSAR 96-10-12 */
3373     safestr = savepv(tmpbuf);
3374     SAVEDELETE(PL_defstash, safestr, strlen(safestr));
3375     SAVEHINTS();
3376     PL_hints = PL_op->op_targ;
3377     SAVESPTR(PL_compiling.cop_warnings);
3378     if (specialWARN(PL_curcop->cop_warnings))
3379         PL_compiling.cop_warnings = PL_curcop->cop_warnings;
3380     else {
3381         PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
3382         SAVEFREESV(PL_compiling.cop_warnings);
3383     }
3384     SAVESPTR(PL_compiling.cop_io);
3385     if (specialCopIO(PL_curcop->cop_io))
3386         PL_compiling.cop_io = PL_curcop->cop_io;
3387     else {
3388         PL_compiling.cop_io = newSVsv(PL_curcop->cop_io);
3389         SAVEFREESV(PL_compiling.cop_io);
3390     }
3391     /* special case: an eval '' executed within the DB package gets lexically
3392      * placed in the first non-DB CV rather than the current CV - this
3393      * allows the debugger to execute code, find lexicals etc, in the
3394      * scope of the code being debugged. Passing &seq gets find_runcv
3395      * to do the dirty work for us */
3396     runcv = find_runcv(&seq);
3397
3398     push_return(PL_op->op_next);
3399     PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
3400     PUSHEVAL(cx, 0, Nullgv);
3401
3402     /* prepare to compile string */
3403
3404     if (PERLDB_LINE && PL_curstash != PL_debstash)
3405         save_lines(CopFILEAV(&PL_compiling), PL_linestr);
3406     PUTBACK;
3407     ret = doeval(gimme, NULL, runcv, seq);
3408     if (PERLDB_INTER && was != (I32)PL_sub_generation /* Some subs defined here. */
3409         && ret != PL_op->op_next) {     /* Successive compilation. */
3410         strcpy(safestr, "_<(eval )");   /* Anything fake and short. */
3411     }
3412     return DOCATCH(ret);
3413 }
3414
3415 PP(pp_leaveeval)
3416 {
3417     dSP;
3418     register SV **mark;
3419     SV **newsp;
3420     PMOP *newpm;
3421     I32 gimme;
3422     register PERL_CONTEXT *cx;
3423     OP *retop;
3424     U8 save_flags = PL_op -> op_flags;
3425     I32 optype;
3426
3427     POPBLOCK(cx,newpm);
3428     POPEVAL(cx);
3429     retop = pop_return();
3430
3431     TAINT_NOT;
3432     if (gimme == G_VOID)
3433         MARK = newsp;
3434     else if (gimme == G_SCALAR) {
3435         MARK = newsp + 1;
3436         if (MARK <= SP) {
3437             if (SvFLAGS(TOPs) & SVs_TEMP)
3438                 *MARK = TOPs;
3439             else
3440                 *MARK = sv_mortalcopy(TOPs);
3441         }
3442         else {
3443             MEXTEND(mark,0);
3444             *MARK = &PL_sv_undef;
3445         }
3446         SP = MARK;
3447     }
3448     else {
3449         /* in case LEAVE wipes old return values */
3450         for (mark = newsp + 1; mark <= SP; mark++) {
3451             if (!(SvFLAGS(*mark) & SVs_TEMP)) {
3452                 *mark = sv_mortalcopy(*mark);
3453                 TAINT_NOT;      /* Each item is independent */
3454             }
3455         }
3456     }
3457     PL_curpm = newpm;   /* Don't pop $1 et al till now */
3458
3459 #ifdef DEBUGGING
3460     assert(CvDEPTH(PL_compcv) == 1);
3461 #endif
3462     CvDEPTH(PL_compcv) = 0;
3463     lex_end();
3464
3465     if (optype == OP_REQUIRE &&
3466         !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
3467     {
3468         /* Unassume the success we assumed earlier. */
3469         SV *nsv = cx->blk_eval.old_namesv;
3470         (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
3471         retop = Perl_die(aTHX_ "%"SVf" did not return a true value", nsv);
3472         /* die_where() did LEAVE, or we won't be here */
3473     }
3474     else {
3475         LEAVE;
3476         if (!(save_flags & OPf_SPECIAL))
3477             sv_setpv(ERRSV,"");
3478     }
3479
3480     RETURNOP(retop);
3481 }
3482
3483 PP(pp_entertry)
3484 {
3485     dSP;
3486     register PERL_CONTEXT *cx;
3487     I32 gimme = GIMME_V;
3488
3489     ENTER;
3490     SAVETMPS;
3491
3492     push_return(cLOGOP->op_other->op_next);
3493     PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
3494     PUSHEVAL(cx, 0, 0);
3495
3496     PL_in_eval = EVAL_INEVAL;
3497     sv_setpv(ERRSV,"");
3498     PUTBACK;
3499     return DOCATCH(PL_op->op_next);
3500 }
3501
3502 PP(pp_leavetry)
3503 {
3504     dSP;
3505     register SV **mark;
3506     SV **newsp;
3507     PMOP *newpm;
3508     OP* retop;
3509     I32 gimme;
3510     register PERL_CONTEXT *cx;
3511     I32 optype;
3512
3513     POPBLOCK(cx,newpm);
3514     POPEVAL(cx);
3515     retop = pop_return();
3516
3517     TAINT_NOT;
3518     if (gimme == G_VOID)
3519         SP = newsp;
3520     else if (gimme == G_SCALAR) {
3521         MARK = newsp + 1;
3522         if (MARK <= SP) {
3523             if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
3524                 *MARK = TOPs;
3525             else
3526                 *MARK = sv_mortalcopy(TOPs);
3527         }
3528         else {
3529             MEXTEND(mark,0);
3530             *MARK = &PL_sv_undef;
3531         }
3532         SP = MARK;
3533     }
3534     else {
3535         /* in case LEAVE wipes old return values */
3536         for (mark = newsp + 1; mark <= SP; mark++) {
3537             if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
3538                 *mark = sv_mortalcopy(*mark);
3539                 TAINT_NOT;      /* Each item is independent */
3540             }
3541         }
3542     }
3543     PL_curpm = newpm;   /* Don't pop $1 et al till now */
3544
3545     LEAVE;
3546     sv_setpv(ERRSV,"");
3547     RETURNOP(retop);
3548 }
3549
3550 STATIC void
3551 S_doparseform(pTHX_ SV *sv)
3552 {
3553     STRLEN len;
3554     register char *s = SvPV_force(sv, len);
3555     register char *send = s + len;
3556     register char *base = Nullch;
3557     register I32 skipspaces = 0;
3558     bool noblank   = FALSE;
3559     bool repeat    = FALSE;
3560     bool postspace = FALSE;
3561     U32 *fops;
3562     register U32 *fpc;
3563     U32 *linepc = 0;
3564     register I32 arg;
3565     bool ischop;
3566     int maxops = 2; /* FF_LINEMARK + FF_END) */
3567
3568     if (len == 0)
3569         Perl_croak(aTHX_ "Null picture in formline");
3570
3571     /* estimate the buffer size needed */
3572     for (base = s; s <= send; s++) {
3573         if (*s == '\n' || *s == '@' || *s == '^')
3574             maxops += 10;
3575     }
3576     s = base;
3577     base = Nullch;
3578
3579     New(804, fops, maxops, U32);
3580     fpc = fops;
3581
3582     if (s < send) {
3583         linepc = fpc;
3584         *fpc++ = FF_LINEMARK;
3585         noblank = repeat = FALSE;
3586         base = s;
3587     }
3588
3589     while (s <= send) {
3590         switch (*s++) {
3591         default:
3592             skipspaces = 0;
3593             continue;
3594
3595         case '~':
3596             if (*s == '~') {
3597                 repeat = TRUE;
3598                 *s = ' ';
3599             }
3600             noblank = TRUE;
3601             s[-1] = ' ';
3602             /* FALL THROUGH */
3603         case ' ': case '\t':
3604             skipspaces++;
3605             continue;
3606         
3607         case '\n': case 0:
3608             arg = s - base;
3609             skipspaces++;
3610             arg -= skipspaces;
3611             if (arg) {
3612                 if (postspace)
3613                     *fpc++ = FF_SPACE;
3614                 *fpc++ = FF_LITERAL;
3615                 *fpc++ = (U16)arg;
3616             }
3617             postspace = FALSE;
3618             if (s <= send)
3619                 skipspaces--;
3620             if (skipspaces) {
3621                 *fpc++ = FF_SKIP;
3622                 *fpc++ = (U16)skipspaces;
3623             }
3624             skipspaces = 0;
3625             if (s <= send)
3626                 *fpc++ = FF_NEWLINE;
3627             if (noblank) {
3628                 *fpc++ = FF_BLANK;
3629                 if (repeat)
3630                     arg = fpc - linepc + 1;
3631                 else
3632                     arg = 0;
3633                 *fpc++ = (U16)arg;
3634             }
3635             if (s < send) {
3636                 linepc = fpc;
3637                 *fpc++ = FF_LINEMARK;
3638                 noblank = repeat = FALSE;
3639                 base = s;
3640             }
3641             else
3642                 s++;
3643             continue;
3644
3645         case '@':
3646         case '^':
3647             ischop = s[-1] == '^';
3648
3649             if (postspace) {
3650                 *fpc++ = FF_SPACE;
3651                 postspace = FALSE;
3652             }
3653             arg = (s - base) - 1;
3654             if (arg) {
3655                 *fpc++ = FF_LITERAL;
3656                 *fpc++ = (U16)arg;
3657             }
3658
3659             base = s - 1;
3660             *fpc++ = FF_FETCH;
3661             if (*s == '*') {
3662                 s++;
3663                 *fpc++ = 0;
3664                 *fpc++ = FF_LINEGLOB;
3665             }
3666             else if (*s == '#' || (*s == '.' && s[1] == '#')) {
3667                 arg = ischop ? 512 : 0;
3668                 base = s - 1;
3669                 while (*s == '#')
3670                     s++;
3671                 if (*s == '.') {
3672                     char *f;
3673                     s++;
3674                     f = s;
3675                     while (*s == '#')
3676                         s++;
3677                     arg |= 256 + (s - f);
3678                 }
3679                 *fpc++ = s - base;              /* fieldsize for FETCH */
3680                 *fpc++ = FF_DECIMAL;
3681                 *fpc++ = (U16)arg;
3682             }
3683             else if (*s == '0' && s[1] == '#') {  /* Zero padded decimals */
3684                 arg = ischop ? 512 : 0;
3685                 base = s - 1;
3686                 s++;                                /* skip the '0' first */
3687                 while (*s == '#')
3688                     s++;
3689                 if (*s == '.') {
3690                     char *f;
3691                     s++;
3692                     f = s;
3693                     while (*s == '#')
3694                         s++;
3695                     arg |= 256 + (s - f);
3696                 }
3697                 *fpc++ = s - base;                /* fieldsize for FETCH */
3698                 *fpc++ = FF_0DECIMAL;
3699                 *fpc++ = (U16)arg;
3700             }
3701             else {
3702                 I32 prespace = 0;
3703                 bool ismore = FALSE;
3704
3705                 if (*s == '>') {
3706                     while (*++s == '>') ;
3707                     prespace = FF_SPACE;
3708                 }
3709                 else if (*s == '|') {
3710                     while (*++s == '|') ;
3711                     prespace = FF_HALFSPACE;
3712                     postspace = TRUE;
3713                 }
3714                 else {
3715                     if (*s == '<')
3716                         while (*++s == '<') ;
3717                     postspace = TRUE;
3718                 }
3719                 if (*s == '.' && s[1] == '.' && s[2] == '.') {
3720                     s += 3;
3721                     ismore = TRUE;
3722                 }
3723                 *fpc++ = s - base;              /* fieldsize for FETCH */
3724
3725                 *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
3726
3727                 if (prespace)
3728                     *fpc++ = (U16)prespace;
3729                 *fpc++ = FF_ITEM;
3730                 if (ismore)
3731                     *fpc++ = FF_MORE;
3732                 if (ischop)
3733                     *fpc++ = FF_CHOP;
3734             }
3735             base = s;
3736             skipspaces = 0;
3737             continue;
3738         }
3739     }
3740     *fpc++ = FF_END;
3741
3742     assert (fpc <= fops + maxops); /* ensure our buffer estimate was valid */
3743     arg = fpc - fops;
3744     { /* need to jump to the next word */
3745         int z;
3746         z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
3747         SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U32) + 4);
3748         s = SvPVX(sv) + SvCUR(sv) + z;
3749     }
3750     Copy(fops, s, arg, U32);
3751     Safefree(fops);
3752     sv_magic(sv, Nullsv, PERL_MAGIC_fm, Nullch, 0);
3753     SvCOMPILED_on(sv);
3754 }
3755
3756 static I32
3757 run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen)
3758 {
3759     SV *datasv = FILTER_DATA(idx);
3760     int filter_has_file = IoLINES(datasv);
3761     GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
3762     SV *filter_state = (SV *)IoTOP_GV(datasv);
3763     SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
3764     int len = 0;
3765
3766     /* I was having segfault trouble under Linux 2.2.5 after a
3767        parse error occured.  (Had to hack around it with a test
3768        for PL_error_count == 0.)  Solaris doesn't segfault --
3769        not sure where the trouble is yet.  XXX */
3770
3771     if (filter_has_file) {
3772         len = FILTER_READ(idx+1, buf_sv, maxlen);
3773     }
3774
3775     if (filter_sub && len >= 0) {
3776         dSP;
3777         int count;
3778
3779         ENTER;
3780         SAVE_DEFSV;
3781         SAVETMPS;
3782         EXTEND(SP, 2);
3783
3784         DEFSV = buf_sv;
3785         PUSHMARK(SP);
3786         PUSHs(sv_2mortal(newSViv(maxlen)));
3787         if (filter_state) {
3788             PUSHs(filter_state);
3789         }
3790         PUTBACK;
3791         count = call_sv(filter_sub, G_SCALAR);
3792         SPAGAIN;
3793
3794         if (count > 0) {
3795             SV *out = POPs;
3796             if (SvOK(out)) {
3797                 len = SvIV(out);
3798             }
3799         }
3800
3801         PUTBACK;
3802         FREETMPS;
3803         LEAVE;
3804     }
3805
3806     if (len <= 0) {
3807         IoLINES(datasv) = 0;
3808         if (filter_child_proc) {
3809             SvREFCNT_dec(filter_child_proc);
3810             IoFMT_GV(datasv) = Nullgv;
3811         }
3812         if (filter_state) {
3813             SvREFCNT_dec(filter_state);
3814             IoTOP_GV(datasv) = Nullgv;
3815         }
3816         if (filter_sub) {
3817             SvREFCNT_dec(filter_sub);
3818             IoBOTTOM_GV(datasv) = Nullgv;
3819         }
3820         filter_del(run_user_filter);
3821     }
3822
3823     return len;
3824 }
3825
3826 /* perhaps someone can come up with a better name for
3827    this?  it is not really "absolute", per se ... */
3828 static bool
3829 S_path_is_absolute(pTHX_ char *name)
3830 {
3831     if (PERL_FILE_IS_ABSOLUTE(name)
3832 #ifdef MACOS_TRADITIONAL
3833         || (*name == ':'))
3834 #else
3835         || (*name == '.' && (name[1] == '/' ||
3836                              (name[1] == '.' && name[2] == '/'))))
3837 #endif
3838     {
3839         return TRUE;
3840     }
3841     else
3842         return FALSE;
3843 }