3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 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
38 #ifdef USE_5005THREADS
39 static void unset_cvowner(pTHX_ void *cvarg);
40 #endif /* USE_5005THREADS */
51 PL_curcop = (COP*)PL_op;
52 TAINT_NOT; /* Each statement is presumed innocent */
53 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
62 if (PL_op->op_private & OPpLVAL_INTRO)
63 PUSHs(save_scalar(cGVOP_gv));
65 PUSHs(GvSV(cGVOP_gv));
76 PL_curcop = (COP*)PL_op;
82 PUSHMARK(PL_stack_sp);
97 XPUSHs((SV*)cGVOP_gv);
108 RETURNOP(cLOGOP->op_other);
116 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
118 temp = left; left = right; right = temp;
120 if (PL_tainting && PL_tainted && !SvTAINTED(left))
122 SvSetMagicSV(right, left);
131 RETURNOP(cLOGOP->op_other);
133 RETURNOP(cLOGOP->op_next);
139 TAINT_NOT; /* Each statement is presumed innocent */
140 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
142 oldsave = PL_scopestack[PL_scopestack_ix - 1];
143 LEAVE_SCOPE(oldsave);
149 dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
156 char* rpv = SvPV(right, rlen); /* mg_get(right) happens here */
157 bool rbyte = !DO_UTF8(right), rcopied = FALSE;
159 if (TARG == right && right != left) {
160 right = sv_2mortal(newSVpvn(rpv, rlen));
161 rpv = SvPV(right, rlen); /* no point setting UTF-8 here */
166 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
167 lbyte = !DO_UTF8(left);
168 sv_setpvn(TARG, lpv, llen);
174 else { /* TARG == left */
175 if (SvGMAGICAL(left))
176 mg_get(left); /* or mg_get(left) may happen here */
179 lpv = SvPV_nomg(left, llen);
180 lbyte = !DO_UTF8(left);
185 #if defined(PERL_Y2KWARN)
186 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
187 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
188 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
190 Perl_warner(aTHX_ packWARN(WARN_Y2K), "Possible Y2K bug: %s",
191 "about to append an integer to '19'");
196 if (lbyte != rbyte) {
198 sv_utf8_upgrade_nomg(TARG);
201 right = sv_2mortal(newSVpvn(rpv, rlen));
202 sv_utf8_upgrade_nomg(right);
203 rpv = SvPV(right, rlen);
206 sv_catpvn_nomg(TARG, rpv, rlen);
217 if (PL_op->op_flags & OPf_MOD) {
218 if (PL_op->op_private & OPpLVAL_INTRO)
219 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
220 else if (PL_op->op_private & OPpDEREF) {
222 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
231 tryAMAGICunTARGET(iter, 0);
232 PL_last_in_gv = (GV*)(*PL_stack_sp--);
233 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
234 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
235 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
238 XPUSHs((SV*)PL_last_in_gv);
241 PL_last_in_gv = (GV*)(*PL_stack_sp--);
244 return do_readline();
249 dSP; tryAMAGICbinSET(eq,0);
250 #ifndef NV_PRESERVES_UV
251 if (SvROK(TOPs) && !SvAMAGIC(TOPs) && SvROK(TOPm1s) && !SvAMAGIC(TOPm1s)) {
253 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
257 #ifdef PERL_PRESERVE_IVUV
260 /* Unless the left argument is integer in range we are going
261 to have to use NV maths. Hence only attempt to coerce the
262 right argument if we know the left is integer. */
265 bool auvok = SvUOK(TOPm1s);
266 bool buvok = SvUOK(TOPs);
268 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
269 /* Casting IV to UV before comparison isn't going to matter
270 on 2s complement. On 1s complement or sign&magnitude
271 (if we have any of them) it could to make negative zero
272 differ from normal zero. As I understand it. (Need to
273 check - is negative zero implementation defined behaviour
275 UV buv = SvUVX(POPs);
276 UV auv = SvUVX(TOPs);
278 SETs(boolSV(auv == buv));
281 { /* ## Mixed IV,UV ## */
285 /* == is commutative so doesn't matter which is left or right */
287 /* top of stack (b) is the iv */
296 /* As uv is a UV, it's >0, so it cannot be == */
300 /* we know iv is >= 0 */
301 SETs(boolSV((UV)iv == SvUVX(uvp)));
309 SETs(boolSV(TOPn == value));
317 if (SvTYPE(TOPs) > SVt_PVLV)
318 DIE(aTHX_ PL_no_modify);
319 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
320 && SvIVX(TOPs) != IV_MAX)
323 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
325 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
338 RETURNOP(cLOGOP->op_other);
344 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
345 useleft = USE_LEFT(TOPm1s);
346 #ifdef PERL_PRESERVE_IVUV
347 /* We must see if we can perform the addition with integers if possible,
348 as the integer code detects overflow while the NV code doesn't.
349 If either argument hasn't had a numeric conversion yet attempt to get
350 the IV. It's important to do this now, rather than just assuming that
351 it's not IOK as a PV of "9223372036854775806" may not take well to NV
352 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
353 integer in case the second argument is IV=9223372036854775806
354 We can (now) rely on sv_2iv to do the right thing, only setting the
355 public IOK flag if the value in the NV (or PV) slot is truly integer.
357 A side effect is that this also aggressively prefers integer maths over
358 fp maths for integer values.
360 How to detect overflow?
362 C 99 section 6.2.6.1 says
364 The range of nonnegative values of a signed integer type is a subrange
365 of the corresponding unsigned integer type, and the representation of
366 the same value in each type is the same. A computation involving
367 unsigned operands can never overflow, because a result that cannot be
368 represented by the resulting unsigned integer type is reduced modulo
369 the number that is one greater than the largest value that can be
370 represented by the resulting type.
374 which I read as "unsigned ints wrap."
376 signed integer overflow seems to be classed as "exception condition"
378 If an exceptional condition occurs during the evaluation of an
379 expression (that is, if the result is not mathematically defined or not
380 in the range of representable values for its type), the behavior is
383 (6.5, the 5th paragraph)
385 I had assumed that on 2s complement machines signed arithmetic would
386 wrap, hence coded pp_add and pp_subtract on the assumption that
387 everything perl builds on would be happy. After much wailing and
388 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
389 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
390 unsigned code below is actually shorter than the old code. :-)
395 /* Unless the left argument is integer in range we are going to have to
396 use NV maths. Hence only attempt to coerce the right argument if
397 we know the left is integer. */
405 /* left operand is undef, treat as zero. + 0 is identity,
406 Could SETi or SETu right now, but space optimise by not adding
407 lots of code to speed up what is probably a rarish case. */
409 /* Left operand is defined, so is it IV? */
412 if ((auvok = SvUOK(TOPm1s)))
415 register IV aiv = SvIVX(TOPm1s);
418 auvok = 1; /* Now acting as a sign flag. */
419 } else { /* 2s complement assumption for IV_MIN */
427 bool result_good = 0;
430 bool buvok = SvUOK(TOPs);
435 register IV biv = SvIVX(TOPs);
442 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
443 else "IV" now, independent of how it came in.
444 if a, b represents positive, A, B negative, a maps to -A etc
449 all UV maths. negate result if A negative.
450 add if signs same, subtract if signs differ. */
456 /* Must get smaller */
462 /* result really should be -(auv-buv). as its negation
463 of true value, need to swap our result flag */
480 if (result <= (UV)IV_MIN)
483 /* result valid, but out of range for IV. */
488 } /* Overflow, drop through to NVs. */
495 /* left operand is undef, treat as zero. + 0.0 is identity. */
499 SETn( value + TOPn );
507 AV *av = PL_op->op_flags & OPf_SPECIAL ?
508 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
509 U32 lval = PL_op->op_flags & OPf_MOD;
510 SV** svp = av_fetch(av, PL_op->op_private, lval);
511 SV *sv = (svp ? *svp : &PL_sv_undef);
513 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
514 sv = sv_mortalcopy(sv);
523 do_join(TARG, *MARK, MARK, SP);
534 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
535 * will be enough to hold an OP*.
537 SV* sv = sv_newmortal();
538 sv_upgrade(sv, SVt_PVLV);
540 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
548 /* Oversized hot code. */
552 dSP; dMARK; dORIGMARK;
558 if (PL_op->op_flags & OPf_STACKED)
563 if (gv && (io = GvIO(gv))
564 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
567 if (MARK == ORIGMARK) {
568 /* If using default handle then we need to make space to
569 * pass object as 1st arg, so move other args up ...
573 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
577 *MARK = SvTIED_obj((SV*)io, mg);
580 call_method("PRINT", G_SCALAR);
588 if (!(io = GvIO(gv))) {
589 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
590 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
592 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
593 report_evil_fh(gv, io, PL_op->op_type);
594 SETERRNO(EBADF,RMS_IFI);
597 else if (!(fp = IoOFP(io))) {
598 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
600 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
601 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
602 report_evil_fh(gv, io, PL_op->op_type);
604 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
609 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
611 if (!do_print(*MARK, fp))
615 if (!do_print(PL_ofs_sv, fp)) { /* $, */
624 if (!do_print(*MARK, fp))
632 if (PL_ors_sv && SvOK(PL_ors_sv))
633 if (!do_print(PL_ors_sv, fp)) /* $\ */
636 if (IoFLAGS(io) & IOf_FLUSH)
637 if (PerlIO_flush(fp) == EOF)
658 tryAMAGICunDEREF(to_av);
661 if (SvTYPE(av) != SVt_PVAV)
662 DIE(aTHX_ "Not an ARRAY reference");
663 if (PL_op->op_flags & OPf_REF) {
668 if (GIMME == G_SCALAR)
669 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
673 else if (PL_op->op_flags & OPf_MOD
674 && PL_op->op_private & OPpLVAL_INTRO)
675 Perl_croak(aTHX_ PL_no_localize_ref);
678 if (SvTYPE(sv) == SVt_PVAV) {
680 if (PL_op->op_flags & OPf_REF) {
685 if (GIMME == G_SCALAR)
686 Perl_croak(aTHX_ "Can't return array to lvalue"
695 if (SvTYPE(sv) != SVt_PVGV) {
699 if (SvGMAGICAL(sv)) {
705 if (PL_op->op_flags & OPf_REF ||
706 PL_op->op_private & HINT_STRICT_REFS)
707 DIE(aTHX_ PL_no_usym, "an ARRAY");
708 if (ckWARN(WARN_UNINITIALIZED))
710 if (GIMME == G_ARRAY) {
717 if ((PL_op->op_flags & OPf_SPECIAL) &&
718 !(PL_op->op_flags & OPf_MOD))
720 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
722 && (!is_gv_magical(sym,len,0)
723 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
729 if (PL_op->op_private & HINT_STRICT_REFS)
730 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
731 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
738 if (PL_op->op_private & OPpLVAL_INTRO)
740 if (PL_op->op_flags & OPf_REF) {
745 if (GIMME == G_SCALAR)
746 Perl_croak(aTHX_ "Can't return array to lvalue"
754 if (GIMME == G_ARRAY) {
755 I32 maxarg = AvFILL(av) + 1;
756 (void)POPs; /* XXXX May be optimized away? */
758 if (SvRMAGICAL(av)) {
760 for (i=0; i < (U32)maxarg; i++) {
761 SV **svp = av_fetch(av, i, FALSE);
762 /* See note in pp_helem, and bug id #27839 */
764 ? SvGMAGICAL(*svp) ? sv_mortalcopy(*svp) : *svp
769 Copy(AvARRAY(av), SP+1, maxarg, SV*);
773 else if (GIMME_V == G_SCALAR) {
775 I32 maxarg = AvFILL(av) + 1;
789 tryAMAGICunDEREF(to_hv);
792 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
793 DIE(aTHX_ "Not a HASH reference");
794 if (PL_op->op_flags & OPf_REF) {
799 if (gimme != G_ARRAY)
800 Perl_croak(aTHX_ "Can't return hash 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_PVHV || SvTYPE(sv) == SVt_PVAV) {
811 if (PL_op->op_flags & OPf_REF) {
816 if (gimme != G_ARRAY)
817 Perl_croak(aTHX_ "Can't return hash to lvalue"
826 if (SvTYPE(sv) != SVt_PVGV) {
830 if (SvGMAGICAL(sv)) {
836 if (PL_op->op_flags & OPf_REF ||
837 PL_op->op_private & HINT_STRICT_REFS)
838 DIE(aTHX_ PL_no_usym, "a HASH");
839 if (ckWARN(WARN_UNINITIALIZED))
841 if (gimme == G_ARRAY) {
848 if ((PL_op->op_flags & OPf_SPECIAL) &&
849 !(PL_op->op_flags & OPf_MOD))
851 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
853 && (!is_gv_magical(sym,len,0)
854 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
860 if (PL_op->op_private & HINT_STRICT_REFS)
861 DIE(aTHX_ PL_no_symref, sym, "a HASH");
862 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
869 if (PL_op->op_private & OPpLVAL_INTRO)
871 if (PL_op->op_flags & OPf_REF) {
876 if (gimme != G_ARRAY)
877 Perl_croak(aTHX_ "Can't return hash to lvalue"
885 if (gimme == G_ARRAY) { /* array wanted */
886 *PL_stack_sp = (SV*)hv;
889 else if (gimme == G_SCALAR) {
892 if (SvTYPE(hv) == SVt_PVAV)
893 hv = avhv_keys((AV*)hv);
895 TARG = Perl_hv_scalar(aTHX_ hv);
902 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
908 leftop = ((BINOP*)PL_op)->op_last;
910 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
911 leftop = ((LISTOP*)leftop)->op_first;
913 /* Skip PUSHMARK and each element already assigned to. */
914 for (i = lelem - firstlelem; i > 0; i--) {
915 leftop = leftop->op_sibling;
918 if (leftop->op_type != OP_RV2HV)
923 av_fill(ary, 0); /* clear all but the fields hash */
924 if (lastrelem >= relem) {
925 while (relem < lastrelem) { /* gobble up all the rest */
929 /* Avoid a memory leak when avhv_store_ent dies. */
930 tmpstr = sv_newmortal();
931 sv_setsv(tmpstr,relem[1]); /* value */
933 if (avhv_store_ent(ary,relem[0],tmpstr,0))
934 (void)SvREFCNT_inc(tmpstr);
935 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
941 if (relem == lastrelem)
947 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
951 if (ckWARN(WARN_MISC)) {
952 if (relem == firstrelem &&
954 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
955 SvTYPE(SvRV(*relem)) == SVt_PVHV))
957 Perl_warner(aTHX_ packWARN(WARN_MISC),
958 "Reference found where even-sized list expected");
961 Perl_warner(aTHX_ packWARN(WARN_MISC),
962 "Odd number of elements in hash assignment");
964 if (SvTYPE(hash) == SVt_PVAV) {
966 tmpstr = sv_newmortal();
967 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
968 (void)SvREFCNT_inc(tmpstr);
969 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
974 tmpstr = NEWSV(29,0);
975 didstore = hv_store_ent(hash,*relem,tmpstr,0);
976 if (SvMAGICAL(hash)) {
977 if (SvSMAGICAL(tmpstr))
990 SV **lastlelem = PL_stack_sp;
991 SV **lastrelem = PL_stack_base + POPMARK;
992 SV **firstrelem = PL_stack_base + POPMARK + 1;
993 SV **firstlelem = lastrelem + 1;
1006 SV **firsthashrelem = 0; /* "= 0" keeps gcc 2.95 quiet */
1009 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1012 /* If there's a common identifier on both sides we have to take
1013 * special care that assigning the identifier on the left doesn't
1014 * clobber a value on the right that's used later in the list.
1016 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1017 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1018 for (relem = firstrelem; relem <= lastrelem; relem++) {
1020 if ((sv = *relem)) {
1021 TAINT_NOT; /* Each item is independent */
1022 *relem = sv_mortalcopy(sv);
1032 while (lelem <= lastlelem) {
1033 TAINT_NOT; /* Each item stands on its own, taintwise. */
1035 switch (SvTYPE(sv)) {
1038 magic = SvMAGICAL(ary) != 0;
1039 if (PL_op->op_private & OPpASSIGN_HASH) {
1040 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1046 do_oddball((HV*)ary, relem, firstrelem);
1048 relem = lastrelem + 1;
1053 av_extend(ary, lastrelem - relem);
1055 while (relem <= lastrelem) { /* gobble up all the rest */
1059 sv_setsv(sv,*relem);
1061 didstore = av_store(ary,i++,sv);
1071 case SVt_PVHV: { /* normal hash */
1075 magic = SvMAGICAL(hash) != 0;
1077 firsthashrelem = relem;
1079 while (relem < lastrelem) { /* gobble up all the rest */
1084 sv = &PL_sv_no, relem++;
1085 tmpstr = NEWSV(29,0);
1087 sv_setsv(tmpstr,*relem); /* value */
1088 *(relem++) = tmpstr;
1089 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1090 /* key overwrites an existing entry */
1092 didstore = hv_store_ent(hash,sv,tmpstr,0);
1094 if (SvSMAGICAL(tmpstr))
1101 if (relem == lastrelem) {
1102 do_oddball(hash, relem, firstrelem);
1108 if (SvIMMORTAL(sv)) {
1109 if (relem <= lastrelem)
1113 if (relem <= lastrelem) {
1114 sv_setsv(sv, *relem);
1118 sv_setsv(sv, &PL_sv_undef);
1123 if (PL_delaymagic & ~DM_DELAY) {
1124 if (PL_delaymagic & DM_UID) {
1125 #ifdef HAS_SETRESUID
1126 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1127 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1130 # ifdef HAS_SETREUID
1131 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1132 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1135 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1136 (void)setruid(PL_uid);
1137 PL_delaymagic &= ~DM_RUID;
1139 # endif /* HAS_SETRUID */
1141 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1142 (void)seteuid(PL_euid);
1143 PL_delaymagic &= ~DM_EUID;
1145 # endif /* HAS_SETEUID */
1146 if (PL_delaymagic & DM_UID) {
1147 if (PL_uid != PL_euid)
1148 DIE(aTHX_ "No setreuid available");
1149 (void)PerlProc_setuid(PL_uid);
1151 # endif /* HAS_SETREUID */
1152 #endif /* HAS_SETRESUID */
1153 PL_uid = PerlProc_getuid();
1154 PL_euid = PerlProc_geteuid();
1156 if (PL_delaymagic & DM_GID) {
1157 #ifdef HAS_SETRESGID
1158 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1159 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1162 # ifdef HAS_SETREGID
1163 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1164 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1167 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1168 (void)setrgid(PL_gid);
1169 PL_delaymagic &= ~DM_RGID;
1171 # endif /* HAS_SETRGID */
1173 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1174 (void)setegid(PL_egid);
1175 PL_delaymagic &= ~DM_EGID;
1177 # endif /* HAS_SETEGID */
1178 if (PL_delaymagic & DM_GID) {
1179 if (PL_gid != PL_egid)
1180 DIE(aTHX_ "No setregid available");
1181 (void)PerlProc_setgid(PL_gid);
1183 # endif /* HAS_SETREGID */
1184 #endif /* HAS_SETRESGID */
1185 PL_gid = PerlProc_getgid();
1186 PL_egid = PerlProc_getegid();
1188 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1192 if (gimme == G_VOID)
1193 SP = firstrelem - 1;
1194 else if (gimme == G_SCALAR) {
1197 SETi(lastrelem - firstrelem + 1 - duplicates);
1204 /* Removes from the stack the entries which ended up as
1205 * duplicated keys in the hash (fix for [perl #24380]) */
1206 Move(firsthashrelem + duplicates,
1207 firsthashrelem, duplicates, SV**);
1208 lastrelem -= duplicates;
1213 SP = firstrelem + (lastlelem - firstlelem);
1214 lelem = firstlelem + (relem - firstrelem);
1216 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1224 register PMOP *pm = cPMOP;
1225 SV *rv = sv_newmortal();
1226 SV *sv = newSVrv(rv, "Regexp");
1227 if (pm->op_pmdynflags & PMdf_TAINTED)
1229 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1236 register PMOP *pm = cPMOP;
1242 I32 r_flags = REXEC_CHECKED;
1243 char *truebase; /* Start of string */
1244 register REGEXP *rx = PM_GETRE(pm);
1249 I32 oldsave = PL_savestack_ix;
1250 I32 update_minmatch = 1;
1251 I32 had_zerolen = 0;
1253 if (PL_op->op_flags & OPf_STACKED)
1260 PUTBACK; /* EVAL blocks need stack_sp. */
1261 s = SvPV(TARG, len);
1264 DIE(aTHX_ "panic: pp_match");
1265 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1266 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1269 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1271 /* PMdf_USED is set after a ?? matches once */
1272 if (pm->op_pmdynflags & PMdf_USED) {
1274 if (gimme == G_ARRAY)
1279 /* empty pattern special-cased to use last successful pattern if possible */
1280 if (!rx->prelen && PL_curpm) {
1285 if (rx->minlen > (I32)len)
1290 /* XXXX What part of this is needed with true \G-support? */
1291 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1293 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1294 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1295 if (mg && mg->mg_len >= 0) {
1296 if (!(rx->reganch & ROPT_GPOS_SEEN))
1297 rx->endp[0] = rx->startp[0] = mg->mg_len;
1298 else if (rx->reganch & ROPT_ANCH_GPOS) {
1299 r_flags |= REXEC_IGNOREPOS;
1300 rx->endp[0] = rx->startp[0] = mg->mg_len;
1302 minmatch = (mg->mg_flags & MGf_MINMATCH);
1303 update_minmatch = 0;
1307 if ((!global && rx->nparens)
1308 || SvTEMP(TARG) || PL_sawampersand)
1309 r_flags |= REXEC_COPY_STR;
1311 r_flags |= REXEC_SCREAM;
1313 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1314 SAVEINT(PL_multiline);
1315 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1319 if (global && rx->startp[0] != -1) {
1320 t = s = rx->endp[0] + truebase;
1321 if ((s + rx->minlen) > strend)
1323 if (update_minmatch++)
1324 minmatch = had_zerolen;
1326 if (rx->reganch & RE_USE_INTUIT &&
1327 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1328 PL_bostr = truebase;
1329 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1333 if ( (rx->reganch & ROPT_CHECK_ALL)
1335 && ((rx->reganch & ROPT_NOSCAN)
1336 || !((rx->reganch & RE_INTUIT_TAIL)
1337 && (r_flags & REXEC_SCREAM)))
1338 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1341 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1344 if (dynpm->op_pmflags & PMf_ONCE)
1345 dynpm->op_pmdynflags |= PMdf_USED;
1354 RX_MATCH_TAINTED_on(rx);
1355 TAINT_IF(RX_MATCH_TAINTED(rx));
1356 if (gimme == G_ARRAY) {
1357 I32 nparens, i, len;
1359 nparens = rx->nparens;
1360 if (global && !nparens)
1364 SPAGAIN; /* EVAL blocks could move the stack. */
1365 EXTEND(SP, nparens + i);
1366 EXTEND_MORTAL(nparens + i);
1367 for (i = !i; i <= nparens; i++) {
1368 PUSHs(sv_newmortal());
1370 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1371 len = rx->endp[i] - rx->startp[i];
1372 s = rx->startp[i] + truebase;
1373 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1374 len < 0 || len > strend - s)
1375 DIE(aTHX_ "panic: pp_match start/end pointers");
1376 sv_setpvn(*SP, s, len);
1377 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1382 if (dynpm->op_pmflags & PMf_CONTINUE) {
1384 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1385 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1387 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1388 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1390 if (rx->startp[0] != -1) {
1391 mg->mg_len = rx->endp[0];
1392 if (rx->startp[0] == rx->endp[0])
1393 mg->mg_flags |= MGf_MINMATCH;
1395 mg->mg_flags &= ~MGf_MINMATCH;
1398 had_zerolen = (rx->startp[0] != -1
1399 && rx->startp[0] == rx->endp[0]);
1400 PUTBACK; /* EVAL blocks may use stack */
1401 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1406 LEAVE_SCOPE(oldsave);
1412 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1413 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1415 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1416 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1418 if (rx->startp[0] != -1) {
1419 mg->mg_len = rx->endp[0];
1420 if (rx->startp[0] == rx->endp[0])
1421 mg->mg_flags |= MGf_MINMATCH;
1423 mg->mg_flags &= ~MGf_MINMATCH;
1426 LEAVE_SCOPE(oldsave);
1430 yup: /* Confirmed by INTUIT */
1432 RX_MATCH_TAINTED_on(rx);
1433 TAINT_IF(RX_MATCH_TAINTED(rx));
1435 if (dynpm->op_pmflags & PMf_ONCE)
1436 dynpm->op_pmdynflags |= PMdf_USED;
1437 if (RX_MATCH_COPIED(rx))
1438 Safefree(rx->subbeg);
1439 RX_MATCH_COPIED_off(rx);
1440 rx->subbeg = Nullch;
1442 rx->subbeg = truebase;
1443 rx->startp[0] = s - truebase;
1444 if (RX_MATCH_UTF8(rx)) {
1445 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1446 rx->endp[0] = t - truebase;
1449 rx->endp[0] = s - truebase + rx->minlen;
1451 rx->sublen = strend - truebase;
1454 if (PL_sawampersand) {
1457 rx->subbeg = savepvn(t, strend - t);
1458 rx->sublen = strend - t;
1459 RX_MATCH_COPIED_on(rx);
1460 off = rx->startp[0] = s - t;
1461 rx->endp[0] = off + rx->minlen;
1463 else { /* startp/endp are used by @- @+. */
1464 rx->startp[0] = s - truebase;
1465 rx->endp[0] = s - truebase + rx->minlen;
1467 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1468 LEAVE_SCOPE(oldsave);
1473 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1474 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1475 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1480 LEAVE_SCOPE(oldsave);
1481 if (gimme == G_ARRAY)
1487 Perl_do_readline(pTHX)
1489 dSP; dTARGETSTACKED;
1494 register IO *io = GvIO(PL_last_in_gv);
1495 register I32 type = PL_op->op_type;
1496 I32 gimme = GIMME_V;
1499 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1501 XPUSHs(SvTIED_obj((SV*)io, mg));
1504 call_method("READLINE", gimme);
1507 if (gimme == G_SCALAR) {
1509 SvSetSV_nosteal(TARG, result);
1518 if (IoFLAGS(io) & IOf_ARGV) {
1519 if (IoFLAGS(io) & IOf_START) {
1521 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1522 IoFLAGS(io) &= ~IOf_START;
1523 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1524 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1525 SvSETMAGIC(GvSV(PL_last_in_gv));
1530 fp = nextargv(PL_last_in_gv);
1531 if (!fp) { /* Note: fp != IoIFP(io) */
1532 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1535 else if (type == OP_GLOB)
1536 fp = Perl_start_glob(aTHX_ POPs, io);
1538 else if (type == OP_GLOB)
1540 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1541 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1545 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1546 && (!io || !(IoFLAGS(io) & IOf_START))) {
1547 if (type == OP_GLOB)
1548 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1549 "glob failed (can't start child: %s)",
1552 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1554 if (gimme == G_SCALAR) {
1555 /* undef TARG, and push that undefined value */
1556 if (type != OP_RCATLINE) {
1557 SV_CHECK_THINKFIRST(TARG);
1565 if (gimme == G_SCALAR) {
1569 (void)SvUPGRADE(sv, SVt_PV);
1570 tmplen = SvLEN(sv); /* remember if already alloced */
1571 if (!tmplen && !SvREADONLY(sv))
1572 Sv_Grow(sv, 80); /* try short-buffering it */
1574 if (type == OP_RCATLINE && SvOK(sv)) {
1577 (void)SvPV_force(sv, n_a);
1583 sv = sv_2mortal(NEWSV(57, 80));
1587 /* This should not be marked tainted if the fp is marked clean */
1588 #define MAYBE_TAINT_LINE(io, sv) \
1589 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1594 /* delay EOF state for a snarfed empty file */
1595 #define SNARF_EOF(gimme,rs,io,sv) \
1596 (gimme != G_SCALAR || SvCUR(sv) \
1597 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1601 if (!sv_gets(sv, fp, offset)
1603 || SNARF_EOF(gimme, PL_rs, io, sv)
1604 || PerlIO_error(fp)))
1606 PerlIO_clearerr(fp);
1607 if (IoFLAGS(io) & IOf_ARGV) {
1608 fp = nextargv(PL_last_in_gv);
1611 (void)do_close(PL_last_in_gv, FALSE);
1613 else if (type == OP_GLOB) {
1614 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1615 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1616 "glob failed (child exited with status %d%s)",
1617 (int)(STATUS_CURRENT >> 8),
1618 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1621 if (gimme == G_SCALAR) {
1622 if (type != OP_RCATLINE) {
1623 SV_CHECK_THINKFIRST(TARG);
1629 MAYBE_TAINT_LINE(io, sv);
1632 MAYBE_TAINT_LINE(io, sv);
1634 IoFLAGS(io) |= IOf_NOLINE;
1638 if (type == OP_GLOB) {
1641 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1642 tmps = SvEND(sv) - 1;
1643 if (*tmps == *SvPVX(PL_rs)) {
1648 for (tmps = SvPVX(sv); *tmps; tmps++)
1649 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1650 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1652 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1653 (void)POPs; /* Unmatched wildcard? Chuck it... */
1656 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1657 U8 *s = (U8*)SvPVX(sv) + offset;
1658 STRLEN len = SvCUR(sv) - offset;
1661 if (ckWARN(WARN_UTF8) &&
1662 !Perl_is_utf8_string_loc(aTHX_ s, len, &f))
1663 /* Emulate :encoding(utf8) warning in the same case. */
1664 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1665 "utf8 \"\\x%02X\" does not map to Unicode",
1666 f < (U8*)SvEND(sv) ? *f : 0);
1668 if (gimme == G_ARRAY) {
1669 if (SvLEN(sv) - SvCUR(sv) > 20) {
1670 SvLEN_set(sv, SvCUR(sv)+1);
1671 Renew(SvPVX(sv), SvLEN(sv), char);
1673 sv = sv_2mortal(NEWSV(58, 80));
1676 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1677 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1681 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1682 Renew(SvPVX(sv), SvLEN(sv), char);
1691 register PERL_CONTEXT *cx;
1692 I32 gimme = OP_GIMME(PL_op, -1);
1695 if (cxstack_ix >= 0)
1696 gimme = cxstack[cxstack_ix].blk_gimme;
1704 PUSHBLOCK(cx, CXt_BLOCK, SP);
1716 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1717 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1719 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1722 if (SvTYPE(hv) == SVt_PVHV) {
1723 if (PL_op->op_private & OPpLVAL_INTRO) {
1726 /* does the element we're localizing already exist? */
1728 /* can we determine whether it exists? */
1730 || mg_find((SV*)hv, PERL_MAGIC_env)
1731 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1732 /* Try to preserve the existenceness of a tied hash
1733 * element by using EXISTS and DELETE if possible.
1734 * Fallback to FETCH and STORE otherwise */
1735 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1736 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1737 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1739 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1742 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1743 svp = he ? &HeVAL(he) : 0;
1745 else if (SvTYPE(hv) == SVt_PVAV) {
1746 if (PL_op->op_private & OPpLVAL_INTRO)
1747 DIE(aTHX_ "Can't localize pseudo-hash element");
1748 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1754 if (!svp || *svp == &PL_sv_undef) {
1759 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1761 lv = sv_newmortal();
1762 sv_upgrade(lv, SVt_PVLV);
1764 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1765 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1766 LvTARG(lv) = SvREFCNT_inc(hv);
1771 if (PL_op->op_private & OPpLVAL_INTRO) {
1772 if (HvNAME(hv) && isGV(*svp))
1773 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1777 char *key = SvPV(keysv, keylen);
1778 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1780 save_helem(hv, keysv, svp);
1783 else if (PL_op->op_private & OPpDEREF)
1784 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1786 sv = (svp ? *svp : &PL_sv_undef);
1787 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1788 * Pushing the magical RHS on to the stack is useless, since
1789 * that magic is soon destined to be misled by the local(),
1790 * and thus the later pp_sassign() will fail to mg_get() the
1791 * old value. This should also cure problems with delayed
1792 * mg_get()s. GSAR 98-07-03 */
1793 if (!lval && SvGMAGICAL(sv))
1794 sv = sv_mortalcopy(sv);
1802 register PERL_CONTEXT *cx;
1808 if (PL_op->op_flags & OPf_SPECIAL) {
1809 cx = &cxstack[cxstack_ix];
1810 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1815 gimme = OP_GIMME(PL_op, -1);
1817 if (cxstack_ix >= 0)
1818 gimme = cxstack[cxstack_ix].blk_gimme;
1824 if (gimme == G_VOID)
1826 else if (gimme == G_SCALAR) {
1829 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1832 *MARK = sv_mortalcopy(TOPs);
1835 *MARK = &PL_sv_undef;
1839 else if (gimme == G_ARRAY) {
1840 /* in case LEAVE wipes old return values */
1841 for (mark = newsp + 1; mark <= SP; mark++) {
1842 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1843 *mark = sv_mortalcopy(*mark);
1844 TAINT_NOT; /* Each item is independent */
1848 PL_curpm = newpm; /* Don't pop $1 et al till now */
1858 register PERL_CONTEXT *cx;
1864 cx = &cxstack[cxstack_ix];
1865 if (CxTYPE(cx) != CXt_LOOP)
1866 DIE(aTHX_ "panic: pp_iter");
1868 itersvp = CxITERVAR(cx);
1869 av = cx->blk_loop.iterary;
1870 if (SvTYPE(av) != SVt_PVAV) {
1871 /* iterate ($min .. $max) */
1872 if (cx->blk_loop.iterlval) {
1873 /* string increment */
1874 register SV* cur = cx->blk_loop.iterlval;
1876 char *max = SvOK((SV*)av) ? SvPV((SV*)av, maxlen) : "";
1877 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1878 #ifndef USE_5005THREADS /* don't risk potential race */
1879 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1880 /* safe to reuse old SV */
1881 sv_setsv(*itersvp, cur);
1886 /* we need a fresh SV every time so that loop body sees a
1887 * completely new SV for closures/references to work as
1890 *itersvp = newSVsv(cur);
1891 SvREFCNT_dec(oldsv);
1893 if (strEQ(SvPVX(cur), max))
1894 sv_setiv(cur, 0); /* terminate next time */
1901 /* integer increment */
1902 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1905 #ifndef USE_5005THREADS /* don't risk potential race */
1906 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1907 /* safe to reuse old SV */
1908 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1913 /* we need a fresh SV every time so that loop body sees a
1914 * completely new SV for closures/references to work as they
1917 *itersvp = newSViv(cx->blk_loop.iterix++);
1918 SvREFCNT_dec(oldsv);
1924 if (PL_op->op_private & OPpITER_REVERSED) {
1925 /* In reverse, use itermax as the min :-) */
1926 if (cx->blk_loop.iterix <= cx->blk_loop.itermax)
1929 if (SvMAGICAL(av) || AvREIFY(av)) {
1930 SV **svp = av_fetch(av, cx->blk_loop.iterix--, FALSE);
1937 sv = AvARRAY(av)[cx->blk_loop.iterix--];
1941 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp :
1945 if (SvMAGICAL(av) || AvREIFY(av)) {
1946 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1953 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1957 if (sv && SvREFCNT(sv) == 0) {
1959 Perl_croak(aTHX_ "Use of freed value in iteration");
1966 if (av != PL_curstack && sv == &PL_sv_undef) {
1967 SV *lv = cx->blk_loop.iterlval;
1968 if (lv && SvREFCNT(lv) > 1) {
1973 SvREFCNT_dec(LvTARG(lv));
1975 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1976 sv_upgrade(lv, SVt_PVLV);
1978 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1980 LvTARG(lv) = SvREFCNT_inc(av);
1981 LvTARGOFF(lv) = cx->blk_loop.iterix;
1982 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1987 *itersvp = SvREFCNT_inc(sv);
1988 SvREFCNT_dec(oldsv);
1996 register PMOP *pm = cPMOP;
2012 register REGEXP *rx = PM_GETRE(pm);
2014 int force_on_match = 0;
2015 I32 oldsave = PL_savestack_ix;
2017 bool doutf8 = FALSE;
2020 /* known replacement string? */
2021 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
2022 if (PL_op->op_flags & OPf_STACKED)
2029 if (SvFAKE(TARG) && SvREADONLY(TARG))
2030 sv_force_normal(TARG);
2031 if (SvREADONLY(TARG)
2032 || (SvTYPE(TARG) > SVt_PVLV
2033 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
2034 DIE(aTHX_ PL_no_modify);
2037 s = SvPV(TARG, len);
2038 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2040 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
2041 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2046 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2050 DIE(aTHX_ "panic: pp_subst");
2053 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2054 maxiters = 2 * slen + 10; /* We can match twice at each
2055 position, once with zero-length,
2056 second time with non-zero. */
2058 if (!rx->prelen && PL_curpm) {
2062 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
2063 ? REXEC_COPY_STR : 0;
2065 r_flags |= REXEC_SCREAM;
2066 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
2067 SAVEINT(PL_multiline);
2068 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
2071 if (rx->reganch & RE_USE_INTUIT) {
2073 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
2077 /* How to do it in subst? */
2078 /* if ( (rx->reganch & ROPT_CHECK_ALL)
2080 && ((rx->reganch & ROPT_NOSCAN)
2081 || !((rx->reganch & RE_INTUIT_TAIL)
2082 && (r_flags & REXEC_SCREAM))))
2087 /* only replace once? */
2088 once = !(rpm->op_pmflags & PMf_GLOBAL);
2090 /* known replacement string? */
2092 /* replacement needing upgrading? */
2093 if (DO_UTF8(TARG) && !doutf8) {
2094 nsv = sv_newmortal();
2097 sv_recode_to_utf8(nsv, PL_encoding);
2099 sv_utf8_upgrade(nsv);
2100 c = SvPV(nsv, clen);
2104 c = SvPV(dstr, clen);
2105 doutf8 = DO_UTF8(dstr);
2113 /* can do inplace substitution? */
2114 if (c && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2115 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)
2116 && (!doutf8 || SvUTF8(TARG))) {
2117 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2118 r_flags | REXEC_CHECKED))
2122 LEAVE_SCOPE(oldsave);
2125 if (force_on_match) {
2127 s = SvPV_force(TARG, len);
2132 SvSCREAM_off(TARG); /* disable possible screamer */
2134 rxtainted |= RX_MATCH_TAINTED(rx);
2135 m = orig + rx->startp[0];
2136 d = orig + rx->endp[0];
2138 if (m - s > strend - d) { /* faster to shorten from end */
2140 Copy(c, m, clen, char);
2145 Move(d, m, i, char);
2149 SvCUR_set(TARG, m - s);
2152 else if ((i = m - s)) { /* faster from front */
2160 Copy(c, m, clen, char);
2165 Copy(c, d, clen, char);
2170 TAINT_IF(rxtainted & 1);
2176 if (iters++ > maxiters)
2177 DIE(aTHX_ "Substitution loop");
2178 rxtainted |= RX_MATCH_TAINTED(rx);
2179 m = rx->startp[0] + orig;
2183 Move(s, d, i, char);
2187 Copy(c, d, clen, char);
2190 s = rx->endp[0] + orig;
2191 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2193 /* don't match same null twice */
2194 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2197 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2198 Move(s, d, i+1, char); /* include the NUL */
2200 TAINT_IF(rxtainted & 1);
2202 PUSHs(sv_2mortal(newSViv((I32)iters)));
2204 (void)SvPOK_only_UTF8(TARG);
2205 TAINT_IF(rxtainted);
2206 if (SvSMAGICAL(TARG)) {
2214 LEAVE_SCOPE(oldsave);
2218 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2219 r_flags | REXEC_CHECKED))
2221 if (force_on_match) {
2223 s = SvPV_force(TARG, len);
2226 rxtainted |= RX_MATCH_TAINTED(rx);
2227 dstr = NEWSV(25, len);
2228 sv_setpvn(dstr, m, s-m);
2233 register PERL_CONTEXT *cx;
2237 RETURNOP(cPMOP->op_pmreplroot);
2239 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2241 if (iters++ > maxiters)
2242 DIE(aTHX_ "Substitution loop");
2243 rxtainted |= RX_MATCH_TAINTED(rx);
2244 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2249 strend = s + (strend - m);
2251 m = rx->startp[0] + orig;
2252 if (doutf8 && !SvUTF8(dstr))
2253 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2255 sv_catpvn(dstr, s, m-s);
2256 s = rx->endp[0] + orig;
2258 sv_catpvn(dstr, c, clen);
2261 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2262 TARG, NULL, r_flags));
2263 if (doutf8 && !DO_UTF8(TARG))
2264 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2266 sv_catpvn(dstr, s, strend - s);
2270 Safefree(SvPVX(TARG));
2271 SvPVX(TARG) = SvPVX(dstr);
2272 SvCUR_set(TARG, SvCUR(dstr));
2273 SvLEN_set(TARG, SvLEN(dstr));
2274 doutf8 |= DO_UTF8(dstr);
2278 TAINT_IF(rxtainted & 1);
2280 PUSHs(sv_2mortal(newSViv((I32)iters)));
2282 (void)SvPOK_only(TARG);
2285 TAINT_IF(rxtainted);
2288 LEAVE_SCOPE(oldsave);
2297 LEAVE_SCOPE(oldsave);
2306 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2307 ++*PL_markstack_ptr;
2308 LEAVE; /* exit inner scope */
2311 if (PL_stack_base + *PL_markstack_ptr > SP) {
2313 I32 gimme = GIMME_V;
2315 LEAVE; /* exit outer scope */
2316 (void)POPMARK; /* pop src */
2317 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2318 (void)POPMARK; /* pop dst */
2319 SP = PL_stack_base + POPMARK; /* pop original mark */
2320 if (gimme == G_SCALAR) {
2324 else if (gimme == G_ARRAY)
2331 ENTER; /* enter inner scope */
2334 src = PL_stack_base[*PL_markstack_ptr];
2338 RETURNOP(cLOGOP->op_other);
2349 register PERL_CONTEXT *cx;
2353 cxstack_ix++; /* temporarily protect top context */
2356 if (gimme == G_SCALAR) {
2359 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2361 *MARK = SvREFCNT_inc(TOPs);
2366 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2368 *MARK = sv_mortalcopy(sv);
2373 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2377 *MARK = &PL_sv_undef;
2381 else if (gimme == G_ARRAY) {
2382 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2383 if (!SvTEMP(*MARK)) {
2384 *MARK = sv_mortalcopy(*MARK);
2385 TAINT_NOT; /* Each item is independent */
2393 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2394 PL_curpm = newpm; /* ... and pop $1 et al */
2397 return pop_return();
2400 /* This duplicates the above code because the above code must not
2401 * get any slower by more conditions */
2409 register PERL_CONTEXT *cx;
2413 cxstack_ix++; /* temporarily protect top context */
2417 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2418 /* We are an argument to a function or grep().
2419 * This kind of lvalueness was legal before lvalue
2420 * subroutines too, so be backward compatible:
2421 * cannot report errors. */
2423 /* Scalar context *is* possible, on the LHS of -> only,
2424 * as in f()->meth(). But this is not an lvalue. */
2425 if (gimme == G_SCALAR)
2427 if (gimme == G_ARRAY) {
2428 if (!CvLVALUE(cx->blk_sub.cv))
2429 goto temporise_array;
2430 EXTEND_MORTAL(SP - newsp);
2431 for (mark = newsp + 1; mark <= SP; mark++) {
2434 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2435 *mark = sv_mortalcopy(*mark);
2437 /* Can be a localized value subject to deletion. */
2438 PL_tmps_stack[++PL_tmps_ix] = *mark;
2439 (void)SvREFCNT_inc(*mark);
2444 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2445 /* Here we go for robustness, not for speed, so we change all
2446 * the refcounts so the caller gets a live guy. Cannot set
2447 * TEMP, so sv_2mortal is out of question. */
2448 if (!CvLVALUE(cx->blk_sub.cv)) {
2454 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2456 if (gimme == G_SCALAR) {
2460 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2466 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2467 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2468 : "a readonly value" : "a temporary");
2470 else { /* Can be a localized value
2471 * subject to deletion. */
2472 PL_tmps_stack[++PL_tmps_ix] = *mark;
2473 (void)SvREFCNT_inc(*mark);
2476 else { /* Should not happen? */
2482 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2483 (MARK > SP ? "Empty array" : "Array"));
2487 else if (gimme == G_ARRAY) {
2488 EXTEND_MORTAL(SP - newsp);
2489 for (mark = newsp + 1; mark <= SP; mark++) {
2490 if (*mark != &PL_sv_undef
2491 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2492 /* Might be flattened array after $#array = */
2499 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2500 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2503 /* Can be a localized value subject to deletion. */
2504 PL_tmps_stack[++PL_tmps_ix] = *mark;
2505 (void)SvREFCNT_inc(*mark);
2511 if (gimme == G_SCALAR) {
2515 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2517 *MARK = SvREFCNT_inc(TOPs);
2522 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2524 *MARK = sv_mortalcopy(sv);
2529 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2533 *MARK = &PL_sv_undef;
2537 else if (gimme == G_ARRAY) {
2539 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2540 if (!SvTEMP(*MARK)) {
2541 *MARK = sv_mortalcopy(*MARK);
2542 TAINT_NOT; /* Each item is independent */
2551 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2552 PL_curpm = newpm; /* ... and pop $1 et al */
2555 return pop_return();
2560 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2562 SV *dbsv = GvSV(PL_DBsub);
2564 if (!PERLDB_SUB_NN) {
2568 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2569 || strEQ(GvNAME(gv), "END")
2570 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2571 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2572 && (gv = (GV*)*svp) ))) {
2573 /* Use GV from the stack as a fallback. */
2574 /* GV is potentially non-unique, or contain different CV. */
2575 SV *tmp = newRV((SV*)cv);
2576 sv_setsv(dbsv, tmp);
2580 gv_efullname3(dbsv, gv, Nullch);
2584 (void)SvUPGRADE(dbsv, SVt_PVIV);
2585 (void)SvIOK_on(dbsv);
2586 SAVEIV(SvIVX(dbsv));
2587 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2591 PL_curcopdb = PL_curcop;
2592 cv = GvCV(PL_DBsub);
2602 register PERL_CONTEXT *cx;
2604 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2607 DIE(aTHX_ "Not a CODE reference");
2608 switch (SvTYPE(sv)) {
2614 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2616 SP = PL_stack_base + POPMARK;
2619 if (SvGMAGICAL(sv)) {
2623 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2626 sym = SvPV(sv, n_a);
2628 DIE(aTHX_ PL_no_usym, "a subroutine");
2629 if (PL_op->op_private & HINT_STRICT_REFS)
2630 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2631 cv = get_cv(sym, TRUE);
2636 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2637 tryAMAGICunDEREF(to_cv);
2640 if (SvTYPE(cv) == SVt_PVCV)
2645 DIE(aTHX_ "Not a CODE reference");
2650 if (!(cv = GvCVu((GV*)sv)))
2651 cv = sv_2cv(sv, &stash, &gv, FALSE);
2664 if (!CvROOT(cv) && !CvXSUB(cv)) {
2668 /* anonymous or undef'd function leaves us no recourse */
2669 if (CvANON(cv) || !(gv = CvGV(cv)))
2670 DIE(aTHX_ "Undefined subroutine called");
2672 /* autoloaded stub? */
2673 if (cv != GvCV(gv)) {
2676 /* should call AUTOLOAD now? */
2679 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2686 sub_name = sv_newmortal();
2687 gv_efullname3(sub_name, gv, Nullch);
2688 DIE(aTHX_ "Undefined subroutine &%"SVf" called", sub_name);
2692 DIE(aTHX_ "Not a CODE reference");
2697 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2698 cv = get_db_sub(&sv, cv);
2700 DIE(aTHX_ "No DBsub routine");
2703 #ifdef USE_5005THREADS
2705 * First we need to check if the sub or method requires locking.
2706 * If so, we gain a lock on the CV, the first argument or the
2707 * stash (for static methods), as appropriate. This has to be
2708 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2709 * reschedule by returning a new op.
2711 MUTEX_LOCK(CvMUTEXP(cv));
2712 if (CvFLAGS(cv) & CVf_LOCKED) {
2714 if (CvFLAGS(cv) & CVf_METHOD) {
2715 if (SP > PL_stack_base + TOPMARK)
2716 sv = *(PL_stack_base + TOPMARK + 1);
2718 AV *av = (AV*)PAD_SVl(0);
2719 if (hasargs || !av || AvFILLp(av) < 0
2720 || !(sv = AvARRAY(av)[0]))
2722 MUTEX_UNLOCK(CvMUTEXP(cv));
2723 DIE(aTHX_ "no argument for locked method call");
2730 char *stashname = SvPV(sv, len);
2731 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2737 MUTEX_UNLOCK(CvMUTEXP(cv));
2738 mg = condpair_magic(sv);
2739 MUTEX_LOCK(MgMUTEXP(mg));
2740 if (MgOWNER(mg) == thr)
2741 MUTEX_UNLOCK(MgMUTEXP(mg));
2744 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2746 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2748 MUTEX_UNLOCK(MgMUTEXP(mg));
2749 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2751 MUTEX_LOCK(CvMUTEXP(cv));
2754 * Now we have permission to enter the sub, we must distinguish
2755 * four cases. (0) It's an XSUB (in which case we don't care
2756 * about ownership); (1) it's ours already (and we're recursing);
2757 * (2) it's free (but we may already be using a cached clone);
2758 * (3) another thread owns it. Case (1) is easy: we just use it.
2759 * Case (2) means we look for a clone--if we have one, use it
2760 * otherwise grab ownership of cv. Case (3) means we look for a
2761 * clone (for non-XSUBs) and have to create one if we don't
2763 * Why look for a clone in case (2) when we could just grab
2764 * ownership of cv straight away? Well, we could be recursing,
2765 * i.e. we originally tried to enter cv while another thread
2766 * owned it (hence we used a clone) but it has been freed up
2767 * and we're now recursing into it. It may or may not be "better"
2768 * to use the clone but at least CvDEPTH can be trusted.
2770 if (CvOWNER(cv) == thr || CvXSUB(cv))
2771 MUTEX_UNLOCK(CvMUTEXP(cv));
2773 /* Case (2) or (3) */
2777 * XXX Might it be better to release CvMUTEXP(cv) while we
2778 * do the hv_fetch? We might find someone has pinched it
2779 * when we look again, in which case we would be in case
2780 * (3) instead of (2) so we'd have to clone. Would the fact
2781 * that we released the mutex more quickly make up for this?
2783 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2785 /* We already have a clone to use */
2786 MUTEX_UNLOCK(CvMUTEXP(cv));
2788 DEBUG_S(PerlIO_printf(Perl_debug_log,
2789 "entersub: %p already has clone %p:%s\n",
2790 thr, cv, SvPEEK((SV*)cv)));
2793 if (CvDEPTH(cv) == 0)
2794 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2797 /* (2) => grab ownership of cv. (3) => make clone */
2801 MUTEX_UNLOCK(CvMUTEXP(cv));
2802 DEBUG_S(PerlIO_printf(Perl_debug_log,
2803 "entersub: %p grabbing %p:%s in stash %s\n",
2804 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2805 HvNAME(CvSTASH(cv)) : "(none)"));
2808 /* Make a new clone. */
2810 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2811 MUTEX_UNLOCK(CvMUTEXP(cv));
2812 DEBUG_S((PerlIO_printf(Perl_debug_log,
2813 "entersub: %p cloning %p:%s\n",
2814 thr, cv, SvPEEK((SV*)cv))));
2816 * We're creating a new clone so there's no race
2817 * between the original MUTEX_UNLOCK and the
2818 * SvREFCNT_inc since no one will be trying to undef
2819 * it out from underneath us. At least, I don't think
2822 clonecv = cv_clone(cv);
2823 SvREFCNT_dec(cv); /* finished with this */
2824 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2825 CvOWNER(clonecv) = thr;
2829 DEBUG_S(if (CvDEPTH(cv) != 0)
2830 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2832 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2835 #endif /* USE_5005THREADS */
2838 #ifdef PERL_XSUB_OLDSTYLE
2839 if (CvOLDSTYLE(cv)) {
2840 I32 (*fp3)(int,int,int);
2842 register I32 items = SP - MARK;
2843 /* We dont worry to copy from @_. */
2848 PL_stack_sp = mark + 1;
2849 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2850 items = (*fp3)(CvXSUBANY(cv).any_i32,
2851 MARK - PL_stack_base + 1,
2853 PL_stack_sp = PL_stack_base + items;
2856 #endif /* PERL_XSUB_OLDSTYLE */
2858 I32 markix = TOPMARK;
2863 /* Need to copy @_ to stack. Alternative may be to
2864 * switch stack to @_, and copy return values
2865 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2868 #ifdef USE_5005THREADS
2869 av = (AV*)PAD_SVl(0);
2871 av = GvAV(PL_defgv);
2872 #endif /* USE_5005THREADS */
2873 items = AvFILLp(av) + 1; /* @_ is not tieable */
2876 /* Mark is at the end of the stack. */
2878 Copy(AvARRAY(av), SP + 1, items, SV*);
2883 /* We assume first XSUB in &DB::sub is the called one. */
2885 SAVEVPTR(PL_curcop);
2886 PL_curcop = PL_curcopdb;
2889 /* Do we need to open block here? XXXX */
2890 (void)(*CvXSUB(cv))(aTHX_ cv);
2892 /* Enforce some sanity in scalar context. */
2893 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2894 if (markix > PL_stack_sp - PL_stack_base)
2895 *(PL_stack_base + markix) = &PL_sv_undef;
2897 *(PL_stack_base + markix) = *PL_stack_sp;
2898 PL_stack_sp = PL_stack_base + markix;
2906 register I32 items = SP - MARK;
2907 AV* padlist = CvPADLIST(cv);
2908 push_return(PL_op->op_next);
2909 PUSHBLOCK(cx, CXt_SUB, MARK);
2912 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2913 * that eval'' ops within this sub know the correct lexical space.
2914 * Owing the speed considerations, we choose instead to search for
2915 * the cv using find_runcv() when calling doeval().
2917 if (CvDEPTH(cv) >= 2) {
2918 PERL_STACK_OVERFLOW_CHECK();
2919 pad_push(padlist, CvDEPTH(cv), 1);
2921 #ifdef USE_5005THREADS
2923 AV* av = (AV*)PAD_SVl(0);
2925 items = AvFILLp(av) + 1;
2927 /* Mark is at the end of the stack. */
2929 Copy(AvARRAY(av), SP + 1, items, SV*);
2934 #endif /* USE_5005THREADS */
2935 PAD_SET_CUR(padlist, CvDEPTH(cv));
2936 #ifndef USE_5005THREADS
2938 #endif /* USE_5005THREADS */
2944 DEBUG_S(PerlIO_printf(Perl_debug_log,
2945 "%p entersub preparing @_\n", thr));
2947 av = (AV*)PAD_SVl(0);
2949 /* @_ is normally not REAL--this should only ever
2950 * happen when DB::sub() calls things that modify @_ */
2955 #ifndef USE_5005THREADS
2956 cx->blk_sub.savearray = GvAV(PL_defgv);
2957 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2958 #endif /* USE_5005THREADS */
2959 CX_CURPAD_SAVE(cx->blk_sub);
2960 cx->blk_sub.argarray = av;
2963 if (items > AvMAX(av) + 1) {
2965 if (AvARRAY(av) != ary) {
2966 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2967 SvPVX(av) = (char*)ary;
2969 if (items > AvMAX(av) + 1) {
2970 AvMAX(av) = items - 1;
2971 Renew(ary,items,SV*);
2973 SvPVX(av) = (char*)ary;
2976 Copy(MARK,AvARRAY(av),items,SV*);
2977 AvFILLp(av) = items - 1;
2985 /* warning must come *after* we fully set up the context
2986 * stuff so that __WARN__ handlers can safely dounwind()
2989 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2990 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2991 sub_crush_depth(cv);
2993 DEBUG_S(PerlIO_printf(Perl_debug_log,
2994 "%p entersub returning %p\n", thr, CvSTART(cv)));
2996 RETURNOP(CvSTART(cv));
3001 Perl_sub_crush_depth(pTHX_ CV *cv)
3004 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
3006 SV* tmpstr = sv_newmortal();
3007 gv_efullname3(tmpstr, CvGV(cv), Nullch);
3008 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
3018 IV elem = SvIV(elemsv);
3020 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
3021 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
3024 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
3025 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%"SVf"\" as array index", elemsv);
3027 elem -= PL_curcop->cop_arybase;
3028 if (SvTYPE(av) != SVt_PVAV)
3030 svp = av_fetch(av, elem, lval && !defer);
3032 #ifdef PERL_MALLOC_WRAP
3033 static const char oom_array_extend[] =
3034 "Out of memory during array extend"; /* Duplicated in av.c */
3035 if (SvUOK(elemsv)) {
3036 UV uv = SvUV(elemsv);
3037 elem = uv > IV_MAX ? IV_MAX : uv;
3039 else if (SvNOK(elemsv))
3040 elem = (IV)SvNV(elemsv);
3042 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
3044 if (!svp || *svp == &PL_sv_undef) {
3047 DIE(aTHX_ PL_no_aelem, elem);
3048 lv = sv_newmortal();
3049 sv_upgrade(lv, SVt_PVLV);
3051 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
3052 LvTARG(lv) = SvREFCNT_inc(av);
3053 LvTARGOFF(lv) = elem;
3058 if (PL_op->op_private & OPpLVAL_INTRO)
3059 save_aelem(av, elem, svp);
3060 else if (PL_op->op_private & OPpDEREF)
3061 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3063 sv = (svp ? *svp : &PL_sv_undef);
3064 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3065 sv = sv_mortalcopy(sv);
3071 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3077 Perl_croak(aTHX_ PL_no_modify);
3078 if (SvTYPE(sv) < SVt_RV)
3079 sv_upgrade(sv, SVt_RV);
3080 else if (SvTYPE(sv) >= SVt_PV) {
3082 Safefree(SvPVX(sv));
3083 SvLEN(sv) = SvCUR(sv) = 0;
3087 SvRV(sv) = NEWSV(355,0);
3090 SvRV(sv) = (SV*)newAV();
3093 SvRV(sv) = (SV*)newHV();
3108 if (SvTYPE(rsv) == SVt_PVCV) {
3114 SETs(method_common(sv, Null(U32*)));
3122 U32 hash = SvUVX(sv);
3124 XPUSHs(method_common(sv, &hash));
3129 S_method_common(pTHX_ SV* meth, U32* hashp)
3138 SV *packsv = Nullsv;
3141 name = SvPV(meth, namelen);
3142 sv = *(PL_stack_base + TOPMARK + 1);
3145 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3154 /* this isn't a reference */
3157 if(SvOK(sv) && (packname = SvPV(sv, packlen))) {
3159 he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3161 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3168 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3169 !(ob=(SV*)GvIO(iogv)))
3171 /* this isn't the name of a filehandle either */
3173 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3174 ? !isIDFIRST_utf8((U8*)packname)
3175 : !isIDFIRST(*packname)
3178 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3179 SvOK(sv) ? "without a package or object reference"
3180 : "on an undefined value");
3182 /* assume it's a package name */
3183 stash = gv_stashpvn(packname, packlen, FALSE);
3187 SV* ref = newSViv(PTR2IV(stash));
3188 hv_store(PL_stashcache, packname, packlen, ref, 0);
3192 /* it _is_ a filehandle name -- replace with a reference */
3193 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3196 /* if we got here, ob should be a reference or a glob */
3197 if (!ob || !(SvOBJECT(ob)
3198 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3201 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3205 stash = SvSTASH(ob);
3208 /* NOTE: stash may be null, hope hv_fetch_ent and
3209 gv_fetchmethod can cope (it seems they can) */
3211 /* shortcut for simple names */
3213 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3215 gv = (GV*)HeVAL(he);
3216 if (isGV(gv) && GvCV(gv) &&
3217 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3218 return (SV*)GvCV(gv);
3222 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3225 /* This code tries to figure out just what went wrong with
3226 gv_fetchmethod. It therefore needs to duplicate a lot of
3227 the internals of that function. We can't move it inside
3228 Perl_gv_fetchmethod_autoload(), however, since that would
3229 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3236 for (p = name; *p; p++) {
3238 sep = p, leaf = p + 1;
3239 else if (*p == ':' && *(p + 1) == ':')
3240 sep = p, leaf = p + 2;
3242 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3243 /* the method name is unqualified or starts with SUPER:: */
3244 packname = sep ? CopSTASHPV(PL_curcop) :
3245 stash ? HvNAME(stash) : packname;
3246 packlen = strlen(packname);
3249 /* the method name is qualified */
3251 packlen = sep - name;
3254 /* we're relying on gv_fetchmethod not autovivifying the stash */
3255 if (gv_stashpvn(packname, packlen, FALSE)) {
3257 "Can't locate object method \"%s\" via package \"%.*s\"",
3258 leaf, (int)packlen, packname);
3262 "Can't locate object method \"%s\" via package \"%.*s\""
3263 " (perhaps you forgot to load \"%.*s\"?)",
3264 leaf, (int)packlen, packname, (int)packlen, packname);
3267 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3270 #ifdef USE_5005THREADS
3272 unset_cvowner(pTHX_ void *cvarg)
3274 register CV* cv = (CV *) cvarg;
3276 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3277 thr, cv, SvPEEK((SV*)cv))));
3278 MUTEX_LOCK(CvMUTEXP(cv));
3279 DEBUG_S(if (CvDEPTH(cv) != 0)
3280 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3282 assert(thr == CvOWNER(cv));
3284 MUTEX_UNLOCK(CvMUTEXP(cv));
3287 #endif /* USE_5005THREADS */