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