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) {
278 /* sv_utf8_upgrade_nomg() may reallocate the stack */
281 sv_utf8_upgrade_nomg(TARG);
284 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
285 sv_utf8_upgrade_nomg(right);
286 rpv = SvPV_nomg_const(right, rlen);
290 sv_catpvn_nomg(TARG, rpv, rlen);
301 if (PL_op->op_flags & OPf_MOD) {
302 if (PL_op->op_private & OPpLVAL_INTRO)
303 if (!(PL_op->op_private & OPpPAD_STATE))
304 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
305 if (PL_op->op_private & OPpDEREF) {
307 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
317 dSP; SvGETMAGIC(TOPs);
318 tryAMAGICunTARGET(iter, 0);
319 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
320 if (!isGV_with_GP(PL_last_in_gv)) {
321 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
322 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
325 XPUSHs(MUTABLE_SV(PL_last_in_gv));
328 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
331 return do_readline();
337 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
338 #ifndef NV_PRESERVES_UV
339 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
341 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
345 #ifdef PERL_PRESERVE_IVUV
346 SvIV_please_nomg(TOPs);
348 /* Unless the left argument is integer in range we are going
349 to have to use NV maths. Hence only attempt to coerce the
350 right argument if we know the left is integer. */
351 SvIV_please_nomg(TOPm1s);
353 const bool auvok = SvUOK(TOPm1s);
354 const bool buvok = SvUOK(TOPs);
356 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
357 /* Casting IV to UV before comparison isn't going to matter
358 on 2s complement. On 1s complement or sign&magnitude
359 (if we have any of them) it could to make negative zero
360 differ from normal zero. As I understand it. (Need to
361 check - is negative zero implementation defined behaviour
363 const UV buv = SvUVX(POPs);
364 const UV auv = SvUVX(TOPs);
366 SETs(boolSV(auv == buv));
369 { /* ## Mixed IV,UV ## */
373 /* == is commutative so doesn't matter which is left or right */
375 /* top of stack (b) is the iv */
384 /* As uv is a UV, it's >0, so it cannot be == */
387 /* we know iv is >= 0 */
388 SETs(boolSV((UV)iv == SvUVX(uvp)));
395 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
397 if (Perl_isnan(left) || Perl_isnan(right))
399 SETs(boolSV(left == right));
402 SETs(boolSV(SvNV_nomg(TOPs) == value));
411 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
412 Perl_croak_no_modify(aTHX);
413 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
414 && SvIVX(TOPs) != IV_MAX)
416 SvIV_set(TOPs, SvIVX(TOPs) + 1);
417 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
419 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
432 if (PL_op->op_type == OP_OR)
434 RETURNOP(cLOGOP->op_other);
443 const int op_type = PL_op->op_type;
444 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
449 if (!sv || !SvANY(sv)) {
450 if (op_type == OP_DOR)
452 RETURNOP(cLOGOP->op_other);
458 if (!sv || !SvANY(sv))
463 switch (SvTYPE(sv)) {
465 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
469 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
473 if (CvROOT(sv) || CvXSUB(sv))
486 if(op_type == OP_DOR)
488 RETURNOP(cLOGOP->op_other);
490 /* assuming OP_DEFINED */
498 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
499 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
503 useleft = USE_LEFT(svl);
504 #ifdef PERL_PRESERVE_IVUV
505 /* We must see if we can perform the addition with integers if possible,
506 as the integer code detects overflow while the NV code doesn't.
507 If either argument hasn't had a numeric conversion yet attempt to get
508 the IV. It's important to do this now, rather than just assuming that
509 it's not IOK as a PV of "9223372036854775806" may not take well to NV
510 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
511 integer in case the second argument is IV=9223372036854775806
512 We can (now) rely on sv_2iv to do the right thing, only setting the
513 public IOK flag if the value in the NV (or PV) slot is truly integer.
515 A side effect is that this also aggressively prefers integer maths over
516 fp maths for integer values.
518 How to detect overflow?
520 C 99 section 6.2.6.1 says
522 The range of nonnegative values of a signed integer type is a subrange
523 of the corresponding unsigned integer type, and the representation of
524 the same value in each type is the same. A computation involving
525 unsigned operands can never overflow, because a result that cannot be
526 represented by the resulting unsigned integer type is reduced modulo
527 the number that is one greater than the largest value that can be
528 represented by the resulting type.
532 which I read as "unsigned ints wrap."
534 signed integer overflow seems to be classed as "exception condition"
536 If an exceptional condition occurs during the evaluation of an
537 expression (that is, if the result is not mathematically defined or not
538 in the range of representable values for its type), the behavior is
541 (6.5, the 5th paragraph)
543 I had assumed that on 2s complement machines signed arithmetic would
544 wrap, hence coded pp_add and pp_subtract on the assumption that
545 everything perl builds on would be happy. After much wailing and
546 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
547 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
548 unsigned code below is actually shorter than the old code. :-)
551 SvIV_please_nomg(svr);
554 /* Unless the left argument is integer in range we are going to have to
555 use NV maths. Hence only attempt to coerce the right argument if
556 we know the left is integer. */
564 /* left operand is undef, treat as zero. + 0 is identity,
565 Could SETi or SETu right now, but space optimise by not adding
566 lots of code to speed up what is probably a rarish case. */
568 /* Left operand is defined, so is it IV? */
569 SvIV_please_nomg(svl);
571 if ((auvok = SvUOK(svl)))
574 register const IV aiv = SvIVX(svl);
577 auvok = 1; /* Now acting as a sign flag. */
578 } else { /* 2s complement assumption for IV_MIN */
586 bool result_good = 0;
589 bool buvok = SvUOK(svr);
594 register const IV biv = SvIVX(svr);
601 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
602 else "IV" now, independent of how it came in.
603 if a, b represents positive, A, B negative, a maps to -A etc
608 all UV maths. negate result if A negative.
609 add if signs same, subtract if signs differ. */
615 /* Must get smaller */
621 /* result really should be -(auv-buv). as its negation
622 of true value, need to swap our result flag */
639 if (result <= (UV)IV_MIN)
642 /* result valid, but out of range for IV. */
647 } /* Overflow, drop through to NVs. */
652 NV value = SvNV_nomg(svr);
655 /* left operand is undef, treat as zero. + 0.0 is identity. */
659 SETn( value + SvNV_nomg(svl) );
667 AV * const av = PL_op->op_flags & OPf_SPECIAL
668 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAV(cGVOP_gv);
669 const U32 lval = PL_op->op_flags & OPf_MOD;
670 SV** const svp = av_fetch(av, PL_op->op_private, lval);
671 SV *sv = (svp ? *svp : &PL_sv_undef);
673 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
681 dVAR; dSP; dMARK; dTARGET;
683 do_join(TARG, *MARK, MARK, SP);
694 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
695 * will be enough to hold an OP*.
697 SV* const sv = sv_newmortal();
698 sv_upgrade(sv, SVt_PVLV);
700 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
703 XPUSHs(MUTABLE_SV(PL_op));
708 /* Oversized hot code. */
712 dVAR; dSP; dMARK; dORIGMARK;
717 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
719 if (gv && (io = GvIO(gv))
720 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
723 if (MARK == ORIGMARK) {
724 /* If using default handle then we need to make space to
725 * pass object as 1st arg, so move other args up ...
729 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
733 *MARK = SvTIED_obj(MUTABLE_SV(io), mg);
735 ENTER_with_name("call_PRINT");
736 if( PL_op->op_type == OP_SAY ) {
737 /* local $\ = "\n" */
738 SAVEGENERICSV(PL_ors_sv);
739 PL_ors_sv = newSVpvs("\n");
741 call_method("PRINT", G_SCALAR);
742 LEAVE_with_name("call_PRINT");
749 if (!(io = GvIO(gv))) {
750 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
751 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
753 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
755 SETERRNO(EBADF,RMS_IFI);
758 else if (!(fp = IoOFP(io))) {
759 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
761 report_wrongway_fh(gv, '<');
762 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
765 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
769 SV * const ofs = GvSV(PL_ofsgv); /* $, */
771 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
773 if (!do_print(*MARK, fp))
777 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
778 if (!do_print(GvSV(PL_ofsgv), fp)) {
787 if (!do_print(*MARK, fp))
795 if (PL_op->op_type == OP_SAY) {
796 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
799 else if (PL_ors_sv && SvOK(PL_ors_sv))
800 if (!do_print(PL_ors_sv, fp)) /* $\ */
803 if (IoFLAGS(io) & IOf_FLUSH)
804 if (PerlIO_flush(fp) == EOF)
814 XPUSHs(&PL_sv_undef);
821 const I32 gimme = GIMME_V;
822 static const char an_array[] = "an ARRAY";
823 static const char a_hash[] = "a HASH";
824 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
825 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
827 if (!(PL_op->op_private & OPpDEREFed))
831 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
835 if (SvTYPE(sv) != type)
836 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
837 if (PL_op->op_flags & OPf_REF) {
842 if (gimme != G_ARRAY)
843 goto croak_cant_return;
847 else if (PL_op->op_flags & OPf_MOD
848 && PL_op->op_private & OPpLVAL_INTRO)
849 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
852 if (SvTYPE(sv) == type) {
853 if (PL_op->op_flags & OPf_REF) {
858 if (gimme != G_ARRAY)
859 goto croak_cant_return;
867 if (!isGV_with_GP(sv)) {
868 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
876 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
877 if (PL_op->op_private & OPpLVAL_INTRO)
878 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
879 if (PL_op->op_flags & OPf_REF) {
884 if (gimme != G_ARRAY)
885 goto croak_cant_return;
893 AV *const av = MUTABLE_AV(sv);
894 /* The guts of pp_rv2av, with no intenting change to preserve history
895 (until such time as we get tools that can do blame annotation across
896 whitespace changes. */
897 if (gimme == G_ARRAY) {
898 const I32 maxarg = AvFILL(av) + 1;
899 (void)POPs; /* XXXX May be optimized away? */
901 if (SvRMAGICAL(av)) {
903 for (i=0; i < (U32)maxarg; i++) {
904 SV ** const svp = av_fetch(av, i, FALSE);
905 /* See note in pp_helem, and bug id #27839 */
907 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
912 Copy(AvARRAY(av), SP+1, maxarg, SV*);
916 else if (gimme == G_SCALAR) {
918 const I32 maxarg = AvFILL(av) + 1;
922 /* The guts of pp_rv2hv */
923 if (gimme == G_ARRAY) { /* array wanted */
927 else if (gimme == G_SCALAR) {
929 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
937 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
938 is_pp_rv2av ? "array" : "hash");
943 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
947 PERL_ARGS_ASSERT_DO_ODDBALL;
953 if (ckWARN(WARN_MISC)) {
955 if (relem == firstrelem &&
957 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
958 SvTYPE(SvRV(*relem)) == SVt_PVHV))
960 err = "Reference found where even-sized list expected";
963 err = "Odd number of elements in hash assignment";
964 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
968 didstore = hv_store_ent(hash,*relem,tmpstr,0);
969 if (SvMAGICAL(hash)) {
970 if (SvSMAGICAL(tmpstr))
982 SV **lastlelem = PL_stack_sp;
983 SV **lastrelem = PL_stack_base + POPMARK;
984 SV **firstrelem = PL_stack_base + POPMARK + 1;
985 SV **firstlelem = lastrelem + 1;
998 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
1000 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1003 /* If there's a common identifier on both sides we have to take
1004 * special care that assigning the identifier on the left doesn't
1005 * clobber a value on the right that's used later in the list.
1007 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1008 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1009 for (relem = firstrelem; relem <= lastrelem; relem++) {
1010 if ((sv = *relem)) {
1011 TAINT_NOT; /* Each item is independent */
1013 /* Dear TODO test in t/op/sort.t, I love you.
1014 (It's relying on a panic, not a "semi-panic" from newSVsv()
1015 and then an assertion failure below.) */
1016 if (SvIS_FREED(sv)) {
1017 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1020 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
1021 and we need a second copy of a temp here. */
1022 *relem = sv_2mortal(newSVsv(sv));
1032 while (lelem <= lastlelem) {
1033 TAINT_NOT; /* Each item stands on its own, taintwise. */
1035 switch (SvTYPE(sv)) {
1037 ary = MUTABLE_AV(sv);
1038 magic = SvMAGICAL(ary) != 0;
1040 av_extend(ary, lastrelem - relem);
1042 while (relem <= lastrelem) { /* gobble up all the rest */
1046 sv_setsv(sv, *relem);
1048 didstore = av_store(ary,i++,sv);
1057 if (PL_delaymagic & DM_ARRAY_ISA)
1058 SvSETMAGIC(MUTABLE_SV(ary));
1060 case SVt_PVHV: { /* normal hash */
1062 SV** topelem = relem;
1064 hash = MUTABLE_HV(sv);
1065 magic = SvMAGICAL(hash) != 0;
1067 firsthashrelem = relem;
1069 while (relem < lastrelem) { /* gobble up all the rest */
1071 sv = *relem ? *relem : &PL_sv_no;
1075 sv_setsv(tmpstr,*relem); /* value */
1077 if (gimme != G_VOID) {
1078 if (hv_exists_ent(hash, sv, 0))
1079 /* key overwrites an existing entry */
1082 if (gimme == G_ARRAY) {
1083 /* copy element back: possibly to an earlier
1084 * stack location if we encountered dups earlier */
1086 *topelem++ = tmpstr;
1089 didstore = hv_store_ent(hash,sv,tmpstr,0);
1091 if (SvSMAGICAL(tmpstr))
1098 if (relem == lastrelem) {
1099 do_oddball(hash, relem, firstrelem);
1105 if (SvIMMORTAL(sv)) {
1106 if (relem <= lastrelem)
1110 if (relem <= lastrelem) {
1111 sv_setsv(sv, *relem);
1115 sv_setsv(sv, &PL_sv_undef);
1120 if (PL_delaymagic & ~DM_DELAY) {
1121 if (PL_delaymagic & DM_UID) {
1122 #ifdef HAS_SETRESUID
1123 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1124 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1127 # ifdef HAS_SETREUID
1128 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1129 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1132 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1133 (void)setruid(PL_uid);
1134 PL_delaymagic &= ~DM_RUID;
1136 # endif /* HAS_SETRUID */
1138 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1139 (void)seteuid(PL_euid);
1140 PL_delaymagic &= ~DM_EUID;
1142 # endif /* HAS_SETEUID */
1143 if (PL_delaymagic & DM_UID) {
1144 if (PL_uid != PL_euid)
1145 DIE(aTHX_ "No setreuid available");
1146 (void)PerlProc_setuid(PL_uid);
1148 # endif /* HAS_SETREUID */
1149 #endif /* HAS_SETRESUID */
1150 PL_uid = PerlProc_getuid();
1151 PL_euid = PerlProc_geteuid();
1153 if (PL_delaymagic & DM_GID) {
1154 #ifdef HAS_SETRESGID
1155 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1156 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1159 # ifdef HAS_SETREGID
1160 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1161 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1164 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1165 (void)setrgid(PL_gid);
1166 PL_delaymagic &= ~DM_RGID;
1168 # endif /* HAS_SETRGID */
1170 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1171 (void)setegid(PL_egid);
1172 PL_delaymagic &= ~DM_EGID;
1174 # endif /* HAS_SETEGID */
1175 if (PL_delaymagic & DM_GID) {
1176 if (PL_gid != PL_egid)
1177 DIE(aTHX_ "No setregid available");
1178 (void)PerlProc_setgid(PL_gid);
1180 # endif /* HAS_SETREGID */
1181 #endif /* HAS_SETRESGID */
1182 PL_gid = PerlProc_getgid();
1183 PL_egid = PerlProc_getegid();
1185 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1189 if (gimme == G_VOID)
1190 SP = firstrelem - 1;
1191 else if (gimme == G_SCALAR) {
1194 SETi(lastrelem - firstrelem + 1 - duplicates);
1201 /* at this point we have removed the duplicate key/value
1202 * pairs from the stack, but the remaining values may be
1203 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1204 * the (a 2), but the stack now probably contains
1205 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1206 * obliterates the earlier key. So refresh all values. */
1207 lastrelem -= duplicates;
1208 relem = firsthashrelem;
1209 while (relem < lastrelem) {
1212 he = hv_fetch_ent(hash, sv, 0, 0);
1213 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1219 SP = firstrelem + (lastlelem - firstlelem);
1220 lelem = firstlelem + (relem - firstrelem);
1222 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1231 register PMOP * const pm = cPMOP;
1232 REGEXP * rx = PM_GETRE(pm);
1233 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1234 SV * const rv = sv_newmortal();
1236 SvUPGRADE(rv, SVt_IV);
1237 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1238 loathe to use it here, but it seems to be the right fix. Or close.
1239 The key part appears to be that it's essential for pp_qr to return a new
1240 object (SV), which implies that there needs to be an effective way to
1241 generate a new SV from the existing SV that is pre-compiled in the
1243 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1247 HV *const stash = gv_stashsv(pkg, GV_ADD);
1249 (void)sv_bless(rv, stash);
1252 if (RX_EXTFLAGS(rx) & RXf_TAINTED)
1261 register PMOP *pm = cPMOP;
1263 register const char *t;
1264 register const char *s;
1267 U8 r_flags = REXEC_CHECKED;
1268 const char *truebase; /* Start of string */
1269 register REGEXP *rx = PM_GETRE(pm);
1271 const I32 gimme = GIMME;
1274 const I32 oldsave = PL_savestack_ix;
1275 I32 update_minmatch = 1;
1276 I32 had_zerolen = 0;
1279 if (PL_op->op_flags & OPf_STACKED)
1281 else if (PL_op->op_private & OPpTARGET_MY)
1288 PUTBACK; /* EVAL blocks need stack_sp. */
1289 /* Skip get-magic if this is a qr// clone, because regcomp has
1291 s = ((struct regexp *)SvANY(rx))->mother_re
1292 ? SvPV_nomg_const(TARG, len)
1293 : SvPV_const(TARG, len);
1295 DIE(aTHX_ "panic: pp_match");
1297 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1298 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1301 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1303 /* PMdf_USED is set after a ?? matches once */
1306 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1308 pm->op_pmflags & PMf_USED
1312 if (gimme == G_ARRAY)
1319 /* empty pattern special-cased to use last successful pattern if possible */
1320 if (!RX_PRELEN(rx) && PL_curpm) {
1325 if (RX_MINLEN(rx) > (I32)len)
1330 /* XXXX What part of this is needed with true \G-support? */
1331 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1332 RX_OFFS(rx)[0].start = -1;
1333 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1334 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1335 if (mg && mg->mg_len >= 0) {
1336 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1337 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1338 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1339 r_flags |= REXEC_IGNOREPOS;
1340 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1341 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1344 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1345 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1346 update_minmatch = 0;
1350 /* XXX: comment out !global get safe $1 vars after a
1351 match, BUT be aware that this leads to dramatic slowdowns on
1352 /g matches against large strings. So far a solution to this problem
1353 appears to be quite tricky.
1354 Test for the unsafe vars are TODO for now. */
1355 if ( (!global && RX_NPARENS(rx))
1356 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1357 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1358 r_flags |= REXEC_COPY_STR;
1360 r_flags |= REXEC_SCREAM;
1363 if (global && RX_OFFS(rx)[0].start != -1) {
1364 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1365 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1367 if (update_minmatch++)
1368 minmatch = had_zerolen;
1370 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1371 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1372 /* FIXME - can PL_bostr be made const char *? */
1373 PL_bostr = (char *)truebase;
1374 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1378 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1380 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1381 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
1382 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
1383 && (r_flags & REXEC_SCREAM)))
1384 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1387 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1388 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1391 if (dynpm->op_pmflags & PMf_ONCE) {
1393 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1395 dynpm->op_pmflags |= PMf_USED;
1406 RX_MATCH_TAINTED_on(rx);
1407 TAINT_IF(RX_MATCH_TAINTED(rx));
1408 if (gimme == G_ARRAY) {
1409 const I32 nparens = RX_NPARENS(rx);
1410 I32 i = (global && !nparens) ? 1 : 0;
1412 SPAGAIN; /* EVAL blocks could move the stack. */
1413 EXTEND(SP, nparens + i);
1414 EXTEND_MORTAL(nparens + i);
1415 for (i = !i; i <= nparens; i++) {
1416 PUSHs(sv_newmortal());
1417 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1418 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1419 s = RX_OFFS(rx)[i].start + truebase;
1420 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1421 len < 0 || len > strend - s)
1422 DIE(aTHX_ "panic: pp_match start/end pointers");
1423 sv_setpvn(*SP, s, len);
1424 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1429 if (dynpm->op_pmflags & PMf_CONTINUE) {
1431 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1432 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1434 #ifdef PERL_OLD_COPY_ON_WRITE
1436 sv_force_normal_flags(TARG, 0);
1438 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1439 &PL_vtbl_mglob, NULL, 0);
1441 if (RX_OFFS(rx)[0].start != -1) {
1442 mg->mg_len = RX_OFFS(rx)[0].end;
1443 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1444 mg->mg_flags |= MGf_MINMATCH;
1446 mg->mg_flags &= ~MGf_MINMATCH;
1449 had_zerolen = (RX_OFFS(rx)[0].start != -1
1450 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1451 == (UV)RX_OFFS(rx)[0].end));
1452 PUTBACK; /* EVAL blocks may use stack */
1453 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1458 LEAVE_SCOPE(oldsave);
1464 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1465 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1469 #ifdef PERL_OLD_COPY_ON_WRITE
1471 sv_force_normal_flags(TARG, 0);
1473 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1474 &PL_vtbl_mglob, NULL, 0);
1476 if (RX_OFFS(rx)[0].start != -1) {
1477 mg->mg_len = RX_OFFS(rx)[0].end;
1478 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1479 mg->mg_flags |= MGf_MINMATCH;
1481 mg->mg_flags &= ~MGf_MINMATCH;
1484 LEAVE_SCOPE(oldsave);
1488 yup: /* Confirmed by INTUIT */
1490 RX_MATCH_TAINTED_on(rx);
1491 TAINT_IF(RX_MATCH_TAINTED(rx));
1493 if (dynpm->op_pmflags & PMf_ONCE) {
1495 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1497 dynpm->op_pmflags |= PMf_USED;
1500 if (RX_MATCH_COPIED(rx))
1501 Safefree(RX_SUBBEG(rx));
1502 RX_MATCH_COPIED_off(rx);
1503 RX_SUBBEG(rx) = NULL;
1505 /* FIXME - should rx->subbeg be const char *? */
1506 RX_SUBBEG(rx) = (char *) truebase;
1507 RX_OFFS(rx)[0].start = s - truebase;
1508 if (RX_MATCH_UTF8(rx)) {
1509 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1510 RX_OFFS(rx)[0].end = t - truebase;
1513 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1515 RX_SUBLEN(rx) = strend - truebase;
1518 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1520 #ifdef PERL_OLD_COPY_ON_WRITE
1521 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1523 PerlIO_printf(Perl_debug_log,
1524 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1525 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1528 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1530 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1531 assert (SvPOKp(RX_SAVED_COPY(rx)));
1536 RX_SUBBEG(rx) = savepvn(t, strend - t);
1537 #ifdef PERL_OLD_COPY_ON_WRITE
1538 RX_SAVED_COPY(rx) = NULL;
1541 RX_SUBLEN(rx) = strend - t;
1542 RX_MATCH_COPIED_on(rx);
1543 off = RX_OFFS(rx)[0].start = s - t;
1544 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1546 else { /* startp/endp are used by @- @+. */
1547 RX_OFFS(rx)[0].start = s - truebase;
1548 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1550 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1552 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
1553 LEAVE_SCOPE(oldsave);
1558 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1559 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1560 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1565 LEAVE_SCOPE(oldsave);
1566 if (gimme == G_ARRAY)
1572 Perl_do_readline(pTHX)
1574 dVAR; dSP; dTARGETSTACKED;
1579 register IO * const io = GvIO(PL_last_in_gv);
1580 register const I32 type = PL_op->op_type;
1581 const I32 gimme = GIMME_V;
1584 MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1587 XPUSHs(SvTIED_obj(MUTABLE_SV(io), mg));
1589 ENTER_with_name("call_READLINE");
1590 call_method("READLINE", gimme);
1591 LEAVE_with_name("call_READLINE");
1593 if (gimme == G_SCALAR) {
1594 SV* const result = POPs;
1595 SvSetSV_nosteal(TARG, result);
1605 if (IoFLAGS(io) & IOf_ARGV) {
1606 if (IoFLAGS(io) & IOf_START) {
1608 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1609 IoFLAGS(io) &= ~IOf_START;
1610 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1611 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1612 SvSETMAGIC(GvSV(PL_last_in_gv));
1617 fp = nextargv(PL_last_in_gv);
1618 if (!fp) { /* Note: fp != IoIFP(io) */
1619 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1622 else if (type == OP_GLOB)
1623 fp = Perl_start_glob(aTHX_ POPs, io);
1625 else if (type == OP_GLOB)
1627 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1628 report_wrongway_fh(PL_last_in_gv, '>');
1632 if ((!io || !(IoFLAGS(io) & IOf_START))
1633 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1635 if (type == OP_GLOB)
1636 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1637 "glob failed (can't start child: %s)",
1640 report_evil_fh(PL_last_in_gv);
1642 if (gimme == G_SCALAR) {
1643 /* undef TARG, and push that undefined value */
1644 if (type != OP_RCATLINE) {
1645 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1653 if (gimme == G_SCALAR) {
1655 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1658 if (type == OP_RCATLINE)
1659 SvPV_force_nolen(sv);
1663 else if (isGV_with_GP(sv)) {
1664 SvPV_force_nolen(sv);
1666 SvUPGRADE(sv, SVt_PV);
1667 tmplen = SvLEN(sv); /* remember if already alloced */
1668 if (!tmplen && !SvREADONLY(sv)) {
1669 /* try short-buffering it. Please update t/op/readline.t
1670 * if you change the growth length.
1675 if (type == OP_RCATLINE && SvOK(sv)) {
1677 SvPV_force_nolen(sv);
1683 sv = sv_2mortal(newSV(80));
1687 /* This should not be marked tainted if the fp is marked clean */
1688 #define MAYBE_TAINT_LINE(io, sv) \
1689 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1694 /* delay EOF state for a snarfed empty file */
1695 #define SNARF_EOF(gimme,rs,io,sv) \
1696 (gimme != G_SCALAR || SvCUR(sv) \
1697 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1701 if (!sv_gets(sv, fp, offset)
1703 || SNARF_EOF(gimme, PL_rs, io, sv)
1704 || PerlIO_error(fp)))
1706 PerlIO_clearerr(fp);
1707 if (IoFLAGS(io) & IOf_ARGV) {
1708 fp = nextargv(PL_last_in_gv);
1711 (void)do_close(PL_last_in_gv, FALSE);
1713 else if (type == OP_GLOB) {
1714 if (!do_close(PL_last_in_gv, FALSE)) {
1715 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1716 "glob failed (child exited with status %d%s)",
1717 (int)(STATUS_CURRENT >> 8),
1718 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1721 if (gimme == G_SCALAR) {
1722 if (type != OP_RCATLINE) {
1723 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1729 MAYBE_TAINT_LINE(io, sv);
1732 MAYBE_TAINT_LINE(io, sv);
1734 IoFLAGS(io) |= IOf_NOLINE;
1738 if (type == OP_GLOB) {
1741 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1742 char * const tmps = SvEND(sv) - 1;
1743 if (*tmps == *SvPVX_const(PL_rs)) {
1745 SvCUR_set(sv, SvCUR(sv) - 1);
1748 for (t1 = SvPVX_const(sv); *t1; t1++)
1749 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1750 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1752 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1753 (void)POPs; /* Unmatched wildcard? Chuck it... */
1756 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1757 if (ckWARN(WARN_UTF8)) {
1758 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1759 const STRLEN len = SvCUR(sv) - offset;
1762 if (!is_utf8_string_loc(s, len, &f))
1763 /* Emulate :encoding(utf8) warning in the same case. */
1764 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1765 "utf8 \"\\x%02X\" does not map to Unicode",
1766 f < (U8*)SvEND(sv) ? *f : 0);
1769 if (gimme == G_ARRAY) {
1770 if (SvLEN(sv) - SvCUR(sv) > 20) {
1771 SvPV_shrink_to_cur(sv);
1773 sv = sv_2mortal(newSV(80));
1776 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1777 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1778 const STRLEN new_len
1779 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1780 SvPV_renew(sv, new_len);
1789 register PERL_CONTEXT *cx;
1790 I32 gimme = OP_GIMME(PL_op, -1);
1793 if (cxstack_ix >= 0) {
1794 /* If this flag is set, we're just inside a return, so we should
1795 * store the caller's context */
1796 gimme = (PL_op->op_flags & OPf_SPECIAL)
1798 : cxstack[cxstack_ix].blk_gimme;
1803 ENTER_with_name("block");
1806 PUSHBLOCK(cx, CXt_BLOCK, SP);
1816 SV * const keysv = POPs;
1817 HV * const hv = MUTABLE_HV(POPs);
1818 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1819 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1821 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1822 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1823 bool preeminent = TRUE;
1825 if (SvTYPE(hv) != SVt_PVHV)
1832 /* If we can determine whether the element exist,
1833 * Try to preserve the existenceness of a tied hash
1834 * element by using EXISTS and DELETE if possible.
1835 * Fallback to FETCH and STORE otherwise. */
1836 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1837 preeminent = hv_exists_ent(hv, keysv, 0);
1840 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1841 svp = he ? &HeVAL(he) : NULL;
1843 if (!svp || *svp == &PL_sv_undef) {
1847 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1849 lv = sv_newmortal();
1850 sv_upgrade(lv, SVt_PVLV);
1852 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1853 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1854 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1860 if (HvNAME_get(hv) && isGV(*svp))
1861 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1862 else if (preeminent)
1863 save_helem_flags(hv, keysv, svp,
1864 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1866 SAVEHDELETE(hv, keysv);
1868 else if (PL_op->op_private & OPpDEREF)
1869 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1871 sv = (svp ? *svp : &PL_sv_undef);
1872 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1873 * was to make C<local $tied{foo} = $tied{foo}> possible.
1874 * However, it seems no longer to be needed for that purpose, and
1875 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1876 * would loop endlessly since the pos magic is getting set on the
1877 * mortal copy and lost. However, the copy has the effect of
1878 * triggering the get magic, and losing it altogether made things like
1879 * c<$tied{foo};> in void context no longer do get magic, which some
1880 * code relied on. Also, delayed triggering of magic on @+ and friends
1881 * meant the original regex may be out of scope by now. So as a
1882 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1883 * being called too many times). */
1884 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1893 register PERL_CONTEXT *cx;
1898 if (PL_op->op_flags & OPf_SPECIAL) {
1899 cx = &cxstack[cxstack_ix];
1900 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1905 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
1908 if (gimme == G_VOID)
1910 else if (gimme == G_SCALAR) {
1914 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1917 *MARK = sv_mortalcopy(TOPs);
1920 *MARK = &PL_sv_undef;
1924 else if (gimme == G_ARRAY) {
1925 /* in case LEAVE wipes old return values */
1927 for (mark = newsp + 1; mark <= SP; mark++) {
1928 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1929 *mark = sv_mortalcopy(*mark);
1930 TAINT_NOT; /* Each item is independent */
1934 PL_curpm = newpm; /* Don't pop $1 et al till now */
1936 LEAVE_with_name("block");
1944 register PERL_CONTEXT *cx;
1947 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1948 bool av_is_stack = FALSE;
1951 cx = &cxstack[cxstack_ix];
1952 if (!CxTYPE_is_LOOP(cx))
1953 DIE(aTHX_ "panic: pp_iter");
1955 itersvp = CxITERVAR(cx);
1956 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1957 /* string increment */
1958 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1959 SV *end = cx->blk_loop.state_u.lazysv.end;
1960 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1961 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1963 const char *max = SvPV_const(end, maxlen);
1964 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1965 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1966 /* safe to reuse old SV */
1967 sv_setsv(*itersvp, cur);
1971 /* we need a fresh SV every time so that loop body sees a
1972 * completely new SV for closures/references to work as
1975 *itersvp = newSVsv(cur);
1976 SvREFCNT_dec(oldsv);
1978 if (strEQ(SvPVX_const(cur), max))
1979 sv_setiv(cur, 0); /* terminate next time */
1986 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1987 /* integer increment */
1988 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1991 /* don't risk potential race */
1992 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1993 /* safe to reuse old SV */
1994 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1998 /* we need a fresh SV every time so that loop body sees a
1999 * completely new SV for closures/references to work as they
2002 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
2003 SvREFCNT_dec(oldsv);
2006 /* Handle end of range at IV_MAX */
2007 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
2008 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
2010 cx->blk_loop.state_u.lazyiv.cur++;
2011 cx->blk_loop.state_u.lazyiv.end++;
2018 assert(CxTYPE(cx) == CXt_LOOP_FOR);
2019 av = cx->blk_loop.state_u.ary.ary;
2024 if (PL_op->op_private & OPpITER_REVERSED) {
2025 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
2026 ? cx->blk_loop.resetsp + 1 : 0))
2029 if (SvMAGICAL(av) || AvREIFY(av)) {
2030 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
2031 sv = svp ? *svp : NULL;
2034 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
2038 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
2042 if (SvMAGICAL(av) || AvREIFY(av)) {
2043 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
2044 sv = svp ? *svp : NULL;
2047 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
2051 if (sv && SvIS_FREED(sv)) {
2053 Perl_croak(aTHX_ "Use of freed value in iteration");
2058 SvREFCNT_inc_simple_void_NN(sv);
2062 if (!av_is_stack && sv == &PL_sv_undef) {
2063 SV *lv = newSV_type(SVt_PVLV);
2065 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2066 LvTARG(lv) = SvREFCNT_inc_simple(av);
2067 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
2068 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2074 SvREFCNT_dec(oldsv);
2082 register PMOP *pm = cPMOP;
2097 register REGEXP *rx = PM_GETRE(pm);
2099 int force_on_match = 0;
2100 const I32 oldsave = PL_savestack_ix;
2102 bool doutf8 = FALSE;
2104 #ifdef PERL_OLD_COPY_ON_WRITE
2108 /* known replacement string? */
2109 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2113 if (PL_op->op_flags & OPf_STACKED)
2115 else if (PL_op->op_private & OPpTARGET_MY)
2122 /* In non-destructive replacement mode, duplicate target scalar so it
2123 * remains unchanged. */
2124 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2125 TARG = sv_2mortal(newSVsv(TARG));
2127 #ifdef PERL_OLD_COPY_ON_WRITE
2128 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2129 because they make integers such as 256 "false". */
2130 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2133 sv_force_normal_flags(TARG,0);
2136 #ifdef PERL_OLD_COPY_ON_WRITE
2140 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2141 || SvTYPE(TARG) > SVt_PVLV)
2142 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2143 Perl_croak_no_modify(aTHX);
2147 s = SvPV_mutable(TARG, len);
2148 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2150 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
2151 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2156 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2160 DIE(aTHX_ "panic: pp_subst");
2163 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2164 maxiters = 2 * slen + 10; /* We can match twice at each
2165 position, once with zero-length,
2166 second time with non-zero. */
2168 if (!RX_PRELEN(rx) && PL_curpm) {
2172 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2173 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2174 ? REXEC_COPY_STR : 0;
2176 r_flags |= REXEC_SCREAM;
2179 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2181 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2185 /* How to do it in subst? */
2186 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2188 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY)
2189 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
2190 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
2191 && (r_flags & REXEC_SCREAM))))
2196 /* only replace once? */
2197 once = !(rpm->op_pmflags & PMf_GLOBAL);
2198 matched = CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2199 r_flags | REXEC_CHECKED);
2200 /* known replacement string? */
2203 /* Upgrade the source if the replacement is utf8 but the source is not,
2204 * but only if it matched; see
2205 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2207 if (matched && DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2208 const STRLEN new_len = sv_utf8_upgrade(TARG);
2210 /* If the lengths are the same, the pattern contains only
2211 * invariants, can keep going; otherwise, various internal markers
2212 * could be off, so redo */
2213 if (new_len != len) {
2218 /* replacement needing upgrading? */
2219 if (DO_UTF8(TARG) && !doutf8) {
2220 nsv = sv_newmortal();
2223 sv_recode_to_utf8(nsv, PL_encoding);
2225 sv_utf8_upgrade(nsv);
2226 c = SvPV_const(nsv, clen);
2230 c = SvPV_const(dstr, clen);
2231 doutf8 = DO_UTF8(dstr);
2239 /* can do inplace substitution? */
2241 #ifdef PERL_OLD_COPY_ON_WRITE
2244 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2245 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2246 && (!doutf8 || SvUTF8(TARG))) {
2250 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2254 LEAVE_SCOPE(oldsave);
2257 #ifdef PERL_OLD_COPY_ON_WRITE
2258 if (SvIsCOW(TARG)) {
2259 assert (!force_on_match);
2263 if (force_on_match) {
2265 s = SvPV_force(TARG, len);
2270 SvSCREAM_off(TARG); /* disable possible screamer */
2272 rxtainted |= RX_MATCH_TAINTED(rx);
2273 m = orig + RX_OFFS(rx)[0].start;
2274 d = orig + RX_OFFS(rx)[0].end;
2276 if (m - s > strend - d) { /* faster to shorten from end */
2278 Copy(c, m, clen, char);
2283 Move(d, m, i, char);
2287 SvCUR_set(TARG, m - s);
2289 else if ((i = m - s)) { /* faster from front */
2292 Move(s, d - i, i, char);
2295 Copy(c, m, clen, char);
2300 Copy(c, d, clen, char);
2305 TAINT_IF(rxtainted & 1);
2307 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2314 if (iters++ > maxiters)
2315 DIE(aTHX_ "Substitution loop");
2316 rxtainted |= RX_MATCH_TAINTED(rx);
2317 m = RX_OFFS(rx)[0].start + orig;
2320 Move(s, d, i, char);
2324 Copy(c, d, clen, char);
2327 s = RX_OFFS(rx)[0].end + orig;
2328 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2330 /* don't match same null twice */
2331 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2334 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2335 Move(s, d, i+1, char); /* include the NUL */
2337 TAINT_IF(rxtainted & 1);
2339 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2344 (void)SvPOK_only_UTF8(TARG);
2345 TAINT_IF(rxtainted);
2346 if (SvSMAGICAL(TARG)) {
2354 LEAVE_SCOPE(oldsave);
2360 if (force_on_match) {
2362 s = SvPV_force(TARG, len);
2365 #ifdef PERL_OLD_COPY_ON_WRITE
2368 rxtainted |= RX_MATCH_TAINTED(rx);
2369 dstr = newSVpvn_utf8(m, s-m, DO_UTF8(TARG));
2373 register PERL_CONTEXT *cx;
2376 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2378 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2380 if (iters++ > maxiters)
2381 DIE(aTHX_ "Substitution loop");
2382 rxtainted |= RX_MATCH_TAINTED(rx);
2383 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2386 orig = RX_SUBBEG(rx);
2388 strend = s + (strend - m);
2390 m = RX_OFFS(rx)[0].start + orig;
2391 if (doutf8 && !SvUTF8(dstr))
2392 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2394 sv_catpvn(dstr, s, m-s);
2395 s = RX_OFFS(rx)[0].end + orig;
2397 sv_catpvn(dstr, c, clen);
2400 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2401 TARG, NULL, r_flags));
2402 if (doutf8 && !DO_UTF8(TARG))
2403 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2405 sv_catpvn(dstr, s, strend - s);
2407 #ifdef PERL_OLD_COPY_ON_WRITE
2408 /* The match may make the string COW. If so, brilliant, because that's
2409 just saved us one malloc, copy and free - the regexp has donated
2410 the old buffer, and we malloc an entirely new one, rather than the
2411 regexp malloc()ing a buffer and copying our original, only for
2412 us to throw it away here during the substitution. */
2413 if (SvIsCOW(TARG)) {
2414 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2420 SvPV_set(TARG, SvPVX(dstr));
2421 SvCUR_set(TARG, SvCUR(dstr));
2422 SvLEN_set(TARG, SvLEN(dstr));
2423 doutf8 |= DO_UTF8(dstr);
2424 SvPV_set(dstr, NULL);
2426 TAINT_IF(rxtainted & 1);
2428 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2433 (void)SvPOK_only(TARG);
2436 TAINT_IF(rxtainted);
2439 LEAVE_SCOPE(oldsave);
2447 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2451 LEAVE_SCOPE(oldsave);
2460 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2461 ++*PL_markstack_ptr;
2463 LEAVE_with_name("grep_item"); /* exit inner scope */
2466 if (PL_stack_base + *PL_markstack_ptr > SP) {
2468 const I32 gimme = GIMME_V;
2470 LEAVE_with_name("grep"); /* exit outer scope */
2471 (void)POPMARK; /* pop src */
2472 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2473 (void)POPMARK; /* pop dst */
2474 SP = PL_stack_base + POPMARK; /* pop original mark */
2475 if (gimme == G_SCALAR) {
2476 if (PL_op->op_private & OPpGREP_LEX) {
2477 SV* const sv = sv_newmortal();
2478 sv_setiv(sv, items);
2486 else if (gimme == G_ARRAY)
2493 ENTER_with_name("grep_item"); /* enter inner scope */
2496 src = PL_stack_base[*PL_markstack_ptr];
2498 if (PL_op->op_private & OPpGREP_LEX)
2499 PAD_SVl(PL_op->op_targ) = src;
2503 RETURNOP(cLOGOP->op_other);
2514 register PERL_CONTEXT *cx;
2517 if (CxMULTICALL(&cxstack[cxstack_ix]))
2521 cxstack_ix++; /* temporarily protect top context */
2524 if (gimme == G_SCALAR) {
2527 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2529 *MARK = SvREFCNT_inc(TOPs);
2534 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2536 *MARK = sv_mortalcopy(sv);
2541 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2545 *MARK = &PL_sv_undef;
2549 else if (gimme == G_ARRAY) {
2550 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2551 if (!SvTEMP(*MARK)) {
2552 *MARK = sv_mortalcopy(*MARK);
2553 TAINT_NOT; /* Each item is independent */
2561 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2562 PL_curpm = newpm; /* ... and pop $1 et al */
2565 return cx->blk_sub.retop;
2568 /* This duplicates the above code because the above code must not
2569 * get any slower by more conditions */
2577 register PERL_CONTEXT *cx;
2580 if (CxMULTICALL(&cxstack[cxstack_ix]))
2584 cxstack_ix++; /* temporarily protect top context */
2588 if (CxLVAL(cx) & OPpENTERSUB_INARGS) {
2589 /* We are an argument to a function or grep().
2590 * This kind of lvalueness was legal before lvalue
2591 * subroutines too, so be backward compatible:
2592 * cannot report errors. */
2594 /* Scalar context *is* possible, on the LHS of -> only,
2595 * as in f()->meth(). But this is not an lvalue. */
2596 if (gimme == G_SCALAR)
2598 if (gimme == G_ARRAY) {
2600 /* We want an array here, but padav will have left us an arrayref for an lvalue,
2601 * so we need to expand it */
2602 if(SvTYPE(*mark) == SVt_PVAV) {
2603 AV *const av = MUTABLE_AV(*mark);
2604 const I32 maxarg = AvFILL(av) + 1;
2605 (void)POPs; /* get rid of the array ref */
2607 if (SvRMAGICAL(av)) {
2609 for (i=0; i < (U32)maxarg; i++) {
2610 SV ** const svp = av_fetch(av, i, FALSE);
2612 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
2617 Copy(AvARRAY(av), SP+1, maxarg, SV*);
2622 if (!CvLVALUE(cx->blk_sub.cv))
2623 goto temporise_array;
2624 EXTEND_MORTAL(SP - newsp);
2625 for (mark = newsp + 1; mark <= SP; mark++) {
2628 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2629 *mark = sv_mortalcopy(*mark);
2631 /* Can be a localized value subject to deletion. */
2632 PL_tmps_stack[++PL_tmps_ix] = *mark;
2633 SvREFCNT_inc_void(*mark);
2638 else if (CxLVAL(cx)) { /* Leave it as it is if we can. */
2639 /* Here we go for robustness, not for speed, so we change all
2640 * the refcounts so the caller gets a live guy. Cannot set
2641 * TEMP, so sv_2mortal is out of question. */
2642 if (!CvLVALUE(cx->blk_sub.cv)) {
2648 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2650 if (gimme == G_SCALAR) {
2654 /* Temporaries are bad unless they happen to have set magic
2655 * attached, such as the elements of a tied hash or array */
2656 if ((SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP) ||
2657 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2660 !SvSMAGICAL(TOPs)) {
2666 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2667 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2668 : "a readonly value" : "a temporary");
2670 else { /* Can be a localized value
2671 * subject to deletion. */
2672 PL_tmps_stack[++PL_tmps_ix] = *mark;
2673 SvREFCNT_inc_void(*mark);
2676 else { /* Should not happen? */
2682 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2683 (MARK > SP ? "Empty array" : "Array"));
2687 else if (gimme == G_ARRAY) {
2688 EXTEND_MORTAL(SP - newsp);
2689 for (mark = newsp + 1; mark <= SP; mark++) {
2690 if (*mark != &PL_sv_undef
2691 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2692 /* Might be flattened array after $#array = */
2699 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2700 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2703 /* Can be a localized value subject to deletion. */
2704 PL_tmps_stack[++PL_tmps_ix] = *mark;
2705 SvREFCNT_inc_void(*mark);
2711 if (gimme == G_SCALAR) {
2715 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2717 *MARK = SvREFCNT_inc(TOPs);
2722 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2724 *MARK = sv_mortalcopy(sv);
2729 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2733 *MARK = &PL_sv_undef;
2737 else if (gimme == G_ARRAY) {
2739 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2740 if (!SvTEMP(*MARK)) {
2741 *MARK = sv_mortalcopy(*MARK);
2742 TAINT_NOT; /* Each item is independent */
2751 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2752 PL_curpm = newpm; /* ... and pop $1 et al */
2755 return cx->blk_sub.retop;
2763 register PERL_CONTEXT *cx;
2765 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2768 DIE(aTHX_ "Not a CODE reference");
2769 switch (SvTYPE(sv)) {
2770 /* This is overwhelming the most common case: */
2772 if (!isGV_with_GP(sv))
2773 DIE(aTHX_ "Not a CODE reference");
2775 if (!(cv = GvCVu((const GV *)sv))) {
2777 cv = sv_2cv(sv, &stash, &gv, 0);
2786 if(isGV_with_GP(sv)) goto we_have_a_glob;
2789 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2791 SP = PL_stack_base + POPMARK;
2799 sv = amagic_deref_call(sv, to_cv_amg);
2800 /* Don't SPAGAIN here. */
2806 sym = SvPV_nomg_const(sv, len);
2808 DIE(aTHX_ PL_no_usym, "a subroutine");
2809 if (PL_op->op_private & HINT_STRICT_REFS)
2810 DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
2811 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2814 cv = MUTABLE_CV(SvRV(sv));
2815 if (SvTYPE(cv) == SVt_PVCV)
2820 DIE(aTHX_ "Not a CODE reference");
2821 /* This is the second most common case: */
2823 cv = MUTABLE_CV(sv);
2831 if (CvCLONE(cv) && ! CvCLONED(cv))
2832 DIE(aTHX_ "Closure prototype called");
2833 if (!CvROOT(cv) && !CvXSUB(cv)) {
2837 /* anonymous or undef'd function leaves us no recourse */
2838 if (CvANON(cv) || !(gv = CvGV(cv)))
2839 DIE(aTHX_ "Undefined subroutine called");
2841 /* autoloaded stub? */
2842 if (cv != GvCV(gv)) {
2845 /* should call AUTOLOAD now? */
2848 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2855 sub_name = sv_newmortal();
2856 gv_efullname3(sub_name, gv, NULL);
2857 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2861 DIE(aTHX_ "Not a CODE reference");
2866 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2867 Perl_get_db_sub(aTHX_ &sv, cv);
2869 PL_curcopdb = PL_curcop;
2871 /* check for lsub that handles lvalue subroutines */
2872 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2873 /* if lsub not found then fall back to DB::sub */
2874 if (!cv) cv = GvCV(PL_DBsub);
2876 cv = GvCV(PL_DBsub);
2879 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2880 DIE(aTHX_ "No DB::sub routine defined");
2883 if (!(CvISXSUB(cv))) {
2884 /* This path taken at least 75% of the time */
2886 register I32 items = SP - MARK;
2887 AV* const padlist = CvPADLIST(cv);
2888 PUSHBLOCK(cx, CXt_SUB, MARK);
2890 cx->blk_sub.retop = PL_op->op_next;
2892 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2893 * that eval'' ops within this sub know the correct lexical space.
2894 * Owing the speed considerations, we choose instead to search for
2895 * the cv using find_runcv() when calling doeval().
2897 if (CvDEPTH(cv) >= 2) {
2898 PERL_STACK_OVERFLOW_CHECK();
2899 pad_push(padlist, CvDEPTH(cv));
2902 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2904 AV *const av = MUTABLE_AV(PAD_SVl(0));
2906 /* @_ is normally not REAL--this should only ever
2907 * happen when DB::sub() calls things that modify @_ */
2912 cx->blk_sub.savearray = GvAV(PL_defgv);
2913 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2914 CX_CURPAD_SAVE(cx->blk_sub);
2915 cx->blk_sub.argarray = av;
2918 if (items > AvMAX(av) + 1) {
2919 SV **ary = AvALLOC(av);
2920 if (AvARRAY(av) != ary) {
2921 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2924 if (items > AvMAX(av) + 1) {
2925 AvMAX(av) = items - 1;
2926 Renew(ary,items,SV*);
2931 Copy(MARK,AvARRAY(av),items,SV*);
2932 AvFILLp(av) = items - 1;
2940 /* warning must come *after* we fully set up the context
2941 * stuff so that __WARN__ handlers can safely dounwind()
2944 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2945 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2946 sub_crush_depth(cv);
2947 RETURNOP(CvSTART(cv));
2950 I32 markix = TOPMARK;
2955 /* Need to copy @_ to stack. Alternative may be to
2956 * switch stack to @_, and copy return values
2957 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2958 AV * const av = GvAV(PL_defgv);
2959 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2962 /* Mark is at the end of the stack. */
2964 Copy(AvARRAY(av), SP + 1, items, SV*);
2969 /* We assume first XSUB in &DB::sub is the called one. */
2971 SAVEVPTR(PL_curcop);
2972 PL_curcop = PL_curcopdb;
2975 /* Do we need to open block here? XXXX */
2977 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2979 CvXSUB(cv)(aTHX_ cv);
2981 /* Enforce some sanity in scalar context. */
2982 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2983 if (markix > PL_stack_sp - PL_stack_base)
2984 *(PL_stack_base + markix) = &PL_sv_undef;
2986 *(PL_stack_base + markix) = *PL_stack_sp;
2987 PL_stack_sp = PL_stack_base + markix;
2995 Perl_sub_crush_depth(pTHX_ CV *cv)
2997 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
3000 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
3002 SV* const tmpstr = sv_newmortal();
3003 gv_efullname3(tmpstr, CvGV(cv), NULL);
3004 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
3013 SV* const elemsv = POPs;
3014 IV elem = SvIV(elemsv);
3015 AV *const av = MUTABLE_AV(POPs);
3016 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
3017 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
3018 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
3019 bool preeminent = TRUE;
3022 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
3023 Perl_warner(aTHX_ packWARN(WARN_MISC),
3024 "Use of reference \"%"SVf"\" as array index",
3027 elem -= CopARYBASE_get(PL_curcop);
3028 if (SvTYPE(av) != SVt_PVAV)
3035 /* If we can determine whether the element exist,
3036 * Try to preserve the existenceness of a tied array
3037 * element by using EXISTS and DELETE if possible.
3038 * Fallback to FETCH and STORE otherwise. */
3039 if (SvCANEXISTDELETE(av))
3040 preeminent = av_exists(av, elem);
3043 svp = av_fetch(av, elem, lval && !defer);
3045 #ifdef PERL_MALLOC_WRAP
3046 if (SvUOK(elemsv)) {
3047 const UV uv = SvUV(elemsv);
3048 elem = uv > IV_MAX ? IV_MAX : uv;
3050 else if (SvNOK(elemsv))
3051 elem = (IV)SvNV(elemsv);
3053 static const char oom_array_extend[] =
3054 "Out of memory during array extend"; /* Duplicated in av.c */
3055 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3058 if (!svp || *svp == &PL_sv_undef) {
3061 DIE(aTHX_ PL_no_aelem, elem);
3062 lv = sv_newmortal();
3063 sv_upgrade(lv, SVt_PVLV);
3065 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
3066 LvTARG(lv) = SvREFCNT_inc_simple(av);
3067 LvTARGOFF(lv) = elem;
3074 save_aelem(av, elem, svp);
3076 SAVEADELETE(av, elem);
3078 else if (PL_op->op_private & OPpDEREF)
3079 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3081 sv = (svp ? *svp : &PL_sv_undef);
3082 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
3089 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3091 PERL_ARGS_ASSERT_VIVIFY_REF;
3096 Perl_croak_no_modify(aTHX);
3097 prepare_SV_for_RV(sv);
3100 SvRV_set(sv, newSV(0));
3103 SvRV_set(sv, MUTABLE_SV(newAV()));
3106 SvRV_set(sv, MUTABLE_SV(newHV()));
3117 SV* const sv = TOPs;
3120 SV* const rsv = SvRV(sv);
3121 if (SvTYPE(rsv) == SVt_PVCV) {
3127 SETs(method_common(sv, NULL));
3134 SV* const sv = cSVOP_sv;
3135 U32 hash = SvSHARED_HASH(sv);
3137 XPUSHs(method_common(sv, &hash));
3142 S_method_common(pTHX_ SV* meth, U32* hashp)
3148 const char* packname = NULL;
3151 SV * const sv = *(PL_stack_base + TOPMARK + 1);
3153 PERL_ARGS_ASSERT_METHOD_COMMON;
3156 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3161 ob = MUTABLE_SV(SvRV(sv));
3165 /* this isn't a reference */
3166 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3167 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3169 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3176 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3177 !(ob=MUTABLE_SV(GvIO(iogv))))
3179 /* this isn't the name of a filehandle either */
3181 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3182 ? !isIDFIRST_utf8((U8*)packname)
3183 : !isIDFIRST(*packname)
3186 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3188 SvOK(sv) ? "without a package or object reference"
3189 : "on an undefined value");
3191 /* assume it's a package name */
3192 stash = gv_stashpvn(packname, packlen, 0);
3196 SV* const ref = newSViv(PTR2IV(stash));
3197 (void)hv_store(PL_stashcache, packname, packlen, ref, 0);
3201 /* it _is_ a filehandle name -- replace with a reference */
3202 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3205 /* if we got here, ob should be a reference or a glob */
3206 if (!ob || !(SvOBJECT(ob)
3207 || (SvTYPE(ob) == SVt_PVGV
3209 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3212 const char * const name = SvPV_nolen_const(meth);
3213 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3214 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3218 stash = SvSTASH(ob);
3221 /* NOTE: stash may be null, hope hv_fetch_ent and
3222 gv_fetchmethod can cope (it seems they can) */
3224 /* shortcut for simple names */
3226 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3228 gv = MUTABLE_GV(HeVAL(he));
3229 if (isGV(gv) && GvCV(gv) &&
3230 (!GvCVGEN(gv) || GvCVGEN(gv)
3231 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3232 return MUTABLE_SV(GvCV(gv));
3236 gv = gv_fetchmethod_flags(stash ? stash : MUTABLE_HV(packsv),
3237 SvPV_nolen_const(meth),
3238 GV_AUTOLOAD | GV_CROAK);
3242 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3247 * c-indentation-style: bsd
3249 * indent-tabs-mode: t
3252 * ex: set ts=8 sts=4 sw=4 noet: