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);
96 XPUSHs(MUTABLE_SV(cGVOP_gv));
107 if (PL_op->op_type == OP_AND)
109 RETURNOP(cLOGOP->op_other);
116 /* sassign keeps its args in the optree traditionally backwards.
117 So we pop them differently.
119 SV *left = POPs; SV *right = TOPs;
121 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
122 SV * const temp = left;
123 left = right; right = temp;
125 if (TAINTING_get && TAINT_get && !SvTAINTED(right))
127 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
128 SV * const cv = SvRV(right);
129 const U32 cv_type = SvTYPE(cv);
130 const bool is_gv = isGV_with_GP(left);
131 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
137 /* Can do the optimisation if left (LVALUE) is not a typeglob,
138 right (RVALUE) is a reference to something, and we're in void
140 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
141 /* Is the target symbol table currently empty? */
142 GV * const gv = gv_fetchsv_nomg(left, GV_NOINIT, SVt_PVGV);
143 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
144 /* Good. Create a new proxy constant subroutine in the target.
145 The gv becomes a(nother) reference to the constant. */
146 SV *const value = SvRV(cv);
148 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
149 SvPCS_IMPORTED_on(gv);
151 SvREFCNT_inc_simple_void(value);
157 /* Need to fix things up. */
159 /* Need to fix GV. */
160 left = MUTABLE_SV(gv_fetchsv_nomg(left,GV_ADD, SVt_PVGV));
164 /* We've been returned a constant rather than a full subroutine,
165 but they expect a subroutine reference to apply. */
167 ENTER_with_name("sassign_coderef");
168 SvREFCNT_inc_void(SvRV(cv));
169 /* newCONSTSUB takes a reference count on the passed in SV
170 from us. We set the name to NULL, otherwise we get into
171 all sorts of fun as the reference to our new sub is
172 donated to the GV that we're about to assign to.
174 SvRV_set(right, MUTABLE_SV(newCONSTSUB(GvSTASH(left), NULL,
177 LEAVE_with_name("sassign_coderef");
179 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
181 First: ops for \&{"BONK"}; return us the constant in the
183 Second: ops for *{"BONK"} cause that symbol table entry
184 (and our reference to it) to be upgraded from RV
186 Thirdly: We get here. cv is actually PVGV now, and its
187 GvCV() is actually the subroutine we're looking for
189 So change the reference so that it points to the subroutine
190 of that typeglob, as that's what they were after all along.
192 GV *const upgraded = MUTABLE_GV(cv);
193 CV *const source = GvCV(upgraded);
196 assert(CvFLAGS(source) & CVf_CONST);
198 SvREFCNT_inc_void(source);
199 SvREFCNT_dec(upgraded);
200 SvRV_set(right, MUTABLE_SV(source));
206 SvTEMP(left) && !SvSMAGICAL(left) && SvREFCNT(left) == 1 &&
207 (!isGV_with_GP(left) || SvFAKE(left)) && ckWARN(WARN_MISC)
210 packWARN(WARN_MISC), "Useless assignment to a temporary"
212 SvSetMagicSV(left, right);
222 RETURNOP(cLOGOP->op_other);
224 RETURNOP(cLOGOP->op_next);
231 TAINT_NOT; /* Each statement is presumed innocent */
232 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
234 if (!(PL_op->op_flags & OPf_SPECIAL)) {
235 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
236 LEAVE_SCOPE(oldsave);
243 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
248 const char *rpv = NULL;
250 bool rcopied = FALSE;
252 if (TARG == right && right != left) { /* $r = $l.$r */
253 rpv = SvPV_nomg_const(right, rlen);
254 rbyte = !DO_UTF8(right);
255 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
256 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
260 if (TARG != left) { /* not $l .= $r */
262 const char* const lpv = SvPV_nomg_const(left, llen);
263 lbyte = !DO_UTF8(left);
264 sv_setpvn(TARG, lpv, llen);
270 else { /* $l .= $r */
272 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
273 report_uninit(right);
276 SvPV_force_nomg_nolen(left);
277 lbyte = !DO_UTF8(left);
284 /* $r.$r: do magic twice: tied might return different 2nd time */
286 rpv = SvPV_nomg_const(right, rlen);
287 rbyte = !DO_UTF8(right);
289 if (lbyte != rbyte) {
290 /* sv_utf8_upgrade_nomg() may reallocate the stack */
293 sv_utf8_upgrade_nomg(TARG);
296 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
297 sv_utf8_upgrade_nomg(right);
298 rpv = SvPV_nomg_const(right, rlen);
302 sv_catpvn_nomg(TARG, rpv, rlen);
313 if (PL_op->op_flags & OPf_MOD) {
314 if (PL_op->op_private & OPpLVAL_INTRO)
315 if (!(PL_op->op_private & OPpPAD_STATE))
316 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
317 if (PL_op->op_private & OPpDEREF) {
319 TOPs = vivify_ref(TOPs, PL_op->op_private & OPpDEREF);
332 tryAMAGICunTARGETlist(iter_amg, 0, 0);
333 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
335 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
336 if (!isGV_with_GP(PL_last_in_gv)) {
337 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
338 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
341 XPUSHs(MUTABLE_SV(PL_last_in_gv));
344 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
347 return do_readline();
355 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
359 (SvIOK_notUV(left) && SvIOK_notUV(right))
360 ? (SvIVX(left) == SvIVX(right))
361 : ( do_ncmp(left, right) == 0)
370 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
371 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
372 Perl_croak_no_modify(aTHX);
373 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
374 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
376 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
377 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
379 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
380 if (inc) sv_inc(TOPs);
393 if (PL_op->op_type == OP_OR)
395 RETURNOP(cLOGOP->op_other);
404 const int op_type = PL_op->op_type;
405 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
410 if (!sv || !SvANY(sv)) {
411 if (op_type == OP_DOR)
413 RETURNOP(cLOGOP->op_other);
419 if (!sv || !SvANY(sv))
424 switch (SvTYPE(sv)) {
426 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
430 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
434 if (CvROOT(sv) || CvXSUB(sv))
447 if(op_type == OP_DOR)
449 RETURNOP(cLOGOP->op_other);
451 /* assuming OP_DEFINED */
459 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
460 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
464 useleft = USE_LEFT(svl);
465 #ifdef PERL_PRESERVE_IVUV
466 /* We must see if we can perform the addition with integers if possible,
467 as the integer code detects overflow while the NV code doesn't.
468 If either argument hasn't had a numeric conversion yet attempt to get
469 the IV. It's important to do this now, rather than just assuming that
470 it's not IOK as a PV of "9223372036854775806" may not take well to NV
471 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
472 integer in case the second argument is IV=9223372036854775806
473 We can (now) rely on sv_2iv to do the right thing, only setting the
474 public IOK flag if the value in the NV (or PV) slot is truly integer.
476 A side effect is that this also aggressively prefers integer maths over
477 fp maths for integer values.
479 How to detect overflow?
481 C 99 section 6.2.6.1 says
483 The range of nonnegative values of a signed integer type is a subrange
484 of the corresponding unsigned integer type, and the representation of
485 the same value in each type is the same. A computation involving
486 unsigned operands can never overflow, because a result that cannot be
487 represented by the resulting unsigned integer type is reduced modulo
488 the number that is one greater than the largest value that can be
489 represented by the resulting type.
493 which I read as "unsigned ints wrap."
495 signed integer overflow seems to be classed as "exception condition"
497 If an exceptional condition occurs during the evaluation of an
498 expression (that is, if the result is not mathematically defined or not
499 in the range of representable values for its type), the behavior is
502 (6.5, the 5th paragraph)
504 I had assumed that on 2s complement machines signed arithmetic would
505 wrap, hence coded pp_add and pp_subtract on the assumption that
506 everything perl builds on would be happy. After much wailing and
507 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
508 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
509 unsigned code below is actually shorter than the old code. :-)
512 if (SvIV_please_nomg(svr)) {
513 /* Unless the left argument is integer in range we are going to have to
514 use NV maths. Hence only attempt to coerce the right argument if
515 we know the left is integer. */
523 /* left operand is undef, treat as zero. + 0 is identity,
524 Could SETi or SETu right now, but space optimise by not adding
525 lots of code to speed up what is probably a rarish case. */
527 /* Left operand is defined, so is it IV? */
528 if (SvIV_please_nomg(svl)) {
529 if ((auvok = SvUOK(svl)))
532 const IV aiv = SvIVX(svl);
535 auvok = 1; /* Now acting as a sign flag. */
536 } else { /* 2s complement assumption for IV_MIN */
544 bool result_good = 0;
547 bool buvok = SvUOK(svr);
552 const IV biv = SvIVX(svr);
559 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
560 else "IV" now, independent of how it came in.
561 if a, b represents positive, A, B negative, a maps to -A etc
566 all UV maths. negate result if A negative.
567 add if signs same, subtract if signs differ. */
573 /* Must get smaller */
579 /* result really should be -(auv-buv). as its negation
580 of true value, need to swap our result flag */
597 if (result <= (UV)IV_MIN)
600 /* result valid, but out of range for IV. */
605 } /* Overflow, drop through to NVs. */
610 NV value = SvNV_nomg(svr);
613 /* left operand is undef, treat as zero. + 0.0 is identity. */
617 SETn( value + SvNV_nomg(svl) );
625 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
626 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
627 const U32 lval = PL_op->op_flags & OPf_MOD;
628 SV** const svp = av_fetch(av, PL_op->op_private, lval);
629 SV *sv = (svp ? *svp : &PL_sv_undef);
631 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
639 dVAR; dSP; dMARK; dTARGET;
641 do_join(TARG, *MARK, MARK, SP);
652 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
653 * will be enough to hold an OP*.
655 SV* const sv = sv_newmortal();
656 sv_upgrade(sv, SVt_PVLV);
658 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
661 XPUSHs(MUTABLE_SV(PL_op));
666 /* Oversized hot code. */
670 dVAR; dSP; dMARK; dORIGMARK;
674 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
678 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
681 if (MARK == ORIGMARK) {
682 /* If using default handle then we need to make space to
683 * pass object as 1st arg, so move other args up ...
687 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
690 return Perl_tied_method(aTHX_ "PRINT", mark - 1, MUTABLE_SV(io),
692 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
693 | (PL_op->op_type == OP_SAY
694 ? TIED_METHOD_SAY : 0)), sp - mark);
697 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
698 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
701 SETERRNO(EBADF,RMS_IFI);
704 else if (!(fp = IoOFP(io))) {
706 report_wrongway_fh(gv, '<');
709 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
713 SV * const ofs = GvSV(PL_ofsgv); /* $, */
715 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
717 if (!do_print(*MARK, fp))
721 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
722 if (!do_print(GvSV(PL_ofsgv), fp)) {
731 if (!do_print(*MARK, fp))
739 if (PL_op->op_type == OP_SAY) {
740 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
743 else if (PL_ors_sv && SvOK(PL_ors_sv))
744 if (!do_print(PL_ors_sv, fp)) /* $\ */
747 if (IoFLAGS(io) & IOf_FLUSH)
748 if (PerlIO_flush(fp) == EOF)
758 XPUSHs(&PL_sv_undef);
765 const I32 gimme = GIMME_V;
766 static const char an_array[] = "an ARRAY";
767 static const char a_hash[] = "a HASH";
768 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
769 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
774 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
777 if (SvTYPE(sv) != type)
778 /* diag_listed_as: Not an ARRAY reference */
779 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
780 else if (PL_op->op_flags & OPf_MOD
781 && PL_op->op_private & OPpLVAL_INTRO)
782 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
784 else if (SvTYPE(sv) != type) {
787 if (!isGV_with_GP(sv)) {
788 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
796 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
797 if (PL_op->op_private & OPpLVAL_INTRO)
798 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
800 if (PL_op->op_flags & OPf_REF) {
804 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
805 const I32 flags = is_lvalue_sub();
806 if (flags && !(flags & OPpENTERSUB_INARGS)) {
807 if (gimme != G_ARRAY)
808 goto croak_cant_return;
815 AV *const av = MUTABLE_AV(sv);
816 /* The guts of pp_rv2av, with no intending change to preserve history
817 (until such time as we get tools that can do blame annotation across
818 whitespace changes. */
819 if (gimme == G_ARRAY) {
820 const I32 maxarg = AvFILL(av) + 1;
821 (void)POPs; /* XXXX May be optimized away? */
823 if (SvRMAGICAL(av)) {
825 for (i=0; i < (U32)maxarg; i++) {
826 SV ** const svp = av_fetch(av, i, FALSE);
827 /* See note in pp_helem, and bug id #27839 */
829 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
834 Copy(AvARRAY(av), SP+1, maxarg, SV*);
838 else if (gimme == G_SCALAR) {
840 const I32 maxarg = AvFILL(av) + 1;
844 /* The guts of pp_rv2hv */
845 if (gimme == G_ARRAY) { /* array wanted */
847 return Perl_do_kv(aTHX);
849 else if ((PL_op->op_private & OPpTRUEBOOL
850 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
851 && block_gimme() == G_VOID ))
852 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
853 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
854 else if (gimme == G_SCALAR) {
856 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
864 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
865 is_pp_rv2av ? "array" : "hash");
870 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
874 PERL_ARGS_ASSERT_DO_ODDBALL;
880 if (ckWARN(WARN_MISC)) {
882 if (relem == firstrelem &&
884 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
885 SvTYPE(SvRV(*relem)) == SVt_PVHV))
887 err = "Reference found where even-sized list expected";
890 err = "Odd number of elements in hash assignment";
891 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
895 didstore = hv_store_ent(hash,*relem,tmpstr,0);
896 if (SvMAGICAL(hash)) {
897 if (SvSMAGICAL(tmpstr))
909 SV **lastlelem = PL_stack_sp;
910 SV **lastrelem = PL_stack_base + POPMARK;
911 SV **firstrelem = PL_stack_base + POPMARK + 1;
912 SV **firstlelem = lastrelem + 1;
925 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
927 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
930 /* If there's a common identifier on both sides we have to take
931 * special care that assigning the identifier on the left doesn't
932 * clobber a value on the right that's used later in the list.
933 * Don't bother if LHS is just an empty hash or array.
936 if ( (PL_op->op_private & OPpASSIGN_COMMON)
938 firstlelem != lastlelem
939 || ! ((sv = *firstlelem))
941 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
942 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
943 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
946 EXTEND_MORTAL(lastrelem - firstrelem + 1);
947 for (relem = firstrelem; relem <= lastrelem; relem++) {
949 TAINT_NOT; /* Each item is independent */
951 /* Dear TODO test in t/op/sort.t, I love you.
952 (It's relying on a panic, not a "semi-panic" from newSVsv()
953 and then an assertion failure below.) */
954 if (SvIS_FREED(sv)) {
955 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
958 /* Not newSVsv(), as it does not allow copy-on-write,
959 resulting in wasteful copies. We need a second copy of
960 a temp here, hence the SV_NOSTEAL. */
961 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
972 while (lelem <= lastlelem) {
973 TAINT_NOT; /* Each item stands on its own, taintwise. */
975 switch (SvTYPE(sv)) {
977 ary = MUTABLE_AV(sv);
978 magic = SvMAGICAL(ary) != 0;
980 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
982 av_extend(ary, lastrelem - relem);
984 while (relem <= lastrelem) { /* gobble up all the rest */
987 SvGETMAGIC(*relem); /* before newSV, in case it dies */
989 sv_setsv_nomg(sv, *relem);
991 didstore = av_store(ary,i++,sv);
1000 if (PL_delaymagic & DM_ARRAY_ISA)
1001 SvSETMAGIC(MUTABLE_SV(ary));
1004 case SVt_PVHV: { /* normal hash */
1006 SV** topelem = relem;
1008 hash = MUTABLE_HV(sv);
1009 magic = SvMAGICAL(hash) != 0;
1011 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1013 firsthashrelem = relem;
1015 while (relem < lastrelem) { /* gobble up all the rest */
1017 sv = *relem ? *relem : &PL_sv_no;
1019 tmpstr = sv_newmortal();
1021 sv_setsv(tmpstr,*relem); /* value */
1023 if (gimme != G_VOID) {
1024 if (hv_exists_ent(hash, sv, 0))
1025 /* key overwrites an existing entry */
1028 if (gimme == G_ARRAY) {
1029 /* copy element back: possibly to an earlier
1030 * stack location if we encountered dups earlier */
1032 *topelem++ = tmpstr;
1035 didstore = hv_store_ent(hash,sv,tmpstr,0);
1036 if (didstore) SvREFCNT_inc_simple_void_NN(tmpstr);
1038 if (SvSMAGICAL(tmpstr))
1043 if (relem == lastrelem) {
1044 do_oddball(hash, relem, firstrelem);
1051 if (SvIMMORTAL(sv)) {
1052 if (relem <= lastrelem)
1056 if (relem <= lastrelem) {
1058 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1059 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1062 packWARN(WARN_MISC),
1063 "Useless assignment to a temporary"
1065 sv_setsv(sv, *relem);
1069 sv_setsv(sv, &PL_sv_undef);
1074 if (PL_delaymagic & ~DM_DELAY) {
1075 /* Will be used to set PL_tainting below */
1076 UV tmp_uid = PerlProc_getuid();
1077 UV tmp_euid = PerlProc_geteuid();
1078 UV tmp_gid = PerlProc_getgid();
1079 UV tmp_egid = PerlProc_getegid();
1081 if (PL_delaymagic & DM_UID) {
1082 #ifdef HAS_SETRESUID
1083 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1084 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1087 # ifdef HAS_SETREUID
1088 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1089 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1092 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1093 (void)setruid(PL_delaymagic_uid);
1094 PL_delaymagic &= ~DM_RUID;
1096 # endif /* HAS_SETRUID */
1098 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1099 (void)seteuid(PL_delaymagic_euid);
1100 PL_delaymagic &= ~DM_EUID;
1102 # endif /* HAS_SETEUID */
1103 if (PL_delaymagic & DM_UID) {
1104 if (PL_delaymagic_uid != PL_delaymagic_euid)
1105 DIE(aTHX_ "No setreuid available");
1106 (void)PerlProc_setuid(PL_delaymagic_uid);
1108 # endif /* HAS_SETREUID */
1109 #endif /* HAS_SETRESUID */
1110 tmp_uid = PerlProc_getuid();
1111 tmp_euid = PerlProc_geteuid();
1113 if (PL_delaymagic & DM_GID) {
1114 #ifdef HAS_SETRESGID
1115 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1116 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1119 # ifdef HAS_SETREGID
1120 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1121 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1124 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1125 (void)setrgid(PL_delaymagic_gid);
1126 PL_delaymagic &= ~DM_RGID;
1128 # endif /* HAS_SETRGID */
1130 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1131 (void)setegid(PL_delaymagic_egid);
1132 PL_delaymagic &= ~DM_EGID;
1134 # endif /* HAS_SETEGID */
1135 if (PL_delaymagic & DM_GID) {
1136 if (PL_delaymagic_gid != PL_delaymagic_egid)
1137 DIE(aTHX_ "No setregid available");
1138 (void)PerlProc_setgid(PL_delaymagic_gid);
1140 # endif /* HAS_SETREGID */
1141 #endif /* HAS_SETRESGID */
1142 tmp_gid = PerlProc_getgid();
1143 tmp_egid = PerlProc_getegid();
1145 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1149 if (gimme == G_VOID)
1150 SP = firstrelem - 1;
1151 else if (gimme == G_SCALAR) {
1154 SETi(lastrelem - firstrelem + 1 - duplicates);
1161 /* at this point we have removed the duplicate key/value
1162 * pairs from the stack, but the remaining values may be
1163 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1164 * the (a 2), but the stack now probably contains
1165 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1166 * obliterates the earlier key. So refresh all values. */
1167 lastrelem -= duplicates;
1168 relem = firsthashrelem;
1169 while (relem < lastrelem) {
1172 he = hv_fetch_ent(hash, sv, 0, 0);
1173 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1179 SP = firstrelem + (lastlelem - firstlelem);
1180 lelem = firstlelem + (relem - firstrelem);
1182 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1191 PMOP * const pm = cPMOP;
1192 REGEXP * rx = PM_GETRE(pm);
1193 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1194 SV * const rv = sv_newmortal();
1198 SvUPGRADE(rv, SVt_IV);
1199 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1200 loathe to use it here, but it seems to be the right fix. Or close.
1201 The key part appears to be that it's essential for pp_qr to return a new
1202 object (SV), which implies that there needs to be an effective way to
1203 generate a new SV from the existing SV that is pre-compiled in the
1205 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1208 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1209 if ((cv = *cvp) && CvCLONE(*cvp)) {
1210 *cvp = cv_clone(cv);
1215 HV *const stash = gv_stashsv(pkg, GV_ADD);
1217 (void)sv_bless(rv, stash);
1220 if (RX_ISTAINTED(rx)) {
1222 SvTAINTED_on(SvRV(rv));
1237 U8 r_flags = REXEC_CHECKED;
1238 const char *truebase; /* Start of string */
1239 REGEXP *rx = PM_GETRE(pm);
1241 const I32 gimme = GIMME;
1244 const I32 oldsave = PL_savestack_ix;
1245 I32 update_minmatch = 1;
1246 I32 had_zerolen = 0;
1249 if (PL_op->op_flags & OPf_STACKED)
1251 else if (PL_op->op_private & OPpTARGET_MY)
1258 PUTBACK; /* EVAL blocks need stack_sp. */
1259 /* Skip get-magic if this is a qr// clone, because regcomp has
1261 s = ReANY(rx)->mother_re
1262 ? SvPV_nomg_const(TARG, len)
1263 : SvPV_const(TARG, len);
1265 DIE(aTHX_ "panic: pp_match");
1267 rxtainted = (RX_ISTAINTED(rx) ||
1268 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1271 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1273 /* PMdf_USED is set after a ?? matches once */
1276 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1278 pm->op_pmflags & PMf_USED
1281 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1284 if (gimme == G_ARRAY)
1291 /* empty pattern special-cased to use last successful pattern if
1292 possible, except for qr// */
1293 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1299 if (RX_MINLEN(rx) > (I32)len) {
1300 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1306 /* XXXX What part of this is needed with true \G-support? */
1307 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1308 RX_OFFS(rx)[0].start = -1;
1309 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1310 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1311 if (mg && mg->mg_len >= 0) {
1312 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1313 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1314 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1315 r_flags |= REXEC_IGNOREPOS;
1316 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1317 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1320 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1321 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1322 update_minmatch = 0;
1328 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1330 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1331 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1332 * only on the first iteration. Therefore we need to copy $' as well
1333 * as $&, to make the rest of the string available for captures in
1334 * subsequent iterations */
1335 if (! (global && gimme == G_ARRAY))
1336 r_flags |= REXEC_COPY_SKIP_POST;
1340 if (global && RX_OFFS(rx)[0].start != -1) {
1341 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1342 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1343 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1346 if (update_minmatch++)
1347 minmatch = had_zerolen;
1349 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1350 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1351 /* FIXME - can PL_bostr be made const char *? */
1352 PL_bostr = (char *)truebase;
1353 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1357 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1359 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1360 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1363 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1364 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1368 if (dynpm->op_pmflags & PMf_ONCE) {
1370 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1372 dynpm->op_pmflags |= PMf_USED;
1378 RX_MATCH_TAINTED_on(rx);
1379 TAINT_IF(RX_MATCH_TAINTED(rx));
1380 if (gimme == G_ARRAY) {
1381 const I32 nparens = RX_NPARENS(rx);
1382 I32 i = (global && !nparens) ? 1 : 0;
1384 SPAGAIN; /* EVAL blocks could move the stack. */
1385 EXTEND(SP, nparens + i);
1386 EXTEND_MORTAL(nparens + i);
1387 for (i = !i; i <= nparens; i++) {
1388 PUSHs(sv_newmortal());
1389 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1390 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1391 s = RX_OFFS(rx)[i].start + truebase;
1392 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1393 len < 0 || len > strend - s)
1394 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1395 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1396 (long) i, (long) RX_OFFS(rx)[i].start,
1397 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1398 sv_setpvn(*SP, s, len);
1399 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1404 if (dynpm->op_pmflags & PMf_CONTINUE) {
1406 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1407 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1409 #ifdef PERL_OLD_COPY_ON_WRITE
1411 sv_force_normal_flags(TARG, 0);
1413 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1414 &PL_vtbl_mglob, NULL, 0);
1416 if (RX_OFFS(rx)[0].start != -1) {
1417 mg->mg_len = RX_OFFS(rx)[0].end;
1418 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1419 mg->mg_flags |= MGf_MINMATCH;
1421 mg->mg_flags &= ~MGf_MINMATCH;
1424 had_zerolen = (RX_OFFS(rx)[0].start != -1
1425 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1426 == (UV)RX_OFFS(rx)[0].end));
1427 PUTBACK; /* EVAL blocks may use stack */
1428 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1433 LEAVE_SCOPE(oldsave);
1439 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1440 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1444 #ifdef PERL_OLD_COPY_ON_WRITE
1446 sv_force_normal_flags(TARG, 0);
1448 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1449 &PL_vtbl_mglob, NULL, 0);
1451 if (RX_OFFS(rx)[0].start != -1) {
1452 mg->mg_len = RX_OFFS(rx)[0].end;
1453 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1454 mg->mg_flags |= MGf_MINMATCH;
1456 mg->mg_flags &= ~MGf_MINMATCH;
1459 LEAVE_SCOPE(oldsave);
1463 yup: /* Confirmed by INTUIT */
1465 RX_MATCH_TAINTED_on(rx);
1466 TAINT_IF(RX_MATCH_TAINTED(rx));
1468 if (dynpm->op_pmflags & PMf_ONCE) {
1470 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1472 dynpm->op_pmflags |= PMf_USED;
1475 if (RX_MATCH_COPIED(rx))
1476 Safefree(RX_SUBBEG(rx));
1477 RX_MATCH_COPIED_off(rx);
1478 RX_SUBBEG(rx) = NULL;
1480 /* FIXME - should rx->subbeg be const char *? */
1481 RX_SUBBEG(rx) = (char *) truebase;
1482 RX_SUBOFFSET(rx) = 0;
1483 RX_SUBCOFFSET(rx) = 0;
1484 RX_OFFS(rx)[0].start = s - truebase;
1485 if (RX_MATCH_UTF8(rx)) {
1486 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1487 RX_OFFS(rx)[0].end = t - truebase;
1490 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1492 RX_SUBLEN(rx) = strend - truebase;
1495 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1497 #ifdef PERL_OLD_COPY_ON_WRITE
1498 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1500 PerlIO_printf(Perl_debug_log,
1501 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1502 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1505 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1507 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1508 assert (SvPOKp(RX_SAVED_COPY(rx)));
1513 RX_SUBBEG(rx) = savepvn(t, strend - t);
1514 #ifdef PERL_OLD_COPY_ON_WRITE
1515 RX_SAVED_COPY(rx) = NULL;
1518 RX_SUBLEN(rx) = strend - t;
1519 RX_SUBOFFSET(rx) = 0;
1520 RX_SUBCOFFSET(rx) = 0;
1521 RX_MATCH_COPIED_on(rx);
1522 off = RX_OFFS(rx)[0].start = s - t;
1523 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1525 else { /* startp/endp are used by @- @+. */
1526 RX_OFFS(rx)[0].start = s - truebase;
1527 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1529 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1530 assert(!RX_NPARENS(rx));
1531 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1532 LEAVE_SCOPE(oldsave);
1537 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1538 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1539 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1544 LEAVE_SCOPE(oldsave);
1545 if (gimme == G_ARRAY)
1551 Perl_do_readline(pTHX)
1553 dVAR; dSP; dTARGETSTACKED;
1558 IO * const io = GvIO(PL_last_in_gv);
1559 const I32 type = PL_op->op_type;
1560 const I32 gimme = GIMME_V;
1563 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1565 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1566 if (gimme == G_SCALAR) {
1568 SvSetSV_nosteal(TARG, TOPs);
1578 if (IoFLAGS(io) & IOf_ARGV) {
1579 if (IoFLAGS(io) & IOf_START) {
1581 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1582 IoFLAGS(io) &= ~IOf_START;
1583 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1584 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1585 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1586 SvSETMAGIC(GvSV(PL_last_in_gv));
1591 fp = nextargv(PL_last_in_gv);
1592 if (!fp) { /* Note: fp != IoIFP(io) */
1593 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1596 else if (type == OP_GLOB)
1597 fp = Perl_start_glob(aTHX_ POPs, io);
1599 else if (type == OP_GLOB)
1601 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1602 report_wrongway_fh(PL_last_in_gv, '>');
1606 if ((!io || !(IoFLAGS(io) & IOf_START))
1607 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1609 if (type == OP_GLOB)
1610 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1611 "glob failed (can't start child: %s)",
1614 report_evil_fh(PL_last_in_gv);
1616 if (gimme == G_SCALAR) {
1617 /* undef TARG, and push that undefined value */
1618 if (type != OP_RCATLINE) {
1619 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1627 if (gimme == G_SCALAR) {
1629 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1632 if (type == OP_RCATLINE)
1633 SvPV_force_nomg_nolen(sv);
1637 else if (isGV_with_GP(sv)) {
1638 SvPV_force_nomg_nolen(sv);
1640 SvUPGRADE(sv, SVt_PV);
1641 tmplen = SvLEN(sv); /* remember if already alloced */
1642 if (!tmplen && !SvREADONLY(sv)) {
1643 /* try short-buffering it. Please update t/op/readline.t
1644 * if you change the growth length.
1649 if (type == OP_RCATLINE && SvOK(sv)) {
1651 SvPV_force_nomg_nolen(sv);
1657 sv = sv_2mortal(newSV(80));
1661 /* This should not be marked tainted if the fp is marked clean */
1662 #define MAYBE_TAINT_LINE(io, sv) \
1663 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1668 /* delay EOF state for a snarfed empty file */
1669 #define SNARF_EOF(gimme,rs,io,sv) \
1670 (gimme != G_SCALAR || SvCUR(sv) \
1671 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1675 if (!sv_gets(sv, fp, offset)
1677 || SNARF_EOF(gimme, PL_rs, io, sv)
1678 || PerlIO_error(fp)))
1680 PerlIO_clearerr(fp);
1681 if (IoFLAGS(io) & IOf_ARGV) {
1682 fp = nextargv(PL_last_in_gv);
1685 (void)do_close(PL_last_in_gv, FALSE);
1687 else if (type == OP_GLOB) {
1688 if (!do_close(PL_last_in_gv, FALSE)) {
1689 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1690 "glob failed (child exited with status %d%s)",
1691 (int)(STATUS_CURRENT >> 8),
1692 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1695 if (gimme == G_SCALAR) {
1696 if (type != OP_RCATLINE) {
1697 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1703 MAYBE_TAINT_LINE(io, sv);
1706 MAYBE_TAINT_LINE(io, sv);
1708 IoFLAGS(io) |= IOf_NOLINE;
1712 if (type == OP_GLOB) {
1715 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1716 char * const tmps = SvEND(sv) - 1;
1717 if (*tmps == *SvPVX_const(PL_rs)) {
1719 SvCUR_set(sv, SvCUR(sv) - 1);
1722 for (t1 = SvPVX_const(sv); *t1; t1++)
1723 if (!isALNUMC(*t1) &&
1724 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1726 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1727 (void)POPs; /* Unmatched wildcard? Chuck it... */
1730 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1731 if (ckWARN(WARN_UTF8)) {
1732 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1733 const STRLEN len = SvCUR(sv) - offset;
1736 if (!is_utf8_string_loc(s, len, &f))
1737 /* Emulate :encoding(utf8) warning in the same case. */
1738 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1739 "utf8 \"\\x%02X\" does not map to Unicode",
1740 f < (U8*)SvEND(sv) ? *f : 0);
1743 if (gimme == G_ARRAY) {
1744 if (SvLEN(sv) - SvCUR(sv) > 20) {
1745 SvPV_shrink_to_cur(sv);
1747 sv = sv_2mortal(newSV(80));
1750 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1751 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1752 const STRLEN new_len
1753 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1754 SvPV_renew(sv, new_len);
1765 SV * const keysv = POPs;
1766 HV * const hv = MUTABLE_HV(POPs);
1767 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1768 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1770 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1771 bool preeminent = TRUE;
1773 if (SvTYPE(hv) != SVt_PVHV)
1780 /* If we can determine whether the element exist,
1781 * Try to preserve the existenceness of a tied hash
1782 * element by using EXISTS and DELETE if possible.
1783 * Fallback to FETCH and STORE otherwise. */
1784 if (SvCANEXISTDELETE(hv))
1785 preeminent = hv_exists_ent(hv, keysv, 0);
1788 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1789 svp = he ? &HeVAL(he) : NULL;
1791 if (!svp || !*svp || *svp == &PL_sv_undef) {
1795 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1797 lv = sv_newmortal();
1798 sv_upgrade(lv, SVt_PVLV);
1800 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1801 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1802 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1808 if (HvNAME_get(hv) && isGV(*svp))
1809 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1810 else if (preeminent)
1811 save_helem_flags(hv, keysv, svp,
1812 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1814 SAVEHDELETE(hv, keysv);
1816 else if (PL_op->op_private & OPpDEREF) {
1817 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1821 sv = (svp && *svp ? *svp : &PL_sv_undef);
1822 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1823 * was to make C<local $tied{foo} = $tied{foo}> possible.
1824 * However, it seems no longer to be needed for that purpose, and
1825 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1826 * would loop endlessly since the pos magic is getting set on the
1827 * mortal copy and lost. However, the copy has the effect of
1828 * triggering the get magic, and losing it altogether made things like
1829 * c<$tied{foo};> in void context no longer do get magic, which some
1830 * code relied on. Also, delayed triggering of magic on @+ and friends
1831 * meant the original regex may be out of scope by now. So as a
1832 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1833 * being called too many times). */
1834 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1846 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1847 bool av_is_stack = FALSE;
1850 cx = &cxstack[cxstack_ix];
1851 if (!CxTYPE_is_LOOP(cx))
1852 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1854 itersvp = CxITERVAR(cx);
1855 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1856 /* string increment */
1857 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1858 SV *end = cx->blk_loop.state_u.lazysv.end;
1859 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1860 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1862 const char *max = SvPV_const(end, maxlen);
1863 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1864 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1865 /* safe to reuse old SV */
1866 sv_setsv(*itersvp, cur);
1870 /* we need a fresh SV every time so that loop body sees a
1871 * completely new SV for closures/references to work as
1874 *itersvp = newSVsv(cur);
1875 SvREFCNT_dec(oldsv);
1877 if (strEQ(SvPVX_const(cur), max))
1878 sv_setiv(cur, 0); /* terminate next time */
1885 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1886 /* integer increment */
1887 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1890 /* don't risk potential race */
1891 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1892 /* safe to reuse old SV */
1893 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur);
1897 /* we need a fresh SV every time so that loop body sees a
1898 * completely new SV for closures/references to work as they
1901 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur);
1902 SvREFCNT_dec(oldsv);
1905 if (cx->blk_loop.state_u.lazyiv.cur == IV_MAX) {
1906 /* Handle end of range at IV_MAX */
1907 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1909 ++cx->blk_loop.state_u.lazyiv.cur;
1915 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1916 av = cx->blk_loop.state_u.ary.ary;
1921 if (PL_op->op_private & OPpITER_REVERSED) {
1922 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1923 ? cx->blk_loop.resetsp + 1 : 0))
1926 if (SvMAGICAL(av) || AvREIFY(av)) {
1927 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1928 sv = svp ? *svp : NULL;
1931 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1935 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1939 if (SvMAGICAL(av) || AvREIFY(av)) {
1940 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1941 sv = svp ? *svp : NULL;
1944 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1948 if (sv && SvIS_FREED(sv)) {
1950 Perl_croak(aTHX_ "Use of freed value in iteration");
1955 SvREFCNT_inc_simple_void_NN(sv);
1959 if (!av_is_stack && sv == &PL_sv_undef) {
1960 SV *lv = newSV_type(SVt_PVLV);
1962 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1963 LvTARG(lv) = SvREFCNT_inc_simple(av);
1964 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1965 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1971 SvREFCNT_dec(oldsv);
1977 A description of how taint works in pattern matching and substitution.
1979 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
1980 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
1982 While the pattern is being assembled/concatenated and then compiled,
1983 PL_tainted will get set (via TAINT_set) if any component of the pattern
1984 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
1985 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
1988 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1989 the pattern is marked as tainted. This means that subsequent usage, such
1990 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
1991 on the new pattern too.
1993 During execution of a pattern, locale-variant ops such as ALNUML set the
1994 local flag RF_tainted. At the end of execution, the engine sets the
1995 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
1998 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
1999 of $1 et al to indicate whether the returned value should be tainted.
2000 It is the responsibility of the caller of the pattern (i.e. pp_match,
2001 pp_subst etc) to set this flag for any other circumstances where $1 needs
2004 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2006 There are three possible sources of taint
2008 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2009 * the replacement string (or expression under /e)
2011 There are four destinations of taint and they are affected by the sources
2012 according to the rules below:
2014 * the return value (not including /r):
2015 tainted by the source string and pattern, but only for the
2016 number-of-iterations case; boolean returns aren't tainted;
2017 * the modified string (or modified copy under /r):
2018 tainted by the source string, pattern, and replacement strings;
2020 tainted by the pattern, and under 'use re "taint"', by the source
2022 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2023 should always be unset before executing subsequent code.
2025 The overall action of pp_subst is:
2027 * at the start, set bits in rxtainted indicating the taint status of
2028 the various sources.
2030 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2031 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2032 pattern has subsequently become tainted via locale ops.
2034 * If control is being passed to pp_substcont to execute a /e block,
2035 save rxtainted in the CXt_SUBST block, for future use by
2038 * Whenever control is being returned to perl code (either by falling
2039 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2040 use the flag bits in rxtainted to make all the appropriate types of
2041 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2042 et al will appear tainted.
2044 pp_match is just a simpler version of the above.
2063 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2064 See "how taint works" above */
2067 REGEXP *rx = PM_GETRE(pm);
2069 int force_on_match = 0;
2070 const I32 oldsave = PL_savestack_ix;
2072 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2073 #ifdef PERL_OLD_COPY_ON_WRITE
2077 /* known replacement string? */
2078 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2082 if (PL_op->op_flags & OPf_STACKED)
2084 else if (PL_op->op_private & OPpTARGET_MY)
2091 SvGETMAGIC(TARG); /* must come before cow check */
2092 #ifdef PERL_OLD_COPY_ON_WRITE
2093 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2094 because they make integers such as 256 "false". */
2095 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2098 sv_force_normal_flags(TARG,0);
2100 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2101 #ifdef PERL_OLD_COPY_ON_WRITE
2104 && (SvREADONLY(TARG)
2105 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2106 || SvTYPE(TARG) > SVt_PVLV)
2107 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2108 Perl_croak_no_modify(aTHX);
2111 s = SvPV_nomg(TARG, len);
2112 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2115 /* only replace once? */
2116 once = !(rpm->op_pmflags & PMf_GLOBAL);
2118 /* See "how taint works" above */
2121 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2122 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2123 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2124 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2125 ? SUBST_TAINT_BOOLRET : 0));
2129 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2133 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2136 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2137 maxiters = 2 * slen + 10; /* We can match twice at each
2138 position, once with zero-length,
2139 second time with non-zero. */
2141 if (!RX_PRELEN(rx) && PL_curpm
2142 && !ReANY(rx)->mother_re) {
2147 r_flags = ( RX_NPARENS(rx)
2149 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2155 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2157 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2161 /* How to do it in subst? */
2162 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2164 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2169 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2170 r_flags | REXEC_CHECKED))
2174 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2175 LEAVE_SCOPE(oldsave);
2181 /* known replacement string? */
2183 /* replacement needing upgrading? */
2184 if (DO_UTF8(TARG) && !doutf8) {
2185 nsv = sv_newmortal();
2188 sv_recode_to_utf8(nsv, PL_encoding);
2190 sv_utf8_upgrade(nsv);
2191 c = SvPV_const(nsv, clen);
2195 c = SvPV_const(dstr, clen);
2196 doutf8 = DO_UTF8(dstr);
2199 if (SvTAINTED(dstr))
2200 rxtainted |= SUBST_TAINT_REPL;
2207 /* can do inplace substitution? */
2209 #ifdef PERL_OLD_COPY_ON_WRITE
2212 && (I32)clen <= RX_MINLENRET(rx)
2213 && (once || !(r_flags & REXEC_COPY_STR))
2214 && !(RX_EXTFLAGS(rx) & (RXf_LOOKBEHIND_SEEN|RXf_MODIFIES_VARS))
2215 && (!doutf8 || SvUTF8(TARG))
2216 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2219 #ifdef PERL_OLD_COPY_ON_WRITE
2220 if (SvIsCOW(TARG)) {
2221 assert (!force_on_match);
2225 if (force_on_match) {
2227 s = SvPV_force_nomg(TARG, len);
2232 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2233 rxtainted |= SUBST_TAINT_PAT;
2234 m = orig + RX_OFFS(rx)[0].start;
2235 d = orig + RX_OFFS(rx)[0].end;
2237 if (m - s > strend - d) { /* faster to shorten from end */
2239 Copy(c, m, clen, char);
2244 Move(d, m, i, char);
2248 SvCUR_set(TARG, m - s);
2250 else if ((i = m - s)) { /* faster from front */
2253 Move(s, d - i, i, char);
2256 Copy(c, m, clen, char);
2261 Copy(c, d, clen, char);
2271 if (iters++ > maxiters)
2272 DIE(aTHX_ "Substitution loop");
2273 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2274 rxtainted |= SUBST_TAINT_PAT;
2275 m = RX_OFFS(rx)[0].start + orig;
2278 Move(s, d, i, char);
2282 Copy(c, d, clen, char);
2285 s = RX_OFFS(rx)[0].end + orig;
2286 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2288 /* don't match same null twice */
2289 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2292 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2293 Move(s, d, i+1, char); /* include the NUL */
2302 if (force_on_match) {
2304 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2305 /* I feel that it should be possible to avoid this mortal copy
2306 given that the code below copies into a new destination.
2307 However, I suspect it isn't worth the complexity of
2308 unravelling the C<goto force_it> for the small number of
2309 cases where it would be viable to drop into the copy code. */
2310 TARG = sv_2mortal(newSVsv(TARG));
2312 s = SvPV_force_nomg(TARG, len);
2315 #ifdef PERL_OLD_COPY_ON_WRITE
2318 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2319 rxtainted |= SUBST_TAINT_PAT;
2321 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2325 /* note that a whole bunch of local vars are saved here for
2326 * use by pp_substcont: here's a list of them in case you're
2327 * searching for places in this sub that uses a particular var:
2328 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2329 * s m strend rx once */
2331 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2333 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2336 if (iters++ > maxiters)
2337 DIE(aTHX_ "Substitution loop");
2338 if (RX_MATCH_TAINTED(rx))
2339 rxtainted |= SUBST_TAINT_PAT;
2340 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2343 assert(RX_SUBOFFSET(rx) == 0);
2344 orig = RX_SUBBEG(rx);
2346 strend = s + (strend - m);
2348 m = RX_OFFS(rx)[0].start + orig;
2349 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2350 s = RX_OFFS(rx)[0].end + orig;
2352 /* replacement already stringified */
2354 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2359 if (!nsv) nsv = sv_newmortal();
2360 sv_copypv(nsv, repl);
2361 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
2362 sv_catsv(dstr, nsv);
2364 else sv_catsv(dstr, repl);
2365 if (SvTAINTED(repl))
2366 rxtainted |= SUBST_TAINT_REPL;
2370 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2371 TARG, NULL, r_flags));
2372 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2374 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2375 /* From here on down we're using the copy, and leaving the original
2381 #ifdef PERL_OLD_COPY_ON_WRITE
2382 /* The match may make the string COW. If so, brilliant, because
2383 that's just saved us one malloc, copy and free - the regexp has
2384 donated the old buffer, and we malloc an entirely new one, rather
2385 than the regexp malloc()ing a buffer and copying our original,
2386 only for us to throw it away here during the substitution. */
2387 if (SvIsCOW(TARG)) {
2388 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2394 SvPV_set(TARG, SvPVX(dstr));
2395 SvCUR_set(TARG, SvCUR(dstr));
2396 SvLEN_set(TARG, SvLEN(dstr));
2397 SvFLAGS(TARG) |= SvUTF8(dstr);
2398 SvPV_set(dstr, NULL);
2405 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2406 (void)SvPOK_only_UTF8(TARG);
2409 /* See "how taint works" above */
2411 if ((rxtainted & SUBST_TAINT_PAT) ||
2412 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2413 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2415 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2417 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2418 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2420 SvTAINTED_on(TOPs); /* taint return value */
2422 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2424 /* needed for mg_set below */
2426 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2430 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2432 LEAVE_SCOPE(oldsave);
2441 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2442 ++*PL_markstack_ptr;
2444 LEAVE_with_name("grep_item"); /* exit inner scope */
2447 if (PL_stack_base + *PL_markstack_ptr > SP) {
2449 const I32 gimme = GIMME_V;
2451 LEAVE_with_name("grep"); /* exit outer scope */
2452 (void)POPMARK; /* pop src */
2453 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2454 (void)POPMARK; /* pop dst */
2455 SP = PL_stack_base + POPMARK; /* pop original mark */
2456 if (gimme == G_SCALAR) {
2457 if (PL_op->op_private & OPpGREP_LEX) {
2458 SV* const sv = sv_newmortal();
2459 sv_setiv(sv, items);
2467 else if (gimme == G_ARRAY)
2474 ENTER_with_name("grep_item"); /* enter inner scope */
2477 src = PL_stack_base[*PL_markstack_ptr];
2479 if (PL_op->op_private & OPpGREP_LEX)
2480 PAD_SVl(PL_op->op_targ) = src;
2484 RETURNOP(cLOGOP->op_other);
2498 if (CxMULTICALL(&cxstack[cxstack_ix]))
2502 cxstack_ix++; /* temporarily protect top context */
2505 if (gimme == G_SCALAR) {
2508 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2509 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2510 && !SvMAGICAL(TOPs)) {
2511 *MARK = SvREFCNT_inc(TOPs);
2516 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2518 *MARK = sv_mortalcopy(sv);
2522 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2523 && !SvMAGICAL(TOPs)) {
2527 *MARK = sv_mortalcopy(TOPs);
2531 *MARK = &PL_sv_undef;
2535 else if (gimme == G_ARRAY) {
2536 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2537 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2538 || SvMAGICAL(*MARK)) {
2539 *MARK = sv_mortalcopy(*MARK);
2540 TAINT_NOT; /* Each item is independent */
2548 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2549 PL_curpm = newpm; /* ... and pop $1 et al */
2552 return cx->blk_sub.retop;
2562 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2565 DIE(aTHX_ "Not a CODE reference");
2566 switch (SvTYPE(sv)) {
2567 /* This is overwhelming the most common case: */
2570 if (!(cv = GvCVu((const GV *)sv))) {
2572 cv = sv_2cv(sv, &stash, &gv, 0);
2581 if(isGV_with_GP(sv)) goto we_have_a_glob;
2584 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2586 SP = PL_stack_base + POPMARK;
2594 sv = amagic_deref_call(sv, to_cv_amg);
2595 /* Don't SPAGAIN here. */
2602 DIE(aTHX_ PL_no_usym, "a subroutine");
2603 sym = SvPV_nomg_const(sv, len);
2604 if (PL_op->op_private & HINT_STRICT_REFS)
2605 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2606 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2609 cv = MUTABLE_CV(SvRV(sv));
2610 if (SvTYPE(cv) == SVt_PVCV)
2615 DIE(aTHX_ "Not a CODE reference");
2616 /* This is the second most common case: */
2618 cv = MUTABLE_CV(sv);
2626 if (CvCLONE(cv) && ! CvCLONED(cv))
2627 DIE(aTHX_ "Closure prototype called");
2628 if (!CvROOT(cv) && !CvXSUB(cv)) {
2632 /* anonymous or undef'd function leaves us no recourse */
2633 if (CvANON(cv) || !(gv = CvGV(cv))) {
2635 DIE(aTHX_ "Undefined subroutine &%"HEKf" called",
2636 HEKfARG(CvNAME_HEK(cv)));
2637 DIE(aTHX_ "Undefined subroutine called");
2640 /* autoloaded stub? */
2641 if (cv != GvCV(gv)) {
2644 /* should call AUTOLOAD now? */
2647 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2648 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2654 sub_name = sv_newmortal();
2655 gv_efullname3(sub_name, gv, NULL);
2656 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2665 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2666 Perl_get_db_sub(aTHX_ &sv, cv);
2668 PL_curcopdb = PL_curcop;
2670 /* check for lsub that handles lvalue subroutines */
2671 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2672 /* if lsub not found then fall back to DB::sub */
2673 if (!cv) cv = GvCV(PL_DBsub);
2675 cv = GvCV(PL_DBsub);
2678 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2679 DIE(aTHX_ "No DB::sub routine defined");
2682 if (!(CvISXSUB(cv))) {
2683 /* This path taken at least 75% of the time */
2685 I32 items = SP - MARK;
2686 PADLIST * const padlist = CvPADLIST(cv);
2687 PUSHBLOCK(cx, CXt_SUB, MARK);
2689 cx->blk_sub.retop = PL_op->op_next;
2691 if (CvDEPTH(cv) >= 2) {
2692 PERL_STACK_OVERFLOW_CHECK();
2693 pad_push(padlist, CvDEPTH(cv));
2696 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2698 AV *const av = MUTABLE_AV(PAD_SVl(0));
2700 /* @_ is normally not REAL--this should only ever
2701 * happen when DB::sub() calls things that modify @_ */
2706 cx->blk_sub.savearray = GvAV(PL_defgv);
2707 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2708 CX_CURPAD_SAVE(cx->blk_sub);
2709 cx->blk_sub.argarray = av;
2712 if (items > AvMAX(av) + 1) {
2713 SV **ary = AvALLOC(av);
2714 if (AvARRAY(av) != ary) {
2715 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2718 if (items > AvMAX(av) + 1) {
2719 AvMAX(av) = items - 1;
2720 Renew(ary,items,SV*);
2725 Copy(MARK,AvARRAY(av),items,SV*);
2726 AvFILLp(av) = items - 1;
2734 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2736 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2737 /* warning must come *after* we fully set up the context
2738 * stuff so that __WARN__ handlers can safely dounwind()
2741 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2742 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2743 sub_crush_depth(cv);
2744 RETURNOP(CvSTART(cv));
2747 I32 markix = TOPMARK;
2752 /* Need to copy @_ to stack. Alternative may be to
2753 * switch stack to @_, and copy return values
2754 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2755 AV * const av = GvAV(PL_defgv);
2756 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2759 /* Mark is at the end of the stack. */
2761 Copy(AvARRAY(av), SP + 1, items, SV*);
2766 /* We assume first XSUB in &DB::sub is the called one. */
2768 SAVEVPTR(PL_curcop);
2769 PL_curcop = PL_curcopdb;
2772 /* Do we need to open block here? XXXX */
2774 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2776 CvXSUB(cv)(aTHX_ cv);
2778 /* Enforce some sanity in scalar context. */
2779 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2780 if (markix > PL_stack_sp - PL_stack_base)
2781 *(PL_stack_base + markix) = &PL_sv_undef;
2783 *(PL_stack_base + markix) = *PL_stack_sp;
2784 PL_stack_sp = PL_stack_base + markix;
2792 Perl_sub_crush_depth(pTHX_ CV *cv)
2794 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2797 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2799 SV* const tmpstr = sv_newmortal();
2800 gv_efullname3(tmpstr, CvGV(cv), NULL);
2801 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2810 SV* const elemsv = POPs;
2811 IV elem = SvIV(elemsv);
2812 AV *const av = MUTABLE_AV(POPs);
2813 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2814 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2815 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2816 bool preeminent = TRUE;
2819 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2820 Perl_warner(aTHX_ packWARN(WARN_MISC),
2821 "Use of reference \"%"SVf"\" as array index",
2823 if (SvTYPE(av) != SVt_PVAV)
2830 /* If we can determine whether the element exist,
2831 * Try to preserve the existenceness of a tied array
2832 * element by using EXISTS and DELETE if possible.
2833 * Fallback to FETCH and STORE otherwise. */
2834 if (SvCANEXISTDELETE(av))
2835 preeminent = av_exists(av, elem);
2838 svp = av_fetch(av, elem, lval && !defer);
2840 #ifdef PERL_MALLOC_WRAP
2841 if (SvUOK(elemsv)) {
2842 const UV uv = SvUV(elemsv);
2843 elem = uv > IV_MAX ? IV_MAX : uv;
2845 else if (SvNOK(elemsv))
2846 elem = (IV)SvNV(elemsv);
2848 static const char oom_array_extend[] =
2849 "Out of memory during array extend"; /* Duplicated in av.c */
2850 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2853 if (!svp || *svp == &PL_sv_undef) {
2856 DIE(aTHX_ PL_no_aelem, elem);
2857 lv = sv_newmortal();
2858 sv_upgrade(lv, SVt_PVLV);
2860 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2861 LvTARG(lv) = SvREFCNT_inc_simple(av);
2862 LvTARGOFF(lv) = elem;
2869 save_aelem(av, elem, svp);
2871 SAVEADELETE(av, elem);
2873 else if (PL_op->op_private & OPpDEREF) {
2874 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2878 sv = (svp ? *svp : &PL_sv_undef);
2879 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2886 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2888 PERL_ARGS_ASSERT_VIVIFY_REF;
2893 Perl_croak_no_modify(aTHX);
2894 prepare_SV_for_RV(sv);
2897 SvRV_set(sv, newSV(0));
2900 SvRV_set(sv, MUTABLE_SV(newAV()));
2903 SvRV_set(sv, MUTABLE_SV(newHV()));
2910 if (SvGMAGICAL(sv)) {
2911 /* copy the sv without magic to prevent magic from being
2913 SV* msv = sv_newmortal();
2914 sv_setsv_nomg(msv, sv);
2923 SV* const sv = TOPs;
2926 SV* const rsv = SvRV(sv);
2927 if (SvTYPE(rsv) == SVt_PVCV) {
2933 SETs(method_common(sv, NULL));
2940 SV* const sv = cSVOP_sv;
2941 U32 hash = SvSHARED_HASH(sv);
2943 XPUSHs(method_common(sv, &hash));
2948 S_method_common(pTHX_ SV* meth, U32* hashp)
2955 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2956 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2957 "package or object reference", SVfARG(meth)),
2959 : *(PL_stack_base + TOPMARK + 1);
2961 PERL_ARGS_ASSERT_METHOD_COMMON;
2965 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2970 ob = MUTABLE_SV(SvRV(sv));
2971 else if (!SvOK(sv)) goto undefined;
2973 /* this isn't a reference */
2976 const char * const packname = SvPV_nomg_const(sv, packlen);
2977 const bool packname_is_utf8 = !!SvUTF8(sv);
2978 const HE* const he =
2979 (const HE *)hv_common(
2980 PL_stashcache, NULL, packname, packlen,
2981 packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0
2985 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2986 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache hit %p for '%"SVf"'\n",
2991 if (!(iogv = gv_fetchpvn_flags(
2992 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
2994 !(ob=MUTABLE_SV(GvIO(iogv))))
2996 /* this isn't the name of a filehandle either */
2999 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3000 "without a package or object reference",
3003 /* assume it's a package name */
3004 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3008 SV* const ref = newSViv(PTR2IV(stash));
3009 (void)hv_store(PL_stashcache, packname,
3010 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3011 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache caching %p for '%"SVf"'\n",
3016 /* it _is_ a filehandle name -- replace with a reference */
3017 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3020 /* if we got here, ob should be a reference or a glob */
3021 if (!ob || !(SvOBJECT(ob)
3022 || (SvTYPE(ob) == SVt_PVGV
3024 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3027 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3028 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3029 ? newSVpvs_flags("DOES", SVs_TEMP)
3033 stash = SvSTASH(ob);
3036 /* NOTE: stash may be null, hope hv_fetch_ent and
3037 gv_fetchmethod can cope (it seems they can) */
3039 /* shortcut for simple names */
3041 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3043 gv = MUTABLE_GV(HeVAL(he));
3044 if (isGV(gv) && GvCV(gv) &&
3045 (!GvCVGEN(gv) || GvCVGEN(gv)
3046 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3047 return MUTABLE_SV(GvCV(gv));
3051 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3052 meth, GV_AUTOLOAD | GV_CROAK);
3056 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3061 * c-indentation-style: bsd
3063 * indent-tabs-mode: nil
3066 * ex: set ts=8 sts=4 sw=4 et: