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