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);
434 } else if (op_type == OP_DEFINED) {
436 if (!sv || !SvANY(sv))
439 DIE(aTHX_ "panic: Invalid op (%s) in pp_defined()", OP_NAME(PL_op));
442 switch (SvTYPE(sv)) {
444 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
448 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
452 if (CvROOT(sv) || CvXSUB(sv))
465 if(op_type == OP_DOR)
467 RETURNOP(cLOGOP->op_other);
469 /* assuming OP_DEFINED */
477 dVAR; dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
478 useleft = USE_LEFT(TOPm1s);
479 #ifdef PERL_PRESERVE_IVUV
480 /* We must see if we can perform the addition with integers if possible,
481 as the integer code detects overflow while the NV code doesn't.
482 If either argument hasn't had a numeric conversion yet attempt to get
483 the IV. It's important to do this now, rather than just assuming that
484 it's not IOK as a PV of "9223372036854775806" may not take well to NV
485 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
486 integer in case the second argument is IV=9223372036854775806
487 We can (now) rely on sv_2iv to do the right thing, only setting the
488 public IOK flag if the value in the NV (or PV) slot is truly integer.
490 A side effect is that this also aggressively prefers integer maths over
491 fp maths for integer values.
493 How to detect overflow?
495 C 99 section 6.2.6.1 says
497 The range of nonnegative values of a signed integer type is a subrange
498 of the corresponding unsigned integer type, and the representation of
499 the same value in each type is the same. A computation involving
500 unsigned operands can never overflow, because a result that cannot be
501 represented by the resulting unsigned integer type is reduced modulo
502 the number that is one greater than the largest value that can be
503 represented by the resulting type.
507 which I read as "unsigned ints wrap."
509 signed integer overflow seems to be classed as "exception condition"
511 If an exceptional condition occurs during the evaluation of an
512 expression (that is, if the result is not mathematically defined or not
513 in the range of representable values for its type), the behavior is
516 (6.5, the 5th paragraph)
518 I had assumed that on 2s complement machines signed arithmetic would
519 wrap, hence coded pp_add and pp_subtract on the assumption that
520 everything perl builds on would be happy. After much wailing and
521 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
522 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
523 unsigned code below is actually shorter than the old code. :-)
528 /* Unless the left argument is integer in range we are going to have to
529 use NV maths. Hence only attempt to coerce the right argument if
530 we know the left is integer. */
538 /* left operand is undef, treat as zero. + 0 is identity,
539 Could SETi or SETu right now, but space optimise by not adding
540 lots of code to speed up what is probably a rarish case. */
542 /* Left operand is defined, so is it IV? */
545 if ((auvok = SvUOK(TOPm1s)))
548 register const IV aiv = SvIVX(TOPm1s);
551 auvok = 1; /* Now acting as a sign flag. */
552 } else { /* 2s complement assumption for IV_MIN */
560 bool result_good = 0;
563 bool buvok = SvUOK(TOPs);
568 register const IV biv = SvIVX(TOPs);
575 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
576 else "IV" now, independent of how it came in.
577 if a, b represents positive, A, B negative, a maps to -A etc
582 all UV maths. negate result if A negative.
583 add if signs same, subtract if signs differ. */
589 /* Must get smaller */
595 /* result really should be -(auv-buv). as its negation
596 of true value, need to swap our result flag */
613 if (result <= (UV)IV_MIN)
616 /* result valid, but out of range for IV. */
621 } /* Overflow, drop through to NVs. */
628 /* left operand is undef, treat as zero. + 0.0 is identity. */
632 SETn( value + TOPn );
640 AV * const av = PL_op->op_flags & OPf_SPECIAL ?
641 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
642 const U32 lval = PL_op->op_flags & OPf_MOD;
643 SV** const svp = av_fetch(av, PL_op->op_private, lval);
644 SV *sv = (svp ? *svp : &PL_sv_undef);
646 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
647 sv = sv_mortalcopy(sv);
654 dVAR; dSP; dMARK; dTARGET;
656 do_join(TARG, *MARK, MARK, SP);
667 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
668 * will be enough to hold an OP*.
670 SV* const sv = sv_newmortal();
671 sv_upgrade(sv, SVt_PVLV);
673 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
681 /* Oversized hot code. */
685 dVAR; dSP; dMARK; dORIGMARK;
689 GV * const gv = (PL_op->op_flags & OPf_STACKED) ? (GV*)*++MARK : PL_defoutgv;
691 if (gv && (io = GvIO(gv))
692 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
695 if (MARK == ORIGMARK) {
696 /* If using default handle then we need to make space to
697 * pass object as 1st arg, so move other args up ...
701 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
705 *MARK = SvTIED_obj((SV*)io, mg);
708 call_method("PRINT", G_SCALAR);
716 if (!(io = GvIO(gv))) {
717 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
718 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
720 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
721 report_evil_fh(gv, io, PL_op->op_type);
722 SETERRNO(EBADF,RMS_IFI);
725 else if (!(fp = IoOFP(io))) {
726 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
728 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
729 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
730 report_evil_fh(gv, io, PL_op->op_type);
732 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
737 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
739 if (!do_print(*MARK, fp))
743 if (!do_print(PL_ofs_sv, fp)) { /* $, */
752 if (!do_print(*MARK, fp))
760 if (PL_op->op_type == OP_SAY) {
761 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
764 else if (PL_ors_sv && SvOK(PL_ors_sv))
765 if (!do_print(PL_ors_sv, fp)) /* $\ */
768 if (IoFLAGS(io) & IOf_FLUSH)
769 if (PerlIO_flush(fp) == EOF)
779 XPUSHs(&PL_sv_undef);
786 const I32 gimme = GIMME_V;
787 static const char return_array_to_lvalue_scalar[] = "Can't return array to lvalue scalar context";
788 static const char return_hash_to_lvalue_scalar[] = "Can't return hash to lvalue scalar context";
789 static const char an_array[] = "an ARRAY";
790 static const char a_hash[] = "a HASH";
791 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
792 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
796 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
799 if (SvTYPE(sv) != type)
800 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
801 if (PL_op->op_flags & OPf_REF) {
806 if (gimme != G_ARRAY)
807 Perl_croak(aTHX_ is_pp_rv2av ? return_array_to_lvalue_scalar
808 : return_hash_to_lvalue_scalar);
812 else if (PL_op->op_flags & OPf_MOD
813 && PL_op->op_private & OPpLVAL_INTRO)
814 Perl_croak(aTHX_ PL_no_localize_ref);
817 if (SvTYPE(sv) == type) {
818 if (PL_op->op_flags & OPf_REF) {
823 if (gimme != G_ARRAY)
825 is_pp_rv2av ? return_array_to_lvalue_scalar
826 : return_hash_to_lvalue_scalar);
834 if (SvTYPE(sv) != SVt_PVGV) {
835 if (SvGMAGICAL(sv)) {
840 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
848 sv = is_pp_rv2av ? (SV*)GvAVn(gv) : (SV*)GvHVn(gv);
849 if (PL_op->op_private & OPpLVAL_INTRO)
850 sv = is_pp_rv2av ? (SV*)save_ary(gv) : (SV*)save_hash(gv);
851 if (PL_op->op_flags & OPf_REF) {
856 if (gimme != G_ARRAY)
858 is_pp_rv2av ? return_array_to_lvalue_scalar
859 : return_hash_to_lvalue_scalar);
867 AV *const av = (AV*)sv;
868 /* The guts of pp_rv2av, with no intenting change to preserve history
869 (until such time as we get tools that can do blame annotation across
870 whitespace changes. */
871 if (gimme == G_ARRAY) {
872 const I32 maxarg = AvFILL(av) + 1;
873 (void)POPs; /* XXXX May be optimized away? */
875 if (SvRMAGICAL(av)) {
877 for (i=0; i < (U32)maxarg; i++) {
878 SV ** const svp = av_fetch(av, i, FALSE);
879 /* See note in pp_helem, and bug id #27839 */
881 ? SvGMAGICAL(*svp) ? sv_mortalcopy(*svp) : *svp
886 Copy(AvARRAY(av), SP+1, maxarg, SV*);
890 else if (gimme == G_SCALAR) {
892 const I32 maxarg = AvFILL(av) + 1;
896 /* The guts of pp_rv2hv */
897 if (gimme == G_ARRAY) { /* array wanted */
901 else if (gimme == G_SCALAR) {
903 TARG = Perl_hv_scalar(aTHX_ (HV*)sv);
912 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
919 if (ckWARN(WARN_MISC)) {
921 if (relem == firstrelem &&
923 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
924 SvTYPE(SvRV(*relem)) == SVt_PVHV))
926 err = "Reference found where even-sized list expected";
929 err = "Odd number of elements in hash assignment";
930 Perl_warner(aTHX_ packWARN(WARN_MISC), err);
934 didstore = hv_store_ent(hash,*relem,tmpstr,0);
935 if (SvMAGICAL(hash)) {
936 if (SvSMAGICAL(tmpstr))
948 SV **lastlelem = PL_stack_sp;
949 SV **lastrelem = PL_stack_base + POPMARK;
950 SV **firstrelem = PL_stack_base + POPMARK + 1;
951 SV **firstlelem = lastrelem + 1;
964 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
966 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
969 /* If there's a common identifier on both sides we have to take
970 * special care that assigning the identifier on the left doesn't
971 * clobber a value on the right that's used later in the list.
973 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
974 EXTEND_MORTAL(lastrelem - firstrelem + 1);
975 for (relem = firstrelem; relem <= lastrelem; relem++) {
977 TAINT_NOT; /* Each item is independent */
978 *relem = sv_mortalcopy(sv);
988 while (lelem <= lastlelem) {
989 TAINT_NOT; /* Each item stands on its own, taintwise. */
991 switch (SvTYPE(sv)) {
994 magic = SvMAGICAL(ary) != 0;
996 av_extend(ary, lastrelem - relem);
998 while (relem <= lastrelem) { /* gobble up all the rest */
1001 sv = newSVsv(*relem);
1003 didstore = av_store(ary,i++,sv);
1013 case SVt_PVHV: { /* normal hash */
1017 magic = SvMAGICAL(hash) != 0;
1019 firsthashrelem = relem;
1021 while (relem < lastrelem) { /* gobble up all the rest */
1023 sv = *relem ? *relem : &PL_sv_no;
1027 sv_setsv(tmpstr,*relem); /* value */
1028 *(relem++) = tmpstr;
1029 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1030 /* key overwrites an existing entry */
1032 didstore = hv_store_ent(hash,sv,tmpstr,0);
1034 if (SvSMAGICAL(tmpstr))
1041 if (relem == lastrelem) {
1042 do_oddball(hash, relem, firstrelem);
1048 if (SvIMMORTAL(sv)) {
1049 if (relem <= lastrelem)
1053 if (relem <= lastrelem) {
1054 sv_setsv(sv, *relem);
1058 sv_setsv(sv, &PL_sv_undef);
1063 if (PL_delaymagic & ~DM_DELAY) {
1064 if (PL_delaymagic & DM_UID) {
1065 #ifdef HAS_SETRESUID
1066 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1067 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1070 # ifdef HAS_SETREUID
1071 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1072 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1075 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1076 (void)setruid(PL_uid);
1077 PL_delaymagic &= ~DM_RUID;
1079 # endif /* HAS_SETRUID */
1081 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1082 (void)seteuid(PL_euid);
1083 PL_delaymagic &= ~DM_EUID;
1085 # endif /* HAS_SETEUID */
1086 if (PL_delaymagic & DM_UID) {
1087 if (PL_uid != PL_euid)
1088 DIE(aTHX_ "No setreuid available");
1089 (void)PerlProc_setuid(PL_uid);
1091 # endif /* HAS_SETREUID */
1092 #endif /* HAS_SETRESUID */
1093 PL_uid = PerlProc_getuid();
1094 PL_euid = PerlProc_geteuid();
1096 if (PL_delaymagic & DM_GID) {
1097 #ifdef HAS_SETRESGID
1098 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1099 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1102 # ifdef HAS_SETREGID
1103 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1104 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1107 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1108 (void)setrgid(PL_gid);
1109 PL_delaymagic &= ~DM_RGID;
1111 # endif /* HAS_SETRGID */
1113 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1114 (void)setegid(PL_egid);
1115 PL_delaymagic &= ~DM_EGID;
1117 # endif /* HAS_SETEGID */
1118 if (PL_delaymagic & DM_GID) {
1119 if (PL_gid != PL_egid)
1120 DIE(aTHX_ "No setregid available");
1121 (void)PerlProc_setgid(PL_gid);
1123 # endif /* HAS_SETREGID */
1124 #endif /* HAS_SETRESGID */
1125 PL_gid = PerlProc_getgid();
1126 PL_egid = PerlProc_getegid();
1128 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1132 if (gimme == G_VOID)
1133 SP = firstrelem - 1;
1134 else if (gimme == G_SCALAR) {
1137 SETi(lastrelem - firstrelem + 1 - duplicates);
1144 /* Removes from the stack the entries which ended up as
1145 * duplicated keys in the hash (fix for [perl #24380]) */
1146 Move(firsthashrelem + duplicates,
1147 firsthashrelem, duplicates, SV**);
1148 lastrelem -= duplicates;
1153 SP = firstrelem + (lastlelem - firstlelem);
1154 lelem = firstlelem + (relem - firstrelem);
1156 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1164 register PMOP * const pm = cPMOP;
1165 REGEXP * rx = PM_GETRE(pm);
1166 SV * const pkg = CALLREG_QRPKG(rx);
1167 SV * const rv = sv_newmortal();
1168 SV * const sv = newSVrv(rv, SvPV_nolen(pkg));
1169 if (rx->extflags & RXf_TAINTED)
1171 sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0);
1179 register PMOP *pm = cPMOP;
1181 register const char *t;
1182 register const char *s;
1185 I32 r_flags = REXEC_CHECKED;
1186 const char *truebase; /* Start of string */
1187 register REGEXP *rx = PM_GETRE(pm);
1189 const I32 gimme = GIMME;
1192 const I32 oldsave = PL_savestack_ix;
1193 I32 update_minmatch = 1;
1194 I32 had_zerolen = 0;
1197 if (PL_op->op_flags & OPf_STACKED)
1199 else if (PL_op->op_private & OPpTARGET_MY)
1206 PUTBACK; /* EVAL blocks need stack_sp. */
1207 s = SvPV_const(TARG, len);
1209 DIE(aTHX_ "panic: pp_match");
1211 rxtainted = ((rx->extflags & RXf_TAINTED) ||
1212 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1215 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1217 /* PMdf_USED is set after a ?? matches once */
1220 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1222 pm->op_pmflags & PMf_USED
1226 if (gimme == G_ARRAY)
1233 /* empty pattern special-cased to use last successful pattern if possible */
1234 if (!rx->prelen && PL_curpm) {
1239 if (rx->minlen > (I32)len)
1244 /* XXXX What part of this is needed with true \G-support? */
1245 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1246 rx->offs[0].start = -1;
1247 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1248 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1249 if (mg && mg->mg_len >= 0) {
1250 if (!(rx->extflags & RXf_GPOS_SEEN))
1251 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1252 else if (rx->extflags & RXf_ANCH_GPOS) {
1253 r_flags |= REXEC_IGNOREPOS;
1254 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1255 } else if (rx->extflags & RXf_GPOS_FLOAT)
1258 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1259 minmatch = (mg->mg_flags & MGf_MINMATCH) ? rx->gofs + 1 : 0;
1260 update_minmatch = 0;
1264 /* remove comment to get faster /g but possibly unsafe $1 vars after a
1265 match. Test for the unsafe vars will fail as well*/
1266 if (( /* !global && */ rx->nparens)
1267 || SvTEMP(TARG) || PL_sawampersand ||
1268 (rx->extflags & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1269 r_flags |= REXEC_COPY_STR;
1271 r_flags |= REXEC_SCREAM;
1274 if (global && rx->offs[0].start != -1) {
1275 t = s = rx->offs[0].end + truebase - rx->gofs;
1276 if ((s + rx->minlen) > strend || s < truebase)
1278 if (update_minmatch++)
1279 minmatch = had_zerolen;
1281 if (rx->extflags & RXf_USE_INTUIT &&
1282 DO_UTF8(TARG) == ((rx->extflags & RXf_UTF8) != 0)) {
1283 /* FIXME - can PL_bostr be made const char *? */
1284 PL_bostr = (char *)truebase;
1285 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1289 if ( (rx->extflags & RXf_CHECK_ALL)
1291 && !(rx->extflags & RXf_PMf_KEEPCOPY)
1292 && ((rx->extflags & RXf_NOSCAN)
1293 || !((rx->extflags & RXf_INTUIT_TAIL)
1294 && (r_flags & REXEC_SCREAM)))
1295 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1298 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase, minmatch, TARG, INT2PTR(void*, gpos), r_flags))
1301 if (dynpm->op_pmflags & PMf_ONCE) {
1303 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1305 dynpm->op_pmflags |= PMf_USED;
1316 RX_MATCH_TAINTED_on(rx);
1317 TAINT_IF(RX_MATCH_TAINTED(rx));
1318 if (gimme == G_ARRAY) {
1319 const I32 nparens = rx->nparens;
1320 I32 i = (global && !nparens) ? 1 : 0;
1322 SPAGAIN; /* EVAL blocks could move the stack. */
1323 EXTEND(SP, nparens + i);
1324 EXTEND_MORTAL(nparens + i);
1325 for (i = !i; i <= nparens; i++) {
1326 PUSHs(sv_newmortal());
1327 if ((rx->offs[i].start != -1) && rx->offs[i].end != -1 ) {
1328 const I32 len = rx->offs[i].end - rx->offs[i].start;
1329 s = rx->offs[i].start + truebase;
1330 if (rx->offs[i].end < 0 || rx->offs[i].start < 0 ||
1331 len < 0 || len > strend - s)
1332 DIE(aTHX_ "panic: pp_match start/end pointers");
1333 sv_setpvn(*SP, s, len);
1334 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1339 if (dynpm->op_pmflags & PMf_CONTINUE) {
1341 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1342 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1344 #ifdef PERL_OLD_COPY_ON_WRITE
1346 sv_force_normal_flags(TARG, 0);
1348 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1349 &PL_vtbl_mglob, NULL, 0);
1351 if (rx->offs[0].start != -1) {
1352 mg->mg_len = rx->offs[0].end;
1353 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1354 mg->mg_flags |= MGf_MINMATCH;
1356 mg->mg_flags &= ~MGf_MINMATCH;
1359 had_zerolen = (rx->offs[0].start != -1
1360 && (rx->offs[0].start + rx->gofs
1361 == (UV)rx->offs[0].end));
1362 PUTBACK; /* EVAL blocks may use stack */
1363 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1368 LEAVE_SCOPE(oldsave);
1374 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1375 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1379 #ifdef PERL_OLD_COPY_ON_WRITE
1381 sv_force_normal_flags(TARG, 0);
1383 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1384 &PL_vtbl_mglob, NULL, 0);
1386 if (rx->offs[0].start != -1) {
1387 mg->mg_len = rx->offs[0].end;
1388 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1389 mg->mg_flags |= MGf_MINMATCH;
1391 mg->mg_flags &= ~MGf_MINMATCH;
1394 LEAVE_SCOPE(oldsave);
1398 yup: /* Confirmed by INTUIT */
1400 RX_MATCH_TAINTED_on(rx);
1401 TAINT_IF(RX_MATCH_TAINTED(rx));
1403 if (dynpm->op_pmflags & PMf_ONCE) {
1405 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1407 dynpm->op_pmflags |= PMf_USED;
1410 if (RX_MATCH_COPIED(rx))
1411 Safefree(rx->subbeg);
1412 RX_MATCH_COPIED_off(rx);
1415 /* FIXME - should rx->subbeg be const char *? */
1416 rx->subbeg = (char *) truebase;
1417 rx->offs[0].start = s - truebase;
1418 if (RX_MATCH_UTF8(rx)) {
1419 char * const t = (char*)utf8_hop((U8*)s, rx->minlenret);
1420 rx->offs[0].end = t - truebase;
1423 rx->offs[0].end = s - truebase + rx->minlenret;
1425 rx->sublen = strend - truebase;
1428 if (PL_sawampersand || rx->extflags & RXf_PMf_KEEPCOPY) {
1430 #ifdef PERL_OLD_COPY_ON_WRITE
1431 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1433 PerlIO_printf(Perl_debug_log,
1434 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1435 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1438 rx->saved_copy = sv_setsv_cow(rx->saved_copy, TARG);
1439 rx->subbeg = (char *) SvPVX_const(rx->saved_copy) + (t - truebase);
1440 assert (SvPOKp(rx->saved_copy));
1445 rx->subbeg = savepvn(t, strend - t);
1446 #ifdef PERL_OLD_COPY_ON_WRITE
1447 rx->saved_copy = NULL;
1450 rx->sublen = strend - t;
1451 RX_MATCH_COPIED_on(rx);
1452 off = rx->offs[0].start = s - t;
1453 rx->offs[0].end = off + rx->minlenret;
1455 else { /* startp/endp are used by @- @+. */
1456 rx->offs[0].start = s - truebase;
1457 rx->offs[0].end = s - truebase + rx->minlenret;
1459 /* including rx->nparens in the below code seems highly suspicious.
1461 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1462 LEAVE_SCOPE(oldsave);
1467 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1468 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1469 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1474 LEAVE_SCOPE(oldsave);
1475 if (gimme == G_ARRAY)
1481 Perl_do_readline(pTHX)
1483 dVAR; dSP; dTARGETSTACKED;
1488 register IO * const io = GvIO(PL_last_in_gv);
1489 register const I32 type = PL_op->op_type;
1490 const I32 gimme = GIMME_V;
1493 MAGIC * const mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar);
1496 XPUSHs(SvTIED_obj((SV*)io, mg));
1499 call_method("READLINE", gimme);
1502 if (gimme == G_SCALAR) {
1503 SV* const result = POPs;
1504 SvSetSV_nosteal(TARG, result);
1514 if (IoFLAGS(io) & IOf_ARGV) {
1515 if (IoFLAGS(io) & IOf_START) {
1517 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1518 IoFLAGS(io) &= ~IOf_START;
1519 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1520 sv_setpvn(GvSVn(PL_last_in_gv), "-", 1);
1521 SvSETMAGIC(GvSV(PL_last_in_gv));
1526 fp = nextargv(PL_last_in_gv);
1527 if (!fp) { /* Note: fp != IoIFP(io) */
1528 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1531 else if (type == OP_GLOB)
1532 fp = Perl_start_glob(aTHX_ POPs, io);
1534 else if (type == OP_GLOB)
1536 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1537 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1541 if ((!io || !(IoFLAGS(io) & IOf_START))
1542 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1544 if (type == OP_GLOB)
1545 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1546 "glob failed (can't start child: %s)",
1549 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1551 if (gimme == G_SCALAR) {
1552 /* undef TARG, and push that undefined value */
1553 if (type != OP_RCATLINE) {
1554 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1562 if (gimme == G_SCALAR) {
1564 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1567 if (type == OP_RCATLINE)
1568 SvPV_force_nolen(sv);
1572 else if (isGV_with_GP(sv)) {
1573 SvPV_force_nolen(sv);
1575 SvUPGRADE(sv, SVt_PV);
1576 tmplen = SvLEN(sv); /* remember if already alloced */
1577 if (!tmplen && !SvREADONLY(sv))
1578 Sv_Grow(sv, 80); /* try short-buffering it */
1580 if (type == OP_RCATLINE && SvOK(sv)) {
1582 SvPV_force_nolen(sv);
1588 sv = sv_2mortal(newSV(80));
1592 /* This should not be marked tainted if the fp is marked clean */
1593 #define MAYBE_TAINT_LINE(io, sv) \
1594 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1599 /* delay EOF state for a snarfed empty file */
1600 #define SNARF_EOF(gimme,rs,io,sv) \
1601 (gimme != G_SCALAR || SvCUR(sv) \
1602 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1606 if (!sv_gets(sv, fp, offset)
1608 || SNARF_EOF(gimme, PL_rs, io, sv)
1609 || PerlIO_error(fp)))
1611 PerlIO_clearerr(fp);
1612 if (IoFLAGS(io) & IOf_ARGV) {
1613 fp = nextargv(PL_last_in_gv);
1616 (void)do_close(PL_last_in_gv, FALSE);
1618 else if (type == OP_GLOB) {
1619 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1620 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1621 "glob failed (child exited with status %d%s)",
1622 (int)(STATUS_CURRENT >> 8),
1623 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1626 if (gimme == G_SCALAR) {
1627 if (type != OP_RCATLINE) {
1628 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1634 MAYBE_TAINT_LINE(io, sv);
1637 MAYBE_TAINT_LINE(io, sv);
1639 IoFLAGS(io) |= IOf_NOLINE;
1643 if (type == OP_GLOB) {
1646 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1647 char * const tmps = SvEND(sv) - 1;
1648 if (*tmps == *SvPVX_const(PL_rs)) {
1650 SvCUR_set(sv, SvCUR(sv) - 1);
1653 for (t1 = SvPVX_const(sv); *t1; t1++)
1654 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1655 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1657 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1658 (void)POPs; /* Unmatched wildcard? Chuck it... */
1661 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1662 if (ckWARN(WARN_UTF8)) {
1663 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1664 const STRLEN len = SvCUR(sv) - offset;
1667 if (!is_utf8_string_loc(s, len, &f))
1668 /* Emulate :encoding(utf8) warning in the same case. */
1669 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1670 "utf8 \"\\x%02X\" does not map to Unicode",
1671 f < (U8*)SvEND(sv) ? *f : 0);
1674 if (gimme == G_ARRAY) {
1675 if (SvLEN(sv) - SvCUR(sv) > 20) {
1676 SvPV_shrink_to_cur(sv);
1678 sv = sv_2mortal(newSV(80));
1681 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1682 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1683 const STRLEN new_len
1684 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1685 SvPV_renew(sv, new_len);
1694 register PERL_CONTEXT *cx;
1695 I32 gimme = OP_GIMME(PL_op, -1);
1698 if (cxstack_ix >= 0)
1699 gimme = cxstack[cxstack_ix].blk_gimme;
1707 PUSHBLOCK(cx, CXt_BLOCK, SP);
1717 SV * const keysv = POPs;
1718 HV * const hv = (HV*)POPs;
1719 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1720 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1722 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1725 if (SvTYPE(hv) != SVt_PVHV)
1728 if (PL_op->op_private & OPpLVAL_INTRO) {
1731 /* does the element we're localizing already exist? */
1732 preeminent = /* can we determine whether it exists? */
1734 || mg_find((SV*)hv, PERL_MAGIC_env)
1735 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1736 /* Try to preserve the existenceness of a tied hash
1737 * element by using EXISTS and DELETE if possible.
1738 * Fallback to FETCH and STORE otherwise */
1739 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1740 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1741 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1743 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1745 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1746 svp = he ? &HeVAL(he) : NULL;
1748 if (!svp || *svp == &PL_sv_undef) {
1752 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1754 lv = sv_newmortal();
1755 sv_upgrade(lv, SVt_PVLV);
1757 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1758 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1759 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1764 if (PL_op->op_private & OPpLVAL_INTRO) {
1765 if (HvNAME_get(hv) && isGV(*svp))
1766 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1770 const char * const key = SvPV_const(keysv, keylen);
1771 SAVEDELETE(hv, savepvn(key,keylen),
1772 SvUTF8(keysv) ? -(I32)keylen : (I32)keylen);
1774 save_helem(hv, keysv, svp);
1777 else if (PL_op->op_private & OPpDEREF)
1778 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1780 sv = (svp ? *svp : &PL_sv_undef);
1781 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1782 * Pushing the magical RHS on to the stack is useless, since
1783 * that magic is soon destined to be misled by the local(),
1784 * and thus the later pp_sassign() will fail to mg_get() the
1785 * old value. This should also cure problems with delayed
1786 * mg_get()s. GSAR 98-07-03 */
1787 if (!lval && SvGMAGICAL(sv))
1788 sv = sv_mortalcopy(sv);
1796 register PERL_CONTEXT *cx;
1801 if (PL_op->op_flags & OPf_SPECIAL) {
1802 cx = &cxstack[cxstack_ix];
1803 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1808 gimme = OP_GIMME(PL_op, -1);
1810 if (cxstack_ix >= 0)
1811 gimme = cxstack[cxstack_ix].blk_gimme;
1817 if (gimme == G_VOID)
1819 else if (gimme == G_SCALAR) {
1823 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1826 *MARK = sv_mortalcopy(TOPs);
1829 *MARK = &PL_sv_undef;
1833 else if (gimme == G_ARRAY) {
1834 /* in case LEAVE wipes old return values */
1836 for (mark = newsp + 1; mark <= SP; mark++) {
1837 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1838 *mark = sv_mortalcopy(*mark);
1839 TAINT_NOT; /* Each item is independent */
1843 PL_curpm = newpm; /* Don't pop $1 et al till now */
1853 register PERL_CONTEXT *cx;
1859 cx = &cxstack[cxstack_ix];
1860 if (CxTYPE(cx) != CXt_LOOP)
1861 DIE(aTHX_ "panic: pp_iter");
1863 itersvp = CxITERVAR(cx);
1864 av = cx->blk_loop.iterary;
1865 if (SvTYPE(av) != SVt_PVAV) {
1866 /* iterate ($min .. $max) */
1867 if (cx->blk_loop.iterlval) {
1868 /* string increment */
1869 register SV* cur = cx->blk_loop.iterlval;
1873 SvPV_const((SV*)av, maxlen) : (const char *)"";
1874 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1875 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1876 /* safe to reuse old SV */
1877 sv_setsv(*itersvp, cur);
1881 /* we need a fresh SV every time so that loop body sees a
1882 * completely new SV for closures/references to work as
1885 *itersvp = newSVsv(cur);
1886 SvREFCNT_dec(oldsv);
1888 if (strEQ(SvPVX_const(cur), max))
1889 sv_setiv(cur, 0); /* terminate next time */
1896 /* integer increment */
1897 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1900 /* don't risk potential race */
1901 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1902 /* safe to reuse old SV */
1903 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1907 /* we need a fresh SV every time so that loop body sees a
1908 * completely new SV for closures/references to work as they
1911 *itersvp = newSViv(cx->blk_loop.iterix++);
1912 SvREFCNT_dec(oldsv);
1918 if (PL_op->op_private & OPpITER_REVERSED) {
1919 /* In reverse, use itermax as the min :-) */
1920 if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
1923 if (SvMAGICAL(av) || AvREIFY(av)) {
1924 SV * const * const svp = av_fetch(av, --cx->blk_loop.iterix, FALSE);
1925 sv = svp ? *svp : NULL;
1928 sv = AvARRAY(av)[--cx->blk_loop.iterix];
1932 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp :
1936 if (SvMAGICAL(av) || AvREIFY(av)) {
1937 SV * const * const svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1938 sv = svp ? *svp : NULL;
1941 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1945 if (sv && SvIS_FREED(sv)) {
1947 Perl_croak(aTHX_ "Use of freed value in iteration");
1954 if (av != PL_curstack && sv == &PL_sv_undef) {
1955 SV *lv = cx->blk_loop.iterlval;
1956 if (lv && SvREFCNT(lv) > 1) {
1961 SvREFCNT_dec(LvTARG(lv));
1963 lv = cx->blk_loop.iterlval = newSV_type(SVt_PVLV);
1965 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1967 LvTARG(lv) = SvREFCNT_inc_simple(av);
1968 LvTARGOFF(lv) = cx->blk_loop.iterix;
1969 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1974 *itersvp = SvREFCNT_inc_simple_NN(sv);
1975 SvREFCNT_dec(oldsv);
1983 register PMOP *pm = cPMOP;
1998 register REGEXP *rx = PM_GETRE(pm);
2000 int force_on_match = 0;
2001 const I32 oldsave = PL_savestack_ix;
2003 bool doutf8 = FALSE;
2004 #ifdef PERL_OLD_COPY_ON_WRITE
2009 /* known replacement string? */
2010 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2011 if (PL_op->op_flags & OPf_STACKED)
2013 else if (PL_op->op_private & OPpTARGET_MY)
2020 #ifdef PERL_OLD_COPY_ON_WRITE
2021 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2022 because they make integers such as 256 "false". */
2023 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2026 sv_force_normal_flags(TARG,0);
2029 #ifdef PERL_OLD_COPY_ON_WRITE
2033 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2034 || SvTYPE(TARG) > SVt_PVLV)
2035 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2036 DIE(aTHX_ PL_no_modify);
2039 s = SvPV_mutable(TARG, len);
2040 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2042 rxtainted = ((rx->extflags & RXf_TAINTED) ||
2043 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2048 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2052 DIE(aTHX_ "panic: pp_subst");
2055 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2056 maxiters = 2 * slen + 10; /* We can match twice at each
2057 position, once with zero-length,
2058 second time with non-zero. */
2060 if (!rx->prelen && PL_curpm) {
2064 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand
2065 || (rx->extflags & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2066 ? REXEC_COPY_STR : 0;
2068 r_flags |= REXEC_SCREAM;
2071 if (rx->extflags & RXf_USE_INTUIT) {
2073 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2077 /* How to do it in subst? */
2078 /* if ( (rx->extflags & RXf_CHECK_ALL)
2080 && !(rx->extflags & RXf_KEEPCOPY)
2081 && ((rx->extflags & RXf_NOSCAN)
2082 || !((rx->extflags & RXf_INTUIT_TAIL)
2083 && (r_flags & REXEC_SCREAM))))
2088 /* only replace once? */
2089 once = !(rpm->op_pmflags & PMf_GLOBAL);
2091 /* known replacement string? */
2093 /* replacement needing upgrading? */
2094 if (DO_UTF8(TARG) && !doutf8) {
2095 nsv = sv_newmortal();
2098 sv_recode_to_utf8(nsv, PL_encoding);
2100 sv_utf8_upgrade(nsv);
2101 c = SvPV_const(nsv, clen);
2105 c = SvPV_const(dstr, clen);
2106 doutf8 = DO_UTF8(dstr);
2114 /* can do inplace substitution? */
2116 #ifdef PERL_OLD_COPY_ON_WRITE
2119 && (I32)clen <= rx->minlenret && (once || !(r_flags & REXEC_COPY_STR))
2120 && !(rx->extflags & RXf_LOOKBEHIND_SEEN)
2121 && (!doutf8 || SvUTF8(TARG))) {
2122 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2123 r_flags | REXEC_CHECKED))
2127 LEAVE_SCOPE(oldsave);
2130 #ifdef PERL_OLD_COPY_ON_WRITE
2131 if (SvIsCOW(TARG)) {
2132 assert (!force_on_match);
2136 if (force_on_match) {
2138 s = SvPV_force(TARG, len);
2143 SvSCREAM_off(TARG); /* disable possible screamer */
2145 rxtainted |= RX_MATCH_TAINTED(rx);
2146 m = orig + rx->offs[0].start;
2147 d = orig + rx->offs[0].end;
2149 if (m - s > strend - d) { /* faster to shorten from end */
2151 Copy(c, m, clen, char);
2156 Move(d, m, i, char);
2160 SvCUR_set(TARG, m - s);
2162 else if ((i = m - s)) { /* faster from front */
2170 Copy(c, m, clen, char);
2175 Copy(c, d, clen, char);
2180 TAINT_IF(rxtainted & 1);
2186 if (iters++ > maxiters)
2187 DIE(aTHX_ "Substitution loop");
2188 rxtainted |= RX_MATCH_TAINTED(rx);
2189 m = rx->offs[0].start + orig;
2192 Move(s, d, i, char);
2196 Copy(c, d, clen, char);
2199 s = rx->offs[0].end + orig;
2200 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2202 /* don't match same null twice */
2203 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2206 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2207 Move(s, d, i+1, char); /* include the NUL */
2209 TAINT_IF(rxtainted & 1);
2211 PUSHs(sv_2mortal(newSViv((I32)iters)));
2213 (void)SvPOK_only_UTF8(TARG);
2214 TAINT_IF(rxtainted);
2215 if (SvSMAGICAL(TARG)) {
2223 LEAVE_SCOPE(oldsave);
2227 if (CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2228 r_flags | REXEC_CHECKED))
2230 if (force_on_match) {
2232 s = SvPV_force(TARG, len);
2235 #ifdef PERL_OLD_COPY_ON_WRITE
2238 rxtainted |= RX_MATCH_TAINTED(rx);
2239 dstr = newSVpvn(m, s-m);
2245 register PERL_CONTEXT *cx;
2248 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2250 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2252 if (iters++ > maxiters)
2253 DIE(aTHX_ "Substitution loop");
2254 rxtainted |= RX_MATCH_TAINTED(rx);
2255 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2260 strend = s + (strend - m);
2262 m = rx->offs[0].start + orig;
2263 if (doutf8 && !SvUTF8(dstr))
2264 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2266 sv_catpvn(dstr, s, m-s);
2267 s = rx->offs[0].end + orig;
2269 sv_catpvn(dstr, c, clen);
2272 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2273 TARG, NULL, r_flags));
2274 if (doutf8 && !DO_UTF8(TARG))
2275 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2277 sv_catpvn(dstr, s, strend - s);
2279 #ifdef PERL_OLD_COPY_ON_WRITE
2280 /* The match may make the string COW. If so, brilliant, because that's
2281 just saved us one malloc, copy and free - the regexp has donated
2282 the old buffer, and we malloc an entirely new one, rather than the
2283 regexp malloc()ing a buffer and copying our original, only for
2284 us to throw it away here during the substitution. */
2285 if (SvIsCOW(TARG)) {
2286 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2292 SvPV_set(TARG, SvPVX(dstr));
2293 SvCUR_set(TARG, SvCUR(dstr));
2294 SvLEN_set(TARG, SvLEN(dstr));
2295 doutf8 |= DO_UTF8(dstr);
2296 SvPV_set(dstr, NULL);
2298 TAINT_IF(rxtainted & 1);
2300 PUSHs(sv_2mortal(newSViv((I32)iters)));
2302 (void)SvPOK_only(TARG);
2305 TAINT_IF(rxtainted);
2308 LEAVE_SCOPE(oldsave);
2317 LEAVE_SCOPE(oldsave);
2326 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2327 ++*PL_markstack_ptr;
2328 LEAVE; /* exit inner scope */
2331 if (PL_stack_base + *PL_markstack_ptr > SP) {
2333 const I32 gimme = GIMME_V;
2335 LEAVE; /* exit outer scope */
2336 (void)POPMARK; /* pop src */
2337 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2338 (void)POPMARK; /* pop dst */
2339 SP = PL_stack_base + POPMARK; /* pop original mark */
2340 if (gimme == G_SCALAR) {
2341 if (PL_op->op_private & OPpGREP_LEX) {
2342 SV* const sv = sv_newmortal();
2343 sv_setiv(sv, items);
2351 else if (gimme == G_ARRAY)
2358 ENTER; /* enter inner scope */
2361 src = PL_stack_base[*PL_markstack_ptr];
2363 if (PL_op->op_private & OPpGREP_LEX)
2364 PAD_SVl(PL_op->op_targ) = src;
2368 RETURNOP(cLOGOP->op_other);
2379 register PERL_CONTEXT *cx;
2382 if (CxMULTICALL(&cxstack[cxstack_ix]))
2386 cxstack_ix++; /* temporarily protect top context */
2389 if (gimme == G_SCALAR) {
2392 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2394 *MARK = SvREFCNT_inc(TOPs);
2399 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2401 *MARK = sv_mortalcopy(sv);
2406 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2410 *MARK = &PL_sv_undef;
2414 else if (gimme == G_ARRAY) {
2415 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2416 if (!SvTEMP(*MARK)) {
2417 *MARK = sv_mortalcopy(*MARK);
2418 TAINT_NOT; /* Each item is independent */
2426 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2427 PL_curpm = newpm; /* ... and pop $1 et al */
2430 return cx->blk_sub.retop;
2433 /* This duplicates the above code because the above code must not
2434 * get any slower by more conditions */
2442 register PERL_CONTEXT *cx;
2445 if (CxMULTICALL(&cxstack[cxstack_ix]))
2449 cxstack_ix++; /* temporarily protect top context */
2453 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2454 /* We are an argument to a function or grep().
2455 * This kind of lvalueness was legal before lvalue
2456 * subroutines too, so be backward compatible:
2457 * cannot report errors. */
2459 /* Scalar context *is* possible, on the LHS of -> only,
2460 * as in f()->meth(). But this is not an lvalue. */
2461 if (gimme == G_SCALAR)
2463 if (gimme == G_ARRAY) {
2464 if (!CvLVALUE(cx->blk_sub.cv))
2465 goto temporise_array;
2466 EXTEND_MORTAL(SP - newsp);
2467 for (mark = newsp + 1; mark <= SP; mark++) {
2470 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2471 *mark = sv_mortalcopy(*mark);
2473 /* Can be a localized value subject to deletion. */
2474 PL_tmps_stack[++PL_tmps_ix] = *mark;
2475 SvREFCNT_inc_void(*mark);
2480 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2481 /* Here we go for robustness, not for speed, so we change all
2482 * the refcounts so the caller gets a live guy. Cannot set
2483 * TEMP, so sv_2mortal is out of question. */
2484 if (!CvLVALUE(cx->blk_sub.cv)) {
2490 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2492 if (gimme == G_SCALAR) {
2496 /* Temporaries are bad unless they happen to be elements
2497 * of a tied hash or array */
2498 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2499 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2505 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2506 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2507 : "a readonly value" : "a temporary");
2509 else { /* Can be a localized value
2510 * subject to deletion. */
2511 PL_tmps_stack[++PL_tmps_ix] = *mark;
2512 SvREFCNT_inc_void(*mark);
2515 else { /* Should not happen? */
2521 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2522 (MARK > SP ? "Empty array" : "Array"));
2526 else if (gimme == G_ARRAY) {
2527 EXTEND_MORTAL(SP - newsp);
2528 for (mark = newsp + 1; mark <= SP; mark++) {
2529 if (*mark != &PL_sv_undef
2530 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2531 /* Might be flattened array after $#array = */
2538 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2539 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2542 /* Can be a localized value subject to deletion. */
2543 PL_tmps_stack[++PL_tmps_ix] = *mark;
2544 SvREFCNT_inc_void(*mark);
2550 if (gimme == G_SCALAR) {
2554 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2556 *MARK = SvREFCNT_inc(TOPs);
2561 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2563 *MARK = sv_mortalcopy(sv);
2568 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2572 *MARK = &PL_sv_undef;
2576 else if (gimme == G_ARRAY) {
2578 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2579 if (!SvTEMP(*MARK)) {
2580 *MARK = sv_mortalcopy(*MARK);
2581 TAINT_NOT; /* Each item is independent */
2590 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2591 PL_curpm = newpm; /* ... and pop $1 et al */
2594 return cx->blk_sub.retop;
2602 register PERL_CONTEXT *cx;
2604 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2607 DIE(aTHX_ "Not a CODE reference");
2608 switch (SvTYPE(sv)) {
2609 /* This is overwhelming the most common case: */
2611 if (!(cv = GvCVu((GV*)sv))) {
2613 cv = sv_2cv(sv, &stash, &gv, 0);
2625 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2627 SP = PL_stack_base + POPMARK;
2630 if (SvGMAGICAL(sv)) {
2635 sym = SvPVX_const(sv);
2643 sym = SvPV_const(sv, len);
2646 DIE(aTHX_ PL_no_usym, "a subroutine");
2647 if (PL_op->op_private & HINT_STRICT_REFS)
2648 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2649 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2654 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2655 tryAMAGICunDEREF(to_cv);
2658 if (SvTYPE(cv) == SVt_PVCV)
2663 DIE(aTHX_ "Not a CODE reference");
2664 /* This is the second most common case: */
2674 if (!CvROOT(cv) && !CvXSUB(cv)) {
2678 /* anonymous or undef'd function leaves us no recourse */
2679 if (CvANON(cv) || !(gv = CvGV(cv)))
2680 DIE(aTHX_ "Undefined subroutine called");
2682 /* autoloaded stub? */
2683 if (cv != GvCV(gv)) {
2686 /* should call AUTOLOAD now? */
2689 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2696 sub_name = sv_newmortal();
2697 gv_efullname3(sub_name, gv, NULL);
2698 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2702 DIE(aTHX_ "Not a CODE reference");
2707 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2708 if (CvASSERTION(cv) && PL_DBassertion)
2709 sv_setiv(PL_DBassertion, 1);
2711 Perl_get_db_sub(aTHX_ &sv, cv);
2713 PL_curcopdb = PL_curcop;
2714 cv = GvCV(PL_DBsub);
2716 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2717 DIE(aTHX_ "No DB::sub routine defined");
2720 if (!(CvISXSUB(cv))) {
2721 /* This path taken at least 75% of the time */
2723 register I32 items = SP - MARK;
2724 AV* const padlist = CvPADLIST(cv);
2725 PUSHBLOCK(cx, CXt_SUB, MARK);
2727 cx->blk_sub.retop = PL_op->op_next;
2729 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2730 * that eval'' ops within this sub know the correct lexical space.
2731 * Owing the speed considerations, we choose instead to search for
2732 * the cv using find_runcv() when calling doeval().
2734 if (CvDEPTH(cv) >= 2) {
2735 PERL_STACK_OVERFLOW_CHECK();
2736 pad_push(padlist, CvDEPTH(cv));
2739 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2741 AV* const av = (AV*)PAD_SVl(0);
2743 /* @_ is normally not REAL--this should only ever
2744 * happen when DB::sub() calls things that modify @_ */
2749 cx->blk_sub.savearray = GvAV(PL_defgv);
2750 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2751 CX_CURPAD_SAVE(cx->blk_sub);
2752 cx->blk_sub.argarray = av;
2755 if (items > AvMAX(av) + 1) {
2756 SV **ary = AvALLOC(av);
2757 if (AvARRAY(av) != ary) {
2758 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2761 if (items > AvMAX(av) + 1) {
2762 AvMAX(av) = items - 1;
2763 Renew(ary,items,SV*);
2768 Copy(MARK,AvARRAY(av),items,SV*);
2769 AvFILLp(av) = items - 1;
2777 /* warning must come *after* we fully set up the context
2778 * stuff so that __WARN__ handlers can safely dounwind()
2781 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2782 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2783 sub_crush_depth(cv);
2785 DEBUG_S(PerlIO_printf(Perl_debug_log,
2786 "%p entersub returning %p\n", (void*)thr, (void*)CvSTART(cv)));
2788 RETURNOP(CvSTART(cv));
2791 I32 markix = TOPMARK;
2796 /* Need to copy @_ to stack. Alternative may be to
2797 * switch stack to @_, and copy return values
2798 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2799 AV * const av = GvAV(PL_defgv);
2800 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2803 /* Mark is at the end of the stack. */
2805 Copy(AvARRAY(av), SP + 1, items, SV*);
2810 /* We assume first XSUB in &DB::sub is the called one. */
2812 SAVEVPTR(PL_curcop);
2813 PL_curcop = PL_curcopdb;
2816 /* Do we need to open block here? XXXX */
2817 if (CvXSUB(cv)) /* XXX this is supposed to be true */
2818 (void)(*CvXSUB(cv))(aTHX_ cv);
2820 /* Enforce some sanity in scalar context. */
2821 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2822 if (markix > PL_stack_sp - PL_stack_base)
2823 *(PL_stack_base + markix) = &PL_sv_undef;
2825 *(PL_stack_base + markix) = *PL_stack_sp;
2826 PL_stack_sp = PL_stack_base + markix;
2834 Perl_sub_crush_depth(pTHX_ CV *cv)
2837 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2839 SV* const tmpstr = sv_newmortal();
2840 gv_efullname3(tmpstr, CvGV(cv), NULL);
2841 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2850 SV* const elemsv = POPs;
2851 IV elem = SvIV(elemsv);
2852 AV* const av = (AV*)POPs;
2853 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2854 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2857 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2858 Perl_warner(aTHX_ packWARN(WARN_MISC),
2859 "Use of reference \"%"SVf"\" as array index",
2862 elem -= CopARYBASE_get(PL_curcop);
2863 if (SvTYPE(av) != SVt_PVAV)
2865 svp = av_fetch(av, elem, lval && !defer);
2867 #ifdef PERL_MALLOC_WRAP
2868 if (SvUOK(elemsv)) {
2869 const UV uv = SvUV(elemsv);
2870 elem = uv > IV_MAX ? IV_MAX : uv;
2872 else if (SvNOK(elemsv))
2873 elem = (IV)SvNV(elemsv);
2875 static const char oom_array_extend[] =
2876 "Out of memory during array extend"; /* Duplicated in av.c */
2877 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2880 if (!svp || *svp == &PL_sv_undef) {
2883 DIE(aTHX_ PL_no_aelem, elem);
2884 lv = sv_newmortal();
2885 sv_upgrade(lv, SVt_PVLV);
2887 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2888 LvTARG(lv) = SvREFCNT_inc_simple(av);
2889 LvTARGOFF(lv) = elem;
2894 if (PL_op->op_private & OPpLVAL_INTRO)
2895 save_aelem(av, elem, svp);
2896 else if (PL_op->op_private & OPpDEREF)
2897 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2899 sv = (svp ? *svp : &PL_sv_undef);
2900 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2901 sv = sv_mortalcopy(sv);
2907 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2912 Perl_croak(aTHX_ PL_no_modify);
2913 if (SvTYPE(sv) < SVt_RV)
2914 sv_upgrade(sv, SVt_RV);
2915 else if (SvTYPE(sv) >= SVt_PV) {
2922 SvRV_set(sv, newSV(0));
2925 SvRV_set(sv, (SV*)newAV());
2928 SvRV_set(sv, (SV*)newHV());
2939 SV* const sv = TOPs;
2942 SV* const rsv = SvRV(sv);
2943 if (SvTYPE(rsv) == SVt_PVCV) {
2949 SETs(method_common(sv, NULL));
2956 SV* const sv = cSVOP_sv;
2957 U32 hash = SvSHARED_HASH(sv);
2959 XPUSHs(method_common(sv, &hash));
2964 S_method_common(pTHX_ SV* meth, U32* hashp)
2971 const char* packname = NULL;
2974 const char * const name = SvPV_const(meth, namelen);
2975 SV * const sv = *(PL_stack_base + TOPMARK + 1);
2978 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2986 /* this isn't a reference */
2987 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
2988 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
2990 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2997 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
2998 !(ob=(SV*)GvIO(iogv)))
3000 /* this isn't the name of a filehandle either */
3002 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3003 ? !isIDFIRST_utf8((U8*)packname)
3004 : !isIDFIRST(*packname)
3007 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3008 SvOK(sv) ? "without a package or object reference"
3009 : "on an undefined value");
3011 /* assume it's a package name */
3012 stash = gv_stashpvn(packname, packlen, 0);
3016 SV* const ref = newSViv(PTR2IV(stash));
3017 hv_store(PL_stashcache, packname, packlen, ref, 0);
3021 /* it _is_ a filehandle name -- replace with a reference */
3022 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3025 /* if we got here, ob should be a reference or a glob */
3026 if (!ob || !(SvOBJECT(ob)
3027 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3030 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3031 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3035 stash = SvSTASH(ob);
3038 /* NOTE: stash may be null, hope hv_fetch_ent and
3039 gv_fetchmethod can cope (it seems they can) */
3041 /* shortcut for simple names */
3043 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3045 gv = (GV*)HeVAL(he);
3046 if (isGV(gv) && GvCV(gv) &&
3047 (!GvCVGEN(gv) || GvCVGEN(gv)
3048 == (PL_sub_generation + HvMROMETA(stash)->sub_generation)))
3049 return (SV*)GvCV(gv);
3053 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3056 /* This code tries to figure out just what went wrong with
3057 gv_fetchmethod. It therefore needs to duplicate a lot of
3058 the internals of that function. We can't move it inside
3059 Perl_gv_fetchmethod_autoload(), however, since that would
3060 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3063 const char* leaf = name;
3064 const char* sep = NULL;
3067 for (p = name; *p; p++) {
3069 sep = p, leaf = p + 1;
3070 else if (*p == ':' && *(p + 1) == ':')
3071 sep = p, leaf = p + 2;
3073 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3074 /* the method name is unqualified or starts with SUPER:: */
3075 bool need_strlen = 1;
3077 packname = CopSTASHPV(PL_curcop);
3080 HEK * const packhek = HvNAME_HEK(stash);
3082 packname = HEK_KEY(packhek);
3083 packlen = HEK_LEN(packhek);
3093 "Can't use anonymous symbol table for method lookup");
3095 else if (need_strlen)
3096 packlen = strlen(packname);
3100 /* the method name is qualified */
3102 packlen = sep - name;
3105 /* we're relying on gv_fetchmethod not autovivifying the stash */
3106 if (gv_stashpvn(packname, packlen, 0)) {
3108 "Can't locate object method \"%s\" via package \"%.*s\"",
3109 leaf, (int)packlen, packname);
3113 "Can't locate object method \"%s\" via package \"%.*s\""
3114 " (perhaps you forgot to load \"%.*s\"?)",
3115 leaf, (int)packlen, packname, (int)packlen, packname);
3118 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3123 * c-indentation-style: bsd
3125 * indent-tabs-mode: t
3128 * ex: set ts=8 sts=4 sw=4 noet: