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 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV
895 || PL_op->op_type == OP_LVAVREF;
896 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
900 if (UNLIKELY(SvAMAGIC(sv))) {
901 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
904 if (UNLIKELY(SvTYPE(sv) != type))
905 /* diag_listed_as: Not an ARRAY reference */
906 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? "an ARRAY" : "a HASH");
907 else if (UNLIKELY(PL_op->op_flags & OPf_MOD
908 && PL_op->op_private & OPpLVAL_INTRO))
909 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
911 else if (UNLIKELY(SvTYPE(sv) != type)) {
914 if (!isGV_with_GP(sv)) {
915 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? "an ARRAY" : "a HASH",
923 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
924 if (PL_op->op_private & OPpLVAL_INTRO)
925 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
927 if (PL_op->op_flags & OPf_REF) {
931 else if (UNLIKELY(PL_op->op_private & OPpMAYBE_LVSUB)) {
932 const I32 flags = is_lvalue_sub();
933 if (flags && !(flags & OPpENTERSUB_INARGS)) {
934 if (gimme != G_ARRAY)
935 goto croak_cant_return;
942 AV *const av = MUTABLE_AV(sv);
943 /* The guts of pp_rv2av */
944 if (gimme == G_ARRAY) {
950 else if (gimme == G_SCALAR) {
952 const SSize_t maxarg = AvFILL(av) + 1;
956 /* The guts of pp_rv2hv */
957 if (gimme == G_ARRAY) { /* array wanted */
959 return Perl_do_kv(aTHX);
961 else if ((PL_op->op_private & OPpTRUEBOOL
962 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
963 && block_gimme() == G_VOID ))
964 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
965 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
966 else if (gimme == G_SCALAR) {
968 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
975 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
976 is_pp_rv2av ? "array" : "hash");
981 S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
983 PERL_ARGS_ASSERT_DO_ODDBALL;
986 if (ckWARN(WARN_MISC)) {
988 if (oddkey == firstkey &&
990 (SvTYPE(SvRV(*oddkey)) == SVt_PVAV ||
991 SvTYPE(SvRV(*oddkey)) == SVt_PVHV))
993 err = "Reference found where even-sized list expected";
996 err = "Odd number of elements in hash assignment";
997 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
1006 SV **lastlelem = PL_stack_sp;
1007 SV **lastrelem = PL_stack_base + POPMARK;
1008 SV **firstrelem = PL_stack_base + POPMARK + 1;
1009 SV **firstlelem = lastrelem + 1;
1023 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1025 if (gimme == G_ARRAY)
1026 lval = PL_op->op_flags & OPf_MOD || LVRET;
1028 /* If there's a common identifier on both sides we have to take
1029 * special care that assigning the identifier on the left doesn't
1030 * clobber a value on the right that's used later in the list.
1031 * Don't bother if LHS is just an empty hash or array.
1034 if ( (PL_op->op_private & OPpASSIGN_COMMON || PL_sawalias)
1036 firstlelem != lastlelem
1037 || ! ((sv = *firstlelem))
1039 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1040 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1041 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1044 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1045 for (relem = firstrelem; relem <= lastrelem; relem++) {
1046 if (LIKELY((sv = *relem))) {
1047 TAINT_NOT; /* Each item is independent */
1049 /* Dear TODO test in t/op/sort.t, I love you.
1050 (It's relying on a panic, not a "semi-panic" from newSVsv()
1051 and then an assertion failure below.) */
1052 if (UNLIKELY(SvIS_FREED(sv))) {
1053 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1056 /* Not newSVsv(), as it does not allow copy-on-write,
1057 resulting in wasteful copies. We need a second copy of
1058 a temp here, hence the SV_NOSTEAL. */
1059 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1070 while (LIKELY(lelem <= lastlelem)) {
1072 TAINT_NOT; /* Each item stands on its own, taintwise. */
1074 if (UNLIKELY(!sv)) {
1077 ASSUME(SvTYPE(sv) == SVt_PVAV);
1079 switch (SvTYPE(sv)) {
1081 ary = MUTABLE_AV(sv);
1082 magic = SvMAGICAL(ary) != 0;
1084 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1086 av_extend(ary, lastrelem - relem);
1088 while (relem <= lastrelem) { /* gobble up all the rest */
1091 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1092 if (LIKELY(!alias)) {
1094 sv_setsv_nomg(sv, *relem);
1099 DIE(aTHX_ "Assigned value is not a reference");
1100 if (SvTYPE(SvRV(*relem)) > SVt_PVLV)
1101 /* diag_listed_as: Assigned value is not %s reference */
1103 "Assigned value is not a SCALAR reference");
1105 *relem = sv_mortalcopy(*relem);
1106 /* XXX else check for weak refs? */
1107 sv = SvREFCNT_inc_simple_NN(SvRV(*relem));
1110 didstore = av_store(ary,i++,sv);
1119 if (UNLIKELY(PL_delaymagic & DM_ARRAY_ISA))
1120 SvSETMAGIC(MUTABLE_SV(ary));
1123 case SVt_PVHV: { /* normal hash */
1127 SV** topelem = relem;
1128 SV **firsthashrelem = relem;
1130 hash = MUTABLE_HV(sv);
1131 magic = SvMAGICAL(hash) != 0;
1133 odd = ((lastrelem - firsthashrelem)&1)? 0 : 1;
1134 if (UNLIKELY(odd)) {
1135 do_oddball(lastrelem, firsthashrelem);
1136 /* we have firstlelem to reuse, it's not needed anymore
1138 *(lastrelem+1) = &PL_sv_undef;
1142 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1144 while (LIKELY(relem < lastrelem+odd)) { /* gobble up all the rest */
1147 /* Copy the key if aassign is called in lvalue context,
1148 to avoid having the next op modify our rhs. Copy
1149 it also if it is gmagical, lest it make the
1150 hv_store_ent call below croak, leaking the value. */
1151 sv = lval || SvGMAGICAL(*relem)
1152 ? sv_mortalcopy(*relem)
1158 sv_setsv_nomg(tmpstr,*relem++); /* value */
1159 if (gimme == G_ARRAY) {
1160 if (hv_exists_ent(hash, sv, 0))
1161 /* key overwrites an existing entry */
1164 /* copy element back: possibly to an earlier
1165 * stack location if we encountered dups earlier,
1166 * possibly to a later stack location if odd */
1168 *topelem++ = tmpstr;
1171 didstore = hv_store_ent(hash,sv,tmpstr,0);
1173 if (!didstore) sv_2mortal(tmpstr);
1179 if (duplicates && gimme == G_ARRAY) {
1180 /* at this point we have removed the duplicate key/value
1181 * pairs from the stack, but the remaining values may be
1182 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1183 * the (a 2), but the stack now probably contains
1184 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1185 * obliterates the earlier key. So refresh all values. */
1186 lastrelem -= duplicates;
1187 relem = firsthashrelem;
1188 while (relem < lastrelem+odd) {
1190 he = hv_fetch_ent(hash, *relem++, 0, 0);
1191 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1194 if (odd && gimme == G_ARRAY) lastrelem++;
1198 if (SvIMMORTAL(sv)) {
1199 if (relem <= lastrelem)
1203 if (relem <= lastrelem) {
1205 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1206 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1209 packWARN(WARN_MISC),
1210 "Useless assignment to a temporary"
1212 sv_setsv(sv, *relem);
1216 sv_setsv(sv, &PL_sv_undef);
1221 if (UNLIKELY(PL_delaymagic & ~DM_DELAY)) {
1222 /* Will be used to set PL_tainting below */
1223 Uid_t tmp_uid = PerlProc_getuid();
1224 Uid_t tmp_euid = PerlProc_geteuid();
1225 Gid_t tmp_gid = PerlProc_getgid();
1226 Gid_t tmp_egid = PerlProc_getegid();
1228 /* XXX $> et al currently silently ignore failures */
1229 if (PL_delaymagic & DM_UID) {
1230 #ifdef HAS_SETRESUID
1232 setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1233 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1236 # ifdef HAS_SETREUID
1238 setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1239 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1));
1242 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1243 PERL_UNUSED_RESULT(setruid(PL_delaymagic_uid));
1244 PL_delaymagic &= ~DM_RUID;
1246 # endif /* HAS_SETRUID */
1248 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1249 PERL_UNUSED_RESULT(seteuid(PL_delaymagic_euid));
1250 PL_delaymagic &= ~DM_EUID;
1252 # endif /* HAS_SETEUID */
1253 if (PL_delaymagic & DM_UID) {
1254 if (PL_delaymagic_uid != PL_delaymagic_euid)
1255 DIE(aTHX_ "No setreuid available");
1256 PERL_UNUSED_RESULT(PerlProc_setuid(PL_delaymagic_uid));
1258 # endif /* HAS_SETREUID */
1259 #endif /* HAS_SETRESUID */
1261 tmp_uid = PerlProc_getuid();
1262 tmp_euid = PerlProc_geteuid();
1264 /* XXX $> et al currently silently ignore failures */
1265 if (PL_delaymagic & DM_GID) {
1266 #ifdef HAS_SETRESGID
1268 setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1269 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1272 # ifdef HAS_SETREGID
1274 setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1275 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1));
1278 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1279 PERL_UNUSED_RESULT(setrgid(PL_delaymagic_gid));
1280 PL_delaymagic &= ~DM_RGID;
1282 # endif /* HAS_SETRGID */
1284 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1285 PERL_UNUSED_RESULT(setegid(PL_delaymagic_egid));
1286 PL_delaymagic &= ~DM_EGID;
1288 # endif /* HAS_SETEGID */
1289 if (PL_delaymagic & DM_GID) {
1290 if (PL_delaymagic_gid != PL_delaymagic_egid)
1291 DIE(aTHX_ "No setregid available");
1292 PERL_UNUSED_RESULT(PerlProc_setgid(PL_delaymagic_gid));
1294 # endif /* HAS_SETREGID */
1295 #endif /* HAS_SETRESGID */
1297 tmp_gid = PerlProc_getgid();
1298 tmp_egid = PerlProc_getegid();
1300 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1301 #ifdef NO_TAINT_SUPPORT
1302 PERL_UNUSED_VAR(tmp_uid);
1303 PERL_UNUSED_VAR(tmp_euid);
1304 PERL_UNUSED_VAR(tmp_gid);
1305 PERL_UNUSED_VAR(tmp_egid);
1310 if (gimme == G_VOID)
1311 SP = firstrelem - 1;
1312 else if (gimme == G_SCALAR) {
1315 SETi(lastrelem - firstrelem + 1);
1319 /* note that in this case *firstlelem may have been overwritten
1320 by sv_undef in the odd hash case */
1323 SP = firstrelem + (lastlelem - firstlelem);
1324 lelem = firstlelem + (relem - firstrelem);
1326 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1336 PMOP * const pm = cPMOP;
1337 REGEXP * rx = PM_GETRE(pm);
1338 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1339 SV * const rv = sv_newmortal();
1343 SvUPGRADE(rv, SVt_IV);
1344 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1345 loathe to use it here, but it seems to be the right fix. Or close.
1346 The key part appears to be that it's essential for pp_qr to return a new
1347 object (SV), which implies that there needs to be an effective way to
1348 generate a new SV from the existing SV that is pre-compiled in the
1350 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1353 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1354 if (UNLIKELY((cv = *cvp) && CvCLONE(*cvp))) {
1355 *cvp = cv_clone(cv);
1356 SvREFCNT_dec_NN(cv);
1360 HV *const stash = gv_stashsv(pkg, GV_ADD);
1361 SvREFCNT_dec_NN(pkg);
1362 (void)sv_bless(rv, stash);
1365 if (UNLIKELY(RX_ISTAINTED(rx))) {
1367 SvTAINTED_on(SvRV(rv));
1380 SSize_t curpos = 0; /* initial pos() or current $+[0] */
1383 const char *truebase; /* Start of string */
1384 REGEXP *rx = PM_GETRE(pm);
1386 const I32 gimme = GIMME_V;
1388 const I32 oldsave = PL_savestack_ix;
1389 I32 had_zerolen = 0;
1392 if (PL_op->op_flags & OPf_STACKED)
1401 PUTBACK; /* EVAL blocks need stack_sp. */
1402 /* Skip get-magic if this is a qr// clone, because regcomp has
1404 truebase = ReANY(rx)->mother_re
1405 ? SvPV_nomg_const(TARG, len)
1406 : SvPV_const(TARG, len);
1408 DIE(aTHX_ "panic: pp_match");
1409 strend = truebase + len;
1410 rxtainted = (RX_ISTAINTED(rx) ||
1411 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1414 /* We need to know this in case we fail out early - pos() must be reset */
1415 global = dynpm->op_pmflags & PMf_GLOBAL;
1417 /* PMdf_USED is set after a ?? matches once */
1420 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1422 pm->op_pmflags & PMf_USED
1425 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1429 /* empty pattern special-cased to use last successful pattern if
1430 possible, except for qr// */
1431 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1437 if (RX_MINLEN(rx) >= 0 && (STRLEN)RX_MINLEN(rx) > len) {
1438 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
1439 UVuf" < %"IVdf")\n",
1440 (UV)len, (IV)RX_MINLEN(rx)));
1444 /* get pos() if //g */
1446 mg = mg_find_mglob(TARG);
1447 if (mg && mg->mg_len >= 0) {
1448 curpos = MgBYTEPOS(mg, TARG, truebase, len);
1449 /* last time pos() was set, it was zero-length match */
1450 if (mg->mg_flags & MGf_MINMATCH)
1455 #ifdef PERL_SAWAMPERSAND
1458 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1459 || (dynpm->op_pmflags & PMf_KEEPCOPY)
1463 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1464 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1465 * only on the first iteration. Therefore we need to copy $' as well
1466 * as $&, to make the rest of the string available for captures in
1467 * subsequent iterations */
1468 if (! (global && gimme == G_ARRAY))
1469 r_flags |= REXEC_COPY_SKIP_POST;
1471 #ifdef PERL_SAWAMPERSAND
1472 if (dynpm->op_pmflags & PMf_KEEPCOPY)
1473 /* handle KEEPCOPY in pmop but not rx, eg $r=qr/a/; /$r/p */
1474 r_flags &= ~(REXEC_COPY_SKIP_PRE|REXEC_COPY_SKIP_POST);
1481 s = truebase + curpos;
1483 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1484 had_zerolen, TARG, NULL, r_flags))
1488 if (dynpm->op_pmflags & PMf_ONCE)
1490 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1492 dynpm->op_pmflags |= PMf_USED;
1496 RX_MATCH_TAINTED_on(rx);
1497 TAINT_IF(RX_MATCH_TAINTED(rx));
1501 if (global && (gimme != G_ARRAY || (dynpm->op_pmflags & PMf_CONTINUE))) {
1503 mg = sv_magicext_mglob(TARG);
1504 MgBYTEPOS_set(mg, TARG, truebase, RX_OFFS(rx)[0].end);
1505 if (RX_ZERO_LEN(rx))
1506 mg->mg_flags |= MGf_MINMATCH;
1508 mg->mg_flags &= ~MGf_MINMATCH;
1511 if ((!RX_NPARENS(rx) && !global) || gimme != G_ARRAY) {
1512 LEAVE_SCOPE(oldsave);
1516 /* push captures on stack */
1519 const I32 nparens = RX_NPARENS(rx);
1520 I32 i = (global && !nparens) ? 1 : 0;
1522 SPAGAIN; /* EVAL blocks could move the stack. */
1523 EXTEND(SP, nparens + i);
1524 EXTEND_MORTAL(nparens + i);
1525 for (i = !i; i <= nparens; i++) {
1526 PUSHs(sv_newmortal());
1527 if (LIKELY((RX_OFFS(rx)[i].start != -1)
1528 && RX_OFFS(rx)[i].end != -1 ))
1530 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1531 const char * const s = RX_OFFS(rx)[i].start + truebase;
1532 if (UNLIKELY(RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0
1533 || len < 0 || len > strend - s))
1534 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1535 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1536 (long) i, (long) RX_OFFS(rx)[i].start,
1537 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1538 sv_setpvn(*SP, s, len);
1539 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1544 curpos = (UV)RX_OFFS(rx)[0].end;
1545 had_zerolen = RX_ZERO_LEN(rx);
1546 PUTBACK; /* EVAL blocks may use stack */
1547 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1550 LEAVE_SCOPE(oldsave);
1553 NOT_REACHED; /* NOTREACHED */
1556 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1558 mg = mg_find_mglob(TARG);
1562 LEAVE_SCOPE(oldsave);
1563 if (gimme == G_ARRAY)
1569 Perl_do_readline(pTHX)
1571 dSP; dTARGETSTACKED;
1576 IO * const io = GvIO(PL_last_in_gv);
1577 const I32 type = PL_op->op_type;
1578 const I32 gimme = GIMME_V;
1581 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1583 Perl_tied_method(aTHX_ SV_CONST(READLINE), SP, MUTABLE_SV(io), mg, gimme, 0);
1584 if (gimme == G_SCALAR) {
1586 SvSetSV_nosteal(TARG, TOPs);
1596 if (IoFLAGS(io) & IOf_ARGV) {
1597 if (IoFLAGS(io) & IOf_START) {
1599 if (av_tindex(GvAVn(PL_last_in_gv)) < 0) {
1600 IoFLAGS(io) &= ~IOf_START;
1601 do_open6(PL_last_in_gv, "-", 1, NULL, NULL, 0);
1602 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1603 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1604 SvSETMAGIC(GvSV(PL_last_in_gv));
1609 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1610 if (!fp) { /* Note: fp != IoIFP(io) */
1611 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1614 else if (type == OP_GLOB)
1615 fp = Perl_start_glob(aTHX_ POPs, io);
1617 else if (type == OP_GLOB)
1619 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1620 report_wrongway_fh(PL_last_in_gv, '>');
1624 if ((!io || !(IoFLAGS(io) & IOf_START))
1625 && ckWARN(WARN_CLOSED)
1628 report_evil_fh(PL_last_in_gv);
1630 if (gimme == G_SCALAR) {
1631 /* undef TARG, and push that undefined value */
1632 if (type != OP_RCATLINE) {
1633 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1641 if (gimme == G_SCALAR) {
1643 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1646 if (type == OP_RCATLINE)
1647 SvPV_force_nomg_nolen(sv);
1651 else if (isGV_with_GP(sv)) {
1652 SvPV_force_nomg_nolen(sv);
1654 SvUPGRADE(sv, SVt_PV);
1655 tmplen = SvLEN(sv); /* remember if already alloced */
1656 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1657 /* try short-buffering it. Please update t/op/readline.t
1658 * if you change the growth length.
1663 if (type == OP_RCATLINE && SvOK(sv)) {
1665 SvPV_force_nomg_nolen(sv);
1671 sv = sv_2mortal(newSV(80));
1675 /* This should not be marked tainted if the fp is marked clean */
1676 #define MAYBE_TAINT_LINE(io, sv) \
1677 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1682 /* delay EOF state for a snarfed empty file */
1683 #define SNARF_EOF(gimme,rs,io,sv) \
1684 (gimme != G_SCALAR || SvCUR(sv) \
1685 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1689 if (!sv_gets(sv, fp, offset)
1691 || SNARF_EOF(gimme, PL_rs, io, sv)
1692 || PerlIO_error(fp)))
1694 PerlIO_clearerr(fp);
1695 if (IoFLAGS(io) & IOf_ARGV) {
1696 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1699 (void)do_close(PL_last_in_gv, FALSE);
1701 else if (type == OP_GLOB) {
1702 if (!do_close(PL_last_in_gv, FALSE)) {
1703 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1704 "glob failed (child exited with status %d%s)",
1705 (int)(STATUS_CURRENT >> 8),
1706 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1709 if (gimme == G_SCALAR) {
1710 if (type != OP_RCATLINE) {
1711 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1717 MAYBE_TAINT_LINE(io, sv);
1720 MAYBE_TAINT_LINE(io, sv);
1722 IoFLAGS(io) |= IOf_NOLINE;
1726 if (type == OP_GLOB) {
1729 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1730 char * const tmps = SvEND(sv) - 1;
1731 if (*tmps == *SvPVX_const(PL_rs)) {
1733 SvCUR_set(sv, SvCUR(sv) - 1);
1736 for (t1 = SvPVX_const(sv); *t1; t1++)
1738 if (strchr("*%?", *t1))
1740 if (strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1743 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1744 (void)POPs; /* Unmatched wildcard? Chuck it... */
1747 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1748 if (ckWARN(WARN_UTF8)) {
1749 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1750 const STRLEN len = SvCUR(sv) - offset;
1753 if (!is_utf8_string_loc(s, len, &f))
1754 /* Emulate :encoding(utf8) warning in the same case. */
1755 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1756 "utf8 \"\\x%02X\" does not map to Unicode",
1757 f < (U8*)SvEND(sv) ? *f : 0);
1760 if (gimme == G_ARRAY) {
1761 if (SvLEN(sv) - SvCUR(sv) > 20) {
1762 SvPV_shrink_to_cur(sv);
1764 sv = sv_2mortal(newSV(80));
1767 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1768 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1769 const STRLEN new_len
1770 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1771 SvPV_renew(sv, new_len);
1782 SV * const keysv = POPs;
1783 HV * const hv = MUTABLE_HV(POPs);
1784 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1785 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1787 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1788 bool preeminent = TRUE;
1790 if (SvTYPE(hv) != SVt_PVHV)
1797 /* If we can determine whether the element exist,
1798 * Try to preserve the existenceness of a tied hash
1799 * element by using EXISTS and DELETE if possible.
1800 * Fallback to FETCH and STORE otherwise. */
1801 if (SvCANEXISTDELETE(hv))
1802 preeminent = hv_exists_ent(hv, keysv, 0);
1805 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1806 svp = he ? &HeVAL(he) : NULL;
1808 if (!svp || !*svp || *svp == &PL_sv_undef) {
1812 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1814 lv = sv_newmortal();
1815 sv_upgrade(lv, SVt_PVLV);
1817 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1818 SvREFCNT_dec_NN(key2); /* sv_magic() increments refcount */
1819 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1825 if (HvNAME_get(hv) && isGV(*svp))
1826 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1827 else if (preeminent)
1828 save_helem_flags(hv, keysv, svp,
1829 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1831 SAVEHDELETE(hv, keysv);
1833 else if (PL_op->op_private & OPpDEREF) {
1834 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1838 sv = (svp && *svp ? *svp : &PL_sv_undef);
1839 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1840 * was to make C<local $tied{foo} = $tied{foo}> possible.
1841 * However, it seems no longer to be needed for that purpose, and
1842 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1843 * would loop endlessly since the pos magic is getting set on the
1844 * mortal copy and lost. However, the copy has the effect of
1845 * triggering the get magic, and losing it altogether made things like
1846 * c<$tied{foo};> in void context no longer do get magic, which some
1847 * code relied on. Also, delayed triggering of magic on @+ and friends
1848 * meant the original regex may be out of scope by now. So as a
1849 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1850 * being called too many times). */
1851 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1858 /* a stripped-down version of Perl_softref2xv() for use by
1859 * pp_multideref(), which doesn't use PL_op->op_flags */
1862 S_softref2xv_lite(pTHX_ SV *const sv, const char *const what,
1865 if (PL_op->op_private & HINT_STRICT_REFS) {
1867 Perl_die(aTHX_ PL_no_symref_sv, sv,
1868 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""), what);
1870 Perl_die(aTHX_ PL_no_usym, what);
1873 Perl_die(aTHX_ PL_no_usym, what);
1874 return gv_fetchsv_nomg(sv, GV_ADD, type);
1878 /* handle one or more derefs and array/hash indexings, e.g.
1879 * $h->{foo} or $a[0]{$key}[$i] or f()->[1]
1881 * op_aux points to an array of unions of UV / IV / SV* / PADOFFSET.
1882 * Each of these either contains an action, or an argument, such as
1883 * a UV to use as an array index, or a lexical var to retrieve.
1884 * In fact, several actions re stored per UV; we keep shifting new actions
1885 * of the one UV, and only reload when it becomes zero.
1890 SV *sv = NULL; /* init to avoid spurious 'may be used uninitialized' */
1891 UNOP_AUX_item *items = cUNOP_AUXx(PL_op)->op_aux;
1892 UV actions = items->uv;
1895 /* this tells find_uninit_var() where we're up to */
1896 PL_multideref_pc = items;
1899 /* there are three main classes of action; the first retrieve
1900 * the initial AV or HV from a variable or the stack; the second
1901 * does the equivalent of an unrolled (/DREFAV, rv2av, aelem),
1902 * the third an unrolled (/DREFHV, rv2hv, helem).
1904 switch (actions & MDEREF_ACTION_MASK) {
1907 actions = (++items)->uv;
1910 case MDEREF_AV_padav_aelem: /* $lex[...] */
1911 sv = PAD_SVl((++items)->pad_offset);
1914 case MDEREF_AV_gvav_aelem: /* $pkg[...] */
1915 sv = UNOP_AUX_item_sv(++items);
1916 assert(isGV_with_GP(sv));
1917 sv = (SV*)GvAVn((GV*)sv);
1920 case MDEREF_AV_pop_rv2av_aelem: /* expr->[...] */
1925 goto do_AV_rv2av_aelem;
1928 case MDEREF_AV_gvsv_vivify_rv2av_aelem: /* $pkg->[...] */
1929 sv = UNOP_AUX_item_sv(++items);
1930 assert(isGV_with_GP(sv));
1931 sv = GvSVn((GV*)sv);
1932 goto do_AV_vivify_rv2av_aelem;
1934 case MDEREF_AV_padsv_vivify_rv2av_aelem: /* $lex->[...] */
1935 sv = PAD_SVl((++items)->pad_offset);
1938 do_AV_vivify_rv2av_aelem:
1939 case MDEREF_AV_vivify_rv2av_aelem: /* vivify, ->[...] */
1940 /* this is the OPpDEREF action normally found at the end of
1941 * ops like aelem, helem, rv2sv */
1942 sv = vivify_ref(sv, OPpDEREF_AV);
1946 /* this is basically a copy of pp_rv2av when it just has the
1949 if (LIKELY(SvROK(sv))) {
1950 if (UNLIKELY(SvAMAGIC(sv))) {
1951 sv = amagic_deref_call(sv, to_av_amg);
1954 if (UNLIKELY(SvTYPE(sv) != SVt_PVAV))
1955 DIE(aTHX_ "Not an ARRAY reference");
1957 else if (SvTYPE(sv) != SVt_PVAV) {
1958 if (!isGV_with_GP(sv))
1959 sv = (SV*)S_softref2xv_lite(aTHX_ sv, "an ARRAY", SVt_PVAV);
1960 sv = MUTABLE_SV(GvAVn((GV*)sv));
1966 /* retrieve the key; this may be either a lexical or package
1967 * var (whose index/ptr is stored as an item) or a signed
1968 * integer constant stored as an item.
1971 IV elem = 0; /* to shut up stupid compiler warnings */
1974 assert(SvTYPE(sv) == SVt_PVAV);
1976 switch (actions & MDEREF_INDEX_MASK) {
1977 case MDEREF_INDEX_none:
1979 case MDEREF_INDEX_const:
1980 elem = (++items)->iv;
1982 case MDEREF_INDEX_padsv:
1983 elemsv = PAD_SVl((++items)->pad_offset);
1985 case MDEREF_INDEX_gvsv:
1986 elemsv = UNOP_AUX_item_sv(++items);
1987 assert(isGV_with_GP(elemsv));
1988 elemsv = GvSVn((GV*)elemsv);
1990 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv)
1991 && ckWARN(WARN_MISC)))
1992 Perl_warner(aTHX_ packWARN(WARN_MISC),
1993 "Use of reference \"%"SVf"\" as array index",
1995 /* the only time that S_find_uninit_var() needs this
1996 * is to determine which index value triggered the
1997 * undef warning. So just update it here. Note that
1998 * since we don't save and restore this var (e.g. for
1999 * tie or overload execution), its value will be
2000 * meaningless apart from just here */
2001 PL_multideref_pc = items;
2002 elem = SvIV(elemsv);
2007 /* this is basically a copy of pp_aelem with OPpDEREF skipped */
2009 if (!(actions & MDEREF_FLAG_last)) {
2010 SV** svp = av_fetch((AV*)sv, elem, 1);
2011 if (!svp || ! (sv=*svp))
2012 DIE(aTHX_ PL_no_aelem, elem);
2016 if (PL_op->op_private &
2017 (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE))
2019 if (PL_op->op_private & OPpMULTIDEREF_EXISTS) {
2020 sv = av_exists((AV*)sv, elem) ? &PL_sv_yes : &PL_sv_no;
2023 I32 discard = (GIMME_V == G_VOID) ? G_DISCARD : 0;
2024 sv = av_delete((AV*)sv, elem, discard);
2032 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2033 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2034 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2035 bool preeminent = TRUE;
2036 AV *const av = (AV*)sv;
2039 if (UNLIKELY(localizing)) {
2043 /* If we can determine whether the element exist,
2044 * Try to preserve the existenceness of a tied array
2045 * element by using EXISTS and DELETE if possible.
2046 * Fallback to FETCH and STORE otherwise. */
2047 if (SvCANEXISTDELETE(av))
2048 preeminent = av_exists(av, elem);
2051 svp = av_fetch(av, elem, lval && !defer);
2054 if (!svp || !(sv = *svp)) {
2057 DIE(aTHX_ PL_no_aelem, elem);
2058 len = av_tindex(av);
2059 sv = sv_2mortal(newSVavdefelem(av,
2060 /* Resolve a negative index now, unless it points
2061 * before the beginning of the array, in which
2062 * case record it for error reporting in
2063 * magic_setdefelem. */
2064 elem < 0 && len + elem >= 0
2065 ? len + elem : elem, 1));
2068 if (UNLIKELY(localizing)) {
2070 save_aelem(av, elem, svp);
2071 sv = *svp; /* may have changed */
2074 SAVEADELETE(av, elem);
2079 sv = (svp ? *svp : &PL_sv_undef);
2080 /* see note in pp_helem() */
2081 if (SvRMAGICAL(av) && SvGMAGICAL(sv))
2098 case MDEREF_HV_padhv_helem: /* $lex{...} */
2099 sv = PAD_SVl((++items)->pad_offset);
2102 case MDEREF_HV_gvhv_helem: /* $pkg{...} */
2103 sv = UNOP_AUX_item_sv(++items);
2104 assert(isGV_with_GP(sv));
2105 sv = (SV*)GvHVn((GV*)sv);
2108 case MDEREF_HV_pop_rv2hv_helem: /* expr->{...} */
2113 goto do_HV_rv2hv_helem;
2116 case MDEREF_HV_gvsv_vivify_rv2hv_helem: /* $pkg->{...} */
2117 sv = UNOP_AUX_item_sv(++items);
2118 assert(isGV_with_GP(sv));
2119 sv = GvSVn((GV*)sv);
2120 goto do_HV_vivify_rv2hv_helem;
2122 case MDEREF_HV_padsv_vivify_rv2hv_helem: /* $lex->{...} */
2123 sv = PAD_SVl((++items)->pad_offset);
2126 do_HV_vivify_rv2hv_helem:
2127 case MDEREF_HV_vivify_rv2hv_helem: /* vivify, ->{...} */
2128 /* this is the OPpDEREF action normally found at the end of
2129 * ops like aelem, helem, rv2sv */
2130 sv = vivify_ref(sv, OPpDEREF_HV);
2134 /* this is basically a copy of pp_rv2hv when it just has the
2135 * sKR/1 flags (and pp_rv2hv is aliased to pp_rv2av) */
2138 if (LIKELY(SvROK(sv))) {
2139 if (UNLIKELY(SvAMAGIC(sv))) {
2140 sv = amagic_deref_call(sv, to_hv_amg);
2143 if (UNLIKELY(SvTYPE(sv) != SVt_PVHV))
2144 DIE(aTHX_ "Not a HASH reference");
2146 else if (SvTYPE(sv) != SVt_PVHV) {
2147 if (!isGV_with_GP(sv))
2148 sv = (SV*)S_softref2xv_lite(aTHX_ sv, "a HASH", SVt_PVHV);
2149 sv = MUTABLE_SV(GvHVn((GV*)sv));
2155 /* retrieve the key; this may be either a lexical / package
2156 * var or a string constant, whose index/ptr is stored as an
2159 SV *keysv = NULL; /* to shut up stupid compiler warnings */
2161 assert(SvTYPE(sv) == SVt_PVHV);
2163 switch (actions & MDEREF_INDEX_MASK) {
2164 case MDEREF_INDEX_none:
2167 case MDEREF_INDEX_const:
2168 keysv = UNOP_AUX_item_sv(++items);
2171 case MDEREF_INDEX_padsv:
2172 keysv = PAD_SVl((++items)->pad_offset);
2175 case MDEREF_INDEX_gvsv:
2176 keysv = UNOP_AUX_item_sv(++items);
2177 keysv = GvSVn((GV*)keysv);
2181 /* see comment above about setting this var */
2182 PL_multideref_pc = items;
2185 /* ensure that candidate CONSTs have been HEKified */
2186 assert( ((actions & MDEREF_INDEX_MASK) != MDEREF_INDEX_const)
2187 || SvTYPE(keysv) >= SVt_PVMG
2190 || SvIsCOW_shared_hash(keysv));
2192 /* this is basically a copy of pp_helem with OPpDEREF skipped */
2194 if (!(actions & MDEREF_FLAG_last)) {
2195 HE *he = hv_fetch_ent((HV*)sv, keysv, 1, 0);
2196 if (!he || !(sv=HeVAL(he)) || sv == &PL_sv_undef)
2197 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
2201 if (PL_op->op_private &
2202 (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE))
2204 if (PL_op->op_private & OPpMULTIDEREF_EXISTS) {
2205 sv = hv_exists_ent((HV*)sv, keysv, 0)
2206 ? &PL_sv_yes : &PL_sv_no;
2209 I32 discard = (GIMME_V == G_VOID) ? G_DISCARD : 0;
2210 sv = hv_delete_ent((HV*)sv, keysv, discard, 0);
2218 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2219 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2220 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2221 bool preeminent = TRUE;
2223 HV * const hv = (HV*)sv;
2226 if (UNLIKELY(localizing)) {
2230 /* If we can determine whether the element exist,
2231 * Try to preserve the existenceness of a tied hash
2232 * element by using EXISTS and DELETE if possible.
2233 * Fallback to FETCH and STORE otherwise. */
2234 if (SvCANEXISTDELETE(hv))
2235 preeminent = hv_exists_ent(hv, keysv, 0);
2238 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
2239 svp = he ? &HeVAL(he) : NULL;
2243 if (!svp || !(sv = *svp) || sv == &PL_sv_undef) {
2247 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
2248 lv = sv_newmortal();
2249 sv_upgrade(lv, SVt_PVLV);
2251 sv_magic(lv, key2 = newSVsv(keysv),
2252 PERL_MAGIC_defelem, NULL, 0);
2253 /* sv_magic() increments refcount */
2254 SvREFCNT_dec_NN(key2);
2255 LvTARG(lv) = SvREFCNT_inc_simple(hv);
2261 if (HvNAME_get(hv) && isGV(sv))
2262 save_gp(MUTABLE_GV(sv),
2263 !(PL_op->op_flags & OPf_SPECIAL));
2264 else if (preeminent) {
2265 save_helem_flags(hv, keysv, svp,
2266 (PL_op->op_flags & OPf_SPECIAL)
2267 ? 0 : SAVEf_SETMAGIC);
2268 sv = *svp; /* may have changed */
2271 SAVEHDELETE(hv, keysv);
2276 sv = (svp && *svp ? *svp : &PL_sv_undef);
2277 /* see note in pp_helem() */
2278 if (SvRMAGICAL(hv) && SvGMAGICAL(sv))
2287 actions >>= MDEREF_SHIFT;
2301 cx = &cxstack[cxstack_ix];
2302 itersvp = CxITERVAR(cx);
2304 switch (CxTYPE(cx)) {
2306 case CXt_LOOP_LAZYSV: /* string increment */
2308 SV* cur = cx->blk_loop.state_u.lazysv.cur;
2309 SV *end = cx->blk_loop.state_u.lazysv.end;
2310 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
2311 It has SvPVX of "" and SvCUR of 0, which is what we want. */
2313 const char *max = SvPV_const(end, maxlen);
2314 if (UNLIKELY(SvNIOK(cur) || SvCUR(cur) > maxlen))
2318 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
2319 /* safe to reuse old SV */
2320 sv_setsv(oldsv, cur);
2324 /* we need a fresh SV every time so that loop body sees a
2325 * completely new SV for closures/references to work as
2327 *itersvp = newSVsv(cur);
2328 SvREFCNT_dec_NN(oldsv);
2330 if (strEQ(SvPVX_const(cur), max))
2331 sv_setiv(cur, 0); /* terminate next time */
2337 case CXt_LOOP_LAZYIV: /* integer increment */
2339 IV cur = cx->blk_loop.state_u.lazyiv.cur;
2340 if (UNLIKELY(cur > cx->blk_loop.state_u.lazyiv.end))
2344 /* don't risk potential race */
2345 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
2346 /* safe to reuse old SV */
2347 sv_setiv(oldsv, cur);
2351 /* we need a fresh SV every time so that loop body sees a
2352 * completely new SV for closures/references to work as they
2354 *itersvp = newSViv(cur);
2355 SvREFCNT_dec_NN(oldsv);
2358 if (UNLIKELY(cur == IV_MAX)) {
2359 /* Handle end of range at IV_MAX */
2360 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
2362 ++cx->blk_loop.state_u.lazyiv.cur;
2366 case CXt_LOOP_FOR: /* iterate array */
2369 AV *av = cx->blk_loop.state_u.ary.ary;
2371 bool av_is_stack = FALSE;
2378 if (PL_op->op_private & OPpITER_REVERSED) {
2379 ix = --cx->blk_loop.state_u.ary.ix;
2380 if (UNLIKELY(ix <= (av_is_stack ? cx->blk_loop.resetsp : -1)))
2384 ix = ++cx->blk_loop.state_u.ary.ix;
2385 if (UNLIKELY(ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av))))
2389 if (UNLIKELY(SvMAGICAL(av) || AvREIFY(av))) {
2390 SV * const * const svp = av_fetch(av, ix, FALSE);
2391 sv = svp ? *svp : NULL;
2394 sv = AvARRAY(av)[ix];
2397 if (UNLIKELY(cx->cx_type & CXp_FOR_LVREF)) {
2398 SvSetMagicSV(*itersvp, sv);
2403 if (UNLIKELY(SvIS_FREED(sv))) {
2405 Perl_croak(aTHX_ "Use of freed value in iteration");
2412 SvREFCNT_inc_simple_void_NN(sv);
2415 else if (!av_is_stack) {
2416 sv = newSVavdefelem(av, ix, 0);
2423 SvREFCNT_dec(oldsv);
2428 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
2434 A description of how taint works in pattern matching and substitution.
2436 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2437 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2439 While the pattern is being assembled/concatenated and then compiled,
2440 PL_tainted will get set (via TAINT_set) if any component of the pattern
2441 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2442 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2443 TAINT_get). It will also be set if any component of the pattern matches
2444 based on locale-dependent behavior.
2446 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2447 the pattern is marked as tainted. This means that subsequent usage, such
2448 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2449 on the new pattern too.
2451 RXf_TAINTED_SEEN is used post-execution by the get magic code
2452 of $1 et al to indicate whether the returned value should be tainted.
2453 It is the responsibility of the caller of the pattern (i.e. pp_match,
2454 pp_subst etc) to set this flag for any other circumstances where $1 needs
2457 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2459 There are three possible sources of taint
2461 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2462 * the replacement string (or expression under /e)
2464 There are four destinations of taint and they are affected by the sources
2465 according to the rules below:
2467 * the return value (not including /r):
2468 tainted by the source string and pattern, but only for the
2469 number-of-iterations case; boolean returns aren't tainted;
2470 * the modified string (or modified copy under /r):
2471 tainted by the source string, pattern, and replacement strings;
2473 tainted by the pattern, and under 'use re "taint"', by the source
2475 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2476 should always be unset before executing subsequent code.
2478 The overall action of pp_subst is:
2480 * at the start, set bits in rxtainted indicating the taint status of
2481 the various sources.
2483 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2484 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2485 pattern has subsequently become tainted via locale ops.
2487 * If control is being passed to pp_substcont to execute a /e block,
2488 save rxtainted in the CXt_SUBST block, for future use by
2491 * Whenever control is being returned to perl code (either by falling
2492 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2493 use the flag bits in rxtainted to make all the appropriate types of
2494 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2495 et al will appear tainted.
2497 pp_match is just a simpler version of the above.
2513 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2514 See "how taint works" above */
2517 REGEXP *rx = PM_GETRE(pm);
2519 int force_on_match = 0;
2520 const I32 oldsave = PL_savestack_ix;
2522 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2527 /* known replacement string? */
2528 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2532 if (PL_op->op_flags & OPf_STACKED)
2541 SvGETMAGIC(TARG); /* must come before cow check */
2543 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2544 because they make integers such as 256 "false". */
2545 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2548 sv_force_normal_flags(TARG,0);
2550 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2551 && (SvREADONLY(TARG)
2552 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2553 || SvTYPE(TARG) > SVt_PVLV)
2554 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2555 Perl_croak_no_modify();
2558 orig = SvPV_nomg(TARG, len);
2559 /* note we don't (yet) force the var into being a string; if we fail
2560 * to match, we leave as-is; on successful match howeverm, we *will*
2561 * coerce into a string, then repeat the match */
2562 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2565 /* only replace once? */
2566 once = !(rpm->op_pmflags & PMf_GLOBAL);
2568 /* See "how taint works" above */
2571 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2572 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2573 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2574 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2575 ? SUBST_TAINT_BOOLRET : 0));
2581 DIE(aTHX_ "panic: pp_subst, pm=%p, orig=%p", pm, orig);
2583 strend = orig + len;
2584 slen = DO_UTF8(TARG) ? utf8_length((U8*)orig, (U8*)strend) : len;
2585 maxiters = 2 * slen + 10; /* We can match twice at each
2586 position, once with zero-length,
2587 second time with non-zero. */
2589 if (!RX_PRELEN(rx) && PL_curpm
2590 && !ReANY(rx)->mother_re) {
2595 #ifdef PERL_SAWAMPERSAND
2596 r_flags = ( RX_NPARENS(rx)
2598 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2599 || (rpm->op_pmflags & PMf_KEEPCOPY)
2604 r_flags = REXEC_COPY_STR;
2607 if (!CALLREGEXEC(rx, orig, strend, orig, 0, TARG, NULL, r_flags))
2610 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2611 LEAVE_SCOPE(oldsave);
2616 /* known replacement string? */
2618 /* replacement needing upgrading? */
2619 if (DO_UTF8(TARG) && !doutf8) {
2620 nsv = sv_newmortal();
2623 sv_recode_to_utf8(nsv, _get_encoding());
2625 sv_utf8_upgrade(nsv);
2626 c = SvPV_const(nsv, clen);
2630 c = SvPV_const(dstr, clen);
2631 doutf8 = DO_UTF8(dstr);
2634 if (SvTAINTED(dstr))
2635 rxtainted |= SUBST_TAINT_REPL;
2642 /* can do inplace substitution? */
2647 && (I32)clen <= RX_MINLENRET(rx)
2649 || !(r_flags & REXEC_COPY_STR)
2650 || (!SvGMAGICAL(dstr) && !(RX_EXTFLAGS(rx) & RXf_EVAL_SEEN))
2652 && !(RX_EXTFLAGS(rx) & RXf_NO_INPLACE_SUBST)
2653 && (!doutf8 || SvUTF8(TARG))
2654 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2658 if (SvIsCOW(TARG)) {
2659 if (!force_on_match)
2661 assert(SvVOK(TARG));
2664 if (force_on_match) {
2665 /* redo the first match, this time with the orig var
2666 * forced into being a string */
2668 orig = SvPV_force_nomg(TARG, len);
2674 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2675 rxtainted |= SUBST_TAINT_PAT;
2676 m = orig + RX_OFFS(rx)[0].start;
2677 d = orig + RX_OFFS(rx)[0].end;
2679 if (m - s > strend - d) { /* faster to shorten from end */
2682 Copy(c, m, clen, char);
2687 Move(d, m, i, char);
2691 SvCUR_set(TARG, m - s);
2693 else { /* faster from front */
2697 Move(s, d - i, i, char);
2700 Copy(c, d, clen, char);
2707 d = s = RX_OFFS(rx)[0].start + orig;
2710 if (UNLIKELY(iters++ > maxiters))
2711 DIE(aTHX_ "Substitution loop");
2712 if (UNLIKELY(RX_MATCH_TAINTED(rx))) /* run time pattern taint, eg locale */
2713 rxtainted |= SUBST_TAINT_PAT;
2714 m = RX_OFFS(rx)[0].start + orig;
2717 Move(s, d, i, char);
2721 Copy(c, d, clen, char);
2724 s = RX_OFFS(rx)[0].end + orig;
2725 } while (CALLREGEXEC(rx, s, strend, orig,
2726 s == m, /* don't match same null twice */
2728 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2731 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2732 Move(s, d, i+1, char); /* include the NUL */
2742 if (force_on_match) {
2743 /* redo the first match, this time with the orig var
2744 * forced into being a string */
2746 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2747 /* I feel that it should be possible to avoid this mortal copy
2748 given that the code below copies into a new destination.
2749 However, I suspect it isn't worth the complexity of
2750 unravelling the C<goto force_it> for the small number of
2751 cases where it would be viable to drop into the copy code. */
2752 TARG = sv_2mortal(newSVsv(TARG));
2754 orig = SvPV_force_nomg(TARG, len);
2760 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2761 rxtainted |= SUBST_TAINT_PAT;
2763 s = RX_OFFS(rx)[0].start + orig;
2764 dstr = newSVpvn_flags(orig, s-orig,
2765 SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2770 /* note that a whole bunch of local vars are saved here for
2771 * use by pp_substcont: here's a list of them in case you're
2772 * searching for places in this sub that uses a particular var:
2773 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2774 * s m strend rx once */
2776 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2780 if (UNLIKELY(iters++ > maxiters))
2781 DIE(aTHX_ "Substitution loop");
2782 if (UNLIKELY(RX_MATCH_TAINTED(rx)))
2783 rxtainted |= SUBST_TAINT_PAT;
2784 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2786 char *old_orig = orig;
2787 assert(RX_SUBOFFSET(rx) == 0);
2789 orig = RX_SUBBEG(rx);
2790 s = orig + (old_s - old_orig);
2791 strend = s + (strend - old_s);
2793 m = RX_OFFS(rx)[0].start + orig;
2794 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2795 s = RX_OFFS(rx)[0].end + orig;
2797 /* replacement already stringified */
2799 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2804 if (!nsv) nsv = sv_newmortal();
2805 sv_copypv(nsv, repl);
2806 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, _get_encoding());
2807 sv_catsv(dstr, nsv);
2809 else sv_catsv(dstr, repl);
2810 if (UNLIKELY(SvTAINTED(repl)))
2811 rxtainted |= SUBST_TAINT_REPL;
2815 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2817 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2818 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2820 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2821 /* From here on down we're using the copy, and leaving the original
2828 /* The match may make the string COW. If so, brilliant, because
2829 that's just saved us one malloc, copy and free - the regexp has
2830 donated the old buffer, and we malloc an entirely new one, rather
2831 than the regexp malloc()ing a buffer and copying our original,
2832 only for us to throw it away here during the substitution. */
2833 if (SvIsCOW(TARG)) {
2834 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2840 SvPV_set(TARG, SvPVX(dstr));
2841 SvCUR_set(TARG, SvCUR(dstr));
2842 SvLEN_set(TARG, SvLEN(dstr));
2843 SvFLAGS(TARG) |= SvUTF8(dstr);
2844 SvPV_set(dstr, NULL);
2851 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2852 (void)SvPOK_only_UTF8(TARG);
2855 /* See "how taint works" above */
2857 if ((rxtainted & SUBST_TAINT_PAT) ||
2858 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2859 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2861 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2863 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2864 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2866 SvTAINTED_on(TOPs); /* taint return value */
2868 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2870 /* needed for mg_set below */
2872 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2876 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2878 LEAVE_SCOPE(oldsave);
2887 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2888 ++*PL_markstack_ptr;
2890 LEAVE_with_name("grep_item"); /* exit inner scope */
2893 if (UNLIKELY(PL_stack_base + *PL_markstack_ptr > SP)) {
2895 const I32 gimme = GIMME_V;
2897 LEAVE_with_name("grep"); /* exit outer scope */
2898 (void)POPMARK; /* pop src */
2899 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2900 (void)POPMARK; /* pop dst */
2901 SP = PL_stack_base + POPMARK; /* pop original mark */
2902 if (gimme == G_SCALAR) {
2903 if (PL_op->op_private & OPpGREP_LEX) {
2904 SV* const sv = sv_newmortal();
2905 sv_setiv(sv, items);
2913 else if (gimme == G_ARRAY)
2920 ENTER_with_name("grep_item"); /* enter inner scope */
2923 src = PL_stack_base[*PL_markstack_ptr];
2924 if (SvPADTMP(src)) {
2925 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
2929 if (PL_op->op_private & OPpGREP_LEX)
2930 PAD_SVl(PL_op->op_targ) = src;
2934 RETURNOP(cLOGOP->op_other);
2948 if (CxMULTICALL(&cxstack[cxstack_ix]))
2952 cxstack_ix++; /* temporarily protect top context */
2955 if (gimme == G_SCALAR) {
2957 if (LIKELY(MARK <= SP)) {
2958 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2959 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2960 && !SvMAGICAL(TOPs)) {
2961 *MARK = SvREFCNT_inc(TOPs);
2966 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2968 *MARK = sv_mortalcopy(sv);
2969 SvREFCNT_dec_NN(sv);
2972 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2973 && !SvMAGICAL(TOPs)) {
2977 *MARK = sv_mortalcopy(TOPs);
2981 *MARK = &PL_sv_undef;
2985 else if (gimme == G_ARRAY) {
2986 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2987 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2988 || SvMAGICAL(*MARK)) {
2989 *MARK = sv_mortalcopy(*MARK);
2990 TAINT_NOT; /* Each item is independent */
2997 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2999 PL_curpm = newpm; /* ... and pop $1 et al */
3002 return cx->blk_sub.retop;
3012 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
3015 DIE(aTHX_ "Not a CODE reference");
3016 /* This is overwhelmingly the most common case: */
3017 if (!LIKELY(SvTYPE(sv) == SVt_PVGV && (cv = GvCVu((const GV *)sv)))) {
3018 switch (SvTYPE(sv)) {
3021 if (!(cv = GvCVu((const GV *)sv))) {
3023 cv = sv_2cv(sv, &stash, &gv, 0);
3032 if(isGV_with_GP(sv)) goto we_have_a_glob;
3035 if (sv == &PL_sv_yes) { /* unfound import, ignore */
3037 SP = PL_stack_base + POPMARK;
3045 sv = amagic_deref_call(sv, to_cv_amg);
3046 /* Don't SPAGAIN here. */
3053 DIE(aTHX_ PL_no_usym, "a subroutine");
3054 sym = SvPV_nomg_const(sv, len);
3055 if (PL_op->op_private & HINT_STRICT_REFS)
3056 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
3057 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
3060 cv = MUTABLE_CV(SvRV(sv));
3061 if (SvTYPE(cv) == SVt_PVCV)
3066 DIE(aTHX_ "Not a CODE reference");
3067 /* This is the second most common case: */
3069 cv = MUTABLE_CV(sv);
3077 if (UNLIKELY(CvCLONE(cv) && ! CvCLONED(cv)))
3078 DIE(aTHX_ "Closure prototype called");
3079 if (UNLIKELY(!CvROOT(cv) && !CvXSUB(cv))) {
3083 /* anonymous or undef'd function leaves us no recourse */
3084 if (CvLEXICAL(cv) && CvHASGV(cv))
3085 DIE(aTHX_ "Undefined subroutine &%"SVf" called",
3086 SVfARG(cv_name(cv, NULL, 0)));
3087 if (CvANON(cv) || !CvHASGV(cv)) {
3088 DIE(aTHX_ "Undefined subroutine called");
3091 /* autoloaded stub? */
3092 if (cv != GvCV(gv = CvGV(cv))) {
3095 /* should call AUTOLOAD now? */
3098 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
3099 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
3105 sub_name = sv_newmortal();
3106 gv_efullname3(sub_name, gv, NULL);
3107 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
3115 if (UNLIKELY((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub)
3118 Perl_get_db_sub(aTHX_ &sv, cv);
3120 PL_curcopdb = PL_curcop;
3122 /* check for lsub that handles lvalue subroutines */
3123 cv = GvCV(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVCV));
3124 /* if lsub not found then fall back to DB::sub */
3125 if (!cv) cv = GvCV(PL_DBsub);
3127 cv = GvCV(PL_DBsub);
3130 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
3131 DIE(aTHX_ "No DB::sub routine defined");
3136 if (!(CvISXSUB(cv))) {
3137 /* This path taken at least 75% of the time */
3139 PADLIST * const padlist = CvPADLIST(cv);
3142 PUSHBLOCK(cx, CXt_SUB, MARK);
3144 cx->blk_sub.retop = PL_op->op_next;
3145 if (UNLIKELY((depth = ++CvDEPTH(cv)) >= 2)) {
3146 PERL_STACK_OVERFLOW_CHECK();
3147 pad_push(padlist, depth);
3150 PAD_SET_CUR_NOSAVE(padlist, depth);
3151 if (LIKELY(hasargs)) {
3152 AV *const av = MUTABLE_AV(PAD_SVl(0));
3156 if (UNLIKELY(AvREAL(av))) {
3157 /* @_ is normally not REAL--this should only ever
3158 * happen when DB::sub() calls things that modify @_ */
3163 defavp = &GvAV(PL_defgv);
3164 cx->blk_sub.savearray = *defavp;
3165 *defavp = MUTABLE_AV(SvREFCNT_inc_simple_NN(av));
3166 CX_CURPAD_SAVE(cx->blk_sub);
3167 cx->blk_sub.argarray = av;
3170 if (UNLIKELY(items - 1 > AvMAX(av))) {
3171 SV **ary = AvALLOC(av);
3172 AvMAX(av) = items - 1;
3173 Renew(ary, items, SV*);
3178 Copy(MARK+1,AvARRAY(av),items,SV*);
3179 AvFILLp(av) = items - 1;
3185 if (SvPADTMP(*MARK)) {
3186 *MARK = sv_mortalcopy(*MARK);
3194 if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
3196 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
3197 /* warning must come *after* we fully set up the context
3198 * stuff so that __WARN__ handlers can safely dounwind()
3201 if (UNLIKELY(depth == PERL_SUB_DEPTH_WARN
3202 && ckWARN(WARN_RECURSION)
3203 && !(PERLDB_SUB && cv == GvCV(PL_DBsub))))
3204 sub_crush_depth(cv);
3205 RETURNOP(CvSTART(cv));
3208 SSize_t markix = TOPMARK;
3213 if (UNLIKELY(((PL_op->op_private
3214 & PUSHSUB_GET_LVALUE_MASK(Perl_is_lvalue_sub)
3215 ) & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
3217 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
3219 if (UNLIKELY(!hasargs && GvAV(PL_defgv))) {
3220 /* Need to copy @_ to stack. Alternative may be to
3221 * switch stack to @_, and copy return values
3222 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
3223 AV * const av = GvAV(PL_defgv);
3224 const SSize_t items = AvFILL(av) + 1;
3228 const bool m = cBOOL(SvRMAGICAL(av));
3229 /* Mark is at the end of the stack. */
3231 for (; i < items; ++i)
3235 SV ** const svp = av_fetch(av, i, 0);
3236 sv = svp ? *svp : NULL;
3238 else sv = AvARRAY(av)[i];
3239 if (sv) SP[i+1] = sv;
3241 SP[i+1] = newSVavdefelem(av, i, 1);
3249 SV **mark = PL_stack_base + markix;
3250 SSize_t items = SP - mark;
3253 if (*mark && SvPADTMP(*mark)) {
3254 *mark = sv_mortalcopy(*mark);
3258 /* We assume first XSUB in &DB::sub is the called one. */
3259 if (UNLIKELY(PL_curcopdb)) {
3260 SAVEVPTR(PL_curcop);
3261 PL_curcop = PL_curcopdb;
3264 /* Do we need to open block here? XXXX */
3266 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
3268 CvXSUB(cv)(aTHX_ cv);
3270 /* Enforce some sanity in scalar context. */
3271 if (gimme == G_SCALAR) {
3272 SV **svp = PL_stack_base + markix + 1;
3273 if (svp != PL_stack_sp) {
3274 *svp = svp > PL_stack_sp ? &PL_sv_undef : *PL_stack_sp;
3284 Perl_sub_crush_depth(pTHX_ CV *cv)
3286 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
3289 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
3291 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
3292 SVfARG(cv_name(cv,NULL,0)));
3300 SV* const elemsv = POPs;
3301 IV elem = SvIV(elemsv);
3302 AV *const av = MUTABLE_AV(POPs);
3303 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
3304 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
3305 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
3306 bool preeminent = TRUE;
3309 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC)))
3310 Perl_warner(aTHX_ packWARN(WARN_MISC),
3311 "Use of reference \"%"SVf"\" as array index",
3313 if (UNLIKELY(SvTYPE(av) != SVt_PVAV))
3316 if (UNLIKELY(localizing)) {
3320 /* If we can determine whether the element exist,
3321 * Try to preserve the existenceness of a tied array
3322 * element by using EXISTS and DELETE if possible.
3323 * Fallback to FETCH and STORE otherwise. */
3324 if (SvCANEXISTDELETE(av))
3325 preeminent = av_exists(av, elem);
3328 svp = av_fetch(av, elem, lval && !defer);
3330 #ifdef PERL_MALLOC_WRAP
3331 if (SvUOK(elemsv)) {
3332 const UV uv = SvUV(elemsv);
3333 elem = uv > IV_MAX ? IV_MAX : uv;
3335 else if (SvNOK(elemsv))
3336 elem = (IV)SvNV(elemsv);
3338 static const char oom_array_extend[] =
3339 "Out of memory during array extend"; /* Duplicated in av.c */
3340 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3343 if (!svp || !*svp) {
3346 DIE(aTHX_ PL_no_aelem, elem);
3347 len = av_tindex(av);
3348 mPUSHs(newSVavdefelem(av,
3349 /* Resolve a negative index now, unless it points before the
3350 beginning of the array, in which case record it for error
3351 reporting in magic_setdefelem. */
3352 elem < 0 && len + elem >= 0 ? len + elem : elem,
3356 if (UNLIKELY(localizing)) {
3358 save_aelem(av, elem, svp);
3360 SAVEADELETE(av, elem);
3362 else if (PL_op->op_private & OPpDEREF) {
3363 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
3367 sv = (svp ? *svp : &PL_sv_undef);
3368 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
3375 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3377 PERL_ARGS_ASSERT_VIVIFY_REF;
3382 Perl_croak_no_modify();
3383 prepare_SV_for_RV(sv);
3386 SvRV_set(sv, newSV(0));
3389 SvRV_set(sv, MUTABLE_SV(newAV()));
3392 SvRV_set(sv, MUTABLE_SV(newHV()));
3399 if (SvGMAGICAL(sv)) {
3400 /* copy the sv without magic to prevent magic from being
3402 SV* msv = sv_newmortal();
3403 sv_setsv_nomg(msv, sv);
3409 PERL_STATIC_INLINE HV *
3410 S_opmethod_stash(pTHX_ SV* meth)
3415 SV* const sv = PL_stack_base + TOPMARK == PL_stack_sp
3416 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
3417 "package or object reference", SVfARG(meth)),
3419 : *(PL_stack_base + TOPMARK + 1);
3421 PERL_ARGS_ASSERT_OPMETHOD_STASH;
3425 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3428 if (UNLIKELY(SvGMAGICAL(sv))) mg_get(sv);
3429 else if (SvIsCOW_shared_hash(sv)) { /* MyClass->meth() */
3430 stash = gv_stashsv(sv, GV_CACHE_ONLY);
3431 if (stash) return stash;
3435 ob = MUTABLE_SV(SvRV(sv));
3436 else if (!SvOK(sv)) goto undefined;
3437 else if (isGV_with_GP(sv)) {
3439 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3440 "without a package or object reference",
3443 if (SvTYPE(ob) == SVt_PVLV && LvTYPE(ob) == 'y') {
3444 assert(!LvTARGLEN(ob));
3448 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(ob));
3451 /* this isn't a reference */
3454 const char * const packname = SvPV_nomg_const(sv, packlen);
3455 const U32 packname_utf8 = SvUTF8(sv);
3456 stash = gv_stashpvn(packname, packlen, packname_utf8 | GV_CACHE_ONLY);
3457 if (stash) return stash;
3459 if (!(iogv = gv_fetchpvn_flags(
3460 packname, packlen, packname_utf8, SVt_PVIO
3462 !(ob=MUTABLE_SV(GvIO(iogv))))
3464 /* this isn't the name of a filehandle either */
3467 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3468 "without a package or object reference",
3471 /* assume it's a package name */
3472 stash = gv_stashpvn(packname, packlen, packname_utf8);
3473 if (stash) return stash;
3474 else return MUTABLE_HV(sv);
3476 /* it _is_ a filehandle name -- replace with a reference */
3477 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3480 /* if we got here, ob should be an object or a glob */
3481 if (!ob || !(SvOBJECT(ob)
3482 || (isGV_with_GP(ob)
3483 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3486 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3487 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3488 ? newSVpvs_flags("DOES", SVs_TEMP)
3500 SV* const meth = TOPs;
3503 SV* const rmeth = SvRV(meth);
3504 if (SvTYPE(rmeth) == SVt_PVCV) {
3510 stash = opmethod_stash(meth);
3512 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3515 SETs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3519 #define METHOD_CHECK_CACHE(stash,cache,meth) \
3520 const HE* const he = hv_fetch_ent(cache, meth, 0, 0); \
3522 gv = MUTABLE_GV(HeVAL(he)); \
3523 if (isGV(gv) && GvCV(gv) && (!GvCVGEN(gv) || GvCVGEN(gv) \
3524 == (PL_sub_generation + HvMROMETA(stash)->cache_gen))) \
3526 XPUSHs(MUTABLE_SV(GvCV(gv))); \
3535 SV* const meth = cMETHOPx_meth(PL_op);
3536 HV* const stash = opmethod_stash(meth);
3538 if (LIKELY(SvTYPE(stash) == SVt_PVHV)) {
3539 METHOD_CHECK_CACHE(stash, stash, meth);
3542 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3545 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3554 SV* const meth = cMETHOPx_meth(PL_op);
3555 HV* const stash = CopSTASH(PL_curcop);
3556 /* Actually, SUPER doesn't need real object's (or class') stash at all,
3557 * as it uses CopSTASH. However, we must ensure that object(class) is
3558 * correct (this check is done by S_opmethod_stash) */
3559 opmethod_stash(meth);
3561 if ((cache = HvMROMETA(stash)->super)) {
3562 METHOD_CHECK_CACHE(stash, cache, meth);
3565 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK|GV_SUPER);
3568 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3576 SV* const meth = cMETHOPx_meth(PL_op);
3577 HV* stash = gv_stashsv(cMETHOPx_rclass(PL_op), 0);
3578 opmethod_stash(meth); /* not used but needed for error checks */
3580 if (stash) { METHOD_CHECK_CACHE(stash, stash, meth); }
3581 else stash = MUTABLE_HV(cMETHOPx_rclass(PL_op));
3583 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3586 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3590 PP(pp_method_redir_super)
3595 SV* const meth = cMETHOPx_meth(PL_op);
3596 HV* stash = gv_stashsv(cMETHOPx_rclass(PL_op), 0);
3597 opmethod_stash(meth); /* not used but needed for error checks */
3599 if (UNLIKELY(!stash)) stash = MUTABLE_HV(cMETHOPx_rclass(PL_op));
3600 else if ((cache = HvMROMETA(stash)->super)) {
3601 METHOD_CHECK_CACHE(stash, cache, meth);
3604 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK|GV_SUPER);
3607 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3613 * c-indentation-style: bsd
3615 * indent-tabs-mode: nil
3618 * ex: set ts=8 sts=4 sw=4 et: