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) {
1495 SvSetSV_nosteal(TARG, result);
1504 if (IoFLAGS(io) & IOf_ARGV) {
1505 if (IoFLAGS(io) & IOf_START) {
1507 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1508 IoFLAGS(io) &= ~IOf_START;
1509 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1510 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1511 SvSETMAGIC(GvSV(PL_last_in_gv));
1516 fp = nextargv(PL_last_in_gv);
1517 if (!fp) { /* Note: fp != IoIFP(io) */
1518 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1521 else if (type == OP_GLOB)
1522 fp = Perl_start_glob(aTHX_ POPs, io);
1524 else if (type == OP_GLOB)
1526 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1527 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1531 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1532 && (!io || !(IoFLAGS(io) & IOf_START))) {
1533 if (type == OP_GLOB)
1534 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1535 "glob failed (can't start child: %s)",
1538 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1540 if (gimme == G_SCALAR) {
1541 (void)SvOK_off(TARG);
1547 if (gimme == G_SCALAR) {
1551 (void)SvUPGRADE(sv, SVt_PV);
1552 tmplen = SvLEN(sv); /* remember if already alloced */
1554 Sv_Grow(sv, 80); /* try short-buffering it */
1555 if (type == OP_RCATLINE)
1561 sv = sv_2mortal(NEWSV(57, 80));
1565 /* This should not be marked tainted if the fp is marked clean */
1566 #define MAYBE_TAINT_LINE(io, sv) \
1567 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1572 /* delay EOF state for a snarfed empty file */
1573 #define SNARF_EOF(gimme,rs,io,sv) \
1574 (gimme != G_SCALAR || SvCUR(sv) \
1575 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1579 if (!sv_gets(sv, fp, offset)
1580 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1582 PerlIO_clearerr(fp);
1583 if (IoFLAGS(io) & IOf_ARGV) {
1584 fp = nextargv(PL_last_in_gv);
1587 (void)do_close(PL_last_in_gv, FALSE);
1589 else if (type == OP_GLOB) {
1590 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1591 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1592 "glob failed (child exited with status %d%s)",
1593 (int)(STATUS_CURRENT >> 8),
1594 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1597 if (gimme == G_SCALAR) {
1598 (void)SvOK_off(TARG);
1602 MAYBE_TAINT_LINE(io, sv);
1605 MAYBE_TAINT_LINE(io, sv);
1607 IoFLAGS(io) |= IOf_NOLINE;
1611 if (type == OP_GLOB) {
1614 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1615 tmps = SvEND(sv) - 1;
1616 if (*tmps == *SvPVX(PL_rs)) {
1621 for (tmps = SvPVX(sv); *tmps; tmps++)
1622 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1623 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1625 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1626 (void)POPs; /* Unmatched wildcard? Chuck it... */
1630 if (gimme == G_ARRAY) {
1631 if (SvLEN(sv) - SvCUR(sv) > 20) {
1632 SvLEN_set(sv, SvCUR(sv)+1);
1633 Renew(SvPVX(sv), SvLEN(sv), char);
1635 sv = sv_2mortal(NEWSV(58, 80));
1638 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1639 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1643 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1644 Renew(SvPVX(sv), SvLEN(sv), char);
1653 register PERL_CONTEXT *cx;
1654 I32 gimme = OP_GIMME(PL_op, -1);
1657 if (cxstack_ix >= 0)
1658 gimme = cxstack[cxstack_ix].blk_gimme;
1666 PUSHBLOCK(cx, CXt_BLOCK, SP);
1678 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1679 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1681 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1684 if (SvTYPE(hv) == SVt_PVHV) {
1685 if (PL_op->op_private & OPpLVAL_INTRO) {
1688 /* does the element we're localizing already exist? */
1690 /* can we determine whether it exists? */
1692 || mg_find((SV*)hv, PERL_MAGIC_env)
1693 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1694 /* Try to preserve the existenceness of a tied hash
1695 * element by using EXISTS and DELETE if possible.
1696 * Fallback to FETCH and STORE otherwise */
1697 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1698 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1699 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1701 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1704 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1705 svp = he ? &HeVAL(he) : 0;
1707 else if (SvTYPE(hv) == SVt_PVAV) {
1708 if (PL_op->op_private & OPpLVAL_INTRO)
1709 DIE(aTHX_ "Can't localize pseudo-hash element");
1710 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1716 if (!svp || *svp == &PL_sv_undef) {
1721 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1723 lv = sv_newmortal();
1724 sv_upgrade(lv, SVt_PVLV);
1726 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1727 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1728 LvTARG(lv) = SvREFCNT_inc(hv);
1733 if (PL_op->op_private & OPpLVAL_INTRO) {
1734 if (HvNAME(hv) && isGV(*svp))
1735 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1739 char *key = SvPV(keysv, keylen);
1740 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1742 save_helem(hv, keysv, svp);
1745 else if (PL_op->op_private & OPpDEREF)
1746 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1748 sv = (svp ? *svp : &PL_sv_undef);
1749 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1750 * Pushing the magical RHS on to the stack is useless, since
1751 * that magic is soon destined to be misled by the local(),
1752 * and thus the later pp_sassign() will fail to mg_get() the
1753 * old value. This should also cure problems with delayed
1754 * mg_get()s. GSAR 98-07-03 */
1755 if (!lval && SvGMAGICAL(sv))
1756 sv = sv_mortalcopy(sv);
1764 register PERL_CONTEXT *cx;
1770 if (PL_op->op_flags & OPf_SPECIAL) {
1771 cx = &cxstack[cxstack_ix];
1772 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1777 gimme = OP_GIMME(PL_op, -1);
1779 if (cxstack_ix >= 0)
1780 gimme = cxstack[cxstack_ix].blk_gimme;
1786 if (gimme == G_VOID)
1788 else if (gimme == G_SCALAR) {
1791 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1794 *MARK = sv_mortalcopy(TOPs);
1797 *MARK = &PL_sv_undef;
1801 else if (gimme == G_ARRAY) {
1802 /* in case LEAVE wipes old return values */
1803 for (mark = newsp + 1; mark <= SP; mark++) {
1804 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1805 *mark = sv_mortalcopy(*mark);
1806 TAINT_NOT; /* Each item is independent */
1810 PL_curpm = newpm; /* Don't pop $1 et al till now */
1820 register PERL_CONTEXT *cx;
1826 cx = &cxstack[cxstack_ix];
1827 if (CxTYPE(cx) != CXt_LOOP)
1828 DIE(aTHX_ "panic: pp_iter");
1830 itersvp = CxITERVAR(cx);
1831 av = cx->blk_loop.iterary;
1832 if (SvTYPE(av) != SVt_PVAV) {
1833 /* iterate ($min .. $max) */
1834 if (cx->blk_loop.iterlval) {
1835 /* string increment */
1836 register SV* cur = cx->blk_loop.iterlval;
1838 char *max = SvPV((SV*)av, maxlen);
1839 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1840 #ifndef USE_5005THREADS /* don't risk potential race */
1841 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1842 /* safe to reuse old SV */
1843 sv_setsv(*itersvp, cur);
1848 /* we need a fresh SV every time so that loop body sees a
1849 * completely new SV for closures/references to work as
1851 SvREFCNT_dec(*itersvp);
1852 *itersvp = newSVsv(cur);
1854 if (strEQ(SvPVX(cur), max))
1855 sv_setiv(cur, 0); /* terminate next time */
1862 /* integer increment */
1863 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1866 #ifndef USE_5005THREADS /* don't risk potential race */
1867 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1868 /* safe to reuse old SV */
1869 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1874 /* we need a fresh SV every time so that loop body sees a
1875 * completely new SV for closures/references to work as they
1877 SvREFCNT_dec(*itersvp);
1878 *itersvp = newSViv(cx->blk_loop.iterix++);
1884 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1887 SvREFCNT_dec(*itersvp);
1889 if (SvMAGICAL(av) || AvREIFY(av)) {
1890 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1897 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1903 if (av != PL_curstack && sv == &PL_sv_undef) {
1904 SV *lv = cx->blk_loop.iterlval;
1905 if (lv && SvREFCNT(lv) > 1) {
1910 SvREFCNT_dec(LvTARG(lv));
1912 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1913 sv_upgrade(lv, SVt_PVLV);
1915 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1917 LvTARG(lv) = SvREFCNT_inc(av);
1918 LvTARGOFF(lv) = cx->blk_loop.iterix;
1919 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1923 *itersvp = SvREFCNT_inc(sv);
1930 register PMOP *pm = cPMOP;
1946 register REGEXP *rx = PM_GETRE(pm);
1948 int force_on_match = 0;
1949 I32 oldsave = PL_savestack_ix;
1951 bool doutf8 = FALSE;
1953 /* known replacement string? */
1954 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1955 if (PL_op->op_flags & OPf_STACKED)
1962 if (SvFAKE(TARG) && SvREADONLY(TARG))
1963 sv_force_normal(TARG);
1964 if (SvREADONLY(TARG)
1965 || (SvTYPE(TARG) > SVt_PVLV
1966 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1967 DIE(aTHX_ PL_no_modify);
1970 s = SvPV(TARG, len);
1971 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1973 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1974 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1979 PL_reg_match_utf8 = DO_UTF8(TARG);
1983 DIE(aTHX_ "panic: pp_subst");
1986 slen = PL_reg_match_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1987 maxiters = 2 * slen + 10; /* We can match twice at each
1988 position, once with zero-length,
1989 second time with non-zero. */
1991 if (!rx->prelen && PL_curpm) {
1995 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1996 ? REXEC_COPY_STR : 0;
1998 r_flags |= REXEC_SCREAM;
1999 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
2000 SAVEINT(PL_multiline);
2001 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
2004 if (rx->reganch & RE_USE_INTUIT) {
2006 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
2010 /* How to do it in subst? */
2011 /* if ( (rx->reganch & ROPT_CHECK_ALL)
2013 && ((rx->reganch & ROPT_NOSCAN)
2014 || !((rx->reganch & RE_INTUIT_TAIL)
2015 && (r_flags & REXEC_SCREAM))))
2020 /* only replace once? */
2021 once = !(rpm->op_pmflags & PMf_GLOBAL);
2023 /* known replacement string? */
2025 /* replacement needing upgrading? */
2026 if (DO_UTF8(TARG) && !doutf8) {
2027 SV *nsv = sv_newmortal();
2030 sv_recode_to_utf8(nsv, PL_encoding);
2032 sv_utf8_upgrade(nsv);
2033 c = SvPV(nsv, clen);
2037 c = SvPV(dstr, clen);
2038 doutf8 = DO_UTF8(dstr);
2046 /* can do inplace substitution? */
2047 if (c && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2048 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
2049 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2050 r_flags | REXEC_CHECKED))
2054 LEAVE_SCOPE(oldsave);
2057 if (force_on_match) {
2059 s = SvPV_force(TARG, len);
2064 SvSCREAM_off(TARG); /* disable possible screamer */
2066 rxtainted |= RX_MATCH_TAINTED(rx);
2067 m = orig + rx->startp[0];
2068 d = orig + rx->endp[0];
2070 if (m - s > strend - d) { /* faster to shorten from end */
2072 Copy(c, m, clen, char);
2077 Move(d, m, i, char);
2081 SvCUR_set(TARG, m - s);
2084 else if ((i = m - s)) { /* faster from front */
2092 Copy(c, m, clen, char);
2097 Copy(c, d, clen, char);
2102 TAINT_IF(rxtainted & 1);
2108 if (iters++ > maxiters)
2109 DIE(aTHX_ "Substitution loop");
2110 rxtainted |= RX_MATCH_TAINTED(rx);
2111 m = rx->startp[0] + orig;
2115 Move(s, d, i, char);
2119 Copy(c, d, clen, char);
2122 s = rx->endp[0] + orig;
2123 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2125 /* don't match same null twice */
2126 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2129 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2130 Move(s, d, i+1, char); /* include the NUL */
2132 TAINT_IF(rxtainted & 1);
2134 PUSHs(sv_2mortal(newSViv((I32)iters)));
2136 (void)SvPOK_only_UTF8(TARG);
2137 TAINT_IF(rxtainted);
2138 if (SvSMAGICAL(TARG)) {
2146 LEAVE_SCOPE(oldsave);
2150 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2151 r_flags | REXEC_CHECKED))
2153 if (force_on_match) {
2155 s = SvPV_force(TARG, len);
2158 rxtainted |= RX_MATCH_TAINTED(rx);
2159 dstr = NEWSV(25, len);
2160 sv_setpvn(dstr, m, s-m);
2165 register PERL_CONTEXT *cx;
2168 RETURNOP(cPMOP->op_pmreplroot);
2170 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2172 if (iters++ > maxiters)
2173 DIE(aTHX_ "Substitution loop");
2174 rxtainted |= RX_MATCH_TAINTED(rx);
2175 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2180 strend = s + (strend - m);
2182 m = rx->startp[0] + orig;
2183 sv_catpvn(dstr, s, m-s);
2184 s = rx->endp[0] + orig;
2186 sv_catpvn(dstr, c, clen);
2189 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2190 TARG, NULL, r_flags));
2191 if (doutf8 && !DO_UTF8(dstr)) {
2192 SV* nsv = sv_2mortal(newSVpvn(s, strend - s));
2194 sv_utf8_upgrade(nsv);
2195 sv_catpvn(dstr, SvPVX(nsv), SvCUR(nsv));
2198 sv_catpvn(dstr, s, strend - s);
2200 (void)SvOOK_off(TARG);
2201 Safefree(SvPVX(TARG));
2202 SvPVX(TARG) = SvPVX(dstr);
2203 SvCUR_set(TARG, SvCUR(dstr));
2204 SvLEN_set(TARG, SvLEN(dstr));
2205 doutf8 |= DO_UTF8(dstr);
2209 TAINT_IF(rxtainted & 1);
2211 PUSHs(sv_2mortal(newSViv((I32)iters)));
2213 (void)SvPOK_only(TARG);
2216 TAINT_IF(rxtainted);
2219 LEAVE_SCOPE(oldsave);
2228 LEAVE_SCOPE(oldsave);
2237 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2238 ++*PL_markstack_ptr;
2239 LEAVE; /* exit inner scope */
2242 if (PL_stack_base + *PL_markstack_ptr > SP) {
2244 I32 gimme = GIMME_V;
2246 LEAVE; /* exit outer scope */
2247 (void)POPMARK; /* pop src */
2248 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2249 (void)POPMARK; /* pop dst */
2250 SP = PL_stack_base + POPMARK; /* pop original mark */
2251 if (gimme == G_SCALAR) {
2255 else if (gimme == G_ARRAY)
2262 ENTER; /* enter inner scope */
2265 src = PL_stack_base[*PL_markstack_ptr];
2269 RETURNOP(cLOGOP->op_other);
2280 register PERL_CONTEXT *cx;
2286 if (gimme == G_SCALAR) {
2289 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2291 *MARK = SvREFCNT_inc(TOPs);
2296 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2298 *MARK = sv_mortalcopy(sv);
2303 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2307 *MARK = &PL_sv_undef;
2311 else if (gimme == G_ARRAY) {
2312 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2313 if (!SvTEMP(*MARK)) {
2314 *MARK = sv_mortalcopy(*MARK);
2315 TAINT_NOT; /* Each item is independent */
2321 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2322 PL_curpm = newpm; /* ... and pop $1 et al */
2326 return pop_return();
2329 /* This duplicates the above code because the above code must not
2330 * get any slower by more conditions */
2338 register PERL_CONTEXT *cx;
2345 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2346 /* We are an argument to a function or grep().
2347 * This kind of lvalueness was legal before lvalue
2348 * subroutines too, so be backward compatible:
2349 * cannot report errors. */
2351 /* Scalar context *is* possible, on the LHS of -> only,
2352 * as in f()->meth(). But this is not an lvalue. */
2353 if (gimme == G_SCALAR)
2355 if (gimme == G_ARRAY) {
2356 if (!CvLVALUE(cx->blk_sub.cv))
2357 goto temporise_array;
2358 EXTEND_MORTAL(SP - newsp);
2359 for (mark = newsp + 1; mark <= SP; mark++) {
2362 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2363 *mark = sv_mortalcopy(*mark);
2365 /* Can be a localized value subject to deletion. */
2366 PL_tmps_stack[++PL_tmps_ix] = *mark;
2367 (void)SvREFCNT_inc(*mark);
2372 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2373 /* Here we go for robustness, not for speed, so we change all
2374 * the refcounts so the caller gets a live guy. Cannot set
2375 * TEMP, so sv_2mortal is out of question. */
2376 if (!CvLVALUE(cx->blk_sub.cv)) {
2381 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2383 if (gimme == G_SCALAR) {
2387 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2392 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2393 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2395 else { /* Can be a localized value
2396 * subject to deletion. */
2397 PL_tmps_stack[++PL_tmps_ix] = *mark;
2398 (void)SvREFCNT_inc(*mark);
2401 else { /* Should not happen? */
2406 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2407 (MARK > SP ? "Empty array" : "Array"));
2411 else if (gimme == G_ARRAY) {
2412 EXTEND_MORTAL(SP - newsp);
2413 for (mark = newsp + 1; mark <= SP; mark++) {
2414 if (*mark != &PL_sv_undef
2415 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2416 /* Might be flattened array after $#array = */
2422 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2423 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2426 /* Can be a localized value subject to deletion. */
2427 PL_tmps_stack[++PL_tmps_ix] = *mark;
2428 (void)SvREFCNT_inc(*mark);
2434 if (gimme == G_SCALAR) {
2438 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2440 *MARK = SvREFCNT_inc(TOPs);
2445 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2447 *MARK = sv_mortalcopy(sv);
2452 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2456 *MARK = &PL_sv_undef;
2460 else if (gimme == G_ARRAY) {
2462 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2463 if (!SvTEMP(*MARK)) {
2464 *MARK = sv_mortalcopy(*MARK);
2465 TAINT_NOT; /* Each item is independent */
2472 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2473 PL_curpm = newpm; /* ... and pop $1 et al */
2477 return pop_return();
2482 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2484 SV *dbsv = GvSV(PL_DBsub);
2486 if (!PERLDB_SUB_NN) {
2490 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2491 || strEQ(GvNAME(gv), "END")
2492 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2493 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2494 && (gv = (GV*)*svp) ))) {
2495 /* Use GV from the stack as a fallback. */
2496 /* GV is potentially non-unique, or contain different CV. */
2497 SV *tmp = newRV((SV*)cv);
2498 sv_setsv(dbsv, tmp);
2502 gv_efullname3(dbsv, gv, Nullch);
2506 (void)SvUPGRADE(dbsv, SVt_PVIV);
2507 (void)SvIOK_on(dbsv);
2508 SAVEIV(SvIVX(dbsv));
2509 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2513 PL_curcopdb = PL_curcop;
2514 cv = GvCV(PL_DBsub);
2524 register PERL_CONTEXT *cx;
2526 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2529 DIE(aTHX_ "Not a CODE reference");
2530 switch (SvTYPE(sv)) {
2536 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2538 SP = PL_stack_base + POPMARK;
2541 if (SvGMAGICAL(sv)) {
2545 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2548 sym = SvPV(sv, n_a);
2550 DIE(aTHX_ PL_no_usym, "a subroutine");
2551 if (PL_op->op_private & HINT_STRICT_REFS)
2552 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2553 cv = get_cv(sym, TRUE);
2558 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2559 tryAMAGICunDEREF(to_cv);
2562 if (SvTYPE(cv) == SVt_PVCV)
2567 DIE(aTHX_ "Not a CODE reference");
2572 if (!(cv = GvCVu((GV*)sv)))
2573 cv = sv_2cv(sv, &stash, &gv, FALSE);
2586 if (!CvROOT(cv) && !CvXSUB(cv)) {
2590 /* anonymous or undef'd function leaves us no recourse */
2591 if (CvANON(cv) || !(gv = CvGV(cv)))
2592 DIE(aTHX_ "Undefined subroutine called");
2594 /* autoloaded stub? */
2595 if (cv != GvCV(gv)) {
2598 /* should call AUTOLOAD now? */
2601 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2608 sub_name = sv_newmortal();
2609 gv_efullname3(sub_name, gv, Nullch);
2610 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2614 DIE(aTHX_ "Not a CODE reference");
2619 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2620 cv = get_db_sub(&sv, cv);
2622 DIE(aTHX_ "No DBsub routine");
2625 #ifdef USE_5005THREADS
2627 * First we need to check if the sub or method requires locking.
2628 * If so, we gain a lock on the CV, the first argument or the
2629 * stash (for static methods), as appropriate. This has to be
2630 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2631 * reschedule by returning a new op.
2633 MUTEX_LOCK(CvMUTEXP(cv));
2634 if (CvFLAGS(cv) & CVf_LOCKED) {
2636 if (CvFLAGS(cv) & CVf_METHOD) {
2637 if (SP > PL_stack_base + TOPMARK)
2638 sv = *(PL_stack_base + TOPMARK + 1);
2640 AV *av = (AV*)PL_curpad[0];
2641 if (hasargs || !av || AvFILLp(av) < 0
2642 || !(sv = AvARRAY(av)[0]))
2644 MUTEX_UNLOCK(CvMUTEXP(cv));
2645 DIE(aTHX_ "no argument for locked method call");
2652 char *stashname = SvPV(sv, len);
2653 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2659 MUTEX_UNLOCK(CvMUTEXP(cv));
2660 mg = condpair_magic(sv);
2661 MUTEX_LOCK(MgMUTEXP(mg));
2662 if (MgOWNER(mg) == thr)
2663 MUTEX_UNLOCK(MgMUTEXP(mg));
2666 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2668 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2670 MUTEX_UNLOCK(MgMUTEXP(mg));
2671 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2673 MUTEX_LOCK(CvMUTEXP(cv));
2676 * Now we have permission to enter the sub, we must distinguish
2677 * four cases. (0) It's an XSUB (in which case we don't care
2678 * about ownership); (1) it's ours already (and we're recursing);
2679 * (2) it's free (but we may already be using a cached clone);
2680 * (3) another thread owns it. Case (1) is easy: we just use it.
2681 * Case (2) means we look for a clone--if we have one, use it
2682 * otherwise grab ownership of cv. Case (3) means we look for a
2683 * clone (for non-XSUBs) and have to create one if we don't
2685 * Why look for a clone in case (2) when we could just grab
2686 * ownership of cv straight away? Well, we could be recursing,
2687 * i.e. we originally tried to enter cv while another thread
2688 * owned it (hence we used a clone) but it has been freed up
2689 * and we're now recursing into it. It may or may not be "better"
2690 * to use the clone but at least CvDEPTH can be trusted.
2692 if (CvOWNER(cv) == thr || CvXSUB(cv))
2693 MUTEX_UNLOCK(CvMUTEXP(cv));
2695 /* Case (2) or (3) */
2699 * XXX Might it be better to release CvMUTEXP(cv) while we
2700 * do the hv_fetch? We might find someone has pinched it
2701 * when we look again, in which case we would be in case
2702 * (3) instead of (2) so we'd have to clone. Would the fact
2703 * that we released the mutex more quickly make up for this?
2705 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2707 /* We already have a clone to use */
2708 MUTEX_UNLOCK(CvMUTEXP(cv));
2710 DEBUG_S(PerlIO_printf(Perl_debug_log,
2711 "entersub: %p already has clone %p:%s\n",
2712 thr, cv, SvPEEK((SV*)cv)));
2715 if (CvDEPTH(cv) == 0)
2716 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2719 /* (2) => grab ownership of cv. (3) => make clone */
2723 MUTEX_UNLOCK(CvMUTEXP(cv));
2724 DEBUG_S(PerlIO_printf(Perl_debug_log,
2725 "entersub: %p grabbing %p:%s in stash %s\n",
2726 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2727 HvNAME(CvSTASH(cv)) : "(none)"));
2730 /* Make a new clone. */
2732 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2733 MUTEX_UNLOCK(CvMUTEXP(cv));
2734 DEBUG_S((PerlIO_printf(Perl_debug_log,
2735 "entersub: %p cloning %p:%s\n",
2736 thr, cv, SvPEEK((SV*)cv))));
2738 * We're creating a new clone so there's no race
2739 * between the original MUTEX_UNLOCK and the
2740 * SvREFCNT_inc since no one will be trying to undef
2741 * it out from underneath us. At least, I don't think
2744 clonecv = cv_clone(cv);
2745 SvREFCNT_dec(cv); /* finished with this */
2746 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2747 CvOWNER(clonecv) = thr;
2751 DEBUG_S(if (CvDEPTH(cv) != 0)
2752 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2754 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2757 #endif /* USE_5005THREADS */
2760 #ifdef PERL_XSUB_OLDSTYLE
2761 if (CvOLDSTYLE(cv)) {
2762 I32 (*fp3)(int,int,int);
2764 register I32 items = SP - MARK;
2765 /* We dont worry to copy from @_. */
2770 PL_stack_sp = mark + 1;
2771 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2772 items = (*fp3)(CvXSUBANY(cv).any_i32,
2773 MARK - PL_stack_base + 1,
2775 PL_stack_sp = PL_stack_base + items;
2778 #endif /* PERL_XSUB_OLDSTYLE */
2780 I32 markix = TOPMARK;
2785 /* Need to copy @_ to stack. Alternative may be to
2786 * switch stack to @_, and copy return values
2787 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2790 #ifdef USE_5005THREADS
2791 av = (AV*)PL_curpad[0];
2793 av = GvAV(PL_defgv);
2794 #endif /* USE_5005THREADS */
2795 items = AvFILLp(av) + 1; /* @_ is not tieable */
2798 /* Mark is at the end of the stack. */
2800 Copy(AvARRAY(av), SP + 1, items, SV*);
2805 /* We assume first XSUB in &DB::sub is the called one. */
2807 SAVEVPTR(PL_curcop);
2808 PL_curcop = PL_curcopdb;
2811 /* Do we need to open block here? XXXX */
2812 (void)(*CvXSUB(cv))(aTHX_ cv);
2814 /* Enforce some sanity in scalar context. */
2815 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2816 if (markix > PL_stack_sp - PL_stack_base)
2817 *(PL_stack_base + markix) = &PL_sv_undef;
2819 *(PL_stack_base + markix) = *PL_stack_sp;
2820 PL_stack_sp = PL_stack_base + markix;
2828 register I32 items = SP - MARK;
2829 AV* padlist = CvPADLIST(cv);
2830 SV** svp = AvARRAY(padlist);
2831 push_return(PL_op->op_next);
2832 PUSHBLOCK(cx, CXt_SUB, MARK);
2835 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2836 * that eval'' ops within this sub know the correct lexical space.
2837 * Owing the speed considerations, we choose to search for the cv
2838 * in doeval() instead.
2840 if (CvDEPTH(cv) < 2)
2841 (void)SvREFCNT_inc(cv);
2842 else { /* save temporaries on recursion? */
2843 PERL_STACK_OVERFLOW_CHECK();
2844 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2846 AV *newpad = newAV();
2847 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2848 I32 ix = AvFILLp((AV*)svp[1]);
2849 I32 names_fill = AvFILLp((AV*)svp[0]);
2850 svp = AvARRAY(svp[0]);
2851 for ( ;ix > 0; ix--) {
2852 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2853 char *name = SvPVX(svp[ix]);
2854 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2855 || *name == '&') /* anonymous code? */
2857 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2859 else { /* our own lexical */
2861 av_store(newpad, ix, sv = (SV*)newAV());
2862 else if (*name == '%')
2863 av_store(newpad, ix, sv = (SV*)newHV());
2865 av_store(newpad, ix, sv = NEWSV(0,0));
2869 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2870 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2873 av_store(newpad, ix, sv = NEWSV(0,0));
2877 av = newAV(); /* will be @_ */
2879 av_store(newpad, 0, (SV*)av);
2880 AvFLAGS(av) = AVf_REIFY;
2881 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2882 AvFILLp(padlist) = CvDEPTH(cv);
2883 svp = AvARRAY(padlist);
2886 #ifdef USE_5005THREADS
2888 AV* av = (AV*)PL_curpad[0];
2890 items = AvFILLp(av) + 1;
2892 /* Mark is at the end of the stack. */
2894 Copy(AvARRAY(av), SP + 1, items, SV*);
2899 #endif /* USE_5005THREADS */
2900 SAVEVPTR(PL_curpad);
2901 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2902 #ifndef USE_5005THREADS
2904 #endif /* USE_5005THREADS */
2910 DEBUG_S(PerlIO_printf(Perl_debug_log,
2911 "%p entersub preparing @_\n", thr));
2913 av = (AV*)PL_curpad[0];
2915 /* @_ is normally not REAL--this should only ever
2916 * happen when DB::sub() calls things that modify @_ */
2921 #ifndef USE_5005THREADS
2922 cx->blk_sub.savearray = GvAV(PL_defgv);
2923 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2924 #endif /* USE_5005THREADS */
2925 cx->blk_sub.oldcurpad = PL_curpad;
2926 cx->blk_sub.argarray = av;
2929 if (items > AvMAX(av) + 1) {
2931 if (AvARRAY(av) != ary) {
2932 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2933 SvPVX(av) = (char*)ary;
2935 if (items > AvMAX(av) + 1) {
2936 AvMAX(av) = items - 1;
2937 Renew(ary,items,SV*);
2939 SvPVX(av) = (char*)ary;
2942 Copy(MARK,AvARRAY(av),items,SV*);
2943 AvFILLp(av) = items - 1;
2951 /* warning must come *after* we fully set up the context
2952 * stuff so that __WARN__ handlers can safely dounwind()
2955 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2956 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2957 sub_crush_depth(cv);
2959 DEBUG_S(PerlIO_printf(Perl_debug_log,
2960 "%p entersub returning %p\n", thr, CvSTART(cv)));
2962 RETURNOP(CvSTART(cv));
2967 Perl_sub_crush_depth(pTHX_ CV *cv)
2970 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2972 SV* tmpstr = sv_newmortal();
2973 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2974 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%s\"",
2984 IV elem = SvIV(elemsv);
2986 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2987 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2990 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2991 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2993 elem -= PL_curcop->cop_arybase;
2994 if (SvTYPE(av) != SVt_PVAV)
2996 svp = av_fetch(av, elem, lval && !defer);
2998 if (!svp || *svp == &PL_sv_undef) {
3001 DIE(aTHX_ PL_no_aelem, elem);
3002 lv = sv_newmortal();
3003 sv_upgrade(lv, SVt_PVLV);
3005 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
3006 LvTARG(lv) = SvREFCNT_inc(av);
3007 LvTARGOFF(lv) = elem;
3012 if (PL_op->op_private & OPpLVAL_INTRO)
3013 save_aelem(av, elem, svp);
3014 else if (PL_op->op_private & OPpDEREF)
3015 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
3017 sv = (svp ? *svp : &PL_sv_undef);
3018 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
3019 sv = sv_mortalcopy(sv);
3025 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3031 Perl_croak(aTHX_ PL_no_modify);
3032 if (SvTYPE(sv) < SVt_RV)
3033 sv_upgrade(sv, SVt_RV);
3034 else if (SvTYPE(sv) >= SVt_PV) {
3035 (void)SvOOK_off(sv);
3036 Safefree(SvPVX(sv));
3037 SvLEN(sv) = SvCUR(sv) = 0;
3041 SvRV(sv) = NEWSV(355,0);
3044 SvRV(sv) = (SV*)newAV();
3047 SvRV(sv) = (SV*)newHV();
3062 if (SvTYPE(rsv) == SVt_PVCV) {
3068 SETs(method_common(sv, Null(U32*)));
3075 SV* sv = cSVOP->op_sv;
3076 U32 hash = SvUVX(sv);
3078 XPUSHs(method_common(sv, &hash));
3083 S_method_common(pTHX_ SV* meth, U32* hashp)
3094 name = SvPV(meth, namelen);
3095 sv = *(PL_stack_base + TOPMARK + 1);
3098 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3107 /* this isn't a reference */
3110 !(packname = SvPV(sv, packlen)) ||
3111 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3112 !(ob=(SV*)GvIO(iogv)))
3114 /* this isn't the name of a filehandle either */
3116 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3117 ? !isIDFIRST_utf8((U8*)packname)
3118 : !isIDFIRST(*packname)
3121 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3122 SvOK(sv) ? "without a package or object reference"
3123 : "on an undefined value");
3125 /* assume it's a package name */
3126 stash = gv_stashpvn(packname, packlen, FALSE);
3129 /* it _is_ a filehandle name -- replace with a reference */
3130 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3133 /* if we got here, ob should be a reference or a glob */
3134 if (!ob || !(SvOBJECT(ob)
3135 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3138 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3142 stash = SvSTASH(ob);
3145 /* NOTE: stash may be null, hope hv_fetch_ent and
3146 gv_fetchmethod can cope (it seems they can) */
3148 /* shortcut for simple names */
3150 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3152 gv = (GV*)HeVAL(he);
3153 if (isGV(gv) && GvCV(gv) &&
3154 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3155 return (SV*)GvCV(gv);
3159 gv = gv_fetchmethod(stash, name);
3162 /* This code tries to figure out just what went wrong with
3163 gv_fetchmethod. It therefore needs to duplicate a lot of
3164 the internals of that function. We can't move it inside
3165 Perl_gv_fetchmethod_autoload(), however, since that would
3166 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3173 for (p = name; *p; p++) {
3175 sep = p, leaf = p + 1;
3176 else if (*p == ':' && *(p + 1) == ':')
3177 sep = p, leaf = p + 2;
3179 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3180 /* the method name is unqualified or starts with SUPER:: */
3181 packname = sep ? CopSTASHPV(PL_curcop) :
3182 stash ? HvNAME(stash) : packname;
3183 packlen = strlen(packname);
3186 /* the method name is qualified */
3188 packlen = sep - name;
3191 /* we're relying on gv_fetchmethod not autovivifying the stash */
3192 if (gv_stashpvn(packname, packlen, FALSE)) {
3194 "Can't locate object method \"%s\" via package \"%.*s\"",
3195 leaf, (int)packlen, packname);
3199 "Can't locate object method \"%s\" via package \"%.*s\""
3200 " (perhaps you forgot to load \"%.*s\"?)",
3201 leaf, (int)packlen, packname, (int)packlen, packname);
3204 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3207 #ifdef USE_5005THREADS
3209 unset_cvowner(pTHX_ void *cvarg)
3211 register CV* cv = (CV *) cvarg;
3213 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3214 thr, cv, SvPEEK((SV*)cv))));
3215 MUTEX_LOCK(CvMUTEXP(cv));
3216 DEBUG_S(if (CvDEPTH(cv) != 0)
3217 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3219 assert(thr == CvOWNER(cv));
3221 MUTEX_UNLOCK(CvMUTEXP(cv));
3224 #endif /* USE_5005THREADS */