3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
15 * Awake! Awake! Fear, Fire, Foes! Awake!
18 * [p.1007 of _The Lord of the Rings_, VI/viii: "The Scouring of the Shire"]
21 /* This file contains 'hot' pp ("push/pop") functions that
22 * execute the opcodes that make up a perl program. A typical pp function
23 * expects to find its arguments on the stack, and usually pushes its
24 * results onto the stack, hence the 'pp' terminology. Each OP structure
25 * contains a pointer to the relevant pp_foo() function.
27 * By 'hot', we mean common ops whose execution speed is critical.
28 * By gathering them together into a single file, we encourage
29 * CPU cache hits on hot code. Also it could be taken as a warning not to
30 * change any code in this file unless you're sure it won't affect
35 #define PERL_IN_PP_HOT_C
51 PL_curcop = (COP*)PL_op;
52 TAINT_NOT; /* Each statement is presumed innocent */
53 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
64 if (PL_op->op_private & OPpLVAL_INTRO)
65 PUSHs(save_scalar(cGVOP_gv));
67 PUSHs(GvSVn(cGVOP_gv));
80 PUSHMARK(PL_stack_sp);
95 XPUSHs(MUTABLE_SV(cGVOP_gv));
106 if (PL_op->op_type == OP_AND)
108 RETURNOP(cLOGOP->op_other);
114 dVAR; dSP; dPOPTOPssrl;
116 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
117 SV * const temp = left;
118 left = right; right = temp;
120 if (PL_tainting && PL_tainted && !SvTAINTED(left))
122 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
123 SV * const cv = SvRV(left);
124 const U32 cv_type = SvTYPE(cv);
125 const U32 gv_type = SvTYPE(right);
126 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
132 /* Can do the optimisation if right (LVALUE) is not a typeglob,
133 left (RVALUE) is a reference to something, and we're in void
135 if (!got_coderef && gv_type != SVt_PVGV && GIMME_V == G_VOID) {
136 /* Is the target symbol table currently empty? */
137 GV * const gv = gv_fetchsv(right, GV_NOINIT, SVt_PVGV);
138 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
139 /* Good. Create a new proxy constant subroutine in the target.
140 The gv becomes a(nother) reference to the constant. */
141 SV *const value = SvRV(cv);
143 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
144 SvPCS_IMPORTED_on(gv);
146 SvREFCNT_inc_simple_void(value);
152 /* Need to fix things up. */
153 if (gv_type != SVt_PVGV) {
154 /* Need to fix GV. */
155 right = MUTABLE_SV(gv_fetchsv(right, GV_ADD, SVt_PVGV));
159 /* We've been returned a constant rather than a full subroutine,
160 but they expect a subroutine reference to apply. */
162 ENTER_with_name("sassign_coderef");
163 SvREFCNT_inc_void(SvRV(cv));
164 /* newCONSTSUB takes a reference count on the passed in SV
165 from us. We set the name to NULL, otherwise we get into
166 all sorts of fun as the reference to our new sub is
167 donated to the GV that we're about to assign to.
169 SvRV_set(left, MUTABLE_SV(newCONSTSUB(GvSTASH(right), NULL,
172 LEAVE_with_name("sassign_coderef");
174 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
176 First: ops for \&{"BONK"}; return us the constant in the
178 Second: ops for *{"BONK"} cause that symbol table entry
179 (and our reference to it) to be upgraded from RV
181 Thirdly: We get here. cv is actually PVGV now, and its
182 GvCV() is actually the subroutine we're looking for
184 So change the reference so that it points to the subroutine
185 of that typeglob, as that's what they were after all along.
187 GV *const upgraded = MUTABLE_GV(cv);
188 CV *const source = GvCV(upgraded);
191 assert(CvFLAGS(source) & CVf_CONST);
193 SvREFCNT_inc_void(source);
194 SvREFCNT_dec(upgraded);
195 SvRV_set(left, MUTABLE_SV(source));
200 SvSetMagicSV(right, left);
210 RETURNOP(cLOGOP->op_other);
212 RETURNOP(cLOGOP->op_next);
220 TAINT_NOT; /* Each statement is presumed innocent */
221 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
223 oldsave = PL_scopestack[PL_scopestack_ix - 1];
224 LEAVE_SCOPE(oldsave);
230 dVAR; dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
235 const char *rpv = NULL;
237 bool rcopied = FALSE;
239 if (TARG == right && right != left) {
240 /* mg_get(right) may happen here ... */
241 rpv = SvPV_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 */
250 const char* const lpv = SvPV_const(left, llen); /* mg_get(left) may happen here */
251 lbyte = !DO_UTF8(left);
252 sv_setpvn(TARG, lpv, llen);
258 else { /* TARG == left */
260 SvGETMAGIC(left); /* or mg_get(left) may happen here */
262 if (left == right && ckWARN(WARN_UNINITIALIZED))
263 report_uninit(right);
266 (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */
267 lbyte = !DO_UTF8(left);
272 /* or mg_get(right) may happen here */
274 rpv = SvPV_const(right, rlen);
275 rbyte = !DO_UTF8(right);
277 if (lbyte != rbyte) {
279 sv_utf8_upgrade_nomg(TARG);
282 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
283 sv_utf8_upgrade_nomg(right);
284 rpv = SvPV_const(right, rlen);
287 sv_catpvn_nomg(TARG, rpv, rlen);
298 if (PL_op->op_flags & OPf_MOD) {
299 if (PL_op->op_private & OPpLVAL_INTRO)
300 if (!(PL_op->op_private & OPpPAD_STATE))
301 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
302 if (PL_op->op_private & OPpDEREF) {
304 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
314 tryAMAGICunTARGET(iter, 0);
315 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
316 if (!isGV_with_GP(PL_last_in_gv)) {
317 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
318 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
321 XPUSHs(MUTABLE_SV(PL_last_in_gv));
324 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
327 return do_readline();
332 dVAR; dSP; tryAMAGICbinSET(eq,0);
333 #ifndef NV_PRESERVES_UV
334 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
336 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
340 #ifdef PERL_PRESERVE_IVUV
343 /* Unless the left argument is integer in range we are going
344 to have to use NV maths. Hence only attempt to coerce the
345 right argument if we know the left is integer. */
348 const bool auvok = SvUOK(TOPm1s);
349 const bool buvok = SvUOK(TOPs);
351 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
352 /* Casting IV to UV before comparison isn't going to matter
353 on 2s complement. On 1s complement or sign&magnitude
354 (if we have any of them) it could to make negative zero
355 differ from normal zero. As I understand it. (Need to
356 check - is negative zero implementation defined behaviour
358 const UV buv = SvUVX(POPs);
359 const UV auv = SvUVX(TOPs);
361 SETs(boolSV(auv == buv));
364 { /* ## Mixed IV,UV ## */
368 /* == is commutative so doesn't matter which is left or right */
370 /* top of stack (b) is the iv */
379 /* As uv is a UV, it's >0, so it cannot be == */
382 /* we know iv is >= 0 */
383 SETs(boolSV((UV)iv == SvUVX(uvp)));
390 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
392 if (Perl_isnan(left) || Perl_isnan(right))
394 SETs(boolSV(left == right));
397 SETs(boolSV(TOPn == value));
406 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
407 DIE(aTHX_ "%s", PL_no_modify);
408 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
409 && SvIVX(TOPs) != IV_MAX)
411 SvIV_set(TOPs, SvIVX(TOPs) + 1);
412 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
414 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
427 if (PL_op->op_type == OP_OR)
429 RETURNOP(cLOGOP->op_other);
438 const int op_type = PL_op->op_type;
439 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
444 if (!sv || !SvANY(sv)) {
445 if (op_type == OP_DOR)
447 RETURNOP(cLOGOP->op_other);
453 if (!sv || !SvANY(sv))
458 switch (SvTYPE(sv)) {
460 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
464 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
468 if (CvROOT(sv) || CvXSUB(sv))
481 if(op_type == OP_DOR)
483 RETURNOP(cLOGOP->op_other);
485 /* assuming OP_DEFINED */
493 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
494 tryAMAGICbin(add,opASSIGN);
495 svl = sv_2num(TOPm1s);
497 useleft = USE_LEFT(svl);
498 #ifdef PERL_PRESERVE_IVUV
499 /* We must see if we can perform the addition with integers if possible,
500 as the integer code detects overflow while the NV code doesn't.
501 If either argument hasn't had a numeric conversion yet attempt to get
502 the IV. It's important to do this now, rather than just assuming that
503 it's not IOK as a PV of "9223372036854775806" may not take well to NV
504 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
505 integer in case the second argument is IV=9223372036854775806
506 We can (now) rely on sv_2iv to do the right thing, only setting the
507 public IOK flag if the value in the NV (or PV) slot is truly integer.
509 A side effect is that this also aggressively prefers integer maths over
510 fp maths for integer values.
512 How to detect overflow?
514 C 99 section 6.2.6.1 says
516 The range of nonnegative values of a signed integer type is a subrange
517 of the corresponding unsigned integer type, and the representation of
518 the same value in each type is the same. A computation involving
519 unsigned operands can never overflow, because a result that cannot be
520 represented by the resulting unsigned integer type is reduced modulo
521 the number that is one greater than the largest value that can be
522 represented by the resulting type.
526 which I read as "unsigned ints wrap."
528 signed integer overflow seems to be classed as "exception condition"
530 If an exceptional condition occurs during the evaluation of an
531 expression (that is, if the result is not mathematically defined or not
532 in the range of representable values for its type), the behavior is
535 (6.5, the 5th paragraph)
537 I had assumed that on 2s complement machines signed arithmetic would
538 wrap, hence coded pp_add and pp_subtract on the assumption that
539 everything perl builds on would be happy. After much wailing and
540 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
541 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
542 unsigned code below is actually shorter than the old code. :-)
547 /* Unless the left argument is integer in range we are going to have to
548 use NV maths. Hence only attempt to coerce the right argument if
549 we know the left is integer. */
557 /* left operand is undef, treat as zero. + 0 is identity,
558 Could SETi or SETu right now, but space optimise by not adding
559 lots of code to speed up what is probably a rarish case. */
561 /* Left operand is defined, so is it IV? */
564 if ((auvok = SvUOK(svl)))
567 register const IV aiv = SvIVX(svl);
570 auvok = 1; /* Now acting as a sign flag. */
571 } else { /* 2s complement assumption for IV_MIN */
579 bool result_good = 0;
582 bool buvok = SvUOK(svr);
587 register const IV biv = SvIVX(svr);
594 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
595 else "IV" now, independent of how it came in.
596 if a, b represents positive, A, B negative, a maps to -A etc
601 all UV maths. negate result if A negative.
602 add if signs same, subtract if signs differ. */
608 /* Must get smaller */
614 /* result really should be -(auv-buv). as its negation
615 of true value, need to swap our result flag */
632 if (result <= (UV)IV_MIN)
635 /* result valid, but out of range for IV. */
640 } /* Overflow, drop through to NVs. */
645 NV value = SvNV(svr);
648 /* left operand is undef, treat as zero. + 0.0 is identity. */
652 SETn( value + SvNV(svl) );
660 AV * const av = PL_op->op_flags & OPf_SPECIAL
661 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAV(cGVOP_gv);
662 const U32 lval = PL_op->op_flags & OPf_MOD;
663 SV** const svp = av_fetch(av, PL_op->op_private, lval);
664 SV *sv = (svp ? *svp : &PL_sv_undef);
666 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
674 dVAR; dSP; dMARK; dTARGET;
676 do_join(TARG, *MARK, MARK, SP);
687 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
688 * will be enough to hold an OP*.
690 SV* const sv = sv_newmortal();
691 sv_upgrade(sv, SVt_PVLV);
693 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
696 XPUSHs(MUTABLE_SV(PL_op));
701 /* Oversized hot code. */
705 dVAR; dSP; dMARK; dORIGMARK;
710 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
712 if (gv && (io = GvIO(gv))
713 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
716 if (MARK == ORIGMARK) {
717 /* If using default handle then we need to make space to
718 * pass object as 1st arg, so move other args up ...
722 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
726 *MARK = SvTIED_obj(MUTABLE_SV(io), mg);
728 ENTER_with_name("call_PRINT");
729 if( PL_op->op_type == OP_SAY ) {
730 /* local $\ = "\n" */
731 SAVEGENERICSV(PL_ors_sv);
732 PL_ors_sv = newSVpvs("\n");
734 call_method("PRINT", G_SCALAR);
735 LEAVE_with_name("call_PRINT");
742 if (!(io = GvIO(gv))) {
743 if ((GvEGVx(gv)) && (io = GvIO(GvEGV(gv)))
744 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
746 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
747 report_evil_fh(gv, io, PL_op->op_type);
748 SETERRNO(EBADF,RMS_IFI);
751 else if (!(fp = IoOFP(io))) {
752 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
754 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
755 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
756 report_evil_fh(gv, io, PL_op->op_type);
758 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
762 SV * const ofs = GvSV(PL_ofsgv); /* $, */
764 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
766 if (!do_print(*MARK, fp))
770 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
771 if (!do_print(GvSV(PL_ofsgv), fp)) {
780 if (!do_print(*MARK, fp))
788 if (PL_op->op_type == OP_SAY) {
789 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
792 else if (PL_ors_sv && SvOK(PL_ors_sv))
793 if (!do_print(PL_ors_sv, fp)) /* $\ */
796 if (IoFLAGS(io) & IOf_FLUSH)
797 if (PerlIO_flush(fp) == EOF)
807 XPUSHs(&PL_sv_undef);
814 const I32 gimme = GIMME_V;
815 static const char an_array[] = "an ARRAY";
816 static const char a_hash[] = "a HASH";
817 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
818 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
822 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
825 if (SvTYPE(sv) != type)
826 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
827 if (PL_op->op_flags & OPf_REF) {
832 if (gimme != G_ARRAY)
833 goto croak_cant_return;
837 else if (PL_op->op_flags & OPf_MOD
838 && PL_op->op_private & OPpLVAL_INTRO)
839 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
842 if (SvTYPE(sv) == type) {
843 if (PL_op->op_flags & OPf_REF) {
848 if (gimme != G_ARRAY)
849 goto croak_cant_return;
857 if (!isGV_with_GP(sv)) {
858 if (SvGMAGICAL(sv)) {
863 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
871 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
872 if (PL_op->op_private & OPpLVAL_INTRO)
873 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
874 if (PL_op->op_flags & OPf_REF) {
879 if (gimme != G_ARRAY)
880 goto croak_cant_return;
888 AV *const av = MUTABLE_AV(sv);
889 /* The guts of pp_rv2av, with no intenting change to preserve history
890 (until such time as we get tools that can do blame annotation across
891 whitespace changes. */
892 if (gimme == G_ARRAY) {
893 const I32 maxarg = AvFILL(av) + 1;
894 (void)POPs; /* XXXX May be optimized away? */
896 if (SvRMAGICAL(av)) {
898 for (i=0; i < (U32)maxarg; i++) {
899 SV ** const svp = av_fetch(av, i, FALSE);
900 /* See note in pp_helem, and bug id #27839 */
902 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
907 Copy(AvARRAY(av), SP+1, maxarg, SV*);
911 else if (gimme == G_SCALAR) {
913 const I32 maxarg = AvFILL(av) + 1;
917 /* The guts of pp_rv2hv */
918 if (gimme == G_ARRAY) { /* array wanted */
922 else if (gimme == G_SCALAR) {
924 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
932 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
933 is_pp_rv2av ? "array" : "hash");
938 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
942 PERL_ARGS_ASSERT_DO_ODDBALL;
948 if (ckWARN(WARN_MISC)) {
950 if (relem == firstrelem &&
952 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
953 SvTYPE(SvRV(*relem)) == SVt_PVHV))
955 err = "Reference found where even-sized list expected";
958 err = "Odd number of elements in hash assignment";
959 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
963 didstore = hv_store_ent(hash,*relem,tmpstr,0);
964 if (SvMAGICAL(hash)) {
965 if (SvSMAGICAL(tmpstr))
977 SV **lastlelem = PL_stack_sp;
978 SV **lastrelem = PL_stack_base + POPMARK;
979 SV **firstrelem = PL_stack_base + POPMARK + 1;
980 SV **firstlelem = lastrelem + 1;
993 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
995 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
998 /* If there's a common identifier on both sides we have to take
999 * special care that assigning the identifier on the left doesn't
1000 * clobber a value on the right that's used later in the list.
1002 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1003 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1004 for (relem = firstrelem; relem <= lastrelem; relem++) {
1005 if ((sv = *relem)) {
1006 TAINT_NOT; /* Each item is independent */
1007 *relem = sv_mortalcopy(sv);
1017 while (lelem <= lastlelem) {
1018 TAINT_NOT; /* Each item stands on its own, taintwise. */
1020 switch (SvTYPE(sv)) {
1022 ary = MUTABLE_AV(sv);
1023 magic = SvMAGICAL(ary) != 0;
1025 av_extend(ary, lastrelem - relem);
1027 while (relem <= lastrelem) { /* gobble up all the rest */
1030 sv = newSVsv(*relem);
1032 didstore = av_store(ary,i++,sv);
1034 if (SvSMAGICAL(sv)) {
1035 /* More magic can happen in the mg_set callback, so we
1036 * backup the delaymagic for now. */
1037 U16 dmbak = PL_delaymagic;
1040 PL_delaymagic = dmbak;
1047 if (PL_delaymagic & DM_ARRAY)
1048 SvSETMAGIC(MUTABLE_SV(ary));
1050 case SVt_PVHV: { /* normal hash */
1053 hash = MUTABLE_HV(sv);
1054 magic = SvMAGICAL(hash) != 0;
1056 firsthashrelem = relem;
1058 while (relem < lastrelem) { /* gobble up all the rest */
1060 sv = *relem ? *relem : &PL_sv_no;
1064 sv_setsv(tmpstr,*relem); /* value */
1065 *(relem++) = tmpstr;
1066 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1067 /* key overwrites an existing entry */
1069 didstore = hv_store_ent(hash,sv,tmpstr,0);
1071 if (SvSMAGICAL(tmpstr)) {
1072 U16 dmbak = PL_delaymagic;
1075 PL_delaymagic = dmbak;
1082 if (relem == lastrelem) {
1083 do_oddball(hash, relem, firstrelem);
1089 if (SvIMMORTAL(sv)) {
1090 if (relem <= lastrelem)
1094 if (relem <= lastrelem) {
1095 sv_setsv(sv, *relem);
1099 sv_setsv(sv, &PL_sv_undef);
1101 if (SvSMAGICAL(sv)) {
1102 U16 dmbak = PL_delaymagic;
1105 PL_delaymagic = dmbak;
1110 if (PL_delaymagic & ~DM_DELAY) {
1111 if (PL_delaymagic & DM_UID) {
1112 #ifdef HAS_SETRESUID
1113 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1114 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1117 # ifdef HAS_SETREUID
1118 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1119 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1122 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1123 (void)setruid(PL_uid);
1124 PL_delaymagic &= ~DM_RUID;
1126 # endif /* HAS_SETRUID */
1128 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1129 (void)seteuid(PL_euid);
1130 PL_delaymagic &= ~DM_EUID;
1132 # endif /* HAS_SETEUID */
1133 if (PL_delaymagic & DM_UID) {
1134 if (PL_uid != PL_euid)
1135 DIE(aTHX_ "No setreuid available");
1136 (void)PerlProc_setuid(PL_uid);
1138 # endif /* HAS_SETREUID */
1139 #endif /* HAS_SETRESUID */
1140 PL_uid = PerlProc_getuid();
1141 PL_euid = PerlProc_geteuid();
1143 if (PL_delaymagic & DM_GID) {
1144 #ifdef HAS_SETRESGID
1145 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1146 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1149 # ifdef HAS_SETREGID
1150 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1151 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1154 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1155 (void)setrgid(PL_gid);
1156 PL_delaymagic &= ~DM_RGID;
1158 # endif /* HAS_SETRGID */
1160 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1161 (void)setegid(PL_egid);
1162 PL_delaymagic &= ~DM_EGID;
1164 # endif /* HAS_SETEGID */
1165 if (PL_delaymagic & DM_GID) {
1166 if (PL_gid != PL_egid)
1167 DIE(aTHX_ "No setregid available");
1168 (void)PerlProc_setgid(PL_gid);
1170 # endif /* HAS_SETREGID */
1171 #endif /* HAS_SETRESGID */
1172 PL_gid = PerlProc_getgid();
1173 PL_egid = PerlProc_getegid();
1175 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1179 if (gimme == G_VOID)
1180 SP = firstrelem - 1;
1181 else if (gimme == G_SCALAR) {
1184 SETi(lastrelem - firstrelem + 1 - duplicates);
1191 /* Removes from the stack the entries which ended up as
1192 * duplicated keys in the hash (fix for [perl #24380]) */
1193 Move(firsthashrelem + duplicates,
1194 firsthashrelem, duplicates, SV**);
1195 lastrelem -= duplicates;
1200 SP = firstrelem + (lastlelem - firstlelem);
1201 lelem = firstlelem + (relem - firstrelem);
1203 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1212 register PMOP * const pm = cPMOP;
1213 REGEXP * rx = PM_GETRE(pm);
1214 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1215 SV * const rv = sv_newmortal();
1217 SvUPGRADE(rv, SVt_IV);
1218 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1219 loathe to use it here, but it seems to be the right fix. Or close.
1220 The key part appears to be that it's essential for pp_qr to return a new
1221 object (SV), which implies that there needs to be an effective way to
1222 generate a new SV from the existing SV that is pre-compiled in the
1224 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1228 HV* const stash = gv_stashpv(SvPV_nolen(pkg), GV_ADD);
1230 (void)sv_bless(rv, stash);
1233 if (RX_EXTFLAGS(rx) & RXf_TAINTED)
1242 register PMOP *pm = cPMOP;
1244 register const char *t;
1245 register const char *s;
1248 U8 r_flags = REXEC_CHECKED;
1249 const char *truebase; /* Start of string */
1250 register REGEXP *rx = PM_GETRE(pm);
1252 const I32 gimme = GIMME;
1255 const I32 oldsave = PL_savestack_ix;
1256 I32 update_minmatch = 1;
1257 I32 had_zerolen = 0;
1260 if (PL_op->op_flags & OPf_STACKED)
1262 else if (PL_op->op_private & OPpTARGET_MY)
1269 PUTBACK; /* EVAL blocks need stack_sp. */
1270 /* Skip get-magic if this is a qr// clone, because regcomp has
1272 s = ((struct regexp *)SvANY(rx))->mother_re
1273 ? SvPV_nomg_const(TARG, len)
1274 : SvPV_const(TARG, len);
1276 DIE(aTHX_ "panic: pp_match");
1278 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
1279 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1282 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1284 /* PMdf_USED is set after a ?? matches once */
1287 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1289 pm->op_pmflags & PMf_USED
1293 if (gimme == G_ARRAY)
1300 /* empty pattern special-cased to use last successful pattern if possible */
1301 if (!RX_PRELEN(rx) && PL_curpm) {
1306 if (RX_MINLEN(rx) > (I32)len)
1311 /* XXXX What part of this is needed with true \G-support? */
1312 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1313 RX_OFFS(rx)[0].start = -1;
1314 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1315 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1316 if (mg && mg->mg_len >= 0) {
1317 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1318 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1319 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1320 r_flags |= REXEC_IGNOREPOS;
1321 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1322 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1325 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1326 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1327 update_minmatch = 0;
1331 /* XXX: comment out !global get safe $1 vars after a
1332 match, BUT be aware that this leads to dramatic slowdowns on
1333 /g matches against large strings. So far a solution to this problem
1334 appears to be quite tricky.
1335 Test for the unsafe vars are TODO for now. */
1336 if (( !global && RX_NPARENS(rx))
1337 || SvTEMP(TARG) || PL_sawampersand ||
1338 (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1339 r_flags |= REXEC_COPY_STR;
1341 r_flags |= REXEC_SCREAM;
1344 if (global && RX_OFFS(rx)[0].start != -1) {
1345 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1346 if ((s + RX_MINLEN(rx)) > strend || s < truebase)
1348 if (update_minmatch++)
1349 minmatch = had_zerolen;
1351 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1352 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1353 /* FIXME - can PL_bostr be made const char *? */
1354 PL_bostr = (char *)truebase;
1355 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1359 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1361 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1362 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
1363 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
1364 && (r_flags & REXEC_SCREAM)))
1365 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1368 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1369 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1372 if (dynpm->op_pmflags & PMf_ONCE) {
1374 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1376 dynpm->op_pmflags |= PMf_USED;
1387 RX_MATCH_TAINTED_on(rx);
1388 TAINT_IF(RX_MATCH_TAINTED(rx));
1389 if (gimme == G_ARRAY) {
1390 const I32 nparens = RX_NPARENS(rx);
1391 I32 i = (global && !nparens) ? 1 : 0;
1393 SPAGAIN; /* EVAL blocks could move the stack. */
1394 EXTEND(SP, nparens + i);
1395 EXTEND_MORTAL(nparens + i);
1396 for (i = !i; i <= nparens; i++) {
1397 PUSHs(sv_newmortal());
1398 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1399 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1400 s = RX_OFFS(rx)[i].start + truebase;
1401 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1402 len < 0 || len > strend - s)
1403 DIE(aTHX_ "panic: pp_match start/end pointers");
1404 sv_setpvn(*SP, s, len);
1405 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1410 if (dynpm->op_pmflags & PMf_CONTINUE) {
1412 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1413 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1415 #ifdef PERL_OLD_COPY_ON_WRITE
1417 sv_force_normal_flags(TARG, 0);
1419 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1420 &PL_vtbl_mglob, NULL, 0);
1422 if (RX_OFFS(rx)[0].start != -1) {
1423 mg->mg_len = RX_OFFS(rx)[0].end;
1424 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1425 mg->mg_flags |= MGf_MINMATCH;
1427 mg->mg_flags &= ~MGf_MINMATCH;
1430 had_zerolen = (RX_OFFS(rx)[0].start != -1
1431 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1432 == (UV)RX_OFFS(rx)[0].end));
1433 PUTBACK; /* EVAL blocks may use stack */
1434 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1439 LEAVE_SCOPE(oldsave);
1445 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1446 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1450 #ifdef PERL_OLD_COPY_ON_WRITE
1452 sv_force_normal_flags(TARG, 0);
1454 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1455 &PL_vtbl_mglob, NULL, 0);
1457 if (RX_OFFS(rx)[0].start != -1) {
1458 mg->mg_len = RX_OFFS(rx)[0].end;
1459 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1460 mg->mg_flags |= MGf_MINMATCH;
1462 mg->mg_flags &= ~MGf_MINMATCH;
1465 LEAVE_SCOPE(oldsave);
1469 yup: /* Confirmed by INTUIT */
1471 RX_MATCH_TAINTED_on(rx);
1472 TAINT_IF(RX_MATCH_TAINTED(rx));
1474 if (dynpm->op_pmflags & PMf_ONCE) {
1476 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1478 dynpm->op_pmflags |= PMf_USED;
1481 if (RX_MATCH_COPIED(rx))
1482 Safefree(RX_SUBBEG(rx));
1483 RX_MATCH_COPIED_off(rx);
1484 RX_SUBBEG(rx) = NULL;
1486 /* FIXME - should rx->subbeg be const char *? */
1487 RX_SUBBEG(rx) = (char *) truebase;
1488 RX_OFFS(rx)[0].start = s - truebase;
1489 if (RX_MATCH_UTF8(rx)) {
1490 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1491 RX_OFFS(rx)[0].end = t - truebase;
1494 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1496 RX_SUBLEN(rx) = strend - truebase;
1499 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1501 #ifdef PERL_OLD_COPY_ON_WRITE
1502 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1504 PerlIO_printf(Perl_debug_log,
1505 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1506 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1509 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1511 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1512 assert (SvPOKp(RX_SAVED_COPY(rx)));
1517 RX_SUBBEG(rx) = savepvn(t, strend - t);
1518 #ifdef PERL_OLD_COPY_ON_WRITE
1519 RX_SAVED_COPY(rx) = NULL;
1522 RX_SUBLEN(rx) = strend - t;
1523 RX_MATCH_COPIED_on(rx);
1524 off = RX_OFFS(rx)[0].start = s - t;
1525 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1527 else { /* startp/endp are used by @- @+. */
1528 RX_OFFS(rx)[0].start = s - truebase;
1529 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1531 /* including RX_NPARENS(rx) in the below code seems highly suspicious.
1533 RX_NPARENS(rx) = RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0; /* used by @-, @+, and $^N */
1534 LEAVE_SCOPE(oldsave);
1539 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1540 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1541 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1546 LEAVE_SCOPE(oldsave);
1547 if (gimme == G_ARRAY)
1553 Perl_do_readline(pTHX)
1555 dVAR; dSP; dTARGETSTACKED;
1560 register IO * const io = GvIO(PL_last_in_gv);
1561 register const I32 type = PL_op->op_type;
1562 const I32 gimme = GIMME_V;
1565 MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1568 XPUSHs(SvTIED_obj(MUTABLE_SV(io), mg));
1570 ENTER_with_name("call_READLINE");
1571 call_method("READLINE", gimme);
1572 LEAVE_with_name("call_READLINE");
1574 if (gimme == G_SCALAR) {
1575 SV* const result = POPs;
1576 SvSetSV_nosteal(TARG, result);
1586 if (IoFLAGS(io) & IOf_ARGV) {
1587 if (IoFLAGS(io) & IOf_START) {
1589 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1590 IoFLAGS(io) &= ~IOf_START;
1591 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1592 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1593 SvSETMAGIC(GvSV(PL_last_in_gv));
1598 fp = nextargv(PL_last_in_gv);
1599 if (!fp) { /* Note: fp != IoIFP(io) */
1600 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1603 else if (type == OP_GLOB)
1604 fp = Perl_start_glob(aTHX_ POPs, io);
1606 else if (type == OP_GLOB)
1608 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1609 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1613 if ((!io || !(IoFLAGS(io) & IOf_START))
1614 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1616 if (type == OP_GLOB)
1617 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1618 "glob failed (can't start child: %s)",
1621 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1623 if (gimme == G_SCALAR) {
1624 /* undef TARG, and push that undefined value */
1625 if (type != OP_RCATLINE) {
1626 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1634 if (gimme == G_SCALAR) {
1636 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1639 if (type == OP_RCATLINE)
1640 SvPV_force_nolen(sv);
1644 else if (isGV_with_GP(sv)) {
1645 SvPV_force_nolen(sv);
1647 SvUPGRADE(sv, SVt_PV);
1648 tmplen = SvLEN(sv); /* remember if already alloced */
1649 if (!tmplen && !SvREADONLY(sv))
1650 Sv_Grow(sv, 80); /* try short-buffering it */
1652 if (type == OP_RCATLINE && SvOK(sv)) {
1654 SvPV_force_nolen(sv);
1660 sv = sv_2mortal(newSV(80));
1664 /* This should not be marked tainted if the fp is marked clean */
1665 #define MAYBE_TAINT_LINE(io, sv) \
1666 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1671 /* delay EOF state for a snarfed empty file */
1672 #define SNARF_EOF(gimme,rs,io,sv) \
1673 (gimme != G_SCALAR || SvCUR(sv) \
1674 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1678 if (!sv_gets(sv, fp, offset)
1680 || SNARF_EOF(gimme, PL_rs, io, sv)
1681 || PerlIO_error(fp)))
1683 PerlIO_clearerr(fp);
1684 if (IoFLAGS(io) & IOf_ARGV) {
1685 fp = nextargv(PL_last_in_gv);
1688 (void)do_close(PL_last_in_gv, FALSE);
1690 else if (type == OP_GLOB) {
1691 if (!do_close(PL_last_in_gv, FALSE)) {
1692 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1693 "glob failed (child exited with status %d%s)",
1694 (int)(STATUS_CURRENT >> 8),
1695 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1698 if (gimme == G_SCALAR) {
1699 if (type != OP_RCATLINE) {
1700 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1706 MAYBE_TAINT_LINE(io, sv);
1709 MAYBE_TAINT_LINE(io, sv);
1711 IoFLAGS(io) |= IOf_NOLINE;
1715 if (type == OP_GLOB) {
1718 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1719 char * const tmps = SvEND(sv) - 1;
1720 if (*tmps == *SvPVX_const(PL_rs)) {
1722 SvCUR_set(sv, SvCUR(sv) - 1);
1725 for (t1 = SvPVX_const(sv); *t1; t1++)
1726 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1727 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1729 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1730 (void)POPs; /* Unmatched wildcard? Chuck it... */
1733 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1734 if (ckWARN(WARN_UTF8)) {
1735 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1736 const STRLEN len = SvCUR(sv) - offset;
1739 if (!is_utf8_string_loc(s, len, &f))
1740 /* Emulate :encoding(utf8) warning in the same case. */
1741 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1742 "utf8 \"\\x%02X\" does not map to Unicode",
1743 f < (U8*)SvEND(sv) ? *f : 0);
1746 if (gimme == G_ARRAY) {
1747 if (SvLEN(sv) - SvCUR(sv) > 20) {
1748 SvPV_shrink_to_cur(sv);
1750 sv = sv_2mortal(newSV(80));
1753 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1754 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1755 const STRLEN new_len
1756 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1757 SvPV_renew(sv, new_len);
1766 register PERL_CONTEXT *cx;
1767 I32 gimme = OP_GIMME(PL_op, -1);
1770 if (cxstack_ix >= 0) {
1771 /* If this flag is set, we're just inside a return, so we should
1772 * store the caller's context */
1773 gimme = (PL_op->op_flags & OPf_SPECIAL)
1775 : cxstack[cxstack_ix].blk_gimme;
1780 ENTER_with_name("block");
1783 PUSHBLOCK(cx, CXt_BLOCK, SP);
1793 SV * const keysv = POPs;
1794 HV * const hv = MUTABLE_HV(POPs);
1795 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1796 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1798 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1799 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1800 bool preeminent = TRUE;
1802 if (SvTYPE(hv) != SVt_PVHV)
1809 /* If we can determine whether the element exist,
1810 * Try to preserve the existenceness of a tied hash
1811 * element by using EXISTS and DELETE if possible.
1812 * Fallback to FETCH and STORE otherwise. */
1813 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
1814 preeminent = hv_exists_ent(hv, keysv, 0);
1817 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1818 svp = he ? &HeVAL(he) : NULL;
1820 if (!svp || *svp == &PL_sv_undef) {
1824 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1826 lv = sv_newmortal();
1827 sv_upgrade(lv, SVt_PVLV);
1829 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1830 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1831 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1837 if (HvNAME_get(hv) && isGV(*svp))
1838 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1839 else if (preeminent)
1840 save_helem_flags(hv, keysv, svp,
1841 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1843 SAVEHDELETE(hv, keysv);
1845 else if (PL_op->op_private & OPpDEREF)
1846 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1848 sv = (svp ? *svp : &PL_sv_undef);
1849 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1850 * was to make C<local $tied{foo} = $tied{foo}> possible.
1851 * However, it seems no longer to be needed for that purpose, and
1852 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1853 * would loop endlessly since the pos magic is getting set on the
1854 * mortal copy and lost. However, the copy has the effect of
1855 * triggering the get magic, and losing it altogether made things like
1856 * c<$tied{foo};> in void context no longer do get magic, which some
1857 * code relied on. Also, delayed triggering of magic on @+ and friends
1858 * meant the original regex may be out of scope by now. So as a
1859 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1860 * being called too many times). */
1861 if (!lval && SvGMAGICAL(sv))
1870 register PERL_CONTEXT *cx;
1875 if (PL_op->op_flags & OPf_SPECIAL) {
1876 cx = &cxstack[cxstack_ix];
1877 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1882 gimme = OP_GIMME(PL_op, (cxstack_ix >= 0) ? gimme : G_SCALAR);
1885 if (gimme == G_VOID)
1887 else if (gimme == G_SCALAR) {
1891 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1894 *MARK = sv_mortalcopy(TOPs);
1897 *MARK = &PL_sv_undef;
1901 else if (gimme == G_ARRAY) {
1902 /* in case LEAVE wipes old return values */
1904 for (mark = newsp + 1; mark <= SP; mark++) {
1905 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1906 *mark = sv_mortalcopy(*mark);
1907 TAINT_NOT; /* Each item is independent */
1911 PL_curpm = newpm; /* Don't pop $1 et al till now */
1913 LEAVE_with_name("block");
1921 register PERL_CONTEXT *cx;
1924 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1925 bool av_is_stack = FALSE;
1928 cx = &cxstack[cxstack_ix];
1929 if (!CxTYPE_is_LOOP(cx))
1930 DIE(aTHX_ "panic: pp_iter");
1932 itersvp = CxITERVAR(cx);
1933 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1934 /* string increment */
1935 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1936 SV *end = cx->blk_loop.state_u.lazysv.end;
1937 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1938 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1940 const char *max = SvPV_const(end, maxlen);
1941 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1942 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1943 /* safe to reuse old SV */
1944 sv_setsv(*itersvp, cur);
1948 /* we need a fresh SV every time so that loop body sees a
1949 * completely new SV for closures/references to work as
1952 *itersvp = newSVsv(cur);
1953 SvREFCNT_dec(oldsv);
1955 if (strEQ(SvPVX_const(cur), max))
1956 sv_setiv(cur, 0); /* terminate next time */
1963 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1964 /* integer increment */
1965 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1968 /* don't risk potential race */
1969 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1970 /* safe to reuse old SV */
1971 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur++);
1975 /* we need a fresh SV every time so that loop body sees a
1976 * completely new SV for closures/references to work as they
1979 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur++);
1980 SvREFCNT_dec(oldsv);
1983 /* Handle end of range at IV_MAX */
1984 if ((cx->blk_loop.state_u.lazyiv.cur == IV_MIN) &&
1985 (cx->blk_loop.state_u.lazyiv.end == IV_MAX))
1987 cx->blk_loop.state_u.lazyiv.cur++;
1988 cx->blk_loop.state_u.lazyiv.end++;
1995 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1996 av = cx->blk_loop.state_u.ary.ary;
2001 if (PL_op->op_private & OPpITER_REVERSED) {
2002 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
2003 ? cx->blk_loop.resetsp + 1 : 0))
2006 if (SvMAGICAL(av) || AvREIFY(av)) {
2007 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
2008 sv = svp ? *svp : NULL;
2011 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
2015 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
2019 if (SvMAGICAL(av) || AvREIFY(av)) {
2020 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
2021 sv = svp ? *svp : NULL;
2024 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
2028 if (sv && SvIS_FREED(sv)) {
2030 Perl_croak(aTHX_ "Use of freed value in iteration");
2035 SvREFCNT_inc_simple_void_NN(sv);
2039 if (!av_is_stack && sv == &PL_sv_undef) {
2040 SV *lv = newSV_type(SVt_PVLV);
2042 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2043 LvTARG(lv) = SvREFCNT_inc_simple(av);
2044 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
2045 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2051 SvREFCNT_dec(oldsv);
2059 register PMOP *pm = cPMOP;
2074 register REGEXP *rx = PM_GETRE(pm);
2076 int force_on_match = 0;
2077 const I32 oldsave = PL_savestack_ix;
2079 bool doutf8 = FALSE;
2081 #ifdef PERL_OLD_COPY_ON_WRITE
2085 /* known replacement string? */
2086 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2090 if (PL_op->op_flags & OPf_STACKED)
2092 else if (PL_op->op_private & OPpTARGET_MY)
2099 #ifdef PERL_OLD_COPY_ON_WRITE
2100 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2101 because they make integers such as 256 "false". */
2102 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2105 sv_force_normal_flags(TARG,0);
2108 #ifdef PERL_OLD_COPY_ON_WRITE
2112 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2113 || SvTYPE(TARG) > SVt_PVLV)
2114 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2115 DIE(aTHX_ "%s", PL_no_modify);
2118 s = SvPV_mutable(TARG, len);
2119 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2121 rxtainted = ((RX_EXTFLAGS(rx) & RXf_TAINTED) ||
2122 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2127 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2131 DIE(aTHX_ "panic: pp_subst");
2134 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2135 maxiters = 2 * slen + 10; /* We can match twice at each
2136 position, once with zero-length,
2137 second time with non-zero. */
2139 if (!RX_PRELEN(rx) && PL_curpm) {
2143 r_flags = (RX_NPARENS(rx) || SvTEMP(TARG) || PL_sawampersand
2144 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2145 ? REXEC_COPY_STR : 0;
2147 r_flags |= REXEC_SCREAM;
2150 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2152 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2156 /* How to do it in subst? */
2157 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2159 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY)
2160 && ((RX_EXTFLAGS(rx) & RXf_NOSCAN)
2161 || !((RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL)
2162 && (r_flags & REXEC_SCREAM))))
2167 /* only replace once? */
2168 once = !(rpm->op_pmflags & PMf_GLOBAL);
2169 matched = CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2170 r_flags | REXEC_CHECKED);
2171 /* known replacement string? */
2173 /* replacement needing upgrading? */
2174 if (DO_UTF8(TARG) && !doutf8) {
2175 nsv = sv_newmortal();
2178 sv_recode_to_utf8(nsv, PL_encoding);
2180 sv_utf8_upgrade(nsv);
2181 c = SvPV_const(nsv, clen);
2185 c = SvPV_const(dstr, clen);
2186 doutf8 = DO_UTF8(dstr);
2194 /* can do inplace substitution? */
2196 #ifdef PERL_OLD_COPY_ON_WRITE
2199 && (I32)clen <= RX_MINLENRET(rx) && (once || !(r_flags & REXEC_COPY_STR))
2200 && !(RX_EXTFLAGS(rx) & RXf_LOOKBEHIND_SEEN)
2201 && (!doutf8 || SvUTF8(TARG))) {
2206 LEAVE_SCOPE(oldsave);
2209 #ifdef PERL_OLD_COPY_ON_WRITE
2210 if (SvIsCOW(TARG)) {
2211 assert (!force_on_match);
2215 if (force_on_match) {
2217 s = SvPV_force(TARG, len);
2222 SvSCREAM_off(TARG); /* disable possible screamer */
2224 rxtainted |= RX_MATCH_TAINTED(rx);
2225 m = orig + RX_OFFS(rx)[0].start;
2226 d = orig + RX_OFFS(rx)[0].end;
2228 if (m - s > strend - d) { /* faster to shorten from end */
2230 Copy(c, m, clen, char);
2235 Move(d, m, i, char);
2239 SvCUR_set(TARG, m - s);
2241 else if ((i = m - s)) { /* faster from front */
2244 Move(s, d - i, i, char);
2247 Copy(c, m, clen, char);
2252 Copy(c, d, clen, char);
2257 TAINT_IF(rxtainted & 1);
2263 if (iters++ > maxiters)
2264 DIE(aTHX_ "Substitution loop");
2265 rxtainted |= RX_MATCH_TAINTED(rx);
2266 m = RX_OFFS(rx)[0].start + orig;
2269 Move(s, d, i, char);
2273 Copy(c, d, clen, char);
2276 s = RX_OFFS(rx)[0].end + orig;
2277 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2279 /* don't match same null twice */
2280 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2283 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2284 Move(s, d, i+1, char); /* include the NUL */
2286 TAINT_IF(rxtainted & 1);
2290 (void)SvPOK_only_UTF8(TARG);
2291 TAINT_IF(rxtainted);
2292 if (SvSMAGICAL(TARG)) {
2300 LEAVE_SCOPE(oldsave);
2306 if (force_on_match) {
2308 s = SvPV_force(TARG, len);
2311 #ifdef PERL_OLD_COPY_ON_WRITE
2314 rxtainted |= RX_MATCH_TAINTED(rx);
2315 dstr = newSVpvn_utf8(m, s-m, DO_UTF8(TARG));
2319 register PERL_CONTEXT *cx;
2322 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2324 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2326 if (iters++ > maxiters)
2327 DIE(aTHX_ "Substitution loop");
2328 rxtainted |= RX_MATCH_TAINTED(rx);
2329 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2332 orig = RX_SUBBEG(rx);
2334 strend = s + (strend - m);
2336 m = RX_OFFS(rx)[0].start + orig;
2337 if (doutf8 && !SvUTF8(dstr))
2338 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2340 sv_catpvn(dstr, s, m-s);
2341 s = RX_OFFS(rx)[0].end + orig;
2343 sv_catpvn(dstr, c, clen);
2346 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2347 TARG, NULL, r_flags));
2348 if (doutf8 && !DO_UTF8(TARG))
2349 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2351 sv_catpvn(dstr, s, strend - s);
2353 #ifdef PERL_OLD_COPY_ON_WRITE
2354 /* The match may make the string COW. If so, brilliant, because that's
2355 just saved us one malloc, copy and free - the regexp has donated
2356 the old buffer, and we malloc an entirely new one, rather than the
2357 regexp malloc()ing a buffer and copying our original, only for
2358 us to throw it away here during the substitution. */
2359 if (SvIsCOW(TARG)) {
2360 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2366 SvPV_set(TARG, SvPVX(dstr));
2367 SvCUR_set(TARG, SvCUR(dstr));
2368 SvLEN_set(TARG, SvLEN(dstr));
2369 doutf8 |= DO_UTF8(dstr);
2370 SvPV_set(dstr, NULL);
2372 TAINT_IF(rxtainted & 1);
2376 (void)SvPOK_only(TARG);
2379 TAINT_IF(rxtainted);
2382 LEAVE_SCOPE(oldsave);
2391 LEAVE_SCOPE(oldsave);
2400 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2401 ++*PL_markstack_ptr;
2402 LEAVE_with_name("grep_item"); /* exit inner scope */
2405 if (PL_stack_base + *PL_markstack_ptr > SP) {
2407 const I32 gimme = GIMME_V;
2409 LEAVE_with_name("grep"); /* exit outer scope */
2410 (void)POPMARK; /* pop src */
2411 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2412 (void)POPMARK; /* pop dst */
2413 SP = PL_stack_base + POPMARK; /* pop original mark */
2414 if (gimme == G_SCALAR) {
2415 if (PL_op->op_private & OPpGREP_LEX) {
2416 SV* const sv = sv_newmortal();
2417 sv_setiv(sv, items);
2425 else if (gimme == G_ARRAY)
2432 ENTER_with_name("grep_item"); /* enter inner scope */
2435 src = PL_stack_base[*PL_markstack_ptr];
2437 if (PL_op->op_private & OPpGREP_LEX)
2438 PAD_SVl(PL_op->op_targ) = src;
2442 RETURNOP(cLOGOP->op_other);
2453 register PERL_CONTEXT *cx;
2456 if (CxMULTICALL(&cxstack[cxstack_ix]))
2460 cxstack_ix++; /* temporarily protect top context */
2463 if (gimme == G_SCALAR) {
2466 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2468 *MARK = SvREFCNT_inc(TOPs);
2473 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2475 *MARK = sv_mortalcopy(sv);
2480 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2484 *MARK = &PL_sv_undef;
2488 else if (gimme == G_ARRAY) {
2489 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2490 if (!SvTEMP(*MARK)) {
2491 *MARK = sv_mortalcopy(*MARK);
2492 TAINT_NOT; /* Each item is independent */
2500 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2501 PL_curpm = newpm; /* ... and pop $1 et al */
2504 return cx->blk_sub.retop;
2507 /* This duplicates the above code because the above code must not
2508 * get any slower by more conditions */
2516 register PERL_CONTEXT *cx;
2519 if (CxMULTICALL(&cxstack[cxstack_ix]))
2523 cxstack_ix++; /* temporarily protect top context */
2527 if (CxLVAL(cx) & OPpENTERSUB_INARGS) {
2528 /* We are an argument to a function or grep().
2529 * This kind of lvalueness was legal before lvalue
2530 * subroutines too, so be backward compatible:
2531 * cannot report errors. */
2533 /* Scalar context *is* possible, on the LHS of -> only,
2534 * as in f()->meth(). But this is not an lvalue. */
2535 if (gimme == G_SCALAR)
2537 if (gimme == G_ARRAY) {
2538 if (!CvLVALUE(cx->blk_sub.cv))
2539 goto temporise_array;
2540 EXTEND_MORTAL(SP - newsp);
2541 for (mark = newsp + 1; mark <= SP; mark++) {
2544 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2545 *mark = sv_mortalcopy(*mark);
2547 /* Can be a localized value subject to deletion. */
2548 PL_tmps_stack[++PL_tmps_ix] = *mark;
2549 SvREFCNT_inc_void(*mark);
2554 else if (CxLVAL(cx)) { /* Leave it as it is if we can. */
2555 /* Here we go for robustness, not for speed, so we change all
2556 * the refcounts so the caller gets a live guy. Cannot set
2557 * TEMP, so sv_2mortal is out of question. */
2558 if (!CvLVALUE(cx->blk_sub.cv)) {
2564 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2566 if (gimme == G_SCALAR) {
2570 /* Temporaries are bad unless they happen to be elements
2571 * of a tied hash or array */
2572 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2573 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2579 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2580 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2581 : "a readonly value" : "a temporary");
2583 else { /* Can be a localized value
2584 * subject to deletion. */
2585 PL_tmps_stack[++PL_tmps_ix] = *mark;
2586 SvREFCNT_inc_void(*mark);
2589 else { /* Should not happen? */
2595 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2596 (MARK > SP ? "Empty array" : "Array"));
2600 else if (gimme == G_ARRAY) {
2601 EXTEND_MORTAL(SP - newsp);
2602 for (mark = newsp + 1; mark <= SP; mark++) {
2603 if (*mark != &PL_sv_undef
2604 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2605 /* Might be flattened array after $#array = */
2612 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2613 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2616 /* Can be a localized value subject to deletion. */
2617 PL_tmps_stack[++PL_tmps_ix] = *mark;
2618 SvREFCNT_inc_void(*mark);
2624 if (gimme == G_SCALAR) {
2628 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2630 *MARK = SvREFCNT_inc(TOPs);
2635 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2637 *MARK = sv_mortalcopy(sv);
2642 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2646 *MARK = &PL_sv_undef;
2650 else if (gimme == G_ARRAY) {
2652 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2653 if (!SvTEMP(*MARK)) {
2654 *MARK = sv_mortalcopy(*MARK);
2655 TAINT_NOT; /* Each item is independent */
2664 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2665 PL_curpm = newpm; /* ... and pop $1 et al */
2668 return cx->blk_sub.retop;
2676 register PERL_CONTEXT *cx;
2678 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2681 DIE(aTHX_ "Not a CODE reference");
2682 switch (SvTYPE(sv)) {
2683 /* This is overwhelming the most common case: */
2685 if (!isGV_with_GP(sv))
2686 DIE(aTHX_ "Not a CODE reference");
2687 if (!(cv = GvCVu((const GV *)sv))) {
2689 cv = sv_2cv(sv, &stash, &gv, 0);
2701 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2703 SP = PL_stack_base + POPMARK;
2706 if (SvGMAGICAL(sv)) {
2711 sym = SvPVX_const(sv);
2719 sym = SvPV_const(sv, len);
2722 DIE(aTHX_ PL_no_usym, "a subroutine");
2723 if (PL_op->op_private & HINT_STRICT_REFS)
2724 DIE(aTHX_ "Can't use string (\"%.32s\"%s) as a subroutine ref while \"strict refs\" in use", sym, len>32 ? "..." : "");
2725 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2730 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2731 tryAMAGICunDEREF(to_cv);
2733 cv = MUTABLE_CV(SvRV(sv));
2734 if (SvTYPE(cv) == SVt_PVCV)
2739 DIE(aTHX_ "Not a CODE reference");
2740 /* This is the second most common case: */
2742 cv = MUTABLE_CV(sv);
2750 if (!CvROOT(cv) && !CvXSUB(cv)) {
2754 /* anonymous or undef'd function leaves us no recourse */
2755 if (CvANON(cv) || !(gv = CvGV(cv)))
2756 DIE(aTHX_ "Undefined subroutine called");
2758 /* autoloaded stub? */
2759 if (cv != GvCV(gv)) {
2762 /* should call AUTOLOAD now? */
2765 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2772 sub_name = sv_newmortal();
2773 gv_efullname3(sub_name, gv, NULL);
2774 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2778 DIE(aTHX_ "Not a CODE reference");
2783 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2784 Perl_get_db_sub(aTHX_ &sv, cv);
2786 PL_curcopdb = PL_curcop;
2788 /* check for lsub that handles lvalue subroutines */
2789 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2790 /* if lsub not found then fall back to DB::sub */
2791 if (!cv) cv = GvCV(PL_DBsub);
2793 cv = GvCV(PL_DBsub);
2796 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2797 DIE(aTHX_ "No DB::sub routine defined");
2800 if (!(CvISXSUB(cv))) {
2801 /* This path taken at least 75% of the time */
2803 register I32 items = SP - MARK;
2804 AV* const padlist = CvPADLIST(cv);
2805 PUSHBLOCK(cx, CXt_SUB, MARK);
2807 cx->blk_sub.retop = PL_op->op_next;
2809 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2810 * that eval'' ops within this sub know the correct lexical space.
2811 * Owing the speed considerations, we choose instead to search for
2812 * the cv using find_runcv() when calling doeval().
2814 if (CvDEPTH(cv) >= 2) {
2815 PERL_STACK_OVERFLOW_CHECK();
2816 pad_push(padlist, CvDEPTH(cv));
2819 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2821 AV *const av = MUTABLE_AV(PAD_SVl(0));
2823 /* @_ is normally not REAL--this should only ever
2824 * happen when DB::sub() calls things that modify @_ */
2829 cx->blk_sub.savearray = GvAV(PL_defgv);
2830 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2831 CX_CURPAD_SAVE(cx->blk_sub);
2832 cx->blk_sub.argarray = av;
2835 if (items > AvMAX(av) + 1) {
2836 SV **ary = AvALLOC(av);
2837 if (AvARRAY(av) != ary) {
2838 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2841 if (items > AvMAX(av) + 1) {
2842 AvMAX(av) = items - 1;
2843 Renew(ary,items,SV*);
2848 Copy(MARK,AvARRAY(av),items,SV*);
2849 AvFILLp(av) = items - 1;
2857 /* warning must come *after* we fully set up the context
2858 * stuff so that __WARN__ handlers can safely dounwind()
2861 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2862 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2863 sub_crush_depth(cv);
2864 RETURNOP(CvSTART(cv));
2867 I32 markix = TOPMARK;
2872 /* Need to copy @_ to stack. Alternative may be to
2873 * switch stack to @_, and copy return values
2874 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2875 AV * const av = GvAV(PL_defgv);
2876 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2879 /* Mark is at the end of the stack. */
2881 Copy(AvARRAY(av), SP + 1, items, SV*);
2886 /* We assume first XSUB in &DB::sub is the called one. */
2888 SAVEVPTR(PL_curcop);
2889 PL_curcop = PL_curcopdb;
2892 /* Do we need to open block here? XXXX */
2894 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2896 CALL_FPTR(CvXSUB(cv))(aTHX_ cv);
2898 /* Enforce some sanity in scalar context. */
2899 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2900 if (markix > PL_stack_sp - PL_stack_base)
2901 *(PL_stack_base + markix) = &PL_sv_undef;
2903 *(PL_stack_base + markix) = *PL_stack_sp;
2904 PL_stack_sp = PL_stack_base + markix;
2912 Perl_sub_crush_depth(pTHX_ CV *cv)
2914 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2917 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2919 SV* const tmpstr = sv_newmortal();
2920 gv_efullname3(tmpstr, CvGV(cv), NULL);
2921 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2930 SV* const elemsv = POPs;
2931 IV elem = SvIV(elemsv);
2932 AV *const av = MUTABLE_AV(POPs);
2933 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2934 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2935 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2936 bool preeminent = TRUE;
2939 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2940 Perl_warner(aTHX_ packWARN(WARN_MISC),
2941 "Use of reference \"%"SVf"\" as array index",
2944 elem -= CopARYBASE_get(PL_curcop);
2945 if (SvTYPE(av) != SVt_PVAV)
2952 /* If we can determine whether the element exist,
2953 * Try to preserve the existenceness of a tied array
2954 * element by using EXISTS and DELETE if possible.
2955 * Fallback to FETCH and STORE otherwise. */
2956 if (SvCANEXISTDELETE(av))
2957 preeminent = av_exists(av, elem);
2960 svp = av_fetch(av, elem, lval && !defer);
2962 #ifdef PERL_MALLOC_WRAP
2963 if (SvUOK(elemsv)) {
2964 const UV uv = SvUV(elemsv);
2965 elem = uv > IV_MAX ? IV_MAX : uv;
2967 else if (SvNOK(elemsv))
2968 elem = (IV)SvNV(elemsv);
2970 static const char oom_array_extend[] =
2971 "Out of memory during array extend"; /* Duplicated in av.c */
2972 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2975 if (!svp || *svp == &PL_sv_undef) {
2978 DIE(aTHX_ PL_no_aelem, elem);
2979 lv = sv_newmortal();
2980 sv_upgrade(lv, SVt_PVLV);
2982 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2983 LvTARG(lv) = SvREFCNT_inc_simple(av);
2984 LvTARGOFF(lv) = elem;
2991 save_aelem(av, elem, svp);
2993 SAVEADELETE(av, elem);
2995 else if (PL_op->op_private & OPpDEREF)
2996 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2998 sv = (svp ? *svp : &PL_sv_undef);
2999 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3006 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3008 PERL_ARGS_ASSERT_VIVIFY_REF;
3013 Perl_croak(aTHX_ "%s", PL_no_modify);
3014 prepare_SV_for_RV(sv);
3017 SvRV_set(sv, newSV(0));
3020 SvRV_set(sv, MUTABLE_SV(newAV()));
3023 SvRV_set(sv, MUTABLE_SV(newHV()));
3034 SV* const sv = TOPs;
3037 SV* const rsv = SvRV(sv);
3038 if (SvTYPE(rsv) == SVt_PVCV) {
3044 SETs(method_common(sv, NULL));
3051 SV* const sv = cSVOP_sv;
3052 U32 hash = SvSHARED_HASH(sv);
3054 XPUSHs(method_common(sv, &hash));
3059 S_method_common(pTHX_ SV* meth, U32* hashp)
3065 const char* packname = NULL;
3068 SV * const sv = *(PL_stack_base + TOPMARK + 1);
3070 PERL_ARGS_ASSERT_METHOD_COMMON;
3073 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3078 ob = MUTABLE_SV(SvRV(sv));
3082 /* this isn't a reference */
3083 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3084 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3086 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3093 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3094 !(ob=MUTABLE_SV(GvIO(iogv))))
3096 /* this isn't the name of a filehandle either */
3098 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3099 ? !isIDFIRST_utf8((U8*)packname)
3100 : !isIDFIRST(*packname)
3103 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" %s",
3105 SvOK(sv) ? "without a package or object reference"
3106 : "on an undefined value");
3108 /* assume it's a package name */
3109 stash = gv_stashpvn(packname, packlen, 0);
3113 SV* const ref = newSViv(PTR2IV(stash));
3114 (void)hv_store(PL_stashcache, packname, packlen, ref, 0);
3118 /* it _is_ a filehandle name -- replace with a reference */
3119 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3122 /* if we got here, ob should be a reference or a glob */
3123 if (!ob || !(SvOBJECT(ob)
3124 || (SvTYPE(ob) == SVt_PVGV
3126 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3129 const char * const name = SvPV_nolen_const(meth);
3130 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3131 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3135 stash = SvSTASH(ob);
3138 /* NOTE: stash may be null, hope hv_fetch_ent and
3139 gv_fetchmethod can cope (it seems they can) */
3141 /* shortcut for simple names */
3143 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3145 gv = MUTABLE_GV(HeVAL(he));
3146 if (isGV(gv) && GvCV(gv) &&
3147 (!GvCVGEN(gv) || GvCVGEN(gv)
3148 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3149 return MUTABLE_SV(GvCV(gv));
3153 gv = gv_fetchmethod_flags(stash ? stash : MUTABLE_HV(packsv),
3154 SvPV_nolen_const(meth),
3155 GV_AUTOLOAD | GV_CROAK);
3159 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3164 * c-indentation-style: bsd
3166 * indent-tabs-mode: t
3169 * ex: set ts=8 sts=4 sw=4 noet: