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