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 bool is_gv = isGV_with_GP(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 && !is_gv && 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. */
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 if (!(PL_op->op_flags & OPf_SPECIAL)) {
223 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
224 LEAVE_SCOPE(oldsave);
231 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
236 const char *rpv = NULL;
238 bool rcopied = FALSE;
240 if (TARG == right && right != left) { /* $r = $l.$r */
241 rpv = SvPV_nomg_const(right, rlen);
242 rbyte = !DO_UTF8(right);
243 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
244 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
248 if (TARG != left) { /* not $l .= $r */
250 const char* const lpv = SvPV_nomg_const(left, llen);
251 lbyte = !DO_UTF8(left);
252 sv_setpvn(TARG, lpv, llen);
258 else { /* $l .= $r */
260 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
261 report_uninit(right);
264 lbyte = (SvROK(left) && SvTYPE(SvRV(left)) == SVt_REGEXP)
265 ? !DO_UTF8(SvRV(left)) : !DO_UTF8(left);
272 /* $r.$r: do magic twice: tied might return different 2nd time */
274 rpv = SvPV_nomg_const(right, rlen);
275 rbyte = !DO_UTF8(right);
277 if (lbyte != rbyte) {
279 sv_utf8_upgrade_nomg(TARG);
282 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
283 sv_utf8_upgrade_nomg(right);
284 rpv = SvPV_nomg_const(right, rlen);
287 sv_catpvn_nomg(TARG, rpv, rlen);
298 if (PL_op->op_flags & OPf_MOD) {
299 if (PL_op->op_private & OPpLVAL_INTRO)
300 if (!(PL_op->op_private & OPpPAD_STATE))
301 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
302 if (PL_op->op_private & OPpDEREF) {
304 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
314 dSP; SvGETMAGIC(TOPs);
315 tryAMAGICunTARGET(iter, 0);
316 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
317 if (!isGV_with_GP(PL_last_in_gv)) {
318 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
319 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
322 XPUSHs(MUTABLE_SV(PL_last_in_gv));
325 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
328 return do_readline();
334 tryAMAGICbin_MG(eq_amg, AMGf_set);
335 #ifndef NV_PRESERVES_UV
336 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
338 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
342 #ifdef PERL_PRESERVE_IVUV
343 SvIV_please_nomg(TOPs);
345 /* Unless the left argument is integer in range we are going
346 to have to use NV maths. Hence only attempt to coerce the
347 right argument if we know the left is integer. */
348 SvIV_please_nomg(TOPm1s);
350 const bool auvok = SvUOK(TOPm1s);
351 const bool buvok = SvUOK(TOPs);
353 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
354 /* Casting IV to UV before comparison isn't going to matter
355 on 2s complement. On 1s complement or sign&magnitude
356 (if we have any of them) it could to make negative zero
357 differ from normal zero. As I understand it. (Need to
358 check - is negative zero implementation defined behaviour
360 const UV buv = SvUVX(POPs);
361 const UV auv = SvUVX(TOPs);
363 SETs(boolSV(auv == buv));
366 { /* ## Mixed IV,UV ## */
370 /* == is commutative so doesn't matter which is left or right */
372 /* top of stack (b) is the iv */
381 /* As uv is a UV, it's >0, so it cannot be == */
384 /* we know iv is >= 0 */
385 SETs(boolSV((UV)iv == SvUVX(uvp)));
392 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
394 if (Perl_isnan(left) || Perl_isnan(right))
396 SETs(boolSV(left == right));
399 SETs(boolSV(SvNV_nomg(TOPs) == value));
408 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
409 Perl_croak_no_modify(aTHX);
410 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
411 && SvIVX(TOPs) != IV_MAX)
413 SvIV_set(TOPs, SvIVX(TOPs) + 1);
414 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
416 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
429 if (PL_op->op_type == OP_OR)
431 RETURNOP(cLOGOP->op_other);
440 const int op_type = PL_op->op_type;
441 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
446 if (!sv || !SvANY(sv)) {
447 if (op_type == OP_DOR)
449 RETURNOP(cLOGOP->op_other);
455 if (!sv || !SvANY(sv))
460 switch (SvTYPE(sv)) {
462 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
466 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
470 if (CvROOT(sv) || CvXSUB(sv))
483 if(op_type == OP_DOR)
485 RETURNOP(cLOGOP->op_other);
487 /* assuming OP_DEFINED */
495 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
496 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
500 useleft = USE_LEFT(svl);
501 #ifdef PERL_PRESERVE_IVUV
502 /* We must see if we can perform the addition with integers if possible,
503 as the integer code detects overflow while the NV code doesn't.
504 If either argument hasn't had a numeric conversion yet attempt to get
505 the IV. It's important to do this now, rather than just assuming that
506 it's not IOK as a PV of "9223372036854775806" may not take well to NV
507 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
508 integer in case the second argument is IV=9223372036854775806
509 We can (now) rely on sv_2iv to do the right thing, only setting the
510 public IOK flag if the value in the NV (or PV) slot is truly integer.
512 A side effect is that this also aggressively prefers integer maths over
513 fp maths for integer values.
515 How to detect overflow?
517 C 99 section 6.2.6.1 says
519 The range of nonnegative values of a signed integer type is a subrange
520 of the corresponding unsigned integer type, and the representation of
521 the same value in each type is the same. A computation involving
522 unsigned operands can never overflow, because a result that cannot be
523 represented by the resulting unsigned integer type is reduced modulo
524 the number that is one greater than the largest value that can be
525 represented by the resulting type.
529 which I read as "unsigned ints wrap."
531 signed integer overflow seems to be classed as "exception condition"
533 If an exceptional condition occurs during the evaluation of an
534 expression (that is, if the result is not mathematically defined or not
535 in the range of representable values for its type), the behavior is
538 (6.5, the 5th paragraph)
540 I had assumed that on 2s complement machines signed arithmetic would
541 wrap, hence coded pp_add and pp_subtract on the assumption that
542 everything perl builds on would be happy. After much wailing and
543 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
544 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
545 unsigned code below is actually shorter than the old code. :-)
548 SvIV_please_nomg(svr);
551 /* Unless the left argument is integer in range we are going to have to
552 use NV maths. Hence only attempt to coerce the right argument if
553 we know the left is integer. */
561 /* left operand is undef, treat as zero. + 0 is identity,
562 Could SETi or SETu right now, but space optimise by not adding
563 lots of code to speed up what is probably a rarish case. */
565 /* Left operand is defined, so is it IV? */
566 SvIV_please_nomg(svl);
568 if ((auvok = SvUOK(svl)))
571 register const IV aiv = SvIVX(svl);
574 auvok = 1; /* Now acting as a sign flag. */
575 } else { /* 2s complement assumption for IV_MIN */
583 bool result_good = 0;
586 bool buvok = SvUOK(svr);
591 register const IV biv = SvIVX(svr);
598 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
599 else "IV" now, independent of how it came in.
600 if a, b represents positive, A, B negative, a maps to -A etc
605 all UV maths. negate result if A negative.
606 add if signs same, subtract if signs differ. */
612 /* Must get smaller */
618 /* result really should be -(auv-buv). as its negation
619 of true value, need to swap our result flag */
636 if (result <= (UV)IV_MIN)
639 /* result valid, but out of range for IV. */
644 } /* Overflow, drop through to NVs. */
649 NV value = SvNV_nomg(svr);
652 /* left operand is undef, treat as zero. + 0.0 is identity. */
656 SETn( value + SvNV_nomg(svl) );
664 AV * const av = PL_op->op_flags & OPf_SPECIAL
665 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAV(cGVOP_gv);
666 const U32 lval = PL_op->op_flags & OPf_MOD;
667 SV** const svp = av_fetch(av, PL_op->op_private, lval);
668 SV *sv = (svp ? *svp : &PL_sv_undef);
670 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
678 dVAR; dSP; dMARK; dTARGET;
680 do_join(TARG, *MARK, MARK, SP);
691 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
692 * will be enough to hold an OP*.
694 SV* const sv = sv_newmortal();
695 sv_upgrade(sv, SVt_PVLV);
697 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
700 XPUSHs(MUTABLE_SV(PL_op));
705 /* Oversized hot code. */
709 dVAR; dSP; dMARK; dORIGMARK;
714 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
716 if (gv && (io = GvIO(gv))
717 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
720 if (MARK == ORIGMARK) {
721 /* If using default handle then we need to make space to
722 * pass object as 1st arg, so move other args up ...
726 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
730 *MARK = SvTIED_obj(MUTABLE_SV(io), mg);
732 ENTER_with_name("call_PRINT");
733 if( PL_op->op_type == OP_SAY ) {
734 /* local $\ = "\n" */
735 SAVEGENERICSV(PL_ors_sv);
736 PL_ors_sv = newSVpvs("\n");
738 call_method("PRINT", G_SCALAR);
739 LEAVE_with_name("call_PRINT");
746 if (!(io = GvIO(gv))) {
747 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
748 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
750 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
751 report_evil_fh(gv, io, PL_op->op_type);
752 SETERRNO(EBADF,RMS_IFI);
755 else if (!(fp = IoOFP(io))) {
756 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
758 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
759 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
760 report_evil_fh(gv, io, PL_op->op_type);
762 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
766 SV * const ofs = GvSV(PL_ofsgv); /* $, */
768 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
770 if (!do_print(*MARK, fp))
774 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
775 if (!do_print(GvSV(PL_ofsgv), fp)) {
784 if (!do_print(*MARK, fp))
792 if (PL_op->op_type == OP_SAY) {
793 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
796 else if (PL_ors_sv && SvOK(PL_ors_sv))
797 if (!do_print(PL_ors_sv, fp)) /* $\ */
800 if (IoFLAGS(io) & IOf_FLUSH)
801 if (PerlIO_flush(fp) == EOF)
811 XPUSHs(&PL_sv_undef);
818 const I32 gimme = GIMME_V;
819 static const char an_array[] = "an ARRAY";
820 static const char a_hash[] = "a HASH";
821 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
822 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
824 if (!(PL_op->op_private & OPpDEREFed))
827 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
830 if (SvTYPE(sv) != type)
831 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
832 if (PL_op->op_flags & OPf_REF) {
837 if (gimme != G_ARRAY)
838 goto croak_cant_return;
842 else if (PL_op->op_flags & OPf_MOD
843 && PL_op->op_private & OPpLVAL_INTRO)
844 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
847 if (SvTYPE(sv) == type) {
848 if (PL_op->op_flags & OPf_REF) {
853 if (gimme != G_ARRAY)
854 goto croak_cant_return;
862 if (!isGV_with_GP(sv)) {
863 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
871 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
872 if (PL_op->op_private & OPpLVAL_INTRO)
873 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
874 if (PL_op->op_flags & OPf_REF) {
879 if (gimme != G_ARRAY)
880 goto croak_cant_return;
888 AV *const av = MUTABLE_AV(sv);
889 /* The guts of pp_rv2av, with no intenting change to preserve history
890 (until such time as we get tools that can do blame annotation across
891 whitespace changes. */
892 if (gimme == G_ARRAY) {
893 const I32 maxarg = AvFILL(av) + 1;
894 (void)POPs; /* XXXX May be optimized away? */
896 if (SvRMAGICAL(av)) {
898 for (i=0; i < (U32)maxarg; i++) {
899 SV ** const svp = av_fetch(av, i, FALSE);
900 /* See note in pp_helem, and bug id #27839 */
902 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
907 Copy(AvARRAY(av), SP+1, maxarg, SV*);
911 else if (gimme == G_SCALAR) {
913 const I32 maxarg = AvFILL(av) + 1;
917 /* The guts of pp_rv2hv */
918 if (gimme == G_ARRAY) { /* array wanted */
922 else if (gimme == G_SCALAR) {
924 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
932 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
933 is_pp_rv2av ? "array" : "hash");
938 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
942 PERL_ARGS_ASSERT_DO_ODDBALL;
948 if (ckWARN(WARN_MISC)) {
950 if (relem == firstrelem &&
952 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
953 SvTYPE(SvRV(*relem)) == SVt_PVHV))
955 err = "Reference found where even-sized list expected";
958 err = "Odd number of elements in hash assignment";
959 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
963 didstore = hv_store_ent(hash,*relem,tmpstr,0);
964 if (SvMAGICAL(hash)) {
965 if (SvSMAGICAL(tmpstr))
977 SV **lastlelem = PL_stack_sp;
978 SV **lastrelem = PL_stack_base + POPMARK;
979 SV **firstrelem = PL_stack_base + POPMARK + 1;
980 SV **firstlelem = lastrelem + 1;
993 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
995 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
998 /* If there's a common identifier on both sides we have to take
999 * special care that assigning the identifier on the left doesn't
1000 * clobber a value on the right that's used later in the list.
1002 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1003 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1004 for (relem = firstrelem; relem <= lastrelem; relem++) {
1005 if ((sv = *relem)) {
1006 TAINT_NOT; /* Each item is independent */
1008 /* Dear TODO test in t/op/sort.t, I love you.
1009 (It's relying on a panic, not a "semi-panic" from newSVsv()
1010 and then an assertion failure below.) */
1011 if (SvIS_FREED(sv)) {
1012 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1015 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
1016 and we need a second copy of a temp here. */
1017 *relem = sv_2mortal(newSVsv(sv));
1027 while (lelem <= lastlelem) {
1028 TAINT_NOT; /* Each item stands on its own, taintwise. */
1030 switch (SvTYPE(sv)) {
1032 ary = MUTABLE_AV(sv);
1033 magic = SvMAGICAL(ary) != 0;
1035 av_extend(ary, lastrelem - relem);
1037 while (relem <= lastrelem) { /* gobble up all the rest */
1041 sv_setsv(sv, *relem);
1043 didstore = av_store(ary,i++,sv);
1052 if (PL_delaymagic & DM_ARRAY_ISA)
1053 SvSETMAGIC(MUTABLE_SV(ary));
1055 case SVt_PVHV: { /* normal hash */
1057 SV** topelem = relem;
1059 hash = MUTABLE_HV(sv);
1060 magic = SvMAGICAL(hash) != 0;
1062 firsthashrelem = relem;
1064 while (relem < lastrelem) { /* gobble up all the rest */
1066 sv = *relem ? *relem : &PL_sv_no;
1070 sv_setsv(tmpstr,*relem); /* value */
1072 if (gimme != G_VOID) {
1073 if (hv_exists_ent(hash, sv, 0))
1074 /* key overwrites an existing entry */
1077 if (gimme == G_ARRAY) {
1078 /* copy element back: possibly to an earlier
1079 * stack location if we encountered dups earlier */
1081 *topelem++ = tmpstr;
1084 didstore = hv_store_ent(hash,sv,tmpstr,0);
1086 if (SvSMAGICAL(tmpstr))
1093 if (relem == lastrelem) {
1094 do_oddball(hash, relem, firstrelem);
1100 if (SvIMMORTAL(sv)) {
1101 if (relem <= lastrelem)
1105 if (relem <= lastrelem) {
1106 sv_setsv(sv, *relem);
1110 sv_setsv(sv, &PL_sv_undef);
1115 if (PL_delaymagic & ~DM_DELAY) {
1116 if (PL_delaymagic & DM_UID) {
1117 #ifdef HAS_SETRESUID
1118 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1119 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1122 # ifdef HAS_SETREUID
1123 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1124 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1127 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1128 (void)setruid(PL_uid);
1129 PL_delaymagic &= ~DM_RUID;
1131 # endif /* HAS_SETRUID */
1133 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1134 (void)seteuid(PL_euid);
1135 PL_delaymagic &= ~DM_EUID;
1137 # endif /* HAS_SETEUID */
1138 if (PL_delaymagic & DM_UID) {
1139 if (PL_uid != PL_euid)
1140 DIE(aTHX_ "No setreuid available");
1141 (void)PerlProc_setuid(PL_uid);
1143 # endif /* HAS_SETREUID */
1144 #endif /* HAS_SETRESUID */
1145 PL_uid = PerlProc_getuid();
1146 PL_euid = PerlProc_geteuid();
1148 if (PL_delaymagic & DM_GID) {
1149 #ifdef HAS_SETRESGID
1150 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1151 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1154 # ifdef HAS_SETREGID
1155 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1156 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1159 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1160 (void)setrgid(PL_gid);
1161 PL_delaymagic &= ~DM_RGID;
1163 # endif /* HAS_SETRGID */
1165 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1166 (void)setegid(PL_egid);
1167 PL_delaymagic &= ~DM_EGID;
1169 # endif /* HAS_SETEGID */
1170 if (PL_delaymagic & DM_GID) {
1171 if (PL_gid != PL_egid)
1172 DIE(aTHX_ "No setregid available");
1173 (void)PerlProc_setgid(PL_gid);
1175 # endif /* HAS_SETREGID */
1176 #endif /* HAS_SETRESGID */
1177 PL_gid = PerlProc_getgid();
1178 PL_egid = PerlProc_getegid();
1180 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1184 if (gimme == G_VOID)
1185 SP = firstrelem - 1;
1186 else if (gimme == G_SCALAR) {
1189 SETi(lastrelem - firstrelem + 1 - duplicates);
1196 /* at this point we have removed the duplicate key/value
1197 * pairs from the stack, but the remaining values may be
1198 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1199 * the (a 2), but the stack now probably contains
1200 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1201 * obliterates the earlier key. So refresh all values. */
1202 lastrelem -= duplicates;
1203 relem = firsthashrelem;
1204 while (relem < lastrelem) {
1207 he = hv_fetch_ent(hash, sv, 0, 0);
1208 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1214 SP = firstrelem + (lastlelem - firstlelem);
1215 lelem = firstlelem + (relem - firstrelem);
1217 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1226 register PMOP * const pm = cPMOP;
1227 REGEXP * rx = PM_GETRE(pm);
1228 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1229 SV * const rv = sv_newmortal();
1231 SvUPGRADE(rv, SVt_IV);
1232 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1233 loathe to use it here, but it seems to be the right fix. Or close.
1234 The key part appears to be that it's essential for pp_qr to return a new
1235 object (SV), which implies that there needs to be an effective way to
1236 generate a new SV from the existing SV that is pre-compiled in the
1238 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1242 HV *const stash = gv_stashsv(pkg, GV_ADD);
1244 (void)sv_bless(rv, stash);
1247 if (RX_EXTFLAGS(rx) & RXf_TAINTED)
1256 register PMOP *pm = cPMOP;
1258 register const char *t;
1259 register const char *s;
1262 U8 r_flags = REXEC_CHECKED;
1263 const char *truebase; /* Start of string */
1264 register 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
1307 if (gimme == G_ARRAY)
1314 /* empty pattern special-cased to use last successful pattern if possible */
1315 if (!RX_PRELEN(rx) && PL_curpm) {
1320 if (RX_MINLEN(rx) > (I32)len)
1325 /* XXXX What part of this is needed with true \G-support? */
1326 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1327 RX_OFFS(rx)[0].start = -1;
1328 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1329 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1330 if (mg && mg->mg_len >= 0) {
1331 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1332 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1333 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1334 r_flags |= REXEC_IGNOREPOS;
1335 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1336 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1339 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1340 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1341 update_minmatch = 0;
1345 /* XXX: comment out !global get safe $1 vars after a
1346 match, BUT be aware that this leads to dramatic slowdowns on
1347 /g matches against large strings. So far a solution to this problem
1348 appears to be quite tricky.
1349 Test for the unsafe vars are TODO for now. */
1350 if ( (!global && RX_NPARENS(rx))
1351 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1352 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1353 r_flags |= REXEC_COPY_STR;
1355 r_flags |= REXEC_SCREAM;
1358 if (global && RX_OFFS(rx)[0].start != -1) {
1359 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1360 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1362 if (update_minmatch++)
1363 minmatch = had_zerolen;
1365 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1366 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1367 /* FIXME - can PL_bostr be made const char *? */
1368 PL_bostr = (char *)truebase;
1369 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1373 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1375 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1376 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
1377 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
1378 && (r_flags & REXEC_SCREAM)))
1379 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1382 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1383 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1386 if (dynpm->op_pmflags & PMf_ONCE) {
1388 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1390 dynpm->op_pmflags |= PMf_USED;
1401 RX_MATCH_TAINTED_on(rx);
1402 TAINT_IF(RX_MATCH_TAINTED(rx));
1403 if (gimme == G_ARRAY) {
1404 const I32 nparens = RX_NPARENS(rx);
1405 I32 i = (global && !nparens) ? 1 : 0;
1407 SPAGAIN; /* EVAL blocks could move the stack. */
1408 EXTEND(SP, nparens + i);
1409 EXTEND_MORTAL(nparens + i);
1410 for (i = !i; i <= nparens; i++) {
1411 PUSHs(sv_newmortal());
1412 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1413 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1414 s = RX_OFFS(rx)[i].start + truebase;
1415 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1416 len < 0 || len > strend - s)
1417 DIE(aTHX_ "panic: pp_match start/end pointers");
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 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1547 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
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 register IO * const io = GvIO(PL_last_in_gv);
1575 register const I32 type = PL_op->op_type;
1576 const I32 gimme = GIMME_V;
1579 MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1582 XPUSHs(SvTIED_obj(MUTABLE_SV(io), mg));
1584 ENTER_with_name("call_READLINE");
1585 call_method("READLINE", gimme);
1586 LEAVE_with_name("call_READLINE");
1588 if (gimme == G_SCALAR) {
1589 SV* const result = POPs;
1590 SvSetSV_nosteal(TARG, result);
1600 if (IoFLAGS(io) & IOf_ARGV) {
1601 if (IoFLAGS(io) & IOf_START) {
1603 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1604 IoFLAGS(io) &= ~IOf_START;
1605 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1606 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1607 SvSETMAGIC(GvSV(PL_last_in_gv));
1612 fp = nextargv(PL_last_in_gv);
1613 if (!fp) { /* Note: fp != IoIFP(io) */
1614 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1617 else if (type == OP_GLOB)
1618 fp = Perl_start_glob(aTHX_ POPs, io);
1620 else if (type == OP_GLOB)
1622 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1623 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1627 if ((!io || !(IoFLAGS(io) & IOf_START))
1628 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1630 if (type == OP_GLOB)
1631 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1632 "glob failed (can't start child: %s)",
1635 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1637 if (gimme == G_SCALAR) {
1638 /* undef TARG, and push that undefined value */
1639 if (type != OP_RCATLINE) {
1640 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1648 if (gimme == G_SCALAR) {
1650 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1653 if (type == OP_RCATLINE)
1654 SvPV_force_nolen(sv);
1658 else if (isGV_with_GP(sv)) {
1659 SvPV_force_nolen(sv);
1661 SvUPGRADE(sv, SVt_PV);
1662 tmplen = SvLEN(sv); /* remember if already alloced */
1663 if (!tmplen && !SvREADONLY(sv)) {
1664 /* try short-buffering it. Please update t/op/readline.t
1665 * if you change the growth length.
1670 if (type == OP_RCATLINE && SvOK(sv)) {
1672 SvPV_force_nolen(sv);
1678 sv = sv_2mortal(newSV(80));
1682 /* This should not be marked tainted if the fp is marked clean */
1683 #define MAYBE_TAINT_LINE(io, sv) \
1684 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1689 /* delay EOF state for a snarfed empty file */
1690 #define SNARF_EOF(gimme,rs,io,sv) \
1691 (gimme != G_SCALAR || SvCUR(sv) \
1692 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1696 if (!sv_gets(sv, fp, offset)
1698 || SNARF_EOF(gimme, PL_rs, io, sv)
1699 || PerlIO_error(fp)))
1701 PerlIO_clearerr(fp);
1702 if (IoFLAGS(io) & IOf_ARGV) {
1703 fp = nextargv(PL_last_in_gv);
1706 (void)do_close(PL_last_in_gv, FALSE);
1708 else if (type == OP_GLOB) {
1709 if (!do_close(PL_last_in_gv, FALSE)) {
1710 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1711 "glob failed (child exited with status %d%s)",
1712 (int)(STATUS_CURRENT >> 8),
1713 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1716 if (gimme == G_SCALAR) {
1717 if (type != OP_RCATLINE) {
1718 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1724 MAYBE_TAINT_LINE(io, sv);
1727 MAYBE_TAINT_LINE(io, sv);
1729 IoFLAGS(io) |= IOf_NOLINE;
1733 if (type == OP_GLOB) {
1736 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1737 char * const tmps = SvEND(sv) - 1;
1738 if (*tmps == *SvPVX_const(PL_rs)) {
1740 SvCUR_set(sv, SvCUR(sv) - 1);
1743 for (t1 = SvPVX_const(sv); *t1; t1++)
1744 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1745 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1747 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1748 (void)POPs; /* Unmatched wildcard? Chuck it... */
1751 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1752 if (ckWARN(WARN_UTF8)) {
1753 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1754 const STRLEN len = SvCUR(sv) - offset;
1757 if (!is_utf8_string_loc(s, len, &f))
1758 /* Emulate :encoding(utf8) warning in the same case. */
1759 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1760 "utf8 \"\\x%02X\" does not map to Unicode",
1761 f < (U8*)SvEND(sv) ? *f : 0);
1764 if (gimme == G_ARRAY) {
1765 if (SvLEN(sv) - SvCUR(sv) > 20) {
1766 SvPV_shrink_to_cur(sv);
1768 sv = sv_2mortal(newSV(80));
1771 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1772 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1773 const STRLEN new_len
1774 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1775 SvPV_renew(sv, new_len);
1784 register PERL_CONTEXT *cx;
1785 I32 gimme = OP_GIMME(PL_op, -1);
1788 if (cxstack_ix >= 0) {
1789 /* If this flag is set, we're just inside a return, so we should
1790 * store the caller's context */
1791 gimme = (PL_op->op_flags & OPf_SPECIAL)
1793 : cxstack[cxstack_ix].blk_gimme;
1798 ENTER_with_name("block");
1801 PUSHBLOCK(cx, CXt_BLOCK, SP);
1811 SV * const keysv = POPs;
1812 HV * const hv = MUTABLE_HV(POPs);
1813 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1814 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1816 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1817 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1818 bool preeminent = TRUE;
1820 if (SvTYPE(hv) != SVt_PVHV)
1827 /* If we can determine whether the element exist,
1828 * Try to preserve the existenceness of a tied hash
1829 * element by using EXISTS and DELETE if possible.
1830 * Fallback to FETCH and STORE otherwise. */
1831 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1832 preeminent = hv_exists_ent(hv, keysv, 0);
1835 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1836 svp = he ? &HeVAL(he) : NULL;
1838 if (!svp || *svp == &PL_sv_undef) {
1842 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1844 lv = sv_newmortal();
1845 sv_upgrade(lv, SVt_PVLV);
1847 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1848 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1849 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1855 if (HvNAME_get(hv) && isGV(*svp))
1856 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1857 else if (preeminent)
1858 save_helem_flags(hv, keysv, svp,
1859 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1861 SAVEHDELETE(hv, keysv);
1863 else if (PL_op->op_private & OPpDEREF)
1864 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1866 sv = (svp ? *svp : &PL_sv_undef);
1867 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1868 * was to make C<local $tied{foo} = $tied{foo}> possible.
1869 * However, it seems no longer to be needed for that purpose, and
1870 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1871 * would loop endlessly since the pos magic is getting set on the
1872 * mortal copy and lost. However, the copy has the effect of
1873 * triggering the get magic, and losing it altogether made things like
1874 * c<$tied{foo};> in void context no longer do get magic, which some
1875 * code relied on. Also, delayed triggering of magic on @+ and friends
1876 * meant the original regex may be out of scope by now. So as a
1877 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1878 * being called too many times). */
1879 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1888 register PERL_CONTEXT *cx;
1893 if (PL_op->op_flags & OPf_SPECIAL) {
1894 cx = &cxstack[cxstack_ix];
1895 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1900 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
1903 if (gimme == G_VOID)
1905 else if (gimme == G_SCALAR) {
1909 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1912 *MARK = sv_mortalcopy(TOPs);
1915 *MARK = &PL_sv_undef;
1919 else if (gimme == G_ARRAY) {
1920 /* in case LEAVE wipes old return values */
1922 for (mark = newsp + 1; mark <= SP; mark++) {
1923 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1924 *mark = sv_mortalcopy(*mark);
1925 TAINT_NOT; /* Each item is independent */
1929 PL_curpm = newpm; /* Don't pop $1 et al till now */
1931 LEAVE_with_name("block");
1939 register PERL_CONTEXT *cx;
1942 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1943 bool av_is_stack = FALSE;
1946 cx = &cxstack[cxstack_ix];
1947 if (!CxTYPE_is_LOOP(cx))
1948 DIE(aTHX_ "panic: pp_iter");
1950 itersvp = CxITERVAR(cx);
1951 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1952 /* string increment */
1953 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1954 SV *end = cx->blk_loop.state_u.lazysv.end;
1955 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1956 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1958 const char *max = SvPV_const(end, maxlen);
1959 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1960 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1961 /* safe to reuse old SV */
1962 sv_setsv(*itersvp, cur);
1966 /* we need a fresh SV every time so that loop body sees a
1967 * completely new SV for closures/references to work as
1970 *itersvp = newSVsv(cur);
1971 SvREFCNT_dec(oldsv);
1973 if (strEQ(SvPVX_const(cur), max))
1974 sv_setiv(cur, 0); /* terminate next time */
1981 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1982 /* integer increment */
1983 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1986 /* don't risk potential race */
1987 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1988 /* safe to reuse old SV */
1989 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1993 /* we need a fresh SV every time so that loop body sees a
1994 * completely new SV for closures/references to work as they
1997 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
1998 SvREFCNT_dec(oldsv);
2001 /* Handle end of range at IV_MAX */
2002 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
2003 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
2005 cx->blk_loop.state_u.lazyiv.cur++;
2006 cx->blk_loop.state_u.lazyiv.end++;
2013 assert(CxTYPE(cx) == CXt_LOOP_FOR);
2014 av = cx->blk_loop.state_u.ary.ary;
2019 if (PL_op->op_private & OPpITER_REVERSED) {
2020 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
2021 ? cx->blk_loop.resetsp + 1 : 0))
2024 if (SvMAGICAL(av) || AvREIFY(av)) {
2025 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
2026 sv = svp ? *svp : NULL;
2029 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
2033 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
2037 if (SvMAGICAL(av) || AvREIFY(av)) {
2038 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
2039 sv = svp ? *svp : NULL;
2042 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
2046 if (sv && SvIS_FREED(sv)) {
2048 Perl_croak(aTHX_ "Use of freed value in iteration");
2053 SvREFCNT_inc_simple_void_NN(sv);
2057 if (!av_is_stack && sv == &PL_sv_undef) {
2058 SV *lv = newSV_type(SVt_PVLV);
2060 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2061 LvTARG(lv) = SvREFCNT_inc_simple(av);
2062 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
2063 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2069 SvREFCNT_dec(oldsv);
2077 register PMOP *pm = cPMOP;
2092 register REGEXP *rx = PM_GETRE(pm);
2094 int force_on_match = 0;
2095 const I32 oldsave = PL_savestack_ix;
2097 bool doutf8 = FALSE;
2099 #ifdef PERL_OLD_COPY_ON_WRITE
2103 /* known replacement string? */
2104 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2108 if (PL_op->op_flags & OPf_STACKED)
2110 else if (PL_op->op_private & OPpTARGET_MY)
2117 /* In non-destructive replacement mode, duplicate target scalar so it
2118 * remains unchanged. */
2119 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2120 TARG = newSVsv(TARG);
2122 #ifdef PERL_OLD_COPY_ON_WRITE
2123 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2124 because they make integers such as 256 "false". */
2125 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2128 sv_force_normal_flags(TARG,0);
2131 #ifdef PERL_OLD_COPY_ON_WRITE
2135 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2136 || SvTYPE(TARG) > SVt_PVLV)
2137 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2138 Perl_croak_no_modify(aTHX);
2142 s = SvPV_mutable(TARG, len);
2143 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2145 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
2146 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2151 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2155 DIE(aTHX_ "panic: pp_subst");
2158 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2159 maxiters = 2 * slen + 10; /* We can match twice at each
2160 position, once with zero-length,
2161 second time with non-zero. */
2163 if (!RX_PRELEN(rx) && PL_curpm) {
2167 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2168 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2169 ? REXEC_COPY_STR : 0;
2171 r_flags |= REXEC_SCREAM;
2174 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2176 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2180 /* How to do it in subst? */
2181 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2183 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY)
2184 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
2185 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
2186 && (r_flags & REXEC_SCREAM))))
2191 /* only replace once? */
2192 once = !(rpm->op_pmflags & PMf_GLOBAL);
2193 matched = CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2194 r_flags | REXEC_CHECKED);
2195 /* known replacement string? */
2198 /* Upgrade the source if the replacement is utf8 but the source is not,
2199 * but only if it matched; see
2200 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2202 if (matched && DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2203 const STRLEN new_len = sv_utf8_upgrade(TARG);
2205 /* If the lengths are the same, the pattern contains only
2206 * invariants, can keep going; otherwise, various internal markers
2207 * could be off, so redo */
2208 if (new_len != len) {
2213 /* replacement needing upgrading? */
2214 if (DO_UTF8(TARG) && !doutf8) {
2215 nsv = sv_newmortal();
2218 sv_recode_to_utf8(nsv, PL_encoding);
2220 sv_utf8_upgrade(nsv);
2221 c = SvPV_const(nsv, clen);
2225 c = SvPV_const(dstr, clen);
2226 doutf8 = DO_UTF8(dstr);
2234 /* can do inplace substitution? */
2236 #ifdef PERL_OLD_COPY_ON_WRITE
2239 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2240 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2241 && (!doutf8 || SvUTF8(TARG))) {
2245 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2249 LEAVE_SCOPE(oldsave);
2252 #ifdef PERL_OLD_COPY_ON_WRITE
2253 if (SvIsCOW(TARG)) {
2254 assert (!force_on_match);
2258 if (force_on_match) {
2260 s = SvPV_force(TARG, len);
2265 SvSCREAM_off(TARG); /* disable possible screamer */
2267 rxtainted |= RX_MATCH_TAINTED(rx);
2268 m = orig + RX_OFFS(rx)[0].start;
2269 d = orig + RX_OFFS(rx)[0].end;
2271 if (m - s > strend - d) { /* faster to shorten from end */
2273 Copy(c, m, clen, char);
2278 Move(d, m, i, char);
2282 SvCUR_set(TARG, m - s);
2284 else if ((i = m - s)) { /* faster from front */
2287 Move(s, d - i, i, char);
2290 Copy(c, m, clen, char);
2295 Copy(c, d, clen, char);
2300 TAINT_IF(rxtainted & 1);
2302 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2309 if (iters++ > maxiters)
2310 DIE(aTHX_ "Substitution loop");
2311 rxtainted |= RX_MATCH_TAINTED(rx);
2312 m = RX_OFFS(rx)[0].start + orig;
2315 Move(s, d, i, char);
2319 Copy(c, d, clen, char);
2322 s = RX_OFFS(rx)[0].end + orig;
2323 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2325 /* don't match same null twice */
2326 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2329 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2330 Move(s, d, i+1, char); /* include the NUL */
2332 TAINT_IF(rxtainted & 1);
2334 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2339 (void)SvPOK_only_UTF8(TARG);
2340 TAINT_IF(rxtainted);
2341 if (SvSMAGICAL(TARG)) {
2349 LEAVE_SCOPE(oldsave);
2355 if (force_on_match) {
2357 s = SvPV_force(TARG, len);
2360 #ifdef PERL_OLD_COPY_ON_WRITE
2363 rxtainted |= RX_MATCH_TAINTED(rx);
2364 dstr = newSVpvn_utf8(m, s-m, DO_UTF8(TARG));
2368 register PERL_CONTEXT *cx;
2371 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2373 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2375 if (iters++ > maxiters)
2376 DIE(aTHX_ "Substitution loop");
2377 rxtainted |= RX_MATCH_TAINTED(rx);
2378 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2381 orig = RX_SUBBEG(rx);
2383 strend = s + (strend - m);
2385 m = RX_OFFS(rx)[0].start + orig;
2386 if (doutf8 && !SvUTF8(dstr))
2387 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2389 sv_catpvn(dstr, s, m-s);
2390 s = RX_OFFS(rx)[0].end + orig;
2392 sv_catpvn(dstr, c, clen);
2395 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2396 TARG, NULL, r_flags));
2397 if (doutf8 && !DO_UTF8(TARG))
2398 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2400 sv_catpvn(dstr, s, strend - s);
2402 #ifdef PERL_OLD_COPY_ON_WRITE
2403 /* The match may make the string COW. If so, brilliant, because that's
2404 just saved us one malloc, copy and free - the regexp has donated
2405 the old buffer, and we malloc an entirely new one, rather than the
2406 regexp malloc()ing a buffer and copying our original, only for
2407 us to throw it away here during the substitution. */
2408 if (SvIsCOW(TARG)) {
2409 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2415 SvPV_set(TARG, SvPVX(dstr));
2416 SvCUR_set(TARG, SvCUR(dstr));
2417 SvLEN_set(TARG, SvLEN(dstr));
2418 doutf8 |= DO_UTF8(dstr);
2419 SvPV_set(dstr, NULL);
2421 TAINT_IF(rxtainted & 1);
2423 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2428 (void)SvPOK_only(TARG);
2431 TAINT_IF(rxtainted);
2434 LEAVE_SCOPE(oldsave);
2442 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2446 LEAVE_SCOPE(oldsave);
2455 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2456 ++*PL_markstack_ptr;
2458 LEAVE_with_name("grep_item"); /* exit inner scope */
2461 if (PL_stack_base + *PL_markstack_ptr > SP) {
2463 const I32 gimme = GIMME_V;
2465 LEAVE_with_name("grep"); /* exit outer scope */
2466 (void)POPMARK; /* pop src */
2467 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2468 (void)POPMARK; /* pop dst */
2469 SP = PL_stack_base + POPMARK; /* pop original mark */
2470 if (gimme == G_SCALAR) {
2471 if (PL_op->op_private & OPpGREP_LEX) {
2472 SV* const sv = sv_newmortal();
2473 sv_setiv(sv, items);
2481 else if (gimme == G_ARRAY)
2488 ENTER_with_name("grep_item"); /* enter inner scope */
2491 src = PL_stack_base[*PL_markstack_ptr];
2493 if (PL_op->op_private & OPpGREP_LEX)
2494 PAD_SVl(PL_op->op_targ) = src;
2498 RETURNOP(cLOGOP->op_other);
2509 register PERL_CONTEXT *cx;
2512 if (CxMULTICALL(&cxstack[cxstack_ix]))
2516 cxstack_ix++; /* temporarily protect top context */
2519 if (gimme == G_SCALAR) {
2522 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2524 *MARK = SvREFCNT_inc(TOPs);
2529 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2531 *MARK = sv_mortalcopy(sv);
2536 *MARK = SvTEMP(TOPs) ? TOPs : 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)) {
2547 *MARK = sv_mortalcopy(*MARK);
2548 TAINT_NOT; /* Each item is independent */
2556 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2557 PL_curpm = newpm; /* ... and pop $1 et al */
2560 return cx->blk_sub.retop;
2563 /* This duplicates the above code because the above code must not
2564 * get any slower by more conditions */
2572 register PERL_CONTEXT *cx;
2575 if (CxMULTICALL(&cxstack[cxstack_ix]))
2579 cxstack_ix++; /* temporarily protect top context */
2583 if (CxLVAL(cx) & OPpENTERSUB_INARGS) {
2584 /* We are an argument to a function or grep().
2585 * This kind of lvalueness was legal before lvalue
2586 * subroutines too, so be backward compatible:
2587 * cannot report errors. */
2589 /* Scalar context *is* possible, on the LHS of -> only,
2590 * as in f()->meth(). But this is not an lvalue. */
2591 if (gimme == G_SCALAR)
2593 if (gimme == G_ARRAY) {
2594 if (!CvLVALUE(cx->blk_sub.cv))
2595 goto temporise_array;
2596 EXTEND_MORTAL(SP - newsp);
2597 for (mark = newsp + 1; mark <= SP; mark++) {
2600 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2601 *mark = sv_mortalcopy(*mark);
2603 /* Can be a localized value subject to deletion. */
2604 PL_tmps_stack[++PL_tmps_ix] = *mark;
2605 SvREFCNT_inc_void(*mark);
2610 else if (CxLVAL(cx)) { /* Leave it as it is if we can. */
2611 /* Here we go for robustness, not for speed, so we change all
2612 * the refcounts so the caller gets a live guy. Cannot set
2613 * TEMP, so sv_2mortal is out of question. */
2614 if (!CvLVALUE(cx->blk_sub.cv)) {
2620 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2622 if (gimme == G_SCALAR) {
2626 /* Temporaries are bad unless they happen to have set magic
2627 * attached, such as the elements of a tied hash or array */
2628 if ((SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP) ||
2629 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2632 !SvSMAGICAL(TOPs)) {
2638 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2639 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2640 : "a readonly value" : "a temporary");
2642 else { /* Can be a localized value
2643 * subject to deletion. */
2644 PL_tmps_stack[++PL_tmps_ix] = *mark;
2645 SvREFCNT_inc_void(*mark);
2648 else { /* Should not happen? */
2654 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2655 (MARK > SP ? "Empty array" : "Array"));
2659 else if (gimme == G_ARRAY) {
2660 EXTEND_MORTAL(SP - newsp);
2661 for (mark = newsp + 1; mark <= SP; mark++) {
2662 if (*mark != &PL_sv_undef
2663 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2664 /* Might be flattened array after $#array = */
2671 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2672 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2675 /* Can be a localized value subject to deletion. */
2676 PL_tmps_stack[++PL_tmps_ix] = *mark;
2677 SvREFCNT_inc_void(*mark);
2683 if (gimme == G_SCALAR) {
2687 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2689 *MARK = SvREFCNT_inc(TOPs);
2694 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2696 *MARK = sv_mortalcopy(sv);
2701 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2705 *MARK = &PL_sv_undef;
2709 else if (gimme == G_ARRAY) {
2711 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2712 if (!SvTEMP(*MARK)) {
2713 *MARK = sv_mortalcopy(*MARK);
2714 TAINT_NOT; /* Each item is independent */
2723 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2724 PL_curpm = newpm; /* ... and pop $1 et al */
2727 return cx->blk_sub.retop;
2735 register PERL_CONTEXT *cx;
2737 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2740 DIE(aTHX_ "Not a CODE reference");
2741 switch (SvTYPE(sv)) {
2742 /* This is overwhelming the most common case: */
2744 if (!isGV_with_GP(sv))
2745 DIE(aTHX_ "Not a CODE reference");
2747 if (!(cv = GvCVu((const GV *)sv))) {
2749 cv = sv_2cv(sv, &stash, &gv, 0);
2758 if(isGV_with_GP(sv)) goto we_have_a_glob;
2761 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2763 SP = PL_stack_base + POPMARK;
2768 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2769 tryAMAGICunDEREF(to_cv);
2774 sym = SvPV_nomg_const(sv, len);
2776 DIE(aTHX_ PL_no_usym, "a subroutine");
2777 if (PL_op->op_private & HINT_STRICT_REFS)
2778 DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
2779 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2782 cv = MUTABLE_CV(SvRV(sv));
2783 if (SvTYPE(cv) == SVt_PVCV)
2788 DIE(aTHX_ "Not a CODE reference");
2789 /* This is the second most common case: */
2791 cv = MUTABLE_CV(sv);
2799 if (!CvROOT(cv) && !CvXSUB(cv)) {
2803 /* anonymous or undef'd function leaves us no recourse */
2804 if (CvANON(cv) || !(gv = CvGV(cv)))
2805 DIE(aTHX_ "Undefined subroutine called");
2807 /* autoloaded stub? */
2808 if (cv != GvCV(gv)) {
2811 /* should call AUTOLOAD now? */
2814 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2821 sub_name = sv_newmortal();
2822 gv_efullname3(sub_name, gv, NULL);
2823 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2827 DIE(aTHX_ "Not a CODE reference");
2832 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2833 Perl_get_db_sub(aTHX_ &sv, cv);
2835 PL_curcopdb = PL_curcop;
2837 /* check for lsub that handles lvalue subroutines */
2838 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2839 /* if lsub not found then fall back to DB::sub */
2840 if (!cv) cv = GvCV(PL_DBsub);
2842 cv = GvCV(PL_DBsub);
2845 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2846 DIE(aTHX_ "No DB::sub routine defined");
2849 if (!(CvISXSUB(cv))) {
2850 /* This path taken at least 75% of the time */
2852 register I32 items = SP - MARK;
2853 AV* const padlist = CvPADLIST(cv);
2854 PUSHBLOCK(cx, CXt_SUB, MARK);
2856 cx->blk_sub.retop = PL_op->op_next;
2858 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2859 * that eval'' ops within this sub know the correct lexical space.
2860 * Owing the speed considerations, we choose instead to search for
2861 * the cv using find_runcv() when calling doeval().
2863 if (CvDEPTH(cv) >= 2) {
2864 PERL_STACK_OVERFLOW_CHECK();
2865 pad_push(padlist, CvDEPTH(cv));
2868 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2870 AV *const av = MUTABLE_AV(PAD_SVl(0));
2872 /* @_ is normally not REAL--this should only ever
2873 * happen when DB::sub() calls things that modify @_ */
2878 cx->blk_sub.savearray = GvAV(PL_defgv);
2879 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2880 CX_CURPAD_SAVE(cx->blk_sub);
2881 cx->blk_sub.argarray = av;
2884 if (items > AvMAX(av) + 1) {
2885 SV **ary = AvALLOC(av);
2886 if (AvARRAY(av) != ary) {
2887 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2890 if (items > AvMAX(av) + 1) {
2891 AvMAX(av) = items - 1;
2892 Renew(ary,items,SV*);
2897 Copy(MARK,AvARRAY(av),items,SV*);
2898 AvFILLp(av) = items - 1;
2906 /* warning must come *after* we fully set up the context
2907 * stuff so that __WARN__ handlers can safely dounwind()
2910 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2911 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2912 sub_crush_depth(cv);
2913 RETURNOP(CvSTART(cv));
2916 I32 markix = TOPMARK;
2921 /* Need to copy @_ to stack. Alternative may be to
2922 * switch stack to @_, and copy return values
2923 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2924 AV * const av = GvAV(PL_defgv);
2925 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2928 /* Mark is at the end of the stack. */
2930 Copy(AvARRAY(av), SP + 1, items, SV*);
2935 /* We assume first XSUB in &DB::sub is the called one. */
2937 SAVEVPTR(PL_curcop);
2938 PL_curcop = PL_curcopdb;
2941 /* Do we need to open block here? XXXX */
2943 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2945 CvXSUB(cv)(aTHX_ cv);
2947 /* Enforce some sanity in scalar context. */
2948 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2949 if (markix > PL_stack_sp - PL_stack_base)
2950 *(PL_stack_base + markix) = &PL_sv_undef;
2952 *(PL_stack_base + markix) = *PL_stack_sp;
2953 PL_stack_sp = PL_stack_base + markix;
2961 Perl_sub_crush_depth(pTHX_ CV *cv)
2963 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2966 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2968 SV* const tmpstr = sv_newmortal();
2969 gv_efullname3(tmpstr, CvGV(cv), NULL);
2970 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2979 SV* const elemsv = POPs;
2980 IV elem = SvIV(elemsv);
2981 AV *const av = MUTABLE_AV(POPs);
2982 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2983 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2984 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2985 bool preeminent = TRUE;
2988 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2989 Perl_warner(aTHX_ packWARN(WARN_MISC),
2990 "Use of reference \"%"SVf"\" as array index",
2993 elem -= CopARYBASE_get(PL_curcop);
2994 if (SvTYPE(av) != SVt_PVAV)
3001 /* If we can determine whether the element exist,
3002 * Try to preserve the existenceness of a tied array
3003 * element by using EXISTS and DELETE if possible.
3004 * Fallback to FETCH and STORE otherwise. */
3005 if (SvCANEXISTDELETE(av))
3006 preeminent = av_exists(av, elem);
3009 svp = av_fetch(av, elem, lval && !defer);
3011 #ifdef PERL_MALLOC_WRAP
3012 if (SvUOK(elemsv)) {
3013 const UV uv = SvUV(elemsv);
3014 elem = uv > IV_MAX ? IV_MAX : uv;
3016 else if (SvNOK(elemsv))
3017 elem = (IV)SvNV(elemsv);
3019 static const char oom_array_extend[] =
3020 "Out of memory during array extend"; /* Duplicated in av.c */
3021 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3024 if (!svp || *svp == &PL_sv_undef) {
3027 DIE(aTHX_ PL_no_aelem, elem);
3028 lv = sv_newmortal();
3029 sv_upgrade(lv, SVt_PVLV);
3031 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
3032 LvTARG(lv) = SvREFCNT_inc_simple(av);
3033 LvTARGOFF(lv) = elem;
3040 save_aelem(av, elem, svp);
3042 SAVEADELETE(av, elem);
3044 else if (PL_op->op_private & OPpDEREF)
3045 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3047 sv = (svp ? *svp : &PL_sv_undef);
3048 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
3055 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3057 PERL_ARGS_ASSERT_VIVIFY_REF;
3062 Perl_croak_no_modify(aTHX);
3063 prepare_SV_for_RV(sv);
3066 SvRV_set(sv, newSV(0));
3069 SvRV_set(sv, MUTABLE_SV(newAV()));
3072 SvRV_set(sv, MUTABLE_SV(newHV()));
3083 SV* const sv = TOPs;
3086 SV* const rsv = SvRV(sv);
3087 if (SvTYPE(rsv) == SVt_PVCV) {
3093 SETs(method_common(sv, NULL));
3100 SV* const sv = cSVOP_sv;
3101 U32 hash = SvSHARED_HASH(sv);
3103 XPUSHs(method_common(sv, &hash));
3108 S_method_common(pTHX_ SV* meth, U32* hashp)
3114 const char* packname = NULL;
3117 SV * const sv = *(PL_stack_base + TOPMARK + 1);
3119 PERL_ARGS_ASSERT_METHOD_COMMON;
3122 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3127 ob = MUTABLE_SV(SvRV(sv));
3131 /* this isn't a reference */
3132 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3133 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3135 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3142 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3143 !(ob=MUTABLE_SV(GvIO(iogv))))
3145 /* this isn't the name of a filehandle either */
3147 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3148 ? !isIDFIRST_utf8((U8*)packname)
3149 : !isIDFIRST(*packname)
3152 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3154 SvOK(sv) ? "without a package or object reference"
3155 : "on an undefined value");
3157 /* assume it's a package name */
3158 stash = gv_stashpvn(packname, packlen, 0);
3162 SV* const ref = newSViv(PTR2IV(stash));
3163 (void)hv_store(PL_stashcache, packname, packlen, ref, 0);
3167 /* it _is_ a filehandle name -- replace with a reference */
3168 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3171 /* if we got here, ob should be a reference or a glob */
3172 if (!ob || !(SvOBJECT(ob)
3173 || (SvTYPE(ob) == SVt_PVGV
3175 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3178 const char * const name = SvPV_nolen_const(meth);
3179 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3180 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3184 stash = SvSTASH(ob);
3187 /* NOTE: stash may be null, hope hv_fetch_ent and
3188 gv_fetchmethod can cope (it seems they can) */
3190 /* shortcut for simple names */
3192 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3194 gv = MUTABLE_GV(HeVAL(he));
3195 if (isGV(gv) && GvCV(gv) &&
3196 (!GvCVGEN(gv) || GvCVGEN(gv)
3197 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3198 return MUTABLE_SV(GvCV(gv));
3202 gv = gv_fetchmethod_flags(stash ? stash : MUTABLE_HV(packsv),
3203 SvPV_nolen_const(meth),
3204 GV_AUTOLOAD | GV_CROAK);
3208 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3213 * c-indentation-style: bsd
3215 * indent-tabs-mode: t
3218 * ex: set ts=8 sts=4 sw=4 noet: