3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
14 * Awake! Awake! Fear, Fire, Foes! Awake!
19 #define PERL_IN_PP_HOT_C
25 static void unset_cvowner(pTHXo_ void *cvarg);
26 #endif /* USE_THREADS */
37 PL_curcop = (COP*)PL_op;
38 TAINT_NOT; /* Each statement is presumed innocent */
39 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
48 if (PL_op->op_private & OPpLVAL_INTRO)
49 PUSHs(save_scalar(cGVOP_gv));
51 PUSHs(GvSV(cGVOP_gv));
62 PL_curcop = (COP*)PL_op;
68 PUSHMARK(PL_stack_sp);
78 sv_setpvn(TARG,s,len);
90 XPUSHs((SV*)cGVOP_gv);
101 RETURNOP(cLOGOP->op_other);
109 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
111 temp = left; left = right; right = temp;
113 if (PL_tainting && PL_tainted && !SvTAINTED(left))
115 SvSetMagicSV(right, left);
124 RETURNOP(cLOGOP->op_other);
126 RETURNOP(cLOGOP->op_next);
132 TAINT_NOT; /* Each statement is presumed innocent */
133 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
135 oldsave = PL_scopestack[PL_scopestack_ix - 1];
136 LEAVE_SCOPE(oldsave);
142 dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
147 if (SvGMAGICAL(left))
149 if (TARG == right && SvGMAGICAL(right))
152 if (TARG == right && left != right)
153 /* Clone since otherwise we cannot prepend. */
154 rcopy = sv_2mortal(newSVsv(right));
157 sv_setsv(TARG, left);
159 #if defined(PERL_Y2KWARN)
160 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
162 char *s = SvPV(TARG,n);
163 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
164 && (n == 2 || !isDIGIT(s[n-3])))
166 Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s",
167 "about to append an integer to '19'");
174 /* $right = $right . $right; */
176 char *rpv = SvPV(right, rlen);
178 sv_catpvn(TARG, rpv, rlen);
180 else /* $right = $left . $right; */
181 sv_catsv(TARG, rcopy);
184 if (!SvOK(TARG)) /* Avoid warning when concatenating to undef. */
186 /* $other = $left . $right; */
187 /* $left = $left . $right; */
188 sv_catsv(TARG, right);
200 if (PL_op->op_flags & OPf_MOD) {
201 if (PL_op->op_private & OPpLVAL_INTRO)
202 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
203 else if (PL_op->op_private & OPpDEREF) {
205 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
214 tryAMAGICunTARGET(iter, 0);
215 PL_last_in_gv = (GV*)(*PL_stack_sp--);
216 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
217 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
218 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
221 XPUSHs((SV*)PL_last_in_gv);
224 PL_last_in_gv = (GV*)(*PL_stack_sp--);
227 return do_readline();
232 dSP; tryAMAGICbinSET(eq,0);
233 #ifndef NV_PRESERVES_UV
234 if (SvROK(TOPs) && SvROK(TOPm1s)) {
235 SETs(boolSV(SvRV(TOPs) == SvRV(TOPm1s)));
239 #ifdef PERL_PRESERVE_IVUV
242 /* Unless the left argument is integer in range we are going
243 to have to use NV maths. Hence only attempt to coerce the
244 right argument if we know the left is integer. */
247 bool auvok = SvUOK(TOPm1s);
248 bool buvok = SvUOK(TOPs);
250 if (!auvok && !buvok) { /* ## IV == IV ## */
251 IV aiv = SvIVX(TOPm1s);
252 IV biv = SvIVX(TOPs);
255 SETs(boolSV(aiv == biv));
258 if (auvok && buvok) { /* ## UV == UV ## */
259 UV auv = SvUVX(TOPm1s);
260 UV buv = SvUVX(TOPs);
263 SETs(boolSV(auv == buv));
266 { /* ## Mixed IV,UV ## */
270 /* == is commutative so swap if needed (save code) */
272 /* swap. top of stack (b) is the iv */
276 /* As (a) is a UV, it's >0, so it cannot be == */
285 /* As (b) is a UV, it's >0, so it cannot be == */
289 uv = SvUVX(*(SP+1)); /* Do I want TOPp1s() ? */
291 /* we know iv is >= 0 */
292 if (uv > (UV) IV_MAX) {
296 SETs(boolSV((UV)iv == uv));
304 SETs(boolSV(TOPn == value));
312 if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
313 DIE(aTHX_ PL_no_modify);
314 if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
315 SvIVX(TOPs) != IV_MAX)
318 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
320 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
333 RETURNOP(cLOGOP->op_other);
339 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
340 useleft = USE_LEFT(TOPm1s);
341 #ifdef PERL_PRESERVE_IVUV
342 /* We must see if we can perform the addition with integers if possible,
343 as the integer code detects overflow while the NV code doesn't.
344 If either argument hasn't had a numeric conversion yet attempt to get
345 the IV. It's important to do this now, rather than just assuming that
346 it's not IOK as a PV of "9223372036854775806" may not take well to NV
347 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
348 integer in case the second argument is IV=9223372036854775806
349 We can (now) rely on sv_2iv to do the right thing, only setting the
350 public IOK flag if the value in the NV (or PV) slot is truly integer.
352 A side effect is that this also aggressively prefers integer maths over
353 fp maths for integer values.
355 How to detect overflow?
357 C 99 section 6.2.6.1 says
359 The range of nonnegative values of a signed integer type is a subrange
360 of the corresponding unsigned integer type, and the representation of
361 the same value in each type is the same. A computation involving
362 unsigned operands can never overflow, because a result that cannot be
363 represented by the resulting unsigned integer type is reduced modulo
364 the number that is one greater than the largest value that can be
365 represented by the resulting type.
369 which I read as "unsigned ints wrap."
371 signed integer overflow seems to be classed as "exception condition"
373 If an exceptional condition occurs during the evaluation of an
374 expression (that is, if the result is not mathematically defined or not
375 in the range of representable values for its type), the behavior is
378 (6.5, the 5th paragraph)
380 I had assumed that on 2s complement machines signed arithmetic would
381 wrap, hence coded pp_add and pp_subtract on the assumption that
382 everything perl builds on would be happy. After much wailing and
383 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
384 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
385 unsigned code below is actually shorter than the old code. :-)
390 /* Unless the left argument is integer in range we are going to have to
391 use NV maths. Hence only attempt to coerce the right argument if
392 we know the left is integer. */
400 /* left operand is undef, treat as zero. + 0 is identity,
401 Could SETi or SETu right now, but space optimise by not adding
402 lots of code to speed up what is probably a rarish case. */
404 /* Left operand is defined, so is it IV? */
407 if ((auvok = SvUOK(TOPm1s)))
410 register IV aiv = SvIVX(TOPm1s);
413 auvok = 1; /* Now acting as a sign flag. */
414 } else { /* 2s complement assumption for IV_MIN */
422 bool result_good = 0;
425 bool buvok = SvUOK(TOPs);
430 register IV biv = SvIVX(TOPs);
437 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
438 else "IV" now, independant of how it came in.
439 if a, b represents positive, A, B negative, a maps to -A etc
444 all UV maths. negate result if A negative.
445 add if signs same, subtract if signs differ. */
451 /* Must get smaller */
457 /* result really should be -(auv-buv). as its negation
458 of true value, need to swap our result flag */
475 if (result <= (UV)IV_MIN)
478 /* result valid, but out of range for IV. */
483 } /* Overflow, drop through to NVs. */
490 /* left operand is undef, treat as zero. + 0.0 is identity. */
494 SETn( value + TOPn );
502 AV *av = GvAV(cGVOP_gv);
503 U32 lval = PL_op->op_flags & OPf_MOD;
504 SV** svp = av_fetch(av, PL_op->op_private, lval);
505 SV *sv = (svp ? *svp : &PL_sv_undef);
507 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
508 sv = sv_mortalcopy(sv);
517 do_join(TARG, *MARK, MARK, SP);
528 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
529 * will be enough to hold an OP*.
531 SV* sv = sv_newmortal();
532 sv_upgrade(sv, SVt_PVLV);
534 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
542 /* Oversized hot code. */
546 dSP; dMARK; dORIGMARK;
552 if (PL_op->op_flags & OPf_STACKED)
556 if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
558 if (MARK == ORIGMARK) {
559 /* If using default handle then we need to make space to
560 * pass object as 1st arg, so move other args up ...
564 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
568 *MARK = SvTIED_obj((SV*)gv, mg);
571 call_method("PRINT", G_SCALAR);
579 if (!(io = GvIO(gv))) {
580 if ((GvEGV(gv)) && (mg = SvTIED_mg((SV*)GvEGV(gv),'q')))
582 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
583 report_evil_fh(gv, io, PL_op->op_type);
584 SETERRNO(EBADF,RMS$_IFI);
587 else if (!(fp = IoOFP(io))) {
588 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
590 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
591 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
592 report_evil_fh(gv, io, PL_op->op_type);
594 SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
599 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
601 if (!do_print(*MARK, fp))
605 if (!do_print(PL_ofs_sv, fp)) { /* $, */
614 if (!do_print(*MARK, fp))
622 if (PL_ors_sv && SvOK(PL_ors_sv))
623 if (!do_print(PL_ors_sv, fp)) /* $\ */
626 if (IoFLAGS(io) & IOf_FLUSH)
627 if (PerlIO_flush(fp) == EOF)
648 tryAMAGICunDEREF(to_av);
651 if (SvTYPE(av) != SVt_PVAV)
652 DIE(aTHX_ "Not an ARRAY reference");
653 if (PL_op->op_flags & OPf_REF) {
658 if (GIMME == G_SCALAR)
659 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
665 if (SvTYPE(sv) == SVt_PVAV) {
667 if (PL_op->op_flags & OPf_REF) {
672 if (GIMME == G_SCALAR)
673 Perl_croak(aTHX_ "Can't return array to lvalue"
682 if (SvTYPE(sv) != SVt_PVGV) {
686 if (SvGMAGICAL(sv)) {
692 if (PL_op->op_flags & OPf_REF ||
693 PL_op->op_private & HINT_STRICT_REFS)
694 DIE(aTHX_ PL_no_usym, "an ARRAY");
695 if (ckWARN(WARN_UNINITIALIZED))
697 if (GIMME == G_ARRAY) {
704 if ((PL_op->op_flags & OPf_SPECIAL) &&
705 !(PL_op->op_flags & OPf_MOD))
707 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
709 && (!is_gv_magical(sym,len,0)
710 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
716 if (PL_op->op_private & HINT_STRICT_REFS)
717 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
718 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
725 if (PL_op->op_private & OPpLVAL_INTRO)
727 if (PL_op->op_flags & OPf_REF) {
732 if (GIMME == G_SCALAR)
733 Perl_croak(aTHX_ "Can't return array to lvalue"
741 if (GIMME == G_ARRAY) {
742 I32 maxarg = AvFILL(av) + 1;
743 (void)POPs; /* XXXX May be optimized away? */
745 if (SvRMAGICAL(av)) {
747 for (i=0; i < maxarg; i++) {
748 SV **svp = av_fetch(av, i, FALSE);
749 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
753 Copy(AvARRAY(av), SP+1, maxarg, SV*);
759 I32 maxarg = AvFILL(av) + 1;
772 tryAMAGICunDEREF(to_hv);
775 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
776 DIE(aTHX_ "Not a HASH reference");
777 if (PL_op->op_flags & OPf_REF) {
782 if (GIMME == G_SCALAR)
783 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
789 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
791 if (PL_op->op_flags & OPf_REF) {
796 if (GIMME == G_SCALAR)
797 Perl_croak(aTHX_ "Can't return hash to lvalue"
806 if (SvTYPE(sv) != SVt_PVGV) {
810 if (SvGMAGICAL(sv)) {
816 if (PL_op->op_flags & OPf_REF ||
817 PL_op->op_private & HINT_STRICT_REFS)
818 DIE(aTHX_ PL_no_usym, "a HASH");
819 if (ckWARN(WARN_UNINITIALIZED))
821 if (GIMME == G_ARRAY) {
828 if ((PL_op->op_flags & OPf_SPECIAL) &&
829 !(PL_op->op_flags & OPf_MOD))
831 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
833 && (!is_gv_magical(sym,len,0)
834 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
840 if (PL_op->op_private & HINT_STRICT_REFS)
841 DIE(aTHX_ PL_no_symref, sym, "a HASH");
842 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
849 if (PL_op->op_private & OPpLVAL_INTRO)
851 if (PL_op->op_flags & OPf_REF) {
856 if (GIMME == G_SCALAR)
857 Perl_croak(aTHX_ "Can't return hash to lvalue"
865 if (GIMME == G_ARRAY) { /* array wanted */
866 *PL_stack_sp = (SV*)hv;
871 if (SvTYPE(hv) == SVt_PVAV)
872 hv = avhv_keys((AV*)hv);
874 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
875 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
885 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
891 leftop = ((BINOP*)PL_op)->op_last;
893 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
894 leftop = ((LISTOP*)leftop)->op_first;
896 /* Skip PUSHMARK and each element already assigned to. */
897 for (i = lelem - firstlelem; i > 0; i--) {
898 leftop = leftop->op_sibling;
901 if (leftop->op_type != OP_RV2HV)
906 av_fill(ary, 0); /* clear all but the fields hash */
907 if (lastrelem >= relem) {
908 while (relem < lastrelem) { /* gobble up all the rest */
912 /* Avoid a memory leak when avhv_store_ent dies. */
913 tmpstr = sv_newmortal();
914 sv_setsv(tmpstr,relem[1]); /* value */
916 if (avhv_store_ent(ary,relem[0],tmpstr,0))
917 (void)SvREFCNT_inc(tmpstr);
918 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
924 if (relem == lastrelem)
930 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
934 if (ckWARN(WARN_MISC)) {
935 if (relem == firstrelem &&
937 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
938 SvTYPE(SvRV(*relem)) == SVt_PVHV))
940 Perl_warner(aTHX_ WARN_MISC,
941 "Reference found where even-sized list expected");
944 Perl_warner(aTHX_ WARN_MISC,
945 "Odd number of elements in hash assignment");
947 if (SvTYPE(hash) == SVt_PVAV) {
949 tmpstr = sv_newmortal();
950 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
951 (void)SvREFCNT_inc(tmpstr);
952 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
957 tmpstr = NEWSV(29,0);
958 didstore = hv_store_ent(hash,*relem,tmpstr,0);
959 if (SvMAGICAL(hash)) {
960 if (SvSMAGICAL(tmpstr))
973 SV **lastlelem = PL_stack_sp;
974 SV **lastrelem = PL_stack_base + POPMARK;
975 SV **firstrelem = PL_stack_base + POPMARK + 1;
976 SV **firstlelem = lastrelem + 1;
989 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
991 /* If there's a common identifier on both sides we have to take
992 * special care that assigning the identifier on the left doesn't
993 * clobber a value on the right that's used later in the list.
995 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
996 EXTEND_MORTAL(lastrelem - firstrelem + 1);
997 for (relem = firstrelem; relem <= lastrelem; relem++) {
1000 TAINT_NOT; /* Each item is independent */
1001 *relem = sv_mortalcopy(sv);
1011 while (lelem <= lastlelem) {
1012 TAINT_NOT; /* Each item stands on its own, taintwise. */
1014 switch (SvTYPE(sv)) {
1017 magic = SvMAGICAL(ary) != 0;
1018 if (PL_op->op_private & OPpASSIGN_HASH) {
1019 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1025 do_oddball((HV*)ary, relem, firstrelem);
1027 relem = lastrelem + 1;
1032 av_extend(ary, lastrelem - relem);
1034 while (relem <= lastrelem) { /* gobble up all the rest */
1038 sv_setsv(sv,*relem);
1040 didstore = av_store(ary,i++,sv);
1050 case SVt_PVHV: { /* normal hash */
1054 magic = SvMAGICAL(hash) != 0;
1057 while (relem < lastrelem) { /* gobble up all the rest */
1062 sv = &PL_sv_no, relem++;
1063 tmpstr = NEWSV(29,0);
1065 sv_setsv(tmpstr,*relem); /* value */
1066 *(relem++) = tmpstr;
1067 didstore = hv_store_ent(hash,sv,tmpstr,0);
1069 if (SvSMAGICAL(tmpstr))
1076 if (relem == lastrelem) {
1077 do_oddball(hash, relem, firstrelem);
1083 if (SvIMMORTAL(sv)) {
1084 if (relem <= lastrelem)
1088 if (relem <= lastrelem) {
1089 sv_setsv(sv, *relem);
1093 sv_setsv(sv, &PL_sv_undef);
1098 if (PL_delaymagic & ~DM_DELAY) {
1099 if (PL_delaymagic & DM_UID) {
1100 #ifdef HAS_SETRESUID
1101 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1103 # ifdef HAS_SETREUID
1104 (void)setreuid(PL_uid,PL_euid);
1107 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1108 (void)setruid(PL_uid);
1109 PL_delaymagic &= ~DM_RUID;
1111 # endif /* HAS_SETRUID */
1113 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1114 (void)seteuid(PL_uid);
1115 PL_delaymagic &= ~DM_EUID;
1117 # endif /* HAS_SETEUID */
1118 if (PL_delaymagic & DM_UID) {
1119 if (PL_uid != PL_euid)
1120 DIE(aTHX_ "No setreuid available");
1121 (void)PerlProc_setuid(PL_uid);
1123 # endif /* HAS_SETREUID */
1124 #endif /* HAS_SETRESUID */
1125 PL_uid = PerlProc_getuid();
1126 PL_euid = PerlProc_geteuid();
1128 if (PL_delaymagic & DM_GID) {
1129 #ifdef HAS_SETRESGID
1130 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1132 # ifdef HAS_SETREGID
1133 (void)setregid(PL_gid,PL_egid);
1136 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1137 (void)setrgid(PL_gid);
1138 PL_delaymagic &= ~DM_RGID;
1140 # endif /* HAS_SETRGID */
1142 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1143 (void)setegid(PL_gid);
1144 PL_delaymagic &= ~DM_EGID;
1146 # endif /* HAS_SETEGID */
1147 if (PL_delaymagic & DM_GID) {
1148 if (PL_gid != PL_egid)
1149 DIE(aTHX_ "No setregid available");
1150 (void)PerlProc_setgid(PL_gid);
1152 # endif /* HAS_SETREGID */
1153 #endif /* HAS_SETRESGID */
1154 PL_gid = PerlProc_getgid();
1155 PL_egid = PerlProc_getegid();
1157 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1162 if (gimme == G_VOID)
1163 SP = firstrelem - 1;
1164 else if (gimme == G_SCALAR) {
1167 SETi(lastrelem - firstrelem + 1);
1173 SP = firstrelem + (lastlelem - firstlelem);
1174 lelem = firstlelem + (relem - firstrelem);
1176 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1184 register PMOP *pm = cPMOP;
1185 SV *rv = sv_newmortal();
1186 SV *sv = newSVrv(rv, "Regexp");
1187 sv_magic(sv,(SV*)ReREFCNT_inc(pm->op_pmregexp),'r',0,0);
1194 register PMOP *pm = cPMOP;
1199 I32 r_flags = REXEC_CHECKED;
1200 char *truebase; /* Start of string */
1201 register REGEXP *rx = pm->op_pmregexp;
1206 I32 oldsave = PL_savestack_ix;
1207 I32 update_minmatch = 1;
1208 I32 had_zerolen = 0;
1210 if (PL_op->op_flags & OPf_STACKED)
1217 PUTBACK; /* EVAL blocks need stack_sp. */
1218 s = SvPV(TARG, len);
1221 DIE(aTHX_ "panic: pp_match");
1222 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1223 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1226 if (pm->op_pmdynflags & PMdf_USED) {
1228 if (gimme == G_ARRAY)
1233 if (!rx->prelen && PL_curpm) {
1235 rx = pm->op_pmregexp;
1237 if (rx->minlen > len) goto failure;
1241 /* XXXX What part of this is needed with true \G-support? */
1242 if ((global = pm->op_pmflags & PMf_GLOBAL)) {
1244 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1245 MAGIC* mg = mg_find(TARG, 'g');
1246 if (mg && mg->mg_len >= 0) {
1247 if (!(rx->reganch & ROPT_GPOS_SEEN))
1248 rx->endp[0] = rx->startp[0] = mg->mg_len;
1249 else if (rx->reganch & ROPT_ANCH_GPOS) {
1250 r_flags |= REXEC_IGNOREPOS;
1251 rx->endp[0] = rx->startp[0] = mg->mg_len;
1253 minmatch = (mg->mg_flags & MGf_MINMATCH);
1254 update_minmatch = 0;
1258 if ((!global && rx->nparens)
1259 || SvTEMP(TARG) || PL_sawampersand)
1260 r_flags |= REXEC_COPY_STR;
1262 r_flags |= REXEC_SCREAM;
1264 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1265 SAVEINT(PL_multiline);
1266 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1270 if (global && rx->startp[0] != -1) {
1271 t = s = rx->endp[0] + truebase;
1272 if ((s + rx->minlen) > strend)
1274 if (update_minmatch++)
1275 minmatch = had_zerolen;
1277 if (rx->reganch & RE_USE_INTUIT &&
1278 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1279 PL_bostr = truebase;
1280 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1284 if ( (rx->reganch & ROPT_CHECK_ALL)
1286 && ((rx->reganch & ROPT_NOSCAN)
1287 || !((rx->reganch & RE_INTUIT_TAIL)
1288 && (r_flags & REXEC_SCREAM)))
1289 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1292 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1295 if (pm->op_pmflags & PMf_ONCE)
1296 pm->op_pmdynflags |= PMdf_USED;
1305 RX_MATCH_TAINTED_on(rx);
1306 TAINT_IF(RX_MATCH_TAINTED(rx));
1307 if (gimme == G_ARRAY) {
1308 I32 nparens, i, len;
1310 nparens = rx->nparens;
1311 if (global && !nparens)
1315 SPAGAIN; /* EVAL blocks could move the stack. */
1316 EXTEND(SP, nparens + i);
1317 EXTEND_MORTAL(nparens + i);
1318 for (i = !i; i <= nparens; i++) {
1319 PUSHs(sv_newmortal());
1321 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1322 len = rx->endp[i] - rx->startp[i];
1323 s = rx->startp[i] + truebase;
1324 sv_setpvn(*SP, s, len);
1330 had_zerolen = (rx->startp[0] != -1
1331 && rx->startp[0] == rx->endp[0]);
1332 PUTBACK; /* EVAL blocks may use stack */
1333 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1338 LEAVE_SCOPE(oldsave);
1344 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1345 mg = mg_find(TARG, 'g');
1347 sv_magic(TARG, (SV*)0, 'g', Nullch, 0);
1348 mg = mg_find(TARG, 'g');
1350 if (rx->startp[0] != -1) {
1351 mg->mg_len = rx->endp[0];
1352 if (rx->startp[0] == rx->endp[0])
1353 mg->mg_flags |= MGf_MINMATCH;
1355 mg->mg_flags &= ~MGf_MINMATCH;
1358 LEAVE_SCOPE(oldsave);
1362 yup: /* Confirmed by INTUIT */
1364 RX_MATCH_TAINTED_on(rx);
1365 TAINT_IF(RX_MATCH_TAINTED(rx));
1367 if (pm->op_pmflags & PMf_ONCE)
1368 pm->op_pmdynflags |= PMdf_USED;
1369 if (RX_MATCH_COPIED(rx))
1370 Safefree(rx->subbeg);
1371 RX_MATCH_COPIED_off(rx);
1372 rx->subbeg = Nullch;
1374 rx->subbeg = truebase;
1375 rx->startp[0] = s - truebase;
1376 if (DO_UTF8(PL_reg_sv)) {
1377 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1378 rx->endp[0] = t - truebase;
1381 rx->endp[0] = s - truebase + rx->minlen;
1383 rx->sublen = strend - truebase;
1386 if (PL_sawampersand) {
1389 rx->subbeg = savepvn(t, strend - t);
1390 rx->sublen = strend - t;
1391 RX_MATCH_COPIED_on(rx);
1392 off = rx->startp[0] = s - t;
1393 rx->endp[0] = off + rx->minlen;
1395 else { /* startp/endp are used by @- @+. */
1396 rx->startp[0] = s - truebase;
1397 rx->endp[0] = s - truebase + rx->minlen;
1399 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1400 LEAVE_SCOPE(oldsave);
1405 if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
1406 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1407 MAGIC* mg = mg_find(TARG, 'g');
1412 LEAVE_SCOPE(oldsave);
1413 if (gimme == G_ARRAY)
1419 Perl_do_readline(pTHX)
1421 dSP; dTARGETSTACKED;
1426 register IO *io = GvIO(PL_last_in_gv);
1427 register I32 type = PL_op->op_type;
1428 I32 gimme = GIMME_V;
1431 if ((mg = SvTIED_mg((SV*)PL_last_in_gv, 'q'))) {
1433 XPUSHs(SvTIED_obj((SV*)PL_last_in_gv, mg));
1436 call_method("READLINE", gimme);
1439 if (gimme == G_SCALAR)
1440 SvSetMagicSV_nosteal(TARG, TOPs);
1447 if (IoFLAGS(io) & IOf_ARGV) {
1448 if (IoFLAGS(io) & IOf_START) {
1450 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1451 IoFLAGS(io) &= ~IOf_START;
1452 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1453 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1454 SvSETMAGIC(GvSV(PL_last_in_gv));
1459 fp = nextargv(PL_last_in_gv);
1460 if (!fp) { /* Note: fp != IoIFP(io) */
1461 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1464 else if (type == OP_GLOB)
1465 fp = Perl_start_glob(aTHX_ POPs, io);
1467 else if (type == OP_GLOB)
1469 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1470 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1474 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1475 && (!io || !(IoFLAGS(io) & IOf_START))) {
1476 if (type == OP_GLOB)
1477 Perl_warner(aTHX_ WARN_GLOB,
1478 "glob failed (can't start child: %s)",
1481 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1483 if (gimme == G_SCALAR) {
1484 (void)SvOK_off(TARG);
1490 if (gimme == G_SCALAR) {
1494 (void)SvUPGRADE(sv, SVt_PV);
1495 tmplen = SvLEN(sv); /* remember if already alloced */
1497 Sv_Grow(sv, 80); /* try short-buffering it */
1498 if (type == OP_RCATLINE)
1504 sv = sv_2mortal(NEWSV(57, 80));
1508 /* This should not be marked tainted if the fp is marked clean */
1509 #define MAYBE_TAINT_LINE(io, sv) \
1510 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1515 /* delay EOF state for a snarfed empty file */
1516 #define SNARF_EOF(gimme,rs,io,sv) \
1517 (gimme != G_SCALAR || SvCUR(sv) \
1518 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1522 if (!sv_gets(sv, fp, offset)
1523 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1525 PerlIO_clearerr(fp);
1526 if (IoFLAGS(io) & IOf_ARGV) {
1527 fp = nextargv(PL_last_in_gv);
1530 (void)do_close(PL_last_in_gv, FALSE);
1532 else if (type == OP_GLOB) {
1533 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1534 Perl_warner(aTHX_ WARN_GLOB,
1535 "glob failed (child exited with status %d%s)",
1536 (int)(STATUS_CURRENT >> 8),
1537 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1540 if (gimme == G_SCALAR) {
1541 (void)SvOK_off(TARG);
1545 MAYBE_TAINT_LINE(io, sv);
1548 MAYBE_TAINT_LINE(io, sv);
1550 IoFLAGS(io) |= IOf_NOLINE;
1554 if (type == OP_GLOB) {
1557 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1558 tmps = SvEND(sv) - 1;
1559 if (*tmps == *SvPVX(PL_rs)) {
1564 for (tmps = SvPVX(sv); *tmps; tmps++)
1565 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1566 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1568 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1569 (void)POPs; /* Unmatched wildcard? Chuck it... */
1573 if (gimme == G_ARRAY) {
1574 if (SvLEN(sv) - SvCUR(sv) > 20) {
1575 SvLEN_set(sv, SvCUR(sv)+1);
1576 Renew(SvPVX(sv), SvLEN(sv), char);
1578 sv = sv_2mortal(NEWSV(58, 80));
1581 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1582 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1586 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1587 Renew(SvPVX(sv), SvLEN(sv), char);
1596 register PERL_CONTEXT *cx;
1597 I32 gimme = OP_GIMME(PL_op, -1);
1600 if (cxstack_ix >= 0)
1601 gimme = cxstack[cxstack_ix].blk_gimme;
1609 PUSHBLOCK(cx, CXt_BLOCK, SP);
1621 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1622 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1624 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1627 if (SvTYPE(hv) == SVt_PVHV) {
1628 if (PL_op->op_private & OPpLVAL_INTRO)
1629 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
1630 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1631 svp = he ? &HeVAL(he) : 0;
1633 else if (SvTYPE(hv) == SVt_PVAV) {
1634 if (PL_op->op_private & OPpLVAL_INTRO)
1635 DIE(aTHX_ "Can't localize pseudo-hash element");
1636 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1642 if (!svp || *svp == &PL_sv_undef) {
1647 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1649 lv = sv_newmortal();
1650 sv_upgrade(lv, SVt_PVLV);
1652 sv_magic(lv, key2 = newSVsv(keysv), 'y', Nullch, 0);
1653 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1654 LvTARG(lv) = SvREFCNT_inc(hv);
1659 if (PL_op->op_private & OPpLVAL_INTRO) {
1660 if (HvNAME(hv) && isGV(*svp))
1661 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1665 char *key = SvPV(keysv, keylen);
1666 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1668 save_helem(hv, keysv, svp);
1671 else if (PL_op->op_private & OPpDEREF)
1672 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1674 sv = (svp ? *svp : &PL_sv_undef);
1675 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1676 * Pushing the magical RHS on to the stack is useless, since
1677 * that magic is soon destined to be misled by the local(),
1678 * and thus the later pp_sassign() will fail to mg_get() the
1679 * old value. This should also cure problems with delayed
1680 * mg_get()s. GSAR 98-07-03 */
1681 if (!lval && SvGMAGICAL(sv))
1682 sv = sv_mortalcopy(sv);
1690 register PERL_CONTEXT *cx;
1696 if (PL_op->op_flags & OPf_SPECIAL) {
1697 cx = &cxstack[cxstack_ix];
1698 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1703 gimme = OP_GIMME(PL_op, -1);
1705 if (cxstack_ix >= 0)
1706 gimme = cxstack[cxstack_ix].blk_gimme;
1712 if (gimme == G_VOID)
1714 else if (gimme == G_SCALAR) {
1717 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1720 *MARK = sv_mortalcopy(TOPs);
1723 *MARK = &PL_sv_undef;
1727 else if (gimme == G_ARRAY) {
1728 /* in case LEAVE wipes old return values */
1729 for (mark = newsp + 1; mark <= SP; mark++) {
1730 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1731 *mark = sv_mortalcopy(*mark);
1732 TAINT_NOT; /* Each item is independent */
1736 PL_curpm = newpm; /* Don't pop $1 et al till now */
1746 register PERL_CONTEXT *cx;
1752 cx = &cxstack[cxstack_ix];
1753 if (CxTYPE(cx) != CXt_LOOP)
1754 DIE(aTHX_ "panic: pp_iter");
1756 itersvp = CxITERVAR(cx);
1757 av = cx->blk_loop.iterary;
1758 if (SvTYPE(av) != SVt_PVAV) {
1759 /* iterate ($min .. $max) */
1760 if (cx->blk_loop.iterlval) {
1761 /* string increment */
1762 register SV* cur = cx->blk_loop.iterlval;
1764 char *max = SvPV((SV*)av, maxlen);
1765 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1766 #ifndef USE_THREADS /* don't risk potential race */
1767 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1768 /* safe to reuse old SV */
1769 sv_setsv(*itersvp, cur);
1774 /* we need a fresh SV every time so that loop body sees a
1775 * completely new SV for closures/references to work as
1777 SvREFCNT_dec(*itersvp);
1778 *itersvp = newSVsv(cur);
1780 if (strEQ(SvPVX(cur), max))
1781 sv_setiv(cur, 0); /* terminate next time */
1788 /* integer increment */
1789 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1792 #ifndef USE_THREADS /* don't risk potential race */
1793 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1794 /* safe to reuse old SV */
1795 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1800 /* we need a fresh SV every time so that loop body sees a
1801 * completely new SV for closures/references to work as they
1803 SvREFCNT_dec(*itersvp);
1804 *itersvp = newSViv(cx->blk_loop.iterix++);
1810 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1813 SvREFCNT_dec(*itersvp);
1815 if (SvMAGICAL(av) || AvREIFY(av)) {
1816 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1823 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1829 if (av != PL_curstack && sv == &PL_sv_undef) {
1830 SV *lv = cx->blk_loop.iterlval;
1831 if (lv && SvREFCNT(lv) > 1) {
1836 SvREFCNT_dec(LvTARG(lv));
1838 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1839 sv_upgrade(lv, SVt_PVLV);
1841 sv_magic(lv, Nullsv, 'y', Nullch, 0);
1843 LvTARG(lv) = SvREFCNT_inc(av);
1844 LvTARGOFF(lv) = cx->blk_loop.iterix;
1845 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1849 *itersvp = SvREFCNT_inc(sv);
1856 register PMOP *pm = cPMOP;
1872 register REGEXP *rx = pm->op_pmregexp;
1874 int force_on_match = 0;
1875 I32 oldsave = PL_savestack_ix;
1879 /* known replacement string? */
1880 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1881 if (PL_op->op_flags & OPf_STACKED)
1888 do_utf8 = DO_UTF8(PL_reg_sv);
1889 if (SvFAKE(TARG) && SvREADONLY(TARG))
1890 sv_force_normal(TARG);
1891 if (SvREADONLY(TARG)
1892 || (SvTYPE(TARG) > SVt_PVLV
1893 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1894 DIE(aTHX_ PL_no_modify);
1897 s = SvPV(TARG, len);
1898 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1900 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1901 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1908 DIE(aTHX_ "panic: pp_subst");
1911 slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1912 maxiters = 2 * slen + 10; /* We can match twice at each
1913 position, once with zero-length,
1914 second time with non-zero. */
1916 if (!rx->prelen && PL_curpm) {
1918 rx = pm->op_pmregexp;
1920 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1921 ? REXEC_COPY_STR : 0;
1923 r_flags |= REXEC_SCREAM;
1924 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1925 SAVEINT(PL_multiline);
1926 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1929 if (rx->reganch & RE_USE_INTUIT) {
1931 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1935 /* How to do it in subst? */
1936 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1938 && ((rx->reganch & ROPT_NOSCAN)
1939 || !((rx->reganch & RE_INTUIT_TAIL)
1940 && (r_flags & REXEC_SCREAM))))
1945 /* only replace once? */
1946 once = !(rpm->op_pmflags & PMf_GLOBAL);
1948 /* known replacement string? */
1949 c = dstr ? SvPV(dstr, clen) : Nullch;
1951 /* can do inplace substitution? */
1952 if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
1953 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
1954 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1955 r_flags | REXEC_CHECKED))
1959 LEAVE_SCOPE(oldsave);
1962 if (force_on_match) {
1964 s = SvPV_force(TARG, len);
1969 SvSCREAM_off(TARG); /* disable possible screamer */
1971 rxtainted |= RX_MATCH_TAINTED(rx);
1972 m = orig + rx->startp[0];
1973 d = orig + rx->endp[0];
1975 if (m - s > strend - d) { /* faster to shorten from end */
1977 Copy(c, m, clen, char);
1982 Move(d, m, i, char);
1986 SvCUR_set(TARG, m - s);
1989 else if ((i = m - s)) { /* faster from front */
1997 Copy(c, m, clen, char);
2002 Copy(c, d, clen, char);
2007 TAINT_IF(rxtainted & 1);
2013 if (iters++ > maxiters)
2014 DIE(aTHX_ "Substitution loop");
2015 rxtainted |= RX_MATCH_TAINTED(rx);
2016 m = rx->startp[0] + orig;
2020 Move(s, d, i, char);
2024 Copy(c, d, clen, char);
2027 s = rx->endp[0] + orig;
2028 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2030 /* don't match same null twice */
2031 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2034 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2035 Move(s, d, i+1, char); /* include the NUL */
2037 TAINT_IF(rxtainted & 1);
2039 PUSHs(sv_2mortal(newSViv((I32)iters)));
2041 (void)SvPOK_only_UTF8(TARG);
2042 TAINT_IF(rxtainted);
2043 if (SvSMAGICAL(TARG)) {
2049 LEAVE_SCOPE(oldsave);
2053 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2054 r_flags | REXEC_CHECKED))
2058 if (force_on_match) {
2060 s = SvPV_force(TARG, len);
2063 rxtainted |= RX_MATCH_TAINTED(rx);
2064 dstr = NEWSV(25, len);
2065 sv_setpvn(dstr, m, s-m);
2070 register PERL_CONTEXT *cx;
2073 RETURNOP(cPMOP->op_pmreplroot);
2075 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2077 if (iters++ > maxiters)
2078 DIE(aTHX_ "Substitution loop");
2079 rxtainted |= RX_MATCH_TAINTED(rx);
2080 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2085 strend = s + (strend - m);
2087 m = rx->startp[0] + orig;
2088 sv_catpvn(dstr, s, m-s);
2089 s = rx->endp[0] + orig;
2091 sv_catpvn(dstr, c, clen);
2094 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2095 TARG, NULL, r_flags));
2096 sv_catpvn(dstr, s, strend - s);
2098 (void)SvOOK_off(TARG);
2099 Safefree(SvPVX(TARG));
2100 SvPVX(TARG) = SvPVX(dstr);
2101 SvCUR_set(TARG, SvCUR(dstr));
2102 SvLEN_set(TARG, SvLEN(dstr));
2103 isutf8 = DO_UTF8(dstr);
2107 TAINT_IF(rxtainted & 1);
2109 PUSHs(sv_2mortal(newSViv((I32)iters)));
2111 (void)SvPOK_only(TARG);
2114 TAINT_IF(rxtainted);
2117 LEAVE_SCOPE(oldsave);
2126 LEAVE_SCOPE(oldsave);
2135 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2136 ++*PL_markstack_ptr;
2137 LEAVE; /* exit inner scope */
2140 if (PL_stack_base + *PL_markstack_ptr > SP) {
2142 I32 gimme = GIMME_V;
2144 LEAVE; /* exit outer scope */
2145 (void)POPMARK; /* pop src */
2146 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2147 (void)POPMARK; /* pop dst */
2148 SP = PL_stack_base + POPMARK; /* pop original mark */
2149 if (gimme == G_SCALAR) {
2153 else if (gimme == G_ARRAY)
2160 ENTER; /* enter inner scope */
2163 src = PL_stack_base[*PL_markstack_ptr];
2167 RETURNOP(cLOGOP->op_other);
2178 register PERL_CONTEXT *cx;
2184 if (gimme == G_SCALAR) {
2187 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2189 *MARK = SvREFCNT_inc(TOPs);
2194 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2196 *MARK = sv_mortalcopy(sv);
2201 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2205 *MARK = &PL_sv_undef;
2209 else if (gimme == G_ARRAY) {
2210 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2211 if (!SvTEMP(*MARK)) {
2212 *MARK = sv_mortalcopy(*MARK);
2213 TAINT_NOT; /* Each item is independent */
2219 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2220 PL_curpm = newpm; /* ... and pop $1 et al */
2224 return pop_return();
2227 /* This duplicates the above code because the above code must not
2228 * get any slower by more conditions */
2236 register PERL_CONTEXT *cx;
2243 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2244 /* We are an argument to a function or grep().
2245 * This kind of lvalueness was legal before lvalue
2246 * subroutines too, so be backward compatible:
2247 * cannot report errors. */
2249 /* Scalar context *is* possible, on the LHS of -> only,
2250 * as in f()->meth(). But this is not an lvalue. */
2251 if (gimme == G_SCALAR)
2253 if (gimme == G_ARRAY) {
2254 if (!CvLVALUE(cx->blk_sub.cv))
2255 goto temporise_array;
2256 EXTEND_MORTAL(SP - newsp);
2257 for (mark = newsp + 1; mark <= SP; mark++) {
2260 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2261 *mark = sv_mortalcopy(*mark);
2263 /* Can be a localized value subject to deletion. */
2264 PL_tmps_stack[++PL_tmps_ix] = *mark;
2265 (void)SvREFCNT_inc(*mark);
2270 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2271 /* Here we go for robustness, not for speed, so we change all
2272 * the refcounts so the caller gets a live guy. Cannot set
2273 * TEMP, so sv_2mortal is out of question. */
2274 if (!CvLVALUE(cx->blk_sub.cv)) {
2279 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2281 if (gimme == G_SCALAR) {
2285 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2290 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2291 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2293 else { /* Can be a localized value
2294 * subject to deletion. */
2295 PL_tmps_stack[++PL_tmps_ix] = *mark;
2296 (void)SvREFCNT_inc(*mark);
2299 else { /* Should not happen? */
2304 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2305 (MARK > SP ? "Empty array" : "Array"));
2309 else if (gimme == G_ARRAY) {
2310 EXTEND_MORTAL(SP - newsp);
2311 for (mark = newsp + 1; mark <= SP; mark++) {
2312 if (SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2313 /* Might be flattened array after $#array = */
2319 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2320 (*mark != &PL_sv_undef)
2322 ? "a readonly value" : "a temporary")
2323 : "an uninitialized value");
2326 /* Can be a localized value subject to deletion. */
2327 PL_tmps_stack[++PL_tmps_ix] = *mark;
2328 (void)SvREFCNT_inc(*mark);
2334 if (gimme == G_SCALAR) {
2338 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2340 *MARK = SvREFCNT_inc(TOPs);
2345 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2347 *MARK = sv_mortalcopy(sv);
2352 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2356 *MARK = &PL_sv_undef;
2360 else if (gimme == G_ARRAY) {
2362 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2363 if (!SvTEMP(*MARK)) {
2364 *MARK = sv_mortalcopy(*MARK);
2365 TAINT_NOT; /* Each item is independent */
2372 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2373 PL_curpm = newpm; /* ... and pop $1 et al */
2377 return pop_return();
2382 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2384 SV *dbsv = GvSV(PL_DBsub);
2386 if (!PERLDB_SUB_NN) {
2390 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2391 || strEQ(GvNAME(gv), "END")
2392 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2393 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2394 && (gv = (GV*)*svp) ))) {
2395 /* Use GV from the stack as a fallback. */
2396 /* GV is potentially non-unique, or contain different CV. */
2397 SV *tmp = newRV((SV*)cv);
2398 sv_setsv(dbsv, tmp);
2402 gv_efullname3(dbsv, gv, Nullch);
2406 (void)SvUPGRADE(dbsv, SVt_PVIV);
2407 (void)SvIOK_on(dbsv);
2408 SAVEIV(SvIVX(dbsv));
2409 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2413 PL_curcopdb = PL_curcop;
2414 cv = GvCV(PL_DBsub);
2424 register PERL_CONTEXT *cx;
2426 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2429 DIE(aTHX_ "Not a CODE reference");
2430 switch (SvTYPE(sv)) {
2436 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2438 SP = PL_stack_base + POPMARK;
2441 if (SvGMAGICAL(sv)) {
2443 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2446 sym = SvPV(sv, n_a);
2448 DIE(aTHX_ PL_no_usym, "a subroutine");
2449 if (PL_op->op_private & HINT_STRICT_REFS)
2450 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2451 cv = get_cv(sym, TRUE);
2455 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2456 tryAMAGICunDEREF(to_cv);
2459 if (SvTYPE(cv) == SVt_PVCV)
2464 DIE(aTHX_ "Not a CODE reference");
2469 if (!(cv = GvCVu((GV*)sv)))
2470 cv = sv_2cv(sv, &stash, &gv, FALSE);
2483 if (!CvROOT(cv) && !CvXSUB(cv)) {
2487 /* anonymous or undef'd function leaves us no recourse */
2488 if (CvANON(cv) || !(gv = CvGV(cv)))
2489 DIE(aTHX_ "Undefined subroutine called");
2491 /* autoloaded stub? */
2492 if (cv != GvCV(gv)) {
2495 /* should call AUTOLOAD now? */
2498 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2505 sub_name = sv_newmortal();
2506 gv_efullname3(sub_name, gv, Nullch);
2507 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2511 DIE(aTHX_ "Not a CODE reference");
2516 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2517 cv = get_db_sub(&sv, cv);
2519 DIE(aTHX_ "No DBsub routine");
2524 * First we need to check if the sub or method requires locking.
2525 * If so, we gain a lock on the CV, the first argument or the
2526 * stash (for static methods), as appropriate. This has to be
2527 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2528 * reschedule by returning a new op.
2530 MUTEX_LOCK(CvMUTEXP(cv));
2531 if (CvFLAGS(cv) & CVf_LOCKED) {
2533 if (CvFLAGS(cv) & CVf_METHOD) {
2534 if (SP > PL_stack_base + TOPMARK)
2535 sv = *(PL_stack_base + TOPMARK + 1);
2537 AV *av = (AV*)PL_curpad[0];
2538 if (hasargs || !av || AvFILLp(av) < 0
2539 || !(sv = AvARRAY(av)[0]))
2541 MUTEX_UNLOCK(CvMUTEXP(cv));
2542 DIE(aTHX_ "no argument for locked method call");
2549 char *stashname = SvPV(sv, len);
2550 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2556 MUTEX_UNLOCK(CvMUTEXP(cv));
2557 mg = condpair_magic(sv);
2558 MUTEX_LOCK(MgMUTEXP(mg));
2559 if (MgOWNER(mg) == thr)
2560 MUTEX_UNLOCK(MgMUTEXP(mg));
2563 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2565 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2567 MUTEX_UNLOCK(MgMUTEXP(mg));
2568 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2570 MUTEX_LOCK(CvMUTEXP(cv));
2573 * Now we have permission to enter the sub, we must distinguish
2574 * four cases. (0) It's an XSUB (in which case we don't care
2575 * about ownership); (1) it's ours already (and we're recursing);
2576 * (2) it's free (but we may already be using a cached clone);
2577 * (3) another thread owns it. Case (1) is easy: we just use it.
2578 * Case (2) means we look for a clone--if we have one, use it
2579 * otherwise grab ownership of cv. Case (3) means we look for a
2580 * clone (for non-XSUBs) and have to create one if we don't
2582 * Why look for a clone in case (2) when we could just grab
2583 * ownership of cv straight away? Well, we could be recursing,
2584 * i.e. we originally tried to enter cv while another thread
2585 * owned it (hence we used a clone) but it has been freed up
2586 * and we're now recursing into it. It may or may not be "better"
2587 * to use the clone but at least CvDEPTH can be trusted.
2589 if (CvOWNER(cv) == thr || CvXSUB(cv))
2590 MUTEX_UNLOCK(CvMUTEXP(cv));
2592 /* Case (2) or (3) */
2596 * XXX Might it be better to release CvMUTEXP(cv) while we
2597 * do the hv_fetch? We might find someone has pinched it
2598 * when we look again, in which case we would be in case
2599 * (3) instead of (2) so we'd have to clone. Would the fact
2600 * that we released the mutex more quickly make up for this?
2602 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2604 /* We already have a clone to use */
2605 MUTEX_UNLOCK(CvMUTEXP(cv));
2607 DEBUG_S(PerlIO_printf(Perl_debug_log,
2608 "entersub: %p already has clone %p:%s\n",
2609 thr, cv, SvPEEK((SV*)cv)));
2612 if (CvDEPTH(cv) == 0)
2613 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2616 /* (2) => grab ownership of cv. (3) => make clone */
2620 MUTEX_UNLOCK(CvMUTEXP(cv));
2621 DEBUG_S(PerlIO_printf(Perl_debug_log,
2622 "entersub: %p grabbing %p:%s in stash %s\n",
2623 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2624 HvNAME(CvSTASH(cv)) : "(none)"));
2627 /* Make a new clone. */
2629 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2630 MUTEX_UNLOCK(CvMUTEXP(cv));
2631 DEBUG_S((PerlIO_printf(Perl_debug_log,
2632 "entersub: %p cloning %p:%s\n",
2633 thr, cv, SvPEEK((SV*)cv))));
2635 * We're creating a new clone so there's no race
2636 * between the original MUTEX_UNLOCK and the
2637 * SvREFCNT_inc since no one will be trying to undef
2638 * it out from underneath us. At least, I don't think
2641 clonecv = cv_clone(cv);
2642 SvREFCNT_dec(cv); /* finished with this */
2643 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2644 CvOWNER(clonecv) = thr;
2648 DEBUG_S(if (CvDEPTH(cv) != 0)
2649 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2651 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2654 #endif /* USE_THREADS */
2657 #ifdef PERL_XSUB_OLDSTYLE
2658 if (CvOLDSTYLE(cv)) {
2659 I32 (*fp3)(int,int,int);
2661 register I32 items = SP - MARK;
2662 /* We dont worry to copy from @_. */
2667 PL_stack_sp = mark + 1;
2668 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2669 items = (*fp3)(CvXSUBANY(cv).any_i32,
2670 MARK - PL_stack_base + 1,
2672 PL_stack_sp = PL_stack_base + items;
2675 #endif /* PERL_XSUB_OLDSTYLE */
2677 I32 markix = TOPMARK;
2682 /* Need to copy @_ to stack. Alternative may be to
2683 * switch stack to @_, and copy return values
2684 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2688 av = (AV*)PL_curpad[0];
2690 av = GvAV(PL_defgv);
2691 #endif /* USE_THREADS */
2692 items = AvFILLp(av) + 1; /* @_ is not tieable */
2695 /* Mark is at the end of the stack. */
2697 Copy(AvARRAY(av), SP + 1, items, SV*);
2702 /* We assume first XSUB in &DB::sub is the called one. */
2704 SAVEVPTR(PL_curcop);
2705 PL_curcop = PL_curcopdb;
2708 /* Do we need to open block here? XXXX */
2709 (void)(*CvXSUB(cv))(aTHXo_ cv);
2711 /* Enforce some sanity in scalar context. */
2712 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2713 if (markix > PL_stack_sp - PL_stack_base)
2714 *(PL_stack_base + markix) = &PL_sv_undef;
2716 *(PL_stack_base + markix) = *PL_stack_sp;
2717 PL_stack_sp = PL_stack_base + markix;
2725 register I32 items = SP - MARK;
2726 AV* padlist = CvPADLIST(cv);
2727 SV** svp = AvARRAY(padlist);
2728 push_return(PL_op->op_next);
2729 PUSHBLOCK(cx, CXt_SUB, MARK);
2732 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2733 * that eval'' ops within this sub know the correct lexical space.
2734 * Owing the speed considerations, we choose to search for the cv
2735 * in doeval() instead.
2737 if (CvDEPTH(cv) < 2)
2738 (void)SvREFCNT_inc(cv);
2739 else { /* save temporaries on recursion? */
2740 PERL_STACK_OVERFLOW_CHECK();
2741 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2743 AV *newpad = newAV();
2744 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2745 I32 ix = AvFILLp((AV*)svp[1]);
2746 I32 names_fill = AvFILLp((AV*)svp[0]);
2747 svp = AvARRAY(svp[0]);
2748 for ( ;ix > 0; ix--) {
2749 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2750 char *name = SvPVX(svp[ix]);
2751 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2752 || *name == '&') /* anonymous code? */
2754 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2756 else { /* our own lexical */
2758 av_store(newpad, ix, sv = (SV*)newAV());
2759 else if (*name == '%')
2760 av_store(newpad, ix, sv = (SV*)newHV());
2762 av_store(newpad, ix, sv = NEWSV(0,0));
2766 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2767 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2770 av_store(newpad, ix, sv = NEWSV(0,0));
2774 av = newAV(); /* will be @_ */
2776 av_store(newpad, 0, (SV*)av);
2777 AvFLAGS(av) = AVf_REIFY;
2778 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2779 AvFILLp(padlist) = CvDEPTH(cv);
2780 svp = AvARRAY(padlist);
2785 AV* av = (AV*)PL_curpad[0];
2787 items = AvFILLp(av) + 1;
2789 /* Mark is at the end of the stack. */
2791 Copy(AvARRAY(av), SP + 1, items, SV*);
2796 #endif /* USE_THREADS */
2797 SAVEVPTR(PL_curpad);
2798 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2801 #endif /* USE_THREADS */
2807 DEBUG_S(PerlIO_printf(Perl_debug_log,
2808 "%p entersub preparing @_\n", thr));
2810 av = (AV*)PL_curpad[0];
2812 /* @_ is normally not REAL--this should only ever
2813 * happen when DB::sub() calls things that modify @_ */
2819 cx->blk_sub.savearray = GvAV(PL_defgv);
2820 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2821 #endif /* USE_THREADS */
2822 cx->blk_sub.oldcurpad = PL_curpad;
2823 cx->blk_sub.argarray = av;
2826 if (items > AvMAX(av) + 1) {
2828 if (AvARRAY(av) != ary) {
2829 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2830 SvPVX(av) = (char*)ary;
2832 if (items > AvMAX(av) + 1) {
2833 AvMAX(av) = items - 1;
2834 Renew(ary,items,SV*);
2836 SvPVX(av) = (char*)ary;
2839 Copy(MARK,AvARRAY(av),items,SV*);
2840 AvFILLp(av) = items - 1;
2848 /* warning must come *after* we fully set up the context
2849 * stuff so that __WARN__ handlers can safely dounwind()
2852 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2853 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2854 sub_crush_depth(cv);
2856 DEBUG_S(PerlIO_printf(Perl_debug_log,
2857 "%p entersub returning %p\n", thr, CvSTART(cv)));
2859 RETURNOP(CvSTART(cv));
2864 Perl_sub_crush_depth(pTHX_ CV *cv)
2867 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2869 SV* tmpstr = sv_newmortal();
2870 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2871 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2881 IV elem = SvIV(elemsv);
2883 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2884 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2887 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2888 Perl_warner(aTHX_ WARN_MISC, "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2890 elem -= PL_curcop->cop_arybase;
2891 if (SvTYPE(av) != SVt_PVAV)
2893 svp = av_fetch(av, elem, lval && !defer);
2895 if (!svp || *svp == &PL_sv_undef) {
2898 DIE(aTHX_ PL_no_aelem, elem);
2899 lv = sv_newmortal();
2900 sv_upgrade(lv, SVt_PVLV);
2902 sv_magic(lv, Nullsv, 'y', Nullch, 0);
2903 LvTARG(lv) = SvREFCNT_inc(av);
2904 LvTARGOFF(lv) = elem;
2909 if (PL_op->op_private & OPpLVAL_INTRO)
2910 save_aelem(av, elem, svp);
2911 else if (PL_op->op_private & OPpDEREF)
2912 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2914 sv = (svp ? *svp : &PL_sv_undef);
2915 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2916 sv = sv_mortalcopy(sv);
2922 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2928 Perl_croak(aTHX_ PL_no_modify);
2929 if (SvTYPE(sv) < SVt_RV)
2930 sv_upgrade(sv, SVt_RV);
2931 else if (SvTYPE(sv) >= SVt_PV) {
2932 (void)SvOOK_off(sv);
2933 Safefree(SvPVX(sv));
2934 SvLEN(sv) = SvCUR(sv) = 0;
2938 SvRV(sv) = NEWSV(355,0);
2941 SvRV(sv) = (SV*)newAV();
2944 SvRV(sv) = (SV*)newHV();
2959 if (SvTYPE(rsv) == SVt_PVCV) {
2965 SETs(method_common(sv, Null(U32*)));
2972 SV* sv = cSVOP->op_sv;
2973 U32 hash = SvUVX(sv);
2975 XPUSHs(method_common(sv, &hash));
2980 S_method_common(pTHX_ SV* meth, U32* hashp)
2991 name = SvPV(meth, namelen);
2992 sv = *(PL_stack_base + TOPMARK + 1);
2995 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3006 !(packname = SvPV(sv, packlen)) ||
3007 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3008 !(ob=(SV*)GvIO(iogv)))
3011 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3012 ? !isIDFIRST_utf8((U8*)packname)
3013 : !isIDFIRST(*packname)
3016 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3017 SvOK(sv) ? "without a package or object reference"
3018 : "on an undefined value");
3020 stash = gv_stashpvn(packname, packlen, TRUE);
3023 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3026 if (!ob || !(SvOBJECT(ob)
3027 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3030 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3034 stash = SvSTASH(ob);
3037 /* shortcut for simple names */
3039 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3041 gv = (GV*)HeVAL(he);
3042 if (isGV(gv) && GvCV(gv) &&
3043 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3044 return (SV*)GvCV(gv);
3048 gv = gv_fetchmethod(stash, name);
3055 for (p = name; *p; p++) {
3057 sep = p, leaf = p + 1;
3058 else if (*p == ':' && *(p + 1) == ':')
3059 sep = p, leaf = p + 2;
3061 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3062 packname = sep ? CopSTASHPV(PL_curcop) : HvNAME(stash);
3063 packlen = strlen(packname);
3067 packlen = sep - name;
3069 gv = gv_fetchpv(packname, 0, SVt_PVHV);
3070 if (gv && isGV(gv)) {
3072 "Can't locate object method \"%s\" via package \"%s\"",
3077 "Can't locate object method \"%s\" via package \"%s\""
3078 " (perhaps you forgot to load \"%s\"?)",
3079 leaf, packname, packname);
3082 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3087 unset_cvowner(pTHXo_ void *cvarg)
3089 register CV* cv = (CV *) cvarg;
3091 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3092 thr, cv, SvPEEK((SV*)cv))));
3093 MUTEX_LOCK(CvMUTEXP(cv));
3094 DEBUG_S(if (CvDEPTH(cv) != 0)
3095 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3097 assert(thr == CvOWNER(cv));
3099 MUTEX_UNLOCK(CvMUTEXP(cv));
3102 #endif /* USE_THREADS */