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);
145 if (TARG == right && right != left) {
146 right = sv_2mortal(newSVpvn(rpv, rlen));
147 rpv = SvPV(right, rlen); /* no point setting UTF8 here */
151 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
152 lbyte = !SvUTF8(left);
153 sv_setpvn(TARG, lpv, llen);
159 else { /* TARG == left */
160 if (SvGMAGICAL(left))
161 mg_get(left); /* or mg_get(left) may happen here */
164 lpv = SvPV_nomg(left, llen);
165 lbyte = !SvUTF8(left);
168 #if defined(PERL_Y2KWARN)
169 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
170 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
171 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
173 Perl_warner(aTHX_ packWARN(WARN_Y2K), "Possible Y2K bug: %s",
174 "about to append an integer to '19'");
179 if (lbyte != rbyte) {
181 sv_utf8_upgrade_nomg(TARG);
183 sv_utf8_upgrade_nomg(right);
184 rpv = SvPV(right, rlen);
187 sv_catpvn_nomg(TARG, rpv, rlen);
198 if (PL_op->op_flags & OPf_MOD) {
199 if (PL_op->op_private & OPpLVAL_INTRO)
200 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
201 else if (PL_op->op_private & OPpDEREF) {
203 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
212 tryAMAGICunTARGET(iter, 0);
213 PL_last_in_gv = (GV*)(*PL_stack_sp--);
214 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
215 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
216 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
219 XPUSHs((SV*)PL_last_in_gv);
222 PL_last_in_gv = (GV*)(*PL_stack_sp--);
225 return do_readline();
230 dSP; tryAMAGICbinSET(eq,0);
231 #ifndef NV_PRESERVES_UV
232 if (SvROK(TOPs) && SvROK(TOPm1s)) {
234 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
238 #ifdef PERL_PRESERVE_IVUV
241 /* Unless the left argument is integer in range we are going
242 to have to use NV maths. Hence only attempt to coerce the
243 right argument if we know the left is integer. */
246 bool auvok = SvUOK(TOPm1s);
247 bool buvok = SvUOK(TOPs);
249 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
250 /* Casting IV to UV before comparison isn't going to matter
251 on 2s complement. On 1s complement or sign&magnitude
252 (if we have any of them) it could to make negative zero
253 differ from normal zero. As I understand it. (Need to
254 check - is negative zero implementation defined behaviour
256 UV buv = SvUVX(POPs);
257 UV auv = SvUVX(TOPs);
259 SETs(boolSV(auv == buv));
262 { /* ## Mixed IV,UV ## */
266 /* == is commutative so doesn't matter which is left or right */
268 /* top of stack (b) is the iv */
277 /* As uv is a UV, it's >0, so it cannot be == */
281 /* we know iv is >= 0 */
282 SETs(boolSV((UV)iv == SvUVX(uvp)));
290 SETs(boolSV(TOPn == value));
298 if (SvTYPE(TOPs) > SVt_PVLV)
299 DIE(aTHX_ PL_no_modify);
300 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
301 && SvIVX(TOPs) != IV_MAX)
304 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
306 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
319 RETURNOP(cLOGOP->op_other);
325 /* Most of this is lifted straight from pp_defined */
330 if (!sv || !SvANY(sv)) {
332 RETURNOP(cLOGOP->op_other);
335 switch (SvTYPE(sv)) {
337 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
341 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
345 if (CvROOT(sv) || CvXSUB(sv))
356 RETURNOP(cLOGOP->op_other);
361 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
362 useleft = USE_LEFT(TOPm1s);
363 #ifdef PERL_PRESERVE_IVUV
364 /* We must see if we can perform the addition with integers if possible,
365 as the integer code detects overflow while the NV code doesn't.
366 If either argument hasn't had a numeric conversion yet attempt to get
367 the IV. It's important to do this now, rather than just assuming that
368 it's not IOK as a PV of "9223372036854775806" may not take well to NV
369 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
370 integer in case the second argument is IV=9223372036854775806
371 We can (now) rely on sv_2iv to do the right thing, only setting the
372 public IOK flag if the value in the NV (or PV) slot is truly integer.
374 A side effect is that this also aggressively prefers integer maths over
375 fp maths for integer values.
377 How to detect overflow?
379 C 99 section 6.2.6.1 says
381 The range of nonnegative values of a signed integer type is a subrange
382 of the corresponding unsigned integer type, and the representation of
383 the same value in each type is the same. A computation involving
384 unsigned operands can never overflow, because a result that cannot be
385 represented by the resulting unsigned integer type is reduced modulo
386 the number that is one greater than the largest value that can be
387 represented by the resulting type.
391 which I read as "unsigned ints wrap."
393 signed integer overflow seems to be classed as "exception condition"
395 If an exceptional condition occurs during the evaluation of an
396 expression (that is, if the result is not mathematically defined or not
397 in the range of representable values for its type), the behavior is
400 (6.5, the 5th paragraph)
402 I had assumed that on 2s complement machines signed arithmetic would
403 wrap, hence coded pp_add and pp_subtract on the assumption that
404 everything perl builds on would be happy. After much wailing and
405 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
406 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
407 unsigned code below is actually shorter than the old code. :-)
412 /* Unless the left argument is integer in range we are going to have to
413 use NV maths. Hence only attempt to coerce the right argument if
414 we know the left is integer. */
422 /* left operand is undef, treat as zero. + 0 is identity,
423 Could SETi or SETu right now, but space optimise by not adding
424 lots of code to speed up what is probably a rarish case. */
426 /* Left operand is defined, so is it IV? */
429 if ((auvok = SvUOK(TOPm1s)))
432 register IV aiv = SvIVX(TOPm1s);
435 auvok = 1; /* Now acting as a sign flag. */
436 } else { /* 2s complement assumption for IV_MIN */
444 bool result_good = 0;
447 bool buvok = SvUOK(TOPs);
452 register IV biv = SvIVX(TOPs);
459 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
460 else "IV" now, independent of how it came in.
461 if a, b represents positive, A, B negative, a maps to -A etc
466 all UV maths. negate result if A negative.
467 add if signs same, subtract if signs differ. */
473 /* Must get smaller */
479 /* result really should be -(auv-buv). as its negation
480 of true value, need to swap our result flag */
497 if (result <= (UV)IV_MIN)
500 /* result valid, but out of range for IV. */
505 } /* Overflow, drop through to NVs. */
512 /* left operand is undef, treat as zero. + 0.0 is identity. */
516 SETn( value + TOPn );
524 AV *av = GvAV(cGVOP_gv);
525 U32 lval = PL_op->op_flags & OPf_MOD;
526 SV** svp = av_fetch(av, PL_op->op_private, lval);
527 SV *sv = (svp ? *svp : &PL_sv_undef);
529 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
530 sv = sv_mortalcopy(sv);
539 do_join(TARG, *MARK, MARK, SP);
550 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
551 * will be enough to hold an OP*.
553 SV* sv = sv_newmortal();
554 sv_upgrade(sv, SVt_PVLV);
556 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
564 /* Oversized hot code. */
568 dSP; dMARK; dORIGMARK;
574 if (PL_op->op_flags & OPf_STACKED)
579 if (gv && (io = GvIO(gv))
580 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
583 if (MARK == ORIGMARK) {
584 /* If using default handle then we need to make space to
585 * pass object as 1st arg, so move other args up ...
589 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
593 *MARK = SvTIED_obj((SV*)io, mg);
596 call_method("PRINT", G_SCALAR);
604 if (!(io = GvIO(gv))) {
605 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
606 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
608 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
609 report_evil_fh(gv, io, PL_op->op_type);
610 SETERRNO(EBADF,RMS$_IFI);
613 else if (!(fp = IoOFP(io))) {
614 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
616 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
617 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
618 report_evil_fh(gv, io, PL_op->op_type);
620 SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
625 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
627 if (!do_print(*MARK, fp))
631 if (!do_print(PL_ofs_sv, fp)) { /* $, */
640 if (!do_print(*MARK, fp))
648 if (PL_ors_sv && SvOK(PL_ors_sv))
649 if (!do_print(PL_ors_sv, fp)) /* $\ */
652 if (IoFLAGS(io) & IOf_FLUSH)
653 if (PerlIO_flush(fp) == EOF)
674 tryAMAGICunDEREF(to_av);
677 if (SvTYPE(av) != SVt_PVAV)
678 DIE(aTHX_ "Not an ARRAY reference");
679 if (PL_op->op_flags & OPf_REF) {
684 if (GIMME == G_SCALAR)
685 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
691 if (SvTYPE(sv) == SVt_PVAV) {
693 if (PL_op->op_flags & OPf_REF) {
698 if (GIMME == G_SCALAR)
699 Perl_croak(aTHX_ "Can't return array to lvalue"
708 if (SvTYPE(sv) != SVt_PVGV) {
712 if (SvGMAGICAL(sv)) {
718 if (PL_op->op_flags & OPf_REF ||
719 PL_op->op_private & HINT_STRICT_REFS)
720 DIE(aTHX_ PL_no_usym, "an ARRAY");
721 if (ckWARN(WARN_UNINITIALIZED))
723 if (GIMME == G_ARRAY) {
730 if ((PL_op->op_flags & OPf_SPECIAL) &&
731 !(PL_op->op_flags & OPf_MOD))
733 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
735 && (!is_gv_magical(sym,len,0)
736 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
742 if (PL_op->op_private & HINT_STRICT_REFS)
743 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
744 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
751 if (PL_op->op_private & OPpLVAL_INTRO)
753 if (PL_op->op_flags & OPf_REF) {
758 if (GIMME == G_SCALAR)
759 Perl_croak(aTHX_ "Can't return array to lvalue"
767 if (GIMME == G_ARRAY) {
768 I32 maxarg = AvFILL(av) + 1;
769 (void)POPs; /* XXXX May be optimized away? */
771 if (SvRMAGICAL(av)) {
773 for (i=0; i < (U32)maxarg; i++) {
774 SV **svp = av_fetch(av, i, FALSE);
775 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
779 Copy(AvARRAY(av), SP+1, maxarg, SV*);
785 I32 maxarg = AvFILL(av) + 1;
798 tryAMAGICunDEREF(to_hv);
801 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
802 DIE(aTHX_ "Not a HASH reference");
803 if (PL_op->op_flags & OPf_REF) {
808 if (GIMME == G_SCALAR)
809 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
815 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
817 if (PL_op->op_flags & OPf_REF) {
822 if (GIMME == G_SCALAR)
823 Perl_croak(aTHX_ "Can't return hash to lvalue"
832 if (SvTYPE(sv) != SVt_PVGV) {
836 if (SvGMAGICAL(sv)) {
842 if (PL_op->op_flags & OPf_REF ||
843 PL_op->op_private & HINT_STRICT_REFS)
844 DIE(aTHX_ PL_no_usym, "a HASH");
845 if (ckWARN(WARN_UNINITIALIZED))
847 if (GIMME == G_ARRAY) {
854 if ((PL_op->op_flags & OPf_SPECIAL) &&
855 !(PL_op->op_flags & OPf_MOD))
857 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
859 && (!is_gv_magical(sym,len,0)
860 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
866 if (PL_op->op_private & HINT_STRICT_REFS)
867 DIE(aTHX_ PL_no_symref, sym, "a HASH");
868 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
875 if (PL_op->op_private & OPpLVAL_INTRO)
877 if (PL_op->op_flags & OPf_REF) {
882 if (GIMME == G_SCALAR)
883 Perl_croak(aTHX_ "Can't return hash to lvalue"
891 if (GIMME == G_ARRAY) { /* array wanted */
892 *PL_stack_sp = (SV*)hv;
897 if (SvTYPE(hv) == SVt_PVAV)
898 hv = avhv_keys((AV*)hv);
900 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
901 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
911 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
917 leftop = ((BINOP*)PL_op)->op_last;
919 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
920 leftop = ((LISTOP*)leftop)->op_first;
922 /* Skip PUSHMARK and each element already assigned to. */
923 for (i = lelem - firstlelem; i > 0; i--) {
924 leftop = leftop->op_sibling;
927 if (leftop->op_type != OP_RV2HV)
932 av_fill(ary, 0); /* clear all but the fields hash */
933 if (lastrelem >= relem) {
934 while (relem < lastrelem) { /* gobble up all the rest */
938 /* Avoid a memory leak when avhv_store_ent dies. */
939 tmpstr = sv_newmortal();
940 sv_setsv(tmpstr,relem[1]); /* value */
942 if (avhv_store_ent(ary,relem[0],tmpstr,0))
943 (void)SvREFCNT_inc(tmpstr);
944 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
950 if (relem == lastrelem)
956 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
960 if (ckWARN(WARN_MISC)) {
961 if (relem == firstrelem &&
963 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
964 SvTYPE(SvRV(*relem)) == SVt_PVHV))
966 Perl_warner(aTHX_ packWARN(WARN_MISC),
967 "Reference found where even-sized list expected");
970 Perl_warner(aTHX_ packWARN(WARN_MISC),
971 "Odd number of elements in hash assignment");
973 if (SvTYPE(hash) == SVt_PVAV) {
975 tmpstr = sv_newmortal();
976 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
977 (void)SvREFCNT_inc(tmpstr);
978 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
983 tmpstr = NEWSV(29,0);
984 didstore = hv_store_ent(hash,*relem,tmpstr,0);
985 if (SvMAGICAL(hash)) {
986 if (SvSMAGICAL(tmpstr))
999 SV **lastlelem = PL_stack_sp;
1000 SV **lastrelem = PL_stack_base + POPMARK;
1001 SV **firstrelem = PL_stack_base + POPMARK + 1;
1002 SV **firstlelem = lastrelem + 1;
1004 register SV **relem;
1005 register SV **lelem;
1015 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1017 /* If there's a common identifier on both sides we have to take
1018 * special care that assigning the identifier on the left doesn't
1019 * clobber a value on the right that's used later in the list.
1021 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1022 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1023 for (relem = firstrelem; relem <= lastrelem; relem++) {
1025 if ((sv = *relem)) {
1026 TAINT_NOT; /* Each item is independent */
1027 *relem = sv_mortalcopy(sv);
1037 while (lelem <= lastlelem) {
1038 TAINT_NOT; /* Each item stands on its own, taintwise. */
1040 switch (SvTYPE(sv)) {
1043 magic = SvMAGICAL(ary) != 0;
1044 if (PL_op->op_private & OPpASSIGN_HASH) {
1045 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1051 do_oddball((HV*)ary, relem, firstrelem);
1053 relem = lastrelem + 1;
1058 av_extend(ary, lastrelem - relem);
1060 while (relem <= lastrelem) { /* gobble up all the rest */
1064 sv_setsv(sv,*relem);
1066 didstore = av_store(ary,i++,sv);
1076 case SVt_PVHV: { /* normal hash */
1080 magic = SvMAGICAL(hash) != 0;
1083 while (relem < lastrelem) { /* gobble up all the rest */
1088 sv = &PL_sv_no, relem++;
1089 tmpstr = NEWSV(29,0);
1091 sv_setsv(tmpstr,*relem); /* value */
1092 *(relem++) = tmpstr;
1093 didstore = hv_store_ent(hash,sv,tmpstr,0);
1095 if (SvSMAGICAL(tmpstr))
1102 if (relem == lastrelem) {
1103 do_oddball(hash, relem, firstrelem);
1109 if (SvIMMORTAL(sv)) {
1110 if (relem <= lastrelem)
1114 if (relem <= lastrelem) {
1115 sv_setsv(sv, *relem);
1119 sv_setsv(sv, &PL_sv_undef);
1124 if (PL_delaymagic & ~DM_DELAY) {
1125 if (PL_delaymagic & DM_UID) {
1126 #ifdef HAS_SETRESUID
1127 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1129 # ifdef HAS_SETREUID
1130 (void)setreuid(PL_uid,PL_euid);
1133 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1134 (void)setruid(PL_uid);
1135 PL_delaymagic &= ~DM_RUID;
1137 # endif /* HAS_SETRUID */
1139 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1140 (void)seteuid(PL_uid);
1141 PL_delaymagic &= ~DM_EUID;
1143 # endif /* HAS_SETEUID */
1144 if (PL_delaymagic & DM_UID) {
1145 if (PL_uid != PL_euid)
1146 DIE(aTHX_ "No setreuid available");
1147 (void)PerlProc_setuid(PL_uid);
1149 # endif /* HAS_SETREUID */
1150 #endif /* HAS_SETRESUID */
1151 PL_uid = PerlProc_getuid();
1152 PL_euid = PerlProc_geteuid();
1154 if (PL_delaymagic & DM_GID) {
1155 #ifdef HAS_SETRESGID
1156 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1158 # ifdef HAS_SETREGID
1159 (void)setregid(PL_gid,PL_egid);
1162 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1163 (void)setrgid(PL_gid);
1164 PL_delaymagic &= ~DM_RGID;
1166 # endif /* HAS_SETRGID */
1168 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1169 (void)setegid(PL_gid);
1170 PL_delaymagic &= ~DM_EGID;
1172 # endif /* HAS_SETEGID */
1173 if (PL_delaymagic & DM_GID) {
1174 if (PL_gid != PL_egid)
1175 DIE(aTHX_ "No setregid available");
1176 (void)PerlProc_setgid(PL_gid);
1178 # endif /* HAS_SETREGID */
1179 #endif /* HAS_SETRESGID */
1180 PL_gid = PerlProc_getgid();
1181 PL_egid = PerlProc_getegid();
1183 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1188 if (gimme == G_VOID)
1189 SP = firstrelem - 1;
1190 else if (gimme == G_SCALAR) {
1193 SETi(lastrelem - firstrelem + 1);
1199 SP = firstrelem + (lastlelem - firstlelem);
1200 lelem = firstlelem + (relem - firstrelem);
1202 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1210 register PMOP *pm = cPMOP;
1211 SV *rv = sv_newmortal();
1212 SV *sv = newSVrv(rv, "Regexp");
1213 if (pm->op_pmdynflags & PMdf_TAINTED)
1215 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1222 register PMOP *pm = cPMOP;
1228 I32 r_flags = REXEC_CHECKED;
1229 char *truebase; /* Start of string */
1230 register REGEXP *rx = PM_GETRE(pm);
1235 I32 oldsave = PL_savestack_ix;
1236 I32 update_minmatch = 1;
1237 I32 had_zerolen = 0;
1239 if (PL_op->op_flags & OPf_STACKED)
1246 PUTBACK; /* EVAL blocks need stack_sp. */
1247 s = SvPV(TARG, len);
1250 DIE(aTHX_ "panic: pp_match");
1251 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1252 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1255 PL_reg_match_utf8 = DO_UTF8(TARG);
1257 /* PMdf_USED is set after a ?? matches once */
1258 if (pm->op_pmdynflags & PMdf_USED) {
1260 if (gimme == G_ARRAY)
1265 /* empty pattern special-cased to use last successful pattern if possible */
1266 if (!rx->prelen && PL_curpm) {
1271 if (rx->minlen > (I32)len)
1276 /* XXXX What part of this is needed with true \G-support? */
1277 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1279 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1280 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1281 if (mg && mg->mg_len >= 0) {
1282 if (!(rx->reganch & ROPT_GPOS_SEEN))
1283 rx->endp[0] = rx->startp[0] = mg->mg_len;
1284 else if (rx->reganch & ROPT_ANCH_GPOS) {
1285 r_flags |= REXEC_IGNOREPOS;
1286 rx->endp[0] = rx->startp[0] = mg->mg_len;
1288 minmatch = (mg->mg_flags & MGf_MINMATCH);
1289 update_minmatch = 0;
1293 if ((!global && rx->nparens)
1294 || SvTEMP(TARG) || PL_sawampersand)
1295 r_flags |= REXEC_COPY_STR;
1297 r_flags |= REXEC_SCREAM;
1299 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1300 SAVEINT(PL_multiline);
1301 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1305 if (global && rx->startp[0] != -1) {
1306 t = s = rx->endp[0] + truebase;
1307 if ((s + rx->minlen) > strend)
1309 if (update_minmatch++)
1310 minmatch = had_zerolen;
1312 if (rx->reganch & RE_USE_INTUIT &&
1313 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1314 PL_bostr = truebase;
1315 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1319 if ( (rx->reganch & ROPT_CHECK_ALL)
1321 && ((rx->reganch & ROPT_NOSCAN)
1322 || !((rx->reganch & RE_INTUIT_TAIL)
1323 && (r_flags & REXEC_SCREAM)))
1324 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1327 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1330 if (dynpm->op_pmflags & PMf_ONCE)
1331 dynpm->op_pmdynflags |= PMdf_USED;
1340 RX_MATCH_TAINTED_on(rx);
1341 TAINT_IF(RX_MATCH_TAINTED(rx));
1342 if (gimme == G_ARRAY) {
1343 I32 nparens, i, len;
1345 nparens = rx->nparens;
1346 if (global && !nparens)
1350 SPAGAIN; /* EVAL blocks could move the stack. */
1351 EXTEND(SP, nparens + i);
1352 EXTEND_MORTAL(nparens + i);
1353 for (i = !i; i <= nparens; i++) {
1354 PUSHs(sv_newmortal());
1356 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1357 len = rx->endp[i] - rx->startp[i];
1358 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1359 len < 0 || len > strend - s)
1360 DIE(aTHX_ "panic: pp_match start/end pointers");
1361 s = rx->startp[i] + truebase;
1362 sv_setpvn(*SP, s, len);
1363 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1368 if (dynpm->op_pmflags & PMf_CONTINUE) {
1370 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1371 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1373 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1374 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1376 if (rx->startp[0] != -1) {
1377 mg->mg_len = rx->endp[0];
1378 if (rx->startp[0] == rx->endp[0])
1379 mg->mg_flags |= MGf_MINMATCH;
1381 mg->mg_flags &= ~MGf_MINMATCH;
1384 had_zerolen = (rx->startp[0] != -1
1385 && rx->startp[0] == rx->endp[0]);
1386 PUTBACK; /* EVAL blocks may use stack */
1387 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1392 LEAVE_SCOPE(oldsave);
1398 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1399 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1401 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1402 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1404 if (rx->startp[0] != -1) {
1405 mg->mg_len = rx->endp[0];
1406 if (rx->startp[0] == rx->endp[0])
1407 mg->mg_flags |= MGf_MINMATCH;
1409 mg->mg_flags &= ~MGf_MINMATCH;
1412 LEAVE_SCOPE(oldsave);
1416 yup: /* Confirmed by INTUIT */
1418 RX_MATCH_TAINTED_on(rx);
1419 TAINT_IF(RX_MATCH_TAINTED(rx));
1421 if (dynpm->op_pmflags & PMf_ONCE)
1422 dynpm->op_pmdynflags |= PMdf_USED;
1423 if (RX_MATCH_COPIED(rx))
1424 Safefree(rx->subbeg);
1425 RX_MATCH_COPIED_off(rx);
1426 rx->subbeg = Nullch;
1428 rx->subbeg = truebase;
1429 rx->startp[0] = s - truebase;
1430 if (PL_reg_match_utf8) {
1431 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1432 rx->endp[0] = t - truebase;
1435 rx->endp[0] = s - truebase + rx->minlen;
1437 rx->sublen = strend - truebase;
1440 if (PL_sawampersand) {
1443 rx->subbeg = savepvn(t, strend - t);
1444 rx->sublen = strend - t;
1445 RX_MATCH_COPIED_on(rx);
1446 off = rx->startp[0] = s - t;
1447 rx->endp[0] = off + rx->minlen;
1449 else { /* startp/endp are used by @- @+. */
1450 rx->startp[0] = s - truebase;
1451 rx->endp[0] = s - truebase + rx->minlen;
1453 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1454 LEAVE_SCOPE(oldsave);
1459 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1460 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1461 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1466 LEAVE_SCOPE(oldsave);
1467 if (gimme == G_ARRAY)
1473 Perl_do_readline(pTHX)
1475 dSP; dTARGETSTACKED;
1480 register IO *io = GvIO(PL_last_in_gv);
1481 register I32 type = PL_op->op_type;
1482 I32 gimme = GIMME_V;
1485 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1487 XPUSHs(SvTIED_obj((SV*)io, mg));
1490 call_method("READLINE", gimme);
1493 if (gimme == G_SCALAR)
1494 SvSetMagicSV_nosteal(TARG, TOPs);
1501 if (IoFLAGS(io) & IOf_ARGV) {
1502 if (IoFLAGS(io) & IOf_START) {
1504 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1505 IoFLAGS(io) &= ~IOf_START;
1506 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1507 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1508 SvSETMAGIC(GvSV(PL_last_in_gv));
1513 fp = nextargv(PL_last_in_gv);
1514 if (!fp) { /* Note: fp != IoIFP(io) */
1515 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1518 else if (type == OP_GLOB)
1519 fp = Perl_start_glob(aTHX_ POPs, io);
1521 else if (type == OP_GLOB)
1523 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1524 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1528 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1529 && (!io || !(IoFLAGS(io) & IOf_START))) {
1530 if (type == OP_GLOB)
1531 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1532 "glob failed (can't start child: %s)",
1535 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1537 if (gimme == G_SCALAR) {
1538 (void)SvOK_off(TARG);
1544 if (gimme == G_SCALAR) {
1548 (void)SvUPGRADE(sv, SVt_PV);
1549 tmplen = SvLEN(sv); /* remember if already alloced */
1551 Sv_Grow(sv, 80); /* try short-buffering it */
1552 if (type == OP_RCATLINE)
1558 sv = sv_2mortal(NEWSV(57, 80));
1562 /* This should not be marked tainted if the fp is marked clean */
1563 #define MAYBE_TAINT_LINE(io, sv) \
1564 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1569 /* delay EOF state for a snarfed empty file */
1570 #define SNARF_EOF(gimme,rs,io,sv) \
1571 (gimme != G_SCALAR || SvCUR(sv) \
1572 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1576 if (!sv_gets(sv, fp, offset)
1577 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1579 PerlIO_clearerr(fp);
1580 if (IoFLAGS(io) & IOf_ARGV) {
1581 fp = nextargv(PL_last_in_gv);
1584 (void)do_close(PL_last_in_gv, FALSE);
1586 else if (type == OP_GLOB) {
1587 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1588 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1589 "glob failed (child exited with status %d%s)",
1590 (int)(STATUS_CURRENT >> 8),
1591 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1594 if (gimme == G_SCALAR) {
1595 (void)SvOK_off(TARG);
1599 MAYBE_TAINT_LINE(io, sv);
1602 MAYBE_TAINT_LINE(io, sv);
1604 IoFLAGS(io) |= IOf_NOLINE;
1608 if (type == OP_GLOB) {
1611 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1612 tmps = SvEND(sv) - 1;
1613 if (*tmps == *SvPVX(PL_rs)) {
1618 for (tmps = SvPVX(sv); *tmps; tmps++)
1619 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1620 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1622 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1623 (void)POPs; /* Unmatched wildcard? Chuck it... */
1627 if (gimme == G_ARRAY) {
1628 if (SvLEN(sv) - SvCUR(sv) > 20) {
1629 SvLEN_set(sv, SvCUR(sv)+1);
1630 Renew(SvPVX(sv), SvLEN(sv), char);
1632 sv = sv_2mortal(NEWSV(58, 80));
1635 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1636 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1640 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1641 Renew(SvPVX(sv), SvLEN(sv), char);
1650 register PERL_CONTEXT *cx;
1651 I32 gimme = OP_GIMME(PL_op, -1);
1654 if (cxstack_ix >= 0)
1655 gimme = cxstack[cxstack_ix].blk_gimme;
1663 PUSHBLOCK(cx, CXt_BLOCK, SP);
1675 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1676 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1678 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1681 if (SvTYPE(hv) == SVt_PVHV) {
1682 if (PL_op->op_private & OPpLVAL_INTRO) {
1685 /* does the element we're localizing already exist? */
1687 /* can we determine whether it exists? */
1689 || mg_find((SV*)hv, PERL_MAGIC_env)
1690 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1691 /* Try to preserve the existenceness of a tied hash
1692 * element by using EXISTS and DELETE if possible.
1693 * Fallback to FETCH and STORE otherwise */
1694 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1695 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1696 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1698 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1701 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1702 svp = he ? &HeVAL(he) : 0;
1704 else if (SvTYPE(hv) == SVt_PVAV) {
1705 if (PL_op->op_private & OPpLVAL_INTRO)
1706 DIE(aTHX_ "Can't localize pseudo-hash element");
1707 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1713 if (!svp || *svp == &PL_sv_undef) {
1718 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1720 lv = sv_newmortal();
1721 sv_upgrade(lv, SVt_PVLV);
1723 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1724 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1725 LvTARG(lv) = SvREFCNT_inc(hv);
1730 if (PL_op->op_private & OPpLVAL_INTRO) {
1731 if (HvNAME(hv) && isGV(*svp))
1732 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1736 char *key = SvPV(keysv, keylen);
1737 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1739 save_helem(hv, keysv, svp);
1742 else if (PL_op->op_private & OPpDEREF)
1743 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1745 sv = (svp ? *svp : &PL_sv_undef);
1746 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1747 * Pushing the magical RHS on to the stack is useless, since
1748 * that magic is soon destined to be misled by the local(),
1749 * and thus the later pp_sassign() will fail to mg_get() the
1750 * old value. This should also cure problems with delayed
1751 * mg_get()s. GSAR 98-07-03 */
1752 if (!lval && SvGMAGICAL(sv))
1753 sv = sv_mortalcopy(sv);
1761 register PERL_CONTEXT *cx;
1767 if (PL_op->op_flags & OPf_SPECIAL) {
1768 cx = &cxstack[cxstack_ix];
1769 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1774 gimme = OP_GIMME(PL_op, -1);
1776 if (cxstack_ix >= 0)
1777 gimme = cxstack[cxstack_ix].blk_gimme;
1783 if (gimme == G_VOID)
1785 else if (gimme == G_SCALAR) {
1788 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1791 *MARK = sv_mortalcopy(TOPs);
1794 *MARK = &PL_sv_undef;
1798 else if (gimme == G_ARRAY) {
1799 /* in case LEAVE wipes old return values */
1800 for (mark = newsp + 1; mark <= SP; mark++) {
1801 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1802 *mark = sv_mortalcopy(*mark);
1803 TAINT_NOT; /* Each item is independent */
1807 PL_curpm = newpm; /* Don't pop $1 et al till now */
1817 register PERL_CONTEXT *cx;
1823 cx = &cxstack[cxstack_ix];
1824 if (CxTYPE(cx) != CXt_LOOP)
1825 DIE(aTHX_ "panic: pp_iter");
1827 itersvp = CxITERVAR(cx);
1828 av = cx->blk_loop.iterary;
1829 if (SvTYPE(av) != SVt_PVAV) {
1830 /* iterate ($min .. $max) */
1831 if (cx->blk_loop.iterlval) {
1832 /* string increment */
1833 register SV* cur = cx->blk_loop.iterlval;
1835 char *max = SvPV((SV*)av, maxlen);
1836 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1837 #ifndef USE_5005THREADS /* don't risk potential race */
1838 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1839 /* safe to reuse old SV */
1840 sv_setsv(*itersvp, cur);
1845 /* we need a fresh SV every time so that loop body sees a
1846 * completely new SV for closures/references to work as
1848 SvREFCNT_dec(*itersvp);
1849 *itersvp = newSVsv(cur);
1851 if (strEQ(SvPVX(cur), max))
1852 sv_setiv(cur, 0); /* terminate next time */
1859 /* integer increment */
1860 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1863 #ifndef USE_5005THREADS /* don't risk potential race */
1864 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1865 /* safe to reuse old SV */
1866 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1871 /* we need a fresh SV every time so that loop body sees a
1872 * completely new SV for closures/references to work as they
1874 SvREFCNT_dec(*itersvp);
1875 *itersvp = newSViv(cx->blk_loop.iterix++);
1881 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1884 SvREFCNT_dec(*itersvp);
1886 if (SvMAGICAL(av) || AvREIFY(av)) {
1887 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1894 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1900 if (av != PL_curstack && sv == &PL_sv_undef) {
1901 SV *lv = cx->blk_loop.iterlval;
1902 if (lv && SvREFCNT(lv) > 1) {
1907 SvREFCNT_dec(LvTARG(lv));
1909 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1910 sv_upgrade(lv, SVt_PVLV);
1912 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1914 LvTARG(lv) = SvREFCNT_inc(av);
1915 LvTARGOFF(lv) = cx->blk_loop.iterix;
1916 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1920 *itersvp = SvREFCNT_inc(sv);
1927 register PMOP *pm = cPMOP;
1943 register REGEXP *rx = PM_GETRE(pm);
1945 int force_on_match = 0;
1946 I32 oldsave = PL_savestack_ix;
1948 bool doutf8 = FALSE;
1950 /* known replacement string? */
1951 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1952 if (PL_op->op_flags & OPf_STACKED)
1959 if (SvFAKE(TARG) && SvREADONLY(TARG))
1960 sv_force_normal(TARG);
1961 if (SvREADONLY(TARG)
1962 || (SvTYPE(TARG) > SVt_PVLV
1963 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1964 DIE(aTHX_ PL_no_modify);
1967 s = SvPV(TARG, len);
1968 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1970 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1971 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1976 PL_reg_match_utf8 = DO_UTF8(TARG);
1980 DIE(aTHX_ "panic: pp_subst");
1983 slen = PL_reg_match_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1984 maxiters = 2 * slen + 10; /* We can match twice at each
1985 position, once with zero-length,
1986 second time with non-zero. */
1988 if (!rx->prelen && PL_curpm) {
1992 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1993 ? REXEC_COPY_STR : 0;
1995 r_flags |= REXEC_SCREAM;
1996 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1997 SAVEINT(PL_multiline);
1998 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
2001 if (rx->reganch & RE_USE_INTUIT) {
2003 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
2007 /* How to do it in subst? */
2008 /* if ( (rx->reganch & ROPT_CHECK_ALL)
2010 && ((rx->reganch & ROPT_NOSCAN)
2011 || !((rx->reganch & RE_INTUIT_TAIL)
2012 && (r_flags & REXEC_SCREAM))))
2017 /* only replace once? */
2018 once = !(rpm->op_pmflags & PMf_GLOBAL);
2020 /* known replacement string? */
2022 /* replacement needing upgrading? */
2023 if (DO_UTF8(TARG) && !doutf8) {
2024 SV *nsv = sv_newmortal();
2027 sv_recode_to_utf8(nsv, PL_encoding);
2029 sv_utf8_upgrade(nsv);
2030 c = SvPV(nsv, clen);
2034 c = SvPV(dstr, clen);
2035 doutf8 = DO_UTF8(dstr);
2043 /* can do inplace substitution? */
2044 if (c && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2045 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
2046 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2047 r_flags | REXEC_CHECKED))
2051 LEAVE_SCOPE(oldsave);
2054 if (force_on_match) {
2056 s = SvPV_force(TARG, len);
2061 SvSCREAM_off(TARG); /* disable possible screamer */
2063 rxtainted |= RX_MATCH_TAINTED(rx);
2064 m = orig + rx->startp[0];
2065 d = orig + rx->endp[0];
2067 if (m - s > strend - d) { /* faster to shorten from end */
2069 Copy(c, m, clen, char);
2074 Move(d, m, i, char);
2078 SvCUR_set(TARG, m - s);
2081 else if ((i = m - s)) { /* faster from front */
2089 Copy(c, m, clen, char);
2094 Copy(c, d, clen, char);
2099 TAINT_IF(rxtainted & 1);
2105 if (iters++ > maxiters)
2106 DIE(aTHX_ "Substitution loop");
2107 rxtainted |= RX_MATCH_TAINTED(rx);
2108 m = rx->startp[0] + orig;
2112 Move(s, d, i, char);
2116 Copy(c, d, clen, char);
2119 s = rx->endp[0] + orig;
2120 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2122 /* don't match same null twice */
2123 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2126 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2127 Move(s, d, i+1, char); /* include the NUL */
2129 TAINT_IF(rxtainted & 1);
2131 PUSHs(sv_2mortal(newSViv((I32)iters)));
2133 (void)SvPOK_only_UTF8(TARG);
2134 TAINT_IF(rxtainted);
2135 if (SvSMAGICAL(TARG)) {
2143 LEAVE_SCOPE(oldsave);
2147 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2148 r_flags | REXEC_CHECKED))
2150 if (force_on_match) {
2152 s = SvPV_force(TARG, len);
2155 rxtainted |= RX_MATCH_TAINTED(rx);
2156 dstr = NEWSV(25, len);
2157 sv_setpvn(dstr, m, s-m);
2162 register PERL_CONTEXT *cx;
2165 RETURNOP(cPMOP->op_pmreplroot);
2167 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2169 if (iters++ > maxiters)
2170 DIE(aTHX_ "Substitution loop");
2171 rxtainted |= RX_MATCH_TAINTED(rx);
2172 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2177 strend = s + (strend - m);
2179 m = rx->startp[0] + orig;
2180 sv_catpvn(dstr, s, m-s);
2181 s = rx->endp[0] + orig;
2183 sv_catpvn(dstr, c, clen);
2186 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2187 TARG, NULL, r_flags));
2188 if (doutf8 && !DO_UTF8(dstr)) {
2189 SV* nsv = sv_2mortal(newSVpvn(s, strend - s));
2191 sv_utf8_upgrade(nsv);
2192 sv_catpvn(dstr, SvPVX(nsv), SvCUR(nsv));
2195 sv_catpvn(dstr, s, strend - s);
2197 (void)SvOOK_off(TARG);
2198 Safefree(SvPVX(TARG));
2199 SvPVX(TARG) = SvPVX(dstr);
2200 SvCUR_set(TARG, SvCUR(dstr));
2201 SvLEN_set(TARG, SvLEN(dstr));
2202 doutf8 |= DO_UTF8(dstr);
2206 TAINT_IF(rxtainted & 1);
2208 PUSHs(sv_2mortal(newSViv((I32)iters)));
2210 (void)SvPOK_only(TARG);
2213 TAINT_IF(rxtainted);
2216 LEAVE_SCOPE(oldsave);
2225 LEAVE_SCOPE(oldsave);
2234 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2235 ++*PL_markstack_ptr;
2236 LEAVE; /* exit inner scope */
2239 if (PL_stack_base + *PL_markstack_ptr > SP) {
2241 I32 gimme = GIMME_V;
2243 LEAVE; /* exit outer scope */
2244 (void)POPMARK; /* pop src */
2245 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2246 (void)POPMARK; /* pop dst */
2247 SP = PL_stack_base + POPMARK; /* pop original mark */
2248 if (gimme == G_SCALAR) {
2252 else if (gimme == G_ARRAY)
2259 ENTER; /* enter inner scope */
2262 src = PL_stack_base[*PL_markstack_ptr];
2266 RETURNOP(cLOGOP->op_other);
2277 register PERL_CONTEXT *cx;
2283 if (gimme == G_SCALAR) {
2286 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2288 *MARK = SvREFCNT_inc(TOPs);
2293 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2295 *MARK = sv_mortalcopy(sv);
2300 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2304 *MARK = &PL_sv_undef;
2308 else if (gimme == G_ARRAY) {
2309 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2310 if (!SvTEMP(*MARK)) {
2311 *MARK = sv_mortalcopy(*MARK);
2312 TAINT_NOT; /* Each item is independent */
2318 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2319 PL_curpm = newpm; /* ... and pop $1 et al */
2323 return pop_return();
2326 /* This duplicates the above code because the above code must not
2327 * get any slower by more conditions */
2335 register PERL_CONTEXT *cx;
2342 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2343 /* We are an argument to a function or grep().
2344 * This kind of lvalueness was legal before lvalue
2345 * subroutines too, so be backward compatible:
2346 * cannot report errors. */
2348 /* Scalar context *is* possible, on the LHS of -> only,
2349 * as in f()->meth(). But this is not an lvalue. */
2350 if (gimme == G_SCALAR)
2352 if (gimme == G_ARRAY) {
2353 if (!CvLVALUE(cx->blk_sub.cv))
2354 goto temporise_array;
2355 EXTEND_MORTAL(SP - newsp);
2356 for (mark = newsp + 1; mark <= SP; mark++) {
2359 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2360 *mark = sv_mortalcopy(*mark);
2362 /* Can be a localized value subject to deletion. */
2363 PL_tmps_stack[++PL_tmps_ix] = *mark;
2364 (void)SvREFCNT_inc(*mark);
2369 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2370 /* Here we go for robustness, not for speed, so we change all
2371 * the refcounts so the caller gets a live guy. Cannot set
2372 * TEMP, so sv_2mortal is out of question. */
2373 if (!CvLVALUE(cx->blk_sub.cv)) {
2378 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2380 if (gimme == G_SCALAR) {
2384 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2389 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2390 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2392 else { /* Can be a localized value
2393 * subject to deletion. */
2394 PL_tmps_stack[++PL_tmps_ix] = *mark;
2395 (void)SvREFCNT_inc(*mark);
2398 else { /* Should not happen? */
2403 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2404 (MARK > SP ? "Empty array" : "Array"));
2408 else if (gimme == G_ARRAY) {
2409 EXTEND_MORTAL(SP - newsp);
2410 for (mark = newsp + 1; mark <= SP; mark++) {
2411 if (*mark != &PL_sv_undef
2412 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2413 /* Might be flattened array after $#array = */
2419 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2420 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2423 /* Can be a localized value subject to deletion. */
2424 PL_tmps_stack[++PL_tmps_ix] = *mark;
2425 (void)SvREFCNT_inc(*mark);
2431 if (gimme == G_SCALAR) {
2435 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2437 *MARK = SvREFCNT_inc(TOPs);
2442 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2444 *MARK = sv_mortalcopy(sv);
2449 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2453 *MARK = &PL_sv_undef;
2457 else if (gimme == G_ARRAY) {
2459 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2460 if (!SvTEMP(*MARK)) {
2461 *MARK = sv_mortalcopy(*MARK);
2462 TAINT_NOT; /* Each item is independent */
2469 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2470 PL_curpm = newpm; /* ... and pop $1 et al */
2474 return pop_return();
2479 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2481 SV *dbsv = GvSV(PL_DBsub);
2483 if (!PERLDB_SUB_NN) {
2487 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2488 || strEQ(GvNAME(gv), "END")
2489 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2490 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2491 && (gv = (GV*)*svp) ))) {
2492 /* Use GV from the stack as a fallback. */
2493 /* GV is potentially non-unique, or contain different CV. */
2494 SV *tmp = newRV((SV*)cv);
2495 sv_setsv(dbsv, tmp);
2499 gv_efullname3(dbsv, gv, Nullch);
2503 (void)SvUPGRADE(dbsv, SVt_PVIV);
2504 (void)SvIOK_on(dbsv);
2505 SAVEIV(SvIVX(dbsv));
2506 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2510 PL_curcopdb = PL_curcop;
2511 cv = GvCV(PL_DBsub);
2521 register PERL_CONTEXT *cx;
2523 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2526 DIE(aTHX_ "Not a CODE reference");
2527 switch (SvTYPE(sv)) {
2533 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2535 SP = PL_stack_base + POPMARK;
2538 if (SvGMAGICAL(sv)) {
2542 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2545 sym = SvPV(sv, n_a);
2547 DIE(aTHX_ PL_no_usym, "a subroutine");
2548 if (PL_op->op_private & HINT_STRICT_REFS)
2549 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2550 cv = get_cv(sym, TRUE);
2555 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2556 tryAMAGICunDEREF(to_cv);
2559 if (SvTYPE(cv) == SVt_PVCV)
2564 DIE(aTHX_ "Not a CODE reference");
2569 if (!(cv = GvCVu((GV*)sv)))
2570 cv = sv_2cv(sv, &stash, &gv, FALSE);
2583 if (!CvROOT(cv) && !CvXSUB(cv)) {
2587 /* anonymous or undef'd function leaves us no recourse */
2588 if (CvANON(cv) || !(gv = CvGV(cv)))
2589 DIE(aTHX_ "Undefined subroutine called");
2591 /* autoloaded stub? */
2592 if (cv != GvCV(gv)) {
2595 /* should call AUTOLOAD now? */
2598 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2605 sub_name = sv_newmortal();
2606 gv_efullname3(sub_name, gv, Nullch);
2607 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2611 DIE(aTHX_ "Not a CODE reference");
2616 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2617 cv = get_db_sub(&sv, cv);
2619 DIE(aTHX_ "No DBsub routine");
2622 #ifdef USE_5005THREADS
2624 * First we need to check if the sub or method requires locking.
2625 * If so, we gain a lock on the CV, the first argument or the
2626 * stash (for static methods), as appropriate. This has to be
2627 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2628 * reschedule by returning a new op.
2630 MUTEX_LOCK(CvMUTEXP(cv));
2631 if (CvFLAGS(cv) & CVf_LOCKED) {
2633 if (CvFLAGS(cv) & CVf_METHOD) {
2634 if (SP > PL_stack_base + TOPMARK)
2635 sv = *(PL_stack_base + TOPMARK + 1);
2637 AV *av = (AV*)PL_curpad[0];
2638 if (hasargs || !av || AvFILLp(av) < 0
2639 || !(sv = AvARRAY(av)[0]))
2641 MUTEX_UNLOCK(CvMUTEXP(cv));
2642 DIE(aTHX_ "no argument for locked method call");
2649 char *stashname = SvPV(sv, len);
2650 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2656 MUTEX_UNLOCK(CvMUTEXP(cv));
2657 mg = condpair_magic(sv);
2658 MUTEX_LOCK(MgMUTEXP(mg));
2659 if (MgOWNER(mg) == thr)
2660 MUTEX_UNLOCK(MgMUTEXP(mg));
2663 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2665 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2667 MUTEX_UNLOCK(MgMUTEXP(mg));
2668 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2670 MUTEX_LOCK(CvMUTEXP(cv));
2673 * Now we have permission to enter the sub, we must distinguish
2674 * four cases. (0) It's an XSUB (in which case we don't care
2675 * about ownership); (1) it's ours already (and we're recursing);
2676 * (2) it's free (but we may already be using a cached clone);
2677 * (3) another thread owns it. Case (1) is easy: we just use it.
2678 * Case (2) means we look for a clone--if we have one, use it
2679 * otherwise grab ownership of cv. Case (3) means we look for a
2680 * clone (for non-XSUBs) and have to create one if we don't
2682 * Why look for a clone in case (2) when we could just grab
2683 * ownership of cv straight away? Well, we could be recursing,
2684 * i.e. we originally tried to enter cv while another thread
2685 * owned it (hence we used a clone) but it has been freed up
2686 * and we're now recursing into it. It may or may not be "better"
2687 * to use the clone but at least CvDEPTH can be trusted.
2689 if (CvOWNER(cv) == thr || CvXSUB(cv))
2690 MUTEX_UNLOCK(CvMUTEXP(cv));
2692 /* Case (2) or (3) */
2696 * XXX Might it be better to release CvMUTEXP(cv) while we
2697 * do the hv_fetch? We might find someone has pinched it
2698 * when we look again, in which case we would be in case
2699 * (3) instead of (2) so we'd have to clone. Would the fact
2700 * that we released the mutex more quickly make up for this?
2702 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2704 /* We already have a clone to use */
2705 MUTEX_UNLOCK(CvMUTEXP(cv));
2707 DEBUG_S(PerlIO_printf(Perl_debug_log,
2708 "entersub: %p already has clone %p:%s\n",
2709 thr, cv, SvPEEK((SV*)cv)));
2712 if (CvDEPTH(cv) == 0)
2713 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2716 /* (2) => grab ownership of cv. (3) => make clone */
2720 MUTEX_UNLOCK(CvMUTEXP(cv));
2721 DEBUG_S(PerlIO_printf(Perl_debug_log,
2722 "entersub: %p grabbing %p:%s in stash %s\n",
2723 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2724 HvNAME(CvSTASH(cv)) : "(none)"));
2727 /* Make a new clone. */
2729 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2730 MUTEX_UNLOCK(CvMUTEXP(cv));
2731 DEBUG_S((PerlIO_printf(Perl_debug_log,
2732 "entersub: %p cloning %p:%s\n",
2733 thr, cv, SvPEEK((SV*)cv))));
2735 * We're creating a new clone so there's no race
2736 * between the original MUTEX_UNLOCK and the
2737 * SvREFCNT_inc since no one will be trying to undef
2738 * it out from underneath us. At least, I don't think
2741 clonecv = cv_clone(cv);
2742 SvREFCNT_dec(cv); /* finished with this */
2743 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2744 CvOWNER(clonecv) = thr;
2748 DEBUG_S(if (CvDEPTH(cv) != 0)
2749 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2751 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2754 #endif /* USE_5005THREADS */
2757 #ifdef PERL_XSUB_OLDSTYLE
2758 if (CvOLDSTYLE(cv)) {
2759 I32 (*fp3)(int,int,int);
2761 register I32 items = SP - MARK;
2762 /* We dont worry to copy from @_. */
2767 PL_stack_sp = mark + 1;
2768 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2769 items = (*fp3)(CvXSUBANY(cv).any_i32,
2770 MARK - PL_stack_base + 1,
2772 PL_stack_sp = PL_stack_base + items;
2775 #endif /* PERL_XSUB_OLDSTYLE */
2777 I32 markix = TOPMARK;
2782 /* Need to copy @_ to stack. Alternative may be to
2783 * switch stack to @_, and copy return values
2784 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2787 #ifdef USE_5005THREADS
2788 av = (AV*)PL_curpad[0];
2790 av = GvAV(PL_defgv);
2791 #endif /* USE_5005THREADS */
2792 items = AvFILLp(av) + 1; /* @_ is not tieable */
2795 /* Mark is at the end of the stack. */
2797 Copy(AvARRAY(av), SP + 1, items, SV*);
2802 /* We assume first XSUB in &DB::sub is the called one. */
2804 SAVEVPTR(PL_curcop);
2805 PL_curcop = PL_curcopdb;
2808 /* Do we need to open block here? XXXX */
2809 (void)(*CvXSUB(cv))(aTHX_ cv);
2811 /* Enforce some sanity in scalar context. */
2812 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2813 if (markix > PL_stack_sp - PL_stack_base)
2814 *(PL_stack_base + markix) = &PL_sv_undef;
2816 *(PL_stack_base + markix) = *PL_stack_sp;
2817 PL_stack_sp = PL_stack_base + markix;
2825 register I32 items = SP - MARK;
2826 AV* padlist = CvPADLIST(cv);
2827 SV** svp = AvARRAY(padlist);
2828 push_return(PL_op->op_next);
2829 PUSHBLOCK(cx, CXt_SUB, MARK);
2832 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2833 * that eval'' ops within this sub know the correct lexical space.
2834 * Owing the speed considerations, we choose to search for the cv
2835 * in doeval() instead.
2837 if (CvDEPTH(cv) < 2)
2838 (void)SvREFCNT_inc(cv);
2839 else { /* save temporaries on recursion? */
2840 PERL_STACK_OVERFLOW_CHECK();
2841 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2843 AV *newpad = newAV();
2844 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2845 I32 ix = AvFILLp((AV*)svp[1]);
2846 I32 names_fill = AvFILLp((AV*)svp[0]);
2847 svp = AvARRAY(svp[0]);
2848 for ( ;ix > 0; ix--) {
2849 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2850 char *name = SvPVX(svp[ix]);
2851 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2852 || *name == '&') /* anonymous code? */
2854 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2856 else { /* our own lexical */
2858 av_store(newpad, ix, sv = (SV*)newAV());
2859 else if (*name == '%')
2860 av_store(newpad, ix, sv = (SV*)newHV());
2862 av_store(newpad, ix, sv = NEWSV(0,0));
2866 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2867 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2870 av_store(newpad, ix, sv = NEWSV(0,0));
2874 av = newAV(); /* will be @_ */
2876 av_store(newpad, 0, (SV*)av);
2877 AvFLAGS(av) = AVf_REIFY;
2878 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2879 AvFILLp(padlist) = CvDEPTH(cv);
2880 svp = AvARRAY(padlist);
2883 #ifdef USE_5005THREADS
2885 AV* av = (AV*)PL_curpad[0];
2887 items = AvFILLp(av) + 1;
2889 /* Mark is at the end of the stack. */
2891 Copy(AvARRAY(av), SP + 1, items, SV*);
2896 #endif /* USE_5005THREADS */
2897 SAVEVPTR(PL_curpad);
2898 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2899 #ifndef USE_5005THREADS
2901 #endif /* USE_5005THREADS */
2907 DEBUG_S(PerlIO_printf(Perl_debug_log,
2908 "%p entersub preparing @_\n", thr));
2910 av = (AV*)PL_curpad[0];
2912 /* @_ is normally not REAL--this should only ever
2913 * happen when DB::sub() calls things that modify @_ */
2918 #ifndef USE_5005THREADS
2919 cx->blk_sub.savearray = GvAV(PL_defgv);
2920 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2921 #endif /* USE_5005THREADS */
2922 cx->blk_sub.oldcurpad = PL_curpad;
2923 cx->blk_sub.argarray = av;
2926 if (items > AvMAX(av) + 1) {
2928 if (AvARRAY(av) != ary) {
2929 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2930 SvPVX(av) = (char*)ary;
2932 if (items > AvMAX(av) + 1) {
2933 AvMAX(av) = items - 1;
2934 Renew(ary,items,SV*);
2936 SvPVX(av) = (char*)ary;
2939 Copy(MARK,AvARRAY(av),items,SV*);
2940 AvFILLp(av) = items - 1;
2948 /* warning must come *after* we fully set up the context
2949 * stuff so that __WARN__ handlers can safely dounwind()
2952 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2953 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2954 sub_crush_depth(cv);
2956 DEBUG_S(PerlIO_printf(Perl_debug_log,
2957 "%p entersub returning %p\n", thr, CvSTART(cv)));
2959 RETURNOP(CvSTART(cv));
2964 Perl_sub_crush_depth(pTHX_ CV *cv)
2967 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2969 SV* tmpstr = sv_newmortal();
2970 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2971 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%s\"",
2981 IV elem = SvIV(elemsv);
2983 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2984 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2987 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2988 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2990 elem -= PL_curcop->cop_arybase;
2991 if (SvTYPE(av) != SVt_PVAV)
2993 svp = av_fetch(av, elem, lval && !defer);
2995 if (!svp || *svp == &PL_sv_undef) {
2998 DIE(aTHX_ PL_no_aelem, elem);
2999 lv = sv_newmortal();
3000 sv_upgrade(lv, SVt_PVLV);
3002 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
3003 LvTARG(lv) = SvREFCNT_inc(av);
3004 LvTARGOFF(lv) = elem;
3009 if (PL_op->op_private & OPpLVAL_INTRO)
3010 save_aelem(av, elem, svp);
3011 else if (PL_op->op_private & OPpDEREF)
3012 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3014 sv = (svp ? *svp : &PL_sv_undef);
3015 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3016 sv = sv_mortalcopy(sv);
3022 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3028 Perl_croak(aTHX_ PL_no_modify);
3029 if (SvTYPE(sv) < SVt_RV)
3030 sv_upgrade(sv, SVt_RV);
3031 else if (SvTYPE(sv) >= SVt_PV) {
3032 (void)SvOOK_off(sv);
3033 Safefree(SvPVX(sv));
3034 SvLEN(sv) = SvCUR(sv) = 0;
3038 SvRV(sv) = NEWSV(355,0);
3041 SvRV(sv) = (SV*)newAV();
3044 SvRV(sv) = (SV*)newHV();
3059 if (SvTYPE(rsv) == SVt_PVCV) {
3065 SETs(method_common(sv, Null(U32*)));
3072 SV* sv = cSVOP->op_sv;
3073 U32 hash = SvUVX(sv);
3075 XPUSHs(method_common(sv, &hash));
3080 S_method_common(pTHX_ SV* meth, U32* hashp)
3091 name = SvPV(meth, namelen);
3092 sv = *(PL_stack_base + TOPMARK + 1);
3095 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3104 /* this isn't a reference */
3107 !(packname = SvPV(sv, packlen)) ||
3108 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3109 !(ob=(SV*)GvIO(iogv)))
3111 /* this isn't the name of a filehandle either */
3113 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3114 ? !isIDFIRST_utf8((U8*)packname)
3115 : !isIDFIRST(*packname)
3118 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3119 SvOK(sv) ? "without a package or object reference"
3120 : "on an undefined value");
3122 /* assume it's a package name */
3123 stash = gv_stashpvn(packname, packlen, FALSE);
3126 /* it _is_ a filehandle name -- replace with a reference */
3127 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3130 /* if we got here, ob should be a reference or a glob */
3131 if (!ob || !(SvOBJECT(ob)
3132 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3135 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3139 stash = SvSTASH(ob);
3142 /* NOTE: stash may be null, hope hv_fetch_ent and
3143 gv_fetchmethod can cope (it seems they can) */
3145 /* shortcut for simple names */
3147 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3149 gv = (GV*)HeVAL(he);
3150 if (isGV(gv) && GvCV(gv) &&
3151 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3152 return (SV*)GvCV(gv);
3156 gv = gv_fetchmethod(stash, name);
3159 /* This code tries to figure out just what went wrong with
3160 gv_fetchmethod. It therefore needs to duplicate a lot of
3161 the internals of that function. We can't move it inside
3162 Perl_gv_fetchmethod_autoload(), however, since that would
3163 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3170 for (p = name; *p; p++) {
3172 sep = p, leaf = p + 1;
3173 else if (*p == ':' && *(p + 1) == ':')
3174 sep = p, leaf = p + 2;
3176 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3177 /* the method name is unqualified or starts with SUPER:: */
3178 packname = sep ? CopSTASHPV(PL_curcop) :
3179 stash ? HvNAME(stash) : packname;
3180 packlen = strlen(packname);
3183 /* the method name is qualified */
3185 packlen = sep - name;
3188 /* we're relying on gv_fetchmethod not autovivifying the stash */
3189 if (gv_stashpvn(packname, packlen, FALSE)) {
3191 "Can't locate object method \"%s\" via package \"%.*s\"",
3192 leaf, (int)packlen, packname);
3196 "Can't locate object method \"%s\" via package \"%.*s\""
3197 " (perhaps you forgot to load \"%.*s\"?)",
3198 leaf, (int)packlen, packname, (int)packlen, packname);
3201 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3204 #ifdef USE_5005THREADS
3206 unset_cvowner(pTHX_ void *cvarg)
3208 register CV* cv = (CV *) cvarg;
3210 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3211 thr, cv, SvPEEK((SV*)cv))));
3212 MUTEX_LOCK(CvMUTEXP(cv));
3213 DEBUG_S(if (CvDEPTH(cv) != 0)
3214 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3216 assert(thr == CvOWNER(cv));
3218 MUTEX_UNLOCK(CvMUTEXP(cv));
3221 #endif /* USE_5005THREADS */