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