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