This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make filetest ops handle get-magic correctly for glob(ref)s
[perl5.git] / pp_hot.c
... / ...
CommitLineData
1/* pp_hot.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 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
13 * shaking the air.
14 *
15 * Awake! Awake! Fear, Fire, Foes! Awake!
16 * Fire, Foes! Awake!
17 *
18 * [p.1007 of _The Lord of the Rings_, VI/viii: "The Scouring of the Shire"]
19 */
20
21/* This file contains 'hot' pp ("push/pop") functions that
22 * execute the opcodes that make up a perl program. A typical pp function
23 * expects to find its arguments on the stack, and usually pushes its
24 * results onto the stack, hence the 'pp' terminology. Each OP structure
25 * contains a pointer to the relevant pp_foo() function.
26 *
27 * By 'hot', we mean common ops whose execution speed is critical.
28 * By gathering them together into a single file, we encourage
29 * CPU cache hits on hot code. Also it could be taken as a warning not to
30 * change any code in this file unless you're sure it won't affect
31 * performance.
32 */
33
34#include "EXTERN.h"
35#define PERL_IN_PP_HOT_C
36#include "perl.h"
37
38/* Hot code. */
39
40PP(pp_const)
41{
42 dVAR;
43 dSP;
44 XPUSHs(cSVOP_sv);
45 RETURN;
46}
47
48PP(pp_nextstate)
49{
50 dVAR;
51 PL_curcop = (COP*)PL_op;
52 TAINT_NOT; /* Each statement is presumed innocent */
53 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
54 FREETMPS;
55 PERL_ASYNC_CHECK();
56 return NORMAL;
57}
58
59PP(pp_gvsv)
60{
61 dVAR;
62 dSP;
63 EXTEND(SP,1);
64 if (PL_op->op_private & OPpLVAL_INTRO)
65 PUSHs(save_scalar(cGVOP_gv));
66 else
67 PUSHs(GvSVn(cGVOP_gv));
68 RETURN;
69}
70
71PP(pp_null)
72{
73 dVAR;
74 return NORMAL;
75}
76
77/* This is sometimes called directly by pp_coreargs. */
78PP(pp_pushmark)
79{
80 dVAR;
81 PUSHMARK(PL_stack_sp);
82 return NORMAL;
83}
84
85PP(pp_stringify)
86{
87 dVAR; dSP; dTARGET;
88 sv_copypv(TARG,TOPs);
89 SETTARG;
90 RETURN;
91}
92
93PP(pp_gv)
94{
95 dVAR; dSP;
96 XPUSHs(MUTABLE_SV(cGVOP_gv));
97 RETURN;
98}
99
100PP(pp_and)
101{
102 dVAR; dSP;
103 PERL_ASYNC_CHECK();
104 if (!SvTRUE(TOPs))
105 RETURN;
106 else {
107 if (PL_op->op_type == OP_AND)
108 --SP;
109 RETURNOP(cLOGOP->op_other);
110 }
111}
112
113PP(pp_sassign)
114{
115 dVAR; dSP; dPOPTOPssrl;
116
117 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
118 SV * const temp = left;
119 left = right; right = temp;
120 }
121 if (PL_tainting && PL_tainted && !SvTAINTED(left))
122 TAINT_NOT;
123 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
124 SV * const cv = SvRV(left);
125 const U32 cv_type = SvTYPE(cv);
126 const bool is_gv = isGV_with_GP(right);
127 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
128
129 if (!got_coderef) {
130 assert(SvROK(cv));
131 }
132
133 /* Can do the optimisation if right (LVALUE) is not a typeglob,
134 left (RVALUE) is a reference to something, and we're in void
135 context. */
136 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
137 /* Is the target symbol table currently empty? */
138 GV * const gv = gv_fetchsv_nomg(right, GV_NOINIT, SVt_PVGV);
139 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
140 /* Good. Create a new proxy constant subroutine in the target.
141 The gv becomes a(nother) reference to the constant. */
142 SV *const value = SvRV(cv);
143
144 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
145 SvPCS_IMPORTED_on(gv);
146 SvRV_set(gv, value);
147 SvREFCNT_inc_simple_void(value);
148 SETs(right);
149 RETURN;
150 }
151 }
152
153 /* Need to fix things up. */
154 if (!is_gv) {
155 /* Need to fix GV. */
156 right = MUTABLE_SV(gv_fetchsv_nomg(right,GV_ADD, SVt_PVGV));
157 }
158
159 if (!got_coderef) {
160 /* We've been returned a constant rather than a full subroutine,
161 but they expect a subroutine reference to apply. */
162 if (SvROK(cv)) {
163 ENTER_with_name("sassign_coderef");
164 SvREFCNT_inc_void(SvRV(cv));
165 /* newCONSTSUB takes a reference count on the passed in SV
166 from us. We set the name to NULL, otherwise we get into
167 all sorts of fun as the reference to our new sub is
168 donated to the GV that we're about to assign to.
169 */
170 SvRV_set(left, MUTABLE_SV(newCONSTSUB(GvSTASH(right), NULL,
171 SvRV(cv))));
172 SvREFCNT_dec(cv);
173 LEAVE_with_name("sassign_coderef");
174 } else {
175 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
176 is that
177 First: ops for \&{"BONK"}; return us the constant in the
178 symbol table
179 Second: ops for *{"BONK"} cause that symbol table entry
180 (and our reference to it) to be upgraded from RV
181 to typeblob)
182 Thirdly: We get here. cv is actually PVGV now, and its
183 GvCV() is actually the subroutine we're looking for
184
185 So change the reference so that it points to the subroutine
186 of that typeglob, as that's what they were after all along.
187 */
188 GV *const upgraded = MUTABLE_GV(cv);
189 CV *const source = GvCV(upgraded);
190
191 assert(source);
192 assert(CvFLAGS(source) & CVf_CONST);
193
194 SvREFCNT_inc_void(source);
195 SvREFCNT_dec(upgraded);
196 SvRV_set(left, MUTABLE_SV(source));
197 }
198 }
199
200 }
201 if (
202 SvTEMP(right) && !SvSMAGICAL(right) && SvREFCNT(right) == 1 &&
203 (!isGV_with_GP(right) || SvFAKE(right)) && ckWARN(WARN_MISC)
204 )
205 Perl_warner(aTHX_
206 packWARN(WARN_MISC), "Useless assignment to a temporary"
207 );
208 SvSetMagicSV(right, left);
209 SETs(right);
210 RETURN;
211}
212
213PP(pp_cond_expr)
214{
215 dVAR; dSP;
216 PERL_ASYNC_CHECK();
217 if (SvTRUEx(POPs))
218 RETURNOP(cLOGOP->op_other);
219 else
220 RETURNOP(cLOGOP->op_next);
221}
222
223PP(pp_unstack)
224{
225 dVAR;
226 PERL_ASYNC_CHECK();
227 TAINT_NOT; /* Each statement is presumed innocent */
228 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
229 FREETMPS;
230 if (!(PL_op->op_flags & OPf_SPECIAL)) {
231 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
232 LEAVE_SCOPE(oldsave);
233 }
234 return NORMAL;
235}
236
237PP(pp_concat)
238{
239 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
240 {
241 dPOPTOPssrl;
242 bool lbyte;
243 STRLEN rlen;
244 const char *rpv = NULL;
245 bool rbyte = FALSE;
246 bool rcopied = FALSE;
247
248 if (TARG == right && right != left) { /* $r = $l.$r */
249 rpv = SvPV_nomg_const(right, rlen);
250 rbyte = !DO_UTF8(right);
251 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
252 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
253 rcopied = TRUE;
254 }
255
256 if (TARG != left) { /* not $l .= $r */
257 STRLEN llen;
258 const char* const lpv = SvPV_nomg_const(left, llen);
259 lbyte = !DO_UTF8(left);
260 sv_setpvn(TARG, lpv, llen);
261 if (!lbyte)
262 SvUTF8_on(TARG);
263 else
264 SvUTF8_off(TARG);
265 }
266 else { /* $l .= $r */
267 if (!SvOK(TARG)) {
268 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
269 report_uninit(right);
270 sv_setpvs(left, "");
271 }
272 lbyte = (SvROK(left) && SvTYPE(SvRV(left)) == SVt_REGEXP)
273 ? !DO_UTF8(SvRV(left)) : !DO_UTF8(left);
274 if (IN_BYTES)
275 SvUTF8_off(TARG);
276 }
277
278 if (!rcopied) {
279 if (left == right)
280 /* $r.$r: do magic twice: tied might return different 2nd time */
281 SvGETMAGIC(right);
282 rpv = SvPV_nomg_const(right, rlen);
283 rbyte = !DO_UTF8(right);
284 }
285 if (lbyte != rbyte) {
286 /* sv_utf8_upgrade_nomg() may reallocate the stack */
287 PUTBACK;
288 if (lbyte)
289 sv_utf8_upgrade_nomg(TARG);
290 else {
291 if (!rcopied)
292 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
293 sv_utf8_upgrade_nomg(right);
294 rpv = SvPV_nomg_const(right, rlen);
295 }
296 SPAGAIN;
297 }
298 sv_catpvn_nomg(TARG, rpv, rlen);
299
300 SETTARG;
301 RETURN;
302 }
303}
304
305PP(pp_padsv)
306{
307 dVAR; dSP; dTARGET;
308 XPUSHs(TARG);
309 if (PL_op->op_flags & OPf_MOD) {
310 if (PL_op->op_private & OPpLVAL_INTRO)
311 if (!(PL_op->op_private & OPpPAD_STATE))
312 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
313 if (PL_op->op_private & OPpDEREF) {
314 PUTBACK;
315 TOPs = vivify_ref(TOPs, PL_op->op_private & OPpDEREF);
316 SPAGAIN;
317 }
318 }
319 RETURN;
320}
321
322PP(pp_readline)
323{
324 dVAR;
325 dSP;
326 if (TOPs) {
327 SvGETMAGIC(TOPs);
328 tryAMAGICunTARGET(iter_amg, 0, 0);
329 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
330 }
331 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
332 if (!isGV_with_GP(PL_last_in_gv)) {
333 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
334 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
335 else {
336 dSP;
337 XPUSHs(MUTABLE_SV(PL_last_in_gv));
338 PUTBACK;
339 Perl_pp_rv2gv(aTHX);
340 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
341 }
342 }
343 return do_readline();
344}
345
346PP(pp_eq)
347{
348 dVAR; dSP;
349 SV *left, *right;
350
351 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
352 right = POPs;
353 left = TOPs;
354 SETs(boolSV(
355 (SvIOK_notUV(left) && SvIOK_notUV(right))
356 ? (SvIVX(left) == SvIVX(right))
357 : ( do_ncmp(left, right) == 0)
358 ));
359 RETURN;
360}
361
362PP(pp_preinc)
363{
364 dVAR; dSP;
365 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
366 Perl_croak_no_modify(aTHX);
367 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
368 && SvIVX(TOPs) != IV_MAX)
369 {
370 SvIV_set(TOPs, SvIVX(TOPs) + 1);
371 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
372 }
373 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
374 sv_inc(TOPs);
375 SvSETMAGIC(TOPs);
376 return NORMAL;
377}
378
379PP(pp_or)
380{
381 dVAR; dSP;
382 PERL_ASYNC_CHECK();
383 if (SvTRUE(TOPs))
384 RETURN;
385 else {
386 if (PL_op->op_type == OP_OR)
387 --SP;
388 RETURNOP(cLOGOP->op_other);
389 }
390}
391
392PP(pp_defined)
393{
394 dVAR; dSP;
395 register SV* sv;
396 bool defined;
397 const int op_type = PL_op->op_type;
398 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
399
400 if (is_dor) {
401 PERL_ASYNC_CHECK();
402 sv = TOPs;
403 if (!sv || !SvANY(sv)) {
404 if (op_type == OP_DOR)
405 --SP;
406 RETURNOP(cLOGOP->op_other);
407 }
408 }
409 else {
410 /* OP_DEFINED */
411 sv = POPs;
412 if (!sv || !SvANY(sv))
413 RETPUSHNO;
414 }
415
416 defined = FALSE;
417 switch (SvTYPE(sv)) {
418 case SVt_PVAV:
419 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
420 defined = TRUE;
421 break;
422 case SVt_PVHV:
423 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
424 defined = TRUE;
425 break;
426 case SVt_PVCV:
427 if (CvROOT(sv) || CvXSUB(sv))
428 defined = TRUE;
429 break;
430 default:
431 SvGETMAGIC(sv);
432 if (SvOK(sv))
433 defined = TRUE;
434 break;
435 }
436
437 if (is_dor) {
438 if(defined)
439 RETURN;
440 if(op_type == OP_DOR)
441 --SP;
442 RETURNOP(cLOGOP->op_other);
443 }
444 /* assuming OP_DEFINED */
445 if(defined)
446 RETPUSHYES;
447 RETPUSHNO;
448}
449
450PP(pp_add)
451{
452 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
453 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
454 svr = TOPs;
455 svl = TOPm1s;
456
457 useleft = USE_LEFT(svl);
458#ifdef PERL_PRESERVE_IVUV
459 /* We must see if we can perform the addition with integers if possible,
460 as the integer code detects overflow while the NV code doesn't.
461 If either argument hasn't had a numeric conversion yet attempt to get
462 the IV. It's important to do this now, rather than just assuming that
463 it's not IOK as a PV of "9223372036854775806" may not take well to NV
464 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
465 integer in case the second argument is IV=9223372036854775806
466 We can (now) rely on sv_2iv to do the right thing, only setting the
467 public IOK flag if the value in the NV (or PV) slot is truly integer.
468
469 A side effect is that this also aggressively prefers integer maths over
470 fp maths for integer values.
471
472 How to detect overflow?
473
474 C 99 section 6.2.6.1 says
475
476 The range of nonnegative values of a signed integer type is a subrange
477 of the corresponding unsigned integer type, and the representation of
478 the same value in each type is the same. A computation involving
479 unsigned operands can never overflow, because a result that cannot be
480 represented by the resulting unsigned integer type is reduced modulo
481 the number that is one greater than the largest value that can be
482 represented by the resulting type.
483
484 (the 9th paragraph)
485
486 which I read as "unsigned ints wrap."
487
488 signed integer overflow seems to be classed as "exception condition"
489
490 If an exceptional condition occurs during the evaluation of an
491 expression (that is, if the result is not mathematically defined or not
492 in the range of representable values for its type), the behavior is
493 undefined.
494
495 (6.5, the 5th paragraph)
496
497 I had assumed that on 2s complement machines signed arithmetic would
498 wrap, hence coded pp_add and pp_subtract on the assumption that
499 everything perl builds on would be happy. After much wailing and
500 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
501 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
502 unsigned code below is actually shorter than the old code. :-)
503 */
504
505 SvIV_please_nomg(svr);
506
507 if (SvIOK(svr)) {
508 /* Unless the left argument is integer in range we are going to have to
509 use NV maths. Hence only attempt to coerce the right argument if
510 we know the left is integer. */
511 register UV auv = 0;
512 bool auvok = FALSE;
513 bool a_valid = 0;
514
515 if (!useleft) {
516 auv = 0;
517 a_valid = auvok = 1;
518 /* left operand is undef, treat as zero. + 0 is identity,
519 Could SETi or SETu right now, but space optimise by not adding
520 lots of code to speed up what is probably a rarish case. */
521 } else {
522 /* Left operand is defined, so is it IV? */
523 SvIV_please_nomg(svl);
524 if (SvIOK(svl)) {
525 if ((auvok = SvUOK(svl)))
526 auv = SvUVX(svl);
527 else {
528 register const IV aiv = SvIVX(svl);
529 if (aiv >= 0) {
530 auv = aiv;
531 auvok = 1; /* Now acting as a sign flag. */
532 } else { /* 2s complement assumption for IV_MIN */
533 auv = (UV)-aiv;
534 }
535 }
536 a_valid = 1;
537 }
538 }
539 if (a_valid) {
540 bool result_good = 0;
541 UV result;
542 register UV buv;
543 bool buvok = SvUOK(svr);
544
545 if (buvok)
546 buv = SvUVX(svr);
547 else {
548 register const IV biv = SvIVX(svr);
549 if (biv >= 0) {
550 buv = biv;
551 buvok = 1;
552 } else
553 buv = (UV)-biv;
554 }
555 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
556 else "IV" now, independent of how it came in.
557 if a, b represents positive, A, B negative, a maps to -A etc
558 a + b => (a + b)
559 A + b => -(a - b)
560 a + B => (a - b)
561 A + B => -(a + b)
562 all UV maths. negate result if A negative.
563 add if signs same, subtract if signs differ. */
564
565 if (auvok ^ buvok) {
566 /* Signs differ. */
567 if (auv >= buv) {
568 result = auv - buv;
569 /* Must get smaller */
570 if (result <= auv)
571 result_good = 1;
572 } else {
573 result = buv - auv;
574 if (result <= buv) {
575 /* result really should be -(auv-buv). as its negation
576 of true value, need to swap our result flag */
577 auvok = !auvok;
578 result_good = 1;
579 }
580 }
581 } else {
582 /* Signs same */
583 result = auv + buv;
584 if (result >= auv)
585 result_good = 1;
586 }
587 if (result_good) {
588 SP--;
589 if (auvok)
590 SETu( result );
591 else {
592 /* Negate result */
593 if (result <= (UV)IV_MIN)
594 SETi( -(IV)result );
595 else {
596 /* result valid, but out of range for IV. */
597 SETn( -(NV)result );
598 }
599 }
600 RETURN;
601 } /* Overflow, drop through to NVs. */
602 }
603 }
604#endif
605 {
606 NV value = SvNV_nomg(svr);
607 (void)POPs;
608 if (!useleft) {
609 /* left operand is undef, treat as zero. + 0.0 is identity. */
610 SETn(value);
611 RETURN;
612 }
613 SETn( value + SvNV_nomg(svl) );
614 RETURN;
615 }
616}
617
618PP(pp_aelemfast)
619{
620 dVAR; dSP;
621 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
622 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
623 const U32 lval = PL_op->op_flags & OPf_MOD;
624 SV** const svp = av_fetch(av, PL_op->op_private, lval);
625 SV *sv = (svp ? *svp : &PL_sv_undef);
626 EXTEND(SP, 1);
627 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
628 mg_get(sv);
629 PUSHs(sv);
630 RETURN;
631}
632
633PP(pp_join)
634{
635 dVAR; dSP; dMARK; dTARGET;
636 MARK++;
637 do_join(TARG, *MARK, MARK, SP);
638 SP = MARK;
639 SETs(TARG);
640 RETURN;
641}
642
643PP(pp_pushre)
644{
645 dVAR; dSP;
646#ifdef DEBUGGING
647 /*
648 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
649 * will be enough to hold an OP*.
650 */
651 SV* const sv = sv_newmortal();
652 sv_upgrade(sv, SVt_PVLV);
653 LvTYPE(sv) = '/';
654 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
655 XPUSHs(sv);
656#else
657 XPUSHs(MUTABLE_SV(PL_op));
658#endif
659 RETURN;
660}
661
662/* Oversized hot code. */
663
664PP(pp_print)
665{
666 dVAR; dSP; dMARK; dORIGMARK;
667 register PerlIO *fp;
668 MAGIC *mg;
669 GV * const gv
670 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
671 IO *io = GvIO(gv);
672
673 if (io
674 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
675 {
676 had_magic:
677 if (MARK == ORIGMARK) {
678 /* If using default handle then we need to make space to
679 * pass object as 1st arg, so move other args up ...
680 */
681 MEXTEND(SP, 1);
682 ++MARK;
683 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
684 ++SP;
685 }
686 return Perl_tied_method(aTHX_ "PRINT", mark - 1, MUTABLE_SV(io),
687 mg,
688 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
689 | (PL_op->op_type == OP_SAY
690 ? TIED_METHOD_SAY : 0)), sp - mark);
691 }
692 if (!io) {
693 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
694 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
695 goto had_magic;
696 report_evil_fh(gv);
697 SETERRNO(EBADF,RMS_IFI);
698 goto just_say_no;
699 }
700 else if (!(fp = IoOFP(io))) {
701 if (IoIFP(io))
702 report_wrongway_fh(gv, '<');
703 else
704 report_evil_fh(gv);
705 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
706 goto just_say_no;
707 }
708 else {
709 SV * const ofs = GvSV(PL_ofsgv); /* $, */
710 MARK++;
711 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
712 while (MARK <= SP) {
713 if (!do_print(*MARK, fp))
714 break;
715 MARK++;
716 if (MARK <= SP) {
717 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
718 if (!do_print(GvSV(PL_ofsgv), fp)) {
719 MARK--;
720 break;
721 }
722 }
723 }
724 }
725 else {
726 while (MARK <= SP) {
727 if (!do_print(*MARK, fp))
728 break;
729 MARK++;
730 }
731 }
732 if (MARK <= SP)
733 goto just_say_no;
734 else {
735 if (PL_op->op_type == OP_SAY) {
736 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
737 goto just_say_no;
738 }
739 else if (PL_ors_sv && SvOK(PL_ors_sv))
740 if (!do_print(PL_ors_sv, fp)) /* $\ */
741 goto just_say_no;
742
743 if (IoFLAGS(io) & IOf_FLUSH)
744 if (PerlIO_flush(fp) == EOF)
745 goto just_say_no;
746 }
747 }
748 SP = ORIGMARK;
749 XPUSHs(&PL_sv_yes);
750 RETURN;
751
752 just_say_no:
753 SP = ORIGMARK;
754 XPUSHs(&PL_sv_undef);
755 RETURN;
756}
757
758PP(pp_rv2av)
759{
760 dVAR; dSP; dTOPss;
761 const I32 gimme = GIMME_V;
762 static const char an_array[] = "an ARRAY";
763 static const char a_hash[] = "a HASH";
764 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
765 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
766
767 SvGETMAGIC(sv);
768 if (SvROK(sv)) {
769 if (SvAMAGIC(sv)) {
770 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
771 SPAGAIN;
772 }
773 sv = SvRV(sv);
774 if (SvTYPE(sv) != type)
775 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
776 if (PL_op->op_flags & OPf_REF) {
777 SETs(sv);
778 RETURN;
779 }
780 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
781 const I32 flags = is_lvalue_sub();
782 if (flags && !(flags & OPpENTERSUB_INARGS)) {
783 if (gimme != G_ARRAY)
784 goto croak_cant_return;
785 SETs(sv);
786 RETURN;
787 }
788 }
789 else if (PL_op->op_flags & OPf_MOD
790 && PL_op->op_private & OPpLVAL_INTRO)
791 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
792 }
793 else {
794 if (SvTYPE(sv) == type) {
795 if (PL_op->op_flags & OPf_REF) {
796 SETs(sv);
797 RETURN;
798 }
799 else if (LVRET) {
800 if (gimme != G_ARRAY)
801 goto croak_cant_return;
802 SETs(sv);
803 RETURN;
804 }
805 }
806 else {
807 GV *gv;
808
809 if (!isGV_with_GP(sv)) {
810 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
811 type, &sp);
812 if (!gv)
813 RETURN;
814 }
815 else {
816 gv = MUTABLE_GV(sv);
817 }
818 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
819 if (PL_op->op_private & OPpLVAL_INTRO)
820 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
821 if (PL_op->op_flags & OPf_REF) {
822 SETs(sv);
823 RETURN;
824 }
825 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
826 const I32 flags = is_lvalue_sub();
827 if (flags && !(flags & OPpENTERSUB_INARGS)) {
828 if (gimme != G_ARRAY)
829 goto croak_cant_return;
830 SETs(sv);
831 RETURN;
832 }
833 }
834 }
835 }
836
837 if (is_pp_rv2av) {
838 AV *const av = MUTABLE_AV(sv);
839 /* The guts of pp_rv2av, with no intending change to preserve history
840 (until such time as we get tools that can do blame annotation across
841 whitespace changes. */
842 if (gimme == G_ARRAY) {
843 const I32 maxarg = AvFILL(av) + 1;
844 (void)POPs; /* XXXX May be optimized away? */
845 EXTEND(SP, maxarg);
846 if (SvRMAGICAL(av)) {
847 U32 i;
848 for (i=0; i < (U32)maxarg; i++) {
849 SV ** const svp = av_fetch(av, i, FALSE);
850 /* See note in pp_helem, and bug id #27839 */
851 SP[i+1] = svp
852 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
853 : &PL_sv_undef;
854 }
855 }
856 else {
857 Copy(AvARRAY(av), SP+1, maxarg, SV*);
858 }
859 SP += maxarg;
860 }
861 else if (gimme == G_SCALAR) {
862 dTARGET;
863 const I32 maxarg = AvFILL(av) + 1;
864 SETi(maxarg);
865 }
866 } else {
867 /* The guts of pp_rv2hv */
868 if (gimme == G_ARRAY) { /* array wanted */
869 *PL_stack_sp = sv;
870 return Perl_do_kv(aTHX);
871 }
872 else if (gimme == G_SCALAR) {
873 dTARGET;
874 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
875 SPAGAIN;
876 SETTARG;
877 }
878 }
879 RETURN;
880
881 croak_cant_return:
882 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
883 is_pp_rv2av ? "array" : "hash");
884 RETURN;
885}
886
887STATIC void
888S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
889{
890 dVAR;
891
892 PERL_ARGS_ASSERT_DO_ODDBALL;
893
894 if (*relem) {
895 SV *tmpstr;
896 const HE *didstore;
897
898 if (ckWARN(WARN_MISC)) {
899 const char *err;
900 if (relem == firstrelem &&
901 SvROK(*relem) &&
902 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
903 SvTYPE(SvRV(*relem)) == SVt_PVHV))
904 {
905 err = "Reference found where even-sized list expected";
906 }
907 else
908 err = "Odd number of elements in hash assignment";
909 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
910 }
911
912 tmpstr = newSV(0);
913 didstore = hv_store_ent(hash,*relem,tmpstr,0);
914 if (SvMAGICAL(hash)) {
915 if (SvSMAGICAL(tmpstr))
916 mg_set(tmpstr);
917 if (!didstore)
918 sv_2mortal(tmpstr);
919 }
920 TAINT_NOT;
921 }
922}
923
924PP(pp_aassign)
925{
926 dVAR; dSP;
927 SV **lastlelem = PL_stack_sp;
928 SV **lastrelem = PL_stack_base + POPMARK;
929 SV **firstrelem = PL_stack_base + POPMARK + 1;
930 SV **firstlelem = lastrelem + 1;
931
932 register SV **relem;
933 register SV **lelem;
934
935 register SV *sv;
936 register AV *ary;
937
938 I32 gimme;
939 HV *hash;
940 I32 i;
941 int magic;
942 int duplicates = 0;
943 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
944
945 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
946 gimme = GIMME_V;
947
948 /* If there's a common identifier on both sides we have to take
949 * special care that assigning the identifier on the left doesn't
950 * clobber a value on the right that's used later in the list.
951 * Don't bother if LHS is just an empty hash or array.
952 */
953
954 if ( (PL_op->op_private & OPpASSIGN_COMMON)
955 && (
956 firstlelem != lastlelem
957 || ! ((sv = *firstlelem))
958 || SvMAGICAL(sv)
959 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
960 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
961 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
962 )
963 ) {
964 EXTEND_MORTAL(lastrelem - firstrelem + 1);
965 for (relem = firstrelem; relem <= lastrelem; relem++) {
966 if ((sv = *relem)) {
967 TAINT_NOT; /* Each item is independent */
968
969 /* Dear TODO test in t/op/sort.t, I love you.
970 (It's relying on a panic, not a "semi-panic" from newSVsv()
971 and then an assertion failure below.) */
972 if (SvIS_FREED(sv)) {
973 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
974 (void*)sv);
975 }
976 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
977 and we need a second copy of a temp here. */
978 *relem = sv_2mortal(newSVsv(sv));
979 }
980 }
981 }
982
983 relem = firstrelem;
984 lelem = firstlelem;
985 ary = NULL;
986 hash = NULL;
987
988 while (lelem <= lastlelem) {
989 TAINT_NOT; /* Each item stands on its own, taintwise. */
990 sv = *lelem++;
991 switch (SvTYPE(sv)) {
992 case SVt_PVAV:
993 ary = MUTABLE_AV(sv);
994 magic = SvMAGICAL(ary) != 0;
995 av_clear(ary);
996 av_extend(ary, lastrelem - relem);
997 i = 0;
998 while (relem <= lastrelem) { /* gobble up all the rest */
999 SV **didstore;
1000 assert(*relem);
1001 sv = newSV(0);
1002 sv_setsv(sv, *relem);
1003 *(relem++) = sv;
1004 didstore = av_store(ary,i++,sv);
1005 if (magic) {
1006 if (SvSMAGICAL(sv))
1007 mg_set(sv);
1008 if (!didstore)
1009 sv_2mortal(sv);
1010 }
1011 TAINT_NOT;
1012 }
1013 if (PL_delaymagic & DM_ARRAY_ISA)
1014 SvSETMAGIC(MUTABLE_SV(ary));
1015 break;
1016 case SVt_PVHV: { /* normal hash */
1017 SV *tmpstr;
1018 SV** topelem = relem;
1019
1020 hash = MUTABLE_HV(sv);
1021 magic = SvMAGICAL(hash) != 0;
1022 hv_clear(hash);
1023 firsthashrelem = relem;
1024
1025 while (relem < lastrelem) { /* gobble up all the rest */
1026 HE *didstore;
1027 sv = *relem ? *relem : &PL_sv_no;
1028 relem++;
1029 tmpstr = newSV(0);
1030 if (*relem)
1031 sv_setsv(tmpstr,*relem); /* value */
1032 relem++;
1033 if (gimme != G_VOID) {
1034 if (hv_exists_ent(hash, sv, 0))
1035 /* key overwrites an existing entry */
1036 duplicates += 2;
1037 else
1038 if (gimme == G_ARRAY) {
1039 /* copy element back: possibly to an earlier
1040 * stack location if we encountered dups earlier */
1041 *topelem++ = sv;
1042 *topelem++ = tmpstr;
1043 }
1044 }
1045 didstore = hv_store_ent(hash,sv,tmpstr,0);
1046 if (magic) {
1047 if (SvSMAGICAL(tmpstr))
1048 mg_set(tmpstr);
1049 if (!didstore)
1050 sv_2mortal(tmpstr);
1051 }
1052 TAINT_NOT;
1053 }
1054 if (relem == lastrelem) {
1055 do_oddball(hash, relem, firstrelem);
1056 relem++;
1057 }
1058 }
1059 break;
1060 default:
1061 if (SvIMMORTAL(sv)) {
1062 if (relem <= lastrelem)
1063 relem++;
1064 break;
1065 }
1066 if (relem <= lastrelem) {
1067 if (
1068 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1069 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1070 )
1071 Perl_warner(aTHX_
1072 packWARN(WARN_MISC),
1073 "Useless assignment to a temporary"
1074 );
1075 sv_setsv(sv, *relem);
1076 *(relem++) = sv;
1077 }
1078 else
1079 sv_setsv(sv, &PL_sv_undef);
1080 SvSETMAGIC(sv);
1081 break;
1082 }
1083 }
1084 if (PL_delaymagic & ~DM_DELAY) {
1085 if (PL_delaymagic & DM_UID) {
1086#ifdef HAS_SETRESUID
1087 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1088 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1089 (Uid_t)-1);
1090#else
1091# ifdef HAS_SETREUID
1092 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1093 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1094# else
1095# ifdef HAS_SETRUID
1096 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1097 (void)setruid(PL_uid);
1098 PL_delaymagic &= ~DM_RUID;
1099 }
1100# endif /* HAS_SETRUID */
1101# ifdef HAS_SETEUID
1102 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1103 (void)seteuid(PL_euid);
1104 PL_delaymagic &= ~DM_EUID;
1105 }
1106# endif /* HAS_SETEUID */
1107 if (PL_delaymagic & DM_UID) {
1108 if (PL_uid != PL_euid)
1109 DIE(aTHX_ "No setreuid available");
1110 (void)PerlProc_setuid(PL_uid);
1111 }
1112# endif /* HAS_SETREUID */
1113#endif /* HAS_SETRESUID */
1114 PL_uid = PerlProc_getuid();
1115 PL_euid = PerlProc_geteuid();
1116 }
1117 if (PL_delaymagic & DM_GID) {
1118#ifdef HAS_SETRESGID
1119 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1120 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1121 (Gid_t)-1);
1122#else
1123# ifdef HAS_SETREGID
1124 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1125 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1126# else
1127# ifdef HAS_SETRGID
1128 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1129 (void)setrgid(PL_gid);
1130 PL_delaymagic &= ~DM_RGID;
1131 }
1132# endif /* HAS_SETRGID */
1133# ifdef HAS_SETEGID
1134 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1135 (void)setegid(PL_egid);
1136 PL_delaymagic &= ~DM_EGID;
1137 }
1138# endif /* HAS_SETEGID */
1139 if (PL_delaymagic & DM_GID) {
1140 if (PL_gid != PL_egid)
1141 DIE(aTHX_ "No setregid available");
1142 (void)PerlProc_setgid(PL_gid);
1143 }
1144# endif /* HAS_SETREGID */
1145#endif /* HAS_SETRESGID */
1146 PL_gid = PerlProc_getgid();
1147 PL_egid = PerlProc_getegid();
1148 }
1149 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1150 }
1151 PL_delaymagic = 0;
1152
1153 if (gimme == G_VOID)
1154 SP = firstrelem - 1;
1155 else if (gimme == G_SCALAR) {
1156 dTARGET;
1157 SP = firstrelem;
1158 SETi(lastrelem - firstrelem + 1 - duplicates);
1159 }
1160 else {
1161 if (ary)
1162 SP = lastrelem;
1163 else if (hash) {
1164 if (duplicates) {
1165 /* at this point we have removed the duplicate key/value
1166 * pairs from the stack, but the remaining values may be
1167 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1168 * the (a 2), but the stack now probably contains
1169 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1170 * obliterates the earlier key. So refresh all values. */
1171 lastrelem -= duplicates;
1172 relem = firsthashrelem;
1173 while (relem < lastrelem) {
1174 HE *he;
1175 sv = *relem++;
1176 he = hv_fetch_ent(hash, sv, 0, 0);
1177 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1178 }
1179 }
1180 SP = lastrelem;
1181 }
1182 else
1183 SP = firstrelem + (lastlelem - firstlelem);
1184 lelem = firstlelem + (relem - firstrelem);
1185 while (relem <= SP)
1186 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1187 }
1188
1189 RETURN;
1190}
1191
1192PP(pp_qr)
1193{
1194 dVAR; dSP;
1195 register PMOP * const pm = cPMOP;
1196 REGEXP * rx = PM_GETRE(pm);
1197 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1198 SV * const rv = sv_newmortal();
1199
1200 SvUPGRADE(rv, SVt_IV);
1201 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1202 loathe to use it here, but it seems to be the right fix. Or close.
1203 The key part appears to be that it's essential for pp_qr to return a new
1204 object (SV), which implies that there needs to be an effective way to
1205 generate a new SV from the existing SV that is pre-compiled in the
1206 optree. */
1207 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1208 SvROK_on(rv);
1209
1210 if (pkg) {
1211 HV *const stash = gv_stashsv(pkg, GV_ADD);
1212 SvREFCNT_dec(pkg);
1213 (void)sv_bless(rv, stash);
1214 }
1215
1216 if (RX_EXTFLAGS(rx) & RXf_TAINTED) {
1217 SvTAINTED_on(rv);
1218 SvTAINTED_on(SvRV(rv));
1219 }
1220 XPUSHs(rv);
1221 RETURN;
1222}
1223
1224PP(pp_match)
1225{
1226 dVAR; dSP; dTARG;
1227 register PMOP *pm = cPMOP;
1228 PMOP *dynpm = pm;
1229 register const char *t;
1230 register const char *s;
1231 const char *strend;
1232 I32 global;
1233 U8 r_flags = REXEC_CHECKED;
1234 const char *truebase; /* Start of string */
1235 register REGEXP *rx = PM_GETRE(pm);
1236 bool rxtainted;
1237 const I32 gimme = GIMME;
1238 STRLEN len;
1239 I32 minmatch = 0;
1240 const I32 oldsave = PL_savestack_ix;
1241 I32 update_minmatch = 1;
1242 I32 had_zerolen = 0;
1243 U32 gpos = 0;
1244
1245 if (PL_op->op_flags & OPf_STACKED)
1246 TARG = POPs;
1247 else if (PL_op->op_private & OPpTARGET_MY)
1248 GETTARGET;
1249 else {
1250 TARG = DEFSV;
1251 EXTEND(SP,1);
1252 }
1253
1254 PUTBACK; /* EVAL blocks need stack_sp. */
1255 /* Skip get-magic if this is a qr// clone, because regcomp has
1256 already done it. */
1257 s = ((struct regexp *)SvANY(rx))->mother_re
1258 ? SvPV_nomg_const(TARG, len)
1259 : SvPV_const(TARG, len);
1260 if (!s)
1261 DIE(aTHX_ "panic: pp_match");
1262 strend = s + len;
1263 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1264 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1265 TAINT_NOT;
1266
1267 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1268
1269 /* PMdf_USED is set after a ?? matches once */
1270 if (
1271#ifdef USE_ITHREADS
1272 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1273#else
1274 pm->op_pmflags & PMf_USED
1275#endif
1276 ) {
1277 failure:
1278 if (gimme == G_ARRAY)
1279 RETURN;
1280 RETPUSHNO;
1281 }
1282
1283
1284
1285 /* empty pattern special-cased to use last successful pattern if possible */
1286 if (!RX_PRELEN(rx) && PL_curpm) {
1287 pm = PL_curpm;
1288 rx = PM_GETRE(pm);
1289 }
1290
1291 if (RX_MINLEN(rx) > (I32)len)
1292 goto failure;
1293
1294 truebase = t = s;
1295
1296 /* XXXX What part of this is needed with true \G-support? */
1297 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1298 RX_OFFS(rx)[0].start = -1;
1299 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1300 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1301 if (mg && mg->mg_len >= 0) {
1302 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1303 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1304 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1305 r_flags |= REXEC_IGNOREPOS;
1306 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1307 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1308 gpos = mg->mg_len;
1309 else
1310 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1311 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1312 update_minmatch = 0;
1313 }
1314 }
1315 }
1316 /* XXX: comment out !global get safe $1 vars after a
1317 match, BUT be aware that this leads to dramatic slowdowns on
1318 /g matches against large strings. So far a solution to this problem
1319 appears to be quite tricky.
1320 Test for the unsafe vars are TODO for now. */
1321 if ( (!global && RX_NPARENS(rx))
1322 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1323 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1324 r_flags |= REXEC_COPY_STR;
1325 if (SvSCREAM(TARG))
1326 r_flags |= REXEC_SCREAM;
1327
1328 play_it_again:
1329 if (global && RX_OFFS(rx)[0].start != -1) {
1330 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1331 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1332 goto nope;
1333 if (update_minmatch++)
1334 minmatch = had_zerolen;
1335 }
1336 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1337 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1338 /* FIXME - can PL_bostr be made const char *? */
1339 PL_bostr = (char *)truebase;
1340 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1341
1342 if (!s)
1343 goto nope;
1344 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1345 && !PL_sawampersand
1346 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1347 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
1348 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
1349 && (r_flags & REXEC_SCREAM)))
1350 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1351 goto yup;
1352 }
1353 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1354 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1355 goto ret_no;
1356
1357 PL_curpm = pm;
1358 if (dynpm->op_pmflags & PMf_ONCE) {
1359#ifdef USE_ITHREADS
1360 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1361#else
1362 dynpm->op_pmflags |= PMf_USED;
1363#endif
1364 }
1365
1366 gotcha:
1367 if (rxtainted)
1368 RX_MATCH_TAINTED_on(rx);
1369 TAINT_IF(RX_MATCH_TAINTED(rx));
1370 if (gimme == G_ARRAY) {
1371 const I32 nparens = RX_NPARENS(rx);
1372 I32 i = (global && !nparens) ? 1 : 0;
1373
1374 SPAGAIN; /* EVAL blocks could move the stack. */
1375 EXTEND(SP, nparens + i);
1376 EXTEND_MORTAL(nparens + i);
1377 for (i = !i; i <= nparens; i++) {
1378 PUSHs(sv_newmortal());
1379 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1380 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1381 s = RX_OFFS(rx)[i].start + truebase;
1382 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1383 len < 0 || len > strend - s)
1384 DIE(aTHX_ "panic: pp_match start/end pointers");
1385 sv_setpvn(*SP, s, len);
1386 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1387 SvUTF8_on(*SP);
1388 }
1389 }
1390 if (global) {
1391 if (dynpm->op_pmflags & PMf_CONTINUE) {
1392 MAGIC* mg = NULL;
1393 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1394 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1395 if (!mg) {
1396#ifdef PERL_OLD_COPY_ON_WRITE
1397 if (SvIsCOW(TARG))
1398 sv_force_normal_flags(TARG, 0);
1399#endif
1400 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1401 &PL_vtbl_mglob, NULL, 0);
1402 }
1403 if (RX_OFFS(rx)[0].start != -1) {
1404 mg->mg_len = RX_OFFS(rx)[0].end;
1405 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1406 mg->mg_flags |= MGf_MINMATCH;
1407 else
1408 mg->mg_flags &= ~MGf_MINMATCH;
1409 }
1410 }
1411 had_zerolen = (RX_OFFS(rx)[0].start != -1
1412 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1413 == (UV)RX_OFFS(rx)[0].end));
1414 PUTBACK; /* EVAL blocks may use stack */
1415 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1416 goto play_it_again;
1417 }
1418 else if (!nparens)
1419 XPUSHs(&PL_sv_yes);
1420 LEAVE_SCOPE(oldsave);
1421 RETURN;
1422 }
1423 else {
1424 if (global) {
1425 MAGIC* mg;
1426 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1427 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1428 else
1429 mg = NULL;
1430 if (!mg) {
1431#ifdef PERL_OLD_COPY_ON_WRITE
1432 if (SvIsCOW(TARG))
1433 sv_force_normal_flags(TARG, 0);
1434#endif
1435 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1436 &PL_vtbl_mglob, NULL, 0);
1437 }
1438 if (RX_OFFS(rx)[0].start != -1) {
1439 mg->mg_len = RX_OFFS(rx)[0].end;
1440 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1441 mg->mg_flags |= MGf_MINMATCH;
1442 else
1443 mg->mg_flags &= ~MGf_MINMATCH;
1444 }
1445 }
1446 LEAVE_SCOPE(oldsave);
1447 RETPUSHYES;
1448 }
1449
1450yup: /* Confirmed by INTUIT */
1451 if (rxtainted)
1452 RX_MATCH_TAINTED_on(rx);
1453 TAINT_IF(RX_MATCH_TAINTED(rx));
1454 PL_curpm = pm;
1455 if (dynpm->op_pmflags & PMf_ONCE) {
1456#ifdef USE_ITHREADS
1457 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1458#else
1459 dynpm->op_pmflags |= PMf_USED;
1460#endif
1461 }
1462 if (RX_MATCH_COPIED(rx))
1463 Safefree(RX_SUBBEG(rx));
1464 RX_MATCH_COPIED_off(rx);
1465 RX_SUBBEG(rx) = NULL;
1466 if (global) {
1467 /* FIXME - should rx->subbeg be const char *? */
1468 RX_SUBBEG(rx) = (char *) truebase;
1469 RX_OFFS(rx)[0].start = s - truebase;
1470 if (RX_MATCH_UTF8(rx)) {
1471 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1472 RX_OFFS(rx)[0].end = t - truebase;
1473 }
1474 else {
1475 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1476 }
1477 RX_SUBLEN(rx) = strend - truebase;
1478 goto gotcha;
1479 }
1480 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1481 I32 off;
1482#ifdef PERL_OLD_COPY_ON_WRITE
1483 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1484 if (DEBUG_C_TEST) {
1485 PerlIO_printf(Perl_debug_log,
1486 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1487 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1488 (int)(t-truebase));
1489 }
1490 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1491 RX_SUBBEG(rx)
1492 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1493 assert (SvPOKp(RX_SAVED_COPY(rx)));
1494 } else
1495#endif
1496 {
1497
1498 RX_SUBBEG(rx) = savepvn(t, strend - t);
1499#ifdef PERL_OLD_COPY_ON_WRITE
1500 RX_SAVED_COPY(rx) = NULL;
1501#endif
1502 }
1503 RX_SUBLEN(rx) = strend - t;
1504 RX_MATCH_COPIED_on(rx);
1505 off = RX_OFFS(rx)[0].start = s - t;
1506 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1507 }
1508 else { /* startp/endp are used by @- @+. */
1509 RX_OFFS(rx)[0].start = s - truebase;
1510 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1511 }
1512 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1513 -dmq */
1514 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
1515 LEAVE_SCOPE(oldsave);
1516 RETPUSHYES;
1517
1518nope:
1519ret_no:
1520 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1521 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1522 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1523 if (mg)
1524 mg->mg_len = -1;
1525 }
1526 }
1527 LEAVE_SCOPE(oldsave);
1528 if (gimme == G_ARRAY)
1529 RETURN;
1530 RETPUSHNO;
1531}
1532
1533OP *
1534Perl_do_readline(pTHX)
1535{
1536 dVAR; dSP; dTARGETSTACKED;
1537 register SV *sv;
1538 STRLEN tmplen = 0;
1539 STRLEN offset;
1540 PerlIO *fp;
1541 register IO * const io = GvIO(PL_last_in_gv);
1542 register const I32 type = PL_op->op_type;
1543 const I32 gimme = GIMME_V;
1544
1545 if (io) {
1546 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1547 if (mg) {
1548 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1549 if (gimme == G_SCALAR) {
1550 SPAGAIN;
1551 SvSetSV_nosteal(TARG, TOPs);
1552 SETTARG;
1553 }
1554 return NORMAL;
1555 }
1556 }
1557 fp = NULL;
1558 if (io) {
1559 fp = IoIFP(io);
1560 if (!fp) {
1561 if (IoFLAGS(io) & IOf_ARGV) {
1562 if (IoFLAGS(io) & IOf_START) {
1563 IoLINES(io) = 0;
1564 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1565 IoFLAGS(io) &= ~IOf_START;
1566 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1567 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1568 SvSETMAGIC(GvSV(PL_last_in_gv));
1569 fp = IoIFP(io);
1570 goto have_fp;
1571 }
1572 }
1573 fp = nextargv(PL_last_in_gv);
1574 if (!fp) { /* Note: fp != IoIFP(io) */
1575 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1576 }
1577 }
1578 else if (type == OP_GLOB)
1579 fp = Perl_start_glob(aTHX_ POPs, io);
1580 }
1581 else if (type == OP_GLOB)
1582 SP--;
1583 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1584 report_wrongway_fh(PL_last_in_gv, '>');
1585 }
1586 }
1587 if (!fp) {
1588 if ((!io || !(IoFLAGS(io) & IOf_START))
1589 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1590 {
1591 if (type == OP_GLOB)
1592 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1593 "glob failed (can't start child: %s)",
1594 Strerror(errno));
1595 else
1596 report_evil_fh(PL_last_in_gv);
1597 }
1598 if (gimme == G_SCALAR) {
1599 /* undef TARG, and push that undefined value */
1600 if (type != OP_RCATLINE) {
1601 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1602 SvOK_off(TARG);
1603 }
1604 PUSHTARG;
1605 }
1606 RETURN;
1607 }
1608 have_fp:
1609 if (gimme == G_SCALAR) {
1610 sv = TARG;
1611 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1612 mg_get(sv);
1613 if (SvROK(sv)) {
1614 if (type == OP_RCATLINE)
1615 SvPV_force_nolen(sv);
1616 else
1617 sv_unref(sv);
1618 }
1619 else if (isGV_with_GP(sv)) {
1620 SvPV_force_nolen(sv);
1621 }
1622 SvUPGRADE(sv, SVt_PV);
1623 tmplen = SvLEN(sv); /* remember if already alloced */
1624 if (!tmplen && !SvREADONLY(sv)) {
1625 /* try short-buffering it. Please update t/op/readline.t
1626 * if you change the growth length.
1627 */
1628 Sv_Grow(sv, 80);
1629 }
1630 offset = 0;
1631 if (type == OP_RCATLINE && SvOK(sv)) {
1632 if (!SvPOK(sv)) {
1633 SvPV_force_nolen(sv);
1634 }
1635 offset = SvCUR(sv);
1636 }
1637 }
1638 else {
1639 sv = sv_2mortal(newSV(80));
1640 offset = 0;
1641 }
1642
1643 /* This should not be marked tainted if the fp is marked clean */
1644#define MAYBE_TAINT_LINE(io, sv) \
1645 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1646 TAINT; \
1647 SvTAINTED_on(sv); \
1648 }
1649
1650/* delay EOF state for a snarfed empty file */
1651#define SNARF_EOF(gimme,rs,io,sv) \
1652 (gimme != G_SCALAR || SvCUR(sv) \
1653 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1654
1655 for (;;) {
1656 PUTBACK;
1657 if (!sv_gets(sv, fp, offset)
1658 && (type == OP_GLOB
1659 || SNARF_EOF(gimme, PL_rs, io, sv)
1660 || PerlIO_error(fp)))
1661 {
1662 PerlIO_clearerr(fp);
1663 if (IoFLAGS(io) & IOf_ARGV) {
1664 fp = nextargv(PL_last_in_gv);
1665 if (fp)
1666 continue;
1667 (void)do_close(PL_last_in_gv, FALSE);
1668 }
1669 else if (type == OP_GLOB) {
1670 if (!do_close(PL_last_in_gv, FALSE)) {
1671 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1672 "glob failed (child exited with status %d%s)",
1673 (int)(STATUS_CURRENT >> 8),
1674 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1675 }
1676 }
1677 if (gimme == G_SCALAR) {
1678 if (type != OP_RCATLINE) {
1679 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1680 SvOK_off(TARG);
1681 }
1682 SPAGAIN;
1683 PUSHTARG;
1684 }
1685 MAYBE_TAINT_LINE(io, sv);
1686 RETURN;
1687 }
1688 MAYBE_TAINT_LINE(io, sv);
1689 IoLINES(io)++;
1690 IoFLAGS(io) |= IOf_NOLINE;
1691 SvSETMAGIC(sv);
1692 SPAGAIN;
1693 XPUSHs(sv);
1694 if (type == OP_GLOB) {
1695 const char *t1;
1696
1697 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1698 char * const tmps = SvEND(sv) - 1;
1699 if (*tmps == *SvPVX_const(PL_rs)) {
1700 *tmps = '\0';
1701 SvCUR_set(sv, SvCUR(sv) - 1);
1702 }
1703 }
1704 for (t1 = SvPVX_const(sv); *t1; t1++)
1705 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1706 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1707 break;
1708 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1709 (void)POPs; /* Unmatched wildcard? Chuck it... */
1710 continue;
1711 }
1712 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1713 if (ckWARN(WARN_UTF8)) {
1714 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1715 const STRLEN len = SvCUR(sv) - offset;
1716 const U8 *f;
1717
1718 if (!is_utf8_string_loc(s, len, &f))
1719 /* Emulate :encoding(utf8) warning in the same case. */
1720 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1721 "utf8 \"\\x%02X\" does not map to Unicode",
1722 f < (U8*)SvEND(sv) ? *f : 0);
1723 }
1724 }
1725 if (gimme == G_ARRAY) {
1726 if (SvLEN(sv) - SvCUR(sv) > 20) {
1727 SvPV_shrink_to_cur(sv);
1728 }
1729 sv = sv_2mortal(newSV(80));
1730 continue;
1731 }
1732 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1733 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1734 const STRLEN new_len
1735 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1736 SvPV_renew(sv, new_len);
1737 }
1738 RETURN;
1739 }
1740}
1741
1742PP(pp_helem)
1743{
1744 dVAR; dSP;
1745 HE* he;
1746 SV **svp;
1747 SV * const keysv = POPs;
1748 HV * const hv = MUTABLE_HV(POPs);
1749 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1750 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1751 SV *sv;
1752 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1753 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1754 bool preeminent = TRUE;
1755
1756 if (SvTYPE(hv) != SVt_PVHV)
1757 RETPUSHUNDEF;
1758
1759 if (localizing) {
1760 MAGIC *mg;
1761 HV *stash;
1762
1763 /* If we can determine whether the element exist,
1764 * Try to preserve the existenceness of a tied hash
1765 * element by using EXISTS and DELETE if possible.
1766 * Fallback to FETCH and STORE otherwise. */
1767 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1768 preeminent = hv_exists_ent(hv, keysv, 0);
1769 }
1770
1771 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1772 svp = he ? &HeVAL(he) : NULL;
1773 if (lval) {
1774 if (!svp || *svp == &PL_sv_undef) {
1775 SV* lv;
1776 SV* key2;
1777 if (!defer) {
1778 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1779 }
1780 lv = sv_newmortal();
1781 sv_upgrade(lv, SVt_PVLV);
1782 LvTYPE(lv) = 'y';
1783 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1784 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1785 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1786 LvTARGLEN(lv) = 1;
1787 PUSHs(lv);
1788 RETURN;
1789 }
1790 if (localizing) {
1791 if (HvNAME_get(hv) && isGV(*svp))
1792 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1793 else if (preeminent)
1794 save_helem_flags(hv, keysv, svp,
1795 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1796 else
1797 SAVEHDELETE(hv, keysv);
1798 }
1799 else if (PL_op->op_private & OPpDEREF) {
1800 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1801 RETURN;
1802 }
1803 }
1804 sv = (svp ? *svp : &PL_sv_undef);
1805 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1806 * was to make C<local $tied{foo} = $tied{foo}> possible.
1807 * However, it seems no longer to be needed for that purpose, and
1808 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1809 * would loop endlessly since the pos magic is getting set on the
1810 * mortal copy and lost. However, the copy has the effect of
1811 * triggering the get magic, and losing it altogether made things like
1812 * c<$tied{foo};> in void context no longer do get magic, which some
1813 * code relied on. Also, delayed triggering of magic on @+ and friends
1814 * meant the original regex may be out of scope by now. So as a
1815 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1816 * being called too many times). */
1817 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1818 mg_get(sv);
1819 PUSHs(sv);
1820 RETURN;
1821}
1822
1823PP(pp_iter)
1824{
1825 dVAR; dSP;
1826 register PERL_CONTEXT *cx;
1827 SV *sv, *oldsv;
1828 SV **itersvp;
1829 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1830 bool av_is_stack = FALSE;
1831
1832 EXTEND(SP, 1);
1833 cx = &cxstack[cxstack_ix];
1834 if (!CxTYPE_is_LOOP(cx))
1835 DIE(aTHX_ "panic: pp_iter");
1836
1837 itersvp = CxITERVAR(cx);
1838 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1839 /* string increment */
1840 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1841 SV *end = cx->blk_loop.state_u.lazysv.end;
1842 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1843 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1844 STRLEN maxlen = 0;
1845 const char *max = SvPV_const(end, maxlen);
1846 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1847 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1848 /* safe to reuse old SV */
1849 sv_setsv(*itersvp, cur);
1850 }
1851 else
1852 {
1853 /* we need a fresh SV every time so that loop body sees a
1854 * completely new SV for closures/references to work as
1855 * they used to */
1856 oldsv = *itersvp;
1857 *itersvp = newSVsv(cur);
1858 SvREFCNT_dec(oldsv);
1859 }
1860 if (strEQ(SvPVX_const(cur), max))
1861 sv_setiv(cur, 0); /* terminate next time */
1862 else
1863 sv_inc(cur);
1864 RETPUSHYES;
1865 }
1866 RETPUSHNO;
1867 }
1868 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1869 /* integer increment */
1870 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1871 RETPUSHNO;
1872
1873 /* don't risk potential race */
1874 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1875 /* safe to reuse old SV */
1876 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1877 }
1878 else
1879 {
1880 /* we need a fresh SV every time so that loop body sees a
1881 * completely new SV for closures/references to work as they
1882 * used to */
1883 oldsv = *itersvp;
1884 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
1885 SvREFCNT_dec(oldsv);
1886 }
1887
1888 /* Handle end of range at IV_MAX */
1889 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
1890 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
1891 {
1892 cx->blk_loop.state_u.lazyiv.cur++;
1893 cx->blk_loop.state_u.lazyiv.end++;
1894 }
1895
1896 RETPUSHYES;
1897 }
1898
1899 /* iterate array */
1900 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1901 av = cx->blk_loop.state_u.ary.ary;
1902 if (!av) {
1903 av_is_stack = TRUE;
1904 av = PL_curstack;
1905 }
1906 if (PL_op->op_private & OPpITER_REVERSED) {
1907 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1908 ? cx->blk_loop.resetsp + 1 : 0))
1909 RETPUSHNO;
1910
1911 if (SvMAGICAL(av) || AvREIFY(av)) {
1912 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1913 sv = svp ? *svp : NULL;
1914 }
1915 else {
1916 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1917 }
1918 }
1919 else {
1920 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1921 AvFILL(av)))
1922 RETPUSHNO;
1923
1924 if (SvMAGICAL(av) || AvREIFY(av)) {
1925 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1926 sv = svp ? *svp : NULL;
1927 }
1928 else {
1929 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1930 }
1931 }
1932
1933 if (sv && SvIS_FREED(sv)) {
1934 *itersvp = NULL;
1935 Perl_croak(aTHX_ "Use of freed value in iteration");
1936 }
1937
1938 if (sv) {
1939 SvTEMP_off(sv);
1940 SvREFCNT_inc_simple_void_NN(sv);
1941 }
1942 else
1943 sv = &PL_sv_undef;
1944 if (!av_is_stack && sv == &PL_sv_undef) {
1945 SV *lv = newSV_type(SVt_PVLV);
1946 LvTYPE(lv) = 'y';
1947 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1948 LvTARG(lv) = SvREFCNT_inc_simple(av);
1949 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1950 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1951 sv = lv;
1952 }
1953
1954 oldsv = *itersvp;
1955 *itersvp = sv;
1956 SvREFCNT_dec(oldsv);
1957
1958 RETPUSHYES;
1959}
1960
1961/*
1962A description of how taint works in pattern matching and substitution.
1963
1964While the pattern is being assembled/concatenated and them compiled,
1965PL_tainted will get set if any component of the pattern is tainted, e.g.
1966/.*$tainted/. At the end of pattern compilation, the RXf_TAINTED flag
1967is set on the pattern if PL_tainted is set.
1968
1969When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1970the pattern is marked as tainted. This means that subsequent usage, such
1971as /x$r/, will set PL_tainted, and thus RXf_TAINTED, on the new pattern too.
1972
1973During execution of a pattern, locale-variant ops such as ALNUML set the
1974local flag RF_tainted. At the end of execution, the engine sets the
1975RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
1976otherwise.
1977
1978In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
1979of $1 et al to indicate whether the returned value should be tainted.
1980It is the responsibility of the caller of the pattern (i.e. pp_match,
1981pp_subst etc) to set this flag for any other circumstances where $1 needs
1982to be tainted.
1983
1984The taint behaviour of pp_subst (and pp_substcont) is quite complex.
1985
1986There are three possible sources of taint
1987 * the source string
1988 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
1989 * the replacement string (or expression under /e)
1990
1991There are four destinations of taint and they are affected by the sources
1992according to the rules below:
1993
1994 * the return value (not including /r):
1995 tainted by the source string and pattern, but only for the
1996 number-of-iterations case; boolean returns aren't tainted;
1997 * the modified string (or modified copy under /r):
1998 tainted by the source string, pattern, and replacement strings;
1999 * $1 et al:
2000 tainted by the pattern, and under 'use re "taint"', by the source
2001 string too;
2002 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2003 should always be unset before executing subsequent code.
2004
2005The overall action of pp_subst is:
2006
2007 * at the start, set bits in rxtainted indicating the taint status of
2008 the various sources.
2009
2010 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2011 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2012 pattern has subsequently become tainted via locale ops.
2013
2014 * If control is being passed to pp_substcont to execute a /e block,
2015 save rxtainted in the CXt_SUBST block, for future use by
2016 pp_substcont.
2017
2018 * Whenever control is being returned to perl code (either by falling
2019 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2020 use the flag bits in rxtainted to make all the appropriate types of
2021 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2022 et al will appear tainted.
2023
2024pp_match is just a simpler version of the above.
2025
2026*/
2027
2028PP(pp_subst)
2029{
2030 dVAR; dSP; dTARG;
2031 register PMOP *pm = cPMOP;
2032 PMOP *rpm = pm;
2033 register char *s;
2034 char *strend;
2035 register char *m;
2036 const char *c;
2037 register char *d;
2038 STRLEN clen;
2039 I32 iters = 0;
2040 I32 maxiters;
2041 register I32 i;
2042 bool once;
2043 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2044 See "how taint works" above */
2045 char *orig;
2046 U8 r_flags;
2047 register REGEXP *rx = PM_GETRE(pm);
2048 STRLEN len;
2049 int force_on_match = 0;
2050 const I32 oldsave = PL_savestack_ix;
2051 STRLEN slen;
2052 bool doutf8 = FALSE;
2053#ifdef PERL_OLD_COPY_ON_WRITE
2054 bool is_cow;
2055#endif
2056 SV *nsv = NULL;
2057 /* known replacement string? */
2058 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2059
2060 PERL_ASYNC_CHECK();
2061
2062 if (PL_op->op_flags & OPf_STACKED)
2063 TARG = POPs;
2064 else if (PL_op->op_private & OPpTARGET_MY)
2065 GETTARGET;
2066 else {
2067 TARG = DEFSV;
2068 EXTEND(SP,1);
2069 }
2070
2071#ifdef PERL_OLD_COPY_ON_WRITE
2072 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2073 because they make integers such as 256 "false". */
2074 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2075#else
2076 if (SvIsCOW(TARG))
2077 sv_force_normal_flags(TARG,0);
2078#endif
2079 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2080#ifdef PERL_OLD_COPY_ON_WRITE
2081 && !is_cow
2082#endif
2083 && (SvREADONLY(TARG)
2084 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2085 || SvTYPE(TARG) > SVt_PVLV)
2086 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2087 Perl_croak_no_modify(aTHX);
2088 PUTBACK;
2089
2090 setup_match:
2091 s = SvPV_mutable(TARG, len);
2092 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2093 force_on_match = 1;
2094
2095 /* only replace once? */
2096 once = !(rpm->op_pmflags & PMf_GLOBAL);
2097
2098 /* See "how taint works" above */
2099 if (PL_tainting) {
2100 rxtainted = (
2101 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2102 | ((RX_EXTFLAGS(rx) & RXf_TAINTED) ? SUBST_TAINT_PAT : 0)
2103 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2104 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2105 ? SUBST_TAINT_BOOLRET : 0));
2106 TAINT_NOT;
2107 }
2108
2109 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2110
2111 force_it:
2112 if (!pm || !s)
2113 DIE(aTHX_ "panic: pp_subst");
2114
2115 strend = s + len;
2116 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2117 maxiters = 2 * slen + 10; /* We can match twice at each
2118 position, once with zero-length,
2119 second time with non-zero. */
2120
2121 if (!RX_PRELEN(rx) && PL_curpm) {
2122 pm = PL_curpm;
2123 rx = PM_GETRE(pm);
2124 }
2125 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2126 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2127 ? REXEC_COPY_STR : 0;
2128 if (SvSCREAM(TARG))
2129 r_flags |= REXEC_SCREAM;
2130
2131 orig = m = s;
2132 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2133 PL_bostr = orig;
2134 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2135
2136 if (!s)
2137 goto ret_no;
2138 /* How to do it in subst? */
2139/* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2140 && !PL_sawampersand
2141 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY)
2142 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
2143 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
2144 && (r_flags & REXEC_SCREAM))))
2145 goto yup;
2146*/
2147 }
2148
2149 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2150 r_flags | REXEC_CHECKED))
2151 {
2152 ret_no:
2153 SPAGAIN;
2154 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2155 LEAVE_SCOPE(oldsave);
2156 RETURN;
2157 }
2158
2159 /* known replacement string? */
2160 if (dstr) {
2161 if (SvTAINTED(dstr))
2162 rxtainted |= SUBST_TAINT_REPL;
2163
2164 /* Upgrade the source if the replacement is utf8 but the source is not,
2165 * but only if it matched; see
2166 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2167 */
2168 if (DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2169 char * const orig_pvx = SvPVX(TARG);
2170 const STRLEN new_len = sv_utf8_upgrade_nomg(TARG);
2171
2172 /* If the lengths are the same, the pattern contains only
2173 * invariants, can keep going; otherwise, various internal markers
2174 * could be off, so redo */
2175 if (new_len != len || orig_pvx != SvPVX(TARG)) {
2176 goto setup_match;
2177 }
2178 }
2179
2180 /* replacement needing upgrading? */
2181 if (DO_UTF8(TARG) && !doutf8) {
2182 nsv = sv_newmortal();
2183 SvSetSV(nsv, dstr);
2184 if (PL_encoding)
2185 sv_recode_to_utf8(nsv, PL_encoding);
2186 else
2187 sv_utf8_upgrade(nsv);
2188 c = SvPV_const(nsv, clen);
2189 doutf8 = TRUE;
2190 }
2191 else {
2192 c = SvPV_const(dstr, clen);
2193 doutf8 = DO_UTF8(dstr);
2194 }
2195 }
2196 else {
2197 c = NULL;
2198 doutf8 = FALSE;
2199 }
2200
2201 /* can do inplace substitution? */
2202 if (c
2203#ifdef PERL_OLD_COPY_ON_WRITE
2204 && !is_cow
2205#endif
2206 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2207 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2208 && (!doutf8 || SvUTF8(TARG))
2209 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2210 {
2211
2212#ifdef PERL_OLD_COPY_ON_WRITE
2213 if (SvIsCOW(TARG)) {
2214 assert (!force_on_match);
2215 goto have_a_cow;
2216 }
2217#endif
2218 if (force_on_match) {
2219 force_on_match = 0;
2220 s = SvPV_force(TARG, len);
2221 goto force_it;
2222 }
2223 d = s;
2224 PL_curpm = pm;
2225 SvSCREAM_off(TARG); /* disable possible screamer */
2226 if (once) {
2227 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2228 rxtainted |= SUBST_TAINT_PAT;
2229 m = orig + RX_OFFS(rx)[0].start;
2230 d = orig + RX_OFFS(rx)[0].end;
2231 s = orig;
2232 if (m - s > strend - d) { /* faster to shorten from end */
2233 if (clen) {
2234 Copy(c, m, clen, char);
2235 m += clen;
2236 }
2237 i = strend - d;
2238 if (i > 0) {
2239 Move(d, m, i, char);
2240 m += i;
2241 }
2242 *m = '\0';
2243 SvCUR_set(TARG, m - s);
2244 }
2245 else if ((i = m - s)) { /* faster from front */
2246 d -= clen;
2247 m = d;
2248 Move(s, d - i, i, char);
2249 sv_chop(TARG, d-i);
2250 if (clen)
2251 Copy(c, m, clen, char);
2252 }
2253 else if (clen) {
2254 d -= clen;
2255 sv_chop(TARG, d);
2256 Copy(c, d, clen, char);
2257 }
2258 else {
2259 sv_chop(TARG, d);
2260 }
2261 SPAGAIN;
2262 PUSHs(&PL_sv_yes);
2263 }
2264 else {
2265 do {
2266 if (iters++ > maxiters)
2267 DIE(aTHX_ "Substitution loop");
2268 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2269 rxtainted |= SUBST_TAINT_PAT;
2270 m = RX_OFFS(rx)[0].start + orig;
2271 if ((i = m - s)) {
2272 if (s != d)
2273 Move(s, d, i, char);
2274 d += i;
2275 }
2276 if (clen) {
2277 Copy(c, d, clen, char);
2278 d += clen;
2279 }
2280 s = RX_OFFS(rx)[0].end + orig;
2281 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2282 TARG, NULL,
2283 /* don't match same null twice */
2284 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2285 if (s != d) {
2286 i = strend - s;
2287 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2288 Move(s, d, i+1, char); /* include the NUL */
2289 }
2290 SPAGAIN;
2291 mPUSHi((I32)iters);
2292 }
2293 }
2294 else {
2295 if (force_on_match) {
2296 force_on_match = 0;
2297 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2298 /* I feel that it should be possible to avoid this mortal copy
2299 given that the code below copies into a new destination.
2300 However, I suspect it isn't worth the complexity of
2301 unravelling the C<goto force_it> for the small number of
2302 cases where it would be viable to drop into the copy code. */
2303 TARG = sv_2mortal(newSVsv(TARG));
2304 }
2305 s = SvPV_force(TARG, len);
2306 goto force_it;
2307 }
2308#ifdef PERL_OLD_COPY_ON_WRITE
2309 have_a_cow:
2310#endif
2311 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2312 rxtainted |= SUBST_TAINT_PAT;
2313 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2314 PL_curpm = pm;
2315 if (!c) {
2316 register PERL_CONTEXT *cx;
2317 SPAGAIN;
2318 /* note that a whole bunch of local vars are saved here for
2319 * use by pp_substcont: here's a list of them in case you're
2320 * searching for places in this sub that uses a particular var:
2321 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2322 * s m strend rx once */
2323 PUSHSUBST(cx);
2324 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2325 }
2326 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2327 do {
2328 if (iters++ > maxiters)
2329 DIE(aTHX_ "Substitution loop");
2330 if (RX_MATCH_TAINTED(rx))
2331 rxtainted |= SUBST_TAINT_PAT;
2332 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2333 m = s;
2334 s = orig;
2335 orig = RX_SUBBEG(rx);
2336 s = orig + (m - s);
2337 strend = s + (strend - m);
2338 }
2339 m = RX_OFFS(rx)[0].start + orig;
2340 if (doutf8 && !SvUTF8(dstr))
2341 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2342 else
2343 sv_catpvn(dstr, s, m-s);
2344 s = RX_OFFS(rx)[0].end + orig;
2345 if (clen)
2346 sv_catpvn(dstr, c, clen);
2347 if (once)
2348 break;
2349 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2350 TARG, NULL, r_flags));
2351 if (doutf8 && !DO_UTF8(TARG))
2352 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2353 else
2354 sv_catpvn(dstr, s, strend - s);
2355
2356 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2357 /* From here on down we're using the copy, and leaving the original
2358 untouched. */
2359 TARG = dstr;
2360 SPAGAIN;
2361 PUSHs(dstr);
2362 } else {
2363#ifdef PERL_OLD_COPY_ON_WRITE
2364 /* The match may make the string COW. If so, brilliant, because
2365 that's just saved us one malloc, copy and free - the regexp has
2366 donated the old buffer, and we malloc an entirely new one, rather
2367 than the regexp malloc()ing a buffer and copying our original,
2368 only for us to throw it away here during the substitution. */
2369 if (SvIsCOW(TARG)) {
2370 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2371 } else
2372#endif
2373 {
2374 SvPV_free(TARG);
2375 }
2376 SvPV_set(TARG, SvPVX(dstr));
2377 SvCUR_set(TARG, SvCUR(dstr));
2378 SvLEN_set(TARG, SvLEN(dstr));
2379 doutf8 |= DO_UTF8(dstr);
2380 SvPV_set(dstr, NULL);
2381
2382 SPAGAIN;
2383 mPUSHi((I32)iters);
2384 }
2385 }
2386
2387 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2388 (void)SvPOK_only_UTF8(TARG);
2389 if (doutf8)
2390 SvUTF8_on(TARG);
2391 }
2392
2393 /* See "how taint works" above */
2394 if (PL_tainting) {
2395 if ((rxtainted & SUBST_TAINT_PAT) ||
2396 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2397 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2398 )
2399 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2400
2401 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2402 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2403 )
2404 SvTAINTED_on(TOPs); /* taint return value */
2405 else
2406 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2407
2408 /* needed for mg_set below */
2409 PL_tainted =
2410 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
2411 SvTAINT(TARG);
2412 }
2413 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2414 TAINT_NOT;
2415 LEAVE_SCOPE(oldsave);
2416 RETURN;
2417}
2418
2419PP(pp_grepwhile)
2420{
2421 dVAR; dSP;
2422
2423 if (SvTRUEx(POPs))
2424 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2425 ++*PL_markstack_ptr;
2426 FREETMPS;
2427 LEAVE_with_name("grep_item"); /* exit inner scope */
2428
2429 /* All done yet? */
2430 if (PL_stack_base + *PL_markstack_ptr > SP) {
2431 I32 items;
2432 const I32 gimme = GIMME_V;
2433
2434 LEAVE_with_name("grep"); /* exit outer scope */
2435 (void)POPMARK; /* pop src */
2436 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2437 (void)POPMARK; /* pop dst */
2438 SP = PL_stack_base + POPMARK; /* pop original mark */
2439 if (gimme == G_SCALAR) {
2440 if (PL_op->op_private & OPpGREP_LEX) {
2441 SV* const sv = sv_newmortal();
2442 sv_setiv(sv, items);
2443 PUSHs(sv);
2444 }
2445 else {
2446 dTARGET;
2447 XPUSHi(items);
2448 }
2449 }
2450 else if (gimme == G_ARRAY)
2451 SP += items;
2452 RETURN;
2453 }
2454 else {
2455 SV *src;
2456
2457 ENTER_with_name("grep_item"); /* enter inner scope */
2458 SAVEVPTR(PL_curpm);
2459
2460 src = PL_stack_base[*PL_markstack_ptr];
2461 SvTEMP_off(src);
2462 if (PL_op->op_private & OPpGREP_LEX)
2463 PAD_SVl(PL_op->op_targ) = src;
2464 else
2465 DEFSV_set(src);
2466
2467 RETURNOP(cLOGOP->op_other);
2468 }
2469}
2470
2471PP(pp_leavesub)
2472{
2473 dVAR; dSP;
2474 SV **mark;
2475 SV **newsp;
2476 PMOP *newpm;
2477 I32 gimme;
2478 register PERL_CONTEXT *cx;
2479 SV *sv;
2480
2481 if (CxMULTICALL(&cxstack[cxstack_ix]))
2482 return 0;
2483
2484 POPBLOCK(cx,newpm);
2485 cxstack_ix++; /* temporarily protect top context */
2486
2487 TAINT_NOT;
2488 if (gimme == G_SCALAR) {
2489 MARK = newsp + 1;
2490 if (MARK <= SP) {
2491 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2492 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2493 *MARK = SvREFCNT_inc(TOPs);
2494 FREETMPS;
2495 sv_2mortal(*MARK);
2496 }
2497 else {
2498 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2499 FREETMPS;
2500 *MARK = sv_mortalcopy(sv);
2501 SvREFCNT_dec(sv);
2502 }
2503 }
2504 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1) {
2505 *MARK = TOPs;
2506 }
2507 else
2508 *MARK = sv_mortalcopy(TOPs);
2509 }
2510 else {
2511 MEXTEND(MARK, 0);
2512 *MARK = &PL_sv_undef;
2513 }
2514 SP = MARK;
2515 }
2516 else if (gimme == G_ARRAY) {
2517 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2518 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1) {
2519 *MARK = sv_mortalcopy(*MARK);
2520 TAINT_NOT; /* Each item is independent */
2521 }
2522 }
2523 }
2524 PUTBACK;
2525
2526 LEAVE;
2527 cxstack_ix--;
2528 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2529 PL_curpm = newpm; /* ... and pop $1 et al */
2530
2531 LEAVESUB(sv);
2532 return cx->blk_sub.retop;
2533}
2534
2535PP(pp_entersub)
2536{
2537 dVAR; dSP; dPOPss;
2538 GV *gv;
2539 register CV *cv;
2540 register PERL_CONTEXT *cx;
2541 I32 gimme;
2542 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2543
2544 if (!sv)
2545 DIE(aTHX_ "Not a CODE reference");
2546 switch (SvTYPE(sv)) {
2547 /* This is overwhelming the most common case: */
2548 case SVt_PVGV:
2549 if (!isGV_with_GP(sv))
2550 DIE(aTHX_ "Not a CODE reference");
2551 we_have_a_glob:
2552 if (!(cv = GvCVu((const GV *)sv))) {
2553 HV *stash;
2554 cv = sv_2cv(sv, &stash, &gv, 0);
2555 }
2556 if (!cv) {
2557 ENTER;
2558 SAVETMPS;
2559 goto try_autoload;
2560 }
2561 break;
2562 case SVt_PVLV:
2563 if(isGV_with_GP(sv)) goto we_have_a_glob;
2564 /*FALLTHROUGH*/
2565 default:
2566 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2567 if (hasargs)
2568 SP = PL_stack_base + POPMARK;
2569 else
2570 (void)POPMARK;
2571 RETURN;
2572 }
2573 SvGETMAGIC(sv);
2574 if (SvROK(sv)) {
2575 if (SvAMAGIC(sv)) {
2576 sv = amagic_deref_call(sv, to_cv_amg);
2577 /* Don't SPAGAIN here. */
2578 }
2579 }
2580 else {
2581 const char *sym;
2582 STRLEN len;
2583 sym = SvPV_nomg_const(sv, len);
2584 if (!sym)
2585 DIE(aTHX_ PL_no_usym, "a subroutine");
2586 if (PL_op->op_private & HINT_STRICT_REFS)
2587 DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
2588 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2589 break;
2590 }
2591 cv = MUTABLE_CV(SvRV(sv));
2592 if (SvTYPE(cv) == SVt_PVCV)
2593 break;
2594 /* FALL THROUGH */
2595 case SVt_PVHV:
2596 case SVt_PVAV:
2597 DIE(aTHX_ "Not a CODE reference");
2598 /* This is the second most common case: */
2599 case SVt_PVCV:
2600 cv = MUTABLE_CV(sv);
2601 break;
2602 }
2603
2604 ENTER;
2605 SAVETMPS;
2606
2607 retry:
2608 if (CvCLONE(cv) && ! CvCLONED(cv))
2609 DIE(aTHX_ "Closure prototype called");
2610 if (!CvROOT(cv) && !CvXSUB(cv)) {
2611 GV* autogv;
2612 SV* sub_name;
2613
2614 /* anonymous or undef'd function leaves us no recourse */
2615 if (CvANON(cv) || !(gv = CvGV(cv)))
2616 DIE(aTHX_ "Undefined subroutine called");
2617
2618 /* autoloaded stub? */
2619 if (cv != GvCV(gv)) {
2620 cv = GvCV(gv);
2621 }
2622 /* should call AUTOLOAD now? */
2623 else {
2624try_autoload:
2625 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2626 FALSE)))
2627 {
2628 cv = GvCV(autogv);
2629 }
2630 /* sorry */
2631 else {
2632 sub_name = sv_newmortal();
2633 gv_efullname3(sub_name, gv, NULL);
2634 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2635 }
2636 }
2637 if (!cv)
2638 DIE(aTHX_ "Not a CODE reference");
2639 goto retry;
2640 }
2641
2642 gimme = GIMME_V;
2643 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2644 Perl_get_db_sub(aTHX_ &sv, cv);
2645 if (CvISXSUB(cv))
2646 PL_curcopdb = PL_curcop;
2647 if (CvLVALUE(cv)) {
2648 /* check for lsub that handles lvalue subroutines */
2649 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2650 /* if lsub not found then fall back to DB::sub */
2651 if (!cv) cv = GvCV(PL_DBsub);
2652 } else {
2653 cv = GvCV(PL_DBsub);
2654 }
2655
2656 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2657 DIE(aTHX_ "No DB::sub routine defined");
2658 }
2659
2660 if (!(CvISXSUB(cv))) {
2661 /* This path taken at least 75% of the time */
2662 dMARK;
2663 register I32 items = SP - MARK;
2664 AV* const padlist = CvPADLIST(cv);
2665 PUSHBLOCK(cx, CXt_SUB, MARK);
2666 PUSHSUB(cx);
2667 cx->blk_sub.retop = PL_op->op_next;
2668 CvDEPTH(cv)++;
2669 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2670 * that eval'' ops within this sub know the correct lexical space.
2671 * Owing the speed considerations, we choose instead to search for
2672 * the cv using find_runcv() when calling doeval().
2673 */
2674 if (CvDEPTH(cv) >= 2) {
2675 PERL_STACK_OVERFLOW_CHECK();
2676 pad_push(padlist, CvDEPTH(cv));
2677 }
2678 SAVECOMPPAD();
2679 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2680 if (hasargs) {
2681 AV *const av = MUTABLE_AV(PAD_SVl(0));
2682 if (AvREAL(av)) {
2683 /* @_ is normally not REAL--this should only ever
2684 * happen when DB::sub() calls things that modify @_ */
2685 av_clear(av);
2686 AvREAL_off(av);
2687 AvREIFY_on(av);
2688 }
2689 cx->blk_sub.savearray = GvAV(PL_defgv);
2690 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2691 CX_CURPAD_SAVE(cx->blk_sub);
2692 cx->blk_sub.argarray = av;
2693 ++MARK;
2694
2695 if (items > AvMAX(av) + 1) {
2696 SV **ary = AvALLOC(av);
2697 if (AvARRAY(av) != ary) {
2698 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2699 AvARRAY(av) = ary;
2700 }
2701 if (items > AvMAX(av) + 1) {
2702 AvMAX(av) = items - 1;
2703 Renew(ary,items,SV*);
2704 AvALLOC(av) = ary;
2705 AvARRAY(av) = ary;
2706 }
2707 }
2708 Copy(MARK,AvARRAY(av),items,SV*);
2709 AvFILLp(av) = items - 1;
2710
2711 while (items--) {
2712 if (*MARK)
2713 SvTEMP_off(*MARK);
2714 MARK++;
2715 }
2716 }
2717 /* warning must come *after* we fully set up the context
2718 * stuff so that __WARN__ handlers can safely dounwind()
2719 * if they want to
2720 */
2721 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2722 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2723 sub_crush_depth(cv);
2724 RETURNOP(CvSTART(cv));
2725 }
2726 else {
2727 I32 markix = TOPMARK;
2728
2729 PUTBACK;
2730
2731 if (!hasargs) {
2732 /* Need to copy @_ to stack. Alternative may be to
2733 * switch stack to @_, and copy return values
2734 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2735 AV * const av = GvAV(PL_defgv);
2736 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2737
2738 if (items) {
2739 /* Mark is at the end of the stack. */
2740 EXTEND(SP, items);
2741 Copy(AvARRAY(av), SP + 1, items, SV*);
2742 SP += items;
2743 PUTBACK ;
2744 }
2745 }
2746 /* We assume first XSUB in &DB::sub is the called one. */
2747 if (PL_curcopdb) {
2748 SAVEVPTR(PL_curcop);
2749 PL_curcop = PL_curcopdb;
2750 PL_curcopdb = NULL;
2751 }
2752 /* Do we need to open block here? XXXX */
2753
2754 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2755 assert(CvXSUB(cv));
2756 CvXSUB(cv)(aTHX_ cv);
2757
2758 /* Enforce some sanity in scalar context. */
2759 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2760 if (markix > PL_stack_sp - PL_stack_base)
2761 *(PL_stack_base + markix) = &PL_sv_undef;
2762 else
2763 *(PL_stack_base + markix) = *PL_stack_sp;
2764 PL_stack_sp = PL_stack_base + markix;
2765 }
2766 LEAVE;
2767 return NORMAL;
2768 }
2769}
2770
2771void
2772Perl_sub_crush_depth(pTHX_ CV *cv)
2773{
2774 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2775
2776 if (CvANON(cv))
2777 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2778 else {
2779 SV* const tmpstr = sv_newmortal();
2780 gv_efullname3(tmpstr, CvGV(cv), NULL);
2781 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2782 SVfARG(tmpstr));
2783 }
2784}
2785
2786PP(pp_aelem)
2787{
2788 dVAR; dSP;
2789 SV** svp;
2790 SV* const elemsv = POPs;
2791 IV elem = SvIV(elemsv);
2792 AV *const av = MUTABLE_AV(POPs);
2793 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2794 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2795 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2796 bool preeminent = TRUE;
2797 SV *sv;
2798
2799 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2800 Perl_warner(aTHX_ packWARN(WARN_MISC),
2801 "Use of reference \"%"SVf"\" as array index",
2802 SVfARG(elemsv));
2803 if (SvTYPE(av) != SVt_PVAV)
2804 RETPUSHUNDEF;
2805
2806 if (localizing) {
2807 MAGIC *mg;
2808 HV *stash;
2809
2810 /* If we can determine whether the element exist,
2811 * Try to preserve the existenceness of a tied array
2812 * element by using EXISTS and DELETE if possible.
2813 * Fallback to FETCH and STORE otherwise. */
2814 if (SvCANEXISTDELETE(av))
2815 preeminent = av_exists(av, elem);
2816 }
2817
2818 svp = av_fetch(av, elem, lval && !defer);
2819 if (lval) {
2820#ifdef PERL_MALLOC_WRAP
2821 if (SvUOK(elemsv)) {
2822 const UV uv = SvUV(elemsv);
2823 elem = uv > IV_MAX ? IV_MAX : uv;
2824 }
2825 else if (SvNOK(elemsv))
2826 elem = (IV)SvNV(elemsv);
2827 if (elem > 0) {
2828 static const char oom_array_extend[] =
2829 "Out of memory during array extend"; /* Duplicated in av.c */
2830 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2831 }
2832#endif
2833 if (!svp || *svp == &PL_sv_undef) {
2834 SV* lv;
2835 if (!defer)
2836 DIE(aTHX_ PL_no_aelem, elem);
2837 lv = sv_newmortal();
2838 sv_upgrade(lv, SVt_PVLV);
2839 LvTYPE(lv) = 'y';
2840 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2841 LvTARG(lv) = SvREFCNT_inc_simple(av);
2842 LvTARGOFF(lv) = elem;
2843 LvTARGLEN(lv) = 1;
2844 PUSHs(lv);
2845 RETURN;
2846 }
2847 if (localizing) {
2848 if (preeminent)
2849 save_aelem(av, elem, svp);
2850 else
2851 SAVEADELETE(av, elem);
2852 }
2853 else if (PL_op->op_private & OPpDEREF) {
2854 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2855 RETURN;
2856 }
2857 }
2858 sv = (svp ? *svp : &PL_sv_undef);
2859 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2860 mg_get(sv);
2861 PUSHs(sv);
2862 RETURN;
2863}
2864
2865SV*
2866Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2867{
2868 PERL_ARGS_ASSERT_VIVIFY_REF;
2869
2870 SvGETMAGIC(sv);
2871 if (!SvOK(sv)) {
2872 if (SvREADONLY(sv))
2873 Perl_croak_no_modify(aTHX);
2874 prepare_SV_for_RV(sv);
2875 switch (to_what) {
2876 case OPpDEREF_SV:
2877 SvRV_set(sv, newSV(0));
2878 break;
2879 case OPpDEREF_AV:
2880 SvRV_set(sv, MUTABLE_SV(newAV()));
2881 break;
2882 case OPpDEREF_HV:
2883 SvRV_set(sv, MUTABLE_SV(newHV()));
2884 break;
2885 }
2886 SvROK_on(sv);
2887 SvSETMAGIC(sv);
2888 }
2889 if (SvGMAGICAL(sv)) {
2890 /* copy the sv without magic to prevent magic from being
2891 executed twice */
2892 SV* msv = sv_newmortal();
2893 sv_setsv_nomg(msv, sv);
2894 return msv;
2895 }
2896 return sv;
2897}
2898
2899PP(pp_method)
2900{
2901 dVAR; dSP;
2902 SV* const sv = TOPs;
2903
2904 if (SvROK(sv)) {
2905 SV* const rsv = SvRV(sv);
2906 if (SvTYPE(rsv) == SVt_PVCV) {
2907 SETs(rsv);
2908 RETURN;
2909 }
2910 }
2911
2912 SETs(method_common(sv, NULL));
2913 RETURN;
2914}
2915
2916PP(pp_method_named)
2917{
2918 dVAR; dSP;
2919 SV* const sv = cSVOP_sv;
2920 U32 hash = SvSHARED_HASH(sv);
2921
2922 XPUSHs(method_common(sv, &hash));
2923 RETURN;
2924}
2925
2926STATIC SV *
2927S_method_common(pTHX_ SV* meth, U32* hashp)
2928{
2929 dVAR;
2930 SV* ob;
2931 GV* gv;
2932 HV* stash;
2933 const char* packname = NULL;
2934 SV *packsv = NULL;
2935 STRLEN packlen;
2936 SV * const sv = *(PL_stack_base + TOPMARK + 1);
2937
2938 PERL_ARGS_ASSERT_METHOD_COMMON;
2939
2940 if (!sv)
2941 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2942 SVfARG(meth));
2943
2944 SvGETMAGIC(sv);
2945 if (SvROK(sv))
2946 ob = MUTABLE_SV(SvRV(sv));
2947 else {
2948 GV* iogv;
2949 bool packname_is_utf8 = FALSE;
2950
2951 /* this isn't a reference */
2952 if(SvOK(sv) && (packname = SvPV_nomg_const(sv, packlen))) {
2953 const HE* const he =
2954 (const HE *)hv_common_key_len(
2955 PL_stashcache, packname,
2956 packlen * -(packname_is_utf8 = !!SvUTF8(sv)), 0, NULL, 0
2957 );
2958
2959 if (he) {
2960 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2961 goto fetch;
2962 }
2963 }
2964
2965 if (!SvOK(sv) ||
2966 !(packname) ||
2967 !(iogv = gv_fetchpvn_flags(
2968 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
2969 )) ||
2970 !(ob=MUTABLE_SV(GvIO(iogv))))
2971 {
2972 /* this isn't the name of a filehandle either */
2973 if (!packname ||
2974 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
2975 ? !isIDFIRST_utf8((U8*)packname)
2976 : !isIDFIRST(*packname)
2977 ))
2978 {
2979 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
2980 SVfARG(meth),
2981 SvOK(sv) ? "without a package or object reference"
2982 : "on an undefined value");
2983 }
2984 /* assume it's a package name */
2985 stash = gv_stashpvn(packname, packlen, 0);
2986 if (!stash)
2987 packsv = sv;
2988 else {
2989 SV* const ref = newSViv(PTR2IV(stash));
2990 (void)hv_store(PL_stashcache, packname, packlen, ref, 0);
2991 }
2992 goto fetch;
2993 }
2994 /* it _is_ a filehandle name -- replace with a reference */
2995 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
2996 }
2997
2998 /* if we got here, ob should be a reference or a glob */
2999 if (!ob || !(SvOBJECT(ob)
3000 || (SvTYPE(ob) == SVt_PVGV
3001 && isGV_with_GP(ob)
3002 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3003 && SvOBJECT(ob))))
3004 {
3005 const char * const name = SvPV_nolen_const(meth);
3006 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3007 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3008 name);
3009 }
3010
3011 stash = SvSTASH(ob);
3012
3013 fetch:
3014 /* NOTE: stash may be null, hope hv_fetch_ent and
3015 gv_fetchmethod can cope (it seems they can) */
3016
3017 /* shortcut for simple names */
3018 if (hashp) {
3019 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3020 if (he) {
3021 gv = MUTABLE_GV(HeVAL(he));
3022 if (isGV(gv) && GvCV(gv) &&
3023 (!GvCVGEN(gv) || GvCVGEN(gv)
3024 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3025 return MUTABLE_SV(GvCV(gv));
3026 }
3027 }
3028
3029 gv = gv_fetchmethod_flags(stash ? stash : MUTABLE_HV(packsv),
3030 SvPV_nolen_const(meth),
3031 GV_AUTOLOAD | GV_CROAK);
3032
3033 assert(gv);
3034
3035 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3036}
3037
3038/*
3039 * Local variables:
3040 * c-indentation-style: bsd
3041 * c-basic-offset: 4
3042 * indent-tabs-mode: t
3043 * End:
3044 *
3045 * ex: set ts=8 sts=4 sw=4 noet:
3046 */