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 (PL_tainting && PL_tainted && !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 lbyte = (SvROK(left) && SvTYPE(SvRV(left)) == SVt_REGEXP)
277 ? !DO_UTF8(SvRV(left)) : !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 register 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 register 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 if (PL_op->op_flags & OPf_REF) {
784 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
785 const I32 flags = is_lvalue_sub();
786 if (flags && !(flags & OPpENTERSUB_INARGS)) {
787 if (gimme != G_ARRAY)
788 goto croak_cant_return;
793 else if (PL_op->op_flags & OPf_MOD
794 && PL_op->op_private & OPpLVAL_INTRO)
795 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
798 if (SvTYPE(sv) == type) {
799 if (PL_op->op_flags & OPf_REF) {
804 if (gimme != G_ARRAY)
805 goto croak_cant_return;
813 if (!isGV_with_GP(sv)) {
814 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
822 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
823 if (PL_op->op_private & OPpLVAL_INTRO)
824 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
825 if (PL_op->op_flags & OPf_REF) {
829 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
830 const I32 flags = is_lvalue_sub();
831 if (flags && !(flags & OPpENTERSUB_INARGS)) {
832 if (gimme != G_ARRAY)
833 goto croak_cant_return;
842 AV *const av = MUTABLE_AV(sv);
843 /* The guts of pp_rv2av, with no intending change to preserve history
844 (until such time as we get tools that can do blame annotation across
845 whitespace changes. */
846 if (gimme == G_ARRAY) {
847 const I32 maxarg = AvFILL(av) + 1;
848 (void)POPs; /* XXXX May be optimized away? */
850 if (SvRMAGICAL(av)) {
852 for (i=0; i < (U32)maxarg; i++) {
853 SV ** const svp = av_fetch(av, i, FALSE);
854 /* See note in pp_helem, and bug id #27839 */
856 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
861 Copy(AvARRAY(av), SP+1, maxarg, SV*);
865 else if (gimme == G_SCALAR) {
867 const I32 maxarg = AvFILL(av) + 1;
871 /* The guts of pp_rv2hv */
872 if (gimme == G_ARRAY) { /* array wanted */
874 return Perl_do_kv(aTHX);
876 else if (gimme == G_SCALAR) {
878 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
886 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
887 is_pp_rv2av ? "array" : "hash");
892 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
896 PERL_ARGS_ASSERT_DO_ODDBALL;
902 if (ckWARN(WARN_MISC)) {
904 if (relem == firstrelem &&
906 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
907 SvTYPE(SvRV(*relem)) == SVt_PVHV))
909 err = "Reference found where even-sized list expected";
912 err = "Odd number of elements in hash assignment";
913 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
917 didstore = hv_store_ent(hash,*relem,tmpstr,0);
918 if (SvMAGICAL(hash)) {
919 if (SvSMAGICAL(tmpstr))
931 SV **lastlelem = PL_stack_sp;
932 SV **lastrelem = PL_stack_base + POPMARK;
933 SV **firstrelem = PL_stack_base + POPMARK + 1;
934 SV **firstlelem = lastrelem + 1;
947 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
949 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
952 /* If there's a common identifier on both sides we have to take
953 * special care that assigning the identifier on the left doesn't
954 * clobber a value on the right that's used later in the list.
955 * Don't bother if LHS is just an empty hash or array.
958 if ( (PL_op->op_private & OPpASSIGN_COMMON)
960 firstlelem != lastlelem
961 || ! ((sv = *firstlelem))
963 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
964 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
965 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
968 EXTEND_MORTAL(lastrelem - firstrelem + 1);
969 for (relem = firstrelem; relem <= lastrelem; relem++) {
971 TAINT_NOT; /* Each item is independent */
973 /* Dear TODO test in t/op/sort.t, I love you.
974 (It's relying on a panic, not a "semi-panic" from newSVsv()
975 and then an assertion failure below.) */
976 if (SvIS_FREED(sv)) {
977 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
980 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
981 and we need a second copy of a temp here. */
982 *relem = sv_2mortal(newSVsv(sv));
992 while (lelem <= lastlelem) {
993 TAINT_NOT; /* Each item stands on its own, taintwise. */
995 switch (SvTYPE(sv)) {
997 ary = MUTABLE_AV(sv);
998 magic = SvMAGICAL(ary) != 0;
1000 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1002 av_extend(ary, lastrelem - relem);
1004 while (relem <= lastrelem) { /* gobble up all the rest */
1008 sv_setsv(sv, *relem);
1010 didstore = av_store(ary,i++,sv);
1019 if (PL_delaymagic & DM_ARRAY_ISA)
1020 SvSETMAGIC(MUTABLE_SV(ary));
1023 case SVt_PVHV: { /* normal hash */
1025 SV** topelem = relem;
1027 hash = MUTABLE_HV(sv);
1028 magic = SvMAGICAL(hash) != 0;
1030 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1032 firsthashrelem = relem;
1034 while (relem < lastrelem) { /* gobble up all the rest */
1036 sv = *relem ? *relem : &PL_sv_no;
1040 sv_setsv(tmpstr,*relem); /* value */
1042 if (gimme != G_VOID) {
1043 if (hv_exists_ent(hash, sv, 0))
1044 /* key overwrites an existing entry */
1047 if (gimme == G_ARRAY) {
1048 /* copy element back: possibly to an earlier
1049 * stack location if we encountered dups earlier */
1051 *topelem++ = tmpstr;
1054 didstore = hv_store_ent(hash,sv,tmpstr,0);
1056 if (SvSMAGICAL(tmpstr))
1063 if (relem == lastrelem) {
1064 do_oddball(hash, relem, firstrelem);
1071 if (SvIMMORTAL(sv)) {
1072 if (relem <= lastrelem)
1076 if (relem <= lastrelem) {
1078 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1079 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1082 packWARN(WARN_MISC),
1083 "Useless assignment to a temporary"
1085 sv_setsv(sv, *relem);
1089 sv_setsv(sv, &PL_sv_undef);
1094 if (PL_delaymagic & ~DM_DELAY) {
1095 /* Will be used to set PL_tainting below */
1096 UV tmp_uid = PerlProc_getuid();
1097 UV tmp_euid = PerlProc_geteuid();
1098 UV tmp_gid = PerlProc_getgid();
1099 UV tmp_egid = PerlProc_getegid();
1101 if (PL_delaymagic & DM_UID) {
1102 #ifdef HAS_SETRESUID
1103 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1104 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1107 # ifdef HAS_SETREUID
1108 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1109 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1112 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1113 (void)setruid(PL_delaymagic_uid);
1114 PL_delaymagic &= ~DM_RUID;
1116 # endif /* HAS_SETRUID */
1118 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1119 (void)seteuid(PL_delaymagic_euid);
1120 PL_delaymagic &= ~DM_EUID;
1122 # endif /* HAS_SETEUID */
1123 if (PL_delaymagic & DM_UID) {
1124 if (PL_delaymagic_uid != PL_delaymagic_euid)
1125 DIE(aTHX_ "No setreuid available");
1126 (void)PerlProc_setuid(PL_delaymagic_uid);
1128 # endif /* HAS_SETREUID */
1129 #endif /* HAS_SETRESUID */
1130 tmp_uid = PerlProc_getuid();
1131 tmp_euid = PerlProc_geteuid();
1133 if (PL_delaymagic & DM_GID) {
1134 #ifdef HAS_SETRESGID
1135 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1136 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1139 # ifdef HAS_SETREGID
1140 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1141 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1144 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1145 (void)setrgid(PL_delaymagic_gid);
1146 PL_delaymagic &= ~DM_RGID;
1148 # endif /* HAS_SETRGID */
1150 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1151 (void)setegid(PL_delaymagic_egid);
1152 PL_delaymagic &= ~DM_EGID;
1154 # endif /* HAS_SETEGID */
1155 if (PL_delaymagic & DM_GID) {
1156 if (PL_delaymagic_gid != PL_delaymagic_egid)
1157 DIE(aTHX_ "No setregid available");
1158 (void)PerlProc_setgid(PL_delaymagic_gid);
1160 # endif /* HAS_SETREGID */
1161 #endif /* HAS_SETRESGID */
1162 tmp_gid = PerlProc_getgid();
1163 tmp_egid = PerlProc_getegid();
1165 PL_tainting |= (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid));
1169 if (gimme == G_VOID)
1170 SP = firstrelem - 1;
1171 else if (gimme == G_SCALAR) {
1174 SETi(lastrelem - firstrelem + 1 - duplicates);
1181 /* at this point we have removed the duplicate key/value
1182 * pairs from the stack, but the remaining values may be
1183 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1184 * the (a 2), but the stack now probably contains
1185 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1186 * obliterates the earlier key. So refresh all values. */
1187 lastrelem -= duplicates;
1188 relem = firsthashrelem;
1189 while (relem < lastrelem) {
1192 he = hv_fetch_ent(hash, sv, 0, 0);
1193 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1199 SP = firstrelem + (lastlelem - firstlelem);
1200 lelem = firstlelem + (relem - firstrelem);
1202 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1211 register PMOP * const pm = cPMOP;
1212 REGEXP * rx = PM_GETRE(pm);
1213 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1214 SV * const rv = sv_newmortal();
1218 SvUPGRADE(rv, SVt_IV);
1219 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1220 loathe to use it here, but it seems to be the right fix. Or close.
1221 The key part appears to be that it's essential for pp_qr to return a new
1222 object (SV), which implies that there needs to be an effective way to
1223 generate a new SV from the existing SV that is pre-compiled in the
1225 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1228 cvp = &( ((struct regexp*)SvANY(SvRV(rv)))->qr_anoncv);
1229 if ((cv = *cvp) && CvCLONE(*cvp)) {
1230 *cvp = cv_clone(cv);
1235 HV *const stash = gv_stashsv(pkg, GV_ADD);
1237 (void)sv_bless(rv, stash);
1240 if (RX_EXTFLAGS(rx) & RXf_TAINTED) {
1242 SvTAINTED_on(SvRV(rv));
1251 register PMOP *pm = cPMOP;
1253 register const char *t;
1254 register const char *s;
1257 U8 r_flags = REXEC_CHECKED;
1258 const char *truebase; /* Start of string */
1259 register REGEXP *rx = PM_GETRE(pm);
1261 const I32 gimme = GIMME;
1264 const I32 oldsave = PL_savestack_ix;
1265 I32 update_minmatch = 1;
1266 I32 had_zerolen = 0;
1269 if (PL_op->op_flags & OPf_STACKED)
1271 else if (PL_op->op_private & OPpTARGET_MY)
1278 PUTBACK; /* EVAL blocks need stack_sp. */
1279 /* Skip get-magic if this is a qr// clone, because regcomp has
1281 s = ((struct regexp *)SvANY(rx))->mother_re
1282 ? SvPV_nomg_const(TARG, len)
1283 : SvPV_const(TARG, len);
1285 DIE(aTHX_ "panic: pp_match");
1287 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1288 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1291 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1293 /* PMdf_USED is set after a ?? matches once */
1296 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1298 pm->op_pmflags & PMf_USED
1301 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1304 if (gimme == G_ARRAY)
1311 /* empty pattern special-cased to use last successful pattern if possible */
1312 if (!RX_PRELEN(rx) && PL_curpm) {
1317 if (RX_MINLEN(rx) > (I32)len) {
1318 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1324 /* XXXX What part of this is needed with true \G-support? */
1325 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1326 RX_OFFS(rx)[0].start = -1;
1327 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1328 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1329 if (mg && mg->mg_len >= 0) {
1330 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1331 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1332 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1333 r_flags |= REXEC_IGNOREPOS;
1334 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1335 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1338 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1339 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1340 update_minmatch = 0;
1344 /* XXX: comment out !global get safe $1 vars after a
1345 match, BUT be aware that this leads to dramatic slowdowns on
1346 /g matches against large strings. So far a solution to this problem
1347 appears to be quite tricky.
1348 Test for the unsafe vars are TODO for now. */
1349 if ( (!global && RX_NPARENS(rx))
1350 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1351 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1352 r_flags |= REXEC_COPY_STR;
1355 if (global && RX_OFFS(rx)[0].start != -1) {
1356 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1357 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1358 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1361 if (update_minmatch++)
1362 minmatch = had_zerolen;
1364 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1365 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1366 /* FIXME - can PL_bostr be made const char *? */
1367 PL_bostr = (char *)truebase;
1368 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1372 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1374 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1375 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1378 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1379 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1383 if (dynpm->op_pmflags & PMf_ONCE) {
1385 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1387 dynpm->op_pmflags |= PMf_USED;
1393 RX_MATCH_TAINTED_on(rx);
1394 TAINT_IF(RX_MATCH_TAINTED(rx));
1395 if (gimme == G_ARRAY) {
1396 const I32 nparens = RX_NPARENS(rx);
1397 I32 i = (global && !nparens) ? 1 : 0;
1399 SPAGAIN; /* EVAL blocks could move the stack. */
1400 EXTEND(SP, nparens + i);
1401 EXTEND_MORTAL(nparens + i);
1402 for (i = !i; i <= nparens; i++) {
1403 PUSHs(sv_newmortal());
1404 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1405 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1406 s = RX_OFFS(rx)[i].start + truebase;
1407 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1408 len < 0 || len > strend - s)
1409 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1410 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1411 (long) i, (long) RX_OFFS(rx)[i].start,
1412 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1413 sv_setpvn(*SP, s, len);
1414 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1419 if (dynpm->op_pmflags & PMf_CONTINUE) {
1421 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1422 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1424 #ifdef PERL_OLD_COPY_ON_WRITE
1426 sv_force_normal_flags(TARG, 0);
1428 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1429 &PL_vtbl_mglob, NULL, 0);
1431 if (RX_OFFS(rx)[0].start != -1) {
1432 mg->mg_len = RX_OFFS(rx)[0].end;
1433 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1434 mg->mg_flags |= MGf_MINMATCH;
1436 mg->mg_flags &= ~MGf_MINMATCH;
1439 had_zerolen = (RX_OFFS(rx)[0].start != -1
1440 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1441 == (UV)RX_OFFS(rx)[0].end));
1442 PUTBACK; /* EVAL blocks may use stack */
1443 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1448 LEAVE_SCOPE(oldsave);
1454 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1455 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1459 #ifdef PERL_OLD_COPY_ON_WRITE
1461 sv_force_normal_flags(TARG, 0);
1463 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1464 &PL_vtbl_mglob, NULL, 0);
1466 if (RX_OFFS(rx)[0].start != -1) {
1467 mg->mg_len = RX_OFFS(rx)[0].end;
1468 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1469 mg->mg_flags |= MGf_MINMATCH;
1471 mg->mg_flags &= ~MGf_MINMATCH;
1474 LEAVE_SCOPE(oldsave);
1478 yup: /* Confirmed by INTUIT */
1480 RX_MATCH_TAINTED_on(rx);
1481 TAINT_IF(RX_MATCH_TAINTED(rx));
1483 if (dynpm->op_pmflags & PMf_ONCE) {
1485 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1487 dynpm->op_pmflags |= PMf_USED;
1490 if (RX_MATCH_COPIED(rx))
1491 Safefree(RX_SUBBEG(rx));
1492 RX_MATCH_COPIED_off(rx);
1493 RX_SUBBEG(rx) = NULL;
1495 /* FIXME - should rx->subbeg be const char *? */
1496 RX_SUBBEG(rx) = (char *) truebase;
1497 RX_OFFS(rx)[0].start = s - truebase;
1498 if (RX_MATCH_UTF8(rx)) {
1499 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1500 RX_OFFS(rx)[0].end = t - truebase;
1503 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1505 RX_SUBLEN(rx) = strend - truebase;
1508 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1510 #ifdef PERL_OLD_COPY_ON_WRITE
1511 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1513 PerlIO_printf(Perl_debug_log,
1514 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1515 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1518 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1520 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1521 assert (SvPOKp(RX_SAVED_COPY(rx)));
1526 RX_SUBBEG(rx) = savepvn(t, strend - t);
1527 #ifdef PERL_OLD_COPY_ON_WRITE
1528 RX_SAVED_COPY(rx) = NULL;
1531 RX_SUBLEN(rx) = strend - t;
1532 RX_MATCH_COPIED_on(rx);
1533 off = RX_OFFS(rx)[0].start = s - t;
1534 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1536 else { /* startp/endp are used by @- @+. */
1537 RX_OFFS(rx)[0].start = s - truebase;
1538 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1540 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1541 assert(!RX_NPARENS(rx));
1542 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1543 LEAVE_SCOPE(oldsave);
1548 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1549 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1550 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1555 LEAVE_SCOPE(oldsave);
1556 if (gimme == G_ARRAY)
1562 Perl_do_readline(pTHX)
1564 dVAR; dSP; dTARGETSTACKED;
1569 register IO * const io = GvIO(PL_last_in_gv);
1570 register const I32 type = PL_op->op_type;
1571 const I32 gimme = GIMME_V;
1574 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1576 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1577 if (gimme == G_SCALAR) {
1579 SvSetSV_nosteal(TARG, TOPs);
1589 if (IoFLAGS(io) & IOf_ARGV) {
1590 if (IoFLAGS(io) & IOf_START) {
1592 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1593 IoFLAGS(io) &= ~IOf_START;
1594 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1595 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1596 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1597 SvSETMAGIC(GvSV(PL_last_in_gv));
1602 fp = nextargv(PL_last_in_gv);
1603 if (!fp) { /* Note: fp != IoIFP(io) */
1604 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1607 else if (type == OP_GLOB)
1608 fp = Perl_start_glob(aTHX_ POPs, io);
1610 else if (type == OP_GLOB)
1612 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1613 report_wrongway_fh(PL_last_in_gv, '>');
1617 if ((!io || !(IoFLAGS(io) & IOf_START))
1618 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1620 if (type == OP_GLOB)
1621 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1622 "glob failed (can't start child: %s)",
1625 report_evil_fh(PL_last_in_gv);
1627 if (gimme == G_SCALAR) {
1628 /* undef TARG, and push that undefined value */
1629 if (type != OP_RCATLINE) {
1630 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1638 if (gimme == G_SCALAR) {
1640 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1643 if (type == OP_RCATLINE)
1644 SvPV_force_nomg_nolen(sv);
1648 else if (isGV_with_GP(sv)) {
1649 SvPV_force_nomg_nolen(sv);
1651 SvUPGRADE(sv, SVt_PV);
1652 tmplen = SvLEN(sv); /* remember if already alloced */
1653 if (!tmplen && !SvREADONLY(sv)) {
1654 /* try short-buffering it. Please update t/op/readline.t
1655 * if you change the growth length.
1660 if (type == OP_RCATLINE && SvOK(sv)) {
1662 SvPV_force_nomg_nolen(sv);
1668 sv = sv_2mortal(newSV(80));
1672 /* This should not be marked tainted if the fp is marked clean */
1673 #define MAYBE_TAINT_LINE(io, sv) \
1674 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1679 /* delay EOF state for a snarfed empty file */
1680 #define SNARF_EOF(gimme,rs,io,sv) \
1681 (gimme != G_SCALAR || SvCUR(sv) \
1682 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1686 if (!sv_gets(sv, fp, offset)
1688 || SNARF_EOF(gimme, PL_rs, io, sv)
1689 || PerlIO_error(fp)))
1691 PerlIO_clearerr(fp);
1692 if (IoFLAGS(io) & IOf_ARGV) {
1693 fp = nextargv(PL_last_in_gv);
1696 (void)do_close(PL_last_in_gv, FALSE);
1698 else if (type == OP_GLOB) {
1699 if (!do_close(PL_last_in_gv, FALSE)) {
1700 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1701 "glob failed (child exited with status %d%s)",
1702 (int)(STATUS_CURRENT >> 8),
1703 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1706 if (gimme == G_SCALAR) {
1707 if (type != OP_RCATLINE) {
1708 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1714 MAYBE_TAINT_LINE(io, sv);
1717 MAYBE_TAINT_LINE(io, sv);
1719 IoFLAGS(io) |= IOf_NOLINE;
1723 if (type == OP_GLOB) {
1726 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1727 char * const tmps = SvEND(sv) - 1;
1728 if (*tmps == *SvPVX_const(PL_rs)) {
1730 SvCUR_set(sv, SvCUR(sv) - 1);
1733 for (t1 = SvPVX_const(sv); *t1; t1++)
1734 if (!isALNUMC(*t1) &&
1735 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1737 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1738 (void)POPs; /* Unmatched wildcard? Chuck it... */
1741 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1742 if (ckWARN(WARN_UTF8)) {
1743 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1744 const STRLEN len = SvCUR(sv) - offset;
1747 if (!is_utf8_string_loc(s, len, &f))
1748 /* Emulate :encoding(utf8) warning in the same case. */
1749 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1750 "utf8 \"\\x%02X\" does not map to Unicode",
1751 f < (U8*)SvEND(sv) ? *f : 0);
1754 if (gimme == G_ARRAY) {
1755 if (SvLEN(sv) - SvCUR(sv) > 20) {
1756 SvPV_shrink_to_cur(sv);
1758 sv = sv_2mortal(newSV(80));
1761 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1762 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1763 const STRLEN new_len
1764 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1765 SvPV_renew(sv, new_len);
1776 SV * const keysv = POPs;
1777 HV * const hv = MUTABLE_HV(POPs);
1778 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1779 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1781 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1782 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1783 bool preeminent = TRUE;
1785 if (SvTYPE(hv) != SVt_PVHV)
1792 /* If we can determine whether the element exist,
1793 * Try to preserve the existenceness of a tied hash
1794 * element by using EXISTS and DELETE if possible.
1795 * Fallback to FETCH and STORE otherwise. */
1796 if (SvCANEXISTDELETE(hv))
1797 preeminent = hv_exists_ent(hv, keysv, 0);
1800 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1801 svp = he ? &HeVAL(he) : NULL;
1803 if (!svp || !*svp || *svp == &PL_sv_undef) {
1807 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1809 lv = sv_newmortal();
1810 sv_upgrade(lv, SVt_PVLV);
1812 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1813 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1814 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1820 if (HvNAME_get(hv) && isGV(*svp))
1821 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1822 else if (preeminent)
1823 save_helem_flags(hv, keysv, svp,
1824 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1826 SAVEHDELETE(hv, keysv);
1828 else if (PL_op->op_private & OPpDEREF) {
1829 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1833 sv = (svp && *svp ? *svp : &PL_sv_undef);
1834 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1835 * was to make C<local $tied{foo} = $tied{foo}> possible.
1836 * However, it seems no longer to be needed for that purpose, and
1837 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1838 * would loop endlessly since the pos magic is getting set on the
1839 * mortal copy and lost. However, the copy has the effect of
1840 * triggering the get magic, and losing it altogether made things like
1841 * c<$tied{foo};> in void context no longer do get magic, which some
1842 * code relied on. Also, delayed triggering of magic on @+ and friends
1843 * meant the original regex may be out of scope by now. So as a
1844 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1845 * being called too many times). */
1846 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1855 register PERL_CONTEXT *cx;
1858 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1859 bool av_is_stack = FALSE;
1862 cx = &cxstack[cxstack_ix];
1863 if (!CxTYPE_is_LOOP(cx))
1864 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1866 itersvp = CxITERVAR(cx);
1867 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1868 /* string increment */
1869 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1870 SV *end = cx->blk_loop.state_u.lazysv.end;
1871 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1872 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1874 const char *max = SvPV_const(end, maxlen);
1875 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1876 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1877 /* safe to reuse old SV */
1878 sv_setsv(*itersvp, cur);
1882 /* we need a fresh SV every time so that loop body sees a
1883 * completely new SV for closures/references to work as
1886 *itersvp = newSVsv(cur);
1887 SvREFCNT_dec(oldsv);
1889 if (strEQ(SvPVX_const(cur), max))
1890 sv_setiv(cur, 0); /* terminate next time */
1897 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1898 /* integer increment */
1899 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1902 /* don't risk potential race */
1903 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1904 /* safe to reuse old SV */
1905 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur);
1909 /* we need a fresh SV every time so that loop body sees a
1910 * completely new SV for closures/references to work as they
1913 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur);
1914 SvREFCNT_dec(oldsv);
1917 if (cx->blk_loop.state_u.lazyiv.cur == IV_MAX) {
1918 /* Handle end of range at IV_MAX */
1919 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1921 ++cx->blk_loop.state_u.lazyiv.cur;
1927 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1928 av = cx->blk_loop.state_u.ary.ary;
1933 if (PL_op->op_private & OPpITER_REVERSED) {
1934 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1935 ? cx->blk_loop.resetsp + 1 : 0))
1938 if (SvMAGICAL(av) || AvREIFY(av)) {
1939 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1940 sv = svp ? *svp : NULL;
1943 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1947 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1951 if (SvMAGICAL(av) || AvREIFY(av)) {
1952 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1953 sv = svp ? *svp : NULL;
1956 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1960 if (sv && SvIS_FREED(sv)) {
1962 Perl_croak(aTHX_ "Use of freed value in iteration");
1967 SvREFCNT_inc_simple_void_NN(sv);
1971 if (!av_is_stack && sv == &PL_sv_undef) {
1972 SV *lv = newSV_type(SVt_PVLV);
1974 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1975 LvTARG(lv) = SvREFCNT_inc_simple(av);
1976 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1977 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1983 SvREFCNT_dec(oldsv);
1989 A description of how taint works in pattern matching and substitution.
1991 While the pattern is being assembled/concatenated and then compiled,
1992 PL_tainted will get set if any component of the pattern is tainted, e.g.
1993 /.*$tainted/. At the end of pattern compilation, the RXf_TAINTED flag
1994 is set on the pattern if PL_tainted is set.
1996 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1997 the pattern is marked as tainted. This means that subsequent usage, such
1998 as /x$r/, will set PL_tainted, and thus RXf_TAINTED, on the new pattern too.
2000 During execution of a pattern, locale-variant ops such as ALNUML set the
2001 local flag RF_tainted. At the end of execution, the engine sets the
2002 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
2005 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
2006 of $1 et al to indicate whether the returned value should be tainted.
2007 It is the responsibility of the caller of the pattern (i.e. pp_match,
2008 pp_subst etc) to set this flag for any other circumstances where $1 needs
2011 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2013 There are three possible sources of taint
2015 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2016 * the replacement string (or expression under /e)
2018 There are four destinations of taint and they are affected by the sources
2019 according to the rules below:
2021 * the return value (not including /r):
2022 tainted by the source string and pattern, but only for the
2023 number-of-iterations case; boolean returns aren't tainted;
2024 * the modified string (or modified copy under /r):
2025 tainted by the source string, pattern, and replacement strings;
2027 tainted by the pattern, and under 'use re "taint"', by the source
2029 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2030 should always be unset before executing subsequent code.
2032 The overall action of pp_subst is:
2034 * at the start, set bits in rxtainted indicating the taint status of
2035 the various sources.
2037 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2038 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2039 pattern has subsequently become tainted via locale ops.
2041 * If control is being passed to pp_substcont to execute a /e block,
2042 save rxtainted in the CXt_SUBST block, for future use by
2045 * Whenever control is being returned to perl code (either by falling
2046 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2047 use the flag bits in rxtainted to make all the appropriate types of
2048 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2049 et al will appear tainted.
2051 pp_match is just a simpler version of the above.
2058 register PMOP *pm = cPMOP;
2070 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2071 See "how taint works" above */
2074 register REGEXP *rx = PM_GETRE(pm);
2076 int force_on_match = 0;
2077 const I32 oldsave = PL_savestack_ix;
2079 bool doutf8 = FALSE;
2080 #ifdef PERL_OLD_COPY_ON_WRITE
2084 /* known replacement string? */
2085 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2089 if (PL_op->op_flags & OPf_STACKED)
2091 else if (PL_op->op_private & OPpTARGET_MY)
2098 #ifdef PERL_OLD_COPY_ON_WRITE
2099 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2100 because they make integers such as 256 "false". */
2101 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2104 sv_force_normal_flags(TARG,0);
2106 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2107 #ifdef PERL_OLD_COPY_ON_WRITE
2110 && (SvREADONLY(TARG)
2111 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2112 || SvTYPE(TARG) > SVt_PVLV)
2113 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2114 Perl_croak_no_modify(aTHX);
2118 s = SvPV_mutable(TARG, len);
2119 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2122 /* only replace once? */
2123 once = !(rpm->op_pmflags & PMf_GLOBAL);
2125 /* See "how taint works" above */
2128 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2129 | ((RX_EXTFLAGS(rx) & RXf_TAINTED) ? SUBST_TAINT_PAT : 0)
2130 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2131 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2132 ? SUBST_TAINT_BOOLRET : 0));
2136 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2140 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2143 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2144 maxiters = 2 * slen + 10; /* We can match twice at each
2145 position, once with zero-length,
2146 second time with non-zero. */
2148 if (!RX_PRELEN(rx) && PL_curpm) {
2152 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2153 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2154 ? REXEC_COPY_STR : 0;
2157 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2159 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2163 /* How to do it in subst? */
2164 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2166 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2171 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2172 r_flags | REXEC_CHECKED))
2176 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2177 LEAVE_SCOPE(oldsave);
2181 /* known replacement string? */
2183 if (SvTAINTED(dstr))
2184 rxtainted |= SUBST_TAINT_REPL;
2186 /* Upgrade the source if the replacement is utf8 but the source is not,
2187 * but only if it matched; see
2188 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2190 if (DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2191 char * const orig_pvx = SvPVX(TARG);
2192 const STRLEN new_len = sv_utf8_upgrade_nomg(TARG);
2194 /* If the lengths are the same, the pattern contains only
2195 * invariants, can keep going; otherwise, various internal markers
2196 * could be off, so redo */
2197 if (new_len != len || orig_pvx != SvPVX(TARG)) {
2202 /* replacement needing upgrading? */
2203 if (DO_UTF8(TARG) && !doutf8) {
2204 nsv = sv_newmortal();
2207 sv_recode_to_utf8(nsv, PL_encoding);
2209 sv_utf8_upgrade(nsv);
2210 c = SvPV_const(nsv, clen);
2214 c = SvPV_const(dstr, clen);
2215 doutf8 = DO_UTF8(dstr);
2223 /* can do inplace substitution? */
2225 #ifdef PERL_OLD_COPY_ON_WRITE
2228 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2229 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2230 && (!doutf8 || SvUTF8(TARG))
2231 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2234 #ifdef PERL_OLD_COPY_ON_WRITE
2235 if (SvIsCOW(TARG)) {
2236 assert (!force_on_match);
2240 if (force_on_match) {
2242 s = SvPV_force(TARG, len);
2248 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2249 rxtainted |= SUBST_TAINT_PAT;
2250 m = orig + RX_OFFS(rx)[0].start;
2251 d = orig + RX_OFFS(rx)[0].end;
2253 if (m - s > strend - d) { /* faster to shorten from end */
2255 Copy(c, m, clen, char);
2260 Move(d, m, i, char);
2264 SvCUR_set(TARG, m - s);
2266 else if ((i = m - s)) { /* faster from front */
2269 Move(s, d - i, i, char);
2272 Copy(c, m, clen, char);
2277 Copy(c, d, clen, char);
2287 if (iters++ > maxiters)
2288 DIE(aTHX_ "Substitution loop");
2289 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2290 rxtainted |= SUBST_TAINT_PAT;
2291 m = RX_OFFS(rx)[0].start + orig;
2294 Move(s, d, i, char);
2298 Copy(c, d, clen, char);
2301 s = RX_OFFS(rx)[0].end + orig;
2302 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2304 /* don't match same null twice */
2305 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2308 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2309 Move(s, d, i+1, char); /* include the NUL */
2316 if (force_on_match) {
2318 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2319 /* I feel that it should be possible to avoid this mortal copy
2320 given that the code below copies into a new destination.
2321 However, I suspect it isn't worth the complexity of
2322 unravelling the C<goto force_it> for the small number of
2323 cases where it would be viable to drop into the copy code. */
2324 TARG = sv_2mortal(newSVsv(TARG));
2326 s = SvPV_force(TARG, len);
2329 #ifdef PERL_OLD_COPY_ON_WRITE
2332 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2333 rxtainted |= SUBST_TAINT_PAT;
2334 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2337 register PERL_CONTEXT *cx;
2339 /* note that a whole bunch of local vars are saved here for
2340 * use by pp_substcont: here's a list of them in case you're
2341 * searching for places in this sub that uses a particular var:
2342 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2343 * s m strend rx once */
2345 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2347 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2349 if (iters++ > maxiters)
2350 DIE(aTHX_ "Substitution loop");
2351 if (RX_MATCH_TAINTED(rx))
2352 rxtainted |= SUBST_TAINT_PAT;
2353 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2356 orig = RX_SUBBEG(rx);
2358 strend = s + (strend - m);
2360 m = RX_OFFS(rx)[0].start + orig;
2361 if (doutf8 && !SvUTF8(dstr))
2362 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
2364 sv_catpvn_nomg(dstr, s, m-s);
2365 s = RX_OFFS(rx)[0].end + orig;
2367 sv_catpvn_nomg(dstr, c, clen);
2370 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2371 TARG, NULL, r_flags));
2372 if (doutf8 && !DO_UTF8(TARG))
2373 sv_catpvn_nomg_utf8_upgrade(dstr, s, strend - s, nsv);
2375 sv_catpvn_nomg(dstr, s, strend - s);
2377 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2378 /* From here on down we're using the copy, and leaving the original
2384 #ifdef PERL_OLD_COPY_ON_WRITE
2385 /* The match may make the string COW. If so, brilliant, because
2386 that's just saved us one malloc, copy and free - the regexp has
2387 donated the old buffer, and we malloc an entirely new one, rather
2388 than the regexp malloc()ing a buffer and copying our original,
2389 only for us to throw it away here during the substitution. */
2390 if (SvIsCOW(TARG)) {
2391 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2397 SvPV_set(TARG, SvPVX(dstr));
2398 SvCUR_set(TARG, SvCUR(dstr));
2399 SvLEN_set(TARG, SvLEN(dstr));
2400 doutf8 |= DO_UTF8(dstr);
2401 SvPV_set(dstr, NULL);
2408 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2409 (void)SvPOK_only_UTF8(TARG);
2414 /* See "how taint works" above */
2416 if ((rxtainted & SUBST_TAINT_PAT) ||
2417 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2418 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2420 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2422 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2423 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2425 SvTAINTED_on(TOPs); /* taint return value */
2427 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2429 /* needed for mg_set below */
2431 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
2434 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2436 LEAVE_SCOPE(oldsave);
2445 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2446 ++*PL_markstack_ptr;
2448 LEAVE_with_name("grep_item"); /* exit inner scope */
2451 if (PL_stack_base + *PL_markstack_ptr > SP) {
2453 const I32 gimme = GIMME_V;
2455 LEAVE_with_name("grep"); /* exit outer scope */
2456 (void)POPMARK; /* pop src */
2457 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2458 (void)POPMARK; /* pop dst */
2459 SP = PL_stack_base + POPMARK; /* pop original mark */
2460 if (gimme == G_SCALAR) {
2461 if (PL_op->op_private & OPpGREP_LEX) {
2462 SV* const sv = sv_newmortal();
2463 sv_setiv(sv, items);
2471 else if (gimme == G_ARRAY)
2478 ENTER_with_name("grep_item"); /* enter inner scope */
2481 src = PL_stack_base[*PL_markstack_ptr];
2483 if (PL_op->op_private & OPpGREP_LEX)
2484 PAD_SVl(PL_op->op_targ) = src;
2488 RETURNOP(cLOGOP->op_other);
2499 register PERL_CONTEXT *cx;
2502 if (CxMULTICALL(&cxstack[cxstack_ix]))
2506 cxstack_ix++; /* temporarily protect top context */
2509 if (gimme == G_SCALAR) {
2512 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2513 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2514 && !SvMAGICAL(TOPs)) {
2515 *MARK = SvREFCNT_inc(TOPs);
2520 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2522 *MARK = sv_mortalcopy(sv);
2526 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2527 && !SvMAGICAL(TOPs)) {
2531 *MARK = sv_mortalcopy(TOPs);
2535 *MARK = &PL_sv_undef;
2539 else if (gimme == G_ARRAY) {
2540 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2541 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2542 || SvMAGICAL(*MARK)) {
2543 *MARK = sv_mortalcopy(*MARK);
2544 TAINT_NOT; /* Each item is independent */
2552 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2553 PL_curpm = newpm; /* ... and pop $1 et al */
2556 return cx->blk_sub.retop;
2564 register PERL_CONTEXT *cx;
2566 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2569 DIE(aTHX_ "Not a CODE reference");
2570 switch (SvTYPE(sv)) {
2571 /* This is overwhelming the most common case: */
2574 if (!(cv = GvCVu((const GV *)sv))) {
2576 cv = sv_2cv(sv, &stash, &gv, 0);
2585 if(isGV_with_GP(sv)) goto we_have_a_glob;
2588 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2590 SP = PL_stack_base + POPMARK;
2598 sv = amagic_deref_call(sv, to_cv_amg);
2599 /* Don't SPAGAIN here. */
2606 DIE(aTHX_ PL_no_usym, "a subroutine");
2607 sym = SvPV_nomg_const(sv, len);
2608 if (PL_op->op_private & HINT_STRICT_REFS)
2609 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2610 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2613 cv = MUTABLE_CV(SvRV(sv));
2614 if (SvTYPE(cv) == SVt_PVCV)
2619 DIE(aTHX_ "Not a CODE reference");
2620 /* This is the second most common case: */
2622 cv = MUTABLE_CV(sv);
2630 if (CvCLONE(cv) && ! CvCLONED(cv))
2631 DIE(aTHX_ "Closure prototype called");
2632 if (!CvROOT(cv) && !CvXSUB(cv)) {
2636 /* anonymous or undef'd function leaves us no recourse */
2637 if (CvANON(cv) || !(gv = CvGV(cv)))
2638 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 register I32 items = SP - MARK;
2686 AV* 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;
2964 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2969 ob = MUTABLE_SV(SvRV(sv));
2973 const char * packname = NULL;
2974 bool packname_is_utf8 = FALSE;
2976 /* this isn't a reference */
2977 if(SvOK(sv) && (packname = SvPV_nomg_const(sv, packlen))) {
2978 const HE* const he =
2979 (const HE *)hv_common_key_len(
2980 PL_stashcache, packname,
2981 packlen * -(packname_is_utf8 = !!SvUTF8(sv)), 0, NULL, 0
2985 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2992 !(iogv = gv_fetchpvn_flags(
2993 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
2995 !(ob=MUTABLE_SV(GvIO(iogv))))
2997 /* this isn't the name of a filehandle either */
2999 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3000 ? !isIDFIRST_utf8((U8*)packname)
3001 : !isIDFIRST_L1((U8)*packname)
3004 /* diag_listed_as: Can't call method "%s" without a package or object reference */
3005 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3007 SvOK(sv) ? "without a package or object reference"
3008 : "on an undefined value");
3010 /* assume it's a package name */
3011 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3015 SV* const ref = newSViv(PTR2IV(stash));
3016 (void)hv_store(PL_stashcache, packname,
3017 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3021 /* it _is_ a filehandle name -- replace with a reference */
3022 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3025 /* if we got here, ob should be a reference or a glob */
3026 if (!ob || !(SvOBJECT(ob)
3027 || (SvTYPE(ob) == SVt_PVGV
3029 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3032 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3033 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3034 ? newSVpvs_flags("DOES", SVs_TEMP)
3038 stash = SvSTASH(ob);
3041 /* NOTE: stash may be null, hope hv_fetch_ent and
3042 gv_fetchmethod can cope (it seems they can) */
3044 /* shortcut for simple names */
3046 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3048 gv = MUTABLE_GV(HeVAL(he));
3049 if (isGV(gv) && GvCV(gv) &&
3050 (!GvCVGEN(gv) || GvCVGEN(gv)
3051 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3052 return MUTABLE_SV(GvCV(gv));
3056 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3057 meth, GV_AUTOLOAD | GV_CROAK);
3061 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3066 * c-indentation-style: bsd
3068 * indent-tabs-mode: nil
3071 * ex: set ts=8 sts=4 sw=4 et: