ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/pp_ctl.c
Revision: 1.1
Committed: Thu Jun 30 14:26:42 2005 UTC (21 years, 3 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

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