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);
136 RETURN; /* ignore assignment */
139 if (PL_tainting && PL_tainted && !SvTAINTED(left))
141 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
142 SV * const cv = SvRV(left);
143 const U32 cv_type = SvTYPE(cv);
144 const U32 gv_type = SvTYPE(right);
145 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
151 /* Can do the optimisation if right (LVALUE) is not a typeglob,
152 left (RVALUE) is a reference to something, and we're in void
154 if (!got_coderef && gv_type != SVt_PVGV && GIMME_V == G_VOID) {
155 /* Is the target symbol table currently empty? */
156 GV * const gv = gv_fetchsv(right, GV_NOINIT, SVt_PVGV);
157 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
158 /* Good. Create a new proxy constant subroutine in the target.
159 The gv becomes a(nother) reference to the constant. */
160 SV *const value = SvRV(cv);
162 SvUPGRADE((SV *)gv, SVt_RV);
163 SvPCS_IMPORTED_on(gv);
165 SvREFCNT_inc_simple_void(value);
171 /* Need to fix things up. */
172 if (gv_type != SVt_PVGV) {
173 /* Need to fix GV. */
174 right = (SV*)gv_fetchsv(right, GV_ADD, SVt_PVGV);
178 /* We've been returned a constant rather than a full subroutine,
179 but they expect a subroutine reference to apply. */
181 SvREFCNT_inc_void(SvRV(cv));
182 /* newCONSTSUB takes a reference count on the passed in SV
183 from us. We set the name to NULL, otherwise we get into
184 all sorts of fun as the reference to our new sub is
185 donated to the GV that we're about to assign to.
187 SvRV_set(left, (SV *)newCONSTSUB(GvSTASH(right), NULL,
193 if (strEQ(GvNAME(right),"isa")) {
198 SvSetMagicSV(right, left);
207 RETURNOP(cLOGOP->op_other);
209 RETURNOP(cLOGOP->op_next);
216 TAINT_NOT; /* Each statement is presumed innocent */
217 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
219 oldsave = PL_scopestack[PL_scopestack_ix - 1];
220 LEAVE_SCOPE(oldsave);
226 dVAR; dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
231 const char *rpv = NULL;
233 bool rcopied = FALSE;
235 if (TARG == right && right != left) {
236 /* mg_get(right) may happen here ... */
237 rpv = SvPV_const(right, rlen);
238 rbyte = !DO_UTF8(right);
239 right = sv_2mortal(newSVpvn(rpv, rlen));
240 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
246 const char* const lpv = SvPV_const(left, llen); /* mg_get(left) may happen here */
247 lbyte = !DO_UTF8(left);
248 sv_setpvn(TARG, lpv, llen);
254 else { /* TARG == left */
256 SvGETMAGIC(left); /* or mg_get(left) may happen here */
258 if (left == right && ckWARN(WARN_UNINITIALIZED))
259 report_uninit(right);
260 sv_setpvn(left, "", 0);
262 (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */
263 lbyte = !DO_UTF8(left);
268 /* or mg_get(right) may happen here */
270 rpv = SvPV_const(right, rlen);
271 rbyte = !DO_UTF8(right);
273 if (lbyte != rbyte) {
275 sv_utf8_upgrade_nomg(TARG);
278 right = sv_2mortal(newSVpvn(rpv, rlen));
279 sv_utf8_upgrade_nomg(right);
280 rpv = SvPV_const(right, rlen);
283 sv_catpvn_nomg(TARG, rpv, rlen);
294 if (PL_op->op_flags & OPf_MOD) {
295 if (PL_op->op_private & OPpLVAL_INTRO)
296 if (!(PL_op->op_private & OPpPAD_STATE))
297 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
298 if (PL_op->op_private & OPpDEREF) {
300 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
310 tryAMAGICunTARGET(iter, 0);
311 PL_last_in_gv = (GV*)(*PL_stack_sp--);
312 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
313 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
314 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
317 XPUSHs((SV*)PL_last_in_gv);
320 PL_last_in_gv = (GV*)(*PL_stack_sp--);
323 return do_readline();
328 dVAR; dSP; tryAMAGICbinSET(eq,0);
329 #ifndef NV_PRESERVES_UV
330 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
332 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
336 #ifdef PERL_PRESERVE_IVUV
339 /* Unless the left argument is integer in range we are going
340 to have to use NV maths. Hence only attempt to coerce the
341 right argument if we know the left is integer. */
344 const bool auvok = SvUOK(TOPm1s);
345 const bool buvok = SvUOK(TOPs);
347 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
348 /* Casting IV to UV before comparison isn't going to matter
349 on 2s complement. On 1s complement or sign&magnitude
350 (if we have any of them) it could to make negative zero
351 differ from normal zero. As I understand it. (Need to
352 check - is negative zero implementation defined behaviour
354 const UV buv = SvUVX(POPs);
355 const UV auv = SvUVX(TOPs);
357 SETs(boolSV(auv == buv));
360 { /* ## Mixed IV,UV ## */
364 /* == is commutative so doesn't matter which is left or right */
366 /* top of stack (b) is the iv */
375 /* As uv is a UV, it's >0, so it cannot be == */
378 /* we know iv is >= 0 */
379 SETs(boolSV((UV)iv == SvUVX(uvp)));
386 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
388 if (Perl_isnan(left) || Perl_isnan(right))
390 SETs(boolSV(left == right));
393 SETs(boolSV(TOPn == value));
402 if (SvTYPE(TOPs) >= SVt_PVGV && SvTYPE(TOPs) != SVt_PVLV)
403 DIE(aTHX_ PL_no_modify);
404 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
405 && SvIVX(TOPs) != IV_MAX)
407 SvIV_set(TOPs, SvIVX(TOPs) + 1);
408 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
410 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
422 if (PL_op->op_type == OP_OR)
424 RETURNOP(cLOGOP->op_other);
433 const int op_type = PL_op->op_type;
434 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
438 if (!sv || !SvANY(sv)) {
439 if (op_type == OP_DOR)
441 RETURNOP(cLOGOP->op_other);
443 } else if (op_type == OP_DEFINED) {
445 if (!sv || !SvANY(sv))
448 DIE(aTHX_ "panic: Invalid op (%s) in pp_defined()", OP_NAME(PL_op));
451 switch (SvTYPE(sv)) {
453 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
457 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
461 if (CvROOT(sv) || CvXSUB(sv))
474 if(op_type == OP_DOR)
476 RETURNOP(cLOGOP->op_other);
478 /* assuming OP_DEFINED */
486 dVAR; dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
487 useleft = USE_LEFT(TOPm1s);
488 #ifdef PERL_PRESERVE_IVUV
489 /* We must see if we can perform the addition with integers if possible,
490 as the integer code detects overflow while the NV code doesn't.
491 If either argument hasn't had a numeric conversion yet attempt to get
492 the IV. It's important to do this now, rather than just assuming that
493 it's not IOK as a PV of "9223372036854775806" may not take well to NV
494 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
495 integer in case the second argument is IV=9223372036854775806
496 We can (now) rely on sv_2iv to do the right thing, only setting the
497 public IOK flag if the value in the NV (or PV) slot is truly integer.
499 A side effect is that this also aggressively prefers integer maths over
500 fp maths for integer values.
502 How to detect overflow?
504 C 99 section 6.2.6.1 says
506 The range of nonnegative values of a signed integer type is a subrange
507 of the corresponding unsigned integer type, and the representation of
508 the same value in each type is the same. A computation involving
509 unsigned operands can never overflow, because a result that cannot be
510 represented by the resulting unsigned integer type is reduced modulo
511 the number that is one greater than the largest value that can be
512 represented by the resulting type.
516 which I read as "unsigned ints wrap."
518 signed integer overflow seems to be classed as "exception condition"
520 If an exceptional condition occurs during the evaluation of an
521 expression (that is, if the result is not mathematically defined or not
522 in the range of representable values for its type), the behavior is
525 (6.5, the 5th paragraph)
527 I had assumed that on 2s complement machines signed arithmetic would
528 wrap, hence coded pp_add and pp_subtract on the assumption that
529 everything perl builds on would be happy. After much wailing and
530 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
531 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
532 unsigned code below is actually shorter than the old code. :-)
537 /* Unless the left argument is integer in range we are going to have to
538 use NV maths. Hence only attempt to coerce the right argument if
539 we know the left is integer. */
547 /* left operand is undef, treat as zero. + 0 is identity,
548 Could SETi or SETu right now, but space optimise by not adding
549 lots of code to speed up what is probably a rarish case. */
551 /* Left operand is defined, so is it IV? */
554 if ((auvok = SvUOK(TOPm1s)))
557 register const IV aiv = SvIVX(TOPm1s);
560 auvok = 1; /* Now acting as a sign flag. */
561 } else { /* 2s complement assumption for IV_MIN */
569 bool result_good = 0;
572 bool buvok = SvUOK(TOPs);
577 register const IV biv = SvIVX(TOPs);
584 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
585 else "IV" now, independent of how it came in.
586 if a, b represents positive, A, B negative, a maps to -A etc
591 all UV maths. negate result if A negative.
592 add if signs same, subtract if signs differ. */
598 /* Must get smaller */
604 /* result really should be -(auv-buv). as its negation
605 of true value, need to swap our result flag */
622 if (result <= (UV)IV_MIN)
625 /* result valid, but out of range for IV. */
630 } /* Overflow, drop through to NVs. */
637 /* left operand is undef, treat as zero. + 0.0 is identity. */
641 SETn( value + TOPn );
649 AV * const av = PL_op->op_flags & OPf_SPECIAL ?
650 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
651 const U32 lval = PL_op->op_flags & OPf_MOD;
652 SV** const svp = av_fetch(av, PL_op->op_private, lval);
653 SV *sv = (svp ? *svp : &PL_sv_undef);
655 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
656 sv = sv_mortalcopy(sv);
663 dVAR; dSP; dMARK; dTARGET;
665 do_join(TARG, *MARK, MARK, SP);
676 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
677 * will be enough to hold an OP*.
679 SV* const sv = sv_newmortal();
680 sv_upgrade(sv, SVt_PVLV);
682 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
690 /* Oversized hot code. */
694 dVAR; dSP; dMARK; dORIGMARK;
698 GV * const gv = (PL_op->op_flags & OPf_STACKED) ? (GV*)*++MARK : PL_defoutgv;
700 if (gv && (io = GvIO(gv))
701 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
704 if (MARK == ORIGMARK) {
705 /* If using default handle then we need to make space to
706 * pass object as 1st arg, so move other args up ...
710 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
714 *MARK = SvTIED_obj((SV*)io, mg);
717 call_method("PRINT", G_SCALAR);
725 if (!(io = GvIO(gv))) {
726 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
727 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
729 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
730 report_evil_fh(gv, io, PL_op->op_type);
731 SETERRNO(EBADF,RMS_IFI);
734 else if (!(fp = IoOFP(io))) {
735 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
737 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
738 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
739 report_evil_fh(gv, io, PL_op->op_type);
741 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
746 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
748 if (!do_print(*MARK, fp))
752 if (!do_print(PL_ofs_sv, fp)) { /* $, */
761 if (!do_print(*MARK, fp))
769 if (PL_op->op_type == OP_SAY) {
770 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
773 else if (PL_ors_sv && SvOK(PL_ors_sv))
774 if (!do_print(PL_ors_sv, fp)) /* $\ */
777 if (IoFLAGS(io) & IOf_FLUSH)
778 if (PerlIO_flush(fp) == EOF)
788 XPUSHs(&PL_sv_undef);
795 const I32 gimme = GIMME_V;
796 static const char return_array_to_lvalue_scalar[] = "Can't return array to lvalue scalar context";
797 static const char return_hash_to_lvalue_scalar[] = "Can't return hash to lvalue scalar context";
798 static const char an_array[] = "an ARRAY";
799 static const char a_hash[] = "a HASH";
800 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
801 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
805 tryAMAGICunDEREF_var(is_pp_rv2av ? to_av_amg : to_hv_amg);
808 if (SvTYPE(sv) != type)
809 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
810 if (PL_op->op_flags & OPf_REF) {
815 if (gimme != G_ARRAY)
816 Perl_croak(aTHX_ is_pp_rv2av ? return_array_to_lvalue_scalar
817 : return_hash_to_lvalue_scalar);
821 else if (PL_op->op_flags & OPf_MOD
822 && PL_op->op_private & OPpLVAL_INTRO)
823 Perl_croak(aTHX_ PL_no_localize_ref);
826 if (SvTYPE(sv) == type) {
827 if (PL_op->op_flags & OPf_REF) {
832 if (gimme != G_ARRAY)
834 is_pp_rv2av ? return_array_to_lvalue_scalar
835 : return_hash_to_lvalue_scalar);
843 if (SvTYPE(sv) != SVt_PVGV) {
844 if (SvGMAGICAL(sv)) {
849 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
857 sv = is_pp_rv2av ? (SV*)GvAVn(gv) : (SV*)GvHVn(gv);
858 if (PL_op->op_private & OPpLVAL_INTRO)
859 sv = is_pp_rv2av ? (SV*)save_ary(gv) : (SV*)save_hash(gv);
860 if (PL_op->op_flags & OPf_REF) {
865 if (gimme != G_ARRAY)
867 is_pp_rv2av ? return_array_to_lvalue_scalar
868 : return_hash_to_lvalue_scalar);
876 AV *const av = (AV*)sv;
877 /* The guts of pp_rv2av, with no intenting change to preserve history
878 (until such time as we get tools that can do blame annotation across
879 whitespace changes. */
880 if (gimme == G_ARRAY) {
881 const I32 maxarg = AvFILL(av) + 1;
882 (void)POPs; /* XXXX May be optimized away? */
884 if (SvRMAGICAL(av)) {
886 for (i=0; i < (U32)maxarg; i++) {
887 SV ** const svp = av_fetch(av, i, FALSE);
888 /* See note in pp_helem, and bug id #27839 */
890 ? SvGMAGICAL(*svp) ? sv_mortalcopy(*svp) : *svp
895 Copy(AvARRAY(av), SP+1, maxarg, SV*);
899 else if (gimme == G_SCALAR) {
901 const I32 maxarg = AvFILL(av) + 1;
905 /* The guts of pp_rv2hv */
906 if (gimme == G_ARRAY) { /* array wanted */
910 else if (gimme == G_SCALAR) {
912 TARG = Perl_hv_scalar(aTHX_ (HV*)sv);
921 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
928 if (ckWARN(WARN_MISC)) {
930 if (relem == firstrelem &&
932 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
933 SvTYPE(SvRV(*relem)) == SVt_PVHV))
935 err = "Reference found where even-sized list expected";
938 err = "Odd number of elements in hash assignment";
939 Perl_warner(aTHX_ packWARN(WARN_MISC), err);
943 didstore = hv_store_ent(hash,*relem,tmpstr,0);
944 if (SvMAGICAL(hash)) {
945 if (SvSMAGICAL(tmpstr))
957 SV **lastlelem = PL_stack_sp;
958 SV **lastrelem = PL_stack_base + POPMARK;
959 SV **firstrelem = PL_stack_base + POPMARK + 1;
960 SV **firstlelem = lastrelem + 1;
973 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
975 if (PL_op->op_private & OPpASSIGN_STATE) {
976 if (SvPADSTALE(*firstlelem))
977 SvPADSTALE_off(*firstlelem);
979 RETURN; /* ignore assignment */
982 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
985 /* If there's a common identifier on both sides we have to take
986 * special care that assigning the identifier on the left doesn't
987 * clobber a value on the right that's used later in the list.
989 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
990 EXTEND_MORTAL(lastrelem - firstrelem + 1);
991 for (relem = firstrelem; relem <= lastrelem; relem++) {
993 TAINT_NOT; /* Each item is independent */
994 *relem = sv_mortalcopy(sv);
1004 while (lelem <= lastlelem) {
1005 TAINT_NOT; /* Each item stands on its own, taintwise. */
1007 switch (SvTYPE(sv)) {
1010 magic = SvMAGICAL(ary) != 0;
1012 av_extend(ary, lastrelem - relem);
1014 while (relem <= lastrelem) { /* gobble up all the rest */
1017 sv = newSVsv(*relem);
1019 didstore = av_store(ary,i++,sv);
1029 case SVt_PVHV: { /* normal hash */
1033 magic = SvMAGICAL(hash) != 0;
1035 firsthashrelem = relem;
1037 while (relem < lastrelem) { /* gobble up all the rest */
1039 sv = *relem ? *relem : &PL_sv_no;
1043 sv_setsv(tmpstr,*relem); /* value */
1044 *(relem++) = tmpstr;
1045 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1046 /* key overwrites an existing entry */
1048 didstore = hv_store_ent(hash,sv,tmpstr,0);
1050 if (SvSMAGICAL(tmpstr))
1057 if (relem == lastrelem) {
1058 do_oddball(hash, relem, firstrelem);
1064 if (SvIMMORTAL(sv)) {
1065 if (relem <= lastrelem)
1069 if (relem <= lastrelem) {
1070 sv_setsv(sv, *relem);
1074 sv_setsv(sv, &PL_sv_undef);
1079 if (PL_delaymagic & ~DM_DELAY) {
1080 if (PL_delaymagic & DM_UID) {
1081 #ifdef HAS_SETRESUID
1082 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1083 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1086 # ifdef HAS_SETREUID
1087 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1088 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1091 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1092 (void)setruid(PL_uid);
1093 PL_delaymagic &= ~DM_RUID;
1095 # endif /* HAS_SETRUID */
1097 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1098 (void)seteuid(PL_euid);
1099 PL_delaymagic &= ~DM_EUID;
1101 # endif /* HAS_SETEUID */
1102 if (PL_delaymagic & DM_UID) {
1103 if (PL_uid != PL_euid)
1104 DIE(aTHX_ "No setreuid available");
1105 (void)PerlProc_setuid(PL_uid);
1107 # endif /* HAS_SETREUID */
1108 #endif /* HAS_SETRESUID */
1109 PL_uid = PerlProc_getuid();
1110 PL_euid = PerlProc_geteuid();
1112 if (PL_delaymagic & DM_GID) {
1113 #ifdef HAS_SETRESGID
1114 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1115 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1118 # ifdef HAS_SETREGID
1119 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1120 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1123 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1124 (void)setrgid(PL_gid);
1125 PL_delaymagic &= ~DM_RGID;
1127 # endif /* HAS_SETRGID */
1129 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1130 (void)setegid(PL_egid);
1131 PL_delaymagic &= ~DM_EGID;
1133 # endif /* HAS_SETEGID */
1134 if (PL_delaymagic & DM_GID) {
1135 if (PL_gid != PL_egid)
1136 DIE(aTHX_ "No setregid available");
1137 (void)PerlProc_setgid(PL_gid);
1139 # endif /* HAS_SETREGID */
1140 #endif /* HAS_SETRESGID */
1141 PL_gid = PerlProc_getgid();
1142 PL_egid = PerlProc_getegid();
1144 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1148 if (gimme == G_VOID)
1149 SP = firstrelem - 1;
1150 else if (gimme == G_SCALAR) {
1153 SETi(lastrelem - firstrelem + 1 - duplicates);
1160 /* Removes from the stack the entries which ended up as
1161 * duplicated keys in the hash (fix for [perl #24380]) */
1162 Move(firsthashrelem + duplicates,
1163 firsthashrelem, duplicates, SV**);
1164 lastrelem -= duplicates;
1169 SP = firstrelem + (lastlelem - firstlelem);
1170 lelem = firstlelem + (relem - firstrelem);
1172 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1180 register PMOP * const pm = cPMOP;
1181 REGEXP * rx = PM_GETRE(pm);
1182 SV * const pkg = CALLREG_QRPKG(rx);
1183 SV * const rv = sv_newmortal();
1184 SV * const sv = newSVrv(rv, SvPV_nolen(pkg));
1185 if (rx->extflags & RXf_TAINTED)
1187 sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0);
1195 register PMOP *pm = cPMOP;
1197 register const char *t;
1198 register const char *s;
1201 I32 r_flags = REXEC_CHECKED;
1202 const char *truebase; /* Start of string */
1203 register REGEXP *rx = PM_GETRE(pm);
1205 const I32 gimme = GIMME;
1208 const I32 oldsave = PL_savestack_ix;
1209 I32 update_minmatch = 1;
1210 I32 had_zerolen = 0;
1213 if (PL_op->op_flags & OPf_STACKED)
1215 else if (PL_op->op_private & OPpTARGET_MY)
1222 PUTBACK; /* EVAL blocks need stack_sp. */
1223 s = SvPV_const(TARG, len);
1225 DIE(aTHX_ "panic: pp_match");
1227 rxtainted = ((rx->extflags & RXf_TAINTED) ||
1228 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1231 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1233 /* PMdf_USED is set after a ?? matches once */
1236 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1238 pm->op_pmflags & PMf_USED
1242 if (gimme == G_ARRAY)
1249 /* empty pattern special-cased to use last successful pattern if possible */
1250 if (!rx->prelen && PL_curpm) {
1255 if (rx->minlen > (I32)len)
1260 /* XXXX What part of this is needed with true \G-support? */
1261 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1262 rx->offs[0].start = -1;
1263 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1264 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1265 if (mg && mg->mg_len >= 0) {
1266 if (!(rx->extflags & RXf_GPOS_SEEN))
1267 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1268 else if (rx->extflags & RXf_ANCH_GPOS) {
1269 r_flags |= REXEC_IGNOREPOS;
1270 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1271 } else if (rx->extflags & RXf_GPOS_FLOAT)
1274 rx->offs[0].end = rx->offs[0].start = mg->mg_len;
1275 minmatch = (mg->mg_flags & MGf_MINMATCH) ? rx->gofs + 1 : 0;
1276 update_minmatch = 0;
1280 /* remove comment to get faster /g but possibly unsafe $1 vars after a
1281 match. Test for the unsafe vars will fail as well*/
1282 if (( /* !global && */ rx->nparens)
1283 || SvTEMP(TARG) || PL_sawampersand ||
1284 (rx->extflags & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)))
1285 r_flags |= REXEC_COPY_STR;
1287 r_flags |= REXEC_SCREAM;
1290 if (global && rx->offs[0].start != -1) {
1291 t = s = rx->offs[0].end + truebase - rx->gofs;
1292 if ((s + rx->minlen) > strend || s < truebase)
1294 if (update_minmatch++)
1295 minmatch = had_zerolen;
1297 if (rx->extflags & RXf_USE_INTUIT &&
1298 DO_UTF8(TARG) == ((rx->extflags & RXf_UTF8) != 0)) {
1299 /* FIXME - can PL_bostr be made const char *? */
1300 PL_bostr = (char *)truebase;
1301 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1305 if ( (rx->extflags & RXf_CHECK_ALL)
1307 && !(rx->extflags & RXf_PMf_KEEPCOPY)
1308 && ((rx->extflags & RXf_NOSCAN)
1309 || !((rx->extflags & RXf_INTUIT_TAIL)
1310 && (r_flags & REXEC_SCREAM)))
1311 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1314 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase, minmatch, TARG, INT2PTR(void*, gpos), r_flags))
1317 if (dynpm->op_pmflags & PMf_ONCE) {
1319 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1321 dynpm->op_pmflags |= PMf_USED;
1332 RX_MATCH_TAINTED_on(rx);
1333 TAINT_IF(RX_MATCH_TAINTED(rx));
1334 if (gimme == G_ARRAY) {
1335 const I32 nparens = rx->nparens;
1336 I32 i = (global && !nparens) ? 1 : 0;
1338 SPAGAIN; /* EVAL blocks could move the stack. */
1339 EXTEND(SP, nparens + i);
1340 EXTEND_MORTAL(nparens + i);
1341 for (i = !i; i <= nparens; i++) {
1342 PUSHs(sv_newmortal());
1343 if ((rx->offs[i].start != -1) && rx->offs[i].end != -1 ) {
1344 const I32 len = rx->offs[i].end - rx->offs[i].start;
1345 s = rx->offs[i].start + truebase;
1346 if (rx->offs[i].end < 0 || rx->offs[i].start < 0 ||
1347 len < 0 || len > strend - s)
1348 DIE(aTHX_ "panic: pp_match start/end pointers");
1349 sv_setpvn(*SP, s, len);
1350 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1355 if (dynpm->op_pmflags & PMf_CONTINUE) {
1357 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1358 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1360 #ifdef PERL_OLD_COPY_ON_WRITE
1362 sv_force_normal_flags(TARG, 0);
1364 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1365 &PL_vtbl_mglob, NULL, 0);
1367 if (rx->offs[0].start != -1) {
1368 mg->mg_len = rx->offs[0].end;
1369 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1370 mg->mg_flags |= MGf_MINMATCH;
1372 mg->mg_flags &= ~MGf_MINMATCH;
1375 had_zerolen = (rx->offs[0].start != -1
1376 && (rx->offs[0].start + rx->gofs
1377 == (UV)rx->offs[0].end));
1378 PUTBACK; /* EVAL blocks may use stack */
1379 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1384 LEAVE_SCOPE(oldsave);
1390 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1391 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1395 #ifdef PERL_OLD_COPY_ON_WRITE
1397 sv_force_normal_flags(TARG, 0);
1399 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1400 &PL_vtbl_mglob, NULL, 0);
1402 if (rx->offs[0].start != -1) {
1403 mg->mg_len = rx->offs[0].end;
1404 if (rx->offs[0].start + rx->gofs == (UV)rx->offs[0].end)
1405 mg->mg_flags |= MGf_MINMATCH;
1407 mg->mg_flags &= ~MGf_MINMATCH;
1410 LEAVE_SCOPE(oldsave);
1414 yup: /* Confirmed by INTUIT */
1416 RX_MATCH_TAINTED_on(rx);
1417 TAINT_IF(RX_MATCH_TAINTED(rx));
1419 if (dynpm->op_pmflags & PMf_ONCE) {
1421 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1423 dynpm->op_pmflags |= PMf_USED;
1426 if (RX_MATCH_COPIED(rx))
1427 Safefree(rx->subbeg);
1428 RX_MATCH_COPIED_off(rx);
1431 /* FIXME - should rx->subbeg be const char *? */
1432 rx->subbeg = (char *) truebase;
1433 rx->offs[0].start = s - truebase;
1434 if (RX_MATCH_UTF8(rx)) {
1435 char * const t = (char*)utf8_hop((U8*)s, rx->minlenret);
1436 rx->offs[0].end = t - truebase;
1439 rx->offs[0].end = s - truebase + rx->minlenret;
1441 rx->sublen = strend - truebase;
1444 if (PL_sawampersand || rx->extflags & RXf_PMf_KEEPCOPY) {
1446 #ifdef PERL_OLD_COPY_ON_WRITE
1447 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1449 PerlIO_printf(Perl_debug_log,
1450 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1451 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1454 rx->saved_copy = sv_setsv_cow(rx->saved_copy, TARG);
1455 rx->subbeg = (char *) SvPVX_const(rx->saved_copy) + (t - truebase);
1456 assert (SvPOKp(rx->saved_copy));
1461 rx->subbeg = savepvn(t, strend - t);
1462 #ifdef PERL_OLD_COPY_ON_WRITE
1463 rx->saved_copy = NULL;
1466 rx->sublen = strend - t;
1467 RX_MATCH_COPIED_on(rx);
1468 off = rx->offs[0].start = s - t;
1469 rx->offs[0].end = off + rx->minlenret;
1471 else { /* startp/endp are used by @- @+. */
1472 rx->offs[0].start = s - truebase;
1473 rx->offs[0].end = s - truebase + rx->minlenret;
1475 /* including rx->nparens in the below code seems highly suspicious.
1477 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1478 LEAVE_SCOPE(oldsave);
1483 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1484 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1485 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1490 LEAVE_SCOPE(oldsave);
1491 if (gimme == G_ARRAY)
1497 Perl_do_readline(pTHX)
1499 dVAR; dSP; dTARGETSTACKED;
1504 register IO * const io = GvIO(PL_last_in_gv);
1505 register const I32 type = PL_op->op_type;
1506 const I32 gimme = GIMME_V;
1509 MAGIC * const mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar);
1512 XPUSHs(SvTIED_obj((SV*)io, mg));
1515 call_method("READLINE", gimme);
1518 if (gimme == G_SCALAR) {
1519 SV* const result = POPs;
1520 SvSetSV_nosteal(TARG, result);
1530 if (IoFLAGS(io) & IOf_ARGV) {
1531 if (IoFLAGS(io) & IOf_START) {
1533 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1534 IoFLAGS(io) &= ~IOf_START;
1535 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1536 sv_setpvn(GvSVn(PL_last_in_gv), "-", 1);
1537 SvSETMAGIC(GvSV(PL_last_in_gv));
1542 fp = nextargv(PL_last_in_gv);
1543 if (!fp) { /* Note: fp != IoIFP(io) */
1544 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1547 else if (type == OP_GLOB)
1548 fp = Perl_start_glob(aTHX_ POPs, io);
1550 else if (type == OP_GLOB)
1552 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1553 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1557 if ((!io || !(IoFLAGS(io) & IOf_START))
1558 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1560 if (type == OP_GLOB)
1561 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1562 "glob failed (can't start child: %s)",
1565 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1567 if (gimme == G_SCALAR) {
1568 /* undef TARG, and push that undefined value */
1569 if (type != OP_RCATLINE) {
1570 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1578 if (gimme == G_SCALAR) {
1580 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1583 if (type == OP_RCATLINE)
1584 SvPV_force_nolen(sv);
1588 else if (isGV_with_GP(sv)) {
1589 SvPV_force_nolen(sv);
1591 SvUPGRADE(sv, SVt_PV);
1592 tmplen = SvLEN(sv); /* remember if already alloced */
1593 if (!tmplen && !SvREADONLY(sv))
1594 Sv_Grow(sv, 80); /* try short-buffering it */
1596 if (type == OP_RCATLINE && SvOK(sv)) {
1598 SvPV_force_nolen(sv);
1604 sv = sv_2mortal(newSV(80));
1608 /* This should not be marked tainted if the fp is marked clean */
1609 #define MAYBE_TAINT_LINE(io, sv) \
1610 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1615 /* delay EOF state for a snarfed empty file */
1616 #define SNARF_EOF(gimme,rs,io,sv) \
1617 (gimme != G_SCALAR || SvCUR(sv) \
1618 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1622 if (!sv_gets(sv, fp, offset)
1624 || SNARF_EOF(gimme, PL_rs, io, sv)
1625 || PerlIO_error(fp)))
1627 PerlIO_clearerr(fp);
1628 if (IoFLAGS(io) & IOf_ARGV) {
1629 fp = nextargv(PL_last_in_gv);
1632 (void)do_close(PL_last_in_gv, FALSE);
1634 else if (type == OP_GLOB) {
1635 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1636 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1637 "glob failed (child exited with status %d%s)",
1638 (int)(STATUS_CURRENT >> 8),
1639 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1642 if (gimme == G_SCALAR) {
1643 if (type != OP_RCATLINE) {
1644 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1650 MAYBE_TAINT_LINE(io, sv);
1653 MAYBE_TAINT_LINE(io, sv);
1655 IoFLAGS(io) |= IOf_NOLINE;
1659 if (type == OP_GLOB) {
1662 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1663 char * const tmps = SvEND(sv) - 1;
1664 if (*tmps == *SvPVX_const(PL_rs)) {
1666 SvCUR_set(sv, SvCUR(sv) - 1);
1669 for (t1 = SvPVX_const(sv); *t1; t1++)
1670 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1671 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1673 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1674 (void)POPs; /* Unmatched wildcard? Chuck it... */
1677 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1678 if (ckWARN(WARN_UTF8)) {
1679 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1680 const STRLEN len = SvCUR(sv) - offset;
1683 if (!is_utf8_string_loc(s, len, &f))
1684 /* Emulate :encoding(utf8) warning in the same case. */
1685 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1686 "utf8 \"\\x%02X\" does not map to Unicode",
1687 f < (U8*)SvEND(sv) ? *f : 0);
1690 if (gimme == G_ARRAY) {
1691 if (SvLEN(sv) - SvCUR(sv) > 20) {
1692 SvPV_shrink_to_cur(sv);
1694 sv = sv_2mortal(newSV(80));
1697 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1698 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1699 const STRLEN new_len
1700 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1701 SvPV_renew(sv, new_len);
1710 register PERL_CONTEXT *cx;
1711 I32 gimme = OP_GIMME(PL_op, -1);
1714 if (cxstack_ix >= 0)
1715 gimme = cxstack[cxstack_ix].blk_gimme;
1723 PUSHBLOCK(cx, CXt_BLOCK, SP);
1733 SV * const keysv = POPs;
1734 HV * const hv = (HV*)POPs;
1735 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1736 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1738 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1741 if (SvTYPE(hv) != SVt_PVHV)
1744 if (PL_op->op_private & OPpLVAL_INTRO) {
1747 /* does the element we're localizing already exist? */
1748 preeminent = /* can we determine whether it exists? */
1750 || mg_find((SV*)hv, PERL_MAGIC_env)
1751 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1752 /* Try to preserve the existenceness of a tied hash
1753 * element by using EXISTS and DELETE if possible.
1754 * Fallback to FETCH and STORE otherwise */
1755 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1756 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1757 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1759 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1761 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1762 svp = he ? &HeVAL(he) : NULL;
1764 if (!svp || *svp == &PL_sv_undef) {
1768 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1770 lv = sv_newmortal();
1771 sv_upgrade(lv, SVt_PVLV);
1773 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1774 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1775 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1780 if (PL_op->op_private & OPpLVAL_INTRO) {
1781 if (HvNAME_get(hv) && isGV(*svp))
1782 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1786 const char * const key = SvPV_const(keysv, keylen);
1787 SAVEDELETE(hv, savepvn(key,keylen),
1788 SvUTF8(keysv) ? -(I32)keylen : (I32)keylen);
1790 save_helem(hv, keysv, svp);
1793 else if (PL_op->op_private & OPpDEREF)
1794 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1796 sv = (svp ? *svp : &PL_sv_undef);
1797 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1798 * Pushing the magical RHS on to the stack is useless, since
1799 * that magic is soon destined to be misled by the local(),
1800 * and thus the later pp_sassign() will fail to mg_get() the
1801 * old value. This should also cure problems with delayed
1802 * mg_get()s. GSAR 98-07-03 */
1803 if (!lval && SvGMAGICAL(sv))
1804 sv = sv_mortalcopy(sv);
1812 register PERL_CONTEXT *cx;
1817 if (PL_op->op_flags & OPf_SPECIAL) {
1818 cx = &cxstack[cxstack_ix];
1819 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1824 gimme = OP_GIMME(PL_op, -1);
1826 if (cxstack_ix >= 0)
1827 gimme = cxstack[cxstack_ix].blk_gimme;
1833 if (gimme == G_VOID)
1835 else if (gimme == G_SCALAR) {
1839 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1842 *MARK = sv_mortalcopy(TOPs);
1845 *MARK = &PL_sv_undef;
1849 else if (gimme == G_ARRAY) {
1850 /* in case LEAVE wipes old return values */
1852 for (mark = newsp + 1; mark <= SP; mark++) {
1853 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1854 *mark = sv_mortalcopy(*mark);
1855 TAINT_NOT; /* Each item is independent */
1859 PL_curpm = newpm; /* Don't pop $1 et al till now */
1869 register PERL_CONTEXT *cx;
1875 cx = &cxstack[cxstack_ix];
1876 if (CxTYPE(cx) != CXt_LOOP)
1877 DIE(aTHX_ "panic: pp_iter");
1879 itersvp = CxITERVAR(cx);
1880 av = cx->blk_loop.iterary;
1881 if (SvTYPE(av) != SVt_PVAV) {
1882 /* iterate ($min .. $max) */
1883 if (cx->blk_loop.iterlval) {
1884 /* string increment */
1885 register SV* cur = cx->blk_loop.iterlval;
1889 SvPV_const((SV*)av, maxlen) : (const char *)"";
1890 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1891 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1892 /* safe to reuse old SV */
1893 sv_setsv(*itersvp, cur);
1897 /* we need a fresh SV every time so that loop body sees a
1898 * completely new SV for closures/references to work as
1901 *itersvp = newSVsv(cur);
1902 SvREFCNT_dec(oldsv);
1904 if (strEQ(SvPVX_const(cur), max))
1905 sv_setiv(cur, 0); /* terminate next time */
1912 /* integer increment */
1913 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1916 /* don't risk potential race */
1917 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1918 /* safe to reuse old SV */
1919 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1923 /* we need a fresh SV every time so that loop body sees a
1924 * completely new SV for closures/references to work as they
1927 *itersvp = newSViv(cx->blk_loop.iterix++);
1928 SvREFCNT_dec(oldsv);
1934 if (PL_op->op_private & OPpITER_REVERSED) {
1935 /* In reverse, use itermax as the min :-) */
1936 if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
1939 if (SvMAGICAL(av) || AvREIFY(av)) {
1940 SV * const * const svp = av_fetch(av, --cx->blk_loop.iterix, FALSE);
1941 sv = svp ? *svp : NULL;
1944 sv = AvARRAY(av)[--cx->blk_loop.iterix];
1948 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp :
1952 if (SvMAGICAL(av) || AvREIFY(av)) {
1953 SV * const * const svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1954 sv = svp ? *svp : NULL;
1957 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1961 if (sv && SvIS_FREED(sv)) {
1963 Perl_croak(aTHX_ "Use of freed value in iteration");
1970 if (av != PL_curstack && sv == &PL_sv_undef) {
1971 SV *lv = cx->blk_loop.iterlval;
1972 if (lv && SvREFCNT(lv) > 1) {
1977 SvREFCNT_dec(LvTARG(lv));
1979 lv = cx->blk_loop.iterlval = newSV_type(SVt_PVLV);
1981 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1983 LvTARG(lv) = SvREFCNT_inc_simple(av);
1984 LvTARGOFF(lv) = cx->blk_loop.iterix;
1985 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1990 *itersvp = SvREFCNT_inc_simple_NN(sv);
1991 SvREFCNT_dec(oldsv);
1999 register PMOP *pm = cPMOP;
2014 register REGEXP *rx = PM_GETRE(pm);
2016 int force_on_match = 0;
2017 const I32 oldsave = PL_savestack_ix;
2019 bool doutf8 = FALSE;
2020 #ifdef PERL_OLD_COPY_ON_WRITE
2025 /* known replacement string? */
2026 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2027 if (PL_op->op_flags & OPf_STACKED)
2029 else if (PL_op->op_private & OPpTARGET_MY)
2036 #ifdef PERL_OLD_COPY_ON_WRITE
2037 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2038 because they make integers such as 256 "false". */
2039 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2042 sv_force_normal_flags(TARG,0);
2045 #ifdef PERL_OLD_COPY_ON_WRITE
2049 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2050 || SvTYPE(TARG) > SVt_PVLV)
2051 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2052 DIE(aTHX_ PL_no_modify);
2055 s = SvPV_mutable(TARG, len);
2056 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2058 rxtainted = ((rx->extflags & RXf_TAINTED) ||
2059 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2064 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2068 DIE(aTHX_ "panic: pp_subst");
2071 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2072 maxiters = 2 * slen + 10; /* We can match twice at each
2073 position, once with zero-length,
2074 second time with non-zero. */
2076 if (!rx->prelen && PL_curpm) {
2080 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand
2081 || (rx->extflags & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY)) )
2082 ? REXEC_COPY_STR : 0;
2084 r_flags |= REXEC_SCREAM;
2087 if (rx->extflags & RXf_USE_INTUIT) {
2089 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2093 /* How to do it in subst? */
2094 /* if ( (rx->extflags & RXf_CHECK_ALL)
2096 && !(rx->extflags & RXf_KEEPCOPY)
2097 && ((rx->extflags & RXf_NOSCAN)
2098 || !((rx->extflags & RXf_INTUIT_TAIL)
2099 && (r_flags & REXEC_SCREAM))))
2104 /* only replace once? */
2105 once = !(rpm->op_pmflags & PMf_GLOBAL);
2107 /* known replacement string? */
2109 /* replacement needing upgrading? */
2110 if (DO_UTF8(TARG) && !doutf8) {
2111 nsv = sv_newmortal();
2114 sv_recode_to_utf8(nsv, PL_encoding);
2116 sv_utf8_upgrade(nsv);
2117 c = SvPV_const(nsv, clen);
2121 c = SvPV_const(dstr, clen);
2122 doutf8 = DO_UTF8(dstr);
2130 /* can do inplace substitution? */
2132 #ifdef PERL_OLD_COPY_ON_WRITE
2135 && (I32)clen <= rx->minlenret && (once || !(r_flags & REXEC_COPY_STR))
2136 && !(rx->extflags & RXf_LOOKBEHIND_SEEN)
2137 && (!doutf8 || SvUTF8(TARG))) {
2138 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2139 r_flags | REXEC_CHECKED))
2143 LEAVE_SCOPE(oldsave);
2146 #ifdef PERL_OLD_COPY_ON_WRITE
2147 if (SvIsCOW(TARG)) {
2148 assert (!force_on_match);
2152 if (force_on_match) {
2154 s = SvPV_force(TARG, len);
2159 SvSCREAM_off(TARG); /* disable possible screamer */
2161 rxtainted |= RX_MATCH_TAINTED(rx);
2162 m = orig + rx->offs[0].start;
2163 d = orig + rx->offs[0].end;
2165 if (m - s > strend - d) { /* faster to shorten from end */
2167 Copy(c, m, clen, char);
2172 Move(d, m, i, char);
2176 SvCUR_set(TARG, m - s);
2178 else if ((i = m - s)) { /* faster from front */
2186 Copy(c, m, clen, char);
2191 Copy(c, d, clen, char);
2196 TAINT_IF(rxtainted & 1);
2202 if (iters++ > maxiters)
2203 DIE(aTHX_ "Substitution loop");
2204 rxtainted |= RX_MATCH_TAINTED(rx);
2205 m = rx->offs[0].start + orig;
2208 Move(s, d, i, char);
2212 Copy(c, d, clen, char);
2215 s = rx->offs[0].end + orig;
2216 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2218 /* don't match same null twice */
2219 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2222 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2223 Move(s, d, i+1, char); /* include the NUL */
2225 TAINT_IF(rxtainted & 1);
2227 PUSHs(sv_2mortal(newSViv((I32)iters)));
2229 (void)SvPOK_only_UTF8(TARG);
2230 TAINT_IF(rxtainted);
2231 if (SvSMAGICAL(TARG)) {
2239 LEAVE_SCOPE(oldsave);
2243 if (CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2244 r_flags | REXEC_CHECKED))
2246 if (force_on_match) {
2248 s = SvPV_force(TARG, len);
2251 #ifdef PERL_OLD_COPY_ON_WRITE
2254 rxtainted |= RX_MATCH_TAINTED(rx);
2255 dstr = newSVpvn(m, s-m);
2261 register PERL_CONTEXT *cx;
2264 RETURNOP(cPMOP->op_pmreplroot);
2266 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2268 if (iters++ > maxiters)
2269 DIE(aTHX_ "Substitution loop");
2270 rxtainted |= RX_MATCH_TAINTED(rx);
2271 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2276 strend = s + (strend - m);
2278 m = rx->offs[0].start + orig;
2279 if (doutf8 && !SvUTF8(dstr))
2280 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2282 sv_catpvn(dstr, s, m-s);
2283 s = rx->offs[0].end + orig;
2285 sv_catpvn(dstr, c, clen);
2288 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2289 TARG, NULL, r_flags));
2290 if (doutf8 && !DO_UTF8(TARG))
2291 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2293 sv_catpvn(dstr, s, strend - s);
2295 #ifdef PERL_OLD_COPY_ON_WRITE
2296 /* The match may make the string COW. If so, brilliant, because that's
2297 just saved us one malloc, copy and free - the regexp has donated
2298 the old buffer, and we malloc an entirely new one, rather than the
2299 regexp malloc()ing a buffer and copying our original, only for
2300 us to throw it away here during the substitution. */
2301 if (SvIsCOW(TARG)) {
2302 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2308 SvPV_set(TARG, SvPVX(dstr));
2309 SvCUR_set(TARG, SvCUR(dstr));
2310 SvLEN_set(TARG, SvLEN(dstr));
2311 doutf8 |= DO_UTF8(dstr);
2312 SvPV_set(dstr, NULL);
2314 TAINT_IF(rxtainted & 1);
2316 PUSHs(sv_2mortal(newSViv((I32)iters)));
2318 (void)SvPOK_only(TARG);
2321 TAINT_IF(rxtainted);
2324 LEAVE_SCOPE(oldsave);
2333 LEAVE_SCOPE(oldsave);
2342 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2343 ++*PL_markstack_ptr;
2344 LEAVE; /* exit inner scope */
2347 if (PL_stack_base + *PL_markstack_ptr > SP) {
2349 const I32 gimme = GIMME_V;
2351 LEAVE; /* exit outer scope */
2352 (void)POPMARK; /* pop src */
2353 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2354 (void)POPMARK; /* pop dst */
2355 SP = PL_stack_base + POPMARK; /* pop original mark */
2356 if (gimme == G_SCALAR) {
2357 if (PL_op->op_private & OPpGREP_LEX) {
2358 SV* const sv = sv_newmortal();
2359 sv_setiv(sv, items);
2367 else if (gimme == G_ARRAY)
2374 ENTER; /* enter inner scope */
2377 src = PL_stack_base[*PL_markstack_ptr];
2379 if (PL_op->op_private & OPpGREP_LEX)
2380 PAD_SVl(PL_op->op_targ) = src;
2384 RETURNOP(cLOGOP->op_other);
2395 register PERL_CONTEXT *cx;
2398 if (CxMULTICALL(&cxstack[cxstack_ix]))
2402 cxstack_ix++; /* temporarily protect top context */
2405 if (gimme == G_SCALAR) {
2408 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2410 *MARK = SvREFCNT_inc(TOPs);
2415 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2417 *MARK = sv_mortalcopy(sv);
2422 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2426 *MARK = &PL_sv_undef;
2430 else if (gimme == G_ARRAY) {
2431 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2432 if (!SvTEMP(*MARK)) {
2433 *MARK = sv_mortalcopy(*MARK);
2434 TAINT_NOT; /* Each item is independent */
2442 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2443 PL_curpm = newpm; /* ... and pop $1 et al */
2446 return cx->blk_sub.retop;
2449 /* This duplicates the above code because the above code must not
2450 * get any slower by more conditions */
2458 register PERL_CONTEXT *cx;
2461 if (CxMULTICALL(&cxstack[cxstack_ix]))
2465 cxstack_ix++; /* temporarily protect top context */
2469 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2470 /* We are an argument to a function or grep().
2471 * This kind of lvalueness was legal before lvalue
2472 * subroutines too, so be backward compatible:
2473 * cannot report errors. */
2475 /* Scalar context *is* possible, on the LHS of -> only,
2476 * as in f()->meth(). But this is not an lvalue. */
2477 if (gimme == G_SCALAR)
2479 if (gimme == G_ARRAY) {
2480 if (!CvLVALUE(cx->blk_sub.cv))
2481 goto temporise_array;
2482 EXTEND_MORTAL(SP - newsp);
2483 for (mark = newsp + 1; mark <= SP; mark++) {
2486 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2487 *mark = sv_mortalcopy(*mark);
2489 /* Can be a localized value subject to deletion. */
2490 PL_tmps_stack[++PL_tmps_ix] = *mark;
2491 SvREFCNT_inc_void(*mark);
2496 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2497 /* Here we go for robustness, not for speed, so we change all
2498 * the refcounts so the caller gets a live guy. Cannot set
2499 * TEMP, so sv_2mortal is out of question. */
2500 if (!CvLVALUE(cx->blk_sub.cv)) {
2506 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2508 if (gimme == G_SCALAR) {
2512 /* Temporaries are bad unless they happen to be elements
2513 * of a tied hash or array */
2514 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2515 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2521 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2522 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2523 : "a readonly value" : "a temporary");
2525 else { /* Can be a localized value
2526 * subject to deletion. */
2527 PL_tmps_stack[++PL_tmps_ix] = *mark;
2528 SvREFCNT_inc_void(*mark);
2531 else { /* Should not happen? */
2537 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2538 (MARK > SP ? "Empty array" : "Array"));
2542 else if (gimme == G_ARRAY) {
2543 EXTEND_MORTAL(SP - newsp);
2544 for (mark = newsp + 1; mark <= SP; mark++) {
2545 if (*mark != &PL_sv_undef
2546 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2547 /* Might be flattened array after $#array = */
2554 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2555 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2558 /* Can be a localized value subject to deletion. */
2559 PL_tmps_stack[++PL_tmps_ix] = *mark;
2560 SvREFCNT_inc_void(*mark);
2566 if (gimme == G_SCALAR) {
2570 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2572 *MARK = SvREFCNT_inc(TOPs);
2577 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2579 *MARK = sv_mortalcopy(sv);
2584 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2588 *MARK = &PL_sv_undef;
2592 else if (gimme == G_ARRAY) {
2594 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2595 if (!SvTEMP(*MARK)) {
2596 *MARK = sv_mortalcopy(*MARK);
2597 TAINT_NOT; /* Each item is independent */
2606 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2607 PL_curpm = newpm; /* ... and pop $1 et al */
2610 return cx->blk_sub.retop;
2618 register PERL_CONTEXT *cx;
2620 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2623 DIE(aTHX_ "Not a CODE reference");
2624 switch (SvTYPE(sv)) {
2625 /* This is overwhelming the most common case: */
2627 if (!(cv = GvCVu((GV*)sv))) {
2629 cv = sv_2cv(sv, &stash, &gv, 0);
2641 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2643 SP = PL_stack_base + POPMARK;
2646 if (SvGMAGICAL(sv)) {
2651 sym = SvPVX_const(sv);
2659 sym = SvPV_const(sv, len);
2662 DIE(aTHX_ PL_no_usym, "a subroutine");
2663 if (PL_op->op_private & HINT_STRICT_REFS)
2664 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2665 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2670 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2671 tryAMAGICunDEREF(to_cv);
2674 if (SvTYPE(cv) == SVt_PVCV)
2679 DIE(aTHX_ "Not a CODE reference");
2680 /* This is the second most common case: */
2690 if (!CvROOT(cv) && !CvXSUB(cv)) {
2694 /* anonymous or undef'd function leaves us no recourse */
2695 if (CvANON(cv) || !(gv = CvGV(cv)))
2696 DIE(aTHX_ "Undefined subroutine called");
2698 /* autoloaded stub? */
2699 if (cv != GvCV(gv)) {
2702 /* should call AUTOLOAD now? */
2705 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2712 sub_name = sv_newmortal();
2713 gv_efullname3(sub_name, gv, NULL);
2714 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2718 DIE(aTHX_ "Not a CODE reference");
2723 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2724 if (CvASSERTION(cv) && PL_DBassertion)
2725 sv_setiv(PL_DBassertion, 1);
2727 Perl_get_db_sub(aTHX_ &sv, cv);
2729 PL_curcopdb = PL_curcop;
2730 cv = GvCV(PL_DBsub);
2732 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2733 DIE(aTHX_ "No DB::sub routine defined");
2736 if (!(CvISXSUB(cv))) {
2737 /* This path taken at least 75% of the time */
2739 register I32 items = SP - MARK;
2740 AV* const padlist = CvPADLIST(cv);
2741 PUSHBLOCK(cx, CXt_SUB, MARK);
2743 cx->blk_sub.retop = PL_op->op_next;
2745 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2746 * that eval'' ops within this sub know the correct lexical space.
2747 * Owing the speed considerations, we choose instead to search for
2748 * the cv using find_runcv() when calling doeval().
2750 if (CvDEPTH(cv) >= 2) {
2751 PERL_STACK_OVERFLOW_CHECK();
2752 pad_push(padlist, CvDEPTH(cv));
2755 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2757 AV* const av = (AV*)PAD_SVl(0);
2759 /* @_ is normally not REAL--this should only ever
2760 * happen when DB::sub() calls things that modify @_ */
2765 cx->blk_sub.savearray = GvAV(PL_defgv);
2766 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2767 CX_CURPAD_SAVE(cx->blk_sub);
2768 cx->blk_sub.argarray = av;
2771 if (items > AvMAX(av) + 1) {
2772 SV **ary = AvALLOC(av);
2773 if (AvARRAY(av) != ary) {
2774 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2777 if (items > AvMAX(av) + 1) {
2778 AvMAX(av) = items - 1;
2779 Renew(ary,items,SV*);
2784 Copy(MARK,AvARRAY(av),items,SV*);
2785 AvFILLp(av) = items - 1;
2793 /* warning must come *after* we fully set up the context
2794 * stuff so that __WARN__ handlers can safely dounwind()
2797 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2798 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2799 sub_crush_depth(cv);
2801 DEBUG_S(PerlIO_printf(Perl_debug_log,
2802 "%p entersub returning %p\n", (void*)thr, (void*)CvSTART(cv)));
2804 RETURNOP(CvSTART(cv));
2807 I32 markix = TOPMARK;
2812 /* Need to copy @_ to stack. Alternative may be to
2813 * switch stack to @_, and copy return values
2814 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2815 AV * const av = GvAV(PL_defgv);
2816 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2819 /* Mark is at the end of the stack. */
2821 Copy(AvARRAY(av), SP + 1, items, SV*);
2826 /* We assume first XSUB in &DB::sub is the called one. */
2828 SAVEVPTR(PL_curcop);
2829 PL_curcop = PL_curcopdb;
2832 /* Do we need to open block here? XXXX */
2833 if (CvXSUB(cv)) /* XXX this is supposed to be true */
2834 (void)(*CvXSUB(cv))(aTHX_ cv);
2836 /* Enforce some sanity in scalar context. */
2837 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2838 if (markix > PL_stack_sp - PL_stack_base)
2839 *(PL_stack_base + markix) = &PL_sv_undef;
2841 *(PL_stack_base + markix) = *PL_stack_sp;
2842 PL_stack_sp = PL_stack_base + markix;
2850 Perl_sub_crush_depth(pTHX_ CV *cv)
2853 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2855 SV* const tmpstr = sv_newmortal();
2856 gv_efullname3(tmpstr, CvGV(cv), NULL);
2857 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2866 SV* const elemsv = POPs;
2867 IV elem = SvIV(elemsv);
2868 AV* const av = (AV*)POPs;
2869 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2870 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2873 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2874 Perl_warner(aTHX_ packWARN(WARN_MISC),
2875 "Use of reference \"%"SVf"\" as array index",
2878 elem -= CopARYBASE_get(PL_curcop);
2879 if (SvTYPE(av) != SVt_PVAV)
2881 svp = av_fetch(av, elem, lval && !defer);
2883 #ifdef PERL_MALLOC_WRAP
2884 if (SvUOK(elemsv)) {
2885 const UV uv = SvUV(elemsv);
2886 elem = uv > IV_MAX ? IV_MAX : uv;
2888 else if (SvNOK(elemsv))
2889 elem = (IV)SvNV(elemsv);
2891 static const char oom_array_extend[] =
2892 "Out of memory during array extend"; /* Duplicated in av.c */
2893 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2896 if (!svp || *svp == &PL_sv_undef) {
2899 DIE(aTHX_ PL_no_aelem, elem);
2900 lv = sv_newmortal();
2901 sv_upgrade(lv, SVt_PVLV);
2903 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2904 LvTARG(lv) = SvREFCNT_inc_simple(av);
2905 LvTARGOFF(lv) = elem;
2910 if (PL_op->op_private & OPpLVAL_INTRO)
2911 save_aelem(av, elem, svp);
2912 else if (PL_op->op_private & OPpDEREF)
2913 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2915 sv = (svp ? *svp : &PL_sv_undef);
2916 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2917 sv = sv_mortalcopy(sv);
2923 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2928 Perl_croak(aTHX_ PL_no_modify);
2929 if (SvTYPE(sv) < SVt_RV)
2930 sv_upgrade(sv, SVt_RV);
2931 else if (SvTYPE(sv) >= SVt_PV) {
2938 SvRV_set(sv, newSV(0));
2941 SvRV_set(sv, (SV*)newAV());
2944 SvRV_set(sv, (SV*)newHV());
2955 SV* const sv = TOPs;
2958 SV* const rsv = SvRV(sv);
2959 if (SvTYPE(rsv) == SVt_PVCV) {
2965 SETs(method_common(sv, NULL));
2972 SV* const sv = cSVOP_sv;
2973 U32 hash = SvSHARED_HASH(sv);
2975 XPUSHs(method_common(sv, &hash));
2980 S_method_common(pTHX_ SV* meth, U32* hashp)
2987 const char* packname = NULL;
2990 const char * const name = SvPV_const(meth, namelen);
2991 SV * const sv = *(PL_stack_base + TOPMARK + 1);
2994 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3002 /* this isn't a reference */
3003 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3004 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3006 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3013 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3014 !(ob=(SV*)GvIO(iogv)))
3016 /* this isn't the name of a filehandle either */
3018 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3019 ? !isIDFIRST_utf8((U8*)packname)
3020 : !isIDFIRST(*packname)
3023 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3024 SvOK(sv) ? "without a package or object reference"
3025 : "on an undefined value");
3027 /* assume it's a package name */
3028 stash = gv_stashpvn(packname, packlen, 0);
3032 SV* const ref = newSViv(PTR2IV(stash));
3033 hv_store(PL_stashcache, packname, packlen, ref, 0);
3037 /* it _is_ a filehandle name -- replace with a reference */
3038 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3041 /* if we got here, ob should be a reference or a glob */
3042 if (!ob || !(SvOBJECT(ob)
3043 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3046 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3047 (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
3051 stash = SvSTASH(ob);
3054 /* NOTE: stash may be null, hope hv_fetch_ent and
3055 gv_fetchmethod can cope (it seems they can) */
3057 /* shortcut for simple names */
3059 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3061 gv = (GV*)HeVAL(he);
3062 if (isGV(gv) && GvCV(gv) &&
3063 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3064 return (SV*)GvCV(gv);
3068 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3071 /* This code tries to figure out just what went wrong with
3072 gv_fetchmethod. It therefore needs to duplicate a lot of
3073 the internals of that function. We can't move it inside
3074 Perl_gv_fetchmethod_autoload(), however, since that would
3075 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3078 const char* leaf = name;
3079 const char* sep = NULL;
3082 for (p = name; *p; p++) {
3084 sep = p, leaf = p + 1;
3085 else if (*p == ':' && *(p + 1) == ':')
3086 sep = p, leaf = p + 2;
3088 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3089 /* the method name is unqualified or starts with SUPER:: */
3090 bool need_strlen = 1;
3092 packname = CopSTASHPV(PL_curcop);
3095 HEK * const packhek = HvNAME_HEK(stash);
3097 packname = HEK_KEY(packhek);
3098 packlen = HEK_LEN(packhek);
3108 "Can't use anonymous symbol table for method lookup");
3110 else if (need_strlen)
3111 packlen = strlen(packname);
3115 /* the method name is qualified */
3117 packlen = sep - name;
3120 /* we're relying on gv_fetchmethod not autovivifying the stash */
3121 if (gv_stashpvn(packname, packlen, 0)) {
3123 "Can't locate object method \"%s\" via package \"%.*s\"",
3124 leaf, (int)packlen, packname);
3128 "Can't locate object method \"%s\" via package \"%.*s\""
3129 " (perhaps you forgot to load \"%.*s\"?)",
3130 leaf, (int)packlen, packname, (int)packlen, packname);
3133 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3138 * c-indentation-style: bsd
3140 * indent-tabs-mode: t
3143 * ex: set ts=8 sts=4 sw=4 noet: