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
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.
12 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
15 * Awake! Awake! Fear, Fire, Foes! Awake!
18 * [p.1007 of _The Lord of the Rings_, VI/viii: "The Scouring of the Shire"]
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.
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
35 #define PERL_IN_PP_HOT_C
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;
64 if (PL_op->op_private & OPpLVAL_INTRO)
65 PUSHs(save_scalar(cGVOP_gv));
67 PUSHs(GvSVn(cGVOP_gv));
77 /* This is sometimes called directly by pp_coreargs. */
81 PUSHMARK(PL_stack_sp);
96 XPUSHs(MUTABLE_SV(cGVOP_gv));
107 if (PL_op->op_type == OP_AND)
109 RETURNOP(cLOGOP->op_other);
115 dVAR; dSP; dPOPTOPssrl;
117 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
118 SV * const temp = left;
119 left = right; right = temp;
121 if (PL_tainting && PL_tainted && !SvTAINTED(left))
123 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
124 SV * const cv = SvRV(left);
125 const U32 cv_type = SvTYPE(cv);
126 const bool is_gv = isGV_with_GP(right);
127 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
133 /* Can do the optimisation if right (LVALUE) is not a typeglob,
134 left (RVALUE) is a reference to something, and we're in void
136 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
137 /* Is the target symbol table currently empty? */
138 GV * const gv = gv_fetchsv_nomg(right, GV_NOINIT, SVt_PVGV);
139 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
140 /* Good. Create a new proxy constant subroutine in the target.
141 The gv becomes a(nother) reference to the constant. */
142 SV *const value = SvRV(cv);
144 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
145 SvPCS_IMPORTED_on(gv);
147 SvREFCNT_inc_simple_void(value);
153 /* Need to fix things up. */
155 /* Need to fix GV. */
156 right = MUTABLE_SV(gv_fetchsv_nomg(right,GV_ADD, SVt_PVGV));
160 /* We've been returned a constant rather than a full subroutine,
161 but they expect a subroutine reference to apply. */
163 ENTER_with_name("sassign_coderef");
164 SvREFCNT_inc_void(SvRV(cv));
165 /* newCONSTSUB takes a reference count on the passed in SV
166 from us. We set the name to NULL, otherwise we get into
167 all sorts of fun as the reference to our new sub is
168 donated to the GV that we're about to assign to.
170 SvRV_set(left, MUTABLE_SV(newCONSTSUB(GvSTASH(right), NULL,
173 LEAVE_with_name("sassign_coderef");
175 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
177 First: ops for \&{"BONK"}; return us the constant in the
179 Second: ops for *{"BONK"} cause that symbol table entry
180 (and our reference to it) to be upgraded from RV
182 Thirdly: We get here. cv is actually PVGV now, and its
183 GvCV() is actually the subroutine we're looking for
185 So change the reference so that it points to the subroutine
186 of that typeglob, as that's what they were after all along.
188 GV *const upgraded = MUTABLE_GV(cv);
189 CV *const source = GvCV(upgraded);
192 assert(CvFLAGS(source) & CVf_CONST);
194 SvREFCNT_inc_void(source);
195 SvREFCNT_dec(upgraded);
196 SvRV_set(left, MUTABLE_SV(source));
202 SvTEMP(right) && !SvSMAGICAL(right) && SvREFCNT(right) == 1 &&
203 (!isGV_with_GP(right) || SvFAKE(right)) && ckWARN(WARN_MISC)
206 packWARN(WARN_MISC), "Useless assignment to a temporary"
208 SvSetMagicSV(right, left);
218 RETURNOP(cLOGOP->op_other);
220 RETURNOP(cLOGOP->op_next);
227 TAINT_NOT; /* Each statement is presumed innocent */
228 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
230 if (!(PL_op->op_flags & OPf_SPECIAL)) {
231 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
232 LEAVE_SCOPE(oldsave);
239 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
244 const char *rpv = NULL;
246 bool rcopied = FALSE;
248 if (TARG == right && right != left) { /* $r = $l.$r */
249 rpv = SvPV_nomg_const(right, rlen);
250 rbyte = !DO_UTF8(right);
251 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
252 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
256 if (TARG != left) { /* not $l .= $r */
258 const char* const lpv = SvPV_nomg_const(left, llen);
259 lbyte = !DO_UTF8(left);
260 sv_setpvn(TARG, lpv, llen);
266 else { /* $l .= $r */
268 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
269 report_uninit(right);
272 lbyte = (SvROK(left) && SvTYPE(SvRV(left)) == SVt_REGEXP)
273 ? !DO_UTF8(SvRV(left)) : !DO_UTF8(left);
280 /* $r.$r: do magic twice: tied might return different 2nd time */
282 rpv = SvPV_nomg_const(right, rlen);
283 rbyte = !DO_UTF8(right);
285 if (lbyte != rbyte) {
286 /* sv_utf8_upgrade_nomg() may reallocate the stack */
289 sv_utf8_upgrade_nomg(TARG);
292 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
293 sv_utf8_upgrade_nomg(right);
294 rpv = SvPV_nomg_const(right, rlen);
298 sv_catpvn_nomg(TARG, rpv, rlen);
309 if (PL_op->op_flags & OPf_MOD) {
310 if (PL_op->op_private & OPpLVAL_INTRO)
311 if (!(PL_op->op_private & OPpPAD_STATE))
312 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
313 if (PL_op->op_private & OPpDEREF) {
315 TOPs = vivify_ref(TOPs, PL_op->op_private & OPpDEREF);
328 tryAMAGICunTARGET(iter_amg, 0, 0);
329 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
331 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
332 if (!isGV_with_GP(PL_last_in_gv)) {
333 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
334 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
337 XPUSHs(MUTABLE_SV(PL_last_in_gv));
340 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
343 return do_readline();
351 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
355 (SvIOK_notUV(left) && SvIOK_notUV(right))
356 ? (SvIVX(left) == SvIVX(right))
357 : ( do_ncmp(left, right) == 0)
366 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
367 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
368 Perl_croak_no_modify(aTHX);
369 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
370 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
372 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
373 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
375 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
376 if (inc) sv_inc(TOPs);
389 if (PL_op->op_type == OP_OR)
391 RETURNOP(cLOGOP->op_other);
400 const int op_type = PL_op->op_type;
401 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
406 if (!sv || !SvANY(sv)) {
407 if (op_type == OP_DOR)
409 RETURNOP(cLOGOP->op_other);
415 if (!sv || !SvANY(sv))
420 switch (SvTYPE(sv)) {
422 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
426 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
430 if (CvROOT(sv) || CvXSUB(sv))
443 if(op_type == OP_DOR)
445 RETURNOP(cLOGOP->op_other);
447 /* assuming OP_DEFINED */
455 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
456 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
460 useleft = USE_LEFT(svl);
461 #ifdef PERL_PRESERVE_IVUV
462 /* We must see if we can perform the addition with integers if possible,
463 as the integer code detects overflow while the NV code doesn't.
464 If either argument hasn't had a numeric conversion yet attempt to get
465 the IV. It's important to do this now, rather than just assuming that
466 it's not IOK as a PV of "9223372036854775806" may not take well to NV
467 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
468 integer in case the second argument is IV=9223372036854775806
469 We can (now) rely on sv_2iv to do the right thing, only setting the
470 public IOK flag if the value in the NV (or PV) slot is truly integer.
472 A side effect is that this also aggressively prefers integer maths over
473 fp maths for integer values.
475 How to detect overflow?
477 C 99 section 6.2.6.1 says
479 The range of nonnegative values of a signed integer type is a subrange
480 of the corresponding unsigned integer type, and the representation of
481 the same value in each type is the same. A computation involving
482 unsigned operands can never overflow, because a result that cannot be
483 represented by the resulting unsigned integer type is reduced modulo
484 the number that is one greater than the largest value that can be
485 represented by the resulting type.
489 which I read as "unsigned ints wrap."
491 signed integer overflow seems to be classed as "exception condition"
493 If an exceptional condition occurs during the evaluation of an
494 expression (that is, if the result is not mathematically defined or not
495 in the range of representable values for its type), the behavior is
498 (6.5, the 5th paragraph)
500 I had assumed that on 2s complement machines signed arithmetic would
501 wrap, hence coded pp_add and pp_subtract on the assumption that
502 everything perl builds on would be happy. After much wailing and
503 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
504 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
505 unsigned code below is actually shorter than the old code. :-)
508 if (SvIV_please_nomg(svr)) {
509 /* Unless the left argument is integer in range we are going to have to
510 use NV maths. Hence only attempt to coerce the right argument if
511 we know the left is integer. */
519 /* left operand is undef, treat as zero. + 0 is identity,
520 Could SETi or SETu right now, but space optimise by not adding
521 lots of code to speed up what is probably a rarish case. */
523 /* Left operand is defined, so is it IV? */
524 if (SvIV_please_nomg(svl)) {
525 if ((auvok = SvUOK(svl)))
528 register const IV aiv = SvIVX(svl);
531 auvok = 1; /* Now acting as a sign flag. */
532 } else { /* 2s complement assumption for IV_MIN */
540 bool result_good = 0;
543 bool buvok = SvUOK(svr);
548 register const IV biv = SvIVX(svr);
555 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
556 else "IV" now, independent of how it came in.
557 if a, b represents positive, A, B negative, a maps to -A etc
562 all UV maths. negate result if A negative.
563 add if signs same, subtract if signs differ. */
569 /* Must get smaller */
575 /* result really should be -(auv-buv). as its negation
576 of true value, need to swap our result flag */
593 if (result <= (UV)IV_MIN)
596 /* result valid, but out of range for IV. */
601 } /* Overflow, drop through to NVs. */
606 NV value = SvNV_nomg(svr);
609 /* left operand is undef, treat as zero. + 0.0 is identity. */
613 SETn( value + SvNV_nomg(svl) );
621 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
622 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
623 const U32 lval = PL_op->op_flags & OPf_MOD;
624 SV** const svp = av_fetch(av, PL_op->op_private, lval);
625 SV *sv = (svp ? *svp : &PL_sv_undef);
627 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
635 dVAR; dSP; dMARK; dTARGET;
637 do_join(TARG, *MARK, MARK, SP);
648 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
649 * will be enough to hold an OP*.
651 SV* const sv = sv_newmortal();
652 sv_upgrade(sv, SVt_PVLV);
654 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
657 XPUSHs(MUTABLE_SV(PL_op));
662 /* Oversized hot code. */
666 dVAR; dSP; dMARK; dORIGMARK;
670 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
674 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
677 if (MARK == ORIGMARK) {
678 /* If using default handle then we need to make space to
679 * pass object as 1st arg, so move other args up ...
683 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
686 return Perl_tied_method(aTHX_ "PRINT", mark - 1, MUTABLE_SV(io),
688 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
689 | (PL_op->op_type == OP_SAY
690 ? TIED_METHOD_SAY : 0)), sp - mark);
693 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
694 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
697 SETERRNO(EBADF,RMS_IFI);
700 else if (!(fp = IoOFP(io))) {
702 report_wrongway_fh(gv, '<');
705 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
709 SV * const ofs = GvSV(PL_ofsgv); /* $, */
711 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
713 if (!do_print(*MARK, fp))
717 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
718 if (!do_print(GvSV(PL_ofsgv), fp)) {
727 if (!do_print(*MARK, fp))
735 if (PL_op->op_type == OP_SAY) {
736 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
739 else if (PL_ors_sv && SvOK(PL_ors_sv))
740 if (!do_print(PL_ors_sv, fp)) /* $\ */
743 if (IoFLAGS(io) & IOf_FLUSH)
744 if (PerlIO_flush(fp) == EOF)
754 XPUSHs(&PL_sv_undef);
761 const I32 gimme = GIMME_V;
762 static const char an_array[] = "an ARRAY";
763 static const char a_hash[] = "a HASH";
764 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
765 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
770 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
773 if (SvTYPE(sv) != type)
774 /* diag_listed_as: Not an ARRAY reference */
775 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
776 if (PL_op->op_flags & OPf_REF) {
780 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
781 const I32 flags = is_lvalue_sub();
782 if (flags && !(flags & OPpENTERSUB_INARGS)) {
783 if (gimme != G_ARRAY)
784 goto croak_cant_return;
789 else if (PL_op->op_flags & OPf_MOD
790 && PL_op->op_private & OPpLVAL_INTRO)
791 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
794 if (SvTYPE(sv) == type) {
795 if (PL_op->op_flags & OPf_REF) {
800 if (gimme != G_ARRAY)
801 goto croak_cant_return;
809 if (!isGV_with_GP(sv)) {
810 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
818 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
819 if (PL_op->op_private & OPpLVAL_INTRO)
820 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
821 if (PL_op->op_flags & OPf_REF) {
825 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
826 const I32 flags = is_lvalue_sub();
827 if (flags && !(flags & OPpENTERSUB_INARGS)) {
828 if (gimme != G_ARRAY)
829 goto croak_cant_return;
838 AV *const av = MUTABLE_AV(sv);
839 /* The guts of pp_rv2av, with no intending change to preserve history
840 (until such time as we get tools that can do blame annotation across
841 whitespace changes. */
842 if (gimme == G_ARRAY) {
843 const I32 maxarg = AvFILL(av) + 1;
844 (void)POPs; /* XXXX May be optimized away? */
846 if (SvRMAGICAL(av)) {
848 for (i=0; i < (U32)maxarg; i++) {
849 SV ** const svp = av_fetch(av, i, FALSE);
850 /* See note in pp_helem, and bug id #27839 */
852 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
857 Copy(AvARRAY(av), SP+1, maxarg, SV*);
861 else if (gimme == G_SCALAR) {
863 const I32 maxarg = AvFILL(av) + 1;
867 /* The guts of pp_rv2hv */
868 if (gimme == G_ARRAY) { /* array wanted */
870 return Perl_do_kv(aTHX);
872 else if (gimme == G_SCALAR) {
874 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
882 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
883 is_pp_rv2av ? "array" : "hash");
888 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
892 PERL_ARGS_ASSERT_DO_ODDBALL;
898 if (ckWARN(WARN_MISC)) {
900 if (relem == firstrelem &&
902 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
903 SvTYPE(SvRV(*relem)) == SVt_PVHV))
905 err = "Reference found where even-sized list expected";
908 err = "Odd number of elements in hash assignment";
909 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
913 didstore = hv_store_ent(hash,*relem,tmpstr,0);
914 if (SvMAGICAL(hash)) {
915 if (SvSMAGICAL(tmpstr))
927 SV **lastlelem = PL_stack_sp;
928 SV **lastrelem = PL_stack_base + POPMARK;
929 SV **firstrelem = PL_stack_base + POPMARK + 1;
930 SV **firstlelem = lastrelem + 1;
943 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
945 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
948 /* If there's a common identifier on both sides we have to take
949 * special care that assigning the identifier on the left doesn't
950 * clobber a value on the right that's used later in the list.
951 * Don't bother if LHS is just an empty hash or array.
954 if ( (PL_op->op_private & OPpASSIGN_COMMON)
956 firstlelem != lastlelem
957 || ! ((sv = *firstlelem))
959 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
960 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
961 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
964 EXTEND_MORTAL(lastrelem - firstrelem + 1);
965 for (relem = firstrelem; relem <= lastrelem; relem++) {
967 TAINT_NOT; /* Each item is independent */
969 /* Dear TODO test in t/op/sort.t, I love you.
970 (It's relying on a panic, not a "semi-panic" from newSVsv()
971 and then an assertion failure below.) */
972 if (SvIS_FREED(sv)) {
973 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
976 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
977 and we need a second copy of a temp here. */
978 *relem = sv_2mortal(newSVsv(sv));
988 while (lelem <= lastlelem) {
989 TAINT_NOT; /* Each item stands on its own, taintwise. */
991 switch (SvTYPE(sv)) {
993 ary = MUTABLE_AV(sv);
994 magic = SvMAGICAL(ary) != 0;
996 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
998 av_extend(ary, lastrelem - relem);
1000 while (relem <= lastrelem) { /* gobble up all the rest */
1004 sv_setsv(sv, *relem);
1006 didstore = av_store(ary,i++,sv);
1015 if (PL_delaymagic & DM_ARRAY_ISA)
1016 SvSETMAGIC(MUTABLE_SV(ary));
1019 case SVt_PVHV: { /* normal hash */
1021 SV** topelem = relem;
1023 hash = MUTABLE_HV(sv);
1024 magic = SvMAGICAL(hash) != 0;
1026 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1028 firsthashrelem = relem;
1030 while (relem < lastrelem) { /* gobble up all the rest */
1032 sv = *relem ? *relem : &PL_sv_no;
1036 sv_setsv(tmpstr,*relem); /* value */
1038 if (gimme != G_VOID) {
1039 if (hv_exists_ent(hash, sv, 0))
1040 /* key overwrites an existing entry */
1043 if (gimme == G_ARRAY) {
1044 /* copy element back: possibly to an earlier
1045 * stack location if we encountered dups earlier */
1047 *topelem++ = tmpstr;
1050 didstore = hv_store_ent(hash,sv,tmpstr,0);
1052 if (SvSMAGICAL(tmpstr))
1059 if (relem == lastrelem) {
1060 do_oddball(hash, relem, firstrelem);
1067 if (SvIMMORTAL(sv)) {
1068 if (relem <= lastrelem)
1072 if (relem <= lastrelem) {
1074 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1075 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1078 packWARN(WARN_MISC),
1079 "Useless assignment to a temporary"
1081 sv_setsv(sv, *relem);
1085 sv_setsv(sv, &PL_sv_undef);
1090 if (PL_delaymagic & ~DM_DELAY) {
1091 /* Will be used to set PL_tainting below */
1092 UV tmp_uid = PerlProc_getuid();
1093 UV tmp_euid = PerlProc_geteuid();
1094 UV tmp_gid = PerlProc_getgid();
1095 UV tmp_egid = PerlProc_getegid();
1097 if (PL_delaymagic & DM_UID) {
1098 #ifdef HAS_SETRESUID
1099 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1100 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1103 # ifdef HAS_SETREUID
1104 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1105 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1108 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1109 (void)setruid(PL_delaymagic_uid);
1110 PL_delaymagic &= ~DM_RUID;
1112 # endif /* HAS_SETRUID */
1114 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1115 (void)seteuid(PL_delaymagic_euid);
1116 PL_delaymagic &= ~DM_EUID;
1118 # endif /* HAS_SETEUID */
1119 if (PL_delaymagic & DM_UID) {
1120 if (PL_delaymagic_uid != PL_delaymagic_euid)
1121 DIE(aTHX_ "No setreuid available");
1122 (void)PerlProc_setuid(PL_delaymagic_uid);
1124 # endif /* HAS_SETREUID */
1125 #endif /* HAS_SETRESUID */
1126 tmp_uid = PerlProc_getuid();
1127 tmp_euid = PerlProc_geteuid();
1129 if (PL_delaymagic & DM_GID) {
1130 #ifdef HAS_SETRESGID
1131 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1132 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1135 # ifdef HAS_SETREGID
1136 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1137 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1140 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1141 (void)setrgid(PL_delaymagic_gid);
1142 PL_delaymagic &= ~DM_RGID;
1144 # endif /* HAS_SETRGID */
1146 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1147 (void)setegid(PL_delaymagic_egid);
1148 PL_delaymagic &= ~DM_EGID;
1150 # endif /* HAS_SETEGID */
1151 if (PL_delaymagic & DM_GID) {
1152 if (PL_delaymagic_gid != PL_delaymagic_egid)
1153 DIE(aTHX_ "No setregid available");
1154 (void)PerlProc_setgid(PL_delaymagic_gid);
1156 # endif /* HAS_SETREGID */
1157 #endif /* HAS_SETRESGID */
1158 tmp_gid = PerlProc_getgid();
1159 tmp_egid = PerlProc_getegid();
1161 PL_tainting |= (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid));
1165 if (gimme == G_VOID)
1166 SP = firstrelem - 1;
1167 else if (gimme == G_SCALAR) {
1170 SETi(lastrelem - firstrelem + 1 - duplicates);
1177 /* at this point we have removed the duplicate key/value
1178 * pairs from the stack, but the remaining values may be
1179 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1180 * the (a 2), but the stack now probably contains
1181 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1182 * obliterates the earlier key. So refresh all values. */
1183 lastrelem -= duplicates;
1184 relem = firsthashrelem;
1185 while (relem < lastrelem) {
1188 he = hv_fetch_ent(hash, sv, 0, 0);
1189 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1195 SP = firstrelem + (lastlelem - firstlelem);
1196 lelem = firstlelem + (relem - firstrelem);
1198 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1207 register PMOP * const pm = cPMOP;
1208 REGEXP * rx = PM_GETRE(pm);
1209 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1210 SV * const rv = sv_newmortal();
1212 SvUPGRADE(rv, SVt_IV);
1213 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1214 loathe to use it here, but it seems to be the right fix. Or close.
1215 The key part appears to be that it's essential for pp_qr to return a new
1216 object (SV), which implies that there needs to be an effective way to
1217 generate a new SV from the existing SV that is pre-compiled in the
1219 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1223 HV *const stash = gv_stashsv(pkg, GV_ADD);
1225 (void)sv_bless(rv, stash);
1228 if (RX_EXTFLAGS(rx) & RXf_TAINTED) {
1230 SvTAINTED_on(SvRV(rv));
1239 register PMOP *pm = cPMOP;
1241 register const char *t;
1242 register const char *s;
1245 U8 r_flags = REXEC_CHECKED;
1246 const char *truebase; /* Start of string */
1247 register REGEXP *rx = PM_GETRE(pm);
1249 const I32 gimme = GIMME;
1252 const I32 oldsave = PL_savestack_ix;
1253 I32 update_minmatch = 1;
1254 I32 had_zerolen = 0;
1257 if (PL_op->op_flags & OPf_STACKED)
1259 else if (PL_op->op_private & OPpTARGET_MY)
1266 PUTBACK; /* EVAL blocks need stack_sp. */
1267 /* Skip get-magic if this is a qr// clone, because regcomp has
1269 s = ((struct regexp *)SvANY(rx))->mother_re
1270 ? SvPV_nomg_const(TARG, len)
1271 : SvPV_const(TARG, len);
1273 DIE(aTHX_ "panic: pp_match");
1275 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1276 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1279 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1281 /* PMdf_USED is set after a ?? matches once */
1284 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1286 pm->op_pmflags & PMf_USED
1290 if (gimme == G_ARRAY)
1297 /* empty pattern special-cased to use last successful pattern if possible */
1298 if (!RX_PRELEN(rx) && PL_curpm) {
1303 if (RX_MINLEN(rx) > (I32)len)
1308 /* XXXX What part of this is needed with true \G-support? */
1309 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1310 RX_OFFS(rx)[0].start = -1;
1311 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1312 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1313 if (mg && mg->mg_len >= 0) {
1314 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1315 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1316 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1317 r_flags |= REXEC_IGNOREPOS;
1318 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1319 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1322 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1323 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1324 update_minmatch = 0;
1328 /* XXX: comment out !global get safe $1 vars after a
1329 match, BUT be aware that this leads to dramatic slowdowns on
1330 /g matches against large strings. So far a solution to this problem
1331 appears to be quite tricky.
1332 Test for the unsafe vars are TODO for now. */
1333 if ( (!global && RX_NPARENS(rx))
1334 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1335 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1336 r_flags |= REXEC_COPY_STR;
1339 if (global && RX_OFFS(rx)[0].start != -1) {
1340 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1341 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1343 if (update_minmatch++)
1344 minmatch = had_zerolen;
1346 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1347 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1348 /* FIXME - can PL_bostr be made const char *? */
1349 PL_bostr = (char *)truebase;
1350 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1354 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1356 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1357 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1360 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1361 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1365 if (dynpm->op_pmflags & PMf_ONCE) {
1367 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1369 dynpm->op_pmflags |= PMf_USED;
1375 RX_MATCH_TAINTED_on(rx);
1376 TAINT_IF(RX_MATCH_TAINTED(rx));
1377 if (gimme == G_ARRAY) {
1378 const I32 nparens = RX_NPARENS(rx);
1379 I32 i = (global && !nparens) ? 1 : 0;
1381 SPAGAIN; /* EVAL blocks could move the stack. */
1382 EXTEND(SP, nparens + i);
1383 EXTEND_MORTAL(nparens + i);
1384 for (i = !i; i <= nparens; i++) {
1385 PUSHs(sv_newmortal());
1386 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1387 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1388 s = RX_OFFS(rx)[i].start + truebase;
1389 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1390 len < 0 || len > strend - s)
1391 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1392 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1393 (long) i, (long) RX_OFFS(rx)[i].start,
1394 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1395 sv_setpvn(*SP, s, len);
1396 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1401 if (dynpm->op_pmflags & PMf_CONTINUE) {
1403 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1404 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1406 #ifdef PERL_OLD_COPY_ON_WRITE
1408 sv_force_normal_flags(TARG, 0);
1410 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1411 &PL_vtbl_mglob, NULL, 0);
1413 if (RX_OFFS(rx)[0].start != -1) {
1414 mg->mg_len = RX_OFFS(rx)[0].end;
1415 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1416 mg->mg_flags |= MGf_MINMATCH;
1418 mg->mg_flags &= ~MGf_MINMATCH;
1421 had_zerolen = (RX_OFFS(rx)[0].start != -1
1422 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1423 == (UV)RX_OFFS(rx)[0].end));
1424 PUTBACK; /* EVAL blocks may use stack */
1425 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1430 LEAVE_SCOPE(oldsave);
1436 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1437 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1441 #ifdef PERL_OLD_COPY_ON_WRITE
1443 sv_force_normal_flags(TARG, 0);
1445 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1446 &PL_vtbl_mglob, NULL, 0);
1448 if (RX_OFFS(rx)[0].start != -1) {
1449 mg->mg_len = RX_OFFS(rx)[0].end;
1450 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1451 mg->mg_flags |= MGf_MINMATCH;
1453 mg->mg_flags &= ~MGf_MINMATCH;
1456 LEAVE_SCOPE(oldsave);
1460 yup: /* Confirmed by INTUIT */
1462 RX_MATCH_TAINTED_on(rx);
1463 TAINT_IF(RX_MATCH_TAINTED(rx));
1465 if (dynpm->op_pmflags & PMf_ONCE) {
1467 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1469 dynpm->op_pmflags |= PMf_USED;
1472 if (RX_MATCH_COPIED(rx))
1473 Safefree(RX_SUBBEG(rx));
1474 RX_MATCH_COPIED_off(rx);
1475 RX_SUBBEG(rx) = NULL;
1477 /* FIXME - should rx->subbeg be const char *? */
1478 RX_SUBBEG(rx) = (char *) truebase;
1479 RX_OFFS(rx)[0].start = s - truebase;
1480 if (RX_MATCH_UTF8(rx)) {
1481 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1482 RX_OFFS(rx)[0].end = t - truebase;
1485 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1487 RX_SUBLEN(rx) = strend - truebase;
1490 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1492 #ifdef PERL_OLD_COPY_ON_WRITE
1493 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1495 PerlIO_printf(Perl_debug_log,
1496 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1497 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1500 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1502 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1503 assert (SvPOKp(RX_SAVED_COPY(rx)));
1508 RX_SUBBEG(rx) = savepvn(t, strend - t);
1509 #ifdef PERL_OLD_COPY_ON_WRITE
1510 RX_SAVED_COPY(rx) = NULL;
1513 RX_SUBLEN(rx) = strend - t;
1514 RX_MATCH_COPIED_on(rx);
1515 off = RX_OFFS(rx)[0].start = s - t;
1516 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1518 else { /* startp/endp are used by @- @+. */
1519 RX_OFFS(rx)[0].start = s - truebase;
1520 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1522 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1524 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
1525 LEAVE_SCOPE(oldsave);
1530 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1531 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1532 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1537 LEAVE_SCOPE(oldsave);
1538 if (gimme == G_ARRAY)
1544 Perl_do_readline(pTHX)
1546 dVAR; dSP; dTARGETSTACKED;
1551 register IO * const io = GvIO(PL_last_in_gv);
1552 register const I32 type = PL_op->op_type;
1553 const I32 gimme = GIMME_V;
1556 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1558 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1559 if (gimme == G_SCALAR) {
1561 SvSetSV_nosteal(TARG, TOPs);
1571 if (IoFLAGS(io) & IOf_ARGV) {
1572 if (IoFLAGS(io) & IOf_START) {
1574 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1575 IoFLAGS(io) &= ~IOf_START;
1576 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1577 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1578 SvSETMAGIC(GvSV(PL_last_in_gv));
1583 fp = nextargv(PL_last_in_gv);
1584 if (!fp) { /* Note: fp != IoIFP(io) */
1585 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1588 else if (type == OP_GLOB)
1589 fp = Perl_start_glob(aTHX_ POPs, io);
1591 else if (type == OP_GLOB)
1593 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1594 report_wrongway_fh(PL_last_in_gv, '>');
1598 if ((!io || !(IoFLAGS(io) & IOf_START))
1599 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1601 if (type == OP_GLOB)
1602 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1603 "glob failed (can't start child: %s)",
1606 report_evil_fh(PL_last_in_gv);
1608 if (gimme == G_SCALAR) {
1609 /* undef TARG, and push that undefined value */
1610 if (type != OP_RCATLINE) {
1611 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1619 if (gimme == G_SCALAR) {
1621 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1624 if (type == OP_RCATLINE)
1625 SvPV_force_nomg_nolen(sv);
1629 else if (isGV_with_GP(sv)) {
1630 SvPV_force_nomg_nolen(sv);
1632 SvUPGRADE(sv, SVt_PV);
1633 tmplen = SvLEN(sv); /* remember if already alloced */
1634 if (!tmplen && !SvREADONLY(sv)) {
1635 /* try short-buffering it. Please update t/op/readline.t
1636 * if you change the growth length.
1641 if (type == OP_RCATLINE && SvOK(sv)) {
1643 SvPV_force_nomg_nolen(sv);
1649 sv = sv_2mortal(newSV(80));
1653 /* This should not be marked tainted if the fp is marked clean */
1654 #define MAYBE_TAINT_LINE(io, sv) \
1655 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1660 /* delay EOF state for a snarfed empty file */
1661 #define SNARF_EOF(gimme,rs,io,sv) \
1662 (gimme != G_SCALAR || SvCUR(sv) \
1663 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1667 if (!sv_gets(sv, fp, offset)
1669 || SNARF_EOF(gimme, PL_rs, io, sv)
1670 || PerlIO_error(fp)))
1672 PerlIO_clearerr(fp);
1673 if (IoFLAGS(io) & IOf_ARGV) {
1674 fp = nextargv(PL_last_in_gv);
1677 (void)do_close(PL_last_in_gv, FALSE);
1679 else if (type == OP_GLOB) {
1680 if (!do_close(PL_last_in_gv, FALSE)) {
1681 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1682 "glob failed (child exited with status %d%s)",
1683 (int)(STATUS_CURRENT >> 8),
1684 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1687 if (gimme == G_SCALAR) {
1688 if (type != OP_RCATLINE) {
1689 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1695 MAYBE_TAINT_LINE(io, sv);
1698 MAYBE_TAINT_LINE(io, sv);
1700 IoFLAGS(io) |= IOf_NOLINE;
1704 if (type == OP_GLOB) {
1707 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1708 char * const tmps = SvEND(sv) - 1;
1709 if (*tmps == *SvPVX_const(PL_rs)) {
1711 SvCUR_set(sv, SvCUR(sv) - 1);
1714 for (t1 = SvPVX_const(sv); *t1; t1++)
1715 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1716 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1718 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1719 (void)POPs; /* Unmatched wildcard? Chuck it... */
1722 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1723 if (ckWARN(WARN_UTF8)) {
1724 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1725 const STRLEN len = SvCUR(sv) - offset;
1728 if (!is_utf8_string_loc(s, len, &f))
1729 /* Emulate :encoding(utf8) warning in the same case. */
1730 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1731 "utf8 \"\\x%02X\" does not map to Unicode",
1732 f < (U8*)SvEND(sv) ? *f : 0);
1735 if (gimme == G_ARRAY) {
1736 if (SvLEN(sv) - SvCUR(sv) > 20) {
1737 SvPV_shrink_to_cur(sv);
1739 sv = sv_2mortal(newSV(80));
1742 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1743 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1744 const STRLEN new_len
1745 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1746 SvPV_renew(sv, new_len);
1757 SV * const keysv = POPs;
1758 HV * const hv = MUTABLE_HV(POPs);
1759 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1760 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1762 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1763 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1764 bool preeminent = TRUE;
1766 if (SvTYPE(hv) != SVt_PVHV)
1773 /* If we can determine whether the element exist,
1774 * Try to preserve the existenceness of a tied hash
1775 * element by using EXISTS and DELETE if possible.
1776 * Fallback to FETCH and STORE otherwise. */
1777 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1778 preeminent = hv_exists_ent(hv, keysv, 0);
1781 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1782 svp = he ? &HeVAL(he) : NULL;
1784 if (!svp || !*svp || *svp == &PL_sv_undef) {
1788 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1790 lv = sv_newmortal();
1791 sv_upgrade(lv, SVt_PVLV);
1793 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1794 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1795 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1801 if (HvNAME_get(hv) && isGV(*svp))
1802 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1803 else if (preeminent)
1804 save_helem_flags(hv, keysv, svp,
1805 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1807 SAVEHDELETE(hv, keysv);
1809 else if (PL_op->op_private & OPpDEREF) {
1810 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1814 sv = (svp && *svp ? *svp : &PL_sv_undef);
1815 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1816 * was to make C<local $tied{foo} = $tied{foo}> possible.
1817 * However, it seems no longer to be needed for that purpose, and
1818 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1819 * would loop endlessly since the pos magic is getting set on the
1820 * mortal copy and lost. However, the copy has the effect of
1821 * triggering the get magic, and losing it altogether made things like
1822 * c<$tied{foo};> in void context no longer do get magic, which some
1823 * code relied on. Also, delayed triggering of magic on @+ and friends
1824 * meant the original regex may be out of scope by now. So as a
1825 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1826 * being called too many times). */
1827 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1836 register PERL_CONTEXT *cx;
1839 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1840 bool av_is_stack = FALSE;
1843 cx = &cxstack[cxstack_ix];
1844 if (!CxTYPE_is_LOOP(cx))
1845 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1847 itersvp = CxITERVAR(cx);
1848 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1849 /* string increment */
1850 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1851 SV *end = cx->blk_loop.state_u.lazysv.end;
1852 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1853 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1855 const char *max = SvPV_const(end, maxlen);
1856 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1857 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1858 /* safe to reuse old SV */
1859 sv_setsv(*itersvp, cur);
1863 /* we need a fresh SV every time so that loop body sees a
1864 * completely new SV for closures/references to work as
1867 *itersvp = newSVsv(cur);
1868 SvREFCNT_dec(oldsv);
1870 if (strEQ(SvPVX_const(cur), max))
1871 sv_setiv(cur, 0); /* terminate next time */
1878 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1879 /* integer increment */
1880 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1883 /* don't risk potential race */
1884 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1885 /* safe to reuse old SV */
1886 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1890 /* we need a fresh SV every time so that loop body sees a
1891 * completely new SV for closures/references to work as they
1894 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
1895 SvREFCNT_dec(oldsv);
1898 /* Handle end of range at IV_MAX */
1899 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
1900 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
1902 cx->blk_loop.state_u.lazyiv.cur++;
1903 cx->blk_loop.state_u.lazyiv.end++;
1910 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1911 av = cx->blk_loop.state_u.ary.ary;
1916 if (PL_op->op_private & OPpITER_REVERSED) {
1917 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1918 ? cx->blk_loop.resetsp + 1 : 0))
1921 if (SvMAGICAL(av) || AvREIFY(av)) {
1922 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1923 sv = svp ? *svp : NULL;
1926 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1930 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1934 if (SvMAGICAL(av) || AvREIFY(av)) {
1935 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1936 sv = svp ? *svp : NULL;
1939 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1943 if (sv && SvIS_FREED(sv)) {
1945 Perl_croak(aTHX_ "Use of freed value in iteration");
1950 SvREFCNT_inc_simple_void_NN(sv);
1954 if (!av_is_stack && sv == &PL_sv_undef) {
1955 SV *lv = newSV_type(SVt_PVLV);
1957 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1958 LvTARG(lv) = SvREFCNT_inc_simple(av);
1959 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1960 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1966 SvREFCNT_dec(oldsv);
1972 A description of how taint works in pattern matching and substitution.
1974 While the pattern is being assembled/concatenated and then compiled,
1975 PL_tainted will get set if any component of the pattern is tainted, e.g.
1976 /.*$tainted/. At the end of pattern compilation, the RXf_TAINTED flag
1977 is set on the pattern if PL_tainted is set.
1979 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1980 the pattern is marked as tainted. This means that subsequent usage, such
1981 as /x$r/, will set PL_tainted, and thus RXf_TAINTED, on the new pattern too.
1983 During execution of a pattern, locale-variant ops such as ALNUML set the
1984 local flag RF_tainted. At the end of execution, the engine sets the
1985 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
1988 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
1989 of $1 et al to indicate whether the returned value should be tainted.
1990 It is the responsibility of the caller of the pattern (i.e. pp_match,
1991 pp_subst etc) to set this flag for any other circumstances where $1 needs
1994 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
1996 There are three possible sources of taint
1998 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
1999 * the replacement string (or expression under /e)
2001 There are four destinations of taint and they are affected by the sources
2002 according to the rules below:
2004 * the return value (not including /r):
2005 tainted by the source string and pattern, but only for the
2006 number-of-iterations case; boolean returns aren't tainted;
2007 * the modified string (or modified copy under /r):
2008 tainted by the source string, pattern, and replacement strings;
2010 tainted by the pattern, and under 'use re "taint"', by the source
2012 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2013 should always be unset before executing subsequent code.
2015 The overall action of pp_subst is:
2017 * at the start, set bits in rxtainted indicating the taint status of
2018 the various sources.
2020 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2021 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2022 pattern has subsequently become tainted via locale ops.
2024 * If control is being passed to pp_substcont to execute a /e block,
2025 save rxtainted in the CXt_SUBST block, for future use by
2028 * Whenever control is being returned to perl code (either by falling
2029 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2030 use the flag bits in rxtainted to make all the appropriate types of
2031 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2032 et al will appear tainted.
2034 pp_match is just a simpler version of the above.
2041 register PMOP *pm = cPMOP;
2053 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2054 See "how taint works" above */
2057 register REGEXP *rx = PM_GETRE(pm);
2059 int force_on_match = 0;
2060 const I32 oldsave = PL_savestack_ix;
2062 bool doutf8 = FALSE;
2063 #ifdef PERL_OLD_COPY_ON_WRITE
2067 /* known replacement string? */
2068 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2072 if (PL_op->op_flags & OPf_STACKED)
2074 else if (PL_op->op_private & OPpTARGET_MY)
2081 #ifdef PERL_OLD_COPY_ON_WRITE
2082 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2083 because they make integers such as 256 "false". */
2084 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2087 sv_force_normal_flags(TARG,0);
2089 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2090 #ifdef PERL_OLD_COPY_ON_WRITE
2093 && (SvREADONLY(TARG)
2094 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2095 || SvTYPE(TARG) > SVt_PVLV)
2096 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2097 Perl_croak_no_modify(aTHX);
2101 s = SvPV_mutable(TARG, len);
2102 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2105 /* only replace once? */
2106 once = !(rpm->op_pmflags & PMf_GLOBAL);
2108 /* See "how taint works" above */
2111 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2112 | ((RX_EXTFLAGS(rx) & RXf_TAINTED) ? SUBST_TAINT_PAT : 0)
2113 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2114 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2115 ? SUBST_TAINT_BOOLRET : 0));
2119 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2123 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2126 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2127 maxiters = 2 * slen + 10; /* We can match twice at each
2128 position, once with zero-length,
2129 second time with non-zero. */
2131 if (!RX_PRELEN(rx) && PL_curpm) {
2135 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2136 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2137 ? REXEC_COPY_STR : 0;
2140 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2142 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2146 /* How to do it in subst? */
2147 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2149 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2154 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2155 r_flags | REXEC_CHECKED))
2159 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2160 LEAVE_SCOPE(oldsave);
2164 /* known replacement string? */
2166 if (SvTAINTED(dstr))
2167 rxtainted |= SUBST_TAINT_REPL;
2169 /* Upgrade the source if the replacement is utf8 but the source is not,
2170 * but only if it matched; see
2171 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2173 if (DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2174 char * const orig_pvx = SvPVX(TARG);
2175 const STRLEN new_len = sv_utf8_upgrade_nomg(TARG);
2177 /* If the lengths are the same, the pattern contains only
2178 * invariants, can keep going; otherwise, various internal markers
2179 * could be off, so redo */
2180 if (new_len != len || orig_pvx != SvPVX(TARG)) {
2185 /* replacement needing upgrading? */
2186 if (DO_UTF8(TARG) && !doutf8) {
2187 nsv = sv_newmortal();
2190 sv_recode_to_utf8(nsv, PL_encoding);
2192 sv_utf8_upgrade(nsv);
2193 c = SvPV_const(nsv, clen);
2197 c = SvPV_const(dstr, clen);
2198 doutf8 = DO_UTF8(dstr);
2206 /* can do inplace substitution? */
2208 #ifdef PERL_OLD_COPY_ON_WRITE
2211 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2212 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2213 && (!doutf8 || SvUTF8(TARG))
2214 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2217 #ifdef PERL_OLD_COPY_ON_WRITE
2218 if (SvIsCOW(TARG)) {
2219 assert (!force_on_match);
2223 if (force_on_match) {
2225 s = SvPV_force(TARG, len);
2231 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2232 rxtainted |= SUBST_TAINT_PAT;
2233 m = orig + RX_OFFS(rx)[0].start;
2234 d = orig + RX_OFFS(rx)[0].end;
2236 if (m - s > strend - d) { /* faster to shorten from end */
2238 Copy(c, m, clen, char);
2243 Move(d, m, i, char);
2247 SvCUR_set(TARG, m - s);
2249 else if ((i = m - s)) { /* faster from front */
2252 Move(s, d - i, i, char);
2255 Copy(c, m, clen, char);
2260 Copy(c, d, clen, char);
2270 if (iters++ > maxiters)
2271 DIE(aTHX_ "Substitution loop");
2272 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2273 rxtainted |= SUBST_TAINT_PAT;
2274 m = RX_OFFS(rx)[0].start + orig;
2277 Move(s, d, i, char);
2281 Copy(c, d, clen, char);
2284 s = RX_OFFS(rx)[0].end + orig;
2285 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2287 /* don't match same null twice */
2288 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2291 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2292 Move(s, d, i+1, char); /* include the NUL */
2299 if (force_on_match) {
2301 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2302 /* I feel that it should be possible to avoid this mortal copy
2303 given that the code below copies into a new destination.
2304 However, I suspect it isn't worth the complexity of
2305 unravelling the C<goto force_it> for the small number of
2306 cases where it would be viable to drop into the copy code. */
2307 TARG = sv_2mortal(newSVsv(TARG));
2309 s = SvPV_force(TARG, len);
2312 #ifdef PERL_OLD_COPY_ON_WRITE
2315 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2316 rxtainted |= SUBST_TAINT_PAT;
2317 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2320 register PERL_CONTEXT *cx;
2322 /* note that a whole bunch of local vars are saved here for
2323 * use by pp_substcont: here's a list of them in case you're
2324 * searching for places in this sub that uses a particular var:
2325 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2326 * s m strend rx once */
2328 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2330 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2332 if (iters++ > maxiters)
2333 DIE(aTHX_ "Substitution loop");
2334 if (RX_MATCH_TAINTED(rx))
2335 rxtainted |= SUBST_TAINT_PAT;
2336 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2339 orig = RX_SUBBEG(rx);
2341 strend = s + (strend - m);
2343 m = RX_OFFS(rx)[0].start + orig;
2344 if (doutf8 && !SvUTF8(dstr))
2345 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2347 sv_catpvn(dstr, s, m-s);
2348 s = RX_OFFS(rx)[0].end + orig;
2350 sv_catpvn(dstr, c, clen);
2353 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2354 TARG, NULL, r_flags));
2355 if (doutf8 && !DO_UTF8(TARG))
2356 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2358 sv_catpvn(dstr, s, strend - s);
2360 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2361 /* From here on down we're using the copy, and leaving the original
2367 #ifdef PERL_OLD_COPY_ON_WRITE
2368 /* The match may make the string COW. If so, brilliant, because
2369 that's just saved us one malloc, copy and free - the regexp has
2370 donated the old buffer, and we malloc an entirely new one, rather
2371 than the regexp malloc()ing a buffer and copying our original,
2372 only for us to throw it away here during the substitution. */
2373 if (SvIsCOW(TARG)) {
2374 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2380 SvPV_set(TARG, SvPVX(dstr));
2381 SvCUR_set(TARG, SvCUR(dstr));
2382 SvLEN_set(TARG, SvLEN(dstr));
2383 doutf8 |= DO_UTF8(dstr);
2384 SvPV_set(dstr, NULL);
2391 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2392 (void)SvPOK_only_UTF8(TARG);
2397 /* See "how taint works" above */
2399 if ((rxtainted & SUBST_TAINT_PAT) ||
2400 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2401 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2403 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2405 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2406 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2408 SvTAINTED_on(TOPs); /* taint return value */
2410 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2412 /* needed for mg_set below */
2414 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
2417 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2419 LEAVE_SCOPE(oldsave);
2428 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2429 ++*PL_markstack_ptr;
2431 LEAVE_with_name("grep_item"); /* exit inner scope */
2434 if (PL_stack_base + *PL_markstack_ptr > SP) {
2436 const I32 gimme = GIMME_V;
2438 LEAVE_with_name("grep"); /* exit outer scope */
2439 (void)POPMARK; /* pop src */
2440 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2441 (void)POPMARK; /* pop dst */
2442 SP = PL_stack_base + POPMARK; /* pop original mark */
2443 if (gimme == G_SCALAR) {
2444 if (PL_op->op_private & OPpGREP_LEX) {
2445 SV* const sv = sv_newmortal();
2446 sv_setiv(sv, items);
2454 else if (gimme == G_ARRAY)
2461 ENTER_with_name("grep_item"); /* enter inner scope */
2464 src = PL_stack_base[*PL_markstack_ptr];
2466 if (PL_op->op_private & OPpGREP_LEX)
2467 PAD_SVl(PL_op->op_targ) = src;
2471 RETURNOP(cLOGOP->op_other);
2482 register PERL_CONTEXT *cx;
2485 if (CxMULTICALL(&cxstack[cxstack_ix]))
2489 cxstack_ix++; /* temporarily protect top context */
2492 if (gimme == G_SCALAR) {
2495 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2496 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2497 && !SvMAGICAL(TOPs)) {
2498 *MARK = SvREFCNT_inc(TOPs);
2503 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2505 *MARK = sv_mortalcopy(sv);
2509 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2510 && !SvMAGICAL(TOPs)) {
2514 *MARK = sv_mortalcopy(TOPs);
2518 *MARK = &PL_sv_undef;
2522 else if (gimme == G_ARRAY) {
2523 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2524 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2525 || SvMAGICAL(*MARK)) {
2526 *MARK = sv_mortalcopy(*MARK);
2527 TAINT_NOT; /* Each item is independent */
2535 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2536 PL_curpm = newpm; /* ... and pop $1 et al */
2539 return cx->blk_sub.retop;
2547 register PERL_CONTEXT *cx;
2549 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2552 DIE(aTHX_ "Not a CODE reference");
2553 switch (SvTYPE(sv)) {
2554 /* This is overwhelming the most common case: */
2557 if (!(cv = GvCVu((const GV *)sv))) {
2559 cv = sv_2cv(sv, &stash, &gv, 0);
2568 if(isGV_with_GP(sv)) goto we_have_a_glob;
2571 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2573 SP = PL_stack_base + POPMARK;
2581 sv = amagic_deref_call(sv, to_cv_amg);
2582 /* Don't SPAGAIN here. */
2588 sym = SvPV_nomg_const(sv, len);
2590 DIE(aTHX_ PL_no_usym, "a subroutine");
2591 if (PL_op->op_private & HINT_STRICT_REFS)
2592 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2593 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2596 cv = MUTABLE_CV(SvRV(sv));
2597 if (SvTYPE(cv) == SVt_PVCV)
2602 DIE(aTHX_ "Not a CODE reference");
2603 /* This is the second most common case: */
2605 cv = MUTABLE_CV(sv);
2613 if (CvCLONE(cv) && ! CvCLONED(cv))
2614 DIE(aTHX_ "Closure prototype called");
2615 if (!CvROOT(cv) && !CvXSUB(cv)) {
2619 /* anonymous or undef'd function leaves us no recourse */
2620 if (CvANON(cv) || !(gv = CvGV(cv)))
2621 DIE(aTHX_ "Undefined subroutine called");
2623 /* autoloaded stub? */
2624 if (cv != GvCV(gv)) {
2627 /* should call AUTOLOAD now? */
2630 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2631 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2637 sub_name = sv_newmortal();
2638 gv_efullname3(sub_name, gv, NULL);
2639 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2643 DIE(aTHX_ "Not a CODE reference");
2648 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2649 Perl_get_db_sub(aTHX_ &sv, cv);
2651 PL_curcopdb = PL_curcop;
2653 /* check for lsub that handles lvalue subroutines */
2654 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2655 /* if lsub not found then fall back to DB::sub */
2656 if (!cv) cv = GvCV(PL_DBsub);
2658 cv = GvCV(PL_DBsub);
2661 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2662 DIE(aTHX_ "No DB::sub routine defined");
2665 if (!(CvISXSUB(cv))) {
2666 /* This path taken at least 75% of the time */
2668 register I32 items = SP - MARK;
2669 AV* const padlist = CvPADLIST(cv);
2670 PUSHBLOCK(cx, CXt_SUB, MARK);
2672 cx->blk_sub.retop = PL_op->op_next;
2674 if (CvDEPTH(cv) >= 2) {
2675 PERL_STACK_OVERFLOW_CHECK();
2676 pad_push(padlist, CvDEPTH(cv));
2679 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2681 AV *const av = MUTABLE_AV(PAD_SVl(0));
2683 /* @_ is normally not REAL--this should only ever
2684 * happen when DB::sub() calls things that modify @_ */
2689 cx->blk_sub.savearray = GvAV(PL_defgv);
2690 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2691 CX_CURPAD_SAVE(cx->blk_sub);
2692 cx->blk_sub.argarray = av;
2695 if (items > AvMAX(av) + 1) {
2696 SV **ary = AvALLOC(av);
2697 if (AvARRAY(av) != ary) {
2698 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2701 if (items > AvMAX(av) + 1) {
2702 AvMAX(av) = items - 1;
2703 Renew(ary,items,SV*);
2708 Copy(MARK,AvARRAY(av),items,SV*);
2709 AvFILLp(av) = items - 1;
2717 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2719 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2720 /* warning must come *after* we fully set up the context
2721 * stuff so that __WARN__ handlers can safely dounwind()
2724 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2725 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2726 sub_crush_depth(cv);
2727 RETURNOP(CvSTART(cv));
2730 I32 markix = TOPMARK;
2735 /* Need to copy @_ to stack. Alternative may be to
2736 * switch stack to @_, and copy return values
2737 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2738 AV * const av = GvAV(PL_defgv);
2739 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2742 /* Mark is at the end of the stack. */
2744 Copy(AvARRAY(av), SP + 1, items, SV*);
2749 /* We assume first XSUB in &DB::sub is the called one. */
2751 SAVEVPTR(PL_curcop);
2752 PL_curcop = PL_curcopdb;
2755 /* Do we need to open block here? XXXX */
2757 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2759 CvXSUB(cv)(aTHX_ cv);
2761 /* Enforce some sanity in scalar context. */
2762 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2763 if (markix > PL_stack_sp - PL_stack_base)
2764 *(PL_stack_base + markix) = &PL_sv_undef;
2766 *(PL_stack_base + markix) = *PL_stack_sp;
2767 PL_stack_sp = PL_stack_base + markix;
2775 Perl_sub_crush_depth(pTHX_ CV *cv)
2777 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2780 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2782 SV* const tmpstr = sv_newmortal();
2783 gv_efullname3(tmpstr, CvGV(cv), NULL);
2784 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2793 SV* const elemsv = POPs;
2794 IV elem = SvIV(elemsv);
2795 AV *const av = MUTABLE_AV(POPs);
2796 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2797 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2798 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2799 bool preeminent = TRUE;
2802 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2803 Perl_warner(aTHX_ packWARN(WARN_MISC),
2804 "Use of reference \"%"SVf"\" as array index",
2806 if (SvTYPE(av) != SVt_PVAV)
2813 /* If we can determine whether the element exist,
2814 * Try to preserve the existenceness of a tied array
2815 * element by using EXISTS and DELETE if possible.
2816 * Fallback to FETCH and STORE otherwise. */
2817 if (SvCANEXISTDELETE(av))
2818 preeminent = av_exists(av, elem);
2821 svp = av_fetch(av, elem, lval && !defer);
2823 #ifdef PERL_MALLOC_WRAP
2824 if (SvUOK(elemsv)) {
2825 const UV uv = SvUV(elemsv);
2826 elem = uv > IV_MAX ? IV_MAX : uv;
2828 else if (SvNOK(elemsv))
2829 elem = (IV)SvNV(elemsv);
2831 static const char oom_array_extend[] =
2832 "Out of memory during array extend"; /* Duplicated in av.c */
2833 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2836 if (!svp || *svp == &PL_sv_undef) {
2839 DIE(aTHX_ PL_no_aelem, elem);
2840 lv = sv_newmortal();
2841 sv_upgrade(lv, SVt_PVLV);
2843 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2844 LvTARG(lv) = SvREFCNT_inc_simple(av);
2845 LvTARGOFF(lv) = elem;
2852 save_aelem(av, elem, svp);
2854 SAVEADELETE(av, elem);
2856 else if (PL_op->op_private & OPpDEREF) {
2857 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2861 sv = (svp ? *svp : &PL_sv_undef);
2862 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2869 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2871 PERL_ARGS_ASSERT_VIVIFY_REF;
2876 Perl_croak_no_modify(aTHX);
2877 prepare_SV_for_RV(sv);
2880 SvRV_set(sv, newSV(0));
2883 SvRV_set(sv, MUTABLE_SV(newAV()));
2886 SvRV_set(sv, MUTABLE_SV(newHV()));
2893 if (SvGMAGICAL(sv)) {
2894 /* copy the sv without magic to prevent magic from being
2896 SV* msv = sv_newmortal();
2897 sv_setsv_nomg(msv, sv);
2906 SV* const sv = TOPs;
2909 SV* const rsv = SvRV(sv);
2910 if (SvTYPE(rsv) == SVt_PVCV) {
2916 SETs(method_common(sv, NULL));
2923 SV* const sv = cSVOP_sv;
2924 U32 hash = SvSHARED_HASH(sv);
2926 XPUSHs(method_common(sv, &hash));
2931 S_method_common(pTHX_ SV* meth, U32* hashp)
2938 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2939 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2940 "package or object reference", SVfARG(meth)),
2942 : *(PL_stack_base + TOPMARK + 1);
2944 PERL_ARGS_ASSERT_METHOD_COMMON;
2947 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2952 ob = MUTABLE_SV(SvRV(sv));
2956 const char * packname = NULL;
2957 bool packname_is_utf8 = FALSE;
2959 /* this isn't a reference */
2960 if(SvOK(sv) && (packname = SvPV_nomg_const(sv, packlen))) {
2961 const HE* const he =
2962 (const HE *)hv_common_key_len(
2963 PL_stashcache, packname,
2964 packlen * -(packname_is_utf8 = !!SvUTF8(sv)), 0, NULL, 0
2968 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2975 !(iogv = gv_fetchpvn_flags(
2976 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
2978 !(ob=MUTABLE_SV(GvIO(iogv))))
2980 /* this isn't the name of a filehandle either */
2982 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
2983 ? !isIDFIRST_utf8((U8*)packname)
2984 : !isIDFIRST_L1((U8)*packname)
2987 /* diag_listed_as: Can't call method "%s" without a package or object reference */
2988 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
2990 SvOK(sv) ? "without a package or object reference"
2991 : "on an undefined value");
2993 /* assume it's a package name */
2994 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
2998 SV* const ref = newSViv(PTR2IV(stash));
2999 (void)hv_store(PL_stashcache, packname,
3000 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3004 /* it _is_ a filehandle name -- replace with a reference */
3005 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3008 /* if we got here, ob should be a reference or a glob */
3009 if (!ob || !(SvOBJECT(ob)
3010 || (SvTYPE(ob) == SVt_PVGV
3012 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3015 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3016 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3017 ? newSVpvs_flags("DOES", SVs_TEMP)
3021 stash = SvSTASH(ob);
3024 /* NOTE: stash may be null, hope hv_fetch_ent and
3025 gv_fetchmethod can cope (it seems they can) */
3027 /* shortcut for simple names */
3029 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3031 gv = MUTABLE_GV(HeVAL(he));
3032 if (isGV(gv) && GvCV(gv) &&
3033 (!GvCVGEN(gv) || GvCVGEN(gv)
3034 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3035 return MUTABLE_SV(GvCV(gv));
3039 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3040 meth, GV_AUTOLOAD | GV_CROAK);
3044 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3049 * c-indentation-style: bsd
3051 * indent-tabs-mode: nil
3054 * ex: set ts=8 sts=4 sw=4 et: