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);
303 /* $r.$r: do magic twice: tied might return different 2nd time */
305 rpv = SvPV_nomg_const(right, rlen);
306 rbyte = !DO_UTF8(right);
308 if (lbyte != rbyte) {
309 /* sv_utf8_upgrade_nomg() may reallocate the stack */
312 sv_utf8_upgrade_nomg(TARG);
315 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
316 sv_utf8_upgrade_nomg(right);
317 rpv = SvPV_nomg_const(right, rlen);
321 sv_catpvn_nomg(TARG, rpv, rlen);
328 /* push the elements of av onto the stack.
329 * XXX Note that padav has similar code but without the mg_get().
330 * I suspect that the mg_get is no longer needed, but while padav
331 * differs, it can't share this function */
334 S_pushav(pTHX_ AV* const av)
337 const SSize_t maxarg = AvFILL(av) + 1;
339 if (UNLIKELY(SvRMAGICAL(av))) {
341 for (i=0; i < (PADOFFSET)maxarg; i++) {
342 SV ** const svp = av_fetch(av, i, FALSE);
343 /* See note in pp_helem, and bug id #27839 */
345 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
351 for (i=0; i < (PADOFFSET)maxarg; i++) {
352 SV * const sv = AvARRAY(av)[i];
353 SP[i+1] = LIKELY(sv) ? sv : &PL_sv_undef;
361 /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
366 PADOFFSET base = PL_op->op_targ;
367 int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
369 if (PL_op->op_flags & OPf_SPECIAL) {
370 /* fake the RHS of my ($x,$y,..) = @_ */
372 S_pushav(aTHX_ GvAVn(PL_defgv));
376 /* note, this is only skipped for compile-time-known void cxt */
377 if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
380 for (i = 0; i <count; i++)
381 *++SP = PAD_SV(base+i);
383 if (PL_op->op_private & OPpLVAL_INTRO) {
384 SV **svp = &(PAD_SVl(base));
385 const UV payload = (UV)(
386 (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
387 | (count << SAVE_TIGHT_SHIFT)
388 | SAVEt_CLEARPADRANGE);
389 STATIC_ASSERT_STMT(OPpPADRANGE_COUNTMASK + 1 == (1 << OPpPADRANGE_COUNTSHIFT));
390 assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
397 for (i = 0; i <count; i++)
398 SvPADSTALE_off(*svp++); /* mark lexical as active */
409 OP * const op = PL_op;
410 /* access PL_curpad once */
411 SV ** const padentry = &(PAD_SVl(op->op_targ));
416 PUTBACK; /* no pop/push after this, TOPs ok */
418 if (op->op_flags & OPf_MOD) {
419 if (op->op_private & OPpLVAL_INTRO)
420 if (!(op->op_private & OPpPAD_STATE))
421 save_clearsv(padentry);
422 if (op->op_private & OPpDEREF) {
423 /* TOPs is equivalent to TARG here. Using TOPs (SP) rather
424 than TARG reduces the scope of TARG, so it does not
425 span the call to save_clearsv, resulting in smaller
427 TOPs = vivify_ref(TOPs, op->op_private & OPpDEREF);
439 tryAMAGICunTARGETlist(iter_amg, 0);
440 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
442 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
443 if (!isGV_with_GP(PL_last_in_gv)) {
444 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
445 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
448 XPUSHs(MUTABLE_SV(PL_last_in_gv));
451 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
452 if (PL_last_in_gv == (GV *)&PL_sv_undef)
453 PL_last_in_gv = NULL;
455 assert(isGV_with_GP(PL_last_in_gv));
458 return do_readline();
466 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
470 (SvIOK_notUV(left) && SvIOK_notUV(right))
471 ? (SvIVX(left) == SvIVX(right))
472 : ( do_ncmp(left, right) == 0)
478 /* also used for: pp_i_predec() pp_i_preinc() pp_predec() */
484 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
485 if (UNLIKELY(SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs))))
486 Perl_croak_no_modify();
487 if (LIKELY(!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs))
488 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
490 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
491 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
493 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
494 if (inc) sv_inc(TOPs);
501 /* also used for: pp_orassign() */
510 if (PL_op->op_type == OP_OR)
512 RETURNOP(cLOGOP->op_other);
517 /* also used for: pp_dor() pp_dorassign() */
524 const int op_type = PL_op->op_type;
525 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
530 if (UNLIKELY(!sv || !SvANY(sv))) {
531 if (op_type == OP_DOR)
533 RETURNOP(cLOGOP->op_other);
539 if (UNLIKELY(!sv || !SvANY(sv)))
544 switch (SvTYPE(sv)) {
546 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
550 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
554 if (CvROOT(sv) || CvXSUB(sv))
567 if(op_type == OP_DOR)
569 RETURNOP(cLOGOP->op_other);
571 /* assuming OP_DEFINED */
579 dSP; dATARGET; bool useleft; SV *svl, *svr;
580 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
584 useleft = USE_LEFT(svl);
585 #ifdef PERL_PRESERVE_IVUV
586 /* We must see if we can perform the addition with integers if possible,
587 as the integer code detects overflow while the NV code doesn't.
588 If either argument hasn't had a numeric conversion yet attempt to get
589 the IV. It's important to do this now, rather than just assuming that
590 it's not IOK as a PV of "9223372036854775806" may not take well to NV
591 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
592 integer in case the second argument is IV=9223372036854775806
593 We can (now) rely on sv_2iv to do the right thing, only setting the
594 public IOK flag if the value in the NV (or PV) slot is truly integer.
596 A side effect is that this also aggressively prefers integer maths over
597 fp maths for integer values.
599 How to detect overflow?
601 C 99 section 6.2.6.1 says
603 The range of nonnegative values of a signed integer type is a subrange
604 of the corresponding unsigned integer type, and the representation of
605 the same value in each type is the same. A computation involving
606 unsigned operands can never overflow, because a result that cannot be
607 represented by the resulting unsigned integer type is reduced modulo
608 the number that is one greater than the largest value that can be
609 represented by the resulting type.
613 which I read as "unsigned ints wrap."
615 signed integer overflow seems to be classed as "exception condition"
617 If an exceptional condition occurs during the evaluation of an
618 expression (that is, if the result is not mathematically defined or not
619 in the range of representable values for its type), the behavior is
622 (6.5, the 5th paragraph)
624 I had assumed that on 2s complement machines signed arithmetic would
625 wrap, hence coded pp_add and pp_subtract on the assumption that
626 everything perl builds on would be happy. After much wailing and
627 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
628 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
629 unsigned code below is actually shorter than the old code. :-)
632 if (SvIV_please_nomg(svr)) {
633 /* Unless the left argument is integer in range we are going to have to
634 use NV maths. Hence only attempt to coerce the right argument if
635 we know the left is integer. */
643 /* left operand is undef, treat as zero. + 0 is identity,
644 Could SETi or SETu right now, but space optimise by not adding
645 lots of code to speed up what is probably a rarish case. */
647 /* Left operand is defined, so is it IV? */
648 if (SvIV_please_nomg(svl)) {
649 if ((auvok = SvUOK(svl)))
652 const IV aiv = SvIVX(svl);
655 auvok = 1; /* Now acting as a sign flag. */
656 } else { /* 2s complement assumption for IV_MIN */
664 bool result_good = 0;
667 bool buvok = SvUOK(svr);
672 const IV biv = SvIVX(svr);
679 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
680 else "IV" now, independent of how it came in.
681 if a, b represents positive, A, B negative, a maps to -A etc
686 all UV maths. negate result if A negative.
687 add if signs same, subtract if signs differ. */
693 /* Must get smaller */
699 /* result really should be -(auv-buv). as its negation
700 of true value, need to swap our result flag */
717 if (result <= (UV)IV_MIN)
720 /* result valid, but out of range for IV. */
725 } /* Overflow, drop through to NVs. */
730 NV value = SvNV_nomg(svr);
733 /* left operand is undef, treat as zero. + 0.0 is identity. */
737 SETn( value + SvNV_nomg(svl) );
743 /* also used for: pp_aelemfast_lex() */
748 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
749 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
750 const U32 lval = PL_op->op_flags & OPf_MOD;
751 SV** const svp = av_fetch(av, (I8)PL_op->op_private, lval);
752 SV *sv = (svp ? *svp : &PL_sv_undef);
754 if (UNLIKELY(!svp && lval))
755 DIE(aTHX_ PL_no_aelem, (int)(I8)PL_op->op_private);
758 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
768 do_join(TARG, *MARK, MARK, SP);
779 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
780 * will be enough to hold an OP*.
782 SV* const sv = sv_newmortal();
783 sv_upgrade(sv, SVt_PVLV);
785 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
788 XPUSHs(MUTABLE_SV(PL_op));
793 /* Oversized hot code. */
795 /* also used for: pp_say() */
799 dSP; dMARK; dORIGMARK;
803 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
807 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
810 if (MARK == ORIGMARK) {
811 /* If using default handle then we need to make space to
812 * pass object as 1st arg, so move other args up ...
816 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
819 return Perl_tied_method(aTHX_ SV_CONST(PRINT), mark - 1, MUTABLE_SV(io),
821 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
822 | (PL_op->op_type == OP_SAY
823 ? TIED_METHOD_SAY : 0)), sp - mark);
826 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
827 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
830 SETERRNO(EBADF,RMS_IFI);
833 else if (!(fp = IoOFP(io))) {
835 report_wrongway_fh(gv, '<');
838 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
842 SV * const ofs = GvSV(PL_ofsgv); /* $, */
844 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
846 if (!do_print(*MARK, fp))
850 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
851 if (!do_print(GvSV(PL_ofsgv), fp)) {
860 if (!do_print(*MARK, fp))
868 if (PL_op->op_type == OP_SAY) {
869 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
872 else if (PL_ors_sv && SvOK(PL_ors_sv))
873 if (!do_print(PL_ors_sv, fp)) /* $\ */
876 if (IoFLAGS(io) & IOf_FLUSH)
877 if (PerlIO_flush(fp) == EOF)
887 XPUSHs(&PL_sv_undef);
892 /* also used for: pp_rv2hv() */
893 /* also called directly by pp_lvavref */
898 const I32 gimme = GIMME_V;
899 static const char an_array[] = "an ARRAY";
900 static const char a_hash[] = "a HASH";
901 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV
902 || PL_op->op_type == OP_LVAVREF;
903 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
907 if (UNLIKELY(SvAMAGIC(sv))) {
908 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
911 if (UNLIKELY(SvTYPE(sv) != type))
912 /* diag_listed_as: Not an ARRAY reference */
913 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
914 else if (UNLIKELY(PL_op->op_flags & OPf_MOD
915 && PL_op->op_private & OPpLVAL_INTRO))
916 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
918 else if (UNLIKELY(SvTYPE(sv) != type)) {
921 if (!isGV_with_GP(sv)) {
922 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
930 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
931 if (PL_op->op_private & OPpLVAL_INTRO)
932 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
934 if (PL_op->op_flags & OPf_REF) {
938 else if (UNLIKELY(PL_op->op_private & OPpMAYBE_LVSUB)) {
939 const I32 flags = is_lvalue_sub();
940 if (flags && !(flags & OPpENTERSUB_INARGS)) {
941 if (gimme != G_ARRAY)
942 goto croak_cant_return;
949 AV *const av = MUTABLE_AV(sv);
950 /* The guts of pp_rv2av */
951 if (gimme == G_ARRAY) {
957 else if (gimme == G_SCALAR) {
959 const SSize_t maxarg = AvFILL(av) + 1;
963 /* The guts of pp_rv2hv */
964 if (gimme == G_ARRAY) { /* array wanted */
966 return Perl_do_kv(aTHX);
968 else if ((PL_op->op_private & OPpTRUEBOOL
969 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
970 && block_gimme() == G_VOID ))
971 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
972 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
973 else if (gimme == G_SCALAR) {
975 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
982 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
983 is_pp_rv2av ? "array" : "hash");
988 S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
990 PERL_ARGS_ASSERT_DO_ODDBALL;
993 if (ckWARN(WARN_MISC)) {
995 if (oddkey == firstkey &&
997 (SvTYPE(SvRV(*oddkey)) == SVt_PVAV ||
998 SvTYPE(SvRV(*oddkey)) == SVt_PVHV))
1000 err = "Reference found where even-sized list expected";
1003 err = "Odd number of elements in hash assignment";
1004 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
1013 SV **lastlelem = PL_stack_sp;
1014 SV **lastrelem = PL_stack_base + POPMARK;
1015 SV **firstrelem = PL_stack_base + POPMARK + 1;
1016 SV **firstlelem = lastrelem + 1;
1030 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1032 if (gimme == G_ARRAY)
1033 lval = PL_op->op_flags & OPf_MOD || LVRET;
1035 /* If there's a common identifier on both sides we have to take
1036 * special care that assigning the identifier on the left doesn't
1037 * clobber a value on the right that's used later in the list.
1038 * Don't bother if LHS is just an empty hash or array.
1041 if ( (PL_op->op_private & OPpASSIGN_COMMON || PL_sawalias)
1043 firstlelem != lastlelem
1044 || ! ((sv = *firstlelem))
1046 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1047 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1048 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1051 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1052 for (relem = firstrelem; relem <= lastrelem; relem++) {
1053 if (LIKELY((sv = *relem))) {
1054 TAINT_NOT; /* Each item is independent */
1056 /* Dear TODO test in t/op/sort.t, I love you.
1057 (It's relying on a panic, not a "semi-panic" from newSVsv()
1058 and then an assertion failure below.) */
1059 if (UNLIKELY(SvIS_FREED(sv))) {
1060 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1063 /* Not newSVsv(), as it does not allow copy-on-write,
1064 resulting in wasteful copies. We need a second copy of
1065 a temp here, hence the SV_NOSTEAL. */
1066 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1077 while (LIKELY(lelem <= lastlelem)) {
1079 TAINT_NOT; /* Each item stands on its own, taintwise. */
1081 if (UNLIKELY(!sv)) {
1084 ASSUME(SvTYPE(sv) == SVt_PVAV);
1086 switch (SvTYPE(sv)) {
1088 ary = MUTABLE_AV(sv);
1089 magic = SvMAGICAL(ary) != 0;
1091 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1093 av_extend(ary, lastrelem - relem);
1095 while (relem <= lastrelem) { /* gobble up all the rest */
1098 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1099 if (LIKELY(!alias)) {
1101 sv_setsv_nomg(sv, *relem);
1106 DIE(aTHX_ "Assigned value is not a reference");
1107 if (SvTYPE(SvRV(*relem)) > SVt_PVLV)
1108 /* diag_listed_as: Assigned value is not %s reference */
1110 "Assigned value is not a SCALAR reference");
1112 *relem = sv_mortalcopy(*relem);
1113 /* XXX else check for weak refs? */
1114 sv = SvREFCNT_inc_simple_NN(SvRV(*relem));
1117 didstore = av_store(ary,i++,sv);
1126 if (UNLIKELY(PL_delaymagic & DM_ARRAY_ISA))
1127 SvSETMAGIC(MUTABLE_SV(ary));
1130 case SVt_PVHV: { /* normal hash */
1134 SV** topelem = relem;
1135 SV **firsthashrelem = relem;
1137 hash = MUTABLE_HV(sv);
1138 magic = SvMAGICAL(hash) != 0;
1140 odd = ((lastrelem - firsthashrelem)&1)? 0 : 1;
1141 if (UNLIKELY(odd)) {
1142 do_oddball(lastrelem, firsthashrelem);
1143 /* we have firstlelem to reuse, it's not needed anymore
1145 *(lastrelem+1) = &PL_sv_undef;
1149 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1151 while (LIKELY(relem < lastrelem+odd)) { /* gobble up all the rest */
1154 /* Copy the key if aassign is called in lvalue context,
1155 to avoid having the next op modify our rhs. Copy
1156 it also if it is gmagical, lest it make the
1157 hv_store_ent call below croak, leaking the value. */
1158 sv = lval || SvGMAGICAL(*relem)
1159 ? sv_mortalcopy(*relem)
1165 sv_setsv_nomg(tmpstr,*relem++); /* value */
1166 if (gimme == G_ARRAY) {
1167 if (hv_exists_ent(hash, sv, 0))
1168 /* key overwrites an existing entry */
1171 /* copy element back: possibly to an earlier
1172 * stack location if we encountered dups earlier,
1173 * possibly to a later stack location if odd */
1175 *topelem++ = tmpstr;
1178 didstore = hv_store_ent(hash,sv,tmpstr,0);
1180 if (!didstore) sv_2mortal(tmpstr);
1186 if (duplicates && gimme == G_ARRAY) {
1187 /* at this point we have removed the duplicate key/value
1188 * pairs from the stack, but the remaining values may be
1189 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1190 * the (a 2), but the stack now probably contains
1191 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1192 * obliterates the earlier key. So refresh all values. */
1193 lastrelem -= duplicates;
1194 relem = firsthashrelem;
1195 while (relem < lastrelem+odd) {
1197 he = hv_fetch_ent(hash, *relem++, 0, 0);
1198 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1201 if (odd && gimme == G_ARRAY) lastrelem++;
1205 if (SvIMMORTAL(sv)) {
1206 if (relem <= lastrelem)
1210 if (relem <= lastrelem) {
1212 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1213 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1216 packWARN(WARN_MISC),
1217 "Useless assignment to a temporary"
1219 sv_setsv(sv, *relem);
1223 sv_setsv(sv, &PL_sv_undef);
1228 if (UNLIKELY(PL_delaymagic & ~DM_DELAY)) {
1229 /* Will be used to set PL_tainting below */
1230 Uid_t tmp_uid = PerlProc_getuid();
1231 Uid_t tmp_euid = PerlProc_geteuid();
1232 Gid_t tmp_gid = PerlProc_getgid();
1233 Gid_t tmp_egid = PerlProc_getegid();
1235 /* XXX $> et al currently silently ignore failures */
1236 if (PL_delaymagic & DM_UID) {
1237 #ifdef HAS_SETRESUID
1239 setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1240 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1243 # ifdef HAS_SETREUID
1245 setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1246 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1));
1249 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1250 PERL_UNUSED_RESULT(setruid(PL_delaymagic_uid));
1251 PL_delaymagic &= ~DM_RUID;
1253 # endif /* HAS_SETRUID */
1255 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1256 PERL_UNUSED_RESULT(seteuid(PL_delaymagic_euid));
1257 PL_delaymagic &= ~DM_EUID;
1259 # endif /* HAS_SETEUID */
1260 if (PL_delaymagic & DM_UID) {
1261 if (PL_delaymagic_uid != PL_delaymagic_euid)
1262 DIE(aTHX_ "No setreuid available");
1263 PERL_UNUSED_RESULT(PerlProc_setuid(PL_delaymagic_uid));
1265 # endif /* HAS_SETREUID */
1266 #endif /* HAS_SETRESUID */
1268 tmp_uid = PerlProc_getuid();
1269 tmp_euid = PerlProc_geteuid();
1271 /* XXX $> et al currently silently ignore failures */
1272 if (PL_delaymagic & DM_GID) {
1273 #ifdef HAS_SETRESGID
1275 setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1276 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1279 # ifdef HAS_SETREGID
1281 setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1282 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1));
1285 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1286 PERL_UNUSED_RESULT(setrgid(PL_delaymagic_gid));
1287 PL_delaymagic &= ~DM_RGID;
1289 # endif /* HAS_SETRGID */
1291 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1292 PERL_UNUSED_RESULT(setegid(PL_delaymagic_egid));
1293 PL_delaymagic &= ~DM_EGID;
1295 # endif /* HAS_SETEGID */
1296 if (PL_delaymagic & DM_GID) {
1297 if (PL_delaymagic_gid != PL_delaymagic_egid)
1298 DIE(aTHX_ "No setregid available");
1299 PERL_UNUSED_RESULT(PerlProc_setgid(PL_delaymagic_gid));
1301 # endif /* HAS_SETREGID */
1302 #endif /* HAS_SETRESGID */
1304 tmp_gid = PerlProc_getgid();
1305 tmp_egid = PerlProc_getegid();
1307 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1308 #ifdef NO_TAINT_SUPPORT
1309 PERL_UNUSED_VAR(tmp_uid);
1310 PERL_UNUSED_VAR(tmp_euid);
1311 PERL_UNUSED_VAR(tmp_gid);
1312 PERL_UNUSED_VAR(tmp_egid);
1317 if (gimme == G_VOID)
1318 SP = firstrelem - 1;
1319 else if (gimme == G_SCALAR) {
1322 SETi(lastrelem - firstrelem + 1);
1326 /* note that in this case *firstlelem may have been overwritten
1327 by sv_undef in the odd hash case */
1330 SP = firstrelem + (lastlelem - firstlelem);
1331 lelem = firstlelem + (relem - firstrelem);
1333 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1343 PMOP * const pm = cPMOP;
1344 REGEXP * rx = PM_GETRE(pm);
1345 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1346 SV * const rv = sv_newmortal();
1350 SvUPGRADE(rv, SVt_IV);
1351 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1352 loathe to use it here, but it seems to be the right fix. Or close.
1353 The key part appears to be that it's essential for pp_qr to return a new
1354 object (SV), which implies that there needs to be an effective way to
1355 generate a new SV from the existing SV that is pre-compiled in the
1357 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1360 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1361 if (UNLIKELY((cv = *cvp) && CvCLONE(*cvp))) {
1362 *cvp = cv_clone(cv);
1363 SvREFCNT_dec_NN(cv);
1367 HV *const stash = gv_stashsv(pkg, GV_ADD);
1368 SvREFCNT_dec_NN(pkg);
1369 (void)sv_bless(rv, stash);
1372 if (UNLIKELY(RX_ISTAINTED(rx))) {
1374 SvTAINTED_on(SvRV(rv));
1387 SSize_t curpos = 0; /* initial pos() or current $+[0] */
1390 const char *truebase; /* Start of string */
1391 REGEXP *rx = PM_GETRE(pm);
1393 const I32 gimme = GIMME_V;
1395 const I32 oldsave = PL_savestack_ix;
1396 I32 had_zerolen = 0;
1399 if (PL_op->op_flags & OPf_STACKED)
1408 PUTBACK; /* EVAL blocks need stack_sp. */
1409 /* Skip get-magic if this is a qr// clone, because regcomp has
1411 truebase = ReANY(rx)->mother_re
1412 ? SvPV_nomg_const(TARG, len)
1413 : SvPV_const(TARG, len);
1415 DIE(aTHX_ "panic: pp_match");
1416 strend = truebase + len;
1417 rxtainted = (RX_ISTAINTED(rx) ||
1418 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1421 /* We need to know this in case we fail out early - pos() must be reset */
1422 global = dynpm->op_pmflags & PMf_GLOBAL;
1424 /* PMdf_USED is set after a ?? matches once */
1427 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1429 pm->op_pmflags & PMf_USED
1432 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1436 /* empty pattern special-cased to use last successful pattern if
1437 possible, except for qr// */
1438 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1444 if (RX_MINLEN(rx) >= 0 && (STRLEN)RX_MINLEN(rx) > len) {
1445 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
1446 UVuf" < %"IVdf")\n",
1447 (UV)len, (IV)RX_MINLEN(rx)));
1451 /* get pos() if //g */
1453 mg = mg_find_mglob(TARG);
1454 if (mg && mg->mg_len >= 0) {
1455 curpos = MgBYTEPOS(mg, TARG, truebase, len);
1456 /* last time pos() was set, it was zero-length match */
1457 if (mg->mg_flags & MGf_MINMATCH)
1462 #ifdef PERL_SAWAMPERSAND
1465 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1466 || (dynpm->op_pmflags & PMf_KEEPCOPY)
1470 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1471 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1472 * only on the first iteration. Therefore we need to copy $' as well
1473 * as $&, to make the rest of the string available for captures in
1474 * subsequent iterations */
1475 if (! (global && gimme == G_ARRAY))
1476 r_flags |= REXEC_COPY_SKIP_POST;
1478 #ifdef PERL_SAWAMPERSAND
1479 if (dynpm->op_pmflags & PMf_KEEPCOPY)
1480 /* handle KEEPCOPY in pmop but not rx, eg $r=qr/a/; /$r/p */
1481 r_flags &= ~(REXEC_COPY_SKIP_PRE|REXEC_COPY_SKIP_POST);
1488 s = truebase + curpos;
1490 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1491 had_zerolen, TARG, NULL, r_flags))
1495 if (dynpm->op_pmflags & PMf_ONCE)
1497 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1499 dynpm->op_pmflags |= PMf_USED;
1503 RX_MATCH_TAINTED_on(rx);
1504 TAINT_IF(RX_MATCH_TAINTED(rx));
1508 if (global && (gimme != G_ARRAY || (dynpm->op_pmflags & PMf_CONTINUE))) {
1510 mg = sv_magicext_mglob(TARG);
1511 MgBYTEPOS_set(mg, TARG, truebase, RX_OFFS(rx)[0].end);
1512 if (RX_ZERO_LEN(rx))
1513 mg->mg_flags |= MGf_MINMATCH;
1515 mg->mg_flags &= ~MGf_MINMATCH;
1518 if ((!RX_NPARENS(rx) && !global) || gimme != G_ARRAY) {
1519 LEAVE_SCOPE(oldsave);
1523 /* push captures on stack */
1526 const I32 nparens = RX_NPARENS(rx);
1527 I32 i = (global && !nparens) ? 1 : 0;
1529 SPAGAIN; /* EVAL blocks could move the stack. */
1530 EXTEND(SP, nparens + i);
1531 EXTEND_MORTAL(nparens + i);
1532 for (i = !i; i <= nparens; i++) {
1533 PUSHs(sv_newmortal());
1534 if (LIKELY((RX_OFFS(rx)[i].start != -1)
1535 && RX_OFFS(rx)[i].end != -1 ))
1537 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1538 const char * const s = RX_OFFS(rx)[i].start + truebase;
1539 if (UNLIKELY(RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0
1540 || len < 0 || len > strend - s))
1541 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1542 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1543 (long) i, (long) RX_OFFS(rx)[i].start,
1544 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1545 sv_setpvn(*SP, s, len);
1546 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1551 curpos = (UV)RX_OFFS(rx)[0].end;
1552 had_zerolen = RX_ZERO_LEN(rx);
1553 PUTBACK; /* EVAL blocks may use stack */
1554 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1557 LEAVE_SCOPE(oldsave);
1560 NOT_REACHED; /* NOTREACHED */
1563 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1565 mg = mg_find_mglob(TARG);
1569 LEAVE_SCOPE(oldsave);
1570 if (gimme == G_ARRAY)
1576 Perl_do_readline(pTHX)
1578 dSP; dTARGETSTACKED;
1583 IO * const io = GvIO(PL_last_in_gv);
1584 const I32 type = PL_op->op_type;
1585 const I32 gimme = GIMME_V;
1588 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1590 Perl_tied_method(aTHX_ SV_CONST(READLINE), SP, MUTABLE_SV(io), mg, gimme, 0);
1591 if (gimme == G_SCALAR) {
1593 SvSetSV_nosteal(TARG, TOPs);
1603 if (IoFLAGS(io) & IOf_ARGV) {
1604 if (IoFLAGS(io) & IOf_START) {
1606 if (av_tindex(GvAVn(PL_last_in_gv)) < 0) {
1607 IoFLAGS(io) &= ~IOf_START;
1608 do_open6(PL_last_in_gv, "-", 1, NULL, NULL, 0);
1609 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1610 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1611 SvSETMAGIC(GvSV(PL_last_in_gv));
1616 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1617 if (!fp) { /* Note: fp != IoIFP(io) */
1618 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1621 else if (type == OP_GLOB)
1622 fp = Perl_start_glob(aTHX_ POPs, io);
1624 else if (type == OP_GLOB)
1626 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1627 report_wrongway_fh(PL_last_in_gv, '>');
1631 if ((!io || !(IoFLAGS(io) & IOf_START))
1632 && ckWARN(WARN_CLOSED)
1635 report_evil_fh(PL_last_in_gv);
1637 if (gimme == G_SCALAR) {
1638 /* undef TARG, and push that undefined value */
1639 if (type != OP_RCATLINE) {
1640 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1648 if (gimme == G_SCALAR) {
1650 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1653 if (type == OP_RCATLINE)
1654 SvPV_force_nomg_nolen(sv);
1658 else if (isGV_with_GP(sv)) {
1659 SvPV_force_nomg_nolen(sv);
1661 SvUPGRADE(sv, SVt_PV);
1662 tmplen = SvLEN(sv); /* remember if already alloced */
1663 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1664 /* try short-buffering it. Please update t/op/readline.t
1665 * if you change the growth length.
1670 if (type == OP_RCATLINE && SvOK(sv)) {
1672 SvPV_force_nomg_nolen(sv);
1678 sv = sv_2mortal(newSV(80));
1682 /* This should not be marked tainted if the fp is marked clean */
1683 #define MAYBE_TAINT_LINE(io, sv) \
1684 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1689 /* delay EOF state for a snarfed empty file */
1690 #define SNARF_EOF(gimme,rs,io,sv) \
1691 (gimme != G_SCALAR || SvCUR(sv) \
1692 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1696 if (!sv_gets(sv, fp, offset)
1698 || SNARF_EOF(gimme, PL_rs, io, sv)
1699 || PerlIO_error(fp)))
1701 PerlIO_clearerr(fp);
1702 if (IoFLAGS(io) & IOf_ARGV) {
1703 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1706 (void)do_close(PL_last_in_gv, FALSE);
1708 else if (type == OP_GLOB) {
1709 if (!do_close(PL_last_in_gv, FALSE)) {
1710 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1711 "glob failed (child exited with status %d%s)",
1712 (int)(STATUS_CURRENT >> 8),
1713 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1716 if (gimme == G_SCALAR) {
1717 if (type != OP_RCATLINE) {
1718 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1724 MAYBE_TAINT_LINE(io, sv);
1727 MAYBE_TAINT_LINE(io, sv);
1729 IoFLAGS(io) |= IOf_NOLINE;
1733 if (type == OP_GLOB) {
1736 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1737 char * const tmps = SvEND(sv) - 1;
1738 if (*tmps == *SvPVX_const(PL_rs)) {
1740 SvCUR_set(sv, SvCUR(sv) - 1);
1743 for (t1 = SvPVX_const(sv); *t1; t1++)
1745 if (strchr("*%?", *t1))
1747 if (strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1750 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1751 (void)POPs; /* Unmatched wildcard? Chuck it... */
1754 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1755 if (ckWARN(WARN_UTF8)) {
1756 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1757 const STRLEN len = SvCUR(sv) - offset;
1760 if (!is_utf8_string_loc(s, len, &f))
1761 /* Emulate :encoding(utf8) warning in the same case. */
1762 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1763 "utf8 \"\\x%02X\" does not map to Unicode",
1764 f < (U8*)SvEND(sv) ? *f : 0);
1767 if (gimme == G_ARRAY) {
1768 if (SvLEN(sv) - SvCUR(sv) > 20) {
1769 SvPV_shrink_to_cur(sv);
1771 sv = sv_2mortal(newSV(80));
1774 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1775 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1776 const STRLEN new_len
1777 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1778 SvPV_renew(sv, new_len);
1789 SV * const keysv = POPs;
1790 HV * const hv = MUTABLE_HV(POPs);
1791 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1792 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1794 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1795 bool preeminent = TRUE;
1797 if (SvTYPE(hv) != SVt_PVHV)
1804 /* If we can determine whether the element exist,
1805 * Try to preserve the existenceness of a tied hash
1806 * element by using EXISTS and DELETE if possible.
1807 * Fallback to FETCH and STORE otherwise. */
1808 if (SvCANEXISTDELETE(hv))
1809 preeminent = hv_exists_ent(hv, keysv, 0);
1812 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1813 svp = he ? &HeVAL(he) : NULL;
1815 if (!svp || !*svp || *svp == &PL_sv_undef) {
1819 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1821 lv = sv_newmortal();
1822 sv_upgrade(lv, SVt_PVLV);
1824 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1825 SvREFCNT_dec_NN(key2); /* sv_magic() increments refcount */
1826 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1832 if (HvNAME_get(hv) && isGV(*svp))
1833 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1834 else if (preeminent)
1835 save_helem_flags(hv, keysv, svp,
1836 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1838 SAVEHDELETE(hv, keysv);
1840 else if (PL_op->op_private & OPpDEREF) {
1841 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1845 sv = (svp && *svp ? *svp : &PL_sv_undef);
1846 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1847 * was to make C<local $tied{foo} = $tied{foo}> possible.
1848 * However, it seems no longer to be needed for that purpose, and
1849 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1850 * would loop endlessly since the pos magic is getting set on the
1851 * mortal copy and lost. However, the copy has the effect of
1852 * triggering the get magic, and losing it altogether made things like
1853 * c<$tied{foo};> in void context no longer do get magic, which some
1854 * code relied on. Also, delayed triggering of magic on @+ and friends
1855 * meant the original regex may be out of scope by now. So as a
1856 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1857 * being called too many times). */
1858 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1865 /* a stripped-down version of Perl_softref2xv() for use by
1866 * pp_multideref(), which doesn't use PL_op->op_flags */
1869 S_softref2xv_lite(pTHX_ SV *const sv, const char *const what,
1872 if (PL_op->op_private & HINT_STRICT_REFS) {
1874 Perl_die(aTHX_ PL_no_symref_sv, sv,
1875 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""), what);
1877 Perl_die(aTHX_ PL_no_usym, what);
1880 Perl_die(aTHX_ PL_no_usym, what);
1881 return gv_fetchsv_nomg(sv, GV_ADD, type);
1885 /* handle one or more derefs and array/hash indexings, e.g.
1886 * $h->{foo} or $a[0]{$key}[$i] or f()->[1]
1888 * op_aux points to an array of unions of UV / IV / SV* / PADOFFSET.
1889 * Each of these either contains an action, or an argument, such as
1890 * a UV to use as an array index, or a lexical var to retrieve.
1891 * In fact, several actions re stored per UV; we keep shifting new actions
1892 * of the one UV, and only reload when it becomes zero.
1897 SV *sv = NULL; /* init to avoid spurious 'may be used uninitialized' */
1898 UNOP_AUX_item *items = cUNOP_AUXx(PL_op)->op_aux;
1899 UV actions = items->uv;
1902 /* this tells find_uninit_var() where we're up to */
1903 PL_multideref_pc = items;
1906 /* there are three main classes of action; the first retrieve
1907 * the initial AV or HV from a variable or the stack; the second
1908 * does the equivalent of an unrolled (/DREFAV, rv2av, aelem),
1909 * the third an unrolled (/DREFHV, rv2hv, helem).
1911 switch (actions & MDEREF_ACTION_MASK) {
1914 actions = (++items)->uv;
1917 case MDEREF_AV_padav_aelem: /* $lex[...] */
1918 sv = PAD_SVl((++items)->pad_offset);
1921 case MDEREF_AV_gvav_aelem: /* $pkg[...] */
1922 sv = UNOP_AUX_item_sv(++items);
1923 assert(isGV_with_GP(sv));
1924 sv = (SV*)GvAVn((GV*)sv);
1927 case MDEREF_AV_pop_rv2av_aelem: /* expr->[...] */
1932 goto do_AV_rv2av_aelem;
1935 case MDEREF_AV_gvsv_vivify_rv2av_aelem: /* $pkg->[...] */
1936 sv = UNOP_AUX_item_sv(++items);
1937 assert(isGV_with_GP(sv));
1938 sv = GvSVn((GV*)sv);
1939 goto do_AV_vivify_rv2av_aelem;
1941 case MDEREF_AV_padsv_vivify_rv2av_aelem: /* $lex->[...] */
1942 sv = PAD_SVl((++items)->pad_offset);
1945 do_AV_vivify_rv2av_aelem:
1946 case MDEREF_AV_vivify_rv2av_aelem: /* vivify, ->[...] */
1947 /* this is the OPpDEREF action normally found at the end of
1948 * ops like aelem, helem, rv2sv */
1949 sv = vivify_ref(sv, OPpDEREF_AV);
1953 /* this is basically a copy of pp_rv2av when it just has the
1956 if (LIKELY(SvROK(sv))) {
1957 if (UNLIKELY(SvAMAGIC(sv))) {
1958 sv = amagic_deref_call(sv, to_av_amg);
1961 if (UNLIKELY(SvTYPE(sv) != SVt_PVAV))
1962 DIE(aTHX_ "Not an ARRAY reference");
1964 else if (SvTYPE(sv) != SVt_PVAV) {
1965 if (!isGV_with_GP(sv))
1966 sv = (SV*)S_softref2xv_lite(aTHX_ sv, "an ARRAY", SVt_PVAV);
1967 sv = MUTABLE_SV(GvAVn((GV*)sv));
1973 /* retrieve the key; this may be either a lexical or package
1974 * var (whose index/ptr is stored as an item) or a signed
1975 * integer constant stored as an item.
1978 IV elem = 0; /* to shut up stupid compiler warnings */
1981 assert(SvTYPE(sv) == SVt_PVAV);
1983 switch (actions & MDEREF_INDEX_MASK) {
1984 case MDEREF_INDEX_none:
1986 case MDEREF_INDEX_const:
1987 elem = (++items)->iv;
1989 case MDEREF_INDEX_padsv:
1990 elemsv = PAD_SVl((++items)->pad_offset);
1992 case MDEREF_INDEX_gvsv:
1993 elemsv = UNOP_AUX_item_sv(++items);
1994 assert(isGV_with_GP(elemsv));
1995 elemsv = GvSVn((GV*)elemsv);
1997 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv)
1998 && ckWARN(WARN_MISC)))
1999 Perl_warner(aTHX_ packWARN(WARN_MISC),
2000 "Use of reference \"%"SVf"\" as array index",
2002 /* the only time that S_find_uninit_var() needs this
2003 * is to determine which index value triggered the
2004 * undef warning. So just update it here. Note that
2005 * since we don't save and restore this var (e.g. for
2006 * tie or overload execution), its value will be
2007 * meaningless apart from just here */
2008 PL_multideref_pc = items;
2009 elem = SvIV(elemsv);
2014 /* this is basically a copy of pp_aelem with OPpDEREF skipped */
2016 if (!(actions & MDEREF_FLAG_last)) {
2017 SV** svp = av_fetch((AV*)sv, elem, 1);
2018 if (!svp || ! (sv=*svp))
2019 DIE(aTHX_ PL_no_aelem, elem);
2023 if (PL_op->op_private &
2024 (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE))
2026 if (PL_op->op_private & OPpMULTIDEREF_EXISTS) {
2027 sv = av_exists((AV*)sv, elem) ? &PL_sv_yes : &PL_sv_no;
2030 I32 discard = (GIMME_V == G_VOID) ? G_DISCARD : 0;
2031 sv = av_delete((AV*)sv, elem, discard);
2039 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2040 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2041 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2042 bool preeminent = TRUE;
2043 AV *const av = (AV*)sv;
2046 if (UNLIKELY(localizing)) {
2050 /* If we can determine whether the element exist,
2051 * Try to preserve the existenceness of a tied array
2052 * element by using EXISTS and DELETE if possible.
2053 * Fallback to FETCH and STORE otherwise. */
2054 if (SvCANEXISTDELETE(av))
2055 preeminent = av_exists(av, elem);
2058 svp = av_fetch(av, elem, lval && !defer);
2061 if (!svp || !(sv = *svp)) {
2064 DIE(aTHX_ PL_no_aelem, elem);
2065 len = av_tindex(av);
2066 sv = sv_2mortal(newSVavdefelem(av,
2067 /* Resolve a negative index now, unless it points
2068 * before the beginning of the array, in which
2069 * case record it for error reporting in
2070 * magic_setdefelem. */
2071 elem < 0 && len + elem >= 0
2072 ? len + elem : elem, 1));
2075 if (UNLIKELY(localizing)) {
2077 save_aelem(av, elem, svp);
2078 sv = *svp; /* may have changed */
2081 SAVEADELETE(av, elem);
2086 sv = (svp ? *svp : &PL_sv_undef);
2087 /* see note in pp_helem() */
2088 if (SvRMAGICAL(av) && SvGMAGICAL(sv))
2105 case MDEREF_HV_padhv_helem: /* $lex{...} */
2106 sv = PAD_SVl((++items)->pad_offset);
2109 case MDEREF_HV_gvhv_helem: /* $pkg{...} */
2110 sv = UNOP_AUX_item_sv(++items);
2111 assert(isGV_with_GP(sv));
2112 sv = (SV*)GvHVn((GV*)sv);
2115 case MDEREF_HV_pop_rv2hv_helem: /* expr->{...} */
2120 goto do_HV_rv2hv_helem;
2123 case MDEREF_HV_gvsv_vivify_rv2hv_helem: /* $pkg->{...} */
2124 sv = UNOP_AUX_item_sv(++items);
2125 assert(isGV_with_GP(sv));
2126 sv = GvSVn((GV*)sv);
2127 goto do_HV_vivify_rv2hv_helem;
2129 case MDEREF_HV_padsv_vivify_rv2hv_helem: /* $lex->{...} */
2130 sv = PAD_SVl((++items)->pad_offset);
2133 do_HV_vivify_rv2hv_helem:
2134 case MDEREF_HV_vivify_rv2hv_helem: /* vivify, ->{...} */
2135 /* this is the OPpDEREF action normally found at the end of
2136 * ops like aelem, helem, rv2sv */
2137 sv = vivify_ref(sv, OPpDEREF_HV);
2141 /* this is basically a copy of pp_rv2hv when it just has the
2142 * sKR/1 flags (and pp_rv2hv is aliased to pp_rv2av) */
2145 if (LIKELY(SvROK(sv))) {
2146 if (UNLIKELY(SvAMAGIC(sv))) {
2147 sv = amagic_deref_call(sv, to_hv_amg);
2150 if (UNLIKELY(SvTYPE(sv) != SVt_PVHV))
2151 DIE(aTHX_ "Not a HASH reference");
2153 else if (SvTYPE(sv) != SVt_PVHV) {
2154 if (!isGV_with_GP(sv))
2155 sv = (SV*)S_softref2xv_lite(aTHX_ sv, "a HASH", SVt_PVHV);
2156 sv = MUTABLE_SV(GvHVn((GV*)sv));
2162 /* retrieve the key; this may be either a lexical / package
2163 * var or a string constant, whose index/ptr is stored as an
2166 SV *keysv = NULL; /* to shut up stupid compiler warnings */
2168 assert(SvTYPE(sv) == SVt_PVHV);
2170 switch (actions & MDEREF_INDEX_MASK) {
2171 case MDEREF_INDEX_none:
2174 case MDEREF_INDEX_const:
2175 keysv = UNOP_AUX_item_sv(++items);
2178 case MDEREF_INDEX_padsv:
2179 keysv = PAD_SVl((++items)->pad_offset);
2182 case MDEREF_INDEX_gvsv:
2183 keysv = UNOP_AUX_item_sv(++items);
2184 keysv = GvSVn((GV*)keysv);
2188 /* see comment above about setting this var */
2189 PL_multideref_pc = items;
2192 /* ensure that candidate CONSTs have been HEKified */
2193 assert( ((actions & MDEREF_INDEX_MASK) != MDEREF_INDEX_const)
2194 || SvTYPE(keysv) >= SVt_PVMG
2197 || SvIsCOW_shared_hash(keysv));
2199 /* this is basically a copy of pp_helem with OPpDEREF skipped */
2201 if (!(actions & MDEREF_FLAG_last)) {
2202 HE *he = hv_fetch_ent((HV*)sv, keysv, 1, 0);
2203 if (!he || !(sv=HeVAL(he)) || sv == &PL_sv_undef)
2204 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
2208 if (PL_op->op_private &
2209 (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE))
2211 if (PL_op->op_private & OPpMULTIDEREF_EXISTS) {
2212 sv = hv_exists_ent((HV*)sv, keysv, 0)
2213 ? &PL_sv_yes : &PL_sv_no;
2216 I32 discard = (GIMME_V == G_VOID) ? G_DISCARD : 0;
2217 sv = hv_delete_ent((HV*)sv, keysv, discard, 0);
2225 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2226 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2227 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2228 bool preeminent = TRUE;
2230 HV * const hv = (HV*)sv;
2233 if (UNLIKELY(localizing)) {
2237 /* If we can determine whether the element exist,
2238 * Try to preserve the existenceness of a tied hash
2239 * element by using EXISTS and DELETE if possible.
2240 * Fallback to FETCH and STORE otherwise. */
2241 if (SvCANEXISTDELETE(hv))
2242 preeminent = hv_exists_ent(hv, keysv, 0);
2245 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
2246 svp = he ? &HeVAL(he) : NULL;
2250 if (!svp || !(sv = *svp) || sv == &PL_sv_undef) {
2254 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
2255 lv = sv_newmortal();
2256 sv_upgrade(lv, SVt_PVLV);
2258 sv_magic(lv, key2 = newSVsv(keysv),
2259 PERL_MAGIC_defelem, NULL, 0);
2260 /* sv_magic() increments refcount */
2261 SvREFCNT_dec_NN(key2);
2262 LvTARG(lv) = SvREFCNT_inc_simple(hv);
2268 if (HvNAME_get(hv) && isGV(sv))
2269 save_gp(MUTABLE_GV(sv),
2270 !(PL_op->op_flags & OPf_SPECIAL));
2271 else if (preeminent) {
2272 save_helem_flags(hv, keysv, svp,
2273 (PL_op->op_flags & OPf_SPECIAL)
2274 ? 0 : SAVEf_SETMAGIC);
2275 sv = *svp; /* may have changed */
2278 SAVEHDELETE(hv, keysv);
2283 sv = (svp && *svp ? *svp : &PL_sv_undef);
2284 /* see note in pp_helem() */
2285 if (SvRMAGICAL(hv) && SvGMAGICAL(sv))
2294 actions >>= MDEREF_SHIFT;
2308 cx = &cxstack[cxstack_ix];
2309 itersvp = CxITERVAR(cx);
2311 switch (CxTYPE(cx)) {
2313 case CXt_LOOP_LAZYSV: /* string increment */
2315 SV* cur = cx->blk_loop.state_u.lazysv.cur;
2316 SV *end = cx->blk_loop.state_u.lazysv.end;
2317 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
2318 It has SvPVX of "" and SvCUR of 0, which is what we want. */
2320 const char *max = SvPV_const(end, maxlen);
2321 if (UNLIKELY(SvNIOK(cur) || SvCUR(cur) > maxlen))
2325 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
2326 /* safe to reuse old SV */
2327 sv_setsv(oldsv, cur);
2331 /* we need a fresh SV every time so that loop body sees a
2332 * completely new SV for closures/references to work as
2334 *itersvp = newSVsv(cur);
2335 SvREFCNT_dec_NN(oldsv);
2337 if (strEQ(SvPVX_const(cur), max))
2338 sv_setiv(cur, 0); /* terminate next time */
2344 case CXt_LOOP_LAZYIV: /* integer increment */
2346 IV cur = cx->blk_loop.state_u.lazyiv.cur;
2347 if (UNLIKELY(cur > cx->blk_loop.state_u.lazyiv.end))
2351 /* don't risk potential race */
2352 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
2353 /* safe to reuse old SV */
2354 sv_setiv(oldsv, cur);
2358 /* we need a fresh SV every time so that loop body sees a
2359 * completely new SV for closures/references to work as they
2361 *itersvp = newSViv(cur);
2362 SvREFCNT_dec_NN(oldsv);
2365 if (UNLIKELY(cur == IV_MAX)) {
2366 /* Handle end of range at IV_MAX */
2367 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
2369 ++cx->blk_loop.state_u.lazyiv.cur;
2373 case CXt_LOOP_FOR: /* iterate array */
2376 AV *av = cx->blk_loop.state_u.ary.ary;
2378 bool av_is_stack = FALSE;
2385 if (PL_op->op_private & OPpITER_REVERSED) {
2386 ix = --cx->blk_loop.state_u.ary.ix;
2387 if (UNLIKELY(ix <= (av_is_stack ? cx->blk_loop.resetsp : -1)))
2391 ix = ++cx->blk_loop.state_u.ary.ix;
2392 if (UNLIKELY(ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av))))
2396 if (UNLIKELY(SvMAGICAL(av) || AvREIFY(av))) {
2397 SV * const * const svp = av_fetch(av, ix, FALSE);
2398 sv = svp ? *svp : NULL;
2401 sv = AvARRAY(av)[ix];
2404 if (UNLIKELY(cx->cx_type & CXp_FOR_LVREF)) {
2405 SvSetMagicSV(*itersvp, sv);
2410 if (UNLIKELY(SvIS_FREED(sv))) {
2412 Perl_croak(aTHX_ "Use of freed value in iteration");
2419 SvREFCNT_inc_simple_void_NN(sv);
2422 else if (!av_is_stack) {
2423 sv = newSVavdefelem(av, ix, 0);
2430 SvREFCNT_dec(oldsv);
2435 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
2441 A description of how taint works in pattern matching and substitution.
2443 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2444 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2446 While the pattern is being assembled/concatenated and then compiled,
2447 PL_tainted will get set (via TAINT_set) if any component of the pattern
2448 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2449 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2450 TAINT_get). It will also be set if any component of the pattern matches
2451 based on locale-dependent behavior.
2453 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2454 the pattern is marked as tainted. This means that subsequent usage, such
2455 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2456 on the new pattern too.
2458 RXf_TAINTED_SEEN is used post-execution by the get magic code
2459 of $1 et al to indicate whether the returned value should be tainted.
2460 It is the responsibility of the caller of the pattern (i.e. pp_match,
2461 pp_subst etc) to set this flag for any other circumstances where $1 needs
2464 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2466 There are three possible sources of taint
2468 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2469 * the replacement string (or expression under /e)
2471 There are four destinations of taint and they are affected by the sources
2472 according to the rules below:
2474 * the return value (not including /r):
2475 tainted by the source string and pattern, but only for the
2476 number-of-iterations case; boolean returns aren't tainted;
2477 * the modified string (or modified copy under /r):
2478 tainted by the source string, pattern, and replacement strings;
2480 tainted by the pattern, and under 'use re "taint"', by the source
2482 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2483 should always be unset before executing subsequent code.
2485 The overall action of pp_subst is:
2487 * at the start, set bits in rxtainted indicating the taint status of
2488 the various sources.
2490 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2491 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2492 pattern has subsequently become tainted via locale ops.
2494 * If control is being passed to pp_substcont to execute a /e block,
2495 save rxtainted in the CXt_SUBST block, for future use by
2498 * Whenever control is being returned to perl code (either by falling
2499 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2500 use the flag bits in rxtainted to make all the appropriate types of
2501 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2502 et al will appear tainted.
2504 pp_match is just a simpler version of the above.
2520 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2521 See "how taint works" above */
2524 REGEXP *rx = PM_GETRE(pm);
2526 int force_on_match = 0;
2527 const I32 oldsave = PL_savestack_ix;
2529 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2534 /* known replacement string? */
2535 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2539 if (PL_op->op_flags & OPf_STACKED)
2548 SvGETMAGIC(TARG); /* must come before cow check */
2550 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2551 because they make integers such as 256 "false". */
2552 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2555 sv_force_normal_flags(TARG,0);
2557 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2558 && (SvREADONLY(TARG)
2559 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2560 || SvTYPE(TARG) > SVt_PVLV)
2561 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2562 Perl_croak_no_modify();
2565 orig = SvPV_nomg(TARG, len);
2566 /* note we don't (yet) force the var into being a string; if we fail
2567 * to match, we leave as-is; on successful match howeverm, we *will*
2568 * coerce into a string, then repeat the match */
2569 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2572 /* only replace once? */
2573 once = !(rpm->op_pmflags & PMf_GLOBAL);
2575 /* See "how taint works" above */
2578 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2579 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2580 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2581 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2582 ? SUBST_TAINT_BOOLRET : 0));
2588 DIE(aTHX_ "panic: pp_subst, pm=%p, orig=%p", pm, orig);
2590 strend = orig + len;
2591 slen = DO_UTF8(TARG) ? utf8_length((U8*)orig, (U8*)strend) : len;
2592 maxiters = 2 * slen + 10; /* We can match twice at each
2593 position, once with zero-length,
2594 second time with non-zero. */
2596 if (!RX_PRELEN(rx) && PL_curpm
2597 && !ReANY(rx)->mother_re) {
2602 #ifdef PERL_SAWAMPERSAND
2603 r_flags = ( RX_NPARENS(rx)
2605 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2606 || (rpm->op_pmflags & PMf_KEEPCOPY)
2611 r_flags = REXEC_COPY_STR;
2614 if (!CALLREGEXEC(rx, orig, strend, orig, 0, TARG, NULL, r_flags))
2617 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2618 LEAVE_SCOPE(oldsave);
2623 /* known replacement string? */
2625 /* replacement needing upgrading? */
2626 if (DO_UTF8(TARG) && !doutf8) {
2627 nsv = sv_newmortal();
2630 sv_recode_to_utf8(nsv, _get_encoding());
2632 sv_utf8_upgrade(nsv);
2633 c = SvPV_const(nsv, clen);
2637 c = SvPV_const(dstr, clen);
2638 doutf8 = DO_UTF8(dstr);
2641 if (SvTAINTED(dstr))
2642 rxtainted |= SUBST_TAINT_REPL;
2649 /* can do inplace substitution? */
2654 && (I32)clen <= RX_MINLENRET(rx)
2656 || !(r_flags & REXEC_COPY_STR)
2657 || (!SvGMAGICAL(dstr) && !(RX_EXTFLAGS(rx) & RXf_EVAL_SEEN))
2659 && !(RX_EXTFLAGS(rx) & RXf_NO_INPLACE_SUBST)
2660 && (!doutf8 || SvUTF8(TARG))
2661 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2665 if (SvIsCOW(TARG)) {
2666 if (!force_on_match)
2668 assert(SvVOK(TARG));
2671 if (force_on_match) {
2672 /* redo the first match, this time with the orig var
2673 * forced into being a string */
2675 orig = SvPV_force_nomg(TARG, len);
2681 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2682 rxtainted |= SUBST_TAINT_PAT;
2683 m = orig + RX_OFFS(rx)[0].start;
2684 d = orig + RX_OFFS(rx)[0].end;
2686 if (m - s > strend - d) { /* faster to shorten from end */
2689 Copy(c, m, clen, char);
2694 Move(d, m, i, char);
2698 SvCUR_set(TARG, m - s);
2700 else { /* faster from front */
2704 Move(s, d - i, i, char);
2707 Copy(c, d, clen, char);
2714 d = s = RX_OFFS(rx)[0].start + orig;
2717 if (UNLIKELY(iters++ > maxiters))
2718 DIE(aTHX_ "Substitution loop");
2719 if (UNLIKELY(RX_MATCH_TAINTED(rx))) /* run time pattern taint, eg locale */
2720 rxtainted |= SUBST_TAINT_PAT;
2721 m = RX_OFFS(rx)[0].start + orig;
2724 Move(s, d, i, char);
2728 Copy(c, d, clen, char);
2731 s = RX_OFFS(rx)[0].end + orig;
2732 } while (CALLREGEXEC(rx, s, strend, orig,
2733 s == m, /* don't match same null twice */
2735 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2738 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2739 Move(s, d, i+1, char); /* include the NUL */
2749 if (force_on_match) {
2750 /* redo the first match, this time with the orig var
2751 * forced into being a string */
2753 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2754 /* I feel that it should be possible to avoid this mortal copy
2755 given that the code below copies into a new destination.
2756 However, I suspect it isn't worth the complexity of
2757 unravelling the C<goto force_it> for the small number of
2758 cases where it would be viable to drop into the copy code. */
2759 TARG = sv_2mortal(newSVsv(TARG));
2761 orig = SvPV_force_nomg(TARG, len);
2767 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2768 rxtainted |= SUBST_TAINT_PAT;
2770 s = RX_OFFS(rx)[0].start + orig;
2771 dstr = newSVpvn_flags(orig, s-orig,
2772 SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2777 /* note that a whole bunch of local vars are saved here for
2778 * use by pp_substcont: here's a list of them in case you're
2779 * searching for places in this sub that uses a particular var:
2780 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2781 * s m strend rx once */
2783 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2787 if (UNLIKELY(iters++ > maxiters))
2788 DIE(aTHX_ "Substitution loop");
2789 if (UNLIKELY(RX_MATCH_TAINTED(rx)))
2790 rxtainted |= SUBST_TAINT_PAT;
2791 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2793 char *old_orig = orig;
2794 assert(RX_SUBOFFSET(rx) == 0);
2796 orig = RX_SUBBEG(rx);
2797 s = orig + (old_s - old_orig);
2798 strend = s + (strend - old_s);
2800 m = RX_OFFS(rx)[0].start + orig;
2801 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2802 s = RX_OFFS(rx)[0].end + orig;
2804 /* replacement already stringified */
2806 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2811 if (!nsv) nsv = sv_newmortal();
2812 sv_copypv(nsv, repl);
2813 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, _get_encoding());
2814 sv_catsv(dstr, nsv);
2816 else sv_catsv(dstr, repl);
2817 if (UNLIKELY(SvTAINTED(repl)))
2818 rxtainted |= SUBST_TAINT_REPL;
2822 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2824 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2825 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2827 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2828 /* From here on down we're using the copy, and leaving the original
2835 /* The match may make the string COW. If so, brilliant, because
2836 that's just saved us one malloc, copy and free - the regexp has
2837 donated the old buffer, and we malloc an entirely new one, rather
2838 than the regexp malloc()ing a buffer and copying our original,
2839 only for us to throw it away here during the substitution. */
2840 if (SvIsCOW(TARG)) {
2841 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2847 SvPV_set(TARG, SvPVX(dstr));
2848 SvCUR_set(TARG, SvCUR(dstr));
2849 SvLEN_set(TARG, SvLEN(dstr));
2850 SvFLAGS(TARG) |= SvUTF8(dstr);
2851 SvPV_set(dstr, NULL);
2858 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2859 (void)SvPOK_only_UTF8(TARG);
2862 /* See "how taint works" above */
2864 if ((rxtainted & SUBST_TAINT_PAT) ||
2865 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2866 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2868 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2870 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2871 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2873 SvTAINTED_on(TOPs); /* taint return value */
2875 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2877 /* needed for mg_set below */
2879 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2883 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2885 LEAVE_SCOPE(oldsave);
2894 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2895 ++*PL_markstack_ptr;
2897 LEAVE_with_name("grep_item"); /* exit inner scope */
2900 if (UNLIKELY(PL_stack_base + *PL_markstack_ptr > SP)) {
2902 const I32 gimme = GIMME_V;
2904 LEAVE_with_name("grep"); /* exit outer scope */
2905 (void)POPMARK; /* pop src */
2906 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2907 (void)POPMARK; /* pop dst */
2908 SP = PL_stack_base + POPMARK; /* pop original mark */
2909 if (gimme == G_SCALAR) {
2910 if (PL_op->op_private & OPpGREP_LEX) {
2911 SV* const sv = sv_newmortal();
2912 sv_setiv(sv, items);
2920 else if (gimme == G_ARRAY)
2927 ENTER_with_name("grep_item"); /* enter inner scope */
2930 src = PL_stack_base[*PL_markstack_ptr];
2931 if (SvPADTMP(src)) {
2932 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
2936 if (PL_op->op_private & OPpGREP_LEX)
2937 PAD_SVl(PL_op->op_targ) = src;
2941 RETURNOP(cLOGOP->op_other);
2955 if (CxMULTICALL(&cxstack[cxstack_ix]))
2959 cxstack_ix++; /* temporarily protect top context */
2962 if (gimme == G_SCALAR) {
2964 if (LIKELY(MARK <= SP)) {
2965 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2966 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2967 && !SvMAGICAL(TOPs)) {
2968 *MARK = SvREFCNT_inc(TOPs);
2973 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2975 *MARK = sv_mortalcopy(sv);
2976 SvREFCNT_dec_NN(sv);
2979 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2980 && !SvMAGICAL(TOPs)) {
2984 *MARK = sv_mortalcopy(TOPs);
2988 *MARK = &PL_sv_undef;
2992 else if (gimme == G_ARRAY) {
2993 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2994 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2995 || SvMAGICAL(*MARK)) {
2996 *MARK = sv_mortalcopy(*MARK);
2997 TAINT_NOT; /* Each item is independent */
3004 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
3006 PL_curpm = newpm; /* ... and pop $1 et al */
3009 return cx->blk_sub.retop;
3019 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
3022 DIE(aTHX_ "Not a CODE reference");
3023 /* This is overwhelmingly the most common case: */
3024 if (!LIKELY(SvTYPE(sv) == SVt_PVGV && (cv = GvCVu((const GV *)sv)))) {
3025 switch (SvTYPE(sv)) {
3028 if (!(cv = GvCVu((const GV *)sv))) {
3030 cv = sv_2cv(sv, &stash, &gv, 0);
3039 if(isGV_with_GP(sv)) goto we_have_a_glob;
3042 if (sv == &PL_sv_yes) { /* unfound import, ignore */
3044 SP = PL_stack_base + POPMARK;
3052 sv = amagic_deref_call(sv, to_cv_amg);
3053 /* Don't SPAGAIN here. */
3060 DIE(aTHX_ PL_no_usym, "a subroutine");
3061 sym = SvPV_nomg_const(sv, len);
3062 if (PL_op->op_private & HINT_STRICT_REFS)
3063 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
3064 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
3067 cv = MUTABLE_CV(SvRV(sv));
3068 if (SvTYPE(cv) == SVt_PVCV)
3073 DIE(aTHX_ "Not a CODE reference");
3074 /* This is the second most common case: */
3076 cv = MUTABLE_CV(sv);
3084 if (UNLIKELY(CvCLONE(cv) && ! CvCLONED(cv)))
3085 DIE(aTHX_ "Closure prototype called");
3086 if (UNLIKELY(!CvROOT(cv) && !CvXSUB(cv))) {
3090 /* anonymous or undef'd function leaves us no recourse */
3091 if (CvLEXICAL(cv) && CvHASGV(cv))
3092 DIE(aTHX_ "Undefined subroutine &%"SVf" called",
3093 SVfARG(cv_name(cv, NULL, 0)));
3094 if (CvANON(cv) || !CvHASGV(cv)) {
3095 DIE(aTHX_ "Undefined subroutine called");
3098 /* autoloaded stub? */
3099 if (cv != GvCV(gv = CvGV(cv))) {
3102 /* should call AUTOLOAD now? */
3105 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
3106 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
3112 sub_name = sv_newmortal();
3113 gv_efullname3(sub_name, gv, NULL);
3114 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
3122 if (UNLIKELY((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub)
3125 Perl_get_db_sub(aTHX_ &sv, cv);
3127 PL_curcopdb = PL_curcop;
3129 /* check for lsub that handles lvalue subroutines */
3130 cv = GvCV(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVCV));
3131 /* if lsub not found then fall back to DB::sub */
3132 if (!cv) cv = GvCV(PL_DBsub);
3134 cv = GvCV(PL_DBsub);
3137 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
3138 DIE(aTHX_ "No DB::sub routine defined");
3143 if (!(CvISXSUB(cv))) {
3144 /* This path taken at least 75% of the time */
3146 PADLIST * const padlist = CvPADLIST(cv);
3149 PUSHBLOCK(cx, CXt_SUB, MARK);
3151 cx->blk_sub.retop = PL_op->op_next;
3152 if (UNLIKELY((depth = ++CvDEPTH(cv)) >= 2)) {
3153 PERL_STACK_OVERFLOW_CHECK();
3154 pad_push(padlist, depth);
3157 PAD_SET_CUR_NOSAVE(padlist, depth);
3158 if (LIKELY(hasargs)) {
3159 AV *const av = MUTABLE_AV(PAD_SVl(0));
3163 if (UNLIKELY(AvREAL(av))) {
3164 /* @_ is normally not REAL--this should only ever
3165 * happen when DB::sub() calls things that modify @_ */
3170 defavp = &GvAV(PL_defgv);
3171 cx->blk_sub.savearray = *defavp;
3172 *defavp = MUTABLE_AV(SvREFCNT_inc_simple_NN(av));
3173 CX_CURPAD_SAVE(cx->blk_sub);
3174 cx->blk_sub.argarray = av;
3177 if (UNLIKELY(items - 1 > AvMAX(av))) {
3178 SV **ary = AvALLOC(av);
3179 AvMAX(av) = items - 1;
3180 Renew(ary, items, SV*);
3185 Copy(MARK+1,AvARRAY(av),items,SV*);
3186 AvFILLp(av) = items - 1;
3192 if (SvPADTMP(*MARK)) {
3193 *MARK = sv_mortalcopy(*MARK);
3201 if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
3203 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
3204 /* warning must come *after* we fully set up the context
3205 * stuff so that __WARN__ handlers can safely dounwind()
3208 if (UNLIKELY(depth == PERL_SUB_DEPTH_WARN
3209 && ckWARN(WARN_RECURSION)
3210 && !(PERLDB_SUB && cv == GvCV(PL_DBsub))))
3211 sub_crush_depth(cv);
3212 RETURNOP(CvSTART(cv));
3215 SSize_t markix = TOPMARK;
3220 if (UNLIKELY(((PL_op->op_private
3221 & PUSHSUB_GET_LVALUE_MASK(Perl_is_lvalue_sub)
3222 ) & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
3224 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
3226 if (UNLIKELY(!hasargs && GvAV(PL_defgv))) {
3227 /* Need to copy @_ to stack. Alternative may be to
3228 * switch stack to @_, and copy return values
3229 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
3230 AV * const av = GvAV(PL_defgv);
3231 const SSize_t items = AvFILL(av) + 1;
3235 const bool m = cBOOL(SvRMAGICAL(av));
3236 /* Mark is at the end of the stack. */
3238 for (; i < items; ++i)
3242 SV ** const svp = av_fetch(av, i, 0);
3243 sv = svp ? *svp : NULL;
3245 else sv = AvARRAY(av)[i];
3246 if (sv) SP[i+1] = sv;
3248 SP[i+1] = newSVavdefelem(av, i, 1);
3256 SV **mark = PL_stack_base + markix;
3257 SSize_t items = SP - mark;
3260 if (*mark && SvPADTMP(*mark)) {
3261 *mark = sv_mortalcopy(*mark);
3265 /* We assume first XSUB in &DB::sub is the called one. */
3266 if (UNLIKELY(PL_curcopdb)) {
3267 SAVEVPTR(PL_curcop);
3268 PL_curcop = PL_curcopdb;
3271 /* Do we need to open block here? XXXX */
3273 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
3275 CvXSUB(cv)(aTHX_ cv);
3277 /* Enforce some sanity in scalar context. */
3278 if (gimme == G_SCALAR) {
3279 SV **svp = PL_stack_base + markix + 1;
3280 if (svp != PL_stack_sp) {
3281 *svp = svp > PL_stack_sp ? &PL_sv_undef : *PL_stack_sp;
3291 Perl_sub_crush_depth(pTHX_ CV *cv)
3293 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
3296 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
3298 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
3299 SVfARG(cv_name(cv,NULL,0)));
3307 SV* const elemsv = POPs;
3308 IV elem = SvIV(elemsv);
3309 AV *const av = MUTABLE_AV(POPs);
3310 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
3311 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
3312 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
3313 bool preeminent = TRUE;
3316 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC)))
3317 Perl_warner(aTHX_ packWARN(WARN_MISC),
3318 "Use of reference \"%"SVf"\" as array index",
3320 if (UNLIKELY(SvTYPE(av) != SVt_PVAV))
3323 if (UNLIKELY(localizing)) {
3327 /* If we can determine whether the element exist,
3328 * Try to preserve the existenceness of a tied array
3329 * element by using EXISTS and DELETE if possible.
3330 * Fallback to FETCH and STORE otherwise. */
3331 if (SvCANEXISTDELETE(av))
3332 preeminent = av_exists(av, elem);
3335 svp = av_fetch(av, elem, lval && !defer);
3337 #ifdef PERL_MALLOC_WRAP
3338 if (SvUOK(elemsv)) {
3339 const UV uv = SvUV(elemsv);
3340 elem = uv > IV_MAX ? IV_MAX : uv;
3342 else if (SvNOK(elemsv))
3343 elem = (IV)SvNV(elemsv);
3345 static const char oom_array_extend[] =
3346 "Out of memory during array extend"; /* Duplicated in av.c */
3347 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3350 if (!svp || !*svp) {
3353 DIE(aTHX_ PL_no_aelem, elem);
3354 len = av_tindex(av);
3355 mPUSHs(newSVavdefelem(av,
3356 /* Resolve a negative index now, unless it points before the
3357 beginning of the array, in which case record it for error
3358 reporting in magic_setdefelem. */
3359 elem < 0 && len + elem >= 0 ? len + elem : elem,
3363 if (UNLIKELY(localizing)) {
3365 save_aelem(av, elem, svp);
3367 SAVEADELETE(av, elem);
3369 else if (PL_op->op_private & OPpDEREF) {
3370 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
3374 sv = (svp ? *svp : &PL_sv_undef);
3375 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
3382 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3384 PERL_ARGS_ASSERT_VIVIFY_REF;
3389 Perl_croak_no_modify();
3390 prepare_SV_for_RV(sv);
3393 SvRV_set(sv, newSV(0));
3396 SvRV_set(sv, MUTABLE_SV(newAV()));
3399 SvRV_set(sv, MUTABLE_SV(newHV()));
3406 if (SvGMAGICAL(sv)) {
3407 /* copy the sv without magic to prevent magic from being
3409 SV* msv = sv_newmortal();
3410 sv_setsv_nomg(msv, sv);
3416 PERL_STATIC_INLINE HV *
3417 S_opmethod_stash(pTHX_ SV* meth)
3422 SV* const sv = PL_stack_base + TOPMARK == PL_stack_sp
3423 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
3424 "package or object reference", SVfARG(meth)),
3426 : *(PL_stack_base + TOPMARK + 1);
3428 PERL_ARGS_ASSERT_OPMETHOD_STASH;
3432 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3435 if (UNLIKELY(SvGMAGICAL(sv))) mg_get(sv);
3436 else if (SvIsCOW_shared_hash(sv)) { /* MyClass->meth() */
3437 stash = gv_stashsv(sv, GV_CACHE_ONLY);
3438 if (stash) return stash;
3442 ob = MUTABLE_SV(SvRV(sv));
3443 else if (!SvOK(sv)) goto undefined;
3444 else if (isGV_with_GP(sv)) {
3446 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3447 "without a package or object reference",
3450 if (SvTYPE(ob) == SVt_PVLV && LvTYPE(ob) == 'y') {
3451 assert(!LvTARGLEN(ob));
3455 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(ob));
3458 /* this isn't a reference */
3461 const char * const packname = SvPV_nomg_const(sv, packlen);
3462 const U32 packname_utf8 = SvUTF8(sv);
3463 stash = gv_stashpvn(packname, packlen, packname_utf8 | GV_CACHE_ONLY);
3464 if (stash) return stash;
3466 if (!(iogv = gv_fetchpvn_flags(
3467 packname, packlen, packname_utf8, SVt_PVIO
3469 !(ob=MUTABLE_SV(GvIO(iogv))))
3471 /* this isn't the name of a filehandle either */
3474 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3475 "without a package or object reference",
3478 /* assume it's a package name */
3479 stash = gv_stashpvn(packname, packlen, packname_utf8);
3480 if (stash) return stash;
3481 else return MUTABLE_HV(sv);
3483 /* it _is_ a filehandle name -- replace with a reference */
3484 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3487 /* if we got here, ob should be an object or a glob */
3488 if (!ob || !(SvOBJECT(ob)
3489 || (isGV_with_GP(ob)
3490 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3493 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3494 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3495 ? newSVpvs_flags("DOES", SVs_TEMP)
3507 SV* const meth = TOPs;
3510 SV* const rmeth = SvRV(meth);
3511 if (SvTYPE(rmeth) == SVt_PVCV) {
3517 stash = opmethod_stash(meth);
3519 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3522 SETs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3526 #define METHOD_CHECK_CACHE(stash,cache,meth) \
3527 const HE* const he = hv_fetch_ent(cache, meth, 0, 0); \
3529 gv = MUTABLE_GV(HeVAL(he)); \
3530 if (isGV(gv) && GvCV(gv) && (!GvCVGEN(gv) || GvCVGEN(gv) \
3531 == (PL_sub_generation + HvMROMETA(stash)->cache_gen))) \
3533 XPUSHs(MUTABLE_SV(GvCV(gv))); \
3542 SV* const meth = cMETHOPx_meth(PL_op);
3543 HV* const stash = opmethod_stash(meth);
3545 if (LIKELY(SvTYPE(stash) == SVt_PVHV)) {
3546 METHOD_CHECK_CACHE(stash, stash, meth);
3549 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3552 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3561 SV* const meth = cMETHOPx_meth(PL_op);
3562 HV* const stash = CopSTASH(PL_curcop);
3563 /* Actually, SUPER doesn't need real object's (or class') stash at all,
3564 * as it uses CopSTASH. However, we must ensure that object(class) is
3565 * correct (this check is done by S_opmethod_stash) */
3566 opmethod_stash(meth);
3568 if ((cache = HvMROMETA(stash)->super)) {
3569 METHOD_CHECK_CACHE(stash, cache, meth);
3572 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK|GV_SUPER);
3575 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3583 SV* const meth = cMETHOPx_meth(PL_op);
3584 HV* stash = gv_stashsv(cMETHOPx_rclass(PL_op), 0);
3585 opmethod_stash(meth); /* not used but needed for error checks */
3587 if (stash) { METHOD_CHECK_CACHE(stash, stash, meth); }
3588 else stash = MUTABLE_HV(cMETHOPx_rclass(PL_op));
3590 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK);
3593 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3597 PP(pp_method_redir_super)
3602 SV* const meth = cMETHOPx_meth(PL_op);
3603 HV* stash = gv_stashsv(cMETHOPx_rclass(PL_op), 0);
3604 opmethod_stash(meth); /* not used but needed for error checks */
3606 if (UNLIKELY(!stash)) stash = MUTABLE_HV(cMETHOPx_rclass(PL_op));
3607 else if ((cache = HvMROMETA(stash)->super)) {
3608 METHOD_CHECK_CACHE(stash, cache, meth);
3611 gv = gv_fetchmethod_sv_flags(stash, meth, GV_AUTOLOAD|GV_CROAK|GV_SUPER);
3614 XPUSHs(isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv));
3620 * c-indentation-style: bsd
3622 * indent-tabs-mode: nil
3625 * ex: set ts=8 sts=4 sw=4 et: