3 * Copyright (c) 1991-2000, 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)
88 XPUSHs((SV*)cGVOP_gv);
99 RETURNOP(cLOGOP->op_other);
107 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
109 temp = left; left = right; right = temp;
111 if (PL_tainting && PL_tainted && !SvTAINTED(left))
113 SvSetMagicSV(right, left);
122 RETURNOP(cLOGOP->op_other);
124 RETURNOP(cLOGOP->op_next);
130 TAINT_NOT; /* Each statement is presumed innocent */
131 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
133 oldsave = PL_scopestack[PL_scopestack_ix - 1];
134 LEAVE_SCOPE(oldsave);
140 djSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
148 if (TARG == right && SvGMAGICAL(right))
150 if (SvGMAGICAL(left))
153 left_utf8 = DO_UTF8(left);
154 right_utf8 = DO_UTF8(right);
156 if (left_utf8 != right_utf8) {
157 if (TARG == right && !right_utf8) {
158 sv_utf8_upgrade(TARG); /* Now straight binary copy */
162 /* Set TARG to PV(left), then add right */
163 U8 *l, *c, *olds = NULL;
165 s = (U8*)SvPV(right,len);
166 right_utf8 |= DO_UTF8(right);
168 /* Take a copy since we're about to overwrite TARG */
169 olds = s = (U8*)savepvn((char*)s, len);
171 if (!SvOK(left) && SvTYPE(left) <= SVt_PVMG) {
172 if (SvREADONLY(left))
173 left = sv_2mortal(newSVsv(left));
175 sv_setpv(left, ""); /* Suppress warning. */
177 l = (U8*)SvPV(left, targlen);
178 left_utf8 |= DO_UTF8(left);
180 sv_setpvn(TARG, (char*)l, targlen);
182 sv_utf8_upgrade(TARG);
183 /* Extend TARG to length of right (s) */
184 targlen = SvCUR(TARG) + len;
186 /* plus one for each hi-byte char if we have to upgrade */
187 for (c = s; c < s + len; c++) {
188 if (UTF8_IS_CONTINUED(*c))
192 SvGROW(TARG, targlen+1);
193 /* And now copy, maybe upgrading right to UTF8 on the fly */
195 Copy(s, SvEND(TARG), len, U8);
197 for (c = (U8*)SvEND(TARG); len--; s++)
198 c = uv_to_utf8(c, *s);
200 SvCUR_set(TARG, targlen);
210 s = (U8*)SvPV(left,len);
212 sv_insert(TARG, 0, 0, (char*)s, len);
216 sv_setpvn(TARG, (char *)s, len);
218 else if (!SvOK(TARG) && SvTYPE(TARG) <= SVt_PVMG)
219 sv_setpv(TARG, ""); /* Suppress warning. */
220 s = (U8*)SvPV(right,len);
222 #if defined(PERL_Y2KWARN)
223 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K)) {
225 char *s = SvPV(TARG,n);
226 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
227 && (n == 2 || !isDIGIT(s[n-3])))
229 Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s",
230 "about to append an integer to '19'");
234 sv_catpvn(TARG, (char *)s, len);
237 sv_setpvn(TARG, (char *)s, len); /* suppress warning */
249 if (PL_op->op_flags & OPf_MOD) {
250 if (PL_op->op_private & OPpLVAL_INTRO)
251 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
252 else if (PL_op->op_private & OPpDEREF) {
254 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
263 tryAMAGICunTARGET(iter, 0);
264 PL_last_in_gv = (GV*)(*PL_stack_sp--);
265 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
266 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
267 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
270 XPUSHs((SV*)PL_last_in_gv);
273 PL_last_in_gv = (GV*)(*PL_stack_sp--);
276 return do_readline();
281 djSP; tryAMAGICbinSET(eq,0);
282 #ifdef PERL_PRESERVE_IVUV
285 /* Unless the left argument is integer in range we are going to have to
286 use NV maths. Hence only attempt to coerce the right argument if
287 we know the left is integer. */
290 bool auvok = SvUOK(TOPm1s);
291 bool buvok = SvUOK(TOPs);
293 if (!auvok && !buvok) { /* ## IV == IV ## */
294 IV aiv = SvIVX(TOPm1s);
295 IV biv = SvIVX(TOPs);
298 SETs(boolSV(aiv == biv));
301 if (auvok && buvok) { /* ## UV == UV ## */
302 UV auv = SvUVX(TOPm1s);
303 UV buv = SvUVX(TOPs);
306 SETs(boolSV(auv == buv));
309 { /* ## Mixed IV,UV ## */
313 /* == is commutative so swap if needed (save code) */
315 /* swap. top of stack (b) is the iv */
319 /* As (a) is a UV, it's >0, so it cannot be == */
328 /* As (b) is a UV, it's >0, so it cannot be == */
332 uv = SvUVX(*(SP+1)); /* Do I want TOPp1s() ? */
334 /* we know iv is >= 0 */
335 if (uv > (UV) IV_MAX) {
339 SETs(boolSV((UV)iv == uv));
347 SETs(boolSV(TOPn == value));
355 if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
356 DIE(aTHX_ PL_no_modify);
357 if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
358 SvIVX(TOPs) != IV_MAX)
361 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
363 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
376 RETURNOP(cLOGOP->op_other);
382 djSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
383 useleft = USE_LEFT(TOPm1s);
384 #ifdef PERL_PRESERVE_IVUV
385 /* We must see if we can perform the addition with integers if possible,
386 as the integer code detects overflow while the NV code doesn't.
387 If either argument hasn't had a numeric conversion yet attempt to get
388 the IV. It's important to do this now, rather than just assuming that
389 it's not IOK as a PV of "9223372036854775806" may not take well to NV
390 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
391 integer in case the second argument is IV=9223372036854775806
392 We can (now) rely on sv_2iv to do the right thing, only setting the
393 public IOK flag if the value in the NV (or PV) slot is truly integer.
395 A side effect is that this also aggressively prefers integer maths over
396 fp maths for integer values. */
399 /* Unless the left argument is integer in range we are going to have to
400 use NV maths. Hence only attempt to coerce the right argument if
401 we know the left is integer. */
403 /* left operand is undef, treat as zero. + 0 is identity. */
405 dPOPuv; /* Scary macros. Lets put a sequence point (;) here */
414 /* Left operand is defined, so is it IV? */
417 bool auvok = SvUOK(TOPm1s);
418 bool buvok = SvUOK(TOPs);
420 if (!auvok && !buvok) { /* ## IV + IV ## */
421 IV aiv = SvIVX(TOPm1s);
422 IV biv = SvIVX(TOPs);
423 IV result = aiv + biv;
425 if (biv >= 0 ? (result >= aiv) : (result < aiv)) {
430 if (biv >=0 && aiv >= 0) {
431 UV result = (UV)aiv + (UV)biv;
432 /* UV + UV can only get bigger... */
433 if (result >= (UV) aiv) {
439 /* Overflow, drop through to NVs (beyond next if () else ) */
440 } else if (auvok && buvok) { /* ## UV + UV ## */
441 UV auv = SvUVX(TOPm1s);
442 UV buv = SvUVX(TOPs);
443 UV result = auv + buv;
449 /* Overflow, drop through to NVs (beyond next if () else ) */
450 } else { /* ## Mixed IV,UV ## */
454 /* addition is commutative so swap if needed (save code) */
464 UV result = (UV)aiv + buv;
470 } else if (buv > (UV) IV_MAX) {
471 /* assuming 2s complement means that IV_MIN == -IV_MIN,
472 and (UV)-IV_MIN *is* the value -IV_MIN (or IV_MAX + 1)
473 as buv > IV_MAX, it is >= (IV_MAX + 1), and therefore
474 as the value we can be subtracting from it only lies in
475 the range (-IV_MIN to -1) it can't overflow a UV */
477 SETu( buv - (UV)-aiv );
480 IV result = (IV) buv + aiv;
481 /* aiv < 0 so it must get smaller. */
482 if (result < (IV) buv) {
488 } /* end of IV+IV / UV+UV / mixed */
495 /* left operand is undef, treat as zero. + 0.0 is identity. */
499 SETn( value + TOPn );
507 AV *av = GvAV(cGVOP_gv);
508 U32 lval = PL_op->op_flags & OPf_MOD;
509 SV** svp = av_fetch(av, PL_op->op_private, lval);
510 SV *sv = (svp ? *svp : &PL_sv_undef);
512 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
513 sv = sv_mortalcopy(sv);
520 djSP; dMARK; dTARGET;
522 do_join(TARG, *MARK, MARK, SP);
533 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
534 * will be enough to hold an OP*.
536 SV* sv = sv_newmortal();
537 sv_upgrade(sv, SVt_PVLV);
539 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
547 /* Oversized hot code. */
551 djSP; dMARK; dORIGMARK;
558 if (PL_op->op_flags & OPf_STACKED)
562 if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
564 if (MARK == ORIGMARK) {
565 /* If using default handle then we need to make space to
566 * pass object as 1st arg, so move other args up ...
570 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
574 *MARK = SvTIED_obj((SV*)gv, mg);
577 call_method("PRINT", G_SCALAR);
585 if (!(io = GvIO(gv))) {
586 if ((GvEGV(gv)) && (mg = SvTIED_mg((SV*)GvEGV(gv),'q')))
588 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
589 report_evil_fh(gv, io, PL_op->op_type);
590 SETERRNO(EBADF,RMS$_IFI);
593 else if (!(fp = IoOFP(io))) {
594 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
596 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
597 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
598 report_evil_fh(gv, io, PL_op->op_type);
600 SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
605 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
607 if (!do_print(*MARK, fp))
611 if (!do_print(PL_ofs_sv, fp)) { /* $, */
620 if (!do_print(*MARK, fp))
628 if (PL_ors_sv && SvOK(PL_ors_sv))
629 if (!do_print(PL_ors_sv, fp)) /* $\ */
632 if (IoFLAGS(io) & IOf_FLUSH)
633 if (PerlIO_flush(fp) == EOF)
654 tryAMAGICunDEREF(to_av);
657 if (SvTYPE(av) != SVt_PVAV)
658 DIE(aTHX_ "Not an ARRAY reference");
659 if (PL_op->op_flags & OPf_REF) {
665 if (SvTYPE(sv) == SVt_PVAV) {
667 if (PL_op->op_flags & OPf_REF) {
675 if (SvTYPE(sv) != SVt_PVGV) {
679 if (SvGMAGICAL(sv)) {
685 if (PL_op->op_flags & OPf_REF ||
686 PL_op->op_private & HINT_STRICT_REFS)
687 DIE(aTHX_ PL_no_usym, "an ARRAY");
688 if (ckWARN(WARN_UNINITIALIZED))
690 if (GIMME == G_ARRAY) {
697 if ((PL_op->op_flags & OPf_SPECIAL) &&
698 !(PL_op->op_flags & OPf_MOD))
700 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
702 && (!is_gv_magical(sym,len,0)
703 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
709 if (PL_op->op_private & HINT_STRICT_REFS)
710 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
711 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
718 if (PL_op->op_private & OPpLVAL_INTRO)
720 if (PL_op->op_flags & OPf_REF) {
727 if (GIMME == G_ARRAY) {
728 I32 maxarg = AvFILL(av) + 1;
729 (void)POPs; /* XXXX May be optimized away? */
731 if (SvRMAGICAL(av)) {
733 for (i=0; i < maxarg; i++) {
734 SV **svp = av_fetch(av, i, FALSE);
735 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
739 Copy(AvARRAY(av), SP+1, maxarg, SV*);
745 I32 maxarg = AvFILL(av) + 1;
758 tryAMAGICunDEREF(to_hv);
761 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
762 DIE(aTHX_ "Not a HASH reference");
763 if (PL_op->op_flags & OPf_REF) {
769 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
771 if (PL_op->op_flags & OPf_REF) {
779 if (SvTYPE(sv) != SVt_PVGV) {
783 if (SvGMAGICAL(sv)) {
789 if (PL_op->op_flags & OPf_REF ||
790 PL_op->op_private & HINT_STRICT_REFS)
791 DIE(aTHX_ PL_no_usym, "a HASH");
792 if (ckWARN(WARN_UNINITIALIZED))
794 if (GIMME == G_ARRAY) {
801 if ((PL_op->op_flags & OPf_SPECIAL) &&
802 !(PL_op->op_flags & OPf_MOD))
804 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
806 && (!is_gv_magical(sym,len,0)
807 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
813 if (PL_op->op_private & HINT_STRICT_REFS)
814 DIE(aTHX_ PL_no_symref, sym, "a HASH");
815 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
822 if (PL_op->op_private & OPpLVAL_INTRO)
824 if (PL_op->op_flags & OPf_REF) {
831 if (GIMME == G_ARRAY) { /* array wanted */
832 *PL_stack_sp = (SV*)hv;
837 if (SvTYPE(hv) == SVt_PVAV)
838 hv = avhv_keys((AV*)hv);
840 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
841 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
851 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
857 leftop = ((BINOP*)PL_op)->op_last;
859 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
860 leftop = ((LISTOP*)leftop)->op_first;
862 /* Skip PUSHMARK and each element already assigned to. */
863 for (i = lelem - firstlelem; i > 0; i--) {
864 leftop = leftop->op_sibling;
867 if (leftop->op_type != OP_RV2HV)
872 av_fill(ary, 0); /* clear all but the fields hash */
873 if (lastrelem >= relem) {
874 while (relem < lastrelem) { /* gobble up all the rest */
878 /* Avoid a memory leak when avhv_store_ent dies. */
879 tmpstr = sv_newmortal();
880 sv_setsv(tmpstr,relem[1]); /* value */
882 if (avhv_store_ent(ary,relem[0],tmpstr,0))
883 (void)SvREFCNT_inc(tmpstr);
884 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
890 if (relem == lastrelem)
896 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
900 if (ckWARN(WARN_MISC)) {
901 if (relem == firstrelem &&
903 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
904 SvTYPE(SvRV(*relem)) == SVt_PVHV))
906 Perl_warner(aTHX_ WARN_MISC,
907 "Reference found where even-sized list expected");
910 Perl_warner(aTHX_ WARN_MISC,
911 "Odd number of elements in hash assignment");
913 if (SvTYPE(hash) == SVt_PVAV) {
915 tmpstr = sv_newmortal();
916 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
917 (void)SvREFCNT_inc(tmpstr);
918 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
923 tmpstr = NEWSV(29,0);
924 didstore = hv_store_ent(hash,*relem,tmpstr,0);
925 if (SvMAGICAL(hash)) {
926 if (SvSMAGICAL(tmpstr))
939 SV **lastlelem = PL_stack_sp;
940 SV **lastrelem = PL_stack_base + POPMARK;
941 SV **firstrelem = PL_stack_base + POPMARK + 1;
942 SV **firstlelem = lastrelem + 1;
955 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
957 /* If there's a common identifier on both sides we have to take
958 * special care that assigning the identifier on the left doesn't
959 * clobber a value on the right that's used later in the list.
961 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
962 EXTEND_MORTAL(lastrelem - firstrelem + 1);
963 for (relem = firstrelem; relem <= lastrelem; relem++) {
966 TAINT_NOT; /* Each item is independent */
967 *relem = sv_mortalcopy(sv);
977 while (lelem <= lastlelem) {
978 TAINT_NOT; /* Each item stands on its own, taintwise. */
980 switch (SvTYPE(sv)) {
983 magic = SvMAGICAL(ary) != 0;
984 if (PL_op->op_private & OPpASSIGN_HASH) {
985 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
991 do_oddball((HV*)ary, relem, firstrelem);
993 relem = lastrelem + 1;
998 av_extend(ary, lastrelem - relem);
1000 while (relem <= lastrelem) { /* gobble up all the rest */
1004 sv_setsv(sv,*relem);
1006 didstore = av_store(ary,i++,sv);
1016 case SVt_PVHV: { /* normal hash */
1020 magic = SvMAGICAL(hash) != 0;
1023 while (relem < lastrelem) { /* gobble up all the rest */
1028 sv = &PL_sv_no, relem++;
1029 tmpstr = NEWSV(29,0);
1031 sv_setsv(tmpstr,*relem); /* value */
1032 *(relem++) = tmpstr;
1033 didstore = hv_store_ent(hash,sv,tmpstr,0);
1035 if (SvSMAGICAL(tmpstr))
1042 if (relem == lastrelem) {
1043 do_oddball(hash, relem, firstrelem);
1049 if (SvIMMORTAL(sv)) {
1050 if (relem <= lastrelem)
1054 if (relem <= lastrelem) {
1055 sv_setsv(sv, *relem);
1059 sv_setsv(sv, &PL_sv_undef);
1064 if (PL_delaymagic & ~DM_DELAY) {
1065 if (PL_delaymagic & DM_UID) {
1066 #ifdef HAS_SETRESUID
1067 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1069 # ifdef HAS_SETREUID
1070 (void)setreuid(PL_uid,PL_euid);
1073 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1074 (void)setruid(PL_uid);
1075 PL_delaymagic &= ~DM_RUID;
1077 # endif /* HAS_SETRUID */
1079 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1080 (void)seteuid(PL_uid);
1081 PL_delaymagic &= ~DM_EUID;
1083 # endif /* HAS_SETEUID */
1084 if (PL_delaymagic & DM_UID) {
1085 if (PL_uid != PL_euid)
1086 DIE(aTHX_ "No setreuid available");
1087 (void)PerlProc_setuid(PL_uid);
1089 # endif /* HAS_SETREUID */
1090 #endif /* HAS_SETRESUID */
1091 PL_uid = PerlProc_getuid();
1092 PL_euid = PerlProc_geteuid();
1094 if (PL_delaymagic & DM_GID) {
1095 #ifdef HAS_SETRESGID
1096 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1098 # ifdef HAS_SETREGID
1099 (void)setregid(PL_gid,PL_egid);
1102 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1103 (void)setrgid(PL_gid);
1104 PL_delaymagic &= ~DM_RGID;
1106 # endif /* HAS_SETRGID */
1108 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1109 (void)setegid(PL_gid);
1110 PL_delaymagic &= ~DM_EGID;
1112 # endif /* HAS_SETEGID */
1113 if (PL_delaymagic & DM_GID) {
1114 if (PL_gid != PL_egid)
1115 DIE(aTHX_ "No setregid available");
1116 (void)PerlProc_setgid(PL_gid);
1118 # endif /* HAS_SETREGID */
1119 #endif /* HAS_SETRESGID */
1120 PL_gid = PerlProc_getgid();
1121 PL_egid = PerlProc_getegid();
1123 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1128 if (gimme == G_VOID)
1129 SP = firstrelem - 1;
1130 else if (gimme == G_SCALAR) {
1133 SETi(lastrelem - firstrelem + 1);
1139 SP = firstrelem + (lastlelem - firstlelem);
1140 lelem = firstlelem + (relem - firstrelem);
1142 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1150 register PMOP *pm = cPMOP;
1151 SV *rv = sv_newmortal();
1152 SV *sv = newSVrv(rv, "Regexp");
1153 sv_magic(sv,(SV*)ReREFCNT_inc(pm->op_pmregexp),'r',0,0);
1160 register PMOP *pm = cPMOP;
1165 I32 r_flags = REXEC_CHECKED;
1166 char *truebase; /* Start of string */
1167 register REGEXP *rx = pm->op_pmregexp;
1172 I32 oldsave = PL_savestack_ix;
1173 I32 update_minmatch = 1;
1174 I32 had_zerolen = 0;
1176 if (PL_op->op_flags & OPf_STACKED)
1182 PUTBACK; /* EVAL blocks need stack_sp. */
1183 s = SvPV(TARG, len);
1186 DIE(aTHX_ "panic: do_match");
1187 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1188 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1191 if (pm->op_pmdynflags & PMdf_USED) {
1193 if (gimme == G_ARRAY)
1198 if (!rx->prelen && PL_curpm) {
1200 rx = pm->op_pmregexp;
1202 if (rx->minlen > len) goto failure;
1206 /* XXXX What part of this is needed with true \G-support? */
1207 if ((global = pm->op_pmflags & PMf_GLOBAL)) {
1209 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1210 MAGIC* mg = mg_find(TARG, 'g');
1211 if (mg && mg->mg_len >= 0) {
1212 if (!(rx->reganch & ROPT_GPOS_SEEN))
1213 rx->endp[0] = rx->startp[0] = mg->mg_len;
1214 else if (rx->reganch & ROPT_ANCH_GPOS) {
1215 r_flags |= REXEC_IGNOREPOS;
1216 rx->endp[0] = rx->startp[0] = mg->mg_len;
1218 minmatch = (mg->mg_flags & MGf_MINMATCH);
1219 update_minmatch = 0;
1223 if ((gimme != G_ARRAY && !global && rx->nparens)
1224 || SvTEMP(TARG) || PL_sawampersand)
1225 r_flags |= REXEC_COPY_STR;
1227 r_flags |= REXEC_SCREAM;
1229 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1230 SAVEINT(PL_multiline);
1231 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1235 if (global && rx->startp[0] != -1) {
1236 t = s = rx->endp[0] + truebase;
1237 if ((s + rx->minlen) > strend)
1239 if (update_minmatch++)
1240 minmatch = had_zerolen;
1242 if (rx->reganch & RE_USE_INTUIT) {
1243 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1247 if ( (rx->reganch & ROPT_CHECK_ALL)
1249 && ((rx->reganch & ROPT_NOSCAN)
1250 || !((rx->reganch & RE_INTUIT_TAIL)
1251 && (r_flags & REXEC_SCREAM)))
1252 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1255 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1258 if (pm->op_pmflags & PMf_ONCE)
1259 pm->op_pmdynflags |= PMdf_USED;
1268 RX_MATCH_TAINTED_on(rx);
1269 TAINT_IF(RX_MATCH_TAINTED(rx));
1270 if (gimme == G_ARRAY) {
1273 iters = rx->nparens;
1274 if (global && !iters)
1278 SPAGAIN; /* EVAL blocks could move the stack. */
1279 EXTEND(SP, iters + i);
1280 EXTEND_MORTAL(iters + i);
1281 for (i = !i; i <= iters; i++) {
1282 PUSHs(sv_newmortal());
1284 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1285 len = rx->endp[i] - rx->startp[i];
1286 s = rx->startp[i] + truebase;
1287 sv_setpvn(*SP, s, len);
1288 if ((pm->op_pmdynflags & PMdf_UTF8) && !IN_BYTE) {
1290 sv_utf8_downgrade(*SP, TRUE);
1295 had_zerolen = (rx->startp[0] != -1
1296 && rx->startp[0] == rx->endp[0]);
1297 PUTBACK; /* EVAL blocks may use stack */
1298 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1303 LEAVE_SCOPE(oldsave);
1309 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1310 mg = mg_find(TARG, 'g');
1312 sv_magic(TARG, (SV*)0, 'g', Nullch, 0);
1313 mg = mg_find(TARG, 'g');
1315 if (rx->startp[0] != -1) {
1316 mg->mg_len = rx->endp[0];
1317 if (rx->startp[0] == rx->endp[0])
1318 mg->mg_flags |= MGf_MINMATCH;
1320 mg->mg_flags &= ~MGf_MINMATCH;
1323 LEAVE_SCOPE(oldsave);
1327 yup: /* Confirmed by INTUIT */
1329 RX_MATCH_TAINTED_on(rx);
1330 TAINT_IF(RX_MATCH_TAINTED(rx));
1332 if (pm->op_pmflags & PMf_ONCE)
1333 pm->op_pmdynflags |= PMdf_USED;
1334 if (RX_MATCH_COPIED(rx))
1335 Safefree(rx->subbeg);
1336 RX_MATCH_COPIED_off(rx);
1337 rx->subbeg = Nullch;
1339 rx->subbeg = truebase;
1340 rx->startp[0] = s - truebase;
1341 rx->endp[0] = s - truebase + rx->minlen;
1342 rx->sublen = strend - truebase;
1345 if (PL_sawampersand) {
1348 rx->subbeg = savepvn(t, strend - t);
1349 rx->sublen = strend - t;
1350 RX_MATCH_COPIED_on(rx);
1351 off = rx->startp[0] = s - t;
1352 rx->endp[0] = off + rx->minlen;
1354 else { /* startp/endp are used by @- @+. */
1355 rx->startp[0] = s - truebase;
1356 rx->endp[0] = s - truebase + rx->minlen;
1358 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1359 LEAVE_SCOPE(oldsave);
1364 if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
1365 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1366 MAGIC* mg = mg_find(TARG, 'g');
1371 LEAVE_SCOPE(oldsave);
1372 if (gimme == G_ARRAY)
1378 Perl_do_readline(pTHX)
1380 dSP; dTARGETSTACKED;
1385 register IO *io = GvIO(PL_last_in_gv);
1386 register I32 type = PL_op->op_type;
1387 I32 gimme = GIMME_V;
1390 if ((mg = SvTIED_mg((SV*)PL_last_in_gv, 'q'))) {
1392 XPUSHs(SvTIED_obj((SV*)PL_last_in_gv, mg));
1395 call_method("READLINE", gimme);
1398 if (gimme == G_SCALAR)
1399 SvSetMagicSV_nosteal(TARG, TOPs);
1406 if (IoFLAGS(io) & IOf_ARGV) {
1407 if (IoFLAGS(io) & IOf_START) {
1409 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1410 IoFLAGS(io) &= ~IOf_START;
1411 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1412 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1413 SvSETMAGIC(GvSV(PL_last_in_gv));
1418 fp = nextargv(PL_last_in_gv);
1419 if (!fp) { /* Note: fp != IoIFP(io) */
1420 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1423 else if (type == OP_GLOB)
1424 fp = Perl_start_glob(aTHX_ POPs, io);
1426 else if (type == OP_GLOB)
1428 else if (ckWARN(WARN_IO) /* stdout/stderr or other write fh */
1429 && (IoTYPE(io) == IoTYPE_WRONLY || fp == PerlIO_stdout()
1430 || fp == PerlIO_stderr()))
1431 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1434 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1435 && (!io || !(IoFLAGS(io) & IOf_START))) {
1436 if (type == OP_GLOB)
1437 Perl_warner(aTHX_ WARN_GLOB,
1438 "glob failed (can't start child: %s)",
1441 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1443 if (gimme == G_SCALAR) {
1444 (void)SvOK_off(TARG);
1450 if (gimme == G_SCALAR) {
1454 (void)SvUPGRADE(sv, SVt_PV);
1455 tmplen = SvLEN(sv); /* remember if already alloced */
1457 Sv_Grow(sv, 80); /* try short-buffering it */
1458 if (type == OP_RCATLINE)
1464 sv = sv_2mortal(NEWSV(57, 80));
1468 /* This should not be marked tainted if the fp is marked clean */
1469 #define MAYBE_TAINT_LINE(io, sv) \
1470 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1475 /* delay EOF state for a snarfed empty file */
1476 #define SNARF_EOF(gimme,rs,io,sv) \
1477 (gimme != G_SCALAR || SvCUR(sv) \
1478 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1481 if (!sv_gets(sv, fp, offset)
1482 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1484 PerlIO_clearerr(fp);
1485 if (IoFLAGS(io) & IOf_ARGV) {
1486 fp = nextargv(PL_last_in_gv);
1489 (void)do_close(PL_last_in_gv, FALSE);
1491 else if (type == OP_GLOB) {
1492 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1493 Perl_warner(aTHX_ WARN_GLOB,
1494 "glob failed (child exited with status %d%s)",
1495 (int)(STATUS_CURRENT >> 8),
1496 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1499 if (gimme == G_SCALAR) {
1500 (void)SvOK_off(TARG);
1503 MAYBE_TAINT_LINE(io, sv);
1506 MAYBE_TAINT_LINE(io, sv);
1508 IoFLAGS(io) |= IOf_NOLINE;
1511 if (type == OP_GLOB) {
1514 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1515 tmps = SvEND(sv) - 1;
1516 if (*tmps == *SvPVX(PL_rs)) {
1521 for (tmps = SvPVX(sv); *tmps; tmps++)
1522 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1523 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1525 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1526 (void)POPs; /* Unmatched wildcard? Chuck it... */
1530 if (gimme == G_ARRAY) {
1531 if (SvLEN(sv) - SvCUR(sv) > 20) {
1532 SvLEN_set(sv, SvCUR(sv)+1);
1533 Renew(SvPVX(sv), SvLEN(sv), char);
1535 sv = sv_2mortal(NEWSV(58, 80));
1538 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1539 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1543 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1544 Renew(SvPVX(sv), SvLEN(sv), char);
1553 register PERL_CONTEXT *cx;
1554 I32 gimme = OP_GIMME(PL_op, -1);
1557 if (cxstack_ix >= 0)
1558 gimme = cxstack[cxstack_ix].blk_gimme;
1566 PUSHBLOCK(cx, CXt_BLOCK, SP);
1578 U32 lval = PL_op->op_flags & OPf_MOD;
1579 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1581 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1584 if (SvTYPE(hv) == SVt_PVHV) {
1585 if (PL_op->op_private & OPpLVAL_INTRO)
1586 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
1587 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1588 svp = he ? &HeVAL(he) : 0;
1590 else if (SvTYPE(hv) == SVt_PVAV) {
1591 if (PL_op->op_private & OPpLVAL_INTRO)
1592 DIE(aTHX_ "Can't localize pseudo-hash element");
1593 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1599 if (!svp || *svp == &PL_sv_undef) {
1604 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1606 lv = sv_newmortal();
1607 sv_upgrade(lv, SVt_PVLV);
1609 sv_magic(lv, key2 = newSVsv(keysv), 'y', Nullch, 0);
1610 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1611 LvTARG(lv) = SvREFCNT_inc(hv);
1616 if (PL_op->op_private & OPpLVAL_INTRO) {
1617 if (HvNAME(hv) && isGV(*svp))
1618 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1622 char *key = SvPV(keysv, keylen);
1623 save_delete(hv, key, keylen);
1625 save_helem(hv, keysv, svp);
1628 else if (PL_op->op_private & OPpDEREF)
1629 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1631 sv = (svp ? *svp : &PL_sv_undef);
1632 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1633 * Pushing the magical RHS on to the stack is useless, since
1634 * that magic is soon destined to be misled by the local(),
1635 * and thus the later pp_sassign() will fail to mg_get() the
1636 * old value. This should also cure problems with delayed
1637 * mg_get()s. GSAR 98-07-03 */
1638 if (!lval && SvGMAGICAL(sv))
1639 sv = sv_mortalcopy(sv);
1647 register PERL_CONTEXT *cx;
1653 if (PL_op->op_flags & OPf_SPECIAL) {
1654 cx = &cxstack[cxstack_ix];
1655 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1660 gimme = OP_GIMME(PL_op, -1);
1662 if (cxstack_ix >= 0)
1663 gimme = cxstack[cxstack_ix].blk_gimme;
1669 if (gimme == G_VOID)
1671 else if (gimme == G_SCALAR) {
1674 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1677 *MARK = sv_mortalcopy(TOPs);
1680 *MARK = &PL_sv_undef;
1684 else if (gimme == G_ARRAY) {
1685 /* in case LEAVE wipes old return values */
1686 for (mark = newsp + 1; mark <= SP; mark++) {
1687 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1688 *mark = sv_mortalcopy(*mark);
1689 TAINT_NOT; /* Each item is independent */
1693 PL_curpm = newpm; /* Don't pop $1 et al till now */
1703 register PERL_CONTEXT *cx;
1709 cx = &cxstack[cxstack_ix];
1710 if (CxTYPE(cx) != CXt_LOOP)
1711 DIE(aTHX_ "panic: pp_iter");
1713 itersvp = CxITERVAR(cx);
1714 av = cx->blk_loop.iterary;
1715 if (SvTYPE(av) != SVt_PVAV) {
1716 /* iterate ($min .. $max) */
1717 if (cx->blk_loop.iterlval) {
1718 /* string increment */
1719 register SV* cur = cx->blk_loop.iterlval;
1721 char *max = SvPV((SV*)av, maxlen);
1722 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1723 #ifndef USE_THREADS /* don't risk potential race */
1724 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1725 /* safe to reuse old SV */
1726 sv_setsv(*itersvp, cur);
1731 /* we need a fresh SV every time so that loop body sees a
1732 * completely new SV for closures/references to work as
1734 SvREFCNT_dec(*itersvp);
1735 *itersvp = newSVsv(cur);
1737 if (strEQ(SvPVX(cur), max))
1738 sv_setiv(cur, 0); /* terminate next time */
1745 /* integer increment */
1746 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1749 #ifndef USE_THREADS /* don't risk potential race */
1750 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1751 /* safe to reuse old SV */
1752 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1757 /* we need a fresh SV every time so that loop body sees a
1758 * completely new SV for closures/references to work as they
1760 SvREFCNT_dec(*itersvp);
1761 *itersvp = newSViv(cx->blk_loop.iterix++);
1767 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1770 SvREFCNT_dec(*itersvp);
1772 if ((sv = SvMAGICAL(av)
1773 ? *av_fetch(av, ++cx->blk_loop.iterix, FALSE)
1774 : AvARRAY(av)[++cx->blk_loop.iterix]))
1778 if (av != PL_curstack && SvIMMORTAL(sv)) {
1779 SV *lv = cx->blk_loop.iterlval;
1780 if (lv && SvREFCNT(lv) > 1) {
1785 SvREFCNT_dec(LvTARG(lv));
1787 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1788 sv_upgrade(lv, SVt_PVLV);
1790 sv_magic(lv, Nullsv, 'y', Nullch, 0);
1792 LvTARG(lv) = SvREFCNT_inc(av);
1793 LvTARGOFF(lv) = cx->blk_loop.iterix;
1794 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1798 *itersvp = SvREFCNT_inc(sv);
1805 register PMOP *pm = cPMOP;
1821 register REGEXP *rx = pm->op_pmregexp;
1823 int force_on_match = 0;
1824 I32 oldsave = PL_savestack_ix;
1826 /* known replacement string? */
1827 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1828 if (PL_op->op_flags & OPf_STACKED)
1834 if (SvFAKE(TARG) && SvREADONLY(TARG))
1835 sv_force_normal(TARG);
1836 if (SvREADONLY(TARG)
1837 || (SvTYPE(TARG) > SVt_PVLV
1838 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1839 DIE(aTHX_ PL_no_modify);
1842 s = SvPV(TARG, len);
1843 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1845 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1846 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1853 DIE(aTHX_ "panic: do_subst");
1856 maxiters = 2*(strend - s) + 10; /* We can match twice at each
1857 position, once with zero-length,
1858 second time with non-zero. */
1860 if (!rx->prelen && PL_curpm) {
1862 rx = pm->op_pmregexp;
1864 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1865 ? REXEC_COPY_STR : 0;
1867 r_flags |= REXEC_SCREAM;
1868 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1869 SAVEINT(PL_multiline);
1870 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1873 if (rx->reganch & RE_USE_INTUIT) {
1874 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1878 /* How to do it in subst? */
1879 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1881 && ((rx->reganch & ROPT_NOSCAN)
1882 || !((rx->reganch & RE_INTUIT_TAIL)
1883 && (r_flags & REXEC_SCREAM))))
1888 /* only replace once? */
1889 once = !(rpm->op_pmflags & PMf_GLOBAL);
1891 /* known replacement string? */
1892 c = dstr ? SvPV(dstr, clen) : Nullch;
1894 /* can do inplace substitution? */
1895 if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
1896 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
1897 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1898 r_flags | REXEC_CHECKED))
1902 LEAVE_SCOPE(oldsave);
1905 if (force_on_match) {
1907 s = SvPV_force(TARG, len);
1912 SvSCREAM_off(TARG); /* disable possible screamer */
1914 rxtainted |= RX_MATCH_TAINTED(rx);
1915 m = orig + rx->startp[0];
1916 d = orig + rx->endp[0];
1918 if (m - s > strend - d) { /* faster to shorten from end */
1920 Copy(c, m, clen, char);
1925 Move(d, m, i, char);
1929 SvCUR_set(TARG, m - s);
1932 else if ((i = m - s)) { /* faster from front */
1940 Copy(c, m, clen, char);
1945 Copy(c, d, clen, char);
1950 TAINT_IF(rxtainted & 1);
1956 if (iters++ > maxiters)
1957 DIE(aTHX_ "Substitution loop");
1958 rxtainted |= RX_MATCH_TAINTED(rx);
1959 m = rx->startp[0] + orig;
1963 Move(s, d, i, char);
1967 Copy(c, d, clen, char);
1970 s = rx->endp[0] + orig;
1971 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
1973 /* don't match same null twice */
1974 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
1977 SvCUR_set(TARG, d - SvPVX(TARG) + i);
1978 Move(s, d, i+1, char); /* include the NUL */
1980 TAINT_IF(rxtainted & 1);
1982 PUSHs(sv_2mortal(newSViv((I32)iters)));
1984 (void)SvPOK_only_UTF8(TARG);
1985 TAINT_IF(rxtainted);
1986 if (SvSMAGICAL(TARG)) {
1992 LEAVE_SCOPE(oldsave);
1996 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1997 r_flags | REXEC_CHECKED))
1999 if (force_on_match) {
2001 s = SvPV_force(TARG, len);
2004 rxtainted |= RX_MATCH_TAINTED(rx);
2005 dstr = NEWSV(25, len);
2006 sv_setpvn(dstr, m, s-m);
2009 register PERL_CONTEXT *cx;
2012 RETURNOP(cPMOP->op_pmreplroot);
2014 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2016 if (iters++ > maxiters)
2017 DIE(aTHX_ "Substitution loop");
2018 rxtainted |= RX_MATCH_TAINTED(rx);
2019 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2024 strend = s + (strend - m);
2026 m = rx->startp[0] + orig;
2027 sv_catpvn(dstr, s, m-s);
2028 s = rx->endp[0] + orig;
2030 sv_catpvn(dstr, c, clen);
2033 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m, TARG, NULL, r_flags));
2034 sv_catpvn(dstr, s, strend - s);
2036 (void)SvOOK_off(TARG);
2037 Safefree(SvPVX(TARG));
2038 SvPVX(TARG) = SvPVX(dstr);
2039 SvCUR_set(TARG, SvCUR(dstr));
2040 SvLEN_set(TARG, SvLEN(dstr));
2044 TAINT_IF(rxtainted & 1);
2046 PUSHs(sv_2mortal(newSViv((I32)iters)));
2048 (void)SvPOK_only(TARG);
2049 TAINT_IF(rxtainted);
2052 LEAVE_SCOPE(oldsave);
2061 LEAVE_SCOPE(oldsave);
2070 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2071 ++*PL_markstack_ptr;
2072 LEAVE; /* exit inner scope */
2075 if (PL_stack_base + *PL_markstack_ptr > SP) {
2077 I32 gimme = GIMME_V;
2079 LEAVE; /* exit outer scope */
2080 (void)POPMARK; /* pop src */
2081 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2082 (void)POPMARK; /* pop dst */
2083 SP = PL_stack_base + POPMARK; /* pop original mark */
2084 if (gimme == G_SCALAR) {
2088 else if (gimme == G_ARRAY)
2095 ENTER; /* enter inner scope */
2098 src = PL_stack_base[*PL_markstack_ptr];
2102 RETURNOP(cLOGOP->op_other);
2113 register PERL_CONTEXT *cx;
2119 if (gimme == G_SCALAR) {
2122 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2124 *MARK = SvREFCNT_inc(TOPs);
2129 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2131 *MARK = sv_mortalcopy(sv);
2136 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2140 *MARK = &PL_sv_undef;
2144 else if (gimme == G_ARRAY) {
2145 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2146 if (!SvTEMP(*MARK)) {
2147 *MARK = sv_mortalcopy(*MARK);
2148 TAINT_NOT; /* Each item is independent */
2154 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2155 PL_curpm = newpm; /* ... and pop $1 et al */
2159 return pop_return();
2162 /* This duplicates the above code because the above code must not
2163 * get any slower by more conditions */
2171 register PERL_CONTEXT *cx;
2178 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2179 /* We are an argument to a function or grep().
2180 * This kind of lvalueness was legal before lvalue
2181 * subroutines too, so be backward compatible:
2182 * cannot report errors. */
2184 /* Scalar context *is* possible, on the LHS of -> only,
2185 * as in f()->meth(). But this is not an lvalue. */
2186 if (gimme == G_SCALAR)
2188 if (gimme == G_ARRAY) {
2189 if (!CvLVALUE(cx->blk_sub.cv))
2190 goto temporise_array;
2191 EXTEND_MORTAL(SP - newsp);
2192 for (mark = newsp + 1; mark <= SP; mark++) {
2195 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2196 *mark = sv_mortalcopy(*mark);
2198 /* Can be a localized value subject to deletion. */
2199 PL_tmps_stack[++PL_tmps_ix] = *mark;
2200 (void)SvREFCNT_inc(*mark);
2205 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2206 /* Here we go for robustness, not for speed, so we change all
2207 * the refcounts so the caller gets a live guy. Cannot set
2208 * TEMP, so sv_2mortal is out of question. */
2209 if (!CvLVALUE(cx->blk_sub.cv)) {
2214 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2216 if (gimme == G_SCALAR) {
2220 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2225 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2226 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2228 else { /* Can be a localized value
2229 * subject to deletion. */
2230 PL_tmps_stack[++PL_tmps_ix] = *mark;
2231 (void)SvREFCNT_inc(*mark);
2234 else { /* Should not happen? */
2239 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2240 (MARK > SP ? "Empty array" : "Array"));
2244 else if (gimme == G_ARRAY) {
2245 EXTEND_MORTAL(SP - newsp);
2246 for (mark = newsp + 1; mark <= SP; mark++) {
2247 if (SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2248 /* Might be flattened array after $#array = */
2254 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2255 (*mark != &PL_sv_undef)
2257 ? "a readonly value" : "a temporary")
2258 : "an uninitialized value");
2261 /* Can be a localized value subject to deletion. */
2262 PL_tmps_stack[++PL_tmps_ix] = *mark;
2263 (void)SvREFCNT_inc(*mark);
2269 if (gimme == G_SCALAR) {
2273 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2275 *MARK = SvREFCNT_inc(TOPs);
2280 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2282 *MARK = sv_mortalcopy(sv);
2287 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2291 *MARK = &PL_sv_undef;
2295 else if (gimme == G_ARRAY) {
2297 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2298 if (!SvTEMP(*MARK)) {
2299 *MARK = sv_mortalcopy(*MARK);
2300 TAINT_NOT; /* Each item is independent */
2307 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2308 PL_curpm = newpm; /* ... and pop $1 et al */
2312 return pop_return();
2317 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2319 SV *dbsv = GvSV(PL_DBsub);
2321 if (!PERLDB_SUB_NN) {
2325 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2326 || strEQ(GvNAME(gv), "END")
2327 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2328 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2329 && (gv = (GV*)*svp) ))) {
2330 /* Use GV from the stack as a fallback. */
2331 /* GV is potentially non-unique, or contain different CV. */
2332 SV *tmp = newRV((SV*)cv);
2333 sv_setsv(dbsv, tmp);
2337 gv_efullname3(dbsv, gv, Nullch);
2341 (void)SvUPGRADE(dbsv, SVt_PVIV);
2342 (void)SvIOK_on(dbsv);
2343 SAVEIV(SvIVX(dbsv));
2344 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2348 PL_curcopdb = PL_curcop;
2349 cv = GvCV(PL_DBsub);
2359 register PERL_CONTEXT *cx;
2361 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2364 DIE(aTHX_ "Not a CODE reference");
2365 switch (SvTYPE(sv)) {
2371 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2373 SP = PL_stack_base + POPMARK;
2376 if (SvGMAGICAL(sv)) {
2378 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2381 sym = SvPV(sv, n_a);
2383 DIE(aTHX_ PL_no_usym, "a subroutine");
2384 if (PL_op->op_private & HINT_STRICT_REFS)
2385 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2386 cv = get_cv(sym, TRUE);
2390 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2391 tryAMAGICunDEREF(to_cv);
2394 if (SvTYPE(cv) == SVt_PVCV)
2399 DIE(aTHX_ "Not a CODE reference");
2404 if (!(cv = GvCVu((GV*)sv)))
2405 cv = sv_2cv(sv, &stash, &gv, FALSE);
2418 if (!CvROOT(cv) && !CvXSUB(cv)) {
2422 /* anonymous or undef'd function leaves us no recourse */
2423 if (CvANON(cv) || !(gv = CvGV(cv)))
2424 DIE(aTHX_ "Undefined subroutine called");
2426 /* autoloaded stub? */
2427 if (cv != GvCV(gv)) {
2430 /* should call AUTOLOAD now? */
2433 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2440 sub_name = sv_newmortal();
2441 gv_efullname3(sub_name, gv, Nullch);
2442 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2446 DIE(aTHX_ "Not a CODE reference");
2451 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2452 cv = get_db_sub(&sv, cv);
2454 DIE(aTHX_ "No DBsub routine");
2459 * First we need to check if the sub or method requires locking.
2460 * If so, we gain a lock on the CV, the first argument or the
2461 * stash (for static methods), as appropriate. This has to be
2462 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2463 * reschedule by returning a new op.
2465 MUTEX_LOCK(CvMUTEXP(cv));
2466 if (CvFLAGS(cv) & CVf_LOCKED) {
2468 if (CvFLAGS(cv) & CVf_METHOD) {
2469 if (SP > PL_stack_base + TOPMARK)
2470 sv = *(PL_stack_base + TOPMARK + 1);
2472 AV *av = (AV*)PL_curpad[0];
2473 if (hasargs || !av || AvFILLp(av) < 0
2474 || !(sv = AvARRAY(av)[0]))
2476 MUTEX_UNLOCK(CvMUTEXP(cv));
2477 DIE(aTHX_ "no argument for locked method call");
2484 char *stashname = SvPV(sv, len);
2485 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2491 MUTEX_UNLOCK(CvMUTEXP(cv));
2492 mg = condpair_magic(sv);
2493 MUTEX_LOCK(MgMUTEXP(mg));
2494 if (MgOWNER(mg) == thr)
2495 MUTEX_UNLOCK(MgMUTEXP(mg));
2498 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2500 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2502 MUTEX_UNLOCK(MgMUTEXP(mg));
2503 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2505 MUTEX_LOCK(CvMUTEXP(cv));
2508 * Now we have permission to enter the sub, we must distinguish
2509 * four cases. (0) It's an XSUB (in which case we don't care
2510 * about ownership); (1) it's ours already (and we're recursing);
2511 * (2) it's free (but we may already be using a cached clone);
2512 * (3) another thread owns it. Case (1) is easy: we just use it.
2513 * Case (2) means we look for a clone--if we have one, use it
2514 * otherwise grab ownership of cv. Case (3) means we look for a
2515 * clone (for non-XSUBs) and have to create one if we don't
2517 * Why look for a clone in case (2) when we could just grab
2518 * ownership of cv straight away? Well, we could be recursing,
2519 * i.e. we originally tried to enter cv while another thread
2520 * owned it (hence we used a clone) but it has been freed up
2521 * and we're now recursing into it. It may or may not be "better"
2522 * to use the clone but at least CvDEPTH can be trusted.
2524 if (CvOWNER(cv) == thr || CvXSUB(cv))
2525 MUTEX_UNLOCK(CvMUTEXP(cv));
2527 /* Case (2) or (3) */
2531 * XXX Might it be better to release CvMUTEXP(cv) while we
2532 * do the hv_fetch? We might find someone has pinched it
2533 * when we look again, in which case we would be in case
2534 * (3) instead of (2) so we'd have to clone. Would the fact
2535 * that we released the mutex more quickly make up for this?
2537 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2539 /* We already have a clone to use */
2540 MUTEX_UNLOCK(CvMUTEXP(cv));
2542 DEBUG_S(PerlIO_printf(Perl_debug_log,
2543 "entersub: %p already has clone %p:%s\n",
2544 thr, cv, SvPEEK((SV*)cv)));
2547 if (CvDEPTH(cv) == 0)
2548 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2551 /* (2) => grab ownership of cv. (3) => make clone */
2555 MUTEX_UNLOCK(CvMUTEXP(cv));
2556 DEBUG_S(PerlIO_printf(Perl_debug_log,
2557 "entersub: %p grabbing %p:%s in stash %s\n",
2558 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2559 HvNAME(CvSTASH(cv)) : "(none)"));
2562 /* Make a new clone. */
2564 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2565 MUTEX_UNLOCK(CvMUTEXP(cv));
2566 DEBUG_S((PerlIO_printf(Perl_debug_log,
2567 "entersub: %p cloning %p:%s\n",
2568 thr, cv, SvPEEK((SV*)cv))));
2570 * We're creating a new clone so there's no race
2571 * between the original MUTEX_UNLOCK and the
2572 * SvREFCNT_inc since no one will be trying to undef
2573 * it out from underneath us. At least, I don't think
2576 clonecv = cv_clone(cv);
2577 SvREFCNT_dec(cv); /* finished with this */
2578 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2579 CvOWNER(clonecv) = thr;
2583 DEBUG_S(if (CvDEPTH(cv) != 0)
2584 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2586 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2589 #endif /* USE_THREADS */
2592 #ifdef PERL_XSUB_OLDSTYLE
2593 if (CvOLDSTYLE(cv)) {
2594 I32 (*fp3)(int,int,int);
2596 register I32 items = SP - MARK;
2597 /* We dont worry to copy from @_. */
2602 PL_stack_sp = mark + 1;
2603 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2604 items = (*fp3)(CvXSUBANY(cv).any_i32,
2605 MARK - PL_stack_base + 1,
2607 PL_stack_sp = PL_stack_base + items;
2610 #endif /* PERL_XSUB_OLDSTYLE */
2612 I32 markix = TOPMARK;
2617 /* Need to copy @_ to stack. Alternative may be to
2618 * switch stack to @_, and copy return values
2619 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2623 av = (AV*)PL_curpad[0];
2625 av = GvAV(PL_defgv);
2626 #endif /* USE_THREADS */
2627 items = AvFILLp(av) + 1; /* @_ is not tieable */
2630 /* Mark is at the end of the stack. */
2632 Copy(AvARRAY(av), SP + 1, items, SV*);
2637 /* We assume first XSUB in &DB::sub is the called one. */
2639 SAVEVPTR(PL_curcop);
2640 PL_curcop = PL_curcopdb;
2643 /* Do we need to open block here? XXXX */
2644 (void)(*CvXSUB(cv))(aTHXo_ cv);
2646 /* Enforce some sanity in scalar context. */
2647 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2648 if (markix > PL_stack_sp - PL_stack_base)
2649 *(PL_stack_base + markix) = &PL_sv_undef;
2651 *(PL_stack_base + markix) = *PL_stack_sp;
2652 PL_stack_sp = PL_stack_base + markix;
2660 register I32 items = SP - MARK;
2661 AV* padlist = CvPADLIST(cv);
2662 SV** svp = AvARRAY(padlist);
2663 push_return(PL_op->op_next);
2664 PUSHBLOCK(cx, CXt_SUB, MARK);
2667 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2668 * that eval'' ops within this sub know the correct lexical space.
2669 * Owing the speed considerations, we choose to search for the cv
2670 * in doeval() instead.
2672 if (CvDEPTH(cv) < 2)
2673 (void)SvREFCNT_inc(cv);
2674 else { /* save temporaries on recursion? */
2675 PERL_STACK_OVERFLOW_CHECK();
2676 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2678 AV *newpad = newAV();
2679 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2680 I32 ix = AvFILLp((AV*)svp[1]);
2681 I32 names_fill = AvFILLp((AV*)svp[0]);
2682 svp = AvARRAY(svp[0]);
2683 for ( ;ix > 0; ix--) {
2684 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2685 char *name = SvPVX(svp[ix]);
2686 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2687 || *name == '&') /* anonymous code? */
2689 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2691 else { /* our own lexical */
2693 av_store(newpad, ix, sv = (SV*)newAV());
2694 else if (*name == '%')
2695 av_store(newpad, ix, sv = (SV*)newHV());
2697 av_store(newpad, ix, sv = NEWSV(0,0));
2701 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2702 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2705 av_store(newpad, ix, sv = NEWSV(0,0));
2709 av = newAV(); /* will be @_ */
2711 av_store(newpad, 0, (SV*)av);
2712 AvFLAGS(av) = AVf_REIFY;
2713 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2714 AvFILLp(padlist) = CvDEPTH(cv);
2715 svp = AvARRAY(padlist);
2720 AV* av = (AV*)PL_curpad[0];
2722 items = AvFILLp(av) + 1;
2724 /* Mark is at the end of the stack. */
2726 Copy(AvARRAY(av), SP + 1, items, SV*);
2731 #endif /* USE_THREADS */
2732 SAVEVPTR(PL_curpad);
2733 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2736 #endif /* USE_THREADS */
2742 DEBUG_S(PerlIO_printf(Perl_debug_log,
2743 "%p entersub preparing @_\n", thr));
2745 av = (AV*)PL_curpad[0];
2747 /* @_ is normally not REAL--this should only ever
2748 * happen when DB::sub() calls things that modify @_ */
2754 cx->blk_sub.savearray = GvAV(PL_defgv);
2755 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2756 #endif /* USE_THREADS */
2757 cx->blk_sub.oldcurpad = PL_curpad;
2758 cx->blk_sub.argarray = av;
2761 if (items > AvMAX(av) + 1) {
2763 if (AvARRAY(av) != ary) {
2764 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2765 SvPVX(av) = (char*)ary;
2767 if (items > AvMAX(av) + 1) {
2768 AvMAX(av) = items - 1;
2769 Renew(ary,items,SV*);
2771 SvPVX(av) = (char*)ary;
2774 Copy(MARK,AvARRAY(av),items,SV*);
2775 AvFILLp(av) = items - 1;
2783 /* warning must come *after* we fully set up the context
2784 * stuff so that __WARN__ handlers can safely dounwind()
2787 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2788 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2789 sub_crush_depth(cv);
2791 DEBUG_S(PerlIO_printf(Perl_debug_log,
2792 "%p entersub returning %p\n", thr, CvSTART(cv)));
2794 RETURNOP(CvSTART(cv));
2799 Perl_sub_crush_depth(pTHX_ CV *cv)
2802 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2804 SV* tmpstr = sv_newmortal();
2805 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2806 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2817 U32 lval = PL_op->op_flags & OPf_MOD;
2818 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2822 elem -= PL_curcop->cop_arybase;
2823 if (SvTYPE(av) != SVt_PVAV)
2825 svp = av_fetch(av, elem, lval && !defer);
2827 if (!svp || *svp == &PL_sv_undef) {
2830 DIE(aTHX_ PL_no_aelem, elem);
2831 lv = sv_newmortal();
2832 sv_upgrade(lv, SVt_PVLV);
2834 sv_magic(lv, Nullsv, 'y', Nullch, 0);
2835 LvTARG(lv) = SvREFCNT_inc(av);
2836 LvTARGOFF(lv) = elem;
2841 if (PL_op->op_private & OPpLVAL_INTRO)
2842 save_aelem(av, elem, svp);
2843 else if (PL_op->op_private & OPpDEREF)
2844 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2846 sv = (svp ? *svp : &PL_sv_undef);
2847 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2848 sv = sv_mortalcopy(sv);
2854 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2860 Perl_croak(aTHX_ PL_no_modify);
2861 if (SvTYPE(sv) < SVt_RV)
2862 sv_upgrade(sv, SVt_RV);
2863 else if (SvTYPE(sv) >= SVt_PV) {
2864 (void)SvOOK_off(sv);
2865 Safefree(SvPVX(sv));
2866 SvLEN(sv) = SvCUR(sv) = 0;
2870 SvRV(sv) = NEWSV(355,0);
2873 SvRV(sv) = (SV*)newAV();
2876 SvRV(sv) = (SV*)newHV();
2891 if (SvTYPE(rsv) == SVt_PVCV) {
2897 SETs(method_common(sv, Null(U32*)));
2904 SV* sv = cSVOP->op_sv;
2905 U32 hash = SvUVX(sv);
2907 XPUSHs(method_common(sv, &hash));
2912 S_method_common(pTHX_ SV* meth, U32* hashp)
2923 name = SvPV(meth, namelen);
2924 sv = *(PL_stack_base + TOPMARK + 1);
2927 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2938 !(packname = SvPV(sv, packlen)) ||
2939 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
2940 !(ob=(SV*)GvIO(iogv)))
2943 ((*(U8*)packname >= 0xc0 && DO_UTF8(sv))
2944 ? !isIDFIRST_utf8((U8*)packname)
2945 : !isIDFIRST(*packname)
2948 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
2949 SvOK(sv) ? "without a package or object reference"
2950 : "on an undefined value");
2952 stash = gv_stashpvn(packname, packlen, TRUE);
2955 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
2958 if (!ob || !(SvOBJECT(ob)
2959 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
2962 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
2966 stash = SvSTASH(ob);
2969 /* shortcut for simple names */
2971 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
2973 gv = (GV*)HeVAL(he);
2974 if (isGV(gv) && GvCV(gv) &&
2975 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
2976 return (SV*)GvCV(gv);
2980 gv = gv_fetchmethod(stash, name);
2987 for (p = name; *p; p++) {
2989 sep = p, leaf = p + 1;
2990 else if (*p == ':' && *(p + 1) == ':')
2991 sep = p, leaf = p + 2;
2993 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
2994 packname = sep ? CopSTASHPV(PL_curcop) : HvNAME(stash);
2995 packlen = strlen(packname);
2999 packlen = sep - name;
3001 gv = gv_fetchpv(packname, 0, SVt_PVHV);
3002 if (gv && isGV(gv)) {
3004 "Can't locate object method \"%s\" via package \"%s\"",
3009 "Can't locate object method \"%s\" via package \"%s\""
3010 " (perhaps you forgot to load \"%s\"?)",
3011 leaf, packname, packname);
3014 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3019 unset_cvowner(pTHXo_ void *cvarg)
3021 register CV* cv = (CV *) cvarg;
3023 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3024 thr, cv, SvPEEK((SV*)cv))));
3025 MUTEX_LOCK(CvMUTEXP(cv));
3026 DEBUG_S(if (CvDEPTH(cv) != 0)
3027 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3029 assert(thr == CvOWNER(cv));
3031 MUTEX_UNLOCK(CvMUTEXP(cv));
3034 #endif /* USE_THREADS */