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);
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 if (uv > (UV) IV_MAX) {
301 SETs(boolSV((UV)iv == uv));
309 SETs(boolSV(TOPn == value));
317 if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
318 DIE(aTHX_ PL_no_modify);
319 if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
320 SvIVX(TOPs) != IV_MAX)
323 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
325 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
338 RETURNOP(cLOGOP->op_other);
344 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
345 useleft = USE_LEFT(TOPm1s);
346 #ifdef PERL_PRESERVE_IVUV
347 /* We must see if we can perform the addition with integers if possible,
348 as the integer code detects overflow while the NV code doesn't.
349 If either argument hasn't had a numeric conversion yet attempt to get
350 the IV. It's important to do this now, rather than just assuming that
351 it's not IOK as a PV of "9223372036854775806" may not take well to NV
352 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
353 integer in case the second argument is IV=9223372036854775806
354 We can (now) rely on sv_2iv to do the right thing, only setting the
355 public IOK flag if the value in the NV (or PV) slot is truly integer.
357 A side effect is that this also aggressively prefers integer maths over
358 fp maths for integer values.
360 How to detect overflow?
362 C 99 section 6.2.6.1 says
364 The range of nonnegative values of a signed integer type is a subrange
365 of the corresponding unsigned integer type, and the representation of
366 the same value in each type is the same. A computation involving
367 unsigned operands can never overflow, because a result that cannot be
368 represented by the resulting unsigned integer type is reduced modulo
369 the number that is one greater than the largest value that can be
370 represented by the resulting type.
374 which I read as "unsigned ints wrap."
376 signed integer overflow seems to be classed as "exception condition"
378 If an exceptional condition occurs during the evaluation of an
379 expression (that is, if the result is not mathematically defined or not
380 in the range of representable values for its type), the behavior is
383 (6.5, the 5th paragraph)
385 I had assumed that on 2s complement machines signed arithmetic would
386 wrap, hence coded pp_add and pp_subtract on the assumption that
387 everything perl builds on would be happy. After much wailing and
388 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
389 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
390 unsigned code below is actually shorter than the old code. :-)
395 /* Unless the left argument is integer in range we are going to have to
396 use NV maths. Hence only attempt to coerce the right argument if
397 we know the left is integer. */
405 /* left operand is undef, treat as zero. + 0 is identity,
406 Could SETi or SETu right now, but space optimise by not adding
407 lots of code to speed up what is probably a rarish case. */
409 /* Left operand is defined, so is it IV? */
412 if ((auvok = SvUOK(TOPm1s)))
415 register IV aiv = SvIVX(TOPm1s);
418 auvok = 1; /* Now acting as a sign flag. */
419 } else { /* 2s complement assumption for IV_MIN */
427 bool result_good = 0;
430 bool buvok = SvUOK(TOPs);
435 register IV biv = SvIVX(TOPs);
442 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
443 else "IV" now, independant of how it came in.
444 if a, b represents positive, A, B negative, a maps to -A etc
449 all UV maths. negate result if A negative.
450 add if signs same, subtract if signs differ. */
456 /* Must get smaller */
462 /* result really should be -(auv-buv). as its negation
463 of true value, need to swap our result flag */
480 if (result <= (UV)IV_MIN)
483 /* result valid, but out of range for IV. */
488 } /* Overflow, drop through to NVs. */
495 /* left operand is undef, treat as zero. + 0.0 is identity. */
499 SETn( value + TOPn );
507 AV *av = GvAV(cGVOP_gv);
508 U32 lval = PL_op->op_flags & OPf_MOD;
509 SV** svp = av_fetch(av, PL_op->op_private, lval);
510 SV *sv = (svp ? *svp : &PL_sv_undef);
512 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
513 sv = sv_mortalcopy(sv);
522 do_join(TARG, *MARK, MARK, SP);
533 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
534 * will be enough to hold an OP*.
536 SV* sv = sv_newmortal();
537 sv_upgrade(sv, SVt_PVLV);
539 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
547 /* Oversized hot code. */
551 dSP; dMARK; dORIGMARK;
557 if (PL_op->op_flags & OPf_STACKED)
562 if (gv && (io = GvIO(gv))
563 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
566 if (MARK == ORIGMARK) {
567 /* If using default handle then we need to make space to
568 * pass object as 1st arg, so move other args up ...
572 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
576 *MARK = SvTIED_obj((SV*)io, mg);
579 call_method("PRINT", G_SCALAR);
587 if (!(io = GvIO(gv))) {
588 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
589 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
591 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
592 report_evil_fh(gv, io, PL_op->op_type);
593 SETERRNO(EBADF,RMS$_IFI);
596 else if (!(fp = IoOFP(io))) {
597 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
599 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
600 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
601 report_evil_fh(gv, io, PL_op->op_type);
603 SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
608 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
610 if (!do_print(*MARK, fp))
614 if (!do_print(PL_ofs_sv, fp)) { /* $, */
623 if (!do_print(*MARK, fp))
631 if (PL_ors_sv && SvOK(PL_ors_sv))
632 if (!do_print(PL_ors_sv, fp)) /* $\ */
635 if (IoFLAGS(io) & IOf_FLUSH)
636 if (PerlIO_flush(fp) == EOF)
657 tryAMAGICunDEREF(to_av);
660 if (SvTYPE(av) != SVt_PVAV)
661 DIE(aTHX_ "Not an ARRAY reference");
662 if (PL_op->op_flags & OPf_REF) {
667 if (GIMME == G_SCALAR)
668 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
674 if (SvTYPE(sv) == SVt_PVAV) {
676 if (PL_op->op_flags & OPf_REF) {
681 if (GIMME == G_SCALAR)
682 Perl_croak(aTHX_ "Can't return array to lvalue"
691 if (SvTYPE(sv) != SVt_PVGV) {
695 if (SvGMAGICAL(sv)) {
701 if (PL_op->op_flags & OPf_REF ||
702 PL_op->op_private & HINT_STRICT_REFS)
703 DIE(aTHX_ PL_no_usym, "an ARRAY");
704 if (ckWARN(WARN_UNINITIALIZED))
706 if (GIMME == G_ARRAY) {
713 if ((PL_op->op_flags & OPf_SPECIAL) &&
714 !(PL_op->op_flags & OPf_MOD))
716 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
718 && (!is_gv_magical(sym,len,0)
719 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
725 if (PL_op->op_private & HINT_STRICT_REFS)
726 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
727 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
734 if (PL_op->op_private & OPpLVAL_INTRO)
736 if (PL_op->op_flags & OPf_REF) {
741 if (GIMME == G_SCALAR)
742 Perl_croak(aTHX_ "Can't return array to lvalue"
750 if (GIMME == G_ARRAY) {
751 I32 maxarg = AvFILL(av) + 1;
752 (void)POPs; /* XXXX May be optimized away? */
754 if (SvRMAGICAL(av)) {
756 for (i=0; i < maxarg; i++) {
757 SV **svp = av_fetch(av, i, FALSE);
758 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
762 Copy(AvARRAY(av), SP+1, maxarg, SV*);
768 I32 maxarg = AvFILL(av) + 1;
781 tryAMAGICunDEREF(to_hv);
784 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
785 DIE(aTHX_ "Not a HASH reference");
786 if (PL_op->op_flags & OPf_REF) {
791 if (GIMME == G_SCALAR)
792 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
798 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
800 if (PL_op->op_flags & OPf_REF) {
805 if (GIMME == G_SCALAR)
806 Perl_croak(aTHX_ "Can't return hash to lvalue"
815 if (SvTYPE(sv) != SVt_PVGV) {
819 if (SvGMAGICAL(sv)) {
825 if (PL_op->op_flags & OPf_REF ||
826 PL_op->op_private & HINT_STRICT_REFS)
827 DIE(aTHX_ PL_no_usym, "a HASH");
828 if (ckWARN(WARN_UNINITIALIZED))
830 if (GIMME == G_ARRAY) {
837 if ((PL_op->op_flags & OPf_SPECIAL) &&
838 !(PL_op->op_flags & OPf_MOD))
840 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
842 && (!is_gv_magical(sym,len,0)
843 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
849 if (PL_op->op_private & HINT_STRICT_REFS)
850 DIE(aTHX_ PL_no_symref, sym, "a HASH");
851 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
858 if (PL_op->op_private & OPpLVAL_INTRO)
860 if (PL_op->op_flags & OPf_REF) {
865 if (GIMME == G_SCALAR)
866 Perl_croak(aTHX_ "Can't return hash to lvalue"
874 if (GIMME == G_ARRAY) { /* array wanted */
875 *PL_stack_sp = (SV*)hv;
880 if (SvTYPE(hv) == SVt_PVAV)
881 hv = avhv_keys((AV*)hv);
883 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
884 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
894 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
900 leftop = ((BINOP*)PL_op)->op_last;
902 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
903 leftop = ((LISTOP*)leftop)->op_first;
905 /* Skip PUSHMARK and each element already assigned to. */
906 for (i = lelem - firstlelem; i > 0; i--) {
907 leftop = leftop->op_sibling;
910 if (leftop->op_type != OP_RV2HV)
915 av_fill(ary, 0); /* clear all but the fields hash */
916 if (lastrelem >= relem) {
917 while (relem < lastrelem) { /* gobble up all the rest */
921 /* Avoid a memory leak when avhv_store_ent dies. */
922 tmpstr = sv_newmortal();
923 sv_setsv(tmpstr,relem[1]); /* value */
925 if (avhv_store_ent(ary,relem[0],tmpstr,0))
926 (void)SvREFCNT_inc(tmpstr);
927 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
933 if (relem == lastrelem)
939 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
943 if (ckWARN(WARN_MISC)) {
944 if (relem == firstrelem &&
946 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
947 SvTYPE(SvRV(*relem)) == SVt_PVHV))
949 Perl_warner(aTHX_ WARN_MISC,
950 "Reference found where even-sized list expected");
953 Perl_warner(aTHX_ WARN_MISC,
954 "Odd number of elements in hash assignment");
956 if (SvTYPE(hash) == SVt_PVAV) {
958 tmpstr = sv_newmortal();
959 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
960 (void)SvREFCNT_inc(tmpstr);
961 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
966 tmpstr = NEWSV(29,0);
967 didstore = hv_store_ent(hash,*relem,tmpstr,0);
968 if (SvMAGICAL(hash)) {
969 if (SvSMAGICAL(tmpstr))
982 SV **lastlelem = PL_stack_sp;
983 SV **lastrelem = PL_stack_base + POPMARK;
984 SV **firstrelem = PL_stack_base + POPMARK + 1;
985 SV **firstlelem = lastrelem + 1;
998 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1000 /* If there's a common identifier on both sides we have to take
1001 * special care that assigning the identifier on the left doesn't
1002 * clobber a value on the right that's used later in the list.
1004 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
1005 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1006 for (relem = firstrelem; relem <= lastrelem; relem++) {
1008 if ((sv = *relem)) {
1009 TAINT_NOT; /* Each item is independent */
1010 *relem = sv_mortalcopy(sv);
1020 while (lelem <= lastlelem) {
1021 TAINT_NOT; /* Each item stands on its own, taintwise. */
1023 switch (SvTYPE(sv)) {
1026 magic = SvMAGICAL(ary) != 0;
1027 if (PL_op->op_private & OPpASSIGN_HASH) {
1028 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1034 do_oddball((HV*)ary, relem, firstrelem);
1036 relem = lastrelem + 1;
1041 av_extend(ary, lastrelem - relem);
1043 while (relem <= lastrelem) { /* gobble up all the rest */
1047 sv_setsv(sv,*relem);
1049 didstore = av_store(ary,i++,sv);
1059 case SVt_PVHV: { /* normal hash */
1063 magic = SvMAGICAL(hash) != 0;
1066 while (relem < lastrelem) { /* gobble up all the rest */
1071 sv = &PL_sv_no, relem++;
1072 tmpstr = NEWSV(29,0);
1074 sv_setsv(tmpstr,*relem); /* value */
1075 *(relem++) = tmpstr;
1076 didstore = hv_store_ent(hash,sv,tmpstr,0);
1078 if (SvSMAGICAL(tmpstr))
1085 if (relem == lastrelem) {
1086 do_oddball(hash, relem, firstrelem);
1092 if (SvIMMORTAL(sv)) {
1093 if (relem <= lastrelem)
1097 if (relem <= lastrelem) {
1098 sv_setsv(sv, *relem);
1102 sv_setsv(sv, &PL_sv_undef);
1107 if (PL_delaymagic & ~DM_DELAY) {
1108 if (PL_delaymagic & DM_UID) {
1109 #ifdef HAS_SETRESUID
1110 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1112 # ifdef HAS_SETREUID
1113 (void)setreuid(PL_uid,PL_euid);
1116 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1117 (void)setruid(PL_uid);
1118 PL_delaymagic &= ~DM_RUID;
1120 # endif /* HAS_SETRUID */
1122 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1123 (void)seteuid(PL_uid);
1124 PL_delaymagic &= ~DM_EUID;
1126 # endif /* HAS_SETEUID */
1127 if (PL_delaymagic & DM_UID) {
1128 if (PL_uid != PL_euid)
1129 DIE(aTHX_ "No setreuid available");
1130 (void)PerlProc_setuid(PL_uid);
1132 # endif /* HAS_SETREUID */
1133 #endif /* HAS_SETRESUID */
1134 PL_uid = PerlProc_getuid();
1135 PL_euid = PerlProc_geteuid();
1137 if (PL_delaymagic & DM_GID) {
1138 #ifdef HAS_SETRESGID
1139 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1141 # ifdef HAS_SETREGID
1142 (void)setregid(PL_gid,PL_egid);
1145 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1146 (void)setrgid(PL_gid);
1147 PL_delaymagic &= ~DM_RGID;
1149 # endif /* HAS_SETRGID */
1151 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1152 (void)setegid(PL_gid);
1153 PL_delaymagic &= ~DM_EGID;
1155 # endif /* HAS_SETEGID */
1156 if (PL_delaymagic & DM_GID) {
1157 if (PL_gid != PL_egid)
1158 DIE(aTHX_ "No setregid available");
1159 (void)PerlProc_setgid(PL_gid);
1161 # endif /* HAS_SETREGID */
1162 #endif /* HAS_SETRESGID */
1163 PL_gid = PerlProc_getgid();
1164 PL_egid = PerlProc_getegid();
1166 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1171 if (gimme == G_VOID)
1172 SP = firstrelem - 1;
1173 else if (gimme == G_SCALAR) {
1176 SETi(lastrelem - firstrelem + 1);
1182 SP = firstrelem + (lastlelem - firstlelem);
1183 lelem = firstlelem + (relem - firstrelem);
1185 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1193 register PMOP *pm = cPMOP;
1194 SV *rv = sv_newmortal();
1195 SV *sv = newSVrv(rv, "Regexp");
1196 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1203 register PMOP *pm = cPMOP;
1208 I32 r_flags = REXEC_CHECKED;
1209 char *truebase; /* Start of string */
1210 register REGEXP *rx = PM_GETRE(pm);
1215 I32 oldsave = PL_savestack_ix;
1216 I32 update_minmatch = 1;
1217 I32 had_zerolen = 0;
1219 if (PL_op->op_flags & OPf_STACKED)
1226 PUTBACK; /* EVAL blocks need stack_sp. */
1227 s = SvPV(TARG, len);
1230 DIE(aTHX_ "panic: pp_match");
1231 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1232 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
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 if ((!global && rx->nparens)
1268 || SvTEMP(TARG) || PL_sawampersand)
1269 r_flags |= REXEC_COPY_STR;
1271 r_flags |= REXEC_SCREAM;
1273 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1274 SAVEINT(PL_multiline);
1275 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1279 if (global && rx->startp[0] != -1) {
1280 t = s = rx->endp[0] + truebase;
1281 if ((s + rx->minlen) > strend)
1283 if (update_minmatch++)
1284 minmatch = had_zerolen;
1286 if (rx->reganch & RE_USE_INTUIT &&
1287 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1288 PL_bostr = truebase;
1289 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1293 if ( (rx->reganch & ROPT_CHECK_ALL)
1295 && ((rx->reganch & ROPT_NOSCAN)
1296 || !((rx->reganch & RE_INTUIT_TAIL)
1297 && (r_flags & REXEC_SCREAM)))
1298 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1301 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1304 if (pm->op_pmflags & PMf_ONCE)
1305 pm->op_pmdynflags |= PMdf_USED;
1314 RX_MATCH_TAINTED_on(rx);
1315 TAINT_IF(RX_MATCH_TAINTED(rx));
1316 if (gimme == G_ARRAY) {
1317 I32 nparens, i, len;
1319 nparens = rx->nparens;
1320 if (global && !nparens)
1324 SPAGAIN; /* EVAL blocks could move the stack. */
1325 EXTEND(SP, nparens + i);
1326 EXTEND_MORTAL(nparens + i);
1327 for (i = !i; i <= nparens; i++) {
1328 PUSHs(sv_newmortal());
1330 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1331 len = rx->endp[i] - rx->startp[i];
1332 s = rx->startp[i] + truebase;
1333 sv_setpvn(*SP, s, len);
1334 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1339 had_zerolen = (rx->startp[0] != -1
1340 && rx->startp[0] == rx->endp[0]);
1341 PUTBACK; /* EVAL blocks may use stack */
1342 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1347 LEAVE_SCOPE(oldsave);
1353 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1354 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1356 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1357 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1359 if (rx->startp[0] != -1) {
1360 mg->mg_len = rx->endp[0];
1361 if (rx->startp[0] == rx->endp[0])
1362 mg->mg_flags |= MGf_MINMATCH;
1364 mg->mg_flags &= ~MGf_MINMATCH;
1367 LEAVE_SCOPE(oldsave);
1371 yup: /* Confirmed by INTUIT */
1373 RX_MATCH_TAINTED_on(rx);
1374 TAINT_IF(RX_MATCH_TAINTED(rx));
1376 if (pm->op_pmflags & PMf_ONCE)
1377 pm->op_pmdynflags |= PMdf_USED;
1378 if (RX_MATCH_COPIED(rx))
1379 Safefree(rx->subbeg);
1380 RX_MATCH_COPIED_off(rx);
1381 rx->subbeg = Nullch;
1383 rx->subbeg = truebase;
1384 rx->startp[0] = s - truebase;
1385 if (DO_UTF8(PL_reg_sv)) {
1386 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1387 rx->endp[0] = t - truebase;
1390 rx->endp[0] = s - truebase + rx->minlen;
1392 rx->sublen = strend - truebase;
1395 if (PL_sawampersand) {
1398 rx->subbeg = savepvn(t, strend - t);
1399 rx->sublen = strend - t;
1400 RX_MATCH_COPIED_on(rx);
1401 off = rx->startp[0] = s - t;
1402 rx->endp[0] = off + rx->minlen;
1404 else { /* startp/endp are used by @- @+. */
1405 rx->startp[0] = s - truebase;
1406 rx->endp[0] = s - truebase + rx->minlen;
1408 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1409 LEAVE_SCOPE(oldsave);
1414 if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
1415 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1416 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1421 LEAVE_SCOPE(oldsave);
1422 if (gimme == G_ARRAY)
1428 Perl_do_readline(pTHX)
1430 dSP; dTARGETSTACKED;
1435 register IO *io = GvIO(PL_last_in_gv);
1436 register I32 type = PL_op->op_type;
1437 I32 gimme = GIMME_V;
1440 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1442 XPUSHs(SvTIED_obj((SV*)io, mg));
1445 call_method("READLINE", gimme);
1448 if (gimme == G_SCALAR)
1449 SvSetMagicSV_nosteal(TARG, TOPs);
1456 if (IoFLAGS(io) & IOf_ARGV) {
1457 if (IoFLAGS(io) & IOf_START) {
1459 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1460 IoFLAGS(io) &= ~IOf_START;
1461 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1462 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1463 SvSETMAGIC(GvSV(PL_last_in_gv));
1468 fp = nextargv(PL_last_in_gv);
1469 if (!fp) { /* Note: fp != IoIFP(io) */
1470 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1473 else if (type == OP_GLOB)
1474 fp = Perl_start_glob(aTHX_ POPs, io);
1476 else if (type == OP_GLOB)
1478 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1479 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1483 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1484 && (!io || !(IoFLAGS(io) & IOf_START))) {
1485 if (type == OP_GLOB)
1486 Perl_warner(aTHX_ WARN_GLOB,
1487 "glob failed (can't start child: %s)",
1490 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1492 if (gimme == G_SCALAR) {
1493 (void)SvOK_off(TARG);
1499 if (gimme == G_SCALAR) {
1503 (void)SvUPGRADE(sv, SVt_PV);
1504 tmplen = SvLEN(sv); /* remember if already alloced */
1506 Sv_Grow(sv, 80); /* try short-buffering it */
1507 if (type == OP_RCATLINE)
1513 sv = sv_2mortal(NEWSV(57, 80));
1517 /* This should not be marked tainted if the fp is marked clean */
1518 #define MAYBE_TAINT_LINE(io, sv) \
1519 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1524 /* delay EOF state for a snarfed empty file */
1525 #define SNARF_EOF(gimme,rs,io,sv) \
1526 (gimme != G_SCALAR || SvCUR(sv) \
1527 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1531 if (!sv_gets(sv, fp, offset)
1532 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1534 PerlIO_clearerr(fp);
1535 if (IoFLAGS(io) & IOf_ARGV) {
1536 fp = nextargv(PL_last_in_gv);
1539 (void)do_close(PL_last_in_gv, FALSE);
1541 else if (type == OP_GLOB) {
1542 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1543 Perl_warner(aTHX_ WARN_GLOB,
1544 "glob failed (child exited with status %d%s)",
1545 (int)(STATUS_CURRENT >> 8),
1546 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1549 if (gimme == G_SCALAR) {
1550 (void)SvOK_off(TARG);
1554 MAYBE_TAINT_LINE(io, sv);
1557 MAYBE_TAINT_LINE(io, sv);
1559 IoFLAGS(io) |= IOf_NOLINE;
1563 if (type == OP_GLOB) {
1566 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1567 tmps = SvEND(sv) - 1;
1568 if (*tmps == *SvPVX(PL_rs)) {
1573 for (tmps = SvPVX(sv); *tmps; tmps++)
1574 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1575 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1577 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1578 (void)POPs; /* Unmatched wildcard? Chuck it... */
1582 if (gimme == G_ARRAY) {
1583 if (SvLEN(sv) - SvCUR(sv) > 20) {
1584 SvLEN_set(sv, SvCUR(sv)+1);
1585 Renew(SvPVX(sv), SvLEN(sv), char);
1587 sv = sv_2mortal(NEWSV(58, 80));
1590 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1591 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1595 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1596 Renew(SvPVX(sv), SvLEN(sv), char);
1605 register PERL_CONTEXT *cx;
1606 I32 gimme = OP_GIMME(PL_op, -1);
1609 if (cxstack_ix >= 0)
1610 gimme = cxstack[cxstack_ix].blk_gimme;
1618 PUSHBLOCK(cx, CXt_BLOCK, SP);
1630 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1631 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1633 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1636 if (SvTYPE(hv) == SVt_PVHV) {
1637 if (PL_op->op_private & OPpLVAL_INTRO)
1638 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
1639 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1640 svp = he ? &HeVAL(he) : 0;
1642 else if (SvTYPE(hv) == SVt_PVAV) {
1643 if (PL_op->op_private & OPpLVAL_INTRO)
1644 DIE(aTHX_ "Can't localize pseudo-hash element");
1645 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1651 if (!svp || *svp == &PL_sv_undef) {
1656 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1658 lv = sv_newmortal();
1659 sv_upgrade(lv, SVt_PVLV);
1661 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1662 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1663 LvTARG(lv) = SvREFCNT_inc(hv);
1668 if (PL_op->op_private & OPpLVAL_INTRO) {
1669 if (HvNAME(hv) && isGV(*svp))
1670 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1674 char *key = SvPV(keysv, keylen);
1675 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1677 save_helem(hv, keysv, svp);
1680 else if (PL_op->op_private & OPpDEREF)
1681 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1683 sv = (svp ? *svp : &PL_sv_undef);
1684 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1685 * Pushing the magical RHS on to the stack is useless, since
1686 * that magic is soon destined to be misled by the local(),
1687 * and thus the later pp_sassign() will fail to mg_get() the
1688 * old value. This should also cure problems with delayed
1689 * mg_get()s. GSAR 98-07-03 */
1690 if (!lval && SvGMAGICAL(sv))
1691 sv = sv_mortalcopy(sv);
1699 register PERL_CONTEXT *cx;
1705 if (PL_op->op_flags & OPf_SPECIAL) {
1706 cx = &cxstack[cxstack_ix];
1707 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1712 gimme = OP_GIMME(PL_op, -1);
1714 if (cxstack_ix >= 0)
1715 gimme = cxstack[cxstack_ix].blk_gimme;
1721 if (gimme == G_VOID)
1723 else if (gimme == G_SCALAR) {
1726 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1729 *MARK = sv_mortalcopy(TOPs);
1732 *MARK = &PL_sv_undef;
1736 else if (gimme == G_ARRAY) {
1737 /* in case LEAVE wipes old return values */
1738 for (mark = newsp + 1; mark <= SP; mark++) {
1739 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1740 *mark = sv_mortalcopy(*mark);
1741 TAINT_NOT; /* Each item is independent */
1745 PL_curpm = newpm; /* Don't pop $1 et al till now */
1755 register PERL_CONTEXT *cx;
1761 cx = &cxstack[cxstack_ix];
1762 if (CxTYPE(cx) != CXt_LOOP)
1763 DIE(aTHX_ "panic: pp_iter");
1765 itersvp = CxITERVAR(cx);
1766 av = cx->blk_loop.iterary;
1767 if (SvTYPE(av) != SVt_PVAV) {
1768 /* iterate ($min .. $max) */
1769 if (cx->blk_loop.iterlval) {
1770 /* string increment */
1771 register SV* cur = cx->blk_loop.iterlval;
1773 char *max = SvPV((SV*)av, maxlen);
1774 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1775 #ifndef USE_THREADS /* don't risk potential race */
1776 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1777 /* safe to reuse old SV */
1778 sv_setsv(*itersvp, cur);
1783 /* we need a fresh SV every time so that loop body sees a
1784 * completely new SV for closures/references to work as
1786 SvREFCNT_dec(*itersvp);
1787 *itersvp = newSVsv(cur);
1789 if (strEQ(SvPVX(cur), max))
1790 sv_setiv(cur, 0); /* terminate next time */
1797 /* integer increment */
1798 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1801 #ifndef USE_THREADS /* don't risk potential race */
1802 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1803 /* safe to reuse old SV */
1804 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1809 /* we need a fresh SV every time so that loop body sees a
1810 * completely new SV for closures/references to work as they
1812 SvREFCNT_dec(*itersvp);
1813 *itersvp = newSViv(cx->blk_loop.iterix++);
1819 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1822 SvREFCNT_dec(*itersvp);
1824 if (SvMAGICAL(av) || AvREIFY(av)) {
1825 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1832 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1838 if (av != PL_curstack && sv == &PL_sv_undef) {
1839 SV *lv = cx->blk_loop.iterlval;
1840 if (lv && SvREFCNT(lv) > 1) {
1845 SvREFCNT_dec(LvTARG(lv));
1847 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1848 sv_upgrade(lv, SVt_PVLV);
1850 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1852 LvTARG(lv) = SvREFCNT_inc(av);
1853 LvTARGOFF(lv) = cx->blk_loop.iterix;
1854 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1858 *itersvp = SvREFCNT_inc(sv);
1865 register PMOP *pm = cPMOP;
1881 register REGEXP *rx = PM_GETRE(pm);
1883 int force_on_match = 0;
1884 I32 oldsave = PL_savestack_ix;
1888 /* known replacement string? */
1889 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1890 if (PL_op->op_flags & OPf_STACKED)
1897 do_utf8 = DO_UTF8(PL_reg_sv);
1898 if (SvFAKE(TARG) && SvREADONLY(TARG))
1899 sv_force_normal(TARG);
1900 if (SvREADONLY(TARG)
1901 || (SvTYPE(TARG) > SVt_PVLV
1902 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1903 DIE(aTHX_ PL_no_modify);
1906 s = SvPV(TARG, len);
1907 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1909 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1910 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1917 DIE(aTHX_ "panic: pp_subst");
1920 slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1921 maxiters = 2 * slen + 10; /* We can match twice at each
1922 position, once with zero-length,
1923 second time with non-zero. */
1925 if (!rx->prelen && PL_curpm) {
1929 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1930 ? REXEC_COPY_STR : 0;
1932 r_flags |= REXEC_SCREAM;
1933 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1934 SAVEINT(PL_multiline);
1935 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1938 if (rx->reganch & RE_USE_INTUIT) {
1940 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1944 /* How to do it in subst? */
1945 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1947 && ((rx->reganch & ROPT_NOSCAN)
1948 || !((rx->reganch & RE_INTUIT_TAIL)
1949 && (r_flags & REXEC_SCREAM))))
1954 /* only replace once? */
1955 once = !(rpm->op_pmflags & PMf_GLOBAL);
1957 /* known replacement string? */
1958 c = dstr ? SvPV(dstr, clen) : Nullch;
1960 /* can do inplace substitution? */
1961 if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
1962 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
1963 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
1964 r_flags | REXEC_CHECKED))
1968 LEAVE_SCOPE(oldsave);
1971 if (force_on_match) {
1973 s = SvPV_force(TARG, len);
1978 SvSCREAM_off(TARG); /* disable possible screamer */
1980 rxtainted |= RX_MATCH_TAINTED(rx);
1981 m = orig + rx->startp[0];
1982 d = orig + rx->endp[0];
1984 if (m - s > strend - d) { /* faster to shorten from end */
1986 Copy(c, m, clen, char);
1991 Move(d, m, i, char);
1995 SvCUR_set(TARG, m - s);
1998 else if ((i = m - s)) { /* faster from front */
2006 Copy(c, m, clen, char);
2011 Copy(c, d, clen, char);
2016 TAINT_IF(rxtainted & 1);
2022 if (iters++ > maxiters)
2023 DIE(aTHX_ "Substitution loop");
2024 rxtainted |= RX_MATCH_TAINTED(rx);
2025 m = rx->startp[0] + orig;
2029 Move(s, d, i, char);
2033 Copy(c, d, clen, char);
2036 s = rx->endp[0] + orig;
2037 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2039 /* don't match same null twice */
2040 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2043 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2044 Move(s, d, i+1, char); /* include the NUL */
2046 TAINT_IF(rxtainted & 1);
2048 PUSHs(sv_2mortal(newSViv((I32)iters)));
2050 (void)SvPOK_only_UTF8(TARG);
2051 TAINT_IF(rxtainted);
2052 if (SvSMAGICAL(TARG)) {
2058 LEAVE_SCOPE(oldsave);
2062 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2063 r_flags | REXEC_CHECKED))
2067 if (force_on_match) {
2069 s = SvPV_force(TARG, len);
2072 rxtainted |= RX_MATCH_TAINTED(rx);
2073 dstr = NEWSV(25, len);
2074 sv_setpvn(dstr, m, s-m);
2079 register PERL_CONTEXT *cx;
2082 RETURNOP(cPMOP->op_pmreplroot);
2084 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2086 if (iters++ > maxiters)
2087 DIE(aTHX_ "Substitution loop");
2088 rxtainted |= RX_MATCH_TAINTED(rx);
2089 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2094 strend = s + (strend - m);
2096 m = rx->startp[0] + orig;
2097 sv_catpvn(dstr, s, m-s);
2098 s = rx->endp[0] + orig;
2100 sv_catpvn(dstr, c, clen);
2103 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2104 TARG, NULL, r_flags));
2105 sv_catpvn(dstr, s, strend - s);
2107 (void)SvOOK_off(TARG);
2108 Safefree(SvPVX(TARG));
2109 SvPVX(TARG) = SvPVX(dstr);
2110 SvCUR_set(TARG, SvCUR(dstr));
2111 SvLEN_set(TARG, SvLEN(dstr));
2112 isutf8 = DO_UTF8(dstr);
2116 TAINT_IF(rxtainted & 1);
2118 PUSHs(sv_2mortal(newSViv((I32)iters)));
2120 (void)SvPOK_only(TARG);
2123 TAINT_IF(rxtainted);
2126 LEAVE_SCOPE(oldsave);
2135 LEAVE_SCOPE(oldsave);
2144 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2145 ++*PL_markstack_ptr;
2146 LEAVE; /* exit inner scope */
2149 if (PL_stack_base + *PL_markstack_ptr > SP) {
2151 I32 gimme = GIMME_V;
2153 LEAVE; /* exit outer scope */
2154 (void)POPMARK; /* pop src */
2155 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2156 (void)POPMARK; /* pop dst */
2157 SP = PL_stack_base + POPMARK; /* pop original mark */
2158 if (gimme == G_SCALAR) {
2162 else if (gimme == G_ARRAY)
2169 ENTER; /* enter inner scope */
2172 src = PL_stack_base[*PL_markstack_ptr];
2176 RETURNOP(cLOGOP->op_other);
2187 register PERL_CONTEXT *cx;
2193 if (gimme == G_SCALAR) {
2196 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2198 *MARK = SvREFCNT_inc(TOPs);
2203 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2205 *MARK = sv_mortalcopy(sv);
2210 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2214 *MARK = &PL_sv_undef;
2218 else if (gimme == G_ARRAY) {
2219 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2220 if (!SvTEMP(*MARK)) {
2221 *MARK = sv_mortalcopy(*MARK);
2222 TAINT_NOT; /* Each item is independent */
2228 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2229 PL_curpm = newpm; /* ... and pop $1 et al */
2233 return pop_return();
2236 /* This duplicates the above code because the above code must not
2237 * get any slower by more conditions */
2245 register PERL_CONTEXT *cx;
2252 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2253 /* We are an argument to a function or grep().
2254 * This kind of lvalueness was legal before lvalue
2255 * subroutines too, so be backward compatible:
2256 * cannot report errors. */
2258 /* Scalar context *is* possible, on the LHS of -> only,
2259 * as in f()->meth(). But this is not an lvalue. */
2260 if (gimme == G_SCALAR)
2262 if (gimme == G_ARRAY) {
2263 if (!CvLVALUE(cx->blk_sub.cv))
2264 goto temporise_array;
2265 EXTEND_MORTAL(SP - newsp);
2266 for (mark = newsp + 1; mark <= SP; mark++) {
2269 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2270 *mark = sv_mortalcopy(*mark);
2272 /* Can be a localized value subject to deletion. */
2273 PL_tmps_stack[++PL_tmps_ix] = *mark;
2274 (void)SvREFCNT_inc(*mark);
2279 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2280 /* Here we go for robustness, not for speed, so we change all
2281 * the refcounts so the caller gets a live guy. Cannot set
2282 * TEMP, so sv_2mortal is out of question. */
2283 if (!CvLVALUE(cx->blk_sub.cv)) {
2288 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2290 if (gimme == G_SCALAR) {
2294 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2299 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2300 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2302 else { /* Can be a localized value
2303 * subject to deletion. */
2304 PL_tmps_stack[++PL_tmps_ix] = *mark;
2305 (void)SvREFCNT_inc(*mark);
2308 else { /* Should not happen? */
2313 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2314 (MARK > SP ? "Empty array" : "Array"));
2318 else if (gimme == G_ARRAY) {
2319 EXTEND_MORTAL(SP - newsp);
2320 for (mark = newsp + 1; mark <= SP; mark++) {
2321 if (*mark != &PL_sv_undef
2322 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2323 /* Might be flattened array after $#array = */
2329 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2330 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2333 /* Can be a localized value subject to deletion. */
2334 PL_tmps_stack[++PL_tmps_ix] = *mark;
2335 (void)SvREFCNT_inc(*mark);
2341 if (gimme == G_SCALAR) {
2345 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2347 *MARK = SvREFCNT_inc(TOPs);
2352 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2354 *MARK = sv_mortalcopy(sv);
2359 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2363 *MARK = &PL_sv_undef;
2367 else if (gimme == G_ARRAY) {
2369 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2370 if (!SvTEMP(*MARK)) {
2371 *MARK = sv_mortalcopy(*MARK);
2372 TAINT_NOT; /* Each item is independent */
2379 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2380 PL_curpm = newpm; /* ... and pop $1 et al */
2384 return pop_return();
2389 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2391 SV *dbsv = GvSV(PL_DBsub);
2393 if (!PERLDB_SUB_NN) {
2397 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2398 || strEQ(GvNAME(gv), "END")
2399 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2400 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2401 && (gv = (GV*)*svp) ))) {
2402 /* Use GV from the stack as a fallback. */
2403 /* GV is potentially non-unique, or contain different CV. */
2404 SV *tmp = newRV((SV*)cv);
2405 sv_setsv(dbsv, tmp);
2409 gv_efullname3(dbsv, gv, Nullch);
2413 (void)SvUPGRADE(dbsv, SVt_PVIV);
2414 (void)SvIOK_on(dbsv);
2415 SAVEIV(SvIVX(dbsv));
2416 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2420 PL_curcopdb = PL_curcop;
2421 cv = GvCV(PL_DBsub);
2431 register PERL_CONTEXT *cx;
2433 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2436 DIE(aTHX_ "Not a CODE reference");
2437 switch (SvTYPE(sv)) {
2443 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2445 SP = PL_stack_base + POPMARK;
2448 if (SvGMAGICAL(sv)) {
2452 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2455 sym = SvPV(sv, n_a);
2457 DIE(aTHX_ PL_no_usym, "a subroutine");
2458 if (PL_op->op_private & HINT_STRICT_REFS)
2459 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2460 cv = get_cv(sym, TRUE);
2465 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2466 tryAMAGICunDEREF(to_cv);
2469 if (SvTYPE(cv) == SVt_PVCV)
2474 DIE(aTHX_ "Not a CODE reference");
2479 if (!(cv = GvCVu((GV*)sv)))
2480 cv = sv_2cv(sv, &stash, &gv, FALSE);
2493 if (!CvROOT(cv) && !CvXSUB(cv)) {
2497 /* anonymous or undef'd function leaves us no recourse */
2498 if (CvANON(cv) || !(gv = CvGV(cv)))
2499 DIE(aTHX_ "Undefined subroutine called");
2501 /* autoloaded stub? */
2502 if (cv != GvCV(gv)) {
2505 /* should call AUTOLOAD now? */
2508 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2515 sub_name = sv_newmortal();
2516 gv_efullname3(sub_name, gv, Nullch);
2517 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2521 DIE(aTHX_ "Not a CODE reference");
2526 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2527 cv = get_db_sub(&sv, cv);
2529 DIE(aTHX_ "No DBsub routine");
2534 * First we need to check if the sub or method requires locking.
2535 * If so, we gain a lock on the CV, the first argument or the
2536 * stash (for static methods), as appropriate. This has to be
2537 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2538 * reschedule by returning a new op.
2540 MUTEX_LOCK(CvMUTEXP(cv));
2541 if (CvFLAGS(cv) & CVf_LOCKED) {
2543 if (CvFLAGS(cv) & CVf_METHOD) {
2544 if (SP > PL_stack_base + TOPMARK)
2545 sv = *(PL_stack_base + TOPMARK + 1);
2547 AV *av = (AV*)PL_curpad[0];
2548 if (hasargs || !av || AvFILLp(av) < 0
2549 || !(sv = AvARRAY(av)[0]))
2551 MUTEX_UNLOCK(CvMUTEXP(cv));
2552 DIE(aTHX_ "no argument for locked method call");
2559 char *stashname = SvPV(sv, len);
2560 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2566 MUTEX_UNLOCK(CvMUTEXP(cv));
2567 mg = condpair_magic(sv);
2568 MUTEX_LOCK(MgMUTEXP(mg));
2569 if (MgOWNER(mg) == thr)
2570 MUTEX_UNLOCK(MgMUTEXP(mg));
2573 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2575 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2577 MUTEX_UNLOCK(MgMUTEXP(mg));
2578 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2580 MUTEX_LOCK(CvMUTEXP(cv));
2583 * Now we have permission to enter the sub, we must distinguish
2584 * four cases. (0) It's an XSUB (in which case we don't care
2585 * about ownership); (1) it's ours already (and we're recursing);
2586 * (2) it's free (but we may already be using a cached clone);
2587 * (3) another thread owns it. Case (1) is easy: we just use it.
2588 * Case (2) means we look for a clone--if we have one, use it
2589 * otherwise grab ownership of cv. Case (3) means we look for a
2590 * clone (for non-XSUBs) and have to create one if we don't
2592 * Why look for a clone in case (2) when we could just grab
2593 * ownership of cv straight away? Well, we could be recursing,
2594 * i.e. we originally tried to enter cv while another thread
2595 * owned it (hence we used a clone) but it has been freed up
2596 * and we're now recursing into it. It may or may not be "better"
2597 * to use the clone but at least CvDEPTH can be trusted.
2599 if (CvOWNER(cv) == thr || CvXSUB(cv))
2600 MUTEX_UNLOCK(CvMUTEXP(cv));
2602 /* Case (2) or (3) */
2606 * XXX Might it be better to release CvMUTEXP(cv) while we
2607 * do the hv_fetch? We might find someone has pinched it
2608 * when we look again, in which case we would be in case
2609 * (3) instead of (2) so we'd have to clone. Would the fact
2610 * that we released the mutex more quickly make up for this?
2612 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2614 /* We already have a clone to use */
2615 MUTEX_UNLOCK(CvMUTEXP(cv));
2617 DEBUG_S(PerlIO_printf(Perl_debug_log,
2618 "entersub: %p already has clone %p:%s\n",
2619 thr, cv, SvPEEK((SV*)cv)));
2622 if (CvDEPTH(cv) == 0)
2623 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2626 /* (2) => grab ownership of cv. (3) => make clone */
2630 MUTEX_UNLOCK(CvMUTEXP(cv));
2631 DEBUG_S(PerlIO_printf(Perl_debug_log,
2632 "entersub: %p grabbing %p:%s in stash %s\n",
2633 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2634 HvNAME(CvSTASH(cv)) : "(none)"));
2637 /* Make a new clone. */
2639 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2640 MUTEX_UNLOCK(CvMUTEXP(cv));
2641 DEBUG_S((PerlIO_printf(Perl_debug_log,
2642 "entersub: %p cloning %p:%s\n",
2643 thr, cv, SvPEEK((SV*)cv))));
2645 * We're creating a new clone so there's no race
2646 * between the original MUTEX_UNLOCK and the
2647 * SvREFCNT_inc since no one will be trying to undef
2648 * it out from underneath us. At least, I don't think
2651 clonecv = cv_clone(cv);
2652 SvREFCNT_dec(cv); /* finished with this */
2653 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2654 CvOWNER(clonecv) = thr;
2658 DEBUG_S(if (CvDEPTH(cv) != 0)
2659 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2661 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2664 #endif /* USE_THREADS */
2667 #ifdef PERL_XSUB_OLDSTYLE
2668 if (CvOLDSTYLE(cv)) {
2669 I32 (*fp3)(int,int,int);
2671 register I32 items = SP - MARK;
2672 /* We dont worry to copy from @_. */
2677 PL_stack_sp = mark + 1;
2678 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2679 items = (*fp3)(CvXSUBANY(cv).any_i32,
2680 MARK - PL_stack_base + 1,
2682 PL_stack_sp = PL_stack_base + items;
2685 #endif /* PERL_XSUB_OLDSTYLE */
2687 I32 markix = TOPMARK;
2692 /* Need to copy @_ to stack. Alternative may be to
2693 * switch stack to @_, and copy return values
2694 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2698 av = (AV*)PL_curpad[0];
2700 av = GvAV(PL_defgv);
2701 #endif /* USE_THREADS */
2702 items = AvFILLp(av) + 1; /* @_ is not tieable */
2705 /* Mark is at the end of the stack. */
2707 Copy(AvARRAY(av), SP + 1, items, SV*);
2712 /* We assume first XSUB in &DB::sub is the called one. */
2714 SAVEVPTR(PL_curcop);
2715 PL_curcop = PL_curcopdb;
2718 /* Do we need to open block here? XXXX */
2719 (void)(*CvXSUB(cv))(aTHXo_ cv);
2721 /* Enforce some sanity in scalar context. */
2722 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2723 if (markix > PL_stack_sp - PL_stack_base)
2724 *(PL_stack_base + markix) = &PL_sv_undef;
2726 *(PL_stack_base + markix) = *PL_stack_sp;
2727 PL_stack_sp = PL_stack_base + markix;
2735 register I32 items = SP - MARK;
2736 AV* padlist = CvPADLIST(cv);
2737 SV** svp = AvARRAY(padlist);
2738 push_return(PL_op->op_next);
2739 PUSHBLOCK(cx, CXt_SUB, MARK);
2742 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2743 * that eval'' ops within this sub know the correct lexical space.
2744 * Owing the speed considerations, we choose to search for the cv
2745 * in doeval() instead.
2747 if (CvDEPTH(cv) < 2)
2748 (void)SvREFCNT_inc(cv);
2749 else { /* save temporaries on recursion? */
2750 PERL_STACK_OVERFLOW_CHECK();
2751 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2753 AV *newpad = newAV();
2754 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2755 I32 ix = AvFILLp((AV*)svp[1]);
2756 I32 names_fill = AvFILLp((AV*)svp[0]);
2757 svp = AvARRAY(svp[0]);
2758 for ( ;ix > 0; ix--) {
2759 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2760 char *name = SvPVX(svp[ix]);
2761 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2762 || *name == '&') /* anonymous code? */
2764 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2766 else { /* our own lexical */
2768 av_store(newpad, ix, sv = (SV*)newAV());
2769 else if (*name == '%')
2770 av_store(newpad, ix, sv = (SV*)newHV());
2772 av_store(newpad, ix, sv = NEWSV(0,0));
2776 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2777 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2780 av_store(newpad, ix, sv = NEWSV(0,0));
2784 av = newAV(); /* will be @_ */
2786 av_store(newpad, 0, (SV*)av);
2787 AvFLAGS(av) = AVf_REIFY;
2788 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2789 AvFILLp(padlist) = CvDEPTH(cv);
2790 svp = AvARRAY(padlist);
2795 AV* av = (AV*)PL_curpad[0];
2797 items = AvFILLp(av) + 1;
2799 /* Mark is at the end of the stack. */
2801 Copy(AvARRAY(av), SP + 1, items, SV*);
2806 #endif /* USE_THREADS */
2807 SAVEVPTR(PL_curpad);
2808 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2811 #endif /* USE_THREADS */
2817 DEBUG_S(PerlIO_printf(Perl_debug_log,
2818 "%p entersub preparing @_\n", thr));
2820 av = (AV*)PL_curpad[0];
2822 /* @_ is normally not REAL--this should only ever
2823 * happen when DB::sub() calls things that modify @_ */
2829 cx->blk_sub.savearray = GvAV(PL_defgv);
2830 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2831 #endif /* USE_THREADS */
2832 cx->blk_sub.oldcurpad = PL_curpad;
2833 cx->blk_sub.argarray = av;
2836 if (items > AvMAX(av) + 1) {
2838 if (AvARRAY(av) != ary) {
2839 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2840 SvPVX(av) = (char*)ary;
2842 if (items > AvMAX(av) + 1) {
2843 AvMAX(av) = items - 1;
2844 Renew(ary,items,SV*);
2846 SvPVX(av) = (char*)ary;
2849 Copy(MARK,AvARRAY(av),items,SV*);
2850 AvFILLp(av) = items - 1;
2858 /* warning must come *after* we fully set up the context
2859 * stuff so that __WARN__ handlers can safely dounwind()
2862 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2863 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2864 sub_crush_depth(cv);
2866 DEBUG_S(PerlIO_printf(Perl_debug_log,
2867 "%p entersub returning %p\n", thr, CvSTART(cv)));
2869 RETURNOP(CvSTART(cv));
2874 Perl_sub_crush_depth(pTHX_ CV *cv)
2877 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
2879 SV* tmpstr = sv_newmortal();
2880 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2881 Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
2891 IV elem = SvIV(elemsv);
2893 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2894 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2897 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2898 Perl_warner(aTHX_ WARN_MISC, "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2900 elem -= PL_curcop->cop_arybase;
2901 if (SvTYPE(av) != SVt_PVAV)
2903 svp = av_fetch(av, elem, lval && !defer);
2905 if (!svp || *svp == &PL_sv_undef) {
2908 DIE(aTHX_ PL_no_aelem, elem);
2909 lv = sv_newmortal();
2910 sv_upgrade(lv, SVt_PVLV);
2912 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
2913 LvTARG(lv) = SvREFCNT_inc(av);
2914 LvTARGOFF(lv) = elem;
2919 if (PL_op->op_private & OPpLVAL_INTRO)
2920 save_aelem(av, elem, svp);
2921 else if (PL_op->op_private & OPpDEREF)
2922 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2924 sv = (svp ? *svp : &PL_sv_undef);
2925 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2926 sv = sv_mortalcopy(sv);
2932 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2938 Perl_croak(aTHX_ PL_no_modify);
2939 if (SvTYPE(sv) < SVt_RV)
2940 sv_upgrade(sv, SVt_RV);
2941 else if (SvTYPE(sv) >= SVt_PV) {
2942 (void)SvOOK_off(sv);
2943 Safefree(SvPVX(sv));
2944 SvLEN(sv) = SvCUR(sv) = 0;
2948 SvRV(sv) = NEWSV(355,0);
2951 SvRV(sv) = (SV*)newAV();
2954 SvRV(sv) = (SV*)newHV();
2969 if (SvTYPE(rsv) == SVt_PVCV) {
2975 SETs(method_common(sv, Null(U32*)));
2982 SV* sv = cSVOP->op_sv;
2983 U32 hash = SvUVX(sv);
2985 XPUSHs(method_common(sv, &hash));
2990 S_method_common(pTHX_ SV* meth, U32* hashp)
3001 name = SvPV(meth, namelen);
3002 sv = *(PL_stack_base + TOPMARK + 1);
3005 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3014 /* this isn't a reference */
3017 !(packname = SvPV(sv, packlen)) ||
3018 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3019 !(ob=(SV*)GvIO(iogv)))
3021 /* this isn't the name of a filehandle either */
3023 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3024 ? !isIDFIRST_utf8((U8*)packname)
3025 : !isIDFIRST(*packname)
3028 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3029 SvOK(sv) ? "without a package or object reference"
3030 : "on an undefined value");
3032 /* assume it's a package name */
3033 stash = gv_stashpvn(packname, packlen, FALSE);
3036 /* it _is_ a filehandle name -- replace with a reference */
3037 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3040 /* if we got here, ob should be a reference or a glob */
3041 if (!ob || !(SvOBJECT(ob)
3042 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3045 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3049 stash = SvSTASH(ob);
3052 /* NOTE: stash may be null, hope hv_fetch_ent and
3053 gv_fetchmethod can cope (it seems they can) */
3055 /* shortcut for simple names */
3057 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3059 gv = (GV*)HeVAL(he);
3060 if (isGV(gv) && GvCV(gv) &&
3061 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3062 return (SV*)GvCV(gv);
3066 gv = gv_fetchmethod(stash, name);
3069 /* This code tries to figure out just what went wrong with
3070 gv_fetchmethod. It therefore needs to duplicate a lot of
3071 the internals of that function. We can't move it inside
3072 Perl_gv_fetchmethod_autoload(), however, since that would
3073 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3080 for (p = name; *p; p++) {
3082 sep = p, leaf = p + 1;
3083 else if (*p == ':' && *(p + 1) == ':')
3084 sep = p, leaf = p + 2;
3086 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3087 /* the method name is unqualified or starts with SUPER:: */
3088 packname = sep ? CopSTASHPV(PL_curcop) :
3089 stash ? HvNAME(stash) : packname;
3090 packlen = strlen(packname);
3093 /* the method name is qualified */
3095 packlen = sep - name;
3098 /* we're relying on gv_fetchmethod not autovivifying the stash */
3099 if (gv_stashpvn(packname, packlen, FALSE)) {
3101 "Can't locate object method \"%s\" via package \"%.*s\"",
3102 leaf, (int)packlen, packname);
3106 "Can't locate object method \"%s\" via package \"%.*s\""
3107 " (perhaps you forgot to load \"%.*s\"?)",
3108 leaf, (int)packlen, packname, (int)packlen, packname);
3111 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3116 unset_cvowner(pTHXo_ void *cvarg)
3118 register CV* cv = (CV *) cvarg;
3120 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3121 thr, cv, SvPEEK((SV*)cv))));
3122 MUTEX_LOCK(CvMUTEXP(cv));
3123 DEBUG_S(if (CvDEPTH(cv) != 0)
3124 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3126 assert(thr == CvOWNER(cv));
3128 MUTEX_UNLOCK(CvMUTEXP(cv));
3131 #endif /* USE_THREADS */