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 */
58 if (GIMME_V == G_SCALAR)
69 assert(SvTYPE(TARG) == SVt_PVAV);
70 if (UNLIKELY( PL_op->op_private & OPpLVAL_INTRO ))
71 if (LIKELY( !(PL_op->op_private & OPpPAD_STATE) ))
72 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
74 if (PL_op->op_flags & OPf_REF) {
77 } else if (PL_op->op_private & OPpMAYBE_LVSUB) {
78 const I32 flags = is_lvalue_sub();
79 if (flags && !(flags & OPpENTERSUB_INARGS)) {
80 if (GIMME == G_SCALAR)
81 /* diag_listed_as: Can't return %s to lvalue scalar context */
82 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
88 if (gimme == G_ARRAY) {
89 /* XXX see also S_pushav in pp_hot.c */
90 const Size_t maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
92 if (SvMAGICAL(TARG)) {
94 for (i=0; i < maxarg; i++) {
95 SV * const * const svp = av_fetch(MUTABLE_AV(TARG), i, FALSE);
96 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
101 for (i=0; i < (PADOFFSET)maxarg; i++) {
102 SV * const sv = AvARRAY((const AV *)TARG)[i];
103 SP[i+1] = sv ? sv : &PL_sv_undef;
108 else if (gimme == G_SCALAR) {
109 SV* const sv = sv_newmortal();
110 const SSize_t maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
111 sv_setiv(sv, maxarg);
122 assert(SvTYPE(TARG) == SVt_PVHV);
124 if (UNLIKELY( PL_op->op_private & OPpLVAL_INTRO ))
125 if (LIKELY( !(PL_op->op_private & OPpPAD_STATE) ))
126 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
127 if (PL_op->op_flags & OPf_REF)
129 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
130 const I32 flags = is_lvalue_sub();
131 if (flags && !(flags & OPpENTERSUB_INARGS)) {
132 if (GIMME == G_SCALAR)
133 /* diag_listed_as: Can't return %s to lvalue scalar context */
134 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
139 if (gimme == G_ARRAY) {
140 RETURNOP(Perl_do_kv(aTHX));
142 else if ((PL_op->op_private & OPpTRUEBOOL
143 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
144 && block_gimme() == G_VOID ))
145 && (!SvRMAGICAL(TARG) || !mg_find(TARG, PERL_MAGIC_tied)))
146 SETs(HvUSEDKEYS(TARG) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
147 else if (gimme == G_SCALAR) {
148 SV* const sv = Perl_hv_scalar(aTHX_ MUTABLE_HV(TARG));
157 assert(SvTYPE(TARG) == SVt_PVCV);
165 SvPADSTALE_off(TARG);
173 mg_find(PadlistNAMESARRAY(CvPADLIST(find_runcv(NULL)))[ARGTARG],
175 assert(SvTYPE(TARG) == SVt_PVCV);
178 if (CvISXSUB(mg->mg_obj)) { /* constant */
179 /* XXX Should we clone it here? */
180 /* If this changes to use SAVECLEARSV, we can move the SAVECLEARSV
181 to introcv and remove the SvPADSTALE_off. */
182 SAVEPADSVANDMORTALIZE(ARGTARG);
183 PAD_SVl(ARGTARG) = SvREFCNT_inc_simple_NN(mg->mg_obj);
186 if (CvROOT(mg->mg_obj)) {
187 assert(CvCLONE(mg->mg_obj));
188 assert(!CvCLONED(mg->mg_obj));
190 cv_clone_into((CV *)mg->mg_obj,(CV *)TARG);
191 SAVECLEARSV(PAD_SVl(ARGTARG));
198 static const char S_no_symref_sv[] =
199 "Can't use string (\"%" SVf32 "\"%s) as %s ref while \"strict refs\" in use";
201 /* In some cases this function inspects PL_op. If this function is called
202 for new op types, more bool parameters may need to be added in place of
205 When noinit is true, the absence of a gv will cause a retval of undef.
206 This is unrelated to the cv-to-gv assignment case.
210 S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict,
213 if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv);
216 sv = amagic_deref_call(sv, to_gv_amg);
220 if (SvTYPE(sv) == SVt_PVIO) {
221 GV * const gv = MUTABLE_GV(sv_newmortal());
222 gv_init(gv, 0, "__ANONIO__", 10, 0);
223 GvIOp(gv) = MUTABLE_IO(sv);
224 SvREFCNT_inc_void_NN(sv);
227 else if (!isGV_with_GP(sv)) {
228 Perl_die(aTHX_ "Not a GLOB reference");
232 if (!isGV_with_GP(sv)) {
234 /* If this is a 'my' scalar and flag is set then vivify
237 if (vivify_sv && sv != &PL_sv_undef) {
240 Perl_croak_no_modify();
241 if (cUNOP->op_targ) {
242 SV * const namesv = PAD_SV(cUNOP->op_targ);
243 HV *stash = CopSTASH(PL_curcop);
244 if (SvTYPE(stash) != SVt_PVHV) stash = NULL;
245 gv = MUTABLE_GV(newSV(0));
246 gv_init_sv(gv, stash, namesv, 0);
249 const char * const name = CopSTASHPV(PL_curcop);
250 gv = newGVgen_flags(name,
251 HvNAMEUTF8(CopSTASH(PL_curcop)) ? SVf_UTF8 : 0 );
252 SvREFCNT_inc_simple_void_NN(gv);
254 prepare_SV_for_RV(sv);
255 SvRV_set(sv, MUTABLE_SV(gv));
260 if (PL_op->op_flags & OPf_REF || strict) {
261 Perl_die(aTHX_ PL_no_usym, "a symbol");
263 if (ckWARN(WARN_UNINITIALIZED))
269 if (!(sv = MUTABLE_SV(gv_fetchsv_nomg(
270 sv, GV_ADDMG, SVt_PVGV
279 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""),
283 if ((PL_op->op_private & (OPpLVAL_INTRO|OPpDONT_INIT_GV))
284 == OPpDONT_INIT_GV) {
285 /* We are the target of a coderef assignment. Return
286 the scalar unchanged, and let pp_sasssign deal with
290 sv = MUTABLE_SV(gv_fetchsv_nomg(sv, GV_ADD, SVt_PVGV));
292 /* FAKE globs in the symbol table cause weird bugs (#77810) */
296 if (SvFAKE(sv) && !(PL_op->op_private & OPpALLOW_FAKE)) {
297 SV *newsv = sv_newmortal();
298 sv_setsv_flags(newsv, sv, 0);
310 sv, PL_op->op_private & OPpDEREF,
311 PL_op->op_private & HINT_STRICT_REFS,
312 ((PL_op->op_flags & OPf_SPECIAL) && !(PL_op->op_flags & OPf_MOD))
313 || PL_op->op_type == OP_READLINE
315 if (PL_op->op_private & OPpLVAL_INTRO)
316 save_gp(MUTABLE_GV(sv), !(PL_op->op_flags & OPf_SPECIAL));
321 /* Helper function for pp_rv2sv and pp_rv2av */
323 Perl_softref2xv(pTHX_ SV *const sv, const char *const what,
324 const svtype type, SV ***spp)
328 PERL_ARGS_ASSERT_SOFTREF2XV;
330 if (PL_op->op_private & HINT_STRICT_REFS) {
332 Perl_die(aTHX_ S_no_symref_sv, sv,
333 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""), what);
335 Perl_die(aTHX_ PL_no_usym, what);
339 PL_op->op_flags & OPf_REF
341 Perl_die(aTHX_ PL_no_usym, what);
342 if (ckWARN(WARN_UNINITIALIZED))
344 if (type != SVt_PV && GIMME_V == G_ARRAY) {
348 **spp = &PL_sv_undef;
351 if ((PL_op->op_flags & OPf_SPECIAL) &&
352 !(PL_op->op_flags & OPf_MOD))
354 if (!(gv = gv_fetchsv_nomg(sv, GV_ADDMG, type)))
356 **spp = &PL_sv_undef;
361 gv = gv_fetchsv_nomg(sv, GV_ADD, type);
374 sv = amagic_deref_call(sv, to_sv_amg);
378 switch (SvTYPE(sv)) {
384 DIE(aTHX_ "Not a SCALAR reference");
391 if (!isGV_with_GP(gv)) {
392 gv = Perl_softref2xv(aTHX_ sv, "a SCALAR", SVt_PV, &sp);
398 if (PL_op->op_flags & OPf_MOD) {
399 if (PL_op->op_private & OPpLVAL_INTRO) {
400 if (cUNOP->op_first->op_type == OP_NULL)
401 sv = save_scalar(MUTABLE_GV(TOPs));
403 sv = save_scalar(gv);
405 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
407 else if (PL_op->op_private & OPpDEREF)
408 sv = vivify_ref(sv, PL_op->op_private & OPpDEREF);
417 AV * const av = MUTABLE_AV(TOPs);
418 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
420 SV ** const sv = Perl_av_arylen_p(aTHX_ MUTABLE_AV(av));
422 *sv = newSV_type(SVt_PVMG);
423 sv_magic(*sv, MUTABLE_SV(av), PERL_MAGIC_arylen, NULL, 0);
427 SETs(sv_2mortal(newSViv(AvFILL(MUTABLE_AV(av)))));
436 if (PL_op->op_flags & OPf_MOD || LVRET) {
437 SV * const ret = sv_2mortal(newSV_type(SVt_PVLV));/* Not TARG RT#67838 */
438 sv_magic(ret, NULL, PERL_MAGIC_pos, NULL, 0);
440 LvTARG(ret) = SvREFCNT_inc_simple(sv);
441 PUSHs(ret); /* no SvSETMAGIC */
445 const MAGIC * const mg = mg_find_mglob(sv);
446 if (mg && mg->mg_len != -1) {
448 STRLEN i = mg->mg_len;
449 if (mg->mg_flags & MGf_BYTES && DO_UTF8(sv))
450 i = sv_pos_b2u_flags(sv, i, SV_GMAGIC|SV_CONST_RETURN);
463 const I32 flags = (PL_op->op_flags & OPf_SPECIAL)
465 : ((PL_op->op_private & (OPpLVAL_INTRO|OPpMAY_RETURN_CONSTANT))
466 == OPpMAY_RETURN_CONSTANT)
469 /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
470 /* (But not in defined().) */
472 CV *cv = sv_2cv(TOPs, &stash_unused, &gv, flags);
474 else if ((flags == (GV_ADD|GV_NOEXPAND)) && gv && SvROK(gv)) {
475 cv = SvTYPE(SvRV(gv)) == SVt_PVCV
476 ? MUTABLE_CV(SvRV(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)
559 PERL_ARGS_ASSERT_REFTO;
561 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
564 if (!(sv = LvTARG(sv)))
567 SvREFCNT_inc_void_NN(sv);
569 else if (SvTYPE(sv) == SVt_PVAV) {
570 if (!AvREAL((const AV *)sv) && AvREIFY((const AV *)sv))
571 av_reify(MUTABLE_AV(sv));
573 SvREFCNT_inc_void_NN(sv);
575 else if (SvPADTMP(sv)) {
576 assert(!IS_PADGV(sv));
581 SvREFCNT_inc_void_NN(sv);
584 sv_upgrade(rv, SVt_IV);
593 SV * const sv = TOPs;
601 /* use the return value that is in a register, its the same as TARG */
602 TARG = sv_ref(TARG,SvRV(sv),TRUE);
617 stash = CopSTASH(PL_curcop);
618 if (SvTYPE(stash) != SVt_PVHV)
619 Perl_croak(aTHX_ "Attempt to bless into a freed package");
622 SV * const ssv = POPs;
626 if (!ssv) goto curstash;
629 if (!SvAMAGIC(ssv)) {
631 Perl_croak(aTHX_ "Attempt to bless into a reference");
633 /* SvAMAGIC is on here, but it only means potentially overloaded,
634 so after stringification: */
635 ptr = SvPV_nomg_const(ssv,len);
636 /* We need to check the flag again: */
637 if (!SvAMAGIC(ssv)) goto frog;
639 else ptr = SvPV_nomg_const(ssv,len);
641 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
642 "Explicit blessing to '' (assuming package main)");
643 stash = gv_stashpvn(ptr, len, GV_ADD|SvUTF8(ssv));
646 (void)sv_bless(TOPs, stash);
656 const char * const elem = SvPV_const(sv, len);
657 GV * const gv = MUTABLE_GV(POPs);
662 /* elem will always be NUL terminated. */
663 const char * const second_letter = elem + 1;
666 if (len == 5 && strEQ(second_letter, "RRAY"))
668 tmpRef = MUTABLE_SV(GvAV(gv));
669 if (tmpRef && !AvREAL((const AV *)tmpRef)
670 && AvREIFY((const AV *)tmpRef))
671 av_reify(MUTABLE_AV(tmpRef));
675 if (len == 4 && strEQ(second_letter, "ODE"))
676 tmpRef = MUTABLE_SV(GvCVu(gv));
679 if (len == 10 && strEQ(second_letter, "ILEHANDLE")) {
680 /* finally deprecated in 5.8.0 */
681 deprecate("*glob{FILEHANDLE}");
682 tmpRef = MUTABLE_SV(GvIOp(gv));
685 if (len == 6 && strEQ(second_letter, "ORMAT"))
686 tmpRef = MUTABLE_SV(GvFORM(gv));
689 if (len == 4 && strEQ(second_letter, "LOB"))
690 tmpRef = MUTABLE_SV(gv);
693 if (len == 4 && strEQ(second_letter, "ASH"))
694 tmpRef = MUTABLE_SV(GvHV(gv));
697 if (*second_letter == 'O' && !elem[2] && len == 2)
698 tmpRef = MUTABLE_SV(GvIOp(gv));
701 if (len == 4 && strEQ(second_letter, "AME"))
702 sv = newSVhek(GvNAME_HEK(gv));
705 if (len == 7 && strEQ(second_letter, "ACKAGE")) {
706 const HV * const stash = GvSTASH(gv);
707 const HEK * const hek = stash ? HvNAME_HEK(stash) : NULL;
708 sv = hek ? newSVhek(hek) : newSVpvs("__ANON__");
712 if (len == 6 && strEQ(second_letter, "CALAR"))
727 /* Pattern matching */
735 if (len == 0 || len > I32_MAX || !SvPOK(sv) || SvUTF8(sv) || SvVALID(sv)) {
736 /* Historically, study was skipped in these cases. */
740 /* Make study a no-op. It's no longer useful and its existence
741 complicates matters elsewhere. */
750 if (PL_op->op_flags & OPf_STACKED)
752 else if (PL_op->op_private & OPpTARGET_MY)
758 if(PL_op->op_type == OP_TRANSR) {
760 const char * const pv = SvPV(sv,len);
761 SV * const newsv = newSVpvn_flags(pv, len, SVs_TEMP|SvUTF8(sv));
766 TARG = sv_newmortal();
772 /* Lvalue operators. */
775 S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
780 PERL_ARGS_ASSERT_DO_CHOMP;
782 if (chomping && (RsSNARF(PL_rs) || RsRECORD(PL_rs)))
784 if (SvTYPE(sv) == SVt_PVAV) {
786 AV *const av = MUTABLE_AV(sv);
787 const I32 max = AvFILL(av);
789 for (i = 0; i <= max; i++) {
790 sv = MUTABLE_SV(av_fetch(av, i, FALSE));
791 if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
792 do_chomp(retval, sv, chomping);
796 else if (SvTYPE(sv) == SVt_PVHV) {
797 HV* const hv = MUTABLE_HV(sv);
799 (void)hv_iterinit(hv);
800 while ((entry = hv_iternext(hv)))
801 do_chomp(retval, hv_iterval(hv,entry), chomping);
804 else if (SvREADONLY(sv)) {
805 Perl_croak_no_modify();
807 else if (SvIsCOW(sv)) {
808 sv_force_normal_flags(sv, 0);
813 /* XXX, here sv is utf8-ized as a side-effect!
814 If encoding.pm is used properly, almost string-generating
815 operations, including literal strings, chr(), input data, etc.
816 should have been utf8-ized already, right?
818 sv_recode_to_utf8(sv, PL_encoding);
824 char *temp_buffer = NULL;
833 while (len && s[-1] == '\n') {
840 STRLEN rslen, rs_charlen;
841 const char *rsptr = SvPV_const(PL_rs, rslen);
843 rs_charlen = SvUTF8(PL_rs)
847 if (SvUTF8(PL_rs) != SvUTF8(sv)) {
848 /* Assumption is that rs is shorter than the scalar. */
850 /* RS is utf8, scalar is 8 bit. */
852 temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
855 /* Cannot downgrade, therefore cannot possibly match
857 assert (temp_buffer == rsptr);
863 else if (PL_encoding) {
864 /* RS is 8 bit, encoding.pm is used.
865 * Do not recode PL_rs as a side-effect. */
866 svrecode = newSVpvn(rsptr, rslen);
867 sv_recode_to_utf8(svrecode, PL_encoding);
868 rsptr = SvPV_const(svrecode, rslen);
869 rs_charlen = sv_len_utf8(svrecode);
872 /* RS is 8 bit, scalar is utf8. */
873 temp_buffer = (char*)bytes_to_utf8((U8*)rsptr, &rslen);
887 if (memNE(s, rsptr, rslen))
889 SvIVX(retval) += rs_charlen;
892 s = SvPV_force_nomg_nolen(sv);
900 SvREFCNT_dec(svrecode);
902 Safefree(temp_buffer);
904 if (len && !SvPOK(sv))
905 s = SvPV_force_nomg(sv, len);
908 char * const send = s + len;
909 char * const start = s;
911 while (s > start && UTF8_IS_CONTINUATION(*s))
913 if (is_utf8_string((U8*)s, send - s)) {
914 sv_setpvn(retval, s, send - s);
916 SvCUR_set(sv, s - start);
922 sv_setpvs(retval, "");
926 sv_setpvn(retval, s, 1);
933 sv_setpvs(retval, "");
941 const bool chomping = PL_op->op_type == OP_SCHOMP;
945 do_chomp(TARG, TOPs, chomping);
952 dSP; dMARK; dTARGET; dORIGMARK;
953 const bool chomping = PL_op->op_type == OP_CHOMP;
958 do_chomp(TARG, *++MARK, chomping);
969 if (!PL_op->op_private) {
978 if (SvTHINKFIRST(sv))
979 sv_force_normal_flags(sv, SV_COW_DROP_PV|SV_IMMEDIATE_UNREF);
981 switch (SvTYPE(sv)) {
985 av_undef(MUTABLE_AV(sv));
988 hv_undef(MUTABLE_HV(sv));
991 if (cv_const_sv((const CV *)sv))
992 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
993 "Constant subroutine %"SVf" undefined",
994 SVfARG(CvANON((const CV *)sv)
995 ? newSVpvs_flags("(anonymous)", SVs_TEMP)
996 : sv_2mortal(newSVhek(
998 ? CvNAME_HEK((CV *)sv)
999 : GvENAME_HEK(CvGV((const CV *)sv))
1005 /* let user-undef'd sub keep its identity */
1006 GV* const gv = CvGV((const CV *)sv);
1007 HEK * const hek = CvNAME_HEK((CV *)sv);
1008 if (hek) share_hek_hek(hek);
1009 cv_undef(MUTABLE_CV(sv));
1010 if (gv) CvGV_set(MUTABLE_CV(sv), gv);
1012 SvANY((CV *)sv)->xcv_gv_u.xcv_hek = hek;
1018 assert(isGV_with_GP(sv));
1019 assert(!SvFAKE(sv));
1024 /* undef *Pkg::meth_name ... */
1026 = GvCVu((const GV *)sv) && (stash = GvSTASH((const GV *)sv))
1027 && HvENAME_get(stash);
1029 if((stash = GvHV((const GV *)sv))) {
1030 if(HvENAME_get(stash))
1031 SvREFCNT_inc_simple_void_NN(sv_2mortal((SV *)stash));
1035 SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
1036 gp_free(MUTABLE_GV(sv));
1038 GvGP_set(sv, gp_ref(gp));
1039 #ifndef PERL_DONT_CREATE_GVSV
1040 GvSV(sv) = newSV(0);
1042 GvLINE(sv) = CopLINE(PL_curcop);
1043 GvEGV(sv) = MUTABLE_GV(sv);
1047 mro_package_moved(NULL, stash, (const GV *)sv, 0);
1049 /* undef *Foo::ISA */
1050 if( strEQ(GvNAME((const GV *)sv), "ISA")
1051 && (stash = GvSTASH((const GV *)sv))
1052 && (method_changed || HvENAME(stash)) )
1053 mro_isa_changed_in(stash);
1054 else if(method_changed)
1055 mro_method_changed_in(
1056 GvSTASH((const GV *)sv)
1062 if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) {
1078 PL_op->op_type == OP_POSTINC || PL_op->op_type == OP_I_POSTINC;
1079 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
1080 Perl_croak_no_modify();
1082 TARG = sv_newmortal();
1083 sv_setsv(TARG, TOPs);
1084 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1085 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
1087 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
1088 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1092 else sv_dec_nomg(TOPs);
1094 /* special case for undef: see thread at 2003-03/msg00536.html in archive */
1095 if (inc && !SvOK(TARG))
1101 /* Ordinary operators. */
1105 dSP; dATARGET; SV *svl, *svr;
1106 #ifdef PERL_PRESERVE_IVUV
1109 tryAMAGICbin_MG(pow_amg, AMGf_assign|AMGf_numeric);
1112 #ifdef PERL_PRESERVE_IVUV
1113 /* For integer to integer power, we do the calculation by hand wherever
1114 we're sure it is safe; otherwise we call pow() and try to convert to
1115 integer afterwards. */
1116 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1124 const IV iv = SvIVX(svr);
1128 goto float_it; /* Can't do negative powers this way. */
1132 baseuok = SvUOK(svl);
1134 baseuv = SvUVX(svl);
1136 const IV iv = SvIVX(svl);
1139 baseuok = TRUE; /* effectively it's a UV now */
1141 baseuv = -iv; /* abs, baseuok == false records sign */
1144 /* now we have integer ** positive integer. */
1147 /* foo & (foo - 1) is zero only for a power of 2. */
1148 if (!(baseuv & (baseuv - 1))) {
1149 /* We are raising power-of-2 to a positive integer.
1150 The logic here will work for any base (even non-integer
1151 bases) but it can be less accurate than
1152 pow (base,power) or exp (power * log (base)) when the
1153 intermediate values start to spill out of the mantissa.
1154 With powers of 2 we know this can't happen.
1155 And powers of 2 are the favourite thing for perl
1156 programmers to notice ** not doing what they mean. */
1158 NV base = baseuok ? baseuv : -(NV)baseuv;
1163 while (power >>= 1) {
1171 SvIV_please_nomg(svr);
1174 unsigned int highbit = 8 * sizeof(UV);
1175 unsigned int diff = 8 * sizeof(UV);
1176 while (diff >>= 1) {
1178 if (baseuv >> highbit) {
1182 /* we now have baseuv < 2 ** highbit */
1183 if (power * highbit <= 8 * sizeof(UV)) {
1184 /* result will definitely fit in UV, so use UV math
1185 on same algorithm as above */
1188 const bool odd_power = cBOOL(power & 1);
1192 while (power >>= 1) {
1199 if (baseuok || !odd_power)
1200 /* answer is positive */
1202 else if (result <= (UV)IV_MAX)
1203 /* answer negative, fits in IV */
1204 SETi( -(IV)result );
1205 else if (result == (UV)IV_MIN)
1206 /* 2's complement assumption: special case IV_MIN */
1209 /* answer negative, doesn't fit */
1210 SETn( -(NV)result );
1218 NV right = SvNV_nomg(svr);
1219 NV left = SvNV_nomg(svl);
1222 #if defined(USE_LONG_DOUBLE) && defined(HAS_AIX_POWL_NEG_BASE_BUG)
1224 We are building perl with long double support and are on an AIX OS
1225 afflicted with a powl() function that wrongly returns NaNQ for any
1226 negative base. This was reported to IBM as PMR #23047-379 on
1227 03/06/2006. The problem exists in at least the following versions
1228 of AIX and the libm fileset, and no doubt others as well:
1230 AIX 4.3.3-ML10 bos.adt.libm 4.3.3.50
1231 AIX 5.1.0-ML04 bos.adt.libm 5.1.0.29
1232 AIX 5.2.0 bos.adt.libm 5.2.0.85
1234 So, until IBM fixes powl(), we provide the following workaround to
1235 handle the problem ourselves. Our logic is as follows: for
1236 negative bases (left), we use fmod(right, 2) to check if the
1237 exponent is an odd or even integer:
1239 - if odd, powl(left, right) == -powl(-left, right)
1240 - if even, powl(left, right) == powl(-left, right)
1242 If the exponent is not an integer, the result is rightly NaNQ, so
1243 we just return that (as NV_NAN).
1247 NV mod2 = Perl_fmod( right, 2.0 );
1248 if (mod2 == 1.0 || mod2 == -1.0) { /* odd integer */
1249 SETn( -Perl_pow( -left, right) );
1250 } else if (mod2 == 0.0) { /* even integer */
1251 SETn( Perl_pow( -left, right) );
1252 } else { /* fractional power */
1256 SETn( Perl_pow( left, right) );
1259 SETn( Perl_pow( left, right) );
1260 #endif /* HAS_AIX_POWL_NEG_BASE_BUG */
1262 #ifdef PERL_PRESERVE_IVUV
1264 SvIV_please_nomg(svr);
1272 dSP; dATARGET; SV *svl, *svr;
1273 tryAMAGICbin_MG(mult_amg, AMGf_assign|AMGf_numeric);
1276 #ifdef PERL_PRESERVE_IVUV
1277 if (SvIV_please_nomg(svr)) {
1278 /* Unless the left argument is integer in range we are going to have to
1279 use NV maths. Hence only attempt to coerce the right argument if
1280 we know the left is integer. */
1281 /* Left operand is defined, so is it IV? */
1282 if (SvIV_please_nomg(svl)) {
1283 bool auvok = SvUOK(svl);
1284 bool buvok = SvUOK(svr);
1285 const UV topmask = (~ (UV)0) << (4 * sizeof (UV));
1286 const UV botmask = ~((~ (UV)0) << (4 * sizeof (UV)));
1295 const IV aiv = SvIVX(svl);
1298 auvok = TRUE; /* effectively it's a UV now */
1300 alow = -aiv; /* abs, auvok == false records sign */
1306 const IV biv = SvIVX(svr);
1309 buvok = TRUE; /* effectively it's a UV now */
1311 blow = -biv; /* abs, buvok == false records sign */
1315 /* If this does sign extension on unsigned it's time for plan B */
1316 ahigh = alow >> (4 * sizeof (UV));
1318 bhigh = blow >> (4 * sizeof (UV));
1320 if (ahigh && bhigh) {
1322 /* eg 32 bit is at least 0x10000 * 0x10000 == 0x100000000
1323 which is overflow. Drop to NVs below. */
1324 } else if (!ahigh && !bhigh) {
1325 /* eg 32 bit is at most 0xFFFF * 0xFFFF == 0xFFFE0001
1326 so the unsigned multiply cannot overflow. */
1327 const UV product = alow * blow;
1328 if (auvok == buvok) {
1329 /* -ve * -ve or +ve * +ve gives a +ve result. */
1333 } else if (product <= (UV)IV_MIN) {
1334 /* 2s complement assumption that (UV)-IV_MIN is correct. */
1335 /* -ve result, which could overflow an IV */
1337 SETi( -(IV)product );
1339 } /* else drop to NVs below. */
1341 /* One operand is large, 1 small */
1344 /* swap the operands */
1346 bhigh = blow; /* bhigh now the temp var for the swap */
1350 /* now, ((ahigh * blow) << half_UV_len) + (alow * blow)
1351 multiplies can't overflow. shift can, add can, -ve can. */
1352 product_middle = ahigh * blow;
1353 if (!(product_middle & topmask)) {
1354 /* OK, (ahigh * blow) won't lose bits when we shift it. */
1356 product_middle <<= (4 * sizeof (UV));
1357 product_low = alow * blow;
1359 /* as for pp_add, UV + something mustn't get smaller.
1360 IIRC ANSI mandates this wrapping *behaviour* for
1361 unsigned whatever the actual representation*/
1362 product_low += product_middle;
1363 if (product_low >= product_middle) {
1364 /* didn't overflow */
1365 if (auvok == buvok) {
1366 /* -ve * -ve or +ve * +ve gives a +ve result. */
1368 SETu( product_low );
1370 } else if (product_low <= (UV)IV_MIN) {
1371 /* 2s complement assumption again */
1372 /* -ve result, which could overflow an IV */
1374 SETi( -(IV)product_low );
1376 } /* else drop to NVs below. */
1378 } /* product_middle too large */
1379 } /* ahigh && bhigh */
1384 NV right = SvNV_nomg(svr);
1385 NV left = SvNV_nomg(svl);
1387 SETn( left * right );
1394 dSP; dATARGET; SV *svl, *svr;
1395 tryAMAGICbin_MG(div_amg, AMGf_assign|AMGf_numeric);
1398 /* Only try to do UV divide first
1399 if ((SLOPPYDIVIDE is true) or
1400 (PERL_PRESERVE_IVUV is true and one or both SV is a UV too large
1402 The assumption is that it is better to use floating point divide
1403 whenever possible, only doing integer divide first if we can't be sure.
1404 If NV_PRESERVES_UV is true then we know at compile time that no UV
1405 can be too large to preserve, so don't need to compile the code to
1406 test the size of UVs. */
1409 # define PERL_TRY_UV_DIVIDE
1410 /* ensure that 20./5. == 4. */
1412 # ifdef PERL_PRESERVE_IVUV
1413 # ifndef NV_PRESERVES_UV
1414 # define PERL_TRY_UV_DIVIDE
1419 #ifdef PERL_TRY_UV_DIVIDE
1420 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1421 bool left_non_neg = SvUOK(svl);
1422 bool right_non_neg = SvUOK(svr);
1426 if (right_non_neg) {
1430 const IV biv = SvIVX(svr);
1433 right_non_neg = TRUE; /* effectively it's a UV now */
1439 /* historically undef()/0 gives a "Use of uninitialized value"
1440 warning before dieing, hence this test goes here.
1441 If it were immediately before the second SvIV_please, then
1442 DIE() would be invoked before left was even inspected, so
1443 no inspection would give no warning. */
1445 DIE(aTHX_ "Illegal division by zero");
1451 const IV aiv = SvIVX(svl);
1454 left_non_neg = TRUE; /* effectively it's a UV now */
1463 /* For sloppy divide we always attempt integer division. */
1465 /* Otherwise we only attempt it if either or both operands
1466 would not be preserved by an NV. If both fit in NVs
1467 we fall through to the NV divide code below. However,
1468 as left >= right to ensure integer result here, we know that
1469 we can skip the test on the right operand - right big
1470 enough not to be preserved can't get here unless left is
1473 && (left > ((UV)1 << NV_PRESERVES_UV_BITS))
1476 /* Integer division can't overflow, but it can be imprecise. */
1477 const UV result = left / right;
1478 if (result * right == left) {
1479 SP--; /* result is valid */
1480 if (left_non_neg == right_non_neg) {
1481 /* signs identical, result is positive. */
1485 /* 2s complement assumption */
1486 if (result <= (UV)IV_MIN)
1487 SETi( -(IV)result );
1489 /* It's exact but too negative for IV. */
1490 SETn( -(NV)result );
1493 } /* tried integer divide but it was not an integer result */
1494 } /* else (PERL_ABS(result) < 1.0) or (both UVs in range for NV) */
1495 } /* one operand wasn't SvIOK */
1496 #endif /* PERL_TRY_UV_DIVIDE */
1498 NV right = SvNV_nomg(svr);
1499 NV left = SvNV_nomg(svl);
1500 (void)POPs;(void)POPs;
1501 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1502 if (! Perl_isnan(right) && right == 0.0)
1506 DIE(aTHX_ "Illegal division by zero");
1507 PUSHn( left / right );
1515 tryAMAGICbin_MG(modulo_amg, AMGf_assign|AMGf_numeric);
1519 bool left_neg = FALSE;
1520 bool right_neg = FALSE;
1521 bool use_double = FALSE;
1522 bool dright_valid = FALSE;
1525 SV * const svr = TOPs;
1526 SV * const svl = TOPm1s;
1527 if (SvIV_please_nomg(svr)) {
1528 right_neg = !SvUOK(svr);
1532 const IV biv = SvIVX(svr);
1535 right_neg = FALSE; /* effectively it's a UV now */
1542 dright = SvNV_nomg(svr);
1543 right_neg = dright < 0;
1546 if (dright < UV_MAX_P1) {
1547 right = U_V(dright);
1548 dright_valid = TRUE; /* In case we need to use double below. */
1554 /* At this point use_double is only true if right is out of range for
1555 a UV. In range NV has been rounded down to nearest UV and
1556 use_double false. */
1557 if (!use_double && SvIV_please_nomg(svl)) {
1558 left_neg = !SvUOK(svl);
1562 const IV aiv = SvIVX(svl);
1565 left_neg = FALSE; /* effectively it's a UV now */
1572 dleft = SvNV_nomg(svl);
1573 left_neg = dleft < 0;
1577 /* This should be exactly the 5.6 behaviour - if left and right are
1578 both in range for UV then use U_V() rather than floor. */
1580 if (dleft < UV_MAX_P1) {
1581 /* right was in range, so is dleft, so use UVs not double.
1585 /* left is out of range for UV, right was in range, so promote
1586 right (back) to double. */
1588 /* The +0.5 is used in 5.6 even though it is not strictly
1589 consistent with the implicit +0 floor in the U_V()
1590 inside the #if 1. */
1591 dleft = Perl_floor(dleft + 0.5);
1594 dright = Perl_floor(dright + 0.5);
1605 DIE(aTHX_ "Illegal modulus zero");
1607 dans = Perl_fmod(dleft, dright);
1608 if ((left_neg != right_neg) && dans)
1609 dans = dright - dans;
1612 sv_setnv(TARG, dans);
1618 DIE(aTHX_ "Illegal modulus zero");
1621 if ((left_neg != right_neg) && ans)
1624 /* XXX may warn: unary minus operator applied to unsigned type */
1625 /* could change -foo to be (~foo)+1 instead */
1626 if (ans <= ~((UV)IV_MAX)+1)
1627 sv_setiv(TARG, ~ans+1);
1629 sv_setnv(TARG, -(NV)ans);
1632 sv_setuv(TARG, ans);
1645 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1646 /* TODO: think of some way of doing list-repeat overloading ??? */
1651 tryAMAGICbin_MG(repeat_amg, AMGf_assign);
1657 const UV uv = SvUV_nomg(sv);
1659 count = IV_MAX; /* The best we can do? */
1663 count = SvIV_nomg(sv);
1666 else if (SvNOKp(sv)) {
1667 const NV nv = SvNV_nomg(sv);
1669 count = -1; /* An arbitrary negative integer */
1674 count = SvIV_nomg(sv);
1678 Perl_ck_warner(aTHX_ packWARN(WARN_NUMERIC),
1679 "Negative repeat count does nothing");
1682 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1684 static const char* const oom_list_extend = "Out of memory during list extend";
1685 const I32 items = SP - MARK;
1686 const I32 max = items * count;
1687 const U8 mod = PL_op->op_flags & OPf_MOD;
1689 MEM_WRAP_CHECK_1(max, SV*, oom_list_extend);
1690 /* Did the max computation overflow? */
1691 if (items > 0 && max > 0 && (max < items || max < count))
1692 Perl_croak(aTHX_ "%s", oom_list_extend);
1697 /* This code was intended to fix 20010809.028:
1700 for (($x =~ /./g) x 2) {
1701 print chop; # "abcdabcd" expected as output.
1704 * but that change (#11635) broke this code:
1706 $x = [("foo")x2]; # only one "foo" ended up in the anonlist.
1708 * I can't think of a better fix that doesn't introduce
1709 * an efficiency hit by copying the SVs. The stack isn't
1710 * refcounted, and mortalisation obviously doesn't
1711 * Do The Right Thing when the stack has more than
1712 * one pointer to the same mortal value.
1716 *SP = sv_2mortal(newSVsv(*SP));
1721 if (mod && SvPADTMP(*SP)) {
1722 assert(!IS_PADGV(*SP));
1723 *SP = sv_mortalcopy(*SP);
1731 repeatcpy((char*)(MARK + items), (char*)MARK,
1732 items * sizeof(const SV *), count - 1);
1735 else if (count <= 0)
1738 else { /* Note: mark already snarfed by pp_list */
1739 SV * const tmpstr = POPs;
1742 static const char* const oom_string_extend =
1743 "Out of memory during string extend";
1746 sv_setsv_nomg(TARG, tmpstr);
1747 SvPV_force_nomg(TARG, len);
1748 isutf = DO_UTF8(TARG);
1753 const STRLEN max = (UV)count * len;
1754 if (len > MEM_SIZE_MAX / count)
1755 Perl_croak(aTHX_ "%s", oom_string_extend);
1756 MEM_WRAP_CHECK_1(max, char, oom_string_extend);
1757 SvGROW(TARG, max + 1);
1758 repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
1759 SvCUR_set(TARG, SvCUR(TARG) * count);
1761 *SvEND(TARG) = '\0';
1764 (void)SvPOK_only_UTF8(TARG);
1766 (void)SvPOK_only(TARG);
1768 if (PL_op->op_private & OPpREPEAT_DOLIST) {
1769 /* The parser saw this as a list repeat, and there
1770 are probably several items on the stack. But we're
1771 in scalar context, and there's no pp_list to save us
1772 now. So drop the rest of the items -- robin@kitsite.com
1784 dSP; dATARGET; bool useleft; SV *svl, *svr;
1785 tryAMAGICbin_MG(subtr_amg, AMGf_assign|AMGf_numeric);
1788 useleft = USE_LEFT(svl);
1789 #ifdef PERL_PRESERVE_IVUV
1790 /* See comments in pp_add (in pp_hot.c) about Overflow, and how
1791 "bad things" happen if you rely on signed integers wrapping. */
1792 if (SvIV_please_nomg(svr)) {
1793 /* Unless the left argument is integer in range we are going to have to
1794 use NV maths. Hence only attempt to coerce the right argument if
1795 we know the left is integer. */
1802 a_valid = auvok = 1;
1803 /* left operand is undef, treat as zero. */
1805 /* Left operand is defined, so is it IV? */
1806 if (SvIV_please_nomg(svl)) {
1807 if ((auvok = SvUOK(svl)))
1810 const IV aiv = SvIVX(svl);
1813 auvok = 1; /* Now acting as a sign flag. */
1814 } else { /* 2s complement assumption for IV_MIN */
1822 bool result_good = 0;
1825 bool buvok = SvUOK(svr);
1830 const IV biv = SvIVX(svr);
1837 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
1838 else "IV" now, independent of how it came in.
1839 if a, b represents positive, A, B negative, a maps to -A etc
1844 all UV maths. negate result if A negative.
1845 subtract if signs same, add if signs differ. */
1847 if (auvok ^ buvok) {
1856 /* Must get smaller */
1861 if (result <= buv) {
1862 /* result really should be -(auv-buv). as its negation
1863 of true value, need to swap our result flag */
1875 if (result <= (UV)IV_MIN)
1876 SETi( -(IV)result );
1878 /* result valid, but out of range for IV. */
1879 SETn( -(NV)result );
1883 } /* Overflow, drop through to NVs. */
1888 NV value = SvNV_nomg(svr);
1892 /* left operand is undef, treat as zero - value */
1896 SETn( SvNV_nomg(svl) - value );
1903 dSP; dATARGET; SV *svl, *svr;
1904 tryAMAGICbin_MG(lshift_amg, AMGf_assign|AMGf_numeric);
1908 const IV shift = SvIV_nomg(svr);
1909 if (PL_op->op_private & HINT_INTEGER) {
1910 const IV i = SvIV_nomg(svl);
1914 const UV u = SvUV_nomg(svl);
1923 dSP; dATARGET; SV *svl, *svr;
1924 tryAMAGICbin_MG(rshift_amg, AMGf_assign|AMGf_numeric);
1928 const IV shift = SvIV_nomg(svr);
1929 if (PL_op->op_private & HINT_INTEGER) {
1930 const IV i = SvIV_nomg(svl);
1934 const UV u = SvUV_nomg(svl);
1946 tryAMAGICbin_MG(lt_amg, AMGf_set|AMGf_numeric);
1950 (SvIOK_notUV(left) && SvIOK_notUV(right))
1951 ? (SvIVX(left) < SvIVX(right))
1952 : (do_ncmp(left, right) == -1)
1962 tryAMAGICbin_MG(gt_amg, AMGf_set|AMGf_numeric);
1966 (SvIOK_notUV(left) && SvIOK_notUV(right))
1967 ? (SvIVX(left) > SvIVX(right))
1968 : (do_ncmp(left, right) == 1)
1978 tryAMAGICbin_MG(le_amg, AMGf_set|AMGf_numeric);
1982 (SvIOK_notUV(left) && SvIOK_notUV(right))
1983 ? (SvIVX(left) <= SvIVX(right))
1984 : (do_ncmp(left, right) <= 0)
1994 tryAMAGICbin_MG(ge_amg, AMGf_set|AMGf_numeric);
1998 (SvIOK_notUV(left) && SvIOK_notUV(right))
1999 ? (SvIVX(left) >= SvIVX(right))
2000 : ( (do_ncmp(left, right) & 2) == 0)
2010 tryAMAGICbin_MG(ne_amg, AMGf_set|AMGf_numeric);
2014 (SvIOK_notUV(left) && SvIOK_notUV(right))
2015 ? (SvIVX(left) != SvIVX(right))
2016 : (do_ncmp(left, right) != 0)
2021 /* compare left and right SVs. Returns:
2025 * 2: left or right was a NaN
2028 Perl_do_ncmp(pTHX_ SV* const left, SV * const right)
2030 PERL_ARGS_ASSERT_DO_NCMP;
2031 #ifdef PERL_PRESERVE_IVUV
2032 /* Fortunately it seems NaN isn't IOK */
2033 if (SvIV_please_nomg(right) && SvIV_please_nomg(left)) {
2035 const IV leftiv = SvIVX(left);
2036 if (!SvUOK(right)) {
2037 /* ## IV <=> IV ## */
2038 const IV rightiv = SvIVX(right);
2039 return (leftiv > rightiv) - (leftiv < rightiv);
2041 /* ## IV <=> UV ## */
2043 /* As (b) is a UV, it's >=0, so it must be < */
2046 const UV rightuv = SvUVX(right);
2047 return ((UV)leftiv > rightuv) - ((UV)leftiv < rightuv);
2052 /* ## UV <=> UV ## */
2053 const UV leftuv = SvUVX(left);
2054 const UV rightuv = SvUVX(right);
2055 return (leftuv > rightuv) - (leftuv < rightuv);
2057 /* ## UV <=> IV ## */
2059 const IV rightiv = SvIVX(right);
2061 /* As (a) is a UV, it's >=0, so it cannot be < */
2064 const UV leftuv = SvUVX(left);
2065 return (leftuv > (UV)rightiv) - (leftuv < (UV)rightiv);
2068 assert(0); /* NOTREACHED */
2072 NV const rnv = SvNV_nomg(right);
2073 NV const lnv = SvNV_nomg(left);
2075 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2076 if (Perl_isnan(lnv) || Perl_isnan(rnv)) {
2079 return (lnv > rnv) - (lnv < rnv);
2098 tryAMAGICbin_MG(ncmp_amg, AMGf_numeric);
2101 value = do_ncmp(left, right);
2116 int amg_type = sle_amg;
2120 switch (PL_op->op_type) {
2139 tryAMAGICbin_MG(amg_type, AMGf_set);
2143 #ifdef USE_LOCALE_COLLATE
2144 (IN_LC_RUNTIME(LC_COLLATE))
2145 ? sv_cmp_locale_flags(left, right, 0)
2148 sv_cmp_flags(left, right, 0);
2149 SETs(boolSV(cmp * multiplier < rhs));
2157 tryAMAGICbin_MG(seq_amg, AMGf_set);
2160 SETs(boolSV(sv_eq_flags(left, right, 0)));
2168 tryAMAGICbin_MG(sne_amg, AMGf_set);
2171 SETs(boolSV(!sv_eq_flags(left, right, 0)));
2179 tryAMAGICbin_MG(scmp_amg, 0);
2183 #ifdef USE_LOCALE_COLLATE
2184 (IN_LC_RUNTIME(LC_COLLATE))
2185 ? sv_cmp_locale_flags(left, right, 0)
2188 sv_cmp_flags(left, right, 0);
2197 tryAMAGICbin_MG(band_amg, AMGf_assign);
2200 if (SvNIOKp(left) || SvNIOKp(right)) {
2201 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2202 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2203 if (PL_op->op_private & HINT_INTEGER) {
2204 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2208 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2211 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2212 if (right_ro_nonnum) SvNIOK_off(right);
2215 do_vop(PL_op->op_type, TARG, left, right);
2225 const int op_type = PL_op->op_type;
2227 tryAMAGICbin_MG((op_type == OP_BIT_OR ? bor_amg : bxor_amg), AMGf_assign);
2230 if (SvNIOKp(left) || SvNIOKp(right)) {
2231 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2232 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2233 if (PL_op->op_private & HINT_INTEGER) {
2234 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2235 const IV r = SvIV_nomg(right);
2236 const IV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2240 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2241 const UV r = SvUV_nomg(right);
2242 const UV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2245 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2246 if (right_ro_nonnum) SvNIOK_off(right);
2249 do_vop(op_type, TARG, left, right);
2256 PERL_STATIC_INLINE bool
2257 S_negate_string(pTHX)
2262 SV * const sv = TOPs;
2263 if (!SvPOKp(sv) || SvNIOK(sv) || (!SvPOK(sv) && SvNIOKp(sv)))
2265 s = SvPV_nomg_const(sv, len);
2266 if (isIDFIRST(*s)) {
2267 sv_setpvs(TARG, "-");
2270 else if (*s == '+' || (*s == '-' && !looks_like_number(sv))) {
2271 sv_setsv_nomg(TARG, sv);
2272 *SvPV_force_nomg(TARG, len) = *s == '-' ? '+' : '-';
2282 tryAMAGICun_MG(neg_amg, AMGf_numeric);
2283 if (S_negate_string(aTHX)) return NORMAL;
2285 SV * const sv = TOPs;
2288 /* It's publicly an integer */
2291 if (SvIVX(sv) == IV_MIN) {
2292 /* 2s complement assumption. */
2293 SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) ==
2297 else if (SvUVX(sv) <= IV_MAX) {
2302 else if (SvIVX(sv) != IV_MIN) {
2306 #ifdef PERL_PRESERVE_IVUV
2313 if (SvNIOKp(sv) && (SvNIOK(sv) || !SvPOK(sv)))
2314 SETn(-SvNV_nomg(sv));
2315 else if (SvPOKp(sv) && SvIV_please_nomg(sv))
2316 goto oops_its_an_int;
2318 SETn(-SvNV_nomg(sv));
2326 tryAMAGICun_MG(not_amg, AMGf_set);
2327 *PL_stack_sp = boolSV(!SvTRUE_nomg(*PL_stack_sp));
2334 tryAMAGICun_MG(compl_amg, AMGf_numeric);
2338 if (PL_op->op_private & HINT_INTEGER) {
2339 const IV i = ~SvIV_nomg(sv);
2343 const UV u = ~SvUV_nomg(sv);
2352 sv_copypv_nomg(TARG, sv);
2353 tmps = (U8*)SvPV_nomg(TARG, len);
2356 /* Calculate exact length, let's not estimate. */
2361 U8 * const send = tmps + len;
2362 U8 * const origtmps = tmps;
2363 const UV utf8flags = UTF8_ALLOW_ANYUV;
2365 while (tmps < send) {
2366 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2368 targlen += UNISKIP(~c);
2374 /* Now rewind strings and write them. */
2381 Newx(result, targlen + 1, U8);
2383 while (tmps < send) {
2384 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2386 p = uvchr_to_utf8_flags(p, ~c, UNICODE_ALLOW_ANY);
2389 sv_usepvn_flags(TARG, (char*)result, targlen,
2390 SV_HAS_TRAILING_NUL);
2397 Newx(result, nchar + 1, U8);
2399 while (tmps < send) {
2400 const U8 c = (U8)utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2405 sv_usepvn_flags(TARG, (char*)result, nchar, SV_HAS_TRAILING_NUL);
2414 for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
2417 for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
2422 for ( ; anum > 0; anum--, tmps++)
2430 /* integer versions of some of the above */
2435 tryAMAGICbin_MG(mult_amg, AMGf_assign);
2438 SETi( left * right );
2447 tryAMAGICbin_MG(div_amg, AMGf_assign);
2450 IV value = SvIV_nomg(right);
2452 DIE(aTHX_ "Illegal division by zero");
2453 num = SvIV_nomg(left);
2455 /* avoid FPE_INTOVF on some platforms when num is IV_MIN */
2459 value = num / value;
2465 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS)
2472 /* This is the vanilla old i_modulo. */
2474 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2478 DIE(aTHX_ "Illegal modulus zero");
2479 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2483 SETi( left % right );
2488 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS)
2493 /* This is the i_modulo with the workaround for the _moddi3 bug
2494 * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
2495 * See below for pp_i_modulo. */
2497 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2501 DIE(aTHX_ "Illegal modulus zero");
2502 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2506 SETi( left % PERL_ABS(right) );
2513 dVAR; dSP; dATARGET;
2514 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2518 DIE(aTHX_ "Illegal modulus zero");
2519 /* The assumption is to use hereafter the old vanilla version... */
2521 PL_ppaddr[OP_I_MODULO] =
2523 /* .. but if we have glibc, we might have a buggy _moddi3
2524 * (at least glicb 2.2.5 is known to have this bug), in other
2525 * words our integer modulus with negative quad as the second
2526 * argument might be broken. Test for this and re-patch the
2527 * opcode dispatch table if that is the case, remembering to
2528 * also apply the workaround so that this first round works
2529 * right, too. See [perl #9402] for more information. */
2533 /* Cannot do this check with inlined IV constants since
2534 * that seems to work correctly even with the buggy glibc. */
2536 /* Yikes, we have the bug.
2537 * Patch in the workaround version. */
2539 PL_ppaddr[OP_I_MODULO] =
2540 &Perl_pp_i_modulo_1;
2541 /* Make certain we work right this time, too. */
2542 right = PERL_ABS(right);
2545 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2549 SETi( left % right );
2558 tryAMAGICbin_MG(add_amg, AMGf_assign);
2560 dPOPTOPiirl_ul_nomg;
2561 SETi( left + right );
2569 tryAMAGICbin_MG(subtr_amg, AMGf_assign);
2571 dPOPTOPiirl_ul_nomg;
2572 SETi( left - right );
2580 tryAMAGICbin_MG(lt_amg, AMGf_set);
2583 SETs(boolSV(left < right));
2591 tryAMAGICbin_MG(gt_amg, AMGf_set);
2594 SETs(boolSV(left > right));
2602 tryAMAGICbin_MG(le_amg, AMGf_set);
2605 SETs(boolSV(left <= right));
2613 tryAMAGICbin_MG(ge_amg, AMGf_set);
2616 SETs(boolSV(left >= right));
2624 tryAMAGICbin_MG(eq_amg, AMGf_set);
2627 SETs(boolSV(left == right));
2635 tryAMAGICbin_MG(ne_amg, AMGf_set);
2638 SETs(boolSV(left != right));
2646 tryAMAGICbin_MG(ncmp_amg, 0);
2653 else if (left < right)
2665 tryAMAGICun_MG(neg_amg, 0);
2666 if (S_negate_string(aTHX)) return NORMAL;
2668 SV * const sv = TOPs;
2669 IV const i = SvIV_nomg(sv);
2675 /* High falutin' math. */
2680 tryAMAGICbin_MG(atan2_amg, 0);
2683 SETn(Perl_atan2(left, right));
2691 int amg_type = fallback_amg;
2692 const char *neg_report = NULL;
2693 const int op_type = PL_op->op_type;
2696 case OP_SIN: amg_type = sin_amg; break;
2697 case OP_COS: amg_type = cos_amg; break;
2698 case OP_EXP: amg_type = exp_amg; break;
2699 case OP_LOG: amg_type = log_amg; neg_report = "log"; break;
2700 case OP_SQRT: amg_type = sqrt_amg; neg_report = "sqrt"; break;
2703 assert(amg_type != fallback_amg);
2705 tryAMAGICun_MG(amg_type, 0);
2707 SV * const arg = POPs;
2708 const NV value = SvNV_nomg(arg);
2710 if (neg_report) { /* log or sqrt */
2711 if (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0)) {
2712 SET_NUMERIC_STANDARD();
2713 /* diag_listed_as: Can't take log of %g */
2714 DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
2719 case OP_SIN: result = Perl_sin(value); break;
2720 case OP_COS: result = Perl_cos(value); break;
2721 case OP_EXP: result = Perl_exp(value); break;
2722 case OP_LOG: result = Perl_log(value); break;
2723 case OP_SQRT: result = Perl_sqrt(value); break;
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
2743 if (!PL_srand_called) {
2744 (void)seedDrand01((Rand_seed_t)seed());
2745 PL_srand_called = TRUE;
2755 SV * const sv = POPs;
2761 /* 1 of 2 things can be carried through SvNV, SP or TARG, SP was carried */
2769 sv_setnv_mg(TARG, value);
2780 if (MAXARG >= 1 && (TOPs || POPs)) {
2787 pv = SvPV(top, len);
2788 flags = grok_number(pv, len, &anum);
2790 if (!(flags & IS_NUMBER_IN_UV)) {
2791 Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
2792 "Integer overflow in srand");
2800 (void)seedDrand01((Rand_seed_t)anum);
2801 PL_srand_called = TRUE;
2805 /* Historically srand always returned true. We can avoid breaking
2807 sv_setpvs(TARG, "0 but true");
2816 tryAMAGICun_MG(int_amg, AMGf_numeric);
2818 SV * const sv = TOPs;
2819 const IV iv = SvIV_nomg(sv);
2820 /* XXX it's arguable that compiler casting to IV might be subtly
2821 different from modf (for numbers inside (IV_MIN,UV_MAX)) in which
2822 else preferring IV has introduced a subtle behaviour change bug. OTOH
2823 relying on floating point to be accurate is a bug. */
2828 else if (SvIOK(sv)) {
2830 SETu(SvUV_nomg(sv));
2835 const NV value = SvNV_nomg(sv);
2837 if (value < (NV)UV_MAX + 0.5) {
2840 SETn(Perl_floor(value));
2844 if (value > (NV)IV_MIN - 0.5) {
2847 SETn(Perl_ceil(value));
2858 tryAMAGICun_MG(abs_amg, AMGf_numeric);
2860 SV * const sv = TOPs;
2861 /* This will cache the NV value if string isn't actually integer */
2862 const IV iv = SvIV_nomg(sv);
2867 else if (SvIOK(sv)) {
2868 /* IVX is precise */
2870 SETu(SvUV_nomg(sv)); /* force it to be numeric only */
2878 /* 2s complement assumption. Also, not really needed as
2879 IV_MIN and -IV_MIN should both be %100...00 and NV-able */
2885 const NV value = SvNV_nomg(sv);
2899 I32 flags = PERL_SCAN_ALLOW_UNDERSCORES;
2903 SV* const sv = POPs;
2905 tmps = (SvPV_const(sv, len));
2907 /* If Unicode, try to downgrade
2908 * If not possible, croak. */
2909 SV* const tsv = sv_2mortal(newSVsv(sv));
2912 sv_utf8_downgrade(tsv, FALSE);
2913 tmps = SvPV_const(tsv, len);
2915 if (PL_op->op_type == OP_HEX)
2918 while (*tmps && len && isSPACE(*tmps))
2922 if (isALPHA_FOLD_EQ(*tmps, 'x')) {
2924 result_uv = grok_hex (tmps, &len, &flags, &result_nv);
2926 else if (isALPHA_FOLD_EQ(*tmps, 'b'))
2927 result_uv = grok_bin (tmps, &len, &flags, &result_nv);
2929 result_uv = grok_oct (tmps, &len, &flags, &result_nv);
2931 if (flags & PERL_SCAN_GREATER_THAN_UV_MAX) {
2945 SV * const sv = TOPs;
2950 SETi(sv_len_utf8_nomg(sv));
2954 (void)SvPV_nomg_const(sv,len);
2958 if (!SvPADTMP(TARG)) {
2959 sv_setsv_nomg(TARG, &PL_sv_undef);
2967 /* Returns false if substring is completely outside original string.
2968 No length is indicated by len_iv = 0 and len_is_uv = 0. len_is_uv must
2969 always be true for an explicit 0.
2972 Perl_translate_substr_offsets( STRLEN curlen, IV pos1_iv,
2973 bool pos1_is_uv, IV len_iv,
2974 bool len_is_uv, STRLEN *posp,
2980 PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS;
2982 if (!pos1_is_uv && pos1_iv < 0 && curlen) {
2983 pos1_is_uv = curlen-1 > ~(UV)pos1_iv;
2986 if ((pos1_is_uv || pos1_iv > 0) && (UV)pos1_iv > curlen)
2989 if (len_iv || len_is_uv) {
2990 if (!len_is_uv && len_iv < 0) {
2991 pos2_iv = curlen + len_iv;
2993 pos2_is_uv = curlen-1 > ~(UV)len_iv;
2996 } else { /* len_iv >= 0 */
2997 if (!pos1_is_uv && pos1_iv < 0) {
2998 pos2_iv = pos1_iv + len_iv;
2999 pos2_is_uv = (UV)len_iv > (UV)IV_MAX;
3001 if ((UV)len_iv > curlen-(UV)pos1_iv)
3004 pos2_iv = pos1_iv+len_iv;
3014 if (!pos2_is_uv && pos2_iv < 0) {
3015 if (!pos1_is_uv && pos1_iv < 0)
3019 else if (!pos1_is_uv && pos1_iv < 0)
3022 if ((UV)pos2_iv < (UV)pos1_iv)
3024 if ((UV)pos2_iv > curlen)
3027 /* pos1_iv and pos2_iv both in 0..curlen, so the cast is safe */
3028 *posp = (STRLEN)( (UV)pos1_iv );
3029 *lenp = (STRLEN)( (UV)pos2_iv - (UV)pos1_iv );
3046 I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3047 const bool rvalue = (GIMME_V != G_VOID);
3050 const char *repl = NULL;
3052 int num_args = PL_op->op_private & 7;
3053 bool repl_need_utf8_upgrade = FALSE;
3057 if(!(repl_sv = POPs)) num_args--;
3059 if ((len_sv = POPs)) {
3060 len_iv = SvIV(len_sv);
3061 len_is_uv = len_iv ? SvIOK_UV(len_sv) : 1;
3066 pos1_iv = SvIV(pos_sv);
3067 pos1_is_uv = SvIOK_UV(pos_sv);
3069 if (PL_op->op_private & OPpSUBSTR_REPL_FIRST) {
3074 if (lvalue && !repl_sv) {
3076 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3077 sv_magic(ret, NULL, PERL_MAGIC_substr, NULL, 0);
3079 LvTARG(ret) = SvREFCNT_inc_simple(sv);
3081 pos1_is_uv || pos1_iv >= 0
3082 ? (STRLEN)(UV)pos1_iv
3083 : (LvFLAGS(ret) |= 1, (STRLEN)(UV)-pos1_iv);
3085 len_is_uv || len_iv > 0
3086 ? (STRLEN)(UV)len_iv
3087 : (LvFLAGS(ret) |= 2, (STRLEN)(UV)-len_iv);
3090 PUSHs(ret); /* avoid SvSETMAGIC here */
3094 repl = SvPV_const(repl_sv, repl_len);
3097 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
3098 "Attempt to use reference as lvalue in substr"
3100 tmps = SvPV_force_nomg(sv, curlen);
3101 if (DO_UTF8(repl_sv) && repl_len) {
3103 sv_utf8_upgrade_nomg(sv);
3107 else if (DO_UTF8(sv))
3108 repl_need_utf8_upgrade = TRUE;
3110 else tmps = SvPV_const(sv, curlen);
3112 utf8_curlen = sv_or_pv_len_utf8(sv, tmps, curlen);
3113 if (utf8_curlen == curlen)
3116 curlen = utf8_curlen;
3122 STRLEN pos, len, byte_len, byte_pos;
3124 if (!translate_substr_offsets(
3125 curlen, pos1_iv, pos1_is_uv, len_iv, len_is_uv, &pos, &len
3129 byte_pos = utf8_curlen
3130 ? sv_or_pv_pos_u2b(sv, tmps, pos, &byte_len) : pos;
3135 SvTAINTED_off(TARG); /* decontaminate */
3136 SvUTF8_off(TARG); /* decontaminate */
3137 sv_setpvn(TARG, tmps, byte_len);
3138 #ifdef USE_LOCALE_COLLATE
3139 sv_unmagic(TARG, PERL_MAGIC_collxfrm);
3146 SV* repl_sv_copy = NULL;
3148 if (repl_need_utf8_upgrade) {
3149 repl_sv_copy = newSVsv(repl_sv);
3150 sv_utf8_upgrade(repl_sv_copy);
3151 repl = SvPV_const(repl_sv_copy, repl_len);
3155 sv_insert_flags(sv, byte_pos, byte_len, repl, repl_len, 0);
3156 SvREFCNT_dec(repl_sv_copy);
3168 Perl_croak(aTHX_ "substr outside of string");
3169 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
3176 const IV size = POPi;
3177 const IV offset = POPi;
3178 SV * const src = POPs;
3179 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3182 if (lvalue) { /* it's an lvalue! */
3183 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3184 sv_magic(ret, NULL, PERL_MAGIC_vec, NULL, 0);
3186 LvTARG(ret) = SvREFCNT_inc_simple(src);
3187 LvTARGOFF(ret) = offset;
3188 LvTARGLEN(ret) = size;
3192 SvTAINTED_off(TARG); /* decontaminate */
3196 sv_setuv(ret, do_vecget(src, offset, size));
3212 const char *little_p;
3215 const bool is_index = PL_op->op_type == OP_INDEX;
3216 const bool threeargs = MAXARG >= 3 && (TOPs || ((void)POPs,0));
3222 big_p = SvPV_const(big, biglen);
3223 little_p = SvPV_const(little, llen);
3225 big_utf8 = DO_UTF8(big);
3226 little_utf8 = DO_UTF8(little);
3227 if (big_utf8 ^ little_utf8) {
3228 /* One needs to be upgraded. */
3229 if (little_utf8 && !PL_encoding) {
3230 /* Well, maybe instead we might be able to downgrade the small
3232 char * const pv = (char*)bytes_from_utf8((U8 *)little_p, &llen,
3235 /* If the large string is ISO-8859-1, and it's not possible to
3236 convert the small string to ISO-8859-1, then there is no
3237 way that it could be found anywhere by index. */
3242 /* At this point, pv is a malloc()ed string. So donate it to temp
3243 to ensure it will get free()d */
3244 little = temp = newSV(0);
3245 sv_usepvn(temp, pv, llen);
3246 little_p = SvPVX(little);
3249 ? newSVpvn(big_p, biglen) : newSVpvn(little_p, llen);
3252 sv_recode_to_utf8(temp, PL_encoding);
3254 sv_utf8_upgrade(temp);
3259 big_p = SvPV_const(big, biglen);
3262 little_p = SvPV_const(little, llen);
3266 if (SvGAMAGIC(big)) {
3267 /* Life just becomes a lot easier if I use a temporary here.
3268 Otherwise I need to avoid calls to sv_pos_u2b(), which (dangerously)
3269 will trigger magic and overloading again, as will fbm_instr()
3271 big = newSVpvn_flags(big_p, biglen,
3272 SVs_TEMP | (big_utf8 ? SVf_UTF8 : 0));
3275 if (SvGAMAGIC(little) || (is_index && !SvOK(little))) {
3276 /* index && SvOK() is a hack. fbm_instr() calls SvPV_const, which will
3277 warn on undef, and we've already triggered a warning with the
3278 SvPV_const some lines above. We can't remove that, as we need to
3279 call some SvPV to trigger overloading early and find out if the
3281 This is all getting to messy. The API isn't quite clean enough,
3282 because data access has side effects.
3284 little = newSVpvn_flags(little_p, llen,
3285 SVs_TEMP | (little_utf8 ? SVf_UTF8 : 0));
3286 little_p = SvPVX(little);
3290 offset = is_index ? 0 : biglen;
3292 if (big_utf8 && offset > 0)
3293 offset = sv_pos_u2b_flags(big, offset, 0, SV_CONST_RETURN);
3299 else if (offset > (SSize_t)biglen)
3301 if (!(little_p = is_index
3302 ? fbm_instr((unsigned char*)big_p + offset,
3303 (unsigned char*)big_p + biglen, little, 0)
3304 : rninstr(big_p, big_p + offset,
3305 little_p, little_p + llen)))
3308 retval = little_p - big_p;
3309 if (retval > 0 && big_utf8)
3310 retval = sv_pos_b2u_flags(big, retval, SV_CONST_RETURN);
3320 dSP; dMARK; dORIGMARK; dTARGET;
3321 SvTAINTED_off(TARG);
3322 do_sprintf(TARG, SP-MARK, MARK+1);
3323 TAINT_IF(SvTAINTED(TARG));
3335 const U8 *s = (U8*)SvPV_const(argsv, len);
3337 if (PL_encoding && SvPOK(argsv) && !DO_UTF8(argsv)) {
3338 SV * const tmpsv = sv_2mortal(newSVsv(argsv));
3339 s = (U8*)sv_recode_to_utf8(tmpsv, PL_encoding);
3340 len = UTF8SKIP(s); /* Should be well-formed; so this is its length */
3344 XPUSHu(DO_UTF8(argsv)
3345 ? utf8n_to_uvchr(s, len, 0, UTF8_ALLOW_ANYUV)
3359 if (SvNOK(top) && Perl_isinfnan(SvNV(top))) {
3360 if (ckWARN(WARN_UTF8)) {
3361 Perl_warner(aTHX_ packWARN(WARN_UTF8),
3362 "Invalid number (%"NVgf") in chr", SvNV(top));
3364 value = UNICODE_REPLACEMENT;
3367 if (!IN_BYTES /* under bytes, chr(-1) eq chr(0xff), etc. */
3368 && ((SvIOKp(top) && !SvIsUV(top) && SvIV_nomg(top) < 0)
3370 ((SvNOKp(top) || (SvOK(top) && !SvIsUV(top)))
3371 && SvNV_nomg(top) < 0.0))) {
3372 if (ckWARN(WARN_UTF8)) {
3373 if (SvGMAGICAL(top)) {
3374 SV *top2 = sv_newmortal();
3375 sv_setsv_nomg(top2, top);
3378 Perl_warner(aTHX_ packWARN(WARN_UTF8),
3379 "Invalid negative number (%"SVf") in chr", SVfARG(top));
3381 value = UNICODE_REPLACEMENT;
3383 value = SvUV_nomg(top);
3387 SvUPGRADE(TARG,SVt_PV);
3389 if (value > 255 && !IN_BYTES) {
3390 SvGROW(TARG, (STRLEN)UNISKIP(value)+1);
3391 tmps = (char*)uvchr_to_utf8_flags((U8*)SvPVX(TARG), value, 0);
3392 SvCUR_set(TARG, tmps - SvPVX_const(TARG));
3394 (void)SvPOK_only(TARG);
3403 *tmps++ = (char)value;
3405 (void)SvPOK_only(TARG);
3407 if (PL_encoding && !IN_BYTES) {
3408 sv_recode_to_utf8(TARG, PL_encoding);
3410 if (SvCUR(TARG) == 0
3411 || ! is_utf8_string((U8*)tmps, SvCUR(TARG))
3412 || UTF8_IS_REPLACEMENT((U8*) tmps, (U8*) tmps + SvCUR(TARG)))
3417 *tmps++ = (char)value;
3433 const char *tmps = SvPV_const(left, len);
3435 if (DO_UTF8(left)) {
3436 /* If Unicode, try to downgrade.
3437 * If not possible, croak.
3438 * Yes, we made this up. */
3439 SV* const tsv = sv_2mortal(newSVsv(left));
3442 sv_utf8_downgrade(tsv, FALSE);
3443 tmps = SvPV_const(tsv, len);
3445 # ifdef USE_ITHREADS
3447 if (!PL_reentrant_buffer->_crypt_struct_buffer) {
3448 /* This should be threadsafe because in ithreads there is only
3449 * one thread per interpreter. If this would not be true,
3450 * we would need a mutex to protect this malloc. */
3451 PL_reentrant_buffer->_crypt_struct_buffer =
3452 (struct crypt_data *)safemalloc(sizeof(struct crypt_data));
3453 #if defined(__GLIBC__) || defined(__EMX__)
3454 if (PL_reentrant_buffer->_crypt_struct_buffer) {
3455 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
3456 /* work around glibc-2.2.5 bug */
3457 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
3461 # endif /* HAS_CRYPT_R */
3462 # endif /* USE_ITHREADS */
3464 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
3466 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
3472 "The crypt() function is unimplemented due to excessive paranoia.");
3476 /* Generally UTF-8 and UTF-EBCDIC are indistinguishable at this level. So
3477 * most comments below say UTF-8, when in fact they mean UTF-EBCDIC as well */
3481 /* Actually is both lcfirst() and ucfirst(). Only the first character
3482 * changes. This means that possibly we can change in-place, ie., just
3483 * take the source and change that one character and store it back, but not
3484 * if read-only etc, or if the length changes */
3488 STRLEN slen; /* slen is the byte length of the whole SV. */
3491 bool inplace; /* ? Convert first char only, in-place */
3492 bool doing_utf8 = FALSE; /* ? using utf8 */
3493 bool convert_source_to_utf8 = FALSE; /* ? need to convert */
3494 const int op_type = PL_op->op_type;
3497 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3498 STRLEN ulen; /* ulen is the byte length of the original Unicode character
3499 * stored as UTF-8 at s. */
3500 STRLEN tculen; /* tculen is the byte length of the freshly titlecased (or
3501 * lowercased) character stored in tmpbuf. May be either
3502 * UTF-8 or not, but in either case is the number of bytes */
3504 s = (const U8*)SvPV_const(source, slen);
3506 /* We may be able to get away with changing only the first character, in
3507 * place, but not if read-only, etc. Later we may discover more reasons to
3508 * not convert in-place. */
3509 inplace = !SvREADONLY(source)
3510 && ( SvPADTMP(source)
3511 || ( SvTEMP(source) && !SvSMAGICAL(source)
3512 && SvREFCNT(source) == 1));
3514 /* First calculate what the changed first character should be. This affects
3515 * whether we can just swap it out, leaving the rest of the string unchanged,
3516 * or even if have to convert the dest to UTF-8 when the source isn't */
3518 if (! slen) { /* If empty */
3519 need = 1; /* still need a trailing NUL */
3522 else if (DO_UTF8(source)) { /* Is the source utf8? */
3525 if (op_type == OP_UCFIRST) {
3526 #ifdef USE_LOCALE_CTYPE
3527 _to_utf8_title_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3529 _to_utf8_title_flags(s, tmpbuf, &tculen, 0);
3533 #ifdef USE_LOCALE_CTYPE
3534 _to_utf8_lower_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3536 _to_utf8_lower_flags(s, tmpbuf, &tculen, 0);
3540 /* we can't do in-place if the length changes. */
3541 if (ulen != tculen) inplace = FALSE;
3542 need = slen + 1 - ulen + tculen;
3544 else { /* Non-zero length, non-UTF-8, Need to consider locale and if
3545 * latin1 is treated as caseless. Note that a locale takes
3547 ulen = 1; /* Original character is 1 byte */
3548 tculen = 1; /* Most characters will require one byte, but this will
3549 * need to be overridden for the tricky ones */
3552 if (op_type == OP_LCFIRST) {
3554 /* lower case the first letter: no trickiness for any character */
3556 #ifdef USE_LOCALE_CTYPE
3557 (IN_LC_RUNTIME(LC_CTYPE))
3562 ? toLOWER_LATIN1(*s)
3566 #ifdef USE_LOCALE_CTYPE
3567 else if (IN_LC_RUNTIME(LC_CTYPE)) {
3568 if (IN_UTF8_CTYPE_LOCALE) {
3572 *tmpbuf = (U8) toUPPER_LC(*s); /* This would be a bug if any
3573 locales have upper and title case
3577 else if (! IN_UNI_8_BIT) {
3578 *tmpbuf = toUPPER(*s); /* Returns caseless for non-ascii, or
3579 * on EBCDIC machines whatever the
3580 * native function does */
3583 /* Here, is ucfirst non-UTF-8, not in locale (unless that locale is
3584 * UTF-8, which we treat as not in locale), and cased latin1 */
3586 #ifdef USE_LOCALE_CTYPE
3590 title_ord = _to_upper_title_latin1(*s, tmpbuf, &tculen, 's');
3592 assert(tculen == 2);
3594 /* If the result is an upper Latin1-range character, it can
3595 * still be represented in one byte, which is its ordinal */
3596 if (UTF8_IS_DOWNGRADEABLE_START(*tmpbuf)) {
3597 *tmpbuf = (U8) title_ord;
3601 /* Otherwise it became more than one ASCII character (in
3602 * the case of LATIN_SMALL_LETTER_SHARP_S) or changed to
3603 * beyond Latin1, so the number of bytes changed, so can't
3604 * replace just the first character in place. */
3607 /* If the result won't fit in a byte, the entire result
3608 * will have to be in UTF-8. Assume worst case sizing in
3609 * conversion. (all latin1 characters occupy at most two
3611 if (title_ord > 255) {
3613 convert_source_to_utf8 = TRUE;
3614 need = slen * 2 + 1;
3616 /* The (converted) UTF-8 and UTF-EBCDIC lengths of all
3617 * (both) characters whose title case is above 255 is
3621 else { /* LATIN_SMALL_LETTER_SHARP_S expands by 1 byte */
3622 need = slen + 1 + 1;
3626 } /* End of use Unicode (Latin1) semantics */
3627 } /* End of changing the case of the first character */
3629 /* Here, have the first character's changed case stored in tmpbuf. Ready to
3630 * generate the result */
3633 /* We can convert in place. This means we change just the first
3634 * character without disturbing the rest; no need to grow */
3636 s = d = (U8*)SvPV_force_nomg(source, slen);
3642 /* Here, we can't convert in place; we earlier calculated how much
3643 * space we will need, so grow to accommodate that */
3644 SvUPGRADE(dest, SVt_PV);
3645 d = (U8*)SvGROW(dest, need);
3646 (void)SvPOK_only(dest);
3653 if (! convert_source_to_utf8) {
3655 /* Here both source and dest are in UTF-8, but have to create
3656 * the entire output. We initialize the result to be the
3657 * title/lower cased first character, and then append the rest
3659 sv_setpvn(dest, (char*)tmpbuf, tculen);
3661 sv_catpvn(dest, (char*)(s + ulen), slen - ulen);
3665 const U8 *const send = s + slen;
3667 /* Here the dest needs to be in UTF-8, but the source isn't,
3668 * except we earlier UTF-8'd the first character of the source
3669 * into tmpbuf. First put that into dest, and then append the
3670 * rest of the source, converting it to UTF-8 as we go. */
3672 /* Assert tculen is 2 here because the only two characters that
3673 * get to this part of the code have 2-byte UTF-8 equivalents */
3675 *d++ = *(tmpbuf + 1);
3676 s++; /* We have just processed the 1st char */
3678 for (; s < send; s++) {
3679 d = uvchr_to_utf8(d, *s);
3682 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3686 else { /* in-place UTF-8. Just overwrite the first character */
3687 Copy(tmpbuf, d, tculen, U8);
3688 SvCUR_set(dest, need - 1);
3692 else { /* Neither source nor dest are in or need to be UTF-8 */
3694 if (inplace) { /* in-place, only need to change the 1st char */
3697 else { /* Not in-place */
3699 /* Copy the case-changed character(s) from tmpbuf */
3700 Copy(tmpbuf, d, tculen, U8);
3701 d += tculen - 1; /* Code below expects d to point to final
3702 * character stored */
3705 else { /* empty source */
3706 /* See bug #39028: Don't taint if empty */
3710 /* In a "use bytes" we don't treat the source as UTF-8, but, still want
3711 * the destination to retain that flag */
3712 if (SvUTF8(source) && ! IN_BYTES)
3715 if (!inplace) { /* Finish the rest of the string, unchanged */
3716 /* This will copy the trailing NUL */
3717 Copy(s + 1, d + 1, slen, U8);
3718 SvCUR_set(dest, need - 1);
3721 #ifdef USE_LOCALE_CTYPE
3722 if (IN_LC_RUNTIME(LC_CTYPE)) {
3727 if (dest != source && SvTAINTED(source))
3733 /* There's so much setup/teardown code common between uc and lc, I wonder if
3734 it would be worth merging the two, and just having a switch outside each
3735 of the three tight loops. There is less and less commonality though */
3748 if ((SvPADTMP(source)
3750 (SvTEMP(source) && !SvSMAGICAL(source) && SvREFCNT(source) == 1))
3751 && !SvREADONLY(source) && SvPOK(source)
3754 #ifdef USE_LOCALE_CTYPE
3755 (IN_LC_RUNTIME(LC_CTYPE))
3756 ? ! IN_UTF8_CTYPE_LOCALE
3762 /* We can convert in place. The reason we can't if in UNI_8_BIT is to
3763 * make the loop tight, so we overwrite the source with the dest before
3764 * looking at it, and we need to look at the original source
3765 * afterwards. There would also need to be code added to handle
3766 * switching to not in-place in midstream if we run into characters
3767 * that change the length. Since being in locale overrides UNI_8_BIT,
3768 * that latter becomes irrelevant in the above test; instead for
3769 * locale, the size can't normally change, except if the locale is a
3772 s = d = (U8*)SvPV_force_nomg(source, len);
3779 s = (const U8*)SvPV_nomg_const(source, len);
3782 SvUPGRADE(dest, SVt_PV);
3783 d = (U8*)SvGROW(dest, min);
3784 (void)SvPOK_only(dest);
3789 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3790 to check DO_UTF8 again here. */
3792 if (DO_UTF8(source)) {
3793 const U8 *const send = s + len;
3794 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3796 /* All occurrences of these are to be moved to follow any other marks.
3797 * This is context-dependent. We may not be passed enough context to
3798 * move the iota subscript beyond all of them, but we do the best we can
3799 * with what we're given. The result is always better than if we
3800 * hadn't done this. And, the problem would only arise if we are
3801 * passed a character without all its combining marks, which would be
3802 * the caller's mistake. The information this is based on comes from a
3803 * comment in Unicode SpecialCasing.txt, (and the Standard's text
3804 * itself) and so can't be checked properly to see if it ever gets
3805 * revised. But the likelihood of it changing is remote */
3806 bool in_iota_subscript = FALSE;
3812 if (in_iota_subscript && ! _is_utf8_mark(s)) {
3814 /* A non-mark. Time to output the iota subscript */
3815 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
3816 d += capital_iota_len;
3817 in_iota_subscript = FALSE;
3820 /* Then handle the current character. Get the changed case value
3821 * and copy it to the output buffer */
3824 #ifdef USE_LOCALE_CTYPE
3825 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
3827 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, 0);
3829 #define GREEK_CAPITAL_LETTER_IOTA 0x0399
3830 #define COMBINING_GREEK_YPOGEGRAMMENI 0x0345
3831 if (uv == GREEK_CAPITAL_LETTER_IOTA
3832 && utf8_to_uvchr_buf(s, send, 0) == COMBINING_GREEK_YPOGEGRAMMENI)
3834 in_iota_subscript = TRUE;
3837 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
3838 /* If the eventually required minimum size outgrows the
3839 * available space, we need to grow. */
3840 const UV o = d - (U8*)SvPVX_const(dest);
3842 /* If someone uppercases one million U+03B0s we SvGROW()
3843 * one million times. Or we could try guessing how much to
3844 * allocate without allocating too much. Such is life.
3845 * See corresponding comment in lc code for another option
3848 d = (U8*)SvPVX(dest) + o;
3850 Copy(tmpbuf, d, ulen, U8);
3855 if (in_iota_subscript) {
3856 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
3857 d += capital_iota_len;
3862 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3864 else { /* Not UTF-8 */
3866 const U8 *const send = s + len;
3868 /* Use locale casing if in locale; regular style if not treating
3869 * latin1 as having case; otherwise the latin1 casing. Do the
3870 * whole thing in a tight loop, for speed, */
3871 #ifdef USE_LOCALE_CTYPE
3872 if (IN_LC_RUNTIME(LC_CTYPE)) {
3873 if (IN_UTF8_CTYPE_LOCALE) {
3876 for (; s < send; d++, s++)
3877 *d = (U8) toUPPER_LC(*s);
3881 if (! IN_UNI_8_BIT) {
3882 for (; s < send; d++, s++) {
3887 #ifdef USE_LOCALE_CTYPE
3890 for (; s < send; d++, s++) {
3891 *d = toUPPER_LATIN1_MOD(*s);
3892 if (LIKELY(*d != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
3896 /* The mainstream case is the tight loop above. To avoid
3897 * extra tests in that, all three characters that require
3898 * special handling are mapped by the MOD to the one tested
3900 * Use the source to distinguish between the three cases */
3902 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
3904 /* uc() of this requires 2 characters, but they are
3905 * ASCII. If not enough room, grow the string */
3906 if (SvLEN(dest) < ++min) {
3907 const UV o = d - (U8*)SvPVX_const(dest);
3909 d = (U8*)SvPVX(dest) + o;
3911 *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
3912 continue; /* Back to the tight loop; still in ASCII */
3915 /* The other two special handling characters have their
3916 * upper cases outside the latin1 range, hence need to be
3917 * in UTF-8, so the whole result needs to be in UTF-8. So,
3918 * here we are somewhere in the middle of processing a
3919 * non-UTF-8 string, and realize that we will have to convert
3920 * the whole thing to UTF-8. What to do? There are
3921 * several possibilities. The simplest to code is to
3922 * convert what we have so far, set a flag, and continue on
3923 * in the loop. The flag would be tested each time through
3924 * the loop, and if set, the next character would be
3925 * converted to UTF-8 and stored. But, I (khw) didn't want
3926 * to slow down the mainstream case at all for this fairly
3927 * rare case, so I didn't want to add a test that didn't
3928 * absolutely have to be there in the loop, besides the
3929 * possibility that it would get too complicated for
3930 * optimizers to deal with. Another possibility is to just
3931 * give up, convert the source to UTF-8, and restart the
3932 * function that way. Another possibility is to convert
3933 * both what has already been processed and what is yet to
3934 * come separately to UTF-8, then jump into the loop that
3935 * handles UTF-8. But the most efficient time-wise of the
3936 * ones I could think of is what follows, and turned out to
3937 * not require much extra code. */
3939 /* Convert what we have so far into UTF-8, telling the
3940 * function that we know it should be converted, and to
3941 * allow extra space for what we haven't processed yet.
3942 * Assume the worst case space requirements for converting
3943 * what we haven't processed so far: that it will require
3944 * two bytes for each remaining source character, plus the
3945 * NUL at the end. This may cause the string pointer to
3946 * move, so re-find it. */
3948 len = d - (U8*)SvPVX_const(dest);
3949 SvCUR_set(dest, len);
3950 len = sv_utf8_upgrade_flags_grow(dest,
3951 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3953 d = (U8*)SvPVX(dest) + len;
3955 /* Now process the remainder of the source, converting to
3956 * upper and UTF-8. If a resulting byte is invariant in
3957 * UTF-8, output it as-is, otherwise convert to UTF-8 and
3958 * append it to the output. */
3959 for (; s < send; s++) {
3960 (void) _to_upper_title_latin1(*s, d, &len, 'S');
3964 /* Here have processed the whole source; no need to continue
3965 * with the outer loop. Each character has been converted
3966 * to upper case and converted to UTF-8 */
3969 } /* End of processing all latin1-style chars */
3970 } /* End of processing all chars */
3971 } /* End of source is not empty */
3973 if (source != dest) {
3974 *d = '\0'; /* Here d points to 1 after last char, add NUL */
3975 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3977 } /* End of isn't utf8 */
3978 #ifdef USE_LOCALE_CTYPE
3979 if (IN_LC_RUNTIME(LC_CTYPE)) {
3984 if (dest != source && SvTAINTED(source))
4002 if ( ( SvPADTMP(source)
4003 || ( SvTEMP(source) && !SvSMAGICAL(source)
4004 && SvREFCNT(source) == 1 )
4006 && !SvREADONLY(source) && SvPOK(source)
4007 && !DO_UTF8(source)) {
4009 /* We can convert in place, as lowercasing anything in the latin1 range
4010 * (or else DO_UTF8 would have been on) doesn't lengthen it */
4012 s = d = (U8*)SvPV_force_nomg(source, len);
4019 s = (const U8*)SvPV_nomg_const(source, len);
4022 SvUPGRADE(dest, SVt_PV);
4023 d = (U8*)SvGROW(dest, min);
4024 (void)SvPOK_only(dest);
4029 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
4030 to check DO_UTF8 again here. */
4032 if (DO_UTF8(source)) {
4033 const U8 *const send = s + len;
4034 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
4037 const STRLEN u = UTF8SKIP(s);
4040 #ifdef USE_LOCALE_CTYPE
4041 _to_utf8_lower_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
4043 _to_utf8_lower_flags(s, tmpbuf, &ulen, 0);
4046 /* Here is where we would do context-sensitive actions. See the
4047 * commit message for 86510fb15 for why there isn't any */
4049 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4051 /* If the eventually required minimum size outgrows the
4052 * available space, we need to grow. */
4053 const UV o = d - (U8*)SvPVX_const(dest);
4055 /* If someone lowercases one million U+0130s we SvGROW() one
4056 * million times. Or we could try guessing how much to
4057 * allocate without allocating too much. Such is life.
4058 * Another option would be to grow an extra byte or two more
4059 * each time we need to grow, which would cut down the million
4060 * to 500K, with little waste */
4062 d = (U8*)SvPVX(dest) + o;
4065 /* Copy the newly lowercased letter to the output buffer we're
4067 Copy(tmpbuf, d, ulen, U8);
4070 } /* End of looping through the source string */
4073 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4074 } else { /* Not utf8 */
4076 const U8 *const send = s + len;
4078 /* Use locale casing if in locale; regular style if not treating
4079 * latin1 as having case; otherwise the latin1 casing. Do the
4080 * whole thing in a tight loop, for speed, */
4081 #ifdef USE_LOCALE_CTYPE
4082 if (IN_LC_RUNTIME(LC_CTYPE)) {
4083 for (; s < send; d++, s++)
4084 *d = toLOWER_LC(*s);
4088 if (! IN_UNI_8_BIT) {
4089 for (; s < send; d++, s++) {
4094 for (; s < send; d++, s++) {
4095 *d = toLOWER_LATIN1(*s);
4099 if (source != dest) {
4101 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4104 #ifdef USE_LOCALE_CTYPE
4105 if (IN_LC_RUNTIME(LC_CTYPE)) {
4110 if (dest != source && SvTAINTED(source))
4119 SV * const sv = TOPs;
4121 const char *s = SvPV_const(sv,len);
4123 SvUTF8_off(TARG); /* decontaminate */
4126 SvUPGRADE(TARG, SVt_PV);
4127 SvGROW(TARG, (len * 2) + 1);
4131 STRLEN ulen = UTF8SKIP(s);
4132 bool to_quote = FALSE;
4134 if (UTF8_IS_INVARIANT(*s)) {
4135 if (_isQUOTEMETA(*s)) {
4139 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
4141 #ifdef USE_LOCALE_CTYPE
4142 /* In locale, we quote all non-ASCII Latin1 chars.
4143 * Otherwise use the quoting rules */
4145 IN_LC_RUNTIME(LC_CTYPE)
4148 _isQUOTEMETA(TWO_BYTE_UTF8_TO_NATIVE(*s, *(s + 1))))
4153 else if (is_QUOTEMETA_high(s)) {
4168 else if (IN_UNI_8_BIT) {
4170 if (_isQUOTEMETA(*s))
4176 /* For non UNI_8_BIT (and hence in locale) just quote all \W
4177 * including everything above ASCII */
4179 if (!isWORDCHAR_A(*s))
4185 SvCUR_set(TARG, d - SvPVX_const(TARG));
4186 (void)SvPOK_only_UTF8(TARG);
4189 sv_setpvn(TARG, s, len);
4205 U8 tmpbuf[UTF8_MAXBYTES_CASE + 1];
4206 const bool full_folding = TRUE; /* This variable is here so we can easily
4207 move to more generality later */
4208 const U8 flags = ( full_folding ? FOLD_FLAGS_FULL : 0 )
4209 #ifdef USE_LOCALE_CTYPE
4210 | ( IN_LC_RUNTIME(LC_CTYPE) ? FOLD_FLAGS_LOCALE : 0 )
4214 /* This is a facsimile of pp_lc, but with a thousand bugs thanks to me.
4215 * You are welcome(?) -Hugmeir
4223 s = (const U8*)SvPV_nomg_const(source, len);
4225 if (ckWARN(WARN_UNINITIALIZED))
4226 report_uninit(source);
4233 SvUPGRADE(dest, SVt_PV);
4234 d = (U8*)SvGROW(dest, min);
4235 (void)SvPOK_only(dest);
4240 if (DO_UTF8(source)) { /* UTF-8 flagged string. */
4242 const STRLEN u = UTF8SKIP(s);
4245 _to_utf8_fold_flags(s, tmpbuf, &ulen, flags);
4247 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4248 const UV o = d - (U8*)SvPVX_const(dest);
4250 d = (U8*)SvPVX(dest) + o;
4253 Copy(tmpbuf, d, ulen, U8);
4258 } /* Unflagged string */
4260 #ifdef USE_LOCALE_CTYPE
4261 if ( IN_LC_RUNTIME(LC_CTYPE) ) { /* Under locale */
4262 if (IN_UTF8_CTYPE_LOCALE) {
4263 goto do_uni_folding;
4265 for (; s < send; d++, s++)
4266 *d = (U8) toFOLD_LC(*s);
4270 if ( !IN_UNI_8_BIT ) { /* Under nothing, or bytes */
4271 for (; s < send; d++, s++)
4275 #ifdef USE_LOCALE_CTYPE
4278 /* For ASCII and the Latin-1 range, there's only two troublesome
4279 * folds, \x{DF} (\N{LATIN SMALL LETTER SHARP S}), which under full
4280 * casefolding becomes 'ss'; and \x{B5} (\N{MICRO SIGN}), which
4281 * under any fold becomes \x{3BC} (\N{GREEK SMALL LETTER MU}) --
4282 * For the rest, the casefold is their lowercase. */
4283 for (; s < send; d++, s++) {
4284 if (*s == MICRO_SIGN) {
4285 /* \N{MICRO SIGN}'s casefold is \N{GREEK SMALL LETTER MU},
4286 * which is outside of the latin-1 range. There's a couple
4287 * of ways to deal with this -- khw discusses them in
4288 * pp_lc/uc, so go there :) What we do here is upgrade what
4289 * we had already casefolded, then enter an inner loop that
4290 * appends the rest of the characters as UTF-8. */
4291 len = d - (U8*)SvPVX_const(dest);
4292 SvCUR_set(dest, len);
4293 len = sv_utf8_upgrade_flags_grow(dest,
4294 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
4295 /* The max expansion for latin1
4296 * chars is 1 byte becomes 2 */
4298 d = (U8*)SvPVX(dest) + len;
4300 Copy(GREEK_SMALL_LETTER_MU_UTF8, d, small_mu_len, U8);
4303 for (; s < send; s++) {
4305 UV fc = _to_uni_fold_flags(*s, tmpbuf, &ulen, flags);
4306 if UVCHR_IS_INVARIANT(fc) {
4308 && *s == LATIN_SMALL_LETTER_SHARP_S)
4317 Copy(tmpbuf, d, ulen, U8);
4323 else if (full_folding && *s == LATIN_SMALL_LETTER_SHARP_S) {
4324 /* Under full casefolding, LATIN SMALL LETTER SHARP S
4325 * becomes "ss", which may require growing the SV. */
4326 if (SvLEN(dest) < ++min) {
4327 const UV o = d - (U8*)SvPVX_const(dest);
4329 d = (U8*)SvPVX(dest) + o;
4334 else { /* If it's not one of those two, the fold is their lower
4336 *d = toLOWER_LATIN1(*s);
4342 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4344 #ifdef USE_LOCALE_CTYPE
4345 if (IN_LC_RUNTIME(LC_CTYPE)) {
4350 if (SvTAINTED(source))
4360 dSP; dMARK; dORIGMARK;
4361 AV *const av = MUTABLE_AV(POPs);
4362 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4364 if (SvTYPE(av) == SVt_PVAV) {
4365 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4366 bool can_preserve = FALSE;
4372 can_preserve = SvCANEXISTDELETE(av);
4375 if (lval && localizing) {
4378 for (svp = MARK + 1; svp <= SP; svp++) {
4379 const SSize_t elem = SvIV(*svp);
4383 if (max > AvMAX(av))
4387 while (++MARK <= SP) {
4389 SSize_t elem = SvIV(*MARK);
4390 bool preeminent = TRUE;
4392 if (localizing && can_preserve) {
4393 /* If we can determine whether the element exist,
4394 * Try to preserve the existenceness of a tied array
4395 * element by using EXISTS and DELETE if possible.
4396 * Fallback to FETCH and STORE otherwise. */
4397 preeminent = av_exists(av, elem);
4400 svp = av_fetch(av, elem, lval);
4403 DIE(aTHX_ PL_no_aelem, elem);
4406 save_aelem(av, elem, svp);
4408 SAVEADELETE(av, elem);
4411 *MARK = svp ? *svp : &PL_sv_undef;
4414 if (GIMME != G_ARRAY) {
4416 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4425 AV *const av = MUTABLE_AV(POPs);
4426 I32 lval = (PL_op->op_flags & OPf_MOD);
4427 SSize_t items = SP - MARK;
4429 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4430 const I32 flags = is_lvalue_sub();
4432 if (!(flags & OPpENTERSUB_INARGS))
4433 /* diag_listed_as: Can't modify %s in %s */
4434 Perl_croak(aTHX_ "Can't modify index/value array slice in list assignment");
4441 *(MARK+items*2-1) = *(MARK+items);
4447 while (++MARK <= SP) {
4450 svp = av_fetch(av, SvIV(*MARK), lval);
4452 if (!svp || !*svp || *svp == &PL_sv_undef) {
4453 DIE(aTHX_ PL_no_aelem, SvIV(*MARK));
4455 *MARK = sv_mortalcopy(*MARK);
4457 *++MARK = svp ? *svp : &PL_sv_undef;
4459 if (GIMME != G_ARRAY) {
4460 MARK = SP - items*2;
4461 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4467 /* Smart dereferencing for keys, values and each */
4478 (SvTYPE(sv) != SVt_PVHV && SvTYPE(sv) != SVt_PVAV)
4483 "Type of argument to %s must be unblessed hashref or arrayref",
4484 PL_op_desc[PL_op->op_type] );
4487 if (PL_op->op_flags & OPf_SPECIAL && SvTYPE(sv) == SVt_PVAV)
4489 "Can't modify %s in %s",
4490 PL_op_desc[PL_op->op_type], PL_op_desc[PL_op->op_next->op_type]
4493 /* Delegate to correct function for op type */
4495 if (PL_op->op_type == OP_RKEYS || PL_op->op_type == OP_RVALUES) {
4496 return (SvTYPE(sv) == SVt_PVHV) ? Perl_do_kv(aTHX) : Perl_pp_akeys(aTHX);
4499 return (SvTYPE(sv) == SVt_PVHV)
4500 ? Perl_pp_each(aTHX)
4501 : Perl_pp_aeach(aTHX);
4508 AV *array = MUTABLE_AV(POPs);
4509 const I32 gimme = GIMME_V;
4510 IV *iterp = Perl_av_iter_p(aTHX_ array);
4511 const IV current = (*iterp)++;
4513 if (current > av_tindex(array)) {
4515 if (gimme == G_SCALAR)
4523 if (gimme == G_ARRAY) {
4524 SV **const element = av_fetch(array, current, 0);
4525 PUSHs(element ? *element : &PL_sv_undef);
4533 AV *array = MUTABLE_AV(POPs);
4534 const I32 gimme = GIMME_V;
4536 *Perl_av_iter_p(aTHX_ array) = 0;
4538 if (gimme == G_SCALAR) {
4540 PUSHi(av_tindex(array) + 1);
4542 else if (gimme == G_ARRAY) {
4543 IV n = Perl_av_len(aTHX_ array);
4548 if (PL_op->op_type == OP_AKEYS || PL_op->op_type == OP_RKEYS) {
4549 for (i = 0; i <= n; i++) {
4554 for (i = 0; i <= n; i++) {
4555 SV *const *const elem = Perl_av_fetch(aTHX_ array, i, 0);
4556 PUSHs(elem ? *elem : &PL_sv_undef);
4563 /* Associative arrays. */
4568 HV * hash = MUTABLE_HV(POPs);
4570 const I32 gimme = GIMME_V;
4573 /* might clobber stack_sp */
4574 entry = hv_iternext(hash);
4579 SV* const sv = hv_iterkeysv(entry);
4580 PUSHs(sv); /* won't clobber stack_sp */
4581 if (gimme == G_ARRAY) {
4584 /* might clobber stack_sp */
4585 val = hv_iterval(hash, entry);
4590 else if (gimme == G_SCALAR)
4597 S_do_delete_local(pTHX)
4600 const I32 gimme = GIMME_V;
4603 const bool sliced = !!(PL_op->op_private & OPpSLICE);
4604 SV **unsliced_keysv = sliced ? NULL : sp--;
4605 SV * const osv = POPs;
4606 SV **mark = sliced ? PL_stack_base + POPMARK : unsliced_keysv-1;
4608 const bool tied = SvRMAGICAL(osv)
4609 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4610 const bool can_preserve = SvCANEXISTDELETE(osv);
4611 const U32 type = SvTYPE(osv);
4612 SV ** const end = sliced ? SP : unsliced_keysv;
4614 if (type == SVt_PVHV) { /* hash element */
4615 HV * const hv = MUTABLE_HV(osv);
4616 while (++MARK <= end) {
4617 SV * const keysv = *MARK;
4619 bool preeminent = TRUE;
4621 preeminent = hv_exists_ent(hv, keysv, 0);
4623 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4630 sv = hv_delete_ent(hv, keysv, 0, 0);
4632 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4635 if (!sv) DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4636 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4638 *MARK = sv_mortalcopy(sv);
4644 SAVEHDELETE(hv, keysv);
4645 *MARK = &PL_sv_undef;
4649 else if (type == SVt_PVAV) { /* array element */
4650 if (PL_op->op_flags & OPf_SPECIAL) {
4651 AV * const av = MUTABLE_AV(osv);
4652 while (++MARK <= end) {
4653 SSize_t idx = SvIV(*MARK);
4655 bool preeminent = TRUE;
4657 preeminent = av_exists(av, idx);
4659 SV **svp = av_fetch(av, idx, 1);
4666 sv = av_delete(av, idx, 0);
4668 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4671 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4673 *MARK = sv_mortalcopy(sv);
4679 SAVEADELETE(av, idx);
4680 *MARK = &PL_sv_undef;
4685 DIE(aTHX_ "panic: avhv_delete no longer supported");
4688 DIE(aTHX_ "Not a HASH reference");
4690 if (gimme == G_VOID)
4692 else if (gimme == G_SCALAR) {
4697 *++MARK = &PL_sv_undef;
4701 else if (gimme != G_VOID)
4702 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");
4778 if (UNLIKELY( PL_op->op_private & OPpEXISTS_SUB )) {
4780 SV * const sv = POPs;
4781 CV * const cv = sv_2cv(sv, &hv, &gv, 0);
4784 if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
4789 hv = MUTABLE_HV(POPs);
4790 if (LIKELY( SvTYPE(hv) == SVt_PVHV )) {
4791 if (hv_exists_ent(hv, tmpsv, 0))
4794 else if (SvTYPE(hv) == SVt_PVAV) {
4795 if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
4796 if (av_exists(MUTABLE_AV(hv), SvIV(tmpsv)))
4801 DIE(aTHX_ "Not a HASH reference");
4808 dSP; dMARK; dORIGMARK;
4809 HV * const hv = MUTABLE_HV(POPs);
4810 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4811 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4812 bool can_preserve = FALSE;
4818 if (SvCANEXISTDELETE(hv))
4819 can_preserve = TRUE;
4822 while (++MARK <= SP) {
4823 SV * const keysv = *MARK;
4826 bool preeminent = TRUE;
4828 if (localizing && can_preserve) {
4829 /* If we can determine whether the element exist,
4830 * try to preserve the existenceness of a tied hash
4831 * element by using EXISTS and DELETE if possible.
4832 * Fallback to FETCH and STORE otherwise. */
4833 preeminent = hv_exists_ent(hv, keysv, 0);
4836 he = hv_fetch_ent(hv, keysv, lval, 0);
4837 svp = he ? &HeVAL(he) : NULL;
4840 if (!svp || !*svp || *svp == &PL_sv_undef) {
4841 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4844 if (HvNAME_get(hv) && isGV(*svp))
4845 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
4846 else if (preeminent)
4847 save_helem_flags(hv, keysv, svp,
4848 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
4850 SAVEHDELETE(hv, keysv);
4853 *MARK = svp && *svp ? *svp : &PL_sv_undef;
4855 if (GIMME != G_ARRAY) {
4857 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4866 HV * const hv = MUTABLE_HV(POPs);
4867 I32 lval = (PL_op->op_flags & OPf_MOD);
4868 SSize_t items = SP - MARK;
4870 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4871 const I32 flags = is_lvalue_sub();
4873 if (!(flags & OPpENTERSUB_INARGS))
4874 /* diag_listed_as: Can't modify %s in %s */
4875 Perl_croak(aTHX_ "Can't modify key/value hash slice in list assignment");
4882 *(MARK+items*2-1) = *(MARK+items);
4888 while (++MARK <= SP) {
4889 SV * const keysv = *MARK;
4893 he = hv_fetch_ent(hv, keysv, lval, 0);
4894 svp = he ? &HeVAL(he) : NULL;
4897 if (!svp || !*svp || *svp == &PL_sv_undef) {
4898 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4900 *MARK = sv_mortalcopy(*MARK);
4902 *++MARK = svp && *svp ? *svp : &PL_sv_undef;
4904 if (GIMME != G_ARRAY) {
4905 MARK = SP - items*2;
4906 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4912 /* List operators. */
4916 I32 markidx = POPMARK;
4917 if (GIMME != G_ARRAY) {
4918 SV **mark = PL_stack_base + markidx;
4921 *MARK = *SP; /* unwanted list, return last item */
4923 *MARK = &PL_sv_undef;
4933 SV ** const lastrelem = PL_stack_sp;
4934 SV ** const lastlelem = PL_stack_base + POPMARK;
4935 SV ** const firstlelem = PL_stack_base + POPMARK + 1;
4936 SV ** const firstrelem = lastlelem + 1;
4937 I32 is_something_there = FALSE;
4938 const U8 mod = PL_op->op_flags & OPf_MOD;
4940 const I32 max = lastrelem - lastlelem;
4943 if (GIMME != G_ARRAY) {
4944 I32 ix = SvIV(*lastlelem);
4947 if (ix < 0 || ix >= max)
4948 *firstlelem = &PL_sv_undef;
4950 *firstlelem = firstrelem[ix];
4956 SP = firstlelem - 1;
4960 for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
4961 I32 ix = SvIV(*lelem);
4964 if (ix < 0 || ix >= max)
4965 *lelem = &PL_sv_undef;
4967 is_something_there = TRUE;
4968 if (!(*lelem = firstrelem[ix]))
4969 *lelem = &PL_sv_undef;
4970 else if (mod && SvPADTMP(*lelem)) {
4971 assert(!IS_PADGV(*lelem));
4972 *lelem = firstrelem[ix] = sv_mortalcopy(*lelem);
4976 if (is_something_there)
4979 SP = firstlelem - 1;
4986 const I32 items = SP - MARK;
4987 SV * const av = MUTABLE_SV(av_make(items, MARK+1));
4989 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
4990 ? newRV_noinc(av) : av);
4996 dSP; dMARK; dORIGMARK;
4997 HV* const hv = newHV();
4998 SV* const retval = sv_2mortal( PL_op->op_flags & OPf_SPECIAL
4999 ? newRV_noinc(MUTABLE_SV(hv))
5004 (MARK++, SvGMAGICAL(*MARK) ? sv_mortalcopy(*MARK) : *MARK);
5011 sv_setsv(val, *MARK);
5015 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash");
5018 (void)hv_store_ent(hv,key,val,0);
5026 S_deref_plain_array(pTHX_ AV *ary)
5028 if (SvTYPE(ary) == SVt_PVAV) return ary;
5029 SvGETMAGIC((SV *)ary);
5030 if (!SvROK(ary) || SvTYPE(SvRV(ary)) != SVt_PVAV)
5031 Perl_die(aTHX_ "Not an ARRAY reference");
5032 else if (SvOBJECT(SvRV(ary)))
5033 Perl_die(aTHX_ "Not an unblessed ARRAY reference");
5034 return (AV *)SvRV(ary);
5037 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
5038 # define DEREF_PLAIN_ARRAY(ary) \
5041 SvTYPE(aRrRay) == SVt_PVAV \
5043 : S_deref_plain_array(aTHX_ aRrRay); \
5046 # define DEREF_PLAIN_ARRAY(ary) \
5048 PL_Sv = (SV *)(ary), \
5049 SvTYPE(PL_Sv) == SVt_PVAV \
5051 : S_deref_plain_array(aTHX_ (AV *)PL_Sv) \
5057 dSP; dMARK; dORIGMARK;
5058 int num_args = (SP - MARK);
5059 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5068 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5071 return Perl_tied_method(aTHX_ SV_CONST(SPLICE), mark - 1, MUTABLE_SV(ary), mg,
5072 GIMME_V | TIED_METHOD_ARGUMENTS_ON_STACK,
5079 offset = i = SvIV(*MARK);
5081 offset += AvFILLp(ary) + 1;
5083 DIE(aTHX_ PL_no_aelem, i);
5085 length = SvIVx(*MARK++);
5087 length += AvFILLp(ary) - offset + 1;
5093 length = AvMAX(ary) + 1; /* close enough to infinity */
5097 length = AvMAX(ary) + 1;
5099 if (offset > AvFILLp(ary) + 1) {
5101 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "splice() offset past end of array" );
5102 offset = AvFILLp(ary) + 1;
5104 after = AvFILLp(ary) + 1 - (offset + length);
5105 if (after < 0) { /* not that much array */
5106 length += after; /* offset+length now in array */
5112 /* At this point, MARK .. SP-1 is our new LIST */
5115 diff = newlen - length;
5116 if (newlen && !AvREAL(ary) && AvREIFY(ary))
5119 /* make new elements SVs now: avoid problems if they're from the array */
5120 for (dst = MARK, i = newlen; i; i--) {
5121 SV * const h = *dst;
5122 *dst++ = newSVsv(h);
5125 if (diff < 0) { /* shrinking the area */
5126 SV **tmparyval = NULL;
5128 Newx(tmparyval, newlen, SV*); /* so remember insertion */
5129 Copy(MARK, tmparyval, newlen, SV*);
5132 MARK = ORIGMARK + 1;
5133 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5134 const bool real = cBOOL(AvREAL(ary));
5135 MEXTEND(MARK, length);
5137 EXTEND_MORTAL(length);
5138 for (i = 0, dst = MARK; i < length; i++) {
5139 if ((*dst = AvARRAY(ary)[i+offset])) {
5141 sv_2mortal(*dst); /* free them eventually */
5144 *dst = &PL_sv_undef;
5150 *MARK = AvARRAY(ary)[offset+length-1];
5153 for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
5154 SvREFCNT_dec(*dst++); /* free them now */
5157 AvFILLp(ary) += diff;
5159 /* pull up or down? */
5161 if (offset < after) { /* easier to pull up */
5162 if (offset) { /* esp. if nothing to pull */
5163 src = &AvARRAY(ary)[offset-1];
5164 dst = src - diff; /* diff is negative */
5165 for (i = offset; i > 0; i--) /* can't trust Copy */
5169 AvARRAY(ary) = AvARRAY(ary) - diff; /* diff is negative */
5173 if (after) { /* anything to pull down? */
5174 src = AvARRAY(ary) + offset + length;
5175 dst = src + diff; /* diff is negative */
5176 Move(src, dst, after, SV*);
5178 dst = &AvARRAY(ary)[AvFILLp(ary)+1];
5179 /* avoid later double free */
5186 Copy( tmparyval, AvARRAY(ary) + offset, newlen, SV* );
5187 Safefree(tmparyval);
5190 else { /* no, expanding (or same) */
5191 SV** tmparyval = NULL;
5193 Newx(tmparyval, length, SV*); /* so remember deletion */
5194 Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
5197 if (diff > 0) { /* expanding */
5198 /* push up or down? */
5199 if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
5203 Move(src, dst, offset, SV*);
5205 AvARRAY(ary) = AvARRAY(ary) - diff;/* diff is positive */
5207 AvFILLp(ary) += diff;
5210 if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
5211 av_extend(ary, AvFILLp(ary) + diff);
5212 AvFILLp(ary) += diff;
5215 dst = AvARRAY(ary) + AvFILLp(ary);
5217 for (i = after; i; i--) {
5225 Copy( MARK, AvARRAY(ary) + offset, newlen, SV* );
5228 MARK = ORIGMARK + 1;
5229 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5231 const bool real = cBOOL(AvREAL(ary));
5233 EXTEND_MORTAL(length);
5234 for (i = 0, dst = MARK; i < length; i++) {
5235 if ((*dst = tmparyval[i])) {
5237 sv_2mortal(*dst); /* free them eventually */
5239 else *dst = &PL_sv_undef;
5245 else if (length--) {
5246 *MARK = tmparyval[length];
5249 while (length-- > 0)
5250 SvREFCNT_dec(tmparyval[length]);
5254 *MARK = &PL_sv_undef;
5255 Safefree(tmparyval);
5259 mg_set(MUTABLE_SV(ary));
5267 dSP; dMARK; dORIGMARK; dTARGET;
5268 AV * const ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5269 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5272 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5275 ENTER_with_name("call_PUSH");
5276 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5277 LEAVE_with_name("call_PUSH");
5281 if (SvREADONLY(ary) && MARK < SP) Perl_croak_no_modify();
5282 PL_delaymagic = DM_DELAY;
5283 for (++MARK; MARK <= SP; MARK++) {
5285 if (*MARK) SvGETMAGIC(*MARK);
5288 sv_setsv_nomg(sv, *MARK);
5289 av_store(ary, AvFILLp(ary)+1, sv);
5291 if (PL_delaymagic & DM_ARRAY_ISA)
5292 mg_set(MUTABLE_SV(ary));
5297 if (OP_GIMME(PL_op, 0) != G_VOID) {
5298 PUSHi( AvFILL(ary) + 1 );
5306 AV * const av = PL_op->op_flags & OPf_SPECIAL
5307 ? MUTABLE_AV(GvAV(PL_defgv)) : DEREF_PLAIN_ARRAY(MUTABLE_AV(POPs));
5308 SV * const sv = PL_op->op_type == OP_SHIFT ? av_shift(av) : av_pop(av);
5312 (void)sv_2mortal(sv);
5319 dSP; dMARK; dORIGMARK; dTARGET;
5320 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5321 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5324 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5327 ENTER_with_name("call_UNSHIFT");
5328 call_sv(SV_CONST(UNSHIFT),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5329 LEAVE_with_name("call_UNSHIFT");
5334 av_unshift(ary, SP - MARK);
5336 SV * const sv = newSVsv(*++MARK);
5337 (void)av_store(ary, i++, sv);
5341 if (OP_GIMME(PL_op, 0) != G_VOID) {
5342 PUSHi( AvFILL(ary) + 1 );
5351 if (GIMME == G_ARRAY) {
5352 if (PL_op->op_private & OPpREVERSE_INPLACE) {
5356 assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
5357 (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
5358 av = MUTABLE_AV((*SP));
5359 /* In-place reversing only happens in void context for the array
5360 * assignment. We don't need to push anything on the stack. */
5363 if (SvMAGICAL(av)) {
5365 SV *tmp = sv_newmortal();
5366 /* For SvCANEXISTDELETE */
5369 bool can_preserve = SvCANEXISTDELETE(av);
5371 for (i = 0, j = av_tindex(av); i < j; ++i, --j) {
5375 if (!av_exists(av, i)) {
5376 if (av_exists(av, j)) {
5377 SV *sv = av_delete(av, j, 0);
5378 begin = *av_fetch(av, i, TRUE);
5379 sv_setsv_mg(begin, sv);
5383 else if (!av_exists(av, j)) {
5384 SV *sv = av_delete(av, i, 0);
5385 end = *av_fetch(av, j, TRUE);
5386 sv_setsv_mg(end, sv);
5391 begin = *av_fetch(av, i, TRUE);
5392 end = *av_fetch(av, j, TRUE);
5393 sv_setsv(tmp, begin);
5394 sv_setsv_mg(begin, end);
5395 sv_setsv_mg(end, tmp);
5399 SV **begin = AvARRAY(av);
5402 SV **end = begin + AvFILLp(av);
5404 while (begin < end) {
5405 SV * const tmp = *begin;
5416 SV * const tmp = *MARK;
5420 /* safe as long as stack cannot get extended in the above */
5431 SvUTF8_off(TARG); /* decontaminate */
5433 do_join(TARG, &PL_sv_no, MARK, SP);
5435 sv_setsv(TARG, SP > MARK ? *SP : find_rundefsv());
5438 up = SvPV_force(TARG, len);
5440 if (DO_UTF8(TARG)) { /* first reverse each character */
5441 U8* s = (U8*)SvPVX(TARG);
5442 const U8* send = (U8*)(s + len);
5444 if (UTF8_IS_INVARIANT(*s)) {
5449 if (!utf8_to_uvchr_buf(s, send, 0))
5453 down = (char*)(s - 1);
5454 /* reverse this character */
5458 *down-- = (char)tmp;
5464 down = SvPVX(TARG) + len - 1;
5468 *down-- = (char)tmp;
5470 (void)SvPOK_only_UTF8(TARG);
5482 IV limit = POPi; /* note, negative is forever */
5483 SV * const sv = POPs;
5485 const char *s = SvPV_const(sv, len);
5486 const bool do_utf8 = DO_UTF8(sv);
5487 const char *strend = s + len;
5493 const STRLEN slen = do_utf8
5494 ? utf8_length((U8*)s, (U8*)strend)
5495 : (STRLEN)(strend - s);
5496 SSize_t maxiters = slen + 10;
5497 I32 trailing_empty = 0;
5499 const I32 origlimit = limit;
5502 const I32 gimme = GIMME_V;
5504 const I32 oldsave = PL_savestack_ix;
5505 U32 make_mortal = SVs_TEMP;
5510 Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
5515 DIE(aTHX_ "panic: pp_split, pm=%p, s=%p", pm, s);
5518 TAINT_IF(get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET &&
5519 (RX_EXTFLAGS(rx) & (RXf_WHITE | RXf_SKIPWHITE)));
5522 if (pm->op_pmreplrootu.op_pmtargetoff) {
5523 ary = GvAVn(MUTABLE_GV(PAD_SVl(pm->op_pmreplrootu.op_pmtargetoff)));
5526 if (pm->op_pmreplrootu.op_pmtargetgv) {
5527 ary = GvAVn(pm->op_pmreplrootu.op_pmtargetgv);
5538 if ((mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied))) {
5540 XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
5547 for (i = AvFILLp(ary); i >= 0; i--)
5548 AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
5550 /* temporarily switch stacks */
5551 SAVESWITCHSTACK(PL_curstack, ary);
5555 base = SP - PL_stack_base;
5557 if (RX_EXTFLAGS(rx) & RXf_SKIPWHITE) {
5559 while (isSPACE_utf8(s))
5562 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5563 while (isSPACE_LC(*s))
5571 if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
5575 gimme_scalar = gimme == G_SCALAR && !ary;
5578 limit = maxiters + 2;
5579 if (RX_EXTFLAGS(rx) & RXf_WHITE) {
5582 /* this one uses 'm' and is a negative test */
5584 while (m < strend && ! isSPACE_utf8(m) ) {
5585 const int t = UTF8SKIP(m);
5586 /* isSPACE_utf8 returns FALSE for malform utf8 */
5593 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5595 while (m < strend && !isSPACE_LC(*m))
5598 while (m < strend && !isSPACE(*m))
5611 dstr = newSVpvn_flags(s, m-s,
5612 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5616 /* skip the whitespace found last */
5618 s = m + UTF8SKIP(m);
5622 /* this one uses 's' and is a positive test */
5624 while (s < strend && isSPACE_utf8(s) )
5627 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5629 while (s < strend && isSPACE_LC(*s))
5632 while (s < strend && isSPACE(*s))
5637 else if (RX_EXTFLAGS(rx) & RXf_START_ONLY) {
5639 for (m = s; m < strend && *m != '\n'; m++)
5652 dstr = newSVpvn_flags(s, m-s,
5653 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5659 else if (RX_EXTFLAGS(rx) & RXf_NULL && !(s >= strend)) {
5661 Pre-extend the stack, either the number of bytes or
5662 characters in the string or a limited amount, triggered by:
5664 my ($x, $y) = split //, $str;
5668 if (!gimme_scalar) {
5669 const U32 items = limit - 1;
5678 /* keep track of how many bytes we skip over */
5688 dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
5701 dstr = newSVpvn(s, 1);
5717 else if (do_utf8 == (RX_UTF8(rx) != 0) &&
5718 (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) && !RX_NPARENS(rx)
5719 && (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
5720 && !(RX_EXTFLAGS(rx) & RXf_IS_ANCHORED)) {
5721 const int tail = (RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL);
5722 SV * const csv = CALLREG_INTUIT_STRING(rx);
5724 len = RX_MINLENRET(rx);
5725 if (len == 1 && !RX_UTF8(rx) && !tail) {
5726 const char c = *SvPV_nolen_const(csv);
5728 for (m = s; m < strend && *m != c; m++)
5739 dstr = newSVpvn_flags(s, m-s,
5740 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5743 /* The rx->minlen is in characters but we want to step
5744 * s ahead by bytes. */
5746 s = (char*)utf8_hop((U8*)m, len);
5748 s = m + len; /* Fake \n at the end */
5752 while (s < strend && --limit &&
5753 (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
5754 csv, multiline ? FBMrf_MULTILINE : 0)) )
5763 dstr = newSVpvn_flags(s, m-s,
5764 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5767 /* The rx->minlen is in characters but we want to step
5768 * s ahead by bytes. */
5770 s = (char*)utf8_hop((U8*)m, len);
5772 s = m + len; /* Fake \n at the end */
5777 maxiters += slen * RX_NPARENS(rx);
5778 while (s < strend && --limit)
5782 rex_return = CALLREGEXEC(rx, (char*)s, (char*)strend, (char*)orig, 1,
5785 if (rex_return == 0)
5787 TAINT_IF(RX_MATCH_TAINTED(rx));
5788 /* we never pass the REXEC_COPY_STR flag, so it should
5789 * never get copied */
5790 assert(!RX_MATCH_COPIED(rx));
5791 m = RX_OFFS(rx)[0].start + orig;
5800 dstr = newSVpvn_flags(s, m-s,
5801 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5804 if (RX_NPARENS(rx)) {
5806 for (i = 1; i <= (I32)RX_NPARENS(rx); i++) {
5807 s = RX_OFFS(rx)[i].start + orig;
5808 m = RX_OFFS(rx)[i].end + orig;
5810 /* japhy (07/27/01) -- the (m && s) test doesn't catch
5811 parens that didn't match -- they should be set to
5812 undef, not the empty string */
5820 if (m >= orig && s >= orig) {
5821 dstr = newSVpvn_flags(s, m-s,
5822 (do_utf8 ? SVf_UTF8 : 0)
5826 dstr = &PL_sv_undef; /* undef, not "" */
5832 s = RX_OFFS(rx)[0].end + orig;
5836 if (!gimme_scalar) {
5837 iters = (SP - PL_stack_base) - base;
5839 if (iters > maxiters)
5840 DIE(aTHX_ "Split loop");
5842 /* keep field after final delim? */
5843 if (s < strend || (iters && origlimit)) {
5844 if (!gimme_scalar) {
5845 const STRLEN l = strend - s;
5846 dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5851 else if (!origlimit) {
5853 iters -= trailing_empty;
5855 while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
5856 if (TOPs && !make_mortal)
5858 *SP-- = &PL_sv_undef;
5865 LEAVE_SCOPE(oldsave); /* may undo an earlier SWITCHSTACK */
5869 if (SvSMAGICAL(ary)) {
5871 mg_set(MUTABLE_SV(ary));
5874 if (gimme == G_ARRAY) {
5876 Copy(AvARRAY(ary), SP + 1, iters, SV*);
5883 ENTER_with_name("call_PUSH");
5884 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5885 LEAVE_with_name("call_PUSH");
5887 if (gimme == G_ARRAY) {
5889 /* EXTEND should not be needed - we just popped them */
5891 for (i=0; i < iters; i++) {
5892 SV **svp = av_fetch(ary, i, FALSE);
5893 PUSHs((svp) ? *svp : &PL_sv_undef);
5900 if (gimme == G_ARRAY)
5912 SV *const sv = PAD_SVl(PL_op->op_targ);
5914 if (SvPADSTALE(sv)) {
5917 RETURNOP(cLOGOP->op_other);
5919 RETURNOP(cLOGOP->op_next);
5928 if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
5929 || SvTYPE(retsv) == SVt_PVCV) {
5930 retsv = refto(retsv);
5937 PP(unimplemented_op)
5939 const Optype op_type = PL_op->op_type;
5940 /* Using OP_NAME() isn't going to be helpful here. Firstly, it doesn't cope
5941 with out of range op numbers - it only "special" cases op_custom.
5942 Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
5943 if we get here for a custom op then that means that the custom op didn't
5944 have an implementation. Given that OP_NAME() looks up the custom op
5945 by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
5946 registers &PL_unimplemented_op as the address of their custom op.
5947 NULL doesn't generate a useful error message. "custom" does. */
5948 const char *const name = op_type >= OP_max
5949 ? "[out of range]" : PL_op_name[PL_op->op_type];
5950 if(OP_IS_SOCKET(op_type))
5951 DIE(aTHX_ PL_no_sock_func, name);
5952 DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
5955 /* For sorting out arguments passed to a &CORE:: subroutine */
5959 int opnum = SvIOK(cSVOP_sv) ? (int)SvUV(cSVOP_sv) : 0;
5960 int defgv = PL_opargs[opnum] & OA_DEFGV ||opnum==OP_GLOB, whicharg = 0;
5961 AV * const at_ = GvAV(PL_defgv);
5962 SV **svp = at_ ? AvARRAY(at_) : NULL;
5963 I32 minargs = 0, maxargs = 0, numargs = at_ ? AvFILLp(at_)+1 : 0;
5964 I32 oa = opnum ? PL_opargs[opnum] >> OASHIFT : 0;
5965 bool seen_question = 0;
5966 const char *err = NULL;
5967 const bool pushmark = PL_op->op_private & OPpCOREARGS_PUSHMARK;
5969 /* Count how many args there are first, to get some idea how far to
5970 extend the stack. */
5972 if ((oa & 7) == OA_LIST) { maxargs = I32_MAX; break; }
5974 if (oa & OA_OPTIONAL) seen_question = 1;
5975 if (!seen_question) minargs++;
5979 if(numargs < minargs) err = "Not enough";
5980 else if(numargs > maxargs) err = "Too many";
5982 /* diag_listed_as: Too many arguments for %s */
5984 "%s arguments for %s", err,
5985 opnum ? PL_op_desc[opnum] : SvPV_nolen_const(cSVOP_sv)
5988 /* Reset the stack pointer. Without this, we end up returning our own
5989 arguments in list context, in addition to the values we are supposed
5990 to return. nextstate usually does this on sub entry, but we need
5991 to run the next op with the caller's hints, so we cannot have a
5993 SP = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
5995 if(!maxargs) RETURN;
5997 /* We do this here, rather than with a separate pushmark op, as it has
5998 to come in between two things this function does (stack reset and
5999 arg pushing). This seems the easiest way to do it. */
6002 (void)Perl_pp_pushmark(aTHX);
6005 EXTEND(SP, maxargs == I32_MAX ? numargs : maxargs);
6006 PUTBACK; /* The code below can die in various places. */
6008 oa = PL_opargs[opnum] >> OASHIFT;
6009 for (; oa&&(numargs||!pushmark); (void)(numargs&&(++svp,--numargs))) {
6014 if (!numargs && defgv && whicharg == minargs + 1) {
6015 PUSHs(find_rundefsv2(
6016 find_runcv_where(FIND_RUNCV_level_eq, 1, NULL),
6017 cxstack[cxstack_ix].blk_oldcop->cop_seq
6020 else PUSHs(numargs ? svp && *svp ? *svp : &PL_sv_undef : NULL);
6024 PUSHs(svp && *svp ? *svp : &PL_sv_undef);
6029 if (!svp || !*svp || !SvROK(*svp)
6030 || SvTYPE(SvRV(*svp)) != SVt_PVHV)
6032 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
6033 "Type of arg %d to &CORE::%s must be hash reference",
6034 whicharg, OP_DESC(PL_op->op_next)
6039 if (!numargs) PUSHs(NULL);
6040 else if(svp && *svp && SvROK(*svp) && isGV_with_GP(SvRV(*svp)))
6041 /* no magic here, as the prototype will have added an extra
6042 refgen and we just want what was there before that */
6045 const bool constr = PL_op->op_private & whicharg;
6047 svp && *svp ? *svp : &PL_sv_undef,
6048 constr, cBOOL(CopHINTS_get(PL_curcop) & HINT_STRICT_REFS),
6054 if (!numargs) goto try_defsv;
6056 const bool wantscalar =
6057 PL_op->op_private & OPpCOREARGS_SCALARMOD;
6058 if (!svp || !*svp || !SvROK(*svp)
6059 /* We have to permit globrefs even for the \$ proto, as
6060 *foo is indistinguishable from ${\*foo}, and the proto-
6061 type permits the latter. */
6062 || SvTYPE(SvRV(*svp)) > (
6063 wantscalar ? SVt_PVLV
6064 : opnum == OP_LOCK || opnum == OP_UNDEF
6070 "Type of arg %d to &CORE::%s must be %s",
6071 whicharg, PL_op_name[opnum],
6073 ? "scalar reference"
6074 : opnum == OP_LOCK || opnum == OP_UNDEF
6075 ? "reference to one of [$@%&*]"
6076 : "reference to one of [$@%*]"
6079 if (opnum == OP_UNDEF && SvRV(*svp) == (SV *)PL_defgv
6080 && cxstack[cxstack_ix].cx_type & CXp_HASARGS) {
6081 /* Undo @_ localisation, so that sub exit does not undo
6082 part of our undeffing. */
6083 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
6085 cx->cx_type &= ~ CXp_HASARGS;
6086 assert(!AvREAL(cx->blk_sub.argarray));
6091 DIE(aTHX_ "panic: unknown OA_*: %x", (unsigned)(oa&7));
6103 if (PL_op->op_private & OPpOFFBYONE) {
6104 cv = find_runcv_where(FIND_RUNCV_level_eq, 1, NULL);
6106 else cv = find_runcv(NULL);
6107 XPUSHs(CvEVAL(cv) ? &PL_sv_undef : sv_2mortal(newRV((SV *)cv)));
6114 * c-indentation-style: bsd
6116 * indent-tabs-mode: nil
6119 * ex: set ts=8 sts=4 sw=4 et: