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