3 * Copyright (c) 1991-2002, 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);
83 XPUSHs((SV*)cGVOP_gv);
94 RETURNOP(cLOGOP->op_other);
102 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
104 temp = left; left = right; right = temp;
106 if (PL_tainting && PL_tainted && !SvTAINTED(left))
108 SvSetMagicSV(right, left);
117 RETURNOP(cLOGOP->op_other);
119 RETURNOP(cLOGOP->op_next);
125 TAINT_NOT; /* Each statement is presumed innocent */
126 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
128 oldsave = PL_scopestack[PL_scopestack_ix - 1];
129 LEAVE_SCOPE(oldsave);
135 dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
142 char* rpv = SvPV(right, rlen); /* mg_get(right) happens here */
143 bool rbyte = !SvUTF8(right);
145 if (TARG == right && right != left) {
146 right = sv_2mortal(newSVpvn(rpv, rlen));
147 rpv = SvPV(right, rlen); /* no point setting UTF8 here */
151 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
152 lbyte = !SvUTF8(left);
153 sv_setpvn(TARG, lpv, llen);
159 else { /* TARG == left */
160 if (SvGMAGICAL(left))
161 mg_get(left); /* or mg_get(left) may happen here */
164 lpv = SvPV_nomg(left, llen);
165 lbyte = !SvUTF8(left);
168 #if defined(PERL_Y2KWARN)
169 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
170 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
171 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
173 Perl_warner(aTHX_ packWARN(WARN_Y2K), "Possible Y2K bug: %s",
174 "about to append an integer to '19'");
179 if (lbyte != rbyte) {
181 sv_utf8_upgrade_nomg(TARG);
183 sv_utf8_upgrade_nomg(right);
184 rpv = SvPV(right, rlen);
187 sv_catpvn_nomg(TARG, rpv, rlen);
198 if (PL_op->op_flags & OPf_MOD) {
199 if (PL_op->op_private & OPpLVAL_INTRO)
200 SAVECLEARSV(PL_curpad[PL_op->op_targ]);
201 else if (PL_op->op_private & OPpDEREF) {
203 vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
212 tryAMAGICunTARGET(iter, 0);
213 PL_last_in_gv = (GV*)(*PL_stack_sp--);
214 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
215 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
216 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
219 XPUSHs((SV*)PL_last_in_gv);
222 PL_last_in_gv = (GV*)(*PL_stack_sp--);
225 return do_readline();
230 dSP; tryAMAGICbinSET(eq,0);
231 #ifndef NV_PRESERVES_UV
232 if (SvROK(TOPs) && SvROK(TOPm1s)) {
234 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
238 #ifdef PERL_PRESERVE_IVUV
241 /* Unless the left argument is integer in range we are going
242 to have to use NV maths. Hence only attempt to coerce the
243 right argument if we know the left is integer. */
246 bool auvok = SvUOK(TOPm1s);
247 bool buvok = SvUOK(TOPs);
249 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
250 /* Casting IV to UV before comparison isn't going to matter
251 on 2s complement. On 1s complement or sign&magnitude
252 (if we have any of them) it could to make negative zero
253 differ from normal zero. As I understand it. (Need to
254 check - is negative zero implementation defined behaviour
256 UV buv = SvUVX(POPs);
257 UV auv = SvUVX(TOPs);
259 SETs(boolSV(auv == buv));
262 { /* ## Mixed IV,UV ## */
266 /* == is commutative so doesn't matter which is left or right */
268 /* top of stack (b) is the iv */
277 /* As uv is a UV, it's >0, so it cannot be == */
281 /* we know iv is >= 0 */
282 SETs(boolSV((UV)iv == SvUVX(uvp)));
290 SETs(boolSV(TOPn == value));
298 if (SvTYPE(TOPs) > SVt_PVLV)
299 DIE(aTHX_ PL_no_modify);
300 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
301 && SvIVX(TOPs) != IV_MAX)
304 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
306 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
319 RETURNOP(cLOGOP->op_other);
325 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
326 useleft = USE_LEFT(TOPm1s);
327 #ifdef PERL_PRESERVE_IVUV
328 /* We must see if we can perform the addition with integers if possible,
329 as the integer code detects overflow while the NV code doesn't.
330 If either argument hasn't had a numeric conversion yet attempt to get
331 the IV. It's important to do this now, rather than just assuming that
332 it's not IOK as a PV of "9223372036854775806" may not take well to NV
333 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
334 integer in case the second argument is IV=9223372036854775806
335 We can (now) rely on sv_2iv to do the right thing, only setting the
336 public IOK flag if the value in the NV (or PV) slot is truly integer.
338 A side effect is that this also aggressively prefers integer maths over
339 fp maths for integer values.
341 How to detect overflow?
343 C 99 section 6.2.6.1 says
345 The range of nonnegative values of a signed integer type is a subrange
346 of the corresponding unsigned integer type, and the representation of
347 the same value in each type is the same. A computation involving
348 unsigned operands can never overflow, because a result that cannot be
349 represented by the resulting unsigned integer type is reduced modulo
350 the number that is one greater than the largest value that can be
351 represented by the resulting type.
355 which I read as "unsigned ints wrap."
357 signed integer overflow seems to be classed as "exception condition"
359 If an exceptional condition occurs during the evaluation of an
360 expression (that is, if the result is not mathematically defined or not
361 in the range of representable values for its type), the behavior is
364 (6.5, the 5th paragraph)
366 I had assumed that on 2s complement machines signed arithmetic would
367 wrap, hence coded pp_add and pp_subtract on the assumption that
368 everything perl builds on would be happy. After much wailing and
369 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
370 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
371 unsigned code below is actually shorter than the old code. :-)
376 /* Unless the left argument is integer in range we are going to have to
377 use NV maths. Hence only attempt to coerce the right argument if
378 we know the left is integer. */
386 /* left operand is undef, treat as zero. + 0 is identity,
387 Could SETi or SETu right now, but space optimise by not adding
388 lots of code to speed up what is probably a rarish case. */
390 /* Left operand is defined, so is it IV? */
393 if ((auvok = SvUOK(TOPm1s)))
396 register IV aiv = SvIVX(TOPm1s);
399 auvok = 1; /* Now acting as a sign flag. */
400 } else { /* 2s complement assumption for IV_MIN */
408 bool result_good = 0;
411 bool buvok = SvUOK(TOPs);
416 register IV biv = SvIVX(TOPs);
423 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
424 else "IV" now, independent of how it came in.
425 if a, b represents positive, A, B negative, a maps to -A etc
430 all UV maths. negate result if A negative.
431 add if signs same, subtract if signs differ. */
437 /* Must get smaller */
443 /* result really should be -(auv-buv). as its negation
444 of true value, need to swap our result flag */
461 if (result <= (UV)IV_MIN)
464 /* result valid, but out of range for IV. */
469 } /* Overflow, drop through to NVs. */
476 /* left operand is undef, treat as zero. + 0.0 is identity. */
480 SETn( value + TOPn );
488 AV *av = GvAV(cGVOP_gv);
489 U32 lval = PL_op->op_flags & OPf_MOD;
490 SV** svp = av_fetch(av, PL_op->op_private, lval);
491 SV *sv = (svp ? *svp : &PL_sv_undef);
493 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
494 sv = sv_mortalcopy(sv);
503 do_join(TARG, *MARK, MARK, SP);
514 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
515 * will be enough to hold an OP*.
517 SV* sv = sv_newmortal();
518 sv_upgrade(sv, SVt_PVLV);
520 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
528 /* Oversized hot code. */
532 dSP; dMARK; dORIGMARK;
538 if (PL_op->op_flags & OPf_STACKED)
543 if (gv && (io = GvIO(gv))
544 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
547 if (MARK == ORIGMARK) {
548 /* If using default handle then we need to make space to
549 * pass object as 1st arg, so move other args up ...
553 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
557 *MARK = SvTIED_obj((SV*)io, mg);
560 call_method("PRINT", G_SCALAR);
568 if (!(io = GvIO(gv))) {
569 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
570 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
572 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
573 report_evil_fh(gv, io, PL_op->op_type);
574 SETERRNO(EBADF,RMS_IFI);
577 else if (!(fp = IoOFP(io))) {
578 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
580 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
581 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
582 report_evil_fh(gv, io, PL_op->op_type);
584 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
589 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
591 if (!do_print(*MARK, fp))
595 if (!do_print(PL_ofs_sv, fp)) { /* $, */
604 if (!do_print(*MARK, fp))
612 if (PL_ors_sv && SvOK(PL_ors_sv))
613 if (!do_print(PL_ors_sv, fp)) /* $\ */
616 if (IoFLAGS(io) & IOf_FLUSH)
617 if (PerlIO_flush(fp) == EOF)
638 tryAMAGICunDEREF(to_av);
641 if (SvTYPE(av) != SVt_PVAV)
642 DIE(aTHX_ "Not an ARRAY reference");
643 if (PL_op->op_flags & OPf_REF) {
648 if (GIMME == G_SCALAR)
649 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
655 if (SvTYPE(sv) == SVt_PVAV) {
657 if (PL_op->op_flags & OPf_REF) {
662 if (GIMME == G_SCALAR)
663 Perl_croak(aTHX_ "Can't return array to lvalue"
672 if (SvTYPE(sv) != SVt_PVGV) {
676 if (SvGMAGICAL(sv)) {
682 if (PL_op->op_flags & OPf_REF ||
683 PL_op->op_private & HINT_STRICT_REFS)
684 DIE(aTHX_ PL_no_usym, "an ARRAY");
685 if (ckWARN(WARN_UNINITIALIZED))
687 if (GIMME == G_ARRAY) {
694 if ((PL_op->op_flags & OPf_SPECIAL) &&
695 !(PL_op->op_flags & OPf_MOD))
697 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
699 && (!is_gv_magical(sym,len,0)
700 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
706 if (PL_op->op_private & HINT_STRICT_REFS)
707 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
708 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
715 if (PL_op->op_private & OPpLVAL_INTRO)
717 if (PL_op->op_flags & OPf_REF) {
722 if (GIMME == G_SCALAR)
723 Perl_croak(aTHX_ "Can't return array to lvalue"
731 if (GIMME == G_ARRAY) {
732 I32 maxarg = AvFILL(av) + 1;
733 (void)POPs; /* XXXX May be optimized away? */
735 if (SvRMAGICAL(av)) {
737 for (i=0; i < (U32)maxarg; i++) {
738 SV **svp = av_fetch(av, i, FALSE);
739 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
743 Copy(AvARRAY(av), SP+1, maxarg, SV*);
747 else if (GIMME_V == G_SCALAR) {
749 I32 maxarg = AvFILL(av) + 1;
762 tryAMAGICunDEREF(to_hv);
765 if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
766 DIE(aTHX_ "Not a HASH reference");
767 if (PL_op->op_flags & OPf_REF) {
772 if (GIMME == G_SCALAR)
773 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
779 if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
781 if (PL_op->op_flags & OPf_REF) {
786 if (GIMME == G_SCALAR)
787 Perl_croak(aTHX_ "Can't return hash to lvalue"
796 if (SvTYPE(sv) != SVt_PVGV) {
800 if (SvGMAGICAL(sv)) {
806 if (PL_op->op_flags & OPf_REF ||
807 PL_op->op_private & HINT_STRICT_REFS)
808 DIE(aTHX_ PL_no_usym, "a HASH");
809 if (ckWARN(WARN_UNINITIALIZED))
811 if (GIMME == G_ARRAY) {
818 if ((PL_op->op_flags & OPf_SPECIAL) &&
819 !(PL_op->op_flags & OPf_MOD))
821 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
823 && (!is_gv_magical(sym,len,0)
824 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
830 if (PL_op->op_private & HINT_STRICT_REFS)
831 DIE(aTHX_ PL_no_symref, sym, "a HASH");
832 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
839 if (PL_op->op_private & OPpLVAL_INTRO)
841 if (PL_op->op_flags & OPf_REF) {
846 if (GIMME == G_SCALAR)
847 Perl_croak(aTHX_ "Can't return hash to lvalue"
855 if (GIMME == G_ARRAY) { /* array wanted */
856 *PL_stack_sp = (SV*)hv;
861 if (SvTYPE(hv) == SVt_PVAV)
862 hv = avhv_keys((AV*)hv);
864 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
865 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
875 S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
881 leftop = ((BINOP*)PL_op)->op_last;
883 assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
884 leftop = ((LISTOP*)leftop)->op_first;
886 /* Skip PUSHMARK and each element already assigned to. */
887 for (i = lelem - firstlelem; i > 0; i--) {
888 leftop = leftop->op_sibling;
891 if (leftop->op_type != OP_RV2HV)
896 av_fill(ary, 0); /* clear all but the fields hash */
897 if (lastrelem >= relem) {
898 while (relem < lastrelem) { /* gobble up all the rest */
902 /* Avoid a memory leak when avhv_store_ent dies. */
903 tmpstr = sv_newmortal();
904 sv_setsv(tmpstr,relem[1]); /* value */
906 if (avhv_store_ent(ary,relem[0],tmpstr,0))
907 (void)SvREFCNT_inc(tmpstr);
908 if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
914 if (relem == lastrelem)
920 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
924 if (ckWARN(WARN_MISC)) {
925 if (relem == firstrelem &&
927 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
928 SvTYPE(SvRV(*relem)) == SVt_PVHV))
930 Perl_warner(aTHX_ packWARN(WARN_MISC),
931 "Reference found where even-sized list expected");
934 Perl_warner(aTHX_ packWARN(WARN_MISC),
935 "Odd number of elements in hash assignment");
937 if (SvTYPE(hash) == SVt_PVAV) {
939 tmpstr = sv_newmortal();
940 if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
941 (void)SvREFCNT_inc(tmpstr);
942 if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
947 tmpstr = NEWSV(29,0);
948 didstore = hv_store_ent(hash,*relem,tmpstr,0);
949 if (SvMAGICAL(hash)) {
950 if (SvSMAGICAL(tmpstr))
963 SV **lastlelem = PL_stack_sp;
964 SV **lastrelem = PL_stack_base + POPMARK;
965 SV **firstrelem = PL_stack_base + POPMARK + 1;
966 SV **firstlelem = lastrelem + 1;
979 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
981 /* If there's a common identifier on both sides we have to take
982 * special care that assigning the identifier on the left doesn't
983 * clobber a value on the right that's used later in the list.
985 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
986 EXTEND_MORTAL(lastrelem - firstrelem + 1);
987 for (relem = firstrelem; relem <= lastrelem; relem++) {
990 TAINT_NOT; /* Each item is independent */
991 *relem = sv_mortalcopy(sv);
1001 while (lelem <= lastlelem) {
1002 TAINT_NOT; /* Each item stands on its own, taintwise. */
1004 switch (SvTYPE(sv)) {
1007 magic = SvMAGICAL(ary) != 0;
1008 if (PL_op->op_private & OPpASSIGN_HASH) {
1009 switch (do_maybe_phash(ary, lelem, firstlelem, relem,
1015 do_oddball((HV*)ary, relem, firstrelem);
1017 relem = lastrelem + 1;
1022 av_extend(ary, lastrelem - relem);
1024 while (relem <= lastrelem) { /* gobble up all the rest */
1028 sv_setsv(sv,*relem);
1030 didstore = av_store(ary,i++,sv);
1040 case SVt_PVHV: { /* normal hash */
1044 magic = SvMAGICAL(hash) != 0;
1047 while (relem < lastrelem) { /* gobble up all the rest */
1052 sv = &PL_sv_no, relem++;
1053 tmpstr = NEWSV(29,0);
1055 sv_setsv(tmpstr,*relem); /* value */
1056 *(relem++) = tmpstr;
1057 didstore = hv_store_ent(hash,sv,tmpstr,0);
1059 if (SvSMAGICAL(tmpstr))
1066 if (relem == lastrelem) {
1067 do_oddball(hash, relem, firstrelem);
1073 if (SvIMMORTAL(sv)) {
1074 if (relem <= lastrelem)
1078 if (relem <= lastrelem) {
1079 sv_setsv(sv, *relem);
1083 sv_setsv(sv, &PL_sv_undef);
1088 if (PL_delaymagic & ~DM_DELAY) {
1089 if (PL_delaymagic & DM_UID) {
1090 #ifdef HAS_SETRESUID
1091 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1093 # ifdef HAS_SETREUID
1094 (void)setreuid(PL_uid,PL_euid);
1097 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1098 (void)setruid(PL_uid);
1099 PL_delaymagic &= ~DM_RUID;
1101 # endif /* HAS_SETRUID */
1103 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1104 (void)seteuid(PL_uid);
1105 PL_delaymagic &= ~DM_EUID;
1107 # endif /* HAS_SETEUID */
1108 if (PL_delaymagic & DM_UID) {
1109 if (PL_uid != PL_euid)
1110 DIE(aTHX_ "No setreuid available");
1111 (void)PerlProc_setuid(PL_uid);
1113 # endif /* HAS_SETREUID */
1114 #endif /* HAS_SETRESUID */
1115 PL_uid = PerlProc_getuid();
1116 PL_euid = PerlProc_geteuid();
1118 if (PL_delaymagic & DM_GID) {
1119 #ifdef HAS_SETRESGID
1120 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1122 # ifdef HAS_SETREGID
1123 (void)setregid(PL_gid,PL_egid);
1126 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1127 (void)setrgid(PL_gid);
1128 PL_delaymagic &= ~DM_RGID;
1130 # endif /* HAS_SETRGID */
1132 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1133 (void)setegid(PL_gid);
1134 PL_delaymagic &= ~DM_EGID;
1136 # endif /* HAS_SETEGID */
1137 if (PL_delaymagic & DM_GID) {
1138 if (PL_gid != PL_egid)
1139 DIE(aTHX_ "No setregid available");
1140 (void)PerlProc_setgid(PL_gid);
1142 # endif /* HAS_SETREGID */
1143 #endif /* HAS_SETRESGID */
1144 PL_gid = PerlProc_getgid();
1145 PL_egid = PerlProc_getegid();
1147 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1152 if (gimme == G_VOID)
1153 SP = firstrelem - 1;
1154 else if (gimme == G_SCALAR) {
1157 SETi(lastrelem - firstrelem + 1);
1163 SP = firstrelem + (lastlelem - firstlelem);
1164 lelem = firstlelem + (relem - firstrelem);
1166 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1174 register PMOP *pm = cPMOP;
1175 SV *rv = sv_newmortal();
1176 SV *sv = newSVrv(rv, "Regexp");
1177 if (pm->op_pmdynflags & PMdf_TAINTED)
1179 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1186 register PMOP *pm = cPMOP;
1192 I32 r_flags = REXEC_CHECKED;
1193 char *truebase; /* Start of string */
1194 register REGEXP *rx = PM_GETRE(pm);
1199 I32 oldsave = PL_savestack_ix;
1200 I32 update_minmatch = 1;
1201 I32 had_zerolen = 0;
1203 if (PL_op->op_flags & OPf_STACKED)
1210 PUTBACK; /* EVAL blocks need stack_sp. */
1211 s = SvPV(TARG, len);
1214 DIE(aTHX_ "panic: pp_match");
1215 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1216 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1219 PL_reg_match_utf8 = DO_UTF8(TARG);
1221 /* PMdf_USED is set after a ?? matches once */
1222 if (pm->op_pmdynflags & PMdf_USED) {
1224 if (gimme == G_ARRAY)
1229 /* empty pattern special-cased to use last successful pattern if possible */
1230 if (!rx->prelen && PL_curpm) {
1235 if (rx->minlen > (I32)len)
1240 /* XXXX What part of this is needed with true \G-support? */
1241 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1243 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1244 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1245 if (mg && mg->mg_len >= 0) {
1246 if (!(rx->reganch & ROPT_GPOS_SEEN))
1247 rx->endp[0] = rx->startp[0] = mg->mg_len;
1248 else if (rx->reganch & ROPT_ANCH_GPOS) {
1249 r_flags |= REXEC_IGNOREPOS;
1250 rx->endp[0] = rx->startp[0] = mg->mg_len;
1252 minmatch = (mg->mg_flags & MGf_MINMATCH);
1253 update_minmatch = 0;
1257 if ((!global && rx->nparens)
1258 || SvTEMP(TARG) || PL_sawampersand)
1259 r_flags |= REXEC_COPY_STR;
1261 r_flags |= REXEC_SCREAM;
1263 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1264 SAVEINT(PL_multiline);
1265 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1269 if (global && rx->startp[0] != -1) {
1270 t = s = rx->endp[0] + truebase;
1271 if ((s + rx->minlen) > strend)
1273 if (update_minmatch++)
1274 minmatch = had_zerolen;
1276 if (rx->reganch & RE_USE_INTUIT &&
1277 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1278 PL_bostr = truebase;
1279 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1283 if ( (rx->reganch & ROPT_CHECK_ALL)
1285 && ((rx->reganch & ROPT_NOSCAN)
1286 || !((rx->reganch & RE_INTUIT_TAIL)
1287 && (r_flags & REXEC_SCREAM)))
1288 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1291 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1294 if (dynpm->op_pmflags & PMf_ONCE)
1295 dynpm->op_pmdynflags |= PMdf_USED;
1304 RX_MATCH_TAINTED_on(rx);
1305 TAINT_IF(RX_MATCH_TAINTED(rx));
1306 if (gimme == G_ARRAY) {
1307 I32 nparens, i, len;
1309 nparens = rx->nparens;
1310 if (global && !nparens)
1314 SPAGAIN; /* EVAL blocks could move the stack. */
1315 EXTEND(SP, nparens + i);
1316 EXTEND_MORTAL(nparens + i);
1317 for (i = !i; i <= nparens; i++) {
1318 PUSHs(sv_newmortal());
1320 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1321 len = rx->endp[i] - rx->startp[i];
1322 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1323 len < 0 || len > strend - s)
1324 DIE(aTHX_ "panic: pp_match start/end pointers");
1325 s = rx->startp[i] + truebase;
1326 sv_setpvn(*SP, s, len);
1327 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1332 if (dynpm->op_pmflags & PMf_CONTINUE) {
1334 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1335 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1337 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1338 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1340 if (rx->startp[0] != -1) {
1341 mg->mg_len = rx->endp[0];
1342 if (rx->startp[0] == rx->endp[0])
1343 mg->mg_flags |= MGf_MINMATCH;
1345 mg->mg_flags &= ~MGf_MINMATCH;
1348 had_zerolen = (rx->startp[0] != -1
1349 && rx->startp[0] == rx->endp[0]);
1350 PUTBACK; /* EVAL blocks may use stack */
1351 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1356 LEAVE_SCOPE(oldsave);
1362 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1363 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1365 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1366 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1368 if (rx->startp[0] != -1) {
1369 mg->mg_len = rx->endp[0];
1370 if (rx->startp[0] == rx->endp[0])
1371 mg->mg_flags |= MGf_MINMATCH;
1373 mg->mg_flags &= ~MGf_MINMATCH;
1376 LEAVE_SCOPE(oldsave);
1380 yup: /* Confirmed by INTUIT */
1382 RX_MATCH_TAINTED_on(rx);
1383 TAINT_IF(RX_MATCH_TAINTED(rx));
1385 if (dynpm->op_pmflags & PMf_ONCE)
1386 dynpm->op_pmdynflags |= PMdf_USED;
1387 if (RX_MATCH_COPIED(rx))
1388 Safefree(rx->subbeg);
1389 RX_MATCH_COPIED_off(rx);
1390 rx->subbeg = Nullch;
1392 rx->subbeg = truebase;
1393 rx->startp[0] = s - truebase;
1394 if (PL_reg_match_utf8) {
1395 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1396 rx->endp[0] = t - truebase;
1399 rx->endp[0] = s - truebase + rx->minlen;
1401 rx->sublen = strend - truebase;
1404 if (PL_sawampersand) {
1407 rx->subbeg = savepvn(t, strend - t);
1408 rx->sublen = strend - t;
1409 RX_MATCH_COPIED_on(rx);
1410 off = rx->startp[0] = s - t;
1411 rx->endp[0] = off + rx->minlen;
1413 else { /* startp/endp are used by @- @+. */
1414 rx->startp[0] = s - truebase;
1415 rx->endp[0] = s - truebase + rx->minlen;
1417 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1418 LEAVE_SCOPE(oldsave);
1423 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1424 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1425 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1430 LEAVE_SCOPE(oldsave);
1431 if (gimme == G_ARRAY)
1437 Perl_do_readline(pTHX)
1439 dSP; dTARGETSTACKED;
1444 register IO *io = GvIO(PL_last_in_gv);
1445 register I32 type = PL_op->op_type;
1446 I32 gimme = GIMME_V;
1449 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1451 XPUSHs(SvTIED_obj((SV*)io, mg));
1454 call_method("READLINE", gimme);
1457 if (gimme == G_SCALAR) {
1459 SvSetSV_nosteal(TARG, result);
1468 if (IoFLAGS(io) & IOf_ARGV) {
1469 if (IoFLAGS(io) & IOf_START) {
1471 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1472 IoFLAGS(io) &= ~IOf_START;
1473 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1474 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1475 SvSETMAGIC(GvSV(PL_last_in_gv));
1480 fp = nextargv(PL_last_in_gv);
1481 if (!fp) { /* Note: fp != IoIFP(io) */
1482 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1485 else if (type == OP_GLOB)
1486 fp = Perl_start_glob(aTHX_ POPs, io);
1488 else if (type == OP_GLOB)
1490 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1491 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1495 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1496 && (!io || !(IoFLAGS(io) & IOf_START))) {
1497 if (type == OP_GLOB)
1498 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1499 "glob failed (can't start child: %s)",
1502 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1504 if (gimme == G_SCALAR) {
1505 /* undef TARG, and push that undefined value */
1506 SV_CHECK_THINKFIRST(TARG);
1507 (void)SvOK_off(TARG);
1513 if (gimme == G_SCALAR) {
1517 (void)SvUPGRADE(sv, SVt_PV);
1518 tmplen = SvLEN(sv); /* remember if already alloced */
1520 Sv_Grow(sv, 80); /* try short-buffering it */
1522 if (type == OP_RCATLINE && SvOK(sv)) {
1525 (void)SvPV_force(sv, n_a);
1531 sv = sv_2mortal(NEWSV(57, 80));
1535 /* This should not be marked tainted if the fp is marked clean */
1536 #define MAYBE_TAINT_LINE(io, sv) \
1537 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1542 /* delay EOF state for a snarfed empty file */
1543 #define SNARF_EOF(gimme,rs,io,sv) \
1544 (gimme != G_SCALAR || SvCUR(sv) \
1545 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1549 if (!sv_gets(sv, fp, offset)
1550 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1552 PerlIO_clearerr(fp);
1553 if (IoFLAGS(io) & IOf_ARGV) {
1554 fp = nextargv(PL_last_in_gv);
1557 (void)do_close(PL_last_in_gv, FALSE);
1559 else if (type == OP_GLOB) {
1560 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1561 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1562 "glob failed (child exited with status %d%s)",
1563 (int)(STATUS_CURRENT >> 8),
1564 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1567 if (gimme == G_SCALAR) {
1568 SV_CHECK_THINKFIRST(TARG);
1569 (void)SvOK_off(TARG);
1573 MAYBE_TAINT_LINE(io, sv);
1576 MAYBE_TAINT_LINE(io, sv);
1578 IoFLAGS(io) |= IOf_NOLINE;
1582 if (type == OP_GLOB) {
1585 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1586 tmps = SvEND(sv) - 1;
1587 if (*tmps == *SvPVX(PL_rs)) {
1592 for (tmps = SvPVX(sv); *tmps; tmps++)
1593 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1594 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1596 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1597 (void)POPs; /* Unmatched wildcard? Chuck it... */
1601 if (gimme == G_ARRAY) {
1602 if (SvLEN(sv) - SvCUR(sv) > 20) {
1603 SvLEN_set(sv, SvCUR(sv)+1);
1604 Renew(SvPVX(sv), SvLEN(sv), char);
1606 sv = sv_2mortal(NEWSV(58, 80));
1609 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1610 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1614 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1615 Renew(SvPVX(sv), SvLEN(sv), char);
1624 register PERL_CONTEXT *cx;
1625 I32 gimme = OP_GIMME(PL_op, -1);
1628 if (cxstack_ix >= 0)
1629 gimme = cxstack[cxstack_ix].blk_gimme;
1637 PUSHBLOCK(cx, CXt_BLOCK, SP);
1649 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1650 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1652 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1655 if (SvTYPE(hv) == SVt_PVHV) {
1656 if (PL_op->op_private & OPpLVAL_INTRO) {
1659 /* does the element we're localizing already exist? */
1661 /* can we determine whether it exists? */
1663 || mg_find((SV*)hv, PERL_MAGIC_env)
1664 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1665 /* Try to preserve the existenceness of a tied hash
1666 * element by using EXISTS and DELETE if possible.
1667 * Fallback to FETCH and STORE otherwise */
1668 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1669 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1670 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1672 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1675 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1676 svp = he ? &HeVAL(he) : 0;
1678 else if (SvTYPE(hv) == SVt_PVAV) {
1679 if (PL_op->op_private & OPpLVAL_INTRO)
1680 DIE(aTHX_ "Can't localize pseudo-hash element");
1681 svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, hash);
1687 if (!svp || *svp == &PL_sv_undef) {
1692 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1694 lv = sv_newmortal();
1695 sv_upgrade(lv, SVt_PVLV);
1697 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1698 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1699 LvTARG(lv) = SvREFCNT_inc(hv);
1704 if (PL_op->op_private & OPpLVAL_INTRO) {
1705 if (HvNAME(hv) && isGV(*svp))
1706 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1710 char *key = SvPV(keysv, keylen);
1711 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1713 save_helem(hv, keysv, svp);
1716 else if (PL_op->op_private & OPpDEREF)
1717 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1719 sv = (svp ? *svp : &PL_sv_undef);
1720 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1721 * Pushing the magical RHS on to the stack is useless, since
1722 * that magic is soon destined to be misled by the local(),
1723 * and thus the later pp_sassign() will fail to mg_get() the
1724 * old value. This should also cure problems with delayed
1725 * mg_get()s. GSAR 98-07-03 */
1726 if (!lval && SvGMAGICAL(sv))
1727 sv = sv_mortalcopy(sv);
1735 register PERL_CONTEXT *cx;
1741 if (PL_op->op_flags & OPf_SPECIAL) {
1742 cx = &cxstack[cxstack_ix];
1743 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1748 gimme = OP_GIMME(PL_op, -1);
1750 if (cxstack_ix >= 0)
1751 gimme = cxstack[cxstack_ix].blk_gimme;
1757 if (gimme == G_VOID)
1759 else if (gimme == G_SCALAR) {
1762 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1765 *MARK = sv_mortalcopy(TOPs);
1768 *MARK = &PL_sv_undef;
1772 else if (gimme == G_ARRAY) {
1773 /* in case LEAVE wipes old return values */
1774 for (mark = newsp + 1; mark <= SP; mark++) {
1775 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1776 *mark = sv_mortalcopy(*mark);
1777 TAINT_NOT; /* Each item is independent */
1781 PL_curpm = newpm; /* Don't pop $1 et al till now */
1791 register PERL_CONTEXT *cx;
1797 cx = &cxstack[cxstack_ix];
1798 if (CxTYPE(cx) != CXt_LOOP)
1799 DIE(aTHX_ "panic: pp_iter");
1801 itersvp = CxITERVAR(cx);
1802 av = cx->blk_loop.iterary;
1803 if (SvTYPE(av) != SVt_PVAV) {
1804 /* iterate ($min .. $max) */
1805 if (cx->blk_loop.iterlval) {
1806 /* string increment */
1807 register SV* cur = cx->blk_loop.iterlval;
1809 char *max = SvPV((SV*)av, maxlen);
1810 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1811 #ifndef USE_5005THREADS /* don't risk potential race */
1812 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1813 /* safe to reuse old SV */
1814 sv_setsv(*itersvp, cur);
1819 /* we need a fresh SV every time so that loop body sees a
1820 * completely new SV for closures/references to work as
1822 SvREFCNT_dec(*itersvp);
1823 *itersvp = newSVsv(cur);
1825 if (strEQ(SvPVX(cur), max))
1826 sv_setiv(cur, 0); /* terminate next time */
1833 /* integer increment */
1834 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1837 #ifndef USE_5005THREADS /* don't risk potential race */
1838 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1839 /* safe to reuse old SV */
1840 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1845 /* we need a fresh SV every time so that loop body sees a
1846 * completely new SV for closures/references to work as they
1848 SvREFCNT_dec(*itersvp);
1849 *itersvp = newSViv(cx->blk_loop.iterix++);
1855 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1858 SvREFCNT_dec(*itersvp);
1860 if (SvMAGICAL(av) || AvREIFY(av)) {
1861 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1868 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1874 if (av != PL_curstack && sv == &PL_sv_undef) {
1875 SV *lv = cx->blk_loop.iterlval;
1876 if (lv && SvREFCNT(lv) > 1) {
1881 SvREFCNT_dec(LvTARG(lv));
1883 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1884 sv_upgrade(lv, SVt_PVLV);
1886 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1888 LvTARG(lv) = SvREFCNT_inc(av);
1889 LvTARGOFF(lv) = cx->blk_loop.iterix;
1890 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1894 *itersvp = SvREFCNT_inc(sv);
1901 register PMOP *pm = cPMOP;
1917 register REGEXP *rx = PM_GETRE(pm);
1919 int force_on_match = 0;
1920 I32 oldsave = PL_savestack_ix;
1922 bool doutf8 = FALSE;
1924 /* known replacement string? */
1925 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1926 if (PL_op->op_flags & OPf_STACKED)
1933 if (SvFAKE(TARG) && SvREADONLY(TARG))
1934 sv_force_normal(TARG);
1935 if (SvREADONLY(TARG)
1936 || (SvTYPE(TARG) > SVt_PVLV
1937 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
1938 DIE(aTHX_ PL_no_modify);
1941 s = SvPV(TARG, len);
1942 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1944 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1945 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1950 PL_reg_match_utf8 = DO_UTF8(TARG);
1954 DIE(aTHX_ "panic: pp_subst");
1957 slen = PL_reg_match_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
1958 maxiters = 2 * slen + 10; /* We can match twice at each
1959 position, once with zero-length,
1960 second time with non-zero. */
1962 if (!rx->prelen && PL_curpm) {
1966 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1967 ? REXEC_COPY_STR : 0;
1969 r_flags |= REXEC_SCREAM;
1970 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1971 SAVEINT(PL_multiline);
1972 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1975 if (rx->reganch & RE_USE_INTUIT) {
1977 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1981 /* How to do it in subst? */
1982 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1984 && ((rx->reganch & ROPT_NOSCAN)
1985 || !((rx->reganch & RE_INTUIT_TAIL)
1986 && (r_flags & REXEC_SCREAM))))
1991 /* only replace once? */
1992 once = !(rpm->op_pmflags & PMf_GLOBAL);
1994 /* known replacement string? */
1996 /* replacement needing upgrading? */
1997 if (DO_UTF8(TARG) && !doutf8) {
1998 SV *nsv = sv_newmortal();
2001 sv_recode_to_utf8(nsv, PL_encoding);
2003 sv_utf8_upgrade(nsv);
2004 c = SvPV(nsv, clen);
2008 c = SvPV(dstr, clen);
2009 doutf8 = DO_UTF8(dstr);
2017 /* can do inplace substitution? */
2018 if (c && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2019 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
2020 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2021 r_flags | REXEC_CHECKED))
2025 LEAVE_SCOPE(oldsave);
2028 if (force_on_match) {
2030 s = SvPV_force(TARG, len);
2035 SvSCREAM_off(TARG); /* disable possible screamer */
2037 rxtainted |= RX_MATCH_TAINTED(rx);
2038 m = orig + rx->startp[0];
2039 d = orig + rx->endp[0];
2041 if (m - s > strend - d) { /* faster to shorten from end */
2043 Copy(c, m, clen, char);
2048 Move(d, m, i, char);
2052 SvCUR_set(TARG, m - s);
2055 else if ((i = m - s)) { /* faster from front */
2063 Copy(c, m, clen, char);
2068 Copy(c, d, clen, char);
2073 TAINT_IF(rxtainted & 1);
2079 if (iters++ > maxiters)
2080 DIE(aTHX_ "Substitution loop");
2081 rxtainted |= RX_MATCH_TAINTED(rx);
2082 m = rx->startp[0] + orig;
2086 Move(s, d, i, char);
2090 Copy(c, d, clen, char);
2093 s = rx->endp[0] + orig;
2094 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2096 /* don't match same null twice */
2097 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2100 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2101 Move(s, d, i+1, char); /* include the NUL */
2103 TAINT_IF(rxtainted & 1);
2105 PUSHs(sv_2mortal(newSViv((I32)iters)));
2107 (void)SvPOK_only_UTF8(TARG);
2108 TAINT_IF(rxtainted);
2109 if (SvSMAGICAL(TARG)) {
2117 LEAVE_SCOPE(oldsave);
2121 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2122 r_flags | REXEC_CHECKED))
2124 if (force_on_match) {
2126 s = SvPV_force(TARG, len);
2129 rxtainted |= RX_MATCH_TAINTED(rx);
2130 dstr = NEWSV(25, len);
2131 sv_setpvn(dstr, m, s-m);
2136 register PERL_CONTEXT *cx;
2139 RETURNOP(cPMOP->op_pmreplroot);
2141 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2143 if (iters++ > maxiters)
2144 DIE(aTHX_ "Substitution loop");
2145 rxtainted |= RX_MATCH_TAINTED(rx);
2146 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2151 strend = s + (strend - m);
2153 m = rx->startp[0] + orig;
2154 sv_catpvn(dstr, s, m-s);
2155 s = rx->endp[0] + orig;
2157 sv_catpvn(dstr, c, clen);
2160 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2161 TARG, NULL, r_flags));
2162 if (doutf8 && !DO_UTF8(dstr)) {
2163 SV* nsv = sv_2mortal(newSVpvn(s, strend - s));
2165 sv_utf8_upgrade(nsv);
2166 sv_catpvn(dstr, SvPVX(nsv), SvCUR(nsv));
2169 sv_catpvn(dstr, s, strend - s);
2171 (void)SvOOK_off(TARG);
2173 Safefree(SvPVX(TARG));
2174 SvPVX(TARG) = SvPVX(dstr);
2175 SvCUR_set(TARG, SvCUR(dstr));
2176 SvLEN_set(TARG, SvLEN(dstr));
2177 doutf8 |= DO_UTF8(dstr);
2181 TAINT_IF(rxtainted & 1);
2183 PUSHs(sv_2mortal(newSViv((I32)iters)));
2185 (void)SvPOK_only(TARG);
2188 TAINT_IF(rxtainted);
2191 LEAVE_SCOPE(oldsave);
2200 LEAVE_SCOPE(oldsave);
2209 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2210 ++*PL_markstack_ptr;
2211 LEAVE; /* exit inner scope */
2214 if (PL_stack_base + *PL_markstack_ptr > SP) {
2216 I32 gimme = GIMME_V;
2218 LEAVE; /* exit outer scope */
2219 (void)POPMARK; /* pop src */
2220 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2221 (void)POPMARK; /* pop dst */
2222 SP = PL_stack_base + POPMARK; /* pop original mark */
2223 if (gimme == G_SCALAR) {
2227 else if (gimme == G_ARRAY)
2234 ENTER; /* enter inner scope */
2237 src = PL_stack_base[*PL_markstack_ptr];
2241 RETURNOP(cLOGOP->op_other);
2252 register PERL_CONTEXT *cx;
2258 if (gimme == G_SCALAR) {
2261 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2263 *MARK = SvREFCNT_inc(TOPs);
2268 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2270 *MARK = sv_mortalcopy(sv);
2275 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2279 *MARK = &PL_sv_undef;
2283 else if (gimme == G_ARRAY) {
2284 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2285 if (!SvTEMP(*MARK)) {
2286 *MARK = sv_mortalcopy(*MARK);
2287 TAINT_NOT; /* Each item is independent */
2293 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2294 PL_curpm = newpm; /* ... and pop $1 et al */
2298 return pop_return();
2301 /* This duplicates the above code because the above code must not
2302 * get any slower by more conditions */
2310 register PERL_CONTEXT *cx;
2317 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2318 /* We are an argument to a function or grep().
2319 * This kind of lvalueness was legal before lvalue
2320 * subroutines too, so be backward compatible:
2321 * cannot report errors. */
2323 /* Scalar context *is* possible, on the LHS of -> only,
2324 * as in f()->meth(). But this is not an lvalue. */
2325 if (gimme == G_SCALAR)
2327 if (gimme == G_ARRAY) {
2328 if (!CvLVALUE(cx->blk_sub.cv))
2329 goto temporise_array;
2330 EXTEND_MORTAL(SP - newsp);
2331 for (mark = newsp + 1; mark <= SP; mark++) {
2334 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2335 *mark = sv_mortalcopy(*mark);
2337 /* Can be a localized value subject to deletion. */
2338 PL_tmps_stack[++PL_tmps_ix] = *mark;
2339 (void)SvREFCNT_inc(*mark);
2344 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2345 /* Here we go for robustness, not for speed, so we change all
2346 * the refcounts so the caller gets a live guy. Cannot set
2347 * TEMP, so sv_2mortal is out of question. */
2348 if (!CvLVALUE(cx->blk_sub.cv)) {
2353 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2355 if (gimme == G_SCALAR) {
2359 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2364 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2365 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2366 : "a readonly value" : "a temporary");
2368 else { /* Can be a localized value
2369 * subject to deletion. */
2370 PL_tmps_stack[++PL_tmps_ix] = *mark;
2371 (void)SvREFCNT_inc(*mark);
2374 else { /* Should not happen? */
2379 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2380 (MARK > SP ? "Empty array" : "Array"));
2384 else if (gimme == G_ARRAY) {
2385 EXTEND_MORTAL(SP - newsp);
2386 for (mark = newsp + 1; mark <= SP; mark++) {
2387 if (*mark != &PL_sv_undef
2388 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2389 /* Might be flattened array after $#array = */
2395 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2396 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2399 /* Can be a localized value subject to deletion. */
2400 PL_tmps_stack[++PL_tmps_ix] = *mark;
2401 (void)SvREFCNT_inc(*mark);
2407 if (gimme == G_SCALAR) {
2411 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2413 *MARK = SvREFCNT_inc(TOPs);
2418 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2420 *MARK = sv_mortalcopy(sv);
2425 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2429 *MARK = &PL_sv_undef;
2433 else if (gimme == G_ARRAY) {
2435 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2436 if (!SvTEMP(*MARK)) {
2437 *MARK = sv_mortalcopy(*MARK);
2438 TAINT_NOT; /* Each item is independent */
2445 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2446 PL_curpm = newpm; /* ... and pop $1 et al */
2450 return pop_return();
2455 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2457 SV *dbsv = GvSV(PL_DBsub);
2459 if (!PERLDB_SUB_NN) {
2463 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2464 || strEQ(GvNAME(gv), "END")
2465 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2466 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2467 && (gv = (GV*)*svp) ))) {
2468 /* Use GV from the stack as a fallback. */
2469 /* GV is potentially non-unique, or contain different CV. */
2470 SV *tmp = newRV((SV*)cv);
2471 sv_setsv(dbsv, tmp);
2475 gv_efullname3(dbsv, gv, Nullch);
2479 (void)SvUPGRADE(dbsv, SVt_PVIV);
2480 (void)SvIOK_on(dbsv);
2481 SAVEIV(SvIVX(dbsv));
2482 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2486 PL_curcopdb = PL_curcop;
2487 cv = GvCV(PL_DBsub);
2497 register PERL_CONTEXT *cx;
2499 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2502 DIE(aTHX_ "Not a CODE reference");
2503 switch (SvTYPE(sv)) {
2509 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2511 SP = PL_stack_base + POPMARK;
2514 if (SvGMAGICAL(sv)) {
2518 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2521 sym = SvPV(sv, n_a);
2523 DIE(aTHX_ PL_no_usym, "a subroutine");
2524 if (PL_op->op_private & HINT_STRICT_REFS)
2525 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2526 cv = get_cv(sym, TRUE);
2531 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2532 tryAMAGICunDEREF(to_cv);
2535 if (SvTYPE(cv) == SVt_PVCV)
2540 DIE(aTHX_ "Not a CODE reference");
2545 if (!(cv = GvCVu((GV*)sv)))
2546 cv = sv_2cv(sv, &stash, &gv, FALSE);
2559 if (!CvROOT(cv) && !CvXSUB(cv)) {
2563 /* anonymous or undef'd function leaves us no recourse */
2564 if (CvANON(cv) || !(gv = CvGV(cv)))
2565 DIE(aTHX_ "Undefined subroutine called");
2567 /* autoloaded stub? */
2568 if (cv != GvCV(gv)) {
2571 /* should call AUTOLOAD now? */
2574 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2581 sub_name = sv_newmortal();
2582 gv_efullname3(sub_name, gv, Nullch);
2583 DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
2587 DIE(aTHX_ "Not a CODE reference");
2592 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2593 cv = get_db_sub(&sv, cv);
2595 DIE(aTHX_ "No DBsub routine");
2598 #ifdef USE_5005THREADS
2600 * First we need to check if the sub or method requires locking.
2601 * If so, we gain a lock on the CV, the first argument or the
2602 * stash (for static methods), as appropriate. This has to be
2603 * inline because for FAKE_THREADS, COND_WAIT inlines code to
2604 * reschedule by returning a new op.
2606 MUTEX_LOCK(CvMUTEXP(cv));
2607 if (CvFLAGS(cv) & CVf_LOCKED) {
2609 if (CvFLAGS(cv) & CVf_METHOD) {
2610 if (SP > PL_stack_base + TOPMARK)
2611 sv = *(PL_stack_base + TOPMARK + 1);
2613 AV *av = (AV*)PL_curpad[0];
2614 if (hasargs || !av || AvFILLp(av) < 0
2615 || !(sv = AvARRAY(av)[0]))
2617 MUTEX_UNLOCK(CvMUTEXP(cv));
2618 DIE(aTHX_ "no argument for locked method call");
2625 char *stashname = SvPV(sv, len);
2626 sv = (SV*)gv_stashpvn(stashname, len, TRUE);
2632 MUTEX_UNLOCK(CvMUTEXP(cv));
2633 mg = condpair_magic(sv);
2634 MUTEX_LOCK(MgMUTEXP(mg));
2635 if (MgOWNER(mg) == thr)
2636 MUTEX_UNLOCK(MgMUTEXP(mg));
2639 COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
2641 DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
2643 MUTEX_UNLOCK(MgMUTEXP(mg));
2644 SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
2646 MUTEX_LOCK(CvMUTEXP(cv));
2649 * Now we have permission to enter the sub, we must distinguish
2650 * four cases. (0) It's an XSUB (in which case we don't care
2651 * about ownership); (1) it's ours already (and we're recursing);
2652 * (2) it's free (but we may already be using a cached clone);
2653 * (3) another thread owns it. Case (1) is easy: we just use it.
2654 * Case (2) means we look for a clone--if we have one, use it
2655 * otherwise grab ownership of cv. Case (3) means we look for a
2656 * clone (for non-XSUBs) and have to create one if we don't
2658 * Why look for a clone in case (2) when we could just grab
2659 * ownership of cv straight away? Well, we could be recursing,
2660 * i.e. we originally tried to enter cv while another thread
2661 * owned it (hence we used a clone) but it has been freed up
2662 * and we're now recursing into it. It may or may not be "better"
2663 * to use the clone but at least CvDEPTH can be trusted.
2665 if (CvOWNER(cv) == thr || CvXSUB(cv))
2666 MUTEX_UNLOCK(CvMUTEXP(cv));
2668 /* Case (2) or (3) */
2672 * XXX Might it be better to release CvMUTEXP(cv) while we
2673 * do the hv_fetch? We might find someone has pinched it
2674 * when we look again, in which case we would be in case
2675 * (3) instead of (2) so we'd have to clone. Would the fact
2676 * that we released the mutex more quickly make up for this?
2678 if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
2680 /* We already have a clone to use */
2681 MUTEX_UNLOCK(CvMUTEXP(cv));
2683 DEBUG_S(PerlIO_printf(Perl_debug_log,
2684 "entersub: %p already has clone %p:%s\n",
2685 thr, cv, SvPEEK((SV*)cv)));
2688 if (CvDEPTH(cv) == 0)
2689 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2692 /* (2) => grab ownership of cv. (3) => make clone */
2696 MUTEX_UNLOCK(CvMUTEXP(cv));
2697 DEBUG_S(PerlIO_printf(Perl_debug_log,
2698 "entersub: %p grabbing %p:%s in stash %s\n",
2699 thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
2700 HvNAME(CvSTASH(cv)) : "(none)"));
2703 /* Make a new clone. */
2705 SvREFCNT_inc(cv); /* don't let it vanish from under us */
2706 MUTEX_UNLOCK(CvMUTEXP(cv));
2707 DEBUG_S((PerlIO_printf(Perl_debug_log,
2708 "entersub: %p cloning %p:%s\n",
2709 thr, cv, SvPEEK((SV*)cv))));
2711 * We're creating a new clone so there's no race
2712 * between the original MUTEX_UNLOCK and the
2713 * SvREFCNT_inc since no one will be trying to undef
2714 * it out from underneath us. At least, I don't think
2717 clonecv = cv_clone(cv);
2718 SvREFCNT_dec(cv); /* finished with this */
2719 hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
2720 CvOWNER(clonecv) = thr;
2724 DEBUG_S(if (CvDEPTH(cv) != 0)
2725 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
2727 SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
2730 #endif /* USE_5005THREADS */
2733 #ifdef PERL_XSUB_OLDSTYLE
2734 if (CvOLDSTYLE(cv)) {
2735 I32 (*fp3)(int,int,int);
2737 register I32 items = SP - MARK;
2738 /* We dont worry to copy from @_. */
2743 PL_stack_sp = mark + 1;
2744 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2745 items = (*fp3)(CvXSUBANY(cv).any_i32,
2746 MARK - PL_stack_base + 1,
2748 PL_stack_sp = PL_stack_base + items;
2751 #endif /* PERL_XSUB_OLDSTYLE */
2753 I32 markix = TOPMARK;
2758 /* Need to copy @_ to stack. Alternative may be to
2759 * switch stack to @_, and copy return values
2760 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2763 #ifdef USE_5005THREADS
2764 av = (AV*)PL_curpad[0];
2766 av = GvAV(PL_defgv);
2767 #endif /* USE_5005THREADS */
2768 items = AvFILLp(av) + 1; /* @_ is not tieable */
2771 /* Mark is at the end of the stack. */
2773 Copy(AvARRAY(av), SP + 1, items, SV*);
2778 /* We assume first XSUB in &DB::sub is the called one. */
2780 SAVEVPTR(PL_curcop);
2781 PL_curcop = PL_curcopdb;
2784 /* Do we need to open block here? XXXX */
2785 (void)(*CvXSUB(cv))(aTHX_ cv);
2787 /* Enforce some sanity in scalar context. */
2788 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2789 if (markix > PL_stack_sp - PL_stack_base)
2790 *(PL_stack_base + markix) = &PL_sv_undef;
2792 *(PL_stack_base + markix) = *PL_stack_sp;
2793 PL_stack_sp = PL_stack_base + markix;
2801 register I32 items = SP - MARK;
2802 AV* padlist = CvPADLIST(cv);
2803 SV** svp = AvARRAY(padlist);
2804 push_return(PL_op->op_next);
2805 PUSHBLOCK(cx, CXt_SUB, MARK);
2808 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2809 * that eval'' ops within this sub know the correct lexical space.
2810 * Owing the speed considerations, we choose to search for the cv
2811 * in doeval() instead.
2813 if (CvDEPTH(cv) < 2)
2814 (void)SvREFCNT_inc(cv);
2815 else { /* save temporaries on recursion? */
2816 PERL_STACK_OVERFLOW_CHECK();
2817 if (CvDEPTH(cv) > AvFILLp(padlist)) {
2819 AV *newpad = newAV();
2820 SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
2821 I32 ix = AvFILLp((AV*)svp[1]);
2822 I32 names_fill = AvFILLp((AV*)svp[0]);
2823 svp = AvARRAY(svp[0]);
2824 for ( ;ix > 0; ix--) {
2825 if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
2826 char *name = SvPVX(svp[ix]);
2827 if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
2828 || *name == '&') /* anonymous code? */
2830 av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
2832 else { /* our own lexical */
2834 av_store(newpad, ix, sv = (SV*)newAV());
2835 else if (*name == '%')
2836 av_store(newpad, ix, sv = (SV*)newHV());
2838 av_store(newpad, ix, sv = NEWSV(0,0));
2842 else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
2843 av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
2846 av_store(newpad, ix, sv = NEWSV(0,0));
2850 av = newAV(); /* will be @_ */
2852 av_store(newpad, 0, (SV*)av);
2853 AvFLAGS(av) = AVf_REIFY;
2854 av_store(padlist, CvDEPTH(cv), (SV*)newpad);
2855 AvFILLp(padlist) = CvDEPTH(cv);
2856 svp = AvARRAY(padlist);
2859 #ifdef USE_5005THREADS
2861 AV* av = (AV*)PL_curpad[0];
2863 items = AvFILLp(av) + 1;
2865 /* Mark is at the end of the stack. */
2867 Copy(AvARRAY(av), SP + 1, items, SV*);
2872 #endif /* USE_5005THREADS */
2873 SAVEVPTR(PL_curpad);
2874 PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
2875 #ifndef USE_5005THREADS
2877 #endif /* USE_5005THREADS */
2883 DEBUG_S(PerlIO_printf(Perl_debug_log,
2884 "%p entersub preparing @_\n", thr));
2886 av = (AV*)PL_curpad[0];
2888 /* @_ is normally not REAL--this should only ever
2889 * happen when DB::sub() calls things that modify @_ */
2894 #ifndef USE_5005THREADS
2895 cx->blk_sub.savearray = GvAV(PL_defgv);
2896 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2897 #endif /* USE_5005THREADS */
2898 cx->blk_sub.oldcurpad = PL_curpad;
2899 cx->blk_sub.argarray = av;
2902 if (items > AvMAX(av) + 1) {
2904 if (AvARRAY(av) != ary) {
2905 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2906 SvPVX(av) = (char*)ary;
2908 if (items > AvMAX(av) + 1) {
2909 AvMAX(av) = items - 1;
2910 Renew(ary,items,SV*);
2912 SvPVX(av) = (char*)ary;
2915 Copy(MARK,AvARRAY(av),items,SV*);
2916 AvFILLp(av) = items - 1;
2924 /* warning must come *after* we fully set up the context
2925 * stuff so that __WARN__ handlers can safely dounwind()
2928 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2929 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2930 sub_crush_depth(cv);
2932 DEBUG_S(PerlIO_printf(Perl_debug_log,
2933 "%p entersub returning %p\n", thr, CvSTART(cv)));
2935 RETURNOP(CvSTART(cv));
2940 Perl_sub_crush_depth(pTHX_ CV *cv)
2943 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2945 SV* tmpstr = sv_newmortal();
2946 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2947 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%s\"",
2957 IV elem = SvIV(elemsv);
2959 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2960 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2963 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2964 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%s\" as array index", SvPV_nolen(elemsv));
2966 elem -= PL_curcop->cop_arybase;
2967 if (SvTYPE(av) != SVt_PVAV)
2969 svp = av_fetch(av, elem, lval && !defer);
2971 if (!svp || *svp == &PL_sv_undef) {
2974 DIE(aTHX_ PL_no_aelem, elem);
2975 lv = sv_newmortal();
2976 sv_upgrade(lv, SVt_PVLV);
2978 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
2979 LvTARG(lv) = SvREFCNT_inc(av);
2980 LvTARGOFF(lv) = elem;
2985 if (PL_op->op_private & OPpLVAL_INTRO)
2986 save_aelem(av, elem, svp);
2987 else if (PL_op->op_private & OPpDEREF)
2988 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2990 sv = (svp ? *svp : &PL_sv_undef);
2991 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2992 sv = sv_mortalcopy(sv);
2998 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
3004 Perl_croak(aTHX_ PL_no_modify);
3005 if (SvTYPE(sv) < SVt_RV)
3006 sv_upgrade(sv, SVt_RV);
3007 else if (SvTYPE(sv) >= SVt_PV) {
3008 (void)SvOOK_off(sv);
3009 Safefree(SvPVX(sv));
3010 SvLEN(sv) = SvCUR(sv) = 0;
3014 SvRV(sv) = NEWSV(355,0);
3017 SvRV(sv) = (SV*)newAV();
3020 SvRV(sv) = (SV*)newHV();
3035 if (SvTYPE(rsv) == SVt_PVCV) {
3041 SETs(method_common(sv, Null(U32*)));
3048 SV* sv = cSVOP->op_sv;
3049 U32 hash = SvUVX(sv);
3051 XPUSHs(method_common(sv, &hash));
3056 S_method_common(pTHX_ SV* meth, U32* hashp)
3065 SV *packsv = Nullsv;
3068 name = SvPV(meth, namelen);
3069 sv = *(PL_stack_base + TOPMARK + 1);
3072 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
3081 /* this isn't a reference */
3084 !(packname = SvPV(sv, packlen)) ||
3085 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
3086 !(ob=(SV*)GvIO(iogv)))
3088 /* this isn't the name of a filehandle either */
3090 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
3091 ? !isIDFIRST_utf8((U8*)packname)
3092 : !isIDFIRST(*packname)
3095 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
3096 SvOK(sv) ? "without a package or object reference"
3097 : "on an undefined value");
3099 /* assume it's a package name */
3100 stash = gv_stashpvn(packname, packlen, FALSE);
3105 /* it _is_ a filehandle name -- replace with a reference */
3106 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
3109 /* if we got here, ob should be a reference or a glob */
3110 if (!ob || !(SvOBJECT(ob)
3111 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
3114 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
3118 stash = SvSTASH(ob);
3121 /* NOTE: stash may be null, hope hv_fetch_ent and
3122 gv_fetchmethod can cope (it seems they can) */
3124 /* shortcut for simple names */
3126 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
3128 gv = (GV*)HeVAL(he);
3129 if (isGV(gv) && GvCV(gv) &&
3130 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3131 return (SV*)GvCV(gv);
3135 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3138 /* This code tries to figure out just what went wrong with
3139 gv_fetchmethod. It therefore needs to duplicate a lot of
3140 the internals of that function. We can't move it inside
3141 Perl_gv_fetchmethod_autoload(), however, since that would
3142 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3149 for (p = name; *p; p++) {
3151 sep = p, leaf = p + 1;
3152 else if (*p == ':' && *(p + 1) == ':')
3153 sep = p, leaf = p + 2;
3155 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3156 /* the method name is unqualified or starts with SUPER:: */
3157 packname = sep ? CopSTASHPV(PL_curcop) :
3158 stash ? HvNAME(stash) : packname;
3159 packlen = strlen(packname);
3162 /* the method name is qualified */
3164 packlen = sep - name;
3167 /* we're relying on gv_fetchmethod not autovivifying the stash */
3168 if (gv_stashpvn(packname, packlen, FALSE)) {
3170 "Can't locate object method \"%s\" via package \"%.*s\"",
3171 leaf, (int)packlen, packname);
3175 "Can't locate object method \"%s\" via package \"%.*s\""
3176 " (perhaps you forgot to load \"%.*s\"?)",
3177 leaf, (int)packlen, packname, (int)packlen, packname);
3180 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
3183 #ifdef USE_5005THREADS
3185 unset_cvowner(pTHX_ void *cvarg)
3187 register CV* cv = (CV *) cvarg;
3189 DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
3190 thr, cv, SvPEEK((SV*)cv))));
3191 MUTEX_LOCK(CvMUTEXP(cv));
3192 DEBUG_S(if (CvDEPTH(cv) != 0)
3193 PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
3195 assert(thr == CvOWNER(cv));
3197 MUTEX_UNLOCK(CvMUTEXP(cv));
3200 #endif /* USE_5005THREADS */