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);
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))
754 report_evil_fh(gv, io, PL_op->op_type);
755 SETERRNO(EBADF,RMS_IFI);
758 else if (!(fp = IoOFP(io))) {
759 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
761 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
762 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
763 report_evil_fh(gv, io, PL_op->op_type);
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))
830 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
834 if (SvTYPE(sv) != type)
835 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
836 if (PL_op->op_flags & OPf_REF) {
841 if (gimme != G_ARRAY)
842 goto croak_cant_return;
846 else if (PL_op->op_flags & OPf_MOD
847 && PL_op->op_private & OPpLVAL_INTRO)
848 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
851 if (SvTYPE(sv) == type) {
852 if (PL_op->op_flags & OPf_REF) {
857 if (gimme != G_ARRAY)
858 goto croak_cant_return;
866 if (!isGV_with_GP(sv)) {
867 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
875 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
876 if (PL_op->op_private & OPpLVAL_INTRO)
877 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
878 if (PL_op->op_flags & OPf_REF) {
883 if (gimme != G_ARRAY)
884 goto croak_cant_return;
892 AV *const av = MUTABLE_AV(sv);
893 /* The guts of pp_rv2av, with no intenting change to preserve history
894 (until such time as we get tools that can do blame annotation across
895 whitespace changes. */
896 if (gimme == G_ARRAY) {
897 const I32 maxarg = AvFILL(av) + 1;
898 (void)POPs; /* XXXX May be optimized away? */
900 if (SvRMAGICAL(av)) {
902 for (i=0; i < (U32)maxarg; i++) {
903 SV ** const svp = av_fetch(av, i, FALSE);
904 /* See note in pp_helem, and bug id #27839 */
906 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
911 Copy(AvARRAY(av), SP+1, maxarg, SV*);
915 else if (gimme == G_SCALAR) {
917 const I32 maxarg = AvFILL(av) + 1;
921 /* The guts of pp_rv2hv */
922 if (gimme == G_ARRAY) { /* array wanted */
926 else if (gimme == G_SCALAR) {
928 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
936 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
937 is_pp_rv2av ? "array" : "hash");
942 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
946 PERL_ARGS_ASSERT_DO_ODDBALL;
952 if (ckWARN(WARN_MISC)) {
954 if (relem == firstrelem &&
956 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
957 SvTYPE(SvRV(*relem)) == SVt_PVHV))
959 err = "Reference found where even-sized list expected";
962 err = "Odd number of elements in hash assignment";
963 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
967 didstore = hv_store_ent(hash,*relem,tmpstr,0);
968 if (SvMAGICAL(hash)) {
969 if (SvSMAGICAL(tmpstr))
981 SV **lastlelem = PL_stack_sp;
982 SV **lastrelem = PL_stack_base + POPMARK;
983 SV **firstrelem = PL_stack_base + POPMARK + 1;
984 SV **firstlelem = lastrelem + 1;
997 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
999 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1002 /* If there's a common identifier on both sides we have to take
1003 * special care that assigning the identifier on the left doesn't
1004 * clobber a value on the right that's used later in the list.
1006 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1007 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1008 for (relem = firstrelem; relem <= lastrelem; relem++) {
1009 if ((sv = *relem)) {
1010 TAINT_NOT; /* Each item is independent */
1012 /* Dear TODO test in t/op/sort.t, I love you.
1013 (It's relying on a panic, not a "semi-panic" from newSVsv()
1014 and then an assertion failure below.) */
1015 if (SvIS_FREED(sv)) {
1016 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1019 /* Specifically *not* sv_mortalcopy(), as that will steal TEMPs,
1020 and we need a second copy of a temp here. */
1021 *relem = sv_2mortal(newSVsv(sv));
1031 while (lelem <= lastlelem) {
1032 TAINT_NOT; /* Each item stands on its own, taintwise. */
1034 switch (SvTYPE(sv)) {
1036 ary = MUTABLE_AV(sv);
1037 magic = SvMAGICAL(ary) != 0;
1039 av_extend(ary, lastrelem - relem);
1041 while (relem <= lastrelem) { /* gobble up all the rest */
1045 sv_setsv(sv, *relem);
1047 didstore = av_store(ary,i++,sv);
1056 if (PL_delaymagic & DM_ARRAY_ISA)
1057 SvSETMAGIC(MUTABLE_SV(ary));
1059 case SVt_PVHV: { /* normal hash */
1061 SV** topelem = relem;
1063 hash = MUTABLE_HV(sv);
1064 magic = SvMAGICAL(hash) != 0;
1066 firsthashrelem = relem;
1068 while (relem < lastrelem) { /* gobble up all the rest */
1070 sv = *relem ? *relem : &PL_sv_no;
1074 sv_setsv(tmpstr,*relem); /* value */
1076 if (gimme != G_VOID) {
1077 if (hv_exists_ent(hash, sv, 0))
1078 /* key overwrites an existing entry */
1081 if (gimme == G_ARRAY) {
1082 /* copy element back: possibly to an earlier
1083 * stack location if we encountered dups earlier */
1085 *topelem++ = tmpstr;
1088 didstore = hv_store_ent(hash,sv,tmpstr,0);
1090 if (SvSMAGICAL(tmpstr))
1097 if (relem == lastrelem) {
1098 do_oddball(hash, relem, firstrelem);
1104 if (SvIMMORTAL(sv)) {
1105 if (relem <= lastrelem)
1109 if (relem <= lastrelem) {
1110 sv_setsv(sv, *relem);
1114 sv_setsv(sv, &PL_sv_undef);
1119 if (PL_delaymagic & ~DM_DELAY) {
1120 if (PL_delaymagic & DM_UID) {
1121 #ifdef HAS_SETRESUID
1122 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1123 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1126 # ifdef HAS_SETREUID
1127 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1128 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1131 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1132 (void)setruid(PL_uid);
1133 PL_delaymagic &= ~DM_RUID;
1135 # endif /* HAS_SETRUID */
1137 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1138 (void)seteuid(PL_euid);
1139 PL_delaymagic &= ~DM_EUID;
1141 # endif /* HAS_SETEUID */
1142 if (PL_delaymagic & DM_UID) {
1143 if (PL_uid != PL_euid)
1144 DIE(aTHX_ "No setreuid available");
1145 (void)PerlProc_setuid(PL_uid);
1147 # endif /* HAS_SETREUID */
1148 #endif /* HAS_SETRESUID */
1149 PL_uid = PerlProc_getuid();
1150 PL_euid = PerlProc_geteuid();
1152 if (PL_delaymagic & DM_GID) {
1153 #ifdef HAS_SETRESGID
1154 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1155 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1158 # ifdef HAS_SETREGID
1159 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1160 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1163 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1164 (void)setrgid(PL_gid);
1165 PL_delaymagic &= ~DM_RGID;
1167 # endif /* HAS_SETRGID */
1169 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1170 (void)setegid(PL_egid);
1171 PL_delaymagic &= ~DM_EGID;
1173 # endif /* HAS_SETEGID */
1174 if (PL_delaymagic & DM_GID) {
1175 if (PL_gid != PL_egid)
1176 DIE(aTHX_ "No setregid available");
1177 (void)PerlProc_setgid(PL_gid);
1179 # endif /* HAS_SETREGID */
1180 #endif /* HAS_SETRESGID */
1181 PL_gid = PerlProc_getgid();
1182 PL_egid = PerlProc_getegid();
1184 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1188 if (gimme == G_VOID)
1189 SP = firstrelem - 1;
1190 else if (gimme == G_SCALAR) {
1193 SETi(lastrelem - firstrelem + 1 - duplicates);
1200 /* at this point we have removed the duplicate key/value
1201 * pairs from the stack, but the remaining values may be
1202 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1203 * the (a 2), but the stack now probably contains
1204 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1205 * obliterates the earlier key. So refresh all values. */
1206 lastrelem -= duplicates;
1207 relem = firsthashrelem;
1208 while (relem < lastrelem) {
1211 he = hv_fetch_ent(hash, sv, 0, 0);
1212 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1218 SP = firstrelem + (lastlelem - firstlelem);
1219 lelem = firstlelem + (relem - firstrelem);
1221 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1230 register PMOP * const pm = cPMOP;
1231 REGEXP * rx = PM_GETRE(pm);
1232 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1233 SV * const rv = sv_newmortal();
1235 SvUPGRADE(rv, SVt_IV);
1236 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1237 loathe to use it here, but it seems to be the right fix. Or close.
1238 The key part appears to be that it's essential for pp_qr to return a new
1239 object (SV), which implies that there needs to be an effective way to
1240 generate a new SV from the existing SV that is pre-compiled in the
1242 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1246 HV *const stash = gv_stashsv(pkg, GV_ADD);
1248 (void)sv_bless(rv, stash);
1251 if (RX_EXTFLAGS(rx) & RXf_TAINTED)
1260 register PMOP *pm = cPMOP;
1262 register const char *t;
1263 register const char *s;
1266 U8 r_flags = REXEC_CHECKED;
1267 const char *truebase; /* Start of string */
1268 register REGEXP *rx = PM_GETRE(pm);
1270 const I32 gimme = GIMME;
1273 const I32 oldsave = PL_savestack_ix;
1274 I32 update_minmatch = 1;
1275 I32 had_zerolen = 0;
1278 if (PL_op->op_flags & OPf_STACKED)
1280 else if (PL_op->op_private & OPpTARGET_MY)
1287 PUTBACK; /* EVAL blocks need stack_sp. */
1288 /* Skip get-magic if this is a qr// clone, because regcomp has
1290 s = ((struct regexp *)SvANY(rx))->mother_re
1291 ? SvPV_nomg_const(TARG, len)
1292 : SvPV_const(TARG, len);
1294 DIE(aTHX_ "panic: pp_match");
1296 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1297 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1300 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1302 /* PMdf_USED is set after a ?? matches once */
1305 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1307 pm->op_pmflags & PMf_USED
1311 if (gimme == G_ARRAY)
1318 /* empty pattern special-cased to use last successful pattern if possible */
1319 if (!RX_PRELEN(rx) && PL_curpm) {
1324 if (RX_MINLEN(rx) > (I32)len)
1329 /* XXXX What part of this is needed with true \G-support? */
1330 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1331 RX_OFFS(rx)[0].start = -1;
1332 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1333 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1334 if (mg && mg->mg_len >= 0) {
1335 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1336 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1337 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1338 r_flags |= REXEC_IGNOREPOS;
1339 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1340 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1343 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1344 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1345 update_minmatch = 0;
1349 /* XXX: comment out !global get safe $1 vars after a
1350 match, BUT be aware that this leads to dramatic slowdowns on
1351 /g matches against large strings. So far a solution to this problem
1352 appears to be quite tricky.
1353 Test for the unsafe vars are TODO for now. */
1354 if ( (!global && RX_NPARENS(rx))
1355 || SvTEMP(TARG) || SvAMAGIC(TARG) || PL_sawampersand
1356 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1357 r_flags |= REXEC_COPY_STR;
1359 r_flags |= REXEC_SCREAM;
1362 if (global && RX_OFFS(rx)[0].start != -1) {
1363 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1364 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1366 if (update_minmatch++)
1367 minmatch = had_zerolen;
1369 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1370 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1371 /* FIXME - can PL_bostr be made const char *? */
1372 PL_bostr = (char *)truebase;
1373 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1377 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1379 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1380 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
1381 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
1382 && (r_flags & REXEC_SCREAM)))
1383 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1386 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1387 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1390 if (dynpm->op_pmflags & PMf_ONCE) {
1392 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1394 dynpm->op_pmflags |= PMf_USED;
1405 RX_MATCH_TAINTED_on(rx);
1406 TAINT_IF(RX_MATCH_TAINTED(rx));
1407 if (gimme == G_ARRAY) {
1408 const I32 nparens = RX_NPARENS(rx);
1409 I32 i = (global && !nparens) ? 1 : 0;
1411 SPAGAIN; /* EVAL blocks could move the stack. */
1412 EXTEND(SP, nparens + i);
1413 EXTEND_MORTAL(nparens + i);
1414 for (i = !i; i <= nparens; i++) {
1415 PUSHs(sv_newmortal());
1416 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1417 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1418 s = RX_OFFS(rx)[i].start + truebase;
1419 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1420 len < 0 || len > strend - s)
1421 DIE(aTHX_ "panic: pp_match start/end pointers");
1422 sv_setpvn(*SP, s, len);
1423 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1428 if (dynpm->op_pmflags & PMf_CONTINUE) {
1430 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1431 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1433 #ifdef PERL_OLD_COPY_ON_WRITE
1435 sv_force_normal_flags(TARG, 0);
1437 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1438 &PL_vtbl_mglob, NULL, 0);
1440 if (RX_OFFS(rx)[0].start != -1) {
1441 mg->mg_len = RX_OFFS(rx)[0].end;
1442 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1443 mg->mg_flags |= MGf_MINMATCH;
1445 mg->mg_flags &= ~MGf_MINMATCH;
1448 had_zerolen = (RX_OFFS(rx)[0].start != -1
1449 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1450 == (UV)RX_OFFS(rx)[0].end));
1451 PUTBACK; /* EVAL blocks may use stack */
1452 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1457 LEAVE_SCOPE(oldsave);
1463 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1464 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1468 #ifdef PERL_OLD_COPY_ON_WRITE
1470 sv_force_normal_flags(TARG, 0);
1472 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1473 &PL_vtbl_mglob, NULL, 0);
1475 if (RX_OFFS(rx)[0].start != -1) {
1476 mg->mg_len = RX_OFFS(rx)[0].end;
1477 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1478 mg->mg_flags |= MGf_MINMATCH;
1480 mg->mg_flags &= ~MGf_MINMATCH;
1483 LEAVE_SCOPE(oldsave);
1487 yup: /* Confirmed by INTUIT */
1489 RX_MATCH_TAINTED_on(rx);
1490 TAINT_IF(RX_MATCH_TAINTED(rx));
1492 if (dynpm->op_pmflags & PMf_ONCE) {
1494 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1496 dynpm->op_pmflags |= PMf_USED;
1499 if (RX_MATCH_COPIED(rx))
1500 Safefree(RX_SUBBEG(rx));
1501 RX_MATCH_COPIED_off(rx);
1502 RX_SUBBEG(rx) = NULL;
1504 /* FIXME - should rx->subbeg be const char *? */
1505 RX_SUBBEG(rx) = (char *) truebase;
1506 RX_OFFS(rx)[0].start = s - truebase;
1507 if (RX_MATCH_UTF8(rx)) {
1508 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1509 RX_OFFS(rx)[0].end = t - truebase;
1512 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1514 RX_SUBLEN(rx) = strend - truebase;
1517 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1519 #ifdef PERL_OLD_COPY_ON_WRITE
1520 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1522 PerlIO_printf(Perl_debug_log,
1523 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1524 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1527 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1529 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1530 assert (SvPOKp(RX_SAVED_COPY(rx)));
1535 RX_SUBBEG(rx) = savepvn(t, strend - t);
1536 #ifdef PERL_OLD_COPY_ON_WRITE
1537 RX_SAVED_COPY(rx) = NULL;
1540 RX_SUBLEN(rx) = strend - t;
1541 RX_MATCH_COPIED_on(rx);
1542 off = RX_OFFS(rx)[0].start = s - t;
1543 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1545 else { /* startp/endp are used by @- @+. */
1546 RX_OFFS(rx)[0].start = s - truebase;
1547 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1549 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1551 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
1552 LEAVE_SCOPE(oldsave);
1557 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1558 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1559 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1564 LEAVE_SCOPE(oldsave);
1565 if (gimme == G_ARRAY)
1571 Perl_do_readline(pTHX)
1573 dVAR; dSP; dTARGETSTACKED;
1578 register IO * const io = GvIO(PL_last_in_gv);
1579 register const I32 type = PL_op->op_type;
1580 const I32 gimme = GIMME_V;
1583 MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1586 XPUSHs(SvTIED_obj(MUTABLE_SV(io), mg));
1588 ENTER_with_name("call_READLINE");
1589 call_method("READLINE", gimme);
1590 LEAVE_with_name("call_READLINE");
1592 if (gimme == G_SCALAR) {
1593 SV* const result = POPs;
1594 SvSetSV_nosteal(TARG, result);
1604 if (IoFLAGS(io) & IOf_ARGV) {
1605 if (IoFLAGS(io) & IOf_START) {
1607 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1608 IoFLAGS(io) &= ~IOf_START;
1609 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1610 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1611 SvSETMAGIC(GvSV(PL_last_in_gv));
1616 fp = nextargv(PL_last_in_gv);
1617 if (!fp) { /* Note: fp != IoIFP(io) */
1618 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1621 else if (type == OP_GLOB)
1622 fp = Perl_start_glob(aTHX_ POPs, io);
1624 else if (type == OP_GLOB)
1626 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1627 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1631 if ((!io || !(IoFLAGS(io) & IOf_START))
1632 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1634 if (type == OP_GLOB)
1635 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1636 "glob failed (can't start child: %s)",
1639 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1641 if (gimme == G_SCALAR) {
1642 /* undef TARG, and push that undefined value */
1643 if (type != OP_RCATLINE) {
1644 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1652 if (gimme == G_SCALAR) {
1654 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1657 if (type == OP_RCATLINE)
1658 SvPV_force_nolen(sv);
1662 else if (isGV_with_GP(sv)) {
1663 SvPV_force_nolen(sv);
1665 SvUPGRADE(sv, SVt_PV);
1666 tmplen = SvLEN(sv); /* remember if already alloced */
1667 if (!tmplen && !SvREADONLY(sv)) {
1668 /* try short-buffering it. Please update t/op/readline.t
1669 * if you change the growth length.
1674 if (type == OP_RCATLINE && SvOK(sv)) {
1676 SvPV_force_nolen(sv);
1682 sv = sv_2mortal(newSV(80));
1686 /* This should not be marked tainted if the fp is marked clean */
1687 #define MAYBE_TAINT_LINE(io, sv) \
1688 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1693 /* delay EOF state for a snarfed empty file */
1694 #define SNARF_EOF(gimme,rs,io,sv) \
1695 (gimme != G_SCALAR || SvCUR(sv) \
1696 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1700 if (!sv_gets(sv, fp, offset)
1702 || SNARF_EOF(gimme, PL_rs, io, sv)
1703 || PerlIO_error(fp)))
1705 PerlIO_clearerr(fp);
1706 if (IoFLAGS(io) & IOf_ARGV) {
1707 fp = nextargv(PL_last_in_gv);
1710 (void)do_close(PL_last_in_gv, FALSE);
1712 else if (type == OP_GLOB) {
1713 if (!do_close(PL_last_in_gv, FALSE)) {
1714 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1715 "glob failed (child exited with status %d%s)",
1716 (int)(STATUS_CURRENT >> 8),
1717 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1720 if (gimme == G_SCALAR) {
1721 if (type != OP_RCATLINE) {
1722 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1728 MAYBE_TAINT_LINE(io, sv);
1731 MAYBE_TAINT_LINE(io, sv);
1733 IoFLAGS(io) |= IOf_NOLINE;
1737 if (type == OP_GLOB) {
1740 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1741 char * const tmps = SvEND(sv) - 1;
1742 if (*tmps == *SvPVX_const(PL_rs)) {
1744 SvCUR_set(sv, SvCUR(sv) - 1);
1747 for (t1 = SvPVX_const(sv); *t1; t1++)
1748 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1749 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1751 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1752 (void)POPs; /* Unmatched wildcard? Chuck it... */
1755 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1756 if (ckWARN(WARN_UTF8)) {
1757 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1758 const STRLEN len = SvCUR(sv) - offset;
1761 if (!is_utf8_string_loc(s, len, &f))
1762 /* Emulate :encoding(utf8) warning in the same case. */
1763 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1764 "utf8 \"\\x%02X\" does not map to Unicode",
1765 f < (U8*)SvEND(sv) ? *f : 0);
1768 if (gimme == G_ARRAY) {
1769 if (SvLEN(sv) - SvCUR(sv) > 20) {
1770 SvPV_shrink_to_cur(sv);
1772 sv = sv_2mortal(newSV(80));
1775 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1776 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1777 const STRLEN new_len
1778 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1779 SvPV_renew(sv, new_len);
1788 register PERL_CONTEXT *cx;
1789 I32 gimme = OP_GIMME(PL_op, -1);
1792 if (cxstack_ix >= 0) {
1793 /* If this flag is set, we're just inside a return, so we should
1794 * store the caller's context */
1795 gimme = (PL_op->op_flags & OPf_SPECIAL)
1797 : cxstack[cxstack_ix].blk_gimme;
1802 ENTER_with_name("block");
1805 PUSHBLOCK(cx, CXt_BLOCK, SP);
1815 SV * const keysv = POPs;
1816 HV * const hv = MUTABLE_HV(POPs);
1817 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1818 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1820 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1821 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1822 bool preeminent = TRUE;
1824 if (SvTYPE(hv) != SVt_PVHV)
1831 /* If we can determine whether the element exist,
1832 * Try to preserve the existenceness of a tied hash
1833 * element by using EXISTS and DELETE if possible.
1834 * Fallback to FETCH and STORE otherwise. */
1835 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1836 preeminent = hv_exists_ent(hv, keysv, 0);
1839 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1840 svp = he ? &HeVAL(he) : NULL;
1842 if (!svp || *svp == &PL_sv_undef) {
1846 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1848 lv = sv_newmortal();
1849 sv_upgrade(lv, SVt_PVLV);
1851 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1852 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1853 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1859 if (HvNAME_get(hv) && isGV(*svp))
1860 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1861 else if (preeminent)
1862 save_helem_flags(hv, keysv, svp,
1863 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1865 SAVEHDELETE(hv, keysv);
1867 else if (PL_op->op_private & OPpDEREF)
1868 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1870 sv = (svp ? *svp : &PL_sv_undef);
1871 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1872 * was to make C<local $tied{foo} = $tied{foo}> possible.
1873 * However, it seems no longer to be needed for that purpose, and
1874 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1875 * would loop endlessly since the pos magic is getting set on the
1876 * mortal copy and lost. However, the copy has the effect of
1877 * triggering the get magic, and losing it altogether made things like
1878 * c<$tied{foo};> in void context no longer do get magic, which some
1879 * code relied on. Also, delayed triggering of magic on @+ and friends
1880 * meant the original regex may be out of scope by now. So as a
1881 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1882 * being called too many times). */
1883 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1892 register PERL_CONTEXT *cx;
1897 if (PL_op->op_flags & OPf_SPECIAL) {
1898 cx = &cxstack[cxstack_ix];
1899 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1904 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
1907 if (gimme == G_VOID)
1909 else if (gimme == G_SCALAR) {
1913 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1916 *MARK = sv_mortalcopy(TOPs);
1919 *MARK = &PL_sv_undef;
1923 else if (gimme == G_ARRAY) {
1924 /* in case LEAVE wipes old return values */
1926 for (mark = newsp + 1; mark <= SP; mark++) {
1927 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1928 *mark = sv_mortalcopy(*mark);
1929 TAINT_NOT; /* Each item is independent */
1933 PL_curpm = newpm; /* Don't pop $1 et al till now */
1935 LEAVE_with_name("block");
1943 register PERL_CONTEXT *cx;
1946 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1947 bool av_is_stack = FALSE;
1950 cx = &cxstack[cxstack_ix];
1951 if (!CxTYPE_is_LOOP(cx))
1952 DIE(aTHX_ "panic: pp_iter");
1954 itersvp = CxITERVAR(cx);
1955 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1956 /* string increment */
1957 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1958 SV *end = cx->blk_loop.state_u.lazysv.end;
1959 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1960 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1962 const char *max = SvPV_const(end, maxlen);
1963 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1964 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1965 /* safe to reuse old SV */
1966 sv_setsv(*itersvp, cur);
1970 /* we need a fresh SV every time so that loop body sees a
1971 * completely new SV for closures/references to work as
1974 *itersvp = newSVsv(cur);
1975 SvREFCNT_dec(oldsv);
1977 if (strEQ(SvPVX_const(cur), max))
1978 sv_setiv(cur, 0); /* terminate next time */
1985 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1986 /* integer increment */
1987 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1990 /* don't risk potential race */
1991 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1992 /* safe to reuse old SV */
1993 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1997 /* we need a fresh SV every time so that loop body sees a
1998 * completely new SV for closures/references to work as they
2001 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
2002 SvREFCNT_dec(oldsv);
2005 /* Handle end of range at IV_MAX */
2006 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
2007 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
2009 cx->blk_loop.state_u.lazyiv.cur++;
2010 cx->blk_loop.state_u.lazyiv.end++;
2017 assert(CxTYPE(cx) == CXt_LOOP_FOR);
2018 av = cx->blk_loop.state_u.ary.ary;
2023 if (PL_op->op_private & OPpITER_REVERSED) {
2024 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
2025 ? cx->blk_loop.resetsp + 1 : 0))
2028 if (SvMAGICAL(av) || AvREIFY(av)) {
2029 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
2030 sv = svp ? *svp : NULL;
2033 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
2037 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
2041 if (SvMAGICAL(av) || AvREIFY(av)) {
2042 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
2043 sv = svp ? *svp : NULL;
2046 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
2050 if (sv && SvIS_FREED(sv)) {
2052 Perl_croak(aTHX_ "Use of freed value in iteration");
2057 SvREFCNT_inc_simple_void_NN(sv);
2061 if (!av_is_stack && sv == &PL_sv_undef) {
2062 SV *lv = newSV_type(SVt_PVLV);
2064 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2065 LvTARG(lv) = SvREFCNT_inc_simple(av);
2066 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
2067 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2073 SvREFCNT_dec(oldsv);
2081 register PMOP *pm = cPMOP;
2096 register REGEXP *rx = PM_GETRE(pm);
2098 int force_on_match = 0;
2099 const I32 oldsave = PL_savestack_ix;
2101 bool doutf8 = FALSE;
2103 #ifdef PERL_OLD_COPY_ON_WRITE
2107 /* known replacement string? */
2108 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2112 if (PL_op->op_flags & OPf_STACKED)
2114 else if (PL_op->op_private & OPpTARGET_MY)
2121 /* In non-destructive replacement mode, duplicate target scalar so it
2122 * remains unchanged. */
2123 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2124 TARG = sv_2mortal(newSVsv(TARG));
2126 #ifdef PERL_OLD_COPY_ON_WRITE
2127 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2128 because they make integers such as 256 "false". */
2129 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2132 sv_force_normal_flags(TARG,0);
2135 #ifdef PERL_OLD_COPY_ON_WRITE
2139 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2140 || SvTYPE(TARG) > SVt_PVLV)
2141 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2142 Perl_croak_no_modify(aTHX);
2146 s = SvPV_mutable(TARG, len);
2147 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2149 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
2150 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2155 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2159 DIE(aTHX_ "panic: pp_subst");
2162 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2163 maxiters = 2 * slen + 10; /* We can match twice at each
2164 position, once with zero-length,
2165 second time with non-zero. */
2167 if (!RX_PRELEN(rx) && PL_curpm) {
2171 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2172 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2173 ? REXEC_COPY_STR : 0;
2175 r_flags |= REXEC_SCREAM;
2178 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2180 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2184 /* How to do it in subst? */
2185 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2187 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY)
2188 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
2189 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
2190 && (r_flags & REXEC_SCREAM))))
2195 /* only replace once? */
2196 once = !(rpm->op_pmflags & PMf_GLOBAL);
2197 matched = CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2198 r_flags | REXEC_CHECKED);
2199 /* known replacement string? */
2202 /* Upgrade the source if the replacement is utf8 but the source is not,
2203 * but only if it matched; see
2204 * http://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158809.html
2206 if (matched && DO_UTF8(dstr) && ! DO_UTF8(TARG)) {
2207 const STRLEN new_len = sv_utf8_upgrade(TARG);
2209 /* If the lengths are the same, the pattern contains only
2210 * invariants, can keep going; otherwise, various internal markers
2211 * could be off, so redo */
2212 if (new_len != len) {
2217 /* replacement needing upgrading? */
2218 if (DO_UTF8(TARG) && !doutf8) {
2219 nsv = sv_newmortal();
2222 sv_recode_to_utf8(nsv, PL_encoding);
2224 sv_utf8_upgrade(nsv);
2225 c = SvPV_const(nsv, clen);
2229 c = SvPV_const(dstr, clen);
2230 doutf8 = DO_UTF8(dstr);
2238 /* can do inplace substitution? */
2240 #ifdef PERL_OLD_COPY_ON_WRITE
2243 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2244 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2245 && (!doutf8 || SvUTF8(TARG))) {
2249 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2253 LEAVE_SCOPE(oldsave);
2256 #ifdef PERL_OLD_COPY_ON_WRITE
2257 if (SvIsCOW(TARG)) {
2258 assert (!force_on_match);
2262 if (force_on_match) {
2264 s = SvPV_force(TARG, len);
2269 SvSCREAM_off(TARG); /* disable possible screamer */
2271 rxtainted |= RX_MATCH_TAINTED(rx);
2272 m = orig + RX_OFFS(rx)[0].start;
2273 d = orig + RX_OFFS(rx)[0].end;
2275 if (m - s > strend - d) { /* faster to shorten from end */
2277 Copy(c, m, clen, char);
2282 Move(d, m, i, char);
2286 SvCUR_set(TARG, m - s);
2288 else if ((i = m - s)) { /* faster from front */
2291 Move(s, d - i, i, char);
2294 Copy(c, m, clen, char);
2299 Copy(c, d, clen, char);
2304 TAINT_IF(rxtainted & 1);
2306 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2313 if (iters++ > maxiters)
2314 DIE(aTHX_ "Substitution loop");
2315 rxtainted |= RX_MATCH_TAINTED(rx);
2316 m = RX_OFFS(rx)[0].start + orig;
2319 Move(s, d, i, char);
2323 Copy(c, d, clen, char);
2326 s = RX_OFFS(rx)[0].end + orig;
2327 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2329 /* don't match same null twice */
2330 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2333 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2334 Move(s, d, i+1, char); /* include the NUL */
2336 TAINT_IF(rxtainted & 1);
2338 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2343 (void)SvPOK_only_UTF8(TARG);
2344 TAINT_IF(rxtainted);
2345 if (SvSMAGICAL(TARG)) {
2353 LEAVE_SCOPE(oldsave);
2359 if (force_on_match) {
2361 s = SvPV_force(TARG, len);
2364 #ifdef PERL_OLD_COPY_ON_WRITE
2367 rxtainted |= RX_MATCH_TAINTED(rx);
2368 dstr = newSVpvn_utf8(m, s-m, DO_UTF8(TARG));
2372 register PERL_CONTEXT *cx;
2375 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2377 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2379 if (iters++ > maxiters)
2380 DIE(aTHX_ "Substitution loop");
2381 rxtainted |= RX_MATCH_TAINTED(rx);
2382 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2385 orig = RX_SUBBEG(rx);
2387 strend = s + (strend - m);
2389 m = RX_OFFS(rx)[0].start + orig;
2390 if (doutf8 && !SvUTF8(dstr))
2391 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2393 sv_catpvn(dstr, s, m-s);
2394 s = RX_OFFS(rx)[0].end + orig;
2396 sv_catpvn(dstr, c, clen);
2399 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2400 TARG, NULL, r_flags));
2401 if (doutf8 && !DO_UTF8(TARG))
2402 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2404 sv_catpvn(dstr, s, strend - s);
2406 #ifdef PERL_OLD_COPY_ON_WRITE
2407 /* The match may make the string COW. If so, brilliant, because that's
2408 just saved us one malloc, copy and free - the regexp has donated
2409 the old buffer, and we malloc an entirely new one, rather than the
2410 regexp malloc()ing a buffer and copying our original, only for
2411 us to throw it away here during the substitution. */
2412 if (SvIsCOW(TARG)) {
2413 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2419 SvPV_set(TARG, SvPVX(dstr));
2420 SvCUR_set(TARG, SvCUR(dstr));
2421 SvLEN_set(TARG, SvLEN(dstr));
2422 doutf8 |= DO_UTF8(dstr);
2423 SvPV_set(dstr, NULL);
2425 TAINT_IF(rxtainted & 1);
2427 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2432 (void)SvPOK_only(TARG);
2435 TAINT_IF(rxtainted);
2438 LEAVE_SCOPE(oldsave);
2446 if (rpm->op_pmflags & PMf_NONDESTRUCT)
2450 LEAVE_SCOPE(oldsave);
2459 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2460 ++*PL_markstack_ptr;
2462 LEAVE_with_name("grep_item"); /* exit inner scope */
2465 if (PL_stack_base + *PL_markstack_ptr > SP) {
2467 const I32 gimme = GIMME_V;
2469 LEAVE_with_name("grep"); /* exit outer scope */
2470 (void)POPMARK; /* pop src */
2471 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2472 (void)POPMARK; /* pop dst */
2473 SP = PL_stack_base + POPMARK; /* pop original mark */
2474 if (gimme == G_SCALAR) {
2475 if (PL_op->op_private & OPpGREP_LEX) {
2476 SV* const sv = sv_newmortal();
2477 sv_setiv(sv, items);
2485 else if (gimme == G_ARRAY)
2492 ENTER_with_name("grep_item"); /* enter inner scope */
2495 src = PL_stack_base[*PL_markstack_ptr];
2497 if (PL_op->op_private & OPpGREP_LEX)
2498 PAD_SVl(PL_op->op_targ) = src;
2502 RETURNOP(cLOGOP->op_other);
2513 register PERL_CONTEXT *cx;
2516 if (CxMULTICALL(&cxstack[cxstack_ix]))
2520 cxstack_ix++; /* temporarily protect top context */
2523 if (gimme == G_SCALAR) {
2526 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2528 *MARK = SvREFCNT_inc(TOPs);
2533 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2535 *MARK = sv_mortalcopy(sv);
2540 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2544 *MARK = &PL_sv_undef;
2548 else if (gimme == G_ARRAY) {
2549 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2550 if (!SvTEMP(*MARK)) {
2551 *MARK = sv_mortalcopy(*MARK);
2552 TAINT_NOT; /* Each item is independent */
2560 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2561 PL_curpm = newpm; /* ... and pop $1 et al */
2564 return cx->blk_sub.retop;
2567 /* This duplicates the above code because the above code must not
2568 * get any slower by more conditions */
2576 register PERL_CONTEXT *cx;
2579 if (CxMULTICALL(&cxstack[cxstack_ix]))
2583 cxstack_ix++; /* temporarily protect top context */
2587 if (CxLVAL(cx) & OPpENTERSUB_INARGS) {
2588 /* We are an argument to a function or grep().
2589 * This kind of lvalueness was legal before lvalue
2590 * subroutines too, so be backward compatible:
2591 * cannot report errors. */
2593 /* Scalar context *is* possible, on the LHS of -> only,
2594 * as in f()->meth(). But this is not an lvalue. */
2595 if (gimme == G_SCALAR)
2597 if (gimme == G_ARRAY) {
2598 if (!CvLVALUE(cx->blk_sub.cv))
2599 goto temporise_array;
2600 EXTEND_MORTAL(SP - newsp);
2601 for (mark = newsp + 1; mark <= SP; mark++) {
2604 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2605 *mark = sv_mortalcopy(*mark);
2607 /* Can be a localized value subject to deletion. */
2608 PL_tmps_stack[++PL_tmps_ix] = *mark;
2609 SvREFCNT_inc_void(*mark);
2614 else if (CxLVAL(cx)) { /* Leave it as it is if we can. */
2615 /* Here we go for robustness, not for speed, so we change all
2616 * the refcounts so the caller gets a live guy. Cannot set
2617 * TEMP, so sv_2mortal is out of question. */
2618 if (!CvLVALUE(cx->blk_sub.cv)) {
2624 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2626 if (gimme == G_SCALAR) {
2630 /* Temporaries are bad unless they happen to have set magic
2631 * attached, such as the elements of a tied hash or array */
2632 if ((SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP) ||
2633 (SvFLAGS(TOPs) & (SVf_READONLY | SVf_FAKE))
2636 !SvSMAGICAL(TOPs)) {
2642 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2643 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2644 : "a readonly value" : "a temporary");
2646 else { /* Can be a localized value
2647 * subject to deletion. */
2648 PL_tmps_stack[++PL_tmps_ix] = *mark;
2649 SvREFCNT_inc_void(*mark);
2652 else { /* Should not happen? */
2658 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2659 (MARK > SP ? "Empty array" : "Array"));
2663 else if (gimme == G_ARRAY) {
2664 EXTEND_MORTAL(SP - newsp);
2665 for (mark = newsp + 1; mark <= SP; mark++) {
2666 if (*mark != &PL_sv_undef
2667 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2668 /* Might be flattened array after $#array = */
2675 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2676 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2679 /* Can be a localized value subject to deletion. */
2680 PL_tmps_stack[++PL_tmps_ix] = *mark;
2681 SvREFCNT_inc_void(*mark);
2687 if (gimme == G_SCALAR) {
2691 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2693 *MARK = SvREFCNT_inc(TOPs);
2698 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2700 *MARK = sv_mortalcopy(sv);
2705 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2709 *MARK = &PL_sv_undef;
2713 else if (gimme == G_ARRAY) {
2715 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2716 if (!SvTEMP(*MARK)) {
2717 *MARK = sv_mortalcopy(*MARK);
2718 TAINT_NOT; /* Each item is independent */
2727 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2728 PL_curpm = newpm; /* ... and pop $1 et al */
2731 return cx->blk_sub.retop;
2739 register PERL_CONTEXT *cx;
2741 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2744 DIE(aTHX_ "Not a CODE reference");
2745 switch (SvTYPE(sv)) {
2746 /* This is overwhelming the most common case: */
2748 if (!isGV_with_GP(sv))
2749 DIE(aTHX_ "Not a CODE reference");
2751 if (!(cv = GvCVu((const GV *)sv))) {
2753 cv = sv_2cv(sv, &stash, &gv, 0);
2762 if(isGV_with_GP(sv)) goto we_have_a_glob;
2765 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2767 SP = PL_stack_base + POPMARK;
2774 sv = amagic_deref_call(sv, to_cv_amg);
2775 /* Don't SPAGAIN here. */
2780 sym = SvPV_nomg_const(sv, len);
2782 DIE(aTHX_ PL_no_usym, "a subroutine");
2783 if (PL_op->op_private & HINT_STRICT_REFS)
2784 DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
2785 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2788 cv = MUTABLE_CV(SvRV(sv));
2789 if (SvTYPE(cv) == SVt_PVCV)
2794 DIE(aTHX_ "Not a CODE reference");
2795 /* This is the second most common case: */
2797 cv = MUTABLE_CV(sv);
2805 if (!CvROOT(cv) && !CvXSUB(cv)) {
2809 /* anonymous or undef'd function leaves us no recourse */
2810 if (CvANON(cv) || !(gv = CvGV(cv)))
2811 DIE(aTHX_ "Undefined subroutine called");
2813 /* autoloaded stub? */
2814 if (cv != GvCV(gv)) {
2817 /* should call AUTOLOAD now? */
2820 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2827 sub_name = sv_newmortal();
2828 gv_efullname3(sub_name, gv, NULL);
2829 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2833 DIE(aTHX_ "Not a CODE reference");
2838 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2839 Perl_get_db_sub(aTHX_ &sv, cv);
2841 PL_curcopdb = PL_curcop;
2843 /* check for lsub that handles lvalue subroutines */
2844 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2845 /* if lsub not found then fall back to DB::sub */
2846 if (!cv) cv = GvCV(PL_DBsub);
2848 cv = GvCV(PL_DBsub);
2851 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2852 DIE(aTHX_ "No DB::sub routine defined");
2855 if (!(CvISXSUB(cv))) {
2856 /* This path taken at least 75% of the time */
2858 register I32 items = SP - MARK;
2859 AV* const padlist = CvPADLIST(cv);
2860 PUSHBLOCK(cx, CXt_SUB, MARK);
2862 cx->blk_sub.retop = PL_op->op_next;
2864 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2865 * that eval'' ops within this sub know the correct lexical space.
2866 * Owing the speed considerations, we choose instead to search for
2867 * the cv using find_runcv() when calling doeval().
2869 if (CvDEPTH(cv) >= 2) {
2870 PERL_STACK_OVERFLOW_CHECK();
2871 pad_push(padlist, CvDEPTH(cv));
2874 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2876 AV *const av = MUTABLE_AV(PAD_SVl(0));
2878 /* @_ is normally not REAL--this should only ever
2879 * happen when DB::sub() calls things that modify @_ */
2884 cx->blk_sub.savearray = GvAV(PL_defgv);
2885 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2886 CX_CURPAD_SAVE(cx->blk_sub);
2887 cx->blk_sub.argarray = av;
2890 if (items > AvMAX(av) + 1) {
2891 SV **ary = AvALLOC(av);
2892 if (AvARRAY(av) != ary) {
2893 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2896 if (items > AvMAX(av) + 1) {
2897 AvMAX(av) = items - 1;
2898 Renew(ary,items,SV*);
2903 Copy(MARK,AvARRAY(av),items,SV*);
2904 AvFILLp(av) = items - 1;
2912 /* warning must come *after* we fully set up the context
2913 * stuff so that __WARN__ handlers can safely dounwind()
2916 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2917 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2918 sub_crush_depth(cv);
2919 RETURNOP(CvSTART(cv));
2922 I32 markix = TOPMARK;
2927 /* Need to copy @_ to stack. Alternative may be to
2928 * switch stack to @_, and copy return values
2929 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2930 AV * const av = GvAV(PL_defgv);
2931 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2934 /* Mark is at the end of the stack. */
2936 Copy(AvARRAY(av), SP + 1, items, SV*);
2941 /* We assume first XSUB in &DB::sub is the called one. */
2943 SAVEVPTR(PL_curcop);
2944 PL_curcop = PL_curcopdb;
2947 /* Do we need to open block here? XXXX */
2949 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2951 CvXSUB(cv)(aTHX_ cv);
2953 /* Enforce some sanity in scalar context. */
2954 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2955 if (markix > PL_stack_sp - PL_stack_base)
2956 *(PL_stack_base + markix) = &PL_sv_undef;
2958 *(PL_stack_base + markix) = *PL_stack_sp;
2959 PL_stack_sp = PL_stack_base + markix;
2967 Perl_sub_crush_depth(pTHX_ CV *cv)
2969 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2972 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2974 SV* const tmpstr = sv_newmortal();
2975 gv_efullname3(tmpstr, CvGV(cv), NULL);
2976 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2985 SV* const elemsv = POPs;
2986 IV elem = SvIV(elemsv);
2987 AV *const av = MUTABLE_AV(POPs);
2988 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2989 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2990 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2991 bool preeminent = TRUE;
2994 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2995 Perl_warner(aTHX_ packWARN(WARN_MISC),
2996 "Use of reference \"%"SVf"\" as array index",
2999 elem -= CopARYBASE_get(PL_curcop);
3000 if (SvTYPE(av) != SVt_PVAV)
3007 /* If we can determine whether the element exist,
3008 * Try to preserve the existenceness of a tied array
3009 * element by using EXISTS and DELETE if possible.
3010 * Fallback to FETCH and STORE otherwise. */
3011 if (SvCANEXISTDELETE(av))
3012 preeminent = av_exists(av, elem);
3015 svp = av_fetch(av, elem, lval && !defer);
3017 #ifdef PERL_MALLOC_WRAP
3018 if (SvUOK(elemsv)) {
3019 const UV uv = SvUV(elemsv);
3020 elem = uv > IV_MAX ? IV_MAX : uv;
3022 else if (SvNOK(elemsv))
3023 elem = (IV)SvNV(elemsv);
3025 static const char oom_array_extend[] =
3026 "Out of memory during array extend"; /* Duplicated in av.c */
3027 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3030 if (!svp || *svp == &PL_sv_undef) {
3033 DIE(aTHX_ PL_no_aelem, elem);
3034 lv = sv_newmortal();
3035 sv_upgrade(lv, SVt_PVLV);
3037 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
3038 LvTARG(lv) = SvREFCNT_inc_simple(av);
3039 LvTARGOFF(lv) = elem;
3046 save_aelem(av, elem, svp);
3048 SAVEADELETE(av, elem);
3050 else if (PL_op->op_private & OPpDEREF)
3051 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3053 sv = (svp ? *svp : &PL_sv_undef);
3054 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
3061 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3063 PERL_ARGS_ASSERT_VIVIFY_REF;
3068 Perl_croak_no_modify(aTHX);
3069 prepare_SV_for_RV(sv);
3072 SvRV_set(sv, newSV(0));
3075 SvRV_set(sv, MUTABLE_SV(newAV()));
3078 SvRV_set(sv, MUTABLE_SV(newHV()));
3089 SV* const sv = TOPs;
3092 SV* const rsv = SvRV(sv);
3093 if (SvTYPE(rsv) == SVt_PVCV) {
3099 SETs(method_common(sv, NULL));
3106 SV* const sv = cSVOP_sv;
3107 U32 hash = SvSHARED_HASH(sv);
3109 XPUSHs(method_common(sv, &hash));
3114 S_method_common(pTHX_ SV* meth, U32* hashp)
3120 const char* packname = NULL;
3123 SV * const sv = *(PL_stack_base + TOPMARK + 1);
3125 PERL_ARGS_ASSERT_METHOD_COMMON;
3128 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3133 ob = MUTABLE_SV(SvRV(sv));
3137 /* this isn't a reference */
3138 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3139 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3141 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3148 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3149 !(ob=MUTABLE_SV(GvIO(iogv))))
3151 /* this isn't the name of a filehandle either */
3153 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3154 ? !isIDFIRST_utf8((U8*)packname)
3155 : !isIDFIRST(*packname)
3158 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3160 SvOK(sv) ? "without a package or object reference"
3161 : "on an undefined value");
3163 /* assume it's a package name */
3164 stash = gv_stashpvn(packname, packlen, 0);
3168 SV* const ref = newSViv(PTR2IV(stash));
3169 (void)hv_store(PL_stashcache, packname, packlen, ref, 0);
3173 /* it _is_ a filehandle name -- replace with a reference */
3174 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3177 /* if we got here, ob should be a reference or a glob */
3178 if (!ob || !(SvOBJECT(ob)
3179 || (SvTYPE(ob) == SVt_PVGV
3181 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3184 const char * const name = SvPV_nolen_const(meth);
3185 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3186 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3190 stash = SvSTASH(ob);
3193 /* NOTE: stash may be null, hope hv_fetch_ent and
3194 gv_fetchmethod can cope (it seems they can) */
3196 /* shortcut for simple names */
3198 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3200 gv = MUTABLE_GV(HeVAL(he));
3201 if (isGV(gv) && GvCV(gv) &&
3202 (!GvCVGEN(gv) || GvCVGEN(gv)
3203 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3204 return MUTABLE_SV(GvCV(gv));
3208 gv = gv_fetchmethod_flags(stash ? stash : MUTABLE_HV(packsv),
3209 SvPV_nolen_const(meth),
3210 GV_AUTOLOAD | GV_CROAK);
3214 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3219 * c-indentation-style: bsd
3221 * indent-tabs-mode: t
3224 * ex: set ts=8 sts=4 sw=4 noet: