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