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
49 PL_curcop = (COP*)PL_op;
51 TAINT_NOT; /* Each statement is presumed innocent */
52 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
62 if (UNLIKELY(PL_op->op_private & OPpLVAL_INTRO))
63 PUSHs(save_scalar(cGVOP_gv));
65 PUSHs(GvSVn(cGVOP_gv));
66 if (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv))
72 /* also used for: pp_lineseq() pp_regcmaybe() pp_scalar() pp_scope() */
79 /* This is sometimes called directly by pp_coreargs and pp_grepstart. */
82 PUSHMARK(PL_stack_sp);
93 /* no PUTBACK, SETs doesn't inc/dec SP */
100 XPUSHs(MUTABLE_SV(cGVOP_gv));
102 && (GvREFCNT(cGVOP_gv) > 1 || GvALIASED_SV(cGVOP_gv)))
108 /* also used for: pp_andassign() */
114 /* SP is not used to remove a variable that is saved across the
115 sv_2bool_flags call in SvTRUE_NN, if a RISC/CISC or low/high machine
116 register or load/store vs direct mem ops macro is introduced, this
117 should be a define block between direct PL_stack_sp and dSP operations,
118 presently, using PL_stack_sp is bias towards CISC cpus */
119 SV * const sv = *PL_stack_sp;
123 if (PL_op->op_type == OP_AND)
125 return cLOGOP->op_other;
133 /* sassign keeps its args in the optree traditionally backwards.
134 So we pop them differently.
136 SV *left = POPs; SV *right = TOPs;
138 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
139 SV * const temp = left;
140 left = right; right = temp;
142 if (TAINTING_get && UNLIKELY(TAINT_get) && !SvTAINTED(right))
144 if (UNLIKELY(PL_op->op_private & OPpASSIGN_CV_TO_GV)) {
146 SV * const cv = SvRV(right);
147 const U32 cv_type = SvTYPE(cv);
148 const bool is_gv = isGV_with_GP(left);
149 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
155 /* Can do the optimisation if left (LVALUE) is not a typeglob,
156 right (RVALUE) is a reference to something, and we're in void
158 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
159 /* Is the target symbol table currently empty? */
160 GV * const gv = gv_fetchsv_nomg(left, GV_NOINIT, SVt_PVGV);
161 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
162 /* Good. Create a new proxy constant subroutine in the target.
163 The gv becomes a(nother) reference to the constant. */
164 SV *const value = SvRV(cv);
166 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
167 SvPCS_IMPORTED_on(gv);
169 SvREFCNT_inc_simple_void(value);
175 /* Need to fix things up. */
177 /* Need to fix GV. */
178 left = MUTABLE_SV(gv_fetchsv_nomg(left,GV_ADD, SVt_PVGV));
182 /* We've been returned a constant rather than a full subroutine,
183 but they expect a subroutine reference to apply. */
185 ENTER_with_name("sassign_coderef");
186 SvREFCNT_inc_void(SvRV(cv));
187 /* newCONSTSUB takes a reference count on the passed in SV
188 from us. We set the name to NULL, otherwise we get into
189 all sorts of fun as the reference to our new sub is
190 donated to the GV that we're about to assign to.
192 SvRV_set(right, MUTABLE_SV(newCONSTSUB(GvSTASH(left), NULL,
195 LEAVE_with_name("sassign_coderef");
197 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
199 First: ops for \&{"BONK"}; return us the constant in the
201 Second: ops for *{"BONK"} cause that symbol table entry
202 (and our reference to it) to be upgraded from RV
204 Thirdly: We get here. cv is actually PVGV now, and its
205 GvCV() is actually the subroutine we're looking for
207 So change the reference so that it points to the subroutine
208 of that typeglob, as that's what they were after all along.
210 GV *const upgraded = MUTABLE_GV(cv);
211 CV *const source = GvCV(upgraded);
214 assert(CvFLAGS(source) & CVf_CONST);
216 SvREFCNT_inc_void(source);
217 SvREFCNT_dec_NN(upgraded);
218 SvRV_set(right, MUTABLE_SV(source));
224 UNLIKELY(SvTEMP(left)) && !SvSMAGICAL(left) && SvREFCNT(left) == 1 &&
225 (!isGV_with_GP(left) || SvFAKE(left)) && ckWARN(WARN_MISC)
228 packWARN(WARN_MISC), "Useless assignment to a temporary"
230 SvSetMagicSV(left, right);
240 RETURNOP(cLOGOP->op_other);
242 RETURNOP(cLOGOP->op_next);
248 TAINT_NOT; /* Each statement is presumed innocent */
249 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
251 if (!(PL_op->op_flags & OPf_SPECIAL)) {
252 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
253 LEAVE_SCOPE(oldsave);
260 dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
265 const char *rpv = NULL;
267 bool rcopied = FALSE;
269 if (TARG == right && right != left) { /* $r = $l.$r */
270 rpv = SvPV_nomg_const(right, rlen);
271 rbyte = !DO_UTF8(right);
272 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
273 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
277 if (TARG != left) { /* not $l .= $r */
279 const char* const lpv = SvPV_nomg_const(left, llen);
280 lbyte = !DO_UTF8(left);
281 sv_setpvn(TARG, lpv, llen);
287 else { /* $l .= $r and left == TARG */
289 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
290 report_uninit(right);
294 SvPV_force_nomg_nolen(left);
296 lbyte = !DO_UTF8(left);
302 rpv = SvPV_nomg_const(right, rlen);
303 rbyte = !DO_UTF8(right);
305 if (lbyte != rbyte) {
307 sv_utf8_upgrade_nomg(TARG);
310 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
311 sv_utf8_upgrade_nomg(right);
312 rpv = SvPV_nomg_const(right, rlen);
315 sv_catpvn_nomg(TARG, rpv, rlen);
322 /* push the elements of av onto the stack.
323 * XXX Note that padav has similar code but without the mg_get().
324 * I suspect that the mg_get is no longer needed, but while padav
325 * differs, it can't share this function */
328 S_pushav(pTHX_ AV* const av)
331 const SSize_t maxarg = AvFILL(av) + 1;
333 if (UNLIKELY(SvRMAGICAL(av))) {
335 for (i=0; i < (PADOFFSET)maxarg; i++) {
336 SV ** const svp = av_fetch(av, i, FALSE);
337 /* See note in pp_helem, and bug id #27839 */
339 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
345 for (i=0; i < (PADOFFSET)maxarg; i++) {
346 SV * const sv = AvARRAY(av)[i];
347 SP[i+1] = LIKELY(sv) ? sv : &PL_sv_undef;
355 /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
360 PADOFFSET base = PL_op->op_targ;
361 int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
363 if (PL_op->op_flags & OPf_SPECIAL) {
364 /* fake the RHS of my ($x,$y,..) = @_ */
366 S_pushav(aTHX_ GvAVn(PL_defgv));
370 /* note, this is only skipped for compile-time-known void cxt */
371 if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
374 for (i = 0; i <count; i++)
375 *++SP = PAD_SV(base+i);
377 if (PL_op->op_private & OPpLVAL_INTRO) {
378 SV **svp = &(PAD_SVl(base));
379 const UV payload = (UV)(
380 (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
381 | (count << SAVE_TIGHT_SHIFT)
382 | SAVEt_CLEARPADRANGE);
383 STATIC_ASSERT_STMT(OPpPADRANGE_COUNTMASK + 1 == (1 << OPpPADRANGE_COUNTSHIFT));
384 assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
391 for (i = 0; i <count; i++)
392 SvPADSTALE_off(*svp++); /* mark lexical as active */
403 OP * const op = PL_op;
404 /* access PL_curpad once */
405 SV ** const padentry = &(PAD_SVl(op->op_targ));
410 PUTBACK; /* no pop/push after this, TOPs ok */
412 if (op->op_flags & OPf_MOD) {
413 if (op->op_private & OPpLVAL_INTRO)
414 if (!(op->op_private & OPpPAD_STATE))
415 save_clearsv(padentry);
416 if (op->op_private & OPpDEREF) {
417 /* TOPs is equivalent to TARG here. Using TOPs (SP) rather
418 than TARG reduces the scope of TARG, so it does not
419 span the call to save_clearsv, resulting in smaller
421 TOPs = vivify_ref(TOPs, op->op_private & OPpDEREF);
433 tryAMAGICunTARGETlist(iter_amg, 0);
434 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
436 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
437 if (!isGV_with_GP(PL_last_in_gv)) {
438 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
439 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
442 XPUSHs(MUTABLE_SV(PL_last_in_gv));
445 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
446 if (PL_last_in_gv == (GV *)&PL_sv_undef)
447 PL_last_in_gv = NULL;
449 assert(isGV_with_GP(PL_last_in_gv));
452 return do_readline();
460 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
464 (SvIOK_notUV(left) && SvIOK_notUV(right))
465 ? (SvIVX(left) == SvIVX(right))
466 : ( do_ncmp(left, right) == 0)
472 /* also used for: pp_i_predec() pp_i_preinc() pp_predec() */
478 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
479 if (UNLIKELY(SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs))))
480 Perl_croak_no_modify();
481 if (LIKELY(!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs))
482 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
484 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
485 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
487 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
488 if (inc) sv_inc(TOPs);
495 /* also used for: pp_orassign() */
504 if (PL_op->op_type == OP_OR)
506 RETURNOP(cLOGOP->op_other);
511 /* also used for: pp_dor() pp_dorassign() */
518 const int op_type = PL_op->op_type;
519 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
524 if (UNLIKELY(!sv || !SvANY(sv))) {
525 if (op_type == OP_DOR)
527 RETURNOP(cLOGOP->op_other);
533 if (UNLIKELY(!sv || !SvANY(sv)))
538 switch (SvTYPE(sv)) {
540 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
544 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
548 if (CvROOT(sv) || CvXSUB(sv))
561 if(op_type == OP_DOR)
563 RETURNOP(cLOGOP->op_other);
565 /* assuming OP_DEFINED */
573 dSP; dATARGET; bool useleft; SV *svl, *svr;
574 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
578 useleft = USE_LEFT(svl);
579 #ifdef PERL_PRESERVE_IVUV
580 /* We must see if we can perform the addition with integers if possible,
581 as the integer code detects overflow while the NV code doesn't.
582 If either argument hasn't had a numeric conversion yet attempt to get
583 the IV. It's important to do this now, rather than just assuming that
584 it's not IOK as a PV of "9223372036854775806" may not take well to NV
585 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
586 integer in case the second argument is IV=9223372036854775806
587 We can (now) rely on sv_2iv to do the right thing, only setting the
588 public IOK flag if the value in the NV (or PV) slot is truly integer.
590 A side effect is that this also aggressively prefers integer maths over
591 fp maths for integer values.
593 How to detect overflow?
595 C 99 section 6.2.6.1 says
597 The range of nonnegative values of a signed integer type is a subrange
598 of the corresponding unsigned integer type, and the representation of
599 the same value in each type is the same. A computation involving
600 unsigned operands can never overflow, because a result that cannot be
601 represented by the resulting unsigned integer type is reduced modulo
602 the number that is one greater than the largest value that can be
603 represented by the resulting type.
607 which I read as "unsigned ints wrap."
609 signed integer overflow seems to be classed as "exception condition"
611 If an exceptional condition occurs during the evaluation of an
612 expression (that is, if the result is not mathematically defined or not
613 in the range of representable values for its type), the behavior is
616 (6.5, the 5th paragraph)
618 I had assumed that on 2s complement machines signed arithmetic would
619 wrap, hence coded pp_add and pp_subtract on the assumption that
620 everything perl builds on would be happy. After much wailing and
621 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
622 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
623 unsigned code below is actually shorter than the old code. :-)
626 if (SvIV_please_nomg(svr)) {
627 /* Unless the left argument is integer in range we are going to have to
628 use NV maths. Hence only attempt to coerce the right argument if
629 we know the left is integer. */
637 /* left operand is undef, treat as zero. + 0 is identity,
638 Could SETi or SETu right now, but space optimise by not adding
639 lots of code to speed up what is probably a rarish case. */
641 /* Left operand is defined, so is it IV? */
642 if (SvIV_please_nomg(svl)) {
643 if ((auvok = SvUOK(svl)))
646 const IV aiv = SvIVX(svl);
649 auvok = 1; /* Now acting as a sign flag. */
651 auv = (aiv == IV_MIN) ? (UV)aiv : (UV)(-aiv);
658 bool result_good = 0;
661 bool buvok = SvUOK(svr);
666 const IV biv = SvIVX(svr);
671 buv = (biv == IV_MIN) ? (UV)biv : (UV)(-biv);
673 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
674 else "IV" now, independent of how it came in.
675 if a, b represents positive, A, B negative, a maps to -A etc
680 all UV maths. negate result if A negative.
681 add if signs same, subtract if signs differ. */
687 /* Must get smaller */
693 /* result really should be -(auv-buv). as its negation
694 of true value, need to swap our result flag */
711 if (result <= (UV)IV_MIN)
712 SETi(result == (UV)IV_MIN
713 ? IV_MIN : -(IV)result);
715 /* result valid, but out of range for IV. */
720 } /* Overflow, drop through to NVs. */
725 NV value = SvNV_nomg(svr);
728 /* left operand is undef, treat as zero. + 0.0 is identity. */
732 SETn( value + SvNV_nomg(svl) );
738 /* also used for: pp_aelemfast_lex() */
743 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
744 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
745 const U32 lval = PL_op->op_flags & OPf_MOD;
746 SV** const svp = av_fetch(av, (I8)PL_op->op_private, lval);
747 SV *sv = (svp ? *svp : &PL_sv_undef);
749 if (UNLIKELY(!svp && lval))
750 DIE(aTHX_ PL_no_aelem, (int)(I8)PL_op->op_private);
753 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
763 do_join(TARG, *MARK, MARK, SP);
774 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
775 * will be enough to hold an OP*.
777 SV* const sv = sv_newmortal();
778 sv_upgrade(sv, SVt_PVLV);
780 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
783 XPUSHs(MUTABLE_SV(PL_op));
788 /* Oversized hot code. */
790 /* also used for: pp_say() */
794 dSP; dMARK; dORIGMARK;
798 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
802 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
805 if (MARK == ORIGMARK) {
806 /* If using default handle then we need to make space to
807 * pass object as 1st arg, so move other args up ...
811 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
814 return Perl_tied_method(aTHX_ SV_CONST(PRINT), mark - 1, MUTABLE_SV(io),
816 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
817 | (PL_op->op_type == OP_SAY
818 ? TIED_METHOD_SAY : 0)), sp - mark);
821 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
822 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
825 SETERRNO(EBADF,RMS_IFI);
828 else if (!(fp = IoOFP(io))) {
830 report_wrongway_fh(gv, '<');
833 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
837 SV * const ofs = GvSV(PL_ofsgv); /* $, */
839 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
841 if (!do_print(*MARK, fp))
845 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
846 if (!do_print(GvSV(PL_ofsgv), fp)) {
855 if (!do_print(*MARK, fp))
863 if (PL_op->op_type == OP_SAY) {
864 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
867 else if (PL_ors_sv && SvOK(PL_ors_sv))
868 if (!do_print(PL_ors_sv, fp)) /* $\ */
871 if (IoFLAGS(io) & IOf_FLUSH)
872 if (PerlIO_flush(fp) == EOF)
882 XPUSHs(&PL_sv_undef);
887 /* also used for: pp_rv2hv() */
888 /* also called directly by pp_lvavref */
893 const I32 gimme = GIMME_V;
894 static const char an_array[] = "an ARRAY";
895 static const char a_hash[] = "a HASH";
896 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV
897 || PL_op->op_type == OP_LVAVREF;
898 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
902 if (UNLIKELY(SvAMAGIC(sv))) {
903 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
906 if (UNLIKELY(SvTYPE(sv) != type))
907 /* diag_listed_as: Not an ARRAY reference */
908 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
909 else if (UNLIKELY(PL_op->op_flags & OPf_MOD
910 && PL_op->op_private & OPpLVAL_INTRO))
911 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
913 else if (UNLIKELY(SvTYPE(sv) != type)) {
916 if (!isGV_with_GP(sv)) {
917 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
925 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
926 if (PL_op->op_private & OPpLVAL_INTRO)
927 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
929 if (PL_op->op_flags & OPf_REF) {
933 else if (UNLIKELY(PL_op->op_private & OPpMAYBE_LVSUB)) {
934 const I32 flags = is_lvalue_sub();
935 if (flags && !(flags & OPpENTERSUB_INARGS)) {
936 if (gimme != G_ARRAY)
937 goto croak_cant_return;
944 AV *const av = MUTABLE_AV(sv);
945 /* The guts of pp_rv2av */
946 if (gimme == G_ARRAY) {
952 else if (gimme == G_SCALAR) {
954 const SSize_t maxarg = AvFILL(av) + 1;
958 /* The guts of pp_rv2hv */
959 if (gimme == G_ARRAY) { /* array wanted */
961 return Perl_do_kv(aTHX);
963 else if ((PL_op->op_private & OPpTRUEBOOL
964 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
965 && block_gimme() == G_VOID ))
966 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
967 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
968 else if (gimme == G_SCALAR) {
970 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
977 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
978 is_pp_rv2av ? "array" : "hash");
983 S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
985 PERL_ARGS_ASSERT_DO_ODDBALL;
988 if (ckWARN(WARN_MISC)) {
990 if (oddkey == firstkey &&
992 (SvTYPE(SvRV(*oddkey)) == SVt_PVAV ||
993 SvTYPE(SvRV(*oddkey)) == SVt_PVHV))
995 err = "Reference found where even-sized list expected";
998 err = "Odd number of elements in hash assignment";
999 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
1008 SV **lastlelem = PL_stack_sp;
1009 SV **lastrelem = PL_stack_base + POPMARK;
1010 SV **firstrelem = PL_stack_base + POPMARK + 1;
1011 SV **firstlelem = lastrelem + 1;
1025 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1027 if (gimme == G_ARRAY)
1028 lval = PL_op->op_flags & OPf_MOD || LVRET;
1030 /* If there's a common identifier on both sides we have to take
1031 * special care that assigning the identifier on the left doesn't
1032 * clobber a value on the right that's used later in the list.
1033 * Don't bother if LHS is just an empty hash or array.
1036 if ( (PL_op->op_private & OPpASSIGN_COMMON || PL_sawalias)
1038 firstlelem != lastlelem
1039 || ! ((sv = *firstlelem))
1041 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1042 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1043 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1046 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1047 for (relem = firstrelem; relem <= lastrelem; relem++) {
1048 if (LIKELY((sv = *relem))) {
1049 TAINT_NOT; /* Each item is independent */
1051 /* Dear TODO test in t/op/sort.t, I love you.
1052 (It's relying on a panic, not a "semi-panic" from newSVsv()
1053 and then an assertion failure below.) */
1054 if (UNLIKELY(SvIS_FREED(sv))) {
1055 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1058 /* Not newSVsv(), as it does not allow copy-on-write,
1059 resulting in wasteful copies. We need a second copy of
1060 a temp here, hence the SV_NOSTEAL. */
1061 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1072 while (LIKELY(lelem <= lastlelem)) {
1074 TAINT_NOT; /* Each item stands on its own, taintwise. */
1076 if (UNLIKELY(!sv)) {
1079 ASSUME(SvTYPE(sv) == SVt_PVAV);
1081 switch (SvTYPE(sv)) {
1083 ary = MUTABLE_AV(sv);
1084 magic = SvMAGICAL(ary) != 0;
1086 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1088 av_extend(ary, lastrelem - relem);
1090 while (relem <= lastrelem) { /* gobble up all the rest */
1093 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1094 if (LIKELY(!alias)) {
1096 sv_setsv_nomg(sv, *relem);
1101 DIE(aTHX_ "Assigned value is not a reference");
1102 if (SvTYPE(SvRV(*relem)) > SVt_PVLV)
1103 /* diag_listed_as: Assigned value is not %s reference */
1105 "Assigned value is not a SCALAR reference");
1107 *relem = sv_mortalcopy(*relem);
1108 /* XXX else check for weak refs? */
1109 sv = SvREFCNT_inc_simple_NN(SvRV(*relem));
1112 didstore = av_store(ary,i++,sv);
1121 if (UNLIKELY(PL_delaymagic & DM_ARRAY_ISA))
1122 SvSETMAGIC(MUTABLE_SV(ary));
1125 case SVt_PVHV: { /* normal hash */
1129 SV** topelem = relem;
1130 SV **firsthashrelem = relem;
1132 hash = MUTABLE_HV(sv);
1133 magic = SvMAGICAL(hash) != 0;
1135 odd = ((lastrelem - firsthashrelem)&1)? 0 : 1;
1136 if (UNLIKELY(odd)) {
1137 do_oddball(lastrelem, firsthashrelem);
1138 /* we have firstlelem to reuse, it's not needed anymore
1140 *(lastrelem+1) = &PL_sv_undef;
1144 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1146 while (LIKELY(relem < lastrelem+odd)) { /* gobble up all the rest */
1149 /* Copy the key if aassign is called in lvalue context,
1150 to avoid having the next op modify our rhs. Copy
1151 it also if it is gmagical, lest it make the
1152 hv_store_ent call below croak, leaking the value. */
1153 sv = lval || SvGMAGICAL(*relem)
1154 ? sv_mortalcopy(*relem)
1160 sv_setsv_nomg(tmpstr,*relem++); /* value */
1161 if (gimme == G_ARRAY) {
1162 if (hv_exists_ent(hash, sv, 0))
1163 /* key overwrites an existing entry */
1166 /* copy element back: possibly to an earlier
1167 * stack location if we encountered dups earlier,
1168 * possibly to a later stack location if odd */
1170 *topelem++ = tmpstr;
1173 didstore = hv_store_ent(hash,sv,tmpstr,0);
1175 if (!didstore) sv_2mortal(tmpstr);
1181 if (duplicates && gimme == G_ARRAY) {
1182 /* at this point we have removed the duplicate key/value
1183 * pairs from the stack, but the remaining values may be
1184 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1185 * the (a 2), but the stack now probably contains
1186 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1187 * obliterates the earlier key. So refresh all values. */
1188 lastrelem -= duplicates;
1189 relem = firsthashrelem;
1190 while (relem < lastrelem+odd) {
1192 he = hv_fetch_ent(hash, *relem++, 0, 0);
1193 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1196 if (odd && gimme == G_ARRAY) lastrelem++;
1200 if (SvIMMORTAL(sv)) {
1201 if (relem <= lastrelem)
1205 if (relem <= lastrelem) {
1207 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1208 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1211 packWARN(WARN_MISC),
1212 "Useless assignment to a temporary"
1214 sv_setsv(sv, *relem);
1218 sv_setsv(sv, &PL_sv_undef);
1223 if (UNLIKELY(PL_delaymagic & ~DM_DELAY)) {
1224 /* Will be used to set PL_tainting below */
1225 Uid_t tmp_uid = PerlProc_getuid();
1226 Uid_t tmp_euid = PerlProc_geteuid();
1227 Gid_t tmp_gid = PerlProc_getgid();
1228 Gid_t tmp_egid = PerlProc_getegid();
1230 /* XXX $> et al currently silently ignore failures */
1231 if (PL_delaymagic & DM_UID) {
1232 #ifdef HAS_SETRESUID
1234 setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1235 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1238 # ifdef HAS_SETREUID
1240 setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1241 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1));
1244 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1245 PERL_UNUSED_RESULT(setruid(PL_delaymagic_uid));
1246 PL_delaymagic &= ~DM_RUID;
1248 # endif /* HAS_SETRUID */
1250 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1251 PERL_UNUSED_RESULT(seteuid(PL_delaymagic_euid));
1252 PL_delaymagic &= ~DM_EUID;
1254 # endif /* HAS_SETEUID */
1255 if (PL_delaymagic & DM_UID) {
1256 if (PL_delaymagic_uid != PL_delaymagic_euid)
1257 DIE(aTHX_ "No setreuid available");
1258 PERL_UNUSED_RESULT(PerlProc_setuid(PL_delaymagic_uid));
1260 # endif /* HAS_SETREUID */
1261 #endif /* HAS_SETRESUID */
1263 tmp_uid = PerlProc_getuid();
1264 tmp_euid = PerlProc_geteuid();
1266 /* XXX $> et al currently silently ignore failures */
1267 if (PL_delaymagic & DM_GID) {
1268 #ifdef HAS_SETRESGID
1270 setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1271 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1274 # ifdef HAS_SETREGID
1276 setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1277 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1));
1280 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1281 PERL_UNUSED_RESULT(setrgid(PL_delaymagic_gid));
1282 PL_delaymagic &= ~DM_RGID;
1284 # endif /* HAS_SETRGID */
1286 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1287 PERL_UNUSED_RESULT(setegid(PL_delaymagic_egid));
1288 PL_delaymagic &= ~DM_EGID;
1290 # endif /* HAS_SETEGID */
1291 if (PL_delaymagic & DM_GID) {
1292 if (PL_delaymagic_gid != PL_delaymagic_egid)
1293 DIE(aTHX_ "No setregid available");
1294 PERL_UNUSED_RESULT(PerlProc_setgid(PL_delaymagic_gid));
1296 # endif /* HAS_SETREGID */
1297 #endif /* HAS_SETRESGID */
1299 tmp_gid = PerlProc_getgid();
1300 tmp_egid = PerlProc_getegid();
1302 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1303 #ifdef NO_TAINT_SUPPORT
1304 PERL_UNUSED_VAR(tmp_uid);
1305 PERL_UNUSED_VAR(tmp_euid);
1306 PERL_UNUSED_VAR(tmp_gid);
1307 PERL_UNUSED_VAR(tmp_egid);
1312 if (gimme == G_VOID)
1313 SP = firstrelem - 1;
1314 else if (gimme == G_SCALAR) {
1317 SETi(lastrelem - firstrelem + 1);
1321 /* note that in this case *firstlelem may have been overwritten
1322 by sv_undef in the odd hash case */
1325 SP = firstrelem + (lastlelem - firstlelem);
1326 lelem = firstlelem + (relem - firstrelem);
1328 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1338 PMOP * const pm = cPMOP;
1339 REGEXP * rx = PM_GETRE(pm);
1340 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1341 SV * const rv = sv_newmortal();
1345 SvUPGRADE(rv, SVt_IV);
1346 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1347 loathe to use it here, but it seems to be the right fix. Or close.
1348 The key part appears to be that it's essential for pp_qr to return a new
1349 object (SV), which implies that there needs to be an effective way to
1350 generate a new SV from the existing SV that is pre-compiled in the
1352 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1355 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1356 if (UNLIKELY((cv = *cvp) && CvCLONE(*cvp))) {
1357 *cvp = cv_clone(cv);
1358 SvREFCNT_dec_NN(cv);
1362 HV *const stash = gv_stashsv(pkg, GV_ADD);
1363 SvREFCNT_dec_NN(pkg);
1364 (void)sv_bless(rv, stash);
1367 if (UNLIKELY(RX_ISTAINTED(rx))) {
1369 SvTAINTED_on(SvRV(rv));
1382 SSize_t curpos = 0; /* initial pos() or current $+[0] */
1385 const char *truebase; /* Start of string */
1386 REGEXP *rx = PM_GETRE(pm);
1388 const I32 gimme = GIMME_V;
1390 const I32 oldsave = PL_savestack_ix;
1391 I32 had_zerolen = 0;
1394 if (PL_op->op_flags & OPf_STACKED)
1403 PUTBACK; /* EVAL blocks need stack_sp. */
1404 /* Skip get-magic if this is a qr// clone, because regcomp has
1406 truebase = ReANY(rx)->mother_re
1407 ? SvPV_nomg_const(TARG, len)
1408 : SvPV_const(TARG, len);
1410 DIE(aTHX_ "panic: pp_match");
1411 strend = truebase + len;
1412 rxtainted = (RX_ISTAINTED(rx) ||
1413 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1416 /* We need to know this in case we fail out early - pos() must be reset */
1417 global = dynpm->op_pmflags & PMf_GLOBAL;
1419 /* PMdf_USED is set after a ?? matches once */
1422 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1424 pm->op_pmflags & PMf_USED
1427 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1431 /* empty pattern special-cased to use last successful pattern if
1432 possible, except for qr// */
1433 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1439 if (RX_MINLEN(rx) >= 0 && (STRLEN)RX_MINLEN(rx) > len) {
1440 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
1441 UVuf" < %"IVdf")\n",
1442 (UV)len, (IV)RX_MINLEN(rx)));
1446 /* get pos() if //g */
1448 mg = mg_find_mglob(TARG);
1449 if (mg && mg->mg_len >= 0) {
1450 curpos = MgBYTEPOS(mg, TARG, truebase, len);
1451 /* last time pos() was set, it was zero-length match */
1452 if (mg->mg_flags & MGf_MINMATCH)
1457 #ifdef PERL_SAWAMPERSAND
1460 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1461 || (dynpm->op_pmflags & PMf_KEEPCOPY)
1465 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1466 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1467 * only on the first iteration. Therefore we need to copy $' as well
1468 * as $&, to make the rest of the string available for captures in
1469 * subsequent iterations */
1470 if (! (global && gimme == G_ARRAY))
1471 r_flags |= REXEC_COPY_SKIP_POST;
1473 #ifdef PERL_SAWAMPERSAND
1474 if (dynpm->op_pmflags & PMf_KEEPCOPY)
1475 /* handle KEEPCOPY in pmop but not rx, eg $r=qr/a/; /$r/p */
1476 r_flags &= ~(REXEC_COPY_SKIP_PRE|REXEC_COPY_SKIP_POST);
1483 s = truebase + curpos;
1485 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1486 had_zerolen, TARG, NULL, r_flags))
1490 if (dynpm->op_pmflags & PMf_ONCE)
1492 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1494 dynpm->op_pmflags |= PMf_USED;
1498 RX_MATCH_TAINTED_on(rx);
1499 TAINT_IF(RX_MATCH_TAINTED(rx));
1503 if (global && (gimme != G_ARRAY || (dynpm->op_pmflags & PMf_CONTINUE))) {
1505 mg = sv_magicext_mglob(TARG);
1506 MgBYTEPOS_set(mg, TARG, truebase, RX_OFFS(rx)[0].end);
1507 if (RX_ZERO_LEN(rx))
1508 mg->mg_flags |= MGf_MINMATCH;
1510 mg->mg_flags &= ~MGf_MINMATCH;
1513 if ((!RX_NPARENS(rx) && !global) || gimme != G_ARRAY) {
1514 LEAVE_SCOPE(oldsave);
1518 /* push captures on stack */
1521 const I32 nparens = RX_NPARENS(rx);
1522 I32 i = (global && !nparens) ? 1 : 0;
1524 SPAGAIN; /* EVAL blocks could move the stack. */
1525 EXTEND(SP, nparens + i);
1526 EXTEND_MORTAL(nparens + i);
1527 for (i = !i; i <= nparens; i++) {
1528 PUSHs(sv_newmortal());
1529 if (LIKELY((RX_OFFS(rx)[i].start != -1)
1530 && RX_OFFS(rx)[i].end != -1 ))
1532 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1533 const char * const s = RX_OFFS(rx)[i].start + truebase;
1534 if (UNLIKELY(RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0
1535 || len < 0 || len > strend - s))
1536 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1537 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1538 (long) i, (long) RX_OFFS(rx)[i].start,
1539 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1540 sv_setpvn(*SP, s, len);
1541 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1546 curpos = (UV)RX_OFFS(rx)[0].end;
1547 had_zerolen = RX_ZERO_LEN(rx);
1548 PUTBACK; /* EVAL blocks may use stack */
1549 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1552 LEAVE_SCOPE(oldsave);
1555 NOT_REACHED; /* NOTREACHED */
1558 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1560 mg = mg_find_mglob(TARG);
1564 LEAVE_SCOPE(oldsave);
1565 if (gimme == G_ARRAY)
1571 Perl_do_readline(pTHX)
1573 dSP; dTARGETSTACKED;
1578 IO * const io = GvIO(PL_last_in_gv);
1579 const I32 type = PL_op->op_type;
1580 const I32 gimme = GIMME_V;
1583 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1585 Perl_tied_method(aTHX_ SV_CONST(READLINE), SP, MUTABLE_SV(io), mg, gimme, 0);
1586 if (gimme == G_SCALAR) {
1588 SvSetSV_nosteal(TARG, TOPs);
1598 if (IoFLAGS(io) & IOf_ARGV) {
1599 if (IoFLAGS(io) & IOf_START) {
1601 if (av_tindex(GvAVn(PL_last_in_gv)) < 0) {
1602 IoFLAGS(io) &= ~IOf_START;
1603 do_open6(PL_last_in_gv, "-", 1, NULL, NULL, 0);
1604 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1605 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1606 SvSETMAGIC(GvSV(PL_last_in_gv));
1611 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1612 if (!fp) { /* Note: fp != IoIFP(io) */
1613 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1616 else if (type == OP_GLOB)
1617 fp = Perl_start_glob(aTHX_ POPs, io);
1619 else if (type == OP_GLOB)
1621 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1622 report_wrongway_fh(PL_last_in_gv, '>');
1626 if ((!io || !(IoFLAGS(io) & IOf_START))
1627 && ckWARN(WARN_CLOSED)
1630 report_evil_fh(PL_last_in_gv);
1632 if (gimme == G_SCALAR) {
1633 /* undef TARG, and push that undefined value */
1634 if (type != OP_RCATLINE) {
1635 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1643 if (gimme == G_SCALAR) {
1645 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1648 if (type == OP_RCATLINE)
1649 SvPV_force_nomg_nolen(sv);
1653 else if (isGV_with_GP(sv)) {
1654 SvPV_force_nomg_nolen(sv);
1656 SvUPGRADE(sv, SVt_PV);
1657 tmplen = SvLEN(sv); /* remember if already alloced */
1658 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1659 /* try short-buffering it. Please update t/op/readline.t
1660 * if you change the growth length.
1665 if (type == OP_RCATLINE && SvOK(sv)) {
1667 SvPV_force_nomg_nolen(sv);
1673 sv = sv_2mortal(newSV(80));
1677 /* This should not be marked tainted if the fp is marked clean */
1678 #define MAYBE_TAINT_LINE(io, sv) \
1679 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1684 /* delay EOF state for a snarfed empty file */
1685 #define SNARF_EOF(gimme,rs,io,sv) \
1686 (gimme != G_SCALAR || SvCUR(sv) \
1687 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1691 if (!sv_gets(sv, fp, offset)
1693 || SNARF_EOF(gimme, PL_rs, io, sv)
1694 || PerlIO_error(fp)))
1696 PerlIO_clearerr(fp);
1697 if (IoFLAGS(io) & IOf_ARGV) {
1698 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1701 (void)do_close(PL_last_in_gv, FALSE);
1703 else if (type == OP_GLOB) {
1704 if (!do_close(PL_last_in_gv, FALSE)) {
1705 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1706 "glob failed (child exited with status %d%s)",
1707 (int)(STATUS_CURRENT >> 8),
1708 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1711 if (gimme == G_SCALAR) {
1712 if (type != OP_RCATLINE) {
1713 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1719 MAYBE_TAINT_LINE(io, sv);
1722 MAYBE_TAINT_LINE(io, sv);
1724 IoFLAGS(io) |= IOf_NOLINE;
1728 if (type == OP_GLOB) {
1731 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1732 char * const tmps = SvEND(sv) - 1;
1733 if (*tmps == *SvPVX_const(PL_rs)) {
1735 SvCUR_set(sv, SvCUR(sv) - 1);
1738 for (t1 = SvPVX_const(sv); *t1; t1++)
1740 if (strchr("*%?", *t1))
1742 if (strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1745 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1746 (void)POPs; /* Unmatched wildcard? Chuck it... */
1749 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1750 if (ckWARN(WARN_UTF8)) {
1751 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1752 const STRLEN len = SvCUR(sv) - offset;
1755 if (!is_utf8_string_loc(s, len, &f))
1756 /* Emulate :encoding(utf8) warning in the same case. */
1757 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1758 "utf8 \"\\x%02X\" does not map to Unicode",
1759 f < (U8*)SvEND(sv) ? *f : 0);
1762 if (gimme == G_ARRAY) {
1763 if (SvLEN(sv) - SvCUR(sv) > 20) {
1764 SvPV_shrink_to_cur(sv);
1766 sv = sv_2mortal(newSV(80));
1769 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1770 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1771 const STRLEN new_len
1772 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1773 SvPV_renew(sv, new_len);
1784 SV * const keysv = POPs;
1785 HV * const hv = MUTABLE_HV(POPs);
1786 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1787 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1789 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1790 bool preeminent = TRUE;
1792 if (SvTYPE(hv) != SVt_PVHV)
1799 /* If we can determine whether the element exist,
1800 * Try to preserve the existenceness of a tied hash
1801 * element by using EXISTS and DELETE if possible.
1802 * Fallback to FETCH and STORE otherwise. */
1803 if (SvCANEXISTDELETE(hv))
1804 preeminent = hv_exists_ent(hv, keysv, 0);
1807 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1808 svp = he ? &HeVAL(he) : NULL;
1810 if (!svp || !*svp || *svp == &PL_sv_undef) {
1814 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1816 lv = sv_newmortal();
1817 sv_upgrade(lv, SVt_PVLV);
1819 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1820 SvREFCNT_dec_NN(key2); /* sv_magic() increments refcount */
1821 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1827 if (HvNAME_get(hv) && isGV(*svp))
1828 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1829 else if (preeminent)
1830 save_helem_flags(hv, keysv, svp,
1831 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1833 SAVEHDELETE(hv, keysv);
1835 else if (PL_op->op_private & OPpDEREF) {
1836 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1840 sv = (svp && *svp ? *svp : &PL_sv_undef);
1841 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1842 * was to make C<local $tied{foo} = $tied{foo}> possible.
1843 * However, it seems no longer to be needed for that purpose, and
1844 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1845 * would loop endlessly since the pos magic is getting set on the
1846 * mortal copy and lost. However, the copy has the effect of
1847 * triggering the get magic, and losing it altogether made things like
1848 * c<$tied{foo};> in void context no longer do get magic, which some
1849 * code relied on. Also, delayed triggering of magic on @+ and friends
1850 * meant the original regex may be out of scope by now. So as a
1851 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1852 * being called too many times). */
1853 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1860 /* a stripped-down version of Perl_softref2xv() for use by
1861 * pp_multideref(), which doesn't use PL_op->op_flags */
1864 S_softref2xv_lite(pTHX_ SV *const sv, const char *const what,
1867 if (PL_op->op_private & HINT_STRICT_REFS) {
1869 Perl_die(aTHX_ PL_no_symref_sv, sv,
1870 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""), what);
1872 Perl_die(aTHX_ PL_no_usym, what);
1875 Perl_die(aTHX_ PL_no_usym, what);
1876 return gv_fetchsv_nomg(sv, GV_ADD, type);
1880 /* handle one or more derefs and array/hash indexings, e.g.
1881 * $h->{foo} or $a[0]{$key}[$i] or f()->[1]
1883 * op_aux points to an array of unions of UV / IV / SV* / PADOFFSET.
1884 * Each of these either contains an action, or an argument, such as
1885 * a UV to use as an array index, or a lexical var to retrieve.
1886 * In fact, several actions re stored per UV; we keep shifting new actions
1887 * of the one UV, and only reload when it becomes zero.
1892 SV *sv = NULL; /* init to avoid spurious 'may be used uninitialized' */
1893 UNOP_AUX_item *items = cUNOP_AUXx(PL_op)->op_aux;
1894 UV actions = items->uv;
1897 /* this tells find_uninit_var() where we're up to */
1898 PL_multideref_pc = items;
1901 /* there are three main classes of action; the first retrieve
1902 * the initial AV or HV from a variable or the stack; the second
1903 * does the equivalent of an unrolled (/DREFAV, rv2av, aelem),
1904 * the third an unrolled (/DREFHV, rv2hv, helem).
1906 switch (actions & MDEREF_ACTION_MASK) {
1909 actions = (++items)->uv;
1912 case MDEREF_AV_padav_aelem: /* $lex[...] */
1913 sv = PAD_SVl((++items)->pad_offset);
1916 case MDEREF_AV_gvav_aelem: /* $pkg[...] */
1917 sv = UNOP_AUX_item_sv(++items);
1918 assert(isGV_with_GP(sv));
1919 sv = (SV*)GvAVn((GV*)sv);
1922 case MDEREF_AV_pop_rv2av_aelem: /* expr->[...] */
1927 goto do_AV_rv2av_aelem;
1930 case MDEREF_AV_gvsv_vivify_rv2av_aelem: /* $pkg->[...] */
1931 sv = UNOP_AUX_item_sv(++items);
1932 assert(isGV_with_GP(sv));
1933 sv = GvSVn((GV*)sv);
1934 goto do_AV_vivify_rv2av_aelem;
1936 case MDEREF_AV_padsv_vivify_rv2av_aelem: /* $lex->[...] */
1937 sv = PAD_SVl((++items)->pad_offset);
1940 do_AV_vivify_rv2av_aelem:
1941 case MDEREF_AV_vivify_rv2av_aelem: /* vivify, ->[...] */
1942 /* this is the OPpDEREF action normally found at the end of
1943 * ops like aelem, helem, rv2sv */
1944 sv = vivify_ref(sv, OPpDEREF_AV);
1948 /* this is basically a copy of pp_rv2av when it just has the
1951 if (LIKELY(SvROK(sv))) {
1952 if (UNLIKELY(SvAMAGIC(sv))) {
1953 sv = amagic_deref_call(sv, to_av_amg);
1956 if (UNLIKELY(SvTYPE(sv) != SVt_PVAV))
1957 DIE(aTHX_ "Not an ARRAY reference");
1959 else if (SvTYPE(sv) != SVt_PVAV) {
1960 if (!isGV_with_GP(sv))
1961 sv = (SV*)S_softref2xv_lite(aTHX_ sv, "an ARRAY", SVt_PVAV);
1962 sv = MUTABLE_SV(GvAVn((GV*)sv));
1968 /* retrieve the key; this may be either a lexical or package
1969 * var (whose index/ptr is stored as an item) or a signed
1970 * integer constant stored as an item.
1973 IV elem = 0; /* to shut up stupid compiler warnings */
1976 assert(SvTYPE(sv) == SVt_PVAV);
1978 switch (actions & MDEREF_INDEX_MASK) {
1979 case MDEREF_INDEX_none:
1981 case MDEREF_INDEX_const:
1982 elem = (++items)->iv;
1984 case MDEREF_INDEX_padsv:
1985 elemsv = PAD_SVl((++items)->pad_offset);
1987 case MDEREF_INDEX_gvsv:
1988 elemsv = UNOP_AUX_item_sv(++items);
1989 assert(isGV_with_GP(elemsv));
1990 elemsv = GvSVn((GV*)elemsv);
1992 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv)
1993 && ckWARN(WARN_MISC)))
1994 Perl_warner(aTHX_ packWARN(WARN_MISC),
1995 "Use of reference \"%"SVf"\" as array index",
1997 /* the only time that S_find_uninit_var() needs this
1998 * is to determine which index value triggered the
1999 * undef warning. So just update it here. Note that
2000 * since we don't save and restore this var (e.g. for
2001 * tie or overload execution), its value will be
2002 * meaningless apart from just here */
2003 PL_multideref_pc = items;
2004 elem = SvIV(elemsv);
2009 /* this is basically a copy of pp_aelem with OPpDEREF skipped */
2011 if (!(actions & MDEREF_FLAG_last)) {
2012 SV** svp = av_fetch((AV*)sv, elem, 1);
2013 if (!svp || ! (sv=*svp))
2014 DIE(aTHX_ PL_no_aelem, elem);
2018 if (PL_op->op_private &
2019 (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE))
2021 if (PL_op->op_private & OPpMULTIDEREF_EXISTS) {
2022 sv = av_exists((AV*)sv, elem) ? &PL_sv_yes : &PL_sv_no;
2025 I32 discard = (GIMME_V == G_VOID) ? G_DISCARD : 0;
2026 sv = av_delete((AV*)sv, elem, discard);
2034 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2035 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2036 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2037 bool preeminent = TRUE;
2038 AV *const av = (AV*)sv;
2041 if (UNLIKELY(localizing)) {
2045 /* If we can determine whether the element exist,
2046 * Try to preserve the existenceness of a tied array
2047 * element by using EXISTS and DELETE if possible.
2048 * Fallback to FETCH and STORE otherwise. */
2049 if (SvCANEXISTDELETE(av))
2050 preeminent = av_exists(av, elem);
2053 svp = av_fetch(av, elem, lval && !defer);
2056 if (!svp || !(sv = *svp)) {
2059 DIE(aTHX_ PL_no_aelem, elem);
2060 len = av_tindex(av);
2061 sv = sv_2mortal(newSVavdefelem(av,
2062 /* Resolve a negative index now, unless it points
2063 * before the beginning of the array, in which
2064 * case record it for error reporting in
2065 * magic_setdefelem. */
2066 elem < 0 && len + elem >= 0
2067 ? len + elem : elem, 1));
2070 if (UNLIKELY(localizing)) {
2072 save_aelem(av, elem, svp);
2073 sv = *svp; /* may have changed */
2076 SAVEADELETE(av, elem);
2081 sv = (svp ? *svp : &PL_sv_undef);
2082 /* see note in pp_helem() */
2083 if (SvRMAGICAL(av) && SvGMAGICAL(sv))
2100 case MDEREF_HV_padhv_helem: /* $lex{...} */
2101 sv = PAD_SVl((++items)->pad_offset);
2104 case MDEREF_HV_gvhv_helem: /* $pkg{...} */
2105 sv = UNOP_AUX_item_sv(++items);
2106 assert(isGV_with_GP(sv));
2107 sv = (SV*)GvHVn((GV*)sv);
2110 case MDEREF_HV_pop_rv2hv_helem: /* expr->{...} */
2115 goto do_HV_rv2hv_helem;
2118 case MDEREF_HV_gvsv_vivify_rv2hv_helem: /* $pkg->{...} */
2119 sv = UNOP_AUX_item_sv(++items);
2120 assert(isGV_with_GP(sv));
2121 sv = GvSVn((GV*)sv);
2122 goto do_HV_vivify_rv2hv_helem;
2124 case MDEREF_HV_padsv_vivify_rv2hv_helem: /* $lex->{...} */
2125 sv = PAD_SVl((++items)->pad_offset);
2128 do_HV_vivify_rv2hv_helem:
2129 case MDEREF_HV_vivify_rv2hv_helem: /* vivify, ->{...} */
2130 /* this is the OPpDEREF action normally found at the end of
2131 * ops like aelem, helem, rv2sv */
2132 sv = vivify_ref(sv, OPpDEREF_HV);
2136 /* this is basically a copy of pp_rv2hv when it just has the
2137 * sKR/1 flags (and pp_rv2hv is aliased to pp_rv2av) */
2140 if (LIKELY(SvROK(sv))) {
2141 if (UNLIKELY(SvAMAGIC(sv))) {
2142 sv = amagic_deref_call(sv, to_hv_amg);
2145 if (UNLIKELY(SvTYPE(sv) != SVt_PVHV))
2146 DIE(aTHX_ "Not a HASH reference");
2148 else if (SvTYPE(sv) != SVt_PVHV) {
2149 if (!isGV_with_GP(sv))
2150 sv = (SV*)S_softref2xv_lite(aTHX_ sv, "a HASH", SVt_PVHV);
2151 sv = MUTABLE_SV(GvHVn((GV*)sv));
2157 /* retrieve the key; this may be either a lexical / package
2158 * var or a string constant, whose index/ptr is stored as an
2161 SV *keysv = NULL; /* to shut up stupid compiler warnings */
2163 assert(SvTYPE(sv) == SVt_PVHV);
2165 switch (actions & MDEREF_INDEX_MASK) {
2166 case MDEREF_INDEX_none:
2169 case MDEREF_INDEX_const:
2170 keysv = UNOP_AUX_item_sv(++items);
2173 case MDEREF_INDEX_padsv:
2174 keysv = PAD_SVl((++items)->pad_offset);
2177 case MDEREF_INDEX_gvsv:
2178 keysv = UNOP_AUX_item_sv(++items);
2179 keysv = GvSVn((GV*)keysv);
2183 /* see comment above about setting this var */
2184 PL_multideref_pc = items;
2187 /* ensure that candidate CONSTs have been HEKified */
2188 assert( ((actions & MDEREF_INDEX_MASK) != MDEREF_INDEX_const)
2189 || SvTYPE(keysv) >= SVt_PVMG
2192 || SvIsCOW_shared_hash(keysv));
2194 /* this is basically a copy of pp_helem with OPpDEREF skipped */
2196 if (!(actions & MDEREF_FLAG_last)) {
2197 HE *he = hv_fetch_ent((HV*)sv, keysv, 1, 0);
2198 if (!he || !(sv=HeVAL(he)) || sv == &PL_sv_undef)
2199 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
2203 if (PL_op->op_private &
2204 (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE))
2206 if (PL_op->op_private & OPpMULTIDEREF_EXISTS) {
2207 sv = hv_exists_ent((HV*)sv, keysv, 0)
2208 ? &PL_sv_yes : &PL_sv_no;
2211 I32 discard = (GIMME_V == G_VOID) ? G_DISCARD : 0;
2212 sv = hv_delete_ent((HV*)sv, keysv, discard, 0);
2220 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2221 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2222 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2223 bool preeminent = TRUE;
2225 HV * const hv = (HV*)sv;
2228 if (UNLIKELY(localizing)) {
2232 /* If we can determine whether the element exist,
2233 * Try to preserve the existenceness of a tied hash
2234 * element by using EXISTS and DELETE if possible.
2235 * Fallback to FETCH and STORE otherwise. */
2236 if (SvCANEXISTDELETE(hv))
2237 preeminent = hv_exists_ent(hv, keysv, 0);
2240 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
2241 svp = he ? &HeVAL(he) : NULL;
2245 if (!svp || !(sv = *svp) || sv == &PL_sv_undef) {
2249 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
2250 lv = sv_newmortal();
2251 sv_upgrade(lv, SVt_PVLV);
2253 sv_magic(lv, key2 = newSVsv(keysv),
2254 PERL_MAGIC_defelem, NULL, 0);
2255 /* sv_magic() increments refcount */
2256 SvREFCNT_dec_NN(key2);
2257 LvTARG(lv) = SvREFCNT_inc_simple(hv);
2263 if (HvNAME_get(hv) && isGV(sv))
2264 save_gp(MUTABLE_GV(sv),
2265 !(PL_op->op_flags & OPf_SPECIAL));
2266 else if (preeminent) {
2267 save_helem_flags(hv, keysv, svp,
2268 (PL_op->op_flags & OPf_SPECIAL)
2269 ? 0 : SAVEf_SETMAGIC);
2270 sv = *svp; /* may have changed */
2273 SAVEHDELETE(hv, keysv);
2278 sv = (svp && *svp ? *svp : &PL_sv_undef);
2279 /* see note in pp_helem() */
2280 if (SvRMAGICAL(hv) && SvGMAGICAL(sv))
2289 actions >>= MDEREF_SHIFT;
2303 cx = &cxstack[cxstack_ix];
2304 itersvp = CxITERVAR(cx);
2306 switch (CxTYPE(cx)) {
2308 case CXt_LOOP_LAZYSV: /* string increment */
2310 SV* cur = cx->blk_loop.state_u.lazysv.cur;
2311 SV *end = cx->blk_loop.state_u.lazysv.end;
2312 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
2313 It has SvPVX of "" and SvCUR of 0, which is what we want. */
2315 const char *max = SvPV_const(end, maxlen);
2316 if (UNLIKELY(SvNIOK(cur) || SvCUR(cur) > maxlen))
2320 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
2321 /* safe to reuse old SV */
2322 sv_setsv(oldsv, cur);
2326 /* we need a fresh SV every time so that loop body sees a
2327 * completely new SV for closures/references to work as
2329 *itersvp = newSVsv(cur);
2330 SvREFCNT_dec_NN(oldsv);
2332 if (strEQ(SvPVX_const(cur), max))
2333 sv_setiv(cur, 0); /* terminate next time */
2339 case CXt_LOOP_LAZYIV: /* integer increment */
2341 IV cur = cx->blk_loop.state_u.lazyiv.cur;
2342 if (UNLIKELY(cur > cx->blk_loop.state_u.lazyiv.end))
2346 /* don't risk potential race */
2347 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
2348 /* safe to reuse old SV */
2349 sv_setiv(oldsv, cur);
2353 /* we need a fresh SV every time so that loop body sees a
2354 * completely new SV for closures/references to work as they
2356 *itersvp = newSViv(cur);
2357 SvREFCNT_dec_NN(oldsv);
2360 if (UNLIKELY(cur == IV_MAX)) {
2361 /* Handle end of range at IV_MAX */
2362 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
2364 ++cx->blk_loop.state_u.lazyiv.cur;
2368 case CXt_LOOP_FOR: /* iterate array */
2371 AV *av = cx->blk_loop.state_u.ary.ary;
2373 bool av_is_stack = FALSE;
2380 if (PL_op->op_private & OPpITER_REVERSED) {
2381 ix = --cx->blk_loop.state_u.ary.ix;
2382 if (UNLIKELY(ix <= (av_is_stack ? cx->blk_loop.resetsp : -1)))
2386 ix = ++cx->blk_loop.state_u.ary.ix;
2387 if (UNLIKELY(ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av))))
2391 if (UNLIKELY(SvMAGICAL(av) || AvREIFY(av))) {
2392 SV * const * const svp = av_fetch(av, ix, FALSE);
2393 sv = svp ? *svp : NULL;
2396 sv = AvARRAY(av)[ix];
2399 if (UNLIKELY(cx->cx_type & CXp_FOR_LVREF)) {
2400 SvSetMagicSV(*itersvp, sv);
2405 if (UNLIKELY(SvIS_FREED(sv))) {
2407 Perl_croak(aTHX_ "Use of freed value in iteration");
2414 SvREFCNT_inc_simple_void_NN(sv);
2417 else if (!av_is_stack) {
2418 sv = newSVavdefelem(av, ix, 0);
2425 SvREFCNT_dec(oldsv);
2430 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
2436 A description of how taint works in pattern matching and substitution.
2438 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2439 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2441 While the pattern is being assembled/concatenated and then compiled,
2442 PL_tainted will get set (via TAINT_set) if any component of the pattern
2443 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2444 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2445 TAINT_get). It will also be set if any component of the pattern matches
2446 based on locale-dependent behavior.
2448 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2449 the pattern is marked as tainted. This means that subsequent usage, such
2450 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2451 on the new pattern too.
2453 RXf_TAINTED_SEEN is used post-execution by the get magic code
2454 of $1 et al to indicate whether the returned value should be tainted.
2455 It is the responsibility of the caller of the pattern (i.e. pp_match,
2456 pp_subst etc) to set this flag for any other circumstances where $1 needs
2459 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2461 There are three possible sources of taint
2463 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2464 * the replacement string (or expression under /e)
2466 There are four destinations of taint and they are affected by the sources
2467 according to the rules below:
2469 * the return value (not including /r):
2470 tainted by the source string and pattern, but only for the
2471 number-of-iterations case; boolean returns aren't tainted;
2472 * the modified string (or modified copy under /r):
2473 tainted by the source string, pattern, and replacement strings;
2475 tainted by the pattern, and under 'use re "taint"', by the source
2477 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2478 should always be unset before executing subsequent code.
2480 The overall action of pp_subst is:
2482 * at the start, set bits in rxtainted indicating the taint status of
2483 the various sources.
2485 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2486 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2487 pattern has subsequently become tainted via locale ops.
2489 * If control is being passed to pp_substcont to execute a /e block,
2490 save rxtainted in the CXt_SUBST block, for future use by
2493 * Whenever control is being returned to perl code (either by falling
2494 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2495 use the flag bits in rxtainted to make all the appropriate types of
2496 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2497 et al will appear tainted.
2499 pp_match is just a simpler version of the above.
2515 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2516 See "how taint works" above */
2519 REGEXP *rx = PM_GETRE(pm);
2521 int force_on_match = 0;
2522 const I32 oldsave = PL_savestack_ix;
2524 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2529 /* known replacement string? */
2530 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2534 if (PL_op->op_flags & OPf_STACKED)
2543 SvGETMAGIC(TARG); /* must come before cow check */
2545 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2546 because they make integers such as 256 "false". */
2547 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2550 sv_force_normal_flags(TARG,0);
2552 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2553 && (SvREADONLY(TARG)
2554 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2555 || SvTYPE(TARG) > SVt_PVLV)
2556 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2557 Perl_croak_no_modify();
2560 orig = SvPV_nomg(TARG, len);
2561 /* note we don't (yet) force the var into being a string; if we fail
2562 * to match, we leave as-is; on successful match howeverm, we *will*
2563 * coerce into a string, then repeat the match */
2564 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2567 /* only replace once? */
2568 once = !(rpm->op_pmflags & PMf_GLOBAL);
2570 /* See "how taint works" above */
2573 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2574 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2575 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2576 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2577 ? SUBST_TAINT_BOOLRET : 0));
2583 DIE(aTHX_ "panic: pp_subst, pm=%p, orig=%p", pm, orig);
2585 strend = orig + len;
2586 slen = DO_UTF8(TARG) ? utf8_length((U8*)orig, (U8*)strend) : len;
2587 maxiters = 2 * slen + 10; /* We can match twice at each
2588 position, once with zero-length,
2589 second time with non-zero. */
2591 if (!RX_PRELEN(rx) && PL_curpm
2592 && !ReANY(rx)->mother_re) {
2597 #ifdef PERL_SAWAMPERSAND
2598 r_flags = ( RX_NPARENS(rx)
2600 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2601 || (rpm->op_pmflags & PMf_KEEPCOPY)
2606 r_flags = REXEC_COPY_STR;
2609 if (!CALLREGEXEC(rx, orig, strend, orig, 0, TARG, NULL, r_flags))
2612 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2613 LEAVE_SCOPE(oldsave);
2618 /* known replacement string? */
2620 /* replacement needing upgrading? */
2621 if (DO_UTF8(TARG) && !doutf8) {
2622 nsv = sv_newmortal();
2625 sv_recode_to_utf8(nsv, _get_encoding());
2627 sv_utf8_upgrade(nsv);
2628 c = SvPV_const(nsv, clen);
2632 c = SvPV_const(dstr, clen);
2633 doutf8 = DO_UTF8(dstr);
2636 if (SvTAINTED(dstr))
2637 rxtainted |= SUBST_TAINT_REPL;
2644 /* can do inplace substitution? */
2649 && (I32)clen <= RX_MINLENRET(rx)
2651 || !(r_flags & REXEC_COPY_STR)
2652 || (!SvGMAGICAL(dstr) && !(RX_EXTFLAGS(rx) & RXf_EVAL_SEEN))
2654 && !(RX_EXTFLAGS(rx) & RXf_NO_INPLACE_SUBST)
2655 && (!doutf8 || SvUTF8(TARG))
2656 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2660 if (SvIsCOW(TARG)) {
2661 if (!force_on_match)
2663 assert(SvVOK(TARG));
2666 if (force_on_match) {
2667 /* redo the first match, this time with the orig var
2668 * forced into being a string */
2670 orig = SvPV_force_nomg(TARG, len);
2676 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2677 rxtainted |= SUBST_TAINT_PAT;
2678 m = orig + RX_OFFS(rx)[0].start;
2679 d = orig + RX_OFFS(rx)[0].end;
2681 if (m - s > strend - d) { /* faster to shorten from end */
2684 Copy(c, m, clen, char);
2689 Move(d, m, i, char);
2693 SvCUR_set(TARG, m - s);
2695 else { /* faster from front */
2699 Move(s, d - i, i, char);
2702 Copy(c, d, clen, char);
2709 d = s = RX_OFFS(rx)[0].start + orig;
2712 if (UNLIKELY(iters++ > maxiters))
2713 DIE(aTHX_ "Substitution loop");
2714 if (UNLIKELY(RX_MATCH_TAINTED(rx))) /* run time pattern taint, eg locale */
2715 rxtainted |= SUBST_TAINT_PAT;
2716 m = RX_OFFS(rx)[0].start + orig;
2719 Move(s, d, i, char);
2723 Copy(c, d, clen, char);
2726 s = RX_OFFS(rx)[0].end + orig;
2727 } while (CALLREGEXEC(rx, s, strend, orig,
2728 s == m, /* don't match same null twice */
2730 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2733 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2734 Move(s, d, i+1, char); /* include the NUL */
2744 if (force_on_match) {
2745 /* redo the first match, this time with the orig var
2746 * forced into being a string */
2748 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2749 /* I feel that it should be possible to avoid this mortal copy
2750 given that the code below copies into a new destination.
2751 However, I suspect it isn't worth the complexity of
2752 unravelling the C<goto force_it> for the small number of
2753 cases where it would be viable to drop into the copy code. */
2754 TARG = sv_2mortal(newSVsv(TARG));
2756 orig = SvPV_force_nomg(TARG, len);
2762 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2763 rxtainted |= SUBST_TAINT_PAT;
2765 s = RX_OFFS(rx)[0].start + orig;
2766 dstr = newSVpvn_flags(orig, s-orig,
2767 SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2772 /* note that a whole bunch of local vars are saved here for
2773 * use by pp_substcont: here's a list of them in case you're
2774 * searching for places in this sub that uses a particular var:
2775 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2776 * s m strend rx once */
2778 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2782 if (UNLIKELY(iters++ > maxiters))
2783 DIE(aTHX_ "Substitution loop");
2784 if (UNLIKELY(RX_MATCH_TAINTED(rx)))
2785 rxtainted |= SUBST_TAINT_PAT;
2786 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2788 char *old_orig = orig;
2789 assert(RX_SUBOFFSET(rx) == 0);
2791 orig = RX_SUBBEG(rx);
2792 s = orig + (old_s - old_orig);
2793 strend = s + (strend - old_s);
2795 m = RX_OFFS(rx)[0].start + orig;
2796 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2797 s = RX_OFFS(rx)[0].end + orig;
2799 /* replacement already stringified */
2801 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2806 if (!nsv) nsv = sv_newmortal();
2807 sv_copypv(nsv, repl);
2808 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, _get_encoding());
2809 sv_catsv(dstr, nsv);
2811 else sv_catsv(dstr, repl);
2812 if (UNLIKELY(SvTAINTED(repl)))
2813 rxtainted |= SUBST_TAINT_REPL;
2817 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2819 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2820 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2822 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2823 /* From here on down we're using the copy, and leaving the original
2830 /* The match may make the string COW. If so, brilliant, because
2831 that's just saved us one malloc, copy and free - the regexp has
2832 donated the old buffer, and we malloc an entirely new one, rather
2833 than the regexp malloc()ing a buffer and copying our original,
2834 only for us to throw it away here during the substitution. */
2835 if (SvIsCOW(TARG)) {
2836 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2842 SvPV_set(TARG, SvPVX(dstr));
2843 SvCUR_set(TARG, SvCUR(dstr));
2844 SvLEN_set(TARG, SvLEN(dstr));
2845 SvFLAGS(TARG) |= SvUTF8(dstr);
2846 SvPV_set(dstr, NULL);
2853 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2854 (void)SvPOK_only_UTF8(TARG);
2857 /* See "how taint works" above */
2859 if ((rxtainted & SUBST_TAINT_PAT) ||
2860 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2861 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2863 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2865 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2866 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2868 SvTAINTED_on(TOPs); /* taint return value */
2870 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2872 /* needed for mg_set below */
2874 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2878 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2880 LEAVE_SCOPE(oldsave);
2889 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2890 ++*PL_markstack_ptr;
2892 LEAVE_with_name("grep_item"); /* exit inner scope */
2895 if (UNLIKELY(PL_stack_base + *PL_markstack_ptr > SP)) {
2897 const I32 gimme = GIMME_V;
2899 LEAVE_with_name("grep"); /* exit outer scope */
2900 (void)POPMARK; /* pop src */
2901 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2902 (void)POPMARK; /* pop dst */
2903 SP = PL_stack_base + POPMARK; /* pop original mark */
2904 if (gimme == G_SCALAR) {
2905 if (PL_op->op_private & OPpGREP_LEX) {
2906 SV* const sv = sv_newmortal();
2907 sv_setiv(sv, items);
2915 else if (gimme == G_ARRAY)
2922 ENTER_with_name("grep_item"); /* enter inner scope */
2925 src = PL_stack_base[*PL_markstack_ptr];
2926 if (SvPADTMP(src)) {
2927 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
2931 if (PL_op->op_private & OPpGREP_LEX)
2932 PAD_SVl(PL_op->op_targ) = src;
2936 RETURNOP(cLOGOP->op_other);
2950 if (CxMULTICALL(&cxstack[cxstack_ix]))
2954 cxstack_ix++; /* temporarily protect top context */
2957 if (gimme == G_SCALAR) {
2959 if (LIKELY(MARK <= SP)) {
2960 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2961 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2962 && !SvMAGICAL(TOPs)) {
2963 *MARK = SvREFCNT_inc(TOPs);
2968 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2970 *MARK = sv_mortalcopy(sv);
2971 SvREFCNT_dec_NN(sv);
2974 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2975 && !SvMAGICAL(TOPs)) {
2979 *MARK = sv_mortalcopy(TOPs);
2983 *MARK = &PL_sv_undef;
2987 else if (gimme == G_ARRAY) {
2988 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2989 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2990 || SvMAGICAL(*MARK)) {
2991 *MARK = sv_mortalcopy(*MARK);
2992 TAINT_NOT; /* Each item is independent */
2999 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
3001 PL_curpm = newpm; /* ... and pop $1 et al */
3004 return cx->blk_sub.retop;
3014 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
3017 DIE(aTHX_ "Not a CODE reference");
3018 /* This is overwhelmingly the most common case: */
3019 if (!LIKELY(SvTYPE(sv) == SVt_PVGV && (cv = GvCVu((const GV *)sv)))) {
3020 switch (SvTYPE(sv)) {
3023 if (!(cv = GvCVu((const GV *)sv))) {
3025 cv = sv_2cv(sv, &stash, &gv, 0);
3034 if(isGV_with_GP(sv)) goto we_have_a_glob;
3037 if (sv == &PL_sv_yes) { /* unfound import, ignore */
3039 SP = PL_stack_base + POPMARK;
3047 sv = amagic_deref_call(sv, to_cv_amg);
3048 /* Don't SPAGAIN here. */
3055 DIE(aTHX_ PL_no_usym, "a subroutine");
3056 sym = SvPV_nomg_const(sv, len);
3057 if (PL_op->op_private & HINT_STRICT_REFS)
3058 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
3059 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
3062 cv = MUTABLE_CV(SvRV(sv));
3063 if (SvTYPE(cv) == SVt_PVCV)
3068 DIE(aTHX_ "Not a CODE reference");
3069 /* This is the second most common case: */
3071 cv = MUTABLE_CV(sv);
3079 if (UNLIKELY(CvCLONE(cv) && ! CvCLONED(cv)))
3080 DIE(aTHX_ "Closure prototype called");
3081 if (UNLIKELY(!CvROOT(cv) && !CvXSUB(cv))) {
3085 /* anonymous or undef'd function leaves us no recourse */
3086 if (CvLEXICAL(cv) && CvHASGV(cv))
3087 DIE(aTHX_ "Undefined subroutine &%"SVf" called",
3088 SVfARG(cv_name(cv, NULL, 0)));
3089 if (CvANON(cv) || !CvHASGV(cv)) {
3090 DIE(aTHX_ "Undefined subroutine called");
3093 /* autoloaded stub? */
3094 if (cv != GvCV(gv = CvGV(cv))) {
3097 /* should call AUTOLOAD now? */
3100 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
3101 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
3107 sub_name = sv_newmortal();
3108 gv_efullname3(sub_name, gv, NULL);
3109 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
3117 if (UNLIKELY((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub)
3120 Perl_get_db_sub(aTHX_ &sv, cv);
3122 PL_curcopdb = PL_curcop;
3124 /* check for lsub that handles lvalue subroutines */
3125 cv = GvCV(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVCV));
3126 /* if lsub not found then fall back to DB::sub */
3127 if (!cv) cv = GvCV(PL_DBsub);
3129 cv = GvCV(PL_DBsub);
3132 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
3133 DIE(aTHX_ "No DB::sub routine defined");
3138 if (!(CvISXSUB(cv))) {
3139 /* This path taken at least 75% of the time */
3141 PADLIST * const padlist = CvPADLIST(cv);
3144 PUSHBLOCK(cx, CXt_SUB, MARK);
3146 cx->blk_sub.retop = PL_op->op_next;
3147 if (UNLIKELY((depth = ++CvDEPTH(cv)) >= 2)) {
3148 PERL_STACK_OVERFLOW_CHECK();
3149 pad_push(padlist, depth);
3152 PAD_SET_CUR_NOSAVE(padlist, depth);
3153 if (LIKELY(hasargs)) {
3154 AV *const av = MUTABLE_AV(PAD_SVl(0));
3158 if (UNLIKELY(AvREAL(av))) {
3159 /* @_ is normally not REAL--this should only ever
3160 * happen when DB::sub() calls things that modify @_ */
3165 defavp = &GvAV(PL_defgv);
3166 cx->blk_sub.savearray = *defavp;
3167 *defavp = MUTABLE_AV(SvREFCNT_inc_simple_NN(av));
3168 CX_CURPAD_SAVE(cx->blk_sub);
3169 cx->blk_sub.argarray = av;
3172 if (UNLIKELY(items - 1 > AvMAX(av))) {
3173 SV **ary = AvALLOC(av);
3174 AvMAX(av) = items - 1;
3175 Renew(ary, items, SV*);
3180 Copy(MARK+1,AvARRAY(av),items,SV*);
3181 AvFILLp(av) = items - 1;
3187 if (SvPADTMP(*MARK)) {
3188 *MARK = sv_mortalcopy(*MARK);
3196 if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
3198 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
3199 /* warning must come *after* we fully set up the context
3200 * stuff so that __WARN__ handlers can safely dounwind()
3203 if (UNLIKELY(depth == PERL_SUB_DEPTH_WARN
3204 && ckWARN(WARN_RECURSION)
3205 && !(PERLDB_SUB && cv == GvCV(PL_DBsub))))
3206 sub_crush_depth(cv);
3207 RETURNOP(CvSTART(cv));
3210 SSize_t markix = TOPMARK;
3215 if (UNLIKELY(((PL_op->op_private
3216 & PUSHSUB_GET_LVALUE_MASK(Perl_is_lvalue_sub)
3217 ) & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
3219 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
3221 if (UNLIKELY(!hasargs && GvAV(PL_defgv))) {
3222 /* Need to copy @_ to stack. Alternative may be to
3223 * switch stack to @_, and copy return values
3224 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
3225 AV * const av = GvAV(PL_defgv);
3226 const SSize_t items = AvFILL(av) + 1;
3230 const bool m = cBOOL(SvRMAGICAL(av));
3231 /* Mark is at the end of the stack. */
3233 for (; i < items; ++i)
3237 SV ** const svp = av_fetch(av, i, 0);
3238 sv = svp ? *svp : NULL;
3240 else sv = AvARRAY(av)[i];
3241 if (sv) SP[i+1] = sv;
3243 SP[i+1] = newSVavdefelem(av, i, 1);
3251 SV **mark = PL_stack_base + markix;
3252 SSize_t items = SP - mark;
3255 if (*mark && SvPADTMP(*mark)) {
3256 *mark = sv_mortalcopy(*mark);
3260 /* We assume first XSUB in &DB::sub is the called one. */
3261 if (UNLIKELY(PL_curcopdb)) {
3262 SAVEVPTR(PL_curcop);
3263 PL_curcop = PL_curcopdb;
3266 /* Do we need to open block here? XXXX */
3268 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
3270 CvXSUB(cv)(aTHX_ cv);
3272 /* Enforce some sanity in scalar context. */
3273 if (gimme == G_SCALAR) {
3274 SV **svp = PL_stack_base + markix + 1;
3275 if (svp != PL_stack_sp) {
3276 *svp = svp > PL_stack_sp ? &PL_sv_undef : *PL_stack_sp;
3286 Perl_sub_crush_depth(pTHX_ CV *cv)
3288 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
3291 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
3293 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
3294 SVfARG(cv_name(cv,NULL,0)));
3302 SV* const elemsv = POPs;
3303 IV elem = SvIV(elemsv);
3304 AV *const av = MUTABLE_AV(POPs);
3305 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
3306 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
3307 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
3308 bool preeminent = TRUE;
3311 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC)))
3312 Perl_warner(aTHX_ packWARN(WARN_MISC),
3313 "Use of reference \"%"SVf"\" as array index",
3315 if (UNLIKELY(SvTYPE(av) != SVt_PVAV))
3318 if (UNLIKELY(localizing)) {
3322 /* If we can determine whether the element exist,
3323 * Try to preserve the existenceness of a tied array
3324 * element by using EXISTS and DELETE if possible.
3325 * Fallback to FETCH and STORE otherwise. */
3326 if (SvCANEXISTDELETE(av))
3327 preeminent = av_exists(av, elem);
3330 svp = av_fetch(av, elem, lval && !defer);
3332 #ifdef PERL_MALLOC_WRAP
3333 if (SvUOK(elemsv)) {
3334 const UV uv = SvUV(elemsv);
3335 elem = uv > IV_MAX ? IV_MAX : uv;
3337 else if (SvNOK(elemsv))
3338 elem = (IV)SvNV(elemsv);
3340 static const char oom_array_extend[] =
3341 "Out of memory during array extend"; /* Duplicated in av.c */
3342 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3345 if (!svp || !*svp) {
3348 DIE(aTHX_ PL_no_aelem, elem);
3349 len = av_tindex(av);
3350 mPUSHs(newSVavdefelem(av,
3351 /* Resolve a negative index now, unless it points before the
3352 beginning of the array, in which case record it for error
3353 reporting in magic_setdefelem. */
3354 elem < 0 && len + elem >= 0 ? len + elem : elem,
3358 if (UNLIKELY(localizing)) {
3360 save_aelem(av, elem, svp);
3362 SAVEADELETE(av, elem);
3364 else if (PL_op->op_private & OPpDEREF) {
3365 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
3369 sv = (svp ? *svp : &PL_sv_undef);
3370 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
3377 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3379 PERL_ARGS_ASSERT_VIVIFY_REF;
3384 Perl_croak_no_modify();
3385 prepare_SV_for_RV(sv);
3388 SvRV_set(sv, newSV(0));
3391 SvRV_set(sv, MUTABLE_SV(newAV()));
3394 SvRV_set(sv, MUTABLE_SV(newHV()));
3401 if (SvGMAGICAL(sv)) {
3402 /* copy the sv without magic to prevent magic from being
3404 SV* msv = sv_newmortal();
3405 sv_setsv_nomg(msv, sv);
3411 PERL_STATIC_INLINE HV *
3412 S_opmethod_stash(pTHX_ SV* meth)
3417 SV* const sv = PL_stack_base + TOPMARK == PL_stack_sp
3418 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
3419 "package or object reference", SVfARG(meth)),
3421 : *(PL_stack_base + TOPMARK + 1);
3423 PERL_ARGS_ASSERT_OPMETHOD_STASH;
3427 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3430 if (UNLIKELY(SvGMAGICAL(sv))) mg_get(sv);
3431 else if (SvIsCOW_shared_hash(sv)) { /* MyClass->meth() */
3432 stash = gv_stashsv(sv, GV_CACHE_ONLY);
3433 if (stash) return stash;
3437 ob = MUTABLE_SV(SvRV(sv));
3438 else if (!SvOK(sv)) goto undefined;
3439 else if (isGV_with_GP(sv)) {
3441 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3442 "without a package or object reference",
3445 if (SvTYPE(ob) == SVt_PVLV && LvTYPE(ob) == 'y') {
3446 assert(!LvTARGLEN(ob));
3450 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(ob));
3453 /* this isn't a reference */
3456 const char * const packname = SvPV_nomg_const(sv, packlen);
3457 const U32 packname_utf8 = SvUTF8(sv);
3458 stash = gv_stashpvn(packname, packlen, packname_utf8 | GV_CACHE_ONLY);
3459 if (stash) return stash;
3461 if (!(iogv = gv_fetchpvn_flags(
3462 packname, packlen, packname_utf8, SVt_PVIO
3464 !(ob=MUTABLE_SV(GvIO(iogv))))
3466 /* this isn't the name of a filehandle either */
3469 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3470 "without a package or object reference",
3473 /* assume it's a package name */
3474 stash = gv_stashpvn(packname, packlen, packname_utf8);
3475 if (stash) return stash;
3476 else return MUTABLE_HV(sv);
3478 /* it _is_ a filehandle name -- replace with a reference */
3479 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3482 /* if we got here, ob should be an object or a glob */
3483 if (!ob || !(SvOBJECT(ob)
3484 || (isGV_with_GP(ob)
3485 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3488 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3489 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3490 ? newSVpvs_flags("DOES", SVs_TEMP)
3502 SV* const meth = TOPs;
3505 SV* const rmeth = SvRV(meth);
3506 if (SvTYPE(rmeth) == SVt_PVCV) {
3512 stash = opmethod_stash(meth);
3514 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3517 SETs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3521 #define METHOD_CHECK_CACHE(stash,cache,meth) \
3522 const HE* const he = hv_fetch_ent(cache, meth, 0, 0); \
3524 gv = MUTABLE_GV(HeVAL(he)); \
3525 if (isGV(gv) && GvCV(gv) && (!GvCVGEN(gv) || GvCVGEN(gv) \
3526 == (PL_sub_generation + HvMROMETA(stash)->cache_gen))) \
3528 XPUSHs(MUTABLE_SV(GvCV(gv))); \
3537 SV* const meth = cMETHOPx_meth(PL_op);
3538 HV* const stash = opmethod_stash(meth);
3540 if (LIKELY(SvTYPE(stash) == SVt_PVHV)) {
3541 METHOD_CHECK_CACHE(stash, stash, meth);
3544 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3547 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3556 SV* const meth = cMETHOPx_meth(PL_op);
3557 HV* const stash = CopSTASH(PL_curcop);
3558 /* Actually, SUPER doesn't need real object's (or class') stash at all,
3559 * as it uses CopSTASH. However, we must ensure that object(class) is
3560 * correct (this check is done by S_opmethod_stash) */
3561 opmethod_stash(meth);
3563 if ((cache = HvMROMETA(stash)->super)) {
3564 METHOD_CHECK_CACHE(stash, cache, meth);
3567 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK|GV_SUPER);
3570 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3578 SV* const meth = cMETHOPx_meth(PL_op);
3579 HV* stash = gv_stashsv(cMETHOPx_rclass(PL_op), 0);
3580 opmethod_stash(meth); /* not used but needed for error checks */
3582 if (stash) { METHOD_CHECK_CACHE(stash, stash, meth); }
3583 else stash = MUTABLE_HV(cMETHOPx_rclass(PL_op));
3585 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3588 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3592 PP(pp_method_redir_super)
3597 SV* const meth = cMETHOPx_meth(PL_op);
3598 HV* stash = gv_stashsv(cMETHOPx_rclass(PL_op), 0);
3599 opmethod_stash(meth); /* not used but needed for error checks */
3601 if (UNLIKELY(!stash)) stash = MUTABLE_HV(cMETHOPx_rclass(PL_op));
3602 else if ((cache = HvMROMETA(stash)->super)) {
3603 METHOD_CHECK_CACHE(stash, cache, meth);
3606 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK|GV_SUPER);
3609 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3615 * c-indentation-style: bsd
3617 * indent-tabs-mode: nil
3620 * ex: set ts=8 sts=4 sw=4 et: