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 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 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 ((PL_op->op_private & OPpTRUEBOOL
877 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
878 && block_gimme() == G_VOID ))
879 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
880 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
881 else if (gimme == G_SCALAR) {
883 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
891 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
892 is_pp_rv2av ? "array" : "hash");
897 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
901 PERL_ARGS_ASSERT_DO_ODDBALL;
907 if (ckWARN(WARN_MISC)) {
909 if (relem == firstrelem &&
911 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
912 SvTYPE(SvRV(*relem)) == SVt_PVHV))
914 err = "Reference found where even-sized list expected";
917 err = "Odd number of elements in hash assignment";
918 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
922 didstore = hv_store_ent(hash,*relem,tmpstr,0);
923 if (SvMAGICAL(hash)) {
924 if (SvSMAGICAL(tmpstr))
936 SV **lastlelem = PL_stack_sp;
937 SV **lastrelem = PL_stack_base + POPMARK;
938 SV **firstrelem = PL_stack_base + POPMARK + 1;
939 SV **firstlelem = lastrelem + 1;
952 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
954 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
957 /* If there's a common identifier on both sides we have to take
958 * special care that assigning the identifier on the left doesn't
959 * clobber a value on the right that's used later in the list.
960 * Don't bother if LHS is just an empty hash or array.
963 if ( (PL_op->op_private & OPpASSIGN_COMMON)
965 firstlelem != lastlelem
966 || ! ((sv = *firstlelem))
968 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
969 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
970 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
973 EXTEND_MORTAL(lastrelem - firstrelem + 1);
974 for (relem = firstrelem; relem <= lastrelem; relem++) {
976 TAINT_NOT; /* Each item is independent */
978 /* Dear TODO test in t/op/sort.t, I love you.
979 (It's relying on a panic, not a "semi-panic" from newSVsv()
980 and then an assertion failure below.) */
981 if (SvIS_FREED(sv)) {
982 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
985 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
986 and we need a second copy of a temp here. */
987 *relem = sv_2mortal(newSVsv(sv));
997 while (lelem <= lastlelem) {
998 TAINT_NOT; /* Each item stands on its own, taintwise. */
1000 switch (SvTYPE(sv)) {
1002 ary = MUTABLE_AV(sv);
1003 magic = SvMAGICAL(ary) != 0;
1005 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1007 av_extend(ary, lastrelem - relem);
1009 while (relem <= lastrelem) { /* gobble up all the rest */
1013 sv_setsv(sv, *relem);
1015 didstore = av_store(ary,i++,sv);
1024 if (PL_delaymagic & DM_ARRAY_ISA)
1025 SvSETMAGIC(MUTABLE_SV(ary));
1028 case SVt_PVHV: { /* normal hash */
1030 SV** topelem = relem;
1032 hash = MUTABLE_HV(sv);
1033 magic = SvMAGICAL(hash) != 0;
1035 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1037 firsthashrelem = relem;
1039 while (relem < lastrelem) { /* gobble up all the rest */
1041 sv = *relem ? *relem : &PL_sv_no;
1045 sv_setsv(tmpstr,*relem); /* value */
1047 if (gimme != G_VOID) {
1048 if (hv_exists_ent(hash, sv, 0))
1049 /* key overwrites an existing entry */
1052 if (gimme == G_ARRAY) {
1053 /* copy element back: possibly to an earlier
1054 * stack location if we encountered dups earlier */
1056 *topelem++ = tmpstr;
1059 didstore = hv_store_ent(hash,sv,tmpstr,0);
1061 if (SvSMAGICAL(tmpstr))
1068 if (relem == lastrelem) {
1069 do_oddball(hash, relem, firstrelem);
1076 if (SvIMMORTAL(sv)) {
1077 if (relem <= lastrelem)
1081 if (relem <= lastrelem) {
1083 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1084 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1087 packWARN(WARN_MISC),
1088 "Useless assignment to a temporary"
1090 sv_setsv(sv, *relem);
1094 sv_setsv(sv, &PL_sv_undef);
1099 if (PL_delaymagic & ~DM_DELAY) {
1100 /* Will be used to set PL_tainting below */
1101 UV tmp_uid = PerlProc_getuid();
1102 UV tmp_euid = PerlProc_geteuid();
1103 UV tmp_gid = PerlProc_getgid();
1104 UV tmp_egid = PerlProc_getegid();
1106 if (PL_delaymagic & DM_UID) {
1107 #ifdef HAS_SETRESUID
1108 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1109 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1112 # ifdef HAS_SETREUID
1113 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1114 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1117 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1118 (void)setruid(PL_delaymagic_uid);
1119 PL_delaymagic &= ~DM_RUID;
1121 # endif /* HAS_SETRUID */
1123 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1124 (void)seteuid(PL_delaymagic_euid);
1125 PL_delaymagic &= ~DM_EUID;
1127 # endif /* HAS_SETEUID */
1128 if (PL_delaymagic & DM_UID) {
1129 if (PL_delaymagic_uid != PL_delaymagic_euid)
1130 DIE(aTHX_ "No setreuid available");
1131 (void)PerlProc_setuid(PL_delaymagic_uid);
1133 # endif /* HAS_SETREUID */
1134 #endif /* HAS_SETRESUID */
1135 tmp_uid = PerlProc_getuid();
1136 tmp_euid = PerlProc_geteuid();
1138 if (PL_delaymagic & DM_GID) {
1139 #ifdef HAS_SETRESGID
1140 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1141 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1144 # ifdef HAS_SETREGID
1145 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1146 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1149 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1150 (void)setrgid(PL_delaymagic_gid);
1151 PL_delaymagic &= ~DM_RGID;
1153 # endif /* HAS_SETRGID */
1155 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1156 (void)setegid(PL_delaymagic_egid);
1157 PL_delaymagic &= ~DM_EGID;
1159 # endif /* HAS_SETEGID */
1160 if (PL_delaymagic & DM_GID) {
1161 if (PL_delaymagic_gid != PL_delaymagic_egid)
1162 DIE(aTHX_ "No setregid available");
1163 (void)PerlProc_setgid(PL_delaymagic_gid);
1165 # endif /* HAS_SETREGID */
1166 #endif /* HAS_SETRESGID */
1167 tmp_gid = PerlProc_getgid();
1168 tmp_egid = PerlProc_getegid();
1170 PL_tainting |= (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid));
1174 if (gimme == G_VOID)
1175 SP = firstrelem - 1;
1176 else if (gimme == G_SCALAR) {
1179 SETi(lastrelem - firstrelem + 1 - duplicates);
1186 /* at this point we have removed the duplicate key/value
1187 * pairs from the stack, but the remaining values may be
1188 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1189 * the (a 2), but the stack now probably contains
1190 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1191 * obliterates the earlier key. So refresh all values. */
1192 lastrelem -= duplicates;
1193 relem = firsthashrelem;
1194 while (relem < lastrelem) {
1197 he = hv_fetch_ent(hash, sv, 0, 0);
1198 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1204 SP = firstrelem + (lastlelem - firstlelem);
1205 lelem = firstlelem + (relem - firstrelem);
1207 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1216 PMOP * const pm = cPMOP;
1217 REGEXP * rx = PM_GETRE(pm);
1218 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1219 SV * const rv = sv_newmortal();
1223 SvUPGRADE(rv, SVt_IV);
1224 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1225 loathe to use it here, but it seems to be the right fix. Or close.
1226 The key part appears to be that it's essential for pp_qr to return a new
1227 object (SV), which implies that there needs to be an effective way to
1228 generate a new SV from the existing SV that is pre-compiled in the
1230 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1233 cvp = &( ((struct regexp*)SvANY(SvRV(rv)))->qr_anoncv);
1234 if ((cv = *cvp) && CvCLONE(*cvp)) {
1235 *cvp = cv_clone(cv);
1240 HV *const stash = gv_stashsv(pkg, GV_ADD);
1242 (void)sv_bless(rv, stash);
1245 if (RX_EXTFLAGS(rx) & RXf_TAINTED) {
1247 SvTAINTED_on(SvRV(rv));
1262 U8 r_flags = REXEC_CHECKED;
1263 const char *truebase; /* Start of string */
1264 REGEXP *rx = PM_GETRE(pm);
1266 const I32 gimme = GIMME;
1269 const I32 oldsave = PL_savestack_ix;
1270 I32 update_minmatch = 1;
1271 I32 had_zerolen = 0;
1274 if (PL_op->op_flags & OPf_STACKED)
1276 else if (PL_op->op_private & OPpTARGET_MY)
1283 PUTBACK; /* EVAL blocks need stack_sp. */
1284 /* Skip get-magic if this is a qr// clone, because regcomp has
1286 s = ((struct regexp *)SvANY(rx))->mother_re
1287 ? SvPV_nomg_const(TARG, len)
1288 : SvPV_const(TARG, len);
1290 DIE(aTHX_ "panic: pp_match");
1292 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1293 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1296 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1298 /* PMdf_USED is set after a ?? matches once */
1301 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1303 pm->op_pmflags & PMf_USED
1306 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1309 if (gimme == G_ARRAY)
1316 /* empty pattern special-cased to use last successful pattern if possible */
1317 if (!RX_PRELEN(rx) && PL_curpm) {
1322 if (RX_MINLEN(rx) > (I32)len) {
1323 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1329 /* XXXX What part of this is needed with true \G-support? */
1330 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1331 RX_OFFS(rx)[0].start = -1;
1332 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1333 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1334 if (mg && mg->mg_len >= 0) {
1335 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1336 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1337 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1338 r_flags |= REXEC_IGNOREPOS;
1339 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1340 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1343 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1344 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1345 update_minmatch = 0;
1349 /* XXX: comment out !global get safe $1 vars after a
1350 match, BUT be aware that this leads to dramatic slowdowns on
1351 /g matches against large strings. So far a solution to this problem
1352 appears to be quite tricky.
1353 Test for the unsafe vars are TODO for now. */
1354 if ( (!global && RX_NPARENS(rx))
1355 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1356 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1357 r_flags |= REXEC_COPY_STR;
1360 if (global && RX_OFFS(rx)[0].start != -1) {
1361 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1362 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1363 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1366 if (update_minmatch++)
1367 minmatch = had_zerolen;
1369 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1370 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1371 /* FIXME - can PL_bostr be made const char *? */
1372 PL_bostr = (char *)truebase;
1373 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1377 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1379 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1380 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1383 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1384 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1388 if (dynpm->op_pmflags & PMf_ONCE) {
1390 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1392 dynpm->op_pmflags |= PMf_USED;
1398 RX_MATCH_TAINTED_on(rx);
1399 TAINT_IF(RX_MATCH_TAINTED(rx));
1400 if (gimme == G_ARRAY) {
1401 const I32 nparens = RX_NPARENS(rx);
1402 I32 i = (global && !nparens) ? 1 : 0;
1404 SPAGAIN; /* EVAL blocks could move the stack. */
1405 EXTEND(SP, nparens + i);
1406 EXTEND_MORTAL(nparens + i);
1407 for (i = !i; i <= nparens; i++) {
1408 PUSHs(sv_newmortal());
1409 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1410 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1411 s = RX_OFFS(rx)[i].start + truebase;
1412 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1413 len < 0 || len > strend - s)
1414 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1415 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1416 (long) i, (long) RX_OFFS(rx)[i].start,
1417 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1418 sv_setpvn(*SP, s, len);
1419 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1424 if (dynpm->op_pmflags & PMf_CONTINUE) {
1426 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1427 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1429 #ifdef PERL_OLD_COPY_ON_WRITE
1431 sv_force_normal_flags(TARG, 0);
1433 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1434 &PL_vtbl_mglob, NULL, 0);
1436 if (RX_OFFS(rx)[0].start != -1) {
1437 mg->mg_len = RX_OFFS(rx)[0].end;
1438 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1439 mg->mg_flags |= MGf_MINMATCH;
1441 mg->mg_flags &= ~MGf_MINMATCH;
1444 had_zerolen = (RX_OFFS(rx)[0].start != -1
1445 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1446 == (UV)RX_OFFS(rx)[0].end));
1447 PUTBACK; /* EVAL blocks may use stack */
1448 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1453 LEAVE_SCOPE(oldsave);
1459 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1460 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1464 #ifdef PERL_OLD_COPY_ON_WRITE
1466 sv_force_normal_flags(TARG, 0);
1468 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1469 &PL_vtbl_mglob, NULL, 0);
1471 if (RX_OFFS(rx)[0].start != -1) {
1472 mg->mg_len = RX_OFFS(rx)[0].end;
1473 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1474 mg->mg_flags |= MGf_MINMATCH;
1476 mg->mg_flags &= ~MGf_MINMATCH;
1479 LEAVE_SCOPE(oldsave);
1483 yup: /* Confirmed by INTUIT */
1485 RX_MATCH_TAINTED_on(rx);
1486 TAINT_IF(RX_MATCH_TAINTED(rx));
1488 if (dynpm->op_pmflags & PMf_ONCE) {
1490 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1492 dynpm->op_pmflags |= PMf_USED;
1495 if (RX_MATCH_COPIED(rx))
1496 Safefree(RX_SUBBEG(rx));
1497 RX_MATCH_COPIED_off(rx);
1498 RX_SUBBEG(rx) = NULL;
1500 /* FIXME - should rx->subbeg be const char *? */
1501 RX_SUBBEG(rx) = (char *) truebase;
1502 RX_OFFS(rx)[0].start = s - truebase;
1503 if (RX_MATCH_UTF8(rx)) {
1504 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1505 RX_OFFS(rx)[0].end = t - truebase;
1508 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1510 RX_SUBLEN(rx) = strend - truebase;
1513 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1515 #ifdef PERL_OLD_COPY_ON_WRITE
1516 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1518 PerlIO_printf(Perl_debug_log,
1519 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1520 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1523 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1525 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1526 assert (SvPOKp(RX_SAVED_COPY(rx)));
1531 RX_SUBBEG(rx) = savepvn(t, strend - t);
1532 #ifdef PERL_OLD_COPY_ON_WRITE
1533 RX_SAVED_COPY(rx) = NULL;
1536 RX_SUBLEN(rx) = strend - t;
1537 RX_MATCH_COPIED_on(rx);
1538 off = RX_OFFS(rx)[0].start = s - t;
1539 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1541 else { /* startp/endp are used by @- @+. */
1542 RX_OFFS(rx)[0].start = s - truebase;
1543 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1545 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1546 assert(!RX_NPARENS(rx));
1547 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1548 LEAVE_SCOPE(oldsave);
1553 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1554 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1555 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1560 LEAVE_SCOPE(oldsave);
1561 if (gimme == G_ARRAY)
1567 Perl_do_readline(pTHX)
1569 dVAR; dSP; dTARGETSTACKED;
1574 IO * const io = GvIO(PL_last_in_gv);
1575 const I32 type = PL_op->op_type;
1576 const I32 gimme = GIMME_V;
1579 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1581 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1582 if (gimme == G_SCALAR) {
1584 SvSetSV_nosteal(TARG, TOPs);
1594 if (IoFLAGS(io) & IOf_ARGV) {
1595 if (IoFLAGS(io) & IOf_START) {
1597 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1598 IoFLAGS(io) &= ~IOf_START;
1599 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1600 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1601 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1602 SvSETMAGIC(GvSV(PL_last_in_gv));
1607 fp = nextargv(PL_last_in_gv);
1608 if (!fp) { /* Note: fp != IoIFP(io) */
1609 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1612 else if (type == OP_GLOB)
1613 fp = Perl_start_glob(aTHX_ POPs, io);
1615 else if (type == OP_GLOB)
1617 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1618 report_wrongway_fh(PL_last_in_gv, '>');
1622 if ((!io || !(IoFLAGS(io) & IOf_START))
1623 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1625 if (type == OP_GLOB)
1626 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1627 "glob failed (can't start child: %s)",
1630 report_evil_fh(PL_last_in_gv);
1632 if (gimme == G_SCALAR) {
1633 /* undef TARG, and push that undefined value */
1634 if (type != OP_RCATLINE) {
1635 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1643 if (gimme == G_SCALAR) {
1645 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1648 if (type == OP_RCATLINE)
1649 SvPV_force_nomg_nolen(sv);
1653 else if (isGV_with_GP(sv)) {
1654 SvPV_force_nomg_nolen(sv);
1656 SvUPGRADE(sv, SVt_PV);
1657 tmplen = SvLEN(sv); /* remember if already alloced */
1658 if (!tmplen && !SvREADONLY(sv)) {
1659 /* try short-buffering it. Please update t/op/readline.t
1660 * if you change the growth length.
1665 if (type == OP_RCATLINE && SvOK(sv)) {
1667 SvPV_force_nomg_nolen(sv);
1673 sv = sv_2mortal(newSV(80));
1677 /* This should not be marked tainted if the fp is marked clean */
1678 #define MAYBE_TAINT_LINE(io, sv) \
1679 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1684 /* delay EOF state for a snarfed empty file */
1685 #define SNARF_EOF(gimme,rs,io,sv) \
1686 (gimme != G_SCALAR || SvCUR(sv) \
1687 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1691 if (!sv_gets(sv, fp, offset)
1693 || SNARF_EOF(gimme, PL_rs, io, sv)
1694 || PerlIO_error(fp)))
1696 PerlIO_clearerr(fp);
1697 if (IoFLAGS(io) & IOf_ARGV) {
1698 fp = nextargv(PL_last_in_gv);
1701 (void)do_close(PL_last_in_gv, FALSE);
1703 else if (type == OP_GLOB) {
1704 if (!do_close(PL_last_in_gv, FALSE)) {
1705 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1706 "glob failed (child exited with status %d%s)",
1707 (int)(STATUS_CURRENT >> 8),
1708 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1711 if (gimme == G_SCALAR) {
1712 if (type != OP_RCATLINE) {
1713 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1719 MAYBE_TAINT_LINE(io, sv);
1722 MAYBE_TAINT_LINE(io, sv);
1724 IoFLAGS(io) |= IOf_NOLINE;
1728 if (type == OP_GLOB) {
1731 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1732 char * const tmps = SvEND(sv) - 1;
1733 if (*tmps == *SvPVX_const(PL_rs)) {
1735 SvCUR_set(sv, SvCUR(sv) - 1);
1738 for (t1 = SvPVX_const(sv); *t1; t1++)
1739 if (!isALNUMC(*t1) &&
1740 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1742 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1743 (void)POPs; /* Unmatched wildcard? Chuck it... */
1746 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1747 if (ckWARN(WARN_UTF8)) {
1748 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1749 const STRLEN len = SvCUR(sv) - offset;
1752 if (!is_utf8_string_loc(s, len, &f))
1753 /* Emulate :encoding(utf8) warning in the same case. */
1754 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1755 "utf8 \"\\x%02X\" does not map to Unicode",
1756 f < (U8*)SvEND(sv) ? *f : 0);
1759 if (gimme == G_ARRAY) {
1760 if (SvLEN(sv) - SvCUR(sv) > 20) {
1761 SvPV_shrink_to_cur(sv);
1763 sv = sv_2mortal(newSV(80));
1766 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1767 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1768 const STRLEN new_len
1769 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1770 SvPV_renew(sv, new_len);
1781 SV * const keysv = POPs;
1782 HV * const hv = MUTABLE_HV(POPs);
1783 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1784 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1786 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1787 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1788 bool preeminent = TRUE;
1790 if (SvTYPE(hv) != SVt_PVHV)
1797 /* If we can determine whether the element exist,
1798 * Try to preserve the existenceness of a tied hash
1799 * element by using EXISTS and DELETE if possible.
1800 * Fallback to FETCH and STORE otherwise. */
1801 if (SvCANEXISTDELETE(hv))
1802 preeminent = hv_exists_ent(hv, keysv, 0);
1805 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1806 svp = he ? &HeVAL(he) : NULL;
1808 if (!svp || !*svp || *svp == &PL_sv_undef) {
1812 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1814 lv = sv_newmortal();
1815 sv_upgrade(lv, SVt_PVLV);
1817 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1818 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1819 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1825 if (HvNAME_get(hv) && isGV(*svp))
1826 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1827 else if (preeminent)
1828 save_helem_flags(hv, keysv, svp,
1829 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1831 SAVEHDELETE(hv, keysv);
1833 else if (PL_op->op_private & OPpDEREF) {
1834 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1838 sv = (svp && *svp ? *svp : &PL_sv_undef);
1839 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1840 * was to make C<local $tied{foo} = $tied{foo}> possible.
1841 * However, it seems no longer to be needed for that purpose, and
1842 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1843 * would loop endlessly since the pos magic is getting set on the
1844 * mortal copy and lost. However, the copy has the effect of
1845 * triggering the get magic, and losing it altogether made things like
1846 * c<$tied{foo};> in void context no longer do get magic, which some
1847 * code relied on. Also, delayed triggering of magic on @+ and friends
1848 * meant the original regex may be out of scope by now. So as a
1849 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1850 * being called too many times). */
1851 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1863 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1864 bool av_is_stack = FALSE;
1867 cx = &cxstack[cxstack_ix];
1868 if (!CxTYPE_is_LOOP(cx))
1869 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1871 itersvp = CxITERVAR(cx);
1872 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1873 /* string increment */
1874 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1875 SV *end = cx->blk_loop.state_u.lazysv.end;
1876 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1877 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1879 const char *max = SvPV_const(end, maxlen);
1880 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1881 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1882 /* safe to reuse old SV */
1883 sv_setsv(*itersvp, cur);
1887 /* we need a fresh SV every time so that loop body sees a
1888 * completely new SV for closures/references to work as
1891 *itersvp = newSVsv(cur);
1892 SvREFCNT_dec(oldsv);
1894 if (strEQ(SvPVX_const(cur), max))
1895 sv_setiv(cur, 0); /* terminate next time */
1902 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1903 /* integer increment */
1904 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1907 /* don't risk potential race */
1908 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1909 /* safe to reuse old SV */
1910 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur);
1914 /* we need a fresh SV every time so that loop body sees a
1915 * completely new SV for closures/references to work as they
1918 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur);
1919 SvREFCNT_dec(oldsv);
1922 if (cx->blk_loop.state_u.lazyiv.cur == IV_MAX) {
1923 /* Handle end of range at IV_MAX */
1924 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1926 ++cx->blk_loop.state_u.lazyiv.cur;
1932 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1933 av = cx->blk_loop.state_u.ary.ary;
1938 if (PL_op->op_private & OPpITER_REVERSED) {
1939 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1940 ? cx->blk_loop.resetsp + 1 : 0))
1943 if (SvMAGICAL(av) || AvREIFY(av)) {
1944 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1945 sv = svp ? *svp : NULL;
1948 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1952 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1956 if (SvMAGICAL(av) || AvREIFY(av)) {
1957 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1958 sv = svp ? *svp : NULL;
1961 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1965 if (sv && SvIS_FREED(sv)) {
1967 Perl_croak(aTHX_ "Use of freed value in iteration");
1972 SvREFCNT_inc_simple_void_NN(sv);
1976 if (!av_is_stack && sv == &PL_sv_undef) {
1977 SV *lv = newSV_type(SVt_PVLV);
1979 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1980 LvTARG(lv) = SvREFCNT_inc_simple(av);
1981 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1982 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1988 SvREFCNT_dec(oldsv);
1994 A description of how taint works in pattern matching and substitution.
1996 While the pattern is being assembled/concatenated and then compiled,
1997 PL_tainted will get set if any component of the pattern is tainted, e.g.
1998 /.*$tainted/. At the end of pattern compilation, the RXf_TAINTED flag
1999 is set on the pattern if PL_tainted is set.
2001 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2002 the pattern is marked as tainted. This means that subsequent usage, such
2003 as /x$r/, will set PL_tainted, and thus RXf_TAINTED, on the new pattern too.
2005 During execution of a pattern, locale-variant ops such as ALNUML set the
2006 local flag RF_tainted. At the end of execution, the engine sets the
2007 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
2010 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
2011 of $1 et al to indicate whether the returned value should be tainted.
2012 It is the responsibility of the caller of the pattern (i.e. pp_match,
2013 pp_subst etc) to set this flag for any other circumstances where $1 needs
2016 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2018 There are three possible sources of taint
2020 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2021 * the replacement string (or expression under /e)
2023 There are four destinations of taint and they are affected by the sources
2024 according to the rules below:
2026 * the return value (not including /r):
2027 tainted by the source string and pattern, but only for the
2028 number-of-iterations case; boolean returns aren't tainted;
2029 * the modified string (or modified copy under /r):
2030 tainted by the source string, pattern, and replacement strings;
2032 tainted by the pattern, and under 'use re "taint"', by the source
2034 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2035 should always be unset before executing subsequent code.
2037 The overall action of pp_subst is:
2039 * at the start, set bits in rxtainted indicating the taint status of
2040 the various sources.
2042 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2043 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2044 pattern has subsequently become tainted via locale ops.
2046 * If control is being passed to pp_substcont to execute a /e block,
2047 save rxtainted in the CXt_SUBST block, for future use by
2050 * Whenever control is being returned to perl code (either by falling
2051 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2052 use the flag bits in rxtainted to make all the appropriate types of
2053 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2054 et al will appear tainted.
2056 pp_match is just a simpler version of the above.
2075 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2076 See "how taint works" above */
2079 REGEXP *rx = PM_GETRE(pm);
2081 int force_on_match = 0;
2082 const I32 oldsave = PL_savestack_ix;
2084 bool doutf8 = FALSE;
2085 #ifdef PERL_OLD_COPY_ON_WRITE
2089 /* known replacement string? */
2090 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2094 if (PL_op->op_flags & OPf_STACKED)
2096 else if (PL_op->op_private & OPpTARGET_MY)
2103 #ifdef PERL_OLD_COPY_ON_WRITE
2104 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2105 because they make integers such as 256 "false". */
2106 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2109 sv_force_normal_flags(TARG,0);
2111 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2112 #ifdef PERL_OLD_COPY_ON_WRITE
2115 && (SvREADONLY(TARG)
2116 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2117 || SvTYPE(TARG) > SVt_PVLV)
2118 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2119 Perl_croak_no_modify(aTHX);
2123 s = SvPV_mutable(TARG, len);
2124 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2127 /* only replace once? */
2128 once = !(rpm->op_pmflags & PMf_GLOBAL);
2130 /* See "how taint works" above */
2133 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2134 | ((RX_EXTFLAGS(rx) & RXf_TAINTED) ? SUBST_TAINT_PAT : 0)
2135 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2136 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2137 ? SUBST_TAINT_BOOLRET : 0));
2141 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2145 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2148 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2149 maxiters = 2 * slen + 10; /* We can match twice at each
2150 position, once with zero-length,
2151 second time with non-zero. */
2153 if (!RX_PRELEN(rx) && PL_curpm) {
2157 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2158 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2159 ? REXEC_COPY_STR : 0;
2162 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2164 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2168 /* How to do it in subst? */
2169 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2171 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2176 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2177 r_flags | REXEC_CHECKED))
2181 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2182 LEAVE_SCOPE(oldsave);
2186 /* known replacement string? */
2188 if (SvTAINTED(dstr))
2189 rxtainted |= SUBST_TAINT_REPL;
2191 /* Upgrade the source if the replacement is utf8 but the source is not,
2192 * but only if it matched; see
2193 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2195 if (DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2196 char * const orig_pvx = SvPVX(TARG);
2197 const STRLEN new_len = sv_utf8_upgrade_nomg(TARG);
2199 /* If the lengths are the same, the pattern contains only
2200 * invariants, can keep going; otherwise, various internal markers
2201 * could be off, so redo */
2202 if (new_len != len || orig_pvx != SvPVX(TARG)) {
2207 /* replacement needing upgrading? */
2208 if (DO_UTF8(TARG) && !doutf8) {
2209 nsv = sv_newmortal();
2212 sv_recode_to_utf8(nsv, PL_encoding);
2214 sv_utf8_upgrade(nsv);
2215 c = SvPV_const(nsv, clen);
2219 c = SvPV_const(dstr, clen);
2220 doutf8 = DO_UTF8(dstr);
2228 /* can do inplace substitution? */
2230 #ifdef PERL_OLD_COPY_ON_WRITE
2233 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2234 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2235 && (!doutf8 || SvUTF8(TARG))
2236 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2239 #ifdef PERL_OLD_COPY_ON_WRITE
2240 if (SvIsCOW(TARG)) {
2241 assert (!force_on_match);
2245 if (force_on_match) {
2247 s = SvPV_force(TARG, len);
2253 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2254 rxtainted |= SUBST_TAINT_PAT;
2255 m = orig + RX_OFFS(rx)[0].start;
2256 d = orig + RX_OFFS(rx)[0].end;
2258 if (m - s > strend - d) { /* faster to shorten from end */
2260 Copy(c, m, clen, char);
2265 Move(d, m, i, char);
2269 SvCUR_set(TARG, m - s);
2271 else if ((i = m - s)) { /* faster from front */
2274 Move(s, d - i, i, char);
2277 Copy(c, m, clen, char);
2282 Copy(c, d, clen, char);
2292 if (iters++ > maxiters)
2293 DIE(aTHX_ "Substitution loop");
2294 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2295 rxtainted |= SUBST_TAINT_PAT;
2296 m = RX_OFFS(rx)[0].start + orig;
2299 Move(s, d, i, char);
2303 Copy(c, d, clen, char);
2306 s = RX_OFFS(rx)[0].end + orig;
2307 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2309 /* don't match same null twice */
2310 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2313 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2314 Move(s, d, i+1, char); /* include the NUL */
2321 if (force_on_match) {
2323 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2324 /* I feel that it should be possible to avoid this mortal copy
2325 given that the code below copies into a new destination.
2326 However, I suspect it isn't worth the complexity of
2327 unravelling the C<goto force_it> for the small number of
2328 cases where it would be viable to drop into the copy code. */
2329 TARG = sv_2mortal(newSVsv(TARG));
2331 s = SvPV_force(TARG, len);
2334 #ifdef PERL_OLD_COPY_ON_WRITE
2337 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2338 rxtainted |= SUBST_TAINT_PAT;
2339 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2344 /* note that a whole bunch of local vars are saved here for
2345 * use by pp_substcont: here's a list of them in case you're
2346 * searching for places in this sub that uses a particular var:
2347 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2348 * s m strend rx once */
2350 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2352 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2354 if (iters++ > maxiters)
2355 DIE(aTHX_ "Substitution loop");
2356 if (RX_MATCH_TAINTED(rx))
2357 rxtainted |= SUBST_TAINT_PAT;
2358 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2361 orig = RX_SUBBEG(rx);
2363 strend = s + (strend - m);
2365 m = RX_OFFS(rx)[0].start + orig;
2366 if (doutf8 && !SvUTF8(dstr))
2367 sv_catpvn_nomg_utf8_upgrade(dstr, s, m - s, nsv);
2369 sv_catpvn_nomg(dstr, s, m-s);
2370 s = RX_OFFS(rx)[0].end + orig;
2372 sv_catpvn_nomg(dstr, c, clen);
2375 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2376 TARG, NULL, r_flags));
2377 if (doutf8 && !DO_UTF8(TARG))
2378 sv_catpvn_nomg_utf8_upgrade(dstr, s, strend - s, nsv);
2380 sv_catpvn_nomg(dstr, s, strend - s);
2382 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2383 /* From here on down we're using the copy, and leaving the original
2389 #ifdef PERL_OLD_COPY_ON_WRITE
2390 /* The match may make the string COW. If so, brilliant, because
2391 that's just saved us one malloc, copy and free - the regexp has
2392 donated the old buffer, and we malloc an entirely new one, rather
2393 than the regexp malloc()ing a buffer and copying our original,
2394 only for us to throw it away here during the substitution. */
2395 if (SvIsCOW(TARG)) {
2396 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2402 SvPV_set(TARG, SvPVX(dstr));
2403 SvCUR_set(TARG, SvCUR(dstr));
2404 SvLEN_set(TARG, SvLEN(dstr));
2405 doutf8 |= DO_UTF8(dstr);
2406 SvPV_set(dstr, NULL);
2413 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2414 (void)SvPOK_only_UTF8(TARG);
2419 /* See "how taint works" above */
2421 if ((rxtainted & SUBST_TAINT_PAT) ||
2422 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2423 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2425 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2427 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2428 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2430 SvTAINTED_on(TOPs); /* taint return value */
2432 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2434 /* needed for mg_set below */
2436 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL));
2439 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2441 LEAVE_SCOPE(oldsave);
2450 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2451 ++*PL_markstack_ptr;
2453 LEAVE_with_name("grep_item"); /* exit inner scope */
2456 if (PL_stack_base + *PL_markstack_ptr > SP) {
2458 const I32 gimme = GIMME_V;
2460 LEAVE_with_name("grep"); /* exit outer scope */
2461 (void)POPMARK; /* pop src */
2462 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2463 (void)POPMARK; /* pop dst */
2464 SP = PL_stack_base + POPMARK; /* pop original mark */
2465 if (gimme == G_SCALAR) {
2466 if (PL_op->op_private & OPpGREP_LEX) {
2467 SV* const sv = sv_newmortal();
2468 sv_setiv(sv, items);
2476 else if (gimme == G_ARRAY)
2483 ENTER_with_name("grep_item"); /* enter inner scope */
2486 src = PL_stack_base[*PL_markstack_ptr];
2488 if (PL_op->op_private & OPpGREP_LEX)
2489 PAD_SVl(PL_op->op_targ) = src;
2493 RETURNOP(cLOGOP->op_other);
2507 if (CxMULTICALL(&cxstack[cxstack_ix]))
2511 cxstack_ix++; /* temporarily protect top context */
2514 if (gimme == G_SCALAR) {
2517 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2518 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2519 && !SvMAGICAL(TOPs)) {
2520 *MARK = SvREFCNT_inc(TOPs);
2525 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2527 *MARK = sv_mortalcopy(sv);
2531 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2532 && !SvMAGICAL(TOPs)) {
2536 *MARK = sv_mortalcopy(TOPs);
2540 *MARK = &PL_sv_undef;
2544 else if (gimme == G_ARRAY) {
2545 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2546 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2547 || SvMAGICAL(*MARK)) {
2548 *MARK = sv_mortalcopy(*MARK);
2549 TAINT_NOT; /* Each item is independent */
2557 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2558 PL_curpm = newpm; /* ... and pop $1 et al */
2561 return cx->blk_sub.retop;
2571 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2574 DIE(aTHX_ "Not a CODE reference");
2575 switch (SvTYPE(sv)) {
2576 /* This is overwhelming the most common case: */
2579 if (!(cv = GvCVu((const GV *)sv))) {
2581 cv = sv_2cv(sv, &stash, &gv, 0);
2590 if(isGV_with_GP(sv)) goto we_have_a_glob;
2593 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2595 SP = PL_stack_base + POPMARK;
2603 sv = amagic_deref_call(sv, to_cv_amg);
2604 /* Don't SPAGAIN here. */
2611 DIE(aTHX_ PL_no_usym, "a subroutine");
2612 sym = SvPV_nomg_const(sv, len);
2613 if (PL_op->op_private & HINT_STRICT_REFS)
2614 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2615 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2618 cv = MUTABLE_CV(SvRV(sv));
2619 if (SvTYPE(cv) == SVt_PVCV)
2624 DIE(aTHX_ "Not a CODE reference");
2625 /* This is the second most common case: */
2627 cv = MUTABLE_CV(sv);
2635 if (CvCLONE(cv) && ! CvCLONED(cv))
2636 DIE(aTHX_ "Closure prototype called");
2637 if (!CvROOT(cv) && !CvXSUB(cv)) {
2641 /* anonymous or undef'd function leaves us no recourse */
2642 if (CvANON(cv) || !(gv = CvGV(cv)))
2643 DIE(aTHX_ "Undefined subroutine called");
2645 /* autoloaded stub? */
2646 if (cv != GvCV(gv)) {
2649 /* should call AUTOLOAD now? */
2652 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2653 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2659 sub_name = sv_newmortal();
2660 gv_efullname3(sub_name, gv, NULL);
2661 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2670 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2671 Perl_get_db_sub(aTHX_ &sv, cv);
2673 PL_curcopdb = PL_curcop;
2675 /* check for lsub that handles lvalue subroutines */
2676 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2677 /* if lsub not found then fall back to DB::sub */
2678 if (!cv) cv = GvCV(PL_DBsub);
2680 cv = GvCV(PL_DBsub);
2683 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2684 DIE(aTHX_ "No DB::sub routine defined");
2687 if (!(CvISXSUB(cv))) {
2688 /* This path taken at least 75% of the time */
2690 I32 items = SP - MARK;
2691 PADLIST * const padlist = CvPADLIST(cv);
2692 PUSHBLOCK(cx, CXt_SUB, MARK);
2694 cx->blk_sub.retop = PL_op->op_next;
2696 if (CvDEPTH(cv) >= 2) {
2697 PERL_STACK_OVERFLOW_CHECK();
2698 pad_push(padlist, CvDEPTH(cv));
2701 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2703 AV *const av = MUTABLE_AV(PAD_SVl(0));
2705 /* @_ is normally not REAL--this should only ever
2706 * happen when DB::sub() calls things that modify @_ */
2711 cx->blk_sub.savearray = GvAV(PL_defgv);
2712 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2713 CX_CURPAD_SAVE(cx->blk_sub);
2714 cx->blk_sub.argarray = av;
2717 if (items > AvMAX(av) + 1) {
2718 SV **ary = AvALLOC(av);
2719 if (AvARRAY(av) != ary) {
2720 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2723 if (items > AvMAX(av) + 1) {
2724 AvMAX(av) = items - 1;
2725 Renew(ary,items,SV*);
2730 Copy(MARK,AvARRAY(av),items,SV*);
2731 AvFILLp(av) = items - 1;
2739 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2741 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2742 /* warning must come *after* we fully set up the context
2743 * stuff so that __WARN__ handlers can safely dounwind()
2746 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2747 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2748 sub_crush_depth(cv);
2749 RETURNOP(CvSTART(cv));
2752 I32 markix = TOPMARK;
2757 /* Need to copy @_ to stack. Alternative may be to
2758 * switch stack to @_, and copy return values
2759 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2760 AV * const av = GvAV(PL_defgv);
2761 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2764 /* Mark is at the end of the stack. */
2766 Copy(AvARRAY(av), SP + 1, items, SV*);
2771 /* We assume first XSUB in &DB::sub is the called one. */
2773 SAVEVPTR(PL_curcop);
2774 PL_curcop = PL_curcopdb;
2777 /* Do we need to open block here? XXXX */
2779 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2781 CvXSUB(cv)(aTHX_ cv);
2783 /* Enforce some sanity in scalar context. */
2784 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2785 if (markix > PL_stack_sp - PL_stack_base)
2786 *(PL_stack_base + markix) = &PL_sv_undef;
2788 *(PL_stack_base + markix) = *PL_stack_sp;
2789 PL_stack_sp = PL_stack_base + markix;
2797 Perl_sub_crush_depth(pTHX_ CV *cv)
2799 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2802 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2804 SV* const tmpstr = sv_newmortal();
2805 gv_efullname3(tmpstr, CvGV(cv), NULL);
2806 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2815 SV* const elemsv = POPs;
2816 IV elem = SvIV(elemsv);
2817 AV *const av = MUTABLE_AV(POPs);
2818 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2819 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2820 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2821 bool preeminent = TRUE;
2824 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2825 Perl_warner(aTHX_ packWARN(WARN_MISC),
2826 "Use of reference \"%"SVf"\" as array index",
2828 if (SvTYPE(av) != SVt_PVAV)
2835 /* If we can determine whether the element exist,
2836 * Try to preserve the existenceness of a tied array
2837 * element by using EXISTS and DELETE if possible.
2838 * Fallback to FETCH and STORE otherwise. */
2839 if (SvCANEXISTDELETE(av))
2840 preeminent = av_exists(av, elem);
2843 svp = av_fetch(av, elem, lval && !defer);
2845 #ifdef PERL_MALLOC_WRAP
2846 if (SvUOK(elemsv)) {
2847 const UV uv = SvUV(elemsv);
2848 elem = uv > IV_MAX ? IV_MAX : uv;
2850 else if (SvNOK(elemsv))
2851 elem = (IV)SvNV(elemsv);
2853 static const char oom_array_extend[] =
2854 "Out of memory during array extend"; /* Duplicated in av.c */
2855 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2858 if (!svp || *svp == &PL_sv_undef) {
2861 DIE(aTHX_ PL_no_aelem, elem);
2862 lv = sv_newmortal();
2863 sv_upgrade(lv, SVt_PVLV);
2865 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2866 LvTARG(lv) = SvREFCNT_inc_simple(av);
2867 LvTARGOFF(lv) = elem;
2874 save_aelem(av, elem, svp);
2876 SAVEADELETE(av, elem);
2878 else if (PL_op->op_private & OPpDEREF) {
2879 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2883 sv = (svp ? *svp : &PL_sv_undef);
2884 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2891 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2893 PERL_ARGS_ASSERT_VIVIFY_REF;
2898 Perl_croak_no_modify(aTHX);
2899 prepare_SV_for_RV(sv);
2902 SvRV_set(sv, newSV(0));
2905 SvRV_set(sv, MUTABLE_SV(newAV()));
2908 SvRV_set(sv, MUTABLE_SV(newHV()));
2915 if (SvGMAGICAL(sv)) {
2916 /* copy the sv without magic to prevent magic from being
2918 SV* msv = sv_newmortal();
2919 sv_setsv_nomg(msv, sv);
2928 SV* const sv = TOPs;
2931 SV* const rsv = SvRV(sv);
2932 if (SvTYPE(rsv) == SVt_PVCV) {
2938 SETs(method_common(sv, NULL));
2945 SV* const sv = cSVOP_sv;
2946 U32 hash = SvSHARED_HASH(sv);
2948 XPUSHs(method_common(sv, &hash));
2953 S_method_common(pTHX_ SV* meth, U32* hashp)
2960 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2961 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2962 "package or object reference", SVfARG(meth)),
2964 : *(PL_stack_base + TOPMARK + 1);
2966 PERL_ARGS_ASSERT_METHOD_COMMON;
2969 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2974 ob = MUTABLE_SV(SvRV(sv));
2978 const char * packname = NULL;
2979 bool packname_is_utf8 = FALSE;
2981 /* this isn't a reference */
2982 if(SvOK(sv) && (packname = SvPV_nomg_const(sv, packlen))) {
2983 const HE* const he =
2984 (const HE *)hv_common_key_len(
2985 PL_stashcache, packname,
2986 packlen * -(packname_is_utf8 = !!SvUTF8(sv)), 0, NULL, 0
2990 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2997 !(iogv = gv_fetchpvn_flags(
2998 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
3000 !(ob=MUTABLE_SV(GvIO(iogv))))
3002 /* this isn't the name of a filehandle either */
3004 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3005 ? !isIDFIRST_utf8((U8*)packname)
3006 : !isIDFIRST_L1((U8)*packname)
3009 /* diag_listed_as: Can't call method "%s" without a package or object reference */
3010 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3012 SvOK(sv) ? "without a package or object reference"
3013 : "on an undefined value");
3015 /* assume it's a package name */
3016 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3020 SV* const ref = newSViv(PTR2IV(stash));
3021 (void)hv_store(PL_stashcache, packname,
3022 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3026 /* it _is_ a filehandle name -- replace with a reference */
3027 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3030 /* if we got here, ob should be a reference or a glob */
3031 if (!ob || !(SvOBJECT(ob)
3032 || (SvTYPE(ob) == SVt_PVGV
3034 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3037 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3038 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3039 ? newSVpvs_flags("DOES", SVs_TEMP)
3043 stash = SvSTASH(ob);
3046 /* NOTE: stash may be null, hope hv_fetch_ent and
3047 gv_fetchmethod can cope (it seems they can) */
3049 /* shortcut for simple names */
3051 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3053 gv = MUTABLE_GV(HeVAL(he));
3054 if (isGV(gv) && GvCV(gv) &&
3055 (!GvCVGEN(gv) || GvCVGEN(gv)
3056 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3057 return MUTABLE_SV(GvCV(gv));
3061 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3062 meth, GV_AUTOLOAD | GV_CROAK);
3066 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3071 * c-indentation-style: bsd
3073 * indent-tabs-mode: nil
3076 * ex: set ts=8 sts=4 sw=4 et: