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;
1825 /* known replacement string? */
1826 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1827 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: pp_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);
2011 register PERL_CONTEXT *cx;
2014 RETURNOP(cPMOP->op_pmreplroot);
2016 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2018 if (iters++ > maxiters)
2019 DIE(aTHX_ "Substitution loop");
2020 rxtainted |= RX_MATCH_TAINTED(rx);
2021 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2026 strend = s + (strend - m);
2028 m = rx->startp[0] + orig;
2029 sv_catpvn(dstr, s, m-s);
2030 s = rx->endp[0] + orig;
2032 sv_catpvn(dstr, c, clen);
2035 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2036 TARG, NULL, r_flags));
2037 sv_catpvn(dstr, s, strend - s);
2039 (void)SvOOK_off(TARG);
2040 Safefree(SvPVX(TARG));
2041 SvPVX(TARG) = SvPVX(dstr);
2042 SvCUR_set(TARG, SvCUR(dstr));
2043 SvLEN_set(TARG, SvLEN(dstr));
2047 TAINT_IF(rxtainted & 1);
2049 PUSHs(sv_2mortal(newSViv((I32)iters)));
2051 (void)SvPOK_only(TARG);
2052 TAINT_IF(rxtainted);
2055 LEAVE_SCOPE(oldsave);
2064 LEAVE_SCOPE(oldsave);
2073 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2074 ++*PL_markstack_ptr;
2075 LEAVE; /* exit inner scope */
2078 if (PL_stack_base + *PL_markstack_ptr > SP) {
2080 I32 gimme = GIMME_V;
2082 LEAVE; /* exit outer scope */
2083 (void)POPMARK; /* pop src */
2084 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2085 (void)POPMARK; /* pop dst */
2086 SP = PL_stack_base + POPMARK; /* pop original mark */
2087 if (gimme == G_SCALAR) {
2091 else if (gimme == G_ARRAY)
2098 ENTER; /* enter inner scope */
2101 src = PL_stack_base[*PL_markstack_ptr];
2105 RETURNOP(cLOGOP->op_other);
2116 register PERL_CONTEXT *cx;
2122 if (gimme == G_SCALAR) {
2125 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2127 *MARK = SvREFCNT_inc(TOPs);
2132 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2134 *MARK = sv_mortalcopy(sv);
2139 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2143 *MARK = &PL_sv_undef;
2147 else if (gimme == G_ARRAY) {
2148 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2149 if (!SvTEMP(*MARK)) {
2150 *MARK = sv_mortalcopy(*MARK);
2151 TAINT_NOT; /* Each item is independent */
2157 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2158 PL_curpm = newpm; /* ... and pop $1 et al */
2162 return pop_return();
2165 /* This duplicates the above code because the above code must not
2166 * get any slower by more conditions */
2174 register PERL_CONTEXT *cx;
2181 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2182 /* We are an argument to a function or grep().
2183 * This kind of lvalueness was legal before lvalue
2184 * subroutines too, so be backward compatible:
2185 * cannot report errors. */
2187 /* Scalar context *is* possible, on the LHS of -> only,
2188 * as in f()->meth(). But this is not an lvalue. */
2189 if (gimme == G_SCALAR)
2191 if (gimme == G_ARRAY) {
2192 if (!CvLVALUE(cx->blk_sub.cv))
2193 goto temporise_array;
2194 EXTEND_MORTAL(SP - newsp);
2195 for (mark = newsp + 1; mark <= SP; mark++) {
2198 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2199 *mark = sv_mortalcopy(*mark);
2201 /* Can be a localized value subject to deletion. */
2202 PL_tmps_stack[++PL_tmps_ix] = *mark;
2203 (void)SvREFCNT_inc(*mark);
2208 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2209 /* Here we go for robustness, not for speed, so we change all
2210 * the refcounts so the caller gets a live guy. Cannot set
2211 * TEMP, so sv_2mortal is out of question. */
2212 if (!CvLVALUE(cx->blk_sub.cv)) {
2217 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2219 if (gimme == G_SCALAR) {
2223 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2228 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2229 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2231 else { /* Can be a localized value
2232 * subject to deletion. */
2233 PL_tmps_stack[++PL_tmps_ix] = *mark;
2234 (void)SvREFCNT_inc(*mark);
2237 else { /* Should not happen? */
2242 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2243 (MARK > SP ? "Empty array" : "Array"));
2247 else if (gimme == G_ARRAY) {
2248 EXTEND_MORTAL(SP - newsp);
2249 for (mark = newsp + 1; mark <= SP; mark++) {
2250 if (SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2251 /* Might be flattened array after $#array = */
2257 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2258 (*mark != &PL_sv_undef)
2260 ? "a readonly value" : "a temporary")
2261 : "an uninitialized value");
2264 /* Can be a localized value subject to deletion. */
2265 PL_tmps_stack[++PL_tmps_ix] = *mark;
2266 (void)SvREFCNT_inc(*mark);
2272 if (gimme == G_SCALAR) {
2276 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2278 *MARK = SvREFCNT_inc(TOPs);
2283 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2285 *MARK = sv_mortalcopy(sv);
2290 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2294 *MARK = &PL_sv_undef;
2298 else if (gimme == G_ARRAY) {
2300 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2301 if (!SvTEMP(*MARK)) {
2302 *MARK = sv_mortalcopy(*MARK);
2303 TAINT_NOT; /* Each item is independent */
2310 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2311 PL_curpm = newpm; /* ... and pop $1 et al */
2315 return pop_return();
2320 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2322 SV *dbsv = GvSV(PL_DBsub);
2324 if (!PERLDB_SUB_NN) {
2328 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2329 || strEQ(GvNAME(gv), "END")
2330 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2331 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2332 && (gv = (GV*)*svp) ))) {
2333 /* Use GV from the stack as a fallback. */
2334 /* GV is potentially non-unique, or contain different CV. */
2335 SV *tmp = newRV((SV*)cv);
2336 sv_setsv(dbsv, tmp);
2340 gv_efullname3(dbsv, gv, Nullch);
2344 (void)SvUPGRADE(dbsv, SVt_PVIV);
2345 (void)SvIOK_on(dbsv);
2346 SAVEIV(SvIVX(dbsv));
2347 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2351 PL_curcopdb = PL_curcop;
2352 cv = GvCV(PL_DBsub);
2362 register PERL_CONTEXT *cx;
2364 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2367 DIE(aTHX_ "Not a CODE reference");
2368 switch (SvTYPE(sv)) {
2374 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2376 SP = PL_stack_base + POPMARK;
2379 if (SvGMAGICAL(sv)) {
2381 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2384 sym = SvPV(sv, n_a);
2386 DIE(aTHX_ PL_no_usym, "a subroutine");
2387 if (PL_op->op_private & HINT_STRICT_REFS)
2388 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2389 cv = get_cv(sym, TRUE);
2393 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2394 tryAMAGICunDEREF(to_cv);
2397 if (SvTYPE(cv) == SVt_PVCV)
2402 DIE(aTHX_ "Not a CODE reference");
2407 if (!(cv = GvCVu((GV*)sv)))
2408 cv = sv_2cv(sv, &stash, &gv, FALSE);
2421 if (!CvROOT(cv) && !CvXSUB(cv)) {
2425 /* anonymous or undef'd function leaves us no recourse */
2426 if (CvANON(cv) || !(gv = CvGV(cv)))
2427 DIE(aTHX_ "Undefined subroutine called");
2429 /* autoloaded stub? */
2430 if (cv != GvCV(gv)) {
2433 /* should call AUTOLOAD now? */
2436 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2443 sub_name = sv_newmortal();
2444 gv_efullname3(sub_name, gv, Nullch);
2445 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2449 DIE(aTHX_ "Not a CODE reference");
2454 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2455 cv = get_db_sub(&sv, cv);
2457 DIE(aTHX_ "No DBsub routine");
2462 * First we need to check if the sub or method requires locking.
2463 * If so, we gain a lock on the CV, the first argument or the
2464 * stash (for static methods), as appropriate. This has to be
2465 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2466 * reschedule by returning a new op.
2468 MUTEX_LOCK(CvMUTEXP(cv));
2469 if (CvFLAGS(cv) & CVf_LOCKED) {
2471 if (CvFLAGS(cv) & CVf_METHOD) {
2472 if (SP > PL_stack_base + TOPMARK)
2473 sv = *(PL_stack_base + TOPMARK + 1);
2475 AV *av = (AV*)PL_curpad[0];
2476 if (hasargs || !av || AvFILLp(av) < 0
2477 || !(sv = AvARRAY(av)[0]))
2479 MUTEX_UNLOCK(CvMUTEXP(cv));
2480 DIE(aTHX_ "no argument for locked method call");
2487 char *stashname = SvPV(sv, len);
2488 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2494 MUTEX_UNLOCK(CvMUTEXP(cv));
2495 mg = condpair_magic(sv);
2496 MUTEX_LOCK(MgMUTEXP(mg));
2497 if (MgOWNER(mg) == thr)
2498 MUTEX_UNLOCK(MgMUTEXP(mg));
2501 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2503 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2505 MUTEX_UNLOCK(MgMUTEXP(mg));
2506 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2508 MUTEX_LOCK(CvMUTEXP(cv));
2511 * Now we have permission to enter the sub, we must distinguish
2512 * four cases. (0) It's an XSUB (in which case we don't care
2513 * about ownership); (1) it's ours already (and we're recursing);
2514 * (2) it's free (but we may already be using a cached clone);
2515 * (3) another thread owns it. Case (1) is easy: we just use it.
2516 * Case (2) means we look for a clone--if we have one, use it
2517 * otherwise grab ownership of cv. Case (3) means we look for a
2518 * clone (for non-XSUBs) and have to create one if we don't
2520 * Why look for a clone in case (2) when we could just grab
2521 * ownership of cv straight away? Well, we could be recursing,
2522 * i.e. we originally tried to enter cv while another thread
2523 * owned it (hence we used a clone) but it has been freed up
2524 * and we're now recursing into it. It may or may not be "better"
2525 * to use the clone but at least CvDEPTH can be trusted.
2527 if (CvOWNER(cv) == thr || CvXSUB(cv))
2528 MUTEX_UNLOCK(CvMUTEXP(cv));
2530 /* Case (2) or (3) */
2534 * XXX Might it be better to release CvMUTEXP(cv) while we
2535 * do the hv_fetch? We might find someone has pinched it
2536 * when we look again, in which case we would be in case
2537 * (3) instead of (2) so we'd have to clone. Would the fact
2538 * that we released the mutex more quickly make up for this?
2540 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2542 /* We already have a clone to use */
2543 MUTEX_UNLOCK(CvMUTEXP(cv));
2545 DEBUG_S(PerlIO_printf(Perl_debug_log,
2546 "entersub: %p already has clone %p:%s\n",
2547 thr, cv, SvPEEK((SV*)cv)));
2550 if (CvDEPTH(cv) == 0)
2551 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2554 /* (2) => grab ownership of cv. (3) => make clone */
2558 MUTEX_UNLOCK(CvMUTEXP(cv));
2559 DEBUG_S(PerlIO_printf(Perl_debug_log,
2560 "entersub: %p grabbing %p:%s in stash %s\n",
2561 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2562 HvNAME(CvSTASH(cv)) : "(none)"));
2565 /* Make a new clone. */
2567 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2568 MUTEX_UNLOCK(CvMUTEXP(cv));
2569 DEBUG_S((PerlIO_printf(Perl_debug_log,
2570 "entersub: %p cloning %p:%s\n",
2571 thr, cv, SvPEEK((SV*)cv))));
2573 * We're creating a new clone so there's no race
2574 * between the original MUTEX_UNLOCK and the
2575 * SvREFCNT_inc since no one will be trying to undef
2576 * it out from underneath us. At least, I don't think
2579 clonecv = cv_clone(cv);
2580 SvREFCNT_dec(cv); /* finished with this */
2581 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2582 CvOWNER(clonecv) = thr;
2586 DEBUG_S(if (CvDEPTH(cv) != 0)
2587 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2589 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2592 #endif /* USE_THREADS */
2595 #ifdef PERL_XSUB_OLDSTYLE
2596 if (CvOLDSTYLE(cv)) {
2597 I32 (*fp3)(int,int,int);
2599 register I32 items = SP - MARK;
2600 /* We dont worry to copy from @_. */
2605 PL_stack_sp = mark + 1;
2606 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2607 items = (*fp3)(CvXSUBANY(cv).any_i32,
2608 MARK - PL_stack_base + 1,
2610 PL_stack_sp = PL_stack_base + items;
2613 #endif /* PERL_XSUB_OLDSTYLE */
2615 I32 markix = TOPMARK;
2620 /* Need to copy @_ to stack. Alternative may be to
2621 * switch stack to @_, and copy return values
2622 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2626 av = (AV*)PL_curpad[0];
2628 av = GvAV(PL_defgv);
2629 #endif /* USE_THREADS */
2630 items = AvFILLp(av) + 1; /* @_ is not tieable */
2633 /* Mark is at the end of the stack. */
2635 Copy(AvARRAY(av), SP + 1, items, SV*);
2640 /* We assume first XSUB in &DB::sub is the called one. */
2642 SAVEVPTR(PL_curcop);
2643 PL_curcop = PL_curcopdb;
2646 /* Do we need to open block here? XXXX */
2647 (void)(*CvXSUB(cv))(aTHXo_ cv);
2649 /* Enforce some sanity in scalar context. */
2650 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2651 if (markix > PL_stack_sp - PL_stack_base)
2652 *(PL_stack_base + markix) = &PL_sv_undef;
2654 *(PL_stack_base + markix) = *PL_stack_sp;
2655 PL_stack_sp = PL_stack_base + markix;
2663 register I32 items = SP - MARK;
2664 AV* padlist = CvPADLIST(cv);
2665 SV** svp = AvARRAY(padlist);
2666 push_return(PL_op->op_next);
2667 PUSHBLOCK(cx, CXt_SUB, MARK);
2670 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2671 * that eval'' ops within this sub know the correct lexical space.
2672 * Owing the speed considerations, we choose to search for the cv
2673 * in doeval() instead.
2675 if (CvDEPTH(cv) < 2)
2676 (void)SvREFCNT_inc(cv);
2677 else { /* save temporaries on recursion? */
2678 PERL_STACK_OVERFLOW_CHECK();
2679 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2681 AV *newpad = newAV();
2682 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2683 I32 ix = AvFILLp((AV*)svp[1]);
2684 I32 names_fill = AvFILLp((AV*)svp[0]);
2685 svp = AvARRAY(svp[0]);
2686 for ( ;ix > 0; ix--) {
2687 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2688 char *name = SvPVX(svp[ix]);
2689 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2690 || *name == '&') /* anonymous code? */
2692 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2694 else { /* our own lexical */
2696 av_store(newpad, ix, sv = (SV*)newAV());
2697 else if (*name == '%')
2698 av_store(newpad, ix, sv = (SV*)newHV());
2700 av_store(newpad, ix, sv = NEWSV(0,0));
2704 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2705 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2708 av_store(newpad, ix, sv = NEWSV(0,0));
2712 av = newAV(); /* will be @_ */
2714 av_store(newpad, 0, (SV*)av);
2715 AvFLAGS(av) = AVf_REIFY;
2716 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2717 AvFILLp(padlist) = CvDEPTH(cv);
2718 svp = AvARRAY(padlist);
2723 AV* av = (AV*)PL_curpad[0];
2725 items = AvFILLp(av) + 1;
2727 /* Mark is at the end of the stack. */
2729 Copy(AvARRAY(av), SP + 1, items, SV*);
2734 #endif /* USE_THREADS */
2735 SAVEVPTR(PL_curpad);
2736 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2739 #endif /* USE_THREADS */
2745 DEBUG_S(PerlIO_printf(Perl_debug_log,
2746 "%p entersub preparing @_\n", thr));
2748 av = (AV*)PL_curpad[0];
2750 /* @_ is normally not REAL--this should only ever
2751 * happen when DB::sub() calls things that modify @_ */
2757 cx->blk_sub.savearray = GvAV(PL_defgv);
2758 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2759 #endif /* USE_THREADS */
2760 cx->blk_sub.oldcurpad = PL_curpad;
2761 cx->blk_sub.argarray = av;
2764 if (items > AvMAX(av) + 1) {
2766 if (AvARRAY(av) != ary) {
2767 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2768 SvPVX(av) = (char*)ary;
2770 if (items > AvMAX(av) + 1) {
2771 AvMAX(av) = items - 1;
2772 Renew(ary,items,SV*);
2774 SvPVX(av) = (char*)ary;
2777 Copy(MARK,AvARRAY(av),items,SV*);
2778 AvFILLp(av) = items - 1;
2786 /* warning must come *after* we fully set up the context
2787 * stuff so that __WARN__ handlers can safely dounwind()
2790 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2791 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2792 sub_crush_depth(cv);
2794 DEBUG_S(PerlIO_printf(Perl_debug_log,
2795 "%p entersub returning %p\n", thr, CvSTART(cv)));
2797 RETURNOP(CvSTART(cv));
2802 Perl_sub_crush_depth(pTHX_ CV *cv)
2805 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2807 SV* tmpstr = sv_newmortal();
2808 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2809 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2819 IV elem = SvIV(elemsv);
2821 U32 lval = PL_op->op_flags & OPf_MOD;
2822 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2825 if (SvROK(elemsv) && ckWARN(WARN_MISC))
2826 Perl_warner(aTHX_ WARN_MISC, "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2828 elem -= PL_curcop->cop_arybase;
2829 if (SvTYPE(av) != SVt_PVAV)
2831 svp = av_fetch(av, elem, lval && !defer);
2833 if (!svp || *svp == &PL_sv_undef) {
2836 DIE(aTHX_ PL_no_aelem, elem);
2837 lv = sv_newmortal();
2838 sv_upgrade(lv, SVt_PVLV);
2840 sv_magic(lv, Nullsv, 'y', Nullch, 0);
2841 LvTARG(lv) = SvREFCNT_inc(av);
2842 LvTARGOFF(lv) = elem;
2847 if (PL_op->op_private & OPpLVAL_INTRO)
2848 save_aelem(av, elem, svp);
2849 else if (PL_op->op_private & OPpDEREF)
2850 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2852 sv = (svp ? *svp : &PL_sv_undef);
2853 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2854 sv = sv_mortalcopy(sv);
2860 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2866 Perl_croak(aTHX_ PL_no_modify);
2867 if (SvTYPE(sv) < SVt_RV)
2868 sv_upgrade(sv, SVt_RV);
2869 else if (SvTYPE(sv) >= SVt_PV) {
2870 (void)SvOOK_off(sv);
2871 Safefree(SvPVX(sv));
2872 SvLEN(sv) = SvCUR(sv) = 0;
2876 SvRV(sv) = NEWSV(355,0);
2879 SvRV(sv) = (SV*)newAV();
2882 SvRV(sv) = (SV*)newHV();
2897 if (SvTYPE(rsv) == SVt_PVCV) {
2903 SETs(method_common(sv, Null(U32*)));
2910 SV* sv = cSVOP->op_sv;
2911 U32 hash = SvUVX(sv);
2913 XPUSHs(method_common(sv, &hash));
2918 S_method_common(pTHX_ SV* meth, U32* hashp)
2929 name = SvPV(meth, namelen);
2930 sv = *(PL_stack_base + TOPMARK + 1);
2933 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2944 !(packname = SvPV(sv, packlen)) ||
2945 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
2946 !(ob=(SV*)GvIO(iogv)))
2949 ((*(U8*)packname >= 0xc0 && DO_UTF8(sv))
2950 ? !isIDFIRST_utf8((U8*)packname)
2951 : !isIDFIRST(*packname)
2954 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
2955 SvOK(sv) ? "without a package or object reference"
2956 : "on an undefined value");
2958 stash = gv_stashpvn(packname, packlen, TRUE);
2961 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
2964 if (!ob || !(SvOBJECT(ob)
2965 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
2968 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
2972 stash = SvSTASH(ob);
2975 /* shortcut for simple names */
2977 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
2979 gv = (GV*)HeVAL(he);
2980 if (isGV(gv) && GvCV(gv) &&
2981 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
2982 return (SV*)GvCV(gv);
2986 gv = gv_fetchmethod(stash, name);
2993 for (p = name; *p; p++) {
2995 sep = p, leaf = p + 1;
2996 else if (*p == ':' && *(p + 1) == ':')
2997 sep = p, leaf = p + 2;
2999 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3000 packname = sep ? CopSTASHPV(PL_curcop) : HvNAME(stash);
3001 packlen = strlen(packname);
3005 packlen = sep - name;
3007 gv = gv_fetchpv(packname, 0, SVt_PVHV);
3008 if (gv && isGV(gv)) {
3010 "Can't locate object method \"%s\" via package \"%s\"",
3015 "Can't locate object method \"%s\" via package \"%s\""
3016 " (perhaps you forgot to load \"%s\"?)",
3017 leaf, packname, packname);
3020 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3025 unset_cvowner(pTHXo_ void *cvarg)
3027 register CV* cv = (CV *) cvarg;
3029 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3030 thr, cv, SvPEEK((SV*)cv))));
3031 MUTEX_LOCK(CvMUTEXP(cv));
3032 DEBUG_S(if (CvDEPTH(cv) != 0)
3033 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3035 assert(thr == CvOWNER(cv));
3037 MUTEX_UNLOCK(CvMUTEXP(cv));
3040 #endif /* USE_THREADS */