3 * Copyright (c) 1991-2002, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
14 * Awake! Awake! Fear, Fire, Foes! Awake!
19 #define PERL_IN_PP_HOT_C
24 #ifdef USE_5005THREADS
25 static void unset_cvowner(pTHX_ void *cvarg);
26 #endif /* USE_5005THREADS */
37 PL_curcop = (COP*)PL_op;
38 TAINT_NOT; /* Each statement is presumed innocent */
39 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
48 if (PL_op->op_private & OPpLVAL_INTRO)
49 PUSHs(save_scalar(cGVOP_gv));
51 PUSHs(GvSV(cGVOP_gv));
62 PL_curcop = (COP*)PL_op;
68 PUSHMARK(PL_stack_sp);
83 XPUSHs((SV*)cGVOP_gv);
94 RETURNOP(cLOGOP->op_other);
102 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
104 temp = left; left = right; right = temp;
106 if (PL_tainting && PL_tainted && !SvTAINTED(left))
108 SvSetMagicSV(right, left);
117 RETURNOP(cLOGOP->op_other);
119 RETURNOP(cLOGOP->op_next);
125 TAINT_NOT; /* Each statement is presumed innocent */
126 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
128 oldsave = PL_scopestack[PL_scopestack_ix - 1];
129 LEAVE_SCOPE(oldsave);
135 dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
142 char* rpv = SvPV(right, rlen); /* mg_get(right) happens here */
143 bool rbyte = !SvUTF8(right), rcopied = FALSE;
145 if (TARG == right && right != left) {
146 right = sv_2mortal(newSVpvn(rpv, rlen));
147 rpv = SvPV(right, rlen); /* no point setting UTF8 here */
152 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
153 lbyte = !SvUTF8(left);
154 sv_setpvn(TARG, lpv, llen);
160 else { /* TARG == left */
161 if (SvGMAGICAL(left))
162 mg_get(left); /* or mg_get(left) may happen here */
165 lpv = SvPV_nomg(left, llen);
166 lbyte = !SvUTF8(left);
169 #if defined(PERL_Y2KWARN)
170 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
171 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
172 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
174 Perl_warner(aTHX_ packWARN(WARN_Y2K), "Possible Y2K bug: %s",
175 "about to append an integer to '19'");
180 if (lbyte != rbyte) {
182 sv_utf8_upgrade_nomg(TARG);
185 right = sv_2mortal(newSVpvn(rpv, rlen));
186 sv_utf8_upgrade_nomg(right);
187 rpv = SvPV(right, rlen);
190 sv_catpvn_nomg(TARG, rpv, rlen);
201 if (PL_op->op_flags & OPf_MOD) {
202 if (PL_op->op_private & OPpLVAL_INTRO)
203 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
204 else if (PL_op->op_private & OPpDEREF) {
206 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
215 tryAMAGICunTARGET(iter, 0);
216 PL_last_in_gv = (GV*)(*PL_stack_sp--);
217 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
218 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
219 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
222 XPUSHs((SV*)PL_last_in_gv);
225 PL_last_in_gv = (GV*)(*PL_stack_sp--);
228 return do_readline();
233 dSP; tryAMAGICbinSET(eq,0);
234 #ifndef NV_PRESERVES_UV
235 if (SvROK(TOPs) && SvROK(TOPm1s)) {
237 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
241 #ifdef PERL_PRESERVE_IVUV
244 /* Unless the left argument is integer in range we are going
245 to have to use NV maths. Hence only attempt to coerce the
246 right argument if we know the left is integer. */
249 bool auvok = SvUOK(TOPm1s);
250 bool buvok = SvUOK(TOPs);
252 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
253 /* Casting IV to UV before comparison isn't going to matter
254 on 2s complement. On 1s complement or sign&magnitude
255 (if we have any of them) it could to make negative zero
256 differ from normal zero. As I understand it. (Need to
257 check - is negative zero implementation defined behaviour
259 UV buv = SvUVX(POPs);
260 UV auv = SvUVX(TOPs);
262 SETs(boolSV(auv == buv));
265 { /* ## Mixed IV,UV ## */
269 /* == is commutative so doesn't matter which is left or right */
271 /* top of stack (b) is the iv */
280 /* As uv is a UV, it's >0, so it cannot be == */
284 /* we know iv is >= 0 */
285 SETs(boolSV((UV)iv == SvUVX(uvp)));
293 SETs(boolSV(TOPn == value));
301 if (SvTYPE(TOPs) > SVt_PVLV)
302 DIE(aTHX_ PL_no_modify);
303 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
304 && SvIVX(TOPs) != IV_MAX)
307 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
309 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
322 RETURNOP(cLOGOP->op_other);
328 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
329 useleft = USE_LEFT(TOPm1s);
330 #ifdef PERL_PRESERVE_IVUV
331 /* We must see if we can perform the addition with integers if possible,
332 as the integer code detects overflow while the NV code doesn't.
333 If either argument hasn't had a numeric conversion yet attempt to get
334 the IV. It's important to do this now, rather than just assuming that
335 it's not IOK as a PV of "9223372036854775806" may not take well to NV
336 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
337 integer in case the second argument is IV=9223372036854775806
338 We can (now) rely on sv_2iv to do the right thing, only setting the
339 public IOK flag if the value in the NV (or PV) slot is truly integer.
341 A side effect is that this also aggressively prefers integer maths over
342 fp maths for integer values.
344 How to detect overflow?
346 C 99 section 6.2.6.1 says
348 The range of nonnegative values of a signed integer type is a subrange
349 of the corresponding unsigned integer type, and the representation of
350 the same value in each type is the same. A computation involving
351 unsigned operands can never overflow, because a result that cannot be
352 represented by the resulting unsigned integer type is reduced modulo
353 the number that is one greater than the largest value that can be
354 represented by the resulting type.
358 which I read as "unsigned ints wrap."
360 signed integer overflow seems to be classed as "exception condition"
362 If an exceptional condition occurs during the evaluation of an
363 expression (that is, if the result is not mathematically defined or not
364 in the range of representable values for its type), the behavior is
367 (6.5, the 5th paragraph)
369 I had assumed that on 2s complement machines signed arithmetic would
370 wrap, hence coded pp_add and pp_subtract on the assumption that
371 everything perl builds on would be happy. After much wailing and
372 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
373 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
374 unsigned code below is actually shorter than the old code. :-)
379 /* Unless the left argument is integer in range we are going to have to
380 use NV maths. Hence only attempt to coerce the right argument if
381 we know the left is integer. */
389 /* left operand is undef, treat as zero. + 0 is identity,
390 Could SETi or SETu right now, but space optimise by not adding
391 lots of code to speed up what is probably a rarish case. */
393 /* Left operand is defined, so is it IV? */
396 if ((auvok = SvUOK(TOPm1s)))
399 register IV aiv = SvIVX(TOPm1s);
402 auvok = 1; /* Now acting as a sign flag. */
403 } else { /* 2s complement assumption for IV_MIN */
411 bool result_good = 0;
414 bool buvok = SvUOK(TOPs);
419 register IV biv = SvIVX(TOPs);
426 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
427 else "IV" now, independent of how it came in.
428 if a, b represents positive, A, B negative, a maps to -A etc
433 all UV maths. negate result if A negative.
434 add if signs same, subtract if signs differ. */
440 /* Must get smaller */
446 /* result really should be -(auv-buv). as its negation
447 of true value, need to swap our result flag */
464 if (result <= (UV)IV_MIN)
467 /* result valid, but out of range for IV. */
472 } /* Overflow, drop through to NVs. */
479 /* left operand is undef, treat as zero. + 0.0 is identity. */
483 SETn( value + TOPn );
491 AV *av = GvAV(cGVOP_gv);
492 U32 lval = PL_op->op_flags & OPf_MOD;
493 SV** svp = av_fetch(av, PL_op->op_private, lval);
494 SV *sv = (svp ? *svp : &PL_sv_undef);
496 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
497 sv = sv_mortalcopy(sv);
506 do_join(TARG, *MARK, MARK, SP);
517 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
518 * will be enough to hold an OP*.
520 SV* sv = sv_newmortal();
521 sv_upgrade(sv, SVt_PVLV);
523 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
531 /* Oversized hot code. */
535 dSP; dMARK; dORIGMARK;
541 if (PL_op->op_flags & OPf_STACKED)
546 if (gv && (io = GvIO(gv))
547 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
550 if (MARK == ORIGMARK) {
551 /* If using default handle then we need to make space to
552 * pass object as 1st arg, so move other args up ...
556 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
560 *MARK = SvTIED_obj((SV*)io, mg);
563 call_method("PRINT", G_SCALAR);
571 if (!(io = GvIO(gv))) {
572 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
573 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
575 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
576 report_evil_fh(gv, io, PL_op->op_type);
577 SETERRNO(EBADF,RMS_IFI);
580 else if (!(fp = IoOFP(io))) {
581 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
583 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
584 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
585 report_evil_fh(gv, io, PL_op->op_type);
587 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
592 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
594 if (!do_print(*MARK, fp))
598 if (!do_print(PL_ofs_sv, fp)) { /* $, */
607 if (!do_print(*MARK, fp))
615 if (PL_ors_sv && SvOK(PL_ors_sv))
616 if (!do_print(PL_ors_sv, fp)) /* $\ */
619 if (IoFLAGS(io) & IOf_FLUSH)
620 if (PerlIO_flush(fp) == EOF)
641 tryAMAGICunDEREF(to_av);
644 if (SvTYPE(av) != SVt_PVAV)
645 DIE(aTHX_ "Not an ARRAY reference");
646 if (PL_op->op_flags & OPf_REF) {
651 if (GIMME == G_SCALAR)
652 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
656 else if (PL_op->op_flags & OPf_MOD
657 && PL_op->op_private & OPpLVAL_INTRO)
658 Perl_croak(aTHX_ PL_no_localize_ref);
661 if (SvTYPE(sv) == SVt_PVAV) {
663 if (PL_op->op_flags & OPf_REF) {
668 if (GIMME == G_SCALAR)
669 Perl_croak(aTHX_ "Can't return array to lvalue"
678 if (SvTYPE(sv) != SVt_PVGV) {
682 if (SvGMAGICAL(sv)) {
688 if (PL_op->op_flags & OPf_REF ||
689 PL_op->op_private & HINT_STRICT_REFS)
690 DIE(aTHX_ PL_no_usym, "an ARRAY");
691 if (ckWARN(WARN_UNINITIALIZED))
693 if (GIMME == G_ARRAY) {
700 if ((PL_op->op_flags & OPf_SPECIAL) &&
701 !(PL_op->op_flags & OPf_MOD))
703 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
705 && (!is_gv_magical(sym,len,0)
706 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
712 if (PL_op->op_private & HINT_STRICT_REFS)
713 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
714 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
721 if (PL_op->op_private & OPpLVAL_INTRO)
723 if (PL_op->op_flags & OPf_REF) {
728 if (GIMME == G_SCALAR)
729 Perl_croak(aTHX_ "Can't return array to lvalue"
737 if (GIMME == G_ARRAY) {
738 I32 maxarg = AvFILL(av) + 1;
739 (void)POPs; /* XXXX May be optimized away? */
741 if (SvRMAGICAL(av)) {
743 for (i=0; i < (U32)maxarg; i++) {
744 SV **svp = av_fetch(av, i, FALSE);
745 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
749 Copy(AvARRAY(av), SP+1, maxarg, SV*);
753 else if (GIMME_V == G_SCALAR) {
755 I32 maxarg = AvFILL(av) + 1;
768 tryAMAGICunDEREF(to_hv);
771 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
772 DIE(aTHX_ "Not a HASH reference");
773 if (PL_op->op_flags & OPf_REF) {
778 if (GIMME == G_SCALAR)
779 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
783 else if (PL_op->op_flags & OPf_MOD
784 && PL_op->op_private & OPpLVAL_INTRO)
785 Perl_croak(aTHX_ PL_no_localize_ref);
788 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
790 if (PL_op->op_flags & OPf_REF) {
795 if (GIMME == G_SCALAR)
796 Perl_croak(aTHX_ "Can't return hash to lvalue"
805 if (SvTYPE(sv) != SVt_PVGV) {
809 if (SvGMAGICAL(sv)) {
815 if (PL_op->op_flags & OPf_REF ||
816 PL_op->op_private & HINT_STRICT_REFS)
817 DIE(aTHX_ PL_no_usym, "a HASH");
818 if (ckWARN(WARN_UNINITIALIZED))
820 if (GIMME == G_ARRAY) {
827 if ((PL_op->op_flags & OPf_SPECIAL) &&
828 !(PL_op->op_flags & OPf_MOD))
830 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
832 && (!is_gv_magical(sym,len,0)
833 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
839 if (PL_op->op_private & HINT_STRICT_REFS)
840 DIE(aTHX_ PL_no_symref, sym, "a HASH");
841 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
848 if (PL_op->op_private & OPpLVAL_INTRO)
850 if (PL_op->op_flags & OPf_REF) {
855 if (GIMME == G_SCALAR)
856 Perl_croak(aTHX_ "Can't return hash to lvalue"
864 if (GIMME == G_ARRAY) { /* array wanted */
865 *PL_stack_sp = (SV*)hv;
870 if (SvTYPE(hv) == SVt_PVAV)
871 hv = avhv_keys((AV*)hv);
873 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
874 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
884 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
890 leftop = ((BINOP*)PL_op)->op_last;
892 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
893 leftop = ((LISTOP*)leftop)->op_first;
895 /* Skip PUSHMARK and each element already assigned to. */
896 for (i = lelem - firstlelem; i > 0; i--) {
897 leftop = leftop->op_sibling;
900 if (leftop->op_type != OP_RV2HV)
905 av_fill(ary, 0); /* clear all but the fields hash */
906 if (lastrelem >= relem) {
907 while (relem < lastrelem) { /* gobble up all the rest */
911 /* Avoid a memory leak when avhv_store_ent dies. */
912 tmpstr = sv_newmortal();
913 sv_setsv(tmpstr,relem[1]); /* value */
915 if (avhv_store_ent(ary,relem[0],tmpstr,0))
916 (void)SvREFCNT_inc(tmpstr);
917 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
923 if (relem == lastrelem)
929 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
933 if (ckWARN(WARN_MISC)) {
934 if (relem == firstrelem &&
936 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
937 SvTYPE(SvRV(*relem)) == SVt_PVHV))
939 Perl_warner(aTHX_ packWARN(WARN_MISC),
940 "Reference found where even-sized list expected");
943 Perl_warner(aTHX_ packWARN(WARN_MISC),
944 "Odd number of elements in hash assignment");
946 if (SvTYPE(hash) == SVt_PVAV) {
948 tmpstr = sv_newmortal();
949 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
950 (void)SvREFCNT_inc(tmpstr);
951 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
956 tmpstr = NEWSV(29,0);
957 didstore = hv_store_ent(hash,*relem,tmpstr,0);
958 if (SvMAGICAL(hash)) {
959 if (SvSMAGICAL(tmpstr))
972 SV **lastlelem = PL_stack_sp;
973 SV **lastrelem = PL_stack_base + POPMARK;
974 SV **firstrelem = PL_stack_base + POPMARK + 1;
975 SV **firstlelem = lastrelem + 1;
988 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
990 /* If there's a common identifier on both sides we have to take
991 * special care that assigning the identifier on the left doesn't
992 * clobber a value on the right that's used later in the list.
994 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
995 EXTEND_MORTAL(lastrelem - firstrelem + 1);
996 for (relem = firstrelem; relem <= lastrelem; relem++) {
999 TAINT_NOT; /* Each item is independent */
1000 *relem = sv_mortalcopy(sv);
1010 while (lelem <= lastlelem) {
1011 TAINT_NOT; /* Each item stands on its own, taintwise. */
1013 switch (SvTYPE(sv)) {
1016 magic = SvMAGICAL(ary) != 0;
1017 if (PL_op->op_private & OPpASSIGN_HASH) {
1018 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1024 do_oddball((HV*)ary, relem, firstrelem);
1026 relem = lastrelem + 1;
1031 av_extend(ary, lastrelem - relem);
1033 while (relem <= lastrelem) { /* gobble up all the rest */
1037 sv_setsv(sv,*relem);
1039 didstore = av_store(ary,i++,sv);
1049 case SVt_PVHV: { /* normal hash */
1053 magic = SvMAGICAL(hash) != 0;
1056 while (relem < lastrelem) { /* gobble up all the rest */
1061 sv = &PL_sv_no, relem++;
1062 tmpstr = NEWSV(29,0);
1064 sv_setsv(tmpstr,*relem); /* value */
1065 *(relem++) = tmpstr;
1066 didstore = hv_store_ent(hash,sv,tmpstr,0);
1068 if (SvSMAGICAL(tmpstr))
1075 if (relem == lastrelem) {
1076 do_oddball(hash, relem, firstrelem);
1082 if (SvIMMORTAL(sv)) {
1083 if (relem <= lastrelem)
1087 if (relem <= lastrelem) {
1088 sv_setsv(sv, *relem);
1092 sv_setsv(sv, &PL_sv_undef);
1097 if (PL_delaymagic & ~DM_DELAY) {
1098 if (PL_delaymagic & DM_UID) {
1099 #ifdef HAS_SETRESUID
1100 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1102 # ifdef HAS_SETREUID
1103 (void)setreuid(PL_uid,PL_euid);
1106 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1107 (void)setruid(PL_uid);
1108 PL_delaymagic &= ~DM_RUID;
1110 # endif /* HAS_SETRUID */
1112 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1113 (void)seteuid(PL_uid);
1114 PL_delaymagic &= ~DM_EUID;
1116 # endif /* HAS_SETEUID */
1117 if (PL_delaymagic & DM_UID) {
1118 if (PL_uid != PL_euid)
1119 DIE(aTHX_ "No setreuid available");
1120 (void)PerlProc_setuid(PL_uid);
1122 # endif /* HAS_SETREUID */
1123 #endif /* HAS_SETRESUID */
1124 PL_uid = PerlProc_getuid();
1125 PL_euid = PerlProc_geteuid();
1127 if (PL_delaymagic & DM_GID) {
1128 #ifdef HAS_SETRESGID
1129 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1131 # ifdef HAS_SETREGID
1132 (void)setregid(PL_gid,PL_egid);
1135 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1136 (void)setrgid(PL_gid);
1137 PL_delaymagic &= ~DM_RGID;
1139 # endif /* HAS_SETRGID */
1141 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1142 (void)setegid(PL_gid);
1143 PL_delaymagic &= ~DM_EGID;
1145 # endif /* HAS_SETEGID */
1146 if (PL_delaymagic & DM_GID) {
1147 if (PL_gid != PL_egid)
1148 DIE(aTHX_ "No setregid available");
1149 (void)PerlProc_setgid(PL_gid);
1151 # endif /* HAS_SETREGID */
1152 #endif /* HAS_SETRESGID */
1153 PL_gid = PerlProc_getgid();
1154 PL_egid = PerlProc_getegid();
1156 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1161 if (gimme == G_VOID)
1162 SP = firstrelem - 1;
1163 else if (gimme == G_SCALAR) {
1166 SETi(lastrelem - firstrelem + 1);
1172 SP = firstrelem + (lastlelem - firstlelem);
1173 lelem = firstlelem + (relem - firstrelem);
1175 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1183 register PMOP *pm = cPMOP;
1184 SV *rv = sv_newmortal();
1185 SV *sv = newSVrv(rv, "Regexp");
1186 if (pm->op_pmdynflags & PMdf_TAINTED)
1188 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1195 register PMOP *pm = cPMOP;
1201 I32 r_flags = REXEC_CHECKED;
1202 char *truebase; /* Start of string */
1203 register REGEXP *rx = PM_GETRE(pm);
1208 I32 oldsave = PL_savestack_ix;
1209 I32 update_minmatch = 1;
1210 I32 had_zerolen = 0;
1212 if (PL_op->op_flags & OPf_STACKED)
1219 PUTBACK; /* EVAL blocks need stack_sp. */
1220 s = SvPV(TARG, len);
1223 DIE(aTHX_ "panic: pp_match");
1224 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1225 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1228 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1230 /* PMdf_USED is set after a ?? matches once */
1231 if (pm->op_pmdynflags & PMdf_USED) {
1233 if (gimme == G_ARRAY)
1238 /* empty pattern special-cased to use last successful pattern if possible */
1239 if (!rx->prelen && PL_curpm) {
1244 if (rx->minlen > (I32)len)
1249 /* XXXX What part of this is needed with true \G-support? */
1250 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1252 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1253 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1254 if (mg && mg->mg_len >= 0) {
1255 if (!(rx->reganch & ROPT_GPOS_SEEN))
1256 rx->endp[0] = rx->startp[0] = mg->mg_len;
1257 else if (rx->reganch & ROPT_ANCH_GPOS) {
1258 r_flags |= REXEC_IGNOREPOS;
1259 rx->endp[0] = rx->startp[0] = mg->mg_len;
1261 minmatch = (mg->mg_flags & MGf_MINMATCH);
1262 update_minmatch = 0;
1266 if ((!global && rx->nparens)
1267 || SvTEMP(TARG) || PL_sawampersand)
1268 r_flags |= REXEC_COPY_STR;
1270 r_flags |= REXEC_SCREAM;
1272 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1273 SAVEINT(PL_multiline);
1274 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1278 if (global && rx->startp[0] != -1) {
1279 t = s = rx->endp[0] + truebase;
1280 if ((s + rx->minlen) > strend)
1282 if (update_minmatch++)
1283 minmatch = had_zerolen;
1285 if (rx->reganch & RE_USE_INTUIT &&
1286 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1287 PL_bostr = truebase;
1288 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1292 if ( (rx->reganch & ROPT_CHECK_ALL)
1294 && ((rx->reganch & ROPT_NOSCAN)
1295 || !((rx->reganch & RE_INTUIT_TAIL)
1296 && (r_flags & REXEC_SCREAM)))
1297 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1300 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1303 if (dynpm->op_pmflags & PMf_ONCE)
1304 dynpm->op_pmdynflags |= PMdf_USED;
1313 RX_MATCH_TAINTED_on(rx);
1314 TAINT_IF(RX_MATCH_TAINTED(rx));
1315 if (gimme == G_ARRAY) {
1316 I32 nparens, i, len;
1318 nparens = rx->nparens;
1319 if (global && !nparens)
1323 SPAGAIN; /* EVAL blocks could move the stack. */
1324 EXTEND(SP, nparens + i);
1325 EXTEND_MORTAL(nparens + i);
1326 for (i = !i; i <= nparens; i++) {
1327 PUSHs(sv_newmortal());
1329 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1330 len = rx->endp[i] - rx->startp[i];
1331 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1332 len < 0 || len > strend - s)
1333 DIE(aTHX_ "panic: pp_match start/end pointers");
1334 s = rx->startp[i] + truebase;
1335 sv_setpvn(*SP, s, len);
1336 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1341 if (dynpm->op_pmflags & PMf_CONTINUE) {
1343 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1344 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1346 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1347 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1349 if (rx->startp[0] != -1) {
1350 mg->mg_len = rx->endp[0];
1351 if (rx->startp[0] == rx->endp[0])
1352 mg->mg_flags |= MGf_MINMATCH;
1354 mg->mg_flags &= ~MGf_MINMATCH;
1357 had_zerolen = (rx->startp[0] != -1
1358 && rx->startp[0] == rx->endp[0]);
1359 PUTBACK; /* EVAL blocks may use stack */
1360 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1365 LEAVE_SCOPE(oldsave);
1371 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1372 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1374 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1375 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1377 if (rx->startp[0] != -1) {
1378 mg->mg_len = rx->endp[0];
1379 if (rx->startp[0] == rx->endp[0])
1380 mg->mg_flags |= MGf_MINMATCH;
1382 mg->mg_flags &= ~MGf_MINMATCH;
1385 LEAVE_SCOPE(oldsave);
1389 yup: /* Confirmed by INTUIT */
1391 RX_MATCH_TAINTED_on(rx);
1392 TAINT_IF(RX_MATCH_TAINTED(rx));
1394 if (dynpm->op_pmflags & PMf_ONCE)
1395 dynpm->op_pmdynflags |= PMdf_USED;
1396 if (RX_MATCH_COPIED(rx))
1397 Safefree(rx->subbeg);
1398 RX_MATCH_COPIED_off(rx);
1399 rx->subbeg = Nullch;
1401 rx->subbeg = truebase;
1402 rx->startp[0] = s - truebase;
1403 if (RX_MATCH_UTF8(rx)) {
1404 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1405 rx->endp[0] = t - truebase;
1408 rx->endp[0] = s - truebase + rx->minlen;
1410 rx->sublen = strend - truebase;
1413 if (PL_sawampersand) {
1416 rx->subbeg = savepvn(t, strend - t);
1417 rx->sublen = strend - t;
1418 RX_MATCH_COPIED_on(rx);
1419 off = rx->startp[0] = s - t;
1420 rx->endp[0] = off + rx->minlen;
1422 else { /* startp/endp are used by @- @+. */
1423 rx->startp[0] = s - truebase;
1424 rx->endp[0] = s - truebase + rx->minlen;
1426 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1427 LEAVE_SCOPE(oldsave);
1432 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1433 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1434 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1439 LEAVE_SCOPE(oldsave);
1440 if (gimme == G_ARRAY)
1446 Perl_do_readline(pTHX)
1448 dSP; dTARGETSTACKED;
1453 register IO *io = GvIO(PL_last_in_gv);
1454 register I32 type = PL_op->op_type;
1455 I32 gimme = GIMME_V;
1458 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1460 XPUSHs(SvTIED_obj((SV*)io, mg));
1463 call_method("READLINE", gimme);
1466 if (gimme == G_SCALAR) {
1468 SvSetSV_nosteal(TARG, result);
1477 if (IoFLAGS(io) & IOf_ARGV) {
1478 if (IoFLAGS(io) & IOf_START) {
1480 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1481 IoFLAGS(io) &= ~IOf_START;
1482 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1483 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1484 SvSETMAGIC(GvSV(PL_last_in_gv));
1489 fp = nextargv(PL_last_in_gv);
1490 if (!fp) { /* Note: fp != IoIFP(io) */
1491 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1494 else if (type == OP_GLOB)
1495 fp = Perl_start_glob(aTHX_ POPs, io);
1497 else if (type == OP_GLOB)
1499 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1500 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1504 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1505 && (!io || !(IoFLAGS(io) & IOf_START))) {
1506 if (type == OP_GLOB)
1507 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1508 "glob failed (can't start child: %s)",
1511 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1513 if (gimme == G_SCALAR) {
1514 /* undef TARG, and push that undefined value */
1515 SV_CHECK_THINKFIRST(TARG);
1516 (void)SvOK_off(TARG);
1522 if (gimme == G_SCALAR) {
1526 (void)SvUPGRADE(sv, SVt_PV);
1527 tmplen = SvLEN(sv); /* remember if already alloced */
1529 Sv_Grow(sv, 80); /* try short-buffering it */
1531 if (type == OP_RCATLINE && SvOK(sv)) {
1534 (void)SvPV_force(sv, n_a);
1540 sv = sv_2mortal(NEWSV(57, 80));
1544 /* This should not be marked tainted if the fp is marked clean */
1545 #define MAYBE_TAINT_LINE(io, sv) \
1546 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1551 /* delay EOF state for a snarfed empty file */
1552 #define SNARF_EOF(gimme,rs,io,sv) \
1553 (gimme != G_SCALAR || SvCUR(sv) \
1554 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1558 if (!sv_gets(sv, fp, offset)
1559 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1561 PerlIO_clearerr(fp);
1562 if (IoFLAGS(io) & IOf_ARGV) {
1563 fp = nextargv(PL_last_in_gv);
1566 (void)do_close(PL_last_in_gv, FALSE);
1568 else if (type == OP_GLOB) {
1569 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1570 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1571 "glob failed (child exited with status %d%s)",
1572 (int)(STATUS_CURRENT >> 8),
1573 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1576 if (gimme == G_SCALAR) {
1577 SV_CHECK_THINKFIRST(TARG);
1578 (void)SvOK_off(TARG);
1582 MAYBE_TAINT_LINE(io, sv);
1585 MAYBE_TAINT_LINE(io, sv);
1587 IoFLAGS(io) |= IOf_NOLINE;
1591 if (type == OP_GLOB) {
1594 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1595 tmps = SvEND(sv) - 1;
1596 if (*tmps == *SvPVX(PL_rs)) {
1601 for (tmps = SvPVX(sv); *tmps; tmps++)
1602 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1603 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1605 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1606 (void)POPs; /* Unmatched wildcard? Chuck it... */
1610 if (gimme == G_ARRAY) {
1611 if (SvLEN(sv) - SvCUR(sv) > 20) {
1612 SvLEN_set(sv, SvCUR(sv)+1);
1613 Renew(SvPVX(sv), SvLEN(sv), char);
1615 sv = sv_2mortal(NEWSV(58, 80));
1618 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1619 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1623 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1624 Renew(SvPVX(sv), SvLEN(sv), char);
1633 register PERL_CONTEXT *cx;
1634 I32 gimme = OP_GIMME(PL_op, -1);
1637 if (cxstack_ix >= 0)
1638 gimme = cxstack[cxstack_ix].blk_gimme;
1646 PUSHBLOCK(cx, CXt_BLOCK, SP);
1658 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1659 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1661 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1664 if (SvTYPE(hv) == SVt_PVHV) {
1665 if (PL_op->op_private & OPpLVAL_INTRO) {
1668 /* does the element we're localizing already exist? */
1670 /* can we determine whether it exists? */
1672 || mg_find((SV*)hv, PERL_MAGIC_env)
1673 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1674 /* Try to preserve the existenceness of a tied hash
1675 * element by using EXISTS and DELETE if possible.
1676 * Fallback to FETCH and STORE otherwise */
1677 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1678 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1679 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1681 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1684 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1685 svp = he ? &HeVAL(he) : 0;
1687 else if (SvTYPE(hv) == SVt_PVAV) {
1688 if (PL_op->op_private & OPpLVAL_INTRO)
1689 DIE(aTHX_ "Can't localize pseudo-hash element");
1690 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1696 if (!svp || *svp == &PL_sv_undef) {
1701 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1703 lv = sv_newmortal();
1704 sv_upgrade(lv, SVt_PVLV);
1706 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1707 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1708 LvTARG(lv) = SvREFCNT_inc(hv);
1713 if (PL_op->op_private & OPpLVAL_INTRO) {
1714 if (HvNAME(hv) && isGV(*svp))
1715 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1719 char *key = SvPV(keysv, keylen);
1720 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1722 save_helem(hv, keysv, svp);
1725 else if (PL_op->op_private & OPpDEREF)
1726 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1728 sv = (svp ? *svp : &PL_sv_undef);
1729 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1730 * Pushing the magical RHS on to the stack is useless, since
1731 * that magic is soon destined to be misled by the local(),
1732 * and thus the later pp_sassign() will fail to mg_get() the
1733 * old value. This should also cure problems with delayed
1734 * mg_get()s. GSAR 98-07-03 */
1735 if (!lval && SvGMAGICAL(sv))
1736 sv = sv_mortalcopy(sv);
1744 register PERL_CONTEXT *cx;
1750 if (PL_op->op_flags & OPf_SPECIAL) {
1751 cx = &cxstack[cxstack_ix];
1752 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1757 gimme = OP_GIMME(PL_op, -1);
1759 if (cxstack_ix >= 0)
1760 gimme = cxstack[cxstack_ix].blk_gimme;
1766 if (gimme == G_VOID)
1768 else if (gimme == G_SCALAR) {
1771 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1774 *MARK = sv_mortalcopy(TOPs);
1777 *MARK = &PL_sv_undef;
1781 else if (gimme == G_ARRAY) {
1782 /* in case LEAVE wipes old return values */
1783 for (mark = newsp + 1; mark <= SP; mark++) {
1784 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1785 *mark = sv_mortalcopy(*mark);
1786 TAINT_NOT; /* Each item is independent */
1790 PL_curpm = newpm; /* Don't pop $1 et al till now */
1800 register PERL_CONTEXT *cx;
1806 cx = &cxstack[cxstack_ix];
1807 if (CxTYPE(cx) != CXt_LOOP)
1808 DIE(aTHX_ "panic: pp_iter");
1810 itersvp = CxITERVAR(cx);
1811 av = cx->blk_loop.iterary;
1812 if (SvTYPE(av) != SVt_PVAV) {
1813 /* iterate ($min .. $max) */
1814 if (cx->blk_loop.iterlval) {
1815 /* string increment */
1816 register SV* cur = cx->blk_loop.iterlval;
1818 char *max = SvPV((SV*)av, maxlen);
1819 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1820 #ifndef USE_5005THREADS /* don't risk potential race */
1821 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1822 /* safe to reuse old SV */
1823 sv_setsv(*itersvp, cur);
1828 /* we need a fresh SV every time so that loop body sees a
1829 * completely new SV for closures/references to work as
1831 SvREFCNT_dec(*itersvp);
1832 *itersvp = newSVsv(cur);
1834 if (strEQ(SvPVX(cur), max))
1835 sv_setiv(cur, 0); /* terminate next time */
1842 /* integer increment */
1843 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1846 #ifndef USE_5005THREADS /* don't risk potential race */
1847 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1848 /* safe to reuse old SV */
1849 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1854 /* we need a fresh SV every time so that loop body sees a
1855 * completely new SV for closures/references to work as they
1857 SvREFCNT_dec(*itersvp);
1858 *itersvp = newSViv(cx->blk_loop.iterix++);
1864 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1867 SvREFCNT_dec(*itersvp);
1869 if (SvMAGICAL(av) || AvREIFY(av)) {
1870 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1877 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1883 if (av != PL_curstack && sv == &PL_sv_undef) {
1884 SV *lv = cx->blk_loop.iterlval;
1885 if (lv && SvREFCNT(lv) > 1) {
1890 SvREFCNT_dec(LvTARG(lv));
1892 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1893 sv_upgrade(lv, SVt_PVLV);
1895 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1897 LvTARG(lv) = SvREFCNT_inc(av);
1898 LvTARGOFF(lv) = cx->blk_loop.iterix;
1899 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1903 *itersvp = SvREFCNT_inc(sv);
1910 register PMOP *pm = cPMOP;
1926 register REGEXP *rx = PM_GETRE(pm);
1928 int force_on_match = 0;
1929 I32 oldsave = PL_savestack_ix;
1931 bool doutf8 = FALSE;
1934 /* known replacement string? */
1935 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1936 if (PL_op->op_flags & OPf_STACKED)
1943 if (SvFAKE(TARG) && SvREADONLY(TARG))
1944 sv_force_normal(TARG);
1945 if (SvREADONLY(TARG)
1946 || (SvTYPE(TARG) > SVt_PVLV
1947 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1948 DIE(aTHX_ PL_no_modify);
1951 s = SvPV(TARG, len);
1952 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1954 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1955 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1960 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1964 DIE(aTHX_ "panic: pp_subst");
1967 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
1968 maxiters = 2 * slen + 10; /* We can match twice at each
1969 position, once with zero-length,
1970 second time with non-zero. */
1972 if (!rx->prelen && PL_curpm) {
1976 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1977 ? REXEC_COPY_STR : 0;
1979 r_flags |= REXEC_SCREAM;
1980 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1981 SAVEINT(PL_multiline);
1982 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1985 if (rx->reganch & RE_USE_INTUIT) {
1987 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1991 /* How to do it in subst? */
1992 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1994 && ((rx->reganch & ROPT_NOSCAN)
1995 || !((rx->reganch & RE_INTUIT_TAIL)
1996 && (r_flags & REXEC_SCREAM))))
2001 /* only replace once? */
2002 once = !(rpm->op_pmflags & PMf_GLOBAL);
2004 /* known replacement string? */
2006 /* replacement needing upgrading? */
2007 if (DO_UTF8(TARG) && !doutf8) {
2008 nsv = sv_newmortal();
2011 sv_recode_to_utf8(nsv, PL_encoding);
2013 sv_utf8_upgrade(nsv);
2014 c = SvPV(nsv, clen);
2018 c = SvPV(dstr, clen);
2019 doutf8 = DO_UTF8(dstr);
2027 /* can do inplace substitution? */
2028 if (c && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2029 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)
2030 && (!doutf8 || SvUTF8(TARG))) {
2031 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2032 r_flags | REXEC_CHECKED))
2036 LEAVE_SCOPE(oldsave);
2039 if (force_on_match) {
2041 s = SvPV_force(TARG, len);
2046 SvSCREAM_off(TARG); /* disable possible screamer */
2048 rxtainted |= RX_MATCH_TAINTED(rx);
2049 m = orig + rx->startp[0];
2050 d = orig + rx->endp[0];
2052 if (m - s > strend - d) { /* faster to shorten from end */
2054 Copy(c, m, clen, char);
2059 Move(d, m, i, char);
2063 SvCUR_set(TARG, m - s);
2066 else if ((i = m - s)) { /* faster from front */
2074 Copy(c, m, clen, char);
2079 Copy(c, d, clen, char);
2084 TAINT_IF(rxtainted & 1);
2090 if (iters++ > maxiters)
2091 DIE(aTHX_ "Substitution loop");
2092 rxtainted |= RX_MATCH_TAINTED(rx);
2093 m = rx->startp[0] + orig;
2097 Move(s, d, i, char);
2101 Copy(c, d, clen, char);
2104 s = rx->endp[0] + orig;
2105 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2107 /* don't match same null twice */
2108 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2111 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2112 Move(s, d, i+1, char); /* include the NUL */
2114 TAINT_IF(rxtainted & 1);
2116 PUSHs(sv_2mortal(newSViv((I32)iters)));
2118 (void)SvPOK_only_UTF8(TARG);
2119 TAINT_IF(rxtainted);
2120 if (SvSMAGICAL(TARG)) {
2128 LEAVE_SCOPE(oldsave);
2132 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2133 r_flags | REXEC_CHECKED))
2135 if (force_on_match) {
2137 s = SvPV_force(TARG, len);
2140 rxtainted |= RX_MATCH_TAINTED(rx);
2141 dstr = NEWSV(25, len);
2142 sv_setpvn(dstr, m, s-m);
2147 register PERL_CONTEXT *cx;
2150 RETURNOP(cPMOP->op_pmreplroot);
2152 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2154 if (iters++ > maxiters)
2155 DIE(aTHX_ "Substitution loop");
2156 rxtainted |= RX_MATCH_TAINTED(rx);
2157 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2162 strend = s + (strend - m);
2164 m = rx->startp[0] + orig;
2165 if (doutf8 && !SvUTF8(dstr))
2166 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2168 sv_catpvn(dstr, s, m-s);
2169 s = rx->endp[0] + orig;
2171 sv_catpvn(dstr, c, clen);
2174 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2175 TARG, NULL, r_flags));
2176 if (doutf8 && !DO_UTF8(TARG))
2177 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2179 sv_catpvn(dstr, s, strend - s);
2181 (void)SvOOK_off(TARG);
2183 Safefree(SvPVX(TARG));
2184 SvPVX(TARG) = SvPVX(dstr);
2185 SvCUR_set(TARG, SvCUR(dstr));
2186 SvLEN_set(TARG, SvLEN(dstr));
2187 doutf8 |= DO_UTF8(dstr);
2191 TAINT_IF(rxtainted & 1);
2193 PUSHs(sv_2mortal(newSViv((I32)iters)));
2195 (void)SvPOK_only(TARG);
2198 TAINT_IF(rxtainted);
2201 LEAVE_SCOPE(oldsave);
2210 LEAVE_SCOPE(oldsave);
2219 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2220 ++*PL_markstack_ptr;
2221 LEAVE; /* exit inner scope */
2224 if (PL_stack_base + *PL_markstack_ptr > SP) {
2226 I32 gimme = GIMME_V;
2228 LEAVE; /* exit outer scope */
2229 (void)POPMARK; /* pop src */
2230 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2231 (void)POPMARK; /* pop dst */
2232 SP = PL_stack_base + POPMARK; /* pop original mark */
2233 if (gimme == G_SCALAR) {
2237 else if (gimme == G_ARRAY)
2244 ENTER; /* enter inner scope */
2247 src = PL_stack_base[*PL_markstack_ptr];
2251 RETURNOP(cLOGOP->op_other);
2262 register PERL_CONTEXT *cx;
2268 if (gimme == G_SCALAR) {
2271 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2273 *MARK = SvREFCNT_inc(TOPs);
2278 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2280 *MARK = sv_mortalcopy(sv);
2285 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2289 *MARK = &PL_sv_undef;
2293 else if (gimme == G_ARRAY) {
2294 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2295 if (!SvTEMP(*MARK)) {
2296 *MARK = sv_mortalcopy(*MARK);
2297 TAINT_NOT; /* Each item is independent */
2303 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2304 PL_curpm = newpm; /* ... and pop $1 et al */
2308 return pop_return();
2311 /* This duplicates the above code because the above code must not
2312 * get any slower by more conditions */
2320 register PERL_CONTEXT *cx;
2327 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2328 /* We are an argument to a function or grep().
2329 * This kind of lvalueness was legal before lvalue
2330 * subroutines too, so be backward compatible:
2331 * cannot report errors. */
2333 /* Scalar context *is* possible, on the LHS of -> only,
2334 * as in f()->meth(). But this is not an lvalue. */
2335 if (gimme == G_SCALAR)
2337 if (gimme == G_ARRAY) {
2338 if (!CvLVALUE(cx->blk_sub.cv))
2339 goto temporise_array;
2340 EXTEND_MORTAL(SP - newsp);
2341 for (mark = newsp + 1; mark <= SP; mark++) {
2344 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2345 *mark = sv_mortalcopy(*mark);
2347 /* Can be a localized value subject to deletion. */
2348 PL_tmps_stack[++PL_tmps_ix] = *mark;
2349 (void)SvREFCNT_inc(*mark);
2354 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2355 /* Here we go for robustness, not for speed, so we change all
2356 * the refcounts so the caller gets a live guy. Cannot set
2357 * TEMP, so sv_2mortal is out of question. */
2358 if (!CvLVALUE(cx->blk_sub.cv)) {
2363 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2365 if (gimme == G_SCALAR) {
2369 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2374 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2375 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2376 : "a readonly value" : "a temporary");
2378 else { /* Can be a localized value
2379 * subject to deletion. */
2380 PL_tmps_stack[++PL_tmps_ix] = *mark;
2381 (void)SvREFCNT_inc(*mark);
2384 else { /* Should not happen? */
2389 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2390 (MARK > SP ? "Empty array" : "Array"));
2394 else if (gimme == G_ARRAY) {
2395 EXTEND_MORTAL(SP - newsp);
2396 for (mark = newsp + 1; mark <= SP; mark++) {
2397 if (*mark != &PL_sv_undef
2398 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2399 /* Might be flattened array after $#array = */
2405 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2406 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2409 /* Can be a localized value subject to deletion. */
2410 PL_tmps_stack[++PL_tmps_ix] = *mark;
2411 (void)SvREFCNT_inc(*mark);
2417 if (gimme == G_SCALAR) {
2421 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2423 *MARK = SvREFCNT_inc(TOPs);
2428 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2430 *MARK = sv_mortalcopy(sv);
2435 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2439 *MARK = &PL_sv_undef;
2443 else if (gimme == G_ARRAY) {
2445 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2446 if (!SvTEMP(*MARK)) {
2447 *MARK = sv_mortalcopy(*MARK);
2448 TAINT_NOT; /* Each item is independent */
2455 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2456 PL_curpm = newpm; /* ... and pop $1 et al */
2460 return pop_return();
2465 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2467 SV *dbsv = GvSV(PL_DBsub);
2469 if (!PERLDB_SUB_NN) {
2473 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2474 || strEQ(GvNAME(gv), "END")
2475 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2476 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2477 && (gv = (GV*)*svp) ))) {
2478 /* Use GV from the stack as a fallback. */
2479 /* GV is potentially non-unique, or contain different CV. */
2480 SV *tmp = newRV((SV*)cv);
2481 sv_setsv(dbsv, tmp);
2485 gv_efullname3(dbsv, gv, Nullch);
2489 (void)SvUPGRADE(dbsv, SVt_PVIV);
2490 (void)SvIOK_on(dbsv);
2491 SAVEIV(SvIVX(dbsv));
2492 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2496 PL_curcopdb = PL_curcop;
2497 cv = GvCV(PL_DBsub);
2507 register PERL_CONTEXT *cx;
2509 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2512 DIE(aTHX_ "Not a CODE reference");
2513 switch (SvTYPE(sv)) {
2519 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2521 SP = PL_stack_base + POPMARK;
2524 if (SvGMAGICAL(sv)) {
2528 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2531 sym = SvPV(sv, n_a);
2533 DIE(aTHX_ PL_no_usym, "a subroutine");
2534 if (PL_op->op_private & HINT_STRICT_REFS)
2535 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2536 cv = get_cv(sym, TRUE);
2541 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2542 tryAMAGICunDEREF(to_cv);
2545 if (SvTYPE(cv) == SVt_PVCV)
2550 DIE(aTHX_ "Not a CODE reference");
2555 if (!(cv = GvCVu((GV*)sv)))
2556 cv = sv_2cv(sv, &stash, &gv, FALSE);
2569 if (!CvROOT(cv) && !CvXSUB(cv)) {
2573 /* anonymous or undef'd function leaves us no recourse */
2574 if (CvANON(cv) || !(gv = CvGV(cv)))
2575 DIE(aTHX_ "Undefined subroutine called");
2577 /* autoloaded stub? */
2578 if (cv != GvCV(gv)) {
2581 /* should call AUTOLOAD now? */
2584 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2591 sub_name = sv_newmortal();
2592 gv_efullname3(sub_name, gv, Nullch);
2593 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2597 DIE(aTHX_ "Not a CODE reference");
2602 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2603 cv = get_db_sub(&sv, cv);
2605 DIE(aTHX_ "No DBsub routine");
2608 #ifdef USE_5005THREADS
2610 * First we need to check if the sub or method requires locking.
2611 * If so, we gain a lock on the CV, the first argument or the
2612 * stash (for static methods), as appropriate. This has to be
2613 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2614 * reschedule by returning a new op.
2616 MUTEX_LOCK(CvMUTEXP(cv));
2617 if (CvFLAGS(cv) & CVf_LOCKED) {
2619 if (CvFLAGS(cv) & CVf_METHOD) {
2620 if (SP > PL_stack_base + TOPMARK)
2621 sv = *(PL_stack_base + TOPMARK + 1);
2623 AV *av = (AV*)PL_curpad[0];
2624 if (hasargs || !av || AvFILLp(av) < 0
2625 || !(sv = AvARRAY(av)[0]))
2627 MUTEX_UNLOCK(CvMUTEXP(cv));
2628 DIE(aTHX_ "no argument for locked method call");
2635 char *stashname = SvPV(sv, len);
2636 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2642 MUTEX_UNLOCK(CvMUTEXP(cv));
2643 mg = condpair_magic(sv);
2644 MUTEX_LOCK(MgMUTEXP(mg));
2645 if (MgOWNER(mg) == thr)
2646 MUTEX_UNLOCK(MgMUTEXP(mg));
2649 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2651 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2653 MUTEX_UNLOCK(MgMUTEXP(mg));
2654 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2656 MUTEX_LOCK(CvMUTEXP(cv));
2659 * Now we have permission to enter the sub, we must distinguish
2660 * four cases. (0) It's an XSUB (in which case we don't care
2661 * about ownership); (1) it's ours already (and we're recursing);
2662 * (2) it's free (but we may already be using a cached clone);
2663 * (3) another thread owns it. Case (1) is easy: we just use it.
2664 * Case (2) means we look for a clone--if we have one, use it
2665 * otherwise grab ownership of cv. Case (3) means we look for a
2666 * clone (for non-XSUBs) and have to create one if we don't
2668 * Why look for a clone in case (2) when we could just grab
2669 * ownership of cv straight away? Well, we could be recursing,
2670 * i.e. we originally tried to enter cv while another thread
2671 * owned it (hence we used a clone) but it has been freed up
2672 * and we're now recursing into it. It may or may not be "better"
2673 * to use the clone but at least CvDEPTH can be trusted.
2675 if (CvOWNER(cv) == thr || CvXSUB(cv))
2676 MUTEX_UNLOCK(CvMUTEXP(cv));
2678 /* Case (2) or (3) */
2682 * XXX Might it be better to release CvMUTEXP(cv) while we
2683 * do the hv_fetch? We might find someone has pinched it
2684 * when we look again, in which case we would be in case
2685 * (3) instead of (2) so we'd have to clone. Would the fact
2686 * that we released the mutex more quickly make up for this?
2688 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2690 /* We already have a clone to use */
2691 MUTEX_UNLOCK(CvMUTEXP(cv));
2693 DEBUG_S(PerlIO_printf(Perl_debug_log,
2694 "entersub: %p already has clone %p:%s\n",
2695 thr, cv, SvPEEK((SV*)cv)));
2698 if (CvDEPTH(cv) == 0)
2699 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2702 /* (2) => grab ownership of cv. (3) => make clone */
2706 MUTEX_UNLOCK(CvMUTEXP(cv));
2707 DEBUG_S(PerlIO_printf(Perl_debug_log,
2708 "entersub: %p grabbing %p:%s in stash %s\n",
2709 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2710 HvNAME(CvSTASH(cv)) : "(none)"));
2713 /* Make a new clone. */
2715 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2716 MUTEX_UNLOCK(CvMUTEXP(cv));
2717 DEBUG_S((PerlIO_printf(Perl_debug_log,
2718 "entersub: %p cloning %p:%s\n",
2719 thr, cv, SvPEEK((SV*)cv))));
2721 * We're creating a new clone so there's no race
2722 * between the original MUTEX_UNLOCK and the
2723 * SvREFCNT_inc since no one will be trying to undef
2724 * it out from underneath us. At least, I don't think
2727 clonecv = cv_clone(cv);
2728 SvREFCNT_dec(cv); /* finished with this */
2729 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2730 CvOWNER(clonecv) = thr;
2734 DEBUG_S(if (CvDEPTH(cv) != 0)
2735 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2737 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2740 #endif /* USE_5005THREADS */
2743 #ifdef PERL_XSUB_OLDSTYLE
2744 if (CvOLDSTYLE(cv)) {
2745 I32 (*fp3)(int,int,int);
2747 register I32 items = SP - MARK;
2748 /* We dont worry to copy from @_. */
2753 PL_stack_sp = mark + 1;
2754 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2755 items = (*fp3)(CvXSUBANY(cv).any_i32,
2756 MARK - PL_stack_base + 1,
2758 PL_stack_sp = PL_stack_base + items;
2761 #endif /* PERL_XSUB_OLDSTYLE */
2763 I32 markix = TOPMARK;
2768 /* Need to copy @_ to stack. Alternative may be to
2769 * switch stack to @_, and copy return values
2770 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2773 #ifdef USE_5005THREADS
2774 av = (AV*)PL_curpad[0];
2776 av = GvAV(PL_defgv);
2777 #endif /* USE_5005THREADS */
2778 items = AvFILLp(av) + 1; /* @_ is not tieable */
2781 /* Mark is at the end of the stack. */
2783 Copy(AvARRAY(av), SP + 1, items, SV*);
2788 /* We assume first XSUB in &DB::sub is the called one. */
2790 SAVEVPTR(PL_curcop);
2791 PL_curcop = PL_curcopdb;
2794 /* Do we need to open block here? XXXX */
2795 (void)(*CvXSUB(cv))(aTHX_ cv);
2797 /* Enforce some sanity in scalar context. */
2798 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2799 if (markix > PL_stack_sp - PL_stack_base)
2800 *(PL_stack_base + markix) = &PL_sv_undef;
2802 *(PL_stack_base + markix) = *PL_stack_sp;
2803 PL_stack_sp = PL_stack_base + markix;
2811 register I32 items = SP - MARK;
2812 AV* padlist = CvPADLIST(cv);
2813 SV** svp = AvARRAY(padlist);
2814 push_return(PL_op->op_next);
2815 PUSHBLOCK(cx, CXt_SUB, MARK);
2818 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2819 * that eval'' ops within this sub know the correct lexical space.
2820 * Owing the speed considerations, we choose to search for the cv
2821 * in doeval() instead.
2823 if (CvDEPTH(cv) < 2)
2824 (void)SvREFCNT_inc(cv);
2825 else { /* save temporaries on recursion? */
2826 PERL_STACK_OVERFLOW_CHECK();
2827 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2829 AV *newpad = newAV();
2830 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2831 I32 ix = AvFILLp((AV*)svp[1]);
2832 I32 names_fill = AvFILLp((AV*)svp[0]);
2833 svp = AvARRAY(svp[0]);
2834 for ( ;ix > 0; ix--) {
2835 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2836 char *name = SvPVX(svp[ix]);
2837 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2838 || *name == '&') /* anonymous code? */
2840 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2842 else { /* our own lexical */
2844 av_store(newpad, ix, sv = (SV*)newAV());
2845 else if (*name == '%')
2846 av_store(newpad, ix, sv = (SV*)newHV());
2848 av_store(newpad, ix, sv = NEWSV(0,0));
2852 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2853 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2856 av_store(newpad, ix, sv = NEWSV(0,0));
2860 av = newAV(); /* will be @_ */
2862 av_store(newpad, 0, (SV*)av);
2863 AvFLAGS(av) = AVf_REIFY;
2864 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2865 AvFILLp(padlist) = CvDEPTH(cv);
2866 svp = AvARRAY(padlist);
2869 #ifdef USE_5005THREADS
2871 AV* av = (AV*)PL_curpad[0];
2873 items = AvFILLp(av) + 1;
2875 /* Mark is at the end of the stack. */
2877 Copy(AvARRAY(av), SP + 1, items, SV*);
2882 #endif /* USE_5005THREADS */
2883 SAVEVPTR(PL_curpad);
2884 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2885 #ifndef USE_5005THREADS
2887 #endif /* USE_5005THREADS */
2893 DEBUG_S(PerlIO_printf(Perl_debug_log,
2894 "%p entersub preparing @_\n", thr));
2896 av = (AV*)PL_curpad[0];
2898 /* @_ is normally not REAL--this should only ever
2899 * happen when DB::sub() calls things that modify @_ */
2904 #ifndef USE_5005THREADS
2905 cx->blk_sub.savearray = GvAV(PL_defgv);
2906 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2907 #endif /* USE_5005THREADS */
2908 cx->blk_sub.oldcurpad = PL_curpad;
2909 cx->blk_sub.argarray = av;
2912 if (items > AvMAX(av) + 1) {
2914 if (AvARRAY(av) != ary) {
2915 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2916 SvPVX(av) = (char*)ary;
2918 if (items > AvMAX(av) + 1) {
2919 AvMAX(av) = items - 1;
2920 Renew(ary,items,SV*);
2922 SvPVX(av) = (char*)ary;
2925 Copy(MARK,AvARRAY(av),items,SV*);
2926 AvFILLp(av) = items - 1;
2934 /* warning must come *after* we fully set up the context
2935 * stuff so that __WARN__ handlers can safely dounwind()
2938 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2939 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2940 sub_crush_depth(cv);
2942 DEBUG_S(PerlIO_printf(Perl_debug_log,
2943 "%p entersub returning %p\n", thr, CvSTART(cv)));
2945 RETURNOP(CvSTART(cv));
2950 Perl_sub_crush_depth(pTHX_ CV *cv)
2953 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2955 SV* tmpstr = sv_newmortal();
2956 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2957 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%s\"",
2967 IV elem = SvIV(elemsv);
2969 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2970 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2973 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2974 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2976 elem -= PL_curcop->cop_arybase;
2977 if (SvTYPE(av) != SVt_PVAV)
2979 svp = av_fetch(av, elem, lval && !defer);
2981 if (!svp || *svp == &PL_sv_undef) {
2984 DIE(aTHX_ PL_no_aelem, elem);
2985 lv = sv_newmortal();
2986 sv_upgrade(lv, SVt_PVLV);
2988 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
2989 LvTARG(lv) = SvREFCNT_inc(av);
2990 LvTARGOFF(lv) = elem;
2995 if (PL_op->op_private & OPpLVAL_INTRO)
2996 save_aelem(av, elem, svp);
2997 else if (PL_op->op_private & OPpDEREF)
2998 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3000 sv = (svp ? *svp : &PL_sv_undef);
3001 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3002 sv = sv_mortalcopy(sv);
3008 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3014 Perl_croak(aTHX_ PL_no_modify);
3015 if (SvTYPE(sv) < SVt_RV)
3016 sv_upgrade(sv, SVt_RV);
3017 else if (SvTYPE(sv) >= SVt_PV) {
3018 (void)SvOOK_off(sv);
3019 Safefree(SvPVX(sv));
3020 SvLEN(sv) = SvCUR(sv) = 0;
3024 SvRV(sv) = NEWSV(355,0);
3027 SvRV(sv) = (SV*)newAV();
3030 SvRV(sv) = (SV*)newHV();
3045 if (SvTYPE(rsv) == SVt_PVCV) {
3051 SETs(method_common(sv, Null(U32*)));
3059 U32 hash = SvUVX(sv);
3061 XPUSHs(method_common(sv, &hash));
3066 S_method_common(pTHX_ SV* meth, U32* hashp)
3075 SV *packsv = Nullsv;
3078 name = SvPV(meth, namelen);
3079 sv = *(PL_stack_base + TOPMARK + 1);
3082 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3091 /* this isn't a reference */
3094 !(packname = SvPV(sv, packlen)) ||
3095 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3096 !(ob=(SV*)GvIO(iogv)))
3098 /* this isn't the name of a filehandle either */
3100 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3101 ? !isIDFIRST_utf8((U8*)packname)
3102 : !isIDFIRST(*packname)
3105 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3106 SvOK(sv) ? "without a package or object reference"
3107 : "on an undefined value");
3109 /* assume it's a package name */
3110 stash = gv_stashpvn(packname, packlen, FALSE);
3115 /* it _is_ a filehandle name -- replace with a reference */
3116 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3119 /* if we got here, ob should be a reference or a glob */
3120 if (!ob || !(SvOBJECT(ob)
3121 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3124 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3128 stash = SvSTASH(ob);
3131 /* NOTE: stash may be null, hope hv_fetch_ent and
3132 gv_fetchmethod can cope (it seems they can) */
3134 /* shortcut for simple names */
3136 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3138 gv = (GV*)HeVAL(he);
3139 if (isGV(gv) && GvCV(gv) &&
3140 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3141 return (SV*)GvCV(gv);
3145 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3148 /* This code tries to figure out just what went wrong with
3149 gv_fetchmethod. It therefore needs to duplicate a lot of
3150 the internals of that function. We can't move it inside
3151 Perl_gv_fetchmethod_autoload(), however, since that would
3152 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3159 for (p = name; *p; p++) {
3161 sep = p, leaf = p + 1;
3162 else if (*p == ':' && *(p + 1) == ':')
3163 sep = p, leaf = p + 2;
3165 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3166 /* the method name is unqualified or starts with SUPER:: */
3167 packname = sep ? CopSTASHPV(PL_curcop) :
3168 stash ? HvNAME(stash) : packname;
3169 packlen = strlen(packname);
3172 /* the method name is qualified */
3174 packlen = sep - name;
3177 /* we're relying on gv_fetchmethod not autovivifying the stash */
3178 if (gv_stashpvn(packname, packlen, FALSE)) {
3180 "Can't locate object method \"%s\" via package \"%.*s\"",
3181 leaf, (int)packlen, packname);
3185 "Can't locate object method \"%s\" via package \"%.*s\""
3186 " (perhaps you forgot to load \"%.*s\"?)",
3187 leaf, (int)packlen, packname, (int)packlen, packname);
3190 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3193 #ifdef USE_5005THREADS
3195 unset_cvowner(pTHX_ void *cvarg)
3197 register CV* cv = (CV *) cvarg;
3199 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3200 thr, cv, SvPEEK((SV*)cv))));
3201 MUTEX_LOCK(CvMUTEXP(cv));
3202 DEBUG_S(if (CvDEPTH(cv) != 0)
3203 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3205 assert(thr == CvOWNER(cv));
3207 MUTEX_UNLOCK(CvMUTEXP(cv));
3210 #endif /* USE_5005THREADS */