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