3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
15 * Awake! Awake! Fear, Fire, Foes! Awake!
18 * [p.1007 of _The Lord of the Rings_, VI/viii: "The Scouring of the Shire"]
21 /* This file contains 'hot' pp ("push/pop") functions that
22 * execute the opcodes that make up a perl program. A typical pp function
23 * expects to find its arguments on the stack, and usually pushes its
24 * results onto the stack, hence the 'pp' terminology. Each OP structure
25 * contains a pointer to the relevant pp_foo() function.
27 * By 'hot', we mean common ops whose execution speed is critical.
28 * By gathering them together into a single file, we encourage
29 * CPU cache hits on hot code. Also it could be taken as a warning not to
30 * change any code in this file unless you're sure it won't affect
35 #define PERL_IN_PP_HOT_C
51 PL_curcop = (COP*)PL_op;
52 TAINT_NOT; /* Each statement is presumed innocent */
53 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
64 if (PL_op->op_private & OPpLVAL_INTRO)
65 PUSHs(save_scalar(cGVOP_gv));
67 PUSHs(GvSVn(cGVOP_gv));
77 /* This is sometimes called directly by pp_coreargs and pp_grepstart. */
81 PUSHMARK(PL_stack_sp);
92 /* no PUTBACK, SETs doesn't inc/dec SP */
99 XPUSHs(MUTABLE_SV(cGVOP_gv));
108 /* SP is not used to remove a variable that is saved across the
109 sv_2bool_flags call in SvTRUE_NN, if a RISC/CISC or low/high machine
110 register or load/store vs direct mem ops macro is introduced, this
111 should be a define block between direct PL_stack_sp and dSP operations,
112 presently, using PL_stack_sp is bias towards CISC cpus */
113 SV * const sv = *PL_stack_sp;
117 if (PL_op->op_type == OP_AND)
119 return cLOGOP->op_other;
127 /* sassign keeps its args in the optree traditionally backwards.
128 So we pop them differently.
130 SV *left = POPs; SV *right = TOPs;
132 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
133 SV * const temp = left;
134 left = right; right = temp;
136 if (TAINTING_get && TAINT_get && !SvTAINTED(right))
138 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
139 SV * const cv = SvRV(right);
140 const U32 cv_type = SvTYPE(cv);
141 const bool is_gv = isGV_with_GP(left);
142 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
148 /* Can do the optimisation if left (LVALUE) is not a typeglob,
149 right (RVALUE) is a reference to something, and we're in void
151 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
152 /* Is the target symbol table currently empty? */
153 GV * const gv = gv_fetchsv_nomg(left, GV_NOINIT, SVt_PVGV);
154 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
155 /* Good. Create a new proxy constant subroutine in the target.
156 The gv becomes a(nother) reference to the constant. */
157 SV *const value = SvRV(cv);
159 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
160 SvPCS_IMPORTED_on(gv);
162 SvREFCNT_inc_simple_void(value);
168 /* Need to fix things up. */
170 /* Need to fix GV. */
171 left = MUTABLE_SV(gv_fetchsv_nomg(left,GV_ADD, SVt_PVGV));
175 /* We've been returned a constant rather than a full subroutine,
176 but they expect a subroutine reference to apply. */
178 ENTER_with_name("sassign_coderef");
179 SvREFCNT_inc_void(SvRV(cv));
180 /* newCONSTSUB takes a reference count on the passed in SV
181 from us. We set the name to NULL, otherwise we get into
182 all sorts of fun as the reference to our new sub is
183 donated to the GV that we're about to assign to.
185 SvRV_set(right, MUTABLE_SV(newCONSTSUB(GvSTASH(left), NULL,
188 LEAVE_with_name("sassign_coderef");
190 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
192 First: ops for \&{"BONK"}; return us the constant in the
194 Second: ops for *{"BONK"} cause that symbol table entry
195 (and our reference to it) to be upgraded from RV
197 Thirdly: We get here. cv is actually PVGV now, and its
198 GvCV() is actually the subroutine we're looking for
200 So change the reference so that it points to the subroutine
201 of that typeglob, as that's what they were after all along.
203 GV *const upgraded = MUTABLE_GV(cv);
204 CV *const source = GvCV(upgraded);
207 assert(CvFLAGS(source) & CVf_CONST);
209 SvREFCNT_inc_void(source);
210 SvREFCNT_dec_NN(upgraded);
211 SvRV_set(right, MUTABLE_SV(source));
217 SvTEMP(left) && !SvSMAGICAL(left) && SvREFCNT(left) == 1 &&
218 (!isGV_with_GP(left) || SvFAKE(left)) && ckWARN(WARN_MISC)
221 packWARN(WARN_MISC), "Useless assignment to a temporary"
223 SvSetMagicSV(left, right);
233 RETURNOP(cLOGOP->op_other);
235 RETURNOP(cLOGOP->op_next);
242 TAINT_NOT; /* Each statement is presumed innocent */
243 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
245 if (!(PL_op->op_flags & OPf_SPECIAL)) {
246 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
247 LEAVE_SCOPE(oldsave);
254 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
259 const char *rpv = NULL;
261 bool rcopied = FALSE;
263 if (TARG == right && right != left) { /* $r = $l.$r */
264 rpv = SvPV_nomg_const(right, rlen);
265 rbyte = !DO_UTF8(right);
266 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
267 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
271 if (TARG != left) { /* not $l .= $r */
273 const char* const lpv = SvPV_nomg_const(left, llen);
274 lbyte = !DO_UTF8(left);
275 sv_setpvn(TARG, lpv, llen);
281 else { /* $l .= $r and left == TARG */
283 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
284 report_uninit(right);
288 SvPV_force_nomg_nolen(left);
290 lbyte = !DO_UTF8(left);
297 /* $r.$r: do magic twice: tied might return different 2nd time */
299 rpv = SvPV_nomg_const(right, rlen);
300 rbyte = !DO_UTF8(right);
302 if (lbyte != rbyte) {
303 /* sv_utf8_upgrade_nomg() may reallocate the stack */
306 sv_utf8_upgrade_nomg(TARG);
309 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
310 sv_utf8_upgrade_nomg(right);
311 rpv = SvPV_nomg_const(right, rlen);
315 sv_catpvn_nomg(TARG, rpv, rlen);
322 /* push the elements of av onto the stack.
323 * XXX Note that padav has similar code but without the mg_get().
324 * I suspect that the mg_get is no longer needed, but while padav
325 * differs, it can't share this function */
328 S_pushav(pTHX_ AV* const av)
331 const SSize_t maxarg = AvFILL(av) + 1;
333 if (SvRMAGICAL(av)) {
335 for (i=0; i < (PADOFFSET)maxarg; i++) {
336 SV ** const svp = av_fetch(av, i, FALSE);
337 /* See note in pp_helem, and bug id #27839 */
339 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
345 for (i=0; i < (PADOFFSET)maxarg; i++) {
346 SV * const sv = AvARRAY(av)[i];
347 SP[i+1] = sv ? sv : &PL_sv_undef;
355 /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
360 PADOFFSET base = PL_op->op_targ;
361 int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
363 if (PL_op->op_flags & OPf_SPECIAL) {
364 /* fake the RHS of my ($x,$y,..) = @_ */
366 S_pushav(aTHX_ GvAVn(PL_defgv));
370 /* note, this is only skipped for compile-time-known void cxt */
371 if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
374 for (i = 0; i <count; i++)
375 *++SP = PAD_SV(base+i);
377 if (PL_op->op_private & OPpLVAL_INTRO) {
378 SV **svp = &(PAD_SVl(base));
379 const UV payload = (UV)(
380 (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
381 | (count << SAVE_TIGHT_SHIFT)
382 | SAVEt_CLEARPADRANGE);
383 assert(OPpPADRANGE_COUNTMASK + 1 == (1 <<OPpPADRANGE_COUNTSHIFT));
384 assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
391 for (i = 0; i <count; i++)
392 SvPADSTALE_off(*svp++); /* mark lexical as active */
403 OP * const op = PL_op;
404 /* access PL_curpad once */
405 SV ** const padentry = &(PAD_SVl(op->op_targ));
410 PUTBACK; /* no pop/push after this, TOPs ok */
412 if (op->op_flags & OPf_MOD) {
413 if (op->op_private & OPpLVAL_INTRO)
414 if (!(op->op_private & OPpPAD_STATE))
415 save_clearsv(padentry);
416 if (op->op_private & OPpDEREF) {
417 /* TOPs is equivalent to TARG here. Using TOPs (SP) rather
418 than TARG reduces the scope of TARG, so it does not
419 span the call to save_clearsv, resulting in smaller
421 TOPs = vivify_ref(TOPs, op->op_private & OPpDEREF);
434 tryAMAGICunTARGETlist(iter_amg, 0);
435 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
437 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
438 if (!isGV_with_GP(PL_last_in_gv)) {
439 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
440 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
443 XPUSHs(MUTABLE_SV(PL_last_in_gv));
446 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
449 return do_readline();
457 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
461 (SvIOK_notUV(left) && SvIOK_notUV(right))
462 ? (SvIVX(left) == SvIVX(right))
463 : ( do_ncmp(left, right) == 0)
472 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
473 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
474 Perl_croak_no_modify();
475 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
476 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
478 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
479 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
481 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
482 if (inc) sv_inc(TOPs);
495 if (PL_op->op_type == OP_OR)
497 RETURNOP(cLOGOP->op_other);
506 const int op_type = PL_op->op_type;
507 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
512 if (!sv || !SvANY(sv)) {
513 if (op_type == OP_DOR)
515 RETURNOP(cLOGOP->op_other);
521 if (!sv || !SvANY(sv))
526 switch (SvTYPE(sv)) {
528 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
532 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
536 if (CvROOT(sv) || CvXSUB(sv))
549 if(op_type == OP_DOR)
551 RETURNOP(cLOGOP->op_other);
553 /* assuming OP_DEFINED */
561 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
562 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
566 useleft = USE_LEFT(svl);
567 #ifdef PERL_PRESERVE_IVUV
568 /* We must see if we can perform the addition with integers if possible,
569 as the integer code detects overflow while the NV code doesn't.
570 If either argument hasn't had a numeric conversion yet attempt to get
571 the IV. It's important to do this now, rather than just assuming that
572 it's not IOK as a PV of "9223372036854775806" may not take well to NV
573 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
574 integer in case the second argument is IV=9223372036854775806
575 We can (now) rely on sv_2iv to do the right thing, only setting the
576 public IOK flag if the value in the NV (or PV) slot is truly integer.
578 A side effect is that this also aggressively prefers integer maths over
579 fp maths for integer values.
581 How to detect overflow?
583 C 99 section 6.2.6.1 says
585 The range of nonnegative values of a signed integer type is a subrange
586 of the corresponding unsigned integer type, and the representation of
587 the same value in each type is the same. A computation involving
588 unsigned operands can never overflow, because a result that cannot be
589 represented by the resulting unsigned integer type is reduced modulo
590 the number that is one greater than the largest value that can be
591 represented by the resulting type.
595 which I read as "unsigned ints wrap."
597 signed integer overflow seems to be classed as "exception condition"
599 If an exceptional condition occurs during the evaluation of an
600 expression (that is, if the result is not mathematically defined or not
601 in the range of representable values for its type), the behavior is
604 (6.5, the 5th paragraph)
606 I had assumed that on 2s complement machines signed arithmetic would
607 wrap, hence coded pp_add and pp_subtract on the assumption that
608 everything perl builds on would be happy. After much wailing and
609 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
610 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
611 unsigned code below is actually shorter than the old code. :-)
614 if (SvIV_please_nomg(svr)) {
615 /* Unless the left argument is integer in range we are going to have to
616 use NV maths. Hence only attempt to coerce the right argument if
617 we know the left is integer. */
625 /* left operand is undef, treat as zero. + 0 is identity,
626 Could SETi or SETu right now, but space optimise by not adding
627 lots of code to speed up what is probably a rarish case. */
629 /* Left operand is defined, so is it IV? */
630 if (SvIV_please_nomg(svl)) {
631 if ((auvok = SvUOK(svl)))
634 const IV aiv = SvIVX(svl);
637 auvok = 1; /* Now acting as a sign flag. */
638 } else { /* 2s complement assumption for IV_MIN */
646 bool result_good = 0;
649 bool buvok = SvUOK(svr);
654 const IV biv = SvIVX(svr);
661 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
662 else "IV" now, independent of how it came in.
663 if a, b represents positive, A, B negative, a maps to -A etc
668 all UV maths. negate result if A negative.
669 add if signs same, subtract if signs differ. */
675 /* Must get smaller */
681 /* result really should be -(auv-buv). as its negation
682 of true value, need to swap our result flag */
699 if (result <= (UV)IV_MIN)
702 /* result valid, but out of range for IV. */
707 } /* Overflow, drop through to NVs. */
712 NV value = SvNV_nomg(svr);
715 /* left operand is undef, treat as zero. + 0.0 is identity. */
719 SETn( value + SvNV_nomg(svl) );
727 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
728 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
729 const U32 lval = PL_op->op_flags & OPf_MOD;
730 SV** const svp = av_fetch(av, PL_op->op_private, lval);
731 SV *sv = (svp ? *svp : &PL_sv_undef);
733 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
741 dVAR; dSP; dMARK; dTARGET;
743 do_join(TARG, *MARK, MARK, SP);
754 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
755 * will be enough to hold an OP*.
757 SV* const sv = sv_newmortal();
758 sv_upgrade(sv, SVt_PVLV);
760 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
763 XPUSHs(MUTABLE_SV(PL_op));
768 /* Oversized hot code. */
772 dVAR; dSP; dMARK; dORIGMARK;
776 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
780 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
783 if (MARK == ORIGMARK) {
784 /* If using default handle then we need to make space to
785 * pass object as 1st arg, so move other args up ...
789 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
792 return Perl_tied_method(aTHX_ SV_CONST(PRINT), mark - 1, MUTABLE_SV(io),
794 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
795 | (PL_op->op_type == OP_SAY
796 ? TIED_METHOD_SAY : 0)), sp - mark);
799 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
800 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
803 SETERRNO(EBADF,RMS_IFI);
806 else if (!(fp = IoOFP(io))) {
808 report_wrongway_fh(gv, '<');
811 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
815 SV * const ofs = GvSV(PL_ofsgv); /* $, */
817 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
819 if (!do_print(*MARK, fp))
823 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
824 if (!do_print(GvSV(PL_ofsgv), fp)) {
833 if (!do_print(*MARK, fp))
841 if (PL_op->op_type == OP_SAY) {
842 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
845 else if (PL_ors_sv && SvOK(PL_ors_sv))
846 if (!do_print(PL_ors_sv, fp)) /* $\ */
849 if (IoFLAGS(io) & IOf_FLUSH)
850 if (PerlIO_flush(fp) == EOF)
860 XPUSHs(&PL_sv_undef);
867 const I32 gimme = GIMME_V;
868 static const char an_array[] = "an ARRAY";
869 static const char a_hash[] = "a HASH";
870 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
871 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
876 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
879 if (SvTYPE(sv) != type)
880 /* diag_listed_as: Not an ARRAY reference */
881 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
882 else if (PL_op->op_flags & OPf_MOD
883 && PL_op->op_private & OPpLVAL_INTRO)
884 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
886 else if (SvTYPE(sv) != type) {
889 if (!isGV_with_GP(sv)) {
890 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
898 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
899 if (PL_op->op_private & OPpLVAL_INTRO)
900 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
902 if (PL_op->op_flags & OPf_REF) {
906 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
907 const I32 flags = is_lvalue_sub();
908 if (flags && !(flags & OPpENTERSUB_INARGS)) {
909 if (gimme != G_ARRAY)
910 goto croak_cant_return;
917 AV *const av = MUTABLE_AV(sv);
918 /* The guts of pp_rv2av, with no intending change to preserve history
919 (until such time as we get tools that can do blame annotation across
920 whitespace changes. */
921 if (gimme == G_ARRAY) {
927 else if (gimme == G_SCALAR) {
929 const SSize_t maxarg = AvFILL(av) + 1;
933 /* The guts of pp_rv2hv */
934 if (gimme == G_ARRAY) { /* array wanted */
936 return Perl_do_kv(aTHX);
938 else if ((PL_op->op_private & OPpTRUEBOOL
939 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
940 && block_gimme() == G_VOID ))
941 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
942 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
943 else if (gimme == G_SCALAR) {
945 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
952 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
953 is_pp_rv2av ? "array" : "hash");
958 S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
962 PERL_ARGS_ASSERT_DO_ODDBALL;
965 if (ckWARN(WARN_MISC)) {
967 if (oddkey == firstkey &&
969 (SvTYPE(SvRV(*oddkey)) == SVt_PVAV ||
970 SvTYPE(SvRV(*oddkey)) == SVt_PVHV))
972 err = "Reference found where even-sized list expected";
975 err = "Odd number of elements in hash assignment";
976 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
985 SV **lastlelem = PL_stack_sp;
986 SV **lastrelem = PL_stack_base + POPMARK;
987 SV **firstrelem = PL_stack_base + POPMARK + 1;
988 SV **firstlelem = lastrelem + 1;
1002 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1004 if (gimme == G_ARRAY)
1005 lval = PL_op->op_flags & OPf_MOD || LVRET;
1007 /* If there's a common identifier on both sides we have to take
1008 * special care that assigning the identifier on the left doesn't
1009 * clobber a value on the right that's used later in the list.
1010 * Don't bother if LHS is just an empty hash or array.
1013 if ( (PL_op->op_private & OPpASSIGN_COMMON)
1015 firstlelem != lastlelem
1016 || ! ((sv = *firstlelem))
1018 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1019 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1020 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1023 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1024 for (relem = firstrelem; relem <= lastrelem; relem++) {
1025 if ((sv = *relem)) {
1026 TAINT_NOT; /* Each item is independent */
1028 /* Dear TODO test in t/op/sort.t, I love you.
1029 (It's relying on a panic, not a "semi-panic" from newSVsv()
1030 and then an assertion failure below.) */
1031 if (SvIS_FREED(sv)) {
1032 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1035 /* Not newSVsv(), as it does not allow copy-on-write,
1036 resulting in wasteful copies. We need a second copy of
1037 a temp here, hence the SV_NOSTEAL. */
1038 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1049 while (lelem <= lastlelem) {
1050 TAINT_NOT; /* Each item stands on its own, taintwise. */
1052 switch (SvTYPE(sv)) {
1054 ary = MUTABLE_AV(sv);
1055 magic = SvMAGICAL(ary) != 0;
1057 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1059 av_extend(ary, lastrelem - relem);
1061 while (relem <= lastrelem) { /* gobble up all the rest */
1064 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1066 sv_setsv_nomg(sv, *relem);
1068 didstore = av_store(ary,i++,sv);
1077 if (PL_delaymagic & DM_ARRAY_ISA)
1078 SvSETMAGIC(MUTABLE_SV(ary));
1081 case SVt_PVHV: { /* normal hash */
1085 SV** topelem = relem;
1086 SV **firsthashrelem = relem;
1088 hash = MUTABLE_HV(sv);
1089 magic = SvMAGICAL(hash) != 0;
1091 odd = ((lastrelem - firsthashrelem)&1)? 0 : 1;
1093 do_oddball(lastrelem, firsthashrelem);
1094 /* we have firstlelem to reuse, it's not needed anymore
1096 *(lastrelem+1) = &PL_sv_undef;
1100 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1102 while (relem < lastrelem+odd) { /* gobble up all the rest */
1105 /* Copy the key if aassign is called in lvalue context,
1106 to avoid having the next op modify our rhs. Copy
1107 it also if it is gmagical, lest it make the
1108 hv_store_ent call below croak, leaking the value. */
1109 sv = lval || SvGMAGICAL(*relem)
1110 ? sv_mortalcopy(*relem)
1116 sv_setsv_nomg(tmpstr,*relem++); /* value */
1117 if (gimme == G_ARRAY) {
1118 if (hv_exists_ent(hash, sv, 0))
1119 /* key overwrites an existing entry */
1122 /* copy element back: possibly to an earlier
1123 * stack location if we encountered dups earlier,
1124 * possibly to a later stack location if odd */
1126 *topelem++ = tmpstr;
1129 didstore = hv_store_ent(hash,sv,tmpstr,0);
1131 if (!didstore) sv_2mortal(tmpstr);
1137 if (duplicates && gimme == G_ARRAY) {
1138 /* at this point we have removed the duplicate key/value
1139 * pairs from the stack, but the remaining values may be
1140 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1141 * the (a 2), but the stack now probably contains
1142 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1143 * obliterates the earlier key. So refresh all values. */
1144 lastrelem -= duplicates;
1145 relem = firsthashrelem;
1146 while (relem < lastrelem+odd) {
1148 he = hv_fetch_ent(hash, *relem++, 0, 0);
1149 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1152 if (odd && gimme == G_ARRAY) lastrelem++;
1156 if (SvIMMORTAL(sv)) {
1157 if (relem <= lastrelem)
1161 if (relem <= lastrelem) {
1163 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1164 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1167 packWARN(WARN_MISC),
1168 "Useless assignment to a temporary"
1170 sv_setsv(sv, *relem);
1174 sv_setsv(sv, &PL_sv_undef);
1179 if (PL_delaymagic & ~DM_DELAY) {
1181 /* Will be used to set PL_tainting below */
1182 Uid_t tmp_uid = PerlProc_getuid();
1183 Uid_t tmp_euid = PerlProc_geteuid();
1184 Gid_t tmp_gid = PerlProc_getgid();
1185 Gid_t tmp_egid = PerlProc_getegid();
1187 if (PL_delaymagic & DM_UID) {
1188 #ifdef HAS_SETRESUID
1189 rc = setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1190 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1193 # ifdef HAS_SETREUID
1194 rc = setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1195 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1198 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1199 rc = setruid(PL_delaymagic_uid);
1200 PL_delaymagic &= ~DM_RUID;
1202 # endif /* HAS_SETRUID */
1204 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1205 rc = seteuid(PL_delaymagic_euid);
1206 PL_delaymagic &= ~DM_EUID;
1208 # endif /* HAS_SETEUID */
1209 if (PL_delaymagic & DM_UID) {
1210 if (PL_delaymagic_uid != PL_delaymagic_euid)
1211 DIE(aTHX_ "No setreuid available");
1212 rc = PerlProc_setuid(PL_delaymagic_uid);
1214 # endif /* HAS_SETREUID */
1215 #endif /* HAS_SETRESUID */
1217 /* XXX $> et al currently silently ignore failures */
1218 PERL_UNUSED_VAR(rc);
1220 tmp_uid = PerlProc_getuid();
1221 tmp_euid = PerlProc_geteuid();
1223 if (PL_delaymagic & DM_GID) {
1224 #ifdef HAS_SETRESGID
1225 rc = setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1226 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1229 # ifdef HAS_SETREGID
1230 rc = setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1231 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1234 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1235 rc = setrgid(PL_delaymagic_gid);
1236 PL_delaymagic &= ~DM_RGID;
1238 # endif /* HAS_SETRGID */
1240 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1241 rc = setegid(PL_delaymagic_egid);
1242 PL_delaymagic &= ~DM_EGID;
1244 # endif /* HAS_SETEGID */
1245 if (PL_delaymagic & DM_GID) {
1246 if (PL_delaymagic_gid != PL_delaymagic_egid)
1247 DIE(aTHX_ "No setregid available");
1248 rc = PerlProc_setgid(PL_delaymagic_gid);
1250 # endif /* HAS_SETREGID */
1251 #endif /* HAS_SETRESGID */
1253 /* XXX $> et al currently silently ignore failures */
1254 PERL_UNUSED_VAR(rc);
1256 tmp_gid = PerlProc_getgid();
1257 tmp_egid = PerlProc_getegid();
1259 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1260 #ifdef NO_TAINT_SUPPORT
1261 PERL_UNUSED_VAR(tmp_uid);
1262 PERL_UNUSED_VAR(tmp_euid);
1263 PERL_UNUSED_VAR(tmp_gid);
1264 PERL_UNUSED_VAR(tmp_egid);
1269 if (gimme == G_VOID)
1270 SP = firstrelem - 1;
1271 else if (gimme == G_SCALAR) {
1274 SETi(lastrelem - firstrelem + 1);
1278 /* note that in this case *firstlelem may have been overwritten
1279 by sv_undef in the odd hash case */
1282 SP = firstrelem + (lastlelem - firstlelem);
1283 lelem = firstlelem + (relem - firstrelem);
1285 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1295 PMOP * const pm = cPMOP;
1296 REGEXP * rx = PM_GETRE(pm);
1297 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1298 SV * const rv = sv_newmortal();
1302 SvUPGRADE(rv, SVt_IV);
1303 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1304 loathe to use it here, but it seems to be the right fix. Or close.
1305 The key part appears to be that it's essential for pp_qr to return a new
1306 object (SV), which implies that there needs to be an effective way to
1307 generate a new SV from the existing SV that is pre-compiled in the
1309 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1312 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1313 if ((cv = *cvp) && CvCLONE(*cvp)) {
1314 *cvp = cv_clone(cv);
1315 SvREFCNT_dec_NN(cv);
1319 HV *const stash = gv_stashsv(pkg, GV_ADD);
1320 SvREFCNT_dec_NN(pkg);
1321 (void)sv_bless(rv, stash);
1324 if (RX_ISTAINTED(rx)) {
1326 SvTAINTED_on(SvRV(rv));
1339 SSize_t curpos = 0; /* initial pos() or current $+[0] */
1342 const char *truebase; /* Start of string */
1343 REGEXP *rx = PM_GETRE(pm);
1345 const I32 gimme = GIMME;
1347 const I32 oldsave = PL_savestack_ix;
1348 I32 had_zerolen = 0;
1351 if (PL_op->op_flags & OPf_STACKED)
1353 else if (PL_op->op_private & OPpTARGET_MY)
1360 PUTBACK; /* EVAL blocks need stack_sp. */
1361 /* Skip get-magic if this is a qr// clone, because regcomp has
1363 truebase = ReANY(rx)->mother_re
1364 ? SvPV_nomg_const(TARG, len)
1365 : SvPV_const(TARG, len);
1367 DIE(aTHX_ "panic: pp_match");
1368 strend = truebase + len;
1369 rxtainted = (RX_ISTAINTED(rx) ||
1370 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1373 /* We need to know this in case we fail out early - pos() must be reset */
1374 global = dynpm->op_pmflags & PMf_GLOBAL;
1376 /* PMdf_USED is set after a ?? matches once */
1379 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1381 pm->op_pmflags & PMf_USED
1384 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1388 /* empty pattern special-cased to use last successful pattern if
1389 possible, except for qr// */
1390 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1396 if (RX_MINLEN(rx) >= 0 && (STRLEN)RX_MINLEN(rx) > len) {
1397 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
1398 UVuf" < %"IVdf")\n",
1399 (UV)len, (IV)RX_MINLEN(rx)));
1403 /* get pos() if //g */
1405 mg = mg_find_mglob(TARG);
1406 if (mg && mg->mg_len >= 0) {
1407 curpos = MgBYTEPOS(mg, TARG, truebase, len);
1408 /* last time pos() was set, it was zero-length match */
1409 if (mg->mg_flags & MGf_MINMATCH)
1414 #ifdef PERL_SAWAMPERSAND
1417 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1418 || (dynpm->op_pmflags & PMf_KEEPCOPY)
1422 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1423 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1424 * only on the first iteration. Therefore we need to copy $' as well
1425 * as $&, to make the rest of the string available for captures in
1426 * subsequent iterations */
1427 if (! (global && gimme == G_ARRAY))
1428 r_flags |= REXEC_COPY_SKIP_POST;
1430 #ifdef PERL_SAWAMPERSAND
1431 if (dynpm->op_pmflags & PMf_KEEPCOPY)
1432 /* handle KEEPCOPY in pmop but not rx, eg $r=qr/a/; /$r/p */
1433 r_flags &= ~(REXEC_COPY_SKIP_PRE|REXEC_COPY_SKIP_POST);
1440 s = truebase + curpos;
1442 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1443 had_zerolen, TARG, NULL, r_flags))
1447 if (dynpm->op_pmflags & PMf_ONCE)
1449 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1451 dynpm->op_pmflags |= PMf_USED;
1455 RX_MATCH_TAINTED_on(rx);
1456 TAINT_IF(RX_MATCH_TAINTED(rx));
1460 if (global && (gimme != G_ARRAY || (dynpm->op_pmflags & PMf_CONTINUE))) {
1462 mg = sv_magicext_mglob(TARG);
1463 MgBYTEPOS_set(mg, TARG, truebase, RX_OFFS(rx)[0].end);
1464 if (RX_ZERO_LEN(rx))
1465 mg->mg_flags |= MGf_MINMATCH;
1467 mg->mg_flags &= ~MGf_MINMATCH;
1470 if ((!RX_NPARENS(rx) && !global) || gimme != G_ARRAY) {
1471 LEAVE_SCOPE(oldsave);
1475 /* push captures on stack */
1478 const I32 nparens = RX_NPARENS(rx);
1479 I32 i = (global && !nparens) ? 1 : 0;
1481 SPAGAIN; /* EVAL blocks could move the stack. */
1482 EXTEND(SP, nparens + i);
1483 EXTEND_MORTAL(nparens + i);
1484 for (i = !i; i <= nparens; i++) {
1485 PUSHs(sv_newmortal());
1486 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1487 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1488 const char * const s = RX_OFFS(rx)[i].start + truebase;
1489 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1490 len < 0 || len > strend - s)
1491 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1492 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1493 (long) i, (long) RX_OFFS(rx)[i].start,
1494 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1495 sv_setpvn(*SP, s, len);
1496 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1501 curpos = (UV)RX_OFFS(rx)[0].end;
1502 had_zerolen = RX_ZERO_LEN(rx);
1503 PUTBACK; /* EVAL blocks may use stack */
1504 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1507 LEAVE_SCOPE(oldsave);
1513 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1515 mg = mg_find_mglob(TARG);
1519 LEAVE_SCOPE(oldsave);
1520 if (gimme == G_ARRAY)
1526 Perl_do_readline(pTHX)
1528 dVAR; dSP; dTARGETSTACKED;
1533 IO * const io = GvIO(PL_last_in_gv);
1534 const I32 type = PL_op->op_type;
1535 const I32 gimme = GIMME_V;
1538 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1540 Perl_tied_method(aTHX_ SV_CONST(READLINE), SP, MUTABLE_SV(io), mg, gimme, 0);
1541 if (gimme == G_SCALAR) {
1543 SvSetSV_nosteal(TARG, TOPs);
1553 if (IoFLAGS(io) & IOf_ARGV) {
1554 if (IoFLAGS(io) & IOf_START) {
1556 if (av_tindex(GvAVn(PL_last_in_gv)) < 0) {
1557 IoFLAGS(io) &= ~IOf_START;
1558 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1559 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1560 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1561 SvSETMAGIC(GvSV(PL_last_in_gv));
1566 fp = nextargv(PL_last_in_gv);
1567 if (!fp) { /* Note: fp != IoIFP(io) */
1568 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1571 else if (type == OP_GLOB)
1572 fp = Perl_start_glob(aTHX_ POPs, io);
1574 else if (type == OP_GLOB)
1576 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1577 report_wrongway_fh(PL_last_in_gv, '>');
1581 if ((!io || !(IoFLAGS(io) & IOf_START))
1582 && ckWARN(WARN_CLOSED)
1585 report_evil_fh(PL_last_in_gv);
1587 if (gimme == G_SCALAR) {
1588 /* undef TARG, and push that undefined value */
1589 if (type != OP_RCATLINE) {
1590 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1598 if (gimme == G_SCALAR) {
1600 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1603 if (type == OP_RCATLINE)
1604 SvPV_force_nomg_nolen(sv);
1608 else if (isGV_with_GP(sv)) {
1609 SvPV_force_nomg_nolen(sv);
1611 SvUPGRADE(sv, SVt_PV);
1612 tmplen = SvLEN(sv); /* remember if already alloced */
1613 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1614 /* try short-buffering it. Please update t/op/readline.t
1615 * if you change the growth length.
1620 if (type == OP_RCATLINE && SvOK(sv)) {
1622 SvPV_force_nomg_nolen(sv);
1628 sv = sv_2mortal(newSV(80));
1632 /* This should not be marked tainted if the fp is marked clean */
1633 #define MAYBE_TAINT_LINE(io, sv) \
1634 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1639 /* delay EOF state for a snarfed empty file */
1640 #define SNARF_EOF(gimme,rs,io,sv) \
1641 (gimme != G_SCALAR || SvCUR(sv) \
1642 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1646 if (!sv_gets(sv, fp, offset)
1648 || SNARF_EOF(gimme, PL_rs, io, sv)
1649 || PerlIO_error(fp)))
1651 PerlIO_clearerr(fp);
1652 if (IoFLAGS(io) & IOf_ARGV) {
1653 fp = nextargv(PL_last_in_gv);
1656 (void)do_close(PL_last_in_gv, FALSE);
1658 else if (type == OP_GLOB) {
1659 if (!do_close(PL_last_in_gv, FALSE)) {
1660 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1661 "glob failed (child exited with status %d%s)",
1662 (int)(STATUS_CURRENT >> 8),
1663 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1666 if (gimme == G_SCALAR) {
1667 if (type != OP_RCATLINE) {
1668 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1674 MAYBE_TAINT_LINE(io, sv);
1677 MAYBE_TAINT_LINE(io, sv);
1679 IoFLAGS(io) |= IOf_NOLINE;
1683 if (type == OP_GLOB) {
1686 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1687 char * const tmps = SvEND(sv) - 1;
1688 if (*tmps == *SvPVX_const(PL_rs)) {
1690 SvCUR_set(sv, SvCUR(sv) - 1);
1693 for (t1 = SvPVX_const(sv); *t1; t1++)
1694 if (strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1696 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1697 (void)POPs; /* Unmatched wildcard? Chuck it... */
1700 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1701 if (ckWARN(WARN_UTF8)) {
1702 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1703 const STRLEN len = SvCUR(sv) - offset;
1706 if (!is_utf8_string_loc(s, len, &f))
1707 /* Emulate :encoding(utf8) warning in the same case. */
1708 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1709 "utf8 \"\\x%02X\" does not map to Unicode",
1710 f < (U8*)SvEND(sv) ? *f : 0);
1713 if (gimme == G_ARRAY) {
1714 if (SvLEN(sv) - SvCUR(sv) > 20) {
1715 SvPV_shrink_to_cur(sv);
1717 sv = sv_2mortal(newSV(80));
1720 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1721 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1722 const STRLEN new_len
1723 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1724 SvPV_renew(sv, new_len);
1735 SV * const keysv = POPs;
1736 HV * const hv = MUTABLE_HV(POPs);
1737 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1738 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1740 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1741 bool preeminent = TRUE;
1743 if (SvTYPE(hv) != SVt_PVHV)
1750 /* If we can determine whether the element exist,
1751 * Try to preserve the existenceness of a tied hash
1752 * element by using EXISTS and DELETE if possible.
1753 * Fallback to FETCH and STORE otherwise. */
1754 if (SvCANEXISTDELETE(hv))
1755 preeminent = hv_exists_ent(hv, keysv, 0);
1758 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1759 svp = he ? &HeVAL(he) : NULL;
1761 if (!svp || !*svp || *svp == &PL_sv_undef) {
1765 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1767 lv = sv_newmortal();
1768 sv_upgrade(lv, SVt_PVLV);
1770 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1771 SvREFCNT_dec_NN(key2); /* sv_magic() increments refcount */
1772 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1778 if (HvNAME_get(hv) && isGV(*svp))
1779 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1780 else if (preeminent)
1781 save_helem_flags(hv, keysv, svp,
1782 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1784 SAVEHDELETE(hv, keysv);
1786 else if (PL_op->op_private & OPpDEREF) {
1787 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1791 sv = (svp && *svp ? *svp : &PL_sv_undef);
1792 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1793 * was to make C<local $tied{foo} = $tied{foo}> possible.
1794 * However, it seems no longer to be needed for that purpose, and
1795 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1796 * would loop endlessly since the pos magic is getting set on the
1797 * mortal copy and lost. However, the copy has the effect of
1798 * triggering the get magic, and losing it altogether made things like
1799 * c<$tied{foo};> in void context no longer do get magic, which some
1800 * code relied on. Also, delayed triggering of magic on @+ and friends
1801 * meant the original regex may be out of scope by now. So as a
1802 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1803 * being called too many times). */
1804 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1818 cx = &cxstack[cxstack_ix];
1819 itersvp = CxITERVAR(cx);
1821 switch (CxTYPE(cx)) {
1823 case CXt_LOOP_LAZYSV: /* string increment */
1825 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1826 SV *end = cx->blk_loop.state_u.lazysv.end;
1827 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1828 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1830 const char *max = SvPV_const(end, maxlen);
1831 if (SvNIOK(cur) || SvCUR(cur) > maxlen)
1835 if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1836 /* safe to reuse old SV */
1837 sv_setsv(oldsv, cur);
1841 /* we need a fresh SV every time so that loop body sees a
1842 * completely new SV for closures/references to work as
1844 *itersvp = newSVsv(cur);
1845 SvREFCNT_dec_NN(oldsv);
1847 if (strEQ(SvPVX_const(cur), max))
1848 sv_setiv(cur, 0); /* terminate next time */
1854 case CXt_LOOP_LAZYIV: /* integer increment */
1856 IV cur = cx->blk_loop.state_u.lazyiv.cur;
1857 if (cur > cx->blk_loop.state_u.lazyiv.end)
1861 /* don't risk potential race */
1862 if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1863 /* safe to reuse old SV */
1864 sv_setiv(oldsv, cur);
1868 /* we need a fresh SV every time so that loop body sees a
1869 * completely new SV for closures/references to work as they
1871 *itersvp = newSViv(cur);
1872 SvREFCNT_dec_NN(oldsv);
1875 if (cur == IV_MAX) {
1876 /* Handle end of range at IV_MAX */
1877 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1879 ++cx->blk_loop.state_u.lazyiv.cur;
1883 case CXt_LOOP_FOR: /* iterate array */
1886 AV *av = cx->blk_loop.state_u.ary.ary;
1888 bool av_is_stack = FALSE;
1895 if (PL_op->op_private & OPpITER_REVERSED) {
1896 ix = --cx->blk_loop.state_u.ary.ix;
1897 if (ix <= (av_is_stack ? cx->blk_loop.resetsp : -1))
1901 ix = ++cx->blk_loop.state_u.ary.ix;
1902 if (ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av)))
1906 if (SvMAGICAL(av) || AvREIFY(av)) {
1907 SV * const * const svp = av_fetch(av, ix, FALSE);
1908 sv = svp ? *svp : NULL;
1911 sv = AvARRAY(av)[ix];
1915 if (SvIS_FREED(sv)) {
1917 Perl_croak(aTHX_ "Use of freed value in iteration");
1919 if (SvPADTMP(sv) && !IS_PADGV(sv))
1923 SvREFCNT_inc_simple_void_NN(sv);
1926 else if (!av_is_stack) {
1927 sv = newSVavdefelem(av, ix, 0);
1934 SvREFCNT_dec(oldsv);
1939 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1945 A description of how taint works in pattern matching and substitution.
1947 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
1948 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
1950 While the pattern is being assembled/concatenated and then compiled,
1951 PL_tainted will get set (via TAINT_set) if any component of the pattern
1952 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
1953 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
1954 TAINT_get). Also, if any component of the pattern matches based on
1955 locale-dependent behavior, the RXf_TAINTED_SEEN flag is set.
1957 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1958 the pattern is marked as tainted. This means that subsequent usage, such
1959 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
1960 on the new pattern too.
1962 RXf_TAINTED_SEEN is used post-execution by the get magic code
1963 of $1 et al to indicate whether the returned value should be tainted.
1964 It is the responsibility of the caller of the pattern (i.e. pp_match,
1965 pp_subst etc) to set this flag for any other circumstances where $1 needs
1968 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
1970 There are three possible sources of taint
1972 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
1973 * the replacement string (or expression under /e)
1975 There are four destinations of taint and they are affected by the sources
1976 according to the rules below:
1978 * the return value (not including /r):
1979 tainted by the source string and pattern, but only for the
1980 number-of-iterations case; boolean returns aren't tainted;
1981 * the modified string (or modified copy under /r):
1982 tainted by the source string, pattern, and replacement strings;
1984 tainted by the pattern, and under 'use re "taint"', by the source
1986 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
1987 should always be unset before executing subsequent code.
1989 The overall action of pp_subst is:
1991 * at the start, set bits in rxtainted indicating the taint status of
1992 the various sources.
1994 * After each pattern execution, update the SUBST_TAINT_PAT bit in
1995 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
1996 pattern has subsequently become tainted via locale ops.
1998 * If control is being passed to pp_substcont to execute a /e block,
1999 save rxtainted in the CXt_SUBST block, for future use by
2002 * Whenever control is being returned to perl code (either by falling
2003 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2004 use the flag bits in rxtainted to make all the appropriate types of
2005 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2006 et al will appear tainted.
2008 pp_match is just a simpler version of the above.
2024 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2025 See "how taint works" above */
2028 REGEXP *rx = PM_GETRE(pm);
2030 int force_on_match = 0;
2031 const I32 oldsave = PL_savestack_ix;
2033 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2038 /* known replacement string? */
2039 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2043 if (PL_op->op_flags & OPf_STACKED)
2045 else if (PL_op->op_private & OPpTARGET_MY)
2052 SvGETMAGIC(TARG); /* must come before cow check */
2054 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2055 because they make integers such as 256 "false". */
2056 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2059 sv_force_normal_flags(TARG,0);
2061 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2062 && (SvREADONLY(TARG)
2063 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2064 || SvTYPE(TARG) > SVt_PVLV)
2065 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2066 Perl_croak_no_modify();
2069 orig = SvPV_nomg(TARG, len);
2070 /* note we don't (yet) force the var into being a string; if we fail
2071 * to match, we leave as-is; on successful match howeverm, we *will*
2072 * coerce into a string, then repeat the match */
2073 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2076 /* only replace once? */
2077 once = !(rpm->op_pmflags & PMf_GLOBAL);
2079 /* See "how taint works" above */
2082 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2083 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2084 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2085 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2086 ? SUBST_TAINT_BOOLRET : 0));
2092 DIE(aTHX_ "panic: pp_subst, pm=%p, orig=%p", pm, orig);
2094 strend = orig + len;
2095 slen = DO_UTF8(TARG) ? utf8_length((U8*)orig, (U8*)strend) : len;
2096 maxiters = 2 * slen + 10; /* We can match twice at each
2097 position, once with zero-length,
2098 second time with non-zero. */
2100 if (!RX_PRELEN(rx) && PL_curpm
2101 && !ReANY(rx)->mother_re) {
2106 #ifdef PERL_SAWAMPERSAND
2107 r_flags = ( RX_NPARENS(rx)
2109 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2110 || (rpm->op_pmflags & PMf_KEEPCOPY)
2115 r_flags = REXEC_COPY_STR;
2118 if (!CALLREGEXEC(rx, orig, strend, orig, 0, TARG, NULL, r_flags))
2121 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2122 LEAVE_SCOPE(oldsave);
2127 /* known replacement string? */
2129 /* replacement needing upgrading? */
2130 if (DO_UTF8(TARG) && !doutf8) {
2131 nsv = sv_newmortal();
2134 sv_recode_to_utf8(nsv, PL_encoding);
2136 sv_utf8_upgrade(nsv);
2137 c = SvPV_const(nsv, clen);
2141 c = SvPV_const(dstr, clen);
2142 doutf8 = DO_UTF8(dstr);
2145 if (SvTAINTED(dstr))
2146 rxtainted |= SUBST_TAINT_REPL;
2153 /* can do inplace substitution? */
2158 && (I32)clen <= RX_MINLENRET(rx)
2160 || !(r_flags & REXEC_COPY_STR)
2161 || (!SvGMAGICAL(dstr) && !(RX_EXTFLAGS(rx) & RXf_EVAL_SEEN))
2163 && !(RX_EXTFLAGS(rx) & RXf_NO_INPLACE_SUBST)
2164 && (!doutf8 || SvUTF8(TARG))
2165 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2169 if (SvIsCOW(TARG)) {
2170 if (!force_on_match)
2172 assert(SvVOK(TARG));
2175 if (force_on_match) {
2176 /* redo the first match, this time with the orig var
2177 * forced into being a string */
2179 orig = SvPV_force_nomg(TARG, len);
2185 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2186 rxtainted |= SUBST_TAINT_PAT;
2187 m = orig + RX_OFFS(rx)[0].start;
2188 d = orig + RX_OFFS(rx)[0].end;
2190 if (m - s > strend - d) { /* faster to shorten from end */
2193 Copy(c, m, clen, char);
2198 Move(d, m, i, char);
2202 SvCUR_set(TARG, m - s);
2204 else { /* faster from front */
2208 Move(s, d - i, i, char);
2211 Copy(c, d, clen, char);
2218 d = s = RX_OFFS(rx)[0].start + orig;
2221 if (iters++ > maxiters)
2222 DIE(aTHX_ "Substitution loop");
2223 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2224 rxtainted |= SUBST_TAINT_PAT;
2225 m = RX_OFFS(rx)[0].start + orig;
2228 Move(s, d, i, char);
2232 Copy(c, d, clen, char);
2235 s = RX_OFFS(rx)[0].end + orig;
2236 } while (CALLREGEXEC(rx, s, strend, orig,
2237 s == m, /* don't match same null twice */
2239 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2242 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2243 Move(s, d, i+1, char); /* include the NUL */
2253 if (force_on_match) {
2254 /* redo the first match, this time with the orig var
2255 * forced into being a string */
2257 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2258 /* I feel that it should be possible to avoid this mortal copy
2259 given that the code below copies into a new destination.
2260 However, I suspect it isn't worth the complexity of
2261 unravelling the C<goto force_it> for the small number of
2262 cases where it would be viable to drop into the copy code. */
2263 TARG = sv_2mortal(newSVsv(TARG));
2265 orig = SvPV_force_nomg(TARG, len);
2271 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2272 rxtainted |= SUBST_TAINT_PAT;
2274 s = RX_OFFS(rx)[0].start + orig;
2275 dstr = newSVpvn_flags(orig, s-orig,
2276 SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2281 /* note that a whole bunch of local vars are saved here for
2282 * use by pp_substcont: here's a list of them in case you're
2283 * searching for places in this sub that uses a particular var:
2284 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2285 * s m strend rx once */
2287 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2291 if (iters++ > maxiters)
2292 DIE(aTHX_ "Substitution loop");
2293 if (RX_MATCH_TAINTED(rx))
2294 rxtainted |= SUBST_TAINT_PAT;
2295 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2297 char *old_orig = orig;
2298 assert(RX_SUBOFFSET(rx) == 0);
2300 orig = RX_SUBBEG(rx);
2301 s = orig + (old_s - old_orig);
2302 strend = s + (strend - old_s);
2304 m = RX_OFFS(rx)[0].start + orig;
2305 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2306 s = RX_OFFS(rx)[0].end + orig;
2308 /* replacement already stringified */
2310 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2315 if (!nsv) nsv = sv_newmortal();
2316 sv_copypv(nsv, repl);
2317 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
2318 sv_catsv(dstr, nsv);
2320 else sv_catsv(dstr, repl);
2321 if (SvTAINTED(repl))
2322 rxtainted |= SUBST_TAINT_REPL;
2326 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2328 REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2329 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2331 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2332 /* From here on down we're using the copy, and leaving the original
2339 /* The match may make the string COW. If so, brilliant, because
2340 that's just saved us one malloc, copy and free - the regexp has
2341 donated the old buffer, and we malloc an entirely new one, rather
2342 than the regexp malloc()ing a buffer and copying our original,
2343 only for us to throw it away here during the substitution. */
2344 if (SvIsCOW(TARG)) {
2345 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2351 SvPV_set(TARG, SvPVX(dstr));
2352 SvCUR_set(TARG, SvCUR(dstr));
2353 SvLEN_set(TARG, SvLEN(dstr));
2354 SvFLAGS(TARG) |= SvUTF8(dstr);
2355 SvPV_set(dstr, NULL);
2362 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2363 (void)SvPOK_only_UTF8(TARG);
2366 /* See "how taint works" above */
2368 if ((rxtainted & SUBST_TAINT_PAT) ||
2369 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2370 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2372 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2374 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2375 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2377 SvTAINTED_on(TOPs); /* taint return value */
2379 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2381 /* needed for mg_set below */
2383 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2387 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2389 LEAVE_SCOPE(oldsave);
2398 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2399 ++*PL_markstack_ptr;
2401 LEAVE_with_name("grep_item"); /* exit inner scope */
2404 if (PL_stack_base + *PL_markstack_ptr > SP) {
2406 const I32 gimme = GIMME_V;
2408 LEAVE_with_name("grep"); /* exit outer scope */
2409 (void)POPMARK; /* pop src */
2410 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2411 (void)POPMARK; /* pop dst */
2412 SP = PL_stack_base + POPMARK; /* pop original mark */
2413 if (gimme == G_SCALAR) {
2414 if (PL_op->op_private & OPpGREP_LEX) {
2415 SV* const sv = sv_newmortal();
2416 sv_setiv(sv, items);
2424 else if (gimme == G_ARRAY)
2431 ENTER_with_name("grep_item"); /* enter inner scope */
2434 src = PL_stack_base[*PL_markstack_ptr];
2435 if (SvPADTMP(src) && !IS_PADGV(src)) {
2436 src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
2440 if (PL_op->op_private & OPpGREP_LEX)
2441 PAD_SVl(PL_op->op_targ) = src;
2445 RETURNOP(cLOGOP->op_other);
2459 if (CxMULTICALL(&cxstack[cxstack_ix]))
2463 cxstack_ix++; /* temporarily protect top context */
2466 if (gimme == G_SCALAR) {
2469 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2470 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2471 && !SvMAGICAL(TOPs)) {
2472 *MARK = SvREFCNT_inc(TOPs);
2477 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2479 *MARK = sv_mortalcopy(sv);
2480 SvREFCNT_dec_NN(sv);
2483 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2484 && !SvMAGICAL(TOPs)) {
2488 *MARK = sv_mortalcopy(TOPs);
2492 *MARK = &PL_sv_undef;
2496 else if (gimme == G_ARRAY) {
2497 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2498 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2499 || SvMAGICAL(*MARK)) {
2500 *MARK = sv_mortalcopy(*MARK);
2501 TAINT_NOT; /* Each item is independent */
2508 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2510 PL_curpm = newpm; /* ... and pop $1 et al */
2513 return cx->blk_sub.retop;
2523 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2526 DIE(aTHX_ "Not a CODE reference");
2527 /* This is overwhelmingly the most common case: */
2528 if (!LIKELY(SvTYPE(sv) == SVt_PVGV && (cv = GvCVu((const GV *)sv)))) {
2529 switch (SvTYPE(sv)) {
2532 if (!(cv = GvCVu((const GV *)sv))) {
2534 cv = sv_2cv(sv, &stash, &gv, 0);
2543 if(isGV_with_GP(sv)) goto we_have_a_glob;
2546 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2548 SP = PL_stack_base + POPMARK;
2556 sv = amagic_deref_call(sv, to_cv_amg);
2557 /* Don't SPAGAIN here. */
2564 DIE(aTHX_ PL_no_usym, "a subroutine");
2565 sym = SvPV_nomg_const(sv, len);
2566 if (PL_op->op_private & HINT_STRICT_REFS)
2567 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2568 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2571 cv = MUTABLE_CV(SvRV(sv));
2572 if (SvTYPE(cv) == SVt_PVCV)
2577 DIE(aTHX_ "Not a CODE reference");
2578 /* This is the second most common case: */
2580 cv = MUTABLE_CV(sv);
2588 if (UNLIKELY(CvCLONE(cv) && ! CvCLONED(cv)))
2589 DIE(aTHX_ "Closure prototype called");
2590 if (UNLIKELY(!CvROOT(cv) && !CvXSUB(cv))) {
2594 /* anonymous or undef'd function leaves us no recourse */
2595 if (CvANON(cv) || !(gv = CvGV(cv))) {
2597 DIE(aTHX_ "Undefined subroutine &%"HEKf" called",
2598 HEKfARG(CvNAME_HEK(cv)));
2599 DIE(aTHX_ "Undefined subroutine called");
2602 /* autoloaded stub? */
2603 if (cv != GvCV(gv)) {
2606 /* should call AUTOLOAD now? */
2609 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2610 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2616 sub_name = sv_newmortal();
2617 gv_efullname3(sub_name, gv, NULL);
2618 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2626 if (UNLIKELY((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub)
2629 Perl_get_db_sub(aTHX_ &sv, cv);
2631 PL_curcopdb = PL_curcop;
2633 /* check for lsub that handles lvalue subroutines */
2634 cv = GvCV(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVCV));
2635 /* if lsub not found then fall back to DB::sub */
2636 if (!cv) cv = GvCV(PL_DBsub);
2638 cv = GvCV(PL_DBsub);
2641 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2642 DIE(aTHX_ "No DB::sub routine defined");
2647 if (!(CvISXSUB(cv))) {
2648 /* This path taken at least 75% of the time */
2650 PADLIST * const padlist = CvPADLIST(cv);
2653 PUSHBLOCK(cx, CXt_SUB, MARK);
2655 cx->blk_sub.retop = PL_op->op_next;
2656 if (UNLIKELY((depth = ++CvDEPTH(cv)) >= 2)) {
2657 PERL_STACK_OVERFLOW_CHECK();
2658 pad_push(padlist, depth);
2661 PAD_SET_CUR_NOSAVE(padlist, depth);
2662 if (LIKELY(hasargs)) {
2663 AV *const av = MUTABLE_AV(PAD_SVl(0));
2667 if (UNLIKELY(AvREAL(av))) {
2668 /* @_ is normally not REAL--this should only ever
2669 * happen when DB::sub() calls things that modify @_ */
2674 defavp = &GvAV(PL_defgv);
2675 cx->blk_sub.savearray = *defavp;
2676 *defavp = MUTABLE_AV(SvREFCNT_inc_simple_NN(av));
2677 CX_CURPAD_SAVE(cx->blk_sub);
2678 cx->blk_sub.argarray = av;
2681 if (UNLIKELY(items - 1 > AvMAX(av))) {
2682 SV **ary = AvALLOC(av);
2683 AvMAX(av) = items - 1;
2684 Renew(ary, items, SV*);
2689 Copy(MARK+1,AvARRAY(av),items,SV*);
2690 AvFILLp(av) = items - 1;
2696 if (SvPADTMP(*MARK) && !IS_PADGV(*MARK))
2697 *MARK = sv_mortalcopy(*MARK);
2704 if (UNLIKELY((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2706 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2707 /* warning must come *after* we fully set up the context
2708 * stuff so that __WARN__ handlers can safely dounwind()
2711 if (UNLIKELY(depth == PERL_SUB_DEPTH_WARN
2712 && ckWARN(WARN_RECURSION)
2713 && !(PERLDB_SUB && cv == GvCV(PL_DBsub))))
2714 sub_crush_depth(cv);
2715 RETURNOP(CvSTART(cv));
2718 SSize_t markix = TOPMARK;
2723 if (UNLIKELY(((PL_op->op_private
2724 & PUSHSUB_GET_LVALUE_MASK(Perl_is_lvalue_sub)
2725 ) & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2727 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2729 if (UNLIKELY(!hasargs && GvAV(PL_defgv))) {
2730 /* Need to copy @_ to stack. Alternative may be to
2731 * switch stack to @_, and copy return values
2732 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2733 AV * const av = GvAV(PL_defgv);
2734 const SSize_t items = AvFILL(av) + 1;
2738 const bool m = cBOOL(SvRMAGICAL(av));
2739 /* Mark is at the end of the stack. */
2741 for (; i < items; ++i)
2745 SV ** const svp = av_fetch(av, i, 0);
2746 sv = svp ? *svp : NULL;
2748 else sv = AvARRAY(av)[i];
2749 if (sv) SP[i+1] = sv;
2751 SP[i+1] = newSVavdefelem(av, i, 1);
2759 SV **mark = PL_stack_base + markix;
2760 SSize_t items = SP - mark;
2763 if (*mark && SvPADTMP(*mark) && !IS_PADGV(*mark))
2764 *mark = sv_mortalcopy(*mark);
2767 /* We assume first XSUB in &DB::sub is the called one. */
2768 if (UNLIKELY(PL_curcopdb)) {
2769 SAVEVPTR(PL_curcop);
2770 PL_curcop = PL_curcopdb;
2773 /* Do we need to open block here? XXXX */
2775 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2777 CvXSUB(cv)(aTHX_ cv);
2779 /* Enforce some sanity in scalar context. */
2780 if (gimme == G_SCALAR) {
2781 SV **svp = PL_stack_base + markix + 1;
2782 if (svp != PL_stack_sp) {
2783 *svp = svp > PL_stack_sp ? &PL_sv_undef : *PL_stack_sp;
2793 Perl_sub_crush_depth(pTHX_ CV *cv)
2795 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2798 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2800 HEK *const hek = CvNAME_HEK(cv);
2803 tmpstr = sv_2mortal(newSVhek(hek));
2806 tmpstr = sv_newmortal();
2807 gv_efullname3(tmpstr, CvGV(cv), NULL);
2809 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2818 SV* const elemsv = POPs;
2819 IV elem = SvIV(elemsv);
2820 AV *const av = MUTABLE_AV(POPs);
2821 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2822 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2823 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2824 bool preeminent = TRUE;
2827 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2828 Perl_warner(aTHX_ packWARN(WARN_MISC),
2829 "Use of reference \"%"SVf"\" as array index",
2831 if (SvTYPE(av) != SVt_PVAV)
2838 /* If we can determine whether the element exist,
2839 * Try to preserve the existenceness of a tied array
2840 * element by using EXISTS and DELETE if possible.
2841 * Fallback to FETCH and STORE otherwise. */
2842 if (SvCANEXISTDELETE(av))
2843 preeminent = av_exists(av, elem);
2846 svp = av_fetch(av, elem, lval && !defer);
2848 #ifdef PERL_MALLOC_WRAP
2849 if (SvUOK(elemsv)) {
2850 const UV uv = SvUV(elemsv);
2851 elem = uv > IV_MAX ? IV_MAX : uv;
2853 else if (SvNOK(elemsv))
2854 elem = (IV)SvNV(elemsv);
2856 static const char oom_array_extend[] =
2857 "Out of memory during array extend"; /* Duplicated in av.c */
2858 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2861 if (!svp || !*svp) {
2864 DIE(aTHX_ PL_no_aelem, elem);
2865 len = av_tindex(av);
2866 mPUSHs(newSVavdefelem(av,
2867 /* Resolve a negative index now, unless it points before the
2868 beginning of the array, in which case record it for error
2869 reporting in magic_setdefelem. */
2870 elem < 0 && len + elem >= 0 ? len + elem : elem,
2876 save_aelem(av, elem, svp);
2878 SAVEADELETE(av, elem);
2880 else if (PL_op->op_private & OPpDEREF) {
2881 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2885 sv = (svp ? *svp : &PL_sv_undef);
2886 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2893 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2895 PERL_ARGS_ASSERT_VIVIFY_REF;
2900 Perl_croak_no_modify();
2901 prepare_SV_for_RV(sv);
2904 SvRV_set(sv, newSV(0));
2907 SvRV_set(sv, MUTABLE_SV(newAV()));
2910 SvRV_set(sv, MUTABLE_SV(newHV()));
2917 if (SvGMAGICAL(sv)) {
2918 /* copy the sv without magic to prevent magic from being
2920 SV* msv = sv_newmortal();
2921 sv_setsv_nomg(msv, sv);
2930 SV* const sv = TOPs;
2933 SV* const rsv = SvRV(sv);
2934 if (SvTYPE(rsv) == SVt_PVCV) {
2940 SETs(method_common(sv, NULL));
2947 SV* const sv = cSVOP_sv;
2948 U32 hash = SvSHARED_HASH(sv);
2950 XPUSHs(method_common(sv, &hash));
2955 S_method_common(pTHX_ SV* meth, U32* hashp)
2962 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2963 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2964 "package or object reference", SVfARG(meth)),
2966 : *(PL_stack_base + TOPMARK + 1);
2968 PERL_ARGS_ASSERT_METHOD_COMMON;
2972 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2977 ob = MUTABLE_SV(SvRV(sv));
2978 else if (!SvOK(sv)) goto undefined;
2979 else if (isGV_with_GP(sv)) {
2981 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
2982 "without a package or object reference",
2985 if (SvTYPE(ob) == SVt_PVLV && LvTYPE(ob) == 'y') {
2986 assert(!LvTARGLEN(ob));
2990 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(ob));
2993 /* this isn't a reference */
2996 const char * const packname = SvPV_nomg_const(sv, packlen);
2997 const bool packname_is_utf8 = !!SvUTF8(sv);
2998 const HE* const he =
2999 (const HE *)hv_common(
3000 PL_stashcache, NULL, packname, packlen,
3001 packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0
3005 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3006 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache hit %p for '%"SVf"'\n",
3011 if (!(iogv = gv_fetchpvn_flags(
3012 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
3014 !(ob=MUTABLE_SV(GvIO(iogv))))
3016 /* this isn't the name of a filehandle either */
3019 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3020 "without a package or object reference",
3023 /* assume it's a package name */
3024 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3028 SV* const ref = newSViv(PTR2IV(stash));
3029 (void)hv_store(PL_stashcache, packname,
3030 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3031 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache caching %p for '%"SVf"'\n",
3036 /* it _is_ a filehandle name -- replace with a reference */
3037 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3040 /* if we got here, ob should be an object or a glob */
3041 if (!ob || !(SvOBJECT(ob)
3042 || (isGV_with_GP(ob)
3043 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3046 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3047 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3048 ? newSVpvs_flags("DOES", SVs_TEMP)
3052 stash = SvSTASH(ob);
3055 /* NOTE: stash may be null, hope hv_fetch_ent and
3056 gv_fetchmethod can cope (it seems they can) */
3058 /* shortcut for simple names */
3060 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3062 gv = MUTABLE_GV(HeVAL(he));
3063 if (isGV(gv) && GvCV(gv) &&
3064 (!GvCVGEN(gv) || GvCVGEN(gv)
3065 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3066 return MUTABLE_SV(GvCV(gv));
3070 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3071 meth, GV_AUTOLOAD | GV_CROAK);
3075 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3080 * c-indentation-style: bsd
3082 * indent-tabs-mode: nil
3085 * ex: set ts=8 sts=4 sw=4 et: