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));
80 PUSHMARK(PL_stack_sp);
95 XPUSHs(MUTABLE_SV(cGVOP_gv));
106 if (PL_op->op_type == OP_AND)
108 RETURNOP(cLOGOP->op_other);
114 dVAR; dSP; dPOPTOPssrl;
116 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
117 SV * const temp = left;
118 left = right; right = temp;
120 if (PL_tainting && PL_tainted && !SvTAINTED(left))
122 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
123 SV * const cv = SvRV(left);
124 const U32 cv_type = SvTYPE(cv);
125 const U32 gv_type = SvTYPE(right);
126 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
132 /* Can do the optimisation if right (LVALUE) is not a typeglob,
133 left (RVALUE) is a reference to something, and we're in void
135 if (!got_coderef && gv_type != SVt_PVGV && GIMME_V == G_VOID) {
136 /* Is the target symbol table currently empty? */
137 GV * const gv = gv_fetchsv(right, GV_NOINIT, SVt_PVGV);
138 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
139 /* Good. Create a new proxy constant subroutine in the target.
140 The gv becomes a(nother) reference to the constant. */
141 SV *const value = SvRV(cv);
143 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
144 SvPCS_IMPORTED_on(gv);
146 SvREFCNT_inc_simple_void(value);
152 /* Need to fix things up. */
153 if (gv_type != SVt_PVGV) {
154 /* Need to fix GV. */
155 right = MUTABLE_SV(gv_fetchsv(right, GV_ADD, SVt_PVGV));
159 /* We've been returned a constant rather than a full subroutine,
160 but they expect a subroutine reference to apply. */
162 ENTER_with_name("sassign_coderef");
163 SvREFCNT_inc_void(SvRV(cv));
164 /* newCONSTSUB takes a reference count on the passed in SV
165 from us. We set the name to NULL, otherwise we get into
166 all sorts of fun as the reference to our new sub is
167 donated to the GV that we're about to assign to.
169 SvRV_set(left, MUTABLE_SV(newCONSTSUB(GvSTASH(right), NULL,
172 LEAVE_with_name("sassign_coderef");
174 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
176 First: ops for \&{"BONK"}; return us the constant in the
178 Second: ops for *{"BONK"} cause that symbol table entry
179 (and our reference to it) to be upgraded from RV
181 Thirdly: We get here. cv is actually PVGV now, and its
182 GvCV() is actually the subroutine we're looking for
184 So change the reference so that it points to the subroutine
185 of that typeglob, as that's what they were after all along.
187 GV *const upgraded = MUTABLE_GV(cv);
188 CV *const source = GvCV(upgraded);
191 assert(CvFLAGS(source) & CVf_CONST);
193 SvREFCNT_inc_void(source);
194 SvREFCNT_dec(upgraded);
195 SvRV_set(left, MUTABLE_SV(source));
200 SvSetMagicSV(right, left);
210 RETURNOP(cLOGOP->op_other);
212 RETURNOP(cLOGOP->op_next);
219 TAINT_NOT; /* Each statement is presumed innocent */
220 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
222 oldsave = PL_scopestack[PL_scopestack_ix - 1];
223 LEAVE_SCOPE(oldsave);
229 dVAR; dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
234 const char *rpv = NULL;
236 bool rcopied = FALSE;
238 if (TARG == right && right != left) {
239 /* mg_get(right) may happen here ... */
240 rpv = SvPV_const(right, rlen);
241 rbyte = !DO_UTF8(right);
242 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
243 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
249 const char* const lpv = SvPV_const(left, llen); /* mg_get(left) may happen here */
250 lbyte = !DO_UTF8(left);
251 sv_setpvn(TARG, lpv, llen);
257 else { /* TARG == left */
259 SvGETMAGIC(left); /* or mg_get(left) may happen here */
261 if (left == right && ckWARN(WARN_UNINITIALIZED))
262 report_uninit(right);
265 (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */
266 lbyte = !DO_UTF8(left);
271 /* or mg_get(right) may happen here */
273 rpv = SvPV_const(right, rlen);
274 rbyte = !DO_UTF8(right);
276 if (lbyte != rbyte) {
278 sv_utf8_upgrade_nomg(TARG);
281 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
282 sv_utf8_upgrade_nomg(right);
283 rpv = SvPV_const(right, rlen);
286 sv_catpvn_nomg(TARG, rpv, rlen);
297 if (PL_op->op_flags & OPf_MOD) {
298 if (PL_op->op_private & OPpLVAL_INTRO)
299 if (!(PL_op->op_private & OPpPAD_STATE))
300 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
301 if (PL_op->op_private & OPpDEREF) {
303 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
313 tryAMAGICunTARGET(iter, 0);
314 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
315 if (!isGV_with_GP(PL_last_in_gv)) {
316 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
317 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
320 XPUSHs(MUTABLE_SV(PL_last_in_gv));
323 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
326 return do_readline();
331 dVAR; dSP; tryAMAGICbinSET(eq,0);
332 #ifndef NV_PRESERVES_UV
333 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
335 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
339 #ifdef PERL_PRESERVE_IVUV
342 /* Unless the left argument is integer in range we are going
343 to have to use NV maths. Hence only attempt to coerce the
344 right argument if we know the left is integer. */
347 const bool auvok = SvUOK(TOPm1s);
348 const bool buvok = SvUOK(TOPs);
350 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
351 /* Casting IV to UV before comparison isn't going to matter
352 on 2s complement. On 1s complement or sign&magnitude
353 (if we have any of them) it could to make negative zero
354 differ from normal zero. As I understand it. (Need to
355 check - is negative zero implementation defined behaviour
357 const UV buv = SvUVX(POPs);
358 const UV auv = SvUVX(TOPs);
360 SETs(boolSV(auv == buv));
363 { /* ## Mixed IV,UV ## */
367 /* == is commutative so doesn't matter which is left or right */
369 /* top of stack (b) is the iv */
378 /* As uv is a UV, it's >0, so it cannot be == */
381 /* we know iv is >= 0 */
382 SETs(boolSV((UV)iv == SvUVX(uvp)));
389 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
391 if (Perl_isnan(left) || Perl_isnan(right))
393 SETs(boolSV(left == right));
396 SETs(boolSV(TOPn == value));
405 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
406 DIE(aTHX_ "%s", PL_no_modify);
407 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
408 && SvIVX(TOPs) != IV_MAX)
410 SvIV_set(TOPs, SvIVX(TOPs) + 1);
411 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
413 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
426 if (PL_op->op_type == OP_OR)
428 RETURNOP(cLOGOP->op_other);
437 const int op_type = PL_op->op_type;
438 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
443 if (!sv || !SvANY(sv)) {
444 if (op_type == OP_DOR)
446 RETURNOP(cLOGOP->op_other);
452 if (!sv || !SvANY(sv))
457 switch (SvTYPE(sv)) {
459 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
463 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
467 if (CvROOT(sv) || CvXSUB(sv))
480 if(op_type == OP_DOR)
482 RETURNOP(cLOGOP->op_other);
484 /* assuming OP_DEFINED */
492 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
493 tryAMAGICbin(add,opASSIGN);
494 svl = sv_2num(TOPm1s);
496 useleft = USE_LEFT(svl);
497 #ifdef PERL_PRESERVE_IVUV
498 /* We must see if we can perform the addition with integers if possible,
499 as the integer code detects overflow while the NV code doesn't.
500 If either argument hasn't had a numeric conversion yet attempt to get
501 the IV. It's important to do this now, rather than just assuming that
502 it's not IOK as a PV of "9223372036854775806" may not take well to NV
503 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
504 integer in case the second argument is IV=9223372036854775806
505 We can (now) rely on sv_2iv to do the right thing, only setting the
506 public IOK flag if the value in the NV (or PV) slot is truly integer.
508 A side effect is that this also aggressively prefers integer maths over
509 fp maths for integer values.
511 How to detect overflow?
513 C 99 section 6.2.6.1 says
515 The range of nonnegative values of a signed integer type is a subrange
516 of the corresponding unsigned integer type, and the representation of
517 the same value in each type is the same. A computation involving
518 unsigned operands can never overflow, because a result that cannot be
519 represented by the resulting unsigned integer type is reduced modulo
520 the number that is one greater than the largest value that can be
521 represented by the resulting type.
525 which I read as "unsigned ints wrap."
527 signed integer overflow seems to be classed as "exception condition"
529 If an exceptional condition occurs during the evaluation of an
530 expression (that is, if the result is not mathematically defined or not
531 in the range of representable values for its type), the behavior is
534 (6.5, the 5th paragraph)
536 I had assumed that on 2s complement machines signed arithmetic would
537 wrap, hence coded pp_add and pp_subtract on the assumption that
538 everything perl builds on would be happy. After much wailing and
539 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
540 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
541 unsigned code below is actually shorter than the old code. :-)
546 /* Unless the left argument is integer in range we are going to have to
547 use NV maths. Hence only attempt to coerce the right argument if
548 we know the left is integer. */
556 /* left operand is undef, treat as zero. + 0 is identity,
557 Could SETi or SETu right now, but space optimise by not adding
558 lots of code to speed up what is probably a rarish case. */
560 /* Left operand is defined, so is it IV? */
563 if ((auvok = SvUOK(svl)))
566 register const IV aiv = SvIVX(svl);
569 auvok = 1; /* Now acting as a sign flag. */
570 } else { /* 2s complement assumption for IV_MIN */
578 bool result_good = 0;
581 bool buvok = SvUOK(svr);
586 register const IV biv = SvIVX(svr);
593 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
594 else "IV" now, independent of how it came in.
595 if a, b represents positive, A, B negative, a maps to -A etc
600 all UV maths. negate result if A negative.
601 add if signs same, subtract if signs differ. */
607 /* Must get smaller */
613 /* result really should be -(auv-buv). as its negation
614 of true value, need to swap our result flag */
631 if (result <= (UV)IV_MIN)
634 /* result valid, but out of range for IV. */
639 } /* Overflow, drop through to NVs. */
644 NV value = SvNV(svr);
647 /* left operand is undef, treat as zero. + 0.0 is identity. */
651 SETn( value + SvNV(svl) );
659 AV * const av = PL_op->op_flags & OPf_SPECIAL
660 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAV(cGVOP_gv);
661 const U32 lval = PL_op->op_flags & OPf_MOD;
662 SV** const svp = av_fetch(av, PL_op->op_private, lval);
663 SV *sv = (svp ? *svp : &PL_sv_undef);
665 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
673 dVAR; dSP; dMARK; dTARGET;
675 do_join(TARG, *MARK, MARK, SP);
686 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
687 * will be enough to hold an OP*.
689 SV* const sv = sv_newmortal();
690 sv_upgrade(sv, SVt_PVLV);
692 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
695 XPUSHs(MUTABLE_SV(PL_op));
700 /* Oversized hot code. */
704 dVAR; dSP; dMARK; dORIGMARK;
709 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
711 if (gv && (io = GvIO(gv))
712 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
715 if (MARK == ORIGMARK) {
716 /* If using default handle then we need to make space to
717 * pass object as 1st arg, so move other args up ...
721 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
725 *MARK = SvTIED_obj(MUTABLE_SV(io), mg);
727 ENTER_with_name("call_PRINT");
728 if( PL_op->op_type == OP_SAY ) {
729 /* local $\ = "\n" */
730 SAVEGENERICSV(PL_ors_sv);
731 PL_ors_sv = newSVpvs("\n");
733 call_method("PRINT", G_SCALAR);
734 LEAVE_with_name("call_PRINT");
741 if (!(io = GvIO(gv))) {
742 if ((GvEGVx(gv)) && (io = GvIO(GvEGV(gv)))
743 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
745 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
746 report_evil_fh(gv, io, PL_op->op_type);
747 SETERRNO(EBADF,RMS_IFI);
750 else if (!(fp = IoOFP(io))) {
751 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
753 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
754 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
755 report_evil_fh(gv, io, PL_op->op_type);
757 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
761 SV * const ofs = GvSV(PL_ofsgv); /* $, */
763 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
765 if (!do_print(*MARK, fp))
769 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
770 if (!do_print(GvSV(PL_ofsgv), fp)) {
779 if (!do_print(*MARK, fp))
787 if (PL_op->op_type == OP_SAY) {
788 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
791 else if (PL_ors_sv && SvOK(PL_ors_sv))
792 if (!do_print(PL_ors_sv, fp)) /* $\ */
795 if (IoFLAGS(io) & IOf_FLUSH)
796 if (PerlIO_flush(fp) == EOF)
806 XPUSHs(&PL_sv_undef);
813 const I32 gimme = GIMME_V;
814 static const char an_array[] = "an ARRAY";
815 static const char a_hash[] = "a HASH";
816 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
817 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
821 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
824 if (SvTYPE(sv) != type)
825 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
826 if (PL_op->op_flags & OPf_REF) {
831 if (gimme != G_ARRAY)
832 goto croak_cant_return;
836 else if (PL_op->op_flags & OPf_MOD
837 && PL_op->op_private & OPpLVAL_INTRO)
838 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
841 if (SvTYPE(sv) == type) {
842 if (PL_op->op_flags & OPf_REF) {
847 if (gimme != G_ARRAY)
848 goto croak_cant_return;
856 if (!isGV_with_GP(sv)) {
857 if (SvGMAGICAL(sv)) {
862 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
870 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
871 if (PL_op->op_private & OPpLVAL_INTRO)
872 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
873 if (PL_op->op_flags & OPf_REF) {
878 if (gimme != G_ARRAY)
879 goto croak_cant_return;
887 AV *const av = MUTABLE_AV(sv);
888 /* The guts of pp_rv2av, with no intenting change to preserve history
889 (until such time as we get tools that can do blame annotation across
890 whitespace changes. */
891 if (gimme == G_ARRAY) {
892 const I32 maxarg = AvFILL(av) + 1;
893 (void)POPs; /* XXXX May be optimized away? */
895 if (SvRMAGICAL(av)) {
897 for (i=0; i < (U32)maxarg; i++) {
898 SV ** const svp = av_fetch(av, i, FALSE);
899 /* See note in pp_helem, and bug id #27839 */
901 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
906 Copy(AvARRAY(av), SP+1, maxarg, SV*);
910 else if (gimme == G_SCALAR) {
912 const I32 maxarg = AvFILL(av) + 1;
916 /* The guts of pp_rv2hv */
917 if (gimme == G_ARRAY) { /* array wanted */
921 else if (gimme == G_SCALAR) {
923 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
931 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
932 is_pp_rv2av ? "array" : "hash");
937 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
941 PERL_ARGS_ASSERT_DO_ODDBALL;
947 if (ckWARN(WARN_MISC)) {
949 if (relem == firstrelem &&
951 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
952 SvTYPE(SvRV(*relem)) == SVt_PVHV))
954 err = "Reference found where even-sized list expected";
957 err = "Odd number of elements in hash assignment";
958 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
962 didstore = hv_store_ent(hash,*relem,tmpstr,0);
963 if (SvMAGICAL(hash)) {
964 if (SvSMAGICAL(tmpstr))
976 SV **lastlelem = PL_stack_sp;
977 SV **lastrelem = PL_stack_base + POPMARK;
978 SV **firstrelem = PL_stack_base + POPMARK + 1;
979 SV **firstlelem = lastrelem + 1;
992 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
994 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
997 /* If there's a common identifier on both sides we have to take
998 * special care that assigning the identifier on the left doesn't
999 * clobber a value on the right that's used later in the list.
1001 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1002 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1003 for (relem = firstrelem; relem <= lastrelem; relem++) {
1004 if ((sv = *relem)) {
1005 TAINT_NOT; /* Each item is independent */
1006 *relem = sv_mortalcopy(sv);
1016 while (lelem <= lastlelem) {
1017 TAINT_NOT; /* Each item stands on its own, taintwise. */
1019 switch (SvTYPE(sv)) {
1021 ary = MUTABLE_AV(sv);
1022 magic = SvMAGICAL(ary) != 0;
1024 av_extend(ary, lastrelem - relem);
1026 while (relem <= lastrelem) { /* gobble up all the rest */
1029 sv = newSVsv(*relem);
1031 didstore = av_store(ary,i++,sv);
1033 if (SvSMAGICAL(sv)) {
1034 /* More magic can happen in the mg_set callback, so we
1035 * backup the delaymagic for now. */
1036 U16 dmbak = PL_delaymagic;
1039 PL_delaymagic = dmbak;
1046 if (PL_delaymagic & DM_ARRAY)
1047 SvSETMAGIC(MUTABLE_SV(ary));
1049 case SVt_PVHV: { /* normal hash */
1052 hash = MUTABLE_HV(sv);
1053 magic = SvMAGICAL(hash) != 0;
1055 firsthashrelem = relem;
1057 while (relem < lastrelem) { /* gobble up all the rest */
1059 sv = *relem ? *relem : &PL_sv_no;
1063 sv_setsv(tmpstr,*relem); /* value */
1064 *(relem++) = tmpstr;
1065 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1066 /* key overwrites an existing entry */
1068 didstore = hv_store_ent(hash,sv,tmpstr,0);
1070 if (SvSMAGICAL(tmpstr)) {
1071 U16 dmbak = PL_delaymagic;
1074 PL_delaymagic = dmbak;
1081 if (relem == lastrelem) {
1082 do_oddball(hash, relem, firstrelem);
1088 if (SvIMMORTAL(sv)) {
1089 if (relem <= lastrelem)
1093 if (relem <= lastrelem) {
1094 sv_setsv(sv, *relem);
1098 sv_setsv(sv, &PL_sv_undef);
1100 if (SvSMAGICAL(sv)) {
1101 U16 dmbak = PL_delaymagic;
1104 PL_delaymagic = dmbak;
1109 if (PL_delaymagic & ~DM_DELAY) {
1110 if (PL_delaymagic & DM_UID) {
1111 #ifdef HAS_SETRESUID
1112 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1113 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1116 # ifdef HAS_SETREUID
1117 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1118 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1121 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1122 (void)setruid(PL_uid);
1123 PL_delaymagic &= ~DM_RUID;
1125 # endif /* HAS_SETRUID */
1127 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1128 (void)seteuid(PL_euid);
1129 PL_delaymagic &= ~DM_EUID;
1131 # endif /* HAS_SETEUID */
1132 if (PL_delaymagic & DM_UID) {
1133 if (PL_uid != PL_euid)
1134 DIE(aTHX_ "No setreuid available");
1135 (void)PerlProc_setuid(PL_uid);
1137 # endif /* HAS_SETREUID */
1138 #endif /* HAS_SETRESUID */
1139 PL_uid = PerlProc_getuid();
1140 PL_euid = PerlProc_geteuid();
1142 if (PL_delaymagic & DM_GID) {
1143 #ifdef HAS_SETRESGID
1144 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1145 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1148 # ifdef HAS_SETREGID
1149 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1150 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1153 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1154 (void)setrgid(PL_gid);
1155 PL_delaymagic &= ~DM_RGID;
1157 # endif /* HAS_SETRGID */
1159 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1160 (void)setegid(PL_egid);
1161 PL_delaymagic &= ~DM_EGID;
1163 # endif /* HAS_SETEGID */
1164 if (PL_delaymagic & DM_GID) {
1165 if (PL_gid != PL_egid)
1166 DIE(aTHX_ "No setregid available");
1167 (void)PerlProc_setgid(PL_gid);
1169 # endif /* HAS_SETREGID */
1170 #endif /* HAS_SETRESGID */
1171 PL_gid = PerlProc_getgid();
1172 PL_egid = PerlProc_getegid();
1174 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1178 if (gimme == G_VOID)
1179 SP = firstrelem - 1;
1180 else if (gimme == G_SCALAR) {
1183 SETi(lastrelem - firstrelem + 1 - duplicates);
1190 /* Removes from the stack the entries which ended up as
1191 * duplicated keys in the hash (fix for [perl #24380]) */
1192 Move(firsthashrelem + duplicates,
1193 firsthashrelem, duplicates, SV**);
1194 lastrelem -= duplicates;
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();
1216 SvUPGRADE(rv, SVt_IV);
1217 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1218 loathe to use it here, but it seems to be the right fix. Or close.
1219 The key part appears to be that it's essential for pp_qr to return a new
1220 object (SV), which implies that there needs to be an effective way to
1221 generate a new SV from the existing SV that is pre-compiled in the
1223 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1227 HV* const stash = gv_stashpv(SvPV_nolen(pkg), GV_ADD);
1229 (void)sv_bless(rv, stash);
1232 if (RX_EXTFLAGS(rx) & RXf_TAINTED)
1241 register PMOP *pm = cPMOP;
1243 register const char *t;
1244 register const char *s;
1247 U8 r_flags = REXEC_CHECKED;
1248 const char *truebase; /* Start of string */
1249 register REGEXP *rx = PM_GETRE(pm);
1251 const I32 gimme = GIMME;
1254 const I32 oldsave = PL_savestack_ix;
1255 I32 update_minmatch = 1;
1256 I32 had_zerolen = 0;
1259 if (PL_op->op_flags & OPf_STACKED)
1261 else if (PL_op->op_private & OPpTARGET_MY)
1268 PUTBACK; /* EVAL blocks need stack_sp. */
1269 /* Skip get-magic if this is a qr// clone, because regcomp has
1271 s = ((struct regexp *)SvANY(rx))->mother_re
1272 ? SvPV_nomg_const(TARG, len)
1273 : SvPV_const(TARG, len);
1275 DIE(aTHX_ "panic: pp_match");
1277 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1278 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1281 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1283 /* PMdf_USED is set after a ?? matches once */
1286 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1288 pm->op_pmflags & PMf_USED
1292 if (gimme == G_ARRAY)
1299 /* empty pattern special-cased to use last successful pattern if possible */
1300 if (!RX_PRELEN(rx) && PL_curpm) {
1305 if (RX_MINLEN(rx) > (I32)len)
1310 /* XXXX What part of this is needed with true \G-support? */
1311 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1312 RX_OFFS(rx)[0].start = -1;
1313 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1314 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1315 if (mg && mg->mg_len >= 0) {
1316 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1317 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1318 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1319 r_flags |= REXEC_IGNOREPOS;
1320 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1321 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1324 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1325 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1326 update_minmatch = 0;
1330 /* XXX: comment out !global get safe $1 vars after a
1331 match, BUT be aware that this leads to dramatic slowdowns on
1332 /g matches against large strings. So far a solution to this problem
1333 appears to be quite tricky.
1334 Test for the unsafe vars are TODO for now. */
1335 if (( !global && RX_NPARENS(rx))
1336 || SvTEMP(TARG) || PL_sawampersand ||
1337 (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1338 r_flags |= REXEC_COPY_STR;
1340 r_flags |= REXEC_SCREAM;
1343 if (global && RX_OFFS(rx)[0].start != -1) {
1344 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1345 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1347 if (update_minmatch++)
1348 minmatch = had_zerolen;
1350 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1351 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1352 /* FIXME - can PL_bostr be made const char *? */
1353 PL_bostr = (char *)truebase;
1354 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1358 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1360 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1361 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
1362 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
1363 && (r_flags & REXEC_SCREAM)))
1364 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1367 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1368 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1371 if (dynpm->op_pmflags & PMf_ONCE) {
1373 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1375 dynpm->op_pmflags |= PMf_USED;
1386 RX_MATCH_TAINTED_on(rx);
1387 TAINT_IF(RX_MATCH_TAINTED(rx));
1388 if (gimme == G_ARRAY) {
1389 const I32 nparens = RX_NPARENS(rx);
1390 I32 i = (global && !nparens) ? 1 : 0;
1392 SPAGAIN; /* EVAL blocks could move the stack. */
1393 EXTEND(SP, nparens + i);
1394 EXTEND_MORTAL(nparens + i);
1395 for (i = !i; i <= nparens; i++) {
1396 PUSHs(sv_newmortal());
1397 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1398 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1399 s = RX_OFFS(rx)[i].start + truebase;
1400 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1401 len < 0 || len > strend - s)
1402 DIE(aTHX_ "panic: pp_match start/end pointers");
1403 sv_setpvn(*SP, s, len);
1404 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1409 if (dynpm->op_pmflags & PMf_CONTINUE) {
1411 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1412 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1414 #ifdef PERL_OLD_COPY_ON_WRITE
1416 sv_force_normal_flags(TARG, 0);
1418 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1419 &PL_vtbl_mglob, NULL, 0);
1421 if (RX_OFFS(rx)[0].start != -1) {
1422 mg->mg_len = RX_OFFS(rx)[0].end;
1423 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1424 mg->mg_flags |= MGf_MINMATCH;
1426 mg->mg_flags &= ~MGf_MINMATCH;
1429 had_zerolen = (RX_OFFS(rx)[0].start != -1
1430 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1431 == (UV)RX_OFFS(rx)[0].end));
1432 PUTBACK; /* EVAL blocks may use stack */
1433 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1438 LEAVE_SCOPE(oldsave);
1444 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1445 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1449 #ifdef PERL_OLD_COPY_ON_WRITE
1451 sv_force_normal_flags(TARG, 0);
1453 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1454 &PL_vtbl_mglob, NULL, 0);
1456 if (RX_OFFS(rx)[0].start != -1) {
1457 mg->mg_len = RX_OFFS(rx)[0].end;
1458 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1459 mg->mg_flags |= MGf_MINMATCH;
1461 mg->mg_flags &= ~MGf_MINMATCH;
1464 LEAVE_SCOPE(oldsave);
1468 yup: /* Confirmed by INTUIT */
1470 RX_MATCH_TAINTED_on(rx);
1471 TAINT_IF(RX_MATCH_TAINTED(rx));
1473 if (dynpm->op_pmflags & PMf_ONCE) {
1475 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1477 dynpm->op_pmflags |= PMf_USED;
1480 if (RX_MATCH_COPIED(rx))
1481 Safefree(RX_SUBBEG(rx));
1482 RX_MATCH_COPIED_off(rx);
1483 RX_SUBBEG(rx) = NULL;
1485 /* FIXME - should rx->subbeg be const char *? */
1486 RX_SUBBEG(rx) = (char *) truebase;
1487 RX_OFFS(rx)[0].start = s - truebase;
1488 if (RX_MATCH_UTF8(rx)) {
1489 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1490 RX_OFFS(rx)[0].end = t - truebase;
1493 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1495 RX_SUBLEN(rx) = strend - truebase;
1498 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1500 #ifdef PERL_OLD_COPY_ON_WRITE
1501 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1503 PerlIO_printf(Perl_debug_log,
1504 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1505 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1508 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1510 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1511 assert (SvPOKp(RX_SAVED_COPY(rx)));
1516 RX_SUBBEG(rx) = savepvn(t, strend - t);
1517 #ifdef PERL_OLD_COPY_ON_WRITE
1518 RX_SAVED_COPY(rx) = NULL;
1521 RX_SUBLEN(rx) = strend - t;
1522 RX_MATCH_COPIED_on(rx);
1523 off = RX_OFFS(rx)[0].start = s - t;
1524 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1526 else { /* startp/endp are used by @- @+. */
1527 RX_OFFS(rx)[0].start = s - truebase;
1528 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1530 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1532 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
1533 LEAVE_SCOPE(oldsave);
1538 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1539 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1540 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1545 LEAVE_SCOPE(oldsave);
1546 if (gimme == G_ARRAY)
1552 Perl_do_readline(pTHX)
1554 dVAR; dSP; dTARGETSTACKED;
1559 register IO * const io = GvIO(PL_last_in_gv);
1560 register const I32 type = PL_op->op_type;
1561 const I32 gimme = GIMME_V;
1564 MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1567 XPUSHs(SvTIED_obj(MUTABLE_SV(io), mg));
1569 ENTER_with_name("call_READLINE");
1570 call_method("READLINE", gimme);
1571 LEAVE_with_name("call_READLINE");
1573 if (gimme == G_SCALAR) {
1574 SV* const result = POPs;
1575 SvSetSV_nosteal(TARG, result);
1585 if (IoFLAGS(io) & IOf_ARGV) {
1586 if (IoFLAGS(io) & IOf_START) {
1588 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1589 IoFLAGS(io) &= ~IOf_START;
1590 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1591 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1592 SvSETMAGIC(GvSV(PL_last_in_gv));
1597 fp = nextargv(PL_last_in_gv);
1598 if (!fp) { /* Note: fp != IoIFP(io) */
1599 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1602 else if (type == OP_GLOB)
1603 fp = Perl_start_glob(aTHX_ POPs, io);
1605 else if (type == OP_GLOB)
1607 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1608 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1612 if ((!io || !(IoFLAGS(io) & IOf_START))
1613 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1615 if (type == OP_GLOB)
1616 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1617 "glob failed (can't start child: %s)",
1620 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1622 if (gimme == G_SCALAR) {
1623 /* undef TARG, and push that undefined value */
1624 if (type != OP_RCATLINE) {
1625 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1633 if (gimme == G_SCALAR) {
1635 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1638 if (type == OP_RCATLINE)
1639 SvPV_force_nolen(sv);
1643 else if (isGV_with_GP(sv)) {
1644 SvPV_force_nolen(sv);
1646 SvUPGRADE(sv, SVt_PV);
1647 tmplen = SvLEN(sv); /* remember if already alloced */
1648 if (!tmplen && !SvREADONLY(sv))
1649 Sv_Grow(sv, 80); /* try short-buffering it */
1651 if (type == OP_RCATLINE && SvOK(sv)) {
1653 SvPV_force_nolen(sv);
1659 sv = sv_2mortal(newSV(80));
1663 /* This should not be marked tainted if the fp is marked clean */
1664 #define MAYBE_TAINT_LINE(io, sv) \
1665 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1670 /* delay EOF state for a snarfed empty file */
1671 #define SNARF_EOF(gimme,rs,io,sv) \
1672 (gimme != G_SCALAR || SvCUR(sv) \
1673 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1677 if (!sv_gets(sv, fp, offset)
1679 || SNARF_EOF(gimme, PL_rs, io, sv)
1680 || PerlIO_error(fp)))
1682 PerlIO_clearerr(fp);
1683 if (IoFLAGS(io) & IOf_ARGV) {
1684 fp = nextargv(PL_last_in_gv);
1687 (void)do_close(PL_last_in_gv, FALSE);
1689 else if (type == OP_GLOB) {
1690 if (!do_close(PL_last_in_gv, FALSE)) {
1691 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1692 "glob failed (child exited with status %d%s)",
1693 (int)(STATUS_CURRENT >> 8),
1694 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1697 if (gimme == G_SCALAR) {
1698 if (type != OP_RCATLINE) {
1699 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1705 MAYBE_TAINT_LINE(io, sv);
1708 MAYBE_TAINT_LINE(io, sv);
1710 IoFLAGS(io) |= IOf_NOLINE;
1714 if (type == OP_GLOB) {
1717 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1718 char * const tmps = SvEND(sv) - 1;
1719 if (*tmps == *SvPVX_const(PL_rs)) {
1721 SvCUR_set(sv, SvCUR(sv) - 1);
1724 for (t1 = SvPVX_const(sv); *t1; t1++)
1725 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1726 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1728 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1729 (void)POPs; /* Unmatched wildcard? Chuck it... */
1732 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1733 if (ckWARN(WARN_UTF8)) {
1734 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1735 const STRLEN len = SvCUR(sv) - offset;
1738 if (!is_utf8_string_loc(s, len, &f))
1739 /* Emulate :encoding(utf8) warning in the same case. */
1740 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1741 "utf8 \"\\x%02X\" does not map to Unicode",
1742 f < (U8*)SvEND(sv) ? *f : 0);
1745 if (gimme == G_ARRAY) {
1746 if (SvLEN(sv) - SvCUR(sv) > 20) {
1747 SvPV_shrink_to_cur(sv);
1749 sv = sv_2mortal(newSV(80));
1752 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1753 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1754 const STRLEN new_len
1755 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1756 SvPV_renew(sv, new_len);
1765 register PERL_CONTEXT *cx;
1766 I32 gimme = OP_GIMME(PL_op, -1);
1769 if (cxstack_ix >= 0) {
1770 /* If this flag is set, we're just inside a return, so we should
1771 * store the caller's context */
1772 gimme = (PL_op->op_flags & OPf_SPECIAL)
1774 : cxstack[cxstack_ix].blk_gimme;
1779 ENTER_with_name("block");
1782 PUSHBLOCK(cx, CXt_BLOCK, SP);
1792 SV * const keysv = POPs;
1793 HV * const hv = MUTABLE_HV(POPs);
1794 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1795 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1797 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1798 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1799 bool preeminent = TRUE;
1801 if (SvTYPE(hv) != SVt_PVHV)
1808 /* If we can determine whether the element exist,
1809 * Try to preserve the existenceness of a tied hash
1810 * element by using EXISTS and DELETE if possible.
1811 * Fallback to FETCH and STORE otherwise. */
1812 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1813 preeminent = hv_exists_ent(hv, keysv, 0);
1816 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1817 svp = he ? &HeVAL(he) : NULL;
1819 if (!svp || *svp == &PL_sv_undef) {
1823 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1825 lv = sv_newmortal();
1826 sv_upgrade(lv, SVt_PVLV);
1828 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1829 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1830 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1836 if (HvNAME_get(hv) && isGV(*svp))
1837 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1838 else if (preeminent)
1839 save_helem_flags(hv, keysv, svp,
1840 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1842 SAVEHDELETE(hv, keysv);
1844 else if (PL_op->op_private & OPpDEREF)
1845 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1847 sv = (svp ? *svp : &PL_sv_undef);
1848 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1849 * was to make C<local $tied{foo} = $tied{foo}> possible.
1850 * However, it seems no longer to be needed for that purpose, and
1851 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1852 * would loop endlessly since the pos magic is getting set on the
1853 * mortal copy and lost. However, the copy has the effect of
1854 * triggering the get magic, and losing it altogether made things like
1855 * c<$tied{foo};> in void context no longer do get magic, which some
1856 * code relied on. Also, delayed triggering of magic on @+ and friends
1857 * meant the original regex may be out of scope by now. So as a
1858 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1859 * being called too many times). */
1860 if (!lval && SvGMAGICAL(sv))
1869 register PERL_CONTEXT *cx;
1874 if (PL_op->op_flags & OPf_SPECIAL) {
1875 cx = &cxstack[cxstack_ix];
1876 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1881 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
1884 if (gimme == G_VOID)
1886 else if (gimme == G_SCALAR) {
1890 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1893 *MARK = sv_mortalcopy(TOPs);
1896 *MARK = &PL_sv_undef;
1900 else if (gimme == G_ARRAY) {
1901 /* in case LEAVE wipes old return values */
1903 for (mark = newsp + 1; mark <= SP; mark++) {
1904 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1905 *mark = sv_mortalcopy(*mark);
1906 TAINT_NOT; /* Each item is independent */
1910 PL_curpm = newpm; /* Don't pop $1 et al till now */
1912 LEAVE_with_name("block");
1920 register PERL_CONTEXT *cx;
1923 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1924 bool av_is_stack = FALSE;
1927 cx = &cxstack[cxstack_ix];
1928 if (!CxTYPE_is_LOOP(cx))
1929 DIE(aTHX_ "panic: pp_iter");
1931 itersvp = CxITERVAR(cx);
1932 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1933 /* string increment */
1934 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1935 SV *end = cx->blk_loop.state_u.lazysv.end;
1936 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1937 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1939 const char *max = SvPV_const(end, maxlen);
1940 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1941 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1942 /* safe to reuse old SV */
1943 sv_setsv(*itersvp, cur);
1947 /* we need a fresh SV every time so that loop body sees a
1948 * completely new SV for closures/references to work as
1951 *itersvp = newSVsv(cur);
1952 SvREFCNT_dec(oldsv);
1954 if (strEQ(SvPVX_const(cur), max))
1955 sv_setiv(cur, 0); /* terminate next time */
1962 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1963 /* integer increment */
1964 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1967 /* don't risk potential race */
1968 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1969 /* safe to reuse old SV */
1970 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1974 /* we need a fresh SV every time so that loop body sees a
1975 * completely new SV for closures/references to work as they
1978 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
1979 SvREFCNT_dec(oldsv);
1982 /* Handle end of range at IV_MAX */
1983 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
1984 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
1986 cx->blk_loop.state_u.lazyiv.cur++;
1987 cx->blk_loop.state_u.lazyiv.end++;
1994 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1995 av = cx->blk_loop.state_u.ary.ary;
2000 if (PL_op->op_private & OPpITER_REVERSED) {
2001 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
2002 ? cx->blk_loop.resetsp + 1 : 0))
2005 if (SvMAGICAL(av) || AvREIFY(av)) {
2006 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
2007 sv = svp ? *svp : NULL;
2010 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
2014 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
2018 if (SvMAGICAL(av) || AvREIFY(av)) {
2019 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
2020 sv = svp ? *svp : NULL;
2023 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
2027 if (sv && SvIS_FREED(sv)) {
2029 Perl_croak(aTHX_ "Use of freed value in iteration");
2034 SvREFCNT_inc_simple_void_NN(sv);
2038 if (!av_is_stack && sv == &PL_sv_undef) {
2039 SV *lv = newSV_type(SVt_PVLV);
2041 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2042 LvTARG(lv) = SvREFCNT_inc_simple(av);
2043 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
2044 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2050 SvREFCNT_dec(oldsv);
2058 register PMOP *pm = cPMOP;
2073 register REGEXP *rx = PM_GETRE(pm);
2075 int force_on_match = 0;
2076 const I32 oldsave = PL_savestack_ix;
2078 bool doutf8 = FALSE;
2080 #ifdef PERL_OLD_COPY_ON_WRITE
2087 /* known replacement string? */
2088 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);
2107 #ifdef PERL_OLD_COPY_ON_WRITE
2111 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2112 || SvTYPE(TARG) > SVt_PVLV)
2113 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2114 DIE(aTHX_ "%s", PL_no_modify);
2117 s = SvPV_mutable(TARG, len);
2118 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2120 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
2121 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2126 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2130 DIE(aTHX_ "panic: pp_subst");
2133 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2134 maxiters = 2 * slen + 10; /* We can match twice at each
2135 position, once with zero-length,
2136 second time with non-zero. */
2138 if (!RX_PRELEN(rx) && PL_curpm) {
2142 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2143 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2144 ? REXEC_COPY_STR : 0;
2146 r_flags |= REXEC_SCREAM;
2149 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2151 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2155 /* How to do it in subst? */
2156 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2158 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY)
2159 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
2160 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
2161 && (r_flags & REXEC_SCREAM))))
2166 /* only replace once? */
2167 once = !(rpm->op_pmflags & PMf_GLOBAL);
2168 matched = CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2169 r_flags | REXEC_CHECKED);
2170 /* known replacement string? */
2172 /* replacement needing upgrading? */
2173 if (DO_UTF8(TARG) && !doutf8) {
2174 nsv = sv_newmortal();
2177 sv_recode_to_utf8(nsv, PL_encoding);
2179 sv_utf8_upgrade(nsv);
2180 c = SvPV_const(nsv, clen);
2184 c = SvPV_const(dstr, clen);
2185 doutf8 = DO_UTF8(dstr);
2193 /* can do inplace substitution? */
2195 #ifdef PERL_OLD_COPY_ON_WRITE
2198 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2199 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2200 && (!doutf8 || SvUTF8(TARG))) {
2205 LEAVE_SCOPE(oldsave);
2208 #ifdef PERL_OLD_COPY_ON_WRITE
2209 if (SvIsCOW(TARG)) {
2210 assert (!force_on_match);
2214 if (force_on_match) {
2216 s = SvPV_force(TARG, len);
2221 SvSCREAM_off(TARG); /* disable possible screamer */
2223 rxtainted |= RX_MATCH_TAINTED(rx);
2224 m = orig + RX_OFFS(rx)[0].start;
2225 d = orig + RX_OFFS(rx)[0].end;
2227 if (m - s > strend - d) { /* faster to shorten from end */
2229 Copy(c, m, clen, char);
2234 Move(d, m, i, char);
2238 SvCUR_set(TARG, m - s);
2240 else if ((i = m - s)) { /* faster from front */
2243 Move(s, d - i, i, char);
2246 Copy(c, m, clen, char);
2251 Copy(c, d, clen, char);
2256 TAINT_IF(rxtainted & 1);
2262 if (iters++ > maxiters)
2263 DIE(aTHX_ "Substitution loop");
2264 rxtainted |= RX_MATCH_TAINTED(rx);
2265 m = RX_OFFS(rx)[0].start + orig;
2268 Move(s, d, i, char);
2272 Copy(c, d, clen, char);
2275 s = RX_OFFS(rx)[0].end + orig;
2276 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2278 /* don't match same null twice */
2279 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2282 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2283 Move(s, d, i+1, char); /* include the NUL */
2285 TAINT_IF(rxtainted & 1);
2289 (void)SvPOK_only_UTF8(TARG);
2290 TAINT_IF(rxtainted);
2291 if (SvSMAGICAL(TARG)) {
2299 LEAVE_SCOPE(oldsave);
2305 if (force_on_match) {
2307 s = SvPV_force(TARG, len);
2310 #ifdef PERL_OLD_COPY_ON_WRITE
2313 rxtainted |= RX_MATCH_TAINTED(rx);
2314 dstr = newSVpvn_utf8(m, s-m, DO_UTF8(TARG));
2318 register PERL_CONTEXT *cx;
2321 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2323 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2325 if (iters++ > maxiters)
2326 DIE(aTHX_ "Substitution loop");
2327 rxtainted |= RX_MATCH_TAINTED(rx);
2328 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2331 orig = RX_SUBBEG(rx);
2333 strend = s + (strend - m);
2335 m = RX_OFFS(rx)[0].start + orig;
2336 if (doutf8 && !SvUTF8(dstr))
2337 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2339 sv_catpvn(dstr, s, m-s);
2340 s = RX_OFFS(rx)[0].end + orig;
2342 sv_catpvn(dstr, c, clen);
2345 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2346 TARG, NULL, r_flags));
2347 if (doutf8 && !DO_UTF8(TARG))
2348 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2350 sv_catpvn(dstr, s, strend - s);
2352 #ifdef PERL_OLD_COPY_ON_WRITE
2353 /* The match may make the string COW. If so, brilliant, because that's
2354 just saved us one malloc, copy and free - the regexp has donated
2355 the old buffer, and we malloc an entirely new one, rather than the
2356 regexp malloc()ing a buffer and copying our original, only for
2357 us to throw it away here during the substitution. */
2358 if (SvIsCOW(TARG)) {
2359 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2365 SvPV_set(TARG, SvPVX(dstr));
2366 SvCUR_set(TARG, SvCUR(dstr));
2367 SvLEN_set(TARG, SvLEN(dstr));
2368 doutf8 |= DO_UTF8(dstr);
2369 SvPV_set(dstr, NULL);
2371 TAINT_IF(rxtainted & 1);
2375 (void)SvPOK_only(TARG);
2378 TAINT_IF(rxtainted);
2381 LEAVE_SCOPE(oldsave);
2390 LEAVE_SCOPE(oldsave);
2399 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2400 ++*PL_markstack_ptr;
2401 LEAVE_with_name("grep_item"); /* exit inner scope */
2404 if (PL_stack_base + *PL_markstack_ptr > SP) {
2406 const I32 gimme = GIMME_V;
2408 LEAVE_with_name("grep"); /* exit outer scope */
2409 (void)POPMARK; /* pop src */
2410 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2411 (void)POPMARK; /* pop dst */
2412 SP = PL_stack_base + POPMARK; /* pop original mark */
2413 if (gimme == G_SCALAR) {
2414 if (PL_op->op_private & OPpGREP_LEX) {
2415 SV* const sv = sv_newmortal();
2416 sv_setiv(sv, items);
2424 else if (gimme == G_ARRAY)
2431 ENTER_with_name("grep_item"); /* enter inner scope */
2434 src = PL_stack_base[*PL_markstack_ptr];
2436 if (PL_op->op_private & OPpGREP_LEX)
2437 PAD_SVl(PL_op->op_targ) = src;
2441 RETURNOP(cLOGOP->op_other);
2452 register PERL_CONTEXT *cx;
2455 if (CxMULTICALL(&cxstack[cxstack_ix]))
2459 cxstack_ix++; /* temporarily protect top context */
2462 if (gimme == G_SCALAR) {
2465 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2467 *MARK = SvREFCNT_inc(TOPs);
2472 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2474 *MARK = sv_mortalcopy(sv);
2479 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2483 *MARK = &PL_sv_undef;
2487 else if (gimme == G_ARRAY) {
2488 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2489 if (!SvTEMP(*MARK)) {
2490 *MARK = sv_mortalcopy(*MARK);
2491 TAINT_NOT; /* Each item is independent */
2499 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2500 PL_curpm = newpm; /* ... and pop $1 et al */
2503 return cx->blk_sub.retop;
2506 /* This duplicates the above code because the above code must not
2507 * get any slower by more conditions */
2515 register PERL_CONTEXT *cx;
2518 if (CxMULTICALL(&cxstack[cxstack_ix]))
2522 cxstack_ix++; /* temporarily protect top context */
2526 if (CxLVAL(cx) & OPpENTERSUB_INARGS) {
2527 /* We are an argument to a function or grep().
2528 * This kind of lvalueness was legal before lvalue
2529 * subroutines too, so be backward compatible:
2530 * cannot report errors. */
2532 /* Scalar context *is* possible, on the LHS of -> only,
2533 * as in f()->meth(). But this is not an lvalue. */
2534 if (gimme == G_SCALAR)
2536 if (gimme == G_ARRAY) {
2537 if (!CvLVALUE(cx->blk_sub.cv))
2538 goto temporise_array;
2539 EXTEND_MORTAL(SP - newsp);
2540 for (mark = newsp + 1; mark <= SP; mark++) {
2543 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2544 *mark = sv_mortalcopy(*mark);
2546 /* Can be a localized value subject to deletion. */
2547 PL_tmps_stack[++PL_tmps_ix] = *mark;
2548 SvREFCNT_inc_void(*mark);
2553 else if (CxLVAL(cx)) { /* Leave it as it is if we can. */
2554 /* Here we go for robustness, not for speed, so we change all
2555 * the refcounts so the caller gets a live guy. Cannot set
2556 * TEMP, so sv_2mortal is out of question. */
2557 if (!CvLVALUE(cx->blk_sub.cv)) {
2563 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2565 if (gimme == G_SCALAR) {
2569 /* Temporaries are bad unless they happen to be elements
2570 * of a tied hash or array */
2571 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2572 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2578 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2579 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2580 : "a readonly value" : "a temporary");
2582 else { /* Can be a localized value
2583 * subject to deletion. */
2584 PL_tmps_stack[++PL_tmps_ix] = *mark;
2585 SvREFCNT_inc_void(*mark);
2588 else { /* Should not happen? */
2594 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2595 (MARK > SP ? "Empty array" : "Array"));
2599 else if (gimme == G_ARRAY) {
2600 EXTEND_MORTAL(SP - newsp);
2601 for (mark = newsp + 1; mark <= SP; mark++) {
2602 if (*mark != &PL_sv_undef
2603 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2604 /* Might be flattened array after $#array = */
2611 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2612 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2615 /* Can be a localized value subject to deletion. */
2616 PL_tmps_stack[++PL_tmps_ix] = *mark;
2617 SvREFCNT_inc_void(*mark);
2623 if (gimme == G_SCALAR) {
2627 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2629 *MARK = SvREFCNT_inc(TOPs);
2634 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2636 *MARK = sv_mortalcopy(sv);
2641 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2645 *MARK = &PL_sv_undef;
2649 else if (gimme == G_ARRAY) {
2651 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2652 if (!SvTEMP(*MARK)) {
2653 *MARK = sv_mortalcopy(*MARK);
2654 TAINT_NOT; /* Each item is independent */
2663 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2664 PL_curpm = newpm; /* ... and pop $1 et al */
2667 return cx->blk_sub.retop;
2675 register PERL_CONTEXT *cx;
2677 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2680 DIE(aTHX_ "Not a CODE reference");
2681 switch (SvTYPE(sv)) {
2682 /* This is overwhelming the most common case: */
2684 if (!isGV_with_GP(sv))
2685 DIE(aTHX_ "Not a CODE reference");
2686 if (!(cv = GvCVu((const GV *)sv))) {
2688 cv = sv_2cv(sv, &stash, &gv, 0);
2700 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2702 SP = PL_stack_base + POPMARK;
2705 if (SvGMAGICAL(sv)) {
2710 sym = SvPVX_const(sv);
2718 sym = SvPV_const(sv, len);
2721 DIE(aTHX_ PL_no_usym, "a subroutine");
2722 if (PL_op->op_private & HINT_STRICT_REFS)
2723 DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
2724 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2729 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2730 tryAMAGICunDEREF(to_cv);
2732 cv = MUTABLE_CV(SvRV(sv));
2733 if (SvTYPE(cv) == SVt_PVCV)
2738 DIE(aTHX_ "Not a CODE reference");
2739 /* This is the second most common case: */
2741 cv = MUTABLE_CV(sv);
2749 if (!CvROOT(cv) && !CvXSUB(cv)) {
2753 /* anonymous or undef'd function leaves us no recourse */
2754 if (CvANON(cv) || !(gv = CvGV(cv)))
2755 DIE(aTHX_ "Undefined subroutine called");
2757 /* autoloaded stub? */
2758 if (cv != GvCV(gv)) {
2761 /* should call AUTOLOAD now? */
2764 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2771 sub_name = sv_newmortal();
2772 gv_efullname3(sub_name, gv, NULL);
2773 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2777 DIE(aTHX_ "Not a CODE reference");
2782 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2783 Perl_get_db_sub(aTHX_ &sv, cv);
2785 PL_curcopdb = PL_curcop;
2787 /* check for lsub that handles lvalue subroutines */
2788 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2789 /* if lsub not found then fall back to DB::sub */
2790 if (!cv) cv = GvCV(PL_DBsub);
2792 cv = GvCV(PL_DBsub);
2795 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2796 DIE(aTHX_ "No DB::sub routine defined");
2799 if (!(CvISXSUB(cv))) {
2800 /* This path taken at least 75% of the time */
2802 register I32 items = SP - MARK;
2803 AV* const padlist = CvPADLIST(cv);
2804 PUSHBLOCK(cx, CXt_SUB, MARK);
2806 cx->blk_sub.retop = PL_op->op_next;
2808 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2809 * that eval'' ops within this sub know the correct lexical space.
2810 * Owing the speed considerations, we choose instead to search for
2811 * the cv using find_runcv() when calling doeval().
2813 if (CvDEPTH(cv) >= 2) {
2814 PERL_STACK_OVERFLOW_CHECK();
2815 pad_push(padlist, CvDEPTH(cv));
2818 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2820 AV *const av = MUTABLE_AV(PAD_SVl(0));
2822 /* @_ is normally not REAL--this should only ever
2823 * happen when DB::sub() calls things that modify @_ */
2828 cx->blk_sub.savearray = GvAV(PL_defgv);
2829 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2830 CX_CURPAD_SAVE(cx->blk_sub);
2831 cx->blk_sub.argarray = av;
2834 if (items > AvMAX(av) + 1) {
2835 SV **ary = AvALLOC(av);
2836 if (AvARRAY(av) != ary) {
2837 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2840 if (items > AvMAX(av) + 1) {
2841 AvMAX(av) = items - 1;
2842 Renew(ary,items,SV*);
2847 Copy(MARK,AvARRAY(av),items,SV*);
2848 AvFILLp(av) = items - 1;
2856 /* warning must come *after* we fully set up the context
2857 * stuff so that __WARN__ handlers can safely dounwind()
2860 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2861 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2862 sub_crush_depth(cv);
2863 RETURNOP(CvSTART(cv));
2866 I32 markix = TOPMARK;
2871 /* Need to copy @_ to stack. Alternative may be to
2872 * switch stack to @_, and copy return values
2873 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2874 AV * const av = GvAV(PL_defgv);
2875 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2878 /* Mark is at the end of the stack. */
2880 Copy(AvARRAY(av), SP + 1, items, SV*);
2885 /* We assume first XSUB in &DB::sub is the called one. */
2887 SAVEVPTR(PL_curcop);
2888 PL_curcop = PL_curcopdb;
2891 /* Do we need to open block here? XXXX */
2893 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2895 CALL_FPTR(CvXSUB(cv))(aTHX_ cv);
2897 /* Enforce some sanity in scalar context. */
2898 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2899 if (markix > PL_stack_sp - PL_stack_base)
2900 *(PL_stack_base + markix) = &PL_sv_undef;
2902 *(PL_stack_base + markix) = *PL_stack_sp;
2903 PL_stack_sp = PL_stack_base + markix;
2911 Perl_sub_crush_depth(pTHX_ CV *cv)
2913 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2916 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2918 SV* const tmpstr = sv_newmortal();
2919 gv_efullname3(tmpstr, CvGV(cv), NULL);
2920 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2929 SV* const elemsv = POPs;
2930 IV elem = SvIV(elemsv);
2931 AV *const av = MUTABLE_AV(POPs);
2932 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2933 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2934 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2935 bool preeminent = TRUE;
2938 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2939 Perl_warner(aTHX_ packWARN(WARN_MISC),
2940 "Use of reference \"%"SVf"\" as array index",
2943 elem -= CopARYBASE_get(PL_curcop);
2944 if (SvTYPE(av) != SVt_PVAV)
2951 /* If we can determine whether the element exist,
2952 * Try to preserve the existenceness of a tied array
2953 * element by using EXISTS and DELETE if possible.
2954 * Fallback to FETCH and STORE otherwise. */
2955 if (SvCANEXISTDELETE(av))
2956 preeminent = av_exists(av, elem);
2959 svp = av_fetch(av, elem, lval && !defer);
2961 #ifdef PERL_MALLOC_WRAP
2962 if (SvUOK(elemsv)) {
2963 const UV uv = SvUV(elemsv);
2964 elem = uv > IV_MAX ? IV_MAX : uv;
2966 else if (SvNOK(elemsv))
2967 elem = (IV)SvNV(elemsv);
2969 static const char oom_array_extend[] =
2970 "Out of memory during array extend"; /* Duplicated in av.c */
2971 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2974 if (!svp || *svp == &PL_sv_undef) {
2977 DIE(aTHX_ PL_no_aelem, elem);
2978 lv = sv_newmortal();
2979 sv_upgrade(lv, SVt_PVLV);
2981 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2982 LvTARG(lv) = SvREFCNT_inc_simple(av);
2983 LvTARGOFF(lv) = elem;
2990 save_aelem(av, elem, svp);
2992 SAVEADELETE(av, elem);
2994 else if (PL_op->op_private & OPpDEREF)
2995 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2997 sv = (svp ? *svp : &PL_sv_undef);
2998 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3005 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3007 PERL_ARGS_ASSERT_VIVIFY_REF;
3012 Perl_croak(aTHX_ "%s", PL_no_modify);
3013 prepare_SV_for_RV(sv);
3016 SvRV_set(sv, newSV(0));
3019 SvRV_set(sv, MUTABLE_SV(newAV()));
3022 SvRV_set(sv, MUTABLE_SV(newHV()));
3033 SV* const sv = TOPs;
3036 SV* const rsv = SvRV(sv);
3037 if (SvTYPE(rsv) == SVt_PVCV) {
3043 SETs(method_common(sv, NULL));
3050 SV* const sv = cSVOP_sv;
3051 U32 hash = SvSHARED_HASH(sv);
3053 XPUSHs(method_common(sv, &hash));
3058 S_method_common(pTHX_ SV* meth, U32* hashp)
3064 const char* packname = NULL;
3067 SV * const sv = *(PL_stack_base + TOPMARK + 1);
3069 PERL_ARGS_ASSERT_METHOD_COMMON;
3072 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3077 ob = MUTABLE_SV(SvRV(sv));
3081 /* this isn't a reference */
3082 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3083 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3085 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3092 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3093 !(ob=MUTABLE_SV(GvIO(iogv))))
3095 /* this isn't the name of a filehandle either */
3097 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3098 ? !isIDFIRST_utf8((U8*)packname)
3099 : !isIDFIRST(*packname)
3102 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3104 SvOK(sv) ? "without a package or object reference"
3105 : "on an undefined value");
3107 /* assume it's a package name */
3108 stash = gv_stashpvn(packname, packlen, 0);
3112 SV* const ref = newSViv(PTR2IV(stash));
3113 (void)hv_store(PL_stashcache, packname, packlen, ref, 0);
3117 /* it _is_ a filehandle name -- replace with a reference */
3118 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3121 /* if we got here, ob should be a reference or a glob */
3122 if (!ob || !(SvOBJECT(ob)
3123 || (SvTYPE(ob) == SVt_PVGV
3125 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3128 const char * const name = SvPV_nolen_const(meth);
3129 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3130 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3134 stash = SvSTASH(ob);
3137 /* NOTE: stash may be null, hope hv_fetch_ent and
3138 gv_fetchmethod can cope (it seems they can) */
3140 /* shortcut for simple names */
3142 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3144 gv = MUTABLE_GV(HeVAL(he));
3145 if (isGV(gv) && GvCV(gv) &&
3146 (!GvCVGEN(gv) || GvCVGEN(gv)
3147 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3148 return MUTABLE_SV(GvCV(gv));
3152 gv = gv_fetchmethod_flags(stash ? stash : MUTABLE_HV(packsv),
3153 SvPV_nolen_const(meth),
3154 GV_AUTOLOAD | GV_CROAK);
3158 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3163 * c-indentation-style: bsd
3165 * indent-tabs-mode: t
3168 * ex: set ts=8 sts=4 sw=4 noet: