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)
1183 PUTBACK; /* EVAL blocks need stack_sp. */
1184 s = SvPV(TARG, len);
1187 DIE(aTHX_ "panic: pp_match");
1188 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1189 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1192 if (pm->op_pmdynflags & PMdf_USED) {
1194 if (gimme == G_ARRAY)
1199 if (!rx->prelen && PL_curpm) {
1201 rx = pm->op_pmregexp;
1203 if (rx->minlen > len) goto failure;
1207 /* XXXX What part of this is needed with true \G-support? */
1208 if ((global = pm->op_pmflags & PMf_GLOBAL)) {
1210 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1211 MAGIC* mg = mg_find(TARG, 'g');
1212 if (mg && mg->mg_len >= 0) {
1213 if (!(rx->reganch & ROPT_GPOS_SEEN))
1214 rx->endp[0] = rx->startp[0] = mg->mg_len;
1215 else if (rx->reganch & ROPT_ANCH_GPOS) {
1216 r_flags |= REXEC_IGNOREPOS;
1217 rx->endp[0] = rx->startp[0] = mg->mg_len;
1219 minmatch = (mg->mg_flags & MGf_MINMATCH);
1220 update_minmatch = 0;
1224 if ((gimme != G_ARRAY && !global && rx->nparens)
1225 || SvTEMP(TARG) || PL_sawampersand)
1226 r_flags |= REXEC_COPY_STR;
1228 r_flags |= REXEC_SCREAM;
1230 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1231 SAVEINT(PL_multiline);
1232 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1236 if (global && rx->startp[0] != -1) {
1237 t = s = rx->endp[0] + truebase;
1238 if ((s + rx->minlen) > strend)
1240 if (update_minmatch++)
1241 minmatch = had_zerolen;
1243 if (rx->reganch & RE_USE_INTUIT) {
1244 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1248 if ( (rx->reganch & ROPT_CHECK_ALL)
1250 && ((rx->reganch & ROPT_NOSCAN)
1251 || !((rx->reganch & RE_INTUIT_TAIL)
1252 && (r_flags & REXEC_SCREAM)))
1253 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1256 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1259 if (pm->op_pmflags & PMf_ONCE)
1260 pm->op_pmdynflags |= PMdf_USED;
1269 RX_MATCH_TAINTED_on(rx);
1270 TAINT_IF(RX_MATCH_TAINTED(rx));
1271 if (gimme == G_ARRAY) {
1272 I32 nparens, i, len;
1274 nparens = rx->nparens;
1275 if (global && !nparens)
1279 SPAGAIN; /* EVAL blocks could move the stack. */
1280 EXTEND(SP, nparens + i);
1281 EXTEND_MORTAL(nparens + i);
1282 for (i = !i; i <= nparens; i++) {
1283 PUSHs(sv_newmortal());
1285 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1286 len = rx->endp[i] - rx->startp[i];
1287 s = rx->startp[i] + truebase;
1288 sv_setpvn(*SP, s, len);
1294 had_zerolen = (rx->startp[0] != -1
1295 && rx->startp[0] == rx->endp[0]);
1296 PUTBACK; /* EVAL blocks may use stack */
1297 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1302 LEAVE_SCOPE(oldsave);
1308 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1309 mg = mg_find(TARG, 'g');
1311 sv_magic(TARG, (SV*)0, 'g', Nullch, 0);
1312 mg = mg_find(TARG, 'g');
1314 if (rx->startp[0] != -1) {
1315 mg->mg_len = rx->endp[0];
1316 if (rx->startp[0] == rx->endp[0])
1317 mg->mg_flags |= MGf_MINMATCH;
1319 mg->mg_flags &= ~MGf_MINMATCH;
1322 LEAVE_SCOPE(oldsave);
1326 yup: /* Confirmed by INTUIT */
1328 RX_MATCH_TAINTED_on(rx);
1329 TAINT_IF(RX_MATCH_TAINTED(rx));
1331 if (pm->op_pmflags & PMf_ONCE)
1332 pm->op_pmdynflags |= PMdf_USED;
1333 if (RX_MATCH_COPIED(rx))
1334 Safefree(rx->subbeg);
1335 RX_MATCH_COPIED_off(rx);
1336 rx->subbeg = Nullch;
1338 rx->subbeg = truebase;
1339 rx->startp[0] = s - truebase;
1340 rx->endp[0] = s - truebase + rx->minlen;
1341 rx->sublen = strend - truebase;
1344 if (PL_sawampersand) {
1347 rx->subbeg = savepvn(t, strend - t);
1348 rx->sublen = strend - t;
1349 RX_MATCH_COPIED_on(rx);
1350 off = rx->startp[0] = s - t;
1351 rx->endp[0] = off + rx->minlen;
1353 else { /* startp/endp are used by @- @+. */
1354 rx->startp[0] = s - truebase;
1355 rx->endp[0] = s - truebase + rx->minlen;
1357 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1358 LEAVE_SCOPE(oldsave);
1363 if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
1364 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1365 MAGIC* mg = mg_find(TARG, 'g');
1370 LEAVE_SCOPE(oldsave);
1371 if (gimme == G_ARRAY)
1377 Perl_do_readline(pTHX)
1379 dSP; dTARGETSTACKED;
1384 register IO *io = GvIO(PL_last_in_gv);
1385 register I32 type = PL_op->op_type;
1386 I32 gimme = GIMME_V;
1389 if ((mg = SvTIED_mg((SV*)PL_last_in_gv, 'q'))) {
1391 XPUSHs(SvTIED_obj((SV*)PL_last_in_gv, mg));
1394 call_method("READLINE", gimme);
1397 if (gimme == G_SCALAR)
1398 SvSetMagicSV_nosteal(TARG, TOPs);
1405 if (IoFLAGS(io) & IOf_ARGV) {
1406 if (IoFLAGS(io) & IOf_START) {
1408 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1409 IoFLAGS(io) &= ~IOf_START;
1410 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1411 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1412 SvSETMAGIC(GvSV(PL_last_in_gv));
1417 fp = nextargv(PL_last_in_gv);
1418 if (!fp) { /* Note: fp != IoIFP(io) */
1419 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1422 else if (type == OP_GLOB)
1423 fp = Perl_start_glob(aTHX_ POPs, io);
1425 else if (type == OP_GLOB)
1427 else if (ckWARN(WARN_IO) /* stdout/stderr or other write fh */
1428 && (IoTYPE(io) == IoTYPE_WRONLY || fp == PerlIO_stdout()
1429 || fp == PerlIO_stderr()))
1430 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1433 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1434 && (!io || !(IoFLAGS(io) & IOf_START))) {
1435 if (type == OP_GLOB)
1436 Perl_warner(aTHX_ WARN_GLOB,
1437 "glob failed (can't start child: %s)",
1440 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1442 if (gimme == G_SCALAR) {
1443 (void)SvOK_off(TARG);
1449 if (gimme == G_SCALAR) {
1453 (void)SvUPGRADE(sv, SVt_PV);
1454 tmplen = SvLEN(sv); /* remember if already alloced */
1456 Sv_Grow(sv, 80); /* try short-buffering it */
1457 if (type == OP_RCATLINE)
1463 sv = sv_2mortal(NEWSV(57, 80));
1467 /* This should not be marked tainted if the fp is marked clean */
1468 #define MAYBE_TAINT_LINE(io, sv) \
1469 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1474 /* delay EOF state for a snarfed empty file */
1475 #define SNARF_EOF(gimme,rs,io,sv) \
1476 (gimme != G_SCALAR || SvCUR(sv) \
1477 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1480 if (!sv_gets(sv, fp, offset)
1481 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1483 PerlIO_clearerr(fp);
1484 if (IoFLAGS(io) & IOf_ARGV) {
1485 fp = nextargv(PL_last_in_gv);
1488 (void)do_close(PL_last_in_gv, FALSE);
1490 else if (type == OP_GLOB) {
1491 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1492 Perl_warner(aTHX_ WARN_GLOB,
1493 "glob failed (child exited with status %d%s)",
1494 (int)(STATUS_CURRENT >> 8),
1495 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1498 if (gimme == G_SCALAR) {
1499 (void)SvOK_off(TARG);
1502 MAYBE_TAINT_LINE(io, sv);
1505 MAYBE_TAINT_LINE(io, sv);
1507 IoFLAGS(io) |= IOf_NOLINE;
1510 if (type == OP_GLOB) {
1513 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1514 tmps = SvEND(sv) - 1;
1515 if (*tmps == *SvPVX(PL_rs)) {
1520 for (tmps = SvPVX(sv); *tmps; tmps++)
1521 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1522 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1524 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1525 (void)POPs; /* Unmatched wildcard? Chuck it... */
1529 if (gimme == G_ARRAY) {
1530 if (SvLEN(sv) - SvCUR(sv) > 20) {
1531 SvLEN_set(sv, SvCUR(sv)+1);
1532 Renew(SvPVX(sv), SvLEN(sv), char);
1534 sv = sv_2mortal(NEWSV(58, 80));
1537 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1538 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1542 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1543 Renew(SvPVX(sv), SvLEN(sv), char);
1552 register PERL_CONTEXT *cx;
1553 I32 gimme = OP_GIMME(PL_op, -1);
1556 if (cxstack_ix >= 0)
1557 gimme = cxstack[cxstack_ix].blk_gimme;
1565 PUSHBLOCK(cx, CXt_BLOCK, SP);
1577 U32 lval = PL_op->op_flags & OPf_MOD;
1578 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1580 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1583 if (SvTYPE(hv) == SVt_PVHV) {
1584 if (PL_op->op_private & OPpLVAL_INTRO)
1585 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
1586 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1587 svp = he ? &HeVAL(he) : 0;
1589 else if (SvTYPE(hv) == SVt_PVAV) {
1590 if (PL_op->op_private & OPpLVAL_INTRO)
1591 DIE(aTHX_ "Can't localize pseudo-hash element");
1592 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1598 if (!svp || *svp == &PL_sv_undef) {
1603 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1605 lv = sv_newmortal();
1606 sv_upgrade(lv, SVt_PVLV);
1608 sv_magic(lv, key2 = newSVsv(keysv), 'y', Nullch, 0);
1609 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1610 LvTARG(lv) = SvREFCNT_inc(hv);
1615 if (PL_op->op_private & OPpLVAL_INTRO) {
1616 if (HvNAME(hv) && isGV(*svp))
1617 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1621 char *key = SvPV(keysv, keylen);
1622 save_delete(hv, key, keylen);
1624 save_helem(hv, keysv, svp);
1627 else if (PL_op->op_private & OPpDEREF)
1628 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1630 sv = (svp ? *svp : &PL_sv_undef);
1631 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1632 * Pushing the magical RHS on to the stack is useless, since
1633 * that magic is soon destined to be misled by the local(),
1634 * and thus the later pp_sassign() will fail to mg_get() the
1635 * old value. This should also cure problems with delayed
1636 * mg_get()s. GSAR 98-07-03 */
1637 if (!lval && SvGMAGICAL(sv))
1638 sv = sv_mortalcopy(sv);
1646 register PERL_CONTEXT *cx;
1652 if (PL_op->op_flags & OPf_SPECIAL) {
1653 cx = &cxstack[cxstack_ix];
1654 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1659 gimme = OP_GIMME(PL_op, -1);
1661 if (cxstack_ix >= 0)
1662 gimme = cxstack[cxstack_ix].blk_gimme;
1668 if (gimme == G_VOID)
1670 else if (gimme == G_SCALAR) {
1673 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1676 *MARK = sv_mortalcopy(TOPs);
1679 *MARK = &PL_sv_undef;
1683 else if (gimme == G_ARRAY) {
1684 /* in case LEAVE wipes old return values */
1685 for (mark = newsp + 1; mark <= SP; mark++) {
1686 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1687 *mark = sv_mortalcopy(*mark);
1688 TAINT_NOT; /* Each item is independent */
1692 PL_curpm = newpm; /* Don't pop $1 et al till now */
1702 register PERL_CONTEXT *cx;
1708 cx = &cxstack[cxstack_ix];
1709 if (CxTYPE(cx) != CXt_LOOP)
1710 DIE(aTHX_ "panic: pp_iter");
1712 itersvp = CxITERVAR(cx);
1713 av = cx->blk_loop.iterary;
1714 if (SvTYPE(av) != SVt_PVAV) {
1715 /* iterate ($min .. $max) */
1716 if (cx->blk_loop.iterlval) {
1717 /* string increment */
1718 register SV* cur = cx->blk_loop.iterlval;
1720 char *max = SvPV((SV*)av, maxlen);
1721 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1722 #ifndef USE_THREADS /* don't risk potential race */
1723 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1724 /* safe to reuse old SV */
1725 sv_setsv(*itersvp, cur);
1730 /* we need a fresh SV every time so that loop body sees a
1731 * completely new SV for closures/references to work as
1733 SvREFCNT_dec(*itersvp);
1734 *itersvp = newSVsv(cur);
1736 if (strEQ(SvPVX(cur), max))
1737 sv_setiv(cur, 0); /* terminate next time */
1744 /* integer increment */
1745 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1748 #ifndef USE_THREADS /* don't risk potential race */
1749 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1750 /* safe to reuse old SV */
1751 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1756 /* we need a fresh SV every time so that loop body sees a
1757 * completely new SV for closures/references to work as they
1759 SvREFCNT_dec(*itersvp);
1760 *itersvp = newSViv(cx->blk_loop.iterix++);
1766 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1769 SvREFCNT_dec(*itersvp);
1771 if ((sv = SvMAGICAL(av)
1772 ? *av_fetch(av, ++cx->blk_loop.iterix, FALSE)
1773 : AvARRAY(av)[++cx->blk_loop.iterix]))
1777 if (av != PL_curstack && SvIMMORTAL(sv)) {
1778 SV *lv = cx->blk_loop.iterlval;
1779 if (lv && SvREFCNT(lv) > 1) {
1784 SvREFCNT_dec(LvTARG(lv));
1786 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1787 sv_upgrade(lv, SVt_PVLV);
1789 sv_magic(lv, Nullsv, 'y', Nullch, 0);
1791 LvTARG(lv) = SvREFCNT_inc(av);
1792 LvTARGOFF(lv) = cx->blk_loop.iterix;
1793 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1797 *itersvp = SvREFCNT_inc(sv);
1804 register PMOP *pm = cPMOP;
1820 register REGEXP *rx = pm->op_pmregexp;
1822 int force_on_match = 0;
1823 I32 oldsave = PL_savestack_ix;
1827 /* known replacement string? */
1828 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1829 if (PL_op->op_flags & OPf_STACKED)
1836 do_utf8 = DO_UTF8(PL_reg_sv);
1837 if (SvFAKE(TARG) && SvREADONLY(TARG))
1838 sv_force_normal(TARG);
1839 if (SvREADONLY(TARG)
1840 || (SvTYPE(TARG) > SVt_PVLV
1841 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1842 DIE(aTHX_ PL_no_modify);
1845 s = SvPV(TARG, len);
1846 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1848 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1849 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1856 DIE(aTHX_ "panic: pp_subst");
1859 slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1860 maxiters = 2 * slen + 10; /* We can match twice at each
1861 position, once with zero-length,
1862 second time with non-zero. */
1864 if (!rx->prelen && PL_curpm) {
1866 rx = pm->op_pmregexp;
1868 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1869 ? REXEC_COPY_STR : 0;
1871 r_flags |= REXEC_SCREAM;
1872 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1873 SAVEINT(PL_multiline);
1874 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1877 if (rx->reganch & RE_USE_INTUIT) {
1878 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1882 /* How to do it in subst? */
1883 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1885 && ((rx->reganch & ROPT_NOSCAN)
1886 || !((rx->reganch & RE_INTUIT_TAIL)
1887 && (r_flags & REXEC_SCREAM))))
1892 /* only replace once? */
1893 once = !(rpm->op_pmflags & PMf_GLOBAL);
1895 /* known replacement string? */
1896 c = dstr ? SvPV(dstr, clen) : Nullch;
1898 /* can do inplace substitution? */
1899 if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
1900 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
1901 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1902 r_flags | REXEC_CHECKED))
1906 LEAVE_SCOPE(oldsave);
1909 if (force_on_match) {
1911 s = SvPV_force(TARG, len);
1916 SvSCREAM_off(TARG); /* disable possible screamer */
1918 rxtainted |= RX_MATCH_TAINTED(rx);
1919 m = orig + rx->startp[0];
1920 d = orig + rx->endp[0];
1922 if (m - s > strend - d) { /* faster to shorten from end */
1924 Copy(c, m, clen, char);
1929 Move(d, m, i, char);
1933 SvCUR_set(TARG, m - s);
1936 else if ((i = m - s)) { /* faster from front */
1944 Copy(c, m, clen, char);
1949 Copy(c, d, clen, char);
1954 TAINT_IF(rxtainted & 1);
1960 if (iters++ > maxiters)
1961 DIE(aTHX_ "Substitution loop");
1962 rxtainted |= RX_MATCH_TAINTED(rx);
1963 m = rx->startp[0] + orig;
1967 Move(s, d, i, char);
1971 Copy(c, d, clen, char);
1974 s = rx->endp[0] + orig;
1975 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
1977 /* don't match same null twice */
1978 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
1981 SvCUR_set(TARG, d - SvPVX(TARG) + i);
1982 Move(s, d, i+1, char); /* include the NUL */
1984 TAINT_IF(rxtainted & 1);
1986 PUSHs(sv_2mortal(newSViv((I32)iters)));
1988 (void)SvPOK_only_UTF8(TARG);
1989 TAINT_IF(rxtainted);
1990 if (SvSMAGICAL(TARG)) {
1996 LEAVE_SCOPE(oldsave);
2000 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2001 r_flags | REXEC_CHECKED))
2003 if (force_on_match) {
2005 s = SvPV_force(TARG, len);
2008 rxtainted |= RX_MATCH_TAINTED(rx);
2009 dstr = NEWSV(25, len);
2010 sv_setpvn(dstr, m, s-m);
2015 register PERL_CONTEXT *cx;
2018 RETURNOP(cPMOP->op_pmreplroot);
2020 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2022 if (iters++ > maxiters)
2023 DIE(aTHX_ "Substitution loop");
2024 rxtainted |= RX_MATCH_TAINTED(rx);
2025 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2030 strend = s + (strend - m);
2032 m = rx->startp[0] + orig;
2033 sv_catpvn(dstr, s, m-s);
2034 s = rx->endp[0] + orig;
2036 sv_catpvn(dstr, c, clen);
2039 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2040 TARG, NULL, r_flags));
2041 sv_catpvn(dstr, s, strend - s);
2043 (void)SvOOK_off(TARG);
2044 Safefree(SvPVX(TARG));
2045 SvPVX(TARG) = SvPVX(dstr);
2046 SvCUR_set(TARG, SvCUR(dstr));
2047 SvLEN_set(TARG, SvLEN(dstr));
2051 TAINT_IF(rxtainted & 1);
2053 PUSHs(sv_2mortal(newSViv((I32)iters)));
2055 (void)SvPOK_only(TARG);
2056 TAINT_IF(rxtainted);
2059 LEAVE_SCOPE(oldsave);
2068 LEAVE_SCOPE(oldsave);
2077 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2078 ++*PL_markstack_ptr;
2079 LEAVE; /* exit inner scope */
2082 if (PL_stack_base + *PL_markstack_ptr > SP) {
2084 I32 gimme = GIMME_V;
2086 LEAVE; /* exit outer scope */
2087 (void)POPMARK; /* pop src */
2088 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2089 (void)POPMARK; /* pop dst */
2090 SP = PL_stack_base + POPMARK; /* pop original mark */
2091 if (gimme == G_SCALAR) {
2095 else if (gimme == G_ARRAY)
2102 ENTER; /* enter inner scope */
2105 src = PL_stack_base[*PL_markstack_ptr];
2109 RETURNOP(cLOGOP->op_other);
2120 register PERL_CONTEXT *cx;
2126 if (gimme == G_SCALAR) {
2129 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2131 *MARK = SvREFCNT_inc(TOPs);
2136 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2138 *MARK = sv_mortalcopy(sv);
2143 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2147 *MARK = &PL_sv_undef;
2151 else if (gimme == G_ARRAY) {
2152 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2153 if (!SvTEMP(*MARK)) {
2154 *MARK = sv_mortalcopy(*MARK);
2155 TAINT_NOT; /* Each item is independent */
2161 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2162 PL_curpm = newpm; /* ... and pop $1 et al */
2166 return pop_return();
2169 /* This duplicates the above code because the above code must not
2170 * get any slower by more conditions */
2178 register PERL_CONTEXT *cx;
2185 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2186 /* We are an argument to a function or grep().
2187 * This kind of lvalueness was legal before lvalue
2188 * subroutines too, so be backward compatible:
2189 * cannot report errors. */
2191 /* Scalar context *is* possible, on the LHS of -> only,
2192 * as in f()->meth(). But this is not an lvalue. */
2193 if (gimme == G_SCALAR)
2195 if (gimme == G_ARRAY) {
2196 if (!CvLVALUE(cx->blk_sub.cv))
2197 goto temporise_array;
2198 EXTEND_MORTAL(SP - newsp);
2199 for (mark = newsp + 1; mark <= SP; mark++) {
2202 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2203 *mark = sv_mortalcopy(*mark);
2205 /* Can be a localized value subject to deletion. */
2206 PL_tmps_stack[++PL_tmps_ix] = *mark;
2207 (void)SvREFCNT_inc(*mark);
2212 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2213 /* Here we go for robustness, not for speed, so we change all
2214 * the refcounts so the caller gets a live guy. Cannot set
2215 * TEMP, so sv_2mortal is out of question. */
2216 if (!CvLVALUE(cx->blk_sub.cv)) {
2221 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2223 if (gimme == G_SCALAR) {
2227 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2232 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2233 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2235 else { /* Can be a localized value
2236 * subject to deletion. */
2237 PL_tmps_stack[++PL_tmps_ix] = *mark;
2238 (void)SvREFCNT_inc(*mark);
2241 else { /* Should not happen? */
2246 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2247 (MARK > SP ? "Empty array" : "Array"));
2251 else if (gimme == G_ARRAY) {
2252 EXTEND_MORTAL(SP - newsp);
2253 for (mark = newsp + 1; mark <= SP; mark++) {
2254 if (SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2255 /* Might be flattened array after $#array = */
2261 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2262 (*mark != &PL_sv_undef)
2264 ? "a readonly value" : "a temporary")
2265 : "an uninitialized value");
2268 /* Can be a localized value subject to deletion. */
2269 PL_tmps_stack[++PL_tmps_ix] = *mark;
2270 (void)SvREFCNT_inc(*mark);
2276 if (gimme == G_SCALAR) {
2280 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2282 *MARK = SvREFCNT_inc(TOPs);
2287 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2289 *MARK = sv_mortalcopy(sv);
2294 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2298 *MARK = &PL_sv_undef;
2302 else if (gimme == G_ARRAY) {
2304 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2305 if (!SvTEMP(*MARK)) {
2306 *MARK = sv_mortalcopy(*MARK);
2307 TAINT_NOT; /* Each item is independent */
2314 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2315 PL_curpm = newpm; /* ... and pop $1 et al */
2319 return pop_return();
2324 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2326 SV *dbsv = GvSV(PL_DBsub);
2328 if (!PERLDB_SUB_NN) {
2332 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2333 || strEQ(GvNAME(gv), "END")
2334 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2335 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2336 && (gv = (GV*)*svp) ))) {
2337 /* Use GV from the stack as a fallback. */
2338 /* GV is potentially non-unique, or contain different CV. */
2339 SV *tmp = newRV((SV*)cv);
2340 sv_setsv(dbsv, tmp);
2344 gv_efullname3(dbsv, gv, Nullch);
2348 (void)SvUPGRADE(dbsv, SVt_PVIV);
2349 (void)SvIOK_on(dbsv);
2350 SAVEIV(SvIVX(dbsv));
2351 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2355 PL_curcopdb = PL_curcop;
2356 cv = GvCV(PL_DBsub);
2366 register PERL_CONTEXT *cx;
2368 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2371 DIE(aTHX_ "Not a CODE reference");
2372 switch (SvTYPE(sv)) {
2378 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2380 SP = PL_stack_base + POPMARK;
2383 if (SvGMAGICAL(sv)) {
2385 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2388 sym = SvPV(sv, n_a);
2390 DIE(aTHX_ PL_no_usym, "a subroutine");
2391 if (PL_op->op_private & HINT_STRICT_REFS)
2392 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2393 cv = get_cv(sym, TRUE);
2397 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2398 tryAMAGICunDEREF(to_cv);
2401 if (SvTYPE(cv) == SVt_PVCV)
2406 DIE(aTHX_ "Not a CODE reference");
2411 if (!(cv = GvCVu((GV*)sv)))
2412 cv = sv_2cv(sv, &stash, &gv, FALSE);
2425 if (!CvROOT(cv) && !CvXSUB(cv)) {
2429 /* anonymous or undef'd function leaves us no recourse */
2430 if (CvANON(cv) || !(gv = CvGV(cv)))
2431 DIE(aTHX_ "Undefined subroutine called");
2433 /* autoloaded stub? */
2434 if (cv != GvCV(gv)) {
2437 /* should call AUTOLOAD now? */
2440 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2447 sub_name = sv_newmortal();
2448 gv_efullname3(sub_name, gv, Nullch);
2449 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2453 DIE(aTHX_ "Not a CODE reference");
2458 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2459 cv = get_db_sub(&sv, cv);
2461 DIE(aTHX_ "No DBsub routine");
2466 * First we need to check if the sub or method requires locking.
2467 * If so, we gain a lock on the CV, the first argument or the
2468 * stash (for static methods), as appropriate. This has to be
2469 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2470 * reschedule by returning a new op.
2472 MUTEX_LOCK(CvMUTEXP(cv));
2473 if (CvFLAGS(cv) & CVf_LOCKED) {
2475 if (CvFLAGS(cv) & CVf_METHOD) {
2476 if (SP > PL_stack_base + TOPMARK)
2477 sv = *(PL_stack_base + TOPMARK + 1);
2479 AV *av = (AV*)PL_curpad[0];
2480 if (hasargs || !av || AvFILLp(av) < 0
2481 || !(sv = AvARRAY(av)[0]))
2483 MUTEX_UNLOCK(CvMUTEXP(cv));
2484 DIE(aTHX_ "no argument for locked method call");
2491 char *stashname = SvPV(sv, len);
2492 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2498 MUTEX_UNLOCK(CvMUTEXP(cv));
2499 mg = condpair_magic(sv);
2500 MUTEX_LOCK(MgMUTEXP(mg));
2501 if (MgOWNER(mg) == thr)
2502 MUTEX_UNLOCK(MgMUTEXP(mg));
2505 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2507 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2509 MUTEX_UNLOCK(MgMUTEXP(mg));
2510 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2512 MUTEX_LOCK(CvMUTEXP(cv));
2515 * Now we have permission to enter the sub, we must distinguish
2516 * four cases. (0) It's an XSUB (in which case we don't care
2517 * about ownership); (1) it's ours already (and we're recursing);
2518 * (2) it's free (but we may already be using a cached clone);
2519 * (3) another thread owns it. Case (1) is easy: we just use it.
2520 * Case (2) means we look for a clone--if we have one, use it
2521 * otherwise grab ownership of cv. Case (3) means we look for a
2522 * clone (for non-XSUBs) and have to create one if we don't
2524 * Why look for a clone in case (2) when we could just grab
2525 * ownership of cv straight away? Well, we could be recursing,
2526 * i.e. we originally tried to enter cv while another thread
2527 * owned it (hence we used a clone) but it has been freed up
2528 * and we're now recursing into it. It may or may not be "better"
2529 * to use the clone but at least CvDEPTH can be trusted.
2531 if (CvOWNER(cv) == thr || CvXSUB(cv))
2532 MUTEX_UNLOCK(CvMUTEXP(cv));
2534 /* Case (2) or (3) */
2538 * XXX Might it be better to release CvMUTEXP(cv) while we
2539 * do the hv_fetch? We might find someone has pinched it
2540 * when we look again, in which case we would be in case
2541 * (3) instead of (2) so we'd have to clone. Would the fact
2542 * that we released the mutex more quickly make up for this?
2544 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2546 /* We already have a clone to use */
2547 MUTEX_UNLOCK(CvMUTEXP(cv));
2549 DEBUG_S(PerlIO_printf(Perl_debug_log,
2550 "entersub: %p already has clone %p:%s\n",
2551 thr, cv, SvPEEK((SV*)cv)));
2554 if (CvDEPTH(cv) == 0)
2555 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2558 /* (2) => grab ownership of cv. (3) => make clone */
2562 MUTEX_UNLOCK(CvMUTEXP(cv));
2563 DEBUG_S(PerlIO_printf(Perl_debug_log,
2564 "entersub: %p grabbing %p:%s in stash %s\n",
2565 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2566 HvNAME(CvSTASH(cv)) : "(none)"));
2569 /* Make a new clone. */
2571 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2572 MUTEX_UNLOCK(CvMUTEXP(cv));
2573 DEBUG_S((PerlIO_printf(Perl_debug_log,
2574 "entersub: %p cloning %p:%s\n",
2575 thr, cv, SvPEEK((SV*)cv))));
2577 * We're creating a new clone so there's no race
2578 * between the original MUTEX_UNLOCK and the
2579 * SvREFCNT_inc since no one will be trying to undef
2580 * it out from underneath us. At least, I don't think
2583 clonecv = cv_clone(cv);
2584 SvREFCNT_dec(cv); /* finished with this */
2585 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2586 CvOWNER(clonecv) = thr;
2590 DEBUG_S(if (CvDEPTH(cv) != 0)
2591 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2593 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2596 #endif /* USE_THREADS */
2599 #ifdef PERL_XSUB_OLDSTYLE
2600 if (CvOLDSTYLE(cv)) {
2601 I32 (*fp3)(int,int,int);
2603 register I32 items = SP - MARK;
2604 /* We dont worry to copy from @_. */
2609 PL_stack_sp = mark + 1;
2610 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2611 items = (*fp3)(CvXSUBANY(cv).any_i32,
2612 MARK - PL_stack_base + 1,
2614 PL_stack_sp = PL_stack_base + items;
2617 #endif /* PERL_XSUB_OLDSTYLE */
2619 I32 markix = TOPMARK;
2624 /* Need to copy @_ to stack. Alternative may be to
2625 * switch stack to @_, and copy return values
2626 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2630 av = (AV*)PL_curpad[0];
2632 av = GvAV(PL_defgv);
2633 #endif /* USE_THREADS */
2634 items = AvFILLp(av) + 1; /* @_ is not tieable */
2637 /* Mark is at the end of the stack. */
2639 Copy(AvARRAY(av), SP + 1, items, SV*);
2644 /* We assume first XSUB in &DB::sub is the called one. */
2646 SAVEVPTR(PL_curcop);
2647 PL_curcop = PL_curcopdb;
2650 /* Do we need to open block here? XXXX */
2651 (void)(*CvXSUB(cv))(aTHXo_ cv);
2653 /* Enforce some sanity in scalar context. */
2654 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2655 if (markix > PL_stack_sp - PL_stack_base)
2656 *(PL_stack_base + markix) = &PL_sv_undef;
2658 *(PL_stack_base + markix) = *PL_stack_sp;
2659 PL_stack_sp = PL_stack_base + markix;
2667 register I32 items = SP - MARK;
2668 AV* padlist = CvPADLIST(cv);
2669 SV** svp = AvARRAY(padlist);
2670 push_return(PL_op->op_next);
2671 PUSHBLOCK(cx, CXt_SUB, MARK);
2674 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2675 * that eval'' ops within this sub know the correct lexical space.
2676 * Owing the speed considerations, we choose to search for the cv
2677 * in doeval() instead.
2679 if (CvDEPTH(cv) < 2)
2680 (void)SvREFCNT_inc(cv);
2681 else { /* save temporaries on recursion? */
2682 PERL_STACK_OVERFLOW_CHECK();
2683 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2685 AV *newpad = newAV();
2686 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2687 I32 ix = AvFILLp((AV*)svp[1]);
2688 I32 names_fill = AvFILLp((AV*)svp[0]);
2689 svp = AvARRAY(svp[0]);
2690 for ( ;ix > 0; ix--) {
2691 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2692 char *name = SvPVX(svp[ix]);
2693 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2694 || *name == '&') /* anonymous code? */
2696 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2698 else { /* our own lexical */
2700 av_store(newpad, ix, sv = (SV*)newAV());
2701 else if (*name == '%')
2702 av_store(newpad, ix, sv = (SV*)newHV());
2704 av_store(newpad, ix, sv = NEWSV(0,0));
2708 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2709 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2712 av_store(newpad, ix, sv = NEWSV(0,0));
2716 av = newAV(); /* will be @_ */
2718 av_store(newpad, 0, (SV*)av);
2719 AvFLAGS(av) = AVf_REIFY;
2720 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2721 AvFILLp(padlist) = CvDEPTH(cv);
2722 svp = AvARRAY(padlist);
2727 AV* av = (AV*)PL_curpad[0];
2729 items = AvFILLp(av) + 1;
2731 /* Mark is at the end of the stack. */
2733 Copy(AvARRAY(av), SP + 1, items, SV*);
2738 #endif /* USE_THREADS */
2739 SAVEVPTR(PL_curpad);
2740 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2743 #endif /* USE_THREADS */
2749 DEBUG_S(PerlIO_printf(Perl_debug_log,
2750 "%p entersub preparing @_\n", thr));
2752 av = (AV*)PL_curpad[0];
2754 /* @_ is normally not REAL--this should only ever
2755 * happen when DB::sub() calls things that modify @_ */
2761 cx->blk_sub.savearray = GvAV(PL_defgv);
2762 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2763 #endif /* USE_THREADS */
2764 cx->blk_sub.oldcurpad = PL_curpad;
2765 cx->blk_sub.argarray = av;
2768 if (items > AvMAX(av) + 1) {
2770 if (AvARRAY(av) != ary) {
2771 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2772 SvPVX(av) = (char*)ary;
2774 if (items > AvMAX(av) + 1) {
2775 AvMAX(av) = items - 1;
2776 Renew(ary,items,SV*);
2778 SvPVX(av) = (char*)ary;
2781 Copy(MARK,AvARRAY(av),items,SV*);
2782 AvFILLp(av) = items - 1;
2790 /* warning must come *after* we fully set up the context
2791 * stuff so that __WARN__ handlers can safely dounwind()
2794 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2795 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2796 sub_crush_depth(cv);
2798 DEBUG_S(PerlIO_printf(Perl_debug_log,
2799 "%p entersub returning %p\n", thr, CvSTART(cv)));
2801 RETURNOP(CvSTART(cv));
2806 Perl_sub_crush_depth(pTHX_ CV *cv)
2809 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2811 SV* tmpstr = sv_newmortal();
2812 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2813 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2823 IV elem = SvIV(elemsv);
2825 U32 lval = PL_op->op_flags & OPf_MOD;
2826 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2829 if (SvROK(elemsv) && ckWARN(WARN_MISC))
2830 Perl_warner(aTHX_ WARN_MISC, "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2832 elem -= PL_curcop->cop_arybase;
2833 if (SvTYPE(av) != SVt_PVAV)
2835 svp = av_fetch(av, elem, lval && !defer);
2837 if (!svp || *svp == &PL_sv_undef) {
2840 DIE(aTHX_ PL_no_aelem, elem);
2841 lv = sv_newmortal();
2842 sv_upgrade(lv, SVt_PVLV);
2844 sv_magic(lv, Nullsv, 'y', Nullch, 0);
2845 LvTARG(lv) = SvREFCNT_inc(av);
2846 LvTARGOFF(lv) = elem;
2851 if (PL_op->op_private & OPpLVAL_INTRO)
2852 save_aelem(av, elem, svp);
2853 else if (PL_op->op_private & OPpDEREF)
2854 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2856 sv = (svp ? *svp : &PL_sv_undef);
2857 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2858 sv = sv_mortalcopy(sv);
2864 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2870 Perl_croak(aTHX_ PL_no_modify);
2871 if (SvTYPE(sv) < SVt_RV)
2872 sv_upgrade(sv, SVt_RV);
2873 else if (SvTYPE(sv) >= SVt_PV) {
2874 (void)SvOOK_off(sv);
2875 Safefree(SvPVX(sv));
2876 SvLEN(sv) = SvCUR(sv) = 0;
2880 SvRV(sv) = NEWSV(355,0);
2883 SvRV(sv) = (SV*)newAV();
2886 SvRV(sv) = (SV*)newHV();
2901 if (SvTYPE(rsv) == SVt_PVCV) {
2907 SETs(method_common(sv, Null(U32*)));
2914 SV* sv = cSVOP->op_sv;
2915 U32 hash = SvUVX(sv);
2917 XPUSHs(method_common(sv, &hash));
2922 S_method_common(pTHX_ SV* meth, U32* hashp)
2933 name = SvPV(meth, namelen);
2934 sv = *(PL_stack_base + TOPMARK + 1);
2937 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2948 !(packname = SvPV(sv, packlen)) ||
2949 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
2950 !(ob=(SV*)GvIO(iogv)))
2953 ((*(U8*)packname >= 0xc0 && DO_UTF8(sv))
2954 ? !isIDFIRST_utf8((U8*)packname)
2955 : !isIDFIRST(*packname)
2958 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
2959 SvOK(sv) ? "without a package or object reference"
2960 : "on an undefined value");
2962 stash = gv_stashpvn(packname, packlen, TRUE);
2965 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
2968 if (!ob || !(SvOBJECT(ob)
2969 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
2972 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
2976 stash = SvSTASH(ob);
2979 /* shortcut for simple names */
2981 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
2983 gv = (GV*)HeVAL(he);
2984 if (isGV(gv) && GvCV(gv) &&
2985 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
2986 return (SV*)GvCV(gv);
2990 gv = gv_fetchmethod(stash, name);
2997 for (p = name; *p; p++) {
2999 sep = p, leaf = p + 1;
3000 else if (*p == ':' && *(p + 1) == ':')
3001 sep = p, leaf = p + 2;
3003 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3004 packname = sep ? CopSTASHPV(PL_curcop) : HvNAME(stash);
3005 packlen = strlen(packname);
3009 packlen = sep - name;
3011 gv = gv_fetchpv(packname, 0, SVt_PVHV);
3012 if (gv && isGV(gv)) {
3014 "Can't locate object method \"%s\" via package \"%s\"",
3019 "Can't locate object method \"%s\" via package \"%s\""
3020 " (perhaps you forgot to load \"%s\"?)",
3021 leaf, packname, packname);
3024 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3029 unset_cvowner(pTHXo_ void *cvarg)
3031 register CV* cv = (CV *) cvarg;
3033 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3034 thr, cv, SvPEEK((SV*)cv))));
3035 MUTEX_LOCK(CvMUTEXP(cv));
3036 DEBUG_S(if (CvDEPTH(cv) != 0)
3037 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3039 assert(thr == CvOWNER(cv));
3041 MUTEX_UNLOCK(CvMUTEXP(cv));
3044 #endif /* USE_THREADS */