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