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)) {
580 SvREFCNT_inc_void_NN(sv);
583 sv_upgrade(rv, SVt_IV);
592 SV * const sv = TOPs;
600 /* use the return value that is in a register, its the same as TARG */
601 TARG = sv_ref(TARG,SvRV(sv),TRUE);
616 stash = CopSTASH(PL_curcop);
617 if (SvTYPE(stash) != SVt_PVHV)
618 Perl_croak(aTHX_ "Attempt to bless into a freed package");
621 SV * const ssv = POPs;
625 if (!ssv) goto curstash;
628 if (!SvAMAGIC(ssv)) {
630 Perl_croak(aTHX_ "Attempt to bless into a reference");
632 /* SvAMAGIC is on here, but it only means potentially overloaded,
633 so after stringification: */
634 ptr = SvPV_nomg_const(ssv,len);
635 /* We need to check the flag again: */
636 if (!SvAMAGIC(ssv)) goto frog;
638 else ptr = SvPV_nomg_const(ssv,len);
640 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
641 "Explicit blessing to '' (assuming package main)");
642 stash = gv_stashpvn(ptr, len, GV_ADD|SvUTF8(ssv));
645 (void)sv_bless(TOPs, stash);
655 const char * const elem = SvPV_const(sv, len);
656 GV * const gv = MUTABLE_GV(POPs);
661 /* elem will always be NUL terminated. */
662 const char * const second_letter = elem + 1;
665 if (len == 5 && strEQ(second_letter, "RRAY"))
667 tmpRef = MUTABLE_SV(GvAV(gv));
668 if (tmpRef && !AvREAL((const AV *)tmpRef)
669 && AvREIFY((const AV *)tmpRef))
670 av_reify(MUTABLE_AV(tmpRef));
674 if (len == 4 && strEQ(second_letter, "ODE"))
675 tmpRef = MUTABLE_SV(GvCVu(gv));
678 if (len == 10 && strEQ(second_letter, "ILEHANDLE")) {
679 /* finally deprecated in 5.8.0 */
680 deprecate("*glob{FILEHANDLE}");
681 tmpRef = MUTABLE_SV(GvIOp(gv));
684 if (len == 6 && strEQ(second_letter, "ORMAT"))
685 tmpRef = MUTABLE_SV(GvFORM(gv));
688 if (len == 4 && strEQ(second_letter, "LOB"))
689 tmpRef = MUTABLE_SV(gv);
692 if (len == 4 && strEQ(second_letter, "ASH"))
693 tmpRef = MUTABLE_SV(GvHV(gv));
696 if (*second_letter == 'O' && !elem[2] && len == 2)
697 tmpRef = MUTABLE_SV(GvIOp(gv));
700 if (len == 4 && strEQ(second_letter, "AME"))
701 sv = newSVhek(GvNAME_HEK(gv));
704 if (len == 7 && strEQ(second_letter, "ACKAGE")) {
705 const HV * const stash = GvSTASH(gv);
706 const HEK * const hek = stash ? HvNAME_HEK(stash) : NULL;
707 sv = hek ? newSVhek(hek) : newSVpvs("__ANON__");
711 if (len == 6 && strEQ(second_letter, "CALAR"))
726 /* Pattern matching */
734 if (len == 0 || len > I32_MAX || !SvPOK(sv) || SvUTF8(sv) || SvVALID(sv)) {
735 /* Historically, study was skipped in these cases. */
739 /* Make study a no-op. It's no longer useful and its existence
740 complicates matters elsewhere. */
749 if (PL_op->op_flags & OPf_STACKED)
751 else if (PL_op->op_private & OPpTARGET_MY)
757 if(PL_op->op_type == OP_TRANSR) {
759 const char * const pv = SvPV(sv,len);
760 SV * const newsv = newSVpvn_flags(pv, len, SVs_TEMP|SvUTF8(sv));
765 TARG = sv_newmortal();
771 /* Lvalue operators. */
774 S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
779 PERL_ARGS_ASSERT_DO_CHOMP;
781 if (chomping && (RsSNARF(PL_rs) || RsRECORD(PL_rs)))
783 if (SvTYPE(sv) == SVt_PVAV) {
785 AV *const av = MUTABLE_AV(sv);
786 const I32 max = AvFILL(av);
788 for (i = 0; i <= max; i++) {
789 sv = MUTABLE_SV(av_fetch(av, i, FALSE));
790 if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
791 do_chomp(retval, sv, chomping);
795 else if (SvTYPE(sv) == SVt_PVHV) {
796 HV* const hv = MUTABLE_HV(sv);
798 (void)hv_iterinit(hv);
799 while ((entry = hv_iternext(hv)))
800 do_chomp(retval, hv_iterval(hv,entry), chomping);
803 else if (SvREADONLY(sv)) {
804 Perl_croak_no_modify();
806 else if (SvIsCOW(sv)) {
807 sv_force_normal_flags(sv, 0);
812 /* XXX, here sv is utf8-ized as a side-effect!
813 If encoding.pm is used properly, almost string-generating
814 operations, including literal strings, chr(), input data, etc.
815 should have been utf8-ized already, right?
817 sv_recode_to_utf8(sv, PL_encoding);
823 char *temp_buffer = NULL;
832 while (len && s[-1] == '\n') {
839 STRLEN rslen, rs_charlen;
840 const char *rsptr = SvPV_const(PL_rs, rslen);
842 rs_charlen = SvUTF8(PL_rs)
846 if (SvUTF8(PL_rs) != SvUTF8(sv)) {
847 /* Assumption is that rs is shorter than the scalar. */
849 /* RS is utf8, scalar is 8 bit. */
851 temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
854 /* Cannot downgrade, therefore cannot possibly match
856 assert (temp_buffer == rsptr);
862 else if (PL_encoding) {
863 /* RS is 8 bit, encoding.pm is used.
864 * Do not recode PL_rs as a side-effect. */
865 svrecode = newSVpvn(rsptr, rslen);
866 sv_recode_to_utf8(svrecode, PL_encoding);
867 rsptr = SvPV_const(svrecode, rslen);
868 rs_charlen = sv_len_utf8(svrecode);
871 /* RS is 8 bit, scalar is utf8. */
872 temp_buffer = (char*)bytes_to_utf8((U8*)rsptr, &rslen);
886 if (memNE(s, rsptr, rslen))
888 SvIVX(retval) += rs_charlen;
891 s = SvPV_force_nomg_nolen(sv);
899 SvREFCNT_dec(svrecode);
901 Safefree(temp_buffer);
903 if (len && !SvPOK(sv))
904 s = SvPV_force_nomg(sv, len);
907 char * const send = s + len;
908 char * const start = s;
910 while (s > start && UTF8_IS_CONTINUATION(*s))
912 if (is_utf8_string((U8*)s, send - s)) {
913 sv_setpvn(retval, s, send - s);
915 SvCUR_set(sv, s - start);
921 sv_setpvs(retval, "");
925 sv_setpvn(retval, s, 1);
932 sv_setpvs(retval, "");
940 const bool chomping = PL_op->op_type == OP_SCHOMP;
944 do_chomp(TARG, TOPs, chomping);
951 dSP; dMARK; dTARGET; dORIGMARK;
952 const bool chomping = PL_op->op_type == OP_CHOMP;
957 do_chomp(TARG, *++MARK, chomping);
968 if (!PL_op->op_private) {
977 if (SvTHINKFIRST(sv))
978 sv_force_normal_flags(sv, SV_COW_DROP_PV|SV_IMMEDIATE_UNREF);
980 switch (SvTYPE(sv)) {
984 av_undef(MUTABLE_AV(sv));
987 hv_undef(MUTABLE_HV(sv));
990 if (cv_const_sv((const CV *)sv))
991 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
992 "Constant subroutine %"SVf" undefined",
993 SVfARG(CvANON((const CV *)sv)
994 ? newSVpvs_flags("(anonymous)", SVs_TEMP)
995 : sv_2mortal(newSVhek(
997 ? CvNAME_HEK((CV *)sv)
998 : GvENAME_HEK(CvGV((const CV *)sv))
1003 /* let user-undef'd sub keep its identity */
1004 cv_undef_flags(MUTABLE_CV(sv), CV_UNDEF_KEEP_NAME);
1007 assert(isGV_with_GP(sv));
1008 assert(!SvFAKE(sv));
1013 /* undef *Pkg::meth_name ... */
1015 = GvCVu((const GV *)sv) && (stash = GvSTASH((const GV *)sv))
1016 && HvENAME_get(stash);
1018 if((stash = GvHV((const GV *)sv))) {
1019 if(HvENAME_get(stash))
1020 SvREFCNT_inc_simple_void_NN(sv_2mortal((SV *)stash));
1024 SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
1025 gp_free(MUTABLE_GV(sv));
1027 GvGP_set(sv, gp_ref(gp));
1028 #ifndef PERL_DONT_CREATE_GVSV
1029 GvSV(sv) = newSV(0);
1031 GvLINE(sv) = CopLINE(PL_curcop);
1032 GvEGV(sv) = MUTABLE_GV(sv);
1036 mro_package_moved(NULL, stash, (const GV *)sv, 0);
1038 /* undef *Foo::ISA */
1039 if( strEQ(GvNAME((const GV *)sv), "ISA")
1040 && (stash = GvSTASH((const GV *)sv))
1041 && (method_changed || HvENAME(stash)) )
1042 mro_isa_changed_in(stash);
1043 else if(method_changed)
1044 mro_method_changed_in(
1045 GvSTASH((const GV *)sv)
1051 if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) {
1067 PL_op->op_type == OP_POSTINC || PL_op->op_type == OP_I_POSTINC;
1068 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
1069 Perl_croak_no_modify();
1071 TARG = sv_newmortal();
1072 sv_setsv(TARG, TOPs);
1073 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1074 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
1076 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
1077 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1081 else sv_dec_nomg(TOPs);
1083 /* special case for undef: see thread at 2003-03/msg00536.html in archive */
1084 if (inc && !SvOK(TARG))
1090 /* Ordinary operators. */
1094 dSP; dATARGET; SV *svl, *svr;
1095 #ifdef PERL_PRESERVE_IVUV
1098 tryAMAGICbin_MG(pow_amg, AMGf_assign|AMGf_numeric);
1101 #ifdef PERL_PRESERVE_IVUV
1102 /* For integer to integer power, we do the calculation by hand wherever
1103 we're sure it is safe; otherwise we call pow() and try to convert to
1104 integer afterwards. */
1105 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1113 const IV iv = SvIVX(svr);
1117 goto float_it; /* Can't do negative powers this way. */
1121 baseuok = SvUOK(svl);
1123 baseuv = SvUVX(svl);
1125 const IV iv = SvIVX(svl);
1128 baseuok = TRUE; /* effectively it's a UV now */
1130 baseuv = -iv; /* abs, baseuok == false records sign */
1133 /* now we have integer ** positive integer. */
1136 /* foo & (foo - 1) is zero only for a power of 2. */
1137 if (!(baseuv & (baseuv - 1))) {
1138 /* We are raising power-of-2 to a positive integer.
1139 The logic here will work for any base (even non-integer
1140 bases) but it can be less accurate than
1141 pow (base,power) or exp (power * log (base)) when the
1142 intermediate values start to spill out of the mantissa.
1143 With powers of 2 we know this can't happen.
1144 And powers of 2 are the favourite thing for perl
1145 programmers to notice ** not doing what they mean. */
1147 NV base = baseuok ? baseuv : -(NV)baseuv;
1152 while (power >>= 1) {
1160 SvIV_please_nomg(svr);
1163 unsigned int highbit = 8 * sizeof(UV);
1164 unsigned int diff = 8 * sizeof(UV);
1165 while (diff >>= 1) {
1167 if (baseuv >> highbit) {
1171 /* we now have baseuv < 2 ** highbit */
1172 if (power * highbit <= 8 * sizeof(UV)) {
1173 /* result will definitely fit in UV, so use UV math
1174 on same algorithm as above */
1177 const bool odd_power = cBOOL(power & 1);
1181 while (power >>= 1) {
1188 if (baseuok || !odd_power)
1189 /* answer is positive */
1191 else if (result <= (UV)IV_MAX)
1192 /* answer negative, fits in IV */
1193 SETi( -(IV)result );
1194 else if (result == (UV)IV_MIN)
1195 /* 2's complement assumption: special case IV_MIN */
1198 /* answer negative, doesn't fit */
1199 SETn( -(NV)result );
1207 NV right = SvNV_nomg(svr);
1208 NV left = SvNV_nomg(svl);
1211 #if defined(USE_LONG_DOUBLE) && defined(HAS_AIX_POWL_NEG_BASE_BUG)
1213 We are building perl with long double support and are on an AIX OS
1214 afflicted with a powl() function that wrongly returns NaNQ for any
1215 negative base. This was reported to IBM as PMR #23047-379 on
1216 03/06/2006. The problem exists in at least the following versions
1217 of AIX and the libm fileset, and no doubt others as well:
1219 AIX 4.3.3-ML10 bos.adt.libm 4.3.3.50
1220 AIX 5.1.0-ML04 bos.adt.libm 5.1.0.29
1221 AIX 5.2.0 bos.adt.libm 5.2.0.85
1223 So, until IBM fixes powl(), we provide the following workaround to
1224 handle the problem ourselves. Our logic is as follows: for
1225 negative bases (left), we use fmod(right, 2) to check if the
1226 exponent is an odd or even integer:
1228 - if odd, powl(left, right) == -powl(-left, right)
1229 - if even, powl(left, right) == powl(-left, right)
1231 If the exponent is not an integer, the result is rightly NaNQ, so
1232 we just return that (as NV_NAN).
1236 NV mod2 = Perl_fmod( right, 2.0 );
1237 if (mod2 == 1.0 || mod2 == -1.0) { /* odd integer */
1238 SETn( -Perl_pow( -left, right) );
1239 } else if (mod2 == 0.0) { /* even integer */
1240 SETn( Perl_pow( -left, right) );
1241 } else { /* fractional power */
1245 SETn( Perl_pow( left, right) );
1248 SETn( Perl_pow( left, right) );
1249 #endif /* HAS_AIX_POWL_NEG_BASE_BUG */
1251 #ifdef PERL_PRESERVE_IVUV
1253 SvIV_please_nomg(svr);
1261 dSP; dATARGET; SV *svl, *svr;
1262 tryAMAGICbin_MG(mult_amg, AMGf_assign|AMGf_numeric);
1265 #ifdef PERL_PRESERVE_IVUV
1266 if (SvIV_please_nomg(svr)) {
1267 /* Unless the left argument is integer in range we are going to have to
1268 use NV maths. Hence only attempt to coerce the right argument if
1269 we know the left is integer. */
1270 /* Left operand is defined, so is it IV? */
1271 if (SvIV_please_nomg(svl)) {
1272 bool auvok = SvUOK(svl);
1273 bool buvok = SvUOK(svr);
1274 const UV topmask = (~ (UV)0) << (4 * sizeof (UV));
1275 const UV botmask = ~((~ (UV)0) << (4 * sizeof (UV)));
1284 const IV aiv = SvIVX(svl);
1287 auvok = TRUE; /* effectively it's a UV now */
1289 alow = -aiv; /* abs, auvok == false records sign */
1295 const IV biv = SvIVX(svr);
1298 buvok = TRUE; /* effectively it's a UV now */
1300 blow = -biv; /* abs, buvok == false records sign */
1304 /* If this does sign extension on unsigned it's time for plan B */
1305 ahigh = alow >> (4 * sizeof (UV));
1307 bhigh = blow >> (4 * sizeof (UV));
1309 if (ahigh && bhigh) {
1311 /* eg 32 bit is at least 0x10000 * 0x10000 == 0x100000000
1312 which is overflow. Drop to NVs below. */
1313 } else if (!ahigh && !bhigh) {
1314 /* eg 32 bit is at most 0xFFFF * 0xFFFF == 0xFFFE0001
1315 so the unsigned multiply cannot overflow. */
1316 const UV product = alow * blow;
1317 if (auvok == buvok) {
1318 /* -ve * -ve or +ve * +ve gives a +ve result. */
1322 } else if (product <= (UV)IV_MIN) {
1323 /* 2s complement assumption that (UV)-IV_MIN is correct. */
1324 /* -ve result, which could overflow an IV */
1326 SETi( -(IV)product );
1328 } /* else drop to NVs below. */
1330 /* One operand is large, 1 small */
1333 /* swap the operands */
1335 bhigh = blow; /* bhigh now the temp var for the swap */
1339 /* now, ((ahigh * blow) << half_UV_len) + (alow * blow)
1340 multiplies can't overflow. shift can, add can, -ve can. */
1341 product_middle = ahigh * blow;
1342 if (!(product_middle & topmask)) {
1343 /* OK, (ahigh * blow) won't lose bits when we shift it. */
1345 product_middle <<= (4 * sizeof (UV));
1346 product_low = alow * blow;
1348 /* as for pp_add, UV + something mustn't get smaller.
1349 IIRC ANSI mandates this wrapping *behaviour* for
1350 unsigned whatever the actual representation*/
1351 product_low += product_middle;
1352 if (product_low >= product_middle) {
1353 /* didn't overflow */
1354 if (auvok == buvok) {
1355 /* -ve * -ve or +ve * +ve gives a +ve result. */
1357 SETu( product_low );
1359 } else if (product_low <= (UV)IV_MIN) {
1360 /* 2s complement assumption again */
1361 /* -ve result, which could overflow an IV */
1363 SETi( -(IV)product_low );
1365 } /* else drop to NVs below. */
1367 } /* product_middle too large */
1368 } /* ahigh && bhigh */
1373 NV right = SvNV_nomg(svr);
1374 NV left = SvNV_nomg(svl);
1376 SETn( left * right );
1383 dSP; dATARGET; SV *svl, *svr;
1384 tryAMAGICbin_MG(div_amg, AMGf_assign|AMGf_numeric);
1387 /* Only try to do UV divide first
1388 if ((SLOPPYDIVIDE is true) or
1389 (PERL_PRESERVE_IVUV is true and one or both SV is a UV too large
1391 The assumption is that it is better to use floating point divide
1392 whenever possible, only doing integer divide first if we can't be sure.
1393 If NV_PRESERVES_UV is true then we know at compile time that no UV
1394 can be too large to preserve, so don't need to compile the code to
1395 test the size of UVs. */
1398 # define PERL_TRY_UV_DIVIDE
1399 /* ensure that 20./5. == 4. */
1401 # ifdef PERL_PRESERVE_IVUV
1402 # ifndef NV_PRESERVES_UV
1403 # define PERL_TRY_UV_DIVIDE
1408 #ifdef PERL_TRY_UV_DIVIDE
1409 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1410 bool left_non_neg = SvUOK(svl);
1411 bool right_non_neg = SvUOK(svr);
1415 if (right_non_neg) {
1419 const IV biv = SvIVX(svr);
1422 right_non_neg = TRUE; /* effectively it's a UV now */
1428 /* historically undef()/0 gives a "Use of uninitialized value"
1429 warning before dieing, hence this test goes here.
1430 If it were immediately before the second SvIV_please, then
1431 DIE() would be invoked before left was even inspected, so
1432 no inspection would give no warning. */
1434 DIE(aTHX_ "Illegal division by zero");
1440 const IV aiv = SvIVX(svl);
1443 left_non_neg = TRUE; /* effectively it's a UV now */
1452 /* For sloppy divide we always attempt integer division. */
1454 /* Otherwise we only attempt it if either or both operands
1455 would not be preserved by an NV. If both fit in NVs
1456 we fall through to the NV divide code below. However,
1457 as left >= right to ensure integer result here, we know that
1458 we can skip the test on the right operand - right big
1459 enough not to be preserved can't get here unless left is
1462 && (left > ((UV)1 << NV_PRESERVES_UV_BITS))
1465 /* Integer division can't overflow, but it can be imprecise. */
1466 const UV result = left / right;
1467 if (result * right == left) {
1468 SP--; /* result is valid */
1469 if (left_non_neg == right_non_neg) {
1470 /* signs identical, result is positive. */
1474 /* 2s complement assumption */
1475 if (result <= (UV)IV_MIN)
1476 SETi( -(IV)result );
1478 /* It's exact but too negative for IV. */
1479 SETn( -(NV)result );
1482 } /* tried integer divide but it was not an integer result */
1483 } /* else (PERL_ABS(result) < 1.0) or (both UVs in range for NV) */
1484 } /* one operand wasn't SvIOK */
1485 #endif /* PERL_TRY_UV_DIVIDE */
1487 NV right = SvNV_nomg(svr);
1488 NV left = SvNV_nomg(svl);
1489 (void)POPs;(void)POPs;
1490 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1491 if (! Perl_isnan(right) && right == 0.0)
1495 DIE(aTHX_ "Illegal division by zero");
1496 PUSHn( left / right );
1504 tryAMAGICbin_MG(modulo_amg, AMGf_assign|AMGf_numeric);
1508 bool left_neg = FALSE;
1509 bool right_neg = FALSE;
1510 bool use_double = FALSE;
1511 bool dright_valid = FALSE;
1514 SV * const svr = TOPs;
1515 SV * const svl = TOPm1s;
1516 if (SvIV_please_nomg(svr)) {
1517 right_neg = !SvUOK(svr);
1521 const IV biv = SvIVX(svr);
1524 right_neg = FALSE; /* effectively it's a UV now */
1531 dright = SvNV_nomg(svr);
1532 right_neg = dright < 0;
1535 if (dright < UV_MAX_P1) {
1536 right = U_V(dright);
1537 dright_valid = TRUE; /* In case we need to use double below. */
1543 /* At this point use_double is only true if right is out of range for
1544 a UV. In range NV has been rounded down to nearest UV and
1545 use_double false. */
1546 if (!use_double && SvIV_please_nomg(svl)) {
1547 left_neg = !SvUOK(svl);
1551 const IV aiv = SvIVX(svl);
1554 left_neg = FALSE; /* effectively it's a UV now */
1561 dleft = SvNV_nomg(svl);
1562 left_neg = dleft < 0;
1566 /* This should be exactly the 5.6 behaviour - if left and right are
1567 both in range for UV then use U_V() rather than floor. */
1569 if (dleft < UV_MAX_P1) {
1570 /* right was in range, so is dleft, so use UVs not double.
1574 /* left is out of range for UV, right was in range, so promote
1575 right (back) to double. */
1577 /* The +0.5 is used in 5.6 even though it is not strictly
1578 consistent with the implicit +0 floor in the U_V()
1579 inside the #if 1. */
1580 dleft = Perl_floor(dleft + 0.5);
1583 dright = Perl_floor(dright + 0.5);
1594 DIE(aTHX_ "Illegal modulus zero");
1596 dans = Perl_fmod(dleft, dright);
1597 if ((left_neg != right_neg) && dans)
1598 dans = dright - dans;
1601 sv_setnv(TARG, dans);
1607 DIE(aTHX_ "Illegal modulus zero");
1610 if ((left_neg != right_neg) && ans)
1613 /* XXX may warn: unary minus operator applied to unsigned type */
1614 /* could change -foo to be (~foo)+1 instead */
1615 if (ans <= ~((UV)IV_MAX)+1)
1616 sv_setiv(TARG, ~ans+1);
1618 sv_setnv(TARG, -(NV)ans);
1621 sv_setuv(TARG, ans);
1634 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1635 /* TODO: think of some way of doing list-repeat overloading ??? */
1640 tryAMAGICbin_MG(repeat_amg, AMGf_assign);
1646 const UV uv = SvUV_nomg(sv);
1648 count = IV_MAX; /* The best we can do? */
1652 count = SvIV_nomg(sv);
1655 else if (SvNOKp(sv)) {
1656 const NV nv = SvNV_nomg(sv);
1658 count = -1; /* An arbitrary negative integer */
1663 count = SvIV_nomg(sv);
1667 Perl_ck_warner(aTHX_ packWARN(WARN_NUMERIC),
1668 "Negative repeat count does nothing");
1671 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1673 static const char* const oom_list_extend = "Out of memory during list extend";
1674 const I32 items = SP - MARK;
1675 const I32 max = items * count;
1676 const U8 mod = PL_op->op_flags & OPf_MOD;
1678 MEM_WRAP_CHECK_1(max, SV*, oom_list_extend);
1679 /* Did the max computation overflow? */
1680 if (items > 0 && max > 0 && (max < items || max < count))
1681 Perl_croak(aTHX_ "%s", oom_list_extend);
1686 /* This code was intended to fix 20010809.028:
1689 for (($x =~ /./g) x 2) {
1690 print chop; # "abcdabcd" expected as output.
1693 * but that change (#11635) broke this code:
1695 $x = [("foo")x2]; # only one "foo" ended up in the anonlist.
1697 * I can't think of a better fix that doesn't introduce
1698 * an efficiency hit by copying the SVs. The stack isn't
1699 * refcounted, and mortalisation obviously doesn't
1700 * Do The Right Thing when the stack has more than
1701 * one pointer to the same mortal value.
1705 *SP = sv_2mortal(newSVsv(*SP));
1710 if (mod && SvPADTMP(*SP)) {
1711 *SP = sv_mortalcopy(*SP);
1719 repeatcpy((char*)(MARK + items), (char*)MARK,
1720 items * sizeof(const SV *), count - 1);
1723 else if (count <= 0)
1726 else { /* Note: mark already snarfed by pp_list */
1727 SV * const tmpstr = POPs;
1730 static const char* const oom_string_extend =
1731 "Out of memory during string extend";
1734 sv_setsv_nomg(TARG, tmpstr);
1735 SvPV_force_nomg(TARG, len);
1736 isutf = DO_UTF8(TARG);
1741 const STRLEN max = (UV)count * len;
1742 if (len > MEM_SIZE_MAX / count)
1743 Perl_croak(aTHX_ "%s", oom_string_extend);
1744 MEM_WRAP_CHECK_1(max, char, oom_string_extend);
1745 SvGROW(TARG, max + 1);
1746 repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
1747 SvCUR_set(TARG, SvCUR(TARG) * count);
1749 *SvEND(TARG) = '\0';
1752 (void)SvPOK_only_UTF8(TARG);
1754 (void)SvPOK_only(TARG);
1756 if (PL_op->op_private & OPpREPEAT_DOLIST) {
1757 /* The parser saw this as a list repeat, and there
1758 are probably several items on the stack. But we're
1759 in scalar context, and there's no pp_list to save us
1760 now. So drop the rest of the items -- robin@kitsite.com
1772 dSP; dATARGET; bool useleft; SV *svl, *svr;
1773 tryAMAGICbin_MG(subtr_amg, AMGf_assign|AMGf_numeric);
1776 useleft = USE_LEFT(svl);
1777 #ifdef PERL_PRESERVE_IVUV
1778 /* See comments in pp_add (in pp_hot.c) about Overflow, and how
1779 "bad things" happen if you rely on signed integers wrapping. */
1780 if (SvIV_please_nomg(svr)) {
1781 /* Unless the left argument is integer in range we are going to have to
1782 use NV maths. Hence only attempt to coerce the right argument if
1783 we know the left is integer. */
1790 a_valid = auvok = 1;
1791 /* left operand is undef, treat as zero. */
1793 /* Left operand is defined, so is it IV? */
1794 if (SvIV_please_nomg(svl)) {
1795 if ((auvok = SvUOK(svl)))
1798 const IV aiv = SvIVX(svl);
1801 auvok = 1; /* Now acting as a sign flag. */
1802 } else { /* 2s complement assumption for IV_MIN */
1810 bool result_good = 0;
1813 bool buvok = SvUOK(svr);
1818 const IV biv = SvIVX(svr);
1825 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
1826 else "IV" now, independent of how it came in.
1827 if a, b represents positive, A, B negative, a maps to -A etc
1832 all UV maths. negate result if A negative.
1833 subtract if signs same, add if signs differ. */
1835 if (auvok ^ buvok) {
1844 /* Must get smaller */
1849 if (result <= buv) {
1850 /* result really should be -(auv-buv). as its negation
1851 of true value, need to swap our result flag */
1863 if (result <= (UV)IV_MIN)
1864 SETi( -(IV)result );
1866 /* result valid, but out of range for IV. */
1867 SETn( -(NV)result );
1871 } /* Overflow, drop through to NVs. */
1876 NV value = SvNV_nomg(svr);
1880 /* left operand is undef, treat as zero - value */
1884 SETn( SvNV_nomg(svl) - value );
1891 dSP; dATARGET; SV *svl, *svr;
1892 tryAMAGICbin_MG(lshift_amg, AMGf_assign|AMGf_numeric);
1896 const IV shift = SvIV_nomg(svr);
1897 if (PL_op->op_private & HINT_INTEGER) {
1898 const IV i = SvIV_nomg(svl);
1902 const UV u = SvUV_nomg(svl);
1911 dSP; dATARGET; SV *svl, *svr;
1912 tryAMAGICbin_MG(rshift_amg, AMGf_assign|AMGf_numeric);
1916 const IV shift = SvIV_nomg(svr);
1917 if (PL_op->op_private & HINT_INTEGER) {
1918 const IV i = SvIV_nomg(svl);
1922 const UV u = SvUV_nomg(svl);
1934 tryAMAGICbin_MG(lt_amg, AMGf_set|AMGf_numeric);
1938 (SvIOK_notUV(left) && SvIOK_notUV(right))
1939 ? (SvIVX(left) < SvIVX(right))
1940 : (do_ncmp(left, right) == -1)
1950 tryAMAGICbin_MG(gt_amg, AMGf_set|AMGf_numeric);
1954 (SvIOK_notUV(left) && SvIOK_notUV(right))
1955 ? (SvIVX(left) > SvIVX(right))
1956 : (do_ncmp(left, right) == 1)
1966 tryAMAGICbin_MG(le_amg, AMGf_set|AMGf_numeric);
1970 (SvIOK_notUV(left) && SvIOK_notUV(right))
1971 ? (SvIVX(left) <= SvIVX(right))
1972 : (do_ncmp(left, right) <= 0)
1982 tryAMAGICbin_MG(ge_amg, AMGf_set|AMGf_numeric);
1986 (SvIOK_notUV(left) && SvIOK_notUV(right))
1987 ? (SvIVX(left) >= SvIVX(right))
1988 : ( (do_ncmp(left, right) & 2) == 0)
1998 tryAMAGICbin_MG(ne_amg, AMGf_set|AMGf_numeric);
2002 (SvIOK_notUV(left) && SvIOK_notUV(right))
2003 ? (SvIVX(left) != SvIVX(right))
2004 : (do_ncmp(left, right) != 0)
2009 /* compare left and right SVs. Returns:
2013 * 2: left or right was a NaN
2016 Perl_do_ncmp(pTHX_ SV* const left, SV * const right)
2018 PERL_ARGS_ASSERT_DO_NCMP;
2019 #ifdef PERL_PRESERVE_IVUV
2020 /* Fortunately it seems NaN isn't IOK */
2021 if (SvIV_please_nomg(right) && SvIV_please_nomg(left)) {
2023 const IV leftiv = SvIVX(left);
2024 if (!SvUOK(right)) {
2025 /* ## IV <=> IV ## */
2026 const IV rightiv = SvIVX(right);
2027 return (leftiv > rightiv) - (leftiv < rightiv);
2029 /* ## IV <=> UV ## */
2031 /* As (b) is a UV, it's >=0, so it must be < */
2034 const UV rightuv = SvUVX(right);
2035 return ((UV)leftiv > rightuv) - ((UV)leftiv < rightuv);
2040 /* ## UV <=> UV ## */
2041 const UV leftuv = SvUVX(left);
2042 const UV rightuv = SvUVX(right);
2043 return (leftuv > rightuv) - (leftuv < rightuv);
2045 /* ## UV <=> IV ## */
2047 const IV rightiv = SvIVX(right);
2049 /* As (a) is a UV, it's >=0, so it cannot be < */
2052 const UV leftuv = SvUVX(left);
2053 return (leftuv > (UV)rightiv) - (leftuv < (UV)rightiv);
2056 assert(0); /* NOTREACHED */
2060 NV const rnv = SvNV_nomg(right);
2061 NV const lnv = SvNV_nomg(left);
2063 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2064 if (Perl_isnan(lnv) || Perl_isnan(rnv)) {
2067 return (lnv > rnv) - (lnv < rnv);
2086 tryAMAGICbin_MG(ncmp_amg, AMGf_numeric);
2089 value = do_ncmp(left, right);
2104 int amg_type = sle_amg;
2108 switch (PL_op->op_type) {
2127 tryAMAGICbin_MG(amg_type, AMGf_set);
2131 #ifdef USE_LOCALE_COLLATE
2132 (IN_LC_RUNTIME(LC_COLLATE))
2133 ? sv_cmp_locale_flags(left, right, 0)
2136 sv_cmp_flags(left, right, 0);
2137 SETs(boolSV(cmp * multiplier < rhs));
2145 tryAMAGICbin_MG(seq_amg, AMGf_set);
2148 SETs(boolSV(sv_eq_flags(left, right, 0)));
2156 tryAMAGICbin_MG(sne_amg, AMGf_set);
2159 SETs(boolSV(!sv_eq_flags(left, right, 0)));
2167 tryAMAGICbin_MG(scmp_amg, 0);
2171 #ifdef USE_LOCALE_COLLATE
2172 (IN_LC_RUNTIME(LC_COLLATE))
2173 ? sv_cmp_locale_flags(left, right, 0)
2176 sv_cmp_flags(left, right, 0);
2185 tryAMAGICbin_MG(band_amg, AMGf_assign);
2188 if (SvNIOKp(left) || SvNIOKp(right)) {
2189 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2190 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2191 if (PL_op->op_private & HINT_INTEGER) {
2192 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2196 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2199 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2200 if (right_ro_nonnum) SvNIOK_off(right);
2203 do_vop(PL_op->op_type, TARG, left, right);
2213 const int op_type = PL_op->op_type;
2215 tryAMAGICbin_MG((op_type == OP_BIT_OR ? bor_amg : bxor_amg), AMGf_assign);
2218 if (SvNIOKp(left) || SvNIOKp(right)) {
2219 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2220 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2221 if (PL_op->op_private & HINT_INTEGER) {
2222 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2223 const IV r = SvIV_nomg(right);
2224 const IV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2228 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2229 const UV r = SvUV_nomg(right);
2230 const UV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2233 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2234 if (right_ro_nonnum) SvNIOK_off(right);
2237 do_vop(op_type, TARG, left, right);
2244 PERL_STATIC_INLINE bool
2245 S_negate_string(pTHX)
2250 SV * const sv = TOPs;
2251 if (!SvPOKp(sv) || SvNIOK(sv) || (!SvPOK(sv) && SvNIOKp(sv)))
2253 s = SvPV_nomg_const(sv, len);
2254 if (isIDFIRST(*s)) {
2255 sv_setpvs(TARG, "-");
2258 else if (*s == '+' || (*s == '-' && !looks_like_number(sv))) {
2259 sv_setsv_nomg(TARG, sv);
2260 *SvPV_force_nomg(TARG, len) = *s == '-' ? '+' : '-';
2270 tryAMAGICun_MG(neg_amg, AMGf_numeric);
2271 if (S_negate_string(aTHX)) return NORMAL;
2273 SV * const sv = TOPs;
2276 /* It's publicly an integer */
2279 if (SvIVX(sv) == IV_MIN) {
2280 /* 2s complement assumption. */
2281 SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) ==
2285 else if (SvUVX(sv) <= IV_MAX) {
2290 else if (SvIVX(sv) != IV_MIN) {
2294 #ifdef PERL_PRESERVE_IVUV
2301 if (SvNIOKp(sv) && (SvNIOK(sv) || !SvPOK(sv)))
2302 SETn(-SvNV_nomg(sv));
2303 else if (SvPOKp(sv) && SvIV_please_nomg(sv))
2304 goto oops_its_an_int;
2306 SETn(-SvNV_nomg(sv));
2314 tryAMAGICun_MG(not_amg, AMGf_set);
2315 *PL_stack_sp = boolSV(!SvTRUE_nomg(*PL_stack_sp));
2322 tryAMAGICun_MG(compl_amg, AMGf_numeric);
2326 if (PL_op->op_private & HINT_INTEGER) {
2327 const IV i = ~SvIV_nomg(sv);
2331 const UV u = ~SvUV_nomg(sv);
2340 sv_copypv_nomg(TARG, sv);
2341 tmps = (U8*)SvPV_nomg(TARG, len);
2344 /* Calculate exact length, let's not estimate. */
2349 U8 * const send = tmps + len;
2350 U8 * const origtmps = tmps;
2351 const UV utf8flags = UTF8_ALLOW_ANYUV;
2353 while (tmps < send) {
2354 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2356 targlen += UNISKIP(~c);
2362 /* Now rewind strings and write them. */
2369 Newx(result, targlen + 1, U8);
2371 while (tmps < send) {
2372 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2374 p = uvchr_to_utf8_flags(p, ~c, UNICODE_ALLOW_ANY);
2377 sv_usepvn_flags(TARG, (char*)result, targlen,
2378 SV_HAS_TRAILING_NUL);
2385 Newx(result, nchar + 1, U8);
2387 while (tmps < send) {
2388 const U8 c = (U8)utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2393 sv_usepvn_flags(TARG, (char*)result, nchar, SV_HAS_TRAILING_NUL);
2402 for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
2405 for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
2410 for ( ; anum > 0; anum--, tmps++)
2418 /* integer versions of some of the above */
2423 tryAMAGICbin_MG(mult_amg, AMGf_assign);
2426 SETi( left * right );
2435 tryAMAGICbin_MG(div_amg, AMGf_assign);
2438 IV value = SvIV_nomg(right);
2440 DIE(aTHX_ "Illegal division by zero");
2441 num = SvIV_nomg(left);
2443 /* avoid FPE_INTOVF on some platforms when num is IV_MIN */
2447 value = num / value;
2453 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS)
2460 /* This is the vanilla old i_modulo. */
2462 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2466 DIE(aTHX_ "Illegal modulus zero");
2467 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2471 SETi( left % right );
2476 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS)
2481 /* This is the i_modulo with the workaround for the _moddi3 bug
2482 * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
2483 * See below for pp_i_modulo. */
2485 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2489 DIE(aTHX_ "Illegal modulus zero");
2490 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2494 SETi( left % PERL_ABS(right) );
2501 dVAR; dSP; dATARGET;
2502 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2506 DIE(aTHX_ "Illegal modulus zero");
2507 /* The assumption is to use hereafter the old vanilla version... */
2509 PL_ppaddr[OP_I_MODULO] =
2511 /* .. but if we have glibc, we might have a buggy _moddi3
2512 * (at least glicb 2.2.5 is known to have this bug), in other
2513 * words our integer modulus with negative quad as the second
2514 * argument might be broken. Test for this and re-patch the
2515 * opcode dispatch table if that is the case, remembering to
2516 * also apply the workaround so that this first round works
2517 * right, too. See [perl #9402] for more information. */
2521 /* Cannot do this check with inlined IV constants since
2522 * that seems to work correctly even with the buggy glibc. */
2524 /* Yikes, we have the bug.
2525 * Patch in the workaround version. */
2527 PL_ppaddr[OP_I_MODULO] =
2528 &Perl_pp_i_modulo_1;
2529 /* Make certain we work right this time, too. */
2530 right = PERL_ABS(right);
2533 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2537 SETi( left % right );
2546 tryAMAGICbin_MG(add_amg, AMGf_assign);
2548 dPOPTOPiirl_ul_nomg;
2549 SETi( left + right );
2557 tryAMAGICbin_MG(subtr_amg, AMGf_assign);
2559 dPOPTOPiirl_ul_nomg;
2560 SETi( left - right );
2568 tryAMAGICbin_MG(lt_amg, AMGf_set);
2571 SETs(boolSV(left < right));
2579 tryAMAGICbin_MG(gt_amg, AMGf_set);
2582 SETs(boolSV(left > right));
2590 tryAMAGICbin_MG(le_amg, AMGf_set);
2593 SETs(boolSV(left <= right));
2601 tryAMAGICbin_MG(ge_amg, AMGf_set);
2604 SETs(boolSV(left >= right));
2612 tryAMAGICbin_MG(eq_amg, AMGf_set);
2615 SETs(boolSV(left == right));
2623 tryAMAGICbin_MG(ne_amg, AMGf_set);
2626 SETs(boolSV(left != right));
2634 tryAMAGICbin_MG(ncmp_amg, 0);
2641 else if (left < right)
2653 tryAMAGICun_MG(neg_amg, 0);
2654 if (S_negate_string(aTHX)) return NORMAL;
2656 SV * const sv = TOPs;
2657 IV const i = SvIV_nomg(sv);
2663 /* High falutin' math. */
2668 tryAMAGICbin_MG(atan2_amg, 0);
2671 SETn(Perl_atan2(left, right));
2679 int amg_type = fallback_amg;
2680 const char *neg_report = NULL;
2681 const int op_type = PL_op->op_type;
2684 case OP_SIN: amg_type = sin_amg; break;
2685 case OP_COS: amg_type = cos_amg; break;
2686 case OP_EXP: amg_type = exp_amg; break;
2687 case OP_LOG: amg_type = log_amg; neg_report = "log"; break;
2688 case OP_SQRT: amg_type = sqrt_amg; neg_report = "sqrt"; break;
2691 assert(amg_type != fallback_amg);
2693 tryAMAGICun_MG(amg_type, 0);
2695 SV * const arg = POPs;
2696 const NV value = SvNV_nomg(arg);
2698 if (neg_report) { /* log or sqrt */
2699 if (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0)) {
2700 SET_NUMERIC_STANDARD();
2701 /* diag_listed_as: Can't take log of %g */
2702 DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
2707 case OP_SIN: result = Perl_sin(value); break;
2708 case OP_COS: result = Perl_cos(value); break;
2709 case OP_EXP: result = Perl_exp(value); break;
2710 case OP_LOG: result = Perl_log(value); break;
2711 case OP_SQRT: result = Perl_sqrt(value); break;
2718 /* Support Configure command-line overrides for rand() functions.
2719 After 5.005, perhaps we should replace this by Configure support
2720 for drand48(), random(), or rand(). For 5.005, though, maintain
2721 compatibility by calling rand() but allow the user to override it.
2722 See INSTALL for details. --Andy Dougherty 15 July 1998
2724 /* Now it's after 5.005, and Configure supports drand48() and random(),
2725 in addition to rand(). So the overrides should not be needed any more.
2726 --Jarkko Hietaniemi 27 September 1998
2731 if (!PL_srand_called) {
2732 (void)seedDrand01((Rand_seed_t)seed());
2733 PL_srand_called = TRUE;
2743 SV * const sv = POPs;
2749 /* 1 of 2 things can be carried through SvNV, SP or TARG, SP was carried */
2757 sv_setnv_mg(TARG, value);
2768 if (MAXARG >= 1 && (TOPs || POPs)) {
2775 pv = SvPV(top, len);
2776 flags = grok_number(pv, len, &anum);
2778 if (!(flags & IS_NUMBER_IN_UV)) {
2779 Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
2780 "Integer overflow in srand");
2788 (void)seedDrand01((Rand_seed_t)anum);
2789 PL_srand_called = TRUE;
2793 /* Historically srand always returned true. We can avoid breaking
2795 sv_setpvs(TARG, "0 but true");
2804 tryAMAGICun_MG(int_amg, AMGf_numeric);
2806 SV * const sv = TOPs;
2807 const IV iv = SvIV_nomg(sv);
2808 /* XXX it's arguable that compiler casting to IV might be subtly
2809 different from modf (for numbers inside (IV_MIN,UV_MAX)) in which
2810 else preferring IV has introduced a subtle behaviour change bug. OTOH
2811 relying on floating point to be accurate is a bug. */
2816 else if (SvIOK(sv)) {
2818 SETu(SvUV_nomg(sv));
2823 const NV value = SvNV_nomg(sv);
2825 if (value < (NV)UV_MAX + 0.5) {
2828 SETn(Perl_floor(value));
2832 if (value > (NV)IV_MIN - 0.5) {
2835 SETn(Perl_ceil(value));
2846 tryAMAGICun_MG(abs_amg, AMGf_numeric);
2848 SV * const sv = TOPs;
2849 /* This will cache the NV value if string isn't actually integer */
2850 const IV iv = SvIV_nomg(sv);
2855 else if (SvIOK(sv)) {
2856 /* IVX is precise */
2858 SETu(SvUV_nomg(sv)); /* force it to be numeric only */
2866 /* 2s complement assumption. Also, not really needed as
2867 IV_MIN and -IV_MIN should both be %100...00 and NV-able */
2873 const NV value = SvNV_nomg(sv);
2887 I32 flags = PERL_SCAN_ALLOW_UNDERSCORES;
2891 SV* const sv = POPs;
2893 tmps = (SvPV_const(sv, len));
2895 /* If Unicode, try to downgrade
2896 * If not possible, croak. */
2897 SV* const tsv = sv_2mortal(newSVsv(sv));
2900 sv_utf8_downgrade(tsv, FALSE);
2901 tmps = SvPV_const(tsv, len);
2903 if (PL_op->op_type == OP_HEX)
2906 while (*tmps && len && isSPACE(*tmps))
2910 if (isALPHA_FOLD_EQ(*tmps, 'x')) {
2912 result_uv = grok_hex (tmps, &len, &flags, &result_nv);
2914 else if (isALPHA_FOLD_EQ(*tmps, 'b'))
2915 result_uv = grok_bin (tmps, &len, &flags, &result_nv);
2917 result_uv = grok_oct (tmps, &len, &flags, &result_nv);
2919 if (flags & PERL_SCAN_GREATER_THAN_UV_MAX) {
2933 SV * const sv = TOPs;
2938 SETi(sv_len_utf8_nomg(sv));
2942 (void)SvPV_nomg_const(sv,len);
2946 if (!SvPADTMP(TARG)) {
2947 sv_setsv_nomg(TARG, &PL_sv_undef);
2955 /* Returns false if substring is completely outside original string.
2956 No length is indicated by len_iv = 0 and len_is_uv = 0. len_is_uv must
2957 always be true for an explicit 0.
2960 Perl_translate_substr_offsets( STRLEN curlen, IV pos1_iv,
2961 bool pos1_is_uv, IV len_iv,
2962 bool len_is_uv, STRLEN *posp,
2968 PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS;
2970 if (!pos1_is_uv && pos1_iv < 0 && curlen) {
2971 pos1_is_uv = curlen-1 > ~(UV)pos1_iv;
2974 if ((pos1_is_uv || pos1_iv > 0) && (UV)pos1_iv > curlen)
2977 if (len_iv || len_is_uv) {
2978 if (!len_is_uv && len_iv < 0) {
2979 pos2_iv = curlen + len_iv;
2981 pos2_is_uv = curlen-1 > ~(UV)len_iv;
2984 } else { /* len_iv >= 0 */
2985 if (!pos1_is_uv && pos1_iv < 0) {
2986 pos2_iv = pos1_iv + len_iv;
2987 pos2_is_uv = (UV)len_iv > (UV)IV_MAX;
2989 if ((UV)len_iv > curlen-(UV)pos1_iv)
2992 pos2_iv = pos1_iv+len_iv;
3002 if (!pos2_is_uv && pos2_iv < 0) {
3003 if (!pos1_is_uv && pos1_iv < 0)
3007 else if (!pos1_is_uv && pos1_iv < 0)
3010 if ((UV)pos2_iv < (UV)pos1_iv)
3012 if ((UV)pos2_iv > curlen)
3015 /* pos1_iv and pos2_iv both in 0..curlen, so the cast is safe */
3016 *posp = (STRLEN)( (UV)pos1_iv );
3017 *lenp = (STRLEN)( (UV)pos2_iv - (UV)pos1_iv );
3034 I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3035 const bool rvalue = (GIMME_V != G_VOID);
3038 const char *repl = NULL;
3040 int num_args = PL_op->op_private & 7;
3041 bool repl_need_utf8_upgrade = FALSE;
3045 if(!(repl_sv = POPs)) num_args--;
3047 if ((len_sv = POPs)) {
3048 len_iv = SvIV(len_sv);
3049 len_is_uv = len_iv ? SvIOK_UV(len_sv) : 1;
3054 pos1_iv = SvIV(pos_sv);
3055 pos1_is_uv = SvIOK_UV(pos_sv);
3057 if (PL_op->op_private & OPpSUBSTR_REPL_FIRST) {
3062 if (lvalue && !repl_sv) {
3064 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3065 sv_magic(ret, NULL, PERL_MAGIC_substr, NULL, 0);
3067 LvTARG(ret) = SvREFCNT_inc_simple(sv);
3069 pos1_is_uv || pos1_iv >= 0
3070 ? (STRLEN)(UV)pos1_iv
3071 : (LvFLAGS(ret) |= 1, (STRLEN)(UV)-pos1_iv);
3073 len_is_uv || len_iv > 0
3074 ? (STRLEN)(UV)len_iv
3075 : (LvFLAGS(ret) |= 2, (STRLEN)(UV)-len_iv);
3078 PUSHs(ret); /* avoid SvSETMAGIC here */
3082 repl = SvPV_const(repl_sv, repl_len);
3085 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
3086 "Attempt to use reference as lvalue in substr"
3088 tmps = SvPV_force_nomg(sv, curlen);
3089 if (DO_UTF8(repl_sv) && repl_len) {
3091 sv_utf8_upgrade_nomg(sv);
3095 else if (DO_UTF8(sv))
3096 repl_need_utf8_upgrade = TRUE;
3098 else tmps = SvPV_const(sv, curlen);
3100 utf8_curlen = sv_or_pv_len_utf8(sv, tmps, curlen);
3101 if (utf8_curlen == curlen)
3104 curlen = utf8_curlen;
3110 STRLEN pos, len, byte_len, byte_pos;
3112 if (!translate_substr_offsets(
3113 curlen, pos1_iv, pos1_is_uv, len_iv, len_is_uv, &pos, &len
3117 byte_pos = utf8_curlen
3118 ? sv_or_pv_pos_u2b(sv, tmps, pos, &byte_len) : pos;
3123 SvTAINTED_off(TARG); /* decontaminate */
3124 SvUTF8_off(TARG); /* decontaminate */
3125 sv_setpvn(TARG, tmps, byte_len);
3126 #ifdef USE_LOCALE_COLLATE
3127 sv_unmagic(TARG, PERL_MAGIC_collxfrm);
3134 SV* repl_sv_copy = NULL;
3136 if (repl_need_utf8_upgrade) {
3137 repl_sv_copy = newSVsv(repl_sv);
3138 sv_utf8_upgrade(repl_sv_copy);
3139 repl = SvPV_const(repl_sv_copy, repl_len);
3143 sv_insert_flags(sv, byte_pos, byte_len, repl, repl_len, 0);
3144 SvREFCNT_dec(repl_sv_copy);
3156 Perl_croak(aTHX_ "substr outside of string");
3157 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
3164 const IV size = POPi;
3165 const IV offset = POPi;
3166 SV * const src = POPs;
3167 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3170 if (lvalue) { /* it's an lvalue! */
3171 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3172 sv_magic(ret, NULL, PERL_MAGIC_vec, NULL, 0);
3174 LvTARG(ret) = SvREFCNT_inc_simple(src);
3175 LvTARGOFF(ret) = offset;
3176 LvTARGLEN(ret) = size;
3180 SvTAINTED_off(TARG); /* decontaminate */
3184 sv_setuv(ret, do_vecget(src, offset, size));
3200 const char *little_p;
3203 const bool is_index = PL_op->op_type == OP_INDEX;
3204 const bool threeargs = MAXARG >= 3 && (TOPs || ((void)POPs,0));
3210 big_p = SvPV_const(big, biglen);
3211 little_p = SvPV_const(little, llen);
3213 big_utf8 = DO_UTF8(big);
3214 little_utf8 = DO_UTF8(little);
3215 if (big_utf8 ^ little_utf8) {
3216 /* One needs to be upgraded. */
3217 if (little_utf8 && !PL_encoding) {
3218 /* Well, maybe instead we might be able to downgrade the small
3220 char * const pv = (char*)bytes_from_utf8((U8 *)little_p, &llen,
3223 /* If the large string is ISO-8859-1, and it's not possible to
3224 convert the small string to ISO-8859-1, then there is no
3225 way that it could be found anywhere by index. */
3230 /* At this point, pv is a malloc()ed string. So donate it to temp
3231 to ensure it will get free()d */
3232 little = temp = newSV(0);
3233 sv_usepvn(temp, pv, llen);
3234 little_p = SvPVX(little);
3237 ? newSVpvn(big_p, biglen) : newSVpvn(little_p, llen);
3240 sv_recode_to_utf8(temp, PL_encoding);
3242 sv_utf8_upgrade(temp);
3247 big_p = SvPV_const(big, biglen);
3250 little_p = SvPV_const(little, llen);
3254 if (SvGAMAGIC(big)) {
3255 /* Life just becomes a lot easier if I use a temporary here.
3256 Otherwise I need to avoid calls to sv_pos_u2b(), which (dangerously)
3257 will trigger magic and overloading again, as will fbm_instr()
3259 big = newSVpvn_flags(big_p, biglen,
3260 SVs_TEMP | (big_utf8 ? SVf_UTF8 : 0));
3263 if (SvGAMAGIC(little) || (is_index && !SvOK(little))) {
3264 /* index && SvOK() is a hack. fbm_instr() calls SvPV_const, which will
3265 warn on undef, and we've already triggered a warning with the
3266 SvPV_const some lines above. We can't remove that, as we need to
3267 call some SvPV to trigger overloading early and find out if the
3269 This is all getting to messy. The API isn't quite clean enough,
3270 because data access has side effects.
3272 little = newSVpvn_flags(little_p, llen,
3273 SVs_TEMP | (little_utf8 ? SVf_UTF8 : 0));
3274 little_p = SvPVX(little);
3278 offset = is_index ? 0 : biglen;
3280 if (big_utf8 && offset > 0)
3281 offset = sv_pos_u2b_flags(big, offset, 0, SV_CONST_RETURN);
3287 else if (offset > (SSize_t)biglen)
3289 if (!(little_p = is_index
3290 ? fbm_instr((unsigned char*)big_p + offset,
3291 (unsigned char*)big_p + biglen, little, 0)
3292 : rninstr(big_p, big_p + offset,
3293 little_p, little_p + llen)))
3296 retval = little_p - big_p;
3297 if (retval > 0 && big_utf8)
3298 retval = sv_pos_b2u_flags(big, retval, SV_CONST_RETURN);
3308 dSP; dMARK; dORIGMARK; dTARGET;
3309 SvTAINTED_off(TARG);
3310 do_sprintf(TARG, SP-MARK, MARK+1);
3311 TAINT_IF(SvTAINTED(TARG));
3323 const U8 *s = (U8*)SvPV_const(argsv, len);
3325 if (PL_encoding && SvPOK(argsv) && !DO_UTF8(argsv)) {
3326 SV * const tmpsv = sv_2mortal(newSVsv(argsv));
3327 s = (U8*)sv_recode_to_utf8(tmpsv, PL_encoding);
3328 len = UTF8SKIP(s); /* Should be well-formed; so this is its length */
3332 XPUSHu(DO_UTF8(argsv)
3333 ? utf8n_to_uvchr(s, len, 0, UTF8_ALLOW_ANYUV)
3347 if (SvNOK(top) && Perl_isinfnan(SvNV(top))) {
3348 if (ckWARN(WARN_UTF8)) {
3349 Perl_warner(aTHX_ packWARN(WARN_UTF8),
3350 "Invalid number (%"NVgf") in chr", SvNV(top));
3352 value = UNICODE_REPLACEMENT;
3355 if (!IN_BYTES /* under bytes, chr(-1) eq chr(0xff), etc. */
3356 && ((SvIOKp(top) && !SvIsUV(top) && SvIV_nomg(top) < 0)
3358 ((SvNOKp(top) || (SvOK(top) && !SvIsUV(top)))
3359 && SvNV_nomg(top) < 0.0))) {
3360 if (ckWARN(WARN_UTF8)) {
3361 if (SvGMAGICAL(top)) {
3362 SV *top2 = sv_newmortal();
3363 sv_setsv_nomg(top2, top);
3366 Perl_warner(aTHX_ packWARN(WARN_UTF8),
3367 "Invalid negative number (%"SVf") in chr", SVfARG(top));
3369 value = UNICODE_REPLACEMENT;
3371 value = SvUV_nomg(top);
3375 SvUPGRADE(TARG,SVt_PV);
3377 if (value > 255 && !IN_BYTES) {
3378 SvGROW(TARG, (STRLEN)UNISKIP(value)+1);
3379 tmps = (char*)uvchr_to_utf8_flags((U8*)SvPVX(TARG), value, 0);
3380 SvCUR_set(TARG, tmps - SvPVX_const(TARG));
3382 (void)SvPOK_only(TARG);
3391 *tmps++ = (char)value;
3393 (void)SvPOK_only(TARG);
3395 if (PL_encoding && !IN_BYTES) {
3396 sv_recode_to_utf8(TARG, PL_encoding);
3398 if (SvCUR(TARG) == 0
3399 || ! is_utf8_string((U8*)tmps, SvCUR(TARG))
3400 || UTF8_IS_REPLACEMENT((U8*) tmps, (U8*) tmps + SvCUR(TARG)))
3405 *tmps++ = (char)value;
3421 const char *tmps = SvPV_const(left, len);
3423 if (DO_UTF8(left)) {
3424 /* If Unicode, try to downgrade.
3425 * If not possible, croak.
3426 * Yes, we made this up. */
3427 SV* const tsv = sv_2mortal(newSVsv(left));
3430 sv_utf8_downgrade(tsv, FALSE);
3431 tmps = SvPV_const(tsv, len);
3433 # ifdef USE_ITHREADS
3435 if (!PL_reentrant_buffer->_crypt_struct_buffer) {
3436 /* This should be threadsafe because in ithreads there is only
3437 * one thread per interpreter. If this would not be true,
3438 * we would need a mutex to protect this malloc. */
3439 PL_reentrant_buffer->_crypt_struct_buffer =
3440 (struct crypt_data *)safemalloc(sizeof(struct crypt_data));
3441 #if defined(__GLIBC__) || defined(__EMX__)
3442 if (PL_reentrant_buffer->_crypt_struct_buffer) {
3443 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
3444 /* work around glibc-2.2.5 bug */
3445 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
3449 # endif /* HAS_CRYPT_R */
3450 # endif /* USE_ITHREADS */
3452 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
3454 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
3460 "The crypt() function is unimplemented due to excessive paranoia.");
3464 /* Generally UTF-8 and UTF-EBCDIC are indistinguishable at this level. So
3465 * most comments below say UTF-8, when in fact they mean UTF-EBCDIC as well */
3469 /* Actually is both lcfirst() and ucfirst(). Only the first character
3470 * changes. This means that possibly we can change in-place, ie., just
3471 * take the source and change that one character and store it back, but not
3472 * if read-only etc, or if the length changes */
3476 STRLEN slen; /* slen is the byte length of the whole SV. */
3479 bool inplace; /* ? Convert first char only, in-place */
3480 bool doing_utf8 = FALSE; /* ? using utf8 */
3481 bool convert_source_to_utf8 = FALSE; /* ? need to convert */
3482 const int op_type = PL_op->op_type;
3485 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3486 STRLEN ulen; /* ulen is the byte length of the original Unicode character
3487 * stored as UTF-8 at s. */
3488 STRLEN tculen; /* tculen is the byte length of the freshly titlecased (or
3489 * lowercased) character stored in tmpbuf. May be either
3490 * UTF-8 or not, but in either case is the number of bytes */
3492 s = (const U8*)SvPV_const(source, slen);
3494 /* We may be able to get away with changing only the first character, in
3495 * place, but not if read-only, etc. Later we may discover more reasons to
3496 * not convert in-place. */
3497 inplace = !SvREADONLY(source)
3498 && ( SvPADTMP(source)
3499 || ( SvTEMP(source) && !SvSMAGICAL(source)
3500 && SvREFCNT(source) == 1));
3502 /* First calculate what the changed first character should be. This affects
3503 * whether we can just swap it out, leaving the rest of the string unchanged,
3504 * or even if have to convert the dest to UTF-8 when the source isn't */
3506 if (! slen) { /* If empty */
3507 need = 1; /* still need a trailing NUL */
3510 else if (DO_UTF8(source)) { /* Is the source utf8? */
3513 if (op_type == OP_UCFIRST) {
3514 #ifdef USE_LOCALE_CTYPE
3515 _to_utf8_title_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3517 _to_utf8_title_flags(s, tmpbuf, &tculen, 0);
3521 #ifdef USE_LOCALE_CTYPE
3522 _to_utf8_lower_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3524 _to_utf8_lower_flags(s, tmpbuf, &tculen, 0);
3528 /* we can't do in-place if the length changes. */
3529 if (ulen != tculen) inplace = FALSE;
3530 need = slen + 1 - ulen + tculen;
3532 else { /* Non-zero length, non-UTF-8, Need to consider locale and if
3533 * latin1 is treated as caseless. Note that a locale takes
3535 ulen = 1; /* Original character is 1 byte */
3536 tculen = 1; /* Most characters will require one byte, but this will
3537 * need to be overridden for the tricky ones */
3540 if (op_type == OP_LCFIRST) {
3542 /* lower case the first letter: no trickiness for any character */
3544 #ifdef USE_LOCALE_CTYPE
3545 (IN_LC_RUNTIME(LC_CTYPE))
3550 ? toLOWER_LATIN1(*s)
3554 #ifdef USE_LOCALE_CTYPE
3555 else if (IN_LC_RUNTIME(LC_CTYPE)) {
3556 if (IN_UTF8_CTYPE_LOCALE) {
3560 *tmpbuf = (U8) toUPPER_LC(*s); /* This would be a bug if any
3561 locales have upper and title case
3565 else if (! IN_UNI_8_BIT) {
3566 *tmpbuf = toUPPER(*s); /* Returns caseless for non-ascii, or
3567 * on EBCDIC machines whatever the
3568 * native function does */
3571 /* Here, is ucfirst non-UTF-8, not in locale (unless that locale is
3572 * UTF-8, which we treat as not in locale), and cased latin1 */
3574 #ifdef USE_LOCALE_CTYPE
3578 title_ord = _to_upper_title_latin1(*s, tmpbuf, &tculen, 's');
3580 assert(tculen == 2);
3582 /* If the result is an upper Latin1-range character, it can
3583 * still be represented in one byte, which is its ordinal */
3584 if (UTF8_IS_DOWNGRADEABLE_START(*tmpbuf)) {
3585 *tmpbuf = (U8) title_ord;
3589 /* Otherwise it became more than one ASCII character (in
3590 * the case of LATIN_SMALL_LETTER_SHARP_S) or changed to
3591 * beyond Latin1, so the number of bytes changed, so can't
3592 * replace just the first character in place. */
3595 /* If the result won't fit in a byte, the entire result
3596 * will have to be in UTF-8. Assume worst case sizing in
3597 * conversion. (all latin1 characters occupy at most two
3599 if (title_ord > 255) {
3601 convert_source_to_utf8 = TRUE;
3602 need = slen * 2 + 1;
3604 /* The (converted) UTF-8 and UTF-EBCDIC lengths of all
3605 * (both) characters whose title case is above 255 is
3609 else { /* LATIN_SMALL_LETTER_SHARP_S expands by 1 byte */
3610 need = slen + 1 + 1;
3614 } /* End of use Unicode (Latin1) semantics */
3615 } /* End of changing the case of the first character */
3617 /* Here, have the first character's changed case stored in tmpbuf. Ready to
3618 * generate the result */
3621 /* We can convert in place. This means we change just the first
3622 * character without disturbing the rest; no need to grow */
3624 s = d = (U8*)SvPV_force_nomg(source, slen);
3630 /* Here, we can't convert in place; we earlier calculated how much
3631 * space we will need, so grow to accommodate that */
3632 SvUPGRADE(dest, SVt_PV);
3633 d = (U8*)SvGROW(dest, need);
3634 (void)SvPOK_only(dest);
3641 if (! convert_source_to_utf8) {
3643 /* Here both source and dest are in UTF-8, but have to create
3644 * the entire output. We initialize the result to be the
3645 * title/lower cased first character, and then append the rest
3647 sv_setpvn(dest, (char*)tmpbuf, tculen);
3649 sv_catpvn(dest, (char*)(s + ulen), slen - ulen);
3653 const U8 *const send = s + slen;
3655 /* Here the dest needs to be in UTF-8, but the source isn't,
3656 * except we earlier UTF-8'd the first character of the source
3657 * into tmpbuf. First put that into dest, and then append the
3658 * rest of the source, converting it to UTF-8 as we go. */
3660 /* Assert tculen is 2 here because the only two characters that
3661 * get to this part of the code have 2-byte UTF-8 equivalents */
3663 *d++ = *(tmpbuf + 1);
3664 s++; /* We have just processed the 1st char */
3666 for (; s < send; s++) {
3667 d = uvchr_to_utf8(d, *s);
3670 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3674 else { /* in-place UTF-8. Just overwrite the first character */
3675 Copy(tmpbuf, d, tculen, U8);
3676 SvCUR_set(dest, need - 1);
3680 else { /* Neither source nor dest are in or need to be UTF-8 */
3682 if (inplace) { /* in-place, only need to change the 1st char */
3685 else { /* Not in-place */
3687 /* Copy the case-changed character(s) from tmpbuf */
3688 Copy(tmpbuf, d, tculen, U8);
3689 d += tculen - 1; /* Code below expects d to point to final
3690 * character stored */
3693 else { /* empty source */
3694 /* See bug #39028: Don't taint if empty */
3698 /* In a "use bytes" we don't treat the source as UTF-8, but, still want
3699 * the destination to retain that flag */
3700 if (SvUTF8(source) && ! IN_BYTES)
3703 if (!inplace) { /* Finish the rest of the string, unchanged */
3704 /* This will copy the trailing NUL */
3705 Copy(s + 1, d + 1, slen, U8);
3706 SvCUR_set(dest, need - 1);
3709 #ifdef USE_LOCALE_CTYPE
3710 if (IN_LC_RUNTIME(LC_CTYPE)) {
3715 if (dest != source && SvTAINTED(source))
3721 /* There's so much setup/teardown code common between uc and lc, I wonder if
3722 it would be worth merging the two, and just having a switch outside each
3723 of the three tight loops. There is less and less commonality though */
3736 if ((SvPADTMP(source)
3738 (SvTEMP(source) && !SvSMAGICAL(source) && SvREFCNT(source) == 1))
3739 && !SvREADONLY(source) && SvPOK(source)
3742 #ifdef USE_LOCALE_CTYPE
3743 (IN_LC_RUNTIME(LC_CTYPE))
3744 ? ! IN_UTF8_CTYPE_LOCALE
3750 /* We can convert in place. The reason we can't if in UNI_8_BIT is to
3751 * make the loop tight, so we overwrite the source with the dest before
3752 * looking at it, and we need to look at the original source
3753 * afterwards. There would also need to be code added to handle
3754 * switching to not in-place in midstream if we run into characters
3755 * that change the length. Since being in locale overrides UNI_8_BIT,
3756 * that latter becomes irrelevant in the above test; instead for
3757 * locale, the size can't normally change, except if the locale is a
3760 s = d = (U8*)SvPV_force_nomg(source, len);
3767 s = (const U8*)SvPV_nomg_const(source, len);
3770 SvUPGRADE(dest, SVt_PV);
3771 d = (U8*)SvGROW(dest, min);
3772 (void)SvPOK_only(dest);
3777 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3778 to check DO_UTF8 again here. */
3780 if (DO_UTF8(source)) {
3781 const U8 *const send = s + len;
3782 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3784 /* All occurrences of these are to be moved to follow any other marks.
3785 * This is context-dependent. We may not be passed enough context to
3786 * move the iota subscript beyond all of them, but we do the best we can
3787 * with what we're given. The result is always better than if we
3788 * hadn't done this. And, the problem would only arise if we are
3789 * passed a character without all its combining marks, which would be
3790 * the caller's mistake. The information this is based on comes from a
3791 * comment in Unicode SpecialCasing.txt, (and the Standard's text
3792 * itself) and so can't be checked properly to see if it ever gets
3793 * revised. But the likelihood of it changing is remote */
3794 bool in_iota_subscript = FALSE;
3800 if (in_iota_subscript && ! _is_utf8_mark(s)) {
3802 /* A non-mark. Time to output the iota subscript */
3803 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
3804 d += capital_iota_len;
3805 in_iota_subscript = FALSE;
3808 /* Then handle the current character. Get the changed case value
3809 * and copy it to the output buffer */
3812 #ifdef USE_LOCALE_CTYPE
3813 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
3815 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, 0);
3817 #define GREEK_CAPITAL_LETTER_IOTA 0x0399
3818 #define COMBINING_GREEK_YPOGEGRAMMENI 0x0345
3819 if (uv == GREEK_CAPITAL_LETTER_IOTA
3820 && utf8_to_uvchr_buf(s, send, 0) == COMBINING_GREEK_YPOGEGRAMMENI)
3822 in_iota_subscript = TRUE;
3825 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
3826 /* If the eventually required minimum size outgrows the
3827 * available space, we need to grow. */
3828 const UV o = d - (U8*)SvPVX_const(dest);
3830 /* If someone uppercases one million U+03B0s we SvGROW()
3831 * one million times. Or we could try guessing how much to
3832 * allocate without allocating too much. Such is life.
3833 * See corresponding comment in lc code for another option
3836 d = (U8*)SvPVX(dest) + o;
3838 Copy(tmpbuf, d, ulen, U8);
3843 if (in_iota_subscript) {
3844 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
3845 d += capital_iota_len;
3850 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3852 else { /* Not UTF-8 */
3854 const U8 *const send = s + len;
3856 /* Use locale casing if in locale; regular style if not treating
3857 * latin1 as having case; otherwise the latin1 casing. Do the
3858 * whole thing in a tight loop, for speed, */
3859 #ifdef USE_LOCALE_CTYPE
3860 if (IN_LC_RUNTIME(LC_CTYPE)) {
3861 if (IN_UTF8_CTYPE_LOCALE) {
3864 for (; s < send; d++, s++)
3865 *d = (U8) toUPPER_LC(*s);
3869 if (! IN_UNI_8_BIT) {
3870 for (; s < send; d++, s++) {
3875 #ifdef USE_LOCALE_CTYPE
3878 for (; s < send; d++, s++) {
3879 *d = toUPPER_LATIN1_MOD(*s);
3880 if (LIKELY(*d != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
3884 /* The mainstream case is the tight loop above. To avoid
3885 * extra tests in that, all three characters that require
3886 * special handling are mapped by the MOD to the one tested
3888 * Use the source to distinguish between the three cases */
3890 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
3892 /* uc() of this requires 2 characters, but they are
3893 * ASCII. If not enough room, grow the string */
3894 if (SvLEN(dest) < ++min) {
3895 const UV o = d - (U8*)SvPVX_const(dest);
3897 d = (U8*)SvPVX(dest) + o;
3899 *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
3900 continue; /* Back to the tight loop; still in ASCII */
3903 /* The other two special handling characters have their
3904 * upper cases outside the latin1 range, hence need to be
3905 * in UTF-8, so the whole result needs to be in UTF-8. So,
3906 * here we are somewhere in the middle of processing a
3907 * non-UTF-8 string, and realize that we will have to convert
3908 * the whole thing to UTF-8. What to do? There are
3909 * several possibilities. The simplest to code is to
3910 * convert what we have so far, set a flag, and continue on
3911 * in the loop. The flag would be tested each time through
3912 * the loop, and if set, the next character would be
3913 * converted to UTF-8 and stored. But, I (khw) didn't want
3914 * to slow down the mainstream case at all for this fairly
3915 * rare case, so I didn't want to add a test that didn't
3916 * absolutely have to be there in the loop, besides the
3917 * possibility that it would get too complicated for
3918 * optimizers to deal with. Another possibility is to just
3919 * give up, convert the source to UTF-8, and restart the
3920 * function that way. Another possibility is to convert
3921 * both what has already been processed and what is yet to
3922 * come separately to UTF-8, then jump into the loop that
3923 * handles UTF-8. But the most efficient time-wise of the
3924 * ones I could think of is what follows, and turned out to
3925 * not require much extra code. */
3927 /* Convert what we have so far into UTF-8, telling the
3928 * function that we know it should be converted, and to
3929 * allow extra space for what we haven't processed yet.
3930 * Assume the worst case space requirements for converting
3931 * what we haven't processed so far: that it will require
3932 * two bytes for each remaining source character, plus the
3933 * NUL at the end. This may cause the string pointer to
3934 * move, so re-find it. */
3936 len = d - (U8*)SvPVX_const(dest);
3937 SvCUR_set(dest, len);
3938 len = sv_utf8_upgrade_flags_grow(dest,
3939 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
3941 d = (U8*)SvPVX(dest) + len;
3943 /* Now process the remainder of the source, converting to
3944 * upper and UTF-8. If a resulting byte is invariant in
3945 * UTF-8, output it as-is, otherwise convert to UTF-8 and
3946 * append it to the output. */
3947 for (; s < send; s++) {
3948 (void) _to_upper_title_latin1(*s, d, &len, 'S');
3952 /* Here have processed the whole source; no need to continue
3953 * with the outer loop. Each character has been converted
3954 * to upper case and converted to UTF-8 */
3957 } /* End of processing all latin1-style chars */
3958 } /* End of processing all chars */
3959 } /* End of source is not empty */
3961 if (source != dest) {
3962 *d = '\0'; /* Here d points to 1 after last char, add NUL */
3963 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3965 } /* End of isn't utf8 */
3966 #ifdef USE_LOCALE_CTYPE
3967 if (IN_LC_RUNTIME(LC_CTYPE)) {
3972 if (dest != source && SvTAINTED(source))
3990 if ( ( SvPADTMP(source)
3991 || ( SvTEMP(source) && !SvSMAGICAL(source)
3992 && SvREFCNT(source) == 1 )
3994 && !SvREADONLY(source) && SvPOK(source)
3995 && !DO_UTF8(source)) {
3997 /* We can convert in place, as lowercasing anything in the latin1 range
3998 * (or else DO_UTF8 would have been on) doesn't lengthen it */
4000 s = d = (U8*)SvPV_force_nomg(source, len);
4007 s = (const U8*)SvPV_nomg_const(source, len);
4010 SvUPGRADE(dest, SVt_PV);
4011 d = (U8*)SvGROW(dest, min);
4012 (void)SvPOK_only(dest);
4017 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
4018 to check DO_UTF8 again here. */
4020 if (DO_UTF8(source)) {
4021 const U8 *const send = s + len;
4022 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
4025 const STRLEN u = UTF8SKIP(s);
4028 #ifdef USE_LOCALE_CTYPE
4029 _to_utf8_lower_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
4031 _to_utf8_lower_flags(s, tmpbuf, &ulen, 0);
4034 /* Here is where we would do context-sensitive actions. See the
4035 * commit message for 86510fb15 for why there isn't any */
4037 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4039 /* If the eventually required minimum size outgrows the
4040 * available space, we need to grow. */
4041 const UV o = d - (U8*)SvPVX_const(dest);
4043 /* If someone lowercases one million U+0130s we SvGROW() one
4044 * million times. Or we could try guessing how much to
4045 * allocate without allocating too much. Such is life.
4046 * Another option would be to grow an extra byte or two more
4047 * each time we need to grow, which would cut down the million
4048 * to 500K, with little waste */
4050 d = (U8*)SvPVX(dest) + o;
4053 /* Copy the newly lowercased letter to the output buffer we're
4055 Copy(tmpbuf, d, ulen, U8);
4058 } /* End of looping through the source string */
4061 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4062 } else { /* Not utf8 */
4064 const U8 *const send = s + len;
4066 /* Use locale casing if in locale; regular style if not treating
4067 * latin1 as having case; otherwise the latin1 casing. Do the
4068 * whole thing in a tight loop, for speed, */
4069 #ifdef USE_LOCALE_CTYPE
4070 if (IN_LC_RUNTIME(LC_CTYPE)) {
4071 for (; s < send; d++, s++)
4072 *d = toLOWER_LC(*s);
4076 if (! IN_UNI_8_BIT) {
4077 for (; s < send; d++, s++) {
4082 for (; s < send; d++, s++) {
4083 *d = toLOWER_LATIN1(*s);
4087 if (source != dest) {
4089 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4092 #ifdef USE_LOCALE_CTYPE
4093 if (IN_LC_RUNTIME(LC_CTYPE)) {
4098 if (dest != source && SvTAINTED(source))
4107 SV * const sv = TOPs;
4109 const char *s = SvPV_const(sv,len);
4111 SvUTF8_off(TARG); /* decontaminate */
4114 SvUPGRADE(TARG, SVt_PV);
4115 SvGROW(TARG, (len * 2) + 1);
4119 STRLEN ulen = UTF8SKIP(s);
4120 bool to_quote = FALSE;
4122 if (UTF8_IS_INVARIANT(*s)) {
4123 if (_isQUOTEMETA(*s)) {
4127 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
4129 #ifdef USE_LOCALE_CTYPE
4130 /* In locale, we quote all non-ASCII Latin1 chars.
4131 * Otherwise use the quoting rules */
4133 IN_LC_RUNTIME(LC_CTYPE)
4136 _isQUOTEMETA(TWO_BYTE_UTF8_TO_NATIVE(*s, *(s + 1))))
4141 else if (is_QUOTEMETA_high(s)) {
4156 else if (IN_UNI_8_BIT) {
4158 if (_isQUOTEMETA(*s))
4164 /* For non UNI_8_BIT (and hence in locale) just quote all \W
4165 * including everything above ASCII */
4167 if (!isWORDCHAR_A(*s))
4173 SvCUR_set(TARG, d - SvPVX_const(TARG));
4174 (void)SvPOK_only_UTF8(TARG);
4177 sv_setpvn(TARG, s, len);
4193 U8 tmpbuf[UTF8_MAXBYTES_CASE + 1];
4194 const bool full_folding = TRUE; /* This variable is here so we can easily
4195 move to more generality later */
4196 const U8 flags = ( full_folding ? FOLD_FLAGS_FULL : 0 )
4197 #ifdef USE_LOCALE_CTYPE
4198 | ( IN_LC_RUNTIME(LC_CTYPE) ? FOLD_FLAGS_LOCALE : 0 )
4202 /* This is a facsimile of pp_lc, but with a thousand bugs thanks to me.
4203 * You are welcome(?) -Hugmeir
4211 s = (const U8*)SvPV_nomg_const(source, len);
4213 if (ckWARN(WARN_UNINITIALIZED))
4214 report_uninit(source);
4221 SvUPGRADE(dest, SVt_PV);
4222 d = (U8*)SvGROW(dest, min);
4223 (void)SvPOK_only(dest);
4228 if (DO_UTF8(source)) { /* UTF-8 flagged string. */
4230 const STRLEN u = UTF8SKIP(s);
4233 _to_utf8_fold_flags(s, tmpbuf, &ulen, flags);
4235 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4236 const UV o = d - (U8*)SvPVX_const(dest);
4238 d = (U8*)SvPVX(dest) + o;
4241 Copy(tmpbuf, d, ulen, U8);
4246 } /* Unflagged string */
4248 #ifdef USE_LOCALE_CTYPE
4249 if ( IN_LC_RUNTIME(LC_CTYPE) ) { /* Under locale */
4250 if (IN_UTF8_CTYPE_LOCALE) {
4251 goto do_uni_folding;
4253 for (; s < send; d++, s++)
4254 *d = (U8) toFOLD_LC(*s);
4258 if ( !IN_UNI_8_BIT ) { /* Under nothing, or bytes */
4259 for (; s < send; d++, s++)
4263 #ifdef USE_LOCALE_CTYPE
4266 /* For ASCII and the Latin-1 range, there's only two troublesome
4267 * folds, \x{DF} (\N{LATIN SMALL LETTER SHARP S}), which under full
4268 * casefolding becomes 'ss'; and \x{B5} (\N{MICRO SIGN}), which
4269 * under any fold becomes \x{3BC} (\N{GREEK SMALL LETTER MU}) --
4270 * For the rest, the casefold is their lowercase. */
4271 for (; s < send; d++, s++) {
4272 if (*s == MICRO_SIGN) {
4273 /* \N{MICRO SIGN}'s casefold is \N{GREEK SMALL LETTER MU},
4274 * which is outside of the latin-1 range. There's a couple
4275 * of ways to deal with this -- khw discusses them in
4276 * pp_lc/uc, so go there :) What we do here is upgrade what
4277 * we had already casefolded, then enter an inner loop that
4278 * appends the rest of the characters as UTF-8. */
4279 len = d - (U8*)SvPVX_const(dest);
4280 SvCUR_set(dest, len);
4281 len = sv_utf8_upgrade_flags_grow(dest,
4282 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
4283 /* The max expansion for latin1
4284 * chars is 1 byte becomes 2 */
4286 d = (U8*)SvPVX(dest) + len;
4288 Copy(GREEK_SMALL_LETTER_MU_UTF8, d, small_mu_len, U8);
4291 for (; s < send; s++) {
4293 UV fc = _to_uni_fold_flags(*s, tmpbuf, &ulen, flags);
4294 if UVCHR_IS_INVARIANT(fc) {
4296 && *s == LATIN_SMALL_LETTER_SHARP_S)
4305 Copy(tmpbuf, d, ulen, U8);
4311 else if (full_folding && *s == LATIN_SMALL_LETTER_SHARP_S) {
4312 /* Under full casefolding, LATIN SMALL LETTER SHARP S
4313 * becomes "ss", which may require growing the SV. */
4314 if (SvLEN(dest) < ++min) {
4315 const UV o = d - (U8*)SvPVX_const(dest);
4317 d = (U8*)SvPVX(dest) + o;
4322 else { /* If it's not one of those two, the fold is their lower
4324 *d = toLOWER_LATIN1(*s);
4330 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4332 #ifdef USE_LOCALE_CTYPE
4333 if (IN_LC_RUNTIME(LC_CTYPE)) {
4338 if (SvTAINTED(source))
4348 dSP; dMARK; dORIGMARK;
4349 AV *const av = MUTABLE_AV(POPs);
4350 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4352 if (SvTYPE(av) == SVt_PVAV) {
4353 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4354 bool can_preserve = FALSE;
4360 can_preserve = SvCANEXISTDELETE(av);
4363 if (lval && localizing) {
4366 for (svp = MARK + 1; svp <= SP; svp++) {
4367 const SSize_t elem = SvIV(*svp);
4371 if (max > AvMAX(av))
4375 while (++MARK <= SP) {
4377 SSize_t elem = SvIV(*MARK);
4378 bool preeminent = TRUE;
4380 if (localizing && can_preserve) {
4381 /* If we can determine whether the element exist,
4382 * Try to preserve the existenceness of a tied array
4383 * element by using EXISTS and DELETE if possible.
4384 * Fallback to FETCH and STORE otherwise. */
4385 preeminent = av_exists(av, elem);
4388 svp = av_fetch(av, elem, lval);
4391 DIE(aTHX_ PL_no_aelem, elem);
4394 save_aelem(av, elem, svp);
4396 SAVEADELETE(av, elem);
4399 *MARK = svp ? *svp : &PL_sv_undef;
4402 if (GIMME != G_ARRAY) {
4404 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4413 AV *const av = MUTABLE_AV(POPs);
4414 I32 lval = (PL_op->op_flags & OPf_MOD);
4415 SSize_t items = SP - MARK;
4417 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4418 const I32 flags = is_lvalue_sub();
4420 if (!(flags & OPpENTERSUB_INARGS))
4421 /* diag_listed_as: Can't modify %s in %s */
4422 Perl_croak(aTHX_ "Can't modify index/value array slice in list assignment");
4429 *(MARK+items*2-1) = *(MARK+items);
4435 while (++MARK <= SP) {
4438 svp = av_fetch(av, SvIV(*MARK), lval);
4440 if (!svp || !*svp || *svp == &PL_sv_undef) {
4441 DIE(aTHX_ PL_no_aelem, SvIV(*MARK));
4443 *MARK = sv_mortalcopy(*MARK);
4445 *++MARK = svp ? *svp : &PL_sv_undef;
4447 if (GIMME != G_ARRAY) {
4448 MARK = SP - items*2;
4449 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4455 /* Smart dereferencing for keys, values and each */
4466 (SvTYPE(sv) != SVt_PVHV && SvTYPE(sv) != SVt_PVAV)
4471 "Type of argument to %s must be unblessed hashref or arrayref",
4472 PL_op_desc[PL_op->op_type] );
4475 if (PL_op->op_flags & OPf_SPECIAL && SvTYPE(sv) == SVt_PVAV)
4477 "Can't modify %s in %s",
4478 PL_op_desc[PL_op->op_type], PL_op_desc[PL_op->op_next->op_type]
4481 /* Delegate to correct function for op type */
4483 if (PL_op->op_type == OP_RKEYS || PL_op->op_type == OP_RVALUES) {
4484 return (SvTYPE(sv) == SVt_PVHV) ? Perl_do_kv(aTHX) : Perl_pp_akeys(aTHX);
4487 return (SvTYPE(sv) == SVt_PVHV)
4488 ? Perl_pp_each(aTHX)
4489 : Perl_pp_aeach(aTHX);
4496 AV *array = MUTABLE_AV(POPs);
4497 const I32 gimme = GIMME_V;
4498 IV *iterp = Perl_av_iter_p(aTHX_ array);
4499 const IV current = (*iterp)++;
4501 if (current > av_tindex(array)) {
4503 if (gimme == G_SCALAR)
4511 if (gimme == G_ARRAY) {
4512 SV **const element = av_fetch(array, current, 0);
4513 PUSHs(element ? *element : &PL_sv_undef);
4521 AV *array = MUTABLE_AV(POPs);
4522 const I32 gimme = GIMME_V;
4524 *Perl_av_iter_p(aTHX_ array) = 0;
4526 if (gimme == G_SCALAR) {
4528 PUSHi(av_tindex(array) + 1);
4530 else if (gimme == G_ARRAY) {
4531 IV n = Perl_av_len(aTHX_ array);
4536 if (PL_op->op_type == OP_AKEYS || PL_op->op_type == OP_RKEYS) {
4537 for (i = 0; i <= n; i++) {
4542 for (i = 0; i <= n; i++) {
4543 SV *const *const elem = Perl_av_fetch(aTHX_ array, i, 0);
4544 PUSHs(elem ? *elem : &PL_sv_undef);
4551 /* Associative arrays. */
4556 HV * hash = MUTABLE_HV(POPs);
4558 const I32 gimme = GIMME_V;
4561 /* might clobber stack_sp */
4562 entry = hv_iternext(hash);
4567 SV* const sv = hv_iterkeysv(entry);
4568 PUSHs(sv); /* won't clobber stack_sp */
4569 if (gimme == G_ARRAY) {
4572 /* might clobber stack_sp */
4573 val = hv_iterval(hash, entry);
4578 else if (gimme == G_SCALAR)
4585 S_do_delete_local(pTHX)
4588 const I32 gimme = GIMME_V;
4591 const bool sliced = !!(PL_op->op_private & OPpSLICE);
4592 SV **unsliced_keysv = sliced ? NULL : sp--;
4593 SV * const osv = POPs;
4594 SV **mark = sliced ? PL_stack_base + POPMARK : unsliced_keysv-1;
4596 const bool tied = SvRMAGICAL(osv)
4597 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4598 const bool can_preserve = SvCANEXISTDELETE(osv);
4599 const U32 type = SvTYPE(osv);
4600 SV ** const end = sliced ? SP : unsliced_keysv;
4602 if (type == SVt_PVHV) { /* hash element */
4603 HV * const hv = MUTABLE_HV(osv);
4604 while (++MARK <= end) {
4605 SV * const keysv = *MARK;
4607 bool preeminent = TRUE;
4609 preeminent = hv_exists_ent(hv, keysv, 0);
4611 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4618 sv = hv_delete_ent(hv, keysv, 0, 0);
4620 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4623 if (!sv) DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4624 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4626 *MARK = sv_mortalcopy(sv);
4632 SAVEHDELETE(hv, keysv);
4633 *MARK = &PL_sv_undef;
4637 else if (type == SVt_PVAV) { /* array element */
4638 if (PL_op->op_flags & OPf_SPECIAL) {
4639 AV * const av = MUTABLE_AV(osv);
4640 while (++MARK <= end) {
4641 SSize_t idx = SvIV(*MARK);
4643 bool preeminent = TRUE;
4645 preeminent = av_exists(av, idx);
4647 SV **svp = av_fetch(av, idx, 1);
4654 sv = av_delete(av, idx, 0);
4656 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4659 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4661 *MARK = sv_mortalcopy(sv);
4667 SAVEADELETE(av, idx);
4668 *MARK = &PL_sv_undef;
4673 DIE(aTHX_ "panic: avhv_delete no longer supported");
4676 DIE(aTHX_ "Not a HASH reference");
4678 if (gimme == G_VOID)
4680 else if (gimme == G_SCALAR) {
4685 *++MARK = &PL_sv_undef;
4689 else if (gimme != G_VOID)
4690 PUSHs(*unsliced_keysv);
4701 if (PL_op->op_private & OPpLVAL_INTRO)
4702 return do_delete_local();
4705 discard = (gimme == G_VOID) ? G_DISCARD : 0;
4707 if (PL_op->op_private & OPpSLICE) {
4709 HV * const hv = MUTABLE_HV(POPs);
4710 const U32 hvtype = SvTYPE(hv);
4711 if (hvtype == SVt_PVHV) { /* hash element */
4712 while (++MARK <= SP) {
4713 SV * const sv = hv_delete_ent(hv, *MARK, discard, 0);
4714 *MARK = sv ? sv : &PL_sv_undef;
4717 else if (hvtype == SVt_PVAV) { /* array element */
4718 if (PL_op->op_flags & OPf_SPECIAL) {
4719 while (++MARK <= SP) {
4720 SV * const sv = av_delete(MUTABLE_AV(hv), SvIV(*MARK), discard);
4721 *MARK = sv ? sv : &PL_sv_undef;
4726 DIE(aTHX_ "Not a HASH reference");
4729 else if (gimme == G_SCALAR) {
4734 *++MARK = &PL_sv_undef;
4740 HV * const hv = MUTABLE_HV(POPs);
4742 if (SvTYPE(hv) == SVt_PVHV)
4743 sv = hv_delete_ent(hv, keysv, discard, 0);
4744 else if (SvTYPE(hv) == SVt_PVAV) {
4745 if (PL_op->op_flags & OPf_SPECIAL)
4746 sv = av_delete(MUTABLE_AV(hv), SvIV(keysv), discard);
4748 DIE(aTHX_ "panic: avhv_delete no longer supported");
4751 DIE(aTHX_ "Not a HASH reference");
4766 if (UNLIKELY( PL_op->op_private & OPpEXISTS_SUB )) {
4768 SV * const sv = POPs;
4769 CV * const cv = sv_2cv(sv, &hv, &gv, 0);
4772 if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
4777 hv = MUTABLE_HV(POPs);
4778 if (LIKELY( SvTYPE(hv) == SVt_PVHV )) {
4779 if (hv_exists_ent(hv, tmpsv, 0))
4782 else if (SvTYPE(hv) == SVt_PVAV) {
4783 if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
4784 if (av_exists(MUTABLE_AV(hv), SvIV(tmpsv)))
4789 DIE(aTHX_ "Not a HASH reference");
4796 dSP; dMARK; dORIGMARK;
4797 HV * const hv = MUTABLE_HV(POPs);
4798 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4799 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4800 bool can_preserve = FALSE;
4806 if (SvCANEXISTDELETE(hv))
4807 can_preserve = TRUE;
4810 while (++MARK <= SP) {
4811 SV * const keysv = *MARK;
4814 bool preeminent = TRUE;
4816 if (localizing && can_preserve) {
4817 /* If we can determine whether the element exist,
4818 * try to preserve the existenceness of a tied hash
4819 * element by using EXISTS and DELETE if possible.
4820 * Fallback to FETCH and STORE otherwise. */
4821 preeminent = hv_exists_ent(hv, keysv, 0);
4824 he = hv_fetch_ent(hv, keysv, lval, 0);
4825 svp = he ? &HeVAL(he) : NULL;
4828 if (!svp || !*svp || *svp == &PL_sv_undef) {
4829 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4832 if (HvNAME_get(hv) && isGV(*svp))
4833 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
4834 else if (preeminent)
4835 save_helem_flags(hv, keysv, svp,
4836 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
4838 SAVEHDELETE(hv, keysv);
4841 *MARK = svp && *svp ? *svp : &PL_sv_undef;
4843 if (GIMME != G_ARRAY) {
4845 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4854 HV * const hv = MUTABLE_HV(POPs);
4855 I32 lval = (PL_op->op_flags & OPf_MOD);
4856 SSize_t items = SP - MARK;
4858 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4859 const I32 flags = is_lvalue_sub();
4861 if (!(flags & OPpENTERSUB_INARGS))
4862 /* diag_listed_as: Can't modify %s in %s */
4863 Perl_croak(aTHX_ "Can't modify key/value hash slice in list assignment");
4870 *(MARK+items*2-1) = *(MARK+items);
4876 while (++MARK <= SP) {
4877 SV * const keysv = *MARK;
4881 he = hv_fetch_ent(hv, keysv, lval, 0);
4882 svp = he ? &HeVAL(he) : NULL;
4885 if (!svp || !*svp || *svp == &PL_sv_undef) {
4886 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4888 *MARK = sv_mortalcopy(*MARK);
4890 *++MARK = svp && *svp ? *svp : &PL_sv_undef;
4892 if (GIMME != G_ARRAY) {
4893 MARK = SP - items*2;
4894 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4900 /* List operators. */
4904 I32 markidx = POPMARK;
4905 if (GIMME != G_ARRAY) {
4906 SV **mark = PL_stack_base + markidx;
4909 *MARK = *SP; /* unwanted list, return last item */
4911 *MARK = &PL_sv_undef;
4921 SV ** const lastrelem = PL_stack_sp;
4922 SV ** const lastlelem = PL_stack_base + POPMARK;
4923 SV ** const firstlelem = PL_stack_base + POPMARK + 1;
4924 SV ** const firstrelem = lastlelem + 1;
4925 I32 is_something_there = FALSE;
4926 const U8 mod = PL_op->op_flags & OPf_MOD;
4928 const I32 max = lastrelem - lastlelem;
4931 if (GIMME != G_ARRAY) {
4932 I32 ix = SvIV(*lastlelem);
4935 if (ix < 0 || ix >= max)
4936 *firstlelem = &PL_sv_undef;
4938 *firstlelem = firstrelem[ix];
4944 SP = firstlelem - 1;
4948 for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
4949 I32 ix = SvIV(*lelem);
4952 if (ix < 0 || ix >= max)
4953 *lelem = &PL_sv_undef;
4955 is_something_there = TRUE;
4956 if (!(*lelem = firstrelem[ix]))
4957 *lelem = &PL_sv_undef;
4958 else if (mod && SvPADTMP(*lelem)) {
4959 *lelem = firstrelem[ix] = sv_mortalcopy(*lelem);
4963 if (is_something_there)
4966 SP = firstlelem - 1;
4973 const I32 items = SP - MARK;
4974 SV * const av = MUTABLE_SV(av_make(items, MARK+1));
4976 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
4977 ? newRV_noinc(av) : av);
4983 dSP; dMARK; dORIGMARK;
4984 HV* const hv = newHV();
4985 SV* const retval = sv_2mortal( PL_op->op_flags & OPf_SPECIAL
4986 ? newRV_noinc(MUTABLE_SV(hv))
4991 (MARK++, SvGMAGICAL(*MARK) ? sv_mortalcopy(*MARK) : *MARK);
4998 sv_setsv(val, *MARK);
5002 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash");
5005 (void)hv_store_ent(hv,key,val,0);
5013 S_deref_plain_array(pTHX_ AV *ary)
5015 if (SvTYPE(ary) == SVt_PVAV) return ary;
5016 SvGETMAGIC((SV *)ary);
5017 if (!SvROK(ary) || SvTYPE(SvRV(ary)) != SVt_PVAV)
5018 Perl_die(aTHX_ "Not an ARRAY reference");
5019 else if (SvOBJECT(SvRV(ary)))
5020 Perl_die(aTHX_ "Not an unblessed ARRAY reference");
5021 return (AV *)SvRV(ary);
5024 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
5025 # define DEREF_PLAIN_ARRAY(ary) \
5028 SvTYPE(aRrRay) == SVt_PVAV \
5030 : S_deref_plain_array(aTHX_ aRrRay); \
5033 # define DEREF_PLAIN_ARRAY(ary) \
5035 PL_Sv = (SV *)(ary), \
5036 SvTYPE(PL_Sv) == SVt_PVAV \
5038 : S_deref_plain_array(aTHX_ (AV *)PL_Sv) \
5044 dSP; dMARK; dORIGMARK;
5045 int num_args = (SP - MARK);
5046 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5055 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5058 return Perl_tied_method(aTHX_ SV_CONST(SPLICE), mark - 1, MUTABLE_SV(ary), mg,
5059 GIMME_V | TIED_METHOD_ARGUMENTS_ON_STACK,
5066 offset = i = SvIV(*MARK);
5068 offset += AvFILLp(ary) + 1;
5070 DIE(aTHX_ PL_no_aelem, i);
5072 length = SvIVx(*MARK++);
5074 length += AvFILLp(ary) - offset + 1;
5080 length = AvMAX(ary) + 1; /* close enough to infinity */
5084 length = AvMAX(ary) + 1;
5086 if (offset > AvFILLp(ary) + 1) {
5088 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "splice() offset past end of array" );
5089 offset = AvFILLp(ary) + 1;
5091 after = AvFILLp(ary) + 1 - (offset + length);
5092 if (after < 0) { /* not that much array */
5093 length += after; /* offset+length now in array */
5099 /* At this point, MARK .. SP-1 is our new LIST */
5102 diff = newlen - length;
5103 if (newlen && !AvREAL(ary) && AvREIFY(ary))
5106 /* make new elements SVs now: avoid problems if they're from the array */
5107 for (dst = MARK, i = newlen; i; i--) {
5108 SV * const h = *dst;
5109 *dst++ = newSVsv(h);
5112 if (diff < 0) { /* shrinking the area */
5113 SV **tmparyval = NULL;
5115 Newx(tmparyval, newlen, SV*); /* so remember insertion */
5116 Copy(MARK, tmparyval, newlen, SV*);
5119 MARK = ORIGMARK + 1;
5120 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5121 const bool real = cBOOL(AvREAL(ary));
5122 MEXTEND(MARK, length);
5124 EXTEND_MORTAL(length);
5125 for (i = 0, dst = MARK; i < length; i++) {
5126 if ((*dst = AvARRAY(ary)[i+offset])) {
5128 sv_2mortal(*dst); /* free them eventually */
5131 *dst = &PL_sv_undef;
5137 *MARK = AvARRAY(ary)[offset+length-1];
5140 for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
5141 SvREFCNT_dec(*dst++); /* free them now */
5144 AvFILLp(ary) += diff;
5146 /* pull up or down? */
5148 if (offset < after) { /* easier to pull up */
5149 if (offset) { /* esp. if nothing to pull */
5150 src = &AvARRAY(ary)[offset-1];
5151 dst = src - diff; /* diff is negative */
5152 for (i = offset; i > 0; i--) /* can't trust Copy */
5156 AvARRAY(ary) = AvARRAY(ary) - diff; /* diff is negative */
5160 if (after) { /* anything to pull down? */
5161 src = AvARRAY(ary) + offset + length;
5162 dst = src + diff; /* diff is negative */
5163 Move(src, dst, after, SV*);
5165 dst = &AvARRAY(ary)[AvFILLp(ary)+1];
5166 /* avoid later double free */
5173 Copy( tmparyval, AvARRAY(ary) + offset, newlen, SV* );
5174 Safefree(tmparyval);
5177 else { /* no, expanding (or same) */
5178 SV** tmparyval = NULL;
5180 Newx(tmparyval, length, SV*); /* so remember deletion */
5181 Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
5184 if (diff > 0) { /* expanding */
5185 /* push up or down? */
5186 if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
5190 Move(src, dst, offset, SV*);
5192 AvARRAY(ary) = AvARRAY(ary) - diff;/* diff is positive */
5194 AvFILLp(ary) += diff;
5197 if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
5198 av_extend(ary, AvFILLp(ary) + diff);
5199 AvFILLp(ary) += diff;
5202 dst = AvARRAY(ary) + AvFILLp(ary);
5204 for (i = after; i; i--) {
5212 Copy( MARK, AvARRAY(ary) + offset, newlen, SV* );
5215 MARK = ORIGMARK + 1;
5216 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5218 const bool real = cBOOL(AvREAL(ary));
5220 EXTEND_MORTAL(length);
5221 for (i = 0, dst = MARK; i < length; i++) {
5222 if ((*dst = tmparyval[i])) {
5224 sv_2mortal(*dst); /* free them eventually */
5226 else *dst = &PL_sv_undef;
5232 else if (length--) {
5233 *MARK = tmparyval[length];
5236 while (length-- > 0)
5237 SvREFCNT_dec(tmparyval[length]);
5241 *MARK = &PL_sv_undef;
5242 Safefree(tmparyval);
5246 mg_set(MUTABLE_SV(ary));
5254 dSP; dMARK; dORIGMARK; dTARGET;
5255 AV * const ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5256 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5259 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5262 ENTER_with_name("call_PUSH");
5263 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5264 LEAVE_with_name("call_PUSH");
5268 if (SvREADONLY(ary) && MARK < SP) Perl_croak_no_modify();
5269 PL_delaymagic = DM_DELAY;
5270 for (++MARK; MARK <= SP; MARK++) {
5272 if (*MARK) SvGETMAGIC(*MARK);
5275 sv_setsv_nomg(sv, *MARK);
5276 av_store(ary, AvFILLp(ary)+1, sv);
5278 if (PL_delaymagic & DM_ARRAY_ISA)
5279 mg_set(MUTABLE_SV(ary));
5284 if (OP_GIMME(PL_op, 0) != G_VOID) {
5285 PUSHi( AvFILL(ary) + 1 );
5293 AV * const av = PL_op->op_flags & OPf_SPECIAL
5294 ? MUTABLE_AV(GvAV(PL_defgv)) : DEREF_PLAIN_ARRAY(MUTABLE_AV(POPs));
5295 SV * const sv = PL_op->op_type == OP_SHIFT ? av_shift(av) : av_pop(av);
5299 (void)sv_2mortal(sv);
5306 dSP; dMARK; dORIGMARK; dTARGET;
5307 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5308 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5311 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5314 ENTER_with_name("call_UNSHIFT");
5315 call_sv(SV_CONST(UNSHIFT),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5316 LEAVE_with_name("call_UNSHIFT");
5321 av_unshift(ary, SP - MARK);
5323 SV * const sv = newSVsv(*++MARK);
5324 (void)av_store(ary, i++, sv);
5328 if (OP_GIMME(PL_op, 0) != G_VOID) {
5329 PUSHi( AvFILL(ary) + 1 );
5338 if (GIMME == G_ARRAY) {
5339 if (PL_op->op_private & OPpREVERSE_INPLACE) {
5343 assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
5344 (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
5345 av = MUTABLE_AV((*SP));
5346 /* In-place reversing only happens in void context for the array
5347 * assignment. We don't need to push anything on the stack. */
5350 if (SvMAGICAL(av)) {
5352 SV *tmp = sv_newmortal();
5353 /* For SvCANEXISTDELETE */
5356 bool can_preserve = SvCANEXISTDELETE(av);
5358 for (i = 0, j = av_tindex(av); i < j; ++i, --j) {
5362 if (!av_exists(av, i)) {
5363 if (av_exists(av, j)) {
5364 SV *sv = av_delete(av, j, 0);
5365 begin = *av_fetch(av, i, TRUE);
5366 sv_setsv_mg(begin, sv);
5370 else if (!av_exists(av, j)) {
5371 SV *sv = av_delete(av, i, 0);
5372 end = *av_fetch(av, j, TRUE);
5373 sv_setsv_mg(end, sv);
5378 begin = *av_fetch(av, i, TRUE);
5379 end = *av_fetch(av, j, TRUE);
5380 sv_setsv(tmp, begin);
5381 sv_setsv_mg(begin, end);
5382 sv_setsv_mg(end, tmp);
5386 SV **begin = AvARRAY(av);
5389 SV **end = begin + AvFILLp(av);
5391 while (begin < end) {
5392 SV * const tmp = *begin;
5403 SV * const tmp = *MARK;
5407 /* safe as long as stack cannot get extended in the above */
5418 SvUTF8_off(TARG); /* decontaminate */
5420 do_join(TARG, &PL_sv_no, MARK, SP);
5422 sv_setsv(TARG, SP > MARK ? *SP : find_rundefsv());
5425 up = SvPV_force(TARG, len);
5427 if (DO_UTF8(TARG)) { /* first reverse each character */
5428 U8* s = (U8*)SvPVX(TARG);
5429 const U8* send = (U8*)(s + len);
5431 if (UTF8_IS_INVARIANT(*s)) {
5436 if (!utf8_to_uvchr_buf(s, send, 0))
5440 down = (char*)(s - 1);
5441 /* reverse this character */
5445 *down-- = (char)tmp;
5451 down = SvPVX(TARG) + len - 1;
5455 *down-- = (char)tmp;
5457 (void)SvPOK_only_UTF8(TARG);
5469 IV limit = POPi; /* note, negative is forever */
5470 SV * const sv = POPs;
5472 const char *s = SvPV_const(sv, len);
5473 const bool do_utf8 = DO_UTF8(sv);
5474 const char *strend = s + len;
5480 const STRLEN slen = do_utf8
5481 ? utf8_length((U8*)s, (U8*)strend)
5482 : (STRLEN)(strend - s);
5483 SSize_t maxiters = slen + 10;
5484 I32 trailing_empty = 0;
5486 const I32 origlimit = limit;
5489 const I32 gimme = GIMME_V;
5491 const I32 oldsave = PL_savestack_ix;
5492 U32 make_mortal = SVs_TEMP;
5497 Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
5502 DIE(aTHX_ "panic: pp_split, pm=%p, s=%p", pm, s);
5505 TAINT_IF(get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET &&
5506 (RX_EXTFLAGS(rx) & (RXf_WHITE | RXf_SKIPWHITE)));
5509 if (pm->op_pmreplrootu.op_pmtargetoff) {
5510 ary = GvAVn(MUTABLE_GV(PAD_SVl(pm->op_pmreplrootu.op_pmtargetoff)));
5513 if (pm->op_pmreplrootu.op_pmtargetgv) {
5514 ary = GvAVn(pm->op_pmreplrootu.op_pmtargetgv);
5525 if ((mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied))) {
5527 XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
5534 for (i = AvFILLp(ary); i >= 0; i--)
5535 AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
5537 /* temporarily switch stacks */
5538 SAVESWITCHSTACK(PL_curstack, ary);
5542 base = SP - PL_stack_base;
5544 if (RX_EXTFLAGS(rx) & RXf_SKIPWHITE) {
5546 while (isSPACE_utf8(s))
5549 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5550 while (isSPACE_LC(*s))
5558 if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
5562 gimme_scalar = gimme == G_SCALAR && !ary;
5565 limit = maxiters + 2;
5566 if (RX_EXTFLAGS(rx) & RXf_WHITE) {
5569 /* this one uses 'm' and is a negative test */
5571 while (m < strend && ! isSPACE_utf8(m) ) {
5572 const int t = UTF8SKIP(m);
5573 /* isSPACE_utf8 returns FALSE for malform utf8 */
5580 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5582 while (m < strend && !isSPACE_LC(*m))
5585 while (m < strend && !isSPACE(*m))
5598 dstr = newSVpvn_flags(s, m-s,
5599 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5603 /* skip the whitespace found last */
5605 s = m + UTF8SKIP(m);
5609 /* this one uses 's' and is a positive test */
5611 while (s < strend && isSPACE_utf8(s) )
5614 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5616 while (s < strend && isSPACE_LC(*s))
5619 while (s < strend && isSPACE(*s))
5624 else if (RX_EXTFLAGS(rx) & RXf_START_ONLY) {
5626 for (m = s; m < strend && *m != '\n'; m++)
5639 dstr = newSVpvn_flags(s, m-s,
5640 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5646 else if (RX_EXTFLAGS(rx) & RXf_NULL && !(s >= strend)) {
5648 Pre-extend the stack, either the number of bytes or
5649 characters in the string or a limited amount, triggered by:
5651 my ($x, $y) = split //, $str;
5655 if (!gimme_scalar) {
5656 const U32 items = limit - 1;
5665 /* keep track of how many bytes we skip over */
5675 dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
5688 dstr = newSVpvn(s, 1);
5704 else if (do_utf8 == (RX_UTF8(rx) != 0) &&
5705 (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) && !RX_NPARENS(rx)
5706 && (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
5707 && !(RX_EXTFLAGS(rx) & RXf_IS_ANCHORED)) {
5708 const int tail = (RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL);
5709 SV * const csv = CALLREG_INTUIT_STRING(rx);
5711 len = RX_MINLENRET(rx);
5712 if (len == 1 && !RX_UTF8(rx) && !tail) {
5713 const char c = *SvPV_nolen_const(csv);
5715 for (m = s; m < strend && *m != c; m++)
5726 dstr = newSVpvn_flags(s, m-s,
5727 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5730 /* The rx->minlen is in characters but we want to step
5731 * s ahead by bytes. */
5733 s = (char*)utf8_hop((U8*)m, len);
5735 s = m + len; /* Fake \n at the end */
5739 while (s < strend && --limit &&
5740 (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
5741 csv, multiline ? FBMrf_MULTILINE : 0)) )
5750 dstr = newSVpvn_flags(s, m-s,
5751 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5754 /* The rx->minlen is in characters but we want to step
5755 * s ahead by bytes. */
5757 s = (char*)utf8_hop((U8*)m, len);
5759 s = m + len; /* Fake \n at the end */
5764 maxiters += slen * RX_NPARENS(rx);
5765 while (s < strend && --limit)
5769 rex_return = CALLREGEXEC(rx, (char*)s, (char*)strend, (char*)orig, 1,
5772 if (rex_return == 0)
5774 TAINT_IF(RX_MATCH_TAINTED(rx));
5775 /* we never pass the REXEC_COPY_STR flag, so it should
5776 * never get copied */
5777 assert(!RX_MATCH_COPIED(rx));
5778 m = RX_OFFS(rx)[0].start + orig;
5787 dstr = newSVpvn_flags(s, m-s,
5788 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5791 if (RX_NPARENS(rx)) {
5793 for (i = 1; i <= (I32)RX_NPARENS(rx); i++) {
5794 s = RX_OFFS(rx)[i].start + orig;
5795 m = RX_OFFS(rx)[i].end + orig;
5797 /* japhy (07/27/01) -- the (m && s) test doesn't catch
5798 parens that didn't match -- they should be set to
5799 undef, not the empty string */
5807 if (m >= orig && s >= orig) {
5808 dstr = newSVpvn_flags(s, m-s,
5809 (do_utf8 ? SVf_UTF8 : 0)
5813 dstr = &PL_sv_undef; /* undef, not "" */
5819 s = RX_OFFS(rx)[0].end + orig;
5823 if (!gimme_scalar) {
5824 iters = (SP - PL_stack_base) - base;
5826 if (iters > maxiters)
5827 DIE(aTHX_ "Split loop");
5829 /* keep field after final delim? */
5830 if (s < strend || (iters && origlimit)) {
5831 if (!gimme_scalar) {
5832 const STRLEN l = strend - s;
5833 dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5838 else if (!origlimit) {
5840 iters -= trailing_empty;
5842 while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
5843 if (TOPs && !make_mortal)
5845 *SP-- = &PL_sv_undef;
5852 LEAVE_SCOPE(oldsave); /* may undo an earlier SWITCHSTACK */
5856 if (SvSMAGICAL(ary)) {
5858 mg_set(MUTABLE_SV(ary));
5861 if (gimme == G_ARRAY) {
5863 Copy(AvARRAY(ary), SP + 1, iters, SV*);
5870 ENTER_with_name("call_PUSH");
5871 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5872 LEAVE_with_name("call_PUSH");
5874 if (gimme == G_ARRAY) {
5876 /* EXTEND should not be needed - we just popped them */
5878 for (i=0; i < iters; i++) {
5879 SV **svp = av_fetch(ary, i, FALSE);
5880 PUSHs((svp) ? *svp : &PL_sv_undef);
5887 if (gimme == G_ARRAY)
5899 SV *const sv = PAD_SVl(PL_op->op_targ);
5901 if (SvPADSTALE(sv)) {
5904 RETURNOP(cLOGOP->op_other);
5906 RETURNOP(cLOGOP->op_next);
5915 if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
5916 || SvTYPE(retsv) == SVt_PVCV) {
5917 retsv = refto(retsv);
5924 PP(unimplemented_op)
5926 const Optype op_type = PL_op->op_type;
5927 /* Using OP_NAME() isn't going to be helpful here. Firstly, it doesn't cope
5928 with out of range op numbers - it only "special" cases op_custom.
5929 Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
5930 if we get here for a custom op then that means that the custom op didn't
5931 have an implementation. Given that OP_NAME() looks up the custom op
5932 by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
5933 registers &PL_unimplemented_op as the address of their custom op.
5934 NULL doesn't generate a useful error message. "custom" does. */
5935 const char *const name = op_type >= OP_max
5936 ? "[out of range]" : PL_op_name[PL_op->op_type];
5937 if(OP_IS_SOCKET(op_type))
5938 DIE(aTHX_ PL_no_sock_func, name);
5939 DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
5942 /* For sorting out arguments passed to a &CORE:: subroutine */
5946 int opnum = SvIOK(cSVOP_sv) ? (int)SvUV(cSVOP_sv) : 0;
5947 int defgv = PL_opargs[opnum] & OA_DEFGV ||opnum==OP_GLOB, whicharg = 0;
5948 AV * const at_ = GvAV(PL_defgv);
5949 SV **svp = at_ ? AvARRAY(at_) : NULL;
5950 I32 minargs = 0, maxargs = 0, numargs = at_ ? AvFILLp(at_)+1 : 0;
5951 I32 oa = opnum ? PL_opargs[opnum] >> OASHIFT : 0;
5952 bool seen_question = 0;
5953 const char *err = NULL;
5954 const bool pushmark = PL_op->op_private & OPpCOREARGS_PUSHMARK;
5956 /* Count how many args there are first, to get some idea how far to
5957 extend the stack. */
5959 if ((oa & 7) == OA_LIST) { maxargs = I32_MAX; break; }
5961 if (oa & OA_OPTIONAL) seen_question = 1;
5962 if (!seen_question) minargs++;
5966 if(numargs < minargs) err = "Not enough";
5967 else if(numargs > maxargs) err = "Too many";
5969 /* diag_listed_as: Too many arguments for %s */
5971 "%s arguments for %s", err,
5972 opnum ? PL_op_desc[opnum] : SvPV_nolen_const(cSVOP_sv)
5975 /* Reset the stack pointer. Without this, we end up returning our own
5976 arguments in list context, in addition to the values we are supposed
5977 to return. nextstate usually does this on sub entry, but we need
5978 to run the next op with the caller's hints, so we cannot have a
5980 SP = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
5982 if(!maxargs) RETURN;
5984 /* We do this here, rather than with a separate pushmark op, as it has
5985 to come in between two things this function does (stack reset and
5986 arg pushing). This seems the easiest way to do it. */
5989 (void)Perl_pp_pushmark(aTHX);
5992 EXTEND(SP, maxargs == I32_MAX ? numargs : maxargs);
5993 PUTBACK; /* The code below can die in various places. */
5995 oa = PL_opargs[opnum] >> OASHIFT;
5996 for (; oa&&(numargs||!pushmark); (void)(numargs&&(++svp,--numargs))) {
6001 if (!numargs && defgv && whicharg == minargs + 1) {
6002 PUSHs(find_rundefsv2(
6003 find_runcv_where(FIND_RUNCV_level_eq, 1, NULL),
6004 cxstack[cxstack_ix].blk_oldcop->cop_seq
6007 else PUSHs(numargs ? svp && *svp ? *svp : &PL_sv_undef : NULL);
6011 PUSHs(svp && *svp ? *svp : &PL_sv_undef);
6016 if (!svp || !*svp || !SvROK(*svp)
6017 || SvTYPE(SvRV(*svp)) != SVt_PVHV)
6019 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
6020 "Type of arg %d to &CORE::%s must be hash reference",
6021 whicharg, OP_DESC(PL_op->op_next)
6026 if (!numargs) PUSHs(NULL);
6027 else if(svp && *svp && SvROK(*svp) && isGV_with_GP(SvRV(*svp)))
6028 /* no magic here, as the prototype will have added an extra
6029 refgen and we just want what was there before that */
6032 const bool constr = PL_op->op_private & whicharg;
6034 svp && *svp ? *svp : &PL_sv_undef,
6035 constr, cBOOL(CopHINTS_get(PL_curcop) & HINT_STRICT_REFS),
6041 if (!numargs) goto try_defsv;
6043 const bool wantscalar =
6044 PL_op->op_private & OPpCOREARGS_SCALARMOD;
6045 if (!svp || !*svp || !SvROK(*svp)
6046 /* We have to permit globrefs even for the \$ proto, as
6047 *foo is indistinguishable from ${\*foo}, and the proto-
6048 type permits the latter. */
6049 || SvTYPE(SvRV(*svp)) > (
6050 wantscalar ? SVt_PVLV
6051 : opnum == OP_LOCK || opnum == OP_UNDEF
6057 "Type of arg %d to &CORE::%s must be %s",
6058 whicharg, PL_op_name[opnum],
6060 ? "scalar reference"
6061 : opnum == OP_LOCK || opnum == OP_UNDEF
6062 ? "reference to one of [$@%&*]"
6063 : "reference to one of [$@%*]"
6066 if (opnum == OP_UNDEF && SvRV(*svp) == (SV *)PL_defgv
6067 && cxstack[cxstack_ix].cx_type & CXp_HASARGS) {
6068 /* Undo @_ localisation, so that sub exit does not undo
6069 part of our undeffing. */
6070 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
6072 cx->cx_type &= ~ CXp_HASARGS;
6073 assert(!AvREAL(cx->blk_sub.argarray));
6078 DIE(aTHX_ "panic: unknown OA_*: %x", (unsigned)(oa&7));
6090 if (PL_op->op_private & OPpOFFBYONE) {
6091 cv = find_runcv_where(FIND_RUNCV_level_eq, 1, NULL);
6093 else cv = find_runcv(NULL);
6094 XPUSHs(CvEVAL(cv) ? &PL_sv_undef : sv_2mortal(newRV((SV *)cv)));
6101 * c-indentation-style: bsd
6103 * indent-tabs-mode: nil
6106 * ex: set ts=8 sts=4 sw=4 et: