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 assert(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--);
454 return do_readline();
462 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
466 (SvIOK_notUV(left) && SvIOK_notUV(right))
467 ? (SvIVX(left) == SvIVX(right))
468 : ( do_ncmp(left, right) == 0)
474 /* also used for: pp_i_predec() pp_i_preinc() pp_predec() */
480 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
481 if (UNLIKELY(SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs))))
482 Perl_croak_no_modify();
483 if (LIKELY(!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs))
484 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
486 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
487 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
489 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
490 if (inc) sv_inc(TOPs);
497 /* also used for: pp_orassign() */
506 if (PL_op->op_type == OP_OR)
508 RETURNOP(cLOGOP->op_other);
513 /* also used for: pp_dor() pp_dorassign() */
520 const int op_type = PL_op->op_type;
521 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
526 if (UNLIKELY(!sv || !SvANY(sv))) {
527 if (op_type == OP_DOR)
529 RETURNOP(cLOGOP->op_other);
535 if (UNLIKELY(!sv || !SvANY(sv)))
540 switch (SvTYPE(sv)) {
542 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
546 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
550 if (CvROOT(sv) || CvXSUB(sv))
563 if(op_type == OP_DOR)
565 RETURNOP(cLOGOP->op_other);
567 /* assuming OP_DEFINED */
575 dSP; dATARGET; bool useleft; SV *svl, *svr;
576 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
580 useleft = USE_LEFT(svl);
581 #ifdef PERL_PRESERVE_IVUV
582 /* We must see if we can perform the addition with integers if possible,
583 as the integer code detects overflow while the NV code doesn't.
584 If either argument hasn't had a numeric conversion yet attempt to get
585 the IV. It's important to do this now, rather than just assuming that
586 it's not IOK as a PV of "9223372036854775806" may not take well to NV
587 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
588 integer in case the second argument is IV=9223372036854775806
589 We can (now) rely on sv_2iv to do the right thing, only setting the
590 public IOK flag if the value in the NV (or PV) slot is truly integer.
592 A side effect is that this also aggressively prefers integer maths over
593 fp maths for integer values.
595 How to detect overflow?
597 C 99 section 6.2.6.1 says
599 The range of nonnegative values of a signed integer type is a subrange
600 of the corresponding unsigned integer type, and the representation of
601 the same value in each type is the same. A computation involving
602 unsigned operands can never overflow, because a result that cannot be
603 represented by the resulting unsigned integer type is reduced modulo
604 the number that is one greater than the largest value that can be
605 represented by the resulting type.
609 which I read as "unsigned ints wrap."
611 signed integer overflow seems to be classed as "exception condition"
613 If an exceptional condition occurs during the evaluation of an
614 expression (that is, if the result is not mathematically defined or not
615 in the range of representable values for its type), the behavior is
618 (6.5, the 5th paragraph)
620 I had assumed that on 2s complement machines signed arithmetic would
621 wrap, hence coded pp_add and pp_subtract on the assumption that
622 everything perl builds on would be happy. After much wailing and
623 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
624 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
625 unsigned code below is actually shorter than the old code. :-)
628 if (SvIV_please_nomg(svr)) {
629 /* Unless the left argument is integer in range we are going to have to
630 use NV maths. Hence only attempt to coerce the right argument if
631 we know the left is integer. */
639 /* left operand is undef, treat as zero. + 0 is identity,
640 Could SETi or SETu right now, but space optimise by not adding
641 lots of code to speed up what is probably a rarish case. */
643 /* Left operand is defined, so is it IV? */
644 if (SvIV_please_nomg(svl)) {
645 if ((auvok = SvUOK(svl)))
648 const IV aiv = SvIVX(svl);
651 auvok = 1; /* Now acting as a sign flag. */
652 } else { /* 2s complement assumption for IV_MIN */
660 bool result_good = 0;
663 bool buvok = SvUOK(svr);
668 const IV biv = SvIVX(svr);
675 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
676 else "IV" now, independent of how it came in.
677 if a, b represents positive, A, B negative, a maps to -A etc
682 all UV maths. negate result if A negative.
683 add if signs same, subtract if signs differ. */
689 /* Must get smaller */
695 /* result really should be -(auv-buv). as its negation
696 of true value, need to swap our result flag */
713 if (result <= (UV)IV_MIN)
716 /* result valid, but out of range for IV. */
721 } /* Overflow, drop through to NVs. */
726 NV value = SvNV_nomg(svr);
729 /* left operand is undef, treat as zero. + 0.0 is identity. */
733 SETn( value + SvNV_nomg(svl) );
739 /* also used for: pp_aelemfast_lex() */
744 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
745 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
746 const U32 lval = PL_op->op_flags & OPf_MOD;
747 SV** const svp = av_fetch(av, (I8)PL_op->op_private, lval);
748 SV *sv = (svp ? *svp : &PL_sv_undef);
750 if (UNLIKELY(!svp && lval))
751 DIE(aTHX_ PL_no_aelem, (int)(I8)PL_op->op_private);
754 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
764 do_join(TARG, *MARK, MARK, SP);
775 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
776 * will be enough to hold an OP*.
778 SV* const sv = sv_newmortal();
779 sv_upgrade(sv, SVt_PVLV);
781 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
784 XPUSHs(MUTABLE_SV(PL_op));
789 /* Oversized hot code. */
791 /* also used for: pp_say() */
795 dSP; dMARK; dORIGMARK;
799 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
803 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
806 if (MARK == ORIGMARK) {
807 /* If using default handle then we need to make space to
808 * pass object as 1st arg, so move other args up ...
812 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
815 return Perl_tied_method(aTHX_ SV_CONST(PRINT), mark - 1, MUTABLE_SV(io),
817 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
818 | (PL_op->op_type == OP_SAY
819 ? TIED_METHOD_SAY : 0)), sp - mark);
822 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
823 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
826 SETERRNO(EBADF,RMS_IFI);
829 else if (!(fp = IoOFP(io))) {
831 report_wrongway_fh(gv, '<');
834 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
838 SV * const ofs = GvSV(PL_ofsgv); /* $, */
840 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
842 if (!do_print(*MARK, fp))
846 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
847 if (!do_print(GvSV(PL_ofsgv), fp)) {
856 if (!do_print(*MARK, fp))
864 if (PL_op->op_type == OP_SAY) {
865 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
868 else if (PL_ors_sv && SvOK(PL_ors_sv))
869 if (!do_print(PL_ors_sv, fp)) /* $\ */
872 if (IoFLAGS(io) & IOf_FLUSH)
873 if (PerlIO_flush(fp) == EOF)
883 XPUSHs(&PL_sv_undef);
888 /* also used for: pp_rv2hv() */
889 /* also called directly by pp_lvavref */
894 const I32 gimme = GIMME_V;
895 static const char an_array[] = "an ARRAY";
896 static const char a_hash[] = "a HASH";
897 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV
898 || PL_op->op_type == OP_LVAVREF;
899 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
903 if (UNLIKELY(SvAMAGIC(sv))) {
904 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
907 if (UNLIKELY(SvTYPE(sv) != type))
908 /* diag_listed_as: Not an ARRAY reference */
909 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
910 else if (UNLIKELY(PL_op->op_flags & OPf_MOD
911 && PL_op->op_private & OPpLVAL_INTRO))
912 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
914 else if (UNLIKELY(SvTYPE(sv) != type)) {
917 if (!isGV_with_GP(sv)) {
918 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
926 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
927 if (PL_op->op_private & OPpLVAL_INTRO)
928 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
930 if (PL_op->op_flags & OPf_REF) {
934 else if (UNLIKELY(PL_op->op_private & OPpMAYBE_LVSUB)) {
935 const I32 flags = is_lvalue_sub();
936 if (flags && !(flags & OPpENTERSUB_INARGS)) {
937 if (gimme != G_ARRAY)
938 goto croak_cant_return;
945 AV *const av = MUTABLE_AV(sv);
946 /* The guts of pp_rv2av */
947 if (gimme == G_ARRAY) {
953 else if (gimme == G_SCALAR) {
955 const SSize_t maxarg = AvFILL(av) + 1;
959 /* The guts of pp_rv2hv */
960 if (gimme == G_ARRAY) { /* array wanted */
962 return Perl_do_kv(aTHX);
964 else if ((PL_op->op_private & OPpTRUEBOOL
965 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
966 && block_gimme() == G_VOID ))
967 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
968 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
969 else if (gimme == G_SCALAR) {
971 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
978 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
979 is_pp_rv2av ? "array" : "hash");
984 S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
986 PERL_ARGS_ASSERT_DO_ODDBALL;
989 if (ckWARN(WARN_MISC)) {
991 if (oddkey == firstkey &&
993 (SvTYPE(SvRV(*oddkey)) == SVt_PVAV ||
994 SvTYPE(SvRV(*oddkey)) == SVt_PVHV))
996 err = "Reference found where even-sized list expected";
999 err = "Odd number of elements in hash assignment";
1000 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
1009 SV **lastlelem = PL_stack_sp;
1010 SV **lastrelem = PL_stack_base + POPMARK;
1011 SV **firstrelem = PL_stack_base + POPMARK + 1;
1012 SV **firstlelem = lastrelem + 1;
1026 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1028 if (gimme == G_ARRAY)
1029 lval = PL_op->op_flags & OPf_MOD || LVRET;
1031 /* If there's a common identifier on both sides we have to take
1032 * special care that assigning the identifier on the left doesn't
1033 * clobber a value on the right that's used later in the list.
1034 * Don't bother if LHS is just an empty hash or array.
1037 if ( (PL_op->op_private & OPpASSIGN_COMMON || PL_sawalias)
1039 firstlelem != lastlelem
1040 || ! ((sv = *firstlelem))
1042 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1043 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1044 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1047 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1048 for (relem = firstrelem; relem <= lastrelem; relem++) {
1049 if (LIKELY((sv = *relem))) {
1050 TAINT_NOT; /* Each item is independent */
1052 /* Dear TODO test in t/op/sort.t, I love you.
1053 (It's relying on a panic, not a "semi-panic" from newSVsv()
1054 and then an assertion failure below.) */
1055 if (UNLIKELY(SvIS_FREED(sv))) {
1056 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1059 /* Not newSVsv(), as it does not allow copy-on-write,
1060 resulting in wasteful copies. We need a second copy of
1061 a temp here, hence the SV_NOSTEAL. */
1062 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1073 while (LIKELY(lelem <= lastlelem)) {
1075 TAINT_NOT; /* Each item stands on its own, taintwise. */
1077 if (UNLIKELY(!sv)) {
1080 ASSUME(SvTYPE(sv) == SVt_PVAV);
1082 switch (SvTYPE(sv)) {
1084 ary = MUTABLE_AV(sv);
1085 magic = SvMAGICAL(ary) != 0;
1087 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1089 av_extend(ary, lastrelem - relem);
1091 while (relem <= lastrelem) { /* gobble up all the rest */
1094 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1095 if (LIKELY(!alias)) {
1097 sv_setsv_nomg(sv, *relem);
1102 DIE(aTHX_ "Assigned value is not a reference");
1103 if (SvTYPE(SvRV(*relem)) > SVt_PVLV)
1104 /* diag_listed_as: Assigned value is not %s reference */
1106 "Assigned value is not a SCALAR reference");
1108 *relem = sv_mortalcopy(*relem);
1109 /* XXX else check for weak refs? */
1110 sv = SvREFCNT_inc_simple_NN(SvRV(*relem));
1113 didstore = av_store(ary,i++,sv);
1122 if (UNLIKELY(PL_delaymagic & DM_ARRAY_ISA))
1123 SvSETMAGIC(MUTABLE_SV(ary));
1126 case SVt_PVHV: { /* normal hash */
1130 SV** topelem = relem;
1131 SV **firsthashrelem = relem;
1133 hash = MUTABLE_HV(sv);
1134 magic = SvMAGICAL(hash) != 0;
1136 odd = ((lastrelem - firsthashrelem)&1)? 0 : 1;
1137 if (UNLIKELY(odd)) {
1138 do_oddball(lastrelem, firsthashrelem);
1139 /* we have firstlelem to reuse, it's not needed anymore
1141 *(lastrelem+1) = &PL_sv_undef;
1145 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1147 while (LIKELY(relem < lastrelem+odd)) { /* gobble up all the rest */
1150 /* Copy the key if aassign is called in lvalue context,
1151 to avoid having the next op modify our rhs. Copy
1152 it also if it is gmagical, lest it make the
1153 hv_store_ent call below croak, leaking the value. */
1154 sv = lval || SvGMAGICAL(*relem)
1155 ? sv_mortalcopy(*relem)
1161 sv_setsv_nomg(tmpstr,*relem++); /* value */
1162 if (gimme == G_ARRAY) {
1163 if (hv_exists_ent(hash, sv, 0))
1164 /* key overwrites an existing entry */
1167 /* copy element back: possibly to an earlier
1168 * stack location if we encountered dups earlier,
1169 * possibly to a later stack location if odd */
1171 *topelem++ = tmpstr;
1174 didstore = hv_store_ent(hash,sv,tmpstr,0);
1176 if (!didstore) sv_2mortal(tmpstr);
1182 if (duplicates && gimme == G_ARRAY) {
1183 /* at this point we have removed the duplicate key/value
1184 * pairs from the stack, but the remaining values may be
1185 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1186 * the (a 2), but the stack now probably contains
1187 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1188 * obliterates the earlier key. So refresh all values. */
1189 lastrelem -= duplicates;
1190 relem = firsthashrelem;
1191 while (relem < lastrelem+odd) {
1193 he = hv_fetch_ent(hash, *relem++, 0, 0);
1194 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1197 if (odd && gimme == G_ARRAY) lastrelem++;
1201 if (SvIMMORTAL(sv)) {
1202 if (relem <= lastrelem)
1206 if (relem <= lastrelem) {
1208 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1209 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1212 packWARN(WARN_MISC),
1213 "Useless assignment to a temporary"
1215 sv_setsv(sv, *relem);
1219 sv_setsv(sv, &PL_sv_undef);
1224 if (UNLIKELY(PL_delaymagic & ~DM_DELAY)) {
1225 /* Will be used to set PL_tainting below */
1226 Uid_t tmp_uid = PerlProc_getuid();
1227 Uid_t tmp_euid = PerlProc_geteuid();
1228 Gid_t tmp_gid = PerlProc_getgid();
1229 Gid_t tmp_egid = PerlProc_getegid();
1231 /* XXX $> et al currently silently ignore failures */
1232 if (PL_delaymagic & DM_UID) {
1233 #ifdef HAS_SETRESUID
1235 setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1236 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1239 # ifdef HAS_SETREUID
1241 setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1242 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1));
1245 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1246 PERL_UNUSED_RESULT(setruid(PL_delaymagic_uid));
1247 PL_delaymagic &= ~DM_RUID;
1249 # endif /* HAS_SETRUID */
1251 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1252 PERL_UNUSED_RESULT(seteuid(PL_delaymagic_euid));
1253 PL_delaymagic &= ~DM_EUID;
1255 # endif /* HAS_SETEUID */
1256 if (PL_delaymagic & DM_UID) {
1257 if (PL_delaymagic_uid != PL_delaymagic_euid)
1258 DIE(aTHX_ "No setreuid available");
1259 PERL_UNUSED_RESULT(PerlProc_setuid(PL_delaymagic_uid));
1261 # endif /* HAS_SETREUID */
1262 #endif /* HAS_SETRESUID */
1264 tmp_uid = PerlProc_getuid();
1265 tmp_euid = PerlProc_geteuid();
1267 /* XXX $> et al currently silently ignore failures */
1268 if (PL_delaymagic & DM_GID) {
1269 #ifdef HAS_SETRESGID
1271 setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1272 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1275 # ifdef HAS_SETREGID
1277 setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1278 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1));
1281 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1282 PERL_UNUSED_RESULT(setrgid(PL_delaymagic_gid));
1283 PL_delaymagic &= ~DM_RGID;
1285 # endif /* HAS_SETRGID */
1287 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1288 PERL_UNUSED_RESULT(setegid(PL_delaymagic_egid));
1289 PL_delaymagic &= ~DM_EGID;
1291 # endif /* HAS_SETEGID */
1292 if (PL_delaymagic & DM_GID) {
1293 if (PL_delaymagic_gid != PL_delaymagic_egid)
1294 DIE(aTHX_ "No setregid available");
1295 PERL_UNUSED_RESULT(PerlProc_setgid(PL_delaymagic_gid));
1297 # endif /* HAS_SETREGID */
1298 #endif /* HAS_SETRESGID */
1300 tmp_gid = PerlProc_getgid();
1301 tmp_egid = PerlProc_getegid();
1303 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1304 #ifdef NO_TAINT_SUPPORT
1305 PERL_UNUSED_VAR(tmp_uid);
1306 PERL_UNUSED_VAR(tmp_euid);
1307 PERL_UNUSED_VAR(tmp_gid);
1308 PERL_UNUSED_VAR(tmp_egid);
1313 if (gimme == G_VOID)
1314 SP = firstrelem - 1;
1315 else if (gimme == G_SCALAR) {
1318 SETi(lastrelem - firstrelem + 1);
1322 /* note that in this case *firstlelem may have been overwritten
1323 by sv_undef in the odd hash case */
1326 SP = firstrelem + (lastlelem - firstlelem);
1327 lelem = firstlelem + (relem - firstrelem);
1329 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1339 PMOP * const pm = cPMOP;
1340 REGEXP * rx = PM_GETRE(pm);
1341 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1342 SV * const rv = sv_newmortal();
1346 SvUPGRADE(rv, SVt_IV);
1347 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1348 loathe to use it here, but it seems to be the right fix. Or close.
1349 The key part appears to be that it's essential for pp_qr to return a new
1350 object (SV), which implies that there needs to be an effective way to
1351 generate a new SV from the existing SV that is pre-compiled in the
1353 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1356 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1357 if (UNLIKELY((cv = *cvp) && CvCLONE(*cvp))) {
1358 *cvp = cv_clone(cv);
1359 SvREFCNT_dec_NN(cv);
1363 HV *const stash = gv_stashsv(pkg, GV_ADD);
1364 SvREFCNT_dec_NN(pkg);
1365 (void)sv_bless(rv, stash);
1368 if (UNLIKELY(RX_ISTAINTED(rx))) {
1370 SvTAINTED_on(SvRV(rv));
1383 SSize_t curpos = 0; /* initial pos() or current $+[0] */
1386 const char *truebase; /* Start of string */
1387 REGEXP *rx = PM_GETRE(pm);
1389 const I32 gimme = GIMME;
1391 const I32 oldsave = PL_savestack_ix;
1392 I32 had_zerolen = 0;
1395 if (PL_op->op_flags & OPf_STACKED)
1404 PUTBACK; /* EVAL blocks need stack_sp. */
1405 /* Skip get-magic if this is a qr// clone, because regcomp has
1407 truebase = ReANY(rx)->mother_re
1408 ? SvPV_nomg_const(TARG, len)
1409 : SvPV_const(TARG, len);
1411 DIE(aTHX_ "panic: pp_match");
1412 strend = truebase + len;
1413 rxtainted = (RX_ISTAINTED(rx) ||
1414 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1417 /* We need to know this in case we fail out early - pos() must be reset */
1418 global = dynpm->op_pmflags & PMf_GLOBAL;
1420 /* PMdf_USED is set after a ?? matches once */
1423 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1425 pm->op_pmflags & PMf_USED
1428 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1432 /* empty pattern special-cased to use last successful pattern if
1433 possible, except for qr// */
1434 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1440 if (RX_MINLEN(rx) >= 0 && (STRLEN)RX_MINLEN(rx) > len) {
1441 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
1442 UVuf" < %"IVdf")\n",
1443 (UV)len, (IV)RX_MINLEN(rx)));
1447 /* get pos() if //g */
1449 mg = mg_find_mglob(TARG);
1450 if (mg && mg->mg_len >= 0) {
1451 curpos = MgBYTEPOS(mg, TARG, truebase, len);
1452 /* last time pos() was set, it was zero-length match */
1453 if (mg->mg_flags & MGf_MINMATCH)
1458 #ifdef PERL_SAWAMPERSAND
1461 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1462 || (dynpm->op_pmflags & PMf_KEEPCOPY)
1466 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1467 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1468 * only on the first iteration. Therefore we need to copy $' as well
1469 * as $&, to make the rest of the string available for captures in
1470 * subsequent iterations */
1471 if (! (global && gimme == G_ARRAY))
1472 r_flags |= REXEC_COPY_SKIP_POST;
1474 #ifdef PERL_SAWAMPERSAND
1475 if (dynpm->op_pmflags & PMf_KEEPCOPY)
1476 /* handle KEEPCOPY in pmop but not rx, eg $r=qr/a/; /$r/p */
1477 r_flags &= ~(REXEC_COPY_SKIP_PRE|REXEC_COPY_SKIP_POST);
1484 s = truebase + curpos;
1486 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1487 had_zerolen, TARG, NULL, r_flags))
1491 if (dynpm->op_pmflags & PMf_ONCE)
1493 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1495 dynpm->op_pmflags |= PMf_USED;
1499 RX_MATCH_TAINTED_on(rx);
1500 TAINT_IF(RX_MATCH_TAINTED(rx));
1504 if (global && (gimme != G_ARRAY || (dynpm->op_pmflags & PMf_CONTINUE))) {
1506 mg = sv_magicext_mglob(TARG);
1507 MgBYTEPOS_set(mg, TARG, truebase, RX_OFFS(rx)[0].end);
1508 if (RX_ZERO_LEN(rx))
1509 mg->mg_flags |= MGf_MINMATCH;
1511 mg->mg_flags &= ~MGf_MINMATCH;
1514 if ((!RX_NPARENS(rx) && !global) || gimme != G_ARRAY) {
1515 LEAVE_SCOPE(oldsave);
1519 /* push captures on stack */
1522 const I32 nparens = RX_NPARENS(rx);
1523 I32 i = (global && !nparens) ? 1 : 0;
1525 SPAGAIN; /* EVAL blocks could move the stack. */
1526 EXTEND(SP, nparens + i);
1527 EXTEND_MORTAL(nparens + i);
1528 for (i = !i; i <= nparens; i++) {
1529 PUSHs(sv_newmortal());
1530 if (LIKELY((RX_OFFS(rx)[i].start != -1)
1531 && RX_OFFS(rx)[i].end != -1 ))
1533 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1534 const char * const s = RX_OFFS(rx)[i].start + truebase;
1535 if (UNLIKELY(RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0
1536 || len < 0 || len > strend - s))
1537 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1538 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1539 (long) i, (long) RX_OFFS(rx)[i].start,
1540 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1541 sv_setpvn(*SP, s, len);
1542 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1547 curpos = (UV)RX_OFFS(rx)[0].end;
1548 had_zerolen = RX_ZERO_LEN(rx);
1549 PUTBACK; /* EVAL blocks may use stack */
1550 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1553 LEAVE_SCOPE(oldsave);
1559 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1561 mg = mg_find_mglob(TARG);
1565 LEAVE_SCOPE(oldsave);
1566 if (gimme == G_ARRAY)
1572 Perl_do_readline(pTHX)
1574 dSP; dTARGETSTACKED;
1579 IO * const io = GvIO(PL_last_in_gv);
1580 const I32 type = PL_op->op_type;
1581 const I32 gimme = GIMME_V;
1584 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1586 Perl_tied_method(aTHX_ SV_CONST(READLINE), SP, MUTABLE_SV(io), mg, gimme, 0);
1587 if (gimme == G_SCALAR) {
1589 SvSetSV_nosteal(TARG, TOPs);
1599 if (IoFLAGS(io) & IOf_ARGV) {
1600 if (IoFLAGS(io) & IOf_START) {
1602 if (av_tindex(GvAVn(PL_last_in_gv)) < 0) {
1603 IoFLAGS(io) &= ~IOf_START;
1604 do_open6(PL_last_in_gv, "-", 1, NULL, NULL, 0);
1605 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1606 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1607 SvSETMAGIC(GvSV(PL_last_in_gv));
1612 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1613 if (!fp) { /* Note: fp != IoIFP(io) */
1614 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1617 else if (type == OP_GLOB)
1618 fp = Perl_start_glob(aTHX_ POPs, io);
1620 else if (type == OP_GLOB)
1622 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1623 report_wrongway_fh(PL_last_in_gv, '>');
1627 if ((!io || !(IoFLAGS(io) & IOf_START))
1628 && ckWARN(WARN_CLOSED)
1631 report_evil_fh(PL_last_in_gv);
1633 if (gimme == G_SCALAR) {
1634 /* undef TARG, and push that undefined value */
1635 if (type != OP_RCATLINE) {
1636 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1644 if (gimme == G_SCALAR) {
1646 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1649 if (type == OP_RCATLINE)
1650 SvPV_force_nomg_nolen(sv);
1654 else if (isGV_with_GP(sv)) {
1655 SvPV_force_nomg_nolen(sv);
1657 SvUPGRADE(sv, SVt_PV);
1658 tmplen = SvLEN(sv); /* remember if already alloced */
1659 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1660 /* try short-buffering it. Please update t/op/readline.t
1661 * if you change the growth length.
1666 if (type == OP_RCATLINE && SvOK(sv)) {
1668 SvPV_force_nomg_nolen(sv);
1674 sv = sv_2mortal(newSV(80));
1678 /* This should not be marked tainted if the fp is marked clean */
1679 #define MAYBE_TAINT_LINE(io, sv) \
1680 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1685 /* delay EOF state for a snarfed empty file */
1686 #define SNARF_EOF(gimme,rs,io,sv) \
1687 (gimme != G_SCALAR || SvCUR(sv) \
1688 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1692 if (!sv_gets(sv, fp, offset)
1694 || SNARF_EOF(gimme, PL_rs, io, sv)
1695 || PerlIO_error(fp)))
1697 PerlIO_clearerr(fp);
1698 if (IoFLAGS(io) & IOf_ARGV) {
1699 fp = nextargv(PL_last_in_gv, PL_op->op_flags & OPf_SPECIAL);
1702 (void)do_close(PL_last_in_gv, FALSE);
1704 else if (type == OP_GLOB) {
1705 if (!do_close(PL_last_in_gv, FALSE)) {
1706 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1707 "glob failed (child exited with status %d%s)",
1708 (int)(STATUS_CURRENT >> 8),
1709 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1712 if (gimme == G_SCALAR) {
1713 if (type != OP_RCATLINE) {
1714 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1720 MAYBE_TAINT_LINE(io, sv);
1723 MAYBE_TAINT_LINE(io, sv);
1725 IoFLAGS(io) |= IOf_NOLINE;
1729 if (type == OP_GLOB) {
1732 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1733 char * const tmps = SvEND(sv) - 1;
1734 if (*tmps == *SvPVX_const(PL_rs)) {
1736 SvCUR_set(sv, SvCUR(sv) - 1);
1739 for (t1 = SvPVX_const(sv); *t1; t1++)
1741 if (strchr("*%?", *t1))
1743 if (strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1746 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1747 (void)POPs; /* Unmatched wildcard? Chuck it... */
1750 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1751 if (ckWARN(WARN_UTF8)) {
1752 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1753 const STRLEN len = SvCUR(sv) - offset;
1756 if (!is_utf8_string_loc(s, len, &f))
1757 /* Emulate :encoding(utf8) warning in the same case. */
1758 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1759 "utf8 \"\\x%02X\" does not map to Unicode",
1760 f < (U8*)SvEND(sv) ? *f : 0);
1763 if (gimme == G_ARRAY) {
1764 if (SvLEN(sv) - SvCUR(sv) > 20) {
1765 SvPV_shrink_to_cur(sv);
1767 sv = sv_2mortal(newSV(80));
1770 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1771 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1772 const STRLEN new_len
1773 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1774 SvPV_renew(sv, new_len);
1785 SV * const keysv = POPs;
1786 HV * const hv = MUTABLE_HV(POPs);
1787 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1788 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1790 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1791 bool preeminent = TRUE;
1793 if (SvTYPE(hv) != SVt_PVHV)
1800 /* If we can determine whether the element exist,
1801 * Try to preserve the existenceness of a tied hash
1802 * element by using EXISTS and DELETE if possible.
1803 * Fallback to FETCH and STORE otherwise. */
1804 if (SvCANEXISTDELETE(hv))
1805 preeminent = hv_exists_ent(hv, keysv, 0);
1808 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1809 svp = he ? &HeVAL(he) : NULL;
1811 if (!svp || !*svp || *svp == &PL_sv_undef) {
1815 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1817 lv = sv_newmortal();
1818 sv_upgrade(lv, SVt_PVLV);
1820 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1821 SvREFCNT_dec_NN(key2); /* sv_magic() increments refcount */
1822 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1828 if (HvNAME_get(hv) && isGV(*svp))
1829 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1830 else if (preeminent)
1831 save_helem_flags(hv, keysv, svp,
1832 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1834 SAVEHDELETE(hv, keysv);
1836 else if (PL_op->op_private & OPpDEREF) {
1837 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1841 sv = (svp && *svp ? *svp : &PL_sv_undef);
1842 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1843 * was to make C<local $tied{foo} = $tied{foo}> possible.
1844 * However, it seems no longer to be needed for that purpose, and
1845 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1846 * would loop endlessly since the pos magic is getting set on the
1847 * mortal copy and lost. However, the copy has the effect of
1848 * triggering the get magic, and losing it altogether made things like
1849 * c<$tied{foo};> in void context no longer do get magic, which some
1850 * code relied on. Also, delayed triggering of magic on @+ and friends
1851 * meant the original regex may be out of scope by now. So as a
1852 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1853 * being called too many times). */
1854 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1868 cx = &cxstack[cxstack_ix];
1869 itersvp = CxITERVAR(cx);
1871 switch (CxTYPE(cx)) {
1873 case CXt_LOOP_LAZYSV: /* string increment */
1875 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1876 SV *end = cx->blk_loop.state_u.lazysv.end;
1877 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1878 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1880 const char *max = SvPV_const(end, maxlen);
1881 if (UNLIKELY(SvNIOK(cur) || SvCUR(cur) > maxlen))
1885 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
1886 /* safe to reuse old SV */
1887 sv_setsv(oldsv, cur);
1891 /* we need a fresh SV every time so that loop body sees a
1892 * completely new SV for closures/references to work as
1894 *itersvp = newSVsv(cur);
1895 SvREFCNT_dec_NN(oldsv);
1897 if (strEQ(SvPVX_const(cur), max))
1898 sv_setiv(cur, 0); /* terminate next time */
1904 case CXt_LOOP_LAZYIV: /* integer increment */
1906 IV cur = cx->blk_loop.state_u.lazyiv.cur;
1907 if (UNLIKELY(cur > cx->blk_loop.state_u.lazyiv.end))
1911 /* don't risk potential race */
1912 if (LIKELY(SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv))) {
1913 /* safe to reuse old SV */
1914 sv_setiv(oldsv, cur);
1918 /* we need a fresh SV every time so that loop body sees a
1919 * completely new SV for closures/references to work as they
1921 *itersvp = newSViv(cur);
1922 SvREFCNT_dec_NN(oldsv);
1925 if (UNLIKELY(cur == IV_MAX)) {
1926 /* Handle end of range at IV_MAX */
1927 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1929 ++cx->blk_loop.state_u.lazyiv.cur;
1933 case CXt_LOOP_FOR: /* iterate array */
1936 AV *av = cx->blk_loop.state_u.ary.ary;
1938 bool av_is_stack = FALSE;
1945 if (PL_op->op_private & OPpITER_REVERSED) {
1946 ix = --cx->blk_loop.state_u.ary.ix;
1947 if (UNLIKELY(ix <= (av_is_stack ? cx->blk_loop.resetsp : -1)))
1951 ix = ++cx->blk_loop.state_u.ary.ix;
1952 if (UNLIKELY(ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av))))
1956 if (UNLIKELY(SvMAGICAL(av) || AvREIFY(av))) {
1957 SV * const * const svp = av_fetch(av, ix, FALSE);
1958 sv = svp ? *svp : NULL;
1961 sv = AvARRAY(av)[ix];
1964 if (UNLIKELY(cx->cx_type & CXp_FOR_LVREF)) {
1965 SvSetMagicSV(*itersvp, sv);
1970 if (UNLIKELY(SvIS_FREED(sv))) {
1972 Perl_croak(aTHX_ "Use of freed value in iteration");
1979 SvREFCNT_inc_simple_void_NN(sv);
1982 else if (!av_is_stack) {
1983 sv = newSVavdefelem(av, ix, 0);
1990 SvREFCNT_dec(oldsv);
1995 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
2001 A description of how taint works in pattern matching and substitution.
2003 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2004 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2006 While the pattern is being assembled/concatenated and then compiled,
2007 PL_tainted will get set (via TAINT_set) if any component of the pattern
2008 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2009 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2010 TAINT_get). It will also be set if any component of the pattern matches
2011 based on locale-dependent behavior.
2013 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2014 the pattern is marked as tainted. This means that subsequent usage, such
2015 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2016 on the new pattern too.
2018 RXf_TAINTED_SEEN is used post-execution by the get magic code
2019 of $1 et al to indicate whether the returned value should be tainted.
2020 It is the responsibility of the caller of the pattern (i.e. pp_match,
2021 pp_subst etc) to set this flag for any other circumstances where $1 needs
2024 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2026 There are three possible sources of taint
2028 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2029 * the replacement string (or expression under /e)
2031 There are four destinations of taint and they are affected by the sources
2032 according to the rules below:
2034 * the return value (not including /r):
2035 tainted by the source string and pattern, but only for the
2036 number-of-iterations case; boolean returns aren't tainted;
2037 * the modified string (or modified copy under /r):
2038 tainted by the source string, pattern, and replacement strings;
2040 tainted by the pattern, and under 'use re "taint"', by the source
2042 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2043 should always be unset before executing subsequent code.
2045 The overall action of pp_subst is:
2047 * at the start, set bits in rxtainted indicating the taint status of
2048 the various sources.
2050 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2051 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2052 pattern has subsequently become tainted via locale ops.
2054 * If control is being passed to pp_substcont to execute a /e block,
2055 save rxtainted in the CXt_SUBST block, for future use by
2058 * Whenever control is being returned to perl code (either by falling
2059 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2060 use the flag bits in rxtainted to make all the appropriate types of
2061 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2062 et al will appear tainted.
2064 pp_match is just a simpler version of the above.
2080 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2081 See "how taint works" above */
2084 REGEXP *rx = PM_GETRE(pm);
2086 int force_on_match = 0;
2087 const I32 oldsave = PL_savestack_ix;
2089 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2094 /* known replacement string? */
2095 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2099 if (PL_op->op_flags & OPf_STACKED)
2108 SvGETMAGIC(TARG); /* must come before cow check */
2110 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2111 because they make integers such as 256 "false". */
2112 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2115 sv_force_normal_flags(TARG,0);
2117 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2118 && (SvREADONLY(TARG)
2119 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2120 || SvTYPE(TARG) > SVt_PVLV)
2121 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2122 Perl_croak_no_modify();
2125 orig = SvPV_nomg(TARG, len);
2126 /* note we don't (yet) force the var into being a string; if we fail
2127 * to match, we leave as-is; on successful match howeverm, we *will*
2128 * coerce into a string, then repeat the match */
2129 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2132 /* only replace once? */
2133 once = !(rpm->op_pmflags & PMf_GLOBAL);
2135 /* See "how taint works" above */
2138 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2139 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2140 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2141 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2142 ? SUBST_TAINT_BOOLRET : 0));
2148 DIE(aTHX_ "panic: pp_subst, pm=%p, orig=%p", pm, orig);
2150 strend = orig + len;
2151 slen = DO_UTF8(TARG) ? utf8_length((U8*)orig, (U8*)strend) : len;
2152 maxiters = 2 * slen + 10; /* We can match twice at each
2153 position, once with zero-length,
2154 second time with non-zero. */
2156 if (!RX_PRELEN(rx) && PL_curpm
2157 && !ReANY(rx)->mother_re) {
2162 #ifdef PERL_SAWAMPERSAND
2163 r_flags = ( RX_NPARENS(rx)
2165 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2166 || (rpm->op_pmflags & PMf_KEEPCOPY)
2171 r_flags = REXEC_COPY_STR;
2174 if (!CALLREGEXEC(rx, orig, strend, orig, 0, TARG, NULL, r_flags))
2177 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2178 LEAVE_SCOPE(oldsave);
2183 /* known replacement string? */
2185 /* replacement needing upgrading? */
2186 if (DO_UTF8(TARG) && !doutf8) {
2187 nsv = sv_newmortal();
2190 sv_recode_to_utf8(nsv, PL_encoding);
2192 sv_utf8_upgrade(nsv);
2193 c = SvPV_const(nsv, clen);
2197 c = SvPV_const(dstr, clen);
2198 doutf8 = DO_UTF8(dstr);
2201 if (SvTAINTED(dstr))
2202 rxtainted |= SUBST_TAINT_REPL;
2209 /* can do inplace substitution? */
2214 && (I32)clen <= RX_MINLENRET(rx)
2216 || !(r_flags & REXEC_COPY_STR)
2217 || (!SvGMAGICAL(dstr) && !(RX_EXTFLAGS(rx) & RXf_EVAL_SEEN))
2219 && !(RX_EXTFLAGS(rx) & RXf_NO_INPLACE_SUBST)
2220 && (!doutf8 || SvUTF8(TARG))
2221 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2225 if (SvIsCOW(TARG)) {
2226 if (!force_on_match)
2228 assert(SvVOK(TARG));
2231 if (force_on_match) {
2232 /* redo the first match, this time with the orig var
2233 * forced into being a string */
2235 orig = SvPV_force_nomg(TARG, len);
2241 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2242 rxtainted |= SUBST_TAINT_PAT;
2243 m = orig + RX_OFFS(rx)[0].start;
2244 d = orig + RX_OFFS(rx)[0].end;
2246 if (m - s > strend - d) { /* faster to shorten from end */
2249 Copy(c, m, clen, char);
2254 Move(d, m, i, char);
2258 SvCUR_set(TARG, m - s);
2260 else { /* faster from front */
2264 Move(s, d - i, i, char);
2267 Copy(c, d, clen, char);
2274 d = s = RX_OFFS(rx)[0].start + orig;
2277 if (UNLIKELY(iters++ > maxiters))
2278 DIE(aTHX_ "Substitution loop");
2279 if (UNLIKELY(RX_MATCH_TAINTED(rx))) /* run time pattern taint, eg locale */
2280 rxtainted |= SUBST_TAINT_PAT;
2281 m = RX_OFFS(rx)[0].start + orig;
2284 Move(s, d, i, char);
2288 Copy(c, d, clen, char);
2291 s = RX_OFFS(rx)[0].end + orig;
2292 } while (CALLREGEXEC(rx, s, strend, orig,
2293 s == m, /* don't match same null twice */
2295 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2298 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2299 Move(s, d, i+1, char); /* include the NUL */
2309 if (force_on_match) {
2310 /* redo the first match, this time with the orig var
2311 * forced into being a string */
2313 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2314 /* I feel that it should be possible to avoid this mortal copy
2315 given that the code below copies into a new destination.
2316 However, I suspect it isn't worth the complexity of
2317 unravelling the C<goto force_it> for the small number of
2318 cases where it would be viable to drop into the copy code. */
2319 TARG = sv_2mortal(newSVsv(TARG));
2321 orig = SvPV_force_nomg(TARG, len);
2327 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2328 rxtainted |= SUBST_TAINT_PAT;
2330 s = RX_OFFS(rx)[0].start + orig;
2331 dstr = newSVpvn_flags(orig, s-orig,
2332 SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2337 /* note that a whole bunch of local vars are saved here for
2338 * use by pp_substcont: here's a list of them in case you're
2339 * searching for places in this sub that uses a particular var:
2340 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2341 * s m strend rx once */
2343 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2347 if (UNLIKELY(iters++ > maxiters))
2348 DIE(aTHX_ "Substitution loop");
2349 if (UNLIKELY(RX_MATCH_TAINTED(rx)))
2350 rxtainted |= SUBST_TAINT_PAT;
2351 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2353 char *old_orig = orig;
2354 assert(RX_SUBOFFSET(rx) == 0);
2356 orig = RX_SUBBEG(rx);
2357 s = orig + (old_s - old_orig);
2358 strend = s + (strend - old_s);
2360 m = RX_OFFS(rx)[0].start + orig;
2361 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2362 s = RX_OFFS(rx)[0].end + orig;
2364 /* replacement already stringified */
2366 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2371 if (!nsv) nsv = sv_newmortal();
2372 sv_copypv(nsv, repl);
2373 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
2374 sv_catsv(dstr, nsv);
2376 else sv_catsv(dstr, repl);
2377 if (UNLIKELY(SvTAINTED(repl)))
2378 rxtainted |= SUBST_TAINT_REPL;
2382 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2384 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2385 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2387 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2388 /* From here on down we're using the copy, and leaving the original
2395 /* The match may make the string COW. If so, brilliant, because
2396 that's just saved us one malloc, copy and free - the regexp has
2397 donated the old buffer, and we malloc an entirely new one, rather
2398 than the regexp malloc()ing a buffer and copying our original,
2399 only for us to throw it away here during the substitution. */
2400 if (SvIsCOW(TARG)) {
2401 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2407 SvPV_set(TARG, SvPVX(dstr));
2408 SvCUR_set(TARG, SvCUR(dstr));
2409 SvLEN_set(TARG, SvLEN(dstr));
2410 SvFLAGS(TARG) |= SvUTF8(dstr);
2411 SvPV_set(dstr, NULL);
2418 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2419 (void)SvPOK_only_UTF8(TARG);
2422 /* See "how taint works" above */
2424 if ((rxtainted & SUBST_TAINT_PAT) ||
2425 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2426 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2428 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2430 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2431 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2433 SvTAINTED_on(TOPs); /* taint return value */
2435 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2437 /* needed for mg_set below */
2439 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2443 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2445 LEAVE_SCOPE(oldsave);
2454 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2455 ++*PL_markstack_ptr;
2457 LEAVE_with_name("grep_item"); /* exit inner scope */
2460 if (UNLIKELY(PL_stack_base + *PL_markstack_ptr > SP)) {
2462 const I32 gimme = GIMME_V;
2464 LEAVE_with_name("grep"); /* exit outer scope */
2465 (void)POPMARK; /* pop src */
2466 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2467 (void)POPMARK; /* pop dst */
2468 SP = PL_stack_base + POPMARK; /* pop original mark */
2469 if (gimme == G_SCALAR) {
2470 if (PL_op->op_private & OPpGREP_LEX) {
2471 SV* const sv = sv_newmortal();
2472 sv_setiv(sv, items);
2480 else if (gimme == G_ARRAY)
2487 ENTER_with_name("grep_item"); /* enter inner scope */
2490 src = PL_stack_base[*PL_markstack_ptr];
2491 if (SvPADTMP(src)) {
2492 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
2496 if (PL_op->op_private & OPpGREP_LEX)
2497 PAD_SVl(PL_op->op_targ) = src;
2501 RETURNOP(cLOGOP->op_other);
2515 if (CxMULTICALL(&cxstack[cxstack_ix]))
2519 cxstack_ix++; /* temporarily protect top context */
2522 if (gimme == G_SCALAR) {
2524 if (LIKELY(MARK <= SP)) {
2525 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2526 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2527 && !SvMAGICAL(TOPs)) {
2528 *MARK = SvREFCNT_inc(TOPs);
2533 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2535 *MARK = sv_mortalcopy(sv);
2536 SvREFCNT_dec_NN(sv);
2539 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2540 && !SvMAGICAL(TOPs)) {
2544 *MARK = sv_mortalcopy(TOPs);
2548 *MARK = &PL_sv_undef;
2552 else if (gimme == G_ARRAY) {
2553 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2554 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2555 || SvMAGICAL(*MARK)) {
2556 *MARK = sv_mortalcopy(*MARK);
2557 TAINT_NOT; /* Each item is independent */
2564 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2566 PL_curpm = newpm; /* ... and pop $1 et al */
2569 return cx->blk_sub.retop;
2579 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2582 DIE(aTHX_ "Not a CODE reference");
2583 /* This is overwhelmingly the most common case: */
2584 if (!LIKELY(SvTYPE(sv) == SVt_PVGV && (cv = GvCVu((const GV *)sv)))) {
2585 switch (SvTYPE(sv)) {
2588 if (!(cv = GvCVu((const GV *)sv))) {
2590 cv = sv_2cv(sv, &stash, &gv, 0);
2599 if(isGV_with_GP(sv)) goto we_have_a_glob;
2602 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2604 SP = PL_stack_base + POPMARK;
2612 sv = amagic_deref_call(sv, to_cv_amg);
2613 /* Don't SPAGAIN here. */
2620 DIE(aTHX_ PL_no_usym, "a subroutine");
2621 sym = SvPV_nomg_const(sv, len);
2622 if (PL_op->op_private & HINT_STRICT_REFS)
2623 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2624 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2627 cv = MUTABLE_CV(SvRV(sv));
2628 if (SvTYPE(cv) == SVt_PVCV)
2633 DIE(aTHX_ "Not a CODE reference");
2634 /* This is the second most common case: */
2636 cv = MUTABLE_CV(sv);
2644 if (UNLIKELY(CvCLONE(cv) && ! CvCLONED(cv)))
2645 DIE(aTHX_ "Closure prototype called");
2646 if (UNLIKELY(!CvROOT(cv) && !CvXSUB(cv))) {
2650 /* anonymous or undef'd function leaves us no recourse */
2651 if (CvLEXICAL(cv) && CvHASGV(cv))
2652 DIE(aTHX_ "Undefined subroutine &%"SVf" called",
2653 SVfARG(cv_name(cv, NULL, 0)));
2654 if (CvANON(cv) || !CvHASGV(cv)) {
2655 DIE(aTHX_ "Undefined subroutine called");
2658 /* autoloaded stub? */
2659 if (cv != GvCV(gv = CvGV(cv))) {
2662 /* should call AUTOLOAD now? */
2665 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2666 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2672 sub_name = sv_newmortal();
2673 gv_efullname3(sub_name, gv, NULL);
2674 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2682 if (UNLIKELY((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub)
2685 Perl_get_db_sub(aTHX_ &sv, cv);
2687 PL_curcopdb = PL_curcop;
2689 /* check for lsub that handles lvalue subroutines */
2690 cv = GvCV(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVCV));
2691 /* if lsub not found then fall back to DB::sub */
2692 if (!cv) cv = GvCV(PL_DBsub);
2694 cv = GvCV(PL_DBsub);
2697 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2698 DIE(aTHX_ "No DB::sub routine defined");
2703 if (!(CvISXSUB(cv))) {
2704 /* This path taken at least 75% of the time */
2706 PADLIST * const padlist = CvPADLIST(cv);
2709 PUSHBLOCK(cx, CXt_SUB, MARK);
2711 cx->blk_sub.retop = PL_op->op_next;
2712 if (UNLIKELY((depth = ++CvDEPTH(cv)) >= 2)) {
2713 PERL_STACK_OVERFLOW_CHECK();
2714 pad_push(padlist, depth);
2717 PAD_SET_CUR_NOSAVE(padlist, depth);
2718 if (LIKELY(hasargs)) {
2719 AV *const av = MUTABLE_AV(PAD_SVl(0));
2723 if (UNLIKELY(AvREAL(av))) {
2724 /* @_ is normally not REAL--this should only ever
2725 * happen when DB::sub() calls things that modify @_ */
2730 defavp = &GvAV(PL_defgv);
2731 cx->blk_sub.savearray = *defavp;
2732 *defavp = MUTABLE_AV(SvREFCNT_inc_simple_NN(av));
2733 CX_CURPAD_SAVE(cx->blk_sub);
2734 cx->blk_sub.argarray = av;
2737 if (UNLIKELY(items - 1 > AvMAX(av))) {
2738 SV **ary = AvALLOC(av);
2739 AvMAX(av) = items - 1;
2740 Renew(ary, items, SV*);
2745 Copy(MARK+1,AvARRAY(av),items,SV*);
2746 AvFILLp(av) = items - 1;
2752 if (SvPADTMP(*MARK)) {
2753 *MARK = sv_mortalcopy(*MARK);
2761 if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2763 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2764 /* warning must come *after* we fully set up the context
2765 * stuff so that __WARN__ handlers can safely dounwind()
2768 if (UNLIKELY(depth == PERL_SUB_DEPTH_WARN
2769 && ckWARN(WARN_RECURSION)
2770 && !(PERLDB_SUB && cv == GvCV(PL_DBsub))))
2771 sub_crush_depth(cv);
2772 RETURNOP(CvSTART(cv));
2775 SSize_t markix = TOPMARK;
2780 if (UNLIKELY(((PL_op->op_private
2781 & PUSHSUB_GET_LVALUE_MASK(Perl_is_lvalue_sub)
2782 ) & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2784 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2786 if (UNLIKELY(!hasargs && GvAV(PL_defgv))) {
2787 /* Need to copy @_ to stack. Alternative may be to
2788 * switch stack to @_, and copy return values
2789 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2790 AV * const av = GvAV(PL_defgv);
2791 const SSize_t items = AvFILL(av) + 1;
2795 const bool m = cBOOL(SvRMAGICAL(av));
2796 /* Mark is at the end of the stack. */
2798 for (; i < items; ++i)
2802 SV ** const svp = av_fetch(av, i, 0);
2803 sv = svp ? *svp : NULL;
2805 else sv = AvARRAY(av)[i];
2806 if (sv) SP[i+1] = sv;
2808 SP[i+1] = newSVavdefelem(av, i, 1);
2816 SV **mark = PL_stack_base + markix;
2817 SSize_t items = SP - mark;
2820 if (*mark && SvPADTMP(*mark)) {
2821 *mark = sv_mortalcopy(*mark);
2825 /* We assume first XSUB in &DB::sub is the called one. */
2826 if (UNLIKELY(PL_curcopdb)) {
2827 SAVEVPTR(PL_curcop);
2828 PL_curcop = PL_curcopdb;
2831 /* Do we need to open block here? XXXX */
2833 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2835 CvXSUB(cv)(aTHX_ cv);
2837 /* Enforce some sanity in scalar context. */
2838 if (gimme == G_SCALAR) {
2839 SV **svp = PL_stack_base + markix + 1;
2840 if (svp != PL_stack_sp) {
2841 *svp = svp > PL_stack_sp ? &PL_sv_undef : *PL_stack_sp;
2851 Perl_sub_crush_depth(pTHX_ CV *cv)
2853 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2856 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2858 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2859 SVfARG(cv_name(cv,NULL,0)));
2867 SV* const elemsv = POPs;
2868 IV elem = SvIV(elemsv);
2869 AV *const av = MUTABLE_AV(POPs);
2870 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2871 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2872 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2873 bool preeminent = TRUE;
2876 if (UNLIKELY(SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC)))
2877 Perl_warner(aTHX_ packWARN(WARN_MISC),
2878 "Use of reference \"%"SVf"\" as array index",
2880 if (UNLIKELY(SvTYPE(av) != SVt_PVAV))
2883 if (UNLIKELY(localizing)) {
2887 /* If we can determine whether the element exist,
2888 * Try to preserve the existenceness of a tied array
2889 * element by using EXISTS and DELETE if possible.
2890 * Fallback to FETCH and STORE otherwise. */
2891 if (SvCANEXISTDELETE(av))
2892 preeminent = av_exists(av, elem);
2895 svp = av_fetch(av, elem, lval && !defer);
2897 #ifdef PERL_MALLOC_WRAP
2898 if (SvUOK(elemsv)) {
2899 const UV uv = SvUV(elemsv);
2900 elem = uv > IV_MAX ? IV_MAX : uv;
2902 else if (SvNOK(elemsv))
2903 elem = (IV)SvNV(elemsv);
2905 static const char oom_array_extend[] =
2906 "Out of memory during array extend"; /* Duplicated in av.c */
2907 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2910 if (!svp || !*svp) {
2913 DIE(aTHX_ PL_no_aelem, elem);
2914 len = av_tindex(av);
2915 mPUSHs(newSVavdefelem(av,
2916 /* Resolve a negative index now, unless it points before the
2917 beginning of the array, in which case record it for error
2918 reporting in magic_setdefelem. */
2919 elem < 0 && len + elem >= 0 ? len + elem : elem,
2923 if (UNLIKELY(localizing)) {
2925 save_aelem(av, elem, svp);
2927 SAVEADELETE(av, elem);
2929 else if (PL_op->op_private & OPpDEREF) {
2930 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2934 sv = (svp ? *svp : &PL_sv_undef);
2935 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2942 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2944 PERL_ARGS_ASSERT_VIVIFY_REF;
2949 Perl_croak_no_modify();
2950 prepare_SV_for_RV(sv);
2953 SvRV_set(sv, newSV(0));
2956 SvRV_set(sv, MUTABLE_SV(newAV()));
2959 SvRV_set(sv, MUTABLE_SV(newHV()));
2966 if (SvGMAGICAL(sv)) {
2967 /* copy the sv without magic to prevent magic from being
2969 SV* msv = sv_newmortal();
2970 sv_setsv_nomg(msv, sv);
2979 SV* const sv = TOPs;
2982 SV* const rsv = SvRV(sv);
2983 if (SvTYPE(rsv) == SVt_PVCV) {
2989 SETs(method_common(sv, NULL));
2996 SV* const meth = cMETHOPx_meth(PL_op);
2997 U32 hash = SvSHARED_HASH(meth);
2999 XPUSHs(method_common(meth, &hash));
3004 S_method_common(pTHX_ SV* meth, U32* hashp)
3010 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
3011 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
3012 "package or object reference", SVfARG(meth)),
3014 : *(PL_stack_base + TOPMARK + 1);
3016 PERL_ARGS_ASSERT_METHOD_COMMON;
3020 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3025 ob = MUTABLE_SV(SvRV(sv));
3026 else if (!SvOK(sv)) goto undefined;
3027 else if (isGV_with_GP(sv)) {
3029 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3030 "without a package or object reference",
3033 if (SvTYPE(ob) == SVt_PVLV && LvTYPE(ob) == 'y') {
3034 assert(!LvTARGLEN(ob));
3038 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(ob));
3041 /* this isn't a reference */
3044 const char * const packname = SvPV_nomg_const(sv, packlen);
3045 const U32 packname_utf8 = SvUTF8(sv);
3046 stash = gv_stashpvn(packname, packlen, packname_utf8 | GV_CACHE_ONLY);
3047 if (stash) goto fetch;
3049 if (!(iogv = gv_fetchpvn_flags(
3050 packname, packlen, packname_utf8, SVt_PVIO
3052 !(ob=MUTABLE_SV(GvIO(iogv))))
3054 /* this isn't the name of a filehandle either */
3057 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3058 "without a package or object reference",
3061 /* assume it's a package name */
3062 stash = gv_stashpvn(packname, packlen, packname_utf8);
3063 if (!stash) packsv = sv;
3066 /* it _is_ a filehandle name -- replace with a reference */
3067 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3070 /* if we got here, ob should be an object or a glob */
3071 if (!ob || !(SvOBJECT(ob)
3072 || (isGV_with_GP(ob)
3073 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3076 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3077 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3078 ? newSVpvs_flags("DOES", SVs_TEMP)
3082 stash = SvSTASH(ob);
3085 /* NOTE: stash may be null, hope hv_fetch_ent and
3086 gv_fetchmethod can cope (it seems they can) */
3088 /* shortcut for simple names */
3090 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3092 gv = MUTABLE_GV(HeVAL(he));
3094 if (isGV(gv) && GvCV(gv) &&
3095 (!GvCVGEN(gv) || GvCVGEN(gv)
3096 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3097 return MUTABLE_SV(GvCV(gv));
3101 assert(stash || packsv);
3102 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3103 meth, GV_AUTOLOAD | GV_CROAK);
3106 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3111 * c-indentation-style: bsd
3113 * indent-tabs-mode: nil
3116 * ex: set ts=8 sts=4 sw=4 et: