3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * 'It's a big house this, and very peculiar. Always a bit more
13 * to discover, and no knowing what you'll find round a corner.
14 * And Elves, sir!' --Samwise Gamgee
16 * [p.225 of _The Lord of the Rings_, II/i: "Many Meetings"]
19 /* This file contains general pp ("push/pop") functions that execute the
20 * opcodes that make up a perl program. A typical pp function expects to
21 * find its arguments on the stack, and usually pushes its results onto
22 * the stack, hence the 'pp' terminology. Each OP structure contains
23 * a pointer to the relevant pp_foo() function.
33 /* XXX I can't imagine anyone who doesn't have this actually _needs_
34 it, since pid_t is an integral type.
37 #ifdef NEED_GETPID_PROTO
38 extern Pid_t getpid (void);
42 * Some BSDs and Cygwin default to POSIX math instead of IEEE.
43 * This switches them over to IEEE.
45 #if defined(LIBM_LIB_VERSION)
46 _LIB_VERSION_TYPE _LIB_VERSION = _IEEE_;
49 /* variations on pp_null */
55 if (GIMME_V == G_SCALAR)
66 assert(SvTYPE(TARG) == SVt_PVAV);
67 if (PL_op->op_private & OPpLVAL_INTRO)
68 if (!(PL_op->op_private & OPpPAD_STATE))
69 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
71 if (PL_op->op_flags & OPf_REF) {
74 } else if (PL_op->op_private & OPpMAYBE_LVSUB) {
75 const I32 flags = is_lvalue_sub();
76 if (flags && !(flags & OPpENTERSUB_INARGS)) {
77 if (GIMME == G_SCALAR)
78 /* diag_listed_as: Can't return %s to lvalue scalar context */
79 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
85 if (gimme == G_ARRAY) {
86 const I32 maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
88 if (SvMAGICAL(TARG)) {
90 for (i=0; i < (U32)maxarg; i++) {
91 SV * const * const svp = av_fetch(MUTABLE_AV(TARG), i, FALSE);
92 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
96 Copy(AvARRAY((const AV *)TARG), SP+1, maxarg, SV*);
100 else if (gimme == G_SCALAR) {
101 SV* const sv = sv_newmortal();
102 const I32 maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
103 sv_setiv(sv, maxarg);
114 assert(SvTYPE(TARG) == SVt_PVHV);
116 if (PL_op->op_private & OPpLVAL_INTRO)
117 if (!(PL_op->op_private & OPpPAD_STATE))
118 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
119 if (PL_op->op_flags & OPf_REF)
121 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
122 const I32 flags = is_lvalue_sub();
123 if (flags && !(flags & OPpENTERSUB_INARGS)) {
124 if (GIMME == G_SCALAR)
125 /* diag_listed_as: Can't return %s to lvalue scalar context */
126 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
131 if (gimme == G_ARRAY) {
132 RETURNOP(Perl_do_kv(aTHX));
134 else if (gimme == G_SCALAR) {
135 SV* const sv = Perl_hv_scalar(aTHX_ MUTABLE_HV(TARG));
143 static const char S_no_symref_sv[] =
144 "Can't use string (\"%" SVf32 "\"%s) as %s ref while \"strict refs\" in use";
146 /* In some cases this function inspects PL_op. If this function is called
147 for new op types, more bool parameters may need to be added in place of
150 When noinit is true, the absence of a gv will cause a retval of undef.
151 This is unrelated to the cv-to-gv assignment case.
155 S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict,
159 if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv);
162 sv = amagic_deref_call(sv, to_gv_amg);
166 if (SvTYPE(sv) == SVt_PVIO) {
167 GV * const gv = MUTABLE_GV(sv_newmortal());
168 gv_init(gv, 0, "__ANONIO__", 10, 0);
169 GvIOp(gv) = MUTABLE_IO(sv);
170 SvREFCNT_inc_void_NN(sv);
173 else if (!isGV_with_GP(sv))
174 return (SV *)Perl_die(aTHX_ "Not a GLOB reference");
177 if (!isGV_with_GP(sv)) {
179 /* If this is a 'my' scalar and flag is set then vivify
182 if (vivify_sv && sv != &PL_sv_undef) {
185 Perl_croak_no_modify(aTHX);
186 if (cUNOP->op_targ) {
187 SV * const namesv = PAD_SV(cUNOP->op_targ);
188 gv = MUTABLE_GV(newSV(0));
189 gv_init_sv(gv, CopSTASH(PL_curcop), namesv, 0);
192 const char * const name = CopSTASHPV(PL_curcop);
193 gv = newGVgen_flags(name,
194 HvNAMEUTF8(CopSTASH(PL_curcop)) ? SVf_UTF8 : 0 );
196 prepare_SV_for_RV(sv);
197 SvRV_set(sv, MUTABLE_SV(gv));
202 if (PL_op->op_flags & OPf_REF || strict)
203 return (SV *)Perl_die(aTHX_ PL_no_usym, "a symbol");
204 if (ckWARN(WARN_UNINITIALIZED))
210 if (!(sv = MUTABLE_SV(gv_fetchsv_nomg(
211 sv, GV_ADDMG, SVt_PVGV
221 (SvPOK(sv) && SvCUR(sv)>32 ? "..." : ""),
224 if ((PL_op->op_private & (OPpLVAL_INTRO|OPpDONT_INIT_GV))
225 == OPpDONT_INIT_GV) {
226 /* We are the target of a coderef assignment. Return
227 the scalar unchanged, and let pp_sasssign deal with
231 sv = MUTABLE_SV(gv_fetchsv_nomg(sv, GV_ADD, SVt_PVGV));
233 /* FAKE globs in the symbol table cause weird bugs (#77810) */
237 if (SvFAKE(sv) && !(PL_op->op_private & OPpALLOW_FAKE)) {
238 SV *newsv = sv_newmortal();
239 sv_setsv_flags(newsv, sv, 0);
251 sv, PL_op->op_private & OPpDEREF,
252 PL_op->op_private & HINT_STRICT_REFS,
253 ((PL_op->op_flags & OPf_SPECIAL) && !(PL_op->op_flags & OPf_MOD))
254 || PL_op->op_type == OP_READLINE
256 if (PL_op->op_private & OPpLVAL_INTRO)
257 save_gp(MUTABLE_GV(sv), !(PL_op->op_flags & OPf_SPECIAL));
262 /* Helper function for pp_rv2sv and pp_rv2av */
264 Perl_softref2xv(pTHX_ SV *const sv, const char *const what,
265 const svtype type, SV ***spp)
270 PERL_ARGS_ASSERT_SOFTREF2XV;
272 if (PL_op->op_private & HINT_STRICT_REFS) {
274 Perl_die(aTHX_ S_no_symref_sv, sv, (SvPOK(sv) && SvCUR(sv)>32 ? "..." : ""), what);
276 Perl_die(aTHX_ PL_no_usym, what);
280 PL_op->op_flags & OPf_REF &&
281 PL_op->op_next->op_type != OP_BOOLKEYS
283 Perl_die(aTHX_ PL_no_usym, what);
284 if (ckWARN(WARN_UNINITIALIZED))
286 if (type != SVt_PV && GIMME_V == G_ARRAY) {
290 **spp = &PL_sv_undef;
293 if ((PL_op->op_flags & OPf_SPECIAL) &&
294 !(PL_op->op_flags & OPf_MOD))
296 if (!(gv = gv_fetchsv_nomg(sv, GV_ADDMG, type)))
298 **spp = &PL_sv_undef;
303 gv = gv_fetchsv_nomg(sv, GV_ADD, type);
316 sv = amagic_deref_call(sv, to_sv_amg);
320 switch (SvTYPE(sv)) {
326 DIE(aTHX_ "Not a SCALAR reference");
333 if (!isGV_with_GP(gv)) {
334 gv = Perl_softref2xv(aTHX_ sv, "a SCALAR", SVt_PV, &sp);
340 if (PL_op->op_flags & OPf_MOD) {
341 if (PL_op->op_private & OPpLVAL_INTRO) {
342 if (cUNOP->op_first->op_type == OP_NULL)
343 sv = save_scalar(MUTABLE_GV(TOPs));
345 sv = save_scalar(gv);
347 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
349 else if (PL_op->op_private & OPpDEREF)
350 sv = vivify_ref(sv, PL_op->op_private & OPpDEREF);
359 AV * const av = MUTABLE_AV(TOPs);
360 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
362 SV ** const sv = Perl_av_arylen_p(aTHX_ MUTABLE_AV(av));
364 *sv = newSV_type(SVt_PVMG);
365 sv_magic(*sv, MUTABLE_SV(av), PERL_MAGIC_arylen, NULL, 0);
369 SETs(sv_2mortal(newSViv(AvFILL(MUTABLE_AV(av)))));
378 if (PL_op->op_flags & OPf_MOD || LVRET) {
379 SV * const ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
380 sv_magic(ret, NULL, PERL_MAGIC_pos, NULL, 0);
382 LvTARG(ret) = SvREFCNT_inc_simple(sv);
383 PUSHs(ret); /* no SvSETMAGIC */
387 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
388 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_regex_global);
389 if (mg && mg->mg_len >= 0) {
407 const I32 flags = (PL_op->op_flags & OPf_SPECIAL)
409 : ((PL_op->op_private & (OPpLVAL_INTRO|OPpMAY_RETURN_CONSTANT)) == OPpMAY_RETURN_CONSTANT)
412 /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
413 /* (But not in defined().) */
415 CV *cv = sv_2cv(TOPs, &stash_unused, &gv, flags);
418 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
420 else if ((flags == (GV_ADD|GV_NOEXPAND)) && gv && SvROK(gv)) {
424 cv = MUTABLE_CV(&PL_sv_undef);
425 SETs(MUTABLE_SV(cv));
435 SV *ret = &PL_sv_undef;
437 if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
438 const char * s = SvPVX_const(TOPs);
439 if (strnEQ(s, "CORE::", 6)) {
440 const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
441 if (!code || code == -KEY_CORE)
442 DIE(aTHX_ "Can't find an opnumber for \"%s\"", s+6);
443 if (code < 0) { /* Overridable. */
444 SV * const sv = core_prototype(NULL, s + 6, code, NULL);
450 cv = sv_2cv(TOPs, &stash, &gv, 0);
452 ret = newSVpvn_flags(
453 CvPROTO(cv), CvPROTOLEN(cv), SVs_TEMP | SvUTF8(cv)
463 CV *cv = MUTABLE_CV(PAD_SV(PL_op->op_targ));
465 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
467 PUSHs(MUTABLE_SV(cv));
481 if (GIMME != G_ARRAY) {
485 *MARK = &PL_sv_undef;
486 *MARK = refto(*MARK);
490 EXTEND_MORTAL(SP - MARK);
492 *MARK = refto(*MARK);
497 S_refto(pTHX_ SV *sv)
502 PERL_ARGS_ASSERT_REFTO;
504 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
507 if (!(sv = LvTARG(sv)))
510 SvREFCNT_inc_void_NN(sv);
512 else if (SvTYPE(sv) == SVt_PVAV) {
513 if (!AvREAL((const AV *)sv) && AvREIFY((const AV *)sv))
514 av_reify(MUTABLE_AV(sv));
516 SvREFCNT_inc_void_NN(sv);
518 else if (SvPADTMP(sv) && !IS_PADGV(sv))
522 SvREFCNT_inc_void_NN(sv);
525 sv_upgrade(rv, SVt_IV);
534 SV * const sv = POPs;
539 if (!sv || !SvROK(sv))
542 (void)sv_ref(TARG,SvRV(sv),TRUE);
554 stash = CopSTASH(PL_curcop);
556 SV * const ssv = POPs;
560 if (!ssv) goto curstash;
561 if (!SvGMAGICAL(ssv) && !SvAMAGIC(ssv) && SvROK(ssv))
562 Perl_croak(aTHX_ "Attempt to bless into a reference");
563 ptr = SvPV_const(ssv,len);
565 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
566 "Explicit blessing to '' (assuming package main)");
567 stash = gv_stashpvn(ptr, len, GV_ADD|SvUTF8(ssv));
570 (void)sv_bless(TOPs, stash);
580 const char * const elem = SvPV_const(sv, len);
581 GV * const gv = MUTABLE_GV(POPs);
586 /* elem will always be NUL terminated. */
587 const char * const second_letter = elem + 1;
590 if (len == 5 && strEQ(second_letter, "RRAY"))
591 tmpRef = MUTABLE_SV(GvAV(gv));
594 if (len == 4 && strEQ(second_letter, "ODE"))
595 tmpRef = MUTABLE_SV(GvCVu(gv));
598 if (len == 10 && strEQ(second_letter, "ILEHANDLE")) {
599 /* finally deprecated in 5.8.0 */
600 deprecate("*glob{FILEHANDLE}");
601 tmpRef = MUTABLE_SV(GvIOp(gv));
604 if (len == 6 && strEQ(second_letter, "ORMAT"))
605 tmpRef = MUTABLE_SV(GvFORM(gv));
608 if (len == 4 && strEQ(second_letter, "LOB"))
609 tmpRef = MUTABLE_SV(gv);
612 if (len == 4 && strEQ(second_letter, "ASH"))
613 tmpRef = MUTABLE_SV(GvHV(gv));
616 if (*second_letter == 'O' && !elem[2] && len == 2)
617 tmpRef = MUTABLE_SV(GvIOp(gv));
620 if (len == 4 && strEQ(second_letter, "AME"))
621 sv = newSVhek(GvNAME_HEK(gv));
624 if (len == 7 && strEQ(second_letter, "ACKAGE")) {
625 const HV * const stash = GvSTASH(gv);
626 const HEK * const hek = stash ? HvNAME_HEK(stash) : NULL;
627 sv = hek ? newSVhek(hek) : newSVpvs("__ANON__");
631 if (len == 6 && strEQ(second_letter, "CALAR"))
646 /* Pattern matching */
651 register unsigned char *s;
654 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_study) : NULL;
658 if (mg && SvSCREAM(sv))
661 s = (unsigned char*)(SvPV(sv, len));
662 if (len == 0 || len > I32_MAX || !SvPOK(sv) || SvUTF8(sv) || SvVALID(sv)) {
663 /* No point in studying a zero length string, and not safe to study
664 anything that doesn't appear to be a simple scalar (and hence might
665 change between now and when the regexp engine runs without our set
666 magic ever running) such as a reference to an object with overloaded
667 stringification. Also refuse to study an FBM scalar, as this gives
668 more flexibility in SV flag usage. No real-world code would ever
669 end up studying an FBM scalar, so this isn't a real pessimisation.
670 Endemic use of I32 in Perl_screaminstr makes it hard to safely push
671 the study length limit from I32_MAX to U32_MAX - 1.
678 } else if (len < 0xFFFF) {
683 size = (256 + len) * quanta;
684 sfirst_raw = (char *)safemalloc(size);
687 DIE(aTHX_ "do_study: out of memory");
691 mg = sv_magicext(sv, NULL, PERL_MAGIC_study, &PL_vtbl_regexp, NULL, 0);
692 mg->mg_ptr = sfirst_raw;
694 mg->mg_private = quanta;
696 memset(sfirst_raw, ~0, 256 * quanta);
698 /* The assumption here is that most studied strings are fairly short, hence
699 the pain of the extra code is worth it, given the memory savings.
700 80 character string, 336 bytes as U8, down from 1344 as U32
701 800 character string, 2112 bytes as U16, down from 4224 as U32
705 U8 *const sfirst = (U8 *)sfirst_raw;
706 U8 *const snext = sfirst + 256;
708 const U8 ch = s[len];
709 snext[len] = sfirst[ch];
712 } else if (quanta == 2) {
713 U16 *const sfirst = (U16 *)sfirst_raw;
714 U16 *const snext = sfirst + 256;
716 const U8 ch = s[len];
717 snext[len] = sfirst[ch];
721 U32 *const sfirst = (U32 *)sfirst_raw;
722 U32 *const snext = sfirst + 256;
724 const U8 ch = s[len];
725 snext[len] = sfirst[ch];
738 if (PL_op->op_flags & OPf_STACKED)
740 else if (PL_op->op_private & OPpTARGET_MY)
746 TARG = sv_newmortal();
747 if(PL_op->op_type == OP_TRANSR) {
749 const char * const pv = SvPV(sv,len);
750 SV * const newsv = newSVpvn_flags(pv, len, SVs_TEMP|SvUTF8(sv));
754 else PUSHi(do_trans(sv));
758 /* Lvalue operators. */
761 S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
767 PERL_ARGS_ASSERT_DO_CHOMP;
769 if (chomping && (RsSNARF(PL_rs) || RsRECORD(PL_rs)))
771 if (SvTYPE(sv) == SVt_PVAV) {
773 AV *const av = MUTABLE_AV(sv);
774 const I32 max = AvFILL(av);
776 for (i = 0; i <= max; i++) {
777 sv = MUTABLE_SV(av_fetch(av, i, FALSE));
778 if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
779 do_chomp(retval, sv, chomping);
783 else if (SvTYPE(sv) == SVt_PVHV) {
784 HV* const hv = MUTABLE_HV(sv);
786 (void)hv_iterinit(hv);
787 while ((entry = hv_iternext(hv)))
788 do_chomp(retval, hv_iterval(hv,entry), chomping);
791 else if (SvREADONLY(sv)) {
793 /* SV is copy-on-write */
794 sv_force_normal_flags(sv, 0);
797 Perl_croak_no_modify(aTHX);
802 /* XXX, here sv is utf8-ized as a side-effect!
803 If encoding.pm is used properly, almost string-generating
804 operations, including literal strings, chr(), input data, etc.
805 should have been utf8-ized already, right?
807 sv_recode_to_utf8(sv, PL_encoding);
813 char *temp_buffer = NULL;
822 while (len && s[-1] == '\n') {
829 STRLEN rslen, rs_charlen;
830 const char *rsptr = SvPV_const(PL_rs, rslen);
832 rs_charlen = SvUTF8(PL_rs)
836 if (SvUTF8(PL_rs) != SvUTF8(sv)) {
837 /* Assumption is that rs is shorter than the scalar. */
839 /* RS is utf8, scalar is 8 bit. */
841 temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
844 /* Cannot downgrade, therefore cannot possibly match
846 assert (temp_buffer == rsptr);
852 else if (PL_encoding) {
853 /* RS is 8 bit, encoding.pm is used.
854 * Do not recode PL_rs as a side-effect. */
855 svrecode = newSVpvn(rsptr, rslen);
856 sv_recode_to_utf8(svrecode, PL_encoding);
857 rsptr = SvPV_const(svrecode, rslen);
858 rs_charlen = sv_len_utf8(svrecode);
861 /* RS is 8 bit, scalar is utf8. */
862 temp_buffer = (char*)bytes_to_utf8((U8*)rsptr, &rslen);
876 if (memNE(s, rsptr, rslen))
878 SvIVX(retval) += rs_charlen;
881 s = SvPV_force_nomg_nolen(sv);
889 SvREFCNT_dec(svrecode);
891 Safefree(temp_buffer);
893 if (len && !SvPOK(sv))
894 s = SvPV_force_nomg(sv, len);
897 char * const send = s + len;
898 char * const start = s;
900 while (s > start && UTF8_IS_CONTINUATION(*s))
902 if (is_utf8_string((U8*)s, send - s)) {
903 sv_setpvn(retval, s, send - s);
905 SvCUR_set(sv, s - start);
911 sv_setpvs(retval, "");
915 sv_setpvn(retval, s, 1);
922 sv_setpvs(retval, "");
930 const bool chomping = PL_op->op_type == OP_SCHOMP;
934 do_chomp(TARG, TOPs, chomping);
941 dVAR; dSP; dMARK; dTARGET; dORIGMARK;
942 const bool chomping = PL_op->op_type == OP_CHOMP;
947 do_chomp(TARG, *++MARK, chomping);
958 if (!PL_op->op_private) {
967 SV_CHECK_THINKFIRST_COW_DROP(sv);
969 switch (SvTYPE(sv)) {
973 av_undef(MUTABLE_AV(sv));
976 hv_undef(MUTABLE_HV(sv));
979 if (cv_const_sv((const CV *)sv))
980 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
981 "Constant subroutine %"SVf" undefined",
982 SVfARG(CvANON((const CV *)sv)
983 ? newSVpvs_flags("(anonymous)", SVs_TEMP)
984 : sv_2mortal(newSVhek(GvENAME_HEK(CvGV((const CV *)sv))))));
988 /* let user-undef'd sub keep its identity */
989 GV* const gv = CvGV((const CV *)sv);
990 cv_undef(MUTABLE_CV(sv));
991 CvGV_set(MUTABLE_CV(sv), gv);
996 SvSetMagicSV(sv, &PL_sv_undef);
999 else if (isGV_with_GP(sv)) {
1003 /* undef *Pkg::meth_name ... */
1005 = GvCVu((const GV *)sv) && (stash = GvSTASH((const GV *)sv))
1006 && HvENAME_get(stash);
1008 if((stash = GvHV((const GV *)sv))) {
1009 if(HvENAME_get(stash))
1010 SvREFCNT_inc_simple_void_NN(sv_2mortal((SV *)stash));
1014 gp_free(MUTABLE_GV(sv));
1016 GvGP_set(sv, gp_ref(gp));
1017 GvSV(sv) = newSV(0);
1018 GvLINE(sv) = CopLINE(PL_curcop);
1019 GvEGV(sv) = MUTABLE_GV(sv);
1023 mro_package_moved(NULL, stash, (const GV *)sv, 0);
1025 /* undef *Foo::ISA */
1026 if( strEQ(GvNAME((const GV *)sv), "ISA")
1027 && (stash = GvSTASH((const GV *)sv))
1028 && (method_changed || HvENAME(stash)) )
1029 mro_isa_changed_in(stash);
1030 else if(method_changed)
1031 mro_method_changed_in(
1032 GvSTASH((const GV *)sv)
1039 if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) {
1055 PL_op->op_type == OP_POSTINC || PL_op->op_type == OP_I_POSTINC;
1056 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
1057 Perl_croak_no_modify(aTHX);
1059 TARG = sv_newmortal();
1060 sv_setsv(TARG, TOPs);
1061 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1062 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
1064 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
1065 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1069 else sv_dec_nomg(TOPs);
1071 /* special case for undef: see thread at 2003-03/msg00536.html in archive */
1072 if (inc && !SvOK(TARG))
1078 /* Ordinary operators. */
1082 dVAR; dSP; dATARGET; SV *svl, *svr;
1083 #ifdef PERL_PRESERVE_IVUV
1086 tryAMAGICbin_MG(pow_amg, AMGf_assign|AMGf_numeric);
1089 #ifdef PERL_PRESERVE_IVUV
1090 /* For integer to integer power, we do the calculation by hand wherever
1091 we're sure it is safe; otherwise we call pow() and try to convert to
1092 integer afterwards. */
1094 SvIV_please_nomg(svr);
1096 SvIV_please_nomg(svl);
1105 const IV iv = SvIVX(svr);
1109 goto float_it; /* Can't do negative powers this way. */
1113 baseuok = SvUOK(svl);
1115 baseuv = SvUVX(svl);
1117 const IV iv = SvIVX(svl);
1120 baseuok = TRUE; /* effectively it's a UV now */
1122 baseuv = -iv; /* abs, baseuok == false records sign */
1125 /* now we have integer ** positive integer. */
1128 /* foo & (foo - 1) is zero only for a power of 2. */
1129 if (!(baseuv & (baseuv - 1))) {
1130 /* We are raising power-of-2 to a positive integer.
1131 The logic here will work for any base (even non-integer
1132 bases) but it can be less accurate than
1133 pow (base,power) or exp (power * log (base)) when the
1134 intermediate values start to spill out of the mantissa.
1135 With powers of 2 we know this can't happen.
1136 And powers of 2 are the favourite thing for perl
1137 programmers to notice ** not doing what they mean. */
1139 NV base = baseuok ? baseuv : -(NV)baseuv;
1144 while (power >>= 1) {
1152 SvIV_please_nomg(svr);
1155 register unsigned int highbit = 8 * sizeof(UV);
1156 register unsigned int diff = 8 * sizeof(UV);
1157 while (diff >>= 1) {
1159 if (baseuv >> highbit) {
1163 /* we now have baseuv < 2 ** highbit */
1164 if (power * highbit <= 8 * sizeof(UV)) {
1165 /* result will definitely fit in UV, so use UV math
1166 on same algorithm as above */
1167 register UV result = 1;
1168 register UV base = baseuv;
1169 const bool odd_power = cBOOL(power & 1);
1173 while (power >>= 1) {
1180 if (baseuok || !odd_power)
1181 /* answer is positive */
1183 else if (result <= (UV)IV_MAX)
1184 /* answer negative, fits in IV */
1185 SETi( -(IV)result );
1186 else if (result == (UV)IV_MIN)
1187 /* 2's complement assumption: special case IV_MIN */
1190 /* answer negative, doesn't fit */
1191 SETn( -(NV)result );
1201 NV right = SvNV_nomg(svr);
1202 NV left = SvNV_nomg(svl);
1205 #if defined(USE_LONG_DOUBLE) && defined(HAS_AIX_POWL_NEG_BASE_BUG)
1207 We are building perl with long double support and are on an AIX OS
1208 afflicted with a powl() function that wrongly returns NaNQ for any
1209 negative base. This was reported to IBM as PMR #23047-379 on
1210 03/06/2006. The problem exists in at least the following versions
1211 of AIX and the libm fileset, and no doubt others as well:
1213 AIX 4.3.3-ML10 bos.adt.libm 4.3.3.50
1214 AIX 5.1.0-ML04 bos.adt.libm 5.1.0.29
1215 AIX 5.2.0 bos.adt.libm 5.2.0.85
1217 So, until IBM fixes powl(), we provide the following workaround to
1218 handle the problem ourselves. Our logic is as follows: for
1219 negative bases (left), we use fmod(right, 2) to check if the
1220 exponent is an odd or even integer:
1222 - if odd, powl(left, right) == -powl(-left, right)
1223 - if even, powl(left, right) == powl(-left, right)
1225 If the exponent is not an integer, the result is rightly NaNQ, so
1226 we just return that (as NV_NAN).
1230 NV mod2 = Perl_fmod( right, 2.0 );
1231 if (mod2 == 1.0 || mod2 == -1.0) { /* odd integer */
1232 SETn( -Perl_pow( -left, right) );
1233 } else if (mod2 == 0.0) { /* even integer */
1234 SETn( Perl_pow( -left, right) );
1235 } else { /* fractional power */
1239 SETn( Perl_pow( left, right) );
1242 SETn( Perl_pow( left, right) );
1243 #endif /* HAS_AIX_POWL_NEG_BASE_BUG */
1245 #ifdef PERL_PRESERVE_IVUV
1247 SvIV_please_nomg(svr);
1255 dVAR; dSP; dATARGET; SV *svl, *svr;
1256 tryAMAGICbin_MG(mult_amg, AMGf_assign|AMGf_numeric);
1259 #ifdef PERL_PRESERVE_IVUV
1260 SvIV_please_nomg(svr);
1262 /* Unless the left argument is integer in range we are going to have to
1263 use NV maths. Hence only attempt to coerce the right argument if
1264 we know the left is integer. */
1265 /* Left operand is defined, so is it IV? */
1266 SvIV_please_nomg(svl);
1268 bool auvok = SvUOK(svl);
1269 bool buvok = SvUOK(svr);
1270 const UV topmask = (~ (UV)0) << (4 * sizeof (UV));
1271 const UV botmask = ~((~ (UV)0) << (4 * sizeof (UV)));
1280 const IV aiv = SvIVX(svl);
1283 auvok = TRUE; /* effectively it's a UV now */
1285 alow = -aiv; /* abs, auvok == false records sign */
1291 const IV biv = SvIVX(svr);
1294 buvok = TRUE; /* effectively it's a UV now */
1296 blow = -biv; /* abs, buvok == false records sign */
1300 /* If this does sign extension on unsigned it's time for plan B */
1301 ahigh = alow >> (4 * sizeof (UV));
1303 bhigh = blow >> (4 * sizeof (UV));
1305 if (ahigh && bhigh) {
1307 /* eg 32 bit is at least 0x10000 * 0x10000 == 0x100000000
1308 which is overflow. Drop to NVs below. */
1309 } else if (!ahigh && !bhigh) {
1310 /* eg 32 bit is at most 0xFFFF * 0xFFFF == 0xFFFE0001
1311 so the unsigned multiply cannot overflow. */
1312 const UV product = alow * blow;
1313 if (auvok == buvok) {
1314 /* -ve * -ve or +ve * +ve gives a +ve result. */
1318 } else if (product <= (UV)IV_MIN) {
1319 /* 2s complement assumption that (UV)-IV_MIN is correct. */
1320 /* -ve result, which could overflow an IV */
1322 SETi( -(IV)product );
1324 } /* else drop to NVs below. */
1326 /* One operand is large, 1 small */
1329 /* swap the operands */
1331 bhigh = blow; /* bhigh now the temp var for the swap */
1335 /* now, ((ahigh * blow) << half_UV_len) + (alow * blow)
1336 multiplies can't overflow. shift can, add can, -ve can. */
1337 product_middle = ahigh * blow;
1338 if (!(product_middle & topmask)) {
1339 /* OK, (ahigh * blow) won't lose bits when we shift it. */
1341 product_middle <<= (4 * sizeof (UV));
1342 product_low = alow * blow;
1344 /* as for pp_add, UV + something mustn't get smaller.
1345 IIRC ANSI mandates this wrapping *behaviour* for
1346 unsigned whatever the actual representation*/
1347 product_low += product_middle;
1348 if (product_low >= product_middle) {
1349 /* didn't overflow */
1350 if (auvok == buvok) {
1351 /* -ve * -ve or +ve * +ve gives a +ve result. */
1353 SETu( product_low );
1355 } else if (product_low <= (UV)IV_MIN) {
1356 /* 2s complement assumption again */
1357 /* -ve result, which could overflow an IV */
1359 SETi( -(IV)product_low );
1361 } /* else drop to NVs below. */
1363 } /* product_middle too large */
1364 } /* ahigh && bhigh */
1369 NV right = SvNV_nomg(svr);
1370 NV left = SvNV_nomg(svl);
1372 SETn( left * right );
1379 dVAR; dSP; dATARGET; SV *svl, *svr;
1380 tryAMAGICbin_MG(div_amg, AMGf_assign|AMGf_numeric);
1383 /* Only try to do UV divide first
1384 if ((SLOPPYDIVIDE is true) or
1385 (PERL_PRESERVE_IVUV is true and one or both SV is a UV too large
1387 The assumption is that it is better to use floating point divide
1388 whenever possible, only doing integer divide first if we can't be sure.
1389 If NV_PRESERVES_UV is true then we know at compile time that no UV
1390 can be too large to preserve, so don't need to compile the code to
1391 test the size of UVs. */
1394 # define PERL_TRY_UV_DIVIDE
1395 /* ensure that 20./5. == 4. */
1397 # ifdef PERL_PRESERVE_IVUV
1398 # ifndef NV_PRESERVES_UV
1399 # define PERL_TRY_UV_DIVIDE
1404 #ifdef PERL_TRY_UV_DIVIDE
1405 SvIV_please_nomg(svr);
1407 SvIV_please_nomg(svl);
1409 bool left_non_neg = SvUOK(svl);
1410 bool right_non_neg = SvUOK(svr);
1414 if (right_non_neg) {
1418 const IV biv = SvIVX(svr);
1421 right_non_neg = TRUE; /* effectively it's a UV now */
1427 /* historically undef()/0 gives a "Use of uninitialized value"
1428 warning before dieing, hence this test goes here.
1429 If it were immediately before the second SvIV_please, then
1430 DIE() would be invoked before left was even inspected, so
1431 no inspection would give no warning. */
1433 DIE(aTHX_ "Illegal division by zero");
1439 const IV aiv = SvIVX(svl);
1442 left_non_neg = TRUE; /* effectively it's a UV now */
1451 /* For sloppy divide we always attempt integer division. */
1453 /* Otherwise we only attempt it if either or both operands
1454 would not be preserved by an NV. If both fit in NVs
1455 we fall through to the NV divide code below. However,
1456 as left >= right to ensure integer result here, we know that
1457 we can skip the test on the right operand - right big
1458 enough not to be preserved can't get here unless left is
1461 && (left > ((UV)1 << NV_PRESERVES_UV_BITS))
1464 /* Integer division can't overflow, but it can be imprecise. */
1465 const UV result = left / right;
1466 if (result * right == left) {
1467 SP--; /* result is valid */
1468 if (left_non_neg == right_non_neg) {
1469 /* signs identical, result is positive. */
1473 /* 2s complement assumption */
1474 if (result <= (UV)IV_MIN)
1475 SETi( -(IV)result );
1477 /* It's exact but too negative for IV. */
1478 SETn( -(NV)result );
1481 } /* tried integer divide but it was not an integer result */
1482 } /* else (PERL_ABS(result) < 1.0) or (both UVs in range for NV) */
1483 } /* left wasn't SvIOK */
1484 } /* right wasn't SvIOK */
1485 #endif /* PERL_TRY_UV_DIVIDE */
1487 NV right = SvNV_nomg(svr);
1488 NV left = SvNV_nomg(svl);
1489 (void)POPs;(void)POPs;
1490 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1491 if (! Perl_isnan(right) && right == 0.0)
1495 DIE(aTHX_ "Illegal division by zero");
1496 PUSHn( left / right );
1503 dVAR; dSP; dATARGET;
1504 tryAMAGICbin_MG(modulo_amg, AMGf_assign|AMGf_numeric);
1508 bool left_neg = FALSE;
1509 bool right_neg = FALSE;
1510 bool use_double = FALSE;
1511 bool dright_valid = FALSE;
1514 SV * const svr = TOPs;
1515 SV * const svl = TOPm1s;
1516 SvIV_please_nomg(svr);
1518 right_neg = !SvUOK(svr);
1522 const IV biv = SvIVX(svr);
1525 right_neg = FALSE; /* effectively it's a UV now */
1532 dright = SvNV_nomg(svr);
1533 right_neg = dright < 0;
1536 if (dright < UV_MAX_P1) {
1537 right = U_V(dright);
1538 dright_valid = TRUE; /* In case we need to use double below. */
1544 /* At this point use_double is only true if right is out of range for
1545 a UV. In range NV has been rounded down to nearest UV and
1546 use_double false. */
1547 SvIV_please_nomg(svl);
1548 if (!use_double && SvIOK(svl)) {
1550 left_neg = !SvUOK(svl);
1554 const IV aiv = SvIVX(svl);
1557 left_neg = FALSE; /* effectively it's a UV now */
1565 dleft = SvNV_nomg(svl);
1566 left_neg = dleft < 0;
1570 /* This should be exactly the 5.6 behaviour - if left and right are
1571 both in range for UV then use U_V() rather than floor. */
1573 if (dleft < UV_MAX_P1) {
1574 /* right was in range, so is dleft, so use UVs not double.
1578 /* left is out of range for UV, right was in range, so promote
1579 right (back) to double. */
1581 /* The +0.5 is used in 5.6 even though it is not strictly
1582 consistent with the implicit +0 floor in the U_V()
1583 inside the #if 1. */
1584 dleft = Perl_floor(dleft + 0.5);
1587 dright = Perl_floor(dright + 0.5);
1598 DIE(aTHX_ "Illegal modulus zero");
1600 dans = Perl_fmod(dleft, dright);
1601 if ((left_neg != right_neg) && dans)
1602 dans = dright - dans;
1605 sv_setnv(TARG, dans);
1611 DIE(aTHX_ "Illegal modulus zero");
1614 if ((left_neg != right_neg) && ans)
1617 /* XXX may warn: unary minus operator applied to unsigned type */
1618 /* could change -foo to be (~foo)+1 instead */
1619 if (ans <= ~((UV)IV_MAX)+1)
1620 sv_setiv(TARG, ~ans+1);
1622 sv_setnv(TARG, -(NV)ans);
1625 sv_setuv(TARG, ans);
1634 dVAR; dSP; dATARGET;
1638 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1639 /* TODO: think of some way of doing list-repeat overloading ??? */
1644 tryAMAGICbin_MG(repeat_amg, AMGf_assign);
1650 const UV uv = SvUV_nomg(sv);
1652 count = IV_MAX; /* The best we can do? */
1656 const IV iv = SvIV_nomg(sv);
1663 else if (SvNOKp(sv)) {
1664 const NV nv = SvNV_nomg(sv);
1671 count = SvIV_nomg(sv);
1673 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1675 static const char oom_list_extend[] = "Out of memory during list extend";
1676 const I32 items = SP - MARK;
1677 const I32 max = items * count;
1679 MEM_WRAP_CHECK_1(max, SV*, oom_list_extend);
1680 /* Did the max computation overflow? */
1681 if (items > 0 && max > 0 && (max < items || max < count))
1682 Perl_croak(aTHX_ oom_list_extend);
1687 /* This code was intended to fix 20010809.028:
1690 for (($x =~ /./g) x 2) {
1691 print chop; # "abcdabcd" expected as output.
1694 * but that change (#11635) broke this code:
1696 $x = [("foo")x2]; # only one "foo" ended up in the anonlist.
1698 * I can't think of a better fix that doesn't introduce
1699 * an efficiency hit by copying the SVs. The stack isn't
1700 * refcounted, and mortalisation obviously doesn't
1701 * Do The Right Thing when the stack has more than
1702 * one pointer to the same mortal value.
1706 *SP = sv_2mortal(newSVsv(*SP));
1716 repeatcpy((char*)(MARK + items), (char*)MARK,
1717 items * sizeof(const SV *), count - 1);
1720 else if (count <= 0)
1723 else { /* Note: mark already snarfed by pp_list */
1724 SV * const tmpstr = POPs;
1727 static const char oom_string_extend[] =
1728 "Out of memory during string extend";
1731 sv_setsv_nomg(TARG, tmpstr);
1732 SvPV_force_nomg(TARG, len);
1733 isutf = DO_UTF8(TARG);
1738 const STRLEN max = (UV)count * len;
1739 if (len > MEM_SIZE_MAX / count)
1740 Perl_croak(aTHX_ oom_string_extend);
1741 MEM_WRAP_CHECK_1(max, char, oom_string_extend);
1742 SvGROW(TARG, max + 1);
1743 repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
1744 SvCUR_set(TARG, SvCUR(TARG) * count);
1746 *SvEND(TARG) = '\0';
1749 (void)SvPOK_only_UTF8(TARG);
1751 (void)SvPOK_only(TARG);
1753 if (PL_op->op_private & OPpREPEAT_DOLIST) {
1754 /* The parser saw this as a list repeat, and there
1755 are probably several items on the stack. But we're
1756 in scalar context, and there's no pp_list to save us
1757 now. So drop the rest of the items -- robin@kitsite.com
1769 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
1770 tryAMAGICbin_MG(subtr_amg, AMGf_assign|AMGf_numeric);
1773 useleft = USE_LEFT(svl);
1774 #ifdef PERL_PRESERVE_IVUV
1775 /* See comments in pp_add (in pp_hot.c) about Overflow, and how
1776 "bad things" happen if you rely on signed integers wrapping. */
1777 SvIV_please_nomg(svr);
1779 /* Unless the left argument is integer in range we are going to have to
1780 use NV maths. Hence only attempt to coerce the right argument if
1781 we know the left is integer. */
1782 register UV auv = 0;
1788 a_valid = auvok = 1;
1789 /* left operand is undef, treat as zero. */
1791 /* Left operand is defined, so is it IV? */
1792 SvIV_please_nomg(svl);
1794 if ((auvok = SvUOK(svl)))
1797 register const IV aiv = SvIVX(svl);
1800 auvok = 1; /* Now acting as a sign flag. */
1801 } else { /* 2s complement assumption for IV_MIN */
1809 bool result_good = 0;
1812 bool buvok = SvUOK(svr);
1817 register const IV biv = SvIVX(svr);
1824 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
1825 else "IV" now, independent of how it came in.
1826 if a, b represents positive, A, B negative, a maps to -A etc
1831 all UV maths. negate result if A negative.
1832 subtract if signs same, add if signs differ. */
1834 if (auvok ^ buvok) {
1843 /* Must get smaller */
1848 if (result <= buv) {
1849 /* result really should be -(auv-buv). as its negation
1850 of true value, need to swap our result flag */
1862 if (result <= (UV)IV_MIN)
1863 SETi( -(IV)result );
1865 /* result valid, but out of range for IV. */
1866 SETn( -(NV)result );
1870 } /* Overflow, drop through to NVs. */
1875 NV value = SvNV_nomg(svr);
1879 /* left operand is undef, treat as zero - value */
1883 SETn( SvNV_nomg(svl) - value );
1890 dVAR; dSP; dATARGET; SV *svl, *svr;
1891 tryAMAGICbin_MG(lshift_amg, AMGf_assign|AMGf_numeric);
1895 const IV shift = SvIV_nomg(svr);
1896 if (PL_op->op_private & HINT_INTEGER) {
1897 const IV i = SvIV_nomg(svl);
1901 const UV u = SvUV_nomg(svl);
1910 dVAR; dSP; dATARGET; SV *svl, *svr;
1911 tryAMAGICbin_MG(rshift_amg, AMGf_assign|AMGf_numeric);
1915 const IV shift = SvIV_nomg(svr);
1916 if (PL_op->op_private & HINT_INTEGER) {
1917 const IV i = SvIV_nomg(svl);
1921 const UV u = SvUV_nomg(svl);
1933 tryAMAGICbin_MG(lt_amg, AMGf_set|AMGf_numeric);
1937 (SvIOK_notUV(left) && SvIOK_notUV(right))
1938 ? (SvIVX(left) < SvIVX(right))
1939 : (do_ncmp(left, right) == -1)
1949 tryAMAGICbin_MG(gt_amg, AMGf_set|AMGf_numeric);
1953 (SvIOK_notUV(left) && SvIOK_notUV(right))
1954 ? (SvIVX(left) > SvIVX(right))
1955 : (do_ncmp(left, right) == 1)
1965 tryAMAGICbin_MG(le_amg, AMGf_set|AMGf_numeric);
1969 (SvIOK_notUV(left) && SvIOK_notUV(right))
1970 ? (SvIVX(left) <= SvIVX(right))
1971 : (do_ncmp(left, right) <= 0)
1981 tryAMAGICbin_MG(ge_amg, AMGf_set|AMGf_numeric);
1985 (SvIOK_notUV(left) && SvIOK_notUV(right))
1986 ? (SvIVX(left) >= SvIVX(right))
1987 : ( (do_ncmp(left, right) & 2) == 0)
1997 tryAMAGICbin_MG(ne_amg, AMGf_set|AMGf_numeric);
2001 (SvIOK_notUV(left) && SvIOK_notUV(right))
2002 ? (SvIVX(left) != SvIVX(right))
2003 : (do_ncmp(left, right) != 0)
2008 /* compare left and right SVs. Returns:
2012 * 2: left or right was a NaN
2015 Perl_do_ncmp(pTHX_ SV* const left, SV * const right)
2019 PERL_ARGS_ASSERT_DO_NCMP;
2020 #ifdef PERL_PRESERVE_IVUV
2021 SvIV_please_nomg(right);
2022 /* Fortunately it seems NaN isn't IOK */
2024 SvIV_please_nomg(left);
2027 const IV leftiv = SvIVX(left);
2028 if (!SvUOK(right)) {
2029 /* ## IV <=> IV ## */
2030 const IV rightiv = SvIVX(right);
2031 return (leftiv > rightiv) - (leftiv < rightiv);
2033 /* ## IV <=> UV ## */
2035 /* As (b) is a UV, it's >=0, so it must be < */
2038 const UV rightuv = SvUVX(right);
2039 return ((UV)leftiv > rightuv) - ((UV)leftiv < rightuv);
2044 /* ## UV <=> UV ## */
2045 const UV leftuv = SvUVX(left);
2046 const UV rightuv = SvUVX(right);
2047 return (leftuv > rightuv) - (leftuv < rightuv);
2049 /* ## UV <=> IV ## */
2051 const IV rightiv = SvIVX(right);
2053 /* As (a) is a UV, it's >=0, so it cannot be < */
2056 const UV leftuv = SvUVX(left);
2057 return (leftuv > (UV)rightiv) - (leftuv < (UV)rightiv);
2065 NV const rnv = SvNV_nomg(right);
2066 NV const lnv = SvNV_nomg(left);
2068 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2069 if (Perl_isnan(lnv) || Perl_isnan(rnv)) {
2072 return (lnv > rnv) - (lnv < rnv);
2091 tryAMAGICbin_MG(ncmp_amg, AMGf_numeric);
2094 value = do_ncmp(left, right);
2109 int amg_type = sle_amg;
2113 switch (PL_op->op_type) {
2132 tryAMAGICbin_MG(amg_type, AMGf_set);
2135 const int cmp = (IN_LOCALE_RUNTIME
2136 ? sv_cmp_locale_flags(left, right, 0)
2137 : sv_cmp_flags(left, right, 0));
2138 SETs(boolSV(cmp * multiplier < rhs));
2146 tryAMAGICbin_MG(seq_amg, AMGf_set);
2149 SETs(boolSV(sv_eq_flags(left, right, 0)));
2157 tryAMAGICbin_MG(sne_amg, AMGf_set);
2160 SETs(boolSV(!sv_eq_flags(left, right, 0)));
2168 tryAMAGICbin_MG(scmp_amg, 0);
2171 const int cmp = (IN_LOCALE_RUNTIME
2172 ? sv_cmp_locale_flags(left, right, 0)
2173 : sv_cmp_flags(left, right, 0));
2181 dVAR; dSP; dATARGET;
2182 tryAMAGICbin_MG(band_amg, AMGf_assign);
2185 if (SvNIOKp(left) || SvNIOKp(right)) {
2186 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2187 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2188 if (PL_op->op_private & HINT_INTEGER) {
2189 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2193 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2196 if (left_ro_nonnum) SvNIOK_off(left);
2197 if (right_ro_nonnum) SvNIOK_off(right);
2200 do_vop(PL_op->op_type, TARG, left, right);
2209 dVAR; dSP; dATARGET;
2210 const int op_type = PL_op->op_type;
2212 tryAMAGICbin_MG((op_type == OP_BIT_OR ? bor_amg : bxor_amg), AMGf_assign);
2215 if (SvNIOKp(left) || SvNIOKp(right)) {
2216 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2217 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2218 if (PL_op->op_private & HINT_INTEGER) {
2219 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2220 const IV r = SvIV_nomg(right);
2221 const IV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2225 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2226 const UV r = SvUV_nomg(right);
2227 const UV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2230 if (left_ro_nonnum) SvNIOK_off(left);
2231 if (right_ro_nonnum) SvNIOK_off(right);
2234 do_vop(op_type, TARG, left, right);
2244 tryAMAGICun_MG(neg_amg, AMGf_numeric);
2246 SV * const sv = TOPs;
2247 const int flags = SvFLAGS(sv);
2249 if( !SvNIOK( sv ) && looks_like_number( sv ) ){
2253 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
2254 /* It's publicly an integer, or privately an integer-not-float */
2257 if (SvIVX(sv) == IV_MIN) {
2258 /* 2s complement assumption. */
2259 SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) == IV_MIN */
2262 else if (SvUVX(sv) <= IV_MAX) {
2267 else if (SvIVX(sv) != IV_MIN) {
2271 #ifdef PERL_PRESERVE_IVUV
2279 SETn(-SvNV_nomg(sv));
2280 else if (SvPOKp(sv)) {
2282 const char * const s = SvPV_nomg_const(sv, len);
2283 if (isIDFIRST(*s)) {
2284 sv_setpvs(TARG, "-");
2287 else if (*s == '+' || *s == '-') {
2288 sv_setsv_nomg(TARG, sv);
2289 *SvPV_force_nomg(TARG, len) = *s == '-' ? '+' : '-';
2291 else if (DO_UTF8(sv)) {
2292 SvIV_please_nomg(sv);
2294 goto oops_its_an_int;
2296 sv_setnv(TARG, -SvNV_nomg(sv));
2298 sv_setpvs(TARG, "-");
2303 SvIV_please_nomg(sv);
2305 goto oops_its_an_int;
2306 sv_setnv(TARG, -SvNV_nomg(sv));
2311 SETn(-SvNV_nomg(sv));
2319 tryAMAGICun_MG(not_amg, AMGf_set);
2320 *PL_stack_sp = boolSV(!SvTRUE_nomg(*PL_stack_sp));
2327 tryAMAGICun_MG(compl_amg, AMGf_numeric);
2331 if (PL_op->op_private & HINT_INTEGER) {
2332 const IV i = ~SvIV_nomg(sv);
2336 const UV u = ~SvUV_nomg(sv);
2345 (void)SvPV_nomg_const(sv,len); /* force check for uninit var */
2346 sv_setsv_nomg(TARG, sv);
2347 tmps = (U8*)SvPV_force_nomg(TARG, len);
2350 /* Calculate exact length, let's not estimate. */
2355 U8 * const send = tmps + len;
2356 U8 * const origtmps = tmps;
2357 const UV utf8flags = UTF8_ALLOW_ANYUV;
2359 while (tmps < send) {
2360 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2362 targlen += UNISKIP(~c);
2368 /* Now rewind strings and write them. */
2375 Newx(result, targlen + 1, U8);
2377 while (tmps < send) {
2378 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2380 p = uvchr_to_utf8_flags(p, ~c, UNICODE_ALLOW_ANY);
2383 sv_usepvn_flags(TARG, (char*)result, targlen,
2384 SV_HAS_TRAILING_NUL);
2391 Newx(result, nchar + 1, U8);
2393 while (tmps < send) {
2394 const U8 c = (U8)utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2399 sv_usepvn_flags(TARG, (char*)result, nchar, SV_HAS_TRAILING_NUL);
2407 register long *tmpl;
2408 for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
2411 for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
2416 for ( ; anum > 0; anum--, tmps++)
2424 /* integer versions of some of the above */
2428 dVAR; dSP; dATARGET;
2429 tryAMAGICbin_MG(mult_amg, AMGf_assign);
2432 SETi( left * right );
2440 dVAR; dSP; dATARGET;
2441 tryAMAGICbin_MG(div_amg, AMGf_assign);
2444 IV value = SvIV_nomg(right);
2446 DIE(aTHX_ "Illegal division by zero");
2447 num = SvIV_nomg(left);
2449 /* avoid FPE_INTOVF on some platforms when num is IV_MIN */
2453 value = num / value;
2459 #if defined(__GLIBC__) && IVSIZE == 8
2466 /* This is the vanilla old i_modulo. */
2467 dVAR; dSP; dATARGET;
2468 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2472 DIE(aTHX_ "Illegal modulus zero");
2473 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2477 SETi( left % right );
2482 #if defined(__GLIBC__) && IVSIZE == 8
2487 /* This is the i_modulo with the workaround for the _moddi3 bug
2488 * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
2489 * See below for pp_i_modulo. */
2490 dVAR; dSP; dATARGET;
2491 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2495 DIE(aTHX_ "Illegal modulus zero");
2496 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2500 SETi( left % PERL_ABS(right) );
2507 dVAR; dSP; dATARGET;
2508 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2512 DIE(aTHX_ "Illegal modulus zero");
2513 /* The assumption is to use hereafter the old vanilla version... */
2515 PL_ppaddr[OP_I_MODULO] =
2517 /* .. but if we have glibc, we might have a buggy _moddi3
2518 * (at least glicb 2.2.5 is known to have this bug), in other
2519 * words our integer modulus with negative quad as the second
2520 * argument might be broken. Test for this and re-patch the
2521 * opcode dispatch table if that is the case, remembering to
2522 * also apply the workaround so that this first round works
2523 * right, too. See [perl #9402] for more information. */
2527 /* Cannot do this check with inlined IV constants since
2528 * that seems to work correctly even with the buggy glibc. */
2530 /* Yikes, we have the bug.
2531 * Patch in the workaround version. */
2533 PL_ppaddr[OP_I_MODULO] =
2534 &Perl_pp_i_modulo_1;
2535 /* Make certain we work right this time, too. */
2536 right = PERL_ABS(right);
2539 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2543 SETi( left % right );
2551 dVAR; dSP; dATARGET;
2552 tryAMAGICbin_MG(add_amg, AMGf_assign);
2554 dPOPTOPiirl_ul_nomg;
2555 SETi( left + right );
2562 dVAR; dSP; dATARGET;
2563 tryAMAGICbin_MG(subtr_amg, AMGf_assign);
2565 dPOPTOPiirl_ul_nomg;
2566 SETi( left - right );
2574 tryAMAGICbin_MG(lt_amg, AMGf_set);
2577 SETs(boolSV(left < right));
2585 tryAMAGICbin_MG(gt_amg, AMGf_set);
2588 SETs(boolSV(left > right));
2596 tryAMAGICbin_MG(le_amg, AMGf_set);
2599 SETs(boolSV(left <= right));
2607 tryAMAGICbin_MG(ge_amg, AMGf_set);
2610 SETs(boolSV(left >= right));
2618 tryAMAGICbin_MG(eq_amg, AMGf_set);
2621 SETs(boolSV(left == right));
2629 tryAMAGICbin_MG(ne_amg, AMGf_set);
2632 SETs(boolSV(left != right));
2640 tryAMAGICbin_MG(ncmp_amg, 0);
2647 else if (left < right)
2659 tryAMAGICun_MG(neg_amg, 0);
2661 SV * const sv = TOPs;
2662 IV const i = SvIV_nomg(sv);
2668 /* High falutin' math. */
2673 tryAMAGICbin_MG(atan2_amg, 0);
2676 SETn(Perl_atan2(left, right));
2684 int amg_type = sin_amg;
2685 const char *neg_report = NULL;
2686 NV (*func)(NV) = Perl_sin;
2687 const int op_type = PL_op->op_type;
2704 amg_type = sqrt_amg;
2706 neg_report = "sqrt";
2711 tryAMAGICun_MG(amg_type, 0);
2713 SV * const arg = POPs;
2714 const NV value = SvNV_nomg(arg);
2716 if (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0)) {
2717 SET_NUMERIC_STANDARD();
2718 /* diag_listed_as: Can't take log of %g */
2719 DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
2722 XPUSHn(func(value));
2727 /* Support Configure command-line overrides for rand() functions.
2728 After 5.005, perhaps we should replace this by Configure support
2729 for drand48(), random(), or rand(). For 5.005, though, maintain
2730 compatibility by calling rand() but allow the user to override it.
2731 See INSTALL for details. --Andy Dougherty 15 July 1998
2733 /* Now it's after 5.005, and Configure supports drand48() and random(),
2734 in addition to rand(). So the overrides should not be needed any more.
2735 --Jarkko Hietaniemi 27 September 1998
2738 #ifndef HAS_DRAND48_PROTO
2739 extern double drand48 (void);
2749 value = 1.0; (void)POPs;
2755 if (!PL_srand_called) {
2756 (void)seedDrand01((Rand_seed_t)seed());
2757 PL_srand_called = TRUE;
2767 const UV anum = (MAXARG < 1 || (!TOPs && !POPs)) ? seed() : POPu;
2768 (void)seedDrand01((Rand_seed_t)anum);
2769 PL_srand_called = TRUE;
2773 /* Historically srand always returned true. We can avoid breaking
2775 sv_setpvs(TARG, "0 but true");
2784 tryAMAGICun_MG(int_amg, AMGf_numeric);
2786 SV * const sv = TOPs;
2787 const IV iv = SvIV_nomg(sv);
2788 /* XXX it's arguable that compiler casting to IV might be subtly
2789 different from modf (for numbers inside (IV_MIN,UV_MAX)) in which
2790 else preferring IV has introduced a subtle behaviour change bug. OTOH
2791 relying on floating point to be accurate is a bug. */
2796 else if (SvIOK(sv)) {
2798 SETu(SvUV_nomg(sv));
2803 const NV value = SvNV_nomg(sv);
2805 if (value < (NV)UV_MAX + 0.5) {
2808 SETn(Perl_floor(value));
2812 if (value > (NV)IV_MIN - 0.5) {
2815 SETn(Perl_ceil(value));
2826 tryAMAGICun_MG(abs_amg, AMGf_numeric);
2828 SV * const sv = TOPs;
2829 /* This will cache the NV value if string isn't actually integer */
2830 const IV iv = SvIV_nomg(sv);
2835 else if (SvIOK(sv)) {
2836 /* IVX is precise */
2838 SETu(SvUV_nomg(sv)); /* force it to be numeric only */
2846 /* 2s complement assumption. Also, not really needed as
2847 IV_MIN and -IV_MIN should both be %100...00 and NV-able */
2853 const NV value = SvNV_nomg(sv);
2867 I32 flags = PERL_SCAN_ALLOW_UNDERSCORES;
2871 SV* const sv = POPs;
2873 tmps = (SvPV_const(sv, len));
2875 /* If Unicode, try to downgrade
2876 * If not possible, croak. */
2877 SV* const tsv = sv_2mortal(newSVsv(sv));
2880 sv_utf8_downgrade(tsv, FALSE);
2881 tmps = SvPV_const(tsv, len);
2883 if (PL_op->op_type == OP_HEX)
2886 while (*tmps && len && isSPACE(*tmps))
2890 if (*tmps == 'x' || *tmps == 'X') {
2892 result_uv = grok_hex (tmps, &len, &flags, &result_nv);
2894 else if (*tmps == 'b' || *tmps == 'B')
2895 result_uv = grok_bin (tmps, &len, &flags, &result_nv);
2897 result_uv = grok_oct (tmps, &len, &flags, &result_nv);
2899 if (flags & PERL_SCAN_GREATER_THAN_UV_MAX) {
2913 SV * const sv = TOPs;
2915 if (SvGAMAGIC(sv)) {
2916 /* For an overloaded or magic scalar, we can't know in advance if
2917 it's going to be UTF-8 or not. Also, we can't call sv_len_utf8 as
2918 it likes to cache the length. Maybe that should be a documented
2923 = sv_2pv_flags(sv, &len,
2924 SV_UNDEF_RETURNS_NULL|SV_CONST_RETURN|SV_GMAGIC);
2927 if (!SvPADTMP(TARG)) {
2928 sv_setsv(TARG, &PL_sv_undef);
2933 else if (DO_UTF8(sv)) {
2934 SETi(utf8_length((U8*)p, (U8*)p + len));
2938 } else if (SvOK(sv)) {
2939 /* Neither magic nor overloaded. */
2941 SETi(sv_len_utf8(sv));
2945 if (!SvPADTMP(TARG)) {
2946 sv_setsv_nomg(TARG, &PL_sv_undef);
2954 /* Returns false if substring is completely outside original string.
2955 No length is indicated by len_iv = 0 and len_is_uv = 0. len_is_uv must
2956 always be true for an explicit 0.
2959 Perl_translate_substr_offsets(pTHX_ STRLEN curlen, IV pos1_iv,
2960 bool pos1_is_uv, IV len_iv,
2961 bool len_is_uv, STRLEN *posp,
2967 PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS;
2969 if (!pos1_is_uv && pos1_iv < 0 && curlen) {
2970 pos1_is_uv = curlen-1 > ~(UV)pos1_iv;
2973 if ((pos1_is_uv || pos1_iv > 0) && (UV)pos1_iv > curlen)
2976 if (len_iv || len_is_uv) {
2977 if (!len_is_uv && len_iv < 0) {
2978 pos2_iv = curlen + len_iv;
2980 pos2_is_uv = curlen-1 > ~(UV)len_iv;
2983 } else { /* len_iv >= 0 */
2984 if (!pos1_is_uv && pos1_iv < 0) {
2985 pos2_iv = pos1_iv + len_iv;
2986 pos2_is_uv = (UV)len_iv > (UV)IV_MAX;
2988 if ((UV)len_iv > curlen-(UV)pos1_iv)
2991 pos2_iv = pos1_iv+len_iv;
3001 if (!pos2_is_uv && pos2_iv < 0) {
3002 if (!pos1_is_uv && pos1_iv < 0)
3006 else if (!pos1_is_uv && pos1_iv < 0)
3009 if ((UV)pos2_iv < (UV)pos1_iv)
3011 if ((UV)pos2_iv > curlen)
3014 /* pos1_iv and pos2_iv both in 0..curlen, so the cast is safe */
3015 *posp = (STRLEN)( (UV)pos1_iv );
3016 *lenp = (STRLEN)( (UV)pos2_iv - (UV)pos1_iv );
3033 I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3034 const bool rvalue = (GIMME_V != G_VOID);
3037 const char *repl = NULL;
3039 int num_args = PL_op->op_private & 7;
3040 bool repl_need_utf8_upgrade = FALSE;
3041 bool repl_is_utf8 = FALSE;
3045 if(!(repl_sv = POPs)) num_args--;
3047 if ((len_sv = POPs)) {
3048 len_iv = SvIV(len_sv);
3049 len_is_uv = len_iv ? SvIOK_UV(len_sv) : 1;
3054 pos1_iv = SvIV(pos_sv);
3055 pos1_is_uv = SvIOK_UV(pos_sv);
3057 if (PL_op->op_private & OPpSUBSTR_REPL_FIRST) {
3063 repl = SvPV_const(repl_sv, repl_len);
3064 repl_is_utf8 = DO_UTF8(repl_sv) && repl_len;
3067 sv_utf8_upgrade(sv);
3069 else if (DO_UTF8(sv))
3070 repl_need_utf8_upgrade = TRUE;
3074 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3075 sv_magic(ret, NULL, PERL_MAGIC_substr, NULL, 0);
3077 LvTARG(ret) = SvREFCNT_inc_simple(sv);
3079 pos1_is_uv || pos1_iv >= 0
3080 ? (STRLEN)(UV)pos1_iv
3081 : (LvFLAGS(ret) |= 1, (STRLEN)(UV)-pos1_iv);
3083 len_is_uv || len_iv > 0
3084 ? (STRLEN)(UV)len_iv
3085 : (LvFLAGS(ret) |= 2, (STRLEN)(UV)-len_iv);
3088 PUSHs(ret); /* avoid SvSETMAGIC here */
3091 tmps = SvPV_const(sv, curlen);
3093 utf8_curlen = sv_len_utf8(sv);
3094 if (utf8_curlen == curlen)
3097 curlen = utf8_curlen;
3103 STRLEN pos, len, byte_len, byte_pos;
3105 if (!translate_substr_offsets(
3106 curlen, pos1_iv, pos1_is_uv, len_iv, len_is_uv, &pos, &len
3110 byte_pos = utf8_curlen
3111 ? sv_pos_u2b_flags(sv, pos, &byte_len, SV_CONST_RETURN) : pos;
3116 SvTAINTED_off(TARG); /* decontaminate */
3117 SvUTF8_off(TARG); /* decontaminate */
3118 sv_setpvn(TARG, tmps, byte_len);
3119 #ifdef USE_LOCALE_COLLATE
3120 sv_unmagic(TARG, PERL_MAGIC_collxfrm);
3127 SV* repl_sv_copy = NULL;
3129 if (repl_need_utf8_upgrade) {
3130 repl_sv_copy = newSVsv(repl_sv);
3131 sv_utf8_upgrade(repl_sv_copy);
3132 repl = SvPV_const(repl_sv_copy, repl_len);
3133 repl_is_utf8 = DO_UTF8(repl_sv_copy) && repl_len;
3136 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
3137 "Attempt to use reference as lvalue in substr"
3141 sv_insert_flags(sv, byte_pos, byte_len, repl, repl_len, 0);
3144 SvREFCNT_dec(repl_sv_copy);
3156 Perl_croak(aTHX_ "substr outside of string");
3157 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
3164 register const IV size = POPi;
3165 register const IV offset = POPi;
3166 register SV * const src = POPs;
3167 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3170 if (lvalue) { /* it's an lvalue! */
3171 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3172 sv_magic(ret, NULL, PERL_MAGIC_vec, NULL, 0);
3174 LvTARG(ret) = SvREFCNT_inc_simple(src);
3175 LvTARGOFF(ret) = offset;
3176 LvTARGLEN(ret) = size;
3180 SvTAINTED_off(TARG); /* decontaminate */
3184 sv_setuv(ret, do_vecget(src, offset, size));
3200 const char *little_p;
3203 const bool is_index = PL_op->op_type == OP_INDEX;
3204 const bool threeargs = MAXARG >= 3 && (TOPs || ((void)POPs,0));
3210 big_p = SvPV_const(big, biglen);
3211 little_p = SvPV_const(little, llen);
3213 big_utf8 = DO_UTF8(big);
3214 little_utf8 = DO_UTF8(little);
3215 if (big_utf8 ^ little_utf8) {
3216 /* One needs to be upgraded. */
3217 if (little_utf8 && !PL_encoding) {
3218 /* Well, maybe instead we might be able to downgrade the small
3220 char * const pv = (char*)bytes_from_utf8((U8 *)little_p, &llen,
3223 /* If the large string is ISO-8859-1, and it's not possible to
3224 convert the small string to ISO-8859-1, then there is no
3225 way that it could be found anywhere by index. */
3230 /* At this point, pv is a malloc()ed string. So donate it to temp
3231 to ensure it will get free()d */
3232 little = temp = newSV(0);
3233 sv_usepvn(temp, pv, llen);
3234 little_p = SvPVX(little);
3237 ? newSVpvn(big_p, biglen) : newSVpvn(little_p, llen);
3240 sv_recode_to_utf8(temp, PL_encoding);
3242 sv_utf8_upgrade(temp);
3247 big_p = SvPV_const(big, biglen);
3250 little_p = SvPV_const(little, llen);
3254 if (SvGAMAGIC(big)) {
3255 /* Life just becomes a lot easier if I use a temporary here.
3256 Otherwise I need to avoid calls to sv_pos_u2b(), which (dangerously)
3257 will trigger magic and overloading again, as will fbm_instr()
3259 big = newSVpvn_flags(big_p, biglen,
3260 SVs_TEMP | (big_utf8 ? SVf_UTF8 : 0));
3263 if (SvGAMAGIC(little) || (is_index && !SvOK(little))) {
3264 /* index && SvOK() is a hack. fbm_instr() calls SvPV_const, which will
3265 warn on undef, and we've already triggered a warning with the
3266 SvPV_const some lines above. We can't remove that, as we need to
3267 call some SvPV to trigger overloading early and find out if the
3269 This is all getting to messy. The API isn't quite clean enough,
3270 because data access has side effects.
3272 little = newSVpvn_flags(little_p, llen,
3273 SVs_TEMP | (little_utf8 ? SVf_UTF8 : 0));
3274 little_p = SvPVX(little);
3278 offset = is_index ? 0 : biglen;
3280 if (big_utf8 && offset > 0)
3281 sv_pos_u2b(big, &offset, 0);
3287 else if (offset > (I32)biglen)
3289 if (!(little_p = is_index
3290 ? fbm_instr((unsigned char*)big_p + offset,
3291 (unsigned char*)big_p + biglen, little, 0)
3292 : rninstr(big_p, big_p + offset,
3293 little_p, little_p + llen)))
3296 retval = little_p - big_p;
3297 if (retval > 0 && big_utf8)
3298 sv_pos_b2u(big, &retval);
3308 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
3309 SvTAINTED_off(TARG);
3310 do_sprintf(TARG, SP-MARK, MARK+1);
3311 TAINT_IF(SvTAINTED(TARG));
3323 const U8 *s = (U8*)SvPV_const(argsv, len);
3325 if (PL_encoding && SvPOK(argsv) && !DO_UTF8(argsv)) {
3326 SV * const tmpsv = sv_2mortal(newSVsv(argsv));
3327 s = (U8*)sv_recode_to_utf8(tmpsv, PL_encoding);
3331 XPUSHu(DO_UTF8(argsv) ?
3332 utf8n_to_uvchr(s, UTF8_MAXBYTES, 0, UTF8_ALLOW_ANYUV) :
3344 if (((SvIOK_notUV(TOPs) && SvIV(TOPs) < 0)
3346 (SvNOK(TOPs) && SvNV(TOPs) < 0.0))) {
3348 value = POPu; /* chr(-1) eq chr(0xff), etc. */
3350 (void) POPs; /* Ignore the argument value. */
3351 value = UNICODE_REPLACEMENT;
3357 SvUPGRADE(TARG,SVt_PV);
3359 if (value > 255 && !IN_BYTES) {
3360 SvGROW(TARG, (STRLEN)UNISKIP(value)+1);
3361 tmps = (char*)uvchr_to_utf8_flags((U8*)SvPVX(TARG), value, 0);
3362 SvCUR_set(TARG, tmps - SvPVX_const(TARG));
3364 (void)SvPOK_only(TARG);
3373 *tmps++ = (char)value;
3375 (void)SvPOK_only(TARG);
3377 if (PL_encoding && !IN_BYTES) {
3378 sv_recode_to_utf8(TARG, PL_encoding);
3380 if (SvCUR(TARG) == 0 || !is_utf8_string((U8*)tmps, SvCUR(TARG)) ||
3381 UNICODE_IS_REPLACEMENT(utf8_to_uvchr((U8*)tmps, NULL))) {
3385 *tmps++ = (char)value;
3401 const char *tmps = SvPV_const(left, len);
3403 if (DO_UTF8(left)) {
3404 /* If Unicode, try to downgrade.
3405 * If not possible, croak.
3406 * Yes, we made this up. */
3407 SV* const tsv = sv_2mortal(newSVsv(left));
3410 sv_utf8_downgrade(tsv, FALSE);
3411 tmps = SvPV_const(tsv, len);
3413 # ifdef USE_ITHREADS
3415 if (!PL_reentrant_buffer->_crypt_struct_buffer) {
3416 /* This should be threadsafe because in ithreads there is only
3417 * one thread per interpreter. If this would not be true,
3418 * we would need a mutex to protect this malloc. */
3419 PL_reentrant_buffer->_crypt_struct_buffer =
3420 (struct crypt_data *)safemalloc(sizeof(struct crypt_data));
3421 #if defined(__GLIBC__) || defined(__EMX__)
3422 if (PL_reentrant_buffer->_crypt_struct_buffer) {
3423 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
3424 /* work around glibc-2.2.5 bug */
3425 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
3429 # endif /* HAS_CRYPT_R */
3430 # endif /* USE_ITHREADS */
3432 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
3434 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
3440 "The crypt() function is unimplemented due to excessive paranoia.");
3444 /* Generally UTF-8 and UTF-EBCDIC are indistinguishable at this level. So
3445 * most comments below say UTF-8, when in fact they mean UTF-EBCDIC as well */
3447 /* Generates code to store a unicode codepoint c that is known to occupy
3448 * exactly two UTF-8 and UTF-EBCDIC bytes; it is stored into p and p+1,
3449 * and p is advanced to point to the next available byte after the two bytes */
3450 #define CAT_UNI_TO_UTF8_TWO_BYTE(p, c) \
3452 *(p)++ = UTF8_TWO_BYTE_HI(c); \
3453 *((p)++) = UTF8_TWO_BYTE_LO(c); \
3458 /* Actually is both lcfirst() and ucfirst(). Only the first character
3459 * changes. This means that possibly we can change in-place, ie., just
3460 * take the source and change that one character and store it back, but not
3461 * if read-only etc, or if the length changes */
3466 STRLEN slen; /* slen is the byte length of the whole SV. */
3469 bool inplace; /* ? Convert first char only, in-place */
3470 bool doing_utf8 = FALSE; /* ? using utf8 */
3471 bool convert_source_to_utf8 = FALSE; /* ? need to convert */
3472 const int op_type = PL_op->op_type;
3475 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3476 STRLEN ulen; /* ulen is the byte length of the original Unicode character
3477 * stored as UTF-8 at s. */
3478 STRLEN tculen; /* tculen is the byte length of the freshly titlecased (or
3479 * lowercased) character stored in tmpbuf. May be either
3480 * UTF-8 or not, but in either case is the number of bytes */
3481 bool tainted = FALSE;
3485 s = (const U8*)SvPV_nomg_const(source, slen);
3487 if (ckWARN(WARN_UNINITIALIZED))
3488 report_uninit(source);
3493 /* We may be able to get away with changing only the first character, in
3494 * place, but not if read-only, etc. Later we may discover more reasons to
3495 * not convert in-place. */
3496 inplace = SvPADTMP(source) && !SvREADONLY(source) && SvTEMP(source);
3498 /* First calculate what the changed first character should be. This affects
3499 * whether we can just swap it out, leaving the rest of the string unchanged,
3500 * or even if have to convert the dest to UTF-8 when the source isn't */
3502 if (! slen) { /* If empty */
3503 need = 1; /* still need a trailing NUL */
3506 else if (DO_UTF8(source)) { /* Is the source utf8? */
3509 if (op_type == OP_UCFIRST) {
3510 _to_utf8_title_flags(s, tmpbuf, &tculen,
3511 cBOOL(IN_LOCALE_RUNTIME), &tainted);
3514 _to_utf8_lower_flags(s, tmpbuf, &tculen,
3515 cBOOL(IN_LOCALE_RUNTIME), &tainted);
3518 /* we can't do in-place if the length changes. */
3519 if (ulen != tculen) inplace = FALSE;
3520 need = slen + 1 - ulen + tculen;
3522 else { /* Non-zero length, non-UTF-8, Need to consider locale and if
3523 * latin1 is treated as caseless. Note that a locale takes
3525 ulen = 1; /* Original character is 1 byte */
3526 tculen = 1; /* Most characters will require one byte, but this will
3527 * need to be overridden for the tricky ones */
3530 if (op_type == OP_LCFIRST) {
3532 /* lower case the first letter: no trickiness for any character */
3533 *tmpbuf = (IN_LOCALE_RUNTIME) ? toLOWER_LC(*s) :
3534 ((IN_UNI_8_BIT) ? toLOWER_LATIN1(*s) : toLOWER(*s));
3537 else if (IN_LOCALE_RUNTIME) {
3538 *tmpbuf = toUPPER_LC(*s); /* This would be a bug if any locales
3539 * have upper and title case different
3542 else if (! IN_UNI_8_BIT) {
3543 *tmpbuf = toUPPER(*s); /* Returns caseless for non-ascii, or
3544 * on EBCDIC machines whatever the
3545 * native function does */
3547 else { /* is ucfirst non-UTF-8, not in locale, and cased latin1 */
3548 UV title_ord = _to_upper_title_latin1(*s, tmpbuf, &tculen, 's');
3550 assert(tculen == 2);
3552 /* If the result is an upper Latin1-range character, it can
3553 * still be represented in one byte, which is its ordinal */
3554 if (UTF8_IS_DOWNGRADEABLE_START(*tmpbuf)) {
3555 *tmpbuf = (U8) title_ord;
3559 /* Otherwise it became more than one ASCII character (in
3560 * the case of LATIN_SMALL_LETTER_SHARP_S) or changed to
3561 * beyond Latin1, so the number of bytes changed, so can't
3562 * replace just the first character in place. */
3565 /* If the result won't fit in a byte, the entire result will
3566 * have to be in UTF-8. Assume worst case sizing in
3567 * conversion. (all latin1 characters occupy at most two bytes
3569 if (title_ord > 255) {
3571 convert_source_to_utf8 = TRUE;
3572 need = slen * 2 + 1;
3574 /* The (converted) UTF-8 and UTF-EBCDIC lengths of all
3575 * (both) characters whose title case is above 255 is
3579 else { /* LATIN_SMALL_LETTER_SHARP_S expands by 1 byte */
3580 need = slen + 1 + 1;
3584 } /* End of use Unicode (Latin1) semantics */
3585 } /* End of changing the case of the first character */
3587 /* Here, have the first character's changed case stored in tmpbuf. Ready to
3588 * generate the result */
3591 /* We can convert in place. This means we change just the first
3592 * character without disturbing the rest; no need to grow */
3594 s = d = (U8*)SvPV_force_nomg(source, slen);
3600 /* Here, we can't convert in place; we earlier calculated how much
3601 * space we will need, so grow to accommodate that */
3602 SvUPGRADE(dest, SVt_PV);
3603 d = (U8*)SvGROW(dest, need);
3604 (void)SvPOK_only(dest);
3611 if (! convert_source_to_utf8) {
3613 /* Here both source and dest are in UTF-8, but have to create
3614 * the entire output. We initialize the result to be the
3615 * title/lower cased first character, and then append the rest
3617 sv_setpvn(dest, (char*)tmpbuf, tculen);
3619 sv_catpvn(dest, (char*)(s + ulen), slen - ulen);
3623 const U8 *const send = s + slen;
3625 /* Here the dest needs to be in UTF-8, but the source isn't,
3626 * except we earlier UTF-8'd the first character of the source
3627 * into tmpbuf. First put that into dest, and then append the
3628 * rest of the source, converting it to UTF-8 as we go. */
3630 /* Assert tculen is 2 here because the only two characters that
3631 * get to this part of the code have 2-byte UTF-8 equivalents */
3633 *d++ = *(tmpbuf + 1);
3634 s++; /* We have just processed the 1st char */
3636 for (; s < send; s++) {
3637 d = uvchr_to_utf8(d, *s);
3640 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3644 else { /* in-place UTF-8. Just overwrite the first character */
3645 Copy(tmpbuf, d, tculen, U8);
3646 SvCUR_set(dest, need - 1);
3654 else { /* Neither source nor dest are in or need to be UTF-8 */
3656 if (IN_LOCALE_RUNTIME) {
3660 if (inplace) { /* in-place, only need to change the 1st char */
3663 else { /* Not in-place */
3665 /* Copy the case-changed character(s) from tmpbuf */
3666 Copy(tmpbuf, d, tculen, U8);
3667 d += tculen - 1; /* Code below expects d to point to final
3668 * character stored */
3671 else { /* empty source */
3672 /* See bug #39028: Don't taint if empty */
3676 /* In a "use bytes" we don't treat the source as UTF-8, but, still want
3677 * the destination to retain that flag */
3681 if (!inplace) { /* Finish the rest of the string, unchanged */
3682 /* This will copy the trailing NUL */
3683 Copy(s + 1, d + 1, slen, U8);
3684 SvCUR_set(dest, need - 1);
3687 if (dest != source && SvTAINTED(source))
3693 /* There's so much setup/teardown code common between uc and lc, I wonder if
3694 it would be worth merging the two, and just having a switch outside each
3695 of the three tight loops. There is less and less commonality though */
3709 if (SvPADTMP(source) && !SvREADONLY(source) && !SvAMAGIC(source)
3710 && SvTEMP(source) && !DO_UTF8(source)
3711 && (IN_LOCALE_RUNTIME || ! IN_UNI_8_BIT)) {
3713 /* We can convert in place. The reason we can't if in UNI_8_BIT is to
3714 * make the loop tight, so we overwrite the source with the dest before
3715 * looking at it, and we need to look at the original source
3716 * afterwards. There would also need to be code added to handle
3717 * switching to not in-place in midstream if we run into characters
3718 * that change the length.
3721 s = d = (U8*)SvPV_force_nomg(source, len);
3728 /* The old implementation would copy source into TARG at this point.
3729 This had the side effect that if source was undef, TARG was now
3730 an undefined SV with PADTMP set, and they don't warn inside
3731 sv_2pv_flags(). However, we're now getting the PV direct from
3732 source, which doesn't have PADTMP set, so it would warn. Hence the
3736 s = (const U8*)SvPV_nomg_const(source, len);
3738 if (ckWARN(WARN_UNINITIALIZED))
3739 report_uninit(source);
3745 SvUPGRADE(dest, SVt_PV);
3746 d = (U8*)SvGROW(dest, min);
3747 (void)SvPOK_only(dest);
3752 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3753 to check DO_UTF8 again here. */
3755 if (DO_UTF8(source)) {
3756 const U8 *const send = s + len;
3757 U8 tmpbuf[UTF8_MAXBYTES+1];
3758 bool tainted = FALSE;
3760 /* All occurrences of these are to be moved to follow any other marks.
3761 * This is context-dependent. We may not be passed enough context to
3762 * move the iota subscript beyond all of them, but we do the best we can
3763 * with what we're given. The result is always better than if we
3764 * hadn't done this. And, the problem would only arise if we are
3765 * passed a character without all its combining marks, which would be
3766 * the caller's mistake. The information this is based on comes from a
3767 * comment in Unicode SpecialCasing.txt, (and the Standard's text
3768 * itself) and so can't be checked properly to see if it ever gets
3769 * revised. But the likelihood of it changing is remote */
3770 bool in_iota_subscript = FALSE;
3776 if (in_iota_subscript && ! is_utf8_mark(s)) {
3778 /* A non-mark. Time to output the iota subscript */
3779 #define GREEK_CAPITAL_LETTER_IOTA 0x0399
3780 #define COMBINING_GREEK_YPOGEGRAMMENI 0x0345
3782 CAT_UNI_TO_UTF8_TWO_BYTE(d, GREEK_CAPITAL_LETTER_IOTA);
3783 in_iota_subscript = FALSE;
3786 /* Then handle the current character. Get the changed case value
3787 * and copy it to the output buffer */
3790 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen,
3791 cBOOL(IN_LOCALE_RUNTIME), &tainted);
3792 if (uv == GREEK_CAPITAL_LETTER_IOTA
3793 && utf8_to_uvchr(s, 0) == COMBINING_GREEK_YPOGEGRAMMENI)
3795 in_iota_subscript = TRUE;
3798 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
3799 /* If the eventually required minimum size outgrows the
3800 * available space, we need to grow. */
3801 const UV o = d - (U8*)SvPVX_const(dest);
3803 /* If someone uppercases one million U+03B0s we SvGROW()
3804 * one million times. Or we could try guessing how much to
3805 * allocate without allocating too much. Such is life.
3806 * See corresponding comment in lc code for another option
3809 d = (U8*)SvPVX(dest) + o;
3811 Copy(tmpbuf, d, ulen, U8);
3816 if (in_iota_subscript) {
3817 CAT_UNI_TO_UTF8_TWO_BYTE(d, GREEK_CAPITAL_LETTER_IOTA);
3822 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3828 else { /* Not UTF-8 */
3830 const U8 *const send = s + len;
3832 /* Use locale casing if in locale; regular style if not treating
3833 * latin1 as having case; otherwise the latin1 casing. Do the
3834 * whole thing in a tight loop, for speed, */
3835 if (IN_LOCALE_RUNTIME) {
3838 for (; s < send; d++, s++)
3839 *d = toUPPER_LC(*s);
3841 else if (! IN_UNI_8_BIT) {
3842 for (; s < send; d++, s++) {
3847 for (; s < send; d++, s++) {
3848 *d = toUPPER_LATIN1_MOD(*s);
3849 if (LIKELY(*d != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) continue;
3851 /* The mainstream case is the tight loop above. To avoid
3852 * extra tests in that, all three characters that require
3853 * special handling are mapped by the MOD to the one tested
3855 * Use the source to distinguish between the three cases */
3857 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
3859 /* uc() of this requires 2 characters, but they are
3860 * ASCII. If not enough room, grow the string */
3861 if (SvLEN(dest) < ++min) {
3862 const UV o = d - (U8*)SvPVX_const(dest);
3864 d = (U8*)SvPVX(dest) + o;
3866 *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
3867 continue; /* Back to the tight loop; still in ASCII */
3870 /* The other two special handling characters have their
3871 * upper cases outside the latin1 range, hence need to be
3872 * in UTF-8, so the whole result needs to be in UTF-8. So,
3873 * here we are somewhere in the middle of processing a
3874 * non-UTF-8 string, and realize that we will have to convert
3875 * the whole thing to UTF-8. What to do? There are
3876 * several possibilities. The simplest to code is to
3877 * convert what we have so far, set a flag, and continue on
3878 * in the loop. The flag would be tested each time through
3879 * the loop, and if set, the next character would be
3880 * converted to UTF-8 and stored. But, I (khw) didn't want
3881 * to slow down the mainstream case at all for this fairly
3882 * rare case, so I didn't want to add a test that didn't
3883 * absolutely have to be there in the loop, besides the
3884 * possibility that it would get too complicated for
3885 * optimizers to deal with. Another possibility is to just
3886 * give up, convert the source to UTF-8, and restart the
3887 * function that way. Another possibility is to convert
3888 * both what has already been processed and what is yet to
3889 * come separately to UTF-8, then jump into the loop that
3890 * handles UTF-8. But the most efficient time-wise of the
3891 * ones I could think of is what follows, and turned out to
3892 * not require much extra code. */
3894 /* Convert what we have so far into UTF-8, telling the
3895 * function that we know it should be converted, and to
3896 * allow extra space for what we haven't processed yet.
3897 * Assume the worst case space requirements for converting
3898 * what we haven't processed so far: that it will require
3899 * two bytes for each remaining source character, plus the
3900 * NUL at the end. This may cause the string pointer to
3901 * move, so re-find it. */
3903 len = d - (U8*)SvPVX_const(dest);
3904 SvCUR_set(dest, len);
3905 len = sv_utf8_upgrade_flags_grow(dest,
3906 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3908 d = (U8*)SvPVX(dest) + len;
3910 /* Now process the remainder of the source, converting to
3911 * upper and UTF-8. If a resulting byte is invariant in
3912 * UTF-8, output it as-is, otherwise convert to UTF-8 and
3913 * append it to the output. */
3914 for (; s < send; s++) {
3915 (void) _to_upper_title_latin1(*s, d, &len, 'S');
3919 /* Here have processed the whole source; no need to continue
3920 * with the outer loop. Each character has been converted
3921 * to upper case and converted to UTF-8 */
3924 } /* End of processing all latin1-style chars */
3925 } /* End of processing all chars */
3926 } /* End of source is not empty */
3928 if (source != dest) {
3929 *d = '\0'; /* Here d points to 1 after last char, add NUL */
3930 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3932 } /* End of isn't utf8 */
3933 if (dest != source && SvTAINTED(source))
3952 if (SvPADTMP(source) && !SvREADONLY(source) && !SvAMAGIC(source)
3953 && SvTEMP(source) && !DO_UTF8(source)) {
3955 /* We can convert in place, as lowercasing anything in the latin1 range
3956 * (or else DO_UTF8 would have been on) doesn't lengthen it */
3958 s = d = (U8*)SvPV_force_nomg(source, len);
3965 /* The old implementation would copy source into TARG at this point.
3966 This had the side effect that if source was undef, TARG was now
3967 an undefined SV with PADTMP set, and they don't warn inside
3968 sv_2pv_flags(). However, we're now getting the PV direct from
3969 source, which doesn't have PADTMP set, so it would warn. Hence the
3973 s = (const U8*)SvPV_nomg_const(source, len);
3975 if (ckWARN(WARN_UNINITIALIZED))
3976 report_uninit(source);
3982 SvUPGRADE(dest, SVt_PV);
3983 d = (U8*)SvGROW(dest, min);
3984 (void)SvPOK_only(dest);
3989 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3990 to check DO_UTF8 again here. */
3992 if (DO_UTF8(source)) {
3993 const U8 *const send = s + len;
3994 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3995 bool tainted = FALSE;
3998 const STRLEN u = UTF8SKIP(s);
4001 _to_utf8_lower_flags(s, tmpbuf, &ulen,
4002 cBOOL(IN_LOCALE_RUNTIME), &tainted);
4004 /* Here is where we would do context-sensitive actions. See the
4005 * commit message for this comment for why there isn't any */
4007 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4009 /* If the eventually required minimum size outgrows the
4010 * available space, we need to grow. */
4011 const UV o = d - (U8*)SvPVX_const(dest);
4013 /* If someone lowercases one million U+0130s we SvGROW() one
4014 * million times. Or we could try guessing how much to
4015 * allocate without allocating too much. Such is life.
4016 * Another option would be to grow an extra byte or two more
4017 * each time we need to grow, which would cut down the million
4018 * to 500K, with little waste */
4020 d = (U8*)SvPVX(dest) + o;
4023 /* Copy the newly lowercased letter to the output buffer we're
4025 Copy(tmpbuf, d, ulen, U8);
4028 } /* End of looping through the source string */
4031 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4036 } else { /* Not utf8 */
4038 const U8 *const send = s + len;
4040 /* Use locale casing if in locale; regular style if not treating
4041 * latin1 as having case; otherwise the latin1 casing. Do the
4042 * whole thing in a tight loop, for speed, */
4043 if (IN_LOCALE_RUNTIME) {
4046 for (; s < send; d++, s++)
4047 *d = toLOWER_LC(*s);
4049 else if (! IN_UNI_8_BIT) {
4050 for (; s < send; d++, s++) {
4055 for (; s < send; d++, s++) {
4056 *d = toLOWER_LATIN1(*s);
4060 if (source != dest) {
4062 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4065 if (dest != source && SvTAINTED(source))
4074 SV * const sv = TOPs;
4076 register const char *s = SvPV_const(sv,len);
4078 SvUTF8_off(TARG); /* decontaminate */
4081 SvUPGRADE(TARG, SVt_PV);
4082 SvGROW(TARG, (len * 2) + 1);
4086 if (UTF8_IS_CONTINUED(*s)) {
4087 STRLEN ulen = UTF8SKIP(s);
4111 SvCUR_set(TARG, d - SvPVX_const(TARG));
4112 (void)SvPOK_only_UTF8(TARG);
4115 sv_setpvn(TARG, s, len);
4124 dVAR; dSP; dMARK; dORIGMARK;
4125 register AV *const av = MUTABLE_AV(POPs);
4126 register const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4128 if (SvTYPE(av) == SVt_PVAV) {
4129 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4130 bool can_preserve = FALSE;
4136 can_preserve = SvCANEXISTDELETE(av);
4139 if (lval && localizing) {
4142 for (svp = MARK + 1; svp <= SP; svp++) {
4143 const I32 elem = SvIV(*svp);
4147 if (max > AvMAX(av))
4151 while (++MARK <= SP) {
4153 I32 elem = SvIV(*MARK);
4154 bool preeminent = TRUE;
4156 if (localizing && can_preserve) {
4157 /* If we can determine whether the element exist,
4158 * Try to preserve the existenceness of a tied array
4159 * element by using EXISTS and DELETE if possible.
4160 * Fallback to FETCH and STORE otherwise. */
4161 preeminent = av_exists(av, elem);
4164 svp = av_fetch(av, elem, lval);
4166 if (!svp || *svp == &PL_sv_undef)
4167 DIE(aTHX_ PL_no_aelem, elem);
4170 save_aelem(av, elem, svp);
4172 SAVEADELETE(av, elem);
4175 *MARK = svp ? *svp : &PL_sv_undef;
4178 if (GIMME != G_ARRAY) {
4180 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4186 /* Smart dereferencing for keys, values and each */
4198 (SvTYPE(sv) != SVt_PVHV && SvTYPE(sv) != SVt_PVAV)
4203 "Type of argument to %s must be unblessed hashref or arrayref",
4204 PL_op_desc[PL_op->op_type] );
4207 if (PL_op->op_flags & OPf_SPECIAL && SvTYPE(sv) == SVt_PVAV)
4209 "Can't modify %s in %s",
4210 PL_op_desc[PL_op->op_type], PL_op_desc[PL_op->op_next->op_type]
4213 /* Delegate to correct function for op type */
4215 if (PL_op->op_type == OP_RKEYS || PL_op->op_type == OP_RVALUES) {
4216 return (SvTYPE(sv) == SVt_PVHV) ? Perl_do_kv(aTHX) : Perl_pp_akeys(aTHX);
4219 return (SvTYPE(sv) == SVt_PVHV) ? Perl_pp_each(aTHX) : Perl_pp_aeach(aTHX);
4227 AV *array = MUTABLE_AV(POPs);
4228 const I32 gimme = GIMME_V;
4229 IV *iterp = Perl_av_iter_p(aTHX_ array);
4230 const IV current = (*iterp)++;
4232 if (current > av_len(array)) {
4234 if (gimme == G_SCALAR)
4242 if (gimme == G_ARRAY) {
4243 SV **const element = av_fetch(array, current, 0);
4244 PUSHs(element ? *element : &PL_sv_undef);
4253 AV *array = MUTABLE_AV(POPs);
4254 const I32 gimme = GIMME_V;
4256 *Perl_av_iter_p(aTHX_ array) = 0;
4258 if (gimme == G_SCALAR) {
4260 PUSHi(av_len(array) + 1);
4262 else if (gimme == G_ARRAY) {
4263 IV n = Perl_av_len(aTHX_ array);
4268 if (PL_op->op_type == OP_AKEYS || PL_op->op_type == OP_RKEYS) {
4269 for (i = 0; i <= n; i++) {
4274 for (i = 0; i <= n; i++) {
4275 SV *const *const elem = Perl_av_fetch(aTHX_ array, i, 0);
4276 PUSHs(elem ? *elem : &PL_sv_undef);
4283 /* Associative arrays. */
4289 HV * hash = MUTABLE_HV(POPs);
4291 const I32 gimme = GIMME_V;
4294 /* might clobber stack_sp */
4295 entry = hv_iternext(hash);
4300 SV* const sv = hv_iterkeysv(entry);
4301 PUSHs(sv); /* won't clobber stack_sp */
4302 if (gimme == G_ARRAY) {
4305 /* might clobber stack_sp */
4306 val = hv_iterval(hash, entry);
4311 else if (gimme == G_SCALAR)
4318 S_do_delete_local(pTHX)
4322 const I32 gimme = GIMME_V;
4326 if (PL_op->op_private & OPpSLICE) {
4328 SV * const osv = POPs;
4329 const bool tied = SvRMAGICAL(osv)
4330 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4331 const bool can_preserve = SvCANEXISTDELETE(osv)
4332 || mg_find((const SV *)osv, PERL_MAGIC_env);
4333 const U32 type = SvTYPE(osv);
4334 if (type == SVt_PVHV) { /* hash element */
4335 HV * const hv = MUTABLE_HV(osv);
4336 while (++MARK <= SP) {
4337 SV * const keysv = *MARK;
4339 bool preeminent = TRUE;
4341 preeminent = hv_exists_ent(hv, keysv, 0);
4343 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4350 sv = hv_delete_ent(hv, keysv, 0, 0);
4351 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4354 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4356 *MARK = sv_mortalcopy(sv);
4362 SAVEHDELETE(hv, keysv);
4363 *MARK = &PL_sv_undef;
4367 else if (type == SVt_PVAV) { /* array element */
4368 if (PL_op->op_flags & OPf_SPECIAL) {
4369 AV * const av = MUTABLE_AV(osv);
4370 while (++MARK <= SP) {
4371 I32 idx = SvIV(*MARK);
4373 bool preeminent = TRUE;
4375 preeminent = av_exists(av, idx);
4377 SV **svp = av_fetch(av, idx, 1);
4384 sv = av_delete(av, idx, 0);
4385 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4388 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4390 *MARK = sv_mortalcopy(sv);
4396 SAVEADELETE(av, idx);
4397 *MARK = &PL_sv_undef;
4403 DIE(aTHX_ "Not a HASH reference");
4404 if (gimme == G_VOID)
4406 else if (gimme == G_SCALAR) {
4411 *++MARK = &PL_sv_undef;
4416 SV * const keysv = POPs;
4417 SV * const osv = POPs;
4418 const bool tied = SvRMAGICAL(osv)
4419 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4420 const bool can_preserve = SvCANEXISTDELETE(osv)
4421 || mg_find((const SV *)osv, PERL_MAGIC_env);
4422 const U32 type = SvTYPE(osv);
4424 if (type == SVt_PVHV) {
4425 HV * const hv = MUTABLE_HV(osv);
4426 bool preeminent = TRUE;
4428 preeminent = hv_exists_ent(hv, keysv, 0);
4430 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4437 sv = hv_delete_ent(hv, keysv, 0, 0);
4438 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4441 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4443 SV *nsv = sv_mortalcopy(sv);
4449 SAVEHDELETE(hv, keysv);
4451 else if (type == SVt_PVAV) {
4452 if (PL_op->op_flags & OPf_SPECIAL) {
4453 AV * const av = MUTABLE_AV(osv);
4454 I32 idx = SvIV(keysv);
4455 bool preeminent = TRUE;
4457 preeminent = av_exists(av, idx);
4459 SV **svp = av_fetch(av, idx, 1);
4466 sv = av_delete(av, idx, 0);
4467 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4470 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4472 SV *nsv = sv_mortalcopy(sv);
4478 SAVEADELETE(av, idx);
4481 DIE(aTHX_ "panic: avhv_delete no longer supported");
4484 DIE(aTHX_ "Not a HASH reference");
4487 if (gimme != G_VOID)
4501 if (PL_op->op_private & OPpLVAL_INTRO)
4502 return do_delete_local();
4505 discard = (gimme == G_VOID) ? G_DISCARD : 0;
4507 if (PL_op->op_private & OPpSLICE) {
4509 HV * const hv = MUTABLE_HV(POPs);
4510 const U32 hvtype = SvTYPE(hv);
4511 if (hvtype == SVt_PVHV) { /* hash element */
4512 while (++MARK <= SP) {
4513 SV * const sv = hv_delete_ent(hv, *MARK, discard, 0);
4514 *MARK = sv ? sv : &PL_sv_undef;
4517 else if (hvtype == SVt_PVAV) { /* array element */
4518 if (PL_op->op_flags & OPf_SPECIAL) {
4519 while (++MARK <= SP) {
4520 SV * const sv = av_delete(MUTABLE_AV(hv), SvIV(*MARK), discard);
4521 *MARK = sv ? sv : &PL_sv_undef;
4526 DIE(aTHX_ "Not a HASH reference");
4529 else if (gimme == G_SCALAR) {
4534 *++MARK = &PL_sv_undef;
4540 HV * const hv = MUTABLE_HV(POPs);
4542 if (SvTYPE(hv) == SVt_PVHV)
4543 sv = hv_delete_ent(hv, keysv, discard, 0);
4544 else if (SvTYPE(hv) == SVt_PVAV) {
4545 if (PL_op->op_flags & OPf_SPECIAL)
4546 sv = av_delete(MUTABLE_AV(hv), SvIV(keysv), discard);
4548 DIE(aTHX_ "panic: avhv_delete no longer supported");
4551 DIE(aTHX_ "Not a HASH reference");
4567 if (PL_op->op_private & OPpEXISTS_SUB) {
4569 SV * const sv = POPs;
4570 CV * const cv = sv_2cv(sv, &hv, &gv, 0);
4573 if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
4578 hv = MUTABLE_HV(POPs);
4579 if (SvTYPE(hv) == SVt_PVHV) {
4580 if (hv_exists_ent(hv, tmpsv, 0))
4583 else if (SvTYPE(hv) == SVt_PVAV) {
4584 if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
4585 if (av_exists(MUTABLE_AV(hv), SvIV(tmpsv)))
4590 DIE(aTHX_ "Not a HASH reference");
4597 dVAR; dSP; dMARK; dORIGMARK;
4598 register HV * const hv = MUTABLE_HV(POPs);
4599 register const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4600 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4601 bool can_preserve = FALSE;
4607 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
4608 can_preserve = TRUE;
4611 while (++MARK <= SP) {
4612 SV * const keysv = *MARK;
4615 bool preeminent = TRUE;
4617 if (localizing && can_preserve) {
4618 /* If we can determine whether the element exist,
4619 * try to preserve the existenceness of a tied hash
4620 * element by using EXISTS and DELETE if possible.
4621 * Fallback to FETCH and STORE otherwise. */
4622 preeminent = hv_exists_ent(hv, keysv, 0);
4625 he = hv_fetch_ent(hv, keysv, lval, 0);
4626 svp = he ? &HeVAL(he) : NULL;
4629 if (!svp || !*svp || *svp == &PL_sv_undef) {
4630 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4633 if (HvNAME_get(hv) && isGV(*svp))
4634 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
4635 else if (preeminent)
4636 save_helem_flags(hv, keysv, svp,
4637 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
4639 SAVEHDELETE(hv, keysv);
4642 *MARK = svp && *svp ? *svp : &PL_sv_undef;
4644 if (GIMME != G_ARRAY) {
4646 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4652 /* List operators. */
4657 if (GIMME != G_ARRAY) {
4659 *MARK = *SP; /* unwanted list, return last item */
4661 *MARK = &PL_sv_undef;
4671 SV ** const lastrelem = PL_stack_sp;
4672 SV ** const lastlelem = PL_stack_base + POPMARK;
4673 SV ** const firstlelem = PL_stack_base + POPMARK + 1;
4674 register SV ** const firstrelem = lastlelem + 1;
4675 I32 is_something_there = FALSE;
4677 register const I32 max = lastrelem - lastlelem;
4678 register SV **lelem;
4680 if (GIMME != G_ARRAY) {
4681 I32 ix = SvIV(*lastlelem);
4684 if (ix < 0 || ix >= max)
4685 *firstlelem = &PL_sv_undef;
4687 *firstlelem = firstrelem[ix];
4693 SP = firstlelem - 1;
4697 for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
4698 I32 ix = SvIV(*lelem);
4701 if (ix < 0 || ix >= max)
4702 *lelem = &PL_sv_undef;
4704 is_something_there = TRUE;
4705 if (!(*lelem = firstrelem[ix]))
4706 *lelem = &PL_sv_undef;
4709 if (is_something_there)
4712 SP = firstlelem - 1;
4718 dVAR; dSP; dMARK; dORIGMARK;
4719 const I32 items = SP - MARK;
4720 SV * const av = MUTABLE_SV(av_make(items, MARK+1));
4721 SP = ORIGMARK; /* av_make() might realloc stack_sp */
4722 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
4723 ? newRV_noinc(av) : av);
4729 dVAR; dSP; dMARK; dORIGMARK;
4730 HV* const hv = newHV();
4733 SV * const key = *++MARK;
4734 SV * const val = newSV(0);
4736 sv_setsv(val, *++MARK);
4738 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash");
4739 (void)hv_store_ent(hv,key,val,0);
4742 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
4743 ? newRV_noinc(MUTABLE_SV(hv)) : MUTABLE_SV(hv));
4748 S_deref_plain_array(pTHX_ AV *ary)
4750 if (SvTYPE(ary) == SVt_PVAV) return ary;
4751 SvGETMAGIC((SV *)ary);
4752 if (!SvROK(ary) || SvTYPE(SvRV(ary)) != SVt_PVAV)
4753 Perl_die(aTHX_ "Not an ARRAY reference");
4754 else if (SvOBJECT(SvRV(ary)))
4755 Perl_die(aTHX_ "Not an unblessed ARRAY reference");
4756 return (AV *)SvRV(ary);
4759 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
4760 # define DEREF_PLAIN_ARRAY(ary) \
4763 SvTYPE(aRrRay) == SVt_PVAV \
4765 : S_deref_plain_array(aTHX_ aRrRay); \
4768 # define DEREF_PLAIN_ARRAY(ary) \
4770 PL_Sv = (SV *)(ary), \
4771 SvTYPE(PL_Sv) == SVt_PVAV \
4773 : S_deref_plain_array(aTHX_ (AV *)PL_Sv) \
4779 dVAR; dSP; dMARK; dORIGMARK;
4780 int num_args = (SP - MARK);
4781 register AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
4785 register I32 offset;
4786 register I32 length;
4790 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
4793 return Perl_tied_method(aTHX_ "SPLICE", mark - 1, MUTABLE_SV(ary), mg,
4794 GIMME_V | TIED_METHOD_ARGUMENTS_ON_STACK,
4801 offset = i = SvIV(*MARK);
4803 offset += AvFILLp(ary) + 1;
4805 DIE(aTHX_ PL_no_aelem, i);
4807 length = SvIVx(*MARK++);
4809 length += AvFILLp(ary) - offset + 1;
4815 length = AvMAX(ary) + 1; /* close enough to infinity */
4819 length = AvMAX(ary) + 1;
4821 if (offset > AvFILLp(ary) + 1) {
4823 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "splice() offset past end of array" );
4824 offset = AvFILLp(ary) + 1;
4826 after = AvFILLp(ary) + 1 - (offset + length);
4827 if (after < 0) { /* not that much array */
4828 length += after; /* offset+length now in array */
4834 /* At this point, MARK .. SP-1 is our new LIST */
4837 diff = newlen - length;
4838 if (newlen && !AvREAL(ary) && AvREIFY(ary))
4841 /* make new elements SVs now: avoid problems if they're from the array */
4842 for (dst = MARK, i = newlen; i; i--) {
4843 SV * const h = *dst;
4844 *dst++ = newSVsv(h);
4847 if (diff < 0) { /* shrinking the area */
4848 SV **tmparyval = NULL;
4850 Newx(tmparyval, newlen, SV*); /* so remember insertion */
4851 Copy(MARK, tmparyval, newlen, SV*);
4854 MARK = ORIGMARK + 1;
4855 if (GIMME == G_ARRAY) { /* copy return vals to stack */
4856 MEXTEND(MARK, length);
4857 Copy(AvARRAY(ary)+offset, MARK, length, SV*);
4859 EXTEND_MORTAL(length);
4860 for (i = length, dst = MARK; i; i--) {
4861 sv_2mortal(*dst); /* free them eventually */
4868 *MARK = AvARRAY(ary)[offset+length-1];
4871 for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
4872 SvREFCNT_dec(*dst++); /* free them now */
4875 AvFILLp(ary) += diff;
4877 /* pull up or down? */
4879 if (offset < after) { /* easier to pull up */
4880 if (offset) { /* esp. if nothing to pull */
4881 src = &AvARRAY(ary)[offset-1];
4882 dst = src - diff; /* diff is negative */
4883 for (i = offset; i > 0; i--) /* can't trust Copy */
4887 AvARRAY(ary) = AvARRAY(ary) - diff; /* diff is negative */
4891 if (after) { /* anything to pull down? */
4892 src = AvARRAY(ary) + offset + length;
4893 dst = src + diff; /* diff is negative */
4894 Move(src, dst, after, SV*);
4896 dst = &AvARRAY(ary)[AvFILLp(ary)+1];
4897 /* avoid later double free */
4901 dst[--i] = &PL_sv_undef;
4904 Copy( tmparyval, AvARRAY(ary) + offset, newlen, SV* );
4905 Safefree(tmparyval);
4908 else { /* no, expanding (or same) */
4909 SV** tmparyval = NULL;
4911 Newx(tmparyval, length, SV*); /* so remember deletion */
4912 Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
4915 if (diff > 0) { /* expanding */
4916 /* push up or down? */
4917 if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
4921 Move(src, dst, offset, SV*);
4923 AvARRAY(ary) = AvARRAY(ary) - diff;/* diff is positive */
4925 AvFILLp(ary) += diff;
4928 if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
4929 av_extend(ary, AvFILLp(ary) + diff);
4930 AvFILLp(ary) += diff;
4933 dst = AvARRAY(ary) + AvFILLp(ary);
4935 for (i = after; i; i--) {
4943 Copy( MARK, AvARRAY(ary) + offset, newlen, SV* );
4946 MARK = ORIGMARK + 1;
4947 if (GIMME == G_ARRAY) { /* copy return vals to stack */
4949 Copy(tmparyval, MARK, length, SV*);
4951 EXTEND_MORTAL(length);
4952 for (i = length, dst = MARK; i; i--) {
4953 sv_2mortal(*dst); /* free them eventually */
4960 else if (length--) {
4961 *MARK = tmparyval[length];
4964 while (length-- > 0)
4965 SvREFCNT_dec(tmparyval[length]);
4969 *MARK = &PL_sv_undef;
4970 Safefree(tmparyval);
4974 mg_set(MUTABLE_SV(ary));
4982 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
4983 register AV * const ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
4984 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
4987 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
4990 ENTER_with_name("call_PUSH");
4991 call_method("PUSH",G_SCALAR|G_DISCARD);
4992 LEAVE_with_name("call_PUSH");
4996 PL_delaymagic = DM_DELAY;
4997 for (++MARK; MARK <= SP; MARK++) {
4998 SV * const sv = newSV(0);
5000 sv_setsv(sv, *MARK);
5001 av_store(ary, AvFILLp(ary)+1, sv);
5003 if (PL_delaymagic & DM_ARRAY_ISA)
5004 mg_set(MUTABLE_SV(ary));
5009 if (OP_GIMME(PL_op, 0) != G_VOID) {
5010 PUSHi( AvFILL(ary) + 1 );
5019 AV * const av = PL_op->op_flags & OPf_SPECIAL
5020 ? MUTABLE_AV(GvAV(PL_defgv)) : DEREF_PLAIN_ARRAY(MUTABLE_AV(POPs));
5021 SV * const sv = PL_op->op_type == OP_SHIFT ? av_shift(av) : av_pop(av);
5025 (void)sv_2mortal(sv);
5032 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
5033 register AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5034 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5037 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5040 ENTER_with_name("call_UNSHIFT");
5041 call_method("UNSHIFT",G_SCALAR|G_DISCARD);
5042 LEAVE_with_name("call_UNSHIFT");
5047 av_unshift(ary, SP - MARK);
5049 SV * const sv = newSVsv(*++MARK);
5050 (void)av_store(ary, i++, sv);
5054 if (OP_GIMME(PL_op, 0) != G_VOID) {
5055 PUSHi( AvFILL(ary) + 1 );
5064 if (GIMME == G_ARRAY) {
5065 if (PL_op->op_private & OPpREVERSE_INPLACE) {
5069 assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
5070 (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
5071 av = MUTABLE_AV((*SP));
5072 /* In-place reversing only happens in void context for the array
5073 * assignment. We don't need to push anything on the stack. */
5076 if (SvMAGICAL(av)) {
5078 register SV *tmp = sv_newmortal();
5079 /* For SvCANEXISTDELETE */
5082 bool can_preserve = SvCANEXISTDELETE(av);
5084 for (i = 0, j = av_len(av); i < j; ++i, --j) {
5085 register SV *begin, *end;
5088 if (!av_exists(av, i)) {
5089 if (av_exists(av, j)) {
5090 register SV *sv = av_delete(av, j, 0);
5091 begin = *av_fetch(av, i, TRUE);
5092 sv_setsv_mg(begin, sv);
5096 else if (!av_exists(av, j)) {
5097 register SV *sv = av_delete(av, i, 0);
5098 end = *av_fetch(av, j, TRUE);
5099 sv_setsv_mg(end, sv);
5104 begin = *av_fetch(av, i, TRUE);
5105 end = *av_fetch(av, j, TRUE);
5106 sv_setsv(tmp, begin);
5107 sv_setsv_mg(begin, end);
5108 sv_setsv_mg(end, tmp);
5112 SV **begin = AvARRAY(av);
5115 SV **end = begin + AvFILLp(av);
5117 while (begin < end) {
5118 register SV * const tmp = *begin;
5129 register SV * const tmp = *MARK;
5133 /* safe as long as stack cannot get extended in the above */
5139 register char *down;
5144 SvUTF8_off(TARG); /* decontaminate */
5146 do_join(TARG, &PL_sv_no, MARK, SP);
5148 sv_setsv(TARG, SP > MARK ? *SP : find_rundefsv());
5149 if (! SvOK(TARG) && ckWARN(WARN_UNINITIALIZED))
5150 report_uninit(TARG);
5153 up = SvPV_force(TARG, len);
5155 if (DO_UTF8(TARG)) { /* first reverse each character */
5156 U8* s = (U8*)SvPVX(TARG);
5157 const U8* send = (U8*)(s + len);
5159 if (UTF8_IS_INVARIANT(*s)) {
5164 if (!utf8_to_uvchr(s, 0))
5168 down = (char*)(s - 1);
5169 /* reverse this character */
5173 *down-- = (char)tmp;
5179 down = SvPVX(TARG) + len - 1;
5183 *down-- = (char)tmp;
5185 (void)SvPOK_only_UTF8(TARG);
5197 register IV limit = POPi; /* note, negative is forever */
5198 SV * const sv = POPs;
5200 register const char *s = SvPV_const(sv, len);
5201 const bool do_utf8 = DO_UTF8(sv);
5202 const char *strend = s + len;
5204 register REGEXP *rx;
5206 register const char *m;
5208 const STRLEN slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : (STRLEN)(strend - s);
5209 I32 maxiters = slen + 10;
5210 I32 trailing_empty = 0;
5212 const I32 origlimit = limit;
5215 const I32 gimme = GIMME_V;
5217 const I32 oldsave = PL_savestack_ix;
5218 U32 make_mortal = SVs_TEMP;
5223 Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
5228 DIE(aTHX_ "panic: pp_split");
5231 TAINT_IF(get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET &&
5232 (RX_EXTFLAGS(rx) & (RXf_WHITE | RXf_SKIPWHITE)));
5234 RX_MATCH_UTF8_set(rx, do_utf8);
5237 if (pm->op_pmreplrootu.op_pmtargetoff) {
5238 ary = GvAVn(MUTABLE_GV(PAD_SVl(pm->op_pmreplrootu.op_pmtargetoff)));
5241 if (pm->op_pmreplrootu.op_pmtargetgv) {
5242 ary = GvAVn(pm->op_pmreplrootu.op_pmtargetgv);
5247 if (ary && (gimme != G_ARRAY || (pm->op_pmflags & PMf_ONCE))) {
5253 if ((mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied))) {
5255 XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
5262 for (i = AvFILLp(ary); i >= 0; i--)
5263 AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
5265 /* temporarily switch stacks */
5266 SAVESWITCHSTACK(PL_curstack, ary);
5270 base = SP - PL_stack_base;
5272 if (RX_EXTFLAGS(rx) & RXf_SKIPWHITE) {
5274 while (*s == ' ' || is_utf8_space((U8*)s))
5277 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5278 while (isSPACE_LC(*s))
5286 if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
5290 gimme_scalar = gimme == G_SCALAR && !ary;
5293 limit = maxiters + 2;
5294 if (RX_EXTFLAGS(rx) & RXf_WHITE) {
5297 /* this one uses 'm' and is a negative test */
5299 while (m < strend && !( *m == ' ' || is_utf8_space((U8*)m) )) {
5300 const int t = UTF8SKIP(m);
5301 /* is_utf8_space returns FALSE for malform utf8 */
5308 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5309 while (m < strend && !isSPACE_LC(*m))
5312 while (m < strend && !isSPACE(*m))
5325 dstr = newSVpvn_flags(s, m-s,
5326 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5330 /* skip the whitespace found last */
5332 s = m + UTF8SKIP(m);
5336 /* this one uses 's' and is a positive test */
5338 while (s < strend && ( *s == ' ' || is_utf8_space((U8*)s) ))
5341 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5342 while (s < strend && isSPACE_LC(*s))
5345 while (s < strend && isSPACE(*s))
5350 else if (RX_EXTFLAGS(rx) & RXf_START_ONLY) {
5352 for (m = s; m < strend && *m != '\n'; m++)
5365 dstr = newSVpvn_flags(s, m-s,
5366 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5372 else if (RX_EXTFLAGS(rx) & RXf_NULL && !(s >= strend)) {
5374 Pre-extend the stack, either the number of bytes or
5375 characters in the string or a limited amount, triggered by:
5377 my ($x, $y) = split //, $str;
5381 if (!gimme_scalar) {
5382 const U32 items = limit - 1;
5391 /* keep track of how many bytes we skip over */
5401 dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
5414 dstr = newSVpvn(s, 1);
5430 else if (do_utf8 == (RX_UTF8(rx) != 0) &&
5431 (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) && !RX_NPARENS(rx)
5432 && (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
5433 && !(RX_EXTFLAGS(rx) & RXf_ANCH)) {
5434 const int tail = (RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL);
5435 SV * const csv = CALLREG_INTUIT_STRING(rx);
5437 len = RX_MINLENRET(rx);
5438 if (len == 1 && !RX_UTF8(rx) && !tail) {
5439 const char c = *SvPV_nolen_const(csv);
5441 for (m = s; m < strend && *m != c; m++)
5452 dstr = newSVpvn_flags(s, m-s,
5453 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5456 /* The rx->minlen is in characters but we want to step
5457 * s ahead by bytes. */
5459 s = (char*)utf8_hop((U8*)m, len);
5461 s = m + len; /* Fake \n at the end */
5465 while (s < strend && --limit &&
5466 (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
5467 csv, multiline ? FBMrf_MULTILINE : 0)) )
5476 dstr = newSVpvn_flags(s, m-s,
5477 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5480 /* The rx->minlen is in characters but we want to step
5481 * s ahead by bytes. */
5483 s = (char*)utf8_hop((U8*)m, len);
5485 s = m + len; /* Fake \n at the end */
5490 maxiters += slen * RX_NPARENS(rx);
5491 while (s < strend && --limit)
5495 rex_return = CALLREGEXEC(rx, (char*)s, (char*)strend, (char*)orig, 1 ,
5496 sv, NULL, SvSCREAM(sv) ? REXEC_SCREAM : 0);
5498 if (rex_return == 0)
5500 TAINT_IF(RX_MATCH_TAINTED(rx));
5501 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
5504 orig = RX_SUBBEG(rx);
5506 strend = s + (strend - m);
5508 m = RX_OFFS(rx)[0].start + orig;
5517 dstr = newSVpvn_flags(s, m-s,
5518 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5521 if (RX_NPARENS(rx)) {
5523 for (i = 1; i <= (I32)RX_NPARENS(rx); i++) {
5524 s = RX_OFFS(rx)[i].start + orig;
5525 m = RX_OFFS(rx)[i].end + orig;
5527 /* japhy (07/27/01) -- the (m && s) test doesn't catch
5528 parens that didn't match -- they should be set to
5529 undef, not the empty string */
5537 if (m >= orig && s >= orig) {
5538 dstr = newSVpvn_flags(s, m-s,
5539 (do_utf8 ? SVf_UTF8 : 0)
5543 dstr = &PL_sv_undef; /* undef, not "" */
5549 s = RX_OFFS(rx)[0].end + orig;
5553 if (!gimme_scalar) {
5554 iters = (SP - PL_stack_base) - base;
5556 if (iters > maxiters)
5557 DIE(aTHX_ "Split loop");
5559 /* keep field after final delim? */
5560 if (s < strend || (iters && origlimit)) {
5561 if (!gimme_scalar) {
5562 const STRLEN l = strend - s;
5563 dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5568 else if (!origlimit) {
5570 iters -= trailing_empty;
5572 while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
5573 if (TOPs && !make_mortal)
5575 *SP-- = &PL_sv_undef;
5582 LEAVE_SCOPE(oldsave); /* may undo an earlier SWITCHSTACK */
5586 if (SvSMAGICAL(ary)) {
5588 mg_set(MUTABLE_SV(ary));
5591 if (gimme == G_ARRAY) {
5593 Copy(AvARRAY(ary), SP + 1, iters, SV*);
5600 ENTER_with_name("call_PUSH");
5601 call_method("PUSH",G_SCALAR|G_DISCARD);
5602 LEAVE_with_name("call_PUSH");
5604 if (gimme == G_ARRAY) {
5606 /* EXTEND should not be needed - we just popped them */
5608 for (i=0; i < iters; i++) {
5609 SV **svp = av_fetch(ary, i, FALSE);
5610 PUSHs((svp) ? *svp : &PL_sv_undef);
5617 if (gimme == G_ARRAY)
5629 SV *const sv = PAD_SVl(PL_op->op_targ);
5631 if (SvPADSTALE(sv)) {
5634 RETURNOP(cLOGOP->op_other);
5636 RETURNOP(cLOGOP->op_next);
5646 if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
5647 || SvTYPE(retsv) == SVt_PVCV) {
5648 retsv = refto(retsv);
5655 PP(unimplemented_op)
5658 const Optype op_type = PL_op->op_type;
5659 /* Using OP_NAME() isn't going to be helpful here. Firstly, it doesn't cope
5660 with out of range op numbers - it only "special" cases op_custom.
5661 Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
5662 if we get here for a custom op then that means that the custom op didn't
5663 have an implementation. Given that OP_NAME() looks up the custom op
5664 by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
5665 registers &PL_unimplemented_op as the address of their custom op.
5666 NULL doesn't generate a useful error message. "custom" does. */
5667 const char *const name = op_type >= OP_max
5668 ? "[out of range]" : PL_op_name[PL_op->op_type];
5669 if(OP_IS_SOCKET(op_type))
5670 DIE(aTHX_ PL_no_sock_func, name);
5671 DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
5678 HV * const hv = (HV*)POPs;
5680 if (SvTYPE(hv) != SVt_PVHV) { XPUSHs(&PL_sv_no); RETURN; }
5682 if (SvRMAGICAL(hv)) {
5683 MAGIC * const mg = mg_find((SV*)hv, PERL_MAGIC_tied);
5685 XPUSHs(magic_scalarpack(hv, mg));
5690 XPUSHs(boolSV(HvUSEDKEYS(hv) != 0));
5694 /* For sorting out arguments passed to a &CORE:: subroutine */
5698 int opnum = SvIOK(cSVOP_sv) ? (int)SvUV(cSVOP_sv) : 0;
5699 int defgv = PL_opargs[opnum] & OA_DEFGV, whicharg = 0;
5700 AV * const at_ = GvAV(PL_defgv);
5701 SV **svp = AvARRAY(at_);
5702 I32 minargs = 0, maxargs = 0, numargs = AvFILLp(at_)+1;
5703 I32 oa = opnum ? PL_opargs[opnum] >> OASHIFT : 0;
5704 bool seen_question = 0;
5705 const char *err = NULL;
5706 const bool pushmark = PL_op->op_private & OPpCOREARGS_PUSHMARK;
5708 /* Count how many args there are first, to get some idea how far to
5709 extend the stack. */
5711 if ((oa & 7) == OA_LIST) { maxargs = I32_MAX; break; }
5713 if (oa & OA_OPTIONAL) seen_question = 1;
5714 if (!seen_question) minargs++;
5718 if(numargs < minargs) err = "Not enough";
5719 else if(numargs > maxargs) err = "Too many";
5721 /* diag_listed_as: Too many arguments for %s */
5723 "%s arguments for %s", err,
5724 opnum ? OP_DESC(PL_op->op_next) : SvPV_nolen_const(cSVOP_sv)
5727 /* Reset the stack pointer. Without this, we end up returning our own
5728 arguments in list context, in addition to the values we are supposed
5729 to return. nextstate usually does this on sub entry, but we need
5730 to run the next op with the caller's hints, so we cannot have a
5732 SP = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
5734 if(!maxargs) RETURN;
5736 /* We do this here, rather than with a separate pushmark op, as it has
5737 to come in between two things this function does (stack reset and
5738 arg pushing). This seems the easiest way to do it. */
5741 (void)Perl_pp_pushmark(aTHX);
5744 EXTEND(SP, maxargs == I32_MAX ? numargs : maxargs);
5745 PUTBACK; /* The code below can die in various places. */
5747 oa = PL_opargs[opnum] >> OASHIFT;
5748 for (; oa&&(numargs||!pushmark); (void)(numargs&&(++svp,--numargs))) {
5752 if (!numargs && defgv && whicharg == minargs + 1) {
5753 PERL_SI * const oldsi = PL_curstackinfo;
5754 I32 const oldcxix = oldsi->si_cxix;
5756 if (oldcxix) oldsi->si_cxix--;
5757 else PL_curstackinfo = oldsi->si_prev;
5758 caller = find_runcv(NULL);
5759 PL_curstackinfo = oldsi;
5760 oldsi->si_cxix = oldcxix;
5761 PUSHs(find_rundefsv2(
5762 caller,cxstack[cxstack_ix].blk_oldcop->cop_seq
5765 else PUSHs(numargs ? svp && *svp ? *svp : &PL_sv_undef : NULL);
5769 PUSHs(svp && *svp ? *svp : &PL_sv_undef);
5774 if (!svp || !*svp || !SvROK(*svp)
5775 || SvTYPE(SvRV(*svp)) != SVt_PVHV)
5777 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
5778 "Type of arg %d to &CORE::%s must be hash reference",
5779 whicharg, OP_DESC(PL_op->op_next)
5784 if (!numargs) PUSHs(NULL);
5785 else if(svp && *svp && SvROK(*svp) && isGV_with_GP(SvRV(*svp)))
5786 /* no magic here, as the prototype will have added an extra
5787 refgen and we just want what was there before that */
5790 const bool constr = PL_op->op_private & whicharg;
5792 svp && *svp ? *svp : &PL_sv_undef,
5793 constr, CopHINTS_get(PL_curcop) & HINT_STRICT_REFS,
5800 const bool wantscalar =
5801 PL_op->op_private & OPpCOREARGS_SCALARMOD;
5802 if (!svp || !*svp || !SvROK(*svp)
5803 /* We have to permit globrefs even for the \$ proto, as
5804 *foo is indistinguishable from ${\*foo}, and the proto-
5805 type permits the latter. */
5806 || SvTYPE(SvRV(*svp)) > (
5807 wantscalar ? SVt_PVLV
5808 : opnum == OP_LOCK ? SVt_PVCV
5813 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
5814 "Type of arg %d to &CORE::%s must be %s",
5815 whicharg, OP_DESC(PL_op->op_next),
5817 ? "scalar reference"
5819 ? "reference to one of [$@%&*]"
5820 : "reference to one of [$@%*]"
5826 DIE(aTHX_ "panic: unknown OA_*: %x", (unsigned)(oa&7));
5838 if (PL_op->op_private & OPpOFFBYONE) {
5839 PERL_SI * const oldsi = PL_curstackinfo;
5840 I32 const oldcxix = oldsi->si_cxix;
5841 if (oldcxix) oldsi->si_cxix--;
5842 else PL_curstackinfo = oldsi->si_prev;
5843 cv = find_runcv(NULL);
5844 PL_curstackinfo = oldsi;
5845 oldsi->si_cxix = oldcxix;
5847 else cv = find_runcv(NULL);
5848 XPUSHs(CvUNIQUE(cv) ? &PL_sv_undef : sv_2mortal(newRV((SV *)cv)));
5855 * c-indentation-style: bsd
5857 * indent-tabs-mode: t
5860 * ex: set ts=8 sts=4 sw=4 noet: