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