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