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