3 * Copyright (c) 1991-2001, 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
25 static void unset_cvowner(pTHXo_ void *cvarg);
26 #endif /* USE_THREADS */
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);
78 sv_setpvn(TARG,s,len);
79 if (SvUTF8(TOPs) && !IN_BYTE)
90 XPUSHs((SV*)cGVOP_gv);
101 RETURNOP(cLOGOP->op_other);
109 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
111 temp = left; left = right; right = temp;
113 if (PL_tainting && PL_tainted && !SvTAINTED(left))
115 SvSetMagicSV(right, left);
124 RETURNOP(cLOGOP->op_other);
126 RETURNOP(cLOGOP->op_next);
132 TAINT_NOT; /* Each statement is presumed innocent */
133 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
135 oldsave = PL_scopestack[PL_scopestack_ix - 1];
136 LEAVE_SCOPE(oldsave);
142 djSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
147 if (SvGMAGICAL(left))
149 if (TARG == right && SvGMAGICAL(right))
152 if (TARG == right && left != right)
153 /* Clone since otherwise we cannot prepend. */
154 rcopy = sv_2mortal(newSVsv(right));
157 sv_setsv(TARG, left);
161 /* $right = $right . $right; */
163 char *rpv = SvPV(right, rlen);
165 sv_catpvn(TARG, rpv, rlen);
167 else /* $right = $left . $right; */
168 sv_catsv(TARG, rcopy);
171 if (!SvOK(TARG)) /* Avoid warning when concatenating to undef. */
173 /* $other = $left . $right; */
174 /* $left = $left . $right; */
175 sv_catsv(TARG, right);
178 #if defined(PERL_Y2KWARN)
179 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K)) {
181 char *s = SvPV(TARG,n);
182 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
183 && (n == 2 || !isDIGIT(s[n-3])))
185 Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s",
186 "about to append an integer to '19'");
200 if (PL_op->op_flags & OPf_MOD) {
201 if (PL_op->op_private & OPpLVAL_INTRO)
202 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
203 else if (PL_op->op_private & OPpDEREF) {
205 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
214 tryAMAGICunTARGET(iter, 0);
215 PL_last_in_gv = (GV*)(*PL_stack_sp--);
216 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
217 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
218 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
221 XPUSHs((SV*)PL_last_in_gv);
224 PL_last_in_gv = (GV*)(*PL_stack_sp--);
227 return do_readline();
232 djSP; tryAMAGICbinSET(eq,0);
233 #ifdef PERL_PRESERVE_IVUV
236 /* Unless the left argument is integer in range we are going to have to
237 use NV maths. Hence only attempt to coerce the right argument if
238 we know the left is integer. */
241 bool auvok = SvUOK(TOPm1s);
242 bool buvok = SvUOK(TOPs);
244 if (!auvok && !buvok) { /* ## IV == IV ## */
245 IV aiv = SvIVX(TOPm1s);
246 IV biv = SvIVX(TOPs);
249 SETs(boolSV(aiv == biv));
252 if (auvok && buvok) { /* ## UV == UV ## */
253 UV auv = SvUVX(TOPm1s);
254 UV buv = SvUVX(TOPs);
257 SETs(boolSV(auv == buv));
260 { /* ## Mixed IV,UV ## */
264 /* == is commutative so swap if needed (save code) */
266 /* swap. top of stack (b) is the iv */
270 /* As (a) is a UV, it's >0, so it cannot be == */
279 /* As (b) is a UV, it's >0, so it cannot be == */
283 uv = SvUVX(*(SP+1)); /* Do I want TOPp1s() ? */
285 /* we know iv is >= 0 */
286 if (uv > (UV) IV_MAX) {
290 SETs(boolSV((UV)iv == uv));
298 SETs(boolSV(TOPn == value));
306 if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
307 DIE(aTHX_ PL_no_modify);
308 if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
309 SvIVX(TOPs) != IV_MAX)
312 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
314 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
327 RETURNOP(cLOGOP->op_other);
333 djSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
334 useleft = USE_LEFT(TOPm1s);
335 #ifdef PERL_PRESERVE_IVUV
336 /* We must see if we can perform the addition with integers if possible,
337 as the integer code detects overflow while the NV code doesn't.
338 If either argument hasn't had a numeric conversion yet attempt to get
339 the IV. It's important to do this now, rather than just assuming that
340 it's not IOK as a PV of "9223372036854775806" may not take well to NV
341 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
342 integer in case the second argument is IV=9223372036854775806
343 We can (now) rely on sv_2iv to do the right thing, only setting the
344 public IOK flag if the value in the NV (or PV) slot is truly integer.
346 A side effect is that this also aggressively prefers integer maths over
347 fp maths for integer values. */
350 /* Unless the left argument is integer in range we are going to have to
351 use NV maths. Hence only attempt to coerce the right argument if
352 we know the left is integer. */
354 /* left operand is undef, treat as zero. + 0 is identity. */
356 dPOPuv; /* Scary macros. Lets put a sequence point (;) here */
365 /* Left operand is defined, so is it IV? */
368 bool auvok = SvUOK(TOPm1s);
369 bool buvok = SvUOK(TOPs);
371 if (!auvok && !buvok) { /* ## IV + IV ## */
372 IV aiv = SvIVX(TOPm1s);
373 IV biv = SvIVX(TOPs);
374 IV result = aiv + biv;
376 if (biv >= 0 ? (result >= aiv) : (result < aiv)) {
381 if (biv >=0 && aiv >= 0) {
382 UV result = (UV)aiv + (UV)biv;
383 /* UV + UV can only get bigger... */
384 if (result >= (UV) aiv) {
390 /* Overflow, drop through to NVs (beyond next if () else ) */
391 } else if (auvok && buvok) { /* ## UV + UV ## */
392 UV auv = SvUVX(TOPm1s);
393 UV buv = SvUVX(TOPs);
394 UV result = auv + buv;
400 /* Overflow, drop through to NVs (beyond next if () else ) */
401 } else { /* ## Mixed IV,UV ## */
405 /* addition is commutative so swap if needed (save code) */
415 UV result = (UV)aiv + buv;
421 } else if (buv > (UV) IV_MAX) {
422 /* assuming 2s complement means that IV_MIN == -IV_MIN,
423 and (UV)-IV_MIN *is* the value -IV_MIN (or IV_MAX + 1)
424 as buv > IV_MAX, it is >= (IV_MAX + 1), and therefore
425 as the value we can be subtracting from it only lies in
426 the range (-IV_MIN to -1) it can't overflow a UV */
428 SETu( buv - (UV)-aiv );
431 IV result = (IV) buv + aiv;
432 /* aiv < 0 so it must get smaller. */
433 if (result < (IV) buv) {
439 } /* end of IV+IV / UV+UV / mixed */
446 /* left operand is undef, treat as zero. + 0.0 is identity. */
450 SETn( value + TOPn );
458 AV *av = GvAV(cGVOP_gv);
459 U32 lval = PL_op->op_flags & OPf_MOD;
460 SV** svp = av_fetch(av, PL_op->op_private, lval);
461 SV *sv = (svp ? *svp : &PL_sv_undef);
463 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
464 sv = sv_mortalcopy(sv);
471 djSP; dMARK; dTARGET;
473 do_join(TARG, *MARK, MARK, SP);
484 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
485 * will be enough to hold an OP*.
487 SV* sv = sv_newmortal();
488 sv_upgrade(sv, SVt_PVLV);
490 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
498 /* Oversized hot code. */
502 djSP; dMARK; dORIGMARK;
509 if (PL_op->op_flags & OPf_STACKED)
513 if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
515 if (MARK == ORIGMARK) {
516 /* If using default handle then we need to make space to
517 * pass object as 1st arg, so move other args up ...
521 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
525 *MARK = SvTIED_obj((SV*)gv, mg);
528 call_method("PRINT", G_SCALAR);
536 if (!(io = GvIO(gv))) {
537 if ((GvEGV(gv)) && (mg = SvTIED_mg((SV*)GvEGV(gv),'q')))
539 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
540 report_evil_fh(gv, io, PL_op->op_type);
541 SETERRNO(EBADF,RMS$_IFI);
544 else if (!(fp = IoOFP(io))) {
545 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
547 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
548 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
549 report_evil_fh(gv, io, PL_op->op_type);
551 SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
556 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
558 if (!do_print(*MARK, fp))
562 if (!do_print(PL_ofs_sv, fp)) { /* $, */
571 if (!do_print(*MARK, fp))
579 if (PL_ors_sv && SvOK(PL_ors_sv))
580 if (!do_print(PL_ors_sv, fp)) /* $\ */
583 if (IoFLAGS(io) & IOf_FLUSH)
584 if (PerlIO_flush(fp) == EOF)
605 tryAMAGICunDEREF(to_av);
608 if (SvTYPE(av) != SVt_PVAV)
609 DIE(aTHX_ "Not an ARRAY reference");
610 if (PL_op->op_flags & OPf_REF) {
616 if (SvTYPE(sv) == SVt_PVAV) {
618 if (PL_op->op_flags & OPf_REF) {
626 if (SvTYPE(sv) != SVt_PVGV) {
630 if (SvGMAGICAL(sv)) {
636 if (PL_op->op_flags & OPf_REF ||
637 PL_op->op_private & HINT_STRICT_REFS)
638 DIE(aTHX_ PL_no_usym, "an ARRAY");
639 if (ckWARN(WARN_UNINITIALIZED))
641 if (GIMME == G_ARRAY) {
648 if ((PL_op->op_flags & OPf_SPECIAL) &&
649 !(PL_op->op_flags & OPf_MOD))
651 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
653 && (!is_gv_magical(sym,len,0)
654 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
660 if (PL_op->op_private & HINT_STRICT_REFS)
661 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
662 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
669 if (PL_op->op_private & OPpLVAL_INTRO)
671 if (PL_op->op_flags & OPf_REF) {
678 if (GIMME == G_ARRAY) {
679 I32 maxarg = AvFILL(av) + 1;
680 (void)POPs; /* XXXX May be optimized away? */
682 if (SvRMAGICAL(av)) {
684 for (i=0; i < maxarg; i++) {
685 SV **svp = av_fetch(av, i, FALSE);
686 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
690 Copy(AvARRAY(av), SP+1, maxarg, SV*);
696 I32 maxarg = AvFILL(av) + 1;
709 tryAMAGICunDEREF(to_hv);
712 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
713 DIE(aTHX_ "Not a HASH reference");
714 if (PL_op->op_flags & OPf_REF) {
720 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
722 if (PL_op->op_flags & OPf_REF) {
730 if (SvTYPE(sv) != SVt_PVGV) {
734 if (SvGMAGICAL(sv)) {
740 if (PL_op->op_flags & OPf_REF ||
741 PL_op->op_private & HINT_STRICT_REFS)
742 DIE(aTHX_ PL_no_usym, "a HASH");
743 if (ckWARN(WARN_UNINITIALIZED))
745 if (GIMME == G_ARRAY) {
752 if ((PL_op->op_flags & OPf_SPECIAL) &&
753 !(PL_op->op_flags & OPf_MOD))
755 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
757 && (!is_gv_magical(sym,len,0)
758 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
764 if (PL_op->op_private & HINT_STRICT_REFS)
765 DIE(aTHX_ PL_no_symref, sym, "a HASH");
766 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
773 if (PL_op->op_private & OPpLVAL_INTRO)
775 if (PL_op->op_flags & OPf_REF) {
782 if (GIMME == G_ARRAY) { /* array wanted */
783 *PL_stack_sp = (SV*)hv;
788 if (SvTYPE(hv) == SVt_PVAV)
789 hv = avhv_keys((AV*)hv);
791 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
792 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
802 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
808 leftop = ((BINOP*)PL_op)->op_last;
810 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
811 leftop = ((LISTOP*)leftop)->op_first;
813 /* Skip PUSHMARK and each element already assigned to. */
814 for (i = lelem - firstlelem; i > 0; i--) {
815 leftop = leftop->op_sibling;
818 if (leftop->op_type != OP_RV2HV)
823 av_fill(ary, 0); /* clear all but the fields hash */
824 if (lastrelem >= relem) {
825 while (relem < lastrelem) { /* gobble up all the rest */
829 /* Avoid a memory leak when avhv_store_ent dies. */
830 tmpstr = sv_newmortal();
831 sv_setsv(tmpstr,relem[1]); /* value */
833 if (avhv_store_ent(ary,relem[0],tmpstr,0))
834 (void)SvREFCNT_inc(tmpstr);
835 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
841 if (relem == lastrelem)
847 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
851 if (ckWARN(WARN_MISC)) {
852 if (relem == firstrelem &&
854 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
855 SvTYPE(SvRV(*relem)) == SVt_PVHV))
857 Perl_warner(aTHX_ WARN_MISC,
858 "Reference found where even-sized list expected");
861 Perl_warner(aTHX_ WARN_MISC,
862 "Odd number of elements in hash assignment");
864 if (SvTYPE(hash) == SVt_PVAV) {
866 tmpstr = sv_newmortal();
867 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
868 (void)SvREFCNT_inc(tmpstr);
869 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
874 tmpstr = NEWSV(29,0);
875 didstore = hv_store_ent(hash,*relem,tmpstr,0);
876 if (SvMAGICAL(hash)) {
877 if (SvSMAGICAL(tmpstr))
890 SV **lastlelem = PL_stack_sp;
891 SV **lastrelem = PL_stack_base + POPMARK;
892 SV **firstrelem = PL_stack_base + POPMARK + 1;
893 SV **firstlelem = lastrelem + 1;
906 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
908 /* If there's a common identifier on both sides we have to take
909 * special care that assigning the identifier on the left doesn't
910 * clobber a value on the right that's used later in the list.
912 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
913 EXTEND_MORTAL(lastrelem - firstrelem + 1);
914 for (relem = firstrelem; relem <= lastrelem; relem++) {
917 TAINT_NOT; /* Each item is independent */
918 *relem = sv_mortalcopy(sv);
928 while (lelem <= lastlelem) {
929 TAINT_NOT; /* Each item stands on its own, taintwise. */
931 switch (SvTYPE(sv)) {
934 magic = SvMAGICAL(ary) != 0;
935 if (PL_op->op_private & OPpASSIGN_HASH) {
936 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
942 do_oddball((HV*)ary, relem, firstrelem);
944 relem = lastrelem + 1;
949 av_extend(ary, lastrelem - relem);
951 while (relem <= lastrelem) { /* gobble up all the rest */
957 didstore = av_store(ary,i++,sv);
967 case SVt_PVHV: { /* normal hash */
971 magic = SvMAGICAL(hash) != 0;
974 while (relem < lastrelem) { /* gobble up all the rest */
979 sv = &PL_sv_no, relem++;
980 tmpstr = NEWSV(29,0);
982 sv_setsv(tmpstr,*relem); /* value */
984 didstore = hv_store_ent(hash,sv,tmpstr,0);
986 if (SvSMAGICAL(tmpstr))
993 if (relem == lastrelem) {
994 do_oddball(hash, relem, firstrelem);
1000 if (SvIMMORTAL(sv)) {
1001 if (relem <= lastrelem)
1005 if (relem <= lastrelem) {
1006 sv_setsv(sv, *relem);
1010 sv_setsv(sv, &PL_sv_undef);
1015 if (PL_delaymagic & ~DM_DELAY) {
1016 if (PL_delaymagic & DM_UID) {
1017 #ifdef HAS_SETRESUID
1018 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1020 # ifdef HAS_SETREUID
1021 (void)setreuid(PL_uid,PL_euid);
1024 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1025 (void)setruid(PL_uid);
1026 PL_delaymagic &= ~DM_RUID;
1028 # endif /* HAS_SETRUID */
1030 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1031 (void)seteuid(PL_uid);
1032 PL_delaymagic &= ~DM_EUID;
1034 # endif /* HAS_SETEUID */
1035 if (PL_delaymagic & DM_UID) {
1036 if (PL_uid != PL_euid)
1037 DIE(aTHX_ "No setreuid available");
1038 (void)PerlProc_setuid(PL_uid);
1040 # endif /* HAS_SETREUID */
1041 #endif /* HAS_SETRESUID */
1042 PL_uid = PerlProc_getuid();
1043 PL_euid = PerlProc_geteuid();
1045 if (PL_delaymagic & DM_GID) {
1046 #ifdef HAS_SETRESGID
1047 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1049 # ifdef HAS_SETREGID
1050 (void)setregid(PL_gid,PL_egid);
1053 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1054 (void)setrgid(PL_gid);
1055 PL_delaymagic &= ~DM_RGID;
1057 # endif /* HAS_SETRGID */
1059 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1060 (void)setegid(PL_gid);
1061 PL_delaymagic &= ~DM_EGID;
1063 # endif /* HAS_SETEGID */
1064 if (PL_delaymagic & DM_GID) {
1065 if (PL_gid != PL_egid)
1066 DIE(aTHX_ "No setregid available");
1067 (void)PerlProc_setgid(PL_gid);
1069 # endif /* HAS_SETREGID */
1070 #endif /* HAS_SETRESGID */
1071 PL_gid = PerlProc_getgid();
1072 PL_egid = PerlProc_getegid();
1074 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1079 if (gimme == G_VOID)
1080 SP = firstrelem - 1;
1081 else if (gimme == G_SCALAR) {
1084 SETi(lastrelem - firstrelem + 1);
1090 SP = firstrelem + (lastlelem - firstlelem);
1091 lelem = firstlelem + (relem - firstrelem);
1093 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1101 register PMOP *pm = cPMOP;
1102 SV *rv = sv_newmortal();
1103 SV *sv = newSVrv(rv, "Regexp");
1104 sv_magic(sv,(SV*)ReREFCNT_inc(pm->op_pmregexp),'r',0,0);
1111 register PMOP *pm = cPMOP;
1116 I32 r_flags = REXEC_CHECKED;
1117 char *truebase; /* Start of string */
1118 register REGEXP *rx = pm->op_pmregexp;
1123 I32 oldsave = PL_savestack_ix;
1124 I32 update_minmatch = 1;
1125 I32 had_zerolen = 0;
1127 if (PL_op->op_flags & OPf_STACKED)
1134 PUTBACK; /* EVAL blocks need stack_sp. */
1135 s = SvPV(TARG, len);
1138 DIE(aTHX_ "panic: pp_match");
1139 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1140 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1143 if (pm->op_pmdynflags & PMdf_USED) {
1145 if (gimme == G_ARRAY)
1150 if (!rx->prelen && PL_curpm) {
1152 rx = pm->op_pmregexp;
1154 if (rx->minlen > len) goto failure;
1158 /* XXXX What part of this is needed with true \G-support? */
1159 if ((global = pm->op_pmflags & PMf_GLOBAL)) {
1161 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1162 MAGIC* mg = mg_find(TARG, 'g');
1163 if (mg && mg->mg_len >= 0) {
1164 if (!(rx->reganch & ROPT_GPOS_SEEN))
1165 rx->endp[0] = rx->startp[0] = mg->mg_len;
1166 else if (rx->reganch & ROPT_ANCH_GPOS) {
1167 r_flags |= REXEC_IGNOREPOS;
1168 rx->endp[0] = rx->startp[0] = mg->mg_len;
1170 minmatch = (mg->mg_flags & MGf_MINMATCH);
1171 update_minmatch = 0;
1175 if ((gimme != G_ARRAY && !global && rx->nparens)
1176 || SvTEMP(TARG) || PL_sawampersand)
1177 r_flags |= REXEC_COPY_STR;
1179 r_flags |= REXEC_SCREAM;
1181 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1182 SAVEINT(PL_multiline);
1183 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1187 if (global && rx->startp[0] != -1) {
1188 t = s = rx->endp[0] + truebase;
1189 if ((s + rx->minlen) > strend)
1191 if (update_minmatch++)
1192 minmatch = had_zerolen;
1194 if (rx->reganch & RE_USE_INTUIT &&
1195 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1196 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1200 if ( (rx->reganch & ROPT_CHECK_ALL)
1202 && ((rx->reganch & ROPT_NOSCAN)
1203 || !((rx->reganch & RE_INTUIT_TAIL)
1204 && (r_flags & REXEC_SCREAM)))
1205 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1208 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1211 if (pm->op_pmflags & PMf_ONCE)
1212 pm->op_pmdynflags |= PMdf_USED;
1221 RX_MATCH_TAINTED_on(rx);
1222 TAINT_IF(RX_MATCH_TAINTED(rx));
1223 if (gimme == G_ARRAY) {
1224 I32 nparens, i, len;
1226 nparens = rx->nparens;
1227 if (global && !nparens)
1231 SPAGAIN; /* EVAL blocks could move the stack. */
1232 EXTEND(SP, nparens + i);
1233 EXTEND_MORTAL(nparens + i);
1234 for (i = !i; i <= nparens; i++) {
1235 PUSHs(sv_newmortal());
1237 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1238 len = rx->endp[i] - rx->startp[i];
1239 s = rx->startp[i] + truebase;
1240 sv_setpvn(*SP, s, len);
1246 had_zerolen = (rx->startp[0] != -1
1247 && rx->startp[0] == rx->endp[0]);
1248 PUTBACK; /* EVAL blocks may use stack */
1249 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1254 LEAVE_SCOPE(oldsave);
1260 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1261 mg = mg_find(TARG, 'g');
1263 sv_magic(TARG, (SV*)0, 'g', Nullch, 0);
1264 mg = mg_find(TARG, 'g');
1266 if (rx->startp[0] != -1) {
1267 mg->mg_len = rx->endp[0];
1268 if (rx->startp[0] == rx->endp[0])
1269 mg->mg_flags |= MGf_MINMATCH;
1271 mg->mg_flags &= ~MGf_MINMATCH;
1274 LEAVE_SCOPE(oldsave);
1278 yup: /* Confirmed by INTUIT */
1280 RX_MATCH_TAINTED_on(rx);
1281 TAINT_IF(RX_MATCH_TAINTED(rx));
1283 if (pm->op_pmflags & PMf_ONCE)
1284 pm->op_pmdynflags |= PMdf_USED;
1285 if (RX_MATCH_COPIED(rx))
1286 Safefree(rx->subbeg);
1287 RX_MATCH_COPIED_off(rx);
1288 rx->subbeg = Nullch;
1290 rx->subbeg = truebase;
1291 rx->startp[0] = s - truebase;
1292 if (DO_UTF8(PL_reg_sv)) {
1293 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1294 rx->endp[0] = t - truebase;
1297 rx->endp[0] = s - truebase + rx->minlen;
1299 rx->sublen = strend - truebase;
1302 if (PL_sawampersand) {
1305 rx->subbeg = savepvn(t, strend - t);
1306 rx->sublen = strend - t;
1307 RX_MATCH_COPIED_on(rx);
1308 off = rx->startp[0] = s - t;
1309 rx->endp[0] = off + rx->minlen;
1311 else { /* startp/endp are used by @- @+. */
1312 rx->startp[0] = s - truebase;
1313 rx->endp[0] = s - truebase + rx->minlen;
1315 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1316 LEAVE_SCOPE(oldsave);
1321 if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
1322 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1323 MAGIC* mg = mg_find(TARG, 'g');
1328 LEAVE_SCOPE(oldsave);
1329 if (gimme == G_ARRAY)
1335 Perl_do_readline(pTHX)
1337 dSP; dTARGETSTACKED;
1342 register IO *io = GvIO(PL_last_in_gv);
1343 register I32 type = PL_op->op_type;
1344 I32 gimme = GIMME_V;
1347 if ((mg = SvTIED_mg((SV*)PL_last_in_gv, 'q'))) {
1349 XPUSHs(SvTIED_obj((SV*)PL_last_in_gv, mg));
1352 call_method("READLINE", gimme);
1355 if (gimme == G_SCALAR)
1356 SvSetMagicSV_nosteal(TARG, TOPs);
1363 if (IoFLAGS(io) & IOf_ARGV) {
1364 if (IoFLAGS(io) & IOf_START) {
1366 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1367 IoFLAGS(io) &= ~IOf_START;
1368 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1369 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1370 SvSETMAGIC(GvSV(PL_last_in_gv));
1375 fp = nextargv(PL_last_in_gv);
1376 if (!fp) { /* Note: fp != IoIFP(io) */
1377 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1380 else if (type == OP_GLOB)
1381 fp = Perl_start_glob(aTHX_ POPs, io);
1383 else if (type == OP_GLOB)
1385 else if (ckWARN(WARN_IO) /* stdout/stderr or other write fh */
1386 && (IoTYPE(io) == IoTYPE_WRONLY || fp == PerlIO_stdout()
1387 || fp == PerlIO_stderr()))
1388 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1391 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1392 && (!io || !(IoFLAGS(io) & IOf_START))) {
1393 if (type == OP_GLOB)
1394 Perl_warner(aTHX_ WARN_GLOB,
1395 "glob failed (can't start child: %s)",
1398 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1400 if (gimme == G_SCALAR) {
1401 (void)SvOK_off(TARG);
1407 if (gimme == G_SCALAR) {
1411 (void)SvUPGRADE(sv, SVt_PV);
1412 tmplen = SvLEN(sv); /* remember if already alloced */
1414 Sv_Grow(sv, 80); /* try short-buffering it */
1415 if (type == OP_RCATLINE)
1421 sv = sv_2mortal(NEWSV(57, 80));
1425 /* This should not be marked tainted if the fp is marked clean */
1426 #define MAYBE_TAINT_LINE(io, sv) \
1427 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1432 /* delay EOF state for a snarfed empty file */
1433 #define SNARF_EOF(gimme,rs,io,sv) \
1434 (gimme != G_SCALAR || SvCUR(sv) \
1435 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1438 if (!sv_gets(sv, fp, offset)
1439 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1441 PerlIO_clearerr(fp);
1442 if (IoFLAGS(io) & IOf_ARGV) {
1443 fp = nextargv(PL_last_in_gv);
1446 (void)do_close(PL_last_in_gv, FALSE);
1448 else if (type == OP_GLOB) {
1449 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1450 Perl_warner(aTHX_ WARN_GLOB,
1451 "glob failed (child exited with status %d%s)",
1452 (int)(STATUS_CURRENT >> 8),
1453 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1456 if (gimme == G_SCALAR) {
1457 (void)SvOK_off(TARG);
1460 MAYBE_TAINT_LINE(io, sv);
1463 MAYBE_TAINT_LINE(io, sv);
1465 IoFLAGS(io) |= IOf_NOLINE;
1468 if (type == OP_GLOB) {
1471 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1472 tmps = SvEND(sv) - 1;
1473 if (*tmps == *SvPVX(PL_rs)) {
1478 for (tmps = SvPVX(sv); *tmps; tmps++)
1479 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1480 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1482 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1483 (void)POPs; /* Unmatched wildcard? Chuck it... */
1487 if (gimme == G_ARRAY) {
1488 if (SvLEN(sv) - SvCUR(sv) > 20) {
1489 SvLEN_set(sv, SvCUR(sv)+1);
1490 Renew(SvPVX(sv), SvLEN(sv), char);
1492 sv = sv_2mortal(NEWSV(58, 80));
1495 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1496 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1500 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1501 Renew(SvPVX(sv), SvLEN(sv), char);
1510 register PERL_CONTEXT *cx;
1511 I32 gimme = OP_GIMME(PL_op, -1);
1514 if (cxstack_ix >= 0)
1515 gimme = cxstack[cxstack_ix].blk_gimme;
1523 PUSHBLOCK(cx, CXt_BLOCK, SP);
1535 U32 lval = PL_op->op_flags & OPf_MOD;
1536 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1538 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1541 if (SvTYPE(hv) == SVt_PVHV) {
1542 if (PL_op->op_private & OPpLVAL_INTRO)
1543 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
1544 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1545 svp = he ? &HeVAL(he) : 0;
1547 else if (SvTYPE(hv) == SVt_PVAV) {
1548 if (PL_op->op_private & OPpLVAL_INTRO)
1549 DIE(aTHX_ "Can't localize pseudo-hash element");
1550 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1556 if (!svp || *svp == &PL_sv_undef) {
1561 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1563 lv = sv_newmortal();
1564 sv_upgrade(lv, SVt_PVLV);
1566 sv_magic(lv, key2 = newSVsv(keysv), 'y', Nullch, 0);
1567 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1568 LvTARG(lv) = SvREFCNT_inc(hv);
1573 if (PL_op->op_private & OPpLVAL_INTRO) {
1574 if (HvNAME(hv) && isGV(*svp))
1575 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1579 char *key = SvPV(keysv, keylen);
1580 save_delete(hv, key, keylen);
1582 save_helem(hv, keysv, svp);
1585 else if (PL_op->op_private & OPpDEREF)
1586 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1588 sv = (svp ? *svp : &PL_sv_undef);
1589 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1590 * Pushing the magical RHS on to the stack is useless, since
1591 * that magic is soon destined to be misled by the local(),
1592 * and thus the later pp_sassign() will fail to mg_get() the
1593 * old value. This should also cure problems with delayed
1594 * mg_get()s. GSAR 98-07-03 */
1595 if (!lval && SvGMAGICAL(sv))
1596 sv = sv_mortalcopy(sv);
1604 register PERL_CONTEXT *cx;
1610 if (PL_op->op_flags & OPf_SPECIAL) {
1611 cx = &cxstack[cxstack_ix];
1612 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1617 gimme = OP_GIMME(PL_op, -1);
1619 if (cxstack_ix >= 0)
1620 gimme = cxstack[cxstack_ix].blk_gimme;
1626 if (gimme == G_VOID)
1628 else if (gimme == G_SCALAR) {
1631 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1634 *MARK = sv_mortalcopy(TOPs);
1637 *MARK = &PL_sv_undef;
1641 else if (gimme == G_ARRAY) {
1642 /* in case LEAVE wipes old return values */
1643 for (mark = newsp + 1; mark <= SP; mark++) {
1644 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1645 *mark = sv_mortalcopy(*mark);
1646 TAINT_NOT; /* Each item is independent */
1650 PL_curpm = newpm; /* Don't pop $1 et al till now */
1660 register PERL_CONTEXT *cx;
1666 cx = &cxstack[cxstack_ix];
1667 if (CxTYPE(cx) != CXt_LOOP)
1668 DIE(aTHX_ "panic: pp_iter");
1670 itersvp = CxITERVAR(cx);
1671 av = cx->blk_loop.iterary;
1672 if (SvTYPE(av) != SVt_PVAV) {
1673 /* iterate ($min .. $max) */
1674 if (cx->blk_loop.iterlval) {
1675 /* string increment */
1676 register SV* cur = cx->blk_loop.iterlval;
1678 char *max = SvPV((SV*)av, maxlen);
1679 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1680 #ifndef USE_THREADS /* don't risk potential race */
1681 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1682 /* safe to reuse old SV */
1683 sv_setsv(*itersvp, cur);
1688 /* we need a fresh SV every time so that loop body sees a
1689 * completely new SV for closures/references to work as
1691 SvREFCNT_dec(*itersvp);
1692 *itersvp = newSVsv(cur);
1694 if (strEQ(SvPVX(cur), max))
1695 sv_setiv(cur, 0); /* terminate next time */
1702 /* integer increment */
1703 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1706 #ifndef USE_THREADS /* don't risk potential race */
1707 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1708 /* safe to reuse old SV */
1709 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1714 /* we need a fresh SV every time so that loop body sees a
1715 * completely new SV for closures/references to work as they
1717 SvREFCNT_dec(*itersvp);
1718 *itersvp = newSViv(cx->blk_loop.iterix++);
1724 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1727 SvREFCNT_dec(*itersvp);
1729 if ((sv = SvMAGICAL(av)
1730 ? *av_fetch(av, ++cx->blk_loop.iterix, FALSE)
1731 : AvARRAY(av)[++cx->blk_loop.iterix]))
1735 if (av != PL_curstack && SvIMMORTAL(sv)) {
1736 SV *lv = cx->blk_loop.iterlval;
1737 if (lv && SvREFCNT(lv) > 1) {
1742 SvREFCNT_dec(LvTARG(lv));
1744 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1745 sv_upgrade(lv, SVt_PVLV);
1747 sv_magic(lv, Nullsv, 'y', Nullch, 0);
1749 LvTARG(lv) = SvREFCNT_inc(av);
1750 LvTARGOFF(lv) = cx->blk_loop.iterix;
1751 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1755 *itersvp = SvREFCNT_inc(sv);
1762 register PMOP *pm = cPMOP;
1778 register REGEXP *rx = pm->op_pmregexp;
1780 int force_on_match = 0;
1781 I32 oldsave = PL_savestack_ix;
1785 /* known replacement string? */
1786 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1787 if (PL_op->op_flags & OPf_STACKED)
1794 do_utf8 = DO_UTF8(PL_reg_sv);
1795 if (SvFAKE(TARG) && SvREADONLY(TARG))
1796 sv_force_normal(TARG);
1797 if (SvREADONLY(TARG)
1798 || (SvTYPE(TARG) > SVt_PVLV
1799 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1800 DIE(aTHX_ PL_no_modify);
1803 s = SvPV(TARG, len);
1804 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1806 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1807 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1814 DIE(aTHX_ "panic: pp_subst");
1817 slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1818 maxiters = 2 * slen + 10; /* We can match twice at each
1819 position, once with zero-length,
1820 second time with non-zero. */
1822 if (!rx->prelen && PL_curpm) {
1824 rx = pm->op_pmregexp;
1826 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1827 ? REXEC_COPY_STR : 0;
1829 r_flags |= REXEC_SCREAM;
1830 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1831 SAVEINT(PL_multiline);
1832 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1835 if (rx->reganch & RE_USE_INTUIT) {
1836 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1840 /* How to do it in subst? */
1841 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1843 && ((rx->reganch & ROPT_NOSCAN)
1844 || !((rx->reganch & RE_INTUIT_TAIL)
1845 && (r_flags & REXEC_SCREAM))))
1850 /* only replace once? */
1851 once = !(rpm->op_pmflags & PMf_GLOBAL);
1853 /* known replacement string? */
1854 c = dstr ? SvPV(dstr, clen) : Nullch;
1856 /* can do inplace substitution? */
1857 if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
1858 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
1859 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1860 r_flags | REXEC_CHECKED))
1864 LEAVE_SCOPE(oldsave);
1867 if (force_on_match) {
1869 s = SvPV_force(TARG, len);
1874 SvSCREAM_off(TARG); /* disable possible screamer */
1876 rxtainted |= RX_MATCH_TAINTED(rx);
1877 m = orig + rx->startp[0];
1878 d = orig + rx->endp[0];
1880 if (m - s > strend - d) { /* faster to shorten from end */
1882 Copy(c, m, clen, char);
1887 Move(d, m, i, char);
1891 SvCUR_set(TARG, m - s);
1894 else if ((i = m - s)) { /* faster from front */
1902 Copy(c, m, clen, char);
1907 Copy(c, d, clen, char);
1912 TAINT_IF(rxtainted & 1);
1918 if (iters++ > maxiters)
1919 DIE(aTHX_ "Substitution loop");
1920 rxtainted |= RX_MATCH_TAINTED(rx);
1921 m = rx->startp[0] + orig;
1925 Move(s, d, i, char);
1929 Copy(c, d, clen, char);
1932 s = rx->endp[0] + orig;
1933 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
1935 /* don't match same null twice */
1936 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
1939 SvCUR_set(TARG, d - SvPVX(TARG) + i);
1940 Move(s, d, i+1, char); /* include the NUL */
1942 TAINT_IF(rxtainted & 1);
1944 PUSHs(sv_2mortal(newSViv((I32)iters)));
1946 (void)SvPOK_only_UTF8(TARG);
1947 TAINT_IF(rxtainted);
1948 if (SvSMAGICAL(TARG)) {
1954 LEAVE_SCOPE(oldsave);
1958 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1959 r_flags | REXEC_CHECKED))
1963 if (force_on_match) {
1965 s = SvPV_force(TARG, len);
1968 rxtainted |= RX_MATCH_TAINTED(rx);
1969 dstr = NEWSV(25, len);
1970 sv_setpvn(dstr, m, s-m);
1975 register PERL_CONTEXT *cx;
1978 RETURNOP(cPMOP->op_pmreplroot);
1980 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1982 if (iters++ > maxiters)
1983 DIE(aTHX_ "Substitution loop");
1984 rxtainted |= RX_MATCH_TAINTED(rx);
1985 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
1990 strend = s + (strend - m);
1992 m = rx->startp[0] + orig;
1993 sv_catpvn(dstr, s, m-s);
1994 s = rx->endp[0] + orig;
1996 sv_catpvn(dstr, c, clen);
1999 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2000 TARG, NULL, r_flags));
2001 sv_catpvn(dstr, s, strend - s);
2003 (void)SvOOK_off(TARG);
2004 Safefree(SvPVX(TARG));
2005 SvPVX(TARG) = SvPVX(dstr);
2006 SvCUR_set(TARG, SvCUR(dstr));
2007 SvLEN_set(TARG, SvLEN(dstr));
2008 isutf8 = DO_UTF8(dstr);
2012 TAINT_IF(rxtainted & 1);
2014 PUSHs(sv_2mortal(newSViv((I32)iters)));
2016 (void)SvPOK_only(TARG);
2019 TAINT_IF(rxtainted);
2022 LEAVE_SCOPE(oldsave);
2031 LEAVE_SCOPE(oldsave);
2040 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2041 ++*PL_markstack_ptr;
2042 LEAVE; /* exit inner scope */
2045 if (PL_stack_base + *PL_markstack_ptr > SP) {
2047 I32 gimme = GIMME_V;
2049 LEAVE; /* exit outer scope */
2050 (void)POPMARK; /* pop src */
2051 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2052 (void)POPMARK; /* pop dst */
2053 SP = PL_stack_base + POPMARK; /* pop original mark */
2054 if (gimme == G_SCALAR) {
2058 else if (gimme == G_ARRAY)
2065 ENTER; /* enter inner scope */
2068 src = PL_stack_base[*PL_markstack_ptr];
2072 RETURNOP(cLOGOP->op_other);
2083 register PERL_CONTEXT *cx;
2089 if (gimme == G_SCALAR) {
2092 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2094 *MARK = SvREFCNT_inc(TOPs);
2099 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2101 *MARK = sv_mortalcopy(sv);
2106 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2110 *MARK = &PL_sv_undef;
2114 else if (gimme == G_ARRAY) {
2115 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2116 if (!SvTEMP(*MARK)) {
2117 *MARK = sv_mortalcopy(*MARK);
2118 TAINT_NOT; /* Each item is independent */
2124 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2125 PL_curpm = newpm; /* ... and pop $1 et al */
2129 return pop_return();
2132 /* This duplicates the above code because the above code must not
2133 * get any slower by more conditions */
2141 register PERL_CONTEXT *cx;
2148 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2149 /* We are an argument to a function or grep().
2150 * This kind of lvalueness was legal before lvalue
2151 * subroutines too, so be backward compatible:
2152 * cannot report errors. */
2154 /* Scalar context *is* possible, on the LHS of -> only,
2155 * as in f()->meth(). But this is not an lvalue. */
2156 if (gimme == G_SCALAR)
2158 if (gimme == G_ARRAY) {
2159 if (!CvLVALUE(cx->blk_sub.cv))
2160 goto temporise_array;
2161 EXTEND_MORTAL(SP - newsp);
2162 for (mark = newsp + 1; mark <= SP; mark++) {
2165 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2166 *mark = sv_mortalcopy(*mark);
2168 /* Can be a localized value subject to deletion. */
2169 PL_tmps_stack[++PL_tmps_ix] = *mark;
2170 (void)SvREFCNT_inc(*mark);
2175 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2176 /* Here we go for robustness, not for speed, so we change all
2177 * the refcounts so the caller gets a live guy. Cannot set
2178 * TEMP, so sv_2mortal is out of question. */
2179 if (!CvLVALUE(cx->blk_sub.cv)) {
2184 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2186 if (gimme == G_SCALAR) {
2190 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2195 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2196 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2198 else { /* Can be a localized value
2199 * subject to deletion. */
2200 PL_tmps_stack[++PL_tmps_ix] = *mark;
2201 (void)SvREFCNT_inc(*mark);
2204 else { /* Should not happen? */
2209 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2210 (MARK > SP ? "Empty array" : "Array"));
2214 else if (gimme == G_ARRAY) {
2215 EXTEND_MORTAL(SP - newsp);
2216 for (mark = newsp + 1; mark <= SP; mark++) {
2217 if (SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2218 /* Might be flattened array after $#array = */
2224 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2225 (*mark != &PL_sv_undef)
2227 ? "a readonly value" : "a temporary")
2228 : "an uninitialized value");
2231 /* Can be a localized value subject to deletion. */
2232 PL_tmps_stack[++PL_tmps_ix] = *mark;
2233 (void)SvREFCNT_inc(*mark);
2239 if (gimme == G_SCALAR) {
2243 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2245 *MARK = SvREFCNT_inc(TOPs);
2250 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2252 *MARK = sv_mortalcopy(sv);
2257 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2261 *MARK = &PL_sv_undef;
2265 else if (gimme == G_ARRAY) {
2267 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2268 if (!SvTEMP(*MARK)) {
2269 *MARK = sv_mortalcopy(*MARK);
2270 TAINT_NOT; /* Each item is independent */
2277 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2278 PL_curpm = newpm; /* ... and pop $1 et al */
2282 return pop_return();
2287 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2289 SV *dbsv = GvSV(PL_DBsub);
2291 if (!PERLDB_SUB_NN) {
2295 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2296 || strEQ(GvNAME(gv), "END")
2297 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2298 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2299 && (gv = (GV*)*svp) ))) {
2300 /* Use GV from the stack as a fallback. */
2301 /* GV is potentially non-unique, or contain different CV. */
2302 SV *tmp = newRV((SV*)cv);
2303 sv_setsv(dbsv, tmp);
2307 gv_efullname3(dbsv, gv, Nullch);
2311 (void)SvUPGRADE(dbsv, SVt_PVIV);
2312 (void)SvIOK_on(dbsv);
2313 SAVEIV(SvIVX(dbsv));
2314 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2318 PL_curcopdb = PL_curcop;
2319 cv = GvCV(PL_DBsub);
2329 register PERL_CONTEXT *cx;
2331 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2334 DIE(aTHX_ "Not a CODE reference");
2335 switch (SvTYPE(sv)) {
2341 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2343 SP = PL_stack_base + POPMARK;
2346 if (SvGMAGICAL(sv)) {
2348 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2351 sym = SvPV(sv, n_a);
2353 DIE(aTHX_ PL_no_usym, "a subroutine");
2354 if (PL_op->op_private & HINT_STRICT_REFS)
2355 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2356 cv = get_cv(sym, TRUE);
2360 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2361 tryAMAGICunDEREF(to_cv);
2364 if (SvTYPE(cv) == SVt_PVCV)
2369 DIE(aTHX_ "Not a CODE reference");
2374 if (!(cv = GvCVu((GV*)sv)))
2375 cv = sv_2cv(sv, &stash, &gv, FALSE);
2388 if (!CvROOT(cv) && !CvXSUB(cv)) {
2392 /* anonymous or undef'd function leaves us no recourse */
2393 if (CvANON(cv) || !(gv = CvGV(cv)))
2394 DIE(aTHX_ "Undefined subroutine called");
2396 /* autoloaded stub? */
2397 if (cv != GvCV(gv)) {
2400 /* should call AUTOLOAD now? */
2403 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2410 sub_name = sv_newmortal();
2411 gv_efullname3(sub_name, gv, Nullch);
2412 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2416 DIE(aTHX_ "Not a CODE reference");
2421 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2422 cv = get_db_sub(&sv, cv);
2424 DIE(aTHX_ "No DBsub routine");
2429 * First we need to check if the sub or method requires locking.
2430 * If so, we gain a lock on the CV, the first argument or the
2431 * stash (for static methods), as appropriate. This has to be
2432 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2433 * reschedule by returning a new op.
2435 MUTEX_LOCK(CvMUTEXP(cv));
2436 if (CvFLAGS(cv) & CVf_LOCKED) {
2438 if (CvFLAGS(cv) & CVf_METHOD) {
2439 if (SP > PL_stack_base + TOPMARK)
2440 sv = *(PL_stack_base + TOPMARK + 1);
2442 AV *av = (AV*)PL_curpad[0];
2443 if (hasargs || !av || AvFILLp(av) < 0
2444 || !(sv = AvARRAY(av)[0]))
2446 MUTEX_UNLOCK(CvMUTEXP(cv));
2447 DIE(aTHX_ "no argument for locked method call");
2454 char *stashname = SvPV(sv, len);
2455 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2461 MUTEX_UNLOCK(CvMUTEXP(cv));
2462 mg = condpair_magic(sv);
2463 MUTEX_LOCK(MgMUTEXP(mg));
2464 if (MgOWNER(mg) == thr)
2465 MUTEX_UNLOCK(MgMUTEXP(mg));
2468 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2470 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2472 MUTEX_UNLOCK(MgMUTEXP(mg));
2473 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2475 MUTEX_LOCK(CvMUTEXP(cv));
2478 * Now we have permission to enter the sub, we must distinguish
2479 * four cases. (0) It's an XSUB (in which case we don't care
2480 * about ownership); (1) it's ours already (and we're recursing);
2481 * (2) it's free (but we may already be using a cached clone);
2482 * (3) another thread owns it. Case (1) is easy: we just use it.
2483 * Case (2) means we look for a clone--if we have one, use it
2484 * otherwise grab ownership of cv. Case (3) means we look for a
2485 * clone (for non-XSUBs) and have to create one if we don't
2487 * Why look for a clone in case (2) when we could just grab
2488 * ownership of cv straight away? Well, we could be recursing,
2489 * i.e. we originally tried to enter cv while another thread
2490 * owned it (hence we used a clone) but it has been freed up
2491 * and we're now recursing into it. It may or may not be "better"
2492 * to use the clone but at least CvDEPTH can be trusted.
2494 if (CvOWNER(cv) == thr || CvXSUB(cv))
2495 MUTEX_UNLOCK(CvMUTEXP(cv));
2497 /* Case (2) or (3) */
2501 * XXX Might it be better to release CvMUTEXP(cv) while we
2502 * do the hv_fetch? We might find someone has pinched it
2503 * when we look again, in which case we would be in case
2504 * (3) instead of (2) so we'd have to clone. Would the fact
2505 * that we released the mutex more quickly make up for this?
2507 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2509 /* We already have a clone to use */
2510 MUTEX_UNLOCK(CvMUTEXP(cv));
2512 DEBUG_S(PerlIO_printf(Perl_debug_log,
2513 "entersub: %p already has clone %p:%s\n",
2514 thr, cv, SvPEEK((SV*)cv)));
2517 if (CvDEPTH(cv) == 0)
2518 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2521 /* (2) => grab ownership of cv. (3) => make clone */
2525 MUTEX_UNLOCK(CvMUTEXP(cv));
2526 DEBUG_S(PerlIO_printf(Perl_debug_log,
2527 "entersub: %p grabbing %p:%s in stash %s\n",
2528 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2529 HvNAME(CvSTASH(cv)) : "(none)"));
2532 /* Make a new clone. */
2534 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2535 MUTEX_UNLOCK(CvMUTEXP(cv));
2536 DEBUG_S((PerlIO_printf(Perl_debug_log,
2537 "entersub: %p cloning %p:%s\n",
2538 thr, cv, SvPEEK((SV*)cv))));
2540 * We're creating a new clone so there's no race
2541 * between the original MUTEX_UNLOCK and the
2542 * SvREFCNT_inc since no one will be trying to undef
2543 * it out from underneath us. At least, I don't think
2546 clonecv = cv_clone(cv);
2547 SvREFCNT_dec(cv); /* finished with this */
2548 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2549 CvOWNER(clonecv) = thr;
2553 DEBUG_S(if (CvDEPTH(cv) != 0)
2554 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2556 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2559 #endif /* USE_THREADS */
2562 #ifdef PERL_XSUB_OLDSTYLE
2563 if (CvOLDSTYLE(cv)) {
2564 I32 (*fp3)(int,int,int);
2566 register I32 items = SP - MARK;
2567 /* We dont worry to copy from @_. */
2572 PL_stack_sp = mark + 1;
2573 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2574 items = (*fp3)(CvXSUBANY(cv).any_i32,
2575 MARK - PL_stack_base + 1,
2577 PL_stack_sp = PL_stack_base + items;
2580 #endif /* PERL_XSUB_OLDSTYLE */
2582 I32 markix = TOPMARK;
2587 /* Need to copy @_ to stack. Alternative may be to
2588 * switch stack to @_, and copy return values
2589 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2593 av = (AV*)PL_curpad[0];
2595 av = GvAV(PL_defgv);
2596 #endif /* USE_THREADS */
2597 items = AvFILLp(av) + 1; /* @_ is not tieable */
2600 /* Mark is at the end of the stack. */
2602 Copy(AvARRAY(av), SP + 1, items, SV*);
2607 /* We assume first XSUB in &DB::sub is the called one. */
2609 SAVEVPTR(PL_curcop);
2610 PL_curcop = PL_curcopdb;
2613 /* Do we need to open block here? XXXX */
2614 (void)(*CvXSUB(cv))(aTHXo_ cv);
2616 /* Enforce some sanity in scalar context. */
2617 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2618 if (markix > PL_stack_sp - PL_stack_base)
2619 *(PL_stack_base + markix) = &PL_sv_undef;
2621 *(PL_stack_base + markix) = *PL_stack_sp;
2622 PL_stack_sp = PL_stack_base + markix;
2630 register I32 items = SP - MARK;
2631 AV* padlist = CvPADLIST(cv);
2632 SV** svp = AvARRAY(padlist);
2633 push_return(PL_op->op_next);
2634 PUSHBLOCK(cx, CXt_SUB, MARK);
2637 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2638 * that eval'' ops within this sub know the correct lexical space.
2639 * Owing the speed considerations, we choose to search for the cv
2640 * in doeval() instead.
2642 if (CvDEPTH(cv) < 2)
2643 (void)SvREFCNT_inc(cv);
2644 else { /* save temporaries on recursion? */
2645 PERL_STACK_OVERFLOW_CHECK();
2646 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2648 AV *newpad = newAV();
2649 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2650 I32 ix = AvFILLp((AV*)svp[1]);
2651 I32 names_fill = AvFILLp((AV*)svp[0]);
2652 svp = AvARRAY(svp[0]);
2653 for ( ;ix > 0; ix--) {
2654 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2655 char *name = SvPVX(svp[ix]);
2656 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2657 || *name == '&') /* anonymous code? */
2659 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2661 else { /* our own lexical */
2663 av_store(newpad, ix, sv = (SV*)newAV());
2664 else if (*name == '%')
2665 av_store(newpad, ix, sv = (SV*)newHV());
2667 av_store(newpad, ix, sv = NEWSV(0,0));
2671 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2672 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2675 av_store(newpad, ix, sv = NEWSV(0,0));
2679 av = newAV(); /* will be @_ */
2681 av_store(newpad, 0, (SV*)av);
2682 AvFLAGS(av) = AVf_REIFY;
2683 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2684 AvFILLp(padlist) = CvDEPTH(cv);
2685 svp = AvARRAY(padlist);
2690 AV* av = (AV*)PL_curpad[0];
2692 items = AvFILLp(av) + 1;
2694 /* Mark is at the end of the stack. */
2696 Copy(AvARRAY(av), SP + 1, items, SV*);
2701 #endif /* USE_THREADS */
2702 SAVEVPTR(PL_curpad);
2703 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2706 #endif /* USE_THREADS */
2712 DEBUG_S(PerlIO_printf(Perl_debug_log,
2713 "%p entersub preparing @_\n", thr));
2715 av = (AV*)PL_curpad[0];
2717 /* @_ is normally not REAL--this should only ever
2718 * happen when DB::sub() calls things that modify @_ */
2724 cx->blk_sub.savearray = GvAV(PL_defgv);
2725 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2726 #endif /* USE_THREADS */
2727 cx->blk_sub.oldcurpad = PL_curpad;
2728 cx->blk_sub.argarray = av;
2731 if (items > AvMAX(av) + 1) {
2733 if (AvARRAY(av) != ary) {
2734 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2735 SvPVX(av) = (char*)ary;
2737 if (items > AvMAX(av) + 1) {
2738 AvMAX(av) = items - 1;
2739 Renew(ary,items,SV*);
2741 SvPVX(av) = (char*)ary;
2744 Copy(MARK,AvARRAY(av),items,SV*);
2745 AvFILLp(av) = items - 1;
2753 /* warning must come *after* we fully set up the context
2754 * stuff so that __WARN__ handlers can safely dounwind()
2757 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2758 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2759 sub_crush_depth(cv);
2761 DEBUG_S(PerlIO_printf(Perl_debug_log,
2762 "%p entersub returning %p\n", thr, CvSTART(cv)));
2764 RETURNOP(CvSTART(cv));
2769 Perl_sub_crush_depth(pTHX_ CV *cv)
2772 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2774 SV* tmpstr = sv_newmortal();
2775 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2776 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2786 IV elem = SvIV(elemsv);
2788 U32 lval = PL_op->op_flags & OPf_MOD;
2789 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2792 if (SvROK(elemsv) && ckWARN(WARN_MISC))
2793 Perl_warner(aTHX_ WARN_MISC, "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2795 elem -= PL_curcop->cop_arybase;
2796 if (SvTYPE(av) != SVt_PVAV)
2798 svp = av_fetch(av, elem, lval && !defer);
2800 if (!svp || *svp == &PL_sv_undef) {
2803 DIE(aTHX_ PL_no_aelem, elem);
2804 lv = sv_newmortal();
2805 sv_upgrade(lv, SVt_PVLV);
2807 sv_magic(lv, Nullsv, 'y', Nullch, 0);
2808 LvTARG(lv) = SvREFCNT_inc(av);
2809 LvTARGOFF(lv) = elem;
2814 if (PL_op->op_private & OPpLVAL_INTRO)
2815 save_aelem(av, elem, svp);
2816 else if (PL_op->op_private & OPpDEREF)
2817 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2819 sv = (svp ? *svp : &PL_sv_undef);
2820 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2821 sv = sv_mortalcopy(sv);
2827 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2833 Perl_croak(aTHX_ PL_no_modify);
2834 if (SvTYPE(sv) < SVt_RV)
2835 sv_upgrade(sv, SVt_RV);
2836 else if (SvTYPE(sv) >= SVt_PV) {
2837 (void)SvOOK_off(sv);
2838 Safefree(SvPVX(sv));
2839 SvLEN(sv) = SvCUR(sv) = 0;
2843 SvRV(sv) = NEWSV(355,0);
2846 SvRV(sv) = (SV*)newAV();
2849 SvRV(sv) = (SV*)newHV();
2864 if (SvTYPE(rsv) == SVt_PVCV) {
2870 SETs(method_common(sv, Null(U32*)));
2877 SV* sv = cSVOP->op_sv;
2878 U32 hash = SvUVX(sv);
2880 XPUSHs(method_common(sv, &hash));
2885 S_method_common(pTHX_ SV* meth, U32* hashp)
2896 name = SvPV(meth, namelen);
2897 sv = *(PL_stack_base + TOPMARK + 1);
2900 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2911 !(packname = SvPV(sv, packlen)) ||
2912 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
2913 !(ob=(SV*)GvIO(iogv)))
2916 ((*(U8*)packname >= 0xc0 && DO_UTF8(sv))
2917 ? !isIDFIRST_utf8((U8*)packname)
2918 : !isIDFIRST(*packname)
2921 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
2922 SvOK(sv) ? "without a package or object reference"
2923 : "on an undefined value");
2925 stash = gv_stashpvn(packname, packlen, TRUE);
2928 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
2931 if (!ob || !(SvOBJECT(ob)
2932 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
2935 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
2939 stash = SvSTASH(ob);
2942 /* shortcut for simple names */
2944 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
2946 gv = (GV*)HeVAL(he);
2947 if (isGV(gv) && GvCV(gv) &&
2948 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
2949 return (SV*)GvCV(gv);
2953 gv = gv_fetchmethod(stash, name);
2960 for (p = name; *p; p++) {
2962 sep = p, leaf = p + 1;
2963 else if (*p == ':' && *(p + 1) == ':')
2964 sep = p, leaf = p + 2;
2966 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
2967 packname = sep ? CopSTASHPV(PL_curcop) : HvNAME(stash);
2968 packlen = strlen(packname);
2972 packlen = sep - name;
2974 gv = gv_fetchpv(packname, 0, SVt_PVHV);
2975 if (gv && isGV(gv)) {
2977 "Can't locate object method \"%s\" via package \"%s\"",
2982 "Can't locate object method \"%s\" via package \"%s\""
2983 " (perhaps you forgot to load \"%s\"?)",
2984 leaf, packname, packname);
2987 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
2992 unset_cvowner(pTHXo_ void *cvarg)
2994 register CV* cv = (CV *) cvarg;
2996 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
2997 thr, cv, SvPEEK((SV*)cv))));
2998 MUTEX_LOCK(CvMUTEXP(cv));
2999 DEBUG_S(if (CvDEPTH(cv) != 0)
3000 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3002 assert(thr == CvOWNER(cv));
3004 MUTEX_UNLOCK(CvMUTEXP(cv));
3007 #endif /* USE_THREADS */