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();
1214 SvUPGRADE(rv, SVt_IV);
1215 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1216 loathe to use it here, but it seems to be the right fix. Or close.
1217 The key part appears to be that it's essential for pp_qr to return a new
1218 object (SV), which implies that there needs to be an effective way to
1219 generate a new SV from the existing SV that is pre-compiled in the
1221 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1224 cvp = &( ((struct regexp*)SvANY(SvRV(rv)))->qr_anoncv);
1225 if ((cv = *cvp) && CvCLONE(*cvp)) {
1226 *cvp = cv_clone(cv);
1231 HV *const stash = gv_stashsv(pkg, GV_ADD);
1233 (void)sv_bless(rv, stash);
1236 if (RX_EXTFLAGS(rx) & RXf_TAINTED) {
1238 SvTAINTED_on(SvRV(rv));
1247 register PMOP *pm = cPMOP;
1249 register const char *t;
1250 register const char *s;
1253 U8 r_flags = REXEC_CHECKED;
1254 const char *truebase; /* Start of string */
1255 register REGEXP *rx = PM_GETRE(pm);
1257 const I32 gimme = GIMME;
1260 const I32 oldsave = PL_savestack_ix;
1261 I32 update_minmatch = 1;
1262 I32 had_zerolen = 0;
1265 if (PL_op->op_flags & OPf_STACKED)
1267 else if (PL_op->op_private & OPpTARGET_MY)
1274 PUTBACK; /* EVAL blocks need stack_sp. */
1275 /* Skip get-magic if this is a qr// clone, because regcomp has
1277 s = ((struct regexp *)SvANY(rx))->mother_re
1278 ? SvPV_nomg_const(TARG, len)
1279 : SvPV_const(TARG, len);
1281 DIE(aTHX_ "panic: pp_match");
1283 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1284 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1287 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1289 /* PMdf_USED is set after a ?? matches once */
1292 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1294 pm->op_pmflags & PMf_USED
1298 if (gimme == G_ARRAY)
1305 /* empty pattern special-cased to use last successful pattern if possible */
1306 if (!RX_PRELEN(rx) && PL_curpm) {
1311 if (RX_MINLEN(rx) > (I32)len)
1316 /* XXXX What part of this is needed with true \G-support? */
1317 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1318 RX_OFFS(rx)[0].start = -1;
1319 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1320 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1321 if (mg && mg->mg_len >= 0) {
1322 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1323 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1324 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1325 r_flags |= REXEC_IGNOREPOS;
1326 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1327 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1330 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1331 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1332 update_minmatch = 0;
1336 /* XXX: comment out !global get safe $1 vars after a
1337 match, BUT be aware that this leads to dramatic slowdowns on
1338 /g matches against large strings. So far a solution to this problem
1339 appears to be quite tricky.
1340 Test for the unsafe vars are TODO for now. */
1341 if ( (!global && RX_NPARENS(rx))
1342 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1343 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1344 r_flags |= REXEC_COPY_STR;
1347 if (global && RX_OFFS(rx)[0].start != -1) {
1348 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1349 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1351 if (update_minmatch++)
1352 minmatch = had_zerolen;
1354 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1355 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1356 /* FIXME - can PL_bostr be made const char *? */
1357 PL_bostr = (char *)truebase;
1358 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1362 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1364 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1365 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1368 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1369 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1373 if (dynpm->op_pmflags & PMf_ONCE) {
1375 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1377 dynpm->op_pmflags |= PMf_USED;
1383 RX_MATCH_TAINTED_on(rx);
1384 TAINT_IF(RX_MATCH_TAINTED(rx));
1385 if (gimme == G_ARRAY) {
1386 const I32 nparens = RX_NPARENS(rx);
1387 I32 i = (global && !nparens) ? 1 : 0;
1389 SPAGAIN; /* EVAL blocks could move the stack. */
1390 EXTEND(SP, nparens + i);
1391 EXTEND_MORTAL(nparens + i);
1392 for (i = !i; i <= nparens; i++) {
1393 PUSHs(sv_newmortal());
1394 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1395 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1396 s = RX_OFFS(rx)[i].start + truebase;
1397 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1398 len < 0 || len > strend - s)
1399 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1400 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1401 (long) i, (long) RX_OFFS(rx)[i].start,
1402 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1403 sv_setpvn(*SP, s, len);
1404 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1409 if (dynpm->op_pmflags & PMf_CONTINUE) {
1411 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1412 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1414 #ifdef PERL_OLD_COPY_ON_WRITE
1416 sv_force_normal_flags(TARG, 0);
1418 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1419 &PL_vtbl_mglob, NULL, 0);
1421 if (RX_OFFS(rx)[0].start != -1) {
1422 mg->mg_len = RX_OFFS(rx)[0].end;
1423 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1424 mg->mg_flags |= MGf_MINMATCH;
1426 mg->mg_flags &= ~MGf_MINMATCH;
1429 had_zerolen = (RX_OFFS(rx)[0].start != -1
1430 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1431 == (UV)RX_OFFS(rx)[0].end));
1432 PUTBACK; /* EVAL blocks may use stack */
1433 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1438 LEAVE_SCOPE(oldsave);
1444 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1445 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1449 #ifdef PERL_OLD_COPY_ON_WRITE
1451 sv_force_normal_flags(TARG, 0);
1453 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1454 &PL_vtbl_mglob, NULL, 0);
1456 if (RX_OFFS(rx)[0].start != -1) {
1457 mg->mg_len = RX_OFFS(rx)[0].end;
1458 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1459 mg->mg_flags |= MGf_MINMATCH;
1461 mg->mg_flags &= ~MGf_MINMATCH;
1464 LEAVE_SCOPE(oldsave);
1468 yup: /* Confirmed by INTUIT */
1470 RX_MATCH_TAINTED_on(rx);
1471 TAINT_IF(RX_MATCH_TAINTED(rx));
1473 if (dynpm->op_pmflags & PMf_ONCE) {
1475 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1477 dynpm->op_pmflags |= PMf_USED;
1480 if (RX_MATCH_COPIED(rx))
1481 Safefree(RX_SUBBEG(rx));
1482 RX_MATCH_COPIED_off(rx);
1483 RX_SUBBEG(rx) = NULL;
1485 /* FIXME - should rx->subbeg be const char *? */
1486 RX_SUBBEG(rx) = (char *) truebase;
1487 RX_OFFS(rx)[0].start = s - truebase;
1488 if (RX_MATCH_UTF8(rx)) {
1489 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1490 RX_OFFS(rx)[0].end = t - truebase;
1493 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1495 RX_SUBLEN(rx) = strend - truebase;
1498 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1500 #ifdef PERL_OLD_COPY_ON_WRITE
1501 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1503 PerlIO_printf(Perl_debug_log,
1504 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1505 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1508 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1510 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1511 assert (SvPOKp(RX_SAVED_COPY(rx)));
1516 RX_SUBBEG(rx) = savepvn(t, strend - t);
1517 #ifdef PERL_OLD_COPY_ON_WRITE
1518 RX_SAVED_COPY(rx) = NULL;
1521 RX_SUBLEN(rx) = strend - t;
1522 RX_MATCH_COPIED_on(rx);
1523 off = RX_OFFS(rx)[0].start = s - t;
1524 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1526 else { /* startp/endp are used by @- @+. */
1527 RX_OFFS(rx)[0].start = s - truebase;
1528 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1530 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1531 assert(!RX_NPARENS(rx));
1532 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1533 LEAVE_SCOPE(oldsave);
1538 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1539 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1540 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1545 LEAVE_SCOPE(oldsave);
1546 if (gimme == G_ARRAY)
1552 Perl_do_readline(pTHX)
1554 dVAR; dSP; dTARGETSTACKED;
1559 register IO * const io = GvIO(PL_last_in_gv);
1560 register const I32 type = PL_op->op_type;
1561 const I32 gimme = GIMME_V;
1564 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1566 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1567 if (gimme == G_SCALAR) {
1569 SvSetSV_nosteal(TARG, TOPs);
1579 if (IoFLAGS(io) & IOf_ARGV) {
1580 if (IoFLAGS(io) & IOf_START) {
1582 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1583 IoFLAGS(io) &= ~IOf_START;
1584 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1585 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1586 SvSETMAGIC(GvSV(PL_last_in_gv));
1591 fp = nextargv(PL_last_in_gv);
1592 if (!fp) { /* Note: fp != IoIFP(io) */
1593 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1596 else if (type == OP_GLOB)
1597 fp = Perl_start_glob(aTHX_ POPs, io);
1599 else if (type == OP_GLOB)
1601 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1602 report_wrongway_fh(PL_last_in_gv, '>');
1606 if ((!io || !(IoFLAGS(io) & IOf_START))
1607 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1609 if (type == OP_GLOB)
1610 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1611 "glob failed (can't start child: %s)",
1614 report_evil_fh(PL_last_in_gv);
1616 if (gimme == G_SCALAR) {
1617 /* undef TARG, and push that undefined value */
1618 if (type != OP_RCATLINE) {
1619 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1627 if (gimme == G_SCALAR) {
1629 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1632 if (type == OP_RCATLINE)
1633 SvPV_force_nomg_nolen(sv);
1637 else if (isGV_with_GP(sv)) {
1638 SvPV_force_nomg_nolen(sv);
1640 SvUPGRADE(sv, SVt_PV);
1641 tmplen = SvLEN(sv); /* remember if already alloced */
1642 if (!tmplen && !SvREADONLY(sv)) {
1643 /* try short-buffering it. Please update t/op/readline.t
1644 * if you change the growth length.
1649 if (type == OP_RCATLINE && SvOK(sv)) {
1651 SvPV_force_nomg_nolen(sv);
1657 sv = sv_2mortal(newSV(80));
1661 /* This should not be marked tainted if the fp is marked clean */
1662 #define MAYBE_TAINT_LINE(io, sv) \
1663 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1668 /* delay EOF state for a snarfed empty file */
1669 #define SNARF_EOF(gimme,rs,io,sv) \
1670 (gimme != G_SCALAR || SvCUR(sv) \
1671 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1675 if (!sv_gets(sv, fp, offset)
1677 || SNARF_EOF(gimme, PL_rs, io, sv)
1678 || PerlIO_error(fp)))
1680 PerlIO_clearerr(fp);
1681 if (IoFLAGS(io) & IOf_ARGV) {
1682 fp = nextargv(PL_last_in_gv);
1685 (void)do_close(PL_last_in_gv, FALSE);
1687 else if (type == OP_GLOB) {
1688 if (!do_close(PL_last_in_gv, FALSE)) {
1689 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1690 "glob failed (child exited with status %d%s)",
1691 (int)(STATUS_CURRENT >> 8),
1692 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1695 if (gimme == G_SCALAR) {
1696 if (type != OP_RCATLINE) {
1697 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1703 MAYBE_TAINT_LINE(io, sv);
1706 MAYBE_TAINT_LINE(io, sv);
1708 IoFLAGS(io) |= IOf_NOLINE;
1712 if (type == OP_GLOB) {
1715 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1716 char * const tmps = SvEND(sv) - 1;
1717 if (*tmps == *SvPVX_const(PL_rs)) {
1719 SvCUR_set(sv, SvCUR(sv) - 1);
1722 for (t1 = SvPVX_const(sv); *t1; t1++)
1723 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1724 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1726 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1727 (void)POPs; /* Unmatched wildcard? Chuck it... */
1730 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1731 if (ckWARN(WARN_UTF8)) {
1732 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1733 const STRLEN len = SvCUR(sv) - offset;
1736 if (!is_utf8_string_loc(s, len, &f))
1737 /* Emulate :encoding(utf8) warning in the same case. */
1738 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1739 "utf8 \"\\x%02X\" does not map to Unicode",
1740 f < (U8*)SvEND(sv) ? *f : 0);
1743 if (gimme == G_ARRAY) {
1744 if (SvLEN(sv) - SvCUR(sv) > 20) {
1745 SvPV_shrink_to_cur(sv);
1747 sv = sv_2mortal(newSV(80));
1750 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1751 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1752 const STRLEN new_len
1753 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1754 SvPV_renew(sv, new_len);
1765 SV * const keysv = POPs;
1766 HV * const hv = MUTABLE_HV(POPs);
1767 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1768 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1770 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1771 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1772 bool preeminent = TRUE;
1774 if (SvTYPE(hv) != SVt_PVHV)
1781 /* If we can determine whether the element exist,
1782 * Try to preserve the existenceness of a tied hash
1783 * element by using EXISTS and DELETE if possible.
1784 * Fallback to FETCH and STORE otherwise. */
1785 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1786 preeminent = hv_exists_ent(hv, keysv, 0);
1789 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1790 svp = he ? &HeVAL(he) : NULL;
1792 if (!svp || !*svp || *svp == &PL_sv_undef) {
1796 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1798 lv = sv_newmortal();
1799 sv_upgrade(lv, SVt_PVLV);
1801 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1802 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1803 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1809 if (HvNAME_get(hv) && isGV(*svp))
1810 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1811 else if (preeminent)
1812 save_helem_flags(hv, keysv, svp,
1813 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1815 SAVEHDELETE(hv, keysv);
1817 else if (PL_op->op_private & OPpDEREF) {
1818 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1822 sv = (svp && *svp ? *svp : &PL_sv_undef);
1823 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1824 * was to make C<local $tied{foo} = $tied{foo}> possible.
1825 * However, it seems no longer to be needed for that purpose, and
1826 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1827 * would loop endlessly since the pos magic is getting set on the
1828 * mortal copy and lost. However, the copy has the effect of
1829 * triggering the get magic, and losing it altogether made things like
1830 * c<$tied{foo};> in void context no longer do get magic, which some
1831 * code relied on. Also, delayed triggering of magic on @+ and friends
1832 * meant the original regex may be out of scope by now. So as a
1833 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1834 * being called too many times). */
1835 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1844 register PERL_CONTEXT *cx;
1847 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1848 bool av_is_stack = FALSE;
1851 cx = &cxstack[cxstack_ix];
1852 if (!CxTYPE_is_LOOP(cx))
1853 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1855 itersvp = CxITERVAR(cx);
1856 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1857 /* string increment */
1858 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1859 SV *end = cx->blk_loop.state_u.lazysv.end;
1860 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1861 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1863 const char *max = SvPV_const(end, maxlen);
1864 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1865 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1866 /* safe to reuse old SV */
1867 sv_setsv(*itersvp, cur);
1871 /* we need a fresh SV every time so that loop body sees a
1872 * completely new SV for closures/references to work as
1875 *itersvp = newSVsv(cur);
1876 SvREFCNT_dec(oldsv);
1878 if (strEQ(SvPVX_const(cur), max))
1879 sv_setiv(cur, 0); /* terminate next time */
1886 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1887 /* integer increment */
1888 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1891 /* don't risk potential race */
1892 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1893 /* safe to reuse old SV */
1894 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1898 /* we need a fresh SV every time so that loop body sees a
1899 * completely new SV for closures/references to work as they
1902 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
1903 SvREFCNT_dec(oldsv);
1906 /* Handle end of range at IV_MAX */
1907 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
1908 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
1910 cx->blk_loop.state_u.lazyiv.cur++;
1911 cx->blk_loop.state_u.lazyiv.end++;
1918 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1919 av = cx->blk_loop.state_u.ary.ary;
1924 if (PL_op->op_private & OPpITER_REVERSED) {
1925 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1926 ? cx->blk_loop.resetsp + 1 : 0))
1929 if (SvMAGICAL(av) || AvREIFY(av)) {
1930 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1931 sv = svp ? *svp : NULL;
1934 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1938 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1942 if (SvMAGICAL(av) || AvREIFY(av)) {
1943 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1944 sv = svp ? *svp : NULL;
1947 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1951 if (sv && SvIS_FREED(sv)) {
1953 Perl_croak(aTHX_ "Use of freed value in iteration");
1958 SvREFCNT_inc_simple_void_NN(sv);
1962 if (!av_is_stack && sv == &PL_sv_undef) {
1963 SV *lv = newSV_type(SVt_PVLV);
1965 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1966 LvTARG(lv) = SvREFCNT_inc_simple(av);
1967 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1968 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1974 SvREFCNT_dec(oldsv);
1980 A description of how taint works in pattern matching and substitution.
1982 While the pattern is being assembled/concatenated and then compiled,
1983 PL_tainted will get set if any component of the pattern is tainted, e.g.
1984 /.*$tainted/. At the end of pattern compilation, the RXf_TAINTED flag
1985 is set on the pattern if PL_tainted is set.
1987 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1988 the pattern is marked as tainted. This means that subsequent usage, such
1989 as /x$r/, will set PL_tainted, and thus RXf_TAINTED, on the new pattern too.
1991 During execution of a pattern, locale-variant ops such as ALNUML set the
1992 local flag RF_tainted. At the end of execution, the engine sets the
1993 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
1996 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
1997 of $1 et al to indicate whether the returned value should be tainted.
1998 It is the responsibility of the caller of the pattern (i.e. pp_match,
1999 pp_subst etc) to set this flag for any other circumstances where $1 needs
2002 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2004 There are three possible sources of taint
2006 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2007 * the replacement string (or expression under /e)
2009 There are four destinations of taint and they are affected by the sources
2010 according to the rules below:
2012 * the return value (not including /r):
2013 tainted by the source string and pattern, but only for the
2014 number-of-iterations case; boolean returns aren't tainted;
2015 * the modified string (or modified copy under /r):
2016 tainted by the source string, pattern, and replacement strings;
2018 tainted by the pattern, and under 'use re "taint"', by the source
2020 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2021 should always be unset before executing subsequent code.
2023 The overall action of pp_subst is:
2025 * at the start, set bits in rxtainted indicating the taint status of
2026 the various sources.
2028 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2029 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2030 pattern has subsequently become tainted via locale ops.
2032 * If control is being passed to pp_substcont to execute a /e block,
2033 save rxtainted in the CXt_SUBST block, for future use by
2036 * Whenever control is being returned to perl code (either by falling
2037 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2038 use the flag bits in rxtainted to make all the appropriate types of
2039 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2040 et al will appear tainted.
2042 pp_match is just a simpler version of the above.
2049 register PMOP *pm = cPMOP;
2061 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2062 See "how taint works" above */
2065 register REGEXP *rx = PM_GETRE(pm);
2067 int force_on_match = 0;
2068 const I32 oldsave = PL_savestack_ix;
2070 bool doutf8 = FALSE;
2071 #ifdef PERL_OLD_COPY_ON_WRITE
2075 /* known replacement string? */
2076 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2080 if (PL_op->op_flags & OPf_STACKED)
2082 else if (PL_op->op_private & OPpTARGET_MY)
2089 #ifdef PERL_OLD_COPY_ON_WRITE
2090 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2091 because they make integers such as 256 "false". */
2092 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2095 sv_force_normal_flags(TARG,0);
2097 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2098 #ifdef PERL_OLD_COPY_ON_WRITE
2101 && (SvREADONLY(TARG)
2102 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2103 || SvTYPE(TARG) > SVt_PVLV)
2104 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2105 Perl_croak_no_modify(aTHX);
2109 s = SvPV_mutable(TARG, len);
2110 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2113 /* only replace once? */
2114 once = !(rpm->op_pmflags & PMf_GLOBAL);
2116 /* See "how taint works" above */
2119 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2120 | ((RX_EXTFLAGS(rx) & RXf_TAINTED) ? SUBST_TAINT_PAT : 0)
2121 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2122 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2123 ? SUBST_TAINT_BOOLRET : 0));
2127 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2131 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2134 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2135 maxiters = 2 * slen + 10; /* We can match twice at each
2136 position, once with zero-length,
2137 second time with non-zero. */
2139 if (!RX_PRELEN(rx) && PL_curpm) {
2143 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2144 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2145 ? REXEC_COPY_STR : 0;
2148 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2150 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2154 /* How to do it in subst? */
2155 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2157 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2162 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2163 r_flags | REXEC_CHECKED))
2167 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2168 LEAVE_SCOPE(oldsave);
2172 /* known replacement string? */
2174 if (SvTAINTED(dstr))
2175 rxtainted |= SUBST_TAINT_REPL;
2177 /* Upgrade the source if the replacement is utf8 but the source is not,
2178 * but only if it matched; see
2179 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2181 if (DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2182 char * const orig_pvx = SvPVX(TARG);
2183 const STRLEN new_len = sv_utf8_upgrade_nomg(TARG);
2185 /* If the lengths are the same, the pattern contains only
2186 * invariants, can keep going; otherwise, various internal markers
2187 * could be off, so redo */
2188 if (new_len != len || orig_pvx != SvPVX(TARG)) {
2193 /* replacement needing upgrading? */
2194 if (DO_UTF8(TARG) && !doutf8) {
2195 nsv = sv_newmortal();
2198 sv_recode_to_utf8(nsv, PL_encoding);
2200 sv_utf8_upgrade(nsv);
2201 c = SvPV_const(nsv, clen);
2205 c = SvPV_const(dstr, clen);
2206 doutf8 = DO_UTF8(dstr);
2214 /* can do inplace substitution? */
2216 #ifdef PERL_OLD_COPY_ON_WRITE
2219 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2220 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2221 && (!doutf8 || SvUTF8(TARG))
2222 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2225 #ifdef PERL_OLD_COPY_ON_WRITE
2226 if (SvIsCOW(TARG)) {
2227 assert (!force_on_match);
2231 if (force_on_match) {
2233 s = SvPV_force(TARG, len);
2239 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2240 rxtainted |= SUBST_TAINT_PAT;
2241 m = orig + RX_OFFS(rx)[0].start;
2242 d = orig + RX_OFFS(rx)[0].end;
2244 if (m - s > strend - d) { /* faster to shorten from end */
2246 Copy(c, m, clen, char);
2251 Move(d, m, i, char);
2255 SvCUR_set(TARG, m - s);
2257 else if ((i = m - s)) { /* faster from front */
2260 Move(s, d - i, i, char);
2263 Copy(c, m, clen, char);
2268 Copy(c, d, clen, char);
2278 if (iters++ > maxiters)
2279 DIE(aTHX_ "Substitution loop");
2280 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2281 rxtainted |= SUBST_TAINT_PAT;
2282 m = RX_OFFS(rx)[0].start + orig;
2285 Move(s, d, i, char);
2289 Copy(c, d, clen, char);
2292 s = RX_OFFS(rx)[0].end + orig;
2293 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2295 /* don't match same null twice */
2296 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2299 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2300 Move(s, d, i+1, char); /* include the NUL */
2307 if (force_on_match) {
2309 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2310 /* I feel that it should be possible to avoid this mortal copy
2311 given that the code below copies into a new destination.
2312 However, I suspect it isn't worth the complexity of
2313 unravelling the C<goto force_it> for the small number of
2314 cases where it would be viable to drop into the copy code. */
2315 TARG = sv_2mortal(newSVsv(TARG));
2317 s = SvPV_force(TARG, len);
2320 #ifdef PERL_OLD_COPY_ON_WRITE
2323 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2324 rxtainted |= SUBST_TAINT_PAT;
2325 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2328 register PERL_CONTEXT *cx;
2330 /* note that a whole bunch of local vars are saved here for
2331 * use by pp_substcont: here's a list of them in case you're
2332 * searching for places in this sub that uses a particular var:
2333 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2334 * s m strend rx once */
2336 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2338 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2340 if (iters++ > maxiters)
2341 DIE(aTHX_ "Substitution loop");
2342 if (RX_MATCH_TAINTED(rx))
2343 rxtainted |= SUBST_TAINT_PAT;
2344 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2347 orig = RX_SUBBEG(rx);
2349 strend = s + (strend - m);
2351 m = RX_OFFS(rx)[0].start + orig;
2352 if (doutf8 && !SvUTF8(dstr))
2353 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2355 sv_catpvn(dstr, s, m-s);
2356 s = RX_OFFS(rx)[0].end + orig;
2358 sv_catpvn(dstr, c, clen);
2361 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2362 TARG, NULL, r_flags));
2363 if (doutf8 && !DO_UTF8(TARG))
2364 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2366 sv_catpvn(dstr, s, strend - s);
2368 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2369 /* From here on down we're using the copy, and leaving the original
2375 #ifdef PERL_OLD_COPY_ON_WRITE
2376 /* The match may make the string COW. If so, brilliant, because
2377 that's just saved us one malloc, copy and free - the regexp has
2378 donated the old buffer, and we malloc an entirely new one, rather
2379 than the regexp malloc()ing a buffer and copying our original,
2380 only for us to throw it away here during the substitution. */
2381 if (SvIsCOW(TARG)) {
2382 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2388 SvPV_set(TARG, SvPVX(dstr));
2389 SvCUR_set(TARG, SvCUR(dstr));
2390 SvLEN_set(TARG, SvLEN(dstr));
2391 doutf8 |= DO_UTF8(dstr);
2392 SvPV_set(dstr, NULL);
2399 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2400 (void)SvPOK_only_UTF8(TARG);
2405 /* See "how taint works" above */
2407 if ((rxtainted & SUBST_TAINT_PAT) ||
2408 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2409 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2411 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2413 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2414 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2416 SvTAINTED_on(TOPs); /* taint return value */
2418 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2420 /* needed for mg_set below */
2422 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
2425 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2427 LEAVE_SCOPE(oldsave);
2436 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2437 ++*PL_markstack_ptr;
2439 LEAVE_with_name("grep_item"); /* exit inner scope */
2442 if (PL_stack_base + *PL_markstack_ptr > SP) {
2444 const I32 gimme = GIMME_V;
2446 LEAVE_with_name("grep"); /* exit outer scope */
2447 (void)POPMARK; /* pop src */
2448 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2449 (void)POPMARK; /* pop dst */
2450 SP = PL_stack_base + POPMARK; /* pop original mark */
2451 if (gimme == G_SCALAR) {
2452 if (PL_op->op_private & OPpGREP_LEX) {
2453 SV* const sv = sv_newmortal();
2454 sv_setiv(sv, items);
2462 else if (gimme == G_ARRAY)
2469 ENTER_with_name("grep_item"); /* enter inner scope */
2472 src = PL_stack_base[*PL_markstack_ptr];
2474 if (PL_op->op_private & OPpGREP_LEX)
2475 PAD_SVl(PL_op->op_targ) = src;
2479 RETURNOP(cLOGOP->op_other);
2490 register PERL_CONTEXT *cx;
2493 if (CxMULTICALL(&cxstack[cxstack_ix]))
2497 cxstack_ix++; /* temporarily protect top context */
2500 if (gimme == G_SCALAR) {
2503 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2504 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2505 && !SvMAGICAL(TOPs)) {
2506 *MARK = SvREFCNT_inc(TOPs);
2511 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2513 *MARK = sv_mortalcopy(sv);
2517 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2518 && !SvMAGICAL(TOPs)) {
2522 *MARK = sv_mortalcopy(TOPs);
2526 *MARK = &PL_sv_undef;
2530 else if (gimme == G_ARRAY) {
2531 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2532 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2533 || SvMAGICAL(*MARK)) {
2534 *MARK = sv_mortalcopy(*MARK);
2535 TAINT_NOT; /* Each item is independent */
2543 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2544 PL_curpm = newpm; /* ... and pop $1 et al */
2547 return cx->blk_sub.retop;
2555 register PERL_CONTEXT *cx;
2557 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2560 DIE(aTHX_ "Not a CODE reference");
2561 switch (SvTYPE(sv)) {
2562 /* This is overwhelming the most common case: */
2565 if (!(cv = GvCVu((const GV *)sv))) {
2567 cv = sv_2cv(sv, &stash, &gv, 0);
2576 if(isGV_with_GP(sv)) goto we_have_a_glob;
2579 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2581 SP = PL_stack_base + POPMARK;
2589 sv = amagic_deref_call(sv, to_cv_amg);
2590 /* Don't SPAGAIN here. */
2596 sym = SvPV_nomg_const(sv, len);
2598 DIE(aTHX_ PL_no_usym, "a subroutine");
2599 if (PL_op->op_private & HINT_STRICT_REFS)
2600 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2601 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2604 cv = MUTABLE_CV(SvRV(sv));
2605 if (SvTYPE(cv) == SVt_PVCV)
2610 DIE(aTHX_ "Not a CODE reference");
2611 /* This is the second most common case: */
2613 cv = MUTABLE_CV(sv);
2621 if (CvCLONE(cv) && ! CvCLONED(cv))
2622 DIE(aTHX_ "Closure prototype called");
2623 if (!CvROOT(cv) && !CvXSUB(cv)) {
2627 /* anonymous or undef'd function leaves us no recourse */
2628 if (CvANON(cv) || !(gv = CvGV(cv)))
2629 DIE(aTHX_ "Undefined subroutine called");
2631 /* autoloaded stub? */
2632 if (cv != GvCV(gv)) {
2635 /* should call AUTOLOAD now? */
2638 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2639 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2645 sub_name = sv_newmortal();
2646 gv_efullname3(sub_name, gv, NULL);
2647 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2651 DIE(aTHX_ "Not a CODE reference");
2656 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2657 Perl_get_db_sub(aTHX_ &sv, cv);
2659 PL_curcopdb = PL_curcop;
2661 /* check for lsub that handles lvalue subroutines */
2662 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2663 /* if lsub not found then fall back to DB::sub */
2664 if (!cv) cv = GvCV(PL_DBsub);
2666 cv = GvCV(PL_DBsub);
2669 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2670 DIE(aTHX_ "No DB::sub routine defined");
2673 if (!(CvISXSUB(cv))) {
2674 /* This path taken at least 75% of the time */
2676 register I32 items = SP - MARK;
2677 AV* const padlist = CvPADLIST(cv);
2678 PUSHBLOCK(cx, CXt_SUB, MARK);
2680 cx->blk_sub.retop = PL_op->op_next;
2682 if (CvDEPTH(cv) >= 2) {
2683 PERL_STACK_OVERFLOW_CHECK();
2684 pad_push(padlist, CvDEPTH(cv));
2687 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2689 AV *const av = MUTABLE_AV(PAD_SVl(0));
2691 /* @_ is normally not REAL--this should only ever
2692 * happen when DB::sub() calls things that modify @_ */
2697 cx->blk_sub.savearray = GvAV(PL_defgv);
2698 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2699 CX_CURPAD_SAVE(cx->blk_sub);
2700 cx->blk_sub.argarray = av;
2703 if (items > AvMAX(av) + 1) {
2704 SV **ary = AvALLOC(av);
2705 if (AvARRAY(av) != ary) {
2706 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2709 if (items > AvMAX(av) + 1) {
2710 AvMAX(av) = items - 1;
2711 Renew(ary,items,SV*);
2716 Copy(MARK,AvARRAY(av),items,SV*);
2717 AvFILLp(av) = items - 1;
2725 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2727 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2728 /* warning must come *after* we fully set up the context
2729 * stuff so that __WARN__ handlers can safely dounwind()
2732 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2733 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2734 sub_crush_depth(cv);
2735 RETURNOP(CvSTART(cv));
2738 I32 markix = TOPMARK;
2743 /* Need to copy @_ to stack. Alternative may be to
2744 * switch stack to @_, and copy return values
2745 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2746 AV * const av = GvAV(PL_defgv);
2747 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2750 /* Mark is at the end of the stack. */
2752 Copy(AvARRAY(av), SP + 1, items, SV*);
2757 /* We assume first XSUB in &DB::sub is the called one. */
2759 SAVEVPTR(PL_curcop);
2760 PL_curcop = PL_curcopdb;
2763 /* Do we need to open block here? XXXX */
2765 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2767 CvXSUB(cv)(aTHX_ cv);
2769 /* Enforce some sanity in scalar context. */
2770 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2771 if (markix > PL_stack_sp - PL_stack_base)
2772 *(PL_stack_base + markix) = &PL_sv_undef;
2774 *(PL_stack_base + markix) = *PL_stack_sp;
2775 PL_stack_sp = PL_stack_base + markix;
2783 Perl_sub_crush_depth(pTHX_ CV *cv)
2785 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2788 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2790 SV* const tmpstr = sv_newmortal();
2791 gv_efullname3(tmpstr, CvGV(cv), NULL);
2792 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2801 SV* const elemsv = POPs;
2802 IV elem = SvIV(elemsv);
2803 AV *const av = MUTABLE_AV(POPs);
2804 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2805 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2806 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2807 bool preeminent = TRUE;
2810 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2811 Perl_warner(aTHX_ packWARN(WARN_MISC),
2812 "Use of reference \"%"SVf"\" as array index",
2814 if (SvTYPE(av) != SVt_PVAV)
2821 /* If we can determine whether the element exist,
2822 * Try to preserve the existenceness of a tied array
2823 * element by using EXISTS and DELETE if possible.
2824 * Fallback to FETCH and STORE otherwise. */
2825 if (SvCANEXISTDELETE(av))
2826 preeminent = av_exists(av, elem);
2829 svp = av_fetch(av, elem, lval && !defer);
2831 #ifdef PERL_MALLOC_WRAP
2832 if (SvUOK(elemsv)) {
2833 const UV uv = SvUV(elemsv);
2834 elem = uv > IV_MAX ? IV_MAX : uv;
2836 else if (SvNOK(elemsv))
2837 elem = (IV)SvNV(elemsv);
2839 static const char oom_array_extend[] =
2840 "Out of memory during array extend"; /* Duplicated in av.c */
2841 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2844 if (!svp || *svp == &PL_sv_undef) {
2847 DIE(aTHX_ PL_no_aelem, elem);
2848 lv = sv_newmortal();
2849 sv_upgrade(lv, SVt_PVLV);
2851 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2852 LvTARG(lv) = SvREFCNT_inc_simple(av);
2853 LvTARGOFF(lv) = elem;
2860 save_aelem(av, elem, svp);
2862 SAVEADELETE(av, elem);
2864 else if (PL_op->op_private & OPpDEREF) {
2865 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2869 sv = (svp ? *svp : &PL_sv_undef);
2870 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2877 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2879 PERL_ARGS_ASSERT_VIVIFY_REF;
2884 Perl_croak_no_modify(aTHX);
2885 prepare_SV_for_RV(sv);
2888 SvRV_set(sv, newSV(0));
2891 SvRV_set(sv, MUTABLE_SV(newAV()));
2894 SvRV_set(sv, MUTABLE_SV(newHV()));
2901 if (SvGMAGICAL(sv)) {
2902 /* copy the sv without magic to prevent magic from being
2904 SV* msv = sv_newmortal();
2905 sv_setsv_nomg(msv, sv);
2914 SV* const sv = TOPs;
2917 SV* const rsv = SvRV(sv);
2918 if (SvTYPE(rsv) == SVt_PVCV) {
2924 SETs(method_common(sv, NULL));
2931 SV* const sv = cSVOP_sv;
2932 U32 hash = SvSHARED_HASH(sv);
2934 XPUSHs(method_common(sv, &hash));
2939 S_method_common(pTHX_ SV* meth, U32* hashp)
2946 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2947 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2948 "package or object reference", SVfARG(meth)),
2950 : *(PL_stack_base + TOPMARK + 1);
2952 PERL_ARGS_ASSERT_METHOD_COMMON;
2955 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2960 ob = MUTABLE_SV(SvRV(sv));
2964 const char * packname = NULL;
2965 bool packname_is_utf8 = FALSE;
2967 /* this isn't a reference */
2968 if(SvOK(sv) && (packname = SvPV_nomg_const(sv, packlen))) {
2969 const HE* const he =
2970 (const HE *)hv_common_key_len(
2971 PL_stashcache, packname,
2972 packlen * -(packname_is_utf8 = !!SvUTF8(sv)), 0, NULL, 0
2976 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2983 !(iogv = gv_fetchpvn_flags(
2984 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
2986 !(ob=MUTABLE_SV(GvIO(iogv))))
2988 /* this isn't the name of a filehandle either */
2990 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
2991 ? !isIDFIRST_utf8((U8*)packname)
2992 : !isIDFIRST_L1((U8)*packname)
2995 /* diag_listed_as: Can't call method "%s" without a package or object reference */
2996 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
2998 SvOK(sv) ? "without a package or object reference"
2999 : "on an undefined value");
3001 /* assume it's a package name */
3002 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3006 SV* const ref = newSViv(PTR2IV(stash));
3007 (void)hv_store(PL_stashcache, packname,
3008 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3012 /* it _is_ a filehandle name -- replace with a reference */
3013 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3016 /* if we got here, ob should be a reference or a glob */
3017 if (!ob || !(SvOBJECT(ob)
3018 || (SvTYPE(ob) == SVt_PVGV
3020 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3023 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3024 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3025 ? newSVpvs_flags("DOES", SVs_TEMP)
3029 stash = SvSTASH(ob);
3032 /* NOTE: stash may be null, hope hv_fetch_ent and
3033 gv_fetchmethod can cope (it seems they can) */
3035 /* shortcut for simple names */
3037 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3039 gv = MUTABLE_GV(HeVAL(he));
3040 if (isGV(gv) && GvCV(gv) &&
3041 (!GvCVGEN(gv) || GvCVGEN(gv)
3042 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3043 return MUTABLE_SV(GvCV(gv));
3047 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3048 meth, GV_AUTOLOAD | GV_CROAK);
3052 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3057 * c-indentation-style: bsd
3059 * indent-tabs-mode: nil
3062 * ex: set ts=8 sts=4 sw=4 et: