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.
32 #include "regcharclass.h"
34 /* XXX I can't imagine anyone who doesn't have this actually _needs_
35 it, since pid_t is an integral type.
38 #ifdef NEED_GETPID_PROTO
39 extern Pid_t getpid (void);
43 * Some BSDs and Cygwin default to POSIX math instead of IEEE.
44 * This switches them over to IEEE.
46 #if defined(LIBM_LIB_VERSION)
47 _LIB_VERSION_TYPE _LIB_VERSION = _IEEE_;
50 static const STRLEN small_mu_len = sizeof(GREEK_SMALL_LETTER_MU_UTF8) - 1;
51 static const STRLEN capital_iota_len = sizeof(GREEK_CAPITAL_LETTER_IOTA_UTF8) - 1;
53 /* variations on pp_null */
59 if (GIMME_V == G_SCALAR)
70 assert(SvTYPE(TARG) == SVt_PVAV);
71 if (UNLIKELY( PL_op->op_private & OPpLVAL_INTRO ))
72 if (LIKELY( !(PL_op->op_private & OPpPAD_STATE) ))
73 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
75 if (PL_op->op_flags & OPf_REF) {
78 } else if (PL_op->op_private & OPpMAYBE_LVSUB) {
79 const I32 flags = is_lvalue_sub();
80 if (flags && !(flags & OPpENTERSUB_INARGS)) {
81 if (GIMME == G_SCALAR)
82 /* diag_listed_as: Can't return %s to lvalue scalar context */
83 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
89 if (gimme == G_ARRAY) {
90 /* XXX see also S_pushav in pp_hot.c */
91 const Size_t maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
93 if (SvMAGICAL(TARG)) {
95 for (i=0; i < maxarg; i++) {
96 SV * const * const svp = av_fetch(MUTABLE_AV(TARG), i, FALSE);
97 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
102 for (i=0; i < (PADOFFSET)maxarg; i++) {
103 SV * const sv = AvARRAY((const AV *)TARG)[i];
104 SP[i+1] = sv ? sv : &PL_sv_undef;
109 else if (gimme == G_SCALAR) {
110 SV* const sv = sv_newmortal();
111 const SSize_t maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
112 sv_setiv(sv, maxarg);
123 assert(SvTYPE(TARG) == SVt_PVHV);
125 if (UNLIKELY( PL_op->op_private & OPpLVAL_INTRO ))
126 if (LIKELY( !(PL_op->op_private & OPpPAD_STATE) ))
127 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
128 if (PL_op->op_flags & OPf_REF)
130 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
131 const I32 flags = is_lvalue_sub();
132 if (flags && !(flags & OPpENTERSUB_INARGS)) {
133 if (GIMME == G_SCALAR)
134 /* diag_listed_as: Can't return %s to lvalue scalar context */
135 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
140 if (gimme == G_ARRAY) {
141 RETURNOP(Perl_do_kv(aTHX));
143 else if ((PL_op->op_private & OPpTRUEBOOL
144 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
145 && block_gimme() == G_VOID ))
146 && (!SvRMAGICAL(TARG) || !mg_find(TARG, PERL_MAGIC_tied)))
147 SETs(HvUSEDKEYS(TARG) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
148 else if (gimme == G_SCALAR) {
149 SV* const sv = Perl_hv_scalar(aTHX_ MUTABLE_HV(TARG));
158 assert(SvTYPE(TARG) == SVt_PVCV);
166 SvPADSTALE_off(TARG);
174 mg_find(PadlistNAMESARRAY(CvPADLIST(find_runcv(NULL)))[ARGTARG],
176 assert(SvTYPE(TARG) == SVt_PVCV);
179 if (CvISXSUB(mg->mg_obj)) { /* constant */
180 /* XXX Should we clone it here? */
181 /* If this changes to use SAVECLEARSV, we can move the SAVECLEARSV
182 to introcv and remove the SvPADSTALE_off. */
183 SAVEPADSVANDMORTALIZE(ARGTARG);
184 PAD_SVl(ARGTARG) = SvREFCNT_inc_simple_NN(mg->mg_obj);
187 if (CvROOT(mg->mg_obj)) {
188 assert(CvCLONE(mg->mg_obj));
189 assert(!CvCLONED(mg->mg_obj));
191 cv_clone_into((CV *)mg->mg_obj,(CV *)TARG);
192 SAVECLEARSV(PAD_SVl(ARGTARG));
199 static const char S_no_symref_sv[] =
200 "Can't use string (\"%" SVf32 "\"%s) as %s ref while \"strict refs\" in use";
202 /* In some cases this function inspects PL_op. If this function is called
203 for new op types, more bool parameters may need to be added in place of
206 When noinit is true, the absence of a gv will cause a retval of undef.
207 This is unrelated to the cv-to-gv assignment case.
211 S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict,
215 if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv);
218 sv = amagic_deref_call(sv, to_gv_amg);
222 if (SvTYPE(sv) == SVt_PVIO) {
223 GV * const gv = MUTABLE_GV(sv_newmortal());
224 gv_init(gv, 0, "__ANONIO__", 10, 0);
225 GvIOp(gv) = MUTABLE_IO(sv);
226 SvREFCNT_inc_void_NN(sv);
229 else if (!isGV_with_GP(sv)) {
230 Perl_die(aTHX_ "Not a GLOB reference");
234 if (!isGV_with_GP(sv)) {
236 /* If this is a 'my' scalar and flag is set then vivify
239 if (vivify_sv && sv != &PL_sv_undef) {
242 Perl_croak_no_modify();
243 if (cUNOP->op_targ) {
244 SV * const namesv = PAD_SV(cUNOP->op_targ);
245 HV *stash = CopSTASH(PL_curcop);
246 if (SvTYPE(stash) != SVt_PVHV) stash = NULL;
247 gv = MUTABLE_GV(newSV(0));
248 gv_init_sv(gv, stash, namesv, 0);
251 const char * const name = CopSTASHPV(PL_curcop);
252 gv = newGVgen_flags(name,
253 HvNAMEUTF8(CopSTASH(PL_curcop)) ? SVf_UTF8 : 0 );
255 prepare_SV_for_RV(sv);
256 SvRV_set(sv, MUTABLE_SV(gv));
261 if (PL_op->op_flags & OPf_REF || strict) {
262 Perl_die(aTHX_ PL_no_usym, "a symbol");
264 if (ckWARN(WARN_UNINITIALIZED))
270 if (!(sv = MUTABLE_SV(gv_fetchsv_nomg(
271 sv, GV_ADDMG, SVt_PVGV
280 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""),
284 if ((PL_op->op_private & (OPpLVAL_INTRO|OPpDONT_INIT_GV))
285 == OPpDONT_INIT_GV) {
286 /* We are the target of a coderef assignment. Return
287 the scalar unchanged, and let pp_sasssign deal with
291 sv = MUTABLE_SV(gv_fetchsv_nomg(sv, GV_ADD, SVt_PVGV));
293 /* FAKE globs in the symbol table cause weird bugs (#77810) */
297 if (SvFAKE(sv) && !(PL_op->op_private & OPpALLOW_FAKE)) {
298 SV *newsv = sv_newmortal();
299 sv_setsv_flags(newsv, sv, 0);
311 sv, PL_op->op_private & OPpDEREF,
312 PL_op->op_private & HINT_STRICT_REFS,
313 ((PL_op->op_flags & OPf_SPECIAL) && !(PL_op->op_flags & OPf_MOD))
314 || PL_op->op_type == OP_READLINE
316 if (PL_op->op_private & OPpLVAL_INTRO)
317 save_gp(MUTABLE_GV(sv), !(PL_op->op_flags & OPf_SPECIAL));
322 /* Helper function for pp_rv2sv and pp_rv2av */
324 Perl_softref2xv(pTHX_ SV *const sv, const char *const what,
325 const svtype type, SV ***spp)
330 PERL_ARGS_ASSERT_SOFTREF2XV;
332 if (PL_op->op_private & HINT_STRICT_REFS) {
334 Perl_die(aTHX_ S_no_symref_sv, sv,
335 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""), what);
337 Perl_die(aTHX_ PL_no_usym, what);
341 PL_op->op_flags & OPf_REF
343 Perl_die(aTHX_ PL_no_usym, what);
344 if (ckWARN(WARN_UNINITIALIZED))
346 if (type != SVt_PV && GIMME_V == G_ARRAY) {
350 **spp = &PL_sv_undef;
353 if ((PL_op->op_flags & OPf_SPECIAL) &&
354 !(PL_op->op_flags & OPf_MOD))
356 if (!(gv = gv_fetchsv_nomg(sv, GV_ADDMG, type)))
358 **spp = &PL_sv_undef;
363 gv = gv_fetchsv_nomg(sv, GV_ADD, type);
376 sv = amagic_deref_call(sv, to_sv_amg);
380 switch (SvTYPE(sv)) {
386 DIE(aTHX_ "Not a SCALAR reference");
393 if (!isGV_with_GP(gv)) {
394 gv = Perl_softref2xv(aTHX_ sv, "a SCALAR", SVt_PV, &sp);
400 if (PL_op->op_flags & OPf_MOD) {
401 if (PL_op->op_private & OPpLVAL_INTRO) {
402 if (cUNOP->op_first->op_type == OP_NULL)
403 sv = save_scalar(MUTABLE_GV(TOPs));
405 sv = save_scalar(gv);
407 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
409 else if (PL_op->op_private & OPpDEREF)
410 sv = vivify_ref(sv, PL_op->op_private & OPpDEREF);
419 AV * const av = MUTABLE_AV(TOPs);
420 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
422 SV ** const sv = Perl_av_arylen_p(aTHX_ MUTABLE_AV(av));
424 *sv = newSV_type(SVt_PVMG);
425 sv_magic(*sv, MUTABLE_SV(av), PERL_MAGIC_arylen, NULL, 0);
429 SETs(sv_2mortal(newSViv(AvFILL(MUTABLE_AV(av)))));
438 if (PL_op->op_flags & OPf_MOD || LVRET) {
439 SV * const ret = sv_2mortal(newSV_type(SVt_PVLV));/* Not TARG RT#67838 */
440 sv_magic(ret, NULL, PERL_MAGIC_pos, NULL, 0);
442 LvTARG(ret) = SvREFCNT_inc_simple(sv);
443 PUSHs(ret); /* no SvSETMAGIC */
447 const MAGIC * const mg = mg_find_mglob(sv);
448 if (mg && mg->mg_len != -1) {
450 STRLEN i = mg->mg_len;
451 if (mg->mg_flags & MGf_BYTES && DO_UTF8(sv))
452 i = sv_pos_b2u_flags(sv, i, SV_GMAGIC|SV_CONST_RETURN);
465 const I32 flags = (PL_op->op_flags & OPf_SPECIAL)
467 : ((PL_op->op_private & (OPpLVAL_INTRO|OPpMAY_RETURN_CONSTANT))
468 == OPpMAY_RETURN_CONSTANT)
471 /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
472 /* (But not in defined().) */
474 CV *cv = sv_2cv(TOPs, &stash_unused, &gv, flags);
476 else if ((flags == (GV_ADD|GV_NOEXPAND)) && gv && SvROK(gv)) {
480 cv = MUTABLE_CV(&PL_sv_undef);
481 SETs(MUTABLE_SV(cv));
491 SV *ret = &PL_sv_undef;
493 if (SvGMAGICAL(TOPs)) SETs(sv_mortalcopy(TOPs));
494 if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
495 const char * s = SvPVX_const(TOPs);
496 if (strnEQ(s, "CORE::", 6)) {
497 const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
499 DIE(aTHX_ "Can't find an opnumber for \"%"UTF8f"\"",
500 UTF8fARG(SvFLAGS(TOPs) & SVf_UTF8, SvCUR(TOPs)-6, s+6));
502 SV * const sv = core_prototype(NULL, s + 6, code, NULL);
508 cv = sv_2cv(TOPs, &stash, &gv, 0);
510 ret = newSVpvn_flags(
511 CvPROTO(cv), CvPROTOLEN(cv), SVs_TEMP | SvUTF8(cv)
521 CV *cv = MUTABLE_CV(PAD_SV(PL_op->op_targ));
523 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
525 PUSHs(MUTABLE_SV(cv));
539 if (GIMME != G_ARRAY) {
543 *MARK = &PL_sv_undef;
544 *MARK = refto(*MARK);
548 EXTEND_MORTAL(SP - MARK);
550 *MARK = refto(*MARK);
555 S_refto(pTHX_ SV *sv)
560 PERL_ARGS_ASSERT_REFTO;
562 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
565 if (!(sv = LvTARG(sv)))
568 SvREFCNT_inc_void_NN(sv);
570 else if (SvTYPE(sv) == SVt_PVAV) {
571 if (!AvREAL((const AV *)sv) && AvREIFY((const AV *)sv))
572 av_reify(MUTABLE_AV(sv));
574 SvREFCNT_inc_void_NN(sv);
576 else if (SvPADTMP(sv)) {
577 assert(!IS_PADGV(sv));
582 SvREFCNT_inc_void_NN(sv);
585 sv_upgrade(rv, SVt_IV);
594 SV * const sv = POPs;
600 (void)sv_ref(TARG,SvRV(sv),TRUE);
613 stash = CopSTASH(PL_curcop);
614 if (SvTYPE(stash) != SVt_PVHV)
615 Perl_croak(aTHX_ "Attempt to bless into a freed package");
618 SV * const ssv = POPs;
622 if (!ssv) goto curstash;
625 if (!SvAMAGIC(ssv)) {
627 Perl_croak(aTHX_ "Attempt to bless into a reference");
629 /* SvAMAGIC is on here, but it only means potentially overloaded,
630 so after stringification: */
631 ptr = SvPV_nomg_const(ssv,len);
632 /* We need to check the flag again: */
633 if (!SvAMAGIC(ssv)) goto frog;
635 else ptr = SvPV_nomg_const(ssv,len);
637 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
638 "Explicit blessing to '' (assuming package main)");
639 stash = gv_stashpvn(ptr, len, GV_ADD|SvUTF8(ssv));
642 (void)sv_bless(TOPs, stash);
652 const char * const elem = SvPV_const(sv, len);
653 GV * const gv = MUTABLE_GV(POPs);
658 /* elem will always be NUL terminated. */
659 const char * const second_letter = elem + 1;
662 if (len == 5 && strEQ(second_letter, "RRAY"))
664 tmpRef = MUTABLE_SV(GvAV(gv));
665 if (tmpRef && !AvREAL((const AV *)tmpRef)
666 && AvREIFY((const AV *)tmpRef))
667 av_reify(MUTABLE_AV(tmpRef));
671 if (len == 4 && strEQ(second_letter, "ODE"))
672 tmpRef = MUTABLE_SV(GvCVu(gv));
675 if (len == 10 && strEQ(second_letter, "ILEHANDLE")) {
676 /* finally deprecated in 5.8.0 */
677 deprecate("*glob{FILEHANDLE}");
678 tmpRef = MUTABLE_SV(GvIOp(gv));
681 if (len == 6 && strEQ(second_letter, "ORMAT"))
682 tmpRef = MUTABLE_SV(GvFORM(gv));
685 if (len == 4 && strEQ(second_letter, "LOB"))
686 tmpRef = MUTABLE_SV(gv);
689 if (len == 4 && strEQ(second_letter, "ASH"))
690 tmpRef = MUTABLE_SV(GvHV(gv));
693 if (*second_letter == 'O' && !elem[2] && len == 2)
694 tmpRef = MUTABLE_SV(GvIOp(gv));
697 if (len == 4 && strEQ(second_letter, "AME"))
698 sv = newSVhek(GvNAME_HEK(gv));
701 if (len == 7 && strEQ(second_letter, "ACKAGE")) {
702 const HV * const stash = GvSTASH(gv);
703 const HEK * const hek = stash ? HvNAME_HEK(stash) : NULL;
704 sv = hek ? newSVhek(hek) : newSVpvs("__ANON__");
708 if (len == 6 && strEQ(second_letter, "CALAR"))
723 /* Pattern matching */
731 if (len == 0 || len > I32_MAX || !SvPOK(sv) || SvUTF8(sv) || SvVALID(sv)) {
732 /* Historically, study was skipped in these cases. */
736 /* Make study a no-op. It's no longer useful and its existence
737 complicates matters elsewhere. */
746 if (PL_op->op_flags & OPf_STACKED)
748 else if (PL_op->op_private & OPpTARGET_MY)
754 if(PL_op->op_type == OP_TRANSR) {
756 const char * const pv = SvPV(sv,len);
757 SV * const newsv = newSVpvn_flags(pv, len, SVs_TEMP|SvUTF8(sv));
762 TARG = sv_newmortal();
768 /* Lvalue operators. */
771 S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
777 PERL_ARGS_ASSERT_DO_CHOMP;
779 if (chomping && (RsSNARF(PL_rs) || RsRECORD(PL_rs)))
781 if (SvTYPE(sv) == SVt_PVAV) {
783 AV *const av = MUTABLE_AV(sv);
784 const I32 max = AvFILL(av);
786 for (i = 0; i <= max; i++) {
787 sv = MUTABLE_SV(av_fetch(av, i, FALSE));
788 if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
789 do_chomp(retval, sv, chomping);
793 else if (SvTYPE(sv) == SVt_PVHV) {
794 HV* const hv = MUTABLE_HV(sv);
796 (void)hv_iterinit(hv);
797 while ((entry = hv_iternext(hv)))
798 do_chomp(retval, hv_iterval(hv,entry), chomping);
801 else if (SvREADONLY(sv)) {
802 Perl_croak_no_modify();
804 else if (SvIsCOW(sv)) {
805 sv_force_normal_flags(sv, 0);
810 /* XXX, here sv is utf8-ized as a side-effect!
811 If encoding.pm is used properly, almost string-generating
812 operations, including literal strings, chr(), input data, etc.
813 should have been utf8-ized already, right?
815 sv_recode_to_utf8(sv, PL_encoding);
821 char *temp_buffer = NULL;
830 while (len && s[-1] == '\n') {
837 STRLEN rslen, rs_charlen;
838 const char *rsptr = SvPV_const(PL_rs, rslen);
840 rs_charlen = SvUTF8(PL_rs)
844 if (SvUTF8(PL_rs) != SvUTF8(sv)) {
845 /* Assumption is that rs is shorter than the scalar. */
847 /* RS is utf8, scalar is 8 bit. */
849 temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
852 /* Cannot downgrade, therefore cannot possibly match
854 assert (temp_buffer == rsptr);
860 else if (PL_encoding) {
861 /* RS is 8 bit, encoding.pm is used.
862 * Do not recode PL_rs as a side-effect. */
863 svrecode = newSVpvn(rsptr, rslen);
864 sv_recode_to_utf8(svrecode, PL_encoding);
865 rsptr = SvPV_const(svrecode, rslen);
866 rs_charlen = sv_len_utf8(svrecode);
869 /* RS is 8 bit, scalar is utf8. */
870 temp_buffer = (char*)bytes_to_utf8((U8*)rsptr, &rslen);
884 if (memNE(s, rsptr, rslen))
886 SvIVX(retval) += rs_charlen;
889 s = SvPV_force_nomg_nolen(sv);
897 SvREFCNT_dec(svrecode);
899 Safefree(temp_buffer);
901 if (len && !SvPOK(sv))
902 s = SvPV_force_nomg(sv, len);
905 char * const send = s + len;
906 char * const start = s;
908 while (s > start && UTF8_IS_CONTINUATION(*s))
910 if (is_utf8_string((U8*)s, send - s)) {
911 sv_setpvn(retval, s, send - s);
913 SvCUR_set(sv, s - start);
919 sv_setpvs(retval, "");
923 sv_setpvn(retval, s, 1);
930 sv_setpvs(retval, "");
938 const bool chomping = PL_op->op_type == OP_SCHOMP;
942 do_chomp(TARG, TOPs, chomping);
949 dVAR; dSP; dMARK; dTARGET; dORIGMARK;
950 const bool chomping = PL_op->op_type == OP_CHOMP;
955 do_chomp(TARG, *++MARK, chomping);
966 if (!PL_op->op_private) {
975 SV_CHECK_THINKFIRST_COW_DROP(sv);
977 switch (SvTYPE(sv)) {
981 av_undef(MUTABLE_AV(sv));
984 hv_undef(MUTABLE_HV(sv));
987 if (cv_const_sv((const CV *)sv))
988 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
989 "Constant subroutine %"SVf" undefined",
990 SVfARG(CvANON((const CV *)sv)
991 ? newSVpvs_flags("(anonymous)", SVs_TEMP)
992 : sv_2mortal(newSVhek(
994 ? CvNAME_HEK((CV *)sv)
995 : GvENAME_HEK(CvGV((const CV *)sv))
1001 /* let user-undef'd sub keep its identity */
1002 GV* const gv = CvGV((const CV *)sv);
1003 HEK * const hek = CvNAME_HEK((CV *)sv);
1004 if (hek) share_hek_hek(hek);
1005 cv_undef(MUTABLE_CV(sv));
1006 if (gv) CvGV_set(MUTABLE_CV(sv), gv);
1008 SvANY((CV *)sv)->xcv_gv_u.xcv_hek = hek;
1014 assert(isGV_with_GP(sv));
1015 assert(!SvFAKE(sv));
1020 /* undef *Pkg::meth_name ... */
1022 = GvCVu((const GV *)sv) && (stash = GvSTASH((const GV *)sv))
1023 && HvENAME_get(stash);
1025 if((stash = GvHV((const GV *)sv))) {
1026 if(HvENAME_get(stash))
1027 SvREFCNT_inc_simple_void_NN(sv_2mortal((SV *)stash));
1031 SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
1032 gp_free(MUTABLE_GV(sv));
1034 GvGP_set(sv, gp_ref(gp));
1035 #ifndef PERL_DONT_CREATE_GVSV
1036 GvSV(sv) = newSV(0);
1038 GvLINE(sv) = CopLINE(PL_curcop);
1039 GvEGV(sv) = MUTABLE_GV(sv);
1043 mro_package_moved(NULL, stash, (const GV *)sv, 0);
1045 /* undef *Foo::ISA */
1046 if( strEQ(GvNAME((const GV *)sv), "ISA")
1047 && (stash = GvSTASH((const GV *)sv))
1048 && (method_changed || HvENAME(stash)) )
1049 mro_isa_changed_in(stash);
1050 else if(method_changed)
1051 mro_method_changed_in(
1052 GvSTASH((const GV *)sv)
1058 if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) {
1074 PL_op->op_type == OP_POSTINC || PL_op->op_type == OP_I_POSTINC;
1075 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
1076 Perl_croak_no_modify();
1078 TARG = sv_newmortal();
1079 sv_setsv(TARG, TOPs);
1080 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1081 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
1083 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
1084 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1088 else sv_dec_nomg(TOPs);
1090 /* special case for undef: see thread at 2003-03/msg00536.html in archive */
1091 if (inc && !SvOK(TARG))
1097 /* Ordinary operators. */
1101 dVAR; dSP; dATARGET; SV *svl, *svr;
1102 #ifdef PERL_PRESERVE_IVUV
1105 tryAMAGICbin_MG(pow_amg, AMGf_assign|AMGf_numeric);
1108 #ifdef PERL_PRESERVE_IVUV
1109 /* For integer to integer power, we do the calculation by hand wherever
1110 we're sure it is safe; otherwise we call pow() and try to convert to
1111 integer afterwards. */
1112 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1120 const IV iv = SvIVX(svr);
1124 goto float_it; /* Can't do negative powers this way. */
1128 baseuok = SvUOK(svl);
1130 baseuv = SvUVX(svl);
1132 const IV iv = SvIVX(svl);
1135 baseuok = TRUE; /* effectively it's a UV now */
1137 baseuv = -iv; /* abs, baseuok == false records sign */
1140 /* now we have integer ** positive integer. */
1143 /* foo & (foo - 1) is zero only for a power of 2. */
1144 if (!(baseuv & (baseuv - 1))) {
1145 /* We are raising power-of-2 to a positive integer.
1146 The logic here will work for any base (even non-integer
1147 bases) but it can be less accurate than
1148 pow (base,power) or exp (power * log (base)) when the
1149 intermediate values start to spill out of the mantissa.
1150 With powers of 2 we know this can't happen.
1151 And powers of 2 are the favourite thing for perl
1152 programmers to notice ** not doing what they mean. */
1154 NV base = baseuok ? baseuv : -(NV)baseuv;
1159 while (power >>= 1) {
1167 SvIV_please_nomg(svr);
1170 unsigned int highbit = 8 * sizeof(UV);
1171 unsigned int diff = 8 * sizeof(UV);
1172 while (diff >>= 1) {
1174 if (baseuv >> highbit) {
1178 /* we now have baseuv < 2 ** highbit */
1179 if (power * highbit <= 8 * sizeof(UV)) {
1180 /* result will definitely fit in UV, so use UV math
1181 on same algorithm as above */
1184 const bool odd_power = cBOOL(power & 1);
1188 while (power >>= 1) {
1195 if (baseuok || !odd_power)
1196 /* answer is positive */
1198 else if (result <= (UV)IV_MAX)
1199 /* answer negative, fits in IV */
1200 SETi( -(IV)result );
1201 else if (result == (UV)IV_MIN)
1202 /* 2's complement assumption: special case IV_MIN */
1205 /* answer negative, doesn't fit */
1206 SETn( -(NV)result );
1214 NV right = SvNV_nomg(svr);
1215 NV left = SvNV_nomg(svl);
1218 #if defined(USE_LONG_DOUBLE) && defined(HAS_AIX_POWL_NEG_BASE_BUG)
1220 We are building perl with long double support and are on an AIX OS
1221 afflicted with a powl() function that wrongly returns NaNQ for any
1222 negative base. This was reported to IBM as PMR #23047-379 on
1223 03/06/2006. The problem exists in at least the following versions
1224 of AIX and the libm fileset, and no doubt others as well:
1226 AIX 4.3.3-ML10 bos.adt.libm 4.3.3.50
1227 AIX 5.1.0-ML04 bos.adt.libm 5.1.0.29
1228 AIX 5.2.0 bos.adt.libm 5.2.0.85
1230 So, until IBM fixes powl(), we provide the following workaround to
1231 handle the problem ourselves. Our logic is as follows: for
1232 negative bases (left), we use fmod(right, 2) to check if the
1233 exponent is an odd or even integer:
1235 - if odd, powl(left, right) == -powl(-left, right)
1236 - if even, powl(left, right) == powl(-left, right)
1238 If the exponent is not an integer, the result is rightly NaNQ, so
1239 we just return that (as NV_NAN).
1243 NV mod2 = Perl_fmod( right, 2.0 );
1244 if (mod2 == 1.0 || mod2 == -1.0) { /* odd integer */
1245 SETn( -Perl_pow( -left, right) );
1246 } else if (mod2 == 0.0) { /* even integer */
1247 SETn( Perl_pow( -left, right) );
1248 } else { /* fractional power */
1252 SETn( Perl_pow( left, right) );
1255 SETn( Perl_pow( left, right) );
1256 #endif /* HAS_AIX_POWL_NEG_BASE_BUG */
1258 #ifdef PERL_PRESERVE_IVUV
1260 SvIV_please_nomg(svr);
1268 dVAR; dSP; dATARGET; SV *svl, *svr;
1269 tryAMAGICbin_MG(mult_amg, AMGf_assign|AMGf_numeric);
1272 #ifdef PERL_PRESERVE_IVUV
1273 if (SvIV_please_nomg(svr)) {
1274 /* Unless the left argument is integer in range we are going to have to
1275 use NV maths. Hence only attempt to coerce the right argument if
1276 we know the left is integer. */
1277 /* Left operand is defined, so is it IV? */
1278 if (SvIV_please_nomg(svl)) {
1279 bool auvok = SvUOK(svl);
1280 bool buvok = SvUOK(svr);
1281 const UV topmask = (~ (UV)0) << (4 * sizeof (UV));
1282 const UV botmask = ~((~ (UV)0) << (4 * sizeof (UV)));
1291 const IV aiv = SvIVX(svl);
1294 auvok = TRUE; /* effectively it's a UV now */
1296 alow = -aiv; /* abs, auvok == false records sign */
1302 const IV biv = SvIVX(svr);
1305 buvok = TRUE; /* effectively it's a UV now */
1307 blow = -biv; /* abs, buvok == false records sign */
1311 /* If this does sign extension on unsigned it's time for plan B */
1312 ahigh = alow >> (4 * sizeof (UV));
1314 bhigh = blow >> (4 * sizeof (UV));
1316 if (ahigh && bhigh) {
1318 /* eg 32 bit is at least 0x10000 * 0x10000 == 0x100000000
1319 which is overflow. Drop to NVs below. */
1320 } else if (!ahigh && !bhigh) {
1321 /* eg 32 bit is at most 0xFFFF * 0xFFFF == 0xFFFE0001
1322 so the unsigned multiply cannot overflow. */
1323 const UV product = alow * blow;
1324 if (auvok == buvok) {
1325 /* -ve * -ve or +ve * +ve gives a +ve result. */
1329 } else if (product <= (UV)IV_MIN) {
1330 /* 2s complement assumption that (UV)-IV_MIN is correct. */
1331 /* -ve result, which could overflow an IV */
1333 SETi( -(IV)product );
1335 } /* else drop to NVs below. */
1337 /* One operand is large, 1 small */
1340 /* swap the operands */
1342 bhigh = blow; /* bhigh now the temp var for the swap */
1346 /* now, ((ahigh * blow) << half_UV_len) + (alow * blow)
1347 multiplies can't overflow. shift can, add can, -ve can. */
1348 product_middle = ahigh * blow;
1349 if (!(product_middle & topmask)) {
1350 /* OK, (ahigh * blow) won't lose bits when we shift it. */
1352 product_middle <<= (4 * sizeof (UV));
1353 product_low = alow * blow;
1355 /* as for pp_add, UV + something mustn't get smaller.
1356 IIRC ANSI mandates this wrapping *behaviour* for
1357 unsigned whatever the actual representation*/
1358 product_low += product_middle;
1359 if (product_low >= product_middle) {
1360 /* didn't overflow */
1361 if (auvok == buvok) {
1362 /* -ve * -ve or +ve * +ve gives a +ve result. */
1364 SETu( product_low );
1366 } else if (product_low <= (UV)IV_MIN) {
1367 /* 2s complement assumption again */
1368 /* -ve result, which could overflow an IV */
1370 SETi( -(IV)product_low );
1372 } /* else drop to NVs below. */
1374 } /* product_middle too large */
1375 } /* ahigh && bhigh */
1380 NV right = SvNV_nomg(svr);
1381 NV left = SvNV_nomg(svl);
1383 SETn( left * right );
1390 dVAR; dSP; dATARGET; SV *svl, *svr;
1391 tryAMAGICbin_MG(div_amg, AMGf_assign|AMGf_numeric);
1394 /* Only try to do UV divide first
1395 if ((SLOPPYDIVIDE is true) or
1396 (PERL_PRESERVE_IVUV is true and one or both SV is a UV too large
1398 The assumption is that it is better to use floating point divide
1399 whenever possible, only doing integer divide first if we can't be sure.
1400 If NV_PRESERVES_UV is true then we know at compile time that no UV
1401 can be too large to preserve, so don't need to compile the code to
1402 test the size of UVs. */
1405 # define PERL_TRY_UV_DIVIDE
1406 /* ensure that 20./5. == 4. */
1408 # ifdef PERL_PRESERVE_IVUV
1409 # ifndef NV_PRESERVES_UV
1410 # define PERL_TRY_UV_DIVIDE
1415 #ifdef PERL_TRY_UV_DIVIDE
1416 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1417 bool left_non_neg = SvUOK(svl);
1418 bool right_non_neg = SvUOK(svr);
1422 if (right_non_neg) {
1426 const IV biv = SvIVX(svr);
1429 right_non_neg = TRUE; /* effectively it's a UV now */
1435 /* historically undef()/0 gives a "Use of uninitialized value"
1436 warning before dieing, hence this test goes here.
1437 If it were immediately before the second SvIV_please, then
1438 DIE() would be invoked before left was even inspected, so
1439 no inspection would give no warning. */
1441 DIE(aTHX_ "Illegal division by zero");
1447 const IV aiv = SvIVX(svl);
1450 left_non_neg = TRUE; /* effectively it's a UV now */
1459 /* For sloppy divide we always attempt integer division. */
1461 /* Otherwise we only attempt it if either or both operands
1462 would not be preserved by an NV. If both fit in NVs
1463 we fall through to the NV divide code below. However,
1464 as left >= right to ensure integer result here, we know that
1465 we can skip the test on the right operand - right big
1466 enough not to be preserved can't get here unless left is
1469 && (left > ((UV)1 << NV_PRESERVES_UV_BITS))
1472 /* Integer division can't overflow, but it can be imprecise. */
1473 const UV result = left / right;
1474 if (result * right == left) {
1475 SP--; /* result is valid */
1476 if (left_non_neg == right_non_neg) {
1477 /* signs identical, result is positive. */
1481 /* 2s complement assumption */
1482 if (result <= (UV)IV_MIN)
1483 SETi( -(IV)result );
1485 /* It's exact but too negative for IV. */
1486 SETn( -(NV)result );
1489 } /* tried integer divide but it was not an integer result */
1490 } /* else (PERL_ABS(result) < 1.0) or (both UVs in range for NV) */
1491 } /* one operand wasn't SvIOK */
1492 #endif /* PERL_TRY_UV_DIVIDE */
1494 NV right = SvNV_nomg(svr);
1495 NV left = SvNV_nomg(svl);
1496 (void)POPs;(void)POPs;
1497 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1498 if (! Perl_isnan(right) && right == 0.0)
1502 DIE(aTHX_ "Illegal division by zero");
1503 PUSHn( left / right );
1510 dVAR; dSP; dATARGET;
1511 tryAMAGICbin_MG(modulo_amg, AMGf_assign|AMGf_numeric);
1515 bool left_neg = FALSE;
1516 bool right_neg = FALSE;
1517 bool use_double = FALSE;
1518 bool dright_valid = FALSE;
1521 SV * const svr = TOPs;
1522 SV * const svl = TOPm1s;
1523 if (SvIV_please_nomg(svr)) {
1524 right_neg = !SvUOK(svr);
1528 const IV biv = SvIVX(svr);
1531 right_neg = FALSE; /* effectively it's a UV now */
1538 dright = SvNV_nomg(svr);
1539 right_neg = dright < 0;
1542 if (dright < UV_MAX_P1) {
1543 right = U_V(dright);
1544 dright_valid = TRUE; /* In case we need to use double below. */
1550 /* At this point use_double is only true if right is out of range for
1551 a UV. In range NV has been rounded down to nearest UV and
1552 use_double false. */
1553 if (!use_double && SvIV_please_nomg(svl)) {
1554 left_neg = !SvUOK(svl);
1558 const IV aiv = SvIVX(svl);
1561 left_neg = FALSE; /* effectively it's a UV now */
1568 dleft = SvNV_nomg(svl);
1569 left_neg = dleft < 0;
1573 /* This should be exactly the 5.6 behaviour - if left and right are
1574 both in range for UV then use U_V() rather than floor. */
1576 if (dleft < UV_MAX_P1) {
1577 /* right was in range, so is dleft, so use UVs not double.
1581 /* left is out of range for UV, right was in range, so promote
1582 right (back) to double. */
1584 /* The +0.5 is used in 5.6 even though it is not strictly
1585 consistent with the implicit +0 floor in the U_V()
1586 inside the #if 1. */
1587 dleft = Perl_floor(dleft + 0.5);
1590 dright = Perl_floor(dright + 0.5);
1601 DIE(aTHX_ "Illegal modulus zero");
1603 dans = Perl_fmod(dleft, dright);
1604 if ((left_neg != right_neg) && dans)
1605 dans = dright - dans;
1608 sv_setnv(TARG, dans);
1614 DIE(aTHX_ "Illegal modulus zero");
1617 if ((left_neg != right_neg) && ans)
1620 /* XXX may warn: unary minus operator applied to unsigned type */
1621 /* could change -foo to be (~foo)+1 instead */
1622 if (ans <= ~((UV)IV_MAX)+1)
1623 sv_setiv(TARG, ~ans+1);
1625 sv_setnv(TARG, -(NV)ans);
1628 sv_setuv(TARG, ans);
1637 dVAR; dSP; dATARGET;
1641 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1642 /* TODO: think of some way of doing list-repeat overloading ??? */
1647 tryAMAGICbin_MG(repeat_amg, AMGf_assign);
1653 const UV uv = SvUV_nomg(sv);
1655 count = IV_MAX; /* The best we can do? */
1659 const IV iv = SvIV_nomg(sv);
1666 else if (SvNOKp(sv)) {
1667 const NV nv = SvNV_nomg(sv);
1674 count = SvIV_nomg(sv);
1676 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1678 static const char* const oom_list_extend = "Out of memory during list extend";
1679 const I32 items = SP - MARK;
1680 const I32 max = items * count;
1681 const U8 mod = PL_op->op_flags & OPf_MOD;
1683 MEM_WRAP_CHECK_1(max, SV*, oom_list_extend);
1684 /* Did the max computation overflow? */
1685 if (items > 0 && max > 0 && (max < items || max < count))
1686 Perl_croak(aTHX_ "%s", oom_list_extend);
1691 /* This code was intended to fix 20010809.028:
1694 for (($x =~ /./g) x 2) {
1695 print chop; # "abcdabcd" expected as output.
1698 * but that change (#11635) broke this code:
1700 $x = [("foo")x2]; # only one "foo" ended up in the anonlist.
1702 * I can't think of a better fix that doesn't introduce
1703 * an efficiency hit by copying the SVs. The stack isn't
1704 * refcounted, and mortalisation obviously doesn't
1705 * Do The Right Thing when the stack has more than
1706 * one pointer to the same mortal value.
1710 *SP = sv_2mortal(newSVsv(*SP));
1715 if (mod && SvPADTMP(*SP)) {
1716 assert(!IS_PADGV(*SP));
1717 *SP = sv_mortalcopy(*SP);
1725 repeatcpy((char*)(MARK + items), (char*)MARK,
1726 items * sizeof(const SV *), count - 1);
1729 else if (count <= 0)
1732 else { /* Note: mark already snarfed by pp_list */
1733 SV * const tmpstr = POPs;
1736 static const char* const oom_string_extend =
1737 "Out of memory during string extend";
1740 sv_setsv_nomg(TARG, tmpstr);
1741 SvPV_force_nomg(TARG, len);
1742 isutf = DO_UTF8(TARG);
1747 const STRLEN max = (UV)count * len;
1748 if (len > MEM_SIZE_MAX / count)
1749 Perl_croak(aTHX_ "%s", oom_string_extend);
1750 MEM_WRAP_CHECK_1(max, char, oom_string_extend);
1751 SvGROW(TARG, max + 1);
1752 repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
1753 SvCUR_set(TARG, SvCUR(TARG) * count);
1755 *SvEND(TARG) = '\0';
1758 (void)SvPOK_only_UTF8(TARG);
1760 (void)SvPOK_only(TARG);
1762 if (PL_op->op_private & OPpREPEAT_DOLIST) {
1763 /* The parser saw this as a list repeat, and there
1764 are probably several items on the stack. But we're
1765 in scalar context, and there's no pp_list to save us
1766 now. So drop the rest of the items -- robin@kitsite.com
1778 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
1779 tryAMAGICbin_MG(subtr_amg, AMGf_assign|AMGf_numeric);
1782 useleft = USE_LEFT(svl);
1783 #ifdef PERL_PRESERVE_IVUV
1784 /* See comments in pp_add (in pp_hot.c) about Overflow, and how
1785 "bad things" happen if you rely on signed integers wrapping. */
1786 if (SvIV_please_nomg(svr)) {
1787 /* Unless the left argument is integer in range we are going to have to
1788 use NV maths. Hence only attempt to coerce the right argument if
1789 we know the left is integer. */
1796 a_valid = auvok = 1;
1797 /* left operand is undef, treat as zero. */
1799 /* Left operand is defined, so is it IV? */
1800 if (SvIV_please_nomg(svl)) {
1801 if ((auvok = SvUOK(svl)))
1804 const IV aiv = SvIVX(svl);
1807 auvok = 1; /* Now acting as a sign flag. */
1808 } else { /* 2s complement assumption for IV_MIN */
1816 bool result_good = 0;
1819 bool buvok = SvUOK(svr);
1824 const IV biv = SvIVX(svr);
1831 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
1832 else "IV" now, independent of how it came in.
1833 if a, b represents positive, A, B negative, a maps to -A etc
1838 all UV maths. negate result if A negative.
1839 subtract if signs same, add if signs differ. */
1841 if (auvok ^ buvok) {
1850 /* Must get smaller */
1855 if (result <= buv) {
1856 /* result really should be -(auv-buv). as its negation
1857 of true value, need to swap our result flag */
1869 if (result <= (UV)IV_MIN)
1870 SETi( -(IV)result );
1872 /* result valid, but out of range for IV. */
1873 SETn( -(NV)result );
1877 } /* Overflow, drop through to NVs. */
1882 NV value = SvNV_nomg(svr);
1886 /* left operand is undef, treat as zero - value */
1890 SETn( SvNV_nomg(svl) - value );
1897 dVAR; dSP; dATARGET; SV *svl, *svr;
1898 tryAMAGICbin_MG(lshift_amg, AMGf_assign|AMGf_numeric);
1902 const IV shift = SvIV_nomg(svr);
1903 if (PL_op->op_private & HINT_INTEGER) {
1904 const IV i = SvIV_nomg(svl);
1908 const UV u = SvUV_nomg(svl);
1917 dVAR; dSP; dATARGET; SV *svl, *svr;
1918 tryAMAGICbin_MG(rshift_amg, AMGf_assign|AMGf_numeric);
1922 const IV shift = SvIV_nomg(svr);
1923 if (PL_op->op_private & HINT_INTEGER) {
1924 const IV i = SvIV_nomg(svl);
1928 const UV u = SvUV_nomg(svl);
1940 tryAMAGICbin_MG(lt_amg, AMGf_set|AMGf_numeric);
1944 (SvIOK_notUV(left) && SvIOK_notUV(right))
1945 ? (SvIVX(left) < SvIVX(right))
1946 : (do_ncmp(left, right) == -1)
1956 tryAMAGICbin_MG(gt_amg, AMGf_set|AMGf_numeric);
1960 (SvIOK_notUV(left) && SvIOK_notUV(right))
1961 ? (SvIVX(left) > SvIVX(right))
1962 : (do_ncmp(left, right) == 1)
1972 tryAMAGICbin_MG(le_amg, AMGf_set|AMGf_numeric);
1976 (SvIOK_notUV(left) && SvIOK_notUV(right))
1977 ? (SvIVX(left) <= SvIVX(right))
1978 : (do_ncmp(left, right) <= 0)
1988 tryAMAGICbin_MG(ge_amg, AMGf_set|AMGf_numeric);
1992 (SvIOK_notUV(left) && SvIOK_notUV(right))
1993 ? (SvIVX(left) >= SvIVX(right))
1994 : ( (do_ncmp(left, right) & 2) == 0)
2004 tryAMAGICbin_MG(ne_amg, AMGf_set|AMGf_numeric);
2008 (SvIOK_notUV(left) && SvIOK_notUV(right))
2009 ? (SvIVX(left) != SvIVX(right))
2010 : (do_ncmp(left, right) != 0)
2015 /* compare left and right SVs. Returns:
2019 * 2: left or right was a NaN
2022 Perl_do_ncmp(pTHX_ SV* const left, SV * const right)
2026 PERL_ARGS_ASSERT_DO_NCMP;
2027 #ifdef PERL_PRESERVE_IVUV
2028 /* Fortunately it seems NaN isn't IOK */
2029 if (SvIV_please_nomg(right) && SvIV_please_nomg(left)) {
2031 const IV leftiv = SvIVX(left);
2032 if (!SvUOK(right)) {
2033 /* ## IV <=> IV ## */
2034 const IV rightiv = SvIVX(right);
2035 return (leftiv > rightiv) - (leftiv < rightiv);
2037 /* ## IV <=> UV ## */
2039 /* As (b) is a UV, it's >=0, so it must be < */
2042 const UV rightuv = SvUVX(right);
2043 return ((UV)leftiv > rightuv) - ((UV)leftiv < rightuv);
2048 /* ## UV <=> UV ## */
2049 const UV leftuv = SvUVX(left);
2050 const UV rightuv = SvUVX(right);
2051 return (leftuv > rightuv) - (leftuv < rightuv);
2053 /* ## UV <=> IV ## */
2055 const IV rightiv = SvIVX(right);
2057 /* As (a) is a UV, it's >=0, so it cannot be < */
2060 const UV leftuv = SvUVX(left);
2061 return (leftuv > (UV)rightiv) - (leftuv < (UV)rightiv);
2064 assert(0); /* NOTREACHED */
2068 NV const rnv = SvNV_nomg(right);
2069 NV const lnv = SvNV_nomg(left);
2071 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2072 if (Perl_isnan(lnv) || Perl_isnan(rnv)) {
2075 return (lnv > rnv) - (lnv < rnv);
2094 tryAMAGICbin_MG(ncmp_amg, AMGf_numeric);
2097 value = do_ncmp(left, right);
2112 int amg_type = sle_amg;
2116 switch (PL_op->op_type) {
2135 tryAMAGICbin_MG(amg_type, AMGf_set);
2139 #ifdef USE_LC_COLLATE
2140 (IN_LC_RUNTIME(LC_COLLATE))
2141 ? sv_cmp_locale_flags(left, right, 0)
2144 sv_cmp_flags(left, right, 0);
2145 SETs(boolSV(cmp * multiplier < rhs));
2153 tryAMAGICbin_MG(seq_amg, AMGf_set);
2156 SETs(boolSV(sv_eq_flags(left, right, 0)));
2164 tryAMAGICbin_MG(sne_amg, AMGf_set);
2167 SETs(boolSV(!sv_eq_flags(left, right, 0)));
2175 tryAMAGICbin_MG(scmp_amg, 0);
2179 #ifdef USE_LC_COLLATE
2180 (IN_LC_RUNTIME(LC_COLLATE))
2181 ? sv_cmp_locale_flags(left, right, 0)
2184 sv_cmp_flags(left, right, 0);
2192 dVAR; dSP; dATARGET;
2193 tryAMAGICbin_MG(band_amg, AMGf_assign);
2196 if (SvNIOKp(left) || SvNIOKp(right)) {
2197 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2198 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2199 if (PL_op->op_private & HINT_INTEGER) {
2200 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2204 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2207 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2208 if (right_ro_nonnum) SvNIOK_off(right);
2211 do_vop(PL_op->op_type, TARG, left, right);
2220 dVAR; dSP; dATARGET;
2221 const int op_type = PL_op->op_type;
2223 tryAMAGICbin_MG((op_type == OP_BIT_OR ? bor_amg : bxor_amg), AMGf_assign);
2226 if (SvNIOKp(left) || SvNIOKp(right)) {
2227 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2228 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2229 if (PL_op->op_private & HINT_INTEGER) {
2230 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2231 const IV r = SvIV_nomg(right);
2232 const IV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2236 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2237 const UV r = SvUV_nomg(right);
2238 const UV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2241 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2242 if (right_ro_nonnum) SvNIOK_off(right);
2245 do_vop(op_type, TARG, left, right);
2252 PERL_STATIC_INLINE bool
2253 S_negate_string(pTHX)
2258 SV * const sv = TOPs;
2259 if (!SvPOKp(sv) || SvNIOK(sv) || (!SvPOK(sv) && SvNIOKp(sv)))
2261 s = SvPV_nomg_const(sv, len);
2262 if (isIDFIRST(*s)) {
2263 sv_setpvs(TARG, "-");
2266 else if (*s == '+' || (*s == '-' && !looks_like_number(sv))) {
2267 sv_setsv_nomg(TARG, sv);
2268 *SvPV_force_nomg(TARG, len) = *s == '-' ? '+' : '-';
2278 tryAMAGICun_MG(neg_amg, AMGf_numeric);
2279 if (S_negate_string(aTHX)) return NORMAL;
2281 SV * const sv = TOPs;
2284 /* It's publicly an integer */
2287 if (SvIVX(sv) == IV_MIN) {
2288 /* 2s complement assumption. */
2289 SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) ==
2293 else if (SvUVX(sv) <= IV_MAX) {
2298 else if (SvIVX(sv) != IV_MIN) {
2302 #ifdef PERL_PRESERVE_IVUV
2309 if (SvNIOKp(sv) && (SvNIOK(sv) || !SvPOK(sv)))
2310 SETn(-SvNV_nomg(sv));
2311 else if (SvPOKp(sv) && SvIV_please_nomg(sv))
2312 goto oops_its_an_int;
2314 SETn(-SvNV_nomg(sv));
2322 tryAMAGICun_MG(not_amg, AMGf_set);
2323 *PL_stack_sp = boolSV(!SvTRUE_nomg(*PL_stack_sp));
2330 tryAMAGICun_MG(compl_amg, AMGf_numeric);
2334 if (PL_op->op_private & HINT_INTEGER) {
2335 const IV i = ~SvIV_nomg(sv);
2339 const UV u = ~SvUV_nomg(sv);
2348 sv_copypv_nomg(TARG, sv);
2349 tmps = (U8*)SvPV_nomg(TARG, len);
2352 /* Calculate exact length, let's not estimate. */
2357 U8 * const send = tmps + len;
2358 U8 * const origtmps = tmps;
2359 const UV utf8flags = UTF8_ALLOW_ANYUV;
2361 while (tmps < send) {
2362 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2364 targlen += UNISKIP(~c);
2370 /* Now rewind strings and write them. */
2377 Newx(result, targlen + 1, U8);
2379 while (tmps < send) {
2380 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2382 p = uvchr_to_utf8_flags(p, ~c, UNICODE_ALLOW_ANY);
2385 sv_usepvn_flags(TARG, (char*)result, targlen,
2386 SV_HAS_TRAILING_NUL);
2393 Newx(result, nchar + 1, U8);
2395 while (tmps < send) {
2396 const U8 c = (U8)utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2401 sv_usepvn_flags(TARG, (char*)result, nchar, SV_HAS_TRAILING_NUL);
2410 for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
2413 for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
2418 for ( ; anum > 0; anum--, tmps++)
2426 /* integer versions of some of the above */
2430 dVAR; dSP; dATARGET;
2431 tryAMAGICbin_MG(mult_amg, AMGf_assign);
2434 SETi( left * right );
2442 dVAR; dSP; dATARGET;
2443 tryAMAGICbin_MG(div_amg, AMGf_assign);
2446 IV value = SvIV_nomg(right);
2448 DIE(aTHX_ "Illegal division by zero");
2449 num = SvIV_nomg(left);
2451 /* avoid FPE_INTOVF on some platforms when num is IV_MIN */
2455 value = num / value;
2461 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS)
2468 /* This is the vanilla old i_modulo. */
2469 dVAR; dSP; dATARGET;
2470 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2474 DIE(aTHX_ "Illegal modulus zero");
2475 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2479 SETi( left % right );
2484 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS)
2489 /* This is the i_modulo with the workaround for the _moddi3 bug
2490 * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
2491 * See below for pp_i_modulo. */
2492 dVAR; dSP; dATARGET;
2493 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2497 DIE(aTHX_ "Illegal modulus zero");
2498 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2502 SETi( left % PERL_ABS(right) );
2509 dVAR; dSP; dATARGET;
2510 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2514 DIE(aTHX_ "Illegal modulus zero");
2515 /* The assumption is to use hereafter the old vanilla version... */
2517 PL_ppaddr[OP_I_MODULO] =
2519 /* .. but if we have glibc, we might have a buggy _moddi3
2520 * (at least glicb 2.2.5 is known to have this bug), in other
2521 * words our integer modulus with negative quad as the second
2522 * argument might be broken. Test for this and re-patch the
2523 * opcode dispatch table if that is the case, remembering to
2524 * also apply the workaround so that this first round works
2525 * right, too. See [perl #9402] for more information. */
2529 /* Cannot do this check with inlined IV constants since
2530 * that seems to work correctly even with the buggy glibc. */
2532 /* Yikes, we have the bug.
2533 * Patch in the workaround version. */
2535 PL_ppaddr[OP_I_MODULO] =
2536 &Perl_pp_i_modulo_1;
2537 /* Make certain we work right this time, too. */
2538 right = PERL_ABS(right);
2541 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2545 SETi( left % right );
2553 dVAR; dSP; dATARGET;
2554 tryAMAGICbin_MG(add_amg, AMGf_assign);
2556 dPOPTOPiirl_ul_nomg;
2557 SETi( left + right );
2564 dVAR; dSP; dATARGET;
2565 tryAMAGICbin_MG(subtr_amg, AMGf_assign);
2567 dPOPTOPiirl_ul_nomg;
2568 SETi( left - right );
2576 tryAMAGICbin_MG(lt_amg, AMGf_set);
2579 SETs(boolSV(left < right));
2587 tryAMAGICbin_MG(gt_amg, AMGf_set);
2590 SETs(boolSV(left > right));
2598 tryAMAGICbin_MG(le_amg, AMGf_set);
2601 SETs(boolSV(left <= right));
2609 tryAMAGICbin_MG(ge_amg, AMGf_set);
2612 SETs(boolSV(left >= right));
2620 tryAMAGICbin_MG(eq_amg, AMGf_set);
2623 SETs(boolSV(left == right));
2631 tryAMAGICbin_MG(ne_amg, AMGf_set);
2634 SETs(boolSV(left != right));
2642 tryAMAGICbin_MG(ncmp_amg, 0);
2649 else if (left < right)
2661 tryAMAGICun_MG(neg_amg, 0);
2662 if (S_negate_string(aTHX)) return NORMAL;
2664 SV * const sv = TOPs;
2665 IV const i = SvIV_nomg(sv);
2671 /* High falutin' math. */
2676 tryAMAGICbin_MG(atan2_amg, 0);
2679 SETn(Perl_atan2(left, right));
2687 int amg_type = sin_amg;
2688 const char *neg_report = NULL;
2689 NV (*func)(NV) = Perl_sin;
2690 const int op_type = PL_op->op_type;
2707 amg_type = sqrt_amg;
2709 neg_report = "sqrt";
2714 tryAMAGICun_MG(amg_type, 0);
2716 SV * const arg = POPs;
2717 const NV value = SvNV_nomg(arg);
2719 if (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0)) {
2720 SET_NUMERIC_STANDARD();
2721 /* diag_listed_as: Can't take log of %g */
2722 DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
2725 XPUSHn(func(value));
2730 /* Support Configure command-line overrides for rand() functions.
2731 After 5.005, perhaps we should replace this by Configure support
2732 for drand48(), random(), or rand(). For 5.005, though, maintain
2733 compatibility by calling rand() but allow the user to override it.
2734 See INSTALL for details. --Andy Dougherty 15 July 1998
2736 /* Now it's after 5.005, and Configure supports drand48() and random(),
2737 in addition to rand(). So the overrides should not be needed any more.
2738 --Jarkko Hietaniemi 27 September 1998
2744 if (!PL_srand_called) {
2745 (void)seedDrand01((Rand_seed_t)seed());
2746 PL_srand_called = TRUE;
2756 SV * const sv = POPs;
2762 /* 1 of 2 things can be carried through SvNV, SP or TARG, SP was carried */
2770 sv_setnv_mg(TARG, value);
2781 if (MAXARG >= 1 && (TOPs || POPs)) {
2788 pv = SvPV(top, len);
2789 flags = grok_number(pv, len, &anum);
2791 if (!(flags & IS_NUMBER_IN_UV)) {
2792 Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
2793 "Integer overflow in srand");
2801 (void)seedDrand01((Rand_seed_t)anum);
2802 PL_srand_called = TRUE;
2806 /* Historically srand always returned true. We can avoid breaking
2808 sv_setpvs(TARG, "0 but true");
2817 tryAMAGICun_MG(int_amg, AMGf_numeric);
2819 SV * const sv = TOPs;
2820 const IV iv = SvIV_nomg(sv);
2821 /* XXX it's arguable that compiler casting to IV might be subtly
2822 different from modf (for numbers inside (IV_MIN,UV_MAX)) in which
2823 else preferring IV has introduced a subtle behaviour change bug. OTOH
2824 relying on floating point to be accurate is a bug. */
2829 else if (SvIOK(sv)) {
2831 SETu(SvUV_nomg(sv));
2836 const NV value = SvNV_nomg(sv);
2838 if (value < (NV)UV_MAX + 0.5) {
2841 SETn(Perl_floor(value));
2845 if (value > (NV)IV_MIN - 0.5) {
2848 SETn(Perl_ceil(value));
2859 tryAMAGICun_MG(abs_amg, AMGf_numeric);
2861 SV * const sv = TOPs;
2862 /* This will cache the NV value if string isn't actually integer */
2863 const IV iv = SvIV_nomg(sv);
2868 else if (SvIOK(sv)) {
2869 /* IVX is precise */
2871 SETu(SvUV_nomg(sv)); /* force it to be numeric only */
2879 /* 2s complement assumption. Also, not really needed as
2880 IV_MIN and -IV_MIN should both be %100...00 and NV-able */
2886 const NV value = SvNV_nomg(sv);
2900 I32 flags = PERL_SCAN_ALLOW_UNDERSCORES;
2904 SV* const sv = POPs;
2906 tmps = (SvPV_const(sv, len));
2908 /* If Unicode, try to downgrade
2909 * If not possible, croak. */
2910 SV* const tsv = sv_2mortal(newSVsv(sv));
2913 sv_utf8_downgrade(tsv, FALSE);
2914 tmps = SvPV_const(tsv, len);
2916 if (PL_op->op_type == OP_HEX)
2919 while (*tmps && len && isSPACE(*tmps))
2923 if (*tmps == 'x' || *tmps == 'X') {
2925 result_uv = grok_hex (tmps, &len, &flags, &result_nv);
2927 else if (*tmps == 'b' || *tmps == 'B')
2928 result_uv = grok_bin (tmps, &len, &flags, &result_nv);
2930 result_uv = grok_oct (tmps, &len, &flags, &result_nv);
2932 if (flags & PERL_SCAN_GREATER_THAN_UV_MAX) {
2946 SV * const sv = TOPs;
2951 SETi(sv_len_utf8_nomg(sv));
2955 (void)SvPV_nomg_const(sv,len);
2959 if (!SvPADTMP(TARG)) {
2960 sv_setsv_nomg(TARG, &PL_sv_undef);
2968 /* Returns false if substring is completely outside original string.
2969 No length is indicated by len_iv = 0 and len_is_uv = 0. len_is_uv must
2970 always be true for an explicit 0.
2973 Perl_translate_substr_offsets(pTHX_ STRLEN curlen, IV pos1_iv,
2974 bool pos1_is_uv, IV len_iv,
2975 bool len_is_uv, STRLEN *posp,
2981 PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS;
2982 PERL_UNUSED_CONTEXT;
2984 if (!pos1_is_uv && pos1_iv < 0 && curlen) {
2985 pos1_is_uv = curlen-1 > ~(UV)pos1_iv;
2988 if ((pos1_is_uv || pos1_iv > 0) && (UV)pos1_iv > curlen)
2991 if (len_iv || len_is_uv) {
2992 if (!len_is_uv && len_iv < 0) {
2993 pos2_iv = curlen + len_iv;
2995 pos2_is_uv = curlen-1 > ~(UV)len_iv;
2998 } else { /* len_iv >= 0 */
2999 if (!pos1_is_uv && pos1_iv < 0) {
3000 pos2_iv = pos1_iv + len_iv;
3001 pos2_is_uv = (UV)len_iv > (UV)IV_MAX;
3003 if ((UV)len_iv > curlen-(UV)pos1_iv)
3006 pos2_iv = pos1_iv+len_iv;
3016 if (!pos2_is_uv && pos2_iv < 0) {
3017 if (!pos1_is_uv && pos1_iv < 0)
3021 else if (!pos1_is_uv && pos1_iv < 0)
3024 if ((UV)pos2_iv < (UV)pos1_iv)
3026 if ((UV)pos2_iv > curlen)
3029 /* pos1_iv and pos2_iv both in 0..curlen, so the cast is safe */
3030 *posp = (STRLEN)( (UV)pos1_iv );
3031 *lenp = (STRLEN)( (UV)pos2_iv - (UV)pos1_iv );
3048 I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3049 const bool rvalue = (GIMME_V != G_VOID);
3052 const char *repl = NULL;
3054 int num_args = PL_op->op_private & 7;
3055 bool repl_need_utf8_upgrade = FALSE;
3059 if(!(repl_sv = POPs)) num_args--;
3061 if ((len_sv = POPs)) {
3062 len_iv = SvIV(len_sv);
3063 len_is_uv = len_iv ? SvIOK_UV(len_sv) : 1;
3068 pos1_iv = SvIV(pos_sv);
3069 pos1_is_uv = SvIOK_UV(pos_sv);
3071 if (PL_op->op_private & OPpSUBSTR_REPL_FIRST) {
3076 if (lvalue && !repl_sv) {
3078 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3079 sv_magic(ret, NULL, PERL_MAGIC_substr, NULL, 0);
3081 LvTARG(ret) = SvREFCNT_inc_simple(sv);
3083 pos1_is_uv || pos1_iv >= 0
3084 ? (STRLEN)(UV)pos1_iv
3085 : (LvFLAGS(ret) |= 1, (STRLEN)(UV)-pos1_iv);
3087 len_is_uv || len_iv > 0
3088 ? (STRLEN)(UV)len_iv
3089 : (LvFLAGS(ret) |= 2, (STRLEN)(UV)-len_iv);
3092 PUSHs(ret); /* avoid SvSETMAGIC here */
3096 repl = SvPV_const(repl_sv, repl_len);
3099 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
3100 "Attempt to use reference as lvalue in substr"
3102 tmps = SvPV_force_nomg(sv, curlen);
3103 if (DO_UTF8(repl_sv) && repl_len) {
3105 sv_utf8_upgrade_nomg(sv);
3109 else if (DO_UTF8(sv))
3110 repl_need_utf8_upgrade = TRUE;
3112 else tmps = SvPV_const(sv, curlen);
3114 utf8_curlen = sv_or_pv_len_utf8(sv, tmps, curlen);
3115 if (utf8_curlen == curlen)
3118 curlen = utf8_curlen;
3124 STRLEN pos, len, byte_len, byte_pos;
3126 if (!translate_substr_offsets(
3127 curlen, pos1_iv, pos1_is_uv, len_iv, len_is_uv, &pos, &len
3131 byte_pos = utf8_curlen
3132 ? sv_or_pv_pos_u2b(sv, tmps, pos, &byte_len) : pos;
3137 SvTAINTED_off(TARG); /* decontaminate */
3138 SvUTF8_off(TARG); /* decontaminate */
3139 sv_setpvn(TARG, tmps, byte_len);
3140 #ifdef USE_LOCALE_COLLATE
3141 sv_unmagic(TARG, PERL_MAGIC_collxfrm);
3148 SV* repl_sv_copy = NULL;
3150 if (repl_need_utf8_upgrade) {
3151 repl_sv_copy = newSVsv(repl_sv);
3152 sv_utf8_upgrade(repl_sv_copy);
3153 repl = SvPV_const(repl_sv_copy, repl_len);
3157 sv_insert_flags(sv, byte_pos, byte_len, repl, repl_len, 0);
3158 SvREFCNT_dec(repl_sv_copy);
3170 Perl_croak(aTHX_ "substr outside of string");
3171 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
3178 const IV size = POPi;
3179 const IV offset = POPi;
3180 SV * const src = POPs;
3181 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3184 if (lvalue) { /* it's an lvalue! */
3185 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3186 sv_magic(ret, NULL, PERL_MAGIC_vec, NULL, 0);
3188 LvTARG(ret) = SvREFCNT_inc_simple(src);
3189 LvTARGOFF(ret) = offset;
3190 LvTARGLEN(ret) = size;
3194 SvTAINTED_off(TARG); /* decontaminate */
3198 sv_setuv(ret, do_vecget(src, offset, size));
3214 const char *little_p;
3217 const bool is_index = PL_op->op_type == OP_INDEX;
3218 const bool threeargs = MAXARG >= 3 && (TOPs || ((void)POPs,0));
3224 big_p = SvPV_const(big, biglen);
3225 little_p = SvPV_const(little, llen);
3227 big_utf8 = DO_UTF8(big);
3228 little_utf8 = DO_UTF8(little);
3229 if (big_utf8 ^ little_utf8) {
3230 /* One needs to be upgraded. */
3231 if (little_utf8 && !PL_encoding) {
3232 /* Well, maybe instead we might be able to downgrade the small
3234 char * const pv = (char*)bytes_from_utf8((U8 *)little_p, &llen,
3237 /* If the large string is ISO-8859-1, and it's not possible to
3238 convert the small string to ISO-8859-1, then there is no
3239 way that it could be found anywhere by index. */
3244 /* At this point, pv is a malloc()ed string. So donate it to temp
3245 to ensure it will get free()d */
3246 little = temp = newSV(0);
3247 sv_usepvn(temp, pv, llen);
3248 little_p = SvPVX(little);
3251 ? newSVpvn(big_p, biglen) : newSVpvn(little_p, llen);
3254 sv_recode_to_utf8(temp, PL_encoding);
3256 sv_utf8_upgrade(temp);
3261 big_p = SvPV_const(big, biglen);
3264 little_p = SvPV_const(little, llen);
3268 if (SvGAMAGIC(big)) {
3269 /* Life just becomes a lot easier if I use a temporary here.
3270 Otherwise I need to avoid calls to sv_pos_u2b(), which (dangerously)
3271 will trigger magic and overloading again, as will fbm_instr()
3273 big = newSVpvn_flags(big_p, biglen,
3274 SVs_TEMP | (big_utf8 ? SVf_UTF8 : 0));
3277 if (SvGAMAGIC(little) || (is_index && !SvOK(little))) {
3278 /* index && SvOK() is a hack. fbm_instr() calls SvPV_const, which will
3279 warn on undef, and we've already triggered a warning with the
3280 SvPV_const some lines above. We can't remove that, as we need to
3281 call some SvPV to trigger overloading early and find out if the
3283 This is all getting to messy. The API isn't quite clean enough,
3284 because data access has side effects.
3286 little = newSVpvn_flags(little_p, llen,
3287 SVs_TEMP | (little_utf8 ? SVf_UTF8 : 0));
3288 little_p = SvPVX(little);
3292 offset = is_index ? 0 : biglen;
3294 if (big_utf8 && offset > 0)
3295 offset = sv_pos_u2b_flags(big, offset, 0, SV_CONST_RETURN);
3301 else if (offset > (SSize_t)biglen)
3303 if (!(little_p = is_index
3304 ? fbm_instr((unsigned char*)big_p + offset,
3305 (unsigned char*)big_p + biglen, little, 0)
3306 : rninstr(big_p, big_p + offset,
3307 little_p, little_p + llen)))
3310 retval = little_p - big_p;
3311 if (retval > 0 && big_utf8)
3312 retval = sv_pos_b2u_flags(big, retval, SV_CONST_RETURN);
3322 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
3323 SvTAINTED_off(TARG);
3324 do_sprintf(TARG, SP-MARK, MARK+1);
3325 TAINT_IF(SvTAINTED(TARG));
3337 const U8 *s = (U8*)SvPV_const(argsv, len);
3339 if (PL_encoding && SvPOK(argsv) && !DO_UTF8(argsv)) {
3340 SV * const tmpsv = sv_2mortal(newSVsv(argsv));
3341 s = (U8*)sv_recode_to_utf8(tmpsv, PL_encoding);
3342 len = UTF8SKIP(s); /* Should be well-formed; so this is its length */
3346 XPUSHu(DO_UTF8(argsv)
3347 ? utf8n_to_uvchr(s, len, 0, UTF8_ALLOW_ANYUV)
3361 if (!IN_BYTES /* under bytes, chr(-1) eq chr(0xff), etc. */
3362 && ((SvIOKp(top) && !SvIsUV(top) && SvIV_nomg(top) < 0)
3364 ((SvNOKp(top) || (SvOK(top) && !SvIsUV(top)))
3365 && SvNV_nomg(top) < 0.0))) {
3366 if (ckWARN(WARN_UTF8)) {
3367 if (SvGMAGICAL(top)) {
3368 SV *top2 = sv_newmortal();
3369 sv_setsv_nomg(top2, top);
3372 Perl_warner(aTHX_ packWARN(WARN_UTF8),
3373 "Invalid negative number (%"SVf") in chr", SVfARG(top));
3375 value = UNICODE_REPLACEMENT;
3377 value = SvUV_nomg(top);
3380 SvUPGRADE(TARG,SVt_PV);
3382 if (value > 255 && !IN_BYTES) {
3383 SvGROW(TARG, (STRLEN)UNISKIP(value)+1);
3384 tmps = (char*)uvchr_to_utf8_flags((U8*)SvPVX(TARG), value, 0);
3385 SvCUR_set(TARG, tmps - SvPVX_const(TARG));
3387 (void)SvPOK_only(TARG);
3396 *tmps++ = (char)value;
3398 (void)SvPOK_only(TARG);
3400 if (PL_encoding && !IN_BYTES) {
3401 sv_recode_to_utf8(TARG, PL_encoding);
3403 if (SvCUR(TARG) == 0
3404 || ! is_utf8_string((U8*)tmps, SvCUR(TARG))
3405 || UTF8_IS_REPLACEMENT((U8*) tmps, (U8*) tmps + SvCUR(TARG)))
3410 *tmps++ = (char)value;
3426 const char *tmps = SvPV_const(left, len);
3428 if (DO_UTF8(left)) {
3429 /* If Unicode, try to downgrade.
3430 * If not possible, croak.
3431 * Yes, we made this up. */
3432 SV* const tsv = sv_2mortal(newSVsv(left));
3435 sv_utf8_downgrade(tsv, FALSE);
3436 tmps = SvPV_const(tsv, len);
3438 # ifdef USE_ITHREADS
3440 if (!PL_reentrant_buffer->_crypt_struct_buffer) {
3441 /* This should be threadsafe because in ithreads there is only
3442 * one thread per interpreter. If this would not be true,
3443 * we would need a mutex to protect this malloc. */
3444 PL_reentrant_buffer->_crypt_struct_buffer =
3445 (struct crypt_data *)safemalloc(sizeof(struct crypt_data));
3446 #if defined(__GLIBC__) || defined(__EMX__)
3447 if (PL_reentrant_buffer->_crypt_struct_buffer) {
3448 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
3449 /* work around glibc-2.2.5 bug */
3450 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
3454 # endif /* HAS_CRYPT_R */
3455 # endif /* USE_ITHREADS */
3457 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
3459 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
3465 "The crypt() function is unimplemented due to excessive paranoia.");
3469 /* Generally UTF-8 and UTF-EBCDIC are indistinguishable at this level. So
3470 * most comments below say UTF-8, when in fact they mean UTF-EBCDIC as well */
3474 /* Actually is both lcfirst() and ucfirst(). Only the first character
3475 * changes. This means that possibly we can change in-place, ie., just
3476 * take the source and change that one character and store it back, but not
3477 * if read-only etc, or if the length changes */
3482 STRLEN slen; /* slen is the byte length of the whole SV. */
3485 bool inplace; /* ? Convert first char only, in-place */
3486 bool doing_utf8 = FALSE; /* ? using utf8 */
3487 bool convert_source_to_utf8 = FALSE; /* ? need to convert */
3488 const int op_type = PL_op->op_type;
3491 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3492 STRLEN ulen; /* ulen is the byte length of the original Unicode character
3493 * stored as UTF-8 at s. */
3494 STRLEN tculen; /* tculen is the byte length of the freshly titlecased (or
3495 * lowercased) character stored in tmpbuf. May be either
3496 * UTF-8 or not, but in either case is the number of bytes */
3498 s = (const U8*)SvPV_const(source, slen);
3500 /* We may be able to get away with changing only the first character, in
3501 * place, but not if read-only, etc. Later we may discover more reasons to
3502 * not convert in-place. */
3503 inplace = !SvREADONLY(source)
3504 && ( SvPADTMP(source)
3505 || ( SvTEMP(source) && !SvSMAGICAL(source)
3506 && SvREFCNT(source) == 1));
3508 /* First calculate what the changed first character should be. This affects
3509 * whether we can just swap it out, leaving the rest of the string unchanged,
3510 * or even if have to convert the dest to UTF-8 when the source isn't */
3512 if (! slen) { /* If empty */
3513 need = 1; /* still need a trailing NUL */
3516 else if (DO_UTF8(source)) { /* Is the source utf8? */
3519 if (op_type == OP_UCFIRST) {
3520 #ifdef USE_LOCALE_CTYPE
3521 _to_utf8_title_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3523 _to_utf8_title_flags(s, tmpbuf, &tculen, 0);
3527 #ifdef USE_LOCALE_CTYPE
3528 _to_utf8_lower_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3530 _to_utf8_lower_flags(s, tmpbuf, &tculen, 0);
3534 /* we can't do in-place if the length changes. */
3535 if (ulen != tculen) inplace = FALSE;
3536 need = slen + 1 - ulen + tculen;
3538 else { /* Non-zero length, non-UTF-8, Need to consider locale and if
3539 * latin1 is treated as caseless. Note that a locale takes
3541 ulen = 1; /* Original character is 1 byte */
3542 tculen = 1; /* Most characters will require one byte, but this will
3543 * need to be overridden for the tricky ones */
3546 if (op_type == OP_LCFIRST) {
3548 /* lower case the first letter: no trickiness for any character */
3550 #ifdef USE_LOCALE_CTYPE
3551 (IN_LC_RUNTIME(LC_CTYPE))
3556 ? toLOWER_LATIN1(*s)
3560 #ifdef USE_LOCALE_CTYPE
3561 else if (IN_LC_RUNTIME(LC_CTYPE)) {
3562 if (IN_UTF8_CTYPE_LOCALE) {
3566 *tmpbuf = (U8) toUPPER_LC(*s); /* This would be a bug if any
3567 locales have upper and title case
3571 else if (! IN_UNI_8_BIT) {
3572 *tmpbuf = toUPPER(*s); /* Returns caseless for non-ascii, or
3573 * on EBCDIC machines whatever the
3574 * native function does */
3577 /* Here, is ucfirst non-UTF-8, not in locale (unless that locale is
3578 * UTF-8, which we treat as not in locale), and cased latin1 */
3580 #ifdef USE_LOCALE_CTYPE
3584 title_ord = _to_upper_title_latin1(*s, tmpbuf, &tculen, 's');
3586 assert(tculen == 2);
3588 /* If the result is an upper Latin1-range character, it can
3589 * still be represented in one byte, which is its ordinal */
3590 if (UTF8_IS_DOWNGRADEABLE_START(*tmpbuf)) {
3591 *tmpbuf = (U8) title_ord;
3595 /* Otherwise it became more than one ASCII character (in
3596 * the case of LATIN_SMALL_LETTER_SHARP_S) or changed to
3597 * beyond Latin1, so the number of bytes changed, so can't
3598 * replace just the first character in place. */
3601 /* If the result won't fit in a byte, the entire result
3602 * will have to be in UTF-8. Assume worst case sizing in
3603 * conversion. (all latin1 characters occupy at most two
3605 if (title_ord > 255) {
3607 convert_source_to_utf8 = TRUE;
3608 need = slen * 2 + 1;
3610 /* The (converted) UTF-8 and UTF-EBCDIC lengths of all
3611 * (both) characters whose title case is above 255 is
3615 else { /* LATIN_SMALL_LETTER_SHARP_S expands by 1 byte */
3616 need = slen + 1 + 1;
3620 } /* End of use Unicode (Latin1) semantics */
3621 } /* End of changing the case of the first character */
3623 /* Here, have the first character's changed case stored in tmpbuf. Ready to
3624 * generate the result */
3627 /* We can convert in place. This means we change just the first
3628 * character without disturbing the rest; no need to grow */
3630 s = d = (U8*)SvPV_force_nomg(source, slen);
3636 /* Here, we can't convert in place; we earlier calculated how much
3637 * space we will need, so grow to accommodate that */
3638 SvUPGRADE(dest, SVt_PV);
3639 d = (U8*)SvGROW(dest, need);
3640 (void)SvPOK_only(dest);
3647 if (! convert_source_to_utf8) {
3649 /* Here both source and dest are in UTF-8, but have to create
3650 * the entire output. We initialize the result to be the
3651 * title/lower cased first character, and then append the rest
3653 sv_setpvn(dest, (char*)tmpbuf, tculen);
3655 sv_catpvn(dest, (char*)(s + ulen), slen - ulen);
3659 const U8 *const send = s + slen;
3661 /* Here the dest needs to be in UTF-8, but the source isn't,
3662 * except we earlier UTF-8'd the first character of the source
3663 * into tmpbuf. First put that into dest, and then append the
3664 * rest of the source, converting it to UTF-8 as we go. */
3666 /* Assert tculen is 2 here because the only two characters that
3667 * get to this part of the code have 2-byte UTF-8 equivalents */
3669 *d++ = *(tmpbuf + 1);
3670 s++; /* We have just processed the 1st char */
3672 for (; s < send; s++) {
3673 d = uvchr_to_utf8(d, *s);
3676 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3680 else { /* in-place UTF-8. Just overwrite the first character */
3681 Copy(tmpbuf, d, tculen, U8);
3682 SvCUR_set(dest, need - 1);
3686 else { /* Neither source nor dest are in or need to be UTF-8 */
3688 if (inplace) { /* in-place, only need to change the 1st char */
3691 else { /* Not in-place */
3693 /* Copy the case-changed character(s) from tmpbuf */
3694 Copy(tmpbuf, d, tculen, U8);
3695 d += tculen - 1; /* Code below expects d to point to final
3696 * character stored */
3699 else { /* empty source */
3700 /* See bug #39028: Don't taint if empty */
3704 /* In a "use bytes" we don't treat the source as UTF-8, but, still want
3705 * the destination to retain that flag */
3706 if (SvUTF8(source) && ! IN_BYTES)
3709 if (!inplace) { /* Finish the rest of the string, unchanged */
3710 /* This will copy the trailing NUL */
3711 Copy(s + 1, d + 1, slen, U8);
3712 SvCUR_set(dest, need - 1);
3715 #ifdef USE_LOCALE_CTYPE
3716 if (IN_LC_RUNTIME(LC_CTYPE)) {
3721 if (dest != source && SvTAINTED(source))
3727 /* There's so much setup/teardown code common between uc and lc, I wonder if
3728 it would be worth merging the two, and just having a switch outside each
3729 of the three tight loops. There is less and less commonality though */
3743 if ((SvPADTMP(source)
3745 (SvTEMP(source) && !SvSMAGICAL(source) && SvREFCNT(source) == 1))
3746 && !SvREADONLY(source) && SvPOK(source)
3749 #ifdef USE_LOCALE_CTYPE
3750 (IN_LC_RUNTIME(LC_CTYPE))
3751 ? ! IN_UTF8_CTYPE_LOCALE
3757 /* We can convert in place. The reason we can't if in UNI_8_BIT is to
3758 * make the loop tight, so we overwrite the source with the dest before
3759 * looking at it, and we need to look at the original source
3760 * afterwards. There would also need to be code added to handle
3761 * switching to not in-place in midstream if we run into characters
3762 * that change the length. Since being in locale overrides UNI_8_BIT,
3763 * that latter becomes irrelevant in the above test; instead for
3764 * locale, the size can't normally change, except if the locale is a
3767 s = d = (U8*)SvPV_force_nomg(source, len);
3774 s = (const U8*)SvPV_nomg_const(source, len);
3777 SvUPGRADE(dest, SVt_PV);
3778 d = (U8*)SvGROW(dest, min);
3779 (void)SvPOK_only(dest);
3784 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3785 to check DO_UTF8 again here. */
3787 if (DO_UTF8(source)) {
3788 const U8 *const send = s + len;
3789 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3791 /* All occurrences of these are to be moved to follow any other marks.
3792 * This is context-dependent. We may not be passed enough context to
3793 * move the iota subscript beyond all of them, but we do the best we can
3794 * with what we're given. The result is always better than if we
3795 * hadn't done this. And, the problem would only arise if we are
3796 * passed a character without all its combining marks, which would be
3797 * the caller's mistake. The information this is based on comes from a
3798 * comment in Unicode SpecialCasing.txt, (and the Standard's text
3799 * itself) and so can't be checked properly to see if it ever gets
3800 * revised. But the likelihood of it changing is remote */
3801 bool in_iota_subscript = FALSE;
3807 if (in_iota_subscript && ! _is_utf8_mark(s)) {
3809 /* A non-mark. Time to output the iota subscript */
3810 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
3811 d += capital_iota_len;
3812 in_iota_subscript = FALSE;
3815 /* Then handle the current character. Get the changed case value
3816 * and copy it to the output buffer */
3819 #ifdef USE_LOCALE_CTYPE
3820 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
3822 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, 0);
3824 #define GREEK_CAPITAL_LETTER_IOTA 0x0399
3825 #define COMBINING_GREEK_YPOGEGRAMMENI 0x0345
3826 if (uv == GREEK_CAPITAL_LETTER_IOTA
3827 && utf8_to_uvchr_buf(s, send, 0) == COMBINING_GREEK_YPOGEGRAMMENI)
3829 in_iota_subscript = TRUE;
3832 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
3833 /* If the eventually required minimum size outgrows the
3834 * available space, we need to grow. */
3835 const UV o = d - (U8*)SvPVX_const(dest);
3837 /* If someone uppercases one million U+03B0s we SvGROW()
3838 * one million times. Or we could try guessing how much to
3839 * allocate without allocating too much. Such is life.
3840 * See corresponding comment in lc code for another option
3843 d = (U8*)SvPVX(dest) + o;
3845 Copy(tmpbuf, d, ulen, U8);
3850 if (in_iota_subscript) {
3851 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
3852 d += capital_iota_len;
3857 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3859 else { /* Not UTF-8 */
3861 const U8 *const send = s + len;
3863 /* Use locale casing if in locale; regular style if not treating
3864 * latin1 as having case; otherwise the latin1 casing. Do the
3865 * whole thing in a tight loop, for speed, */
3866 #ifdef USE_LOCALE_CTYPE
3867 if (IN_LC_RUNTIME(LC_CTYPE)) {
3868 if (IN_UTF8_CTYPE_LOCALE) {
3871 for (; s < send; d++, s++)
3872 *d = (U8) toUPPER_LC(*s);
3876 if (! IN_UNI_8_BIT) {
3877 for (; s < send; d++, s++) {
3882 #ifdef USE_LOCALE_CTYPE
3885 for (; s < send; d++, s++) {
3886 *d = toUPPER_LATIN1_MOD(*s);
3887 if (LIKELY(*d != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
3891 /* The mainstream case is the tight loop above. To avoid
3892 * extra tests in that, all three characters that require
3893 * special handling are mapped by the MOD to the one tested
3895 * Use the source to distinguish between the three cases */
3897 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
3899 /* uc() of this requires 2 characters, but they are
3900 * ASCII. If not enough room, grow the string */
3901 if (SvLEN(dest) < ++min) {
3902 const UV o = d - (U8*)SvPVX_const(dest);
3904 d = (U8*)SvPVX(dest) + o;
3906 *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
3907 continue; /* Back to the tight loop; still in ASCII */
3910 /* The other two special handling characters have their
3911 * upper cases outside the latin1 range, hence need to be
3912 * in UTF-8, so the whole result needs to be in UTF-8. So,
3913 * here we are somewhere in the middle of processing a
3914 * non-UTF-8 string, and realize that we will have to convert
3915 * the whole thing to UTF-8. What to do? There are
3916 * several possibilities. The simplest to code is to
3917 * convert what we have so far, set a flag, and continue on
3918 * in the loop. The flag would be tested each time through
3919 * the loop, and if set, the next character would be
3920 * converted to UTF-8 and stored. But, I (khw) didn't want
3921 * to slow down the mainstream case at all for this fairly
3922 * rare case, so I didn't want to add a test that didn't
3923 * absolutely have to be there in the loop, besides the
3924 * possibility that it would get too complicated for
3925 * optimizers to deal with. Another possibility is to just
3926 * give up, convert the source to UTF-8, and restart the
3927 * function that way. Another possibility is to convert
3928 * both what has already been processed and what is yet to
3929 * come separately to UTF-8, then jump into the loop that
3930 * handles UTF-8. But the most efficient time-wise of the
3931 * ones I could think of is what follows, and turned out to
3932 * not require much extra code. */
3934 /* Convert what we have so far into UTF-8, telling the
3935 * function that we know it should be converted, and to
3936 * allow extra space for what we haven't processed yet.
3937 * Assume the worst case space requirements for converting
3938 * what we haven't processed so far: that it will require
3939 * two bytes for each remaining source character, plus the
3940 * NUL at the end. This may cause the string pointer to
3941 * move, so re-find it. */
3943 len = d - (U8*)SvPVX_const(dest);
3944 SvCUR_set(dest, len);
3945 len = sv_utf8_upgrade_flags_grow(dest,
3946 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3948 d = (U8*)SvPVX(dest) + len;
3950 /* Now process the remainder of the source, converting to
3951 * upper and UTF-8. If a resulting byte is invariant in
3952 * UTF-8, output it as-is, otherwise convert to UTF-8 and
3953 * append it to the output. */
3954 for (; s < send; s++) {
3955 (void) _to_upper_title_latin1(*s, d, &len, 'S');
3959 /* Here have processed the whole source; no need to continue
3960 * with the outer loop. Each character has been converted
3961 * to upper case and converted to UTF-8 */
3964 } /* End of processing all latin1-style chars */
3965 } /* End of processing all chars */
3966 } /* End of source is not empty */
3968 if (source != dest) {
3969 *d = '\0'; /* Here d points to 1 after last char, add NUL */
3970 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3972 } /* End of isn't utf8 */
3973 #ifdef USE_LOCALE_CTYPE
3974 if (IN_LC_RUNTIME(LC_CTYPE)) {
3979 if (dest != source && SvTAINTED(source))
3998 if ( ( SvPADTMP(source)
3999 || ( SvTEMP(source) && !SvSMAGICAL(source)
4000 && SvREFCNT(source) == 1 )
4002 && !SvREADONLY(source) && SvPOK(source)
4003 && !DO_UTF8(source)) {
4005 /* We can convert in place, as lowercasing anything in the latin1 range
4006 * (or else DO_UTF8 would have been on) doesn't lengthen it */
4008 s = d = (U8*)SvPV_force_nomg(source, len);
4015 s = (const U8*)SvPV_nomg_const(source, len);
4018 SvUPGRADE(dest, SVt_PV);
4019 d = (U8*)SvGROW(dest, min);
4020 (void)SvPOK_only(dest);
4025 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
4026 to check DO_UTF8 again here. */
4028 if (DO_UTF8(source)) {
4029 const U8 *const send = s + len;
4030 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
4033 const STRLEN u = UTF8SKIP(s);
4036 #ifdef USE_LOCALE_CTYPE
4037 _to_utf8_lower_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
4039 _to_utf8_lower_flags(s, tmpbuf, &ulen, 0);
4042 /* Here is where we would do context-sensitive actions. See the
4043 * commit message for 86510fb15 for why there isn't any */
4045 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4047 /* If the eventually required minimum size outgrows the
4048 * available space, we need to grow. */
4049 const UV o = d - (U8*)SvPVX_const(dest);
4051 /* If someone lowercases one million U+0130s we SvGROW() one
4052 * million times. Or we could try guessing how much to
4053 * allocate without allocating too much. Such is life.
4054 * Another option would be to grow an extra byte or two more
4055 * each time we need to grow, which would cut down the million
4056 * to 500K, with little waste */
4058 d = (U8*)SvPVX(dest) + o;
4061 /* Copy the newly lowercased letter to the output buffer we're
4063 Copy(tmpbuf, d, ulen, U8);
4066 } /* End of looping through the source string */
4069 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4070 } else { /* Not utf8 */
4072 const U8 *const send = s + len;
4074 /* Use locale casing if in locale; regular style if not treating
4075 * latin1 as having case; otherwise the latin1 casing. Do the
4076 * whole thing in a tight loop, for speed, */
4077 #ifdef USE_LOCALE_CTYPE
4078 if (IN_LC_RUNTIME(LC_CTYPE)) {
4079 for (; s < send; d++, s++)
4080 *d = toLOWER_LC(*s);
4084 if (! IN_UNI_8_BIT) {
4085 for (; s < send; d++, s++) {
4090 for (; s < send; d++, s++) {
4091 *d = toLOWER_LATIN1(*s);
4095 if (source != dest) {
4097 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4100 #ifdef USE_LOCALE_CTYPE
4101 if (IN_LC_RUNTIME(LC_CTYPE)) {
4106 if (dest != source && SvTAINTED(source))
4115 SV * const sv = TOPs;
4117 const char *s = SvPV_const(sv,len);
4119 SvUTF8_off(TARG); /* decontaminate */
4122 SvUPGRADE(TARG, SVt_PV);
4123 SvGROW(TARG, (len * 2) + 1);
4127 STRLEN ulen = UTF8SKIP(s);
4128 bool to_quote = FALSE;
4130 if (UTF8_IS_INVARIANT(*s)) {
4131 if (_isQUOTEMETA(*s)) {
4135 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
4136 #ifdef USE_LOCALE_CTYPE
4137 /* In locale, we quote all non-ASCII Latin1 chars.
4138 * Otherwise use the quoting rules */
4139 if (IN_LC_RUNTIME(LC_CTYPE)
4140 || _isQUOTEMETA(TWO_BYTE_UTF8_TO_NATIVE(*s, *(s + 1))))
4146 else if (is_QUOTEMETA_high(s)) {
4161 else if (IN_UNI_8_BIT) {
4163 if (_isQUOTEMETA(*s))
4169 /* For non UNI_8_BIT (and hence in locale) just quote all \W
4170 * including everything above ASCII */
4172 if (!isWORDCHAR_A(*s))
4178 SvCUR_set(TARG, d - SvPVX_const(TARG));
4179 (void)SvPOK_only_UTF8(TARG);
4182 sv_setpvn(TARG, s, len);
4199 U8 tmpbuf[UTF8_MAXBYTES_CASE + 1];
4200 const bool full_folding = TRUE; /* This variable is here so we can easily
4201 move to more generality later */
4202 const U8 flags = ( full_folding ? FOLD_FLAGS_FULL : 0 )
4203 #ifdef USE_LOCALE_CTYPE
4204 | ( IN_LC_RUNTIME(LC_CTYPE) ? FOLD_FLAGS_LOCALE : 0 )
4208 /* This is a facsimile of pp_lc, but with a thousand bugs thanks to me.
4209 * You are welcome(?) -Hugmeir
4217 s = (const U8*)SvPV_nomg_const(source, len);
4219 if (ckWARN(WARN_UNINITIALIZED))
4220 report_uninit(source);
4227 SvUPGRADE(dest, SVt_PV);
4228 d = (U8*)SvGROW(dest, min);
4229 (void)SvPOK_only(dest);
4234 if (DO_UTF8(source)) { /* UTF-8 flagged string. */
4236 const STRLEN u = UTF8SKIP(s);
4239 _to_utf8_fold_flags(s, tmpbuf, &ulen, flags);
4241 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4242 const UV o = d - (U8*)SvPVX_const(dest);
4244 d = (U8*)SvPVX(dest) + o;
4247 Copy(tmpbuf, d, ulen, U8);
4252 } /* Unflagged string */
4254 #ifdef USE_LOCALE_CTYPE
4255 if ( IN_LC_RUNTIME(LC_CTYPE) ) { /* Under locale */
4256 if (IN_UTF8_CTYPE_LOCALE) {
4257 goto do_uni_folding;
4259 for (; s < send; d++, s++)
4260 *d = (U8) toFOLD_LC(*s);
4264 if ( !IN_UNI_8_BIT ) { /* Under nothing, or bytes */
4265 for (; s < send; d++, s++)
4269 #ifdef USE_LOCALE_CTYPE
4272 /* For ASCII and the Latin-1 range, there's only two troublesome
4273 * folds, \x{DF} (\N{LATIN SMALL LETTER SHARP S}), which under full
4274 * casefolding becomes 'ss'; and \x{B5} (\N{MICRO SIGN}), which
4275 * under any fold becomes \x{3BC} (\N{GREEK SMALL LETTER MU}) --
4276 * For the rest, the casefold is their lowercase. */
4277 for (; s < send; d++, s++) {
4278 if (*s == MICRO_SIGN) {
4279 /* \N{MICRO SIGN}'s casefold is \N{GREEK SMALL LETTER MU},
4280 * which is outside of the latin-1 range. There's a couple
4281 * of ways to deal with this -- khw discusses them in
4282 * pp_lc/uc, so go there :) What we do here is upgrade what
4283 * we had already casefolded, then enter an inner loop that
4284 * appends the rest of the characters as UTF-8. */
4285 len = d - (U8*)SvPVX_const(dest);
4286 SvCUR_set(dest, len);
4287 len = sv_utf8_upgrade_flags_grow(dest,
4288 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
4289 /* The max expansion for latin1
4290 * chars is 1 byte becomes 2 */
4292 d = (U8*)SvPVX(dest) + len;
4294 Copy(GREEK_SMALL_LETTER_MU_UTF8, d, small_mu_len, U8);
4297 for (; s < send; s++) {
4299 UV fc = _to_uni_fold_flags(*s, tmpbuf, &ulen, flags);
4300 if UVCHR_IS_INVARIANT(fc) {
4302 && *s == LATIN_SMALL_LETTER_SHARP_S)
4311 Copy(tmpbuf, d, ulen, U8);
4317 else if (full_folding && *s == LATIN_SMALL_LETTER_SHARP_S) {
4318 /* Under full casefolding, LATIN SMALL LETTER SHARP S
4319 * becomes "ss", which may require growing the SV. */
4320 if (SvLEN(dest) < ++min) {
4321 const UV o = d - (U8*)SvPVX_const(dest);
4323 d = (U8*)SvPVX(dest) + o;
4328 else { /* If it's not one of those two, the fold is their lower
4330 *d = toLOWER_LATIN1(*s);
4336 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4338 #ifdef USE_LOCALE_CTYPE
4339 if (IN_LC_RUNTIME(LC_CTYPE)) {
4344 if (SvTAINTED(source))
4354 dVAR; dSP; dMARK; dORIGMARK;
4355 AV *const av = MUTABLE_AV(POPs);
4356 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4358 if (SvTYPE(av) == SVt_PVAV) {
4359 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4360 bool can_preserve = FALSE;
4366 can_preserve = SvCANEXISTDELETE(av);
4369 if (lval && localizing) {
4372 for (svp = MARK + 1; svp <= SP; svp++) {
4373 const SSize_t elem = SvIV(*svp);
4377 if (max > AvMAX(av))
4381 while (++MARK <= SP) {
4383 SSize_t elem = SvIV(*MARK);
4384 bool preeminent = TRUE;
4386 if (localizing && can_preserve) {
4387 /* If we can determine whether the element exist,
4388 * Try to preserve the existenceness of a tied array
4389 * element by using EXISTS and DELETE if possible.
4390 * Fallback to FETCH and STORE otherwise. */
4391 preeminent = av_exists(av, elem);
4394 svp = av_fetch(av, elem, lval);
4397 DIE(aTHX_ PL_no_aelem, elem);
4400 save_aelem(av, elem, svp);
4402 SAVEADELETE(av, elem);
4405 *MARK = svp ? *svp : &PL_sv_undef;
4408 if (GIMME != G_ARRAY) {
4410 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4419 AV *const av = MUTABLE_AV(POPs);
4420 I32 lval = (PL_op->op_flags & OPf_MOD);
4421 SSize_t items = SP - MARK;
4423 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4424 const I32 flags = is_lvalue_sub();
4426 if (!(flags & OPpENTERSUB_INARGS))
4427 /* diag_listed_as: Can't modify %s in %s */
4428 Perl_croak(aTHX_ "Can't modify index/value array slice in list assignment");
4435 *(MARK+items*2-1) = *(MARK+items);
4441 while (++MARK <= SP) {
4444 svp = av_fetch(av, SvIV(*MARK), lval);
4446 if (!svp || !*svp || *svp == &PL_sv_undef) {
4447 DIE(aTHX_ PL_no_aelem, SvIV(*MARK));
4449 *MARK = sv_mortalcopy(*MARK);
4451 *++MARK = svp ? *svp : &PL_sv_undef;
4453 if (GIMME != G_ARRAY) {
4454 MARK = SP - items*2;
4455 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4461 /* Smart dereferencing for keys, values and each */
4473 (SvTYPE(sv) != SVt_PVHV && SvTYPE(sv) != SVt_PVAV)
4478 "Type of argument to %s must be unblessed hashref or arrayref",
4479 PL_op_desc[PL_op->op_type] );
4482 if (PL_op->op_flags & OPf_SPECIAL && SvTYPE(sv) == SVt_PVAV)
4484 "Can't modify %s in %s",
4485 PL_op_desc[PL_op->op_type], PL_op_desc[PL_op->op_next->op_type]
4488 /* Delegate to correct function for op type */
4490 if (PL_op->op_type == OP_RKEYS || PL_op->op_type == OP_RVALUES) {
4491 return (SvTYPE(sv) == SVt_PVHV) ? Perl_do_kv(aTHX) : Perl_pp_akeys(aTHX);
4494 return (SvTYPE(sv) == SVt_PVHV)
4495 ? Perl_pp_each(aTHX)
4496 : Perl_pp_aeach(aTHX);
4504 AV *array = MUTABLE_AV(POPs);
4505 const I32 gimme = GIMME_V;
4506 IV *iterp = Perl_av_iter_p(aTHX_ array);
4507 const IV current = (*iterp)++;
4509 if (current > av_tindex(array)) {
4511 if (gimme == G_SCALAR)
4519 if (gimme == G_ARRAY) {
4520 SV **const element = av_fetch(array, current, 0);
4521 PUSHs(element ? *element : &PL_sv_undef);
4530 AV *array = MUTABLE_AV(POPs);
4531 const I32 gimme = GIMME_V;
4533 *Perl_av_iter_p(aTHX_ array) = 0;
4535 if (gimme == G_SCALAR) {
4537 PUSHi(av_tindex(array) + 1);
4539 else if (gimme == G_ARRAY) {
4540 IV n = Perl_av_len(aTHX_ array);
4545 if (PL_op->op_type == OP_AKEYS || PL_op->op_type == OP_RKEYS) {
4546 for (i = 0; i <= n; i++) {
4551 for (i = 0; i <= n; i++) {
4552 SV *const *const elem = Perl_av_fetch(aTHX_ array, i, 0);
4553 PUSHs(elem ? *elem : &PL_sv_undef);
4560 /* Associative arrays. */
4566 HV * hash = MUTABLE_HV(POPs);
4568 const I32 gimme = GIMME_V;
4571 /* might clobber stack_sp */
4572 entry = hv_iternext(hash);
4577 SV* const sv = hv_iterkeysv(entry);
4578 PUSHs(sv); /* won't clobber stack_sp */
4579 if (gimme == G_ARRAY) {
4582 /* might clobber stack_sp */
4583 val = hv_iterval(hash, entry);
4588 else if (gimme == G_SCALAR)
4595 S_do_delete_local(pTHX)
4599 const I32 gimme = GIMME_V;
4602 const bool sliced = !!(PL_op->op_private & OPpSLICE);
4603 SV **unsliced_keysv = sliced ? NULL : sp--;
4604 SV * const osv = POPs;
4605 SV **mark = sliced ? PL_stack_base + POPMARK : unsliced_keysv-1;
4607 const bool tied = SvRMAGICAL(osv)
4608 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4609 const bool can_preserve = SvCANEXISTDELETE(osv);
4610 const U32 type = SvTYPE(osv);
4611 SV ** const end = sliced ? SP : unsliced_keysv;
4613 if (type == SVt_PVHV) { /* hash element */
4614 HV * const hv = MUTABLE_HV(osv);
4615 while (++MARK <= end) {
4616 SV * const keysv = *MARK;
4618 bool preeminent = TRUE;
4620 preeminent = hv_exists_ent(hv, keysv, 0);
4622 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4629 sv = hv_delete_ent(hv, keysv, 0, 0);
4631 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4634 if (!sv) DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4635 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4637 *MARK = sv_mortalcopy(sv);
4643 SAVEHDELETE(hv, keysv);
4644 *MARK = &PL_sv_undef;
4648 else if (type == SVt_PVAV) { /* array element */
4649 if (PL_op->op_flags & OPf_SPECIAL) {
4650 AV * const av = MUTABLE_AV(osv);
4651 while (++MARK <= end) {
4652 SSize_t idx = SvIV(*MARK);
4654 bool preeminent = TRUE;
4656 preeminent = av_exists(av, idx);
4658 SV **svp = av_fetch(av, idx, 1);
4665 sv = av_delete(av, idx, 0);
4667 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4670 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4672 *MARK = sv_mortalcopy(sv);
4678 SAVEADELETE(av, idx);
4679 *MARK = &PL_sv_undef;
4684 DIE(aTHX_ "panic: avhv_delete no longer supported");
4687 DIE(aTHX_ "Not a HASH reference");
4689 if (gimme == G_VOID)
4691 else if (gimme == G_SCALAR) {
4696 *++MARK = &PL_sv_undef;
4700 else if (gimme != G_VOID)
4701 PUSHs(*unsliced_keysv);
4713 if (PL_op->op_private & OPpLVAL_INTRO)
4714 return do_delete_local();
4717 discard = (gimme == G_VOID) ? G_DISCARD : 0;
4719 if (PL_op->op_private & OPpSLICE) {
4721 HV * const hv = MUTABLE_HV(POPs);
4722 const U32 hvtype = SvTYPE(hv);
4723 if (hvtype == SVt_PVHV) { /* hash element */
4724 while (++MARK <= SP) {
4725 SV * const sv = hv_delete_ent(hv, *MARK, discard, 0);
4726 *MARK = sv ? sv : &PL_sv_undef;
4729 else if (hvtype == SVt_PVAV) { /* array element */
4730 if (PL_op->op_flags & OPf_SPECIAL) {
4731 while (++MARK <= SP) {
4732 SV * const sv = av_delete(MUTABLE_AV(hv), SvIV(*MARK), discard);
4733 *MARK = sv ? sv : &PL_sv_undef;
4738 DIE(aTHX_ "Not a HASH reference");
4741 else if (gimme == G_SCALAR) {
4746 *++MARK = &PL_sv_undef;
4752 HV * const hv = MUTABLE_HV(POPs);
4754 if (SvTYPE(hv) == SVt_PVHV)
4755 sv = hv_delete_ent(hv, keysv, discard, 0);
4756 else if (SvTYPE(hv) == SVt_PVAV) {
4757 if (PL_op->op_flags & OPf_SPECIAL)
4758 sv = av_delete(MUTABLE_AV(hv), SvIV(keysv), discard);
4760 DIE(aTHX_ "panic: avhv_delete no longer supported");
4763 DIE(aTHX_ "Not a HASH reference");
4779 if (UNLIKELY( PL_op->op_private & OPpEXISTS_SUB )) {
4781 SV * const sv = POPs;
4782 CV * const cv = sv_2cv(sv, &hv, &gv, 0);
4785 if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
4790 hv = MUTABLE_HV(POPs);
4791 if (LIKELY( SvTYPE(hv) == SVt_PVHV )) {
4792 if (hv_exists_ent(hv, tmpsv, 0))
4795 else if (SvTYPE(hv) == SVt_PVAV) {
4796 if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
4797 if (av_exists(MUTABLE_AV(hv), SvIV(tmpsv)))
4802 DIE(aTHX_ "Not a HASH reference");
4809 dVAR; dSP; dMARK; dORIGMARK;
4810 HV * const hv = MUTABLE_HV(POPs);
4811 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4812 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4813 bool can_preserve = FALSE;
4819 if (SvCANEXISTDELETE(hv))
4820 can_preserve = TRUE;
4823 while (++MARK <= SP) {
4824 SV * const keysv = *MARK;
4827 bool preeminent = TRUE;
4829 if (localizing && can_preserve) {
4830 /* If we can determine whether the element exist,
4831 * try to preserve the existenceness of a tied hash
4832 * element by using EXISTS and DELETE if possible.
4833 * Fallback to FETCH and STORE otherwise. */
4834 preeminent = hv_exists_ent(hv, keysv, 0);
4837 he = hv_fetch_ent(hv, keysv, lval, 0);
4838 svp = he ? &HeVAL(he) : NULL;
4841 if (!svp || !*svp || *svp == &PL_sv_undef) {
4842 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4845 if (HvNAME_get(hv) && isGV(*svp))
4846 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
4847 else if (preeminent)
4848 save_helem_flags(hv, keysv, svp,
4849 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
4851 SAVEHDELETE(hv, keysv);
4854 *MARK = svp && *svp ? *svp : &PL_sv_undef;
4856 if (GIMME != G_ARRAY) {
4858 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4867 HV * const hv = MUTABLE_HV(POPs);
4868 I32 lval = (PL_op->op_flags & OPf_MOD);
4869 SSize_t items = SP - MARK;
4871 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4872 const I32 flags = is_lvalue_sub();
4874 if (!(flags & OPpENTERSUB_INARGS))
4875 /* diag_listed_as: Can't modify %s in %s */
4876 Perl_croak(aTHX_ "Can't modify key/value hash slice in list assignment");
4883 *(MARK+items*2-1) = *(MARK+items);
4889 while (++MARK <= SP) {
4890 SV * const keysv = *MARK;
4894 he = hv_fetch_ent(hv, keysv, lval, 0);
4895 svp = he ? &HeVAL(he) : NULL;
4898 if (!svp || !*svp || *svp == &PL_sv_undef) {
4899 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4901 *MARK = sv_mortalcopy(*MARK);
4903 *++MARK = svp && *svp ? *svp : &PL_sv_undef;
4905 if (GIMME != G_ARRAY) {
4906 MARK = SP - items*2;
4907 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4913 /* List operators. */
4918 I32 markidx = POPMARK;
4919 if (GIMME != G_ARRAY) {
4920 SV **mark = PL_stack_base + markidx;
4923 *MARK = *SP; /* unwanted list, return last item */
4925 *MARK = &PL_sv_undef;
4936 SV ** const lastrelem = PL_stack_sp;
4937 SV ** const lastlelem = PL_stack_base + POPMARK;
4938 SV ** const firstlelem = PL_stack_base + POPMARK + 1;
4939 SV ** const firstrelem = lastlelem + 1;
4940 I32 is_something_there = FALSE;
4941 const U8 mod = PL_op->op_flags & OPf_MOD;
4943 const I32 max = lastrelem - lastlelem;
4946 if (GIMME != G_ARRAY) {
4947 I32 ix = SvIV(*lastlelem);
4950 if (ix < 0 || ix >= max)
4951 *firstlelem = &PL_sv_undef;
4953 *firstlelem = firstrelem[ix];
4959 SP = firstlelem - 1;
4963 for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
4964 I32 ix = SvIV(*lelem);
4967 if (ix < 0 || ix >= max)
4968 *lelem = &PL_sv_undef;
4970 is_something_there = TRUE;
4971 if (!(*lelem = firstrelem[ix]))
4972 *lelem = &PL_sv_undef;
4973 else if (mod && SvPADTMP(*lelem)) {
4974 assert(!IS_PADGV(*lelem));
4975 *lelem = firstrelem[ix] = sv_mortalcopy(*lelem);
4979 if (is_something_there)
4982 SP = firstlelem - 1;
4989 const I32 items = SP - MARK;
4990 SV * const av = MUTABLE_SV(av_make(items, MARK+1));
4992 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
4993 ? newRV_noinc(av) : av);
4999 dVAR; dSP; dMARK; dORIGMARK;
5000 HV* const hv = newHV();
5001 SV* const retval = sv_2mortal( PL_op->op_flags & OPf_SPECIAL
5002 ? newRV_noinc(MUTABLE_SV(hv))
5007 (MARK++, SvGMAGICAL(*MARK) ? sv_mortalcopy(*MARK) : *MARK);
5014 sv_setsv(val, *MARK);
5018 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash");
5021 (void)hv_store_ent(hv,key,val,0);
5029 S_deref_plain_array(pTHX_ AV *ary)
5031 if (SvTYPE(ary) == SVt_PVAV) return ary;
5032 SvGETMAGIC((SV *)ary);
5033 if (!SvROK(ary) || SvTYPE(SvRV(ary)) != SVt_PVAV)
5034 Perl_die(aTHX_ "Not an ARRAY reference");
5035 else if (SvOBJECT(SvRV(ary)))
5036 Perl_die(aTHX_ "Not an unblessed ARRAY reference");
5037 return (AV *)SvRV(ary);
5040 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
5041 # define DEREF_PLAIN_ARRAY(ary) \
5044 SvTYPE(aRrRay) == SVt_PVAV \
5046 : S_deref_plain_array(aTHX_ aRrRay); \
5049 # define DEREF_PLAIN_ARRAY(ary) \
5051 PL_Sv = (SV *)(ary), \
5052 SvTYPE(PL_Sv) == SVt_PVAV \
5054 : S_deref_plain_array(aTHX_ (AV *)PL_Sv) \
5060 dVAR; dSP; dMARK; dORIGMARK;
5061 int num_args = (SP - MARK);
5062 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5071 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5074 return Perl_tied_method(aTHX_ SV_CONST(SPLICE), mark - 1, MUTABLE_SV(ary), mg,
5075 GIMME_V | TIED_METHOD_ARGUMENTS_ON_STACK,
5082 offset = i = SvIV(*MARK);
5084 offset += AvFILLp(ary) + 1;
5086 DIE(aTHX_ PL_no_aelem, i);
5088 length = SvIVx(*MARK++);
5090 length += AvFILLp(ary) - offset + 1;
5096 length = AvMAX(ary) + 1; /* close enough to infinity */
5100 length = AvMAX(ary) + 1;
5102 if (offset > AvFILLp(ary) + 1) {
5104 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "splice() offset past end of array" );
5105 offset = AvFILLp(ary) + 1;
5107 after = AvFILLp(ary) + 1 - (offset + length);
5108 if (after < 0) { /* not that much array */
5109 length += after; /* offset+length now in array */
5115 /* At this point, MARK .. SP-1 is our new LIST */
5118 diff = newlen - length;
5119 if (newlen && !AvREAL(ary) && AvREIFY(ary))
5122 /* make new elements SVs now: avoid problems if they're from the array */
5123 for (dst = MARK, i = newlen; i; i--) {
5124 SV * const h = *dst;
5125 *dst++ = newSVsv(h);
5128 if (diff < 0) { /* shrinking the area */
5129 SV **tmparyval = NULL;
5131 Newx(tmparyval, newlen, SV*); /* so remember insertion */
5132 Copy(MARK, tmparyval, newlen, SV*);
5135 MARK = ORIGMARK + 1;
5136 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5137 const bool real = cBOOL(AvREAL(ary));
5138 MEXTEND(MARK, length);
5140 EXTEND_MORTAL(length);
5141 for (i = 0, dst = MARK; i < length; i++) {
5142 if ((*dst = AvARRAY(ary)[i+offset])) {
5144 sv_2mortal(*dst); /* free them eventually */
5147 *dst = &PL_sv_undef;
5153 *MARK = AvARRAY(ary)[offset+length-1];
5156 for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
5157 SvREFCNT_dec(*dst++); /* free them now */
5160 AvFILLp(ary) += diff;
5162 /* pull up or down? */
5164 if (offset < after) { /* easier to pull up */
5165 if (offset) { /* esp. if nothing to pull */
5166 src = &AvARRAY(ary)[offset-1];
5167 dst = src - diff; /* diff is negative */
5168 for (i = offset; i > 0; i--) /* can't trust Copy */
5172 AvARRAY(ary) = AvARRAY(ary) - diff; /* diff is negative */
5176 if (after) { /* anything to pull down? */
5177 src = AvARRAY(ary) + offset + length;
5178 dst = src + diff; /* diff is negative */
5179 Move(src, dst, after, SV*);
5181 dst = &AvARRAY(ary)[AvFILLp(ary)+1];
5182 /* avoid later double free */
5189 Copy( tmparyval, AvARRAY(ary) + offset, newlen, SV* );
5190 Safefree(tmparyval);
5193 else { /* no, expanding (or same) */
5194 SV** tmparyval = NULL;
5196 Newx(tmparyval, length, SV*); /* so remember deletion */
5197 Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
5200 if (diff > 0) { /* expanding */
5201 /* push up or down? */
5202 if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
5206 Move(src, dst, offset, SV*);
5208 AvARRAY(ary) = AvARRAY(ary) - diff;/* diff is positive */
5210 AvFILLp(ary) += diff;
5213 if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
5214 av_extend(ary, AvFILLp(ary) + diff);
5215 AvFILLp(ary) += diff;
5218 dst = AvARRAY(ary) + AvFILLp(ary);
5220 for (i = after; i; i--) {
5228 Copy( MARK, AvARRAY(ary) + offset, newlen, SV* );
5231 MARK = ORIGMARK + 1;
5232 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5234 const bool real = cBOOL(AvREAL(ary));
5236 EXTEND_MORTAL(length);
5237 for (i = 0, dst = MARK; i < length; i++) {
5238 if ((*dst = tmparyval[i])) {
5240 sv_2mortal(*dst); /* free them eventually */
5242 else *dst = &PL_sv_undef;
5248 else if (length--) {
5249 *MARK = tmparyval[length];
5252 while (length-- > 0)
5253 SvREFCNT_dec(tmparyval[length]);
5257 *MARK = &PL_sv_undef;
5258 Safefree(tmparyval);
5262 mg_set(MUTABLE_SV(ary));
5270 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
5271 AV * const ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5272 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5275 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5278 ENTER_with_name("call_PUSH");
5279 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5280 LEAVE_with_name("call_PUSH");
5284 if (SvREADONLY(ary) && MARK < SP) Perl_croak_no_modify();
5285 PL_delaymagic = DM_DELAY;
5286 for (++MARK; MARK <= SP; MARK++) {
5288 if (*MARK) SvGETMAGIC(*MARK);
5291 sv_setsv_nomg(sv, *MARK);
5292 av_store(ary, AvFILLp(ary)+1, sv);
5294 if (PL_delaymagic & DM_ARRAY_ISA)
5295 mg_set(MUTABLE_SV(ary));
5300 if (OP_GIMME(PL_op, 0) != G_VOID) {
5301 PUSHi( AvFILL(ary) + 1 );
5310 AV * const av = PL_op->op_flags & OPf_SPECIAL
5311 ? MUTABLE_AV(GvAV(PL_defgv)) : DEREF_PLAIN_ARRAY(MUTABLE_AV(POPs));
5312 SV * const sv = PL_op->op_type == OP_SHIFT ? av_shift(av) : av_pop(av);
5316 (void)sv_2mortal(sv);
5323 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
5324 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5325 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5328 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5331 ENTER_with_name("call_UNSHIFT");
5332 call_sv(SV_CONST(UNSHIFT),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5333 LEAVE_with_name("call_UNSHIFT");
5338 av_unshift(ary, SP - MARK);
5340 SV * const sv = newSVsv(*++MARK);
5341 (void)av_store(ary, i++, sv);
5345 if (OP_GIMME(PL_op, 0) != G_VOID) {
5346 PUSHi( AvFILL(ary) + 1 );
5355 if (GIMME == G_ARRAY) {
5356 if (PL_op->op_private & OPpREVERSE_INPLACE) {
5360 assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
5361 (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
5362 av = MUTABLE_AV((*SP));
5363 /* In-place reversing only happens in void context for the array
5364 * assignment. We don't need to push anything on the stack. */
5367 if (SvMAGICAL(av)) {
5369 SV *tmp = sv_newmortal();
5370 /* For SvCANEXISTDELETE */
5373 bool can_preserve = SvCANEXISTDELETE(av);
5375 for (i = 0, j = av_tindex(av); i < j; ++i, --j) {
5379 if (!av_exists(av, i)) {
5380 if (av_exists(av, j)) {
5381 SV *sv = av_delete(av, j, 0);
5382 begin = *av_fetch(av, i, TRUE);
5383 sv_setsv_mg(begin, sv);
5387 else if (!av_exists(av, j)) {
5388 SV *sv = av_delete(av, i, 0);
5389 end = *av_fetch(av, j, TRUE);
5390 sv_setsv_mg(end, sv);
5395 begin = *av_fetch(av, i, TRUE);
5396 end = *av_fetch(av, j, TRUE);
5397 sv_setsv(tmp, begin);
5398 sv_setsv_mg(begin, end);
5399 sv_setsv_mg(end, tmp);
5403 SV **begin = AvARRAY(av);
5406 SV **end = begin + AvFILLp(av);
5408 while (begin < end) {
5409 SV * const tmp = *begin;
5420 SV * const tmp = *MARK;
5424 /* safe as long as stack cannot get extended in the above */
5435 SvUTF8_off(TARG); /* decontaminate */
5437 do_join(TARG, &PL_sv_no, MARK, SP);
5439 sv_setsv(TARG, SP > MARK ? *SP : find_rundefsv());
5442 up = SvPV_force(TARG, len);
5444 if (DO_UTF8(TARG)) { /* first reverse each character */
5445 U8* s = (U8*)SvPVX(TARG);
5446 const U8* send = (U8*)(s + len);
5448 if (UTF8_IS_INVARIANT(*s)) {
5453 if (!utf8_to_uvchr_buf(s, send, 0))
5457 down = (char*)(s - 1);
5458 /* reverse this character */
5462 *down-- = (char)tmp;
5468 down = SvPVX(TARG) + len - 1;
5472 *down-- = (char)tmp;
5474 (void)SvPOK_only_UTF8(TARG);
5486 IV limit = POPi; /* note, negative is forever */
5487 SV * const sv = POPs;
5489 const char *s = SvPV_const(sv, len);
5490 const bool do_utf8 = DO_UTF8(sv);
5491 const char *strend = s + len;
5497 const STRLEN slen = do_utf8
5498 ? utf8_length((U8*)s, (U8*)strend)
5499 : (STRLEN)(strend - s);
5500 SSize_t maxiters = slen + 10;
5501 I32 trailing_empty = 0;
5503 const I32 origlimit = limit;
5506 const I32 gimme = GIMME_V;
5508 const I32 oldsave = PL_savestack_ix;
5509 U32 make_mortal = SVs_TEMP;
5514 Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
5519 DIE(aTHX_ "panic: pp_split, pm=%p, s=%p", pm, s);
5522 TAINT_IF(get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET &&
5523 (RX_EXTFLAGS(rx) & (RXf_WHITE | RXf_SKIPWHITE)));
5526 if (pm->op_pmreplrootu.op_pmtargetoff) {
5527 ary = GvAVn(MUTABLE_GV(PAD_SVl(pm->op_pmreplrootu.op_pmtargetoff)));
5530 if (pm->op_pmreplrootu.op_pmtargetgv) {
5531 ary = GvAVn(pm->op_pmreplrootu.op_pmtargetgv);
5542 if ((mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied))) {
5544 XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
5551 for (i = AvFILLp(ary); i >= 0; i--)
5552 AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
5554 /* temporarily switch stacks */
5555 SAVESWITCHSTACK(PL_curstack, ary);
5559 base = SP - PL_stack_base;
5561 if (RX_EXTFLAGS(rx) & RXf_SKIPWHITE) {
5563 while (isSPACE_utf8(s))
5566 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5567 while (isSPACE_LC(*s))
5575 if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
5579 gimme_scalar = gimme == G_SCALAR && !ary;
5582 limit = maxiters + 2;
5583 if (RX_EXTFLAGS(rx) & RXf_WHITE) {
5586 /* this one uses 'm' and is a negative test */
5588 while (m < strend && ! isSPACE_utf8(m) ) {
5589 const int t = UTF8SKIP(m);
5590 /* isSPACE_utf8 returns FALSE for malform utf8 */
5597 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5599 while (m < strend && !isSPACE_LC(*m))
5602 while (m < strend && !isSPACE(*m))
5615 dstr = newSVpvn_flags(s, m-s,
5616 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5620 /* skip the whitespace found last */
5622 s = m + UTF8SKIP(m);
5626 /* this one uses 's' and is a positive test */
5628 while (s < strend && isSPACE_utf8(s) )
5631 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5633 while (s < strend && isSPACE_LC(*s))
5636 while (s < strend && isSPACE(*s))
5641 else if (RX_EXTFLAGS(rx) & RXf_START_ONLY) {
5643 for (m = s; m < strend && *m != '\n'; m++)
5656 dstr = newSVpvn_flags(s, m-s,
5657 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5663 else if (RX_EXTFLAGS(rx) & RXf_NULL && !(s >= strend)) {
5665 Pre-extend the stack, either the number of bytes or
5666 characters in the string or a limited amount, triggered by:
5668 my ($x, $y) = split //, $str;
5672 if (!gimme_scalar) {
5673 const U32 items = limit - 1;
5682 /* keep track of how many bytes we skip over */
5692 dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
5705 dstr = newSVpvn(s, 1);
5721 else if (do_utf8 == (RX_UTF8(rx) != 0) &&
5722 (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) && !RX_NPARENS(rx)
5723 && (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
5724 && !(RX_EXTFLAGS(rx) & RXf_IS_ANCHORED)) {
5725 const int tail = (RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL);
5726 SV * const csv = CALLREG_INTUIT_STRING(rx);
5728 len = RX_MINLENRET(rx);
5729 if (len == 1 && !RX_UTF8(rx) && !tail) {
5730 const char c = *SvPV_nolen_const(csv);
5732 for (m = s; m < strend && *m != c; m++)
5743 dstr = newSVpvn_flags(s, m-s,
5744 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5747 /* The rx->minlen is in characters but we want to step
5748 * s ahead by bytes. */
5750 s = (char*)utf8_hop((U8*)m, len);
5752 s = m + len; /* Fake \n at the end */
5756 while (s < strend && --limit &&
5757 (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
5758 csv, multiline ? FBMrf_MULTILINE : 0)) )
5767 dstr = newSVpvn_flags(s, m-s,
5768 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5771 /* The rx->minlen is in characters but we want to step
5772 * s ahead by bytes. */
5774 s = (char*)utf8_hop((U8*)m, len);
5776 s = m + len; /* Fake \n at the end */
5781 maxiters += slen * RX_NPARENS(rx);
5782 while (s < strend && --limit)
5786 rex_return = CALLREGEXEC(rx, (char*)s, (char*)strend, (char*)orig, 1,
5789 if (rex_return == 0)
5791 TAINT_IF(RX_MATCH_TAINTED(rx));
5792 /* we never pass the REXEC_COPY_STR flag, so it should
5793 * never get copied */
5794 assert(!RX_MATCH_COPIED(rx));
5795 m = RX_OFFS(rx)[0].start + orig;
5804 dstr = newSVpvn_flags(s, m-s,
5805 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5808 if (RX_NPARENS(rx)) {
5810 for (i = 1; i <= (I32)RX_NPARENS(rx); i++) {
5811 s = RX_OFFS(rx)[i].start + orig;
5812 m = RX_OFFS(rx)[i].end + orig;
5814 /* japhy (07/27/01) -- the (m && s) test doesn't catch
5815 parens that didn't match -- they should be set to
5816 undef, not the empty string */
5824 if (m >= orig && s >= orig) {
5825 dstr = newSVpvn_flags(s, m-s,
5826 (do_utf8 ? SVf_UTF8 : 0)
5830 dstr = &PL_sv_undef; /* undef, not "" */
5836 s = RX_OFFS(rx)[0].end + orig;
5840 if (!gimme_scalar) {
5841 iters = (SP - PL_stack_base) - base;
5843 if (iters > maxiters)
5844 DIE(aTHX_ "Split loop");
5846 /* keep field after final delim? */
5847 if (s < strend || (iters && origlimit)) {
5848 if (!gimme_scalar) {
5849 const STRLEN l = strend - s;
5850 dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5855 else if (!origlimit) {
5857 iters -= trailing_empty;
5859 while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
5860 if (TOPs && !make_mortal)
5862 *SP-- = &PL_sv_undef;
5869 LEAVE_SCOPE(oldsave); /* may undo an earlier SWITCHSTACK */
5873 if (SvSMAGICAL(ary)) {
5875 mg_set(MUTABLE_SV(ary));
5878 if (gimme == G_ARRAY) {
5880 Copy(AvARRAY(ary), SP + 1, iters, SV*);
5887 ENTER_with_name("call_PUSH");
5888 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5889 LEAVE_with_name("call_PUSH");
5891 if (gimme == G_ARRAY) {
5893 /* EXTEND should not be needed - we just popped them */
5895 for (i=0; i < iters; i++) {
5896 SV **svp = av_fetch(ary, i, FALSE);
5897 PUSHs((svp) ? *svp : &PL_sv_undef);
5904 if (gimme == G_ARRAY)
5916 SV *const sv = PAD_SVl(PL_op->op_targ);
5918 if (SvPADSTALE(sv)) {
5921 RETURNOP(cLOGOP->op_other);
5923 RETURNOP(cLOGOP->op_next);
5933 if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
5934 || SvTYPE(retsv) == SVt_PVCV) {
5935 retsv = refto(retsv);
5942 PP(unimplemented_op)
5945 const Optype op_type = PL_op->op_type;
5946 /* Using OP_NAME() isn't going to be helpful here. Firstly, it doesn't cope
5947 with out of range op numbers - it only "special" cases op_custom.
5948 Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
5949 if we get here for a custom op then that means that the custom op didn't
5950 have an implementation. Given that OP_NAME() looks up the custom op
5951 by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
5952 registers &PL_unimplemented_op as the address of their custom op.
5953 NULL doesn't generate a useful error message. "custom" does. */
5954 const char *const name = op_type >= OP_max
5955 ? "[out of range]" : PL_op_name[PL_op->op_type];
5956 if(OP_IS_SOCKET(op_type))
5957 DIE(aTHX_ PL_no_sock_func, name);
5958 DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
5961 /* For sorting out arguments passed to a &CORE:: subroutine */
5965 int opnum = SvIOK(cSVOP_sv) ? (int)SvUV(cSVOP_sv) : 0;
5966 int defgv = PL_opargs[opnum] & OA_DEFGV ||opnum==OP_GLOB, whicharg = 0;
5967 AV * const at_ = GvAV(PL_defgv);
5968 SV **svp = at_ ? AvARRAY(at_) : NULL;
5969 I32 minargs = 0, maxargs = 0, numargs = at_ ? AvFILLp(at_)+1 : 0;
5970 I32 oa = opnum ? PL_opargs[opnum] >> OASHIFT : 0;
5971 bool seen_question = 0;
5972 const char *err = NULL;
5973 const bool pushmark = PL_op->op_private & OPpCOREARGS_PUSHMARK;
5975 /* Count how many args there are first, to get some idea how far to
5976 extend the stack. */
5978 if ((oa & 7) == OA_LIST) { maxargs = I32_MAX; break; }
5980 if (oa & OA_OPTIONAL) seen_question = 1;
5981 if (!seen_question) minargs++;
5985 if(numargs < minargs) err = "Not enough";
5986 else if(numargs > maxargs) err = "Too many";
5988 /* diag_listed_as: Too many arguments for %s */
5990 "%s arguments for %s", err,
5991 opnum ? PL_op_desc[opnum] : SvPV_nolen_const(cSVOP_sv)
5994 /* Reset the stack pointer. Without this, we end up returning our own
5995 arguments in list context, in addition to the values we are supposed
5996 to return. nextstate usually does this on sub entry, but we need
5997 to run the next op with the caller's hints, so we cannot have a
5999 SP = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
6001 if(!maxargs) RETURN;
6003 /* We do this here, rather than with a separate pushmark op, as it has
6004 to come in between two things this function does (stack reset and
6005 arg pushing). This seems the easiest way to do it. */
6008 (void)Perl_pp_pushmark(aTHX);
6011 EXTEND(SP, maxargs == I32_MAX ? numargs : maxargs);
6012 PUTBACK; /* The code below can die in various places. */
6014 oa = PL_opargs[opnum] >> OASHIFT;
6015 for (; oa&&(numargs||!pushmark); (void)(numargs&&(++svp,--numargs))) {
6020 if (!numargs && defgv && whicharg == minargs + 1) {
6021 PUSHs(find_rundefsv2(
6022 find_runcv_where(FIND_RUNCV_level_eq, 1, NULL),
6023 cxstack[cxstack_ix].blk_oldcop->cop_seq
6026 else PUSHs(numargs ? svp && *svp ? *svp : &PL_sv_undef : NULL);
6030 PUSHs(svp && *svp ? *svp : &PL_sv_undef);
6035 if (!svp || !*svp || !SvROK(*svp)
6036 || SvTYPE(SvRV(*svp)) != SVt_PVHV)
6038 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
6039 "Type of arg %d to &CORE::%s must be hash reference",
6040 whicharg, OP_DESC(PL_op->op_next)
6045 if (!numargs) PUSHs(NULL);
6046 else if(svp && *svp && SvROK(*svp) && isGV_with_GP(SvRV(*svp)))
6047 /* no magic here, as the prototype will have added an extra
6048 refgen and we just want what was there before that */
6051 const bool constr = PL_op->op_private & whicharg;
6053 svp && *svp ? *svp : &PL_sv_undef,
6054 constr, cBOOL(CopHINTS_get(PL_curcop) & HINT_STRICT_REFS),
6060 if (!numargs) goto try_defsv;
6062 const bool wantscalar =
6063 PL_op->op_private & OPpCOREARGS_SCALARMOD;
6064 if (!svp || !*svp || !SvROK(*svp)
6065 /* We have to permit globrefs even for the \$ proto, as
6066 *foo is indistinguishable from ${\*foo}, and the proto-
6067 type permits the latter. */
6068 || SvTYPE(SvRV(*svp)) > (
6069 wantscalar ? SVt_PVLV
6070 : opnum == OP_LOCK || opnum == OP_UNDEF
6076 "Type of arg %d to &CORE::%s must be %s",
6077 whicharg, PL_op_name[opnum],
6079 ? "scalar reference"
6080 : opnum == OP_LOCK || opnum == OP_UNDEF
6081 ? "reference to one of [$@%&*]"
6082 : "reference to one of [$@%*]"
6085 if (opnum == OP_UNDEF && SvRV(*svp) == (SV *)PL_defgv
6086 && cxstack[cxstack_ix].cx_type & CXp_HASARGS) {
6087 /* Undo @_ localisation, so that sub exit does not undo
6088 part of our undeffing. */
6089 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
6091 cx->cx_type &= ~ CXp_HASARGS;
6092 assert(!AvREAL(cx->blk_sub.argarray));
6097 DIE(aTHX_ "panic: unknown OA_*: %x", (unsigned)(oa&7));
6109 if (PL_op->op_private & OPpOFFBYONE) {
6110 cv = find_runcv_where(FIND_RUNCV_level_eq, 1, NULL);
6112 else cv = find_runcv(NULL);
6113 XPUSHs(CvEVAL(cv) ? &PL_sv_undef : sv_2mortal(newRV((SV *)cv)));
6120 * c-indentation-style: bsd
6122 * indent-tabs-mode: nil
6125 * ex: set ts=8 sts=4 sw=4 et: