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
1297 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1300 if (gimme == G_ARRAY)
1307 /* empty pattern special-cased to use last successful pattern if possible */
1308 if (!RX_PRELEN(rx) && PL_curpm) {
1313 if (RX_MINLEN(rx) > (I32)len) {
1314 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1320 /* XXXX What part of this is needed with true \G-support? */
1321 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1322 RX_OFFS(rx)[0].start = -1;
1323 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1324 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1325 if (mg && mg->mg_len >= 0) {
1326 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1327 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1328 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1329 r_flags |= REXEC_IGNOREPOS;
1330 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1331 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1334 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1335 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1336 update_minmatch = 0;
1340 /* XXX: comment out !global get safe $1 vars after a
1341 match, BUT be aware that this leads to dramatic slowdowns on
1342 /g matches against large strings. So far a solution to this problem
1343 appears to be quite tricky.
1344 Test for the unsafe vars are TODO for now. */
1345 if ( (!global && RX_NPARENS(rx))
1346 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1347 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1348 r_flags |= REXEC_COPY_STR;
1351 if (global && RX_OFFS(rx)[0].start != -1) {
1352 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1353 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1354 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1357 if (update_minmatch++)
1358 minmatch = had_zerolen;
1360 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1361 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1362 /* FIXME - can PL_bostr be made const char *? */
1363 PL_bostr = (char *)truebase;
1364 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1368 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1370 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1371 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1374 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1375 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1379 if (dynpm->op_pmflags & PMf_ONCE) {
1381 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1383 dynpm->op_pmflags |= PMf_USED;
1389 RX_MATCH_TAINTED_on(rx);
1390 TAINT_IF(RX_MATCH_TAINTED(rx));
1391 if (gimme == G_ARRAY) {
1392 const I32 nparens = RX_NPARENS(rx);
1393 I32 i = (global && !nparens) ? 1 : 0;
1395 SPAGAIN; /* EVAL blocks could move the stack. */
1396 EXTEND(SP, nparens + i);
1397 EXTEND_MORTAL(nparens + i);
1398 for (i = !i; i <= nparens; i++) {
1399 PUSHs(sv_newmortal());
1400 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1401 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1402 s = RX_OFFS(rx)[i].start + truebase;
1403 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1404 len < 0 || len > strend - s)
1405 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1406 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1407 (long) i, (long) RX_OFFS(rx)[i].start,
1408 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1409 sv_setpvn(*SP, s, len);
1410 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1415 if (dynpm->op_pmflags & PMf_CONTINUE) {
1417 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1418 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1420 #ifdef PERL_OLD_COPY_ON_WRITE
1422 sv_force_normal_flags(TARG, 0);
1424 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1425 &PL_vtbl_mglob, NULL, 0);
1427 if (RX_OFFS(rx)[0].start != -1) {
1428 mg->mg_len = RX_OFFS(rx)[0].end;
1429 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1430 mg->mg_flags |= MGf_MINMATCH;
1432 mg->mg_flags &= ~MGf_MINMATCH;
1435 had_zerolen = (RX_OFFS(rx)[0].start != -1
1436 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1437 == (UV)RX_OFFS(rx)[0].end));
1438 PUTBACK; /* EVAL blocks may use stack */
1439 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1444 LEAVE_SCOPE(oldsave);
1450 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1451 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1455 #ifdef PERL_OLD_COPY_ON_WRITE
1457 sv_force_normal_flags(TARG, 0);
1459 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1460 &PL_vtbl_mglob, NULL, 0);
1462 if (RX_OFFS(rx)[0].start != -1) {
1463 mg->mg_len = RX_OFFS(rx)[0].end;
1464 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1465 mg->mg_flags |= MGf_MINMATCH;
1467 mg->mg_flags &= ~MGf_MINMATCH;
1470 LEAVE_SCOPE(oldsave);
1474 yup: /* Confirmed by INTUIT */
1476 RX_MATCH_TAINTED_on(rx);
1477 TAINT_IF(RX_MATCH_TAINTED(rx));
1479 if (dynpm->op_pmflags & PMf_ONCE) {
1481 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1483 dynpm->op_pmflags |= PMf_USED;
1486 if (RX_MATCH_COPIED(rx))
1487 Safefree(RX_SUBBEG(rx));
1488 RX_MATCH_COPIED_off(rx);
1489 RX_SUBBEG(rx) = NULL;
1491 /* FIXME - should rx->subbeg be const char *? */
1492 RX_SUBBEG(rx) = (char *) truebase;
1493 RX_OFFS(rx)[0].start = s - truebase;
1494 if (RX_MATCH_UTF8(rx)) {
1495 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1496 RX_OFFS(rx)[0].end = t - truebase;
1499 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1501 RX_SUBLEN(rx) = strend - truebase;
1504 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1506 #ifdef PERL_OLD_COPY_ON_WRITE
1507 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1509 PerlIO_printf(Perl_debug_log,
1510 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1511 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1514 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1516 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1517 assert (SvPOKp(RX_SAVED_COPY(rx)));
1522 RX_SUBBEG(rx) = savepvn(t, strend - t);
1523 #ifdef PERL_OLD_COPY_ON_WRITE
1524 RX_SAVED_COPY(rx) = NULL;
1527 RX_SUBLEN(rx) = strend - t;
1528 RX_MATCH_COPIED_on(rx);
1529 off = RX_OFFS(rx)[0].start = s - t;
1530 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1532 else { /* startp/endp are used by @- @+. */
1533 RX_OFFS(rx)[0].start = s - truebase;
1534 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1536 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1537 assert(!RX_NPARENS(rx));
1538 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1539 LEAVE_SCOPE(oldsave);
1544 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1545 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1546 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1551 LEAVE_SCOPE(oldsave);
1552 if (gimme == G_ARRAY)
1558 Perl_do_readline(pTHX)
1560 dVAR; dSP; dTARGETSTACKED;
1565 register IO * const io = GvIO(PL_last_in_gv);
1566 register const I32 type = PL_op->op_type;
1567 const I32 gimme = GIMME_V;
1570 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1572 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1573 if (gimme == G_SCALAR) {
1575 SvSetSV_nosteal(TARG, TOPs);
1585 if (IoFLAGS(io) & IOf_ARGV) {
1586 if (IoFLAGS(io) & IOf_START) {
1588 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1589 IoFLAGS(io) &= ~IOf_START;
1590 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1591 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1592 SvSETMAGIC(GvSV(PL_last_in_gv));
1597 fp = nextargv(PL_last_in_gv);
1598 if (!fp) { /* Note: fp != IoIFP(io) */
1599 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1602 else if (type == OP_GLOB)
1603 fp = Perl_start_glob(aTHX_ POPs, io);
1605 else if (type == OP_GLOB)
1607 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1608 report_wrongway_fh(PL_last_in_gv, '>');
1612 if ((!io || !(IoFLAGS(io) & IOf_START))
1613 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1615 if (type == OP_GLOB)
1616 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1617 "glob failed (can't start child: %s)",
1620 report_evil_fh(PL_last_in_gv);
1622 if (gimme == G_SCALAR) {
1623 /* undef TARG, and push that undefined value */
1624 if (type != OP_RCATLINE) {
1625 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1633 if (gimme == G_SCALAR) {
1635 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1638 if (type == OP_RCATLINE)
1639 SvPV_force_nomg_nolen(sv);
1643 else if (isGV_with_GP(sv)) {
1644 SvPV_force_nomg_nolen(sv);
1646 SvUPGRADE(sv, SVt_PV);
1647 tmplen = SvLEN(sv); /* remember if already alloced */
1648 if (!tmplen && !SvREADONLY(sv)) {
1649 /* try short-buffering it. Please update t/op/readline.t
1650 * if you change the growth length.
1655 if (type == OP_RCATLINE && SvOK(sv)) {
1657 SvPV_force_nomg_nolen(sv);
1663 sv = sv_2mortal(newSV(80));
1667 /* This should not be marked tainted if the fp is marked clean */
1668 #define MAYBE_TAINT_LINE(io, sv) \
1669 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1674 /* delay EOF state for a snarfed empty file */
1675 #define SNARF_EOF(gimme,rs,io,sv) \
1676 (gimme != G_SCALAR || SvCUR(sv) \
1677 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1681 if (!sv_gets(sv, fp, offset)
1683 || SNARF_EOF(gimme, PL_rs, io, sv)
1684 || PerlIO_error(fp)))
1686 PerlIO_clearerr(fp);
1687 if (IoFLAGS(io) & IOf_ARGV) {
1688 fp = nextargv(PL_last_in_gv);
1691 (void)do_close(PL_last_in_gv, FALSE);
1693 else if (type == OP_GLOB) {
1694 if (!do_close(PL_last_in_gv, FALSE)) {
1695 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1696 "glob failed (child exited with status %d%s)",
1697 (int)(STATUS_CURRENT >> 8),
1698 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1701 if (gimme == G_SCALAR) {
1702 if (type != OP_RCATLINE) {
1703 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1709 MAYBE_TAINT_LINE(io, sv);
1712 MAYBE_TAINT_LINE(io, sv);
1714 IoFLAGS(io) |= IOf_NOLINE;
1718 if (type == OP_GLOB) {
1721 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1722 char * const tmps = SvEND(sv) - 1;
1723 if (*tmps == *SvPVX_const(PL_rs)) {
1725 SvCUR_set(sv, SvCUR(sv) - 1);
1728 for (t1 = SvPVX_const(sv); *t1; t1++)
1729 if (!isALNUMC(*t1) &&
1730 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1732 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1733 (void)POPs; /* Unmatched wildcard? Chuck it... */
1736 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1737 if (ckWARN(WARN_UTF8)) {
1738 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1739 const STRLEN len = SvCUR(sv) - offset;
1742 if (!is_utf8_string_loc(s, len, &f))
1743 /* Emulate :encoding(utf8) warning in the same case. */
1744 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1745 "utf8 \"\\x%02X\" does not map to Unicode",
1746 f < (U8*)SvEND(sv) ? *f : 0);
1749 if (gimme == G_ARRAY) {
1750 if (SvLEN(sv) - SvCUR(sv) > 20) {
1751 SvPV_shrink_to_cur(sv);
1753 sv = sv_2mortal(newSV(80));
1756 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1757 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1758 const STRLEN new_len
1759 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1760 SvPV_renew(sv, new_len);
1771 SV * const keysv = POPs;
1772 HV * const hv = MUTABLE_HV(POPs);
1773 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1774 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1776 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1777 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1778 bool preeminent = TRUE;
1780 if (SvTYPE(hv) != SVt_PVHV)
1787 /* If we can determine whether the element exist,
1788 * Try to preserve the existenceness of a tied hash
1789 * element by using EXISTS and DELETE if possible.
1790 * Fallback to FETCH and STORE otherwise. */
1791 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1792 preeminent = hv_exists_ent(hv, keysv, 0);
1795 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1796 svp = he ? &HeVAL(he) : NULL;
1798 if (!svp || !*svp || *svp == &PL_sv_undef) {
1802 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1804 lv = sv_newmortal();
1805 sv_upgrade(lv, SVt_PVLV);
1807 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1808 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1809 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1815 if (HvNAME_get(hv) && isGV(*svp))
1816 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1817 else if (preeminent)
1818 save_helem_flags(hv, keysv, svp,
1819 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1821 SAVEHDELETE(hv, keysv);
1823 else if (PL_op->op_private & OPpDEREF) {
1824 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1828 sv = (svp && *svp ? *svp : &PL_sv_undef);
1829 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1830 * was to make C<local $tied{foo} = $tied{foo}> possible.
1831 * However, it seems no longer to be needed for that purpose, and
1832 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1833 * would loop endlessly since the pos magic is getting set on the
1834 * mortal copy and lost. However, the copy has the effect of
1835 * triggering the get magic, and losing it altogether made things like
1836 * c<$tied{foo};> in void context no longer do get magic, which some
1837 * code relied on. Also, delayed triggering of magic on @+ and friends
1838 * meant the original regex may be out of scope by now. So as a
1839 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1840 * being called too many times). */
1841 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1850 register PERL_CONTEXT *cx;
1853 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1854 bool av_is_stack = FALSE;
1857 cx = &cxstack[cxstack_ix];
1858 if (!CxTYPE_is_LOOP(cx))
1859 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1861 itersvp = CxITERVAR(cx);
1862 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1863 /* string increment */
1864 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1865 SV *end = cx->blk_loop.state_u.lazysv.end;
1866 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1867 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1869 const char *max = SvPV_const(end, maxlen);
1870 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1871 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1872 /* safe to reuse old SV */
1873 sv_setsv(*itersvp, cur);
1877 /* we need a fresh SV every time so that loop body sees a
1878 * completely new SV for closures/references to work as
1881 *itersvp = newSVsv(cur);
1882 SvREFCNT_dec(oldsv);
1884 if (strEQ(SvPVX_const(cur), max))
1885 sv_setiv(cur, 0); /* terminate next time */
1892 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1893 /* integer increment */
1894 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1897 /* don't risk potential race */
1898 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1899 /* safe to reuse old SV */
1900 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur);
1904 /* we need a fresh SV every time so that loop body sees a
1905 * completely new SV for closures/references to work as they
1908 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur);
1909 SvREFCNT_dec(oldsv);
1912 if (cx->blk_loop.state_u.lazyiv.cur == IV_MAX) {
1913 /* Handle end of range at IV_MAX */
1914 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1916 ++cx->blk_loop.state_u.lazyiv.cur;
1922 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1923 av = cx->blk_loop.state_u.ary.ary;
1928 if (PL_op->op_private & OPpITER_REVERSED) {
1929 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1930 ? cx->blk_loop.resetsp + 1 : 0))
1933 if (SvMAGICAL(av) || AvREIFY(av)) {
1934 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1935 sv = svp ? *svp : NULL;
1938 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1942 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1946 if (SvMAGICAL(av) || AvREIFY(av)) {
1947 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1948 sv = svp ? *svp : NULL;
1951 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1955 if (sv && SvIS_FREED(sv)) {
1957 Perl_croak(aTHX_ "Use of freed value in iteration");
1962 SvREFCNT_inc_simple_void_NN(sv);
1966 if (!av_is_stack && sv == &PL_sv_undef) {
1967 SV *lv = newSV_type(SVt_PVLV);
1969 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1970 LvTARG(lv) = SvREFCNT_inc_simple(av);
1971 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1972 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1978 SvREFCNT_dec(oldsv);
1984 A description of how taint works in pattern matching and substitution.
1986 While the pattern is being assembled/concatenated and then compiled,
1987 PL_tainted will get set if any component of the pattern is tainted, e.g.
1988 /.*$tainted/. At the end of pattern compilation, the RXf_TAINTED flag
1989 is set on the pattern if PL_tainted is set.
1991 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1992 the pattern is marked as tainted. This means that subsequent usage, such
1993 as /x$r/, will set PL_tainted, and thus RXf_TAINTED, on the new pattern too.
1995 During execution of a pattern, locale-variant ops such as ALNUML set the
1996 local flag RF_tainted. At the end of execution, the engine sets the
1997 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
2000 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
2001 of $1 et al to indicate whether the returned value should be tainted.
2002 It is the responsibility of the caller of the pattern (i.e. pp_match,
2003 pp_subst etc) to set this flag for any other circumstances where $1 needs
2006 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2008 There are three possible sources of taint
2010 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2011 * the replacement string (or expression under /e)
2013 There are four destinations of taint and they are affected by the sources
2014 according to the rules below:
2016 * the return value (not including /r):
2017 tainted by the source string and pattern, but only for the
2018 number-of-iterations case; boolean returns aren't tainted;
2019 * the modified string (or modified copy under /r):
2020 tainted by the source string, pattern, and replacement strings;
2022 tainted by the pattern, and under 'use re "taint"', by the source
2024 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2025 should always be unset before executing subsequent code.
2027 The overall action of pp_subst is:
2029 * at the start, set bits in rxtainted indicating the taint status of
2030 the various sources.
2032 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2033 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2034 pattern has subsequently become tainted via locale ops.
2036 * If control is being passed to pp_substcont to execute a /e block,
2037 save rxtainted in the CXt_SUBST block, for future use by
2040 * Whenever control is being returned to perl code (either by falling
2041 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2042 use the flag bits in rxtainted to make all the appropriate types of
2043 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2044 et al will appear tainted.
2046 pp_match is just a simpler version of the above.
2053 register PMOP *pm = cPMOP;
2065 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2066 See "how taint works" above */
2069 register REGEXP *rx = PM_GETRE(pm);
2071 int force_on_match = 0;
2072 const I32 oldsave = PL_savestack_ix;
2074 bool doutf8 = FALSE;
2075 #ifdef PERL_OLD_COPY_ON_WRITE
2079 /* known replacement string? */
2080 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2084 if (PL_op->op_flags & OPf_STACKED)
2086 else if (PL_op->op_private & OPpTARGET_MY)
2093 #ifdef PERL_OLD_COPY_ON_WRITE
2094 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2095 because they make integers such as 256 "false". */
2096 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2099 sv_force_normal_flags(TARG,0);
2101 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2102 #ifdef PERL_OLD_COPY_ON_WRITE
2105 && (SvREADONLY(TARG)
2106 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2107 || SvTYPE(TARG) > SVt_PVLV)
2108 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2109 Perl_croak_no_modify(aTHX);
2113 s = SvPV_mutable(TARG, len);
2114 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2117 /* only replace once? */
2118 once = !(rpm->op_pmflags & PMf_GLOBAL);
2120 /* See "how taint works" above */
2123 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2124 | ((RX_EXTFLAGS(rx) & RXf_TAINTED) ? SUBST_TAINT_PAT : 0)
2125 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2126 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2127 ? SUBST_TAINT_BOOLRET : 0));
2131 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2135 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2138 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2139 maxiters = 2 * slen + 10; /* We can match twice at each
2140 position, once with zero-length,
2141 second time with non-zero. */
2143 if (!RX_PRELEN(rx) && PL_curpm) {
2147 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2148 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2149 ? REXEC_COPY_STR : 0;
2152 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2154 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2158 /* How to do it in subst? */
2159 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2161 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2166 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2167 r_flags | REXEC_CHECKED))
2171 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2172 LEAVE_SCOPE(oldsave);
2176 /* known replacement string? */
2178 if (SvTAINTED(dstr))
2179 rxtainted |= SUBST_TAINT_REPL;
2181 /* Upgrade the source if the replacement is utf8 but the source is not,
2182 * but only if it matched; see
2183 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2185 if (DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2186 char * const orig_pvx = SvPVX(TARG);
2187 const STRLEN new_len = sv_utf8_upgrade_nomg(TARG);
2189 /* If the lengths are the same, the pattern contains only
2190 * invariants, can keep going; otherwise, various internal markers
2191 * could be off, so redo */
2192 if (new_len != len || orig_pvx != SvPVX(TARG)) {
2197 /* replacement needing upgrading? */
2198 if (DO_UTF8(TARG) && !doutf8) {
2199 nsv = sv_newmortal();
2202 sv_recode_to_utf8(nsv, PL_encoding);
2204 sv_utf8_upgrade(nsv);
2205 c = SvPV_const(nsv, clen);
2209 c = SvPV_const(dstr, clen);
2210 doutf8 = DO_UTF8(dstr);
2218 /* can do inplace substitution? */
2220 #ifdef PERL_OLD_COPY_ON_WRITE
2223 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2224 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2225 && (!doutf8 || SvUTF8(TARG))
2226 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2229 #ifdef PERL_OLD_COPY_ON_WRITE
2230 if (SvIsCOW(TARG)) {
2231 assert (!force_on_match);
2235 if (force_on_match) {
2237 s = SvPV_force(TARG, len);
2243 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2244 rxtainted |= SUBST_TAINT_PAT;
2245 m = orig + RX_OFFS(rx)[0].start;
2246 d = orig + RX_OFFS(rx)[0].end;
2248 if (m - s > strend - d) { /* faster to shorten from end */
2250 Copy(c, m, clen, char);
2255 Move(d, m, i, char);
2259 SvCUR_set(TARG, m - s);
2261 else if ((i = m - s)) { /* faster from front */
2264 Move(s, d - i, i, char);
2267 Copy(c, m, clen, char);
2272 Copy(c, d, clen, char);
2282 if (iters++ > maxiters)
2283 DIE(aTHX_ "Substitution loop");
2284 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2285 rxtainted |= SUBST_TAINT_PAT;
2286 m = RX_OFFS(rx)[0].start + orig;
2289 Move(s, d, i, char);
2293 Copy(c, d, clen, char);
2296 s = RX_OFFS(rx)[0].end + orig;
2297 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2299 /* don't match same null twice */
2300 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2303 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2304 Move(s, d, i+1, char); /* include the NUL */
2311 if (force_on_match) {
2313 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2314 /* I feel that it should be possible to avoid this mortal copy
2315 given that the code below copies into a new destination.
2316 However, I suspect it isn't worth the complexity of
2317 unravelling the C<goto force_it> for the small number of
2318 cases where it would be viable to drop into the copy code. */
2319 TARG = sv_2mortal(newSVsv(TARG));
2321 s = SvPV_force(TARG, len);
2324 #ifdef PERL_OLD_COPY_ON_WRITE
2327 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2328 rxtainted |= SUBST_TAINT_PAT;
2329 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2332 register PERL_CONTEXT *cx;
2334 /* note that a whole bunch of local vars are saved here for
2335 * use by pp_substcont: here's a list of them in case you're
2336 * searching for places in this sub that uses a particular var:
2337 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2338 * s m strend rx once */
2340 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2342 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2344 if (iters++ > maxiters)
2345 DIE(aTHX_ "Substitution loop");
2346 if (RX_MATCH_TAINTED(rx))
2347 rxtainted |= SUBST_TAINT_PAT;
2348 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2351 orig = RX_SUBBEG(rx);
2353 strend = s + (strend - m);
2355 m = RX_OFFS(rx)[0].start + orig;
2356 if (doutf8 && !SvUTF8(dstr))
2357 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2359 sv_catpvn(dstr, s, m-s);
2360 s = RX_OFFS(rx)[0].end + orig;
2362 sv_catpvn(dstr, c, clen);
2365 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2366 TARG, NULL, r_flags));
2367 if (doutf8 && !DO_UTF8(TARG))
2368 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2370 sv_catpvn(dstr, s, strend - s);
2372 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2373 /* From here on down we're using the copy, and leaving the original
2379 #ifdef PERL_OLD_COPY_ON_WRITE
2380 /* The match may make the string COW. If so, brilliant, because
2381 that's just saved us one malloc, copy and free - the regexp has
2382 donated the old buffer, and we malloc an entirely new one, rather
2383 than the regexp malloc()ing a buffer and copying our original,
2384 only for us to throw it away here during the substitution. */
2385 if (SvIsCOW(TARG)) {
2386 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2392 SvPV_set(TARG, SvPVX(dstr));
2393 SvCUR_set(TARG, SvCUR(dstr));
2394 SvLEN_set(TARG, SvLEN(dstr));
2395 doutf8 |= DO_UTF8(dstr);
2396 SvPV_set(dstr, NULL);
2403 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2404 (void)SvPOK_only_UTF8(TARG);
2409 /* See "how taint works" above */
2411 if ((rxtainted & SUBST_TAINT_PAT) ||
2412 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2413 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2415 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2417 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2418 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2420 SvTAINTED_on(TOPs); /* taint return value */
2422 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2424 /* needed for mg_set below */
2426 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
2429 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2431 LEAVE_SCOPE(oldsave);
2440 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2441 ++*PL_markstack_ptr;
2443 LEAVE_with_name("grep_item"); /* exit inner scope */
2446 if (PL_stack_base + *PL_markstack_ptr > SP) {
2448 const I32 gimme = GIMME_V;
2450 LEAVE_with_name("grep"); /* exit outer scope */
2451 (void)POPMARK; /* pop src */
2452 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2453 (void)POPMARK; /* pop dst */
2454 SP = PL_stack_base + POPMARK; /* pop original mark */
2455 if (gimme == G_SCALAR) {
2456 if (PL_op->op_private & OPpGREP_LEX) {
2457 SV* const sv = sv_newmortal();
2458 sv_setiv(sv, items);
2466 else if (gimme == G_ARRAY)
2473 ENTER_with_name("grep_item"); /* enter inner scope */
2476 src = PL_stack_base[*PL_markstack_ptr];
2478 if (PL_op->op_private & OPpGREP_LEX)
2479 PAD_SVl(PL_op->op_targ) = src;
2483 RETURNOP(cLOGOP->op_other);
2494 register PERL_CONTEXT *cx;
2497 if (CxMULTICALL(&cxstack[cxstack_ix]))
2501 cxstack_ix++; /* temporarily protect top context */
2504 if (gimme == G_SCALAR) {
2507 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2508 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2509 && !SvMAGICAL(TOPs)) {
2510 *MARK = SvREFCNT_inc(TOPs);
2515 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2517 *MARK = sv_mortalcopy(sv);
2521 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2522 && !SvMAGICAL(TOPs)) {
2526 *MARK = sv_mortalcopy(TOPs);
2530 *MARK = &PL_sv_undef;
2534 else if (gimme == G_ARRAY) {
2535 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2536 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2537 || SvMAGICAL(*MARK)) {
2538 *MARK = sv_mortalcopy(*MARK);
2539 TAINT_NOT; /* Each item is independent */
2547 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2548 PL_curpm = newpm; /* ... and pop $1 et al */
2551 return cx->blk_sub.retop;
2559 register PERL_CONTEXT *cx;
2561 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2564 DIE(aTHX_ "Not a CODE reference");
2565 switch (SvTYPE(sv)) {
2566 /* This is overwhelming the most common case: */
2569 if (!(cv = GvCVu((const GV *)sv))) {
2571 cv = sv_2cv(sv, &stash, &gv, 0);
2580 if(isGV_with_GP(sv)) goto we_have_a_glob;
2583 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2585 SP = PL_stack_base + POPMARK;
2593 sv = amagic_deref_call(sv, to_cv_amg);
2594 /* Don't SPAGAIN here. */
2600 sym = SvPV_nomg_const(sv, len);
2602 DIE(aTHX_ PL_no_usym, "a subroutine");
2603 if (PL_op->op_private & HINT_STRICT_REFS)
2604 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2605 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2608 cv = MUTABLE_CV(SvRV(sv));
2609 if (SvTYPE(cv) == SVt_PVCV)
2614 DIE(aTHX_ "Not a CODE reference");
2615 /* This is the second most common case: */
2617 cv = MUTABLE_CV(sv);
2625 if (CvCLONE(cv) && ! CvCLONED(cv))
2626 DIE(aTHX_ "Closure prototype called");
2627 if (!CvROOT(cv) && !CvXSUB(cv)) {
2631 /* anonymous or undef'd function leaves us no recourse */
2632 if (CvANON(cv) || !(gv = CvGV(cv)))
2633 DIE(aTHX_ "Undefined subroutine called");
2635 /* autoloaded stub? */
2636 if (cv != GvCV(gv)) {
2639 /* should call AUTOLOAD now? */
2642 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2643 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2649 sub_name = sv_newmortal();
2650 gv_efullname3(sub_name, gv, NULL);
2651 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2655 DIE(aTHX_ "Not a CODE reference");
2660 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2661 Perl_get_db_sub(aTHX_ &sv, cv);
2663 PL_curcopdb = PL_curcop;
2665 /* check for lsub that handles lvalue subroutines */
2666 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2667 /* if lsub not found then fall back to DB::sub */
2668 if (!cv) cv = GvCV(PL_DBsub);
2670 cv = GvCV(PL_DBsub);
2673 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2674 DIE(aTHX_ "No DB::sub routine defined");
2677 if (!(CvISXSUB(cv))) {
2678 /* This path taken at least 75% of the time */
2680 register I32 items = SP - MARK;
2681 AV* const padlist = CvPADLIST(cv);
2682 PUSHBLOCK(cx, CXt_SUB, MARK);
2684 cx->blk_sub.retop = PL_op->op_next;
2686 if (CvDEPTH(cv) >= 2) {
2687 PERL_STACK_OVERFLOW_CHECK();
2688 pad_push(padlist, CvDEPTH(cv));
2691 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2693 AV *const av = MUTABLE_AV(PAD_SVl(0));
2695 /* @_ is normally not REAL--this should only ever
2696 * happen when DB::sub() calls things that modify @_ */
2701 cx->blk_sub.savearray = GvAV(PL_defgv);
2702 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2703 CX_CURPAD_SAVE(cx->blk_sub);
2704 cx->blk_sub.argarray = av;
2707 if (items > AvMAX(av) + 1) {
2708 SV **ary = AvALLOC(av);
2709 if (AvARRAY(av) != ary) {
2710 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2713 if (items > AvMAX(av) + 1) {
2714 AvMAX(av) = items - 1;
2715 Renew(ary,items,SV*);
2720 Copy(MARK,AvARRAY(av),items,SV*);
2721 AvFILLp(av) = items - 1;
2729 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2731 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2732 /* warning must come *after* we fully set up the context
2733 * stuff so that __WARN__ handlers can safely dounwind()
2736 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2737 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2738 sub_crush_depth(cv);
2739 RETURNOP(CvSTART(cv));
2742 I32 markix = TOPMARK;
2747 /* Need to copy @_ to stack. Alternative may be to
2748 * switch stack to @_, and copy return values
2749 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2750 AV * const av = GvAV(PL_defgv);
2751 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2754 /* Mark is at the end of the stack. */
2756 Copy(AvARRAY(av), SP + 1, items, SV*);
2761 /* We assume first XSUB in &DB::sub is the called one. */
2763 SAVEVPTR(PL_curcop);
2764 PL_curcop = PL_curcopdb;
2767 /* Do we need to open block here? XXXX */
2769 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2771 CvXSUB(cv)(aTHX_ cv);
2773 /* Enforce some sanity in scalar context. */
2774 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2775 if (markix > PL_stack_sp - PL_stack_base)
2776 *(PL_stack_base + markix) = &PL_sv_undef;
2778 *(PL_stack_base + markix) = *PL_stack_sp;
2779 PL_stack_sp = PL_stack_base + markix;
2787 Perl_sub_crush_depth(pTHX_ CV *cv)
2789 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2792 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2794 SV* const tmpstr = sv_newmortal();
2795 gv_efullname3(tmpstr, CvGV(cv), NULL);
2796 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2805 SV* const elemsv = POPs;
2806 IV elem = SvIV(elemsv);
2807 AV *const av = MUTABLE_AV(POPs);
2808 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2809 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2810 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2811 bool preeminent = TRUE;
2814 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2815 Perl_warner(aTHX_ packWARN(WARN_MISC),
2816 "Use of reference \"%"SVf"\" as array index",
2818 if (SvTYPE(av) != SVt_PVAV)
2825 /* If we can determine whether the element exist,
2826 * Try to preserve the existenceness of a tied array
2827 * element by using EXISTS and DELETE if possible.
2828 * Fallback to FETCH and STORE otherwise. */
2829 if (SvCANEXISTDELETE(av))
2830 preeminent = av_exists(av, elem);
2833 svp = av_fetch(av, elem, lval && !defer);
2835 #ifdef PERL_MALLOC_WRAP
2836 if (SvUOK(elemsv)) {
2837 const UV uv = SvUV(elemsv);
2838 elem = uv > IV_MAX ? IV_MAX : uv;
2840 else if (SvNOK(elemsv))
2841 elem = (IV)SvNV(elemsv);
2843 static const char oom_array_extend[] =
2844 "Out of memory during array extend"; /* Duplicated in av.c */
2845 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2848 if (!svp || *svp == &PL_sv_undef) {
2851 DIE(aTHX_ PL_no_aelem, elem);
2852 lv = sv_newmortal();
2853 sv_upgrade(lv, SVt_PVLV);
2855 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2856 LvTARG(lv) = SvREFCNT_inc_simple(av);
2857 LvTARGOFF(lv) = elem;
2864 save_aelem(av, elem, svp);
2866 SAVEADELETE(av, elem);
2868 else if (PL_op->op_private & OPpDEREF) {
2869 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2873 sv = (svp ? *svp : &PL_sv_undef);
2874 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2881 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2883 PERL_ARGS_ASSERT_VIVIFY_REF;
2888 Perl_croak_no_modify(aTHX);
2889 prepare_SV_for_RV(sv);
2892 SvRV_set(sv, newSV(0));
2895 SvRV_set(sv, MUTABLE_SV(newAV()));
2898 SvRV_set(sv, MUTABLE_SV(newHV()));
2905 if (SvGMAGICAL(sv)) {
2906 /* copy the sv without magic to prevent magic from being
2908 SV* msv = sv_newmortal();
2909 sv_setsv_nomg(msv, sv);
2918 SV* const sv = TOPs;
2921 SV* const rsv = SvRV(sv);
2922 if (SvTYPE(rsv) == SVt_PVCV) {
2928 SETs(method_common(sv, NULL));
2935 SV* const sv = cSVOP_sv;
2936 U32 hash = SvSHARED_HASH(sv);
2938 XPUSHs(method_common(sv, &hash));
2943 S_method_common(pTHX_ SV* meth, U32* hashp)
2950 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2951 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2952 "package or object reference", SVfARG(meth)),
2954 : *(PL_stack_base + TOPMARK + 1);
2956 PERL_ARGS_ASSERT_METHOD_COMMON;
2959 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2964 ob = MUTABLE_SV(SvRV(sv));
2968 const char * packname = NULL;
2969 bool packname_is_utf8 = FALSE;
2971 /* this isn't a reference */
2972 if(SvOK(sv) && (packname = SvPV_nomg_const(sv, packlen))) {
2973 const HE* const he =
2974 (const HE *)hv_common_key_len(
2975 PL_stashcache, packname,
2976 packlen * -(packname_is_utf8 = !!SvUTF8(sv)), 0, NULL, 0
2980 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2987 !(iogv = gv_fetchpvn_flags(
2988 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
2990 !(ob=MUTABLE_SV(GvIO(iogv))))
2992 /* this isn't the name of a filehandle either */
2994 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
2995 ? !isIDFIRST_utf8((U8*)packname)
2996 : !isIDFIRST_L1((U8)*packname)
2999 /* diag_listed_as: Can't call method "%s" without a package or object reference */
3000 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3002 SvOK(sv) ? "without a package or object reference"
3003 : "on an undefined value");
3005 /* assume it's a package name */
3006 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3010 SV* const ref = newSViv(PTR2IV(stash));
3011 (void)hv_store(PL_stashcache, packname,
3012 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3016 /* it _is_ a filehandle name -- replace with a reference */
3017 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3020 /* if we got here, ob should be a reference or a glob */
3021 if (!ob || !(SvOBJECT(ob)
3022 || (SvTYPE(ob) == SVt_PVGV
3024 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3027 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3028 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3029 ? newSVpvs_flags("DOES", SVs_TEMP)
3033 stash = SvSTASH(ob);
3036 /* NOTE: stash may be null, hope hv_fetch_ent and
3037 gv_fetchmethod can cope (it seems they can) */
3039 /* shortcut for simple names */
3041 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3043 gv = MUTABLE_GV(HeVAL(he));
3044 if (isGV(gv) && GvCV(gv) &&
3045 (!GvCVGEN(gv) || GvCVGEN(gv)
3046 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3047 return MUTABLE_SV(GvCV(gv));
3051 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3052 meth, GV_AUTOLOAD | GV_CROAK);
3056 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3061 * c-indentation-style: bsd
3063 * indent-tabs-mode: nil
3066 * ex: set ts=8 sts=4 sw=4 et: