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
24 #ifdef USE_5005THREADS
25 static void unset_cvowner(pTHX_ void *cvarg);
26 #endif /* USE_5005THREADS */
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);
149 char* rpv = SvPV(right, rlen); /* mg_get(right) happens here */
150 bool rbyte = !SvUTF8(right);
152 if (TARG == right && right != left) {
153 right = sv_2mortal(newSVpvn(rpv, rlen));
154 rpv = SvPV(right, rlen); /* no point setting UTF8 here */
158 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
159 lbyte = !SvUTF8(left);
160 sv_setpvn(TARG, lpv, llen);
166 else { /* TARG == left */
167 if (SvGMAGICAL(left))
168 mg_get(left); /* or mg_get(left) may happen here */
171 lpv = SvPV_nomg(left, llen);
172 lbyte = !SvUTF8(left);
175 #if defined(PERL_Y2KWARN)
176 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
177 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
178 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
180 Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s",
181 "about to append an integer to '19'");
186 if (lbyte != rbyte) {
188 sv_utf8_upgrade_nomg(TARG);
190 sv_utf8_upgrade_nomg(right);
191 rpv = SvPV(right, rlen);
194 sv_catpvn_nomg(TARG, rpv, rlen);
205 if (PL_op->op_flags & OPf_MOD) {
206 if (PL_op->op_private & OPpLVAL_INTRO)
207 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
208 else if (PL_op->op_private & OPpDEREF) {
210 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
219 tryAMAGICunTARGET(iter, 0);
220 PL_last_in_gv = (GV*)(*PL_stack_sp--);
221 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
222 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
223 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
226 XPUSHs((SV*)PL_last_in_gv);
229 PL_last_in_gv = (GV*)(*PL_stack_sp--);
232 return do_readline();
237 dSP; tryAMAGICbinSET(eq,0);
238 #ifndef NV_PRESERVES_UV
239 if (SvROK(TOPs) && SvROK(TOPm1s)) {
240 SETs(boolSV(SvRV(TOPs) == SvRV(TOPm1s)));
244 #ifdef PERL_PRESERVE_IVUV
247 /* Unless the left argument is integer in range we are going
248 to have to use NV maths. Hence only attempt to coerce the
249 right argument if we know the left is integer. */
252 bool auvok = SvUOK(TOPm1s);
253 bool buvok = SvUOK(TOPs);
255 if (!auvok && !buvok) { /* ## IV == IV ## */
256 IV aiv = SvIVX(TOPm1s);
257 IV biv = SvIVX(TOPs);
260 SETs(boolSV(aiv == biv));
263 if (auvok && buvok) { /* ## UV == UV ## */
264 UV auv = SvUVX(TOPm1s);
265 UV buv = SvUVX(TOPs);
268 SETs(boolSV(auv == buv));
271 { /* ## Mixed IV,UV ## */
275 /* == is commutative so swap if needed (save code) */
277 /* swap. top of stack (b) is the iv */
281 /* As (a) is a UV, it's >0, so it cannot be == */
290 /* As (b) is a UV, it's >0, so it cannot be == */
294 uv = SvUVX(*(SP+1)); /* Do I want TOPp1s() ? */
296 /* we know iv is >= 0 */
297 SETs(boolSV((UV)iv == uv));
305 SETs(boolSV(TOPn == value));
313 if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
314 DIE(aTHX_ PL_no_modify);
315 if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
316 SvIVX(TOPs) != IV_MAX)
319 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
321 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
334 RETURNOP(cLOGOP->op_other);
340 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
341 useleft = USE_LEFT(TOPm1s);
342 #ifdef PERL_PRESERVE_IVUV
343 /* We must see if we can perform the addition with integers if possible,
344 as the integer code detects overflow while the NV code doesn't.
345 If either argument hasn't had a numeric conversion yet attempt to get
346 the IV. It's important to do this now, rather than just assuming that
347 it's not IOK as a PV of "9223372036854775806" may not take well to NV
348 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
349 integer in case the second argument is IV=9223372036854775806
350 We can (now) rely on sv_2iv to do the right thing, only setting the
351 public IOK flag if the value in the NV (or PV) slot is truly integer.
353 A side effect is that this also aggressively prefers integer maths over
354 fp maths for integer values.
356 How to detect overflow?
358 C 99 section 6.2.6.1 says
360 The range of nonnegative values of a signed integer type is a subrange
361 of the corresponding unsigned integer type, and the representation of
362 the same value in each type is the same. A computation involving
363 unsigned operands can never overflow, because a result that cannot be
364 represented by the resulting unsigned integer type is reduced modulo
365 the number that is one greater than the largest value that can be
366 represented by the resulting type.
370 which I read as "unsigned ints wrap."
372 signed integer overflow seems to be classed as "exception condition"
374 If an exceptional condition occurs during the evaluation of an
375 expression (that is, if the result is not mathematically defined or not
376 in the range of representable values for its type), the behavior is
379 (6.5, the 5th paragraph)
381 I had assumed that on 2s complement machines signed arithmetic would
382 wrap, hence coded pp_add and pp_subtract on the assumption that
383 everything perl builds on would be happy. After much wailing and
384 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
385 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
386 unsigned code below is actually shorter than the old code. :-)
391 /* Unless the left argument is integer in range we are going to have to
392 use NV maths. Hence only attempt to coerce the right argument if
393 we know the left is integer. */
401 /* left operand is undef, treat as zero. + 0 is identity,
402 Could SETi or SETu right now, but space optimise by not adding
403 lots of code to speed up what is probably a rarish case. */
405 /* Left operand is defined, so is it IV? */
408 if ((auvok = SvUOK(TOPm1s)))
411 register IV aiv = SvIVX(TOPm1s);
414 auvok = 1; /* Now acting as a sign flag. */
415 } else { /* 2s complement assumption for IV_MIN */
423 bool result_good = 0;
426 bool buvok = SvUOK(TOPs);
431 register IV biv = SvIVX(TOPs);
438 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
439 else "IV" now, independant of how it came in.
440 if a, b represents positive, A, B negative, a maps to -A etc
445 all UV maths. negate result if A negative.
446 add if signs same, subtract if signs differ. */
452 /* Must get smaller */
458 /* result really should be -(auv-buv). as its negation
459 of true value, need to swap our result flag */
476 if (result <= (UV)IV_MIN)
479 /* result valid, but out of range for IV. */
484 } /* Overflow, drop through to NVs. */
491 /* left operand is undef, treat as zero. + 0.0 is identity. */
495 SETn( value + TOPn );
503 AV *av = GvAV(cGVOP_gv);
504 U32 lval = PL_op->op_flags & OPf_MOD;
505 SV** svp = av_fetch(av, PL_op->op_private, lval);
506 SV *sv = (svp ? *svp : &PL_sv_undef);
508 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
509 sv = sv_mortalcopy(sv);
518 do_join(TARG, *MARK, MARK, SP);
529 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
530 * will be enough to hold an OP*.
532 SV* sv = sv_newmortal();
533 sv_upgrade(sv, SVt_PVLV);
535 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
543 /* Oversized hot code. */
547 dSP; dMARK; dORIGMARK;
553 if (PL_op->op_flags & OPf_STACKED)
558 if (gv && (io = GvIO(gv))
559 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
562 if (MARK == ORIGMARK) {
563 /* If using default handle then we need to make space to
564 * pass object as 1st arg, so move other args up ...
568 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
572 *MARK = SvTIED_obj((SV*)io, mg);
575 call_method("PRINT", G_SCALAR);
583 if (!(io = GvIO(gv))) {
584 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
585 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
587 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
588 report_evil_fh(gv, io, PL_op->op_type);
589 SETERRNO(EBADF,RMS$_IFI);
592 else if (!(fp = IoOFP(io))) {
593 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
595 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
596 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
597 report_evil_fh(gv, io, PL_op->op_type);
599 SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
604 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
606 if (!do_print(*MARK, fp))
610 if (!do_print(PL_ofs_sv, fp)) { /* $, */
619 if (!do_print(*MARK, fp))
627 if (PL_ors_sv && SvOK(PL_ors_sv))
628 if (!do_print(PL_ors_sv, fp)) /* $\ */
631 if (IoFLAGS(io) & IOf_FLUSH)
632 if (PerlIO_flush(fp) == EOF)
653 tryAMAGICunDEREF(to_av);
656 if (SvTYPE(av) != SVt_PVAV)
657 DIE(aTHX_ "Not an ARRAY reference");
658 if (PL_op->op_flags & OPf_REF) {
663 if (GIMME == G_SCALAR)
664 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
670 if (SvTYPE(sv) == SVt_PVAV) {
672 if (PL_op->op_flags & OPf_REF) {
677 if (GIMME == G_SCALAR)
678 Perl_croak(aTHX_ "Can't return array to lvalue"
687 if (SvTYPE(sv) != SVt_PVGV) {
691 if (SvGMAGICAL(sv)) {
697 if (PL_op->op_flags & OPf_REF ||
698 PL_op->op_private & HINT_STRICT_REFS)
699 DIE(aTHX_ PL_no_usym, "an ARRAY");
700 if (ckWARN(WARN_UNINITIALIZED))
702 if (GIMME == G_ARRAY) {
709 if ((PL_op->op_flags & OPf_SPECIAL) &&
710 !(PL_op->op_flags & OPf_MOD))
712 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
714 && (!is_gv_magical(sym,len,0)
715 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
721 if (PL_op->op_private & HINT_STRICT_REFS)
722 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
723 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
730 if (PL_op->op_private & OPpLVAL_INTRO)
732 if (PL_op->op_flags & OPf_REF) {
737 if (GIMME == G_SCALAR)
738 Perl_croak(aTHX_ "Can't return array to lvalue"
746 if (GIMME == G_ARRAY) {
747 I32 maxarg = AvFILL(av) + 1;
748 (void)POPs; /* XXXX May be optimized away? */
750 if (SvRMAGICAL(av)) {
752 for (i=0; i < maxarg; i++) {
753 SV **svp = av_fetch(av, i, FALSE);
754 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
758 Copy(AvARRAY(av), SP+1, maxarg, SV*);
764 I32 maxarg = AvFILL(av) + 1;
777 tryAMAGICunDEREF(to_hv);
780 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
781 DIE(aTHX_ "Not a HASH reference");
782 if (PL_op->op_flags & OPf_REF) {
787 if (GIMME == G_SCALAR)
788 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
794 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
796 if (PL_op->op_flags & OPf_REF) {
801 if (GIMME == G_SCALAR)
802 Perl_croak(aTHX_ "Can't return hash to lvalue"
811 if (SvTYPE(sv) != SVt_PVGV) {
815 if (SvGMAGICAL(sv)) {
821 if (PL_op->op_flags & OPf_REF ||
822 PL_op->op_private & HINT_STRICT_REFS)
823 DIE(aTHX_ PL_no_usym, "a HASH");
824 if (ckWARN(WARN_UNINITIALIZED))
826 if (GIMME == G_ARRAY) {
833 if ((PL_op->op_flags & OPf_SPECIAL) &&
834 !(PL_op->op_flags & OPf_MOD))
836 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
838 && (!is_gv_magical(sym,len,0)
839 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
845 if (PL_op->op_private & HINT_STRICT_REFS)
846 DIE(aTHX_ PL_no_symref, sym, "a HASH");
847 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
854 if (PL_op->op_private & OPpLVAL_INTRO)
856 if (PL_op->op_flags & OPf_REF) {
861 if (GIMME == G_SCALAR)
862 Perl_croak(aTHX_ "Can't return hash to lvalue"
870 if (GIMME == G_ARRAY) { /* array wanted */
871 *PL_stack_sp = (SV*)hv;
876 if (SvTYPE(hv) == SVt_PVAV)
877 hv = avhv_keys((AV*)hv);
879 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
880 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
890 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
896 leftop = ((BINOP*)PL_op)->op_last;
898 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
899 leftop = ((LISTOP*)leftop)->op_first;
901 /* Skip PUSHMARK and each element already assigned to. */
902 for (i = lelem - firstlelem; i > 0; i--) {
903 leftop = leftop->op_sibling;
906 if (leftop->op_type != OP_RV2HV)
911 av_fill(ary, 0); /* clear all but the fields hash */
912 if (lastrelem >= relem) {
913 while (relem < lastrelem) { /* gobble up all the rest */
917 /* Avoid a memory leak when avhv_store_ent dies. */
918 tmpstr = sv_newmortal();
919 sv_setsv(tmpstr,relem[1]); /* value */
921 if (avhv_store_ent(ary,relem[0],tmpstr,0))
922 (void)SvREFCNT_inc(tmpstr);
923 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
929 if (relem == lastrelem)
935 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
939 if (ckWARN(WARN_MISC)) {
940 if (relem == firstrelem &&
942 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
943 SvTYPE(SvRV(*relem)) == SVt_PVHV))
945 Perl_warner(aTHX_ WARN_MISC,
946 "Reference found where even-sized list expected");
949 Perl_warner(aTHX_ WARN_MISC,
950 "Odd number of elements in hash assignment");
952 if (SvTYPE(hash) == SVt_PVAV) {
954 tmpstr = sv_newmortal();
955 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
956 (void)SvREFCNT_inc(tmpstr);
957 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
962 tmpstr = NEWSV(29,0);
963 didstore = hv_store_ent(hash,*relem,tmpstr,0);
964 if (SvMAGICAL(hash)) {
965 if (SvSMAGICAL(tmpstr))
978 SV **lastlelem = PL_stack_sp;
979 SV **lastrelem = PL_stack_base + POPMARK;
980 SV **firstrelem = PL_stack_base + POPMARK + 1;
981 SV **firstlelem = lastrelem + 1;
994 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
996 /* If there's a common identifier on both sides we have to take
997 * special care that assigning the identifier on the left doesn't
998 * clobber a value on the right that's used later in the list.
1000 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1001 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1002 for (relem = firstrelem; relem <= lastrelem; relem++) {
1004 if ((sv = *relem)) {
1005 TAINT_NOT; /* Each item is independent */
1006 *relem = sv_mortalcopy(sv);
1016 while (lelem <= lastlelem) {
1017 TAINT_NOT; /* Each item stands on its own, taintwise. */
1019 switch (SvTYPE(sv)) {
1022 magic = SvMAGICAL(ary) != 0;
1023 if (PL_op->op_private & OPpASSIGN_HASH) {
1024 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1030 do_oddball((HV*)ary, relem, firstrelem);
1032 relem = lastrelem + 1;
1037 av_extend(ary, lastrelem - relem);
1039 while (relem <= lastrelem) { /* gobble up all the rest */
1043 sv_setsv(sv,*relem);
1045 didstore = av_store(ary,i++,sv);
1055 case SVt_PVHV: { /* normal hash */
1059 magic = SvMAGICAL(hash) != 0;
1062 while (relem < lastrelem) { /* gobble up all the rest */
1067 sv = &PL_sv_no, relem++;
1068 tmpstr = NEWSV(29,0);
1070 sv_setsv(tmpstr,*relem); /* value */
1071 *(relem++) = tmpstr;
1072 didstore = hv_store_ent(hash,sv,tmpstr,0);
1074 if (SvSMAGICAL(tmpstr))
1081 if (relem == lastrelem) {
1082 do_oddball(hash, relem, firstrelem);
1088 if (SvIMMORTAL(sv)) {
1089 if (relem <= lastrelem)
1093 if (relem <= lastrelem) {
1094 sv_setsv(sv, *relem);
1098 sv_setsv(sv, &PL_sv_undef);
1103 if (PL_delaymagic & ~DM_DELAY) {
1104 if (PL_delaymagic & DM_UID) {
1105 #ifdef HAS_SETRESUID
1106 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1108 # ifdef HAS_SETREUID
1109 (void)setreuid(PL_uid,PL_euid);
1112 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1113 (void)setruid(PL_uid);
1114 PL_delaymagic &= ~DM_RUID;
1116 # endif /* HAS_SETRUID */
1118 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1119 (void)seteuid(PL_uid);
1120 PL_delaymagic &= ~DM_EUID;
1122 # endif /* HAS_SETEUID */
1123 if (PL_delaymagic & DM_UID) {
1124 if (PL_uid != PL_euid)
1125 DIE(aTHX_ "No setreuid available");
1126 (void)PerlProc_setuid(PL_uid);
1128 # endif /* HAS_SETREUID */
1129 #endif /* HAS_SETRESUID */
1130 PL_uid = PerlProc_getuid();
1131 PL_euid = PerlProc_geteuid();
1133 if (PL_delaymagic & DM_GID) {
1134 #ifdef HAS_SETRESGID
1135 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1137 # ifdef HAS_SETREGID
1138 (void)setregid(PL_gid,PL_egid);
1141 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1142 (void)setrgid(PL_gid);
1143 PL_delaymagic &= ~DM_RGID;
1145 # endif /* HAS_SETRGID */
1147 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1148 (void)setegid(PL_gid);
1149 PL_delaymagic &= ~DM_EGID;
1151 # endif /* HAS_SETEGID */
1152 if (PL_delaymagic & DM_GID) {
1153 if (PL_gid != PL_egid)
1154 DIE(aTHX_ "No setregid available");
1155 (void)PerlProc_setgid(PL_gid);
1157 # endif /* HAS_SETREGID */
1158 #endif /* HAS_SETRESGID */
1159 PL_gid = PerlProc_getgid();
1160 PL_egid = PerlProc_getegid();
1162 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1167 if (gimme == G_VOID)
1168 SP = firstrelem - 1;
1169 else if (gimme == G_SCALAR) {
1172 SETi(lastrelem - firstrelem + 1);
1178 SP = firstrelem + (lastlelem - firstlelem);
1179 lelem = firstlelem + (relem - firstrelem);
1181 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1189 register PMOP *pm = cPMOP;
1190 SV *rv = sv_newmortal();
1191 SV *sv = newSVrv(rv, "Regexp");
1192 if (pm->op_pmdynflags & PMdf_TAINTED)
1194 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1201 register PMOP *pm = cPMOP;
1206 I32 r_flags = REXEC_CHECKED;
1207 char *truebase; /* Start of string */
1208 register REGEXP *rx = PM_GETRE(pm);
1213 I32 oldsave = PL_savestack_ix;
1214 I32 update_minmatch = 1;
1215 I32 had_zerolen = 0;
1217 if (PL_op->op_flags & OPf_STACKED)
1224 PUTBACK; /* EVAL blocks need stack_sp. */
1225 s = SvPV(TARG, len);
1228 DIE(aTHX_ "panic: pp_match");
1229 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1230 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1233 PL_reg_match_utf8 = DO_UTF8(TARG);
1235 if (pm->op_pmdynflags & PMdf_USED) {
1237 if (gimme == G_ARRAY)
1242 if (!rx->prelen && PL_curpm) {
1246 if (rx->minlen > len) goto failure;
1250 /* XXXX What part of this is needed with true \G-support? */
1251 if ((global = pm->op_pmflags & PMf_GLOBAL)) {
1253 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1254 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1255 if (mg && mg->mg_len >= 0) {
1256 if (!(rx->reganch & ROPT_GPOS_SEEN))
1257 rx->endp[0] = rx->startp[0] = mg->mg_len;
1258 else if (rx->reganch & ROPT_ANCH_GPOS) {
1259 r_flags |= REXEC_IGNOREPOS;
1260 rx->endp[0] = rx->startp[0] = mg->mg_len;
1262 minmatch = (mg->mg_flags & MGf_MINMATCH);
1263 update_minmatch = 0;
1267 r_flags |= REXEC_COPY_STR;
1269 r_flags |= REXEC_SCREAM;
1271 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1272 SAVEINT(PL_multiline);
1273 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1277 if (global && rx->startp[0] != -1) {
1278 t = s = rx->endp[0] + truebase;
1279 if ((s + rx->minlen) > strend)
1281 if (update_minmatch++)
1282 minmatch = had_zerolen;
1284 if (rx->reganch & RE_USE_INTUIT &&
1285 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1286 PL_bostr = truebase;
1287 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1291 if ( (rx->reganch & ROPT_CHECK_ALL)
1292 && !((rx->reganch & ROPT_SEOL_SEEN) && PL_multiline)
1293 && ((rx->reganch & ROPT_NOSCAN)
1294 || !((rx->reganch & RE_INTUIT_TAIL)
1295 && (r_flags & REXEC_SCREAM)))
1296 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1299 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1302 if (pm->op_pmflags & PMf_ONCE)
1303 pm->op_pmdynflags |= PMdf_USED;
1312 RX_MATCH_TAINTED_on(rx);
1313 TAINT_IF(RX_MATCH_TAINTED(rx));
1314 if (gimme == G_ARRAY) {
1315 I32 nparens, i, len;
1317 nparens = rx->nparens;
1318 if (global && !nparens)
1322 SPAGAIN; /* EVAL blocks could move the stack. */
1323 EXTEND(SP, nparens + i);
1324 EXTEND_MORTAL(nparens + i);
1325 for (i = !i; i <= nparens; i++) {
1326 PUSHs(sv_newmortal());
1328 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1329 len = rx->endp[i] - rx->startp[i];
1330 s = rx->startp[i] + truebase;
1331 sv_setpvn(*SP, s, len);
1332 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1337 if (pm->op_pmflags & PMf_CONTINUE) {
1339 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1340 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1342 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1343 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1345 if (rx->startp[0] != -1) {
1346 mg->mg_len = rx->endp[0];
1347 if (rx->startp[0] == rx->endp[0])
1348 mg->mg_flags |= MGf_MINMATCH;
1350 mg->mg_flags &= ~MGf_MINMATCH;
1353 had_zerolen = (rx->startp[0] != -1
1354 && rx->startp[0] == rx->endp[0]);
1355 PUTBACK; /* EVAL blocks may use stack */
1356 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1361 LEAVE_SCOPE(oldsave);
1367 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1368 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1370 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1371 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1373 if (rx->startp[0] != -1) {
1374 mg->mg_len = rx->endp[0];
1375 if (rx->startp[0] == rx->endp[0])
1376 mg->mg_flags |= MGf_MINMATCH;
1378 mg->mg_flags &= ~MGf_MINMATCH;
1381 LEAVE_SCOPE(oldsave);
1385 yup: /* Confirmed by INTUIT */
1387 RX_MATCH_TAINTED_on(rx);
1388 TAINT_IF(RX_MATCH_TAINTED(rx));
1390 if (pm->op_pmflags & PMf_ONCE)
1391 pm->op_pmdynflags |= PMdf_USED;
1392 if (RX_MATCH_COPIED(rx))
1393 Safefree(rx->subbeg);
1394 RX_MATCH_COPIED_off(rx);
1395 rx->subbeg = Nullch;
1397 rx->subbeg = truebase;
1398 rx->startp[0] = s - truebase;
1399 if (PL_reg_match_utf8) {
1400 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1401 rx->endp[0] = t - truebase;
1404 rx->endp[0] = s - truebase + rx->minlen;
1406 rx->sublen = strend - truebase;
1410 rx->sublen = strend - t;
1411 rx->subbeg = savepvn(t, rx->sublen);
1412 RX_MATCH_COPIED_on(rx);
1413 rx->startp[0] = s - truebase;
1414 rx->endp[0] = s - truebase + rx->minlen;
1415 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1416 LEAVE_SCOPE(oldsave);
1421 if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
1422 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1423 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1428 LEAVE_SCOPE(oldsave);
1429 if (gimme == G_ARRAY)
1435 Perl_do_readline(pTHX)
1437 dSP; dTARGETSTACKED;
1442 register IO *io = GvIO(PL_last_in_gv);
1443 register I32 type = PL_op->op_type;
1444 I32 gimme = GIMME_V;
1447 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1449 XPUSHs(SvTIED_obj((SV*)io, mg));
1452 call_method("READLINE", gimme);
1455 if (gimme == G_SCALAR)
1456 SvSetMagicSV_nosteal(TARG, TOPs);
1463 if (IoFLAGS(io) & IOf_ARGV) {
1464 if (IoFLAGS(io) & IOf_START) {
1466 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1467 IoFLAGS(io) &= ~IOf_START;
1468 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1469 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1470 SvSETMAGIC(GvSV(PL_last_in_gv));
1475 fp = nextargv(PL_last_in_gv);
1476 if (!fp) { /* Note: fp != IoIFP(io) */
1477 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1480 else if (type == OP_GLOB)
1481 fp = Perl_start_glob(aTHX_ POPs, io);
1483 else if (type == OP_GLOB)
1485 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1486 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1490 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1491 && (!io || !(IoFLAGS(io) & IOf_START))) {
1492 if (type == OP_GLOB)
1493 Perl_warner(aTHX_ WARN_GLOB,
1494 "glob failed (can't start child: %s)",
1497 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1499 if (gimme == G_SCALAR) {
1500 (void)SvOK_off(TARG);
1506 if (gimme == G_SCALAR) {
1510 (void)SvUPGRADE(sv, SVt_PV);
1511 tmplen = SvLEN(sv); /* remember if already alloced */
1513 Sv_Grow(sv, 80); /* try short-buffering it */
1514 if (type == OP_RCATLINE)
1520 sv = sv_2mortal(NEWSV(57, 80));
1524 /* This should not be marked tainted if the fp is marked clean */
1525 #define MAYBE_TAINT_LINE(io, sv) \
1526 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1531 /* delay EOF state for a snarfed empty file */
1532 #define SNARF_EOF(gimme,rs,io,sv) \
1533 (gimme != G_SCALAR || SvCUR(sv) \
1534 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1538 if (!sv_gets(sv, fp, offset)
1539 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1541 PerlIO_clearerr(fp);
1542 if (IoFLAGS(io) & IOf_ARGV) {
1543 fp = nextargv(PL_last_in_gv);
1546 (void)do_close(PL_last_in_gv, FALSE);
1548 else if (type == OP_GLOB) {
1549 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1550 Perl_warner(aTHX_ WARN_GLOB,
1551 "glob failed (child exited with status %d%s)",
1552 (int)(STATUS_CURRENT >> 8),
1553 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1556 if (gimme == G_SCALAR) {
1557 (void)SvOK_off(TARG);
1561 MAYBE_TAINT_LINE(io, sv);
1564 MAYBE_TAINT_LINE(io, sv);
1566 IoFLAGS(io) |= IOf_NOLINE;
1570 if (type == OP_GLOB) {
1573 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1574 tmps = SvEND(sv) - 1;
1575 if (*tmps == *SvPVX(PL_rs)) {
1580 for (tmps = SvPVX(sv); *tmps; tmps++)
1581 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1582 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1584 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1585 (void)POPs; /* Unmatched wildcard? Chuck it... */
1589 if (gimme == G_ARRAY) {
1590 if (SvLEN(sv) - SvCUR(sv) > 20) {
1591 SvLEN_set(sv, SvCUR(sv)+1);
1592 Renew(SvPVX(sv), SvLEN(sv), char);
1594 sv = sv_2mortal(NEWSV(58, 80));
1597 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1598 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1602 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1603 Renew(SvPVX(sv), SvLEN(sv), char);
1612 register PERL_CONTEXT *cx;
1613 I32 gimme = OP_GIMME(PL_op, -1);
1616 if (cxstack_ix >= 0)
1617 gimme = cxstack[cxstack_ix].blk_gimme;
1625 PUSHBLOCK(cx, CXt_BLOCK, SP);
1637 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1638 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1640 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1643 if (SvTYPE(hv) == SVt_PVHV) {
1644 if (PL_op->op_private & OPpLVAL_INTRO)
1645 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
1646 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1647 svp = he ? &HeVAL(he) : 0;
1649 else if (SvTYPE(hv) == SVt_PVAV) {
1650 if (PL_op->op_private & OPpLVAL_INTRO)
1651 DIE(aTHX_ "Can't localize pseudo-hash element");
1652 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1658 if (!svp || *svp == &PL_sv_undef) {
1663 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1665 lv = sv_newmortal();
1666 sv_upgrade(lv, SVt_PVLV);
1668 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1669 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1670 LvTARG(lv) = SvREFCNT_inc(hv);
1675 if (PL_op->op_private & OPpLVAL_INTRO) {
1676 if (HvNAME(hv) && isGV(*svp))
1677 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1681 char *key = SvPV(keysv, keylen);
1682 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1684 save_helem(hv, keysv, svp);
1687 else if (PL_op->op_private & OPpDEREF)
1688 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1690 sv = (svp ? *svp : &PL_sv_undef);
1691 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1692 * Pushing the magical RHS on to the stack is useless, since
1693 * that magic is soon destined to be misled by the local(),
1694 * and thus the later pp_sassign() will fail to mg_get() the
1695 * old value. This should also cure problems with delayed
1696 * mg_get()s. GSAR 98-07-03 */
1697 if (!lval && SvGMAGICAL(sv))
1698 sv = sv_mortalcopy(sv);
1706 register PERL_CONTEXT *cx;
1712 if (PL_op->op_flags & OPf_SPECIAL) {
1713 cx = &cxstack[cxstack_ix];
1714 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1719 gimme = OP_GIMME(PL_op, -1);
1721 if (cxstack_ix >= 0)
1722 gimme = cxstack[cxstack_ix].blk_gimme;
1728 if (gimme == G_VOID)
1730 else if (gimme == G_SCALAR) {
1733 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1736 *MARK = sv_mortalcopy(TOPs);
1739 *MARK = &PL_sv_undef;
1743 else if (gimme == G_ARRAY) {
1744 /* in case LEAVE wipes old return values */
1745 for (mark = newsp + 1; mark <= SP; mark++) {
1746 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1747 *mark = sv_mortalcopy(*mark);
1748 TAINT_NOT; /* Each item is independent */
1752 PL_curpm = newpm; /* Don't pop $1 et al till now */
1762 register PERL_CONTEXT *cx;
1768 cx = &cxstack[cxstack_ix];
1769 if (CxTYPE(cx) != CXt_LOOP)
1770 DIE(aTHX_ "panic: pp_iter");
1772 itersvp = CxITERVAR(cx);
1773 av = cx->blk_loop.iterary;
1774 if (SvTYPE(av) != SVt_PVAV) {
1775 /* iterate ($min .. $max) */
1776 if (cx->blk_loop.iterlval) {
1777 /* string increment */
1778 register SV* cur = cx->blk_loop.iterlval;
1780 char *max = SvPV((SV*)av, maxlen);
1781 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1782 #ifndef USE_5005THREADS /* don't risk potential race */
1783 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1784 /* safe to reuse old SV */
1785 sv_setsv(*itersvp, cur);
1790 /* we need a fresh SV every time so that loop body sees a
1791 * completely new SV for closures/references to work as
1793 SvREFCNT_dec(*itersvp);
1794 *itersvp = newSVsv(cur);
1796 if (strEQ(SvPVX(cur), max))
1797 sv_setiv(cur, 0); /* terminate next time */
1804 /* integer increment */
1805 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1808 #ifndef USE_5005THREADS /* don't risk potential race */
1809 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1810 /* safe to reuse old SV */
1811 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1816 /* we need a fresh SV every time so that loop body sees a
1817 * completely new SV for closures/references to work as they
1819 SvREFCNT_dec(*itersvp);
1820 *itersvp = newSViv(cx->blk_loop.iterix++);
1826 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1829 SvREFCNT_dec(*itersvp);
1831 if (SvMAGICAL(av) || AvREIFY(av)) {
1832 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1839 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1845 if (av != PL_curstack && sv == &PL_sv_undef) {
1846 SV *lv = cx->blk_loop.iterlval;
1847 if (lv && SvREFCNT(lv) > 1) {
1852 SvREFCNT_dec(LvTARG(lv));
1854 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1855 sv_upgrade(lv, SVt_PVLV);
1857 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1859 LvTARG(lv) = SvREFCNT_inc(av);
1860 LvTARGOFF(lv) = cx->blk_loop.iterix;
1861 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1865 *itersvp = SvREFCNT_inc(sv);
1872 register PMOP *pm = cPMOP;
1888 register REGEXP *rx = PM_GETRE(pm);
1890 int force_on_match = 0;
1891 I32 oldsave = PL_savestack_ix;
1894 /* known replacement string? */
1895 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1896 if (PL_op->op_flags & OPf_STACKED)
1903 if (SvFAKE(TARG) && SvREADONLY(TARG))
1904 sv_force_normal(TARG);
1905 if (SvREADONLY(TARG)
1906 || (SvTYPE(TARG) > SVt_PVLV
1907 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1908 DIE(aTHX_ PL_no_modify);
1911 s = SvPV(TARG, len);
1912 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1914 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1915 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1920 PL_reg_match_utf8 = DO_UTF8(TARG);
1924 DIE(aTHX_ "panic: pp_subst");
1927 slen = PL_reg_match_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1928 maxiters = 2 * slen + 10; /* We can match twice at each
1929 position, once with zero-length,
1930 second time with non-zero. */
1932 if (!rx->prelen && PL_curpm) {
1936 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1937 ? REXEC_COPY_STR : 0;
1939 r_flags |= REXEC_SCREAM;
1940 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1941 SAVEINT(PL_multiline);
1942 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1945 if (rx->reganch & RE_USE_INTUIT) {
1947 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1951 /* How to do it in subst? */
1952 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1954 && ((rx->reganch & ROPT_NOSCAN)
1955 || !((rx->reganch & RE_INTUIT_TAIL)
1956 && (r_flags & REXEC_SCREAM))))
1961 /* only replace once? */
1962 once = !(rpm->op_pmflags & PMf_GLOBAL);
1964 /* known replacement string? */
1965 c = dstr ? SvPV(dstr, clen) : Nullch;
1967 /* can do inplace substitution? */
1968 if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
1969 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
1970 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1971 r_flags | REXEC_CHECKED))
1975 LEAVE_SCOPE(oldsave);
1978 if (force_on_match) {
1980 s = SvPV_force(TARG, len);
1985 SvSCREAM_off(TARG); /* disable possible screamer */
1987 rxtainted |= RX_MATCH_TAINTED(rx);
1988 m = orig + rx->startp[0];
1989 d = orig + rx->endp[0];
1991 if (m - s > strend - d) { /* faster to shorten from end */
1993 Copy(c, m, clen, char);
1998 Move(d, m, i, char);
2002 SvCUR_set(TARG, m - s);
2005 else if ((i = m - s)) { /* faster from front */
2013 Copy(c, m, clen, char);
2018 Copy(c, d, clen, char);
2023 TAINT_IF(rxtainted & 1);
2029 if (iters++ > maxiters)
2030 DIE(aTHX_ "Substitution loop");
2031 rxtainted |= RX_MATCH_TAINTED(rx);
2032 m = rx->startp[0] + orig;
2036 Move(s, d, i, char);
2040 Copy(c, d, clen, char);
2043 s = rx->endp[0] + orig;
2044 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2046 /* don't match same null twice */
2047 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2050 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2051 Move(s, d, i+1, char); /* include the NUL */
2053 TAINT_IF(rxtainted & 1);
2055 PUSHs(sv_2mortal(newSViv((I32)iters)));
2057 (void)SvPOK_only_UTF8(TARG);
2058 TAINT_IF(rxtainted);
2059 if (SvSMAGICAL(TARG)) {
2065 LEAVE_SCOPE(oldsave);
2069 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2070 r_flags | REXEC_CHECKED))
2074 if (force_on_match) {
2076 s = SvPV_force(TARG, len);
2079 rxtainted |= RX_MATCH_TAINTED(rx);
2080 dstr = NEWSV(25, len);
2081 sv_setpvn(dstr, m, s-m);
2086 register PERL_CONTEXT *cx;
2089 RETURNOP(cPMOP->op_pmreplroot);
2091 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2093 if (iters++ > maxiters)
2094 DIE(aTHX_ "Substitution loop");
2095 rxtainted |= RX_MATCH_TAINTED(rx);
2096 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2101 strend = s + (strend - m);
2103 m = rx->startp[0] + orig;
2104 sv_catpvn(dstr, s, m-s);
2105 s = rx->endp[0] + orig;
2107 sv_catpvn(dstr, c, clen);
2110 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2111 TARG, NULL, r_flags));
2112 sv_catpvn(dstr, s, strend - s);
2114 (void)SvOOK_off(TARG);
2115 Safefree(SvPVX(TARG));
2116 SvPVX(TARG) = SvPVX(dstr);
2117 SvCUR_set(TARG, SvCUR(dstr));
2118 SvLEN_set(TARG, SvLEN(dstr));
2119 isutf8 = DO_UTF8(dstr);
2123 TAINT_IF(rxtainted & 1);
2125 PUSHs(sv_2mortal(newSViv((I32)iters)));
2127 (void)SvPOK_only(TARG);
2130 TAINT_IF(rxtainted);
2133 LEAVE_SCOPE(oldsave);
2142 LEAVE_SCOPE(oldsave);
2151 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2152 ++*PL_markstack_ptr;
2153 LEAVE; /* exit inner scope */
2156 if (PL_stack_base + *PL_markstack_ptr > SP) {
2158 I32 gimme = GIMME_V;
2160 LEAVE; /* exit outer scope */
2161 (void)POPMARK; /* pop src */
2162 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2163 (void)POPMARK; /* pop dst */
2164 SP = PL_stack_base + POPMARK; /* pop original mark */
2165 if (gimme == G_SCALAR) {
2169 else if (gimme == G_ARRAY)
2176 ENTER; /* enter inner scope */
2179 src = PL_stack_base[*PL_markstack_ptr];
2183 RETURNOP(cLOGOP->op_other);
2194 register PERL_CONTEXT *cx;
2200 if (gimme == G_SCALAR) {
2203 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2205 *MARK = SvREFCNT_inc(TOPs);
2210 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2212 *MARK = sv_mortalcopy(sv);
2217 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2221 *MARK = &PL_sv_undef;
2225 else if (gimme == G_ARRAY) {
2226 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2227 if (!SvTEMP(*MARK)) {
2228 *MARK = sv_mortalcopy(*MARK);
2229 TAINT_NOT; /* Each item is independent */
2235 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2236 PL_curpm = newpm; /* ... and pop $1 et al */
2240 return pop_return();
2243 /* This duplicates the above code because the above code must not
2244 * get any slower by more conditions */
2252 register PERL_CONTEXT *cx;
2259 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2260 /* We are an argument to a function or grep().
2261 * This kind of lvalueness was legal before lvalue
2262 * subroutines too, so be backward compatible:
2263 * cannot report errors. */
2265 /* Scalar context *is* possible, on the LHS of -> only,
2266 * as in f()->meth(). But this is not an lvalue. */
2267 if (gimme == G_SCALAR)
2269 if (gimme == G_ARRAY) {
2270 if (!CvLVALUE(cx->blk_sub.cv))
2271 goto temporise_array;
2272 EXTEND_MORTAL(SP - newsp);
2273 for (mark = newsp + 1; mark <= SP; mark++) {
2276 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2277 *mark = sv_mortalcopy(*mark);
2279 /* Can be a localized value subject to deletion. */
2280 PL_tmps_stack[++PL_tmps_ix] = *mark;
2281 (void)SvREFCNT_inc(*mark);
2286 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2287 /* Here we go for robustness, not for speed, so we change all
2288 * the refcounts so the caller gets a live guy. Cannot set
2289 * TEMP, so sv_2mortal is out of question. */
2290 if (!CvLVALUE(cx->blk_sub.cv)) {
2295 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2297 if (gimme == G_SCALAR) {
2301 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2306 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2307 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2309 else { /* Can be a localized value
2310 * subject to deletion. */
2311 PL_tmps_stack[++PL_tmps_ix] = *mark;
2312 (void)SvREFCNT_inc(*mark);
2315 else { /* Should not happen? */
2320 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2321 (MARK > SP ? "Empty array" : "Array"));
2325 else if (gimme == G_ARRAY) {
2326 EXTEND_MORTAL(SP - newsp);
2327 for (mark = newsp + 1; mark <= SP; mark++) {
2328 if (*mark != &PL_sv_undef
2329 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2330 /* Might be flattened array after $#array = */
2336 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2337 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2340 /* Can be a localized value subject to deletion. */
2341 PL_tmps_stack[++PL_tmps_ix] = *mark;
2342 (void)SvREFCNT_inc(*mark);
2348 if (gimme == G_SCALAR) {
2352 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2354 *MARK = SvREFCNT_inc(TOPs);
2359 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2361 *MARK = sv_mortalcopy(sv);
2366 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2370 *MARK = &PL_sv_undef;
2374 else if (gimme == G_ARRAY) {
2376 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2377 if (!SvTEMP(*MARK)) {
2378 *MARK = sv_mortalcopy(*MARK);
2379 TAINT_NOT; /* Each item is independent */
2386 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2387 PL_curpm = newpm; /* ... and pop $1 et al */
2391 return pop_return();
2396 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2398 SV *dbsv = GvSV(PL_DBsub);
2400 if (!PERLDB_SUB_NN) {
2404 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2405 || strEQ(GvNAME(gv), "END")
2406 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2407 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2408 && (gv = (GV*)*svp) ))) {
2409 /* Use GV from the stack as a fallback. */
2410 /* GV is potentially non-unique, or contain different CV. */
2411 SV *tmp = newRV((SV*)cv);
2412 sv_setsv(dbsv, tmp);
2416 gv_efullname3(dbsv, gv, Nullch);
2420 (void)SvUPGRADE(dbsv, SVt_PVIV);
2421 (void)SvIOK_on(dbsv);
2422 SAVEIV(SvIVX(dbsv));
2423 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2427 PL_curcopdb = PL_curcop;
2428 cv = GvCV(PL_DBsub);
2438 register PERL_CONTEXT *cx;
2440 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2443 DIE(aTHX_ "Not a CODE reference");
2444 switch (SvTYPE(sv)) {
2450 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2452 SP = PL_stack_base + POPMARK;
2455 if (SvGMAGICAL(sv)) {
2459 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2462 sym = SvPV(sv, n_a);
2464 DIE(aTHX_ PL_no_usym, "a subroutine");
2465 if (PL_op->op_private & HINT_STRICT_REFS)
2466 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2467 cv = get_cv(sym, TRUE);
2472 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2473 tryAMAGICunDEREF(to_cv);
2476 if (SvTYPE(cv) == SVt_PVCV)
2481 DIE(aTHX_ "Not a CODE reference");
2486 if (!(cv = GvCVu((GV*)sv)))
2487 cv = sv_2cv(sv, &stash, &gv, FALSE);
2500 if (!CvROOT(cv) && !CvXSUB(cv)) {
2504 /* anonymous or undef'd function leaves us no recourse */
2505 if (CvANON(cv) || !(gv = CvGV(cv)))
2506 DIE(aTHX_ "Undefined subroutine called");
2508 /* autoloaded stub? */
2509 if (cv != GvCV(gv)) {
2512 /* should call AUTOLOAD now? */
2515 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2522 sub_name = sv_newmortal();
2523 gv_efullname3(sub_name, gv, Nullch);
2524 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2528 DIE(aTHX_ "Not a CODE reference");
2533 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2534 cv = get_db_sub(&sv, cv);
2536 DIE(aTHX_ "No DBsub routine");
2539 #ifdef USE_5005THREADS
2541 * First we need to check if the sub or method requires locking.
2542 * If so, we gain a lock on the CV, the first argument or the
2543 * stash (for static methods), as appropriate. This has to be
2544 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2545 * reschedule by returning a new op.
2547 MUTEX_LOCK(CvMUTEXP(cv));
2548 if (CvFLAGS(cv) & CVf_LOCKED) {
2550 if (CvFLAGS(cv) & CVf_METHOD) {
2551 if (SP > PL_stack_base + TOPMARK)
2552 sv = *(PL_stack_base + TOPMARK + 1);
2554 AV *av = (AV*)PL_curpad[0];
2555 if (hasargs || !av || AvFILLp(av) < 0
2556 || !(sv = AvARRAY(av)[0]))
2558 MUTEX_UNLOCK(CvMUTEXP(cv));
2559 DIE(aTHX_ "no argument for locked method call");
2566 char *stashname = SvPV(sv, len);
2567 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2573 MUTEX_UNLOCK(CvMUTEXP(cv));
2574 mg = condpair_magic(sv);
2575 MUTEX_LOCK(MgMUTEXP(mg));
2576 if (MgOWNER(mg) == thr)
2577 MUTEX_UNLOCK(MgMUTEXP(mg));
2580 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2582 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2584 MUTEX_UNLOCK(MgMUTEXP(mg));
2585 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2587 MUTEX_LOCK(CvMUTEXP(cv));
2590 * Now we have permission to enter the sub, we must distinguish
2591 * four cases. (0) It's an XSUB (in which case we don't care
2592 * about ownership); (1) it's ours already (and we're recursing);
2593 * (2) it's free (but we may already be using a cached clone);
2594 * (3) another thread owns it. Case (1) is easy: we just use it.
2595 * Case (2) means we look for a clone--if we have one, use it
2596 * otherwise grab ownership of cv. Case (3) means we look for a
2597 * clone (for non-XSUBs) and have to create one if we don't
2599 * Why look for a clone in case (2) when we could just grab
2600 * ownership of cv straight away? Well, we could be recursing,
2601 * i.e. we originally tried to enter cv while another thread
2602 * owned it (hence we used a clone) but it has been freed up
2603 * and we're now recursing into it. It may or may not be "better"
2604 * to use the clone but at least CvDEPTH can be trusted.
2606 if (CvOWNER(cv) == thr || CvXSUB(cv))
2607 MUTEX_UNLOCK(CvMUTEXP(cv));
2609 /* Case (2) or (3) */
2613 * XXX Might it be better to release CvMUTEXP(cv) while we
2614 * do the hv_fetch? We might find someone has pinched it
2615 * when we look again, in which case we would be in case
2616 * (3) instead of (2) so we'd have to clone. Would the fact
2617 * that we released the mutex more quickly make up for this?
2619 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2621 /* We already have a clone to use */
2622 MUTEX_UNLOCK(CvMUTEXP(cv));
2624 DEBUG_S(PerlIO_printf(Perl_debug_log,
2625 "entersub: %p already has clone %p:%s\n",
2626 thr, cv, SvPEEK((SV*)cv)));
2629 if (CvDEPTH(cv) == 0)
2630 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2633 /* (2) => grab ownership of cv. (3) => make clone */
2637 MUTEX_UNLOCK(CvMUTEXP(cv));
2638 DEBUG_S(PerlIO_printf(Perl_debug_log,
2639 "entersub: %p grabbing %p:%s in stash %s\n",
2640 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2641 HvNAME(CvSTASH(cv)) : "(none)"));
2644 /* Make a new clone. */
2646 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2647 MUTEX_UNLOCK(CvMUTEXP(cv));
2648 DEBUG_S((PerlIO_printf(Perl_debug_log,
2649 "entersub: %p cloning %p:%s\n",
2650 thr, cv, SvPEEK((SV*)cv))));
2652 * We're creating a new clone so there's no race
2653 * between the original MUTEX_UNLOCK and the
2654 * SvREFCNT_inc since no one will be trying to undef
2655 * it out from underneath us. At least, I don't think
2658 clonecv = cv_clone(cv);
2659 SvREFCNT_dec(cv); /* finished with this */
2660 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2661 CvOWNER(clonecv) = thr;
2665 DEBUG_S(if (CvDEPTH(cv) != 0)
2666 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2668 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2671 #endif /* USE_5005THREADS */
2674 #ifdef PERL_XSUB_OLDSTYLE
2675 if (CvOLDSTYLE(cv)) {
2676 I32 (*fp3)(int,int,int);
2678 register I32 items = SP - MARK;
2679 /* We dont worry to copy from @_. */
2684 PL_stack_sp = mark + 1;
2685 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2686 items = (*fp3)(CvXSUBANY(cv).any_i32,
2687 MARK - PL_stack_base + 1,
2689 PL_stack_sp = PL_stack_base + items;
2692 #endif /* PERL_XSUB_OLDSTYLE */
2694 I32 markix = TOPMARK;
2699 /* Need to copy @_ to stack. Alternative may be to
2700 * switch stack to @_, and copy return values
2701 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2704 #ifdef USE_5005THREADS
2705 av = (AV*)PL_curpad[0];
2707 av = GvAV(PL_defgv);
2708 #endif /* USE_5005THREADS */
2709 items = AvFILLp(av) + 1; /* @_ is not tieable */
2712 /* Mark is at the end of the stack. */
2714 Copy(AvARRAY(av), SP + 1, items, SV*);
2719 /* We assume first XSUB in &DB::sub is the called one. */
2721 SAVEVPTR(PL_curcop);
2722 PL_curcop = PL_curcopdb;
2725 /* Do we need to open block here? XXXX */
2726 (void)(*CvXSUB(cv))(aTHX_ cv);
2728 /* Enforce some sanity in scalar context. */
2729 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2730 if (markix > PL_stack_sp - PL_stack_base)
2731 *(PL_stack_base + markix) = &PL_sv_undef;
2733 *(PL_stack_base + markix) = *PL_stack_sp;
2734 PL_stack_sp = PL_stack_base + markix;
2742 register I32 items = SP - MARK;
2743 AV* padlist = CvPADLIST(cv);
2744 SV** svp = AvARRAY(padlist);
2745 push_return(PL_op->op_next);
2746 PUSHBLOCK(cx, CXt_SUB, MARK);
2749 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2750 * that eval'' ops within this sub know the correct lexical space.
2751 * Owing the speed considerations, we choose to search for the cv
2752 * in doeval() instead.
2754 if (CvDEPTH(cv) < 2)
2755 (void)SvREFCNT_inc(cv);
2756 else { /* save temporaries on recursion? */
2757 PERL_STACK_OVERFLOW_CHECK();
2758 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2760 AV *newpad = newAV();
2761 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2762 I32 ix = AvFILLp((AV*)svp[1]);
2763 I32 names_fill = AvFILLp((AV*)svp[0]);
2764 svp = AvARRAY(svp[0]);
2765 for ( ;ix > 0; ix--) {
2766 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2767 char *name = SvPVX(svp[ix]);
2768 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2769 || *name == '&') /* anonymous code? */
2771 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2773 else { /* our own lexical */
2775 av_store(newpad, ix, sv = (SV*)newAV());
2776 else if (*name == '%')
2777 av_store(newpad, ix, sv = (SV*)newHV());
2779 av_store(newpad, ix, sv = NEWSV(0,0));
2783 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2784 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2787 av_store(newpad, ix, sv = NEWSV(0,0));
2791 av = newAV(); /* will be @_ */
2793 av_store(newpad, 0, (SV*)av);
2794 AvFLAGS(av) = AVf_REIFY;
2795 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2796 AvFILLp(padlist) = CvDEPTH(cv);
2797 svp = AvARRAY(padlist);
2800 #ifdef USE_5005THREADS
2802 AV* av = (AV*)PL_curpad[0];
2804 items = AvFILLp(av) + 1;
2806 /* Mark is at the end of the stack. */
2808 Copy(AvARRAY(av), SP + 1, items, SV*);
2813 #endif /* USE_5005THREADS */
2814 SAVEVPTR(PL_curpad);
2815 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2816 #ifndef USE_5005THREADS
2818 #endif /* USE_5005THREADS */
2824 DEBUG_S(PerlIO_printf(Perl_debug_log,
2825 "%p entersub preparing @_\n", thr));
2827 av = (AV*)PL_curpad[0];
2829 /* @_ is normally not REAL--this should only ever
2830 * happen when DB::sub() calls things that modify @_ */
2835 #ifndef USE_5005THREADS
2836 cx->blk_sub.savearray = GvAV(PL_defgv);
2837 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2838 #endif /* USE_5005THREADS */
2839 cx->blk_sub.oldcurpad = PL_curpad;
2840 cx->blk_sub.argarray = av;
2843 if (items > AvMAX(av) + 1) {
2845 if (AvARRAY(av) != ary) {
2846 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2847 SvPVX(av) = (char*)ary;
2849 if (items > AvMAX(av) + 1) {
2850 AvMAX(av) = items - 1;
2851 Renew(ary,items,SV*);
2853 SvPVX(av) = (char*)ary;
2856 Copy(MARK,AvARRAY(av),items,SV*);
2857 AvFILLp(av) = items - 1;
2865 /* warning must come *after* we fully set up the context
2866 * stuff so that __WARN__ handlers can safely dounwind()
2869 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2870 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2871 sub_crush_depth(cv);
2873 DEBUG_S(PerlIO_printf(Perl_debug_log,
2874 "%p entersub returning %p\n", thr, CvSTART(cv)));
2876 RETURNOP(CvSTART(cv));
2881 Perl_sub_crush_depth(pTHX_ CV *cv)
2884 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2886 SV* tmpstr = sv_newmortal();
2887 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2888 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2898 IV elem = SvIV(elemsv);
2900 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2901 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2904 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2905 Perl_warner(aTHX_ WARN_MISC, "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2907 elem -= PL_curcop->cop_arybase;
2908 if (SvTYPE(av) != SVt_PVAV)
2910 svp = av_fetch(av, elem, lval && !defer);
2912 if (!svp || *svp == &PL_sv_undef) {
2915 DIE(aTHX_ PL_no_aelem, elem);
2916 lv = sv_newmortal();
2917 sv_upgrade(lv, SVt_PVLV);
2919 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
2920 LvTARG(lv) = SvREFCNT_inc(av);
2921 LvTARGOFF(lv) = elem;
2926 if (PL_op->op_private & OPpLVAL_INTRO)
2927 save_aelem(av, elem, svp);
2928 else if (PL_op->op_private & OPpDEREF)
2929 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2931 sv = (svp ? *svp : &PL_sv_undef);
2932 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2933 sv = sv_mortalcopy(sv);
2939 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2945 Perl_croak(aTHX_ PL_no_modify);
2946 if (SvTYPE(sv) < SVt_RV)
2947 sv_upgrade(sv, SVt_RV);
2948 else if (SvTYPE(sv) >= SVt_PV) {
2949 (void)SvOOK_off(sv);
2950 Safefree(SvPVX(sv));
2951 SvLEN(sv) = SvCUR(sv) = 0;
2955 SvRV(sv) = NEWSV(355,0);
2958 SvRV(sv) = (SV*)newAV();
2961 SvRV(sv) = (SV*)newHV();
2976 if (SvTYPE(rsv) == SVt_PVCV) {
2982 SETs(method_common(sv, Null(U32*)));
2989 SV* sv = cSVOP->op_sv;
2990 U32 hash = SvUVX(sv);
2992 XPUSHs(method_common(sv, &hash));
2997 S_method_common(pTHX_ SV* meth, U32* hashp)
3008 name = SvPV(meth, namelen);
3009 sv = *(PL_stack_base + TOPMARK + 1);
3012 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3021 /* this isn't a reference */
3024 !(packname = SvPV(sv, packlen)) ||
3025 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3026 !(ob=(SV*)GvIO(iogv)))
3028 /* this isn't the name of a filehandle either */
3030 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3031 ? !isIDFIRST_utf8((U8*)packname)
3032 : !isIDFIRST(*packname)
3035 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3036 SvOK(sv) ? "without a package or object reference"
3037 : "on an undefined value");
3039 /* assume it's a package name */
3040 stash = gv_stashpvn(packname, packlen, FALSE);
3043 /* it _is_ a filehandle name -- replace with a reference */
3044 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3047 /* if we got here, ob should be a reference or a glob */
3048 if (!ob || !(SvOBJECT(ob)
3049 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3052 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3056 stash = SvSTASH(ob);
3059 /* NOTE: stash may be null, hope hv_fetch_ent and
3060 gv_fetchmethod can cope (it seems they can) */
3062 /* shortcut for simple names */
3064 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3066 gv = (GV*)HeVAL(he);
3067 if (isGV(gv) && GvCV(gv) &&
3068 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3069 return (SV*)GvCV(gv);
3073 gv = gv_fetchmethod(stash, name);
3076 /* This code tries to figure out just what went wrong with
3077 gv_fetchmethod. It therefore needs to duplicate a lot of
3078 the internals of that function. We can't move it inside
3079 Perl_gv_fetchmethod_autoload(), however, since that would
3080 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3087 for (p = name; *p; p++) {
3089 sep = p, leaf = p + 1;
3090 else if (*p == ':' && *(p + 1) == ':')
3091 sep = p, leaf = p + 2;
3093 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3094 /* the method name is unqualified or starts with SUPER:: */
3095 packname = sep ? CopSTASHPV(PL_curcop) :
3096 stash ? HvNAME(stash) : packname;
3097 packlen = strlen(packname);
3100 /* the method name is qualified */
3102 packlen = sep - name;
3105 /* we're relying on gv_fetchmethod not autovivifying the stash */
3106 if (gv_stashpvn(packname, packlen, FALSE)) {
3108 "Can't locate object method \"%s\" via package \"%.*s\"",
3109 leaf, (int)packlen, packname);
3113 "Can't locate object method \"%s\" via package \"%.*s\""
3114 " (perhaps you forgot to load \"%.*s\"?)",
3115 leaf, (int)packlen, packname, (int)packlen, packname);
3118 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3121 #ifdef USE_5005THREADS
3123 unset_cvowner(pTHX_ void *cvarg)
3125 register CV* cv = (CV *) cvarg;
3127 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3128 thr, cv, SvPEEK((SV*)cv))));
3129 MUTEX_LOCK(CvMUTEXP(cv));
3130 DEBUG_S(if (CvDEPTH(cv) != 0)
3131 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3133 assert(thr == CvOWNER(cv));
3135 MUTEX_UNLOCK(CvMUTEXP(cv));
3138 #endif /* USE_5005THREADS */