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!
20 #define PERL_IN_PP_HOT_C
25 #ifdef USE_5005THREADS
26 static void unset_cvowner(pTHX_ void *cvarg);
27 #endif /* USE_5005THREADS */
38 PL_curcop = (COP*)PL_op;
39 TAINT_NOT; /* Each statement is presumed innocent */
40 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
49 if (PL_op->op_private & OPpLVAL_INTRO)
50 PUSHs(save_scalar(cGVOP_gv));
52 PUSHs(GvSV(cGVOP_gv));
63 PL_curcop = (COP*)PL_op;
69 PUSHMARK(PL_stack_sp);
84 XPUSHs((SV*)cGVOP_gv);
95 RETURNOP(cLOGOP->op_other);
103 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
105 temp = left; left = right; right = temp;
107 if (PL_tainting && PL_tainted && !SvTAINTED(left))
109 SvSetMagicSV(right, left);
118 RETURNOP(cLOGOP->op_other);
120 RETURNOP(cLOGOP->op_next);
126 TAINT_NOT; /* Each statement is presumed innocent */
127 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
129 oldsave = PL_scopestack[PL_scopestack_ix - 1];
130 LEAVE_SCOPE(oldsave);
136 dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
143 char* rpv = SvPV(right, rlen); /* mg_get(right) happens here */
144 bool rbyte = !DO_UTF8(right), rcopied = FALSE;
146 if (TARG == right && right != left) {
147 right = sv_2mortal(newSVpvn(rpv, rlen));
148 rpv = SvPV(right, rlen); /* no point setting UTF-8 here */
153 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
154 lbyte = !DO_UTF8(left);
155 sv_setpvn(TARG, lpv, llen);
161 else { /* TARG == left */
162 if (SvGMAGICAL(left))
163 mg_get(left); /* or mg_get(left) may happen here */
166 lpv = SvPV_nomg(left, llen);
167 lbyte = !DO_UTF8(left);
172 #if defined(PERL_Y2KWARN)
173 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
174 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
175 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
177 Perl_warner(aTHX_ packWARN(WARN_Y2K), "Possible Y2K bug: %s",
178 "about to append an integer to '19'");
183 if (lbyte != rbyte) {
185 sv_utf8_upgrade_nomg(TARG);
188 right = sv_2mortal(newSVpvn(rpv, rlen));
189 sv_utf8_upgrade_nomg(right);
190 rpv = SvPV(right, rlen);
193 sv_catpvn_nomg(TARG, rpv, rlen);
204 if (PL_op->op_flags & OPf_MOD) {
205 if (PL_op->op_private & OPpLVAL_INTRO)
206 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
207 else if (PL_op->op_private & OPpDEREF) {
209 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
218 tryAMAGICunTARGET(iter, 0);
219 PL_last_in_gv = (GV*)(*PL_stack_sp--);
220 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
221 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
222 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
225 XPUSHs((SV*)PL_last_in_gv);
228 PL_last_in_gv = (GV*)(*PL_stack_sp--);
231 return do_readline();
236 dSP; tryAMAGICbinSET(eq,0);
237 #ifndef NV_PRESERVES_UV
238 if (SvROK(TOPs) && SvROK(TOPm1s)) {
240 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
244 #ifdef PERL_PRESERVE_IVUV
247 /* Unless the left argument is integer in range we are going
248 to have to use NV maths. Hence only attempt to coerce the
249 right argument if we know the left is integer. */
252 bool auvok = SvUOK(TOPm1s);
253 bool buvok = SvUOK(TOPs);
255 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
256 /* Casting IV to UV before comparison isn't going to matter
257 on 2s complement. On 1s complement or sign&magnitude
258 (if we have any of them) it could to make negative zero
259 differ from normal zero. As I understand it. (Need to
260 check - is negative zero implementation defined behaviour
262 UV buv = SvUVX(POPs);
263 UV auv = SvUVX(TOPs);
265 SETs(boolSV(auv == buv));
268 { /* ## Mixed IV,UV ## */
272 /* == is commutative so doesn't matter which is left or right */
274 /* top of stack (b) is the iv */
283 /* As uv is a UV, it's >0, so it cannot be == */
287 /* we know iv is >= 0 */
288 SETs(boolSV((UV)iv == SvUVX(uvp)));
296 SETs(boolSV(TOPn == value));
304 if (SvTYPE(TOPs) > SVt_PVLV)
305 DIE(aTHX_ PL_no_modify);
306 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
307 && SvIVX(TOPs) != IV_MAX)
310 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
312 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
325 RETURNOP(cLOGOP->op_other);
331 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
332 useleft = USE_LEFT(TOPm1s);
333 #ifdef PERL_PRESERVE_IVUV
334 /* We must see if we can perform the addition with integers if possible,
335 as the integer code detects overflow while the NV code doesn't.
336 If either argument hasn't had a numeric conversion yet attempt to get
337 the IV. It's important to do this now, rather than just assuming that
338 it's not IOK as a PV of "9223372036854775806" may not take well to NV
339 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
340 integer in case the second argument is IV=9223372036854775806
341 We can (now) rely on sv_2iv to do the right thing, only setting the
342 public IOK flag if the value in the NV (or PV) slot is truly integer.
344 A side effect is that this also aggressively prefers integer maths over
345 fp maths for integer values.
347 How to detect overflow?
349 C 99 section 6.2.6.1 says
351 The range of nonnegative values of a signed integer type is a subrange
352 of the corresponding unsigned integer type, and the representation of
353 the same value in each type is the same. A computation involving
354 unsigned operands can never overflow, because a result that cannot be
355 represented by the resulting unsigned integer type is reduced modulo
356 the number that is one greater than the largest value that can be
357 represented by the resulting type.
361 which I read as "unsigned ints wrap."
363 signed integer overflow seems to be classed as "exception condition"
365 If an exceptional condition occurs during the evaluation of an
366 expression (that is, if the result is not mathematically defined or not
367 in the range of representable values for its type), the behavior is
370 (6.5, the 5th paragraph)
372 I had assumed that on 2s complement machines signed arithmetic would
373 wrap, hence coded pp_add and pp_subtract on the assumption that
374 everything perl builds on would be happy. After much wailing and
375 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
376 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
377 unsigned code below is actually shorter than the old code. :-)
382 /* Unless the left argument is integer in range we are going to have to
383 use NV maths. Hence only attempt to coerce the right argument if
384 we know the left is integer. */
392 /* left operand is undef, treat as zero. + 0 is identity,
393 Could SETi or SETu right now, but space optimise by not adding
394 lots of code to speed up what is probably a rarish case. */
396 /* Left operand is defined, so is it IV? */
399 if ((auvok = SvUOK(TOPm1s)))
402 register IV aiv = SvIVX(TOPm1s);
405 auvok = 1; /* Now acting as a sign flag. */
406 } else { /* 2s complement assumption for IV_MIN */
414 bool result_good = 0;
417 bool buvok = SvUOK(TOPs);
422 register IV biv = SvIVX(TOPs);
429 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
430 else "IV" now, independent of how it came in.
431 if a, b represents positive, A, B negative, a maps to -A etc
436 all UV maths. negate result if A negative.
437 add if signs same, subtract if signs differ. */
443 /* Must get smaller */
449 /* result really should be -(auv-buv). as its negation
450 of true value, need to swap our result flag */
467 if (result <= (UV)IV_MIN)
470 /* result valid, but out of range for IV. */
475 } /* Overflow, drop through to NVs. */
482 /* left operand is undef, treat as zero. + 0.0 is identity. */
486 SETn( value + TOPn );
494 AV *av = PL_op->op_flags & OPf_SPECIAL ?
495 (AV*)PAD_SV(PL_op->op_targ) : GvAV(cGVOP_gv);
496 U32 lval = PL_op->op_flags & OPf_MOD;
497 SV** svp = av_fetch(av, PL_op->op_private, lval);
498 SV *sv = (svp ? *svp : &PL_sv_undef);
500 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
501 sv = sv_mortalcopy(sv);
510 do_join(TARG, *MARK, MARK, SP);
521 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
522 * will be enough to hold an OP*.
524 SV* sv = sv_newmortal();
525 sv_upgrade(sv, SVt_PVLV);
527 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
535 /* Oversized hot code. */
539 dSP; dMARK; dORIGMARK;
545 if (PL_op->op_flags & OPf_STACKED)
550 if (gv && (io = GvIO(gv))
551 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
554 if (MARK == ORIGMARK) {
555 /* If using default handle then we need to make space to
556 * pass object as 1st arg, so move other args up ...
560 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
564 *MARK = SvTIED_obj((SV*)io, mg);
567 call_method("PRINT", G_SCALAR);
575 if (!(io = GvIO(gv))) {
576 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
577 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
579 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
580 report_evil_fh(gv, io, PL_op->op_type);
581 SETERRNO(EBADF,RMS_IFI);
584 else if (!(fp = IoOFP(io))) {
585 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
587 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
588 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
589 report_evil_fh(gv, io, PL_op->op_type);
591 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
596 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
598 if (!do_print(*MARK, fp))
602 if (!do_print(PL_ofs_sv, fp)) { /* $, */
611 if (!do_print(*MARK, fp))
619 if (PL_ors_sv && SvOK(PL_ors_sv))
620 if (!do_print(PL_ors_sv, fp)) /* $\ */
623 if (IoFLAGS(io) & IOf_FLUSH)
624 if (PerlIO_flush(fp) == EOF)
645 tryAMAGICunDEREF(to_av);
648 if (SvTYPE(av) != SVt_PVAV)
649 DIE(aTHX_ "Not an ARRAY reference");
650 if (PL_op->op_flags & OPf_REF) {
655 if (GIMME == G_SCALAR)
656 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
660 else if (PL_op->op_flags & OPf_MOD
661 && PL_op->op_private & OPpLVAL_INTRO)
662 Perl_croak(aTHX_ PL_no_localize_ref);
665 if (SvTYPE(sv) == SVt_PVAV) {
667 if (PL_op->op_flags & OPf_REF) {
672 if (GIMME == G_SCALAR)
673 Perl_croak(aTHX_ "Can't return array to lvalue"
682 if (SvTYPE(sv) != SVt_PVGV) {
686 if (SvGMAGICAL(sv)) {
692 if (PL_op->op_flags & OPf_REF ||
693 PL_op->op_private & HINT_STRICT_REFS)
694 DIE(aTHX_ PL_no_usym, "an ARRAY");
695 if (ckWARN(WARN_UNINITIALIZED))
697 if (GIMME == G_ARRAY) {
704 if ((PL_op->op_flags & OPf_SPECIAL) &&
705 !(PL_op->op_flags & OPf_MOD))
707 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
709 && (!is_gv_magical(sym,len,0)
710 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
716 if (PL_op->op_private & HINT_STRICT_REFS)
717 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
718 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
725 if (PL_op->op_private & OPpLVAL_INTRO)
727 if (PL_op->op_flags & OPf_REF) {
732 if (GIMME == G_SCALAR)
733 Perl_croak(aTHX_ "Can't return array to lvalue"
741 if (GIMME == G_ARRAY) {
742 I32 maxarg = AvFILL(av) + 1;
743 (void)POPs; /* XXXX May be optimized away? */
745 if (SvRMAGICAL(av)) {
747 for (i=0; i < (U32)maxarg; i++) {
748 SV **svp = av_fetch(av, i, FALSE);
749 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
753 Copy(AvARRAY(av), SP+1, maxarg, SV*);
757 else if (GIMME_V == G_SCALAR) {
759 I32 maxarg = AvFILL(av) + 1;
773 tryAMAGICunDEREF(to_hv);
776 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
777 DIE(aTHX_ "Not a HASH reference");
778 if (PL_op->op_flags & OPf_REF) {
783 if (gimme != G_ARRAY)
784 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
788 else if (PL_op->op_flags & OPf_MOD
789 && PL_op->op_private & OPpLVAL_INTRO)
790 Perl_croak(aTHX_ PL_no_localize_ref);
793 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
795 if (PL_op->op_flags & OPf_REF) {
800 if (gimme != G_ARRAY)
801 Perl_croak(aTHX_ "Can't return hash to lvalue"
810 if (SvTYPE(sv) != SVt_PVGV) {
814 if (SvGMAGICAL(sv)) {
820 if (PL_op->op_flags & OPf_REF ||
821 PL_op->op_private & HINT_STRICT_REFS)
822 DIE(aTHX_ PL_no_usym, "a HASH");
823 if (ckWARN(WARN_UNINITIALIZED))
825 if (gimme == G_ARRAY) {
832 if ((PL_op->op_flags & OPf_SPECIAL) &&
833 !(PL_op->op_flags & OPf_MOD))
835 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
837 && (!is_gv_magical(sym,len,0)
838 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
844 if (PL_op->op_private & HINT_STRICT_REFS)
845 DIE(aTHX_ PL_no_symref, sym, "a HASH");
846 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
853 if (PL_op->op_private & OPpLVAL_INTRO)
855 if (PL_op->op_flags & OPf_REF) {
860 if (gimme != G_ARRAY)
861 Perl_croak(aTHX_ "Can't return hash to lvalue"
869 if (gimme == G_ARRAY) { /* array wanted */
870 *PL_stack_sp = (SV*)hv;
873 else if (gimme == G_SCALAR) {
876 if (SvTYPE(hv) == SVt_PVAV)
877 hv = avhv_keys((AV*)hv);
879 TARG = Perl_hv_scalar(aTHX_ hv);
886 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
892 leftop = ((BINOP*)PL_op)->op_last;
894 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
895 leftop = ((LISTOP*)leftop)->op_first;
897 /* Skip PUSHMARK and each element already assigned to. */
898 for (i = lelem - firstlelem; i > 0; i--) {
899 leftop = leftop->op_sibling;
902 if (leftop->op_type != OP_RV2HV)
907 av_fill(ary, 0); /* clear all but the fields hash */
908 if (lastrelem >= relem) {
909 while (relem < lastrelem) { /* gobble up all the rest */
913 /* Avoid a memory leak when avhv_store_ent dies. */
914 tmpstr = sv_newmortal();
915 sv_setsv(tmpstr,relem[1]); /* value */
917 if (avhv_store_ent(ary,relem[0],tmpstr,0))
918 (void)SvREFCNT_inc(tmpstr);
919 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
925 if (relem == lastrelem)
931 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
935 if (ckWARN(WARN_MISC)) {
936 if (relem == firstrelem &&
938 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
939 SvTYPE(SvRV(*relem)) == SVt_PVHV))
941 Perl_warner(aTHX_ packWARN(WARN_MISC),
942 "Reference found where even-sized list expected");
945 Perl_warner(aTHX_ packWARN(WARN_MISC),
946 "Odd number of elements in hash assignment");
948 if (SvTYPE(hash) == SVt_PVAV) {
950 tmpstr = sv_newmortal();
951 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
952 (void)SvREFCNT_inc(tmpstr);
953 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
958 tmpstr = NEWSV(29,0);
959 didstore = hv_store_ent(hash,*relem,tmpstr,0);
960 if (SvMAGICAL(hash)) {
961 if (SvSMAGICAL(tmpstr))
974 SV **lastlelem = PL_stack_sp;
975 SV **lastrelem = PL_stack_base + POPMARK;
976 SV **firstrelem = PL_stack_base + POPMARK + 1;
977 SV **firstlelem = lastrelem + 1;
990 SV **firsthashrelem = 0; /* "= 0" keeps gcc 2.95 quiet */
993 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
996 /* If there's a common identifier on both sides we have to take
997 * special care that assigning the identifier on the left doesn't
998 * clobber a value on the right that's used later in the list.
1000 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1001 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1002 for (relem = firstrelem; relem <= lastrelem; relem++) {
1004 if ((sv = *relem)) {
1005 TAINT_NOT; /* Each item is independent */
1006 *relem = sv_mortalcopy(sv);
1016 while (lelem <= lastlelem) {
1017 TAINT_NOT; /* Each item stands on its own, taintwise. */
1019 switch (SvTYPE(sv)) {
1022 magic = SvMAGICAL(ary) != 0;
1023 if (PL_op->op_private & OPpASSIGN_HASH) {
1024 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1030 do_oddball((HV*)ary, relem, firstrelem);
1032 relem = lastrelem + 1;
1037 av_extend(ary, lastrelem - relem);
1039 while (relem <= lastrelem) { /* gobble up all the rest */
1043 sv_setsv(sv,*relem);
1045 didstore = av_store(ary,i++,sv);
1055 case SVt_PVHV: { /* normal hash */
1059 magic = SvMAGICAL(hash) != 0;
1061 firsthashrelem = relem;
1063 while (relem < lastrelem) { /* gobble up all the rest */
1068 sv = &PL_sv_no, relem++;
1069 tmpstr = NEWSV(29,0);
1071 sv_setsv(tmpstr,*relem); /* value */
1072 *(relem++) = tmpstr;
1073 if (gimme != G_VOID && hv_exists_ent(hash, sv, 0))
1074 /* key overwrites an existing entry */
1076 didstore = hv_store_ent(hash,sv,tmpstr,0);
1078 if (SvSMAGICAL(tmpstr))
1085 if (relem == lastrelem) {
1086 do_oddball(hash, relem, firstrelem);
1092 if (SvIMMORTAL(sv)) {
1093 if (relem <= lastrelem)
1097 if (relem <= lastrelem) {
1098 sv_setsv(sv, *relem);
1102 sv_setsv(sv, &PL_sv_undef);
1107 if (PL_delaymagic & ~DM_DELAY) {
1108 if (PL_delaymagic & DM_UID) {
1109 #ifdef HAS_SETRESUID
1110 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1111 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1,
1114 # ifdef HAS_SETREUID
1115 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_uid : (Uid_t)-1,
1116 (PL_delaymagic & DM_EUID) ? PL_euid : (Uid_t)-1);
1119 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1120 (void)setruid(PL_uid);
1121 PL_delaymagic &= ~DM_RUID;
1123 # endif /* HAS_SETRUID */
1125 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1126 (void)seteuid(PL_euid);
1127 PL_delaymagic &= ~DM_EUID;
1129 # endif /* HAS_SETEUID */
1130 if (PL_delaymagic & DM_UID) {
1131 if (PL_uid != PL_euid)
1132 DIE(aTHX_ "No setreuid available");
1133 (void)PerlProc_setuid(PL_uid);
1135 # endif /* HAS_SETREUID */
1136 #endif /* HAS_SETRESUID */
1137 PL_uid = PerlProc_getuid();
1138 PL_euid = PerlProc_geteuid();
1140 if (PL_delaymagic & DM_GID) {
1141 #ifdef HAS_SETRESGID
1142 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1143 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1,
1146 # ifdef HAS_SETREGID
1147 (void)setregid((PL_delaymagic & DM_RGID) ? PL_gid : (Gid_t)-1,
1148 (PL_delaymagic & DM_EGID) ? PL_egid : (Gid_t)-1);
1151 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1152 (void)setrgid(PL_gid);
1153 PL_delaymagic &= ~DM_RGID;
1155 # endif /* HAS_SETRGID */
1157 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1158 (void)setegid(PL_egid);
1159 PL_delaymagic &= ~DM_EGID;
1161 # endif /* HAS_SETEGID */
1162 if (PL_delaymagic & DM_GID) {
1163 if (PL_gid != PL_egid)
1164 DIE(aTHX_ "No setregid available");
1165 (void)PerlProc_setgid(PL_gid);
1167 # endif /* HAS_SETREGID */
1168 #endif /* HAS_SETRESGID */
1169 PL_gid = PerlProc_getgid();
1170 PL_egid = PerlProc_getegid();
1172 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1176 if (gimme == G_VOID)
1177 SP = firstrelem - 1;
1178 else if (gimme == G_SCALAR) {
1181 SETi(lastrelem - firstrelem + 1 - duplicates);
1188 /* Removes from the stack the entries which ended up as
1189 * duplicated keys in the hash (fix for [perl #24380]) */
1190 Move(firsthashrelem + duplicates,
1191 firsthashrelem, duplicates, SV**);
1192 lastrelem -= duplicates;
1197 SP = firstrelem + (lastlelem - firstlelem);
1198 lelem = firstlelem + (relem - firstrelem);
1200 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1208 register PMOP *pm = cPMOP;
1209 SV *rv = sv_newmortal();
1210 SV *sv = newSVrv(rv, "Regexp");
1211 if (pm->op_pmdynflags & PMdf_TAINTED)
1213 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1220 register PMOP *pm = cPMOP;
1226 I32 r_flags = REXEC_CHECKED;
1227 char *truebase; /* Start of string */
1228 register REGEXP *rx = PM_GETRE(pm);
1233 I32 oldsave = PL_savestack_ix;
1234 I32 update_minmatch = 1;
1235 I32 had_zerolen = 0;
1237 if (PL_op->op_flags & OPf_STACKED)
1244 PUTBACK; /* EVAL blocks need stack_sp. */
1245 s = SvPV(TARG, len);
1248 DIE(aTHX_ "panic: pp_match");
1249 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1250 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1253 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1255 /* PMdf_USED is set after a ?? matches once */
1256 if (pm->op_pmdynflags & PMdf_USED) {
1258 if (gimme == G_ARRAY)
1263 /* empty pattern special-cased to use last successful pattern if possible */
1264 if (!rx->prelen && PL_curpm) {
1269 if (rx->minlen > (I32)len)
1274 /* XXXX What part of this is needed with true \G-support? */
1275 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1277 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1278 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1279 if (mg && mg->mg_len >= 0) {
1280 if (!(rx->reganch & ROPT_GPOS_SEEN))
1281 rx->endp[0] = rx->startp[0] = mg->mg_len;
1282 else if (rx->reganch & ROPT_ANCH_GPOS) {
1283 r_flags |= REXEC_IGNOREPOS;
1284 rx->endp[0] = rx->startp[0] = mg->mg_len;
1286 minmatch = (mg->mg_flags & MGf_MINMATCH);
1287 update_minmatch = 0;
1291 if ((!global && rx->nparens)
1292 || SvTEMP(TARG) || PL_sawampersand)
1293 r_flags |= REXEC_COPY_STR;
1295 r_flags |= REXEC_SCREAM;
1297 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1298 SAVEINT(PL_multiline);
1299 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1303 if (global && rx->startp[0] != -1) {
1304 t = s = rx->endp[0] + truebase;
1305 if ((s + rx->minlen) > strend)
1307 if (update_minmatch++)
1308 minmatch = had_zerolen;
1310 if (rx->reganch & RE_USE_INTUIT &&
1311 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1312 PL_bostr = truebase;
1313 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1317 if ( (rx->reganch & ROPT_CHECK_ALL)
1319 && ((rx->reganch & ROPT_NOSCAN)
1320 || !((rx->reganch & RE_INTUIT_TAIL)
1321 && (r_flags & REXEC_SCREAM)))
1322 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1325 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1328 if (dynpm->op_pmflags & PMf_ONCE)
1329 dynpm->op_pmdynflags |= PMdf_USED;
1338 RX_MATCH_TAINTED_on(rx);
1339 TAINT_IF(RX_MATCH_TAINTED(rx));
1340 if (gimme == G_ARRAY) {
1341 I32 nparens, i, len;
1343 nparens = rx->nparens;
1344 if (global && !nparens)
1348 SPAGAIN; /* EVAL blocks could move the stack. */
1349 EXTEND(SP, nparens + i);
1350 EXTEND_MORTAL(nparens + i);
1351 for (i = !i; i <= nparens; i++) {
1352 PUSHs(sv_newmortal());
1354 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1355 len = rx->endp[i] - rx->startp[i];
1356 s = rx->startp[i] + truebase;
1357 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1358 len < 0 || len > strend - s)
1359 DIE(aTHX_ "panic: pp_match start/end pointers");
1360 sv_setpvn(*SP, s, len);
1361 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1366 if (dynpm->op_pmflags & PMf_CONTINUE) {
1368 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1369 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1371 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1372 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1374 if (rx->startp[0] != -1) {
1375 mg->mg_len = rx->endp[0];
1376 if (rx->startp[0] == rx->endp[0])
1377 mg->mg_flags |= MGf_MINMATCH;
1379 mg->mg_flags &= ~MGf_MINMATCH;
1382 had_zerolen = (rx->startp[0] != -1
1383 && rx->startp[0] == rx->endp[0]);
1384 PUTBACK; /* EVAL blocks may use stack */
1385 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1390 LEAVE_SCOPE(oldsave);
1396 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1397 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1399 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1400 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1402 if (rx->startp[0] != -1) {
1403 mg->mg_len = rx->endp[0];
1404 if (rx->startp[0] == rx->endp[0])
1405 mg->mg_flags |= MGf_MINMATCH;
1407 mg->mg_flags &= ~MGf_MINMATCH;
1410 LEAVE_SCOPE(oldsave);
1414 yup: /* Confirmed by INTUIT */
1416 RX_MATCH_TAINTED_on(rx);
1417 TAINT_IF(RX_MATCH_TAINTED(rx));
1419 if (dynpm->op_pmflags & PMf_ONCE)
1420 dynpm->op_pmdynflags |= PMdf_USED;
1421 if (RX_MATCH_COPIED(rx))
1422 Safefree(rx->subbeg);
1423 RX_MATCH_COPIED_off(rx);
1424 rx->subbeg = Nullch;
1426 rx->subbeg = truebase;
1427 rx->startp[0] = s - truebase;
1428 if (RX_MATCH_UTF8(rx)) {
1429 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1430 rx->endp[0] = t - truebase;
1433 rx->endp[0] = s - truebase + rx->minlen;
1435 rx->sublen = strend - truebase;
1438 if (PL_sawampersand) {
1441 rx->subbeg = savepvn(t, strend - t);
1442 rx->sublen = strend - t;
1443 RX_MATCH_COPIED_on(rx);
1444 off = rx->startp[0] = s - t;
1445 rx->endp[0] = off + rx->minlen;
1447 else { /* startp/endp are used by @- @+. */
1448 rx->startp[0] = s - truebase;
1449 rx->endp[0] = s - truebase + rx->minlen;
1451 rx->nparens = rx->lastparen = rx->lastcloseparen = 0; /* used by @-, @+, and $^N */
1452 LEAVE_SCOPE(oldsave);
1457 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1458 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1459 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1464 LEAVE_SCOPE(oldsave);
1465 if (gimme == G_ARRAY)
1471 Perl_do_readline(pTHX)
1473 dSP; dTARGETSTACKED;
1478 register IO *io = GvIO(PL_last_in_gv);
1479 register I32 type = PL_op->op_type;
1480 I32 gimme = GIMME_V;
1483 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1485 XPUSHs(SvTIED_obj((SV*)io, mg));
1488 call_method("READLINE", gimme);
1491 if (gimme == G_SCALAR) {
1493 SvSetSV_nosteal(TARG, result);
1502 if (IoFLAGS(io) & IOf_ARGV) {
1503 if (IoFLAGS(io) & IOf_START) {
1505 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1506 IoFLAGS(io) &= ~IOf_START;
1507 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1508 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1509 SvSETMAGIC(GvSV(PL_last_in_gv));
1514 fp = nextargv(PL_last_in_gv);
1515 if (!fp) { /* Note: fp != IoIFP(io) */
1516 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1519 else if (type == OP_GLOB)
1520 fp = Perl_start_glob(aTHX_ POPs, io);
1522 else if (type == OP_GLOB)
1524 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1525 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1529 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1530 && (!io || !(IoFLAGS(io) & IOf_START))) {
1531 if (type == OP_GLOB)
1532 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1533 "glob failed (can't start child: %s)",
1536 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1538 if (gimme == G_SCALAR) {
1539 /* undef TARG, and push that undefined value */
1540 if (type != OP_RCATLINE) {
1541 SV_CHECK_THINKFIRST(TARG);
1542 (void)SvOK_off(TARG);
1549 if (gimme == G_SCALAR) {
1553 (void)SvUPGRADE(sv, SVt_PV);
1554 tmplen = SvLEN(sv); /* remember if already alloced */
1555 if (!tmplen && !SvREADONLY(sv))
1556 Sv_Grow(sv, 80); /* try short-buffering it */
1558 if (type == OP_RCATLINE && SvOK(sv)) {
1561 (void)SvPV_force(sv, n_a);
1567 sv = sv_2mortal(NEWSV(57, 80));
1571 /* This should not be marked tainted if the fp is marked clean */
1572 #define MAYBE_TAINT_LINE(io, sv) \
1573 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1578 /* delay EOF state for a snarfed empty file */
1579 #define SNARF_EOF(gimme,rs,io,sv) \
1580 (gimme != G_SCALAR || SvCUR(sv) \
1581 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1585 if (!sv_gets(sv, fp, offset)
1587 || SNARF_EOF(gimme, PL_rs, io, sv)
1588 || PerlIO_error(fp)))
1590 PerlIO_clearerr(fp);
1591 if (IoFLAGS(io) & IOf_ARGV) {
1592 fp = nextargv(PL_last_in_gv);
1595 (void)do_close(PL_last_in_gv, FALSE);
1597 else if (type == OP_GLOB) {
1598 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1599 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1600 "glob failed (child exited with status %d%s)",
1601 (int)(STATUS_CURRENT >> 8),
1602 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1605 if (gimme == G_SCALAR) {
1606 if (type != OP_RCATLINE) {
1607 SV_CHECK_THINKFIRST(TARG);
1608 (void)SvOK_off(TARG);
1613 MAYBE_TAINT_LINE(io, sv);
1616 MAYBE_TAINT_LINE(io, sv);
1618 IoFLAGS(io) |= IOf_NOLINE;
1622 if (type == OP_GLOB) {
1625 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1626 tmps = SvEND(sv) - 1;
1627 if (*tmps == *SvPVX(PL_rs)) {
1632 for (tmps = SvPVX(sv); *tmps; tmps++)
1633 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1634 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1636 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1637 (void)POPs; /* Unmatched wildcard? Chuck it... */
1640 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1641 U8 *s = (U8*)SvPVX(sv) + offset;
1642 STRLEN len = SvCUR(sv) - offset;
1645 if (ckWARN(WARN_UTF8) &&
1646 !Perl_is_utf8_string_loc(aTHX_ s, len, &f))
1647 /* Emulate :encoding(utf8) warning in the same case. */
1648 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1649 "utf8 \"\\x%02X\" does not map to Unicode",
1650 f < (U8*)SvEND(sv) ? *f : 0);
1652 if (gimme == G_ARRAY) {
1653 if (SvLEN(sv) - SvCUR(sv) > 20) {
1654 SvLEN_set(sv, SvCUR(sv)+1);
1655 Renew(SvPVX(sv), SvLEN(sv), char);
1657 sv = sv_2mortal(NEWSV(58, 80));
1660 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1661 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1665 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1666 Renew(SvPVX(sv), SvLEN(sv), char);
1675 register PERL_CONTEXT *cx;
1676 I32 gimme = OP_GIMME(PL_op, -1);
1679 if (cxstack_ix >= 0)
1680 gimme = cxstack[cxstack_ix].blk_gimme;
1688 PUSHBLOCK(cx, CXt_BLOCK, SP);
1700 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1701 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1703 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1706 if (SvTYPE(hv) == SVt_PVHV) {
1707 if (PL_op->op_private & OPpLVAL_INTRO) {
1710 /* does the element we're localizing already exist? */
1712 /* can we determine whether it exists? */
1714 || mg_find((SV*)hv, PERL_MAGIC_env)
1715 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1716 /* Try to preserve the existenceness of a tied hash
1717 * element by using EXISTS and DELETE if possible.
1718 * Fallback to FETCH and STORE otherwise */
1719 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1720 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1721 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1723 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1726 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1727 svp = he ? &HeVAL(he) : 0;
1729 else if (SvTYPE(hv) == SVt_PVAV) {
1730 if (PL_op->op_private & OPpLVAL_INTRO)
1731 DIE(aTHX_ "Can't localize pseudo-hash element");
1732 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1738 if (!svp || *svp == &PL_sv_undef) {
1743 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1745 lv = sv_newmortal();
1746 sv_upgrade(lv, SVt_PVLV);
1748 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1749 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1750 LvTARG(lv) = SvREFCNT_inc(hv);
1755 if (PL_op->op_private & OPpLVAL_INTRO) {
1756 if (HvNAME(hv) && isGV(*svp))
1757 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1761 char *key = SvPV(keysv, keylen);
1762 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1764 save_helem(hv, keysv, svp);
1767 else if (PL_op->op_private & OPpDEREF)
1768 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1770 sv = (svp ? *svp : &PL_sv_undef);
1771 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1772 * Pushing the magical RHS on to the stack is useless, since
1773 * that magic is soon destined to be misled by the local(),
1774 * and thus the later pp_sassign() will fail to mg_get() the
1775 * old value. This should also cure problems with delayed
1776 * mg_get()s. GSAR 98-07-03 */
1777 if (!lval && SvGMAGICAL(sv))
1778 sv = sv_mortalcopy(sv);
1786 register PERL_CONTEXT *cx;
1792 if (PL_op->op_flags & OPf_SPECIAL) {
1793 cx = &cxstack[cxstack_ix];
1794 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1799 gimme = OP_GIMME(PL_op, -1);
1801 if (cxstack_ix >= 0)
1802 gimme = cxstack[cxstack_ix].blk_gimme;
1808 if (gimme == G_VOID)
1810 else if (gimme == G_SCALAR) {
1813 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1816 *MARK = sv_mortalcopy(TOPs);
1819 *MARK = &PL_sv_undef;
1823 else if (gimme == G_ARRAY) {
1824 /* in case LEAVE wipes old return values */
1825 for (mark = newsp + 1; mark <= SP; mark++) {
1826 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1827 *mark = sv_mortalcopy(*mark);
1828 TAINT_NOT; /* Each item is independent */
1832 PL_curpm = newpm; /* Don't pop $1 et al till now */
1842 register PERL_CONTEXT *cx;
1848 cx = &cxstack[cxstack_ix];
1849 if (CxTYPE(cx) != CXt_LOOP)
1850 DIE(aTHX_ "panic: pp_iter");
1852 itersvp = CxITERVAR(cx);
1853 av = cx->blk_loop.iterary;
1854 if (SvTYPE(av) != SVt_PVAV) {
1855 /* iterate ($min .. $max) */
1856 if (cx->blk_loop.iterlval) {
1857 /* string increment */
1858 register SV* cur = cx->blk_loop.iterlval;
1860 char *max = SvOK((SV*)av) ? SvPV((SV*)av, maxlen) : "";
1861 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1862 #ifndef USE_5005THREADS /* don't risk potential race */
1863 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1864 /* safe to reuse old SV */
1865 sv_setsv(*itersvp, cur);
1870 /* we need a fresh SV every time so that loop body sees a
1871 * completely new SV for closures/references to work as
1873 SvREFCNT_dec(*itersvp);
1874 *itersvp = newSVsv(cur);
1876 if (strEQ(SvPVX(cur), max))
1877 sv_setiv(cur, 0); /* terminate next time */
1884 /* integer increment */
1885 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1888 #ifndef USE_5005THREADS /* don't risk potential race */
1889 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1890 /* safe to reuse old SV */
1891 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1896 /* we need a fresh SV every time so that loop body sees a
1897 * completely new SV for closures/references to work as they
1899 SvREFCNT_dec(*itersvp);
1900 *itersvp = newSViv(cx->blk_loop.iterix++);
1906 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1909 SvREFCNT_dec(*itersvp);
1911 if (SvMAGICAL(av) || AvREIFY(av)) {
1912 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1919 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1921 if (sv && SvREFCNT(sv) == 0) {
1923 Perl_croak(aTHX_ "Use of freed value in iteration");
1930 if (av != PL_curstack && sv == &PL_sv_undef) {
1931 SV *lv = cx->blk_loop.iterlval;
1932 if (lv && SvREFCNT(lv) > 1) {
1937 SvREFCNT_dec(LvTARG(lv));
1939 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1940 sv_upgrade(lv, SVt_PVLV);
1942 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1944 LvTARG(lv) = SvREFCNT_inc(av);
1945 LvTARGOFF(lv) = cx->blk_loop.iterix;
1946 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1950 *itersvp = SvREFCNT_inc(sv);
1957 register PMOP *pm = cPMOP;
1973 register REGEXP *rx = PM_GETRE(pm);
1975 int force_on_match = 0;
1976 I32 oldsave = PL_savestack_ix;
1978 bool doutf8 = FALSE;
1981 /* known replacement string? */
1982 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1983 if (PL_op->op_flags & OPf_STACKED)
1990 if (SvFAKE(TARG) && SvREADONLY(TARG))
1991 sv_force_normal(TARG);
1992 if (SvREADONLY(TARG)
1993 || (SvTYPE(TARG) > SVt_PVLV
1994 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1995 DIE(aTHX_ PL_no_modify);
1998 s = SvPV(TARG, len);
1999 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
2001 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
2002 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
2007 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2011 DIE(aTHX_ "panic: pp_subst");
2014 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2015 maxiters = 2 * slen + 10; /* We can match twice at each
2016 position, once with zero-length,
2017 second time with non-zero. */
2019 if (!rx->prelen && PL_curpm) {
2023 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
2024 ? REXEC_COPY_STR : 0;
2026 r_flags |= REXEC_SCREAM;
2027 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
2028 SAVEINT(PL_multiline);
2029 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
2032 if (rx->reganch & RE_USE_INTUIT) {
2034 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
2038 /* How to do it in subst? */
2039 /* if ( (rx->reganch & ROPT_CHECK_ALL)
2041 && ((rx->reganch & ROPT_NOSCAN)
2042 || !((rx->reganch & RE_INTUIT_TAIL)
2043 && (r_flags & REXEC_SCREAM))))
2048 /* only replace once? */
2049 once = !(rpm->op_pmflags & PMf_GLOBAL);
2051 /* known replacement string? */
2053 /* replacement needing upgrading? */
2054 if (DO_UTF8(TARG) && !doutf8) {
2055 nsv = sv_newmortal();
2058 sv_recode_to_utf8(nsv, PL_encoding);
2060 sv_utf8_upgrade(nsv);
2061 c = SvPV(nsv, clen);
2065 c = SvPV(dstr, clen);
2066 doutf8 = DO_UTF8(dstr);
2074 /* can do inplace substitution? */
2075 if (c && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2076 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)
2077 && (!doutf8 || SvUTF8(TARG))) {
2078 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2079 r_flags | REXEC_CHECKED))
2083 LEAVE_SCOPE(oldsave);
2086 if (force_on_match) {
2088 s = SvPV_force(TARG, len);
2093 SvSCREAM_off(TARG); /* disable possible screamer */
2095 rxtainted |= RX_MATCH_TAINTED(rx);
2096 m = orig + rx->startp[0];
2097 d = orig + rx->endp[0];
2099 if (m - s > strend - d) { /* faster to shorten from end */
2101 Copy(c, m, clen, char);
2106 Move(d, m, i, char);
2110 SvCUR_set(TARG, m - s);
2113 else if ((i = m - s)) { /* faster from front */
2121 Copy(c, m, clen, char);
2126 Copy(c, d, clen, char);
2131 TAINT_IF(rxtainted & 1);
2137 if (iters++ > maxiters)
2138 DIE(aTHX_ "Substitution loop");
2139 rxtainted |= RX_MATCH_TAINTED(rx);
2140 m = rx->startp[0] + orig;
2144 Move(s, d, i, char);
2148 Copy(c, d, clen, char);
2151 s = rx->endp[0] + orig;
2152 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2154 /* don't match same null twice */
2155 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2158 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2159 Move(s, d, i+1, char); /* include the NUL */
2161 TAINT_IF(rxtainted & 1);
2163 PUSHs(sv_2mortal(newSViv((I32)iters)));
2165 (void)SvPOK_only_UTF8(TARG);
2166 TAINT_IF(rxtainted);
2167 if (SvSMAGICAL(TARG)) {
2175 LEAVE_SCOPE(oldsave);
2179 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2180 r_flags | REXEC_CHECKED))
2182 if (force_on_match) {
2184 s = SvPV_force(TARG, len);
2187 rxtainted |= RX_MATCH_TAINTED(rx);
2188 dstr = NEWSV(25, len);
2189 sv_setpvn(dstr, m, s-m);
2194 register PERL_CONTEXT *cx;
2198 RETURNOP(cPMOP->op_pmreplroot);
2200 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2202 if (iters++ > maxiters)
2203 DIE(aTHX_ "Substitution loop");
2204 rxtainted |= RX_MATCH_TAINTED(rx);
2205 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2210 strend = s + (strend - m);
2212 m = rx->startp[0] + orig;
2213 if (doutf8 && !SvUTF8(dstr))
2214 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2216 sv_catpvn(dstr, s, m-s);
2217 s = rx->endp[0] + orig;
2219 sv_catpvn(dstr, c, clen);
2222 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2223 TARG, NULL, r_flags));
2224 if (doutf8 && !DO_UTF8(TARG))
2225 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2227 sv_catpvn(dstr, s, strend - s);
2229 (void)SvOOK_off(TARG);
2231 Safefree(SvPVX(TARG));
2232 SvPVX(TARG) = SvPVX(dstr);
2233 SvCUR_set(TARG, SvCUR(dstr));
2234 SvLEN_set(TARG, SvLEN(dstr));
2235 doutf8 |= DO_UTF8(dstr);
2239 TAINT_IF(rxtainted & 1);
2241 PUSHs(sv_2mortal(newSViv((I32)iters)));
2243 (void)SvPOK_only(TARG);
2246 TAINT_IF(rxtainted);
2249 LEAVE_SCOPE(oldsave);
2258 LEAVE_SCOPE(oldsave);
2267 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2268 ++*PL_markstack_ptr;
2269 LEAVE; /* exit inner scope */
2272 if (PL_stack_base + *PL_markstack_ptr > SP) {
2274 I32 gimme = GIMME_V;
2276 LEAVE; /* exit outer scope */
2277 (void)POPMARK; /* pop src */
2278 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2279 (void)POPMARK; /* pop dst */
2280 SP = PL_stack_base + POPMARK; /* pop original mark */
2281 if (gimme == G_SCALAR) {
2285 else if (gimme == G_ARRAY)
2292 ENTER; /* enter inner scope */
2295 src = PL_stack_base[*PL_markstack_ptr];
2299 RETURNOP(cLOGOP->op_other);
2310 register PERL_CONTEXT *cx;
2316 if (gimme == G_SCALAR) {
2319 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2321 *MARK = SvREFCNT_inc(TOPs);
2326 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2328 *MARK = sv_mortalcopy(sv);
2333 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2337 *MARK = &PL_sv_undef;
2341 else if (gimme == G_ARRAY) {
2342 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2343 if (!SvTEMP(*MARK)) {
2344 *MARK = sv_mortalcopy(*MARK);
2345 TAINT_NOT; /* Each item is independent */
2351 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2352 PL_curpm = newpm; /* ... and pop $1 et al */
2356 return pop_return();
2359 /* This duplicates the above code because the above code must not
2360 * get any slower by more conditions */
2368 register PERL_CONTEXT *cx;
2375 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2376 /* We are an argument to a function or grep().
2377 * This kind of lvalueness was legal before lvalue
2378 * subroutines too, so be backward compatible:
2379 * cannot report errors. */
2381 /* Scalar context *is* possible, on the LHS of -> only,
2382 * as in f()->meth(). But this is not an lvalue. */
2383 if (gimme == G_SCALAR)
2385 if (gimme == G_ARRAY) {
2386 if (!CvLVALUE(cx->blk_sub.cv))
2387 goto temporise_array;
2388 EXTEND_MORTAL(SP - newsp);
2389 for (mark = newsp + 1; mark <= SP; mark++) {
2392 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2393 *mark = sv_mortalcopy(*mark);
2395 /* Can be a localized value subject to deletion. */
2396 PL_tmps_stack[++PL_tmps_ix] = *mark;
2397 (void)SvREFCNT_inc(*mark);
2402 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2403 /* Here we go for robustness, not for speed, so we change all
2404 * the refcounts so the caller gets a live guy. Cannot set
2405 * TEMP, so sv_2mortal is out of question. */
2406 if (!CvLVALUE(cx->blk_sub.cv)) {
2411 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2413 if (gimme == G_SCALAR) {
2417 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2422 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2423 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2424 : "a readonly value" : "a temporary");
2426 else { /* Can be a localized value
2427 * subject to deletion. */
2428 PL_tmps_stack[++PL_tmps_ix] = *mark;
2429 (void)SvREFCNT_inc(*mark);
2432 else { /* Should not happen? */
2437 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2438 (MARK > SP ? "Empty array" : "Array"));
2442 else if (gimme == G_ARRAY) {
2443 EXTEND_MORTAL(SP - newsp);
2444 for (mark = newsp + 1; mark <= SP; mark++) {
2445 if (*mark != &PL_sv_undef
2446 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2447 /* Might be flattened array after $#array = */
2453 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2454 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2457 /* Can be a localized value subject to deletion. */
2458 PL_tmps_stack[++PL_tmps_ix] = *mark;
2459 (void)SvREFCNT_inc(*mark);
2465 if (gimme == G_SCALAR) {
2469 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2471 *MARK = SvREFCNT_inc(TOPs);
2476 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2478 *MARK = sv_mortalcopy(sv);
2483 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2487 *MARK = &PL_sv_undef;
2491 else if (gimme == G_ARRAY) {
2493 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2494 if (!SvTEMP(*MARK)) {
2495 *MARK = sv_mortalcopy(*MARK);
2496 TAINT_NOT; /* Each item is independent */
2503 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2504 PL_curpm = newpm; /* ... and pop $1 et al */
2508 return pop_return();
2513 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2515 SV *dbsv = GvSV(PL_DBsub);
2517 if (!PERLDB_SUB_NN) {
2521 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2522 || strEQ(GvNAME(gv), "END")
2523 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2524 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2525 && (gv = (GV*)*svp) ))) {
2526 /* Use GV from the stack as a fallback. */
2527 /* GV is potentially non-unique, or contain different CV. */
2528 SV *tmp = newRV((SV*)cv);
2529 sv_setsv(dbsv, tmp);
2533 gv_efullname3(dbsv, gv, Nullch);
2537 (void)SvUPGRADE(dbsv, SVt_PVIV);
2538 (void)SvIOK_on(dbsv);
2539 SAVEIV(SvIVX(dbsv));
2540 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2544 PL_curcopdb = PL_curcop;
2545 cv = GvCV(PL_DBsub);
2555 register PERL_CONTEXT *cx;
2557 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2560 DIE(aTHX_ "Not a CODE reference");
2561 switch (SvTYPE(sv)) {
2567 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2569 SP = PL_stack_base + POPMARK;
2572 if (SvGMAGICAL(sv)) {
2576 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2579 sym = SvPV(sv, n_a);
2581 DIE(aTHX_ PL_no_usym, "a subroutine");
2582 if (PL_op->op_private & HINT_STRICT_REFS)
2583 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2584 cv = get_cv(sym, TRUE);
2589 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2590 tryAMAGICunDEREF(to_cv);
2593 if (SvTYPE(cv) == SVt_PVCV)
2598 DIE(aTHX_ "Not a CODE reference");
2603 if (!(cv = GvCVu((GV*)sv)))
2604 cv = sv_2cv(sv, &stash, &gv, FALSE);
2617 if (!CvROOT(cv) && !CvXSUB(cv)) {
2621 /* anonymous or undef'd function leaves us no recourse */
2622 if (CvANON(cv) || !(gv = CvGV(cv)))
2623 DIE(aTHX_ "Undefined subroutine called");
2625 /* autoloaded stub? */
2626 if (cv != GvCV(gv)) {
2629 /* should call AUTOLOAD now? */
2632 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2639 sub_name = sv_newmortal();
2640 gv_efullname3(sub_name, gv, Nullch);
2641 DIE(aTHX_ "Undefined subroutine &%"SVf" called", sub_name);
2645 DIE(aTHX_ "Not a CODE reference");
2650 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2651 cv = get_db_sub(&sv, cv);
2653 DIE(aTHX_ "No DBsub routine");
2656 #ifdef USE_5005THREADS
2658 * First we need to check if the sub or method requires locking.
2659 * If so, we gain a lock on the CV, the first argument or the
2660 * stash (for static methods), as appropriate. This has to be
2661 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2662 * reschedule by returning a new op.
2664 MUTEX_LOCK(CvMUTEXP(cv));
2665 if (CvFLAGS(cv) & CVf_LOCKED) {
2667 if (CvFLAGS(cv) & CVf_METHOD) {
2668 if (SP > PL_stack_base + TOPMARK)
2669 sv = *(PL_stack_base + TOPMARK + 1);
2671 AV *av = (AV*)PAD_SVl(0);
2672 if (hasargs || !av || AvFILLp(av) < 0
2673 || !(sv = AvARRAY(av)[0]))
2675 MUTEX_UNLOCK(CvMUTEXP(cv));
2676 DIE(aTHX_ "no argument for locked method call");
2683 char *stashname = SvPV(sv, len);
2684 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2690 MUTEX_UNLOCK(CvMUTEXP(cv));
2691 mg = condpair_magic(sv);
2692 MUTEX_LOCK(MgMUTEXP(mg));
2693 if (MgOWNER(mg) == thr)
2694 MUTEX_UNLOCK(MgMUTEXP(mg));
2697 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2699 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2701 MUTEX_UNLOCK(MgMUTEXP(mg));
2702 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2704 MUTEX_LOCK(CvMUTEXP(cv));
2707 * Now we have permission to enter the sub, we must distinguish
2708 * four cases. (0) It's an XSUB (in which case we don't care
2709 * about ownership); (1) it's ours already (and we're recursing);
2710 * (2) it's free (but we may already be using a cached clone);
2711 * (3) another thread owns it. Case (1) is easy: we just use it.
2712 * Case (2) means we look for a clone--if we have one, use it
2713 * otherwise grab ownership of cv. Case (3) means we look for a
2714 * clone (for non-XSUBs) and have to create one if we don't
2716 * Why look for a clone in case (2) when we could just grab
2717 * ownership of cv straight away? Well, we could be recursing,
2718 * i.e. we originally tried to enter cv while another thread
2719 * owned it (hence we used a clone) but it has been freed up
2720 * and we're now recursing into it. It may or may not be "better"
2721 * to use the clone but at least CvDEPTH can be trusted.
2723 if (CvOWNER(cv) == thr || CvXSUB(cv))
2724 MUTEX_UNLOCK(CvMUTEXP(cv));
2726 /* Case (2) or (3) */
2730 * XXX Might it be better to release CvMUTEXP(cv) while we
2731 * do the hv_fetch? We might find someone has pinched it
2732 * when we look again, in which case we would be in case
2733 * (3) instead of (2) so we'd have to clone. Would the fact
2734 * that we released the mutex more quickly make up for this?
2736 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2738 /* We already have a clone to use */
2739 MUTEX_UNLOCK(CvMUTEXP(cv));
2741 DEBUG_S(PerlIO_printf(Perl_debug_log,
2742 "entersub: %p already has clone %p:%s\n",
2743 thr, cv, SvPEEK((SV*)cv)));
2746 if (CvDEPTH(cv) == 0)
2747 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2750 /* (2) => grab ownership of cv. (3) => make clone */
2754 MUTEX_UNLOCK(CvMUTEXP(cv));
2755 DEBUG_S(PerlIO_printf(Perl_debug_log,
2756 "entersub: %p grabbing %p:%s in stash %s\n",
2757 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2758 HvNAME(CvSTASH(cv)) : "(none)"));
2761 /* Make a new clone. */
2763 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2764 MUTEX_UNLOCK(CvMUTEXP(cv));
2765 DEBUG_S((PerlIO_printf(Perl_debug_log,
2766 "entersub: %p cloning %p:%s\n",
2767 thr, cv, SvPEEK((SV*)cv))));
2769 * We're creating a new clone so there's no race
2770 * between the original MUTEX_UNLOCK and the
2771 * SvREFCNT_inc since no one will be trying to undef
2772 * it out from underneath us. At least, I don't think
2775 clonecv = cv_clone(cv);
2776 SvREFCNT_dec(cv); /* finished with this */
2777 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2778 CvOWNER(clonecv) = thr;
2782 DEBUG_S(if (CvDEPTH(cv) != 0)
2783 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2785 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2788 #endif /* USE_5005THREADS */
2791 #ifdef PERL_XSUB_OLDSTYLE
2792 if (CvOLDSTYLE(cv)) {
2793 I32 (*fp3)(int,int,int);
2795 register I32 items = SP - MARK;
2796 /* We dont worry to copy from @_. */
2801 PL_stack_sp = mark + 1;
2802 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2803 items = (*fp3)(CvXSUBANY(cv).any_i32,
2804 MARK - PL_stack_base + 1,
2806 PL_stack_sp = PL_stack_base + items;
2809 #endif /* PERL_XSUB_OLDSTYLE */
2811 I32 markix = TOPMARK;
2816 /* Need to copy @_ to stack. Alternative may be to
2817 * switch stack to @_, and copy return values
2818 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2821 #ifdef USE_5005THREADS
2822 av = (AV*)PAD_SVl(0);
2824 av = GvAV(PL_defgv);
2825 #endif /* USE_5005THREADS */
2826 items = AvFILLp(av) + 1; /* @_ is not tieable */
2829 /* Mark is at the end of the stack. */
2831 Copy(AvARRAY(av), SP + 1, items, SV*);
2836 /* We assume first XSUB in &DB::sub is the called one. */
2838 SAVEVPTR(PL_curcop);
2839 PL_curcop = PL_curcopdb;
2842 /* Do we need to open block here? XXXX */
2843 (void)(*CvXSUB(cv))(aTHX_ cv);
2845 /* Enforce some sanity in scalar context. */
2846 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2847 if (markix > PL_stack_sp - PL_stack_base)
2848 *(PL_stack_base + markix) = &PL_sv_undef;
2850 *(PL_stack_base + markix) = *PL_stack_sp;
2851 PL_stack_sp = PL_stack_base + markix;
2859 register I32 items = SP - MARK;
2860 AV* padlist = CvPADLIST(cv);
2861 push_return(PL_op->op_next);
2862 PUSHBLOCK(cx, CXt_SUB, MARK);
2865 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2866 * that eval'' ops within this sub know the correct lexical space.
2867 * Owing the speed considerations, we choose instead to search for
2868 * the cv using find_runcv() when calling doeval().
2870 if (CvDEPTH(cv) >= 2) {
2871 PERL_STACK_OVERFLOW_CHECK();
2872 pad_push(padlist, CvDEPTH(cv), 1);
2874 #ifdef USE_5005THREADS
2876 AV* av = (AV*)PAD_SVl(0);
2878 items = AvFILLp(av) + 1;
2880 /* Mark is at the end of the stack. */
2882 Copy(AvARRAY(av), SP + 1, items, SV*);
2887 #endif /* USE_5005THREADS */
2888 PAD_SET_CUR(padlist, CvDEPTH(cv));
2889 #ifndef USE_5005THREADS
2891 #endif /* USE_5005THREADS */
2897 DEBUG_S(PerlIO_printf(Perl_debug_log,
2898 "%p entersub preparing @_\n", thr));
2900 av = (AV*)PAD_SVl(0);
2902 /* @_ is normally not REAL--this should only ever
2903 * happen when DB::sub() calls things that modify @_ */
2908 #ifndef USE_5005THREADS
2909 cx->blk_sub.savearray = GvAV(PL_defgv);
2910 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2911 #endif /* USE_5005THREADS */
2912 CX_CURPAD_SAVE(cx->blk_sub);
2913 cx->blk_sub.argarray = av;
2916 if (items > AvMAX(av) + 1) {
2918 if (AvARRAY(av) != ary) {
2919 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2920 SvPVX(av) = (char*)ary;
2922 if (items > AvMAX(av) + 1) {
2923 AvMAX(av) = items - 1;
2924 Renew(ary,items,SV*);
2926 SvPVX(av) = (char*)ary;
2929 Copy(MARK,AvARRAY(av),items,SV*);
2930 AvFILLp(av) = items - 1;
2938 /* warning must come *after* we fully set up the context
2939 * stuff so that __WARN__ handlers can safely dounwind()
2942 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2943 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2944 sub_crush_depth(cv);
2946 DEBUG_S(PerlIO_printf(Perl_debug_log,
2947 "%p entersub returning %p\n", thr, CvSTART(cv)));
2949 RETURNOP(CvSTART(cv));
2954 Perl_sub_crush_depth(pTHX_ CV *cv)
2957 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2959 SV* tmpstr = sv_newmortal();
2960 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2961 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2971 IV elem = SvIV(elemsv);
2973 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2974 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2977 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2978 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%"SVf"\" as array index", elemsv);
2980 elem -= PL_curcop->cop_arybase;
2981 if (SvTYPE(av) != SVt_PVAV)
2983 svp = av_fetch(av, elem, lval && !defer);
2985 if (!svp || *svp == &PL_sv_undef) {
2988 DIE(aTHX_ PL_no_aelem, elem);
2989 lv = sv_newmortal();
2990 sv_upgrade(lv, SVt_PVLV);
2992 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
2993 LvTARG(lv) = SvREFCNT_inc(av);
2994 LvTARGOFF(lv) = elem;
2999 if (PL_op->op_private & OPpLVAL_INTRO)
3000 save_aelem(av, elem, svp);
3001 else if (PL_op->op_private & OPpDEREF)
3002 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3004 sv = (svp ? *svp : &PL_sv_undef);
3005 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3006 sv = sv_mortalcopy(sv);
3012 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3018 Perl_croak(aTHX_ PL_no_modify);
3019 if (SvTYPE(sv) < SVt_RV)
3020 sv_upgrade(sv, SVt_RV);
3021 else if (SvTYPE(sv) >= SVt_PV) {
3022 (void)SvOOK_off(sv);
3023 Safefree(SvPVX(sv));
3024 SvLEN(sv) = SvCUR(sv) = 0;
3028 SvRV(sv) = NEWSV(355,0);
3031 SvRV(sv) = (SV*)newAV();
3034 SvRV(sv) = (SV*)newHV();
3049 if (SvTYPE(rsv) == SVt_PVCV) {
3055 SETs(method_common(sv, Null(U32*)));
3063 U32 hash = SvUVX(sv);
3065 XPUSHs(method_common(sv, &hash));
3070 S_method_common(pTHX_ SV* meth, U32* hashp)
3079 SV *packsv = Nullsv;
3082 name = SvPV(meth, namelen);
3083 sv = *(PL_stack_base + TOPMARK + 1);
3086 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3095 /* this isn't a reference */
3098 if(SvOK(sv) && (packname = SvPV(sv, packlen))) {
3100 he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
3102 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3109 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3110 !(ob=(SV*)GvIO(iogv)))
3112 /* this isn't the name of a filehandle either */
3114 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3115 ? !isIDFIRST_utf8((U8*)packname)
3116 : !isIDFIRST(*packname)
3119 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3120 SvOK(sv) ? "without a package or object reference"
3121 : "on an undefined value");
3123 /* assume it's a package name */
3124 stash = gv_stashpvn(packname, packlen, FALSE);
3128 SV* ref = newSViv(PTR2IV(stash));
3129 hv_store(PL_stashcache, packname, packlen, ref, 0);
3133 /* it _is_ a filehandle name -- replace with a reference */
3134 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3137 /* if we got here, ob should be a reference or a glob */
3138 if (!ob || !(SvOBJECT(ob)
3139 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3142 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3146 stash = SvSTASH(ob);
3149 /* NOTE: stash may be null, hope hv_fetch_ent and
3150 gv_fetchmethod can cope (it seems they can) */
3152 /* shortcut for simple names */
3154 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3156 gv = (GV*)HeVAL(he);
3157 if (isGV(gv) && GvCV(gv) &&
3158 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3159 return (SV*)GvCV(gv);
3163 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3166 /* This code tries to figure out just what went wrong with
3167 gv_fetchmethod. It therefore needs to duplicate a lot of
3168 the internals of that function. We can't move it inside
3169 Perl_gv_fetchmethod_autoload(), however, since that would
3170 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3177 for (p = name; *p; p++) {
3179 sep = p, leaf = p + 1;
3180 else if (*p == ':' && *(p + 1) == ':')
3181 sep = p, leaf = p + 2;
3183 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3184 /* the method name is unqualified or starts with SUPER:: */
3185 packname = sep ? CopSTASHPV(PL_curcop) :
3186 stash ? HvNAME(stash) : packname;
3187 packlen = strlen(packname);
3190 /* the method name is qualified */
3192 packlen = sep - name;
3195 /* we're relying on gv_fetchmethod not autovivifying the stash */
3196 if (gv_stashpvn(packname, packlen, FALSE)) {
3198 "Can't locate object method \"%s\" via package \"%.*s\"",
3199 leaf, (int)packlen, packname);
3203 "Can't locate object method \"%s\" via package \"%.*s\""
3204 " (perhaps you forgot to load \"%.*s\"?)",
3205 leaf, (int)packlen, packname, (int)packlen, packname);
3208 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3211 #ifdef USE_5005THREADS
3213 unset_cvowner(pTHX_ void *cvarg)
3215 register CV* cv = (CV *) cvarg;
3217 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3218 thr, cv, SvPEEK((SV*)cv))));
3219 MUTEX_LOCK(CvMUTEXP(cv));
3220 DEBUG_S(if (CvDEPTH(cv) != 0)
3221 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3223 assert(thr == CvOWNER(cv));
3225 MUTEX_UNLOCK(CvMUTEXP(cv));
3228 #endif /* USE_5005THREADS */