3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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!
19 /* This file contains 'hot' pp ("push/pop") functions that
20 * execute the opcodes that make up a perl program. A typical pp function
21 * expects to find its arguments on the stack, and usually pushes its
22 * results onto the stack, hence the 'pp' terminology. Each OP structure
23 * contains a pointer to the relevant pp_foo() function.
25 * By 'hot', we mean common ops whose execution speed is critical.
26 * By gathering them together into a single file, we encourage
27 * CPU cache hits on hot code. Also it could be taken as a warning not to
28 * change any code in this file unless you're sure it won't affect
33 #define PERL_IN_PP_HOT_C
42 if ( PL_op->op_flags & OPf_SPECIAL )
43 /* This is a const op added to hold the hints hash for
44 pp_entereval. The hash can be modified by the code
45 being eval'ed, so we return a copy instead. */
46 XPUSHs(sv_2mortal((SV*)Perl_hv_copy_hints_hv(aTHX_ (HV*)cSVOP_sv)));
56 PL_curcop = (COP*)PL_op;
57 TAINT_NOT; /* Each statement is presumed innocent */
58 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
68 if (PL_op->op_private & OPpLVAL_INTRO)
69 PUSHs(save_scalar(cGVOP_gv));
71 PUSHs(GvSVn(cGVOP_gv));
84 PL_curcop = (COP*)PL_op;
91 PUSHMARK(PL_stack_sp);
106 XPUSHs((SV*)cGVOP_gv);
116 if (PL_op->op_type == OP_AND)
118 RETURNOP(cLOGOP->op_other);
124 dVAR; dSP; dPOPTOPssrl;
126 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
127 SV * const temp = left;
128 left = right; right = temp;
130 if (PL_tainting && PL_tainted && !SvTAINTED(left))
132 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
133 SV * const cv = SvRV(left);
134 const U32 cv_type = SvTYPE(cv);
135 const U32 gv_type = SvTYPE(right);
136 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
142 /* Can do the optimisation if right (LVALUE) is not a typeglob,
143 left (RVALUE) is a reference to something, and we're in void
145 if (!got_coderef && gv_type != SVt_PVGV && GIMME_V == G_VOID) {
146 /* Is the target symbol table currently empty? */
147 GV * const gv = gv_fetchsv(right, GV_NOINIT, SVt_PVGV);
148 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
149 /* Good. Create a new proxy constant subroutine in the target.
150 The gv becomes a(nother) reference to the constant. */
151 SV *const value = SvRV(cv);
153 SvUPGRADE((SV *)gv, SVt_RV);
154 SvPCS_IMPORTED_on(gv);
156 SvREFCNT_inc_simple_void(value);
162 /* Need to fix things up. */
163 if (gv_type != SVt_PVGV) {
164 /* Need to fix GV. */
165 right = (SV*)gv_fetchsv(right, GV_ADD, SVt_PVGV);
169 /* We've been returned a constant rather than a full subroutine,
170 but they expect a subroutine reference to apply. */
172 SvREFCNT_inc_void(SvRV(cv));
173 /* newCONSTSUB takes a reference count on the passed in SV
174 from us. We set the name to NULL, otherwise we get into
175 all sorts of fun as the reference to our new sub is
176 donated to the GV that we're about to assign to.
178 SvRV_set(left, (SV *)newCONSTSUB(GvSTASH(right), NULL,
184 if (strEQ(GvNAME(right),"isa")) {
186 ++PL_sub_generation; /* I don't get this at all --blblack */
189 SvSetMagicSV(right, left);
198 RETURNOP(cLOGOP->op_other);
200 RETURNOP(cLOGOP->op_next);
207 TAINT_NOT; /* Each statement is presumed innocent */
208 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
210 oldsave = PL_scopestack[PL_scopestack_ix - 1];
211 LEAVE_SCOPE(oldsave);
217 dVAR; dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
222 const char *rpv = NULL;
224 bool rcopied = FALSE;
226 if (TARG == right && right != left) {
227 /* mg_get(right) may happen here ... */
228 rpv = SvPV_const(right, rlen);
229 rbyte = !DO_UTF8(right);
230 right = sv_2mortal(newSVpvn(rpv, rlen));
231 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
237 const char* const lpv = SvPV_const(left, llen); /* mg_get(left) may happen here */
238 lbyte = !DO_UTF8(left);
239 sv_setpvn(TARG, lpv, llen);
245 else { /* TARG == left */
247 SvGETMAGIC(left); /* or mg_get(left) may happen here */
249 if (left == right && ckWARN(WARN_UNINITIALIZED))
250 report_uninit(right);
251 sv_setpvn(left, "", 0);
253 (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */
254 lbyte = !DO_UTF8(left);
259 /* or mg_get(right) may happen here */
261 rpv = SvPV_const(right, rlen);
262 rbyte = !DO_UTF8(right);
264 if (lbyte != rbyte) {
266 sv_utf8_upgrade_nomg(TARG);
269 right = sv_2mortal(newSVpvn(rpv, rlen));
270 sv_utf8_upgrade_nomg(right);
271 rpv = SvPV_const(right, rlen);
274 sv_catpvn_nomg(TARG, rpv, rlen);
285 if (PL_op->op_flags & OPf_MOD) {
286 if (PL_op->op_private & OPpLVAL_INTRO)
287 if (!(PL_op->op_private & OPpPAD_STATE))
288 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
289 if (PL_op->op_private & OPpDEREF) {
291 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
301 tryAMAGICunTARGET(iter, 0);
302 PL_last_in_gv = (GV*)(*PL_stack_sp--);
303 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
304 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
305 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
308 XPUSHs((SV*)PL_last_in_gv);
311 PL_last_in_gv = (GV*)(*PL_stack_sp--);
314 return do_readline();
319 dVAR; dSP; tryAMAGICbinSET(eq,0);
320 #ifndef NV_PRESERVES_UV
321 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
323 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
327 #ifdef PERL_PRESERVE_IVUV
330 /* Unless the left argument is integer in range we are going
331 to have to use NV maths. Hence only attempt to coerce the
332 right argument if we know the left is integer. */
335 const bool auvok = SvUOK(TOPm1s);
336 const bool buvok = SvUOK(TOPs);
338 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
339 /* Casting IV to UV before comparison isn't going to matter
340 on 2s complement. On 1s complement or sign&magnitude
341 (if we have any of them) it could to make negative zero
342 differ from normal zero. As I understand it. (Need to
343 check - is negative zero implementation defined behaviour
345 const UV buv = SvUVX(POPs);
346 const UV auv = SvUVX(TOPs);
348 SETs(boolSV(auv == buv));
351 { /* ## Mixed IV,UV ## */
355 /* == is commutative so doesn't matter which is left or right */
357 /* top of stack (b) is the iv */
366 /* As uv is a UV, it's >0, so it cannot be == */
369 /* we know iv is >= 0 */
370 SETs(boolSV((UV)iv == SvUVX(uvp)));
377 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
379 if (Perl_isnan(left) || Perl_isnan(right))
381 SETs(boolSV(left == right));
384 SETs(boolSV(TOPn == value));
393 if (SvTYPE(TOPs) >= SVt_PVGV && SvTYPE(TOPs) != SVt_PVLV)
394 DIE(aTHX_ PL_no_modify);
395 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
396 && SvIVX(TOPs) != IV_MAX)
398 SvIV_set(TOPs, SvIVX(TOPs) + 1);
399 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
401 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
413 if (PL_op->op_type == OP_OR)
415 RETURNOP(cLOGOP->op_other);
424 const int op_type = PL_op->op_type;
425 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
429 if (!sv || !SvANY(sv)) {
430 if (op_type == OP_DOR)
432 RETURNOP(cLOGOP->op_other);
438 if (!sv || !SvANY(sv))
443 switch (SvTYPE(sv)) {
445 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
449 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
453 if (CvROOT(sv) || CvXSUB(sv))
466 if(op_type == OP_DOR)
468 RETURNOP(cLOGOP->op_other);
470 /* assuming OP_DEFINED */
478 dVAR; dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
479 useleft = USE_LEFT(TOPm1s);
480 #ifdef PERL_PRESERVE_IVUV
481 /* We must see if we can perform the addition with integers if possible,
482 as the integer code detects overflow while the NV code doesn't.
483 If either argument hasn't had a numeric conversion yet attempt to get
484 the IV. It's important to do this now, rather than just assuming that
485 it's not IOK as a PV of "9223372036854775806" may not take well to NV
486 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
487 integer in case the second argument is IV=9223372036854775806
488 We can (now) rely on sv_2iv to do the right thing, only setting the
489 public IOK flag if the value in the NV (or PV) slot is truly integer.
491 A side effect is that this also aggressively prefers integer maths over
492 fp maths for integer values.
494 How to detect overflow?
496 C 99 section 6.2.6.1 says
498 The range of nonnegative values of a signed integer type is a subrange
499 of the corresponding unsigned integer type, and the representation of
500 the same value in each type is the same. A computation involving
501 unsigned operands can never overflow, because a result that cannot be
502 represented by the resulting unsigned integer type is reduced modulo
503 the number that is one greater than the largest value that can be
504 represented by the resulting type.
508 which I read as "unsigned ints wrap."
510 signed integer overflow seems to be classed as "exception condition"
512 If an exceptional condition occurs during the evaluation of an
513 expression (that is, if the result is not mathematically defined or not
514 in the range of representable values for its type), the behavior is
517 (6.5, the 5th paragraph)
519 I had assumed that on 2s complement machines signed arithmetic would
520 wrap, hence coded pp_add and pp_subtract on the assumption that
521 everything perl builds on would be happy. After much wailing and
522 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
523 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
524 unsigned code below is actually shorter than the old code. :-)
529 /* Unless the left argument is integer in range we are going to have to
530 use NV maths. Hence only attempt to coerce the right argument if
531 we know the left is integer. */
539 /* left operand is undef, treat as zero. + 0 is identity,
540 Could SETi or SETu right now, but space optimise by not adding
541 lots of code to speed up what is probably a rarish case. */
543 /* Left operand is defined, so is it IV? */
546 if ((auvok = SvUOK(TOPm1s)))
549 register const IV aiv = SvIVX(TOPm1s);
552 auvok = 1; /* Now acting as a sign flag. */
553 } else { /* 2s complement assumption for IV_MIN */
561 bool result_good = 0;
564 bool buvok = SvUOK(TOPs);
569 register const IV biv = SvIVX(TOPs);
576 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
577 else "IV" now, independent of how it came in.
578 if a, b represents positive, A, B negative, a maps to -A etc
583 all UV maths. negate result if A negative.
584 add if signs same, subtract if signs differ. */
590 /* Must get smaller */
596 /* result really should be -(auv-buv). as its negation
597 of true value, need to swap our result flag */
614 if (result <= (UV)IV_MIN)
617 /* result valid, but out of range for IV. */
622 } /* Overflow, drop through to NVs. */
629 /* left operand is undef, treat as zero. + 0.0 is identity. */
633 SETn( value + TOPn );
641 AV * const av = PL_op->op_flags & OPf_SPECIAL ?
642 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
643 const U32 lval = PL_op->op_flags & OPf_MOD;
644 SV** const svp = av_fetch(av, PL_op->op_private, lval);
645 SV *sv = (svp ? *svp : &PL_sv_undef);
647 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
648 sv = sv_mortalcopy(sv);
655 dVAR; dSP; dMARK; dTARGET;
657 do_join(TARG, *MARK, MARK, SP);
668 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
669 * will be enough to hold an OP*.
671 SV* const sv = sv_newmortal();
672 sv_upgrade(sv, SVt_PVLV);
674 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
682 /* Oversized hot code. */
686 dVAR; dSP; dMARK; dORIGMARK;
690 GV * const gv = (PL_op->op_flags & OPf_STACKED) ? (GV*)*++MARK : PL_defoutgv;
692 if (gv && (io = GvIO(gv))
693 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
696 if (MARK == ORIGMARK) {
697 /* If using default handle then we need to make space to
698 * pass object as 1st arg, so move other args up ...
702 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
706 *MARK = SvTIED_obj((SV*)io, mg);
709 call_method("PRINT", G_SCALAR);
717 if (!(io = GvIO(gv))) {
718 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
719 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
721 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
722 report_evil_fh(gv, io, PL_op->op_type);
723 SETERRNO(EBADF,RMS_IFI);
726 else if (!(fp = IoOFP(io))) {
727 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
729 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
730 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
731 report_evil_fh(gv, io, PL_op->op_type);
733 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
738 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
740 if (!do_print(*MARK, fp))
744 if (!do_print(PL_ofs_sv, fp)) { /* $, */
753 if (!do_print(*MARK, fp))
761 if (PL_op->op_type == OP_SAY) {
762 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
765 else if (PL_ors_sv && SvOK(PL_ors_sv))
766 if (!do_print(PL_ors_sv, fp)) /* $\ */
769 if (IoFLAGS(io) & IOf_FLUSH)
770 if (PerlIO_flush(fp) == EOF)
780 XPUSHs(&PL_sv_undef);
787 const I32 gimme = GIMME_V;
788 static const char return_array_to_lvalue_scalar[] = "Can't return array to lvalue scalar context";
789 static const char return_hash_to_lvalue_scalar[] = "Can't return hash to lvalue scalar context";
790 static const char an_array[] = "an ARRAY";
791 static const char a_hash[] = "a HASH";
792 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
793 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
797 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
800 if (SvTYPE(sv) != type)
801 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
802 if (PL_op->op_flags & OPf_REF) {
807 if (gimme != G_ARRAY)
808 Perl_croak(aTHX_ is_pp_rv2av ? return_array_to_lvalue_scalar
809 : return_hash_to_lvalue_scalar);
813 else if (PL_op->op_flags & OPf_MOD
814 && PL_op->op_private & OPpLVAL_INTRO)
815 Perl_croak(aTHX_ PL_no_localize_ref);
818 if (SvTYPE(sv) == type) {
819 if (PL_op->op_flags & OPf_REF) {
824 if (gimme != G_ARRAY)
826 is_pp_rv2av ? return_array_to_lvalue_scalar
827 : return_hash_to_lvalue_scalar);
835 if (SvTYPE(sv) != SVt_PVGV) {
836 if (SvGMAGICAL(sv)) {
841 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
849 sv = is_pp_rv2av ? (SV*)GvAVn(gv) : (SV*)GvHVn(gv);
850 if (PL_op->op_private & OPpLVAL_INTRO)
851 sv = is_pp_rv2av ? (SV*)save_ary(gv) : (SV*)save_hash(gv);
852 if (PL_op->op_flags & OPf_REF) {
857 if (gimme != G_ARRAY)
859 is_pp_rv2av ? return_array_to_lvalue_scalar
860 : return_hash_to_lvalue_scalar);
868 AV *const av = (AV*)sv;
869 /* The guts of pp_rv2av, with no intenting change to preserve history
870 (until such time as we get tools that can do blame annotation across
871 whitespace changes. */
872 if (gimme == G_ARRAY) {
873 const I32 maxarg = AvFILL(av) + 1;
874 (void)POPs; /* XXXX May be optimized away? */
876 if (SvRMAGICAL(av)) {
878 for (i=0; i < (U32)maxarg; i++) {
879 SV ** const svp = av_fetch(av, i, FALSE);
880 /* See note in pp_helem, and bug id #27839 */
882 ? SvGMAGICAL(*svp) ? sv_mortalcopy(*svp) : *svp
887 Copy(AvARRAY(av), SP+1, maxarg, SV*);
891 else if (gimme == G_SCALAR) {
893 const I32 maxarg = AvFILL(av) + 1;
897 /* The guts of pp_rv2hv */
898 if (gimme == G_ARRAY) { /* array wanted */
902 else if (gimme == G_SCALAR) {
904 TARG = Perl_hv_scalar(aTHX_ (HV*)sv);
913 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
920 if (ckWARN(WARN_MISC)) {
922 if (relem == firstrelem &&
924 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
925 SvTYPE(SvRV(*relem)) == SVt_PVHV))
927 err = "Reference found where even-sized list expected";
930 err = "Odd number of elements in hash assignment";
931 Perl_warner(aTHX_ packWARN(WARN_MISC), err);
935 didstore = hv_store_ent(hash,*relem,tmpstr,0);
936 if (SvMAGICAL(hash)) {
937 if (SvSMAGICAL(tmpstr))
949 SV **lastlelem = PL_stack_sp;
950 SV **lastrelem = PL_stack_base + POPMARK;
951 SV **firstrelem = PL_stack_base + POPMARK + 1;
952 SV **firstlelem = lastrelem + 1;
965 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
967 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
970 /* If there's a common identifier on both sides we have to take
971 * special care that assigning the identifier on the left doesn't
972 * clobber a value on the right that's used later in the list.
974 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
975 EXTEND_MORTAL(lastrelem - firstrelem + 1);
976 for (relem = firstrelem; relem <= lastrelem; relem++) {
978 TAINT_NOT; /* Each item is independent */
979 *relem = sv_mortalcopy(sv);
989 while (lelem <= lastlelem) {
990 TAINT_NOT; /* Each item stands on its own, taintwise. */
992 switch (SvTYPE(sv)) {
995 magic = SvMAGICAL(ary) != 0;
997 av_extend(ary, lastrelem - relem);
999 while (relem <= lastrelem) { /* gobble up all the rest */
1002 sv = newSVsv(*relem);
1004 didstore = av_store(ary,i++,sv);
1014 case SVt_PVHV: { /* normal hash */
1018 magic = SvMAGICAL(hash) != 0;
1020 firsthashrelem = relem;
1022 while (relem < lastrelem) { /* gobble up all the rest */
1024 sv = *relem ? *relem : &PL_sv_no;
1028 sv_setsv(tmpstr,*relem); /* value */
1029 *(relem++) = tmpstr;
1030 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1031 /* key overwrites an existing entry */
1033 didstore = hv_store_ent(hash,sv,tmpstr,0);
1035 if (SvSMAGICAL(tmpstr))
1042 if (relem == lastrelem) {
1043 do_oddball(hash, relem, firstrelem);
1049 if (SvIMMORTAL(sv)) {
1050 if (relem <= lastrelem)
1054 if (relem <= lastrelem) {
1055 sv_setsv(sv, *relem);
1059 sv_setsv(sv, &PL_sv_undef);
1064 if (PL_delaymagic & ~DM_DELAY) {
1065 if (PL_delaymagic & DM_UID) {
1066 #ifdef HAS_SETRESUID
1067 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1068 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1071 # ifdef HAS_SETREUID
1072 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1073 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1076 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1077 (void)setruid(PL_uid);
1078 PL_delaymagic &= ~DM_RUID;
1080 # endif /* HAS_SETRUID */
1082 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1083 (void)seteuid(PL_euid);
1084 PL_delaymagic &= ~DM_EUID;
1086 # endif /* HAS_SETEUID */
1087 if (PL_delaymagic & DM_UID) {
1088 if (PL_uid != PL_euid)
1089 DIE(aTHX_ "No setreuid available");
1090 (void)PerlProc_setuid(PL_uid);
1092 # endif /* HAS_SETREUID */
1093 #endif /* HAS_SETRESUID */
1094 PL_uid = PerlProc_getuid();
1095 PL_euid = PerlProc_geteuid();
1097 if (PL_delaymagic & DM_GID) {
1098 #ifdef HAS_SETRESGID
1099 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1100 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1103 # ifdef HAS_SETREGID
1104 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1105 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1108 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1109 (void)setrgid(PL_gid);
1110 PL_delaymagic &= ~DM_RGID;
1112 # endif /* HAS_SETRGID */
1114 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1115 (void)setegid(PL_egid);
1116 PL_delaymagic &= ~DM_EGID;
1118 # endif /* HAS_SETEGID */
1119 if (PL_delaymagic & DM_GID) {
1120 if (PL_gid != PL_egid)
1121 DIE(aTHX_ "No setregid available");
1122 (void)PerlProc_setgid(PL_gid);
1124 # endif /* HAS_SETREGID */
1125 #endif /* HAS_SETRESGID */
1126 PL_gid = PerlProc_getgid();
1127 PL_egid = PerlProc_getegid();
1129 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1133 if (gimme == G_VOID)
1134 SP = firstrelem - 1;
1135 else if (gimme == G_SCALAR) {
1138 SETi(lastrelem - firstrelem + 1 - duplicates);
1145 /* Removes from the stack the entries which ended up as
1146 * duplicated keys in the hash (fix for [perl #24380]) */
1147 Move(firsthashrelem + duplicates,
1148 firsthashrelem, duplicates, SV**);
1149 lastrelem -= duplicates;
1154 SP = firstrelem + (lastlelem - firstlelem);
1155 lelem = firstlelem + (relem - firstrelem);
1157 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1165 register PMOP * const pm = cPMOP;
1166 REGEXP * rx = PM_GETRE(pm);
1167 SV * const pkg = CALLREG_QRPKG(rx);
1168 SV * const rv = sv_newmortal();
1169 SV * const sv = newSVrv(rv, SvPV_nolen(pkg));
1170 if (rx->extflags & RXf_TAINTED)
1172 sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0);
1180 register PMOP *pm = cPMOP;
1182 register const char *t;
1183 register const char *s;
1186 I32 r_flags = REXEC_CHECKED;
1187 const char *truebase; /* Start of string */
1188 register REGEXP *rx = PM_GETRE(pm);
1190 const I32 gimme = GIMME;
1193 const I32 oldsave = PL_savestack_ix;
1194 I32 update_minmatch = 1;
1195 I32 had_zerolen = 0;
1198 if (PL_op->op_flags & OPf_STACKED)
1200 else if (PL_op->op_private & OPpTARGET_MY)
1207 PUTBACK; /* EVAL blocks need stack_sp. */
1208 s = SvPV_const(TARG, len);
1210 DIE(aTHX_ "panic: pp_match");
1212 rxtainted = ((rx->extflags & RXf_TAINTED) ||
1213 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1216 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1218 /* PMdf_USED is set after a ?? matches once */
1221 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1223 pm->op_pmflags & PMf_USED
1227 if (gimme == G_ARRAY)
1234 /* empty pattern special-cased to use last successful pattern if possible */
1235 if (!rx->prelen && PL_curpm) {
1240 if (rx->minlen > (I32)len)
1245 /* XXXX What part of this is needed with true \G-support? */
1246 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1247 rx->offs[0].start = -1;
1248 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1249 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1250 if (mg && mg->mg_len >= 0) {
1251 if (!(rx->extflags & RXf_GPOS_SEEN))
1252 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1253 else if (rx->extflags & RXf_ANCH_GPOS) {
1254 r_flags |= REXEC_IGNOREPOS;
1255 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1256 } else if (rx->extflags & RXf_GPOS_FLOAT)
1259 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1260 minmatch = (mg->mg_flags & MGf_MINMATCH) ? rx->gofs + 1 : 0;
1261 update_minmatch = 0;
1265 /* remove comment to get faster /g but possibly unsafe $1 vars after a
1266 match. Test for the unsafe vars will fail as well*/
1267 if (( /* !global && */ rx->nparens)
1268 || SvTEMP(TARG) || PL_sawampersand ||
1269 (rx->extflags & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1270 r_flags |= REXEC_COPY_STR;
1272 r_flags |= REXEC_SCREAM;
1275 if (global && rx->offs[0].start != -1) {
1276 t = s = rx->offs[0].end + truebase - rx->gofs;
1277 if ((s + rx->minlen) > strend || s < truebase)
1279 if (update_minmatch++)
1280 minmatch = had_zerolen;
1282 if (rx->extflags & RXf_USE_INTUIT &&
1283 DO_UTF8(TARG) == ((rx->extflags & RXf_UTF8) != 0)) {
1284 /* FIXME - can PL_bostr be made const char *? */
1285 PL_bostr = (char *)truebase;
1286 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1290 if ( (rx->extflags & RXf_CHECK_ALL)
1292 && !(rx->extflags & RXf_PMf_KEEPCOPY)
1293 && ((rx->extflags & RXf_NOSCAN)
1294 || !((rx->extflags & RXf_INTUIT_TAIL)
1295 && (r_flags & REXEC_SCREAM)))
1296 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1299 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase, minmatch, TARG, INT2PTR(void*, gpos), r_flags))
1302 if (dynpm->op_pmflags & PMf_ONCE) {
1304 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1306 dynpm->op_pmflags |= PMf_USED;
1317 RX_MATCH_TAINTED_on(rx);
1318 TAINT_IF(RX_MATCH_TAINTED(rx));
1319 if (gimme == G_ARRAY) {
1320 const I32 nparens = rx->nparens;
1321 I32 i = (global && !nparens) ? 1 : 0;
1323 SPAGAIN; /* EVAL blocks could move the stack. */
1324 EXTEND(SP, nparens + i);
1325 EXTEND_MORTAL(nparens + i);
1326 for (i = !i; i <= nparens; i++) {
1327 PUSHs(sv_newmortal());
1328 if ((rx->offs[i].start != -1) && rx->offs[i].end != -1 ) {
1329 const I32 len = rx->offs[i].end - rx->offs[i].start;
1330 s = rx->offs[i].start + truebase;
1331 if (rx->offs[i].end < 0 || rx->offs[i].start < 0 ||
1332 len < 0 || len > strend - s)
1333 DIE(aTHX_ "panic: pp_match start/end pointers");
1334 sv_setpvn(*SP, s, len);
1335 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1340 if (dynpm->op_pmflags & PMf_CONTINUE) {
1342 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1343 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1345 #ifdef PERL_OLD_COPY_ON_WRITE
1347 sv_force_normal_flags(TARG, 0);
1349 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1350 &PL_vtbl_mglob, NULL, 0);
1352 if (rx->offs[0].start != -1) {
1353 mg->mg_len = rx->offs[0].end;
1354 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1355 mg->mg_flags |= MGf_MINMATCH;
1357 mg->mg_flags &= ~MGf_MINMATCH;
1360 had_zerolen = (rx->offs[0].start != -1
1361 && (rx->offs[0].start + rx->gofs
1362 == (UV)rx->offs[0].end));
1363 PUTBACK; /* EVAL blocks may use stack */
1364 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1369 LEAVE_SCOPE(oldsave);
1375 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1376 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1380 #ifdef PERL_OLD_COPY_ON_WRITE
1382 sv_force_normal_flags(TARG, 0);
1384 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1385 &PL_vtbl_mglob, NULL, 0);
1387 if (rx->offs[0].start != -1) {
1388 mg->mg_len = rx->offs[0].end;
1389 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1390 mg->mg_flags |= MGf_MINMATCH;
1392 mg->mg_flags &= ~MGf_MINMATCH;
1395 LEAVE_SCOPE(oldsave);
1399 yup: /* Confirmed by INTUIT */
1401 RX_MATCH_TAINTED_on(rx);
1402 TAINT_IF(RX_MATCH_TAINTED(rx));
1404 if (dynpm->op_pmflags & PMf_ONCE) {
1406 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1408 dynpm->op_pmflags |= PMf_USED;
1411 if (RX_MATCH_COPIED(rx))
1412 Safefree(rx->subbeg);
1413 RX_MATCH_COPIED_off(rx);
1416 /* FIXME - should rx->subbeg be const char *? */
1417 rx->subbeg = (char *) truebase;
1418 rx->offs[0].start = s - truebase;
1419 if (RX_MATCH_UTF8(rx)) {
1420 char * const t = (char*)utf8_hop((U8*)s, rx->minlenret);
1421 rx->offs[0].end = t - truebase;
1424 rx->offs[0].end = s - truebase + rx->minlenret;
1426 rx->sublen = strend - truebase;
1429 if (PL_sawampersand || rx->extflags & RXf_PMf_KEEPCOPY) {
1431 #ifdef PERL_OLD_COPY_ON_WRITE
1432 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1434 PerlIO_printf(Perl_debug_log,
1435 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1436 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1439 rx->saved_copy = sv_setsv_cow(rx->saved_copy, TARG);
1440 rx->subbeg = (char *) SvPVX_const(rx->saved_copy) + (t - truebase);
1441 assert (SvPOKp(rx->saved_copy));
1446 rx->subbeg = savepvn(t, strend - t);
1447 #ifdef PERL_OLD_COPY_ON_WRITE
1448 rx->saved_copy = NULL;
1451 rx->sublen = strend - t;
1452 RX_MATCH_COPIED_on(rx);
1453 off = rx->offs[0].start = s - t;
1454 rx->offs[0].end = off + rx->minlenret;
1456 else { /* startp/endp are used by @- @+. */
1457 rx->offs[0].start = s - truebase;
1458 rx->offs[0].end = s - truebase + rx->minlenret;
1460 /* including rx->nparens in the below code seems highly suspicious.
1462 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1463 LEAVE_SCOPE(oldsave);
1468 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1469 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1470 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1475 LEAVE_SCOPE(oldsave);
1476 if (gimme == G_ARRAY)
1482 Perl_do_readline(pTHX)
1484 dVAR; dSP; dTARGETSTACKED;
1489 register IO * const io = GvIO(PL_last_in_gv);
1490 register const I32 type = PL_op->op_type;
1491 const I32 gimme = GIMME_V;
1494 MAGIC * const mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar);
1497 XPUSHs(SvTIED_obj((SV*)io, mg));
1500 call_method("READLINE", gimme);
1503 if (gimme == G_SCALAR) {
1504 SV* const result = POPs;
1505 SvSetSV_nosteal(TARG, result);
1515 if (IoFLAGS(io) & IOf_ARGV) {
1516 if (IoFLAGS(io) & IOf_START) {
1518 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1519 IoFLAGS(io) &= ~IOf_START;
1520 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1521 sv_setpvn(GvSVn(PL_last_in_gv), "-", 1);
1522 SvSETMAGIC(GvSV(PL_last_in_gv));
1527 fp = nextargv(PL_last_in_gv);
1528 if (!fp) { /* Note: fp != IoIFP(io) */
1529 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1532 else if (type == OP_GLOB)
1533 fp = Perl_start_glob(aTHX_ POPs, io);
1535 else if (type == OP_GLOB)
1537 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1538 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1542 if ((!io || !(IoFLAGS(io) & IOf_START))
1543 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1545 if (type == OP_GLOB)
1546 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1547 "glob failed (can't start child: %s)",
1550 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1552 if (gimme == G_SCALAR) {
1553 /* undef TARG, and push that undefined value */
1554 if (type != OP_RCATLINE) {
1555 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1563 if (gimme == G_SCALAR) {
1565 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1568 if (type == OP_RCATLINE)
1569 SvPV_force_nolen(sv);
1573 else if (isGV_with_GP(sv)) {
1574 SvPV_force_nolen(sv);
1576 SvUPGRADE(sv, SVt_PV);
1577 tmplen = SvLEN(sv); /* remember if already alloced */
1578 if (!tmplen && !SvREADONLY(sv))
1579 Sv_Grow(sv, 80); /* try short-buffering it */
1581 if (type == OP_RCATLINE && SvOK(sv)) {
1583 SvPV_force_nolen(sv);
1589 sv = sv_2mortal(newSV(80));
1593 /* This should not be marked tainted if the fp is marked clean */
1594 #define MAYBE_TAINT_LINE(io, sv) \
1595 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1600 /* delay EOF state for a snarfed empty file */
1601 #define SNARF_EOF(gimme,rs,io,sv) \
1602 (gimme != G_SCALAR || SvCUR(sv) \
1603 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1607 if (!sv_gets(sv, fp, offset)
1609 || SNARF_EOF(gimme, PL_rs, io, sv)
1610 || PerlIO_error(fp)))
1612 PerlIO_clearerr(fp);
1613 if (IoFLAGS(io) & IOf_ARGV) {
1614 fp = nextargv(PL_last_in_gv);
1617 (void)do_close(PL_last_in_gv, FALSE);
1619 else if (type == OP_GLOB) {
1620 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1621 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1622 "glob failed (child exited with status %d%s)",
1623 (int)(STATUS_CURRENT >> 8),
1624 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1627 if (gimme == G_SCALAR) {
1628 if (type != OP_RCATLINE) {
1629 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1635 MAYBE_TAINT_LINE(io, sv);
1638 MAYBE_TAINT_LINE(io, sv);
1640 IoFLAGS(io) |= IOf_NOLINE;
1644 if (type == OP_GLOB) {
1647 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1648 char * const tmps = SvEND(sv) - 1;
1649 if (*tmps == *SvPVX_const(PL_rs)) {
1651 SvCUR_set(sv, SvCUR(sv) - 1);
1654 for (t1 = SvPVX_const(sv); *t1; t1++)
1655 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1656 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1658 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1659 (void)POPs; /* Unmatched wildcard? Chuck it... */
1662 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1663 if (ckWARN(WARN_UTF8)) {
1664 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1665 const STRLEN len = SvCUR(sv) - offset;
1668 if (!is_utf8_string_loc(s, len, &f))
1669 /* Emulate :encoding(utf8) warning in the same case. */
1670 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1671 "utf8 \"\\x%02X\" does not map to Unicode",
1672 f < (U8*)SvEND(sv) ? *f : 0);
1675 if (gimme == G_ARRAY) {
1676 if (SvLEN(sv) - SvCUR(sv) > 20) {
1677 SvPV_shrink_to_cur(sv);
1679 sv = sv_2mortal(newSV(80));
1682 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1683 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1684 const STRLEN new_len
1685 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1686 SvPV_renew(sv, new_len);
1695 register PERL_CONTEXT *cx;
1696 I32 gimme = OP_GIMME(PL_op, -1);
1699 if (cxstack_ix >= 0)
1700 gimme = cxstack[cxstack_ix].blk_gimme;
1708 PUSHBLOCK(cx, CXt_BLOCK, SP);
1718 SV * const keysv = POPs;
1719 HV * const hv = (HV*)POPs;
1720 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1721 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1723 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1726 if (SvTYPE(hv) != SVt_PVHV)
1729 if (PL_op->op_private & OPpLVAL_INTRO) {
1732 /* does the element we're localizing already exist? */
1733 preeminent = /* can we determine whether it exists? */
1735 || mg_find((SV*)hv, PERL_MAGIC_env)
1736 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1737 /* Try to preserve the existenceness of a tied hash
1738 * element by using EXISTS and DELETE if possible.
1739 * Fallback to FETCH and STORE otherwise */
1740 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1741 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1742 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1744 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1746 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1747 svp = he ? &HeVAL(he) : NULL;
1749 if (!svp || *svp == &PL_sv_undef) {
1753 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1755 lv = sv_newmortal();
1756 sv_upgrade(lv, SVt_PVLV);
1758 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1759 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1760 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1765 if (PL_op->op_private & OPpLVAL_INTRO) {
1766 if (HvNAME_get(hv) && isGV(*svp))
1767 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1771 const char * const key = SvPV_const(keysv, keylen);
1772 SAVEDELETE(hv, savepvn(key,keylen),
1773 SvUTF8(keysv) ? -(I32)keylen : (I32)keylen);
1775 save_helem(hv, keysv, svp);
1778 else if (PL_op->op_private & OPpDEREF)
1779 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1781 sv = (svp ? *svp : &PL_sv_undef);
1782 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1783 * Pushing the magical RHS on to the stack is useless, since
1784 * that magic is soon destined to be misled by the local(),
1785 * and thus the later pp_sassign() will fail to mg_get() the
1786 * old value. This should also cure problems with delayed
1787 * mg_get()s. GSAR 98-07-03 */
1788 if (!lval && SvGMAGICAL(sv))
1789 sv = sv_mortalcopy(sv);
1797 register PERL_CONTEXT *cx;
1802 if (PL_op->op_flags & OPf_SPECIAL) {
1803 cx = &cxstack[cxstack_ix];
1804 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1809 gimme = OP_GIMME(PL_op, -1);
1811 if (cxstack_ix >= 0)
1812 gimme = cxstack[cxstack_ix].blk_gimme;
1818 if (gimme == G_VOID)
1820 else if (gimme == G_SCALAR) {
1824 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1827 *MARK = sv_mortalcopy(TOPs);
1830 *MARK = &PL_sv_undef;
1834 else if (gimme == G_ARRAY) {
1835 /* in case LEAVE wipes old return values */
1837 for (mark = newsp + 1; mark <= SP; mark++) {
1838 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1839 *mark = sv_mortalcopy(*mark);
1840 TAINT_NOT; /* Each item is independent */
1844 PL_curpm = newpm; /* Don't pop $1 et al till now */
1854 register PERL_CONTEXT *cx;
1860 cx = &cxstack[cxstack_ix];
1861 if (CxTYPE(cx) != CXt_LOOP)
1862 DIE(aTHX_ "panic: pp_iter");
1864 itersvp = CxITERVAR(cx);
1865 av = cx->blk_loop.iterary;
1866 if (SvTYPE(av) != SVt_PVAV) {
1867 /* iterate ($min .. $max) */
1868 if (cx->blk_loop.iterlval) {
1869 /* string increment */
1870 register SV* cur = cx->blk_loop.iterlval;
1874 SvPV_const((SV*)av, maxlen) : (const char *)"";
1875 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1876 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1877 /* safe to reuse old SV */
1878 sv_setsv(*itersvp, cur);
1882 /* we need a fresh SV every time so that loop body sees a
1883 * completely new SV for closures/references to work as
1886 *itersvp = newSVsv(cur);
1887 SvREFCNT_dec(oldsv);
1889 if (strEQ(SvPVX_const(cur), max))
1890 sv_setiv(cur, 0); /* terminate next time */
1897 /* integer increment */
1898 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1901 /* don't risk potential race */
1902 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1903 /* safe to reuse old SV */
1904 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1908 /* we need a fresh SV every time so that loop body sees a
1909 * completely new SV for closures/references to work as they
1912 *itersvp = newSViv(cx->blk_loop.iterix++);
1913 SvREFCNT_dec(oldsv);
1919 if (PL_op->op_private & OPpITER_REVERSED) {
1920 /* In reverse, use itermax as the min :-) */
1921 if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
1924 if (SvMAGICAL(av) || AvREIFY(av)) {
1925 SV * const * const svp = av_fetch(av, --cx->blk_loop.iterix, FALSE);
1926 sv = svp ? *svp : NULL;
1929 sv = AvARRAY(av)[--cx->blk_loop.iterix];
1933 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp :
1937 if (SvMAGICAL(av) || AvREIFY(av)) {
1938 SV * const * const svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1939 sv = svp ? *svp : NULL;
1942 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1946 if (sv && SvIS_FREED(sv)) {
1948 Perl_croak(aTHX_ "Use of freed value in iteration");
1955 if (av != PL_curstack && sv == &PL_sv_undef) {
1956 SV *lv = cx->blk_loop.iterlval;
1957 if (lv && SvREFCNT(lv) > 1) {
1962 SvREFCNT_dec(LvTARG(lv));
1964 lv = cx->blk_loop.iterlval = newSV_type(SVt_PVLV);
1966 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1968 LvTARG(lv) = SvREFCNT_inc_simple(av);
1969 LvTARGOFF(lv) = cx->blk_loop.iterix;
1970 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1975 *itersvp = SvREFCNT_inc_simple_NN(sv);
1976 SvREFCNT_dec(oldsv);
1984 register PMOP *pm = cPMOP;
1999 register REGEXP *rx = PM_GETRE(pm);
2001 int force_on_match = 0;
2002 const I32 oldsave = PL_savestack_ix;
2004 bool doutf8 = FALSE;
2005 #ifdef PERL_OLD_COPY_ON_WRITE
2010 /* known replacement string? */
2011 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2012 if (PL_op->op_flags & OPf_STACKED)
2014 else if (PL_op->op_private & OPpTARGET_MY)
2021 #ifdef PERL_OLD_COPY_ON_WRITE
2022 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2023 because they make integers such as 256 "false". */
2024 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2027 sv_force_normal_flags(TARG,0);
2030 #ifdef PERL_OLD_COPY_ON_WRITE
2034 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2035 || SvTYPE(TARG) > SVt_PVLV)
2036 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2037 DIE(aTHX_ PL_no_modify);
2040 s = SvPV_mutable(TARG, len);
2041 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2043 rxtainted = ((rx->extflags & RXf_TAINTED) ||
2044 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2049 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2053 DIE(aTHX_ "panic: pp_subst");
2056 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2057 maxiters = 2 * slen + 10; /* We can match twice at each
2058 position, once with zero-length,
2059 second time with non-zero. */
2061 if (!rx->prelen && PL_curpm) {
2065 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand
2066 || (rx->extflags & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2067 ? REXEC_COPY_STR : 0;
2069 r_flags |= REXEC_SCREAM;
2072 if (rx->extflags & RXf_USE_INTUIT) {
2074 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2078 /* How to do it in subst? */
2079 /* if ( (rx->extflags & RXf_CHECK_ALL)
2081 && !(rx->extflags & RXf_KEEPCOPY)
2082 && ((rx->extflags & RXf_NOSCAN)
2083 || !((rx->extflags & RXf_INTUIT_TAIL)
2084 && (r_flags & REXEC_SCREAM))))
2089 /* only replace once? */
2090 once = !(rpm->op_pmflags & PMf_GLOBAL);
2092 /* known replacement string? */
2094 /* replacement needing upgrading? */
2095 if (DO_UTF8(TARG) && !doutf8) {
2096 nsv = sv_newmortal();
2099 sv_recode_to_utf8(nsv, PL_encoding);
2101 sv_utf8_upgrade(nsv);
2102 c = SvPV_const(nsv, clen);
2106 c = SvPV_const(dstr, clen);
2107 doutf8 = DO_UTF8(dstr);
2115 /* can do inplace substitution? */
2117 #ifdef PERL_OLD_COPY_ON_WRITE
2120 && (I32)clen <= rx->minlenret && (once || !(r_flags & REXEC_COPY_STR))
2121 && !(rx->extflags & RXf_LOOKBEHIND_SEEN)
2122 && (!doutf8 || SvUTF8(TARG))) {
2123 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2124 r_flags | REXEC_CHECKED))
2128 LEAVE_SCOPE(oldsave);
2131 #ifdef PERL_OLD_COPY_ON_WRITE
2132 if (SvIsCOW(TARG)) {
2133 assert (!force_on_match);
2137 if (force_on_match) {
2139 s = SvPV_force(TARG, len);
2144 SvSCREAM_off(TARG); /* disable possible screamer */
2146 rxtainted |= RX_MATCH_TAINTED(rx);
2147 m = orig + rx->offs[0].start;
2148 d = orig + rx->offs[0].end;
2150 if (m - s > strend - d) { /* faster to shorten from end */
2152 Copy(c, m, clen, char);
2157 Move(d, m, i, char);
2161 SvCUR_set(TARG, m - s);
2163 else if ((i = m - s)) { /* faster from front */
2171 Copy(c, m, clen, char);
2176 Copy(c, d, clen, char);
2181 TAINT_IF(rxtainted & 1);
2187 if (iters++ > maxiters)
2188 DIE(aTHX_ "Substitution loop");
2189 rxtainted |= RX_MATCH_TAINTED(rx);
2190 m = rx->offs[0].start + orig;
2193 Move(s, d, i, char);
2197 Copy(c, d, clen, char);
2200 s = rx->offs[0].end + orig;
2201 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2203 /* don't match same null twice */
2204 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2207 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2208 Move(s, d, i+1, char); /* include the NUL */
2210 TAINT_IF(rxtainted & 1);
2212 PUSHs(sv_2mortal(newSViv((I32)iters)));
2214 (void)SvPOK_only_UTF8(TARG);
2215 TAINT_IF(rxtainted);
2216 if (SvSMAGICAL(TARG)) {
2224 LEAVE_SCOPE(oldsave);
2228 if (CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2229 r_flags | REXEC_CHECKED))
2231 if (force_on_match) {
2233 s = SvPV_force(TARG, len);
2236 #ifdef PERL_OLD_COPY_ON_WRITE
2239 rxtainted |= RX_MATCH_TAINTED(rx);
2240 dstr = newSVpvn(m, s-m);
2246 register PERL_CONTEXT *cx;
2249 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2251 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2253 if (iters++ > maxiters)
2254 DIE(aTHX_ "Substitution loop");
2255 rxtainted |= RX_MATCH_TAINTED(rx);
2256 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2261 strend = s + (strend - m);
2263 m = rx->offs[0].start + orig;
2264 if (doutf8 && !SvUTF8(dstr))
2265 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2267 sv_catpvn(dstr, s, m-s);
2268 s = rx->offs[0].end + orig;
2270 sv_catpvn(dstr, c, clen);
2273 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2274 TARG, NULL, r_flags));
2275 if (doutf8 && !DO_UTF8(TARG))
2276 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2278 sv_catpvn(dstr, s, strend - s);
2280 #ifdef PERL_OLD_COPY_ON_WRITE
2281 /* The match may make the string COW. If so, brilliant, because that's
2282 just saved us one malloc, copy and free - the regexp has donated
2283 the old buffer, and we malloc an entirely new one, rather than the
2284 regexp malloc()ing a buffer and copying our original, only for
2285 us to throw it away here during the substitution. */
2286 if (SvIsCOW(TARG)) {
2287 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2293 SvPV_set(TARG, SvPVX(dstr));
2294 SvCUR_set(TARG, SvCUR(dstr));
2295 SvLEN_set(TARG, SvLEN(dstr));
2296 doutf8 |= DO_UTF8(dstr);
2297 SvPV_set(dstr, NULL);
2299 TAINT_IF(rxtainted & 1);
2301 PUSHs(sv_2mortal(newSViv((I32)iters)));
2303 (void)SvPOK_only(TARG);
2306 TAINT_IF(rxtainted);
2309 LEAVE_SCOPE(oldsave);
2318 LEAVE_SCOPE(oldsave);
2327 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2328 ++*PL_markstack_ptr;
2329 LEAVE; /* exit inner scope */
2332 if (PL_stack_base + *PL_markstack_ptr > SP) {
2334 const I32 gimme = GIMME_V;
2336 LEAVE; /* exit outer scope */
2337 (void)POPMARK; /* pop src */
2338 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2339 (void)POPMARK; /* pop dst */
2340 SP = PL_stack_base + POPMARK; /* pop original mark */
2341 if (gimme == G_SCALAR) {
2342 if (PL_op->op_private & OPpGREP_LEX) {
2343 SV* const sv = sv_newmortal();
2344 sv_setiv(sv, items);
2352 else if (gimme == G_ARRAY)
2359 ENTER; /* enter inner scope */
2362 src = PL_stack_base[*PL_markstack_ptr];
2364 if (PL_op->op_private & OPpGREP_LEX)
2365 PAD_SVl(PL_op->op_targ) = src;
2369 RETURNOP(cLOGOP->op_other);
2380 register PERL_CONTEXT *cx;
2383 if (CxMULTICALL(&cxstack[cxstack_ix]))
2387 cxstack_ix++; /* temporarily protect top context */
2390 if (gimme == G_SCALAR) {
2393 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2395 *MARK = SvREFCNT_inc(TOPs);
2400 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2402 *MARK = sv_mortalcopy(sv);
2407 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2411 *MARK = &PL_sv_undef;
2415 else if (gimme == G_ARRAY) {
2416 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2417 if (!SvTEMP(*MARK)) {
2418 *MARK = sv_mortalcopy(*MARK);
2419 TAINT_NOT; /* Each item is independent */
2427 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2428 PL_curpm = newpm; /* ... and pop $1 et al */
2431 return cx->blk_sub.retop;
2434 /* This duplicates the above code because the above code must not
2435 * get any slower by more conditions */
2443 register PERL_CONTEXT *cx;
2446 if (CxMULTICALL(&cxstack[cxstack_ix]))
2450 cxstack_ix++; /* temporarily protect top context */
2454 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2455 /* We are an argument to a function or grep().
2456 * This kind of lvalueness was legal before lvalue
2457 * subroutines too, so be backward compatible:
2458 * cannot report errors. */
2460 /* Scalar context *is* possible, on the LHS of -> only,
2461 * as in f()->meth(). But this is not an lvalue. */
2462 if (gimme == G_SCALAR)
2464 if (gimme == G_ARRAY) {
2465 if (!CvLVALUE(cx->blk_sub.cv))
2466 goto temporise_array;
2467 EXTEND_MORTAL(SP - newsp);
2468 for (mark = newsp + 1; mark <= SP; mark++) {
2471 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2472 *mark = sv_mortalcopy(*mark);
2474 /* Can be a localized value subject to deletion. */
2475 PL_tmps_stack[++PL_tmps_ix] = *mark;
2476 SvREFCNT_inc_void(*mark);
2481 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2482 /* Here we go for robustness, not for speed, so we change all
2483 * the refcounts so the caller gets a live guy. Cannot set
2484 * TEMP, so sv_2mortal is out of question. */
2485 if (!CvLVALUE(cx->blk_sub.cv)) {
2491 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2493 if (gimme == G_SCALAR) {
2497 /* Temporaries are bad unless they happen to be elements
2498 * of a tied hash or array */
2499 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2500 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2506 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2507 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2508 : "a readonly value" : "a temporary");
2510 else { /* Can be a localized value
2511 * subject to deletion. */
2512 PL_tmps_stack[++PL_tmps_ix] = *mark;
2513 SvREFCNT_inc_void(*mark);
2516 else { /* Should not happen? */
2522 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2523 (MARK > SP ? "Empty array" : "Array"));
2527 else if (gimme == G_ARRAY) {
2528 EXTEND_MORTAL(SP - newsp);
2529 for (mark = newsp + 1; mark <= SP; mark++) {
2530 if (*mark != &PL_sv_undef
2531 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2532 /* Might be flattened array after $#array = */
2539 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2540 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2543 /* Can be a localized value subject to deletion. */
2544 PL_tmps_stack[++PL_tmps_ix] = *mark;
2545 SvREFCNT_inc_void(*mark);
2551 if (gimme == G_SCALAR) {
2555 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2557 *MARK = SvREFCNT_inc(TOPs);
2562 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2564 *MARK = sv_mortalcopy(sv);
2569 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2573 *MARK = &PL_sv_undef;
2577 else if (gimme == G_ARRAY) {
2579 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2580 if (!SvTEMP(*MARK)) {
2581 *MARK = sv_mortalcopy(*MARK);
2582 TAINT_NOT; /* Each item is independent */
2591 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2592 PL_curpm = newpm; /* ... and pop $1 et al */
2595 return cx->blk_sub.retop;
2603 register PERL_CONTEXT *cx;
2605 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2608 DIE(aTHX_ "Not a CODE reference");
2609 switch (SvTYPE(sv)) {
2610 /* This is overwhelming the most common case: */
2612 if (!(cv = GvCVu((GV*)sv))) {
2614 cv = sv_2cv(sv, &stash, &gv, 0);
2626 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2628 SP = PL_stack_base + POPMARK;
2631 if (SvGMAGICAL(sv)) {
2636 sym = SvPVX_const(sv);
2644 sym = SvPV_const(sv, len);
2647 DIE(aTHX_ PL_no_usym, "a subroutine");
2648 if (PL_op->op_private & HINT_STRICT_REFS)
2649 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2650 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2655 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2656 tryAMAGICunDEREF(to_cv);
2659 if (SvTYPE(cv) == SVt_PVCV)
2664 DIE(aTHX_ "Not a CODE reference");
2665 /* This is the second most common case: */
2675 if (!CvROOT(cv) && !CvXSUB(cv)) {
2679 /* anonymous or undef'd function leaves us no recourse */
2680 if (CvANON(cv) || !(gv = CvGV(cv)))
2681 DIE(aTHX_ "Undefined subroutine called");
2683 /* autoloaded stub? */
2684 if (cv != GvCV(gv)) {
2687 /* should call AUTOLOAD now? */
2690 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2697 sub_name = sv_newmortal();
2698 gv_efullname3(sub_name, gv, NULL);
2699 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2703 DIE(aTHX_ "Not a CODE reference");
2708 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2709 if (CvASSERTION(cv) && PL_DBassertion)
2710 sv_setiv(PL_DBassertion, 1);
2712 Perl_get_db_sub(aTHX_ &sv, cv);
2714 PL_curcopdb = PL_curcop;
2715 cv = GvCV(PL_DBsub);
2717 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2718 DIE(aTHX_ "No DB::sub routine defined");
2721 if (!(CvISXSUB(cv))) {
2722 /* This path taken at least 75% of the time */
2724 register I32 items = SP - MARK;
2725 AV* const padlist = CvPADLIST(cv);
2726 PUSHBLOCK(cx, CXt_SUB, MARK);
2728 cx->blk_sub.retop = PL_op->op_next;
2730 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2731 * that eval'' ops within this sub know the correct lexical space.
2732 * Owing the speed considerations, we choose instead to search for
2733 * the cv using find_runcv() when calling doeval().
2735 if (CvDEPTH(cv) >= 2) {
2736 PERL_STACK_OVERFLOW_CHECK();
2737 pad_push(padlist, CvDEPTH(cv));
2740 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2742 AV* const av = (AV*)PAD_SVl(0);
2744 /* @_ is normally not REAL--this should only ever
2745 * happen when DB::sub() calls things that modify @_ */
2750 cx->blk_sub.savearray = GvAV(PL_defgv);
2751 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2752 CX_CURPAD_SAVE(cx->blk_sub);
2753 cx->blk_sub.argarray = av;
2756 if (items > AvMAX(av) + 1) {
2757 SV **ary = AvALLOC(av);
2758 if (AvARRAY(av) != ary) {
2759 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2762 if (items > AvMAX(av) + 1) {
2763 AvMAX(av) = items - 1;
2764 Renew(ary,items,SV*);
2769 Copy(MARK,AvARRAY(av),items,SV*);
2770 AvFILLp(av) = items - 1;
2778 /* warning must come *after* we fully set up the context
2779 * stuff so that __WARN__ handlers can safely dounwind()
2782 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2783 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2784 sub_crush_depth(cv);
2786 DEBUG_S(PerlIO_printf(Perl_debug_log,
2787 "%p entersub returning %p\n", (void*)thr, (void*)CvSTART(cv)));
2789 RETURNOP(CvSTART(cv));
2792 I32 markix = TOPMARK;
2797 /* Need to copy @_ to stack. Alternative may be to
2798 * switch stack to @_, and copy return values
2799 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2800 AV * const av = GvAV(PL_defgv);
2801 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2804 /* Mark is at the end of the stack. */
2806 Copy(AvARRAY(av), SP + 1, items, SV*);
2811 /* We assume first XSUB in &DB::sub is the called one. */
2813 SAVEVPTR(PL_curcop);
2814 PL_curcop = PL_curcopdb;
2817 /* Do we need to open block here? XXXX */
2818 if (CvXSUB(cv)) /* XXX this is supposed to be true */
2819 (void)(*CvXSUB(cv))(aTHX_ cv);
2821 /* Enforce some sanity in scalar context. */
2822 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2823 if (markix > PL_stack_sp - PL_stack_base)
2824 *(PL_stack_base + markix) = &PL_sv_undef;
2826 *(PL_stack_base + markix) = *PL_stack_sp;
2827 PL_stack_sp = PL_stack_base + markix;
2835 Perl_sub_crush_depth(pTHX_ CV *cv)
2838 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2840 SV* const tmpstr = sv_newmortal();
2841 gv_efullname3(tmpstr, CvGV(cv), NULL);
2842 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2851 SV* const elemsv = POPs;
2852 IV elem = SvIV(elemsv);
2853 AV* const av = (AV*)POPs;
2854 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2855 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2858 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2859 Perl_warner(aTHX_ packWARN(WARN_MISC),
2860 "Use of reference \"%"SVf"\" as array index",
2863 elem -= CopARYBASE_get(PL_curcop);
2864 if (SvTYPE(av) != SVt_PVAV)
2866 svp = av_fetch(av, elem, lval && !defer);
2868 #ifdef PERL_MALLOC_WRAP
2869 if (SvUOK(elemsv)) {
2870 const UV uv = SvUV(elemsv);
2871 elem = uv > IV_MAX ? IV_MAX : uv;
2873 else if (SvNOK(elemsv))
2874 elem = (IV)SvNV(elemsv);
2876 static const char oom_array_extend[] =
2877 "Out of memory during array extend"; /* Duplicated in av.c */
2878 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2881 if (!svp || *svp == &PL_sv_undef) {
2884 DIE(aTHX_ PL_no_aelem, elem);
2885 lv = sv_newmortal();
2886 sv_upgrade(lv, SVt_PVLV);
2888 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2889 LvTARG(lv) = SvREFCNT_inc_simple(av);
2890 LvTARGOFF(lv) = elem;
2895 if (PL_op->op_private & OPpLVAL_INTRO)
2896 save_aelem(av, elem, svp);
2897 else if (PL_op->op_private & OPpDEREF)
2898 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2900 sv = (svp ? *svp : &PL_sv_undef);
2901 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2902 sv = sv_mortalcopy(sv);
2908 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2913 Perl_croak(aTHX_ PL_no_modify);
2914 if (SvTYPE(sv) < SVt_RV)
2915 sv_upgrade(sv, SVt_RV);
2916 else if (SvTYPE(sv) >= SVt_PV) {
2923 SvRV_set(sv, newSV(0));
2926 SvRV_set(sv, (SV*)newAV());
2929 SvRV_set(sv, (SV*)newHV());
2940 SV* const sv = TOPs;
2943 SV* const rsv = SvRV(sv);
2944 if (SvTYPE(rsv) == SVt_PVCV) {
2950 SETs(method_common(sv, NULL));
2957 SV* const sv = cSVOP_sv;
2958 U32 hash = SvSHARED_HASH(sv);
2960 XPUSHs(method_common(sv, &hash));
2965 S_method_common(pTHX_ SV* meth, U32* hashp)
2972 const char* packname = NULL;
2975 const char * const name = SvPV_const(meth, namelen);
2976 SV * const sv = *(PL_stack_base + TOPMARK + 1);
2979 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2987 /* this isn't a reference */
2988 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
2989 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
2991 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2998 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
2999 !(ob=(SV*)GvIO(iogv)))
3001 /* this isn't the name of a filehandle either */
3003 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3004 ? !isIDFIRST_utf8((U8*)packname)
3005 : !isIDFIRST(*packname)
3008 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3009 SvOK(sv) ? "without a package or object reference"
3010 : "on an undefined value");
3012 /* assume it's a package name */
3013 stash = gv_stashpvn(packname, packlen, 0);
3017 SV* const ref = newSViv(PTR2IV(stash));
3018 hv_store(PL_stashcache, packname, packlen, ref, 0);
3022 /* it _is_ a filehandle name -- replace with a reference */
3023 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3026 /* if we got here, ob should be a reference or a glob */
3027 if (!ob || !(SvOBJECT(ob)
3028 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3031 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3032 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3036 stash = SvSTASH(ob);
3039 /* NOTE: stash may be null, hope hv_fetch_ent and
3040 gv_fetchmethod can cope (it seems they can) */
3042 /* shortcut for simple names */
3044 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3046 gv = (GV*)HeVAL(he);
3047 if (isGV(gv) && GvCV(gv) &&
3048 (!GvCVGEN(gv) || GvCVGEN(gv)
3049 == (PL_sub_generation + HvMROMETA(stash)->sub_generation)))
3050 return (SV*)GvCV(gv);
3054 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3057 /* This code tries to figure out just what went wrong with
3058 gv_fetchmethod. It therefore needs to duplicate a lot of
3059 the internals of that function. We can't move it inside
3060 Perl_gv_fetchmethod_autoload(), however, since that would
3061 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3064 const char* leaf = name;
3065 const char* sep = NULL;
3068 for (p = name; *p; p++) {
3070 sep = p, leaf = p + 1;
3071 else if (*p == ':' && *(p + 1) == ':')
3072 sep = p, leaf = p + 2;
3074 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3075 /* the method name is unqualified or starts with SUPER:: */
3076 bool need_strlen = 1;
3078 packname = CopSTASHPV(PL_curcop);
3081 HEK * const packhek = HvNAME_HEK(stash);
3083 packname = HEK_KEY(packhek);
3084 packlen = HEK_LEN(packhek);
3094 "Can't use anonymous symbol table for method lookup");
3096 else if (need_strlen)
3097 packlen = strlen(packname);
3101 /* the method name is qualified */
3103 packlen = sep - name;
3106 /* we're relying on gv_fetchmethod not autovivifying the stash */
3107 if (gv_stashpvn(packname, packlen, 0)) {
3109 "Can't locate object method \"%s\" via package \"%.*s\"",
3110 leaf, (int)packlen, packname);
3114 "Can't locate object method \"%s\" via package \"%.*s\""
3115 " (perhaps you forgot to load \"%.*s\"?)",
3116 leaf, (int)packlen, packname, (int)packlen, packname);
3119 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3124 * c-indentation-style: bsd
3126 * indent-tabs-mode: t
3129 * ex: set ts=8 sts=4 sw=4 noet: