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 else if (PL_op->op_private & OPpASSIGN_STATE) {
131 if (SvPADSTALE(right))
132 SvPADSTALE_off(right);
134 RETURN; /* ignore assignment */
136 if (PL_tainting && PL_tainted && !SvTAINTED(left))
138 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
139 SV * const cv = SvRV(left);
140 const U32 cv_type = SvTYPE(cv);
141 const U32 gv_type = SvTYPE(right);
142 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
148 /* Can do the optimisation if right (LVALUE) is not a typeglob,
149 left (RVALUE) is a reference to something, and we're in void
151 if (!got_coderef && gv_type != SVt_PVGV && GIMME_V == G_VOID) {
152 /* Is the target symbol table currently empty? */
153 GV * const gv = gv_fetchsv(right, GV_NOINIT, SVt_PVGV);
154 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
155 /* Good. Create a new proxy constant subroutine in the target.
156 The gv becomes a(nother) reference to the constant. */
157 SV *const value = SvRV(cv);
159 SvUPGRADE((SV *)gv, SVt_RV);
160 SvPCS_IMPORTED_on(gv);
162 SvREFCNT_inc_simple_void(value);
168 /* Need to fix things up. */
169 if (gv_type != SVt_PVGV) {
170 /* Need to fix GV. */
171 right = (SV*)gv_fetchsv(right, GV_ADD, SVt_PVGV);
175 /* We've been returned a constant rather than a full subroutine,
176 but they expect a subroutine reference to apply. */
178 SvREFCNT_inc_void(SvRV(cv));
179 /* newCONSTSUB takes a reference count on the passed in SV
180 from us. We set the name to NULL, otherwise we get into
181 all sorts of fun as the reference to our new sub is
182 donated to the GV that we're about to assign to.
184 SvRV_set(left, (SV *)newCONSTSUB(GvSTASH(right), NULL,
190 if (strEQ(GvNAME(right),"isa")) {
195 SvSetMagicSV(right, left);
204 RETURNOP(cLOGOP->op_other);
206 RETURNOP(cLOGOP->op_next);
213 TAINT_NOT; /* Each statement is presumed innocent */
214 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
216 oldsave = PL_scopestack[PL_scopestack_ix - 1];
217 LEAVE_SCOPE(oldsave);
223 dVAR; dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
228 const char *rpv = NULL;
230 bool rcopied = FALSE;
232 if (TARG == right && right != left) {
233 /* mg_get(right) may happen here ... */
234 rpv = SvPV_const(right, rlen);
235 rbyte = !DO_UTF8(right);
236 right = sv_2mortal(newSVpvn(rpv, rlen));
237 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
243 const char* const lpv = SvPV_const(left, llen); /* mg_get(left) may happen here */
244 lbyte = !DO_UTF8(left);
245 sv_setpvn(TARG, lpv, llen);
251 else { /* TARG == left */
253 SvGETMAGIC(left); /* or mg_get(left) may happen here */
255 if (left == right && ckWARN(WARN_UNINITIALIZED))
256 report_uninit(right);
257 sv_setpvn(left, "", 0);
259 (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */
260 lbyte = !DO_UTF8(left);
265 /* or mg_get(right) may happen here */
267 rpv = SvPV_const(right, rlen);
268 rbyte = !DO_UTF8(right);
270 if (lbyte != rbyte) {
272 sv_utf8_upgrade_nomg(TARG);
275 right = sv_2mortal(newSVpvn(rpv, rlen));
276 sv_utf8_upgrade_nomg(right);
277 rpv = SvPV_const(right, rlen);
280 sv_catpvn_nomg(TARG, rpv, rlen);
291 if (PL_op->op_flags & OPf_MOD) {
292 if (PL_op->op_private & OPpLVAL_INTRO)
293 if (!(PL_op->op_private & OPpPAD_STATE))
294 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
295 if (PL_op->op_private & OPpDEREF) {
297 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
307 tryAMAGICunTARGET(iter, 0);
308 PL_last_in_gv = (GV*)(*PL_stack_sp--);
309 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
310 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
311 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
314 XPUSHs((SV*)PL_last_in_gv);
317 PL_last_in_gv = (GV*)(*PL_stack_sp--);
320 return do_readline();
325 dVAR; dSP; tryAMAGICbinSET(eq,0);
326 #ifndef NV_PRESERVES_UV
327 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
329 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
333 #ifdef PERL_PRESERVE_IVUV
336 /* Unless the left argument is integer in range we are going
337 to have to use NV maths. Hence only attempt to coerce the
338 right argument if we know the left is integer. */
341 const bool auvok = SvUOK(TOPm1s);
342 const bool buvok = SvUOK(TOPs);
344 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
345 /* Casting IV to UV before comparison isn't going to matter
346 on 2s complement. On 1s complement or sign&magnitude
347 (if we have any of them) it could to make negative zero
348 differ from normal zero. As I understand it. (Need to
349 check - is negative zero implementation defined behaviour
351 const UV buv = SvUVX(POPs);
352 const UV auv = SvUVX(TOPs);
354 SETs(boolSV(auv == buv));
357 { /* ## Mixed IV,UV ## */
361 /* == is commutative so doesn't matter which is left or right */
363 /* top of stack (b) is the iv */
372 /* As uv is a UV, it's >0, so it cannot be == */
375 /* we know iv is >= 0 */
376 SETs(boolSV((UV)iv == SvUVX(uvp)));
383 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
385 if (Perl_isnan(left) || Perl_isnan(right))
387 SETs(boolSV(left == right));
390 SETs(boolSV(TOPn == value));
399 if (SvTYPE(TOPs) >= SVt_PVGV && SvTYPE(TOPs) != SVt_PVLV)
400 DIE(aTHX_ PL_no_modify);
401 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
402 && SvIVX(TOPs) != IV_MAX)
404 SvIV_set(TOPs, SvIVX(TOPs) + 1);
405 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
407 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
419 if (PL_op->op_type == OP_OR)
421 RETURNOP(cLOGOP->op_other);
430 const int op_type = PL_op->op_type;
431 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
435 if (!sv || !SvANY(sv)) {
436 if (op_type == OP_DOR)
438 RETURNOP(cLOGOP->op_other);
440 } else if (op_type == OP_DEFINED) {
442 if (!sv || !SvANY(sv))
445 DIE(aTHX_ "panic: Invalid op (%s) in pp_defined()", OP_NAME(PL_op));
448 switch (SvTYPE(sv)) {
450 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
454 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
458 if (CvROOT(sv) || CvXSUB(sv))
471 if(op_type == OP_DOR)
473 RETURNOP(cLOGOP->op_other);
475 /* assuming OP_DEFINED */
483 dVAR; dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
484 useleft = USE_LEFT(TOPm1s);
485 #ifdef PERL_PRESERVE_IVUV
486 /* We must see if we can perform the addition with integers if possible,
487 as the integer code detects overflow while the NV code doesn't.
488 If either argument hasn't had a numeric conversion yet attempt to get
489 the IV. It's important to do this now, rather than just assuming that
490 it's not IOK as a PV of "9223372036854775806" may not take well to NV
491 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
492 integer in case the second argument is IV=9223372036854775806
493 We can (now) rely on sv_2iv to do the right thing, only setting the
494 public IOK flag if the value in the NV (or PV) slot is truly integer.
496 A side effect is that this also aggressively prefers integer maths over
497 fp maths for integer values.
499 How to detect overflow?
501 C 99 section 6.2.6.1 says
503 The range of nonnegative values of a signed integer type is a subrange
504 of the corresponding unsigned integer type, and the representation of
505 the same value in each type is the same. A computation involving
506 unsigned operands can never overflow, because a result that cannot be
507 represented by the resulting unsigned integer type is reduced modulo
508 the number that is one greater than the largest value that can be
509 represented by the resulting type.
513 which I read as "unsigned ints wrap."
515 signed integer overflow seems to be classed as "exception condition"
517 If an exceptional condition occurs during the evaluation of an
518 expression (that is, if the result is not mathematically defined or not
519 in the range of representable values for its type), the behavior is
522 (6.5, the 5th paragraph)
524 I had assumed that on 2s complement machines signed arithmetic would
525 wrap, hence coded pp_add and pp_subtract on the assumption that
526 everything perl builds on would be happy. After much wailing and
527 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
528 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
529 unsigned code below is actually shorter than the old code. :-)
534 /* Unless the left argument is integer in range we are going to have to
535 use NV maths. Hence only attempt to coerce the right argument if
536 we know the left is integer. */
544 /* left operand is undef, treat as zero. + 0 is identity,
545 Could SETi or SETu right now, but space optimise by not adding
546 lots of code to speed up what is probably a rarish case. */
548 /* Left operand is defined, so is it IV? */
551 if ((auvok = SvUOK(TOPm1s)))
554 register const IV aiv = SvIVX(TOPm1s);
557 auvok = 1; /* Now acting as a sign flag. */
558 } else { /* 2s complement assumption for IV_MIN */
566 bool result_good = 0;
569 bool buvok = SvUOK(TOPs);
574 register const IV biv = SvIVX(TOPs);
581 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
582 else "IV" now, independent of how it came in.
583 if a, b represents positive, A, B negative, a maps to -A etc
588 all UV maths. negate result if A negative.
589 add if signs same, subtract if signs differ. */
595 /* Must get smaller */
601 /* result really should be -(auv-buv). as its negation
602 of true value, need to swap our result flag */
619 if (result <= (UV)IV_MIN)
622 /* result valid, but out of range for IV. */
627 } /* Overflow, drop through to NVs. */
634 /* left operand is undef, treat as zero. + 0.0 is identity. */
638 SETn( value + TOPn );
646 AV * const av = PL_op->op_flags & OPf_SPECIAL ?
647 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
648 const U32 lval = PL_op->op_flags & OPf_MOD;
649 SV** const svp = av_fetch(av, PL_op->op_private, lval);
650 SV *sv = (svp ? *svp : &PL_sv_undef);
652 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
653 sv = sv_mortalcopy(sv);
660 dVAR; dSP; dMARK; dTARGET;
662 do_join(TARG, *MARK, MARK, SP);
673 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
674 * will be enough to hold an OP*.
676 SV* const sv = sv_newmortal();
677 sv_upgrade(sv, SVt_PVLV);
679 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
687 /* Oversized hot code. */
691 dVAR; dSP; dMARK; dORIGMARK;
695 GV * const gv = (PL_op->op_flags & OPf_STACKED) ? (GV*)*++MARK : PL_defoutgv;
697 if (gv && (io = GvIO(gv))
698 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
701 if (MARK == ORIGMARK) {
702 /* If using default handle then we need to make space to
703 * pass object as 1st arg, so move other args up ...
707 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
711 *MARK = SvTIED_obj((SV*)io, mg);
714 call_method("PRINT", G_SCALAR);
722 if (!(io = GvIO(gv))) {
723 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
724 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
726 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
727 report_evil_fh(gv, io, PL_op->op_type);
728 SETERRNO(EBADF,RMS_IFI);
731 else if (!(fp = IoOFP(io))) {
732 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
734 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
735 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
736 report_evil_fh(gv, io, PL_op->op_type);
738 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
743 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
745 if (!do_print(*MARK, fp))
749 if (!do_print(PL_ofs_sv, fp)) { /* $, */
758 if (!do_print(*MARK, fp))
766 if (PL_op->op_type == OP_SAY) {
767 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
770 else if (PL_ors_sv && SvOK(PL_ors_sv))
771 if (!do_print(PL_ors_sv, fp)) /* $\ */
774 if (IoFLAGS(io) & IOf_FLUSH)
775 if (PerlIO_flush(fp) == EOF)
785 XPUSHs(&PL_sv_undef);
792 const I32 gimme = GIMME_V;
793 static const char return_array_to_lvalue_scalar[] = "Can't return array to lvalue scalar context";
794 static const char return_hash_to_lvalue_scalar[] = "Can't return hash to lvalue scalar context";
795 static const char an_array[] = "an ARRAY";
796 static const char a_hash[] = "a HASH";
797 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
798 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
802 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
805 if (SvTYPE(sv) != type)
806 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
807 if (PL_op->op_flags & OPf_REF) {
812 if (gimme != G_ARRAY)
813 Perl_croak(aTHX_ is_pp_rv2av ? return_array_to_lvalue_scalar
814 : return_hash_to_lvalue_scalar);
818 else if (PL_op->op_flags & OPf_MOD
819 && PL_op->op_private & OPpLVAL_INTRO)
820 Perl_croak(aTHX_ PL_no_localize_ref);
823 if (SvTYPE(sv) == type) {
824 if (PL_op->op_flags & OPf_REF) {
829 if (gimme != G_ARRAY)
831 is_pp_rv2av ? return_array_to_lvalue_scalar
832 : return_hash_to_lvalue_scalar);
840 if (SvTYPE(sv) != SVt_PVGV) {
841 if (SvGMAGICAL(sv)) {
846 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
854 sv = is_pp_rv2av ? (SV*)GvAVn(gv) : (SV*)GvHVn(gv);
855 if (PL_op->op_private & OPpLVAL_INTRO)
856 sv = is_pp_rv2av ? (SV*)save_ary(gv) : (SV*)save_hash(gv);
857 if (PL_op->op_flags & OPf_REF) {
862 if (gimme != G_ARRAY)
864 is_pp_rv2av ? return_array_to_lvalue_scalar
865 : return_hash_to_lvalue_scalar);
873 AV *const av = (AV*)sv;
874 /* The guts of pp_rv2av, with no intenting change to preserve history
875 (until such time as we get tools that can do blame annotation across
876 whitespace changes. */
877 if (gimme == G_ARRAY) {
878 const I32 maxarg = AvFILL(av) + 1;
879 (void)POPs; /* XXXX May be optimized away? */
881 if (SvRMAGICAL(av)) {
883 for (i=0; i < (U32)maxarg; i++) {
884 SV ** const svp = av_fetch(av, i, FALSE);
885 /* See note in pp_helem, and bug id #27839 */
887 ? SvGMAGICAL(*svp) ? sv_mortalcopy(*svp) : *svp
892 Copy(AvARRAY(av), SP+1, maxarg, SV*);
896 else if (gimme == G_SCALAR) {
898 const I32 maxarg = AvFILL(av) + 1;
902 /* The guts of pp_rv2hv */
903 if (gimme == G_ARRAY) { /* array wanted */
907 else if (gimme == G_SCALAR) {
909 TARG = Perl_hv_scalar(aTHX_ (HV*)sv);
918 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
925 if (ckWARN(WARN_MISC)) {
927 if (relem == firstrelem &&
929 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
930 SvTYPE(SvRV(*relem)) == SVt_PVHV))
932 err = "Reference found where even-sized list expected";
935 err = "Odd number of elements in hash assignment";
936 Perl_warner(aTHX_ packWARN(WARN_MISC), err);
940 didstore = hv_store_ent(hash,*relem,tmpstr,0);
941 if (SvMAGICAL(hash)) {
942 if (SvSMAGICAL(tmpstr))
954 SV **lastlelem = PL_stack_sp;
955 SV **lastrelem = PL_stack_base + POPMARK;
956 SV **firstrelem = PL_stack_base + POPMARK + 1;
957 SV **firstlelem = lastrelem + 1;
970 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
973 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
976 /* If there's a common identifier on both sides we have to take
977 * special care that assigning the identifier on the left doesn't
978 * clobber a value on the right that's used later in the list.
980 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
981 EXTEND_MORTAL(lastrelem - firstrelem + 1);
982 for (relem = firstrelem; relem <= lastrelem; relem++) {
984 TAINT_NOT; /* Each item is independent */
985 *relem = sv_mortalcopy(sv);
989 if (PL_op->op_private & OPpASSIGN_STATE) {
990 if (SvPADSTALE(*firstlelem))
991 SvPADSTALE_off(*firstlelem);
993 RETURN; /* ignore assignment */
1001 while (lelem <= lastlelem) {
1002 TAINT_NOT; /* Each item stands on its own, taintwise. */
1004 switch (SvTYPE(sv)) {
1007 magic = SvMAGICAL(ary) != 0;
1009 av_extend(ary, lastrelem - relem);
1011 while (relem <= lastrelem) { /* gobble up all the rest */
1014 sv = newSVsv(*relem);
1016 didstore = av_store(ary,i++,sv);
1026 case SVt_PVHV: { /* normal hash */
1030 magic = SvMAGICAL(hash) != 0;
1032 firsthashrelem = relem;
1034 while (relem < lastrelem) { /* gobble up all the rest */
1036 sv = *relem ? *relem : &PL_sv_no;
1040 sv_setsv(tmpstr,*relem); /* value */
1041 *(relem++) = tmpstr;
1042 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1043 /* key overwrites an existing entry */
1045 didstore = hv_store_ent(hash,sv,tmpstr,0);
1047 if (SvSMAGICAL(tmpstr))
1054 if (relem == lastrelem) {
1055 do_oddball(hash, relem, firstrelem);
1061 if (SvIMMORTAL(sv)) {
1062 if (relem <= lastrelem)
1066 if (relem <= lastrelem) {
1067 sv_setsv(sv, *relem);
1071 sv_setsv(sv, &PL_sv_undef);
1076 if (PL_delaymagic & ~DM_DELAY) {
1077 if (PL_delaymagic & DM_UID) {
1078 #ifdef HAS_SETRESUID
1079 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1080 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1083 # ifdef HAS_SETREUID
1084 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1085 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1088 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1089 (void)setruid(PL_uid);
1090 PL_delaymagic &= ~DM_RUID;
1092 # endif /* HAS_SETRUID */
1094 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1095 (void)seteuid(PL_euid);
1096 PL_delaymagic &= ~DM_EUID;
1098 # endif /* HAS_SETEUID */
1099 if (PL_delaymagic & DM_UID) {
1100 if (PL_uid != PL_euid)
1101 DIE(aTHX_ "No setreuid available");
1102 (void)PerlProc_setuid(PL_uid);
1104 # endif /* HAS_SETREUID */
1105 #endif /* HAS_SETRESUID */
1106 PL_uid = PerlProc_getuid();
1107 PL_euid = PerlProc_geteuid();
1109 if (PL_delaymagic & DM_GID) {
1110 #ifdef HAS_SETRESGID
1111 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1112 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1115 # ifdef HAS_SETREGID
1116 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1117 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1120 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1121 (void)setrgid(PL_gid);
1122 PL_delaymagic &= ~DM_RGID;
1124 # endif /* HAS_SETRGID */
1126 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1127 (void)setegid(PL_egid);
1128 PL_delaymagic &= ~DM_EGID;
1130 # endif /* HAS_SETEGID */
1131 if (PL_delaymagic & DM_GID) {
1132 if (PL_gid != PL_egid)
1133 DIE(aTHX_ "No setregid available");
1134 (void)PerlProc_setgid(PL_gid);
1136 # endif /* HAS_SETREGID */
1137 #endif /* HAS_SETRESGID */
1138 PL_gid = PerlProc_getgid();
1139 PL_egid = PerlProc_getegid();
1141 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1145 if (gimme == G_VOID)
1146 SP = firstrelem - 1;
1147 else if (gimme == G_SCALAR) {
1150 SETi(lastrelem - firstrelem + 1 - duplicates);
1157 /* Removes from the stack the entries which ended up as
1158 * duplicated keys in the hash (fix for [perl #24380]) */
1159 Move(firsthashrelem + duplicates,
1160 firsthashrelem, duplicates, SV**);
1161 lastrelem -= duplicates;
1166 SP = firstrelem + (lastlelem - firstlelem);
1167 lelem = firstlelem + (relem - firstrelem);
1169 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1177 register PMOP * const pm = cPMOP;
1178 SV * const rv = sv_newmortal();
1179 SV * const sv = newSVrv(rv, "Regexp");
1180 if (pm->op_pmdynflags & PMdf_TAINTED)
1182 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1190 register PMOP *pm = cPMOP;
1192 register const char *t;
1193 register const char *s;
1196 I32 r_flags = REXEC_CHECKED;
1197 const char *truebase; /* Start of string */
1198 register REGEXP *rx = PM_GETRE(pm);
1200 const I32 gimme = GIMME;
1203 const I32 oldsave = PL_savestack_ix;
1204 I32 update_minmatch = 1;
1205 I32 had_zerolen = 0;
1208 if (PL_op->op_flags & OPf_STACKED)
1210 else if (PL_op->op_private & OPpTARGET_MY)
1217 PUTBACK; /* EVAL blocks need stack_sp. */
1218 s = SvPV_const(TARG, len);
1220 DIE(aTHX_ "panic: pp_match");
1222 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1223 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1226 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1228 /* PMdf_USED is set after a ?? matches once */
1229 if (pm->op_pmdynflags & PMdf_USED) {
1231 if (gimme == G_ARRAY)
1236 /* empty pattern special-cased to use last successful pattern if possible */
1237 if (!rx->prelen && PL_curpm) {
1242 if (rx->minlen > (I32)len)
1247 /* XXXX What part of this is needed with true \G-support? */
1248 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1249 rx->offs[0].start = -1;
1250 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1251 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1252 if (mg && mg->mg_len >= 0) {
1253 if (!(rx->extflags & RXf_GPOS_SEEN))
1254 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1255 else if (rx->extflags & RXf_ANCH_GPOS) {
1256 r_flags |= REXEC_IGNOREPOS;
1257 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1258 } else if (rx->extflags & RXf_GPOS_FLOAT)
1261 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1262 minmatch = (mg->mg_flags & MGf_MINMATCH) ? rx->gofs + 1 : 0;
1263 update_minmatch = 0;
1267 /* remove comment to get faster /g but possibly unsafe $1 vars after a
1268 match. Test for the unsafe vars will fail as well*/
1269 if (( /* !global && */ rx->nparens)
1270 || SvTEMP(TARG) || PL_sawampersand ||
1271 (pm->op_pmflags & (PMf_EVAL|PMf_KEEPCOPY)))
1272 r_flags |= REXEC_COPY_STR;
1274 r_flags |= REXEC_SCREAM;
1277 if (global && rx->offs[0].start != -1) {
1278 t = s = rx->offs[0].end + truebase - rx->gofs;
1279 if ((s + rx->minlen) > strend || s < truebase)
1281 if (update_minmatch++)
1282 minmatch = had_zerolen;
1284 if (rx->extflags & RXf_USE_INTUIT &&
1285 DO_UTF8(TARG) == ((rx->extflags & RXf_UTF8) != 0)) {
1286 /* FIXME - can PL_bostr be made const char *? */
1287 PL_bostr = (char *)truebase;
1288 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1292 if ( (rx->extflags & RXf_CHECK_ALL)
1294 && !(pm->op_pmflags & PMf_KEEPCOPY)
1295 && ((rx->extflags & RXf_NOSCAN)
1296 || !((rx->extflags & RXf_INTUIT_TAIL)
1297 && (r_flags & REXEC_SCREAM)))
1298 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1301 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase, minmatch, TARG, INT2PTR(void*, gpos), r_flags))
1304 if (dynpm->op_pmflags & PMf_ONCE)
1305 dynpm->op_pmdynflags |= PMdf_USED;
1314 RX_MATCH_TAINTED_on(rx);
1315 TAINT_IF(RX_MATCH_TAINTED(rx));
1316 if (gimme == G_ARRAY) {
1317 const I32 nparens = rx->nparens;
1318 I32 i = (global && !nparens) ? 1 : 0;
1320 SPAGAIN; /* EVAL blocks could move the stack. */
1321 EXTEND(SP, nparens + i);
1322 EXTEND_MORTAL(nparens + i);
1323 for (i = !i; i <= nparens; i++) {
1324 PUSHs(sv_newmortal());
1325 if ((rx->offs[i].start != -1) && rx->offs[i].end != -1 ) {
1326 const I32 len = rx->offs[i].end - rx->offs[i].start;
1327 s = rx->offs[i].start + truebase;
1328 if (rx->offs[i].end < 0 || rx->offs[i].start < 0 ||
1329 len < 0 || len > strend - s)
1330 DIE(aTHX_ "panic: pp_match start/end pointers");
1331 sv_setpvn(*SP, s, len);
1332 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1337 if (dynpm->op_pmflags & PMf_CONTINUE) {
1339 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1340 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1342 #ifdef PERL_OLD_COPY_ON_WRITE
1344 sv_force_normal_flags(TARG, 0);
1346 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1347 &PL_vtbl_mglob, NULL, 0);
1349 if (rx->offs[0].start != -1) {
1350 mg->mg_len = rx->offs[0].end;
1351 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1352 mg->mg_flags |= MGf_MINMATCH;
1354 mg->mg_flags &= ~MGf_MINMATCH;
1357 had_zerolen = (rx->offs[0].start != -1
1358 && (rx->offs[0].start + rx->gofs
1359 == (UV)rx->offs[0].end));
1360 PUTBACK; /* EVAL blocks may use stack */
1361 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1366 LEAVE_SCOPE(oldsave);
1372 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1373 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1377 #ifdef PERL_OLD_COPY_ON_WRITE
1379 sv_force_normal_flags(TARG, 0);
1381 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1382 &PL_vtbl_mglob, NULL, 0);
1384 if (rx->offs[0].start != -1) {
1385 mg->mg_len = rx->offs[0].end;
1386 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1387 mg->mg_flags |= MGf_MINMATCH;
1389 mg->mg_flags &= ~MGf_MINMATCH;
1392 LEAVE_SCOPE(oldsave);
1396 yup: /* Confirmed by INTUIT */
1398 RX_MATCH_TAINTED_on(rx);
1399 TAINT_IF(RX_MATCH_TAINTED(rx));
1401 if (dynpm->op_pmflags & PMf_ONCE)
1402 dynpm->op_pmdynflags |= PMdf_USED;
1403 if (RX_MATCH_COPIED(rx))
1404 Safefree(rx->subbeg);
1405 RX_MATCH_COPIED_off(rx);
1408 /* FIXME - should rx->subbeg be const char *? */
1409 rx->subbeg = (char *) truebase;
1410 rx->offs[0].start = s - truebase;
1411 if (RX_MATCH_UTF8(rx)) {
1412 char * const t = (char*)utf8_hop((U8*)s, rx->minlenret);
1413 rx->offs[0].end = t - truebase;
1416 rx->offs[0].end = s - truebase + rx->minlenret;
1418 rx->sublen = strend - truebase;
1421 if (PL_sawampersand || pm->op_pmflags & PMf_KEEPCOPY) {
1423 #ifdef PERL_OLD_COPY_ON_WRITE
1424 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1426 PerlIO_printf(Perl_debug_log,
1427 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1428 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1431 rx->saved_copy = sv_setsv_cow(rx->saved_copy, TARG);
1432 rx->subbeg = (char *) SvPVX_const(rx->saved_copy) + (t - truebase);
1433 assert (SvPOKp(rx->saved_copy));
1438 rx->subbeg = savepvn(t, strend - t);
1439 #ifdef PERL_OLD_COPY_ON_WRITE
1440 rx->saved_copy = NULL;
1443 rx->sublen = strend - t;
1444 RX_MATCH_COPIED_on(rx);
1445 off = rx->offs[0].start = s - t;
1446 rx->offs[0].end = off + rx->minlenret;
1448 else { /* startp/endp are used by @- @+. */
1449 rx->offs[0].start = s - truebase;
1450 rx->offs[0].end = s - truebase + rx->minlenret;
1452 /* including rx->nparens in the below code seems highly suspicious.
1454 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1455 LEAVE_SCOPE(oldsave);
1460 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1461 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1462 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1467 LEAVE_SCOPE(oldsave);
1468 if (gimme == G_ARRAY)
1474 Perl_do_readline(pTHX)
1476 dVAR; dSP; dTARGETSTACKED;
1481 register IO * const io = GvIO(PL_last_in_gv);
1482 register const I32 type = PL_op->op_type;
1483 const I32 gimme = GIMME_V;
1486 MAGIC * const mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar);
1489 XPUSHs(SvTIED_obj((SV*)io, mg));
1492 call_method("READLINE", gimme);
1495 if (gimme == G_SCALAR) {
1496 SV* const result = POPs;
1497 SvSetSV_nosteal(TARG, result);
1507 if (IoFLAGS(io) & IOf_ARGV) {
1508 if (IoFLAGS(io) & IOf_START) {
1510 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1511 IoFLAGS(io) &= ~IOf_START;
1512 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1513 sv_setpvn(GvSVn(PL_last_in_gv), "-", 1);
1514 SvSETMAGIC(GvSV(PL_last_in_gv));
1519 fp = nextargv(PL_last_in_gv);
1520 if (!fp) { /* Note: fp != IoIFP(io) */
1521 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1524 else if (type == OP_GLOB)
1525 fp = Perl_start_glob(aTHX_ POPs, io);
1527 else if (type == OP_GLOB)
1529 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1530 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1534 if ((!io || !(IoFLAGS(io) & IOf_START))
1535 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1537 if (type == OP_GLOB)
1538 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1539 "glob failed (can't start child: %s)",
1542 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1544 if (gimme == G_SCALAR) {
1545 /* undef TARG, and push that undefined value */
1546 if (type != OP_RCATLINE) {
1547 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1555 if (gimme == G_SCALAR) {
1557 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1560 if (type == OP_RCATLINE)
1561 SvPV_force_nolen(sv);
1565 else if (isGV_with_GP(sv)) {
1566 SvPV_force_nolen(sv);
1568 SvUPGRADE(sv, SVt_PV);
1569 tmplen = SvLEN(sv); /* remember if already alloced */
1570 if (!tmplen && !SvREADONLY(sv))
1571 Sv_Grow(sv, 80); /* try short-buffering it */
1573 if (type == OP_RCATLINE && SvOK(sv)) {
1575 SvPV_force_nolen(sv);
1581 sv = sv_2mortal(newSV(80));
1585 /* This should not be marked tainted if the fp is marked clean */
1586 #define MAYBE_TAINT_LINE(io, sv) \
1587 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1592 /* delay EOF state for a snarfed empty file */
1593 #define SNARF_EOF(gimme,rs,io,sv) \
1594 (gimme != G_SCALAR || SvCUR(sv) \
1595 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1599 if (!sv_gets(sv, fp, offset)
1601 || SNARF_EOF(gimme, PL_rs, io, sv)
1602 || PerlIO_error(fp)))
1604 PerlIO_clearerr(fp);
1605 if (IoFLAGS(io) & IOf_ARGV) {
1606 fp = nextargv(PL_last_in_gv);
1609 (void)do_close(PL_last_in_gv, FALSE);
1611 else if (type == OP_GLOB) {
1612 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1613 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1614 "glob failed (child exited with status %d%s)",
1615 (int)(STATUS_CURRENT >> 8),
1616 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1619 if (gimme == G_SCALAR) {
1620 if (type != OP_RCATLINE) {
1621 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1627 MAYBE_TAINT_LINE(io, sv);
1630 MAYBE_TAINT_LINE(io, sv);
1632 IoFLAGS(io) |= IOf_NOLINE;
1636 if (type == OP_GLOB) {
1639 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1640 char * const tmps = SvEND(sv) - 1;
1641 if (*tmps == *SvPVX_const(PL_rs)) {
1643 SvCUR_set(sv, SvCUR(sv) - 1);
1646 for (t1 = SvPVX_const(sv); *t1; t1++)
1647 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1648 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1650 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1651 (void)POPs; /* Unmatched wildcard? Chuck it... */
1654 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1655 if (ckWARN(WARN_UTF8)) {
1656 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1657 const STRLEN len = SvCUR(sv) - offset;
1660 if (!is_utf8_string_loc(s, len, &f))
1661 /* Emulate :encoding(utf8) warning in the same case. */
1662 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1663 "utf8 \"\\x%02X\" does not map to Unicode",
1664 f < (U8*)SvEND(sv) ? *f : 0);
1667 if (gimme == G_ARRAY) {
1668 if (SvLEN(sv) - SvCUR(sv) > 20) {
1669 SvPV_shrink_to_cur(sv);
1671 sv = sv_2mortal(newSV(80));
1674 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1675 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1676 const STRLEN new_len
1677 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1678 SvPV_renew(sv, new_len);
1687 register PERL_CONTEXT *cx;
1688 I32 gimme = OP_GIMME(PL_op, -1);
1691 if (cxstack_ix >= 0)
1692 gimme = cxstack[cxstack_ix].blk_gimme;
1700 PUSHBLOCK(cx, CXt_BLOCK, SP);
1710 SV * const keysv = POPs;
1711 HV * const hv = (HV*)POPs;
1712 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1713 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1715 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1718 if (SvTYPE(hv) != SVt_PVHV)
1721 if (PL_op->op_private & OPpLVAL_INTRO) {
1724 /* does the element we're localizing already exist? */
1725 preeminent = /* can we determine whether it exists? */
1727 || mg_find((SV*)hv, PERL_MAGIC_env)
1728 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1729 /* Try to preserve the existenceness of a tied hash
1730 * element by using EXISTS and DELETE if possible.
1731 * Fallback to FETCH and STORE otherwise */
1732 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1733 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1734 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1736 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1738 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1739 svp = he ? &HeVAL(he) : NULL;
1741 if (!svp || *svp == &PL_sv_undef) {
1745 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1747 lv = sv_newmortal();
1748 sv_upgrade(lv, SVt_PVLV);
1750 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1751 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1752 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1757 if (PL_op->op_private & OPpLVAL_INTRO) {
1758 if (HvNAME_get(hv) && isGV(*svp))
1759 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1763 const char * const key = SvPV_const(keysv, keylen);
1764 SAVEDELETE(hv, savepvn(key,keylen),
1765 SvUTF8(keysv) ? -(I32)keylen : (I32)keylen);
1767 save_helem(hv, keysv, svp);
1770 else if (PL_op->op_private & OPpDEREF)
1771 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1773 sv = (svp ? *svp : &PL_sv_undef);
1774 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1775 * Pushing the magical RHS on to the stack is useless, since
1776 * that magic is soon destined to be misled by the local(),
1777 * and thus the later pp_sassign() will fail to mg_get() the
1778 * old value. This should also cure problems with delayed
1779 * mg_get()s. GSAR 98-07-03 */
1780 if (!lval && SvGMAGICAL(sv))
1781 sv = sv_mortalcopy(sv);
1789 register PERL_CONTEXT *cx;
1794 if (PL_op->op_flags & OPf_SPECIAL) {
1795 cx = &cxstack[cxstack_ix];
1796 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1801 gimme = OP_GIMME(PL_op, -1);
1803 if (cxstack_ix >= 0)
1804 gimme = cxstack[cxstack_ix].blk_gimme;
1810 if (gimme == G_VOID)
1812 else if (gimme == G_SCALAR) {
1816 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1819 *MARK = sv_mortalcopy(TOPs);
1822 *MARK = &PL_sv_undef;
1826 else if (gimme == G_ARRAY) {
1827 /* in case LEAVE wipes old return values */
1829 for (mark = newsp + 1; mark <= SP; mark++) {
1830 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1831 *mark = sv_mortalcopy(*mark);
1832 TAINT_NOT; /* Each item is independent */
1836 PL_curpm = newpm; /* Don't pop $1 et al till now */
1846 register PERL_CONTEXT *cx;
1852 cx = &cxstack[cxstack_ix];
1853 if (CxTYPE(cx) != CXt_LOOP)
1854 DIE(aTHX_ "panic: pp_iter");
1856 itersvp = CxITERVAR(cx);
1857 av = cx->blk_loop.iterary;
1858 if (SvTYPE(av) != SVt_PVAV) {
1859 /* iterate ($min .. $max) */
1860 if (cx->blk_loop.iterlval) {
1861 /* string increment */
1862 register SV* cur = cx->blk_loop.iterlval;
1866 SvPV_const((SV*)av, maxlen) : (const char *)"";
1867 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1868 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1869 /* safe to reuse old SV */
1870 sv_setsv(*itersvp, cur);
1874 /* we need a fresh SV every time so that loop body sees a
1875 * completely new SV for closures/references to work as
1878 *itersvp = newSVsv(cur);
1879 SvREFCNT_dec(oldsv);
1881 if (strEQ(SvPVX_const(cur), max))
1882 sv_setiv(cur, 0); /* terminate next time */
1889 /* integer increment */
1890 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1893 /* don't risk potential race */
1894 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1895 /* safe to reuse old SV */
1896 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1900 /* we need a fresh SV every time so that loop body sees a
1901 * completely new SV for closures/references to work as they
1904 *itersvp = newSViv(cx->blk_loop.iterix++);
1905 SvREFCNT_dec(oldsv);
1911 if (PL_op->op_private & OPpITER_REVERSED) {
1912 /* In reverse, use itermax as the min :-) */
1913 if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
1916 if (SvMAGICAL(av) || AvREIFY(av)) {
1917 SV * const * const svp = av_fetch(av, --cx->blk_loop.iterix, FALSE);
1918 sv = svp ? *svp : NULL;
1921 sv = AvARRAY(av)[--cx->blk_loop.iterix];
1925 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp :
1929 if (SvMAGICAL(av) || AvREIFY(av)) {
1930 SV * const * const svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1931 sv = svp ? *svp : NULL;
1934 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1938 if (sv && SvIS_FREED(sv)) {
1940 Perl_croak(aTHX_ "Use of freed value in iteration");
1947 if (av != PL_curstack && sv == &PL_sv_undef) {
1948 SV *lv = cx->blk_loop.iterlval;
1949 if (lv && SvREFCNT(lv) > 1) {
1954 SvREFCNT_dec(LvTARG(lv));
1956 lv = cx->blk_loop.iterlval = newSV_type(SVt_PVLV);
1958 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1960 LvTARG(lv) = SvREFCNT_inc_simple(av);
1961 LvTARGOFF(lv) = cx->blk_loop.iterix;
1962 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1967 *itersvp = SvREFCNT_inc_simple_NN(sv);
1968 SvREFCNT_dec(oldsv);
1976 register PMOP *pm = cPMOP;
1991 register REGEXP *rx = PM_GETRE(pm);
1993 int force_on_match = 0;
1994 const I32 oldsave = PL_savestack_ix;
1996 bool doutf8 = FALSE;
1997 #ifdef PERL_OLD_COPY_ON_WRITE
2002 /* known replacement string? */
2003 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2004 if (PL_op->op_flags & OPf_STACKED)
2006 else if (PL_op->op_private & OPpTARGET_MY)
2013 #ifdef PERL_OLD_COPY_ON_WRITE
2014 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2015 because they make integers such as 256 "false". */
2016 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2019 sv_force_normal_flags(TARG,0);
2022 #ifdef PERL_OLD_COPY_ON_WRITE
2026 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2027 || SvTYPE(TARG) > SVt_PVLV)
2028 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2029 DIE(aTHX_ PL_no_modify);
2032 s = SvPV_mutable(TARG, len);
2033 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2035 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
2036 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2041 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2045 DIE(aTHX_ "panic: pp_subst");
2048 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2049 maxiters = 2 * slen + 10; /* We can match twice at each
2050 position, once with zero-length,
2051 second time with non-zero. */
2053 if (!rx->prelen && PL_curpm) {
2057 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand
2058 || (pm->op_pmflags & (PMf_EVAL|PMf_KEEPCOPY)) )
2059 ? REXEC_COPY_STR : 0;
2061 r_flags |= REXEC_SCREAM;
2064 if (rx->extflags & RXf_USE_INTUIT) {
2066 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2070 /* How to do it in subst? */
2071 /* if ( (rx->extflags & RXf_CHECK_ALL)
2073 && !(pm->op_pmflags & PMf_KEEPCOPY)
2074 && ((rx->extflags & RXf_NOSCAN)
2075 || !((rx->extflags & RXf_INTUIT_TAIL)
2076 && (r_flags & REXEC_SCREAM))))
2081 /* only replace once? */
2082 once = !(rpm->op_pmflags & PMf_GLOBAL);
2084 /* known replacement string? */
2086 /* replacement needing upgrading? */
2087 if (DO_UTF8(TARG) && !doutf8) {
2088 nsv = sv_newmortal();
2091 sv_recode_to_utf8(nsv, PL_encoding);
2093 sv_utf8_upgrade(nsv);
2094 c = SvPV_const(nsv, clen);
2098 c = SvPV_const(dstr, clen);
2099 doutf8 = DO_UTF8(dstr);
2107 /* can do inplace substitution? */
2109 #ifdef PERL_OLD_COPY_ON_WRITE
2112 && (I32)clen <= rx->minlenret && (once || !(r_flags & REXEC_COPY_STR))
2113 && !(rx->extflags & RXf_LOOKBEHIND_SEEN)
2114 && (!doutf8 || SvUTF8(TARG))) {
2115 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2116 r_flags | REXEC_CHECKED))
2120 LEAVE_SCOPE(oldsave);
2123 #ifdef PERL_OLD_COPY_ON_WRITE
2124 if (SvIsCOW(TARG)) {
2125 assert (!force_on_match);
2129 if (force_on_match) {
2131 s = SvPV_force(TARG, len);
2136 SvSCREAM_off(TARG); /* disable possible screamer */
2138 rxtainted |= RX_MATCH_TAINTED(rx);
2139 m = orig + rx->offs[0].start;
2140 d = orig + rx->offs[0].end;
2142 if (m - s > strend - d) { /* faster to shorten from end */
2144 Copy(c, m, clen, char);
2149 Move(d, m, i, char);
2153 SvCUR_set(TARG, m - s);
2155 else if ((i = m - s)) { /* faster from front */
2163 Copy(c, m, clen, char);
2168 Copy(c, d, clen, char);
2173 TAINT_IF(rxtainted & 1);
2179 if (iters++ > maxiters)
2180 DIE(aTHX_ "Substitution loop");
2181 rxtainted |= RX_MATCH_TAINTED(rx);
2182 m = rx->offs[0].start + orig;
2185 Move(s, d, i, char);
2189 Copy(c, d, clen, char);
2192 s = rx->offs[0].end + orig;
2193 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2195 /* don't match same null twice */
2196 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2199 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2200 Move(s, d, i+1, char); /* include the NUL */
2202 TAINT_IF(rxtainted & 1);
2204 PUSHs(sv_2mortal(newSViv((I32)iters)));
2206 (void)SvPOK_only_UTF8(TARG);
2207 TAINT_IF(rxtainted);
2208 if (SvSMAGICAL(TARG)) {
2216 LEAVE_SCOPE(oldsave);
2220 if (CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2221 r_flags | REXEC_CHECKED))
2223 if (force_on_match) {
2225 s = SvPV_force(TARG, len);
2228 #ifdef PERL_OLD_COPY_ON_WRITE
2231 rxtainted |= RX_MATCH_TAINTED(rx);
2232 dstr = newSVpvn(m, s-m);
2238 register PERL_CONTEXT *cx;
2241 RETURNOP(cPMOP->op_pmreplroot);
2243 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2245 if (iters++ > maxiters)
2246 DIE(aTHX_ "Substitution loop");
2247 rxtainted |= RX_MATCH_TAINTED(rx);
2248 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2253 strend = s + (strend - m);
2255 m = rx->offs[0].start + orig;
2256 if (doutf8 && !SvUTF8(dstr))
2257 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2259 sv_catpvn(dstr, s, m-s);
2260 s = rx->offs[0].end + orig;
2262 sv_catpvn(dstr, c, clen);
2265 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2266 TARG, NULL, r_flags));
2267 if (doutf8 && !DO_UTF8(TARG))
2268 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2270 sv_catpvn(dstr, s, strend - s);
2272 #ifdef PERL_OLD_COPY_ON_WRITE
2273 /* The match may make the string COW. If so, brilliant, because that's
2274 just saved us one malloc, copy and free - the regexp has donated
2275 the old buffer, and we malloc an entirely new one, rather than the
2276 regexp malloc()ing a buffer and copying our original, only for
2277 us to throw it away here during the substitution. */
2278 if (SvIsCOW(TARG)) {
2279 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2285 SvPV_set(TARG, SvPVX(dstr));
2286 SvCUR_set(TARG, SvCUR(dstr));
2287 SvLEN_set(TARG, SvLEN(dstr));
2288 doutf8 |= DO_UTF8(dstr);
2289 SvPV_set(dstr, NULL);
2291 TAINT_IF(rxtainted & 1);
2293 PUSHs(sv_2mortal(newSViv((I32)iters)));
2295 (void)SvPOK_only(TARG);
2298 TAINT_IF(rxtainted);
2301 LEAVE_SCOPE(oldsave);
2310 LEAVE_SCOPE(oldsave);
2319 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2320 ++*PL_markstack_ptr;
2321 LEAVE; /* exit inner scope */
2324 if (PL_stack_base + *PL_markstack_ptr > SP) {
2326 const I32 gimme = GIMME_V;
2328 LEAVE; /* exit outer scope */
2329 (void)POPMARK; /* pop src */
2330 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2331 (void)POPMARK; /* pop dst */
2332 SP = PL_stack_base + POPMARK; /* pop original mark */
2333 if (gimme == G_SCALAR) {
2334 if (PL_op->op_private & OPpGREP_LEX) {
2335 SV* const sv = sv_newmortal();
2336 sv_setiv(sv, items);
2344 else if (gimme == G_ARRAY)
2351 ENTER; /* enter inner scope */
2354 src = PL_stack_base[*PL_markstack_ptr];
2356 if (PL_op->op_private & OPpGREP_LEX)
2357 PAD_SVl(PL_op->op_targ) = src;
2361 RETURNOP(cLOGOP->op_other);
2372 register PERL_CONTEXT *cx;
2375 if (CxMULTICALL(&cxstack[cxstack_ix]))
2379 cxstack_ix++; /* temporarily protect top context */
2382 if (gimme == G_SCALAR) {
2385 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2387 *MARK = SvREFCNT_inc(TOPs);
2392 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2394 *MARK = sv_mortalcopy(sv);
2399 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2403 *MARK = &PL_sv_undef;
2407 else if (gimme == G_ARRAY) {
2408 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2409 if (!SvTEMP(*MARK)) {
2410 *MARK = sv_mortalcopy(*MARK);
2411 TAINT_NOT; /* Each item is independent */
2419 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2420 PL_curpm = newpm; /* ... and pop $1 et al */
2423 return cx->blk_sub.retop;
2426 /* This duplicates the above code because the above code must not
2427 * get any slower by more conditions */
2435 register PERL_CONTEXT *cx;
2438 if (CxMULTICALL(&cxstack[cxstack_ix]))
2442 cxstack_ix++; /* temporarily protect top context */
2446 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2447 /* We are an argument to a function or grep().
2448 * This kind of lvalueness was legal before lvalue
2449 * subroutines too, so be backward compatible:
2450 * cannot report errors. */
2452 /* Scalar context *is* possible, on the LHS of -> only,
2453 * as in f()->meth(). But this is not an lvalue. */
2454 if (gimme == G_SCALAR)
2456 if (gimme == G_ARRAY) {
2457 if (!CvLVALUE(cx->blk_sub.cv))
2458 goto temporise_array;
2459 EXTEND_MORTAL(SP - newsp);
2460 for (mark = newsp + 1; mark <= SP; mark++) {
2463 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2464 *mark = sv_mortalcopy(*mark);
2466 /* Can be a localized value subject to deletion. */
2467 PL_tmps_stack[++PL_tmps_ix] = *mark;
2468 SvREFCNT_inc_void(*mark);
2473 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2474 /* Here we go for robustness, not for speed, so we change all
2475 * the refcounts so the caller gets a live guy. Cannot set
2476 * TEMP, so sv_2mortal is out of question. */
2477 if (!CvLVALUE(cx->blk_sub.cv)) {
2483 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2485 if (gimme == G_SCALAR) {
2489 /* Temporaries are bad unless they happen to be elements
2490 * of a tied hash or array */
2491 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2492 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2498 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2499 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2500 : "a readonly value" : "a temporary");
2502 else { /* Can be a localized value
2503 * subject to deletion. */
2504 PL_tmps_stack[++PL_tmps_ix] = *mark;
2505 SvREFCNT_inc_void(*mark);
2508 else { /* Should not happen? */
2514 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2515 (MARK > SP ? "Empty array" : "Array"));
2519 else if (gimme == G_ARRAY) {
2520 EXTEND_MORTAL(SP - newsp);
2521 for (mark = newsp + 1; mark <= SP; mark++) {
2522 if (*mark != &PL_sv_undef
2523 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2524 /* Might be flattened array after $#array = */
2531 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2532 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2535 /* Can be a localized value subject to deletion. */
2536 PL_tmps_stack[++PL_tmps_ix] = *mark;
2537 SvREFCNT_inc_void(*mark);
2543 if (gimme == G_SCALAR) {
2547 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2549 *MARK = SvREFCNT_inc(TOPs);
2554 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2556 *MARK = sv_mortalcopy(sv);
2561 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2565 *MARK = &PL_sv_undef;
2569 else if (gimme == G_ARRAY) {
2571 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2572 if (!SvTEMP(*MARK)) {
2573 *MARK = sv_mortalcopy(*MARK);
2574 TAINT_NOT; /* Each item is independent */
2583 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2584 PL_curpm = newpm; /* ... and pop $1 et al */
2587 return cx->blk_sub.retop;
2595 register PERL_CONTEXT *cx;
2597 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2600 DIE(aTHX_ "Not a CODE reference");
2601 switch (SvTYPE(sv)) {
2602 /* This is overwhelming the most common case: */
2604 if (!(cv = GvCVu((GV*)sv))) {
2606 cv = sv_2cv(sv, &stash, &gv, 0);
2618 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2620 SP = PL_stack_base + POPMARK;
2623 if (SvGMAGICAL(sv)) {
2628 sym = SvPVX_const(sv);
2636 sym = SvPV_const(sv, len);
2639 DIE(aTHX_ PL_no_usym, "a subroutine");
2640 if (PL_op->op_private & HINT_STRICT_REFS)
2641 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2642 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2647 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2648 tryAMAGICunDEREF(to_cv);
2651 if (SvTYPE(cv) == SVt_PVCV)
2656 DIE(aTHX_ "Not a CODE reference");
2657 /* This is the second most common case: */
2667 if (!CvROOT(cv) && !CvXSUB(cv)) {
2671 /* anonymous or undef'd function leaves us no recourse */
2672 if (CvANON(cv) || !(gv = CvGV(cv)))
2673 DIE(aTHX_ "Undefined subroutine called");
2675 /* autoloaded stub? */
2676 if (cv != GvCV(gv)) {
2679 /* should call AUTOLOAD now? */
2682 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2689 sub_name = sv_newmortal();
2690 gv_efullname3(sub_name, gv, NULL);
2691 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2695 DIE(aTHX_ "Not a CODE reference");
2700 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2701 if (CvASSERTION(cv) && PL_DBassertion)
2702 sv_setiv(PL_DBassertion, 1);
2704 Perl_get_db_sub(aTHX_ &sv, cv);
2706 PL_curcopdb = PL_curcop;
2707 cv = GvCV(PL_DBsub);
2709 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2710 DIE(aTHX_ "No DB::sub routine defined");
2713 if (!(CvISXSUB(cv))) {
2714 /* This path taken at least 75% of the time */
2716 register I32 items = SP - MARK;
2717 AV* const padlist = CvPADLIST(cv);
2718 PUSHBLOCK(cx, CXt_SUB, MARK);
2720 cx->blk_sub.retop = PL_op->op_next;
2722 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2723 * that eval'' ops within this sub know the correct lexical space.
2724 * Owing the speed considerations, we choose instead to search for
2725 * the cv using find_runcv() when calling doeval().
2727 if (CvDEPTH(cv) >= 2) {
2728 PERL_STACK_OVERFLOW_CHECK();
2729 pad_push(padlist, CvDEPTH(cv));
2732 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2734 AV* const av = (AV*)PAD_SVl(0);
2736 /* @_ is normally not REAL--this should only ever
2737 * happen when DB::sub() calls things that modify @_ */
2742 cx->blk_sub.savearray = GvAV(PL_defgv);
2743 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2744 CX_CURPAD_SAVE(cx->blk_sub);
2745 cx->blk_sub.argarray = av;
2748 if (items > AvMAX(av) + 1) {
2749 SV **ary = AvALLOC(av);
2750 if (AvARRAY(av) != ary) {
2751 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2754 if (items > AvMAX(av) + 1) {
2755 AvMAX(av) = items - 1;
2756 Renew(ary,items,SV*);
2761 Copy(MARK,AvARRAY(av),items,SV*);
2762 AvFILLp(av) = items - 1;
2770 /* warning must come *after* we fully set up the context
2771 * stuff so that __WARN__ handlers can safely dounwind()
2774 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2775 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2776 sub_crush_depth(cv);
2778 DEBUG_S(PerlIO_printf(Perl_debug_log,
2779 "%p entersub returning %p\n", (void*)thr, (void*)CvSTART(cv)));
2781 RETURNOP(CvSTART(cv));
2784 I32 markix = TOPMARK;
2789 /* Need to copy @_ to stack. Alternative may be to
2790 * switch stack to @_, and copy return values
2791 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2792 AV * const av = GvAV(PL_defgv);
2793 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2796 /* Mark is at the end of the stack. */
2798 Copy(AvARRAY(av), SP + 1, items, SV*);
2803 /* We assume first XSUB in &DB::sub is the called one. */
2805 SAVEVPTR(PL_curcop);
2806 PL_curcop = PL_curcopdb;
2809 /* Do we need to open block here? XXXX */
2810 if (CvXSUB(cv)) /* XXX this is supposed to be true */
2811 (void)(*CvXSUB(cv))(aTHX_ cv);
2813 /* Enforce some sanity in scalar context. */
2814 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2815 if (markix > PL_stack_sp - PL_stack_base)
2816 *(PL_stack_base + markix) = &PL_sv_undef;
2818 *(PL_stack_base + markix) = *PL_stack_sp;
2819 PL_stack_sp = PL_stack_base + markix;
2827 Perl_sub_crush_depth(pTHX_ CV *cv)
2830 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2832 SV* const tmpstr = sv_newmortal();
2833 gv_efullname3(tmpstr, CvGV(cv), NULL);
2834 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2843 SV* const elemsv = POPs;
2844 IV elem = SvIV(elemsv);
2845 AV* const av = (AV*)POPs;
2846 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2847 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2850 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2851 Perl_warner(aTHX_ packWARN(WARN_MISC),
2852 "Use of reference \"%"SVf"\" as array index",
2855 elem -= CopARYBASE_get(PL_curcop);
2856 if (SvTYPE(av) != SVt_PVAV)
2858 svp = av_fetch(av, elem, lval && !defer);
2860 #ifdef PERL_MALLOC_WRAP
2861 if (SvUOK(elemsv)) {
2862 const UV uv = SvUV(elemsv);
2863 elem = uv > IV_MAX ? IV_MAX : uv;
2865 else if (SvNOK(elemsv))
2866 elem = (IV)SvNV(elemsv);
2868 static const char oom_array_extend[] =
2869 "Out of memory during array extend"; /* Duplicated in av.c */
2870 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2873 if (!svp || *svp == &PL_sv_undef) {
2876 DIE(aTHX_ PL_no_aelem, elem);
2877 lv = sv_newmortal();
2878 sv_upgrade(lv, SVt_PVLV);
2880 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2881 LvTARG(lv) = SvREFCNT_inc_simple(av);
2882 LvTARGOFF(lv) = elem;
2887 if (PL_op->op_private & OPpLVAL_INTRO)
2888 save_aelem(av, elem, svp);
2889 else if (PL_op->op_private & OPpDEREF)
2890 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2892 sv = (svp ? *svp : &PL_sv_undef);
2893 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2894 sv = sv_mortalcopy(sv);
2900 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2905 Perl_croak(aTHX_ PL_no_modify);
2906 if (SvTYPE(sv) < SVt_RV)
2907 sv_upgrade(sv, SVt_RV);
2908 else if (SvTYPE(sv) >= SVt_PV) {
2915 SvRV_set(sv, newSV(0));
2918 SvRV_set(sv, (SV*)newAV());
2921 SvRV_set(sv, (SV*)newHV());
2932 SV* const sv = TOPs;
2935 SV* const rsv = SvRV(sv);
2936 if (SvTYPE(rsv) == SVt_PVCV) {
2942 SETs(method_common(sv, NULL));
2949 SV* const sv = cSVOP_sv;
2950 U32 hash = SvSHARED_HASH(sv);
2952 XPUSHs(method_common(sv, &hash));
2957 S_method_common(pTHX_ SV* meth, U32* hashp)
2964 const char* packname = NULL;
2967 const char * const name = SvPV_const(meth, namelen);
2968 SV * const sv = *(PL_stack_base + TOPMARK + 1);
2971 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2979 /* this isn't a reference */
2980 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
2981 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
2983 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2990 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
2991 !(ob=(SV*)GvIO(iogv)))
2993 /* this isn't the name of a filehandle either */
2995 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
2996 ? !isIDFIRST_utf8((U8*)packname)
2997 : !isIDFIRST(*packname)
3000 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3001 SvOK(sv) ? "without a package or object reference"
3002 : "on an undefined value");
3004 /* assume it's a package name */
3005 stash = gv_stashpvn(packname, packlen, 0);
3009 SV* const ref = newSViv(PTR2IV(stash));
3010 hv_store(PL_stashcache, packname, packlen, ref, 0);
3014 /* it _is_ a filehandle name -- replace with a reference */
3015 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3018 /* if we got here, ob should be a reference or a glob */
3019 if (!ob || !(SvOBJECT(ob)
3020 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3023 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3027 stash = SvSTASH(ob);
3030 /* NOTE: stash may be null, hope hv_fetch_ent and
3031 gv_fetchmethod can cope (it seems they can) */
3033 /* shortcut for simple names */
3035 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3037 gv = (GV*)HeVAL(he);
3038 if (isGV(gv) && GvCV(gv) &&
3039 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3040 return (SV*)GvCV(gv);
3044 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3047 /* This code tries to figure out just what went wrong with
3048 gv_fetchmethod. It therefore needs to duplicate a lot of
3049 the internals of that function. We can't move it inside
3050 Perl_gv_fetchmethod_autoload(), however, since that would
3051 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3054 const char* leaf = name;
3055 const char* sep = NULL;
3058 for (p = name; *p; p++) {
3060 sep = p, leaf = p + 1;
3061 else if (*p == ':' && *(p + 1) == ':')
3062 sep = p, leaf = p + 2;
3064 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3065 /* the method name is unqualified or starts with SUPER:: */
3066 bool need_strlen = 1;
3068 packname = CopSTASHPV(PL_curcop);
3071 HEK * const packhek = HvNAME_HEK(stash);
3073 packname = HEK_KEY(packhek);
3074 packlen = HEK_LEN(packhek);
3084 "Can't use anonymous symbol table for method lookup");
3086 else if (need_strlen)
3087 packlen = strlen(packname);
3091 /* the method name is qualified */
3093 packlen = sep - name;
3096 /* we're relying on gv_fetchmethod not autovivifying the stash */
3097 if (gv_stashpvn(packname, packlen, 0)) {
3099 "Can't locate object method \"%s\" via package \"%.*s\"",
3100 leaf, (int)packlen, packname);
3104 "Can't locate object method \"%s\" via package \"%.*s\""
3105 " (perhaps you forgot to load \"%.*s\"?)",
3106 leaf, (int)packlen, packname, (int)packlen, packname);
3109 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3114 * c-indentation-style: bsd
3116 * indent-tabs-mode: t
3119 * ex: set ts=8 sts=4 sw=4 noet: