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
49 PL_curcop = (COP*)PL_op;
50 TAINT_NOT; /* Each statement is presumed innocent */
51 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
61 if (PL_op->op_private & OPpLVAL_INTRO)
62 PUSHs(save_scalar(cGVOP_gv));
64 PUSHs(GvSVn(cGVOP_gv));
77 PL_curcop = (COP*)PL_op;
84 PUSHMARK(PL_stack_sp);
99 XPUSHs((SV*)cGVOP_gv);
109 if (PL_op->op_type == OP_AND)
111 RETURNOP(cLOGOP->op_other);
117 dVAR; dSP; dPOPTOPssrl;
119 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
120 SV * const temp = left;
121 left = right; right = temp;
123 else if (PL_op->op_private & OPpASSIGN_STATE) {
124 if (SvPADSTALE(right))
125 SvPADSTALE_off(right);
127 RETURN; /* ignore assignment */
129 if (PL_tainting && PL_tainted && !SvTAINTED(left))
131 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
132 SV * const cv = SvRV(left);
133 const U32 cv_type = SvTYPE(cv);
134 const U32 gv_type = SvTYPE(right);
135 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
141 /* Can do the optimisation if right (LVALUE) is not a typeglob,
142 left (RVALUE) is a reference to something, and we're in void
144 if (!got_coderef && gv_type != SVt_PVGV && GIMME_V == G_VOID) {
145 /* Is the target symbol table currently empty? */
146 GV * const gv = gv_fetchsv(right, GV_NOINIT, SVt_PVGV);
147 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
148 /* Good. Create a new proxy constant subroutine in the target.
149 The gv becomes a(nother) reference to the constant. */
150 SV *const value = SvRV(cv);
152 SvUPGRADE((SV *)gv, SVt_RV);
153 SvPCS_IMPORTED_on(gv);
155 SvREFCNT_inc_simple_void(value);
161 /* Need to fix things up. */
162 if (gv_type != SVt_PVGV) {
163 /* Need to fix GV. */
164 right = (SV*)gv_fetchsv(right, GV_ADD, SVt_PVGV);
168 /* We've been returned a constant rather than a full subroutine,
169 but they expect a subroutine reference to apply. */
171 SvREFCNT_inc_void(SvRV(cv));
172 /* newCONSTSUB takes a reference count on the passed in SV
173 from us. We set the name to NULL, otherwise we get into
174 all sorts of fun as the reference to our new sub is
175 donated to the GV that we're about to assign to.
177 SvRV_set(left, (SV *)newCONSTSUB(GvSTASH(right), NULL,
183 if (strEQ(GvNAME(right),"isa")) {
188 SvSetMagicSV(right, left);
197 RETURNOP(cLOGOP->op_other);
199 RETURNOP(cLOGOP->op_next);
206 TAINT_NOT; /* Each statement is presumed innocent */
207 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
209 oldsave = PL_scopestack[PL_scopestack_ix - 1];
210 LEAVE_SCOPE(oldsave);
216 dVAR; dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
221 const char *rpv = NULL;
223 bool rcopied = FALSE;
225 if (TARG == right && right != left) {
226 /* mg_get(right) may happen here ... */
227 rpv = SvPV_const(right, rlen);
228 rbyte = !DO_UTF8(right);
229 right = sv_2mortal(newSVpvn(rpv, rlen));
230 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
236 const char* const lpv = SvPV_const(left, llen); /* mg_get(left) may happen here */
237 lbyte = !DO_UTF8(left);
238 sv_setpvn(TARG, lpv, llen);
244 else { /* TARG == left */
246 SvGETMAGIC(left); /* or mg_get(left) may happen here */
248 if (left == right && ckWARN(WARN_UNINITIALIZED))
249 report_uninit(right);
250 sv_setpvn(left, "", 0);
252 (void)SvPV_nomg_const(left, llen); /* Needed to set UTF8 flag */
253 lbyte = !DO_UTF8(left);
258 /* or mg_get(right) may happen here */
260 rpv = SvPV_const(right, rlen);
261 rbyte = !DO_UTF8(right);
263 if (lbyte != rbyte) {
265 sv_utf8_upgrade_nomg(TARG);
268 right = sv_2mortal(newSVpvn(rpv, rlen));
269 sv_utf8_upgrade_nomg(right);
270 rpv = SvPV_const(right, rlen);
273 sv_catpvn_nomg(TARG, rpv, rlen);
284 if (PL_op->op_flags & OPf_MOD) {
285 if (PL_op->op_private & OPpLVAL_INTRO)
286 if (!(PL_op->op_private & OPpPAD_STATE))
287 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
288 if (PL_op->op_private & OPpDEREF) {
290 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
300 tryAMAGICunTARGET(iter, 0);
301 PL_last_in_gv = (GV*)(*PL_stack_sp--);
302 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
303 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
304 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
307 XPUSHs((SV*)PL_last_in_gv);
310 PL_last_in_gv = (GV*)(*PL_stack_sp--);
313 return do_readline();
318 dVAR; dSP; tryAMAGICbinSET(eq,0);
319 #ifndef NV_PRESERVES_UV
320 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
322 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
326 #ifdef PERL_PRESERVE_IVUV
329 /* Unless the left argument is integer in range we are going
330 to have to use NV maths. Hence only attempt to coerce the
331 right argument if we know the left is integer. */
334 const bool auvok = SvUOK(TOPm1s);
335 const bool buvok = SvUOK(TOPs);
337 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
338 /* Casting IV to UV before comparison isn't going to matter
339 on 2s complement. On 1s complement or sign&magnitude
340 (if we have any of them) it could to make negative zero
341 differ from normal zero. As I understand it. (Need to
342 check - is negative zero implementation defined behaviour
344 const UV buv = SvUVX(POPs);
345 const UV auv = SvUVX(TOPs);
347 SETs(boolSV(auv == buv));
350 { /* ## Mixed IV,UV ## */
354 /* == is commutative so doesn't matter which is left or right */
356 /* top of stack (b) is the iv */
365 /* As uv is a UV, it's >0, so it cannot be == */
368 /* we know iv is >= 0 */
369 SETs(boolSV((UV)iv == SvUVX(uvp)));
376 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
378 if (Perl_isnan(left) || Perl_isnan(right))
380 SETs(boolSV(left == right));
383 SETs(boolSV(TOPn == value));
392 if (SvTYPE(TOPs) >= SVt_PVGV && SvTYPE(TOPs) != SVt_PVLV)
393 DIE(aTHX_ PL_no_modify);
394 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
395 && SvIVX(TOPs) != IV_MAX)
397 SvIV_set(TOPs, SvIVX(TOPs) + 1);
398 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
400 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
412 if (PL_op->op_type == OP_OR)
414 RETURNOP(cLOGOP->op_other);
423 const int op_type = PL_op->op_type;
424 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
428 if (!sv || !SvANY(sv)) {
429 if (op_type == OP_DOR)
431 RETURNOP(cLOGOP->op_other);
433 } else if (op_type == OP_DEFINED) {
435 if (!sv || !SvANY(sv))
438 DIE(aTHX_ "panic: Invalid op (%s) in pp_defined()", OP_NAME(PL_op));
441 switch (SvTYPE(sv)) {
443 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
447 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
451 if (CvROOT(sv) || CvXSUB(sv))
464 if(op_type == OP_DOR)
466 RETURNOP(cLOGOP->op_other);
468 /* assuming OP_DEFINED */
476 dVAR; dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
477 useleft = USE_LEFT(TOPm1s);
478 #ifdef PERL_PRESERVE_IVUV
479 /* We must see if we can perform the addition with integers if possible,
480 as the integer code detects overflow while the NV code doesn't.
481 If either argument hasn't had a numeric conversion yet attempt to get
482 the IV. It's important to do this now, rather than just assuming that
483 it's not IOK as a PV of "9223372036854775806" may not take well to NV
484 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
485 integer in case the second argument is IV=9223372036854775806
486 We can (now) rely on sv_2iv to do the right thing, only setting the
487 public IOK flag if the value in the NV (or PV) slot is truly integer.
489 A side effect is that this also aggressively prefers integer maths over
490 fp maths for integer values.
492 How to detect overflow?
494 C 99 section 6.2.6.1 says
496 The range of nonnegative values of a signed integer type is a subrange
497 of the corresponding unsigned integer type, and the representation of
498 the same value in each type is the same. A computation involving
499 unsigned operands can never overflow, because a result that cannot be
500 represented by the resulting unsigned integer type is reduced modulo
501 the number that is one greater than the largest value that can be
502 represented by the resulting type.
506 which I read as "unsigned ints wrap."
508 signed integer overflow seems to be classed as "exception condition"
510 If an exceptional condition occurs during the evaluation of an
511 expression (that is, if the result is not mathematically defined or not
512 in the range of representable values for its type), the behavior is
515 (6.5, the 5th paragraph)
517 I had assumed that on 2s complement machines signed arithmetic would
518 wrap, hence coded pp_add and pp_subtract on the assumption that
519 everything perl builds on would be happy. After much wailing and
520 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
521 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
522 unsigned code below is actually shorter than the old code. :-)
527 /* Unless the left argument is integer in range we are going to have to
528 use NV maths. Hence only attempt to coerce the right argument if
529 we know the left is integer. */
537 /* left operand is undef, treat as zero. + 0 is identity,
538 Could SETi or SETu right now, but space optimise by not adding
539 lots of code to speed up what is probably a rarish case. */
541 /* Left operand is defined, so is it IV? */
544 if ((auvok = SvUOK(TOPm1s)))
547 register const IV aiv = SvIVX(TOPm1s);
550 auvok = 1; /* Now acting as a sign flag. */
551 } else { /* 2s complement assumption for IV_MIN */
559 bool result_good = 0;
562 bool buvok = SvUOK(TOPs);
567 register const IV biv = SvIVX(TOPs);
574 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
575 else "IV" now, independent of how it came in.
576 if a, b represents positive, A, B negative, a maps to -A etc
581 all UV maths. negate result if A negative.
582 add if signs same, subtract if signs differ. */
588 /* Must get smaller */
594 /* result really should be -(auv-buv). as its negation
595 of true value, need to swap our result flag */
612 if (result <= (UV)IV_MIN)
615 /* result valid, but out of range for IV. */
620 } /* Overflow, drop through to NVs. */
627 /* left operand is undef, treat as zero. + 0.0 is identity. */
631 SETn( value + TOPn );
639 AV * const av = PL_op->op_flags & OPf_SPECIAL ?
640 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
641 const U32 lval = PL_op->op_flags & OPf_MOD;
642 SV** const svp = av_fetch(av, PL_op->op_private, lval);
643 SV *sv = (svp ? *svp : &PL_sv_undef);
645 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
646 sv = sv_mortalcopy(sv);
653 dVAR; dSP; dMARK; dTARGET;
655 do_join(TARG, *MARK, MARK, SP);
666 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
667 * will be enough to hold an OP*.
669 SV* const sv = sv_newmortal();
670 sv_upgrade(sv, SVt_PVLV);
672 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
680 /* Oversized hot code. */
684 dVAR; dSP; dMARK; dORIGMARK;
688 GV * const gv = (PL_op->op_flags & OPf_STACKED) ? (GV*)*++MARK : PL_defoutgv;
690 if (gv && (io = GvIO(gv))
691 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
694 if (MARK == ORIGMARK) {
695 /* If using default handle then we need to make space to
696 * pass object as 1st arg, so move other args up ...
700 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
704 *MARK = SvTIED_obj((SV*)io, mg);
707 call_method("PRINT", G_SCALAR);
715 if (!(io = GvIO(gv))) {
716 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
717 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
719 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
720 report_evil_fh(gv, io, PL_op->op_type);
721 SETERRNO(EBADF,RMS_IFI);
724 else if (!(fp = IoOFP(io))) {
725 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
727 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
728 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
729 report_evil_fh(gv, io, PL_op->op_type);
731 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
736 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
738 if (!do_print(*MARK, fp))
742 if (!do_print(PL_ofs_sv, fp)) { /* $, */
751 if (!do_print(*MARK, fp))
759 if (PL_op->op_type == OP_SAY) {
760 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
763 else if (PL_ors_sv && SvOK(PL_ors_sv))
764 if (!do_print(PL_ors_sv, fp)) /* $\ */
767 if (IoFLAGS(io) & IOf_FLUSH)
768 if (PerlIO_flush(fp) == EOF)
778 XPUSHs(&PL_sv_undef);
789 tryAMAGICunDEREF(to_av);
792 if (SvTYPE(av) != SVt_PVAV)
793 DIE(aTHX_ "Not an ARRAY reference");
794 if (PL_op->op_flags & OPf_REF) {
799 if (GIMME == G_SCALAR)
800 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
804 else if (PL_op->op_flags & OPf_MOD
805 && PL_op->op_private & OPpLVAL_INTRO)
806 Perl_croak(aTHX_ PL_no_localize_ref);
809 if (SvTYPE(sv) == SVt_PVAV) {
811 if (PL_op->op_flags & OPf_REF) {
816 if (GIMME == G_SCALAR)
817 Perl_croak(aTHX_ "Can't return array to lvalue"
826 if (SvTYPE(sv) != SVt_PVGV) {
827 if (SvGMAGICAL(sv)) {
833 if (PL_op->op_flags & OPf_REF ||
834 PL_op->op_private & HINT_STRICT_REFS)
835 DIE(aTHX_ PL_no_usym, "an ARRAY");
836 if (ckWARN(WARN_UNINITIALIZED))
838 if (GIMME == G_ARRAY) {
844 if ((PL_op->op_flags & OPf_SPECIAL) &&
845 !(PL_op->op_flags & OPf_MOD))
847 gv = (GV*)gv_fetchsv(sv, 0, SVt_PVAV);
849 && (!is_gv_magical_sv(sv,0)
850 || !(gv = (GV*)gv_fetchsv(sv, GV_ADD, SVt_PVAV))))
856 if (PL_op->op_private & HINT_STRICT_REFS)
857 DIE(aTHX_ PL_no_symref_sv, sv, "an ARRAY");
858 gv = (GV*)gv_fetchsv(sv, GV_ADD, SVt_PVAV);
865 if (PL_op->op_private & OPpLVAL_INTRO)
867 if (PL_op->op_flags & OPf_REF) {
872 if (GIMME == G_SCALAR)
873 Perl_croak(aTHX_ "Can't return array to lvalue"
881 if (GIMME == G_ARRAY) {
882 const I32 maxarg = AvFILL(av) + 1;
883 (void)POPs; /* XXXX May be optimized away? */
885 if (SvRMAGICAL(av)) {
887 for (i=0; i < (U32)maxarg; i++) {
888 SV ** const svp = av_fetch(av, i, FALSE);
889 /* See note in pp_helem, and bug id #27839 */
891 ? SvGMAGICAL(*svp) ? sv_mortalcopy(*svp) : *svp
896 Copy(AvARRAY(av), SP+1, maxarg, SV*);
900 else if (GIMME_V == G_SCALAR) {
902 const I32 maxarg = AvFILL(av) + 1;
912 const I32 gimme = GIMME_V;
913 static const char return_hash_to_lvalue_scalar[] = "Can't return hash to lvalue scalar context";
917 tryAMAGICunDEREF(to_hv);
920 if (SvTYPE(hv) != SVt_PVHV)
921 DIE(aTHX_ "Not a HASH reference");
922 if (PL_op->op_flags & OPf_REF) {
927 if (gimme != G_ARRAY)
928 Perl_croak(aTHX_ return_hash_to_lvalue_scalar );
932 else if (PL_op->op_flags & OPf_MOD
933 && PL_op->op_private & OPpLVAL_INTRO)
934 Perl_croak(aTHX_ PL_no_localize_ref);
937 if (SvTYPE(sv) == SVt_PVHV) {
939 if (PL_op->op_flags & OPf_REF) {
944 if (gimme != G_ARRAY)
945 Perl_croak(aTHX_ return_hash_to_lvalue_scalar );
953 if (SvTYPE(sv) != SVt_PVGV) {
954 if (SvGMAGICAL(sv)) {
960 if (PL_op->op_flags & OPf_REF ||
961 PL_op->op_private & HINT_STRICT_REFS)
962 DIE(aTHX_ PL_no_usym, "a HASH");
963 if (ckWARN(WARN_UNINITIALIZED))
965 if (gimme == G_ARRAY) {
971 if ((PL_op->op_flags & OPf_SPECIAL) &&
972 !(PL_op->op_flags & OPf_MOD))
974 gv = (GV*)gv_fetchsv(sv, 0, SVt_PVHV);
976 && (!is_gv_magical_sv(sv,0)
977 || !(gv = (GV*)gv_fetchsv(sv, GV_ADD, SVt_PVHV))))
983 if (PL_op->op_private & HINT_STRICT_REFS)
984 DIE(aTHX_ PL_no_symref_sv, sv, "a HASH");
985 gv = (GV*)gv_fetchsv(sv, GV_ADD, SVt_PVHV);
992 if (PL_op->op_private & OPpLVAL_INTRO)
994 if (PL_op->op_flags & OPf_REF) {
999 if (gimme != G_ARRAY)
1000 Perl_croak(aTHX_ return_hash_to_lvalue_scalar );
1007 if (gimme == G_ARRAY) { /* array wanted */
1008 *PL_stack_sp = (SV*)hv;
1011 else if (gimme == G_SCALAR) {
1013 TARG = Perl_hv_scalar(aTHX_ hv);
1020 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
1027 if (ckWARN(WARN_MISC)) {
1029 if (relem == firstrelem &&
1031 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
1032 SvTYPE(SvRV(*relem)) == SVt_PVHV))
1034 err = "Reference found where even-sized list expected";
1037 err = "Odd number of elements in hash assignment";
1038 Perl_warner(aTHX_ packWARN(WARN_MISC), err);
1042 didstore = hv_store_ent(hash,*relem,tmpstr,0);
1043 if (SvMAGICAL(hash)) {
1044 if (SvSMAGICAL(tmpstr))
1056 SV **lastlelem = PL_stack_sp;
1057 SV **lastrelem = PL_stack_base + POPMARK;
1058 SV **firstrelem = PL_stack_base + POPMARK + 1;
1059 SV **firstlelem = lastrelem + 1;
1061 register SV **relem;
1062 register SV **lelem;
1072 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
1075 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1078 /* If there's a common identifier on both sides we have to take
1079 * special care that assigning the identifier on the left doesn't
1080 * clobber a value on the right that's used later in the list.
1082 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1083 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1084 for (relem = firstrelem; relem <= lastrelem; relem++) {
1085 if ((sv = *relem)) {
1086 TAINT_NOT; /* Each item is independent */
1087 *relem = sv_mortalcopy(sv);
1091 if (PL_op->op_private & OPpASSIGN_STATE) {
1092 if (SvPADSTALE(*firstlelem))
1093 SvPADSTALE_off(*firstlelem);
1095 RETURN; /* ignore assignment */
1103 while (lelem <= lastlelem) {
1104 TAINT_NOT; /* Each item stands on its own, taintwise. */
1106 switch (SvTYPE(sv)) {
1109 magic = SvMAGICAL(ary) != 0;
1111 av_extend(ary, lastrelem - relem);
1113 while (relem <= lastrelem) { /* gobble up all the rest */
1116 sv = newSVsv(*relem);
1118 didstore = av_store(ary,i++,sv);
1128 case SVt_PVHV: { /* normal hash */
1132 magic = SvMAGICAL(hash) != 0;
1134 firsthashrelem = relem;
1136 while (relem < lastrelem) { /* gobble up all the rest */
1138 sv = *relem ? *relem : &PL_sv_no;
1142 sv_setsv(tmpstr,*relem); /* value */
1143 *(relem++) = tmpstr;
1144 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1145 /* key overwrites an existing entry */
1147 didstore = hv_store_ent(hash,sv,tmpstr,0);
1149 if (SvSMAGICAL(tmpstr))
1156 if (relem == lastrelem) {
1157 do_oddball(hash, relem, firstrelem);
1163 if (SvIMMORTAL(sv)) {
1164 if (relem <= lastrelem)
1168 if (relem <= lastrelem) {
1169 sv_setsv(sv, *relem);
1173 sv_setsv(sv, &PL_sv_undef);
1178 if (PL_delaymagic & ~DM_DELAY) {
1179 if (PL_delaymagic & DM_UID) {
1180 #ifdef HAS_SETRESUID
1181 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1182 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1185 # ifdef HAS_SETREUID
1186 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1187 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1190 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1191 (void)setruid(PL_uid);
1192 PL_delaymagic &= ~DM_RUID;
1194 # endif /* HAS_SETRUID */
1196 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1197 (void)seteuid(PL_euid);
1198 PL_delaymagic &= ~DM_EUID;
1200 # endif /* HAS_SETEUID */
1201 if (PL_delaymagic & DM_UID) {
1202 if (PL_uid != PL_euid)
1203 DIE(aTHX_ "No setreuid available");
1204 (void)PerlProc_setuid(PL_uid);
1206 # endif /* HAS_SETREUID */
1207 #endif /* HAS_SETRESUID */
1208 PL_uid = PerlProc_getuid();
1209 PL_euid = PerlProc_geteuid();
1211 if (PL_delaymagic & DM_GID) {
1212 #ifdef HAS_SETRESGID
1213 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1214 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1217 # ifdef HAS_SETREGID
1218 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1219 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1222 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1223 (void)setrgid(PL_gid);
1224 PL_delaymagic &= ~DM_RGID;
1226 # endif /* HAS_SETRGID */
1228 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1229 (void)setegid(PL_egid);
1230 PL_delaymagic &= ~DM_EGID;
1232 # endif /* HAS_SETEGID */
1233 if (PL_delaymagic & DM_GID) {
1234 if (PL_gid != PL_egid)
1235 DIE(aTHX_ "No setregid available");
1236 (void)PerlProc_setgid(PL_gid);
1238 # endif /* HAS_SETREGID */
1239 #endif /* HAS_SETRESGID */
1240 PL_gid = PerlProc_getgid();
1241 PL_egid = PerlProc_getegid();
1243 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1247 if (gimme == G_VOID)
1248 SP = firstrelem - 1;
1249 else if (gimme == G_SCALAR) {
1252 SETi(lastrelem - firstrelem + 1 - duplicates);
1259 /* Removes from the stack the entries which ended up as
1260 * duplicated keys in the hash (fix for [perl #24380]) */
1261 Move(firsthashrelem + duplicates,
1262 firsthashrelem, duplicates, SV**);
1263 lastrelem -= duplicates;
1268 SP = firstrelem + (lastlelem - firstlelem);
1269 lelem = firstlelem + (relem - firstrelem);
1271 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1279 register PMOP * const pm = cPMOP;
1280 SV * const rv = sv_newmortal();
1281 SV * const sv = newSVrv(rv, "Regexp");
1282 if (pm->op_pmdynflags & PMdf_TAINTED)
1284 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1291 register PMOP *pm = cPMOP;
1293 register const char *t;
1294 register const char *s;
1297 I32 r_flags = REXEC_CHECKED;
1298 const char *truebase; /* Start of string */
1299 register REGEXP *rx = PM_GETRE(pm);
1301 const I32 gimme = GIMME;
1304 const I32 oldsave = PL_savestack_ix;
1305 I32 update_minmatch = 1;
1306 I32 had_zerolen = 0;
1309 if (PL_op->op_flags & OPf_STACKED)
1311 else if (PL_op->op_private & OPpTARGET_MY)
1318 PUTBACK; /* EVAL blocks need stack_sp. */
1319 s = SvPV_const(TARG, len);
1321 DIE(aTHX_ "panic: pp_match");
1323 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1324 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1327 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1329 /* PMdf_USED is set after a ?? matches once */
1330 if (pm->op_pmdynflags & PMdf_USED) {
1332 if (gimme == G_ARRAY)
1337 /* empty pattern special-cased to use last successful pattern if possible */
1338 if (!rx->prelen && PL_curpm) {
1343 if (rx->minlen > (I32)len)
1348 /* XXXX What part of this is needed with true \G-support? */
1349 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1351 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1352 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1353 if (mg && mg->mg_len >= 0) {
1354 if (!(rx->extflags & RXf_GPOS_SEEN))
1355 rx->endp[0] = rx->startp[0] = mg->mg_len;
1356 else if (rx->extflags & RXf_ANCH_GPOS) {
1357 r_flags |= REXEC_IGNOREPOS;
1358 rx->endp[0] = rx->startp[0] = mg->mg_len;
1359 } else if (rx->extflags & RXf_GPOS_FLOAT)
1362 rx->endp[0] = rx->startp[0] = mg->mg_len;
1363 minmatch = (mg->mg_flags & MGf_MINMATCH) ? rx->gofs + 1 : 0;
1364 update_minmatch = 0;
1368 /* remove comment to get faster /g but possibly unsafe $1 vars after a
1369 match. Test for the unsafe vars will fail as well*/
1370 if (( /* !global && */ rx->nparens)
1371 || SvTEMP(TARG) || PL_sawampersand ||
1372 (pm->op_pmflags & (PMf_EVAL|PMf_KEEPCOPY)))
1373 r_flags |= REXEC_COPY_STR;
1375 r_flags |= REXEC_SCREAM;
1378 if (global && rx->startp[0] != -1) {
1379 t = s = rx->endp[0] + truebase - rx->gofs;
1380 if ((s + rx->minlen) > strend || s < truebase)
1382 if (update_minmatch++)
1383 minmatch = had_zerolen;
1385 if (rx->extflags & RXf_USE_INTUIT &&
1386 DO_UTF8(TARG) == ((rx->extflags & RXf_UTF8) != 0)) {
1387 /* FIXME - can PL_bostr be made const char *? */
1388 PL_bostr = (char *)truebase;
1389 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1393 if ( (rx->extflags & RXf_CHECK_ALL)
1395 && !(pm->op_pmflags & PMf_KEEPCOPY)
1396 && ((rx->extflags & RXf_NOSCAN)
1397 || !((rx->extflags & RXf_INTUIT_TAIL)
1398 && (r_flags & REXEC_SCREAM)))
1399 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1402 if (CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase, minmatch, TARG, INT2PTR(void*, gpos), r_flags))
1405 if (dynpm->op_pmflags & PMf_ONCE)
1406 dynpm->op_pmdynflags |= PMdf_USED;
1415 RX_MATCH_TAINTED_on(rx);
1416 TAINT_IF(RX_MATCH_TAINTED(rx));
1417 if (gimme == G_ARRAY) {
1418 const I32 nparens = rx->nparens;
1419 I32 i = (global && !nparens) ? 1 : 0;
1421 SPAGAIN; /* EVAL blocks could move the stack. */
1422 EXTEND(SP, nparens + i);
1423 EXTEND_MORTAL(nparens + i);
1424 for (i = !i; i <= nparens; i++) {
1425 PUSHs(sv_newmortal());
1426 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1427 const I32 len = rx->endp[i] - rx->startp[i];
1428 s = rx->startp[i] + truebase;
1429 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1430 len < 0 || len > strend - s)
1431 DIE(aTHX_ "panic: pp_match start/end pointers");
1432 sv_setpvn(*SP, s, len);
1433 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1438 if (dynpm->op_pmflags & PMf_CONTINUE) {
1440 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1441 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1443 #ifdef PERL_OLD_COPY_ON_WRITE
1445 sv_force_normal_flags(TARG, 0);
1447 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1448 &PL_vtbl_mglob, NULL, 0);
1450 if (rx->startp[0] != -1) {
1451 mg->mg_len = rx->endp[0];
1452 if (rx->startp[0] + rx->gofs == (UV)rx->endp[0])
1453 mg->mg_flags |= MGf_MINMATCH;
1455 mg->mg_flags &= ~MGf_MINMATCH;
1458 had_zerolen = (rx->startp[0] != -1
1459 && rx->startp[0] + rx->gofs == (UV)rx->endp[0]);
1460 PUTBACK; /* EVAL blocks may use stack */
1461 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1466 LEAVE_SCOPE(oldsave);
1472 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1473 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1477 #ifdef PERL_OLD_COPY_ON_WRITE
1479 sv_force_normal_flags(TARG, 0);
1481 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1482 &PL_vtbl_mglob, NULL, 0);
1484 if (rx->startp[0] != -1) {
1485 mg->mg_len = rx->endp[0];
1486 if (rx->startp[0] + rx->gofs == (UV)rx->endp[0])
1487 mg->mg_flags |= MGf_MINMATCH;
1489 mg->mg_flags &= ~MGf_MINMATCH;
1492 LEAVE_SCOPE(oldsave);
1496 yup: /* Confirmed by INTUIT */
1498 RX_MATCH_TAINTED_on(rx);
1499 TAINT_IF(RX_MATCH_TAINTED(rx));
1501 if (dynpm->op_pmflags & PMf_ONCE)
1502 dynpm->op_pmdynflags |= PMdf_USED;
1503 if (RX_MATCH_COPIED(rx))
1504 Safefree(rx->subbeg);
1505 RX_MATCH_COPIED_off(rx);
1508 /* FIXME - should rx->subbeg be const char *? */
1509 rx->subbeg = (char *) truebase;
1510 rx->startp[0] = s - truebase;
1511 if (RX_MATCH_UTF8(rx)) {
1512 char * const t = (char*)utf8_hop((U8*)s, rx->minlenret);
1513 rx->endp[0] = t - truebase;
1516 rx->endp[0] = s - truebase + rx->minlenret;
1518 rx->sublen = strend - truebase;
1521 if (PL_sawampersand || pm->op_pmflags & PMf_KEEPCOPY) {
1523 #ifdef PERL_OLD_COPY_ON_WRITE
1524 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1526 PerlIO_printf(Perl_debug_log,
1527 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1528 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1531 rx->saved_copy = sv_setsv_cow(rx->saved_copy, TARG);
1532 rx->subbeg = (char *) SvPVX_const(rx->saved_copy) + (t - truebase);
1533 assert (SvPOKp(rx->saved_copy));
1538 rx->subbeg = savepvn(t, strend - t);
1539 #ifdef PERL_OLD_COPY_ON_WRITE
1540 rx->saved_copy = NULL;
1543 rx->sublen = strend - t;
1544 RX_MATCH_COPIED_on(rx);
1545 off = rx->startp[0] = s - t;
1546 rx->endp[0] = off + rx->minlenret;
1548 else { /* startp/endp are used by @- @+. */
1549 rx->startp[0] = s - truebase;
1550 rx->endp[0] = s - truebase + rx->minlenret;
1552 /* including rx->nparens in the below code seems highly suspicious.
1554 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1555 LEAVE_SCOPE(oldsave);
1560 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1561 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1562 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1567 LEAVE_SCOPE(oldsave);
1568 if (gimme == G_ARRAY)
1574 Perl_do_readline(pTHX)
1576 dVAR; dSP; dTARGETSTACKED;
1581 register IO * const io = GvIO(PL_last_in_gv);
1582 register const I32 type = PL_op->op_type;
1583 const I32 gimme = GIMME_V;
1586 MAGIC * const mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar);
1589 XPUSHs(SvTIED_obj((SV*)io, mg));
1592 call_method("READLINE", gimme);
1595 if (gimme == G_SCALAR) {
1596 SV* const result = POPs;
1597 SvSetSV_nosteal(TARG, result);
1607 if (IoFLAGS(io) & IOf_ARGV) {
1608 if (IoFLAGS(io) & IOf_START) {
1610 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1611 IoFLAGS(io) &= ~IOf_START;
1612 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1613 sv_setpvn(GvSVn(PL_last_in_gv), "-", 1);
1614 SvSETMAGIC(GvSV(PL_last_in_gv));
1619 fp = nextargv(PL_last_in_gv);
1620 if (!fp) { /* Note: fp != IoIFP(io) */
1621 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1624 else if (type == OP_GLOB)
1625 fp = Perl_start_glob(aTHX_ POPs, io);
1627 else if (type == OP_GLOB)
1629 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1630 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1634 if ((!io || !(IoFLAGS(io) & IOf_START))
1635 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1637 if (type == OP_GLOB)
1638 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1639 "glob failed (can't start child: %s)",
1642 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1644 if (gimme == G_SCALAR) {
1645 /* undef TARG, and push that undefined value */
1646 if (type != OP_RCATLINE) {
1647 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1655 if (gimme == G_SCALAR) {
1657 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1660 if (type == OP_RCATLINE)
1661 SvPV_force_nolen(sv);
1665 else if (isGV_with_GP(sv)) {
1666 SvPV_force_nolen(sv);
1668 SvUPGRADE(sv, SVt_PV);
1669 tmplen = SvLEN(sv); /* remember if already alloced */
1670 if (!tmplen && !SvREADONLY(sv))
1671 Sv_Grow(sv, 80); /* try short-buffering it */
1673 if (type == OP_RCATLINE && SvOK(sv)) {
1675 SvPV_force_nolen(sv);
1681 sv = sv_2mortal(newSV(80));
1685 /* This should not be marked tainted if the fp is marked clean */
1686 #define MAYBE_TAINT_LINE(io, sv) \
1687 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1692 /* delay EOF state for a snarfed empty file */
1693 #define SNARF_EOF(gimme,rs,io,sv) \
1694 (gimme != G_SCALAR || SvCUR(sv) \
1695 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1699 if (!sv_gets(sv, fp, offset)
1701 || SNARF_EOF(gimme, PL_rs, io, sv)
1702 || PerlIO_error(fp)))
1704 PerlIO_clearerr(fp);
1705 if (IoFLAGS(io) & IOf_ARGV) {
1706 fp = nextargv(PL_last_in_gv);
1709 (void)do_close(PL_last_in_gv, FALSE);
1711 else if (type == OP_GLOB) {
1712 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1713 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1714 "glob failed (child exited with status %d%s)",
1715 (int)(STATUS_CURRENT >> 8),
1716 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1719 if (gimme == G_SCALAR) {
1720 if (type != OP_RCATLINE) {
1721 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1727 MAYBE_TAINT_LINE(io, sv);
1730 MAYBE_TAINT_LINE(io, sv);
1732 IoFLAGS(io) |= IOf_NOLINE;
1736 if (type == OP_GLOB) {
1739 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1740 char * const tmps = SvEND(sv) - 1;
1741 if (*tmps == *SvPVX_const(PL_rs)) {
1743 SvCUR_set(sv, SvCUR(sv) - 1);
1746 for (t1 = SvPVX_const(sv); *t1; t1++)
1747 if (!isALPHA(*t1) && !isDIGIT(*t1) &&
1748 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1750 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1751 (void)POPs; /* Unmatched wildcard? Chuck it... */
1754 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1755 if (ckWARN(WARN_UTF8)) {
1756 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1757 const STRLEN len = SvCUR(sv) - offset;
1760 if (!is_utf8_string_loc(s, len, &f))
1761 /* Emulate :encoding(utf8) warning in the same case. */
1762 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1763 "utf8 \"\\x%02X\" does not map to Unicode",
1764 f < (U8*)SvEND(sv) ? *f : 0);
1767 if (gimme == G_ARRAY) {
1768 if (SvLEN(sv) - SvCUR(sv) > 20) {
1769 SvPV_shrink_to_cur(sv);
1771 sv = sv_2mortal(newSV(80));
1774 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1775 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1776 const STRLEN new_len
1777 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1778 SvPV_renew(sv, new_len);
1787 register PERL_CONTEXT *cx;
1788 I32 gimme = OP_GIMME(PL_op, -1);
1791 if (cxstack_ix >= 0)
1792 gimme = cxstack[cxstack_ix].blk_gimme;
1800 PUSHBLOCK(cx, CXt_BLOCK, SP);
1810 SV * const keysv = POPs;
1811 HV * const hv = (HV*)POPs;
1812 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1813 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1815 const U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvSHARED_HASH(keysv) : 0;
1818 if (SvTYPE(hv) != SVt_PVHV)
1821 if (PL_op->op_private & OPpLVAL_INTRO) {
1824 /* does the element we're localizing already exist? */
1825 preeminent = /* can we determine whether it exists? */
1827 || mg_find((SV*)hv, PERL_MAGIC_env)
1828 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1829 /* Try to preserve the existenceness of a tied hash
1830 * element by using EXISTS and DELETE if possible.
1831 * Fallback to FETCH and STORE otherwise */
1832 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1833 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1834 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1836 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1838 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1839 svp = he ? &HeVAL(he) : NULL;
1841 if (!svp || *svp == &PL_sv_undef) {
1845 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1847 lv = sv_newmortal();
1848 sv_upgrade(lv, SVt_PVLV);
1850 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1851 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1852 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1857 if (PL_op->op_private & OPpLVAL_INTRO) {
1858 if (HvNAME_get(hv) && isGV(*svp))
1859 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1863 const char * const key = SvPV_const(keysv, keylen);
1864 SAVEDELETE(hv, savepvn(key,keylen),
1865 SvUTF8(keysv) ? -(I32)keylen : (I32)keylen);
1867 save_helem(hv, keysv, svp);
1870 else if (PL_op->op_private & OPpDEREF)
1871 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1873 sv = (svp ? *svp : &PL_sv_undef);
1874 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1875 * Pushing the magical RHS on to the stack is useless, since
1876 * that magic is soon destined to be misled by the local(),
1877 * and thus the later pp_sassign() will fail to mg_get() the
1878 * old value. This should also cure problems with delayed
1879 * mg_get()s. GSAR 98-07-03 */
1880 if (!lval && SvGMAGICAL(sv))
1881 sv = sv_mortalcopy(sv);
1889 register PERL_CONTEXT *cx;
1894 if (PL_op->op_flags & OPf_SPECIAL) {
1895 cx = &cxstack[cxstack_ix];
1896 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1901 gimme = OP_GIMME(PL_op, -1);
1903 if (cxstack_ix >= 0)
1904 gimme = cxstack[cxstack_ix].blk_gimme;
1910 if (gimme == G_VOID)
1912 else if (gimme == G_SCALAR) {
1916 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1919 *MARK = sv_mortalcopy(TOPs);
1922 *MARK = &PL_sv_undef;
1926 else if (gimme == G_ARRAY) {
1927 /* in case LEAVE wipes old return values */
1929 for (mark = newsp + 1; mark <= SP; mark++) {
1930 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1931 *mark = sv_mortalcopy(*mark);
1932 TAINT_NOT; /* Each item is independent */
1936 PL_curpm = newpm; /* Don't pop $1 et al till now */
1946 register PERL_CONTEXT *cx;
1952 cx = &cxstack[cxstack_ix];
1953 if (CxTYPE(cx) != CXt_LOOP)
1954 DIE(aTHX_ "panic: pp_iter");
1956 itersvp = CxITERVAR(cx);
1957 av = cx->blk_loop.iterary;
1958 if (SvTYPE(av) != SVt_PVAV) {
1959 /* iterate ($min .. $max) */
1960 if (cx->blk_loop.iterlval) {
1961 /* string increment */
1962 register SV* cur = cx->blk_loop.iterlval;
1966 SvPV_const((SV*)av, maxlen) : (const char *)"";
1967 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1968 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1969 /* safe to reuse old SV */
1970 sv_setsv(*itersvp, cur);
1974 /* we need a fresh SV every time so that loop body sees a
1975 * completely new SV for closures/references to work as
1978 *itersvp = newSVsv(cur);
1979 SvREFCNT_dec(oldsv);
1981 if (strEQ(SvPVX_const(cur), max))
1982 sv_setiv(cur, 0); /* terminate next time */
1989 /* integer increment */
1990 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1993 /* don't risk potential race */
1994 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1995 /* safe to reuse old SV */
1996 sv_setiv(*itersvp, cx->blk_loop.iterix++);
2000 /* we need a fresh SV every time so that loop body sees a
2001 * completely new SV for closures/references to work as they
2004 *itersvp = newSViv(cx->blk_loop.iterix++);
2005 SvREFCNT_dec(oldsv);
2011 if (PL_op->op_private & OPpITER_REVERSED) {
2012 /* In reverse, use itermax as the min :-) */
2013 if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
2016 if (SvMAGICAL(av) || AvREIFY(av)) {
2017 SV * const * const svp = av_fetch(av, --cx->blk_loop.iterix, FALSE);
2018 sv = svp ? *svp : NULL;
2021 sv = AvARRAY(av)[--cx->blk_loop.iterix];
2025 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp :
2029 if (SvMAGICAL(av) || AvREIFY(av)) {
2030 SV * const * const svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
2031 sv = svp ? *svp : NULL;
2034 sv = AvARRAY(av)[++cx->blk_loop.iterix];
2038 if (sv && SvIS_FREED(sv)) {
2040 Perl_croak(aTHX_ "Use of freed value in iteration");
2047 if (av != PL_curstack && sv == &PL_sv_undef) {
2048 SV *lv = cx->blk_loop.iterlval;
2049 if (lv && SvREFCNT(lv) > 1) {
2054 SvREFCNT_dec(LvTARG(lv));
2056 lv = cx->blk_loop.iterlval = newSV(0);
2057 sv_upgrade(lv, SVt_PVLV);
2059 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2061 LvTARG(lv) = SvREFCNT_inc_simple(av);
2062 LvTARGOFF(lv) = cx->blk_loop.iterix;
2063 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2068 *itersvp = SvREFCNT_inc_simple_NN(sv);
2069 SvREFCNT_dec(oldsv);
2077 register PMOP *pm = cPMOP;
2092 register REGEXP *rx = PM_GETRE(pm);
2094 int force_on_match = 0;
2095 const I32 oldsave = PL_savestack_ix;
2097 bool doutf8 = FALSE;
2098 #ifdef PERL_OLD_COPY_ON_WRITE
2103 /* known replacement string? */
2104 register SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2105 if (PL_op->op_flags & OPf_STACKED)
2107 else if (PL_op->op_private & OPpTARGET_MY)
2114 #ifdef PERL_OLD_COPY_ON_WRITE
2115 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2116 because they make integers such as 256 "false". */
2117 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2120 sv_force_normal_flags(TARG,0);
2123 #ifdef PERL_OLD_COPY_ON_WRITE
2127 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2128 || SvTYPE(TARG) > SVt_PVLV)
2129 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2130 DIE(aTHX_ PL_no_modify);
2133 s = SvPV_mutable(TARG, len);
2134 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2136 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
2137 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2142 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2146 DIE(aTHX_ "panic: pp_subst");
2149 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2150 maxiters = 2 * slen + 10; /* We can match twice at each
2151 position, once with zero-length,
2152 second time with non-zero. */
2154 if (!rx->prelen && PL_curpm) {
2158 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand
2159 || (pm->op_pmflags & (PMf_EVAL|PMf_KEEPCOPY)) )
2160 ? REXEC_COPY_STR : 0;
2162 r_flags |= REXEC_SCREAM;
2165 if (rx->extflags & RXf_USE_INTUIT) {
2167 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2171 /* How to do it in subst? */
2172 /* if ( (rx->extflags & RXf_CHECK_ALL)
2174 && !(pm->op_pmflags & PMf_KEEPCOPY)
2175 && ((rx->extflags & RXf_NOSCAN)
2176 || !((rx->extflags & RXf_INTUIT_TAIL)
2177 && (r_flags & REXEC_SCREAM))))
2182 /* only replace once? */
2183 once = !(rpm->op_pmflags & PMf_GLOBAL);
2185 /* known replacement string? */
2187 /* replacement needing upgrading? */
2188 if (DO_UTF8(TARG) && !doutf8) {
2189 nsv = sv_newmortal();
2192 sv_recode_to_utf8(nsv, PL_encoding);
2194 sv_utf8_upgrade(nsv);
2195 c = SvPV_const(nsv, clen);
2199 c = SvPV_const(dstr, clen);
2200 doutf8 = DO_UTF8(dstr);
2208 /* can do inplace substitution? */
2210 #ifdef PERL_OLD_COPY_ON_WRITE
2213 && (I32)clen <= rx->minlenret && (once || !(r_flags & REXEC_COPY_STR))
2214 && !(rx->extflags & RXf_LOOKBEHIND_SEEN)
2215 && (!doutf8 || SvUTF8(TARG))) {
2216 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2217 r_flags | REXEC_CHECKED))
2221 LEAVE_SCOPE(oldsave);
2224 #ifdef PERL_OLD_COPY_ON_WRITE
2225 if (SvIsCOW(TARG)) {
2226 assert (!force_on_match);
2230 if (force_on_match) {
2232 s = SvPV_force(TARG, len);
2237 SvSCREAM_off(TARG); /* disable possible screamer */
2239 rxtainted |= RX_MATCH_TAINTED(rx);
2240 m = orig + rx->startp[0];
2241 d = orig + rx->endp[0];
2243 if (m - s > strend - d) { /* faster to shorten from end */
2245 Copy(c, m, clen, char);
2250 Move(d, m, i, char);
2254 SvCUR_set(TARG, m - s);
2256 else if ((i = m - s)) { /* faster from front */
2264 Copy(c, m, clen, char);
2269 Copy(c, d, clen, char);
2274 TAINT_IF(rxtainted & 1);
2280 if (iters++ > maxiters)
2281 DIE(aTHX_ "Substitution loop");
2282 rxtainted |= RX_MATCH_TAINTED(rx);
2283 m = rx->startp[0] + orig;
2286 Move(s, d, i, char);
2290 Copy(c, d, clen, char);
2293 s = rx->endp[0] + orig;
2294 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2296 /* don't match same null twice */
2297 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2300 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2301 Move(s, d, i+1, char); /* include the NUL */
2303 TAINT_IF(rxtainted & 1);
2305 PUSHs(sv_2mortal(newSViv((I32)iters)));
2307 (void)SvPOK_only_UTF8(TARG);
2308 TAINT_IF(rxtainted);
2309 if (SvSMAGICAL(TARG)) {
2317 LEAVE_SCOPE(oldsave);
2321 if (CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2322 r_flags | REXEC_CHECKED))
2324 if (force_on_match) {
2326 s = SvPV_force(TARG, len);
2329 #ifdef PERL_OLD_COPY_ON_WRITE
2332 rxtainted |= RX_MATCH_TAINTED(rx);
2333 dstr = newSVpvn(m, s-m);
2339 register PERL_CONTEXT *cx;
2342 RETURNOP(cPMOP->op_pmreplroot);
2344 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2346 if (iters++ > maxiters)
2347 DIE(aTHX_ "Substitution loop");
2348 rxtainted |= RX_MATCH_TAINTED(rx);
2349 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2354 strend = s + (strend - m);
2356 m = rx->startp[0] + orig;
2357 if (doutf8 && !SvUTF8(dstr))
2358 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2360 sv_catpvn(dstr, s, m-s);
2361 s = rx->endp[0] + orig;
2363 sv_catpvn(dstr, c, clen);
2366 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2367 TARG, NULL, r_flags));
2368 if (doutf8 && !DO_UTF8(TARG))
2369 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2371 sv_catpvn(dstr, s, strend - s);
2373 #ifdef PERL_OLD_COPY_ON_WRITE
2374 /* The match may make the string COW. If so, brilliant, because that's
2375 just saved us one malloc, copy and free - the regexp has donated
2376 the old buffer, and we malloc an entirely new one, rather than the
2377 regexp malloc()ing a buffer and copying our original, only for
2378 us to throw it away here during the substitution. */
2379 if (SvIsCOW(TARG)) {
2380 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2386 SvPV_set(TARG, SvPVX(dstr));
2387 SvCUR_set(TARG, SvCUR(dstr));
2388 SvLEN_set(TARG, SvLEN(dstr));
2389 doutf8 |= DO_UTF8(dstr);
2390 SvPV_set(dstr, NULL);
2392 TAINT_IF(rxtainted & 1);
2394 PUSHs(sv_2mortal(newSViv((I32)iters)));
2396 (void)SvPOK_only(TARG);
2399 TAINT_IF(rxtainted);
2402 LEAVE_SCOPE(oldsave);
2411 LEAVE_SCOPE(oldsave);
2420 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2421 ++*PL_markstack_ptr;
2422 LEAVE; /* exit inner scope */
2425 if (PL_stack_base + *PL_markstack_ptr > SP) {
2427 const I32 gimme = GIMME_V;
2429 LEAVE; /* exit outer scope */
2430 (void)POPMARK; /* pop src */
2431 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2432 (void)POPMARK; /* pop dst */
2433 SP = PL_stack_base + POPMARK; /* pop original mark */
2434 if (gimme == G_SCALAR) {
2435 if (PL_op->op_private & OPpGREP_LEX) {
2436 SV* const sv = sv_newmortal();
2437 sv_setiv(sv, items);
2445 else if (gimme == G_ARRAY)
2452 ENTER; /* enter inner scope */
2455 src = PL_stack_base[*PL_markstack_ptr];
2457 if (PL_op->op_private & OPpGREP_LEX)
2458 PAD_SVl(PL_op->op_targ) = src;
2462 RETURNOP(cLOGOP->op_other);
2473 register PERL_CONTEXT *cx;
2476 if (CxMULTICALL(&cxstack[cxstack_ix]))
2480 cxstack_ix++; /* temporarily protect top context */
2483 if (gimme == G_SCALAR) {
2486 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2488 *MARK = SvREFCNT_inc(TOPs);
2493 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2495 *MARK = sv_mortalcopy(sv);
2500 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2504 *MARK = &PL_sv_undef;
2508 else if (gimme == G_ARRAY) {
2509 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2510 if (!SvTEMP(*MARK)) {
2511 *MARK = sv_mortalcopy(*MARK);
2512 TAINT_NOT; /* Each item is independent */
2520 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2521 PL_curpm = newpm; /* ... and pop $1 et al */
2524 return cx->blk_sub.retop;
2527 /* This duplicates the above code because the above code must not
2528 * get any slower by more conditions */
2536 register PERL_CONTEXT *cx;
2539 if (CxMULTICALL(&cxstack[cxstack_ix]))
2543 cxstack_ix++; /* temporarily protect top context */
2547 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2548 /* We are an argument to a function or grep().
2549 * This kind of lvalueness was legal before lvalue
2550 * subroutines too, so be backward compatible:
2551 * cannot report errors. */
2553 /* Scalar context *is* possible, on the LHS of -> only,
2554 * as in f()->meth(). But this is not an lvalue. */
2555 if (gimme == G_SCALAR)
2557 if (gimme == G_ARRAY) {
2558 if (!CvLVALUE(cx->blk_sub.cv))
2559 goto temporise_array;
2560 EXTEND_MORTAL(SP - newsp);
2561 for (mark = newsp + 1; mark <= SP; mark++) {
2564 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2565 *mark = sv_mortalcopy(*mark);
2567 /* Can be a localized value subject to deletion. */
2568 PL_tmps_stack[++PL_tmps_ix] = *mark;
2569 SvREFCNT_inc_void(*mark);
2574 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2575 /* Here we go for robustness, not for speed, so we change all
2576 * the refcounts so the caller gets a live guy. Cannot set
2577 * TEMP, so sv_2mortal is out of question. */
2578 if (!CvLVALUE(cx->blk_sub.cv)) {
2584 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2586 if (gimme == G_SCALAR) {
2590 /* Temporaries are bad unless they happen to be elements
2591 * of a tied hash or array */
2592 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY) &&
2593 !(SvRMAGICAL(TOPs) && mg_find(TOPs, PERL_MAGIC_tiedelem))) {
2599 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2600 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2601 : "a readonly value" : "a temporary");
2603 else { /* Can be a localized value
2604 * subject to deletion. */
2605 PL_tmps_stack[++PL_tmps_ix] = *mark;
2606 SvREFCNT_inc_void(*mark);
2609 else { /* Should not happen? */
2615 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2616 (MARK > SP ? "Empty array" : "Array"));
2620 else if (gimme == G_ARRAY) {
2621 EXTEND_MORTAL(SP - newsp);
2622 for (mark = newsp + 1; mark <= SP; mark++) {
2623 if (*mark != &PL_sv_undef
2624 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2625 /* Might be flattened array after $#array = */
2632 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2633 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2636 /* Can be a localized value subject to deletion. */
2637 PL_tmps_stack[++PL_tmps_ix] = *mark;
2638 SvREFCNT_inc_void(*mark);
2644 if (gimme == G_SCALAR) {
2648 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2650 *MARK = SvREFCNT_inc(TOPs);
2655 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2657 *MARK = sv_mortalcopy(sv);
2662 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2666 *MARK = &PL_sv_undef;
2670 else if (gimme == G_ARRAY) {
2672 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2673 if (!SvTEMP(*MARK)) {
2674 *MARK = sv_mortalcopy(*MARK);
2675 TAINT_NOT; /* Each item is independent */
2684 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2685 PL_curpm = newpm; /* ... and pop $1 et al */
2688 return cx->blk_sub.retop;
2696 register PERL_CONTEXT *cx;
2698 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2701 DIE(aTHX_ "Not a CODE reference");
2702 switch (SvTYPE(sv)) {
2703 /* This is overwhelming the most common case: */
2705 if (!(cv = GvCVu((GV*)sv))) {
2707 cv = sv_2cv(sv, &stash, &gv, 0);
2719 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2721 SP = PL_stack_base + POPMARK;
2724 if (SvGMAGICAL(sv)) {
2729 sym = SvPVX_const(sv);
2737 sym = SvPV_const(sv, len);
2740 DIE(aTHX_ PL_no_usym, "a subroutine");
2741 if (PL_op->op_private & HINT_STRICT_REFS)
2742 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2743 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2748 SV * const * sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2749 tryAMAGICunDEREF(to_cv);
2752 if (SvTYPE(cv) == SVt_PVCV)
2757 DIE(aTHX_ "Not a CODE reference");
2758 /* This is the second most common case: */
2768 if (!CvROOT(cv) && !CvXSUB(cv)) {
2772 /* anonymous or undef'd function leaves us no recourse */
2773 if (CvANON(cv) || !(gv = CvGV(cv)))
2774 DIE(aTHX_ "Undefined subroutine called");
2776 /* autoloaded stub? */
2777 if (cv != GvCV(gv)) {
2780 /* should call AUTOLOAD now? */
2783 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2790 sub_name = sv_newmortal();
2791 gv_efullname3(sub_name, gv, NULL);
2792 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2796 DIE(aTHX_ "Not a CODE reference");
2801 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2802 if (CvASSERTION(cv) && PL_DBassertion)
2803 sv_setiv(PL_DBassertion, 1);
2805 Perl_get_db_sub(aTHX_ &sv, cv);
2807 PL_curcopdb = PL_curcop;
2808 cv = GvCV(PL_DBsub);
2810 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2811 DIE(aTHX_ "No DB::sub routine defined");
2814 if (!(CvISXSUB(cv))) {
2815 /* This path taken at least 75% of the time */
2817 register I32 items = SP - MARK;
2818 AV* const padlist = CvPADLIST(cv);
2819 PUSHBLOCK(cx, CXt_SUB, MARK);
2821 cx->blk_sub.retop = PL_op->op_next;
2823 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2824 * that eval'' ops within this sub know the correct lexical space.
2825 * Owing the speed considerations, we choose instead to search for
2826 * the cv using find_runcv() when calling doeval().
2828 if (CvDEPTH(cv) >= 2) {
2829 PERL_STACK_OVERFLOW_CHECK();
2830 pad_push(padlist, CvDEPTH(cv));
2833 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2835 AV* const av = (AV*)PAD_SVl(0);
2837 /* @_ is normally not REAL--this should only ever
2838 * happen when DB::sub() calls things that modify @_ */
2843 cx->blk_sub.savearray = GvAV(PL_defgv);
2844 GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av);
2845 CX_CURPAD_SAVE(cx->blk_sub);
2846 cx->blk_sub.argarray = av;
2849 if (items > AvMAX(av) + 1) {
2850 SV **ary = AvALLOC(av);
2851 if (AvARRAY(av) != ary) {
2852 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2855 if (items > AvMAX(av) + 1) {
2856 AvMAX(av) = items - 1;
2857 Renew(ary,items,SV*);
2862 Copy(MARK,AvARRAY(av),items,SV*);
2863 AvFILLp(av) = items - 1;
2871 /* warning must come *after* we fully set up the context
2872 * stuff so that __WARN__ handlers can safely dounwind()
2875 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2876 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2877 sub_crush_depth(cv);
2879 DEBUG_S(PerlIO_printf(Perl_debug_log,
2880 "%p entersub returning %p\n", (void*)thr, (void*)CvSTART(cv)));
2882 RETURNOP(CvSTART(cv));
2885 I32 markix = TOPMARK;
2890 /* Need to copy @_ to stack. Alternative may be to
2891 * switch stack to @_, and copy return values
2892 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2893 AV * const av = GvAV(PL_defgv);
2894 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2897 /* Mark is at the end of the stack. */
2899 Copy(AvARRAY(av), SP + 1, items, SV*);
2904 /* We assume first XSUB in &DB::sub is the called one. */
2906 SAVEVPTR(PL_curcop);
2907 PL_curcop = PL_curcopdb;
2910 /* Do we need to open block here? XXXX */
2911 if (CvXSUB(cv)) /* XXX this is supposed to be true */
2912 (void)(*CvXSUB(cv))(aTHX_ cv);
2914 /* Enforce some sanity in scalar context. */
2915 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2916 if (markix > PL_stack_sp - PL_stack_base)
2917 *(PL_stack_base + markix) = &PL_sv_undef;
2919 *(PL_stack_base + markix) = *PL_stack_sp;
2920 PL_stack_sp = PL_stack_base + markix;
2928 Perl_sub_crush_depth(pTHX_ CV *cv)
2931 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2933 SV* const tmpstr = sv_newmortal();
2934 gv_efullname3(tmpstr, CvGV(cv), NULL);
2935 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2944 SV* const elemsv = POPs;
2945 IV elem = SvIV(elemsv);
2946 AV* const av = (AV*)POPs;
2947 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2948 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2951 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2952 Perl_warner(aTHX_ packWARN(WARN_MISC),
2953 "Use of reference \"%"SVf"\" as array index",
2956 elem -= CopARYBASE_get(PL_curcop);
2957 if (SvTYPE(av) != SVt_PVAV)
2959 svp = av_fetch(av, elem, lval && !defer);
2961 #ifdef PERL_MALLOC_WRAP
2962 if (SvUOK(elemsv)) {
2963 const UV uv = SvUV(elemsv);
2964 elem = uv > IV_MAX ? IV_MAX : uv;
2966 else if (SvNOK(elemsv))
2967 elem = (IV)SvNV(elemsv);
2969 static const char oom_array_extend[] =
2970 "Out of memory during array extend"; /* Duplicated in av.c */
2971 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2974 if (!svp || *svp == &PL_sv_undef) {
2977 DIE(aTHX_ PL_no_aelem, elem);
2978 lv = sv_newmortal();
2979 sv_upgrade(lv, SVt_PVLV);
2981 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2982 LvTARG(lv) = SvREFCNT_inc_simple(av);
2983 LvTARGOFF(lv) = elem;
2988 if (PL_op->op_private & OPpLVAL_INTRO)
2989 save_aelem(av, elem, svp);
2990 else if (PL_op->op_private & OPpDEREF)
2991 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2993 sv = (svp ? *svp : &PL_sv_undef);
2994 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2995 sv = sv_mortalcopy(sv);
3001 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3006 Perl_croak(aTHX_ PL_no_modify);
3007 if (SvTYPE(sv) < SVt_RV)
3008 sv_upgrade(sv, SVt_RV);
3009 else if (SvTYPE(sv) >= SVt_PV) {
3016 SvRV_set(sv, newSV(0));
3019 SvRV_set(sv, (SV*)newAV());
3022 SvRV_set(sv, (SV*)newHV());
3033 SV* const sv = TOPs;
3036 SV* const rsv = SvRV(sv);
3037 if (SvTYPE(rsv) == SVt_PVCV) {
3043 SETs(method_common(sv, NULL));
3050 SV* const sv = cSVOP_sv;
3051 U32 hash = SvSHARED_HASH(sv);
3053 XPUSHs(method_common(sv, &hash));
3058 S_method_common(pTHX_ SV* meth, U32* hashp)
3065 const char* packname = NULL;
3068 const char * const name = SvPV_const(meth, namelen);
3069 SV * const sv = *(PL_stack_base + TOPMARK + 1);
3072 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3080 /* this isn't a reference */
3081 if(SvOK(sv) && (packname = SvPV_const(sv, packlen))) {
3082 const HE* const he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3084 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3091 !(iogv = gv_fetchsv(sv, 0, SVt_PVIO)) ||
3092 !(ob=(SV*)GvIO(iogv)))
3094 /* this isn't the name of a filehandle either */
3096 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3097 ? !isIDFIRST_utf8((U8*)packname)
3098 : !isIDFIRST(*packname)
3101 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3102 SvOK(sv) ? "without a package or object reference"
3103 : "on an undefined value");
3105 /* assume it's a package name */
3106 stash = gv_stashpvn(packname, packlen, FALSE);
3110 SV* const ref = newSViv(PTR2IV(stash));
3111 hv_store(PL_stashcache, packname, packlen, ref, 0);
3115 /* it _is_ a filehandle name -- replace with a reference */
3116 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3119 /* if we got here, ob should be a reference or a glob */
3120 if (!ob || !(SvOBJECT(ob)
3121 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3124 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3128 stash = SvSTASH(ob);
3131 /* NOTE: stash may be null, hope hv_fetch_ent and
3132 gv_fetchmethod can cope (it seems they can) */
3134 /* shortcut for simple names */
3136 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3138 gv = (GV*)HeVAL(he);
3139 if (isGV(gv) && GvCV(gv) &&
3140 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3141 return (SV*)GvCV(gv);
3145 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3148 /* This code tries to figure out just what went wrong with
3149 gv_fetchmethod. It therefore needs to duplicate a lot of
3150 the internals of that function. We can't move it inside
3151 Perl_gv_fetchmethod_autoload(), however, since that would
3152 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3155 const char* leaf = name;
3156 const char* sep = NULL;
3159 for (p = name; *p; p++) {
3161 sep = p, leaf = p + 1;
3162 else if (*p == ':' && *(p + 1) == ':')
3163 sep = p, leaf = p + 2;
3165 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3166 /* the method name is unqualified or starts with SUPER:: */
3167 bool need_strlen = 1;
3169 packname = CopSTASHPV(PL_curcop);
3172 HEK * const packhek = HvNAME_HEK(stash);
3174 packname = HEK_KEY(packhek);
3175 packlen = HEK_LEN(packhek);
3185 "Can't use anonymous symbol table for method lookup");
3187 else if (need_strlen)
3188 packlen = strlen(packname);
3192 /* the method name is qualified */
3194 packlen = sep - name;
3197 /* we're relying on gv_fetchmethod not autovivifying the stash */
3198 if (gv_stashpvn(packname, packlen, FALSE)) {
3200 "Can't locate object method \"%s\" via package \"%.*s\"",
3201 leaf, (int)packlen, packname);
3205 "Can't locate object method \"%s\" via package \"%.*s\""
3206 " (perhaps you forgot to load \"%.*s\"?)",
3207 leaf, (int)packlen, packname, (int)packlen, packname);
3210 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3215 * c-indentation-style: bsd
3217 * indent-tabs-mode: t
3220 * ex: set ts=8 sts=4 sw=4 noet: