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)
65 /* This is also called directly by pp_lvavref. */
70 assert(SvTYPE(TARG) == SVt_PVAV);
71 if (UNLIKELY( PL_op->op_private & OPpLVAL_INTRO ))
72 if (LIKELY( !(PL_op->op_private & OPpPAD_STATE) ))
73 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
75 if (PL_op->op_flags & OPf_REF) {
78 } else if (PL_op->op_private & OPpMAYBE_LVSUB) {
79 const I32 flags = is_lvalue_sub();
80 if (flags && !(flags & OPpENTERSUB_INARGS)) {
81 if (GIMME_V == G_SCALAR)
82 /* diag_listed_as: Can't return %s to lvalue scalar context */
83 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
89 if (gimme == G_ARRAY) {
90 /* XXX see also S_pushav in pp_hot.c */
91 const Size_t maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
93 if (SvMAGICAL(TARG)) {
95 for (i=0; i < maxarg; i++) {
96 SV * const * const svp = av_fetch(MUTABLE_AV(TARG), i, FALSE);
97 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
102 for (i=0; i < (PADOFFSET)maxarg; i++) {
103 SV * const sv = AvARRAY((const AV *)TARG)[i];
104 SP[i+1] = sv ? sv : &PL_sv_undef;
109 else if (gimme == G_SCALAR) {
110 SV* const sv = sv_newmortal();
111 const SSize_t maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
112 sv_setiv(sv, maxarg);
123 assert(SvTYPE(TARG) == SVt_PVHV);
125 if (UNLIKELY( PL_op->op_private & OPpLVAL_INTRO ))
126 if (LIKELY( !(PL_op->op_private & OPpPAD_STATE) ))
127 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
128 if (PL_op->op_flags & OPf_REF)
130 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
131 const I32 flags = is_lvalue_sub();
132 if (flags && !(flags & OPpENTERSUB_INARGS)) {
133 if (GIMME_V == G_SCALAR)
134 /* diag_listed_as: Can't return %s to lvalue scalar context */
135 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
140 if (gimme == G_ARRAY) {
141 RETURNOP(Perl_do_kv(aTHX));
143 else if ((PL_op->op_private & OPpTRUEBOOL
144 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
145 && block_gimme() == G_VOID ))
146 && (!SvRMAGICAL(TARG) || !mg_find(TARG, PERL_MAGIC_tied)))
147 SETs(HvUSEDKEYS(TARG) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
148 else if (gimme == G_SCALAR) {
149 SV* const sv = Perl_hv_scalar(aTHX_ MUTABLE_HV(TARG));
158 assert(SvTYPE(TARG) == SVt_PVCV);
166 SvPADSTALE_off(TARG);
173 CV * const protocv = PadnamePROTOCV(
174 PadlistNAMESARRAY(CvPADLIST(find_runcv(NULL)))[ARGTARG]
176 assert(SvTYPE(TARG) == SVt_PVCV);
178 if (CvISXSUB(protocv)) { /* 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(protocv);
186 if (CvROOT(protocv)) {
187 assert(CvCLONE(protocv));
188 assert(!CvCLONED(protocv));
190 cv_clone_into(protocv,(CV *)TARG);
191 SAVECLEARSV(PAD_SVl(ARGTARG));
198 /* In some cases this function inspects PL_op. If this function is called
199 for new op types, more bool parameters may need to be added in place of
202 When noinit is true, the absence of a gv will cause a retval of undef.
203 This is unrelated to the cv-to-gv assignment case.
207 S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict,
210 if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv);
213 sv = amagic_deref_call(sv, to_gv_amg);
217 if (SvTYPE(sv) == SVt_PVIO) {
218 GV * const gv = MUTABLE_GV(sv_newmortal());
219 gv_init(gv, 0, "__ANONIO__", 10, 0);
220 GvIOp(gv) = MUTABLE_IO(sv);
221 SvREFCNT_inc_void_NN(sv);
224 else if (!isGV_with_GP(sv)) {
225 Perl_die(aTHX_ "Not a GLOB reference");
229 if (!isGV_with_GP(sv)) {
231 /* If this is a 'my' scalar and flag is set then vivify
234 if (vivify_sv && sv != &PL_sv_undef) {
237 Perl_croak_no_modify();
238 if (cUNOP->op_targ) {
239 SV * const namesv = PAD_SV(cUNOP->op_targ);
240 HV *stash = CopSTASH(PL_curcop);
241 if (SvTYPE(stash) != SVt_PVHV) stash = NULL;
242 gv = MUTABLE_GV(newSV(0));
243 gv_init_sv(gv, stash, namesv, 0);
246 const char * const name = CopSTASHPV(PL_curcop);
247 gv = newGVgen_flags(name,
248 HvNAMEUTF8(CopSTASH(PL_curcop)) ? SVf_UTF8 : 0 );
249 SvREFCNT_inc_simple_void_NN(gv);
251 prepare_SV_for_RV(sv);
252 SvRV_set(sv, MUTABLE_SV(gv));
257 if (PL_op->op_flags & OPf_REF || strict) {
258 Perl_die(aTHX_ PL_no_usym, "a symbol");
260 if (ckWARN(WARN_UNINITIALIZED))
266 if (!(sv = MUTABLE_SV(gv_fetchsv_nomg(
267 sv, GV_ADDMG, SVt_PVGV
276 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""),
280 if ((PL_op->op_private & (OPpLVAL_INTRO|OPpDONT_INIT_GV))
281 == OPpDONT_INIT_GV) {
282 /* We are the target of a coderef assignment. Return
283 the scalar unchanged, and let pp_sasssign deal with
287 sv = MUTABLE_SV(gv_fetchsv_nomg(sv, GV_ADD, SVt_PVGV));
289 /* FAKE globs in the symbol table cause weird bugs (#77810) */
293 if (SvFAKE(sv) && !(PL_op->op_private & OPpALLOW_FAKE)) {
294 SV *newsv = sv_newmortal();
295 sv_setsv_flags(newsv, sv, 0);
307 sv, PL_op->op_private & OPpDEREF,
308 PL_op->op_private & HINT_STRICT_REFS,
309 ((PL_op->op_flags & OPf_SPECIAL) && !(PL_op->op_flags & OPf_MOD))
310 || PL_op->op_type == OP_READLINE
312 if (PL_op->op_private & OPpLVAL_INTRO)
313 save_gp(MUTABLE_GV(sv), !(PL_op->op_flags & OPf_SPECIAL));
318 /* Helper function for pp_rv2sv and pp_rv2av */
320 Perl_softref2xv(pTHX_ SV *const sv, const char *const what,
321 const svtype type, SV ***spp)
325 PERL_ARGS_ASSERT_SOFTREF2XV;
327 if (PL_op->op_private & HINT_STRICT_REFS) {
329 Perl_die(aTHX_ PL_no_symref_sv, sv,
330 (SvPOKp(sv) && SvCUR(sv)>32 ? "..." : ""), what);
332 Perl_die(aTHX_ PL_no_usym, what);
336 PL_op->op_flags & OPf_REF
338 Perl_die(aTHX_ PL_no_usym, what);
339 if (ckWARN(WARN_UNINITIALIZED))
341 if (type != SVt_PV && GIMME_V == G_ARRAY) {
345 **spp = &PL_sv_undef;
348 if ((PL_op->op_flags & OPf_SPECIAL) &&
349 !(PL_op->op_flags & OPf_MOD))
351 if (!(gv = gv_fetchsv_nomg(sv, GV_ADDMG, type)))
353 **spp = &PL_sv_undef;
358 gv = gv_fetchsv_nomg(sv, GV_ADD, type);
371 sv = amagic_deref_call(sv, to_sv_amg);
375 if (SvTYPE(sv) >= SVt_PVAV)
376 DIE(aTHX_ "Not a SCALAR reference");
381 if (!isGV_with_GP(gv)) {
382 gv = Perl_softref2xv(aTHX_ sv, "a SCALAR", SVt_PV, &sp);
388 if (PL_op->op_flags & OPf_MOD) {
389 if (PL_op->op_private & OPpLVAL_INTRO) {
390 if (cUNOP->op_first->op_type == OP_NULL)
391 sv = save_scalar(MUTABLE_GV(TOPs));
393 sv = save_scalar(gv);
395 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
397 else if (PL_op->op_private & OPpDEREF)
398 sv = vivify_ref(sv, PL_op->op_private & OPpDEREF);
407 AV * const av = MUTABLE_AV(TOPs);
408 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
410 SV ** const svp = Perl_av_arylen_p(aTHX_ MUTABLE_AV(av));
412 *svp = newSV_type(SVt_PVMG);
413 sv_magic(*svp, MUTABLE_SV(av), PERL_MAGIC_arylen, NULL, 0);
417 SETs(sv_2mortal(newSViv(AvFILL(MUTABLE_AV(av)))));
426 if (PL_op->op_flags & OPf_MOD || LVRET) {
427 SV * const ret = sv_2mortal(newSV_type(SVt_PVLV));/* Not TARG RT#67838 */
428 sv_magic(ret, NULL, PERL_MAGIC_pos, NULL, 0);
430 LvTARG(ret) = SvREFCNT_inc_simple(sv);
431 SETs(ret); /* no SvSETMAGIC */
434 const MAGIC * const mg = mg_find_mglob(sv);
435 if (mg && mg->mg_len != -1) {
437 STRLEN i = mg->mg_len;
438 if (mg->mg_flags & MGf_BYTES && DO_UTF8(sv))
439 i = sv_pos_b2u_flags(sv, i, SV_GMAGIC|SV_CONST_RETURN);
453 const I32 flags = (PL_op->op_flags & OPf_SPECIAL)
455 : ((PL_op->op_private & (OPpLVAL_INTRO|OPpMAY_RETURN_CONSTANT))
456 == OPpMAY_RETURN_CONSTANT)
459 /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
460 /* (But not in defined().) */
462 CV *cv = sv_2cv(TOPs, &stash_unused, &gv, flags);
464 else if ((flags == (GV_ADD|GV_NOEXPAND)) && gv && SvROK(gv)) {
465 cv = SvTYPE(SvRV(gv)) == SVt_PVCV
466 ? MUTABLE_CV(SvRV(gv))
470 cv = MUTABLE_CV(&PL_sv_undef);
471 SETs(MUTABLE_SV(cv));
481 SV *ret = &PL_sv_undef;
483 if (SvGMAGICAL(TOPs)) SETs(sv_mortalcopy(TOPs));
484 if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
485 const char * s = SvPVX_const(TOPs);
486 if (strnEQ(s, "CORE::", 6)) {
487 const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
489 DIE(aTHX_ "Can't find an opnumber for \"%"UTF8f"\"",
490 UTF8fARG(SvFLAGS(TOPs) & SVf_UTF8, SvCUR(TOPs)-6, s+6));
492 SV * const sv = core_prototype(NULL, s + 6, code, NULL);
498 cv = sv_2cv(TOPs, &stash, &gv, 0);
500 ret = newSVpvn_flags(
501 CvPROTO(cv), CvPROTOLEN(cv), SVs_TEMP | SvUTF8(cv)
511 CV *cv = MUTABLE_CV(PAD_SV(PL_op->op_targ));
513 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
515 PUSHs(MUTABLE_SV(cv));
529 if (GIMME_V != G_ARRAY) {
535 *MARK = &PL_sv_undef;
537 *MARK = refto(*MARK);
541 EXTEND_MORTAL(SP - MARK);
543 *MARK = refto(*MARK);
548 S_refto(pTHX_ SV *sv)
552 PERL_ARGS_ASSERT_REFTO;
554 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
557 if (!(sv = LvTARG(sv)))
560 SvREFCNT_inc_void_NN(sv);
562 else if (SvTYPE(sv) == SVt_PVAV) {
563 if (!AvREAL((const AV *)sv) && AvREIFY((const AV *)sv))
564 av_reify(MUTABLE_AV(sv));
566 SvREFCNT_inc_void_NN(sv);
568 else if (SvPADTMP(sv)) {
573 SvREFCNT_inc_void_NN(sv);
576 sv_upgrade(rv, SVt_IV);
585 SV * const sv = TOPs;
593 /* use the return value that is in a register, its the same as TARG */
594 TARG = sv_ref(TARG,SvRV(sv),TRUE);
609 stash = CopSTASH(PL_curcop);
610 if (SvTYPE(stash) != SVt_PVHV)
611 Perl_croak(aTHX_ "Attempt to bless into a freed package");
614 SV * const ssv = POPs;
618 if (!ssv) goto curstash;
621 if (!SvAMAGIC(ssv)) {
623 Perl_croak(aTHX_ "Attempt to bless into a reference");
625 /* SvAMAGIC is on here, but it only means potentially overloaded,
626 so after stringification: */
627 ptr = SvPV_nomg_const(ssv,len);
628 /* We need to check the flag again: */
629 if (!SvAMAGIC(ssv)) goto frog;
631 else ptr = SvPV_nomg_const(ssv,len);
633 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
634 "Explicit blessing to '' (assuming package main)");
635 stash = gv_stashpvn(ptr, len, GV_ADD|SvUTF8(ssv));
638 (void)sv_bless(TOPs, stash);
648 const char * const elem = SvPV_const(sv, len);
649 GV * const gv = MUTABLE_GV(TOPs);
654 /* elem will always be NUL terminated. */
655 const char * const second_letter = elem + 1;
658 if (len == 5 && strEQ(second_letter, "RRAY"))
660 tmpRef = MUTABLE_SV(GvAV(gv));
661 if (tmpRef && !AvREAL((const AV *)tmpRef)
662 && AvREIFY((const AV *)tmpRef))
663 av_reify(MUTABLE_AV(tmpRef));
667 if (len == 4 && strEQ(second_letter, "ODE"))
668 tmpRef = MUTABLE_SV(GvCVu(gv));
671 if (len == 10 && strEQ(second_letter, "ILEHANDLE")) {
672 /* finally deprecated in 5.8.0 */
673 deprecate("*glob{FILEHANDLE}");
674 tmpRef = MUTABLE_SV(GvIOp(gv));
677 if (len == 6 && strEQ(second_letter, "ORMAT"))
678 tmpRef = MUTABLE_SV(GvFORM(gv));
681 if (len == 4 && strEQ(second_letter, "LOB"))
682 tmpRef = MUTABLE_SV(gv);
685 if (len == 4 && strEQ(second_letter, "ASH"))
686 tmpRef = MUTABLE_SV(GvHV(gv));
689 if (*second_letter == 'O' && !elem[2] && len == 2)
690 tmpRef = MUTABLE_SV(GvIOp(gv));
693 if (len == 4 && strEQ(second_letter, "AME"))
694 sv = newSVhek(GvNAME_HEK(gv));
697 if (len == 7 && strEQ(second_letter, "ACKAGE")) {
698 const HV * const stash = GvSTASH(gv);
699 const HEK * const hek = stash ? HvNAME_HEK(stash) : NULL;
700 sv = hek ? newSVhek(hek) : newSVpvs("__ANON__");
704 if (len == 6 && strEQ(second_letter, "CALAR"))
719 /* Pattern matching */
727 if (len == 0 || len > I32_MAX || !SvPOK(sv) || SvUTF8(sv) || SvVALID(sv)) {
728 /* Historically, study was skipped in these cases. */
733 /* Make study a no-op. It's no longer useful and its existence
734 complicates matters elsewhere. */
740 /* also used for: pp_transr() */
747 if (PL_op->op_flags & OPf_STACKED)
752 sv = PAD_SV(ARGTARG);
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 mPUSHi(do_trans(sv));
770 /* Lvalue operators. */
773 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 count += 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 count += do_chomp(retval, hv_iterval(hv,entry), chomping);
803 else if (SvREADONLY(sv)) {
804 Perl_croak_no_modify();
809 /* XXX, here sv is utf8-ized as a side-effect!
810 If encoding.pm is used properly, almost string-generating
811 operations, including literal strings, chr(), input data, etc.
812 should have been utf8-ized already, right?
814 sv_recode_to_utf8(sv, _get_encoding());
821 char *temp_buffer = NULL;
826 goto nope_free_nothing;
828 while (len && s[-1] == '\n') {
835 STRLEN rslen, rs_charlen;
836 const char *rsptr = SvPV_const(PL_rs, rslen);
838 rs_charlen = SvUTF8(PL_rs)
842 if (SvUTF8(PL_rs) != SvUTF8(sv)) {
843 /* Assumption is that rs is shorter than the scalar. */
845 /* RS is utf8, scalar is 8 bit. */
847 temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
850 /* Cannot downgrade, therefore cannot possibly match.
851 At this point, temp_buffer is not alloced, and
852 is the buffer inside PL_rs, so dont free it.
854 assert (temp_buffer == rsptr);
859 else if (IN_ENCODING) {
860 /* RS is 8 bit, encoding.pm is used.
861 * Do not recode PL_rs as a side-effect. */
862 svrecode = newSVpvn(rsptr, rslen);
863 sv_recode_to_utf8(svrecode, _get_encoding());
864 rsptr = SvPV_const(svrecode, rslen);
865 rs_charlen = sv_len_utf8(svrecode);
868 /* RS is 8 bit, scalar is utf8. */
869 temp_buffer = (char*)bytes_to_utf8((U8*)rsptr, &rslen);
883 if (memNE(s, rsptr, rslen))
888 SvPV_force_nomg_nolen(sv);
895 Safefree(temp_buffer);
897 SvREFCNT_dec(svrecode);
901 if (len && (!SvPOK(sv) || SvIsCOW(sv)))
902 s = SvPV_force_nomg(sv, len);
905 char * const send = s + len;
906 char * const start = s;
908 while (s > start && UTF8_IS_CONTINUATION(*s))
910 if (is_utf8_string((U8*)s, send - s)) {
911 sv_setpvn(retval, s, send - s);
913 SvCUR_set(sv, s - start);
919 sv_setpvs(retval, "");
923 sv_setpvn(retval, s, 1);
930 sv_setpvs(retval, "");
937 /* also used for: pp_schomp() */
942 const bool chomping = PL_op->op_type == OP_SCHOMP;
944 const size_t count = do_chomp(TARG, TOPs, chomping);
946 sv_setiv(TARG, count);
952 /* also used for: pp_chomp() */
956 dSP; dMARK; dTARGET; dORIGMARK;
957 const bool chomping = PL_op->op_type == OP_CHOMP;
961 count += do_chomp(TARG, *++MARK, chomping);
963 sv_setiv(TARG, count);
974 if (!PL_op->op_private) {
986 if (SvTHINKFIRST(sv))
987 sv_force_normal_flags(sv, SV_COW_DROP_PV|SV_IMMEDIATE_UNREF);
989 switch (SvTYPE(sv)) {
993 av_undef(MUTABLE_AV(sv));
996 hv_undef(MUTABLE_HV(sv));
999 if (cv_const_sv((const CV *)sv))
1000 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
1001 "Constant subroutine %"SVf" undefined",
1002 SVfARG(CvANON((const CV *)sv)
1003 ? newSVpvs_flags("(anonymous)", SVs_TEMP)
1004 : sv_2mortal(newSVhek(
1006 ? CvNAME_HEK((CV *)sv)
1007 : GvENAME_HEK(CvGV((const CV *)sv))
1012 /* let user-undef'd sub keep its identity */
1013 cv_undef_flags(MUTABLE_CV(sv), CV_UNDEF_KEEP_NAME);
1016 assert(isGV_with_GP(sv));
1017 assert(!SvFAKE(sv));
1022 /* undef *Pkg::meth_name ... */
1024 = GvCVu((const GV *)sv) && (stash = GvSTASH((const GV *)sv))
1025 && HvENAME_get(stash);
1027 if((stash = GvHV((const GV *)sv))) {
1028 if(HvENAME_get(stash))
1029 SvREFCNT_inc_simple_void_NN(sv_2mortal((SV *)stash));
1033 SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
1034 gp_free(MUTABLE_GV(sv));
1036 GvGP_set(sv, gp_ref(gp));
1037 #ifndef PERL_DONT_CREATE_GVSV
1038 GvSV(sv) = newSV(0);
1040 GvLINE(sv) = CopLINE(PL_curcop);
1041 GvEGV(sv) = MUTABLE_GV(sv);
1045 mro_package_moved(NULL, stash, (const GV *)sv, 0);
1047 /* undef *Foo::ISA */
1048 if( strEQ(GvNAME((const GV *)sv), "ISA")
1049 && (stash = GvSTASH((const GV *)sv))
1050 && (method_changed || HvENAME(stash)) )
1051 mro_isa_changed_in(stash);
1052 else if(method_changed)
1053 mro_method_changed_in(
1054 GvSTASH((const GV *)sv)
1060 if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) {
1074 /* also used for: pp_i_postdec() pp_i_postinc() pp_postdec() */
1080 PL_op->op_type == OP_POSTINC || PL_op->op_type == OP_I_POSTINC;
1081 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
1082 Perl_croak_no_modify();
1084 TARG = sv_newmortal();
1085 sv_setsv(TARG, TOPs);
1086 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1087 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
1089 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
1090 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1094 else sv_dec_nomg(TOPs);
1096 /* special case for undef: see thread at 2003-03/msg00536.html in archive */
1097 if (inc && !SvOK(TARG))
1103 /* Ordinary operators. */
1107 dSP; dATARGET; SV *svl, *svr;
1108 #ifdef PERL_PRESERVE_IVUV
1111 tryAMAGICbin_MG(pow_amg, AMGf_assign|AMGf_numeric);
1114 #ifdef PERL_PRESERVE_IVUV
1115 /* For integer to integer power, we do the calculation by hand wherever
1116 we're sure it is safe; otherwise we call pow() and try to convert to
1117 integer afterwards. */
1118 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1126 const IV iv = SvIVX(svr);
1130 goto float_it; /* Can't do negative powers this way. */
1134 baseuok = SvUOK(svl);
1136 baseuv = SvUVX(svl);
1138 const IV iv = SvIVX(svl);
1141 baseuok = TRUE; /* effectively it's a UV now */
1143 baseuv = -iv; /* abs, baseuok == false records sign */
1146 /* now we have integer ** positive integer. */
1149 /* foo & (foo - 1) is zero only for a power of 2. */
1150 if (!(baseuv & (baseuv - 1))) {
1151 /* We are raising power-of-2 to a positive integer.
1152 The logic here will work for any base (even non-integer
1153 bases) but it can be less accurate than
1154 pow (base,power) or exp (power * log (base)) when the
1155 intermediate values start to spill out of the mantissa.
1156 With powers of 2 we know this can't happen.
1157 And powers of 2 are the favourite thing for perl
1158 programmers to notice ** not doing what they mean. */
1160 NV base = baseuok ? baseuv : -(NV)baseuv;
1165 while (power >>= 1) {
1173 SvIV_please_nomg(svr);
1176 unsigned int highbit = 8 * sizeof(UV);
1177 unsigned int diff = 8 * sizeof(UV);
1178 while (diff >>= 1) {
1180 if (baseuv >> highbit) {
1184 /* we now have baseuv < 2 ** highbit */
1185 if (power * highbit <= 8 * sizeof(UV)) {
1186 /* result will definitely fit in UV, so use UV math
1187 on same algorithm as above */
1190 const bool odd_power = cBOOL(power & 1);
1194 while (power >>= 1) {
1201 if (baseuok || !odd_power)
1202 /* answer is positive */
1204 else if (result <= (UV)IV_MAX)
1205 /* answer negative, fits in IV */
1206 SETi( -(IV)result );
1207 else if (result == (UV)IV_MIN)
1208 /* 2's complement assumption: special case IV_MIN */
1211 /* answer negative, doesn't fit */
1212 SETn( -(NV)result );
1220 NV right = SvNV_nomg(svr);
1221 NV left = SvNV_nomg(svl);
1224 #if defined(USE_LONG_DOUBLE) && defined(HAS_AIX_POWL_NEG_BASE_BUG)
1226 We are building perl with long double support and are on an AIX OS
1227 afflicted with a powl() function that wrongly returns NaNQ for any
1228 negative base. This was reported to IBM as PMR #23047-379 on
1229 03/06/2006. The problem exists in at least the following versions
1230 of AIX and the libm fileset, and no doubt others as well:
1232 AIX 4.3.3-ML10 bos.adt.libm 4.3.3.50
1233 AIX 5.1.0-ML04 bos.adt.libm 5.1.0.29
1234 AIX 5.2.0 bos.adt.libm 5.2.0.85
1236 So, until IBM fixes powl(), we provide the following workaround to
1237 handle the problem ourselves. Our logic is as follows: for
1238 negative bases (left), we use fmod(right, 2) to check if the
1239 exponent is an odd or even integer:
1241 - if odd, powl(left, right) == -powl(-left, right)
1242 - if even, powl(left, right) == powl(-left, right)
1244 If the exponent is not an integer, the result is rightly NaNQ, so
1245 we just return that (as NV_NAN).
1249 NV mod2 = Perl_fmod( right, 2.0 );
1250 if (mod2 == 1.0 || mod2 == -1.0) { /* odd integer */
1251 SETn( -Perl_pow( -left, right) );
1252 } else if (mod2 == 0.0) { /* even integer */
1253 SETn( Perl_pow( -left, right) );
1254 } else { /* fractional power */
1258 SETn( Perl_pow( left, right) );
1261 SETn( Perl_pow( left, right) );
1262 #endif /* HAS_AIX_POWL_NEG_BASE_BUG */
1264 #ifdef PERL_PRESERVE_IVUV
1266 SvIV_please_nomg(svr);
1274 dSP; dATARGET; SV *svl, *svr;
1275 tryAMAGICbin_MG(mult_amg, AMGf_assign|AMGf_numeric);
1278 #ifdef PERL_PRESERVE_IVUV
1279 if (SvIV_please_nomg(svr)) {
1280 /* Unless the left argument is integer in range we are going to have to
1281 use NV maths. Hence only attempt to coerce the right argument if
1282 we know the left is integer. */
1283 /* Left operand is defined, so is it IV? */
1284 if (SvIV_please_nomg(svl)) {
1285 bool auvok = SvUOK(svl);
1286 bool buvok = SvUOK(svr);
1287 const UV topmask = (~ (UV)0) << (4 * sizeof (UV));
1288 const UV botmask = ~((~ (UV)0) << (4 * sizeof (UV)));
1297 const IV aiv = SvIVX(svl);
1300 auvok = TRUE; /* effectively it's a UV now */
1302 /* abs, auvok == false records sign */
1303 alow = (aiv == IV_MIN) ? (UV)aiv : (UV)(-aiv);
1309 const IV biv = SvIVX(svr);
1312 buvok = TRUE; /* effectively it's a UV now */
1314 /* abs, buvok == false records sign */
1315 blow = (biv == IV_MIN) ? (UV)biv : (UV)(-biv);
1319 /* If this does sign extension on unsigned it's time for plan B */
1320 ahigh = alow >> (4 * sizeof (UV));
1322 bhigh = blow >> (4 * sizeof (UV));
1324 if (ahigh && bhigh) {
1326 /* eg 32 bit is at least 0x10000 * 0x10000 == 0x100000000
1327 which is overflow. Drop to NVs below. */
1328 } else if (!ahigh && !bhigh) {
1329 /* eg 32 bit is at most 0xFFFF * 0xFFFF == 0xFFFE0001
1330 so the unsigned multiply cannot overflow. */
1331 const UV product = alow * blow;
1332 if (auvok == buvok) {
1333 /* -ve * -ve or +ve * +ve gives a +ve result. */
1337 } else if (product <= (UV)IV_MIN) {
1338 /* 2s complement assumption that (UV)-IV_MIN is correct. */
1339 /* -ve result, which could overflow an IV */
1341 /* can't negate IV_MIN, but there are aren't two
1342 * integers such that !ahigh && !bhigh, where the
1343 * product equals 0x800....000 */
1344 assert(product != (UV)IV_MIN);
1345 SETi( -(IV)product );
1347 } /* else drop to NVs below. */
1349 /* One operand is large, 1 small */
1352 /* swap the operands */
1354 bhigh = blow; /* bhigh now the temp var for the swap */
1358 /* now, ((ahigh * blow) << half_UV_len) + (alow * blow)
1359 multiplies can't overflow. shift can, add can, -ve can. */
1360 product_middle = ahigh * blow;
1361 if (!(product_middle & topmask)) {
1362 /* OK, (ahigh * blow) won't lose bits when we shift it. */
1364 product_middle <<= (4 * sizeof (UV));
1365 product_low = alow * blow;
1367 /* as for pp_add, UV + something mustn't get smaller.
1368 IIRC ANSI mandates this wrapping *behaviour* for
1369 unsigned whatever the actual representation*/
1370 product_low += product_middle;
1371 if (product_low >= product_middle) {
1372 /* didn't overflow */
1373 if (auvok == buvok) {
1374 /* -ve * -ve or +ve * +ve gives a +ve result. */
1376 SETu( product_low );
1378 } else if (product_low <= (UV)IV_MIN) {
1379 /* 2s complement assumption again */
1380 /* -ve result, which could overflow an IV */
1382 SETi(product_low == (UV)IV_MIN
1383 ? IV_MIN : -(IV)product_low);
1385 } /* else drop to NVs below. */
1387 } /* product_middle too large */
1388 } /* ahigh && bhigh */
1393 NV right = SvNV_nomg(svr);
1394 NV left = SvNV_nomg(svl);
1396 SETn( left * right );
1403 dSP; dATARGET; SV *svl, *svr;
1404 tryAMAGICbin_MG(div_amg, AMGf_assign|AMGf_numeric);
1407 /* Only try to do UV divide first
1408 if ((SLOPPYDIVIDE is true) or
1409 (PERL_PRESERVE_IVUV is true and one or both SV is a UV too large
1411 The assumption is that it is better to use floating point divide
1412 whenever possible, only doing integer divide first if we can't be sure.
1413 If NV_PRESERVES_UV is true then we know at compile time that no UV
1414 can be too large to preserve, so don't need to compile the code to
1415 test the size of UVs. */
1418 # define PERL_TRY_UV_DIVIDE
1419 /* ensure that 20./5. == 4. */
1421 # ifdef PERL_PRESERVE_IVUV
1422 # ifndef NV_PRESERVES_UV
1423 # define PERL_TRY_UV_DIVIDE
1428 #ifdef PERL_TRY_UV_DIVIDE
1429 if (SvIV_please_nomg(svr) && SvIV_please_nomg(svl)) {
1430 bool left_non_neg = SvUOK(svl);
1431 bool right_non_neg = SvUOK(svr);
1435 if (right_non_neg) {
1439 const IV biv = SvIVX(svr);
1442 right_non_neg = TRUE; /* effectively it's a UV now */
1445 right = (biv == IV_MIN) ? (UV)biv : (UV)(-biv);
1448 /* historically undef()/0 gives a "Use of uninitialized value"
1449 warning before dieing, hence this test goes here.
1450 If it were immediately before the second SvIV_please, then
1451 DIE() would be invoked before left was even inspected, so
1452 no inspection would give no warning. */
1454 DIE(aTHX_ "Illegal division by zero");
1460 const IV aiv = SvIVX(svl);
1463 left_non_neg = TRUE; /* effectively it's a UV now */
1466 left = (aiv == IV_MIN) ? (UV)aiv : (UV)(-aiv);
1472 /* For sloppy divide we always attempt integer division. */
1474 /* Otherwise we only attempt it if either or both operands
1475 would not be preserved by an NV. If both fit in NVs
1476 we fall through to the NV divide code below. However,
1477 as left >= right to ensure integer result here, we know that
1478 we can skip the test on the right operand - right big
1479 enough not to be preserved can't get here unless left is
1482 && (left > ((UV)1 << NV_PRESERVES_UV_BITS))
1485 /* Integer division can't overflow, but it can be imprecise. */
1486 const UV result = left / right;
1487 if (result * right == left) {
1488 SP--; /* result is valid */
1489 if (left_non_neg == right_non_neg) {
1490 /* signs identical, result is positive. */
1494 /* 2s complement assumption */
1495 if (result <= (UV)IV_MIN)
1496 SETi(result == (UV)IV_MIN ? IV_MIN : -(IV)result);
1498 /* It's exact but too negative for IV. */
1499 SETn( -(NV)result );
1502 } /* tried integer divide but it was not an integer result */
1503 } /* else (PERL_ABS(result) < 1.0) or (both UVs in range for NV) */
1504 } /* one operand wasn't SvIOK */
1505 #endif /* PERL_TRY_UV_DIVIDE */
1507 NV right = SvNV_nomg(svr);
1508 NV left = SvNV_nomg(svl);
1509 (void)POPs;(void)POPs;
1510 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1511 if (! Perl_isnan(right) && right == 0.0)
1515 DIE(aTHX_ "Illegal division by zero");
1516 PUSHn( left / right );
1524 tryAMAGICbin_MG(modulo_amg, AMGf_assign|AMGf_numeric);
1528 bool left_neg = FALSE;
1529 bool right_neg = FALSE;
1530 bool use_double = FALSE;
1531 bool dright_valid = FALSE;
1534 SV * const svr = TOPs;
1535 SV * const svl = TOPm1s;
1536 if (SvIV_please_nomg(svr)) {
1537 right_neg = !SvUOK(svr);
1541 const IV biv = SvIVX(svr);
1544 right_neg = FALSE; /* effectively it's a UV now */
1546 right = (biv == IV_MIN) ? (UV)biv : (UV)(-biv);
1551 dright = SvNV_nomg(svr);
1552 right_neg = dright < 0;
1555 if (dright < UV_MAX_P1) {
1556 right = U_V(dright);
1557 dright_valid = TRUE; /* In case we need to use double below. */
1563 /* At this point use_double is only true if right is out of range for
1564 a UV. In range NV has been rounded down to nearest UV and
1565 use_double false. */
1566 if (!use_double && SvIV_please_nomg(svl)) {
1567 left_neg = !SvUOK(svl);
1571 const IV aiv = SvIVX(svl);
1574 left_neg = FALSE; /* effectively it's a UV now */
1576 left = (aiv == IV_MIN) ? (UV)aiv : (UV)(-aiv);
1581 dleft = SvNV_nomg(svl);
1582 left_neg = dleft < 0;
1586 /* This should be exactly the 5.6 behaviour - if left and right are
1587 both in range for UV then use U_V() rather than floor. */
1589 if (dleft < UV_MAX_P1) {
1590 /* right was in range, so is dleft, so use UVs not double.
1594 /* left is out of range for UV, right was in range, so promote
1595 right (back) to double. */
1597 /* The +0.5 is used in 5.6 even though it is not strictly
1598 consistent with the implicit +0 floor in the U_V()
1599 inside the #if 1. */
1600 dleft = Perl_floor(dleft + 0.5);
1603 dright = Perl_floor(dright + 0.5);
1614 DIE(aTHX_ "Illegal modulus zero");
1616 dans = Perl_fmod(dleft, dright);
1617 if ((left_neg != right_neg) && dans)
1618 dans = dright - dans;
1621 sv_setnv(TARG, dans);
1627 DIE(aTHX_ "Illegal modulus zero");
1630 if ((left_neg != right_neg) && ans)
1633 /* XXX may warn: unary minus operator applied to unsigned type */
1634 /* could change -foo to be (~foo)+1 instead */
1635 if (ans <= ~((UV)IV_MAX)+1)
1636 sv_setiv(TARG, ~ans+1);
1638 sv_setnv(TARG, -(NV)ans);
1641 sv_setuv(TARG, ans);
1653 bool infnan = FALSE;
1655 if (GIMME_V == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1656 /* TODO: think of some way of doing list-repeat overloading ??? */
1661 if (UNLIKELY(PL_op->op_private & OPpREPEAT_DOLIST)) {
1662 /* The parser saw this as a list repeat, and there
1663 are probably several items on the stack. But we're
1664 in scalar/void context, and there's no pp_list to save us
1665 now. So drop the rest of the items -- robin@kitsite.com
1668 if (MARK + 1 < SP) {
1674 ASSUME(MARK + 1 == SP);
1676 MARK[1] = &PL_sv_undef;
1680 tryAMAGICbin_MG(repeat_amg, AMGf_assign);
1686 const UV uv = SvUV_nomg(sv);
1688 count = IV_MAX; /* The best we can do? */
1692 count = SvIV_nomg(sv);
1695 else if (SvNOKp(sv)) {
1696 const NV nv = SvNV_nomg(sv);
1697 infnan = Perl_isinfnan(nv);
1698 if (UNLIKELY(infnan)) {
1702 count = -1; /* An arbitrary negative integer */
1708 count = SvIV_nomg(sv);
1711 Perl_ck_warner(aTHX_ packWARN(WARN_NUMERIC),
1712 "Non-finite repeat count does nothing");
1713 } else if (count < 0) {
1715 Perl_ck_warner(aTHX_ packWARN(WARN_NUMERIC),
1716 "Negative repeat count does nothing");
1719 if (GIMME_V == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1721 const Size_t items = SP - MARK;
1722 const U8 mod = PL_op->op_flags & OPf_MOD;
1727 if ( items > MEM_SIZE_MAX / (UV)count /* max would overflow */
1728 || items > (U32)I32_MAX / sizeof(SV *) /* repeatcpy would overflow */
1730 Perl_croak(aTHX_ "%s","Out of memory during list extend");
1731 max = items * count;
1736 if (mod && SvPADTMP(*SP)) {
1737 *SP = sv_mortalcopy(*SP);
1744 repeatcpy((char*)(MARK + items), (char*)MARK,
1745 items * sizeof(const SV *), count - 1);
1748 else if (count <= 0)
1751 else { /* Note: mark already snarfed by pp_list */
1752 SV * const tmpstr = POPs;
1757 sv_setsv_nomg(TARG, tmpstr);
1758 SvPV_force_nomg(TARG, len);
1759 isutf = DO_UTF8(TARG);
1766 if ( len > (MEM_SIZE_MAX-1) / (UV)count /* max would overflow */
1767 || len > (U32)I32_MAX /* repeatcpy would overflow */
1769 Perl_croak(aTHX_ "%s",
1770 "Out of memory during string extend");
1771 max = (UV)count * len + 1;
1774 repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
1775 SvCUR_set(TARG, SvCUR(TARG) * count);
1777 *SvEND(TARG) = '\0';
1780 (void)SvPOK_only_UTF8(TARG);
1782 (void)SvPOK_only(TARG);
1791 dSP; dATARGET; bool useleft; SV *svl, *svr;
1792 tryAMAGICbin_MG(subtr_amg, AMGf_assign|AMGf_numeric);
1795 useleft = USE_LEFT(svl);
1796 #ifdef PERL_PRESERVE_IVUV
1797 /* See comments in pp_add (in pp_hot.c) about Overflow, and how
1798 "bad things" happen if you rely on signed integers wrapping. */
1799 if (SvIV_please_nomg(svr)) {
1800 /* Unless the left argument is integer in range we are going to have to
1801 use NV maths. Hence only attempt to coerce the right argument if
1802 we know the left is integer. */
1809 a_valid = auvok = 1;
1810 /* left operand is undef, treat as zero. */
1812 /* Left operand is defined, so is it IV? */
1813 if (SvIV_please_nomg(svl)) {
1814 if ((auvok = SvUOK(svl)))
1817 const IV aiv = SvIVX(svl);
1820 auvok = 1; /* Now acting as a sign flag. */
1821 } else { /* 2s complement assumption for IV_MIN */
1822 auv = (aiv == IV_MIN) ? (UV)aiv : (UV)-aiv;
1829 bool result_good = 0;
1832 bool buvok = SvUOK(svr);
1837 const IV biv = SvIVX(svr);
1842 buv = (biv == IV_MIN) ? (UV)biv : (UV)-biv;
1844 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
1845 else "IV" now, independent of how it came in.
1846 if a, b represents positive, A, B negative, a maps to -A etc
1851 all UV maths. negate result if A negative.
1852 subtract if signs same, add if signs differ. */
1854 if (auvok ^ buvok) {
1863 /* Must get smaller */
1868 if (result <= buv) {
1869 /* result really should be -(auv-buv). as its negation
1870 of true value, need to swap our result flag */
1882 if (result <= (UV)IV_MIN)
1883 SETi(result == (UV)IV_MIN
1884 ? IV_MIN : -(IV)result);
1886 /* result valid, but out of range for IV. */
1887 SETn( -(NV)result );
1891 } /* Overflow, drop through to NVs. */
1896 NV value = SvNV_nomg(svr);
1900 /* left operand is undef, treat as zero - value */
1904 SETn( SvNV_nomg(svl) - value );
1909 #define IV_BITS (IVSIZE * 8)
1911 static UV S_uv_shift(UV uv, int shift, bool left)
1917 if (shift >= IV_BITS) {
1920 return left ? uv << shift : uv >> shift;
1923 static IV S_iv_shift(IV iv, int shift, bool left)
1929 if (shift >= IV_BITS) {
1930 return iv < 0 && !left ? -1 : 0;
1932 return left ? iv << shift : iv >> shift;
1935 #define UV_LEFT_SHIFT(uv, shift) S_uv_shift(uv, shift, TRUE)
1936 #define UV_RIGHT_SHIFT(uv, shift) S_uv_shift(uv, shift, FALSE)
1937 #define IV_LEFT_SHIFT(iv, shift) S_iv_shift(iv, shift, TRUE)
1938 #define IV_RIGHT_SHIFT(iv, shift) S_iv_shift(iv, shift, FALSE)
1942 dSP; dATARGET; SV *svl, *svr;
1943 tryAMAGICbin_MG(lshift_amg, AMGf_assign|AMGf_numeric);
1947 const IV shift = SvIV_nomg(svr);
1948 if (PL_op->op_private & HINT_INTEGER) {
1949 SETi(IV_LEFT_SHIFT(SvIV_nomg(svl), shift));
1952 SETu(UV_LEFT_SHIFT(SvUV_nomg(svl), shift));
1960 dSP; dATARGET; SV *svl, *svr;
1961 tryAMAGICbin_MG(rshift_amg, AMGf_assign|AMGf_numeric);
1965 const IV shift = SvIV_nomg(svr);
1966 if (PL_op->op_private & HINT_INTEGER) {
1967 SETi(IV_RIGHT_SHIFT(SvIV_nomg(svl), shift));
1970 SETu(UV_RIGHT_SHIFT(SvUV_nomg(svl), shift));
1981 tryAMAGICbin_MG(lt_amg, AMGf_set|AMGf_numeric);
1985 (SvIOK_notUV(left) && SvIOK_notUV(right))
1986 ? (SvIVX(left) < SvIVX(right))
1987 : (do_ncmp(left, right) == -1)
1997 tryAMAGICbin_MG(gt_amg, AMGf_set|AMGf_numeric);
2001 (SvIOK_notUV(left) && SvIOK_notUV(right))
2002 ? (SvIVX(left) > SvIVX(right))
2003 : (do_ncmp(left, right) == 1)
2013 tryAMAGICbin_MG(le_amg, AMGf_set|AMGf_numeric);
2017 (SvIOK_notUV(left) && SvIOK_notUV(right))
2018 ? (SvIVX(left) <= SvIVX(right))
2019 : (do_ncmp(left, right) <= 0)
2029 tryAMAGICbin_MG(ge_amg, AMGf_set|AMGf_numeric);
2033 (SvIOK_notUV(left) && SvIOK_notUV(right))
2034 ? (SvIVX(left) >= SvIVX(right))
2035 : ( (do_ncmp(left, right) & 2) == 0)
2045 tryAMAGICbin_MG(ne_amg, AMGf_set|AMGf_numeric);
2049 (SvIOK_notUV(left) && SvIOK_notUV(right))
2050 ? (SvIVX(left) != SvIVX(right))
2051 : (do_ncmp(left, right) != 0)
2056 /* compare left and right SVs. Returns:
2060 * 2: left or right was a NaN
2063 Perl_do_ncmp(pTHX_ SV* const left, SV * const right)
2065 PERL_ARGS_ASSERT_DO_NCMP;
2066 #ifdef PERL_PRESERVE_IVUV
2067 /* Fortunately it seems NaN isn't IOK */
2068 if (SvIV_please_nomg(right) && SvIV_please_nomg(left)) {
2070 const IV leftiv = SvIVX(left);
2071 if (!SvUOK(right)) {
2072 /* ## IV <=> IV ## */
2073 const IV rightiv = SvIVX(right);
2074 return (leftiv > rightiv) - (leftiv < rightiv);
2076 /* ## IV <=> UV ## */
2078 /* As (b) is a UV, it's >=0, so it must be < */
2081 const UV rightuv = SvUVX(right);
2082 return ((UV)leftiv > rightuv) - ((UV)leftiv < rightuv);
2087 /* ## UV <=> UV ## */
2088 const UV leftuv = SvUVX(left);
2089 const UV rightuv = SvUVX(right);
2090 return (leftuv > rightuv) - (leftuv < rightuv);
2092 /* ## UV <=> IV ## */
2094 const IV rightiv = SvIVX(right);
2096 /* As (a) is a UV, it's >=0, so it cannot be < */
2099 const UV leftuv = SvUVX(left);
2100 return (leftuv > (UV)rightiv) - (leftuv < (UV)rightiv);
2103 NOT_REACHED; /* NOTREACHED */
2107 NV const rnv = SvNV_nomg(right);
2108 NV const lnv = SvNV_nomg(left);
2110 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2111 if (Perl_isnan(lnv) || Perl_isnan(rnv)) {
2114 return (lnv > rnv) - (lnv < rnv);
2133 tryAMAGICbin_MG(ncmp_amg, AMGf_numeric);
2136 value = do_ncmp(left, right);
2148 /* also used for: pp_sge() pp_sgt() pp_slt() */
2154 int amg_type = sle_amg;
2158 switch (PL_op->op_type) {
2177 tryAMAGICbin_MG(amg_type, AMGf_set);
2181 #ifdef USE_LOCALE_COLLATE
2182 (IN_LC_RUNTIME(LC_COLLATE))
2183 ? sv_cmp_locale_flags(left, right, 0)
2186 sv_cmp_flags(left, right, 0);
2187 SETs(boolSV(cmp * multiplier < rhs));
2195 tryAMAGICbin_MG(seq_amg, AMGf_set);
2198 SETs(boolSV(sv_eq_flags(left, right, 0)));
2206 tryAMAGICbin_MG(sne_amg, AMGf_set);
2209 SETs(boolSV(!sv_eq_flags(left, right, 0)));
2217 tryAMAGICbin_MG(scmp_amg, 0);
2221 #ifdef USE_LOCALE_COLLATE
2222 (IN_LC_RUNTIME(LC_COLLATE))
2223 ? sv_cmp_locale_flags(left, right, 0)
2226 sv_cmp_flags(left, right, 0);
2235 tryAMAGICbin_MG(band_amg, AMGf_assign);
2238 if (SvNIOKp(left) || SvNIOKp(right)) {
2239 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2240 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2241 if (PL_op->op_private & HINT_INTEGER) {
2242 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2246 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2249 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2250 if (right_ro_nonnum) SvNIOK_off(right);
2253 do_vop(PL_op->op_type, TARG, left, right);
2263 tryAMAGICbin_MG(band_amg, AMGf_assign|AMGf_numarg);
2265 dATARGET; dPOPTOPssrl;
2266 if (PL_op->op_private & HINT_INTEGER) {
2267 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2271 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2281 tryAMAGICbin_MG(sband_amg, AMGf_assign);
2283 dATARGET; dPOPTOPssrl;
2284 do_vop(OP_BIT_AND, TARG, left, right);
2289 /* also used for: pp_bit_xor() */
2294 const int op_type = PL_op->op_type;
2296 tryAMAGICbin_MG((op_type == OP_BIT_OR ? bor_amg : bxor_amg), AMGf_assign);
2299 if (SvNIOKp(left) || SvNIOKp(right)) {
2300 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2301 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2302 if (PL_op->op_private & HINT_INTEGER) {
2303 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2304 const IV r = SvIV_nomg(right);
2305 const IV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2309 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2310 const UV r = SvUV_nomg(right);
2311 const UV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2314 if (left_ro_nonnum && left != TARG) SvNIOK_off(left);
2315 if (right_ro_nonnum) SvNIOK_off(right);
2318 do_vop(op_type, TARG, left, right);
2325 /* also used for: pp_nbit_xor() */
2330 const int op_type = PL_op->op_type;
2332 tryAMAGICbin_MG((op_type == OP_NBIT_OR ? bor_amg : bxor_amg),
2333 AMGf_assign|AMGf_numarg);
2335 dATARGET; dPOPTOPssrl;
2336 if (PL_op->op_private & HINT_INTEGER) {
2337 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2338 const IV r = SvIV_nomg(right);
2339 const IV result = op_type == OP_NBIT_OR ? (l | r) : (l ^ r);
2343 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2344 const UV r = SvUV_nomg(right);
2345 const UV result = op_type == OP_NBIT_OR ? (l | r) : (l ^ r);
2352 /* also used for: pp_sbit_xor() */
2357 const int op_type = PL_op->op_type;
2359 tryAMAGICbin_MG((op_type == OP_SBIT_OR ? sbor_amg : sbxor_amg),
2362 dATARGET; dPOPTOPssrl;
2363 do_vop(op_type == OP_SBIT_OR ? OP_BIT_OR : OP_BIT_XOR, TARG, left,
2369 PERL_STATIC_INLINE bool
2370 S_negate_string(pTHX)
2375 SV * const sv = TOPs;
2376 if (!SvPOKp(sv) || SvNIOK(sv) || (!SvPOK(sv) && SvNIOKp(sv)))
2378 s = SvPV_nomg_const(sv, len);
2379 if (isIDFIRST(*s)) {
2380 sv_setpvs(TARG, "-");
2383 else if (*s == '+' || (*s == '-' && !looks_like_number(sv))) {
2384 sv_setsv_nomg(TARG, sv);
2385 *SvPV_force_nomg(TARG, len) = *s == '-' ? '+' : '-';
2395 tryAMAGICun_MG(neg_amg, AMGf_numeric);
2396 if (S_negate_string(aTHX)) return NORMAL;
2398 SV * const sv = TOPs;
2401 /* It's publicly an integer */
2404 if (SvIVX(sv) == IV_MIN) {
2405 /* 2s complement assumption. */
2406 SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) ==
2410 else if (SvUVX(sv) <= IV_MAX) {
2415 else if (SvIVX(sv) != IV_MIN) {
2419 #ifdef PERL_PRESERVE_IVUV
2426 if (SvNIOKp(sv) && (SvNIOK(sv) || !SvPOK(sv)))
2427 SETn(-SvNV_nomg(sv));
2428 else if (SvPOKp(sv) && SvIV_please_nomg(sv))
2429 goto oops_its_an_int;
2431 SETn(-SvNV_nomg(sv));
2439 tryAMAGICun_MG(not_amg, AMGf_set);
2440 *PL_stack_sp = boolSV(!SvTRUE_nomg(*PL_stack_sp));
2445 S_scomplement(pTHX_ SV *targ, SV *sv)
2451 sv_copypv_nomg(TARG, sv);
2452 tmps = (U8*)SvPV_nomg(TARG, len);
2455 /* Calculate exact length, let's not estimate. */
2460 U8 * const send = tmps + len;
2461 U8 * const origtmps = tmps;
2462 const UV utf8flags = UTF8_ALLOW_ANYUV;
2464 while (tmps < send) {
2465 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2467 targlen += UVCHR_SKIP(~c);
2473 /* Now rewind strings and write them. */
2480 Newx(result, targlen + 1, U8);
2482 while (tmps < send) {
2483 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2485 p = uvchr_to_utf8_flags(p, ~c, UNICODE_ALLOW_ANY);
2488 sv_usepvn_flags(TARG, (char*)result, targlen,
2489 SV_HAS_TRAILING_NUL);
2496 Newx(result, nchar + 1, U8);
2498 while (tmps < send) {
2499 const U8 c = (U8)utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2504 sv_usepvn_flags(TARG, (char*)result, nchar, SV_HAS_TRAILING_NUL);
2512 for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
2515 for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
2520 for ( ; anum > 0; anum--, tmps++)
2527 tryAMAGICun_MG(compl_amg, AMGf_numeric);
2531 if (PL_op->op_private & HINT_INTEGER) {
2532 const IV i = ~SvIV_nomg(sv);
2536 const UV u = ~SvUV_nomg(sv);
2541 S_scomplement(aTHX_ TARG, sv);
2551 tryAMAGICun_MG(compl_amg, AMGf_numeric|AMGf_numarg);
2554 if (PL_op->op_private & HINT_INTEGER) {
2555 const IV i = ~SvIV_nomg(sv);
2559 const UV u = ~SvUV_nomg(sv);
2569 tryAMAGICun_MG(scompl_amg, AMGf_numeric);
2572 S_scomplement(aTHX_ TARG, sv);
2578 /* integer versions of some of the above */
2583 tryAMAGICbin_MG(mult_amg, AMGf_assign);
2586 SETi( left * right );
2595 tryAMAGICbin_MG(div_amg, AMGf_assign);
2598 IV value = SvIV_nomg(right);
2600 DIE(aTHX_ "Illegal division by zero");
2601 num = SvIV_nomg(left);
2603 /* avoid FPE_INTOVF on some platforms when num is IV_MIN */
2607 value = num / value;
2613 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS) \
2614 && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
2621 /* This is the vanilla old i_modulo. */
2623 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2627 DIE(aTHX_ "Illegal modulus zero");
2628 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2632 SETi( left % right );
2637 #if defined(__GLIBC__) && IVSIZE == 8 && !defined(PERL_DEBUG_READONLY_OPS) \
2638 && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
2643 /* This is the i_modulo with the workaround for the _moddi3 bug
2644 * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
2645 * See below for pp_i_modulo. */
2647 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2651 DIE(aTHX_ "Illegal modulus zero");
2652 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2656 SETi( left % PERL_ABS(right) );
2663 dVAR; dSP; dATARGET;
2664 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2668 DIE(aTHX_ "Illegal modulus zero");
2669 /* The assumption is to use hereafter the old vanilla version... */
2671 PL_ppaddr[OP_I_MODULO] =
2673 /* .. but if we have glibc, we might have a buggy _moddi3
2674 * (at least glibc 2.2.5 is known to have this bug), in other
2675 * words our integer modulus with negative quad as the second
2676 * argument might be broken. Test for this and re-patch the
2677 * opcode dispatch table if that is the case, remembering to
2678 * also apply the workaround so that this first round works
2679 * right, too. See [perl #9402] for more information. */
2683 /* Cannot do this check with inlined IV constants since
2684 * that seems to work correctly even with the buggy glibc. */
2686 /* Yikes, we have the bug.
2687 * Patch in the workaround version. */
2689 PL_ppaddr[OP_I_MODULO] =
2690 &Perl_pp_i_modulo_1;
2691 /* Make certain we work right this time, too. */
2692 right = PERL_ABS(right);
2695 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2699 SETi( left % right );
2708 tryAMAGICbin_MG(add_amg, AMGf_assign);
2710 dPOPTOPiirl_ul_nomg;
2711 SETi( left + right );
2719 tryAMAGICbin_MG(subtr_amg, AMGf_assign);
2721 dPOPTOPiirl_ul_nomg;
2722 SETi( left - right );
2730 tryAMAGICbin_MG(lt_amg, AMGf_set);
2733 SETs(boolSV(left < right));
2741 tryAMAGICbin_MG(gt_amg, AMGf_set);
2744 SETs(boolSV(left > right));
2752 tryAMAGICbin_MG(le_amg, AMGf_set);
2755 SETs(boolSV(left <= right));
2763 tryAMAGICbin_MG(ge_amg, AMGf_set);
2766 SETs(boolSV(left >= right));
2774 tryAMAGICbin_MG(eq_amg, AMGf_set);
2777 SETs(boolSV(left == right));
2785 tryAMAGICbin_MG(ne_amg, AMGf_set);
2788 SETs(boolSV(left != right));
2796 tryAMAGICbin_MG(ncmp_amg, 0);
2803 else if (left < right)
2815 tryAMAGICun_MG(neg_amg, 0);
2816 if (S_negate_string(aTHX)) return NORMAL;
2818 SV * const sv = TOPs;
2819 IV const i = SvIV_nomg(sv);
2825 /* High falutin' math. */
2830 tryAMAGICbin_MG(atan2_amg, 0);
2833 SETn(Perl_atan2(left, right));
2839 /* also used for: pp_cos() pp_exp() pp_log() pp_sqrt() */
2844 int amg_type = fallback_amg;
2845 const char *neg_report = NULL;
2846 const int op_type = PL_op->op_type;
2849 case OP_SIN: amg_type = sin_amg; break;
2850 case OP_COS: amg_type = cos_amg; break;
2851 case OP_EXP: amg_type = exp_amg; break;
2852 case OP_LOG: amg_type = log_amg; neg_report = "log"; break;
2853 case OP_SQRT: amg_type = sqrt_amg; neg_report = "sqrt"; break;
2856 assert(amg_type != fallback_amg);
2858 tryAMAGICun_MG(amg_type, 0);
2860 SV * const arg = TOPs;
2861 const NV value = SvNV_nomg(arg);
2863 if (neg_report) { /* log or sqrt */
2865 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2866 ! Perl_isnan(value) &&
2868 (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0))) {
2869 SET_NUMERIC_STANDARD();
2870 /* diag_listed_as: Can't take log of %g */
2871 DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
2876 case OP_SIN: result = Perl_sin(value); break;
2877 case OP_COS: result = Perl_cos(value); break;
2878 case OP_EXP: result = Perl_exp(value); break;
2879 case OP_LOG: result = Perl_log(value); break;
2880 case OP_SQRT: result = Perl_sqrt(value); break;
2887 /* Support Configure command-line overrides for rand() functions.
2888 After 5.005, perhaps we should replace this by Configure support
2889 for drand48(), random(), or rand(). For 5.005, though, maintain
2890 compatibility by calling rand() but allow the user to override it.
2891 See INSTALL for details. --Andy Dougherty 15 July 1998
2893 /* Now it's after 5.005, and Configure supports drand48() and random(),
2894 in addition to rand(). So the overrides should not be needed any more.
2895 --Jarkko Hietaniemi 27 September 1998
2900 if (!PL_srand_called) {
2901 (void)seedDrand01((Rand_seed_t)seed());
2902 PL_srand_called = TRUE;
2914 SV * const sv = POPs;
2920 /* 1 of 2 things can be carried through SvNV, SP or TARG, SP was carried */
2921 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2922 if (! Perl_isnan(value) && value == 0.0)
2932 sv_setnv_mg(TARG, value);
2943 if (MAXARG >= 1 && (TOPs || POPs)) {
2950 pv = SvPV(top, len);
2951 flags = grok_number(pv, len, &anum);
2953 if (!(flags & IS_NUMBER_IN_UV)) {
2954 Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
2955 "Integer overflow in srand");
2963 (void)seedDrand01((Rand_seed_t)anum);
2964 PL_srand_called = TRUE;
2968 /* Historically srand always returned true. We can avoid breaking
2970 sv_setpvs(TARG, "0 but true");
2979 tryAMAGICun_MG(int_amg, AMGf_numeric);
2981 SV * const sv = TOPs;
2982 const IV iv = SvIV_nomg(sv);
2983 /* XXX it's arguable that compiler casting to IV might be subtly
2984 different from modf (for numbers inside (IV_MIN,UV_MAX)) in which
2985 else preferring IV has introduced a subtle behaviour change bug. OTOH
2986 relying on floating point to be accurate is a bug. */
2991 else if (SvIOK(sv)) {
2993 SETu(SvUV_nomg(sv));
2998 const NV value = SvNV_nomg(sv);
2999 if (UNLIKELY(Perl_isinfnan(value)))
3001 else if (value >= 0.0) {
3002 if (value < (NV)UV_MAX + 0.5) {
3005 SETn(Perl_floor(value));
3009 if (value > (NV)IV_MIN - 0.5) {
3012 SETn(Perl_ceil(value));
3023 tryAMAGICun_MG(abs_amg, AMGf_numeric);
3025 SV * const sv = TOPs;
3026 /* This will cache the NV value if string isn't actually integer */
3027 const IV iv = SvIV_nomg(sv);
3032 else if (SvIOK(sv)) {
3033 /* IVX is precise */
3035 SETu(SvUV_nomg(sv)); /* force it to be numeric only */
3043 /* 2s complement assumption. Also, not really needed as
3044 IV_MIN and -IV_MIN should both be %100...00 and NV-able */
3050 const NV value = SvNV_nomg(sv);
3061 /* also used for: pp_hex() */
3067 I32 flags = PERL_SCAN_ALLOW_UNDERSCORES;
3071 SV* const sv = TOPs;
3073 tmps = (SvPV_const(sv, len));
3075 /* If Unicode, try to downgrade
3076 * If not possible, croak. */
3077 SV* const tsv = sv_2mortal(newSVsv(sv));
3080 sv_utf8_downgrade(tsv, FALSE);
3081 tmps = SvPV_const(tsv, len);
3083 if (PL_op->op_type == OP_HEX)
3086 while (*tmps && len && isSPACE(*tmps))
3090 if (isALPHA_FOLD_EQ(*tmps, 'x')) {
3092 result_uv = grok_hex (tmps, &len, &flags, &result_nv);
3094 else if (isALPHA_FOLD_EQ(*tmps, 'b'))
3095 result_uv = grok_bin (tmps, &len, &flags, &result_nv);
3097 result_uv = grok_oct (tmps, &len, &flags, &result_nv);
3099 if (flags & PERL_SCAN_GREATER_THAN_UV_MAX) {
3113 SV * const sv = TOPs;
3115 U32 in_bytes = IN_BYTES;
3116 /* simplest case shortcut */
3117 /* turn off SVf_UTF8 in tmp flags if HINT_BYTES on*/
3118 U32 svflags = (SvFLAGS(sv) ^ (in_bytes << 26)) & (SVf_POK|SVs_GMG|SVf_UTF8);
3119 STATIC_ASSERT_STMT(HINT_BYTES == 0x00000008 && SVf_UTF8 == 0x20000000 && (SVf_UTF8 == HINT_BYTES << 26));
3122 if(LIKELY(svflags == SVf_POK))
3124 if(svflags & SVs_GMG)
3127 if (!IN_BYTES) /* reread to avoid using an C auto/register */
3128 sv_setiv(TARG, (IV)sv_len_utf8_nomg(sv));
3132 /* unrolled SvPV_nomg_const(sv,len) */
3137 (void)sv_2pv_flags(sv, &len, 0|SV_CONST_RETURN);
3139 sv_setiv(TARG, (IV)(len));
3142 if (!SvPADTMP(TARG)) {
3143 sv_setsv_nomg(TARG, &PL_sv_undef);
3144 } else { /* TARG is on stack at this point and is overwriten by SETs.
3145 This branch is the odd one out, so put TARG by default on
3146 stack earlier to let local SP go out of liveness sooner */
3153 return NORMAL; /* no putback, SP didn't move in this opcode */
3156 /* Returns false if substring is completely outside original string.
3157 No length is indicated by len_iv = 0 and len_is_uv = 0. len_is_uv must
3158 always be true for an explicit 0.
3161 Perl_translate_substr_offsets( STRLEN curlen, IV pos1_iv,
3162 bool pos1_is_uv, IV len_iv,
3163 bool len_is_uv, STRLEN *posp,
3169 PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS;
3171 if (!pos1_is_uv && pos1_iv < 0 && curlen) {
3172 pos1_is_uv = curlen-1 > ~(UV)pos1_iv;
3175 if ((pos1_is_uv || pos1_iv > 0) && (UV)pos1_iv > curlen)
3178 if (len_iv || len_is_uv) {
3179 if (!len_is_uv && len_iv < 0) {
3180 pos2_iv = curlen + len_iv;
3182 pos2_is_uv = curlen-1 > ~(UV)len_iv;
3185 } else { /* len_iv >= 0 */
3186 if (!pos1_is_uv && pos1_iv < 0) {
3187 pos2_iv = pos1_iv + len_iv;
3188 pos2_is_uv = (UV)len_iv > (UV)IV_MAX;
3190 if ((UV)len_iv > curlen-(UV)pos1_iv)
3193 pos2_iv = pos1_iv+len_iv;
3203 if (!pos2_is_uv && pos2_iv < 0) {
3204 if (!pos1_is_uv && pos1_iv < 0)
3208 else if (!pos1_is_uv && pos1_iv < 0)
3211 if ((UV)pos2_iv < (UV)pos1_iv)
3213 if ((UV)pos2_iv > curlen)
3216 /* pos1_iv and pos2_iv both in 0..curlen, so the cast is safe */
3217 *posp = (STRLEN)( (UV)pos1_iv );
3218 *lenp = (STRLEN)( (UV)pos2_iv - (UV)pos1_iv );
3235 I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3236 const bool rvalue = (GIMME_V != G_VOID);
3239 const char *repl = NULL;
3241 int num_args = PL_op->op_private & 7;
3242 bool repl_need_utf8_upgrade = FALSE;
3246 if(!(repl_sv = POPs)) num_args--;
3248 if ((len_sv = POPs)) {
3249 len_iv = SvIV(len_sv);
3250 len_is_uv = len_iv ? SvIOK_UV(len_sv) : 1;
3255 pos1_iv = SvIV(pos_sv);
3256 pos1_is_uv = SvIOK_UV(pos_sv);
3258 if (PL_op->op_private & OPpSUBSTR_REPL_FIRST) {
3262 if (lvalue && !repl_sv) {
3264 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3265 sv_magic(ret, NULL, PERL_MAGIC_substr, NULL, 0);
3267 LvTARG(ret) = SvREFCNT_inc_simple(sv);
3269 pos1_is_uv || pos1_iv >= 0
3270 ? (STRLEN)(UV)pos1_iv
3271 : (LvFLAGS(ret) |= 1, (STRLEN)(UV)-pos1_iv);
3273 len_is_uv || len_iv > 0
3274 ? (STRLEN)(UV)len_iv
3275 : (LvFLAGS(ret) |= 2, (STRLEN)(UV)-len_iv);
3277 PUSHs(ret); /* avoid SvSETMAGIC here */
3281 repl = SvPV_const(repl_sv, repl_len);
3284 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
3285 "Attempt to use reference as lvalue in substr"
3287 tmps = SvPV_force_nomg(sv, curlen);
3288 if (DO_UTF8(repl_sv) && repl_len) {
3290 sv_utf8_upgrade_nomg(sv);
3294 else if (DO_UTF8(sv))
3295 repl_need_utf8_upgrade = TRUE;
3297 else tmps = SvPV_const(sv, curlen);
3299 utf8_curlen = sv_or_pv_len_utf8(sv, tmps, curlen);
3300 if (utf8_curlen == curlen)
3303 curlen = utf8_curlen;
3309 STRLEN pos, len, byte_len, byte_pos;
3311 if (!translate_substr_offsets(
3312 curlen, pos1_iv, pos1_is_uv, len_iv, len_is_uv, &pos, &len
3316 byte_pos = utf8_curlen
3317 ? sv_or_pv_pos_u2b(sv, tmps, pos, &byte_len) : pos;
3322 SvTAINTED_off(TARG); /* decontaminate */
3323 SvUTF8_off(TARG); /* decontaminate */
3324 sv_setpvn(TARG, tmps, byte_len);
3325 #ifdef USE_LOCALE_COLLATE
3326 sv_unmagic(TARG, PERL_MAGIC_collxfrm);
3333 SV* repl_sv_copy = NULL;
3335 if (repl_need_utf8_upgrade) {
3336 repl_sv_copy = newSVsv(repl_sv);
3337 sv_utf8_upgrade(repl_sv_copy);
3338 repl = SvPV_const(repl_sv_copy, repl_len);
3342 sv_insert_flags(sv, byte_pos, byte_len, repl, repl_len, 0);
3343 SvREFCNT_dec(repl_sv_copy);
3346 if (PL_op->op_private & OPpSUBSTR_REPL_FIRST)
3356 Perl_croak(aTHX_ "substr outside of string");
3357 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
3364 const IV size = POPi;
3365 const IV offset = POPi;
3366 SV * const src = POPs;
3367 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3370 if (lvalue) { /* it's an lvalue! */
3371 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3372 sv_magic(ret, NULL, PERL_MAGIC_vec, NULL, 0);
3374 LvTARG(ret) = SvREFCNT_inc_simple(src);
3375 LvTARGOFF(ret) = offset;
3376 LvTARGLEN(ret) = size;
3380 SvTAINTED_off(TARG); /* decontaminate */
3384 sv_setuv(ret, do_vecget(src, offset, size));
3392 /* also used for: pp_rindex() */
3405 const char *little_p;
3408 const bool is_index = PL_op->op_type == OP_INDEX;
3409 const bool threeargs = MAXARG >= 3 && (TOPs || ((void)POPs,0));
3415 big_p = SvPV_const(big, biglen);
3416 little_p = SvPV_const(little, llen);
3418 big_utf8 = DO_UTF8(big);
3419 little_utf8 = DO_UTF8(little);
3420 if (big_utf8 ^ little_utf8) {
3421 /* One needs to be upgraded. */
3422 if (little_utf8 && !IN_ENCODING) {
3423 /* Well, maybe instead we might be able to downgrade the small
3425 char * const pv = (char*)bytes_from_utf8((U8 *)little_p, &llen,
3428 /* If the large string is ISO-8859-1, and it's not possible to
3429 convert the small string to ISO-8859-1, then there is no
3430 way that it could be found anywhere by index. */
3435 /* At this point, pv is a malloc()ed string. So donate it to temp
3436 to ensure it will get free()d */
3437 little = temp = newSV(0);
3438 sv_usepvn(temp, pv, llen);
3439 little_p = SvPVX(little);
3442 ? newSVpvn(big_p, biglen) : newSVpvn(little_p, llen);
3445 sv_recode_to_utf8(temp, _get_encoding());
3447 sv_utf8_upgrade(temp);
3452 big_p = SvPV_const(big, biglen);
3455 little_p = SvPV_const(little, llen);
3459 if (SvGAMAGIC(big)) {
3460 /* Life just becomes a lot easier if I use a temporary here.
3461 Otherwise I need to avoid calls to sv_pos_u2b(), which (dangerously)
3462 will trigger magic and overloading again, as will fbm_instr()
3464 big = newSVpvn_flags(big_p, biglen,
3465 SVs_TEMP | (big_utf8 ? SVf_UTF8 : 0));
3468 if (SvGAMAGIC(little) || (is_index && !SvOK(little))) {
3469 /* index && SvOK() is a hack. fbm_instr() calls SvPV_const, which will
3470 warn on undef, and we've already triggered a warning with the
3471 SvPV_const some lines above. We can't remove that, as we need to
3472 call some SvPV to trigger overloading early and find out if the
3474 This is all getting too messy. The API isn't quite clean enough,
3475 because data access has side effects.
3477 little = newSVpvn_flags(little_p, llen,
3478 SVs_TEMP | (little_utf8 ? SVf_UTF8 : 0));
3479 little_p = SvPVX(little);
3483 offset = is_index ? 0 : biglen;
3485 if (big_utf8 && offset > 0)
3486 offset = sv_pos_u2b_flags(big, offset, 0, SV_CONST_RETURN);
3492 else if (offset > (SSize_t)biglen)
3494 if (!(little_p = is_index
3495 ? fbm_instr((unsigned char*)big_p + offset,
3496 (unsigned char*)big_p + biglen, little, 0)
3497 : rninstr(big_p, big_p + offset,
3498 little_p, little_p + llen)))
3501 retval = little_p - big_p;
3502 if (retval > 1 && big_utf8)
3503 retval = sv_pos_b2u_flags(big, retval, SV_CONST_RETURN);
3513 dSP; dMARK; dORIGMARK; dTARGET;
3514 SvTAINTED_off(TARG);
3515 do_sprintf(TARG, SP-MARK, MARK+1);
3516 TAINT_IF(SvTAINTED(TARG));
3528 const U8 *s = (U8*)SvPV_const(argsv, len);
3530 if (IN_ENCODING && SvPOK(argsv) && !DO_UTF8(argsv)) {
3531 SV * const tmpsv = sv_2mortal(newSVsv(argsv));
3532 s = (U8*)sv_recode_to_utf8(tmpsv, _get_encoding());
3533 len = UTF8SKIP(s); /* Should be well-formed; so this is its length */
3538 ? utf8n_to_uvchr(s, len, 0, UTF8_ALLOW_ANYUV)
3552 if (UNLIKELY(SvAMAGIC(top)))
3554 if (UNLIKELY(isinfnansv(top)))
3555 Perl_croak(aTHX_ "Cannot chr %"NVgf, SvNV(top));
3557 if (!IN_BYTES /* under bytes, chr(-1) eq chr(0xff), etc. */
3558 && ((SvIOKp(top) && !SvIsUV(top) && SvIV_nomg(top) < 0)
3560 ((SvNOKp(top) || (SvOK(top) && !SvIsUV(top)))
3561 && SvNV_nomg(top) < 0.0)))
3563 if (ckWARN(WARN_UTF8)) {
3564 if (SvGMAGICAL(top)) {
3565 SV *top2 = sv_newmortal();
3566 sv_setsv_nomg(top2, top);
3569 Perl_warner(aTHX_ packWARN(WARN_UTF8),
3570 "Invalid negative number (%"SVf") in chr", SVfARG(top));
3572 value = UNICODE_REPLACEMENT;
3574 value = SvUV_nomg(top);
3578 SvUPGRADE(TARG,SVt_PV);
3580 if (value > 255 && !IN_BYTES) {
3581 SvGROW(TARG, (STRLEN)UVCHR_SKIP(value)+1);
3582 tmps = (char*)uvchr_to_utf8_flags((U8*)SvPVX(TARG), value, 0);
3583 SvCUR_set(TARG, tmps - SvPVX_const(TARG));
3585 (void)SvPOK_only(TARG);
3594 *tmps++ = (char)value;
3596 (void)SvPOK_only(TARG);
3598 if (IN_ENCODING && !IN_BYTES) {
3599 sv_recode_to_utf8(TARG, _get_encoding());
3601 if (SvCUR(TARG) == 0
3602 || ! is_utf8_string((U8*)tmps, SvCUR(TARG))
3603 || UTF8_IS_REPLACEMENT((U8*) tmps, (U8*) tmps + SvCUR(TARG)))
3608 *tmps++ = (char)value;
3624 const char *tmps = SvPV_const(left, len);
3626 if (DO_UTF8(left)) {
3627 /* If Unicode, try to downgrade.
3628 * If not possible, croak.
3629 * Yes, we made this up. */
3630 SV* const tsv = newSVpvn_flags(tmps, len, SVf_UTF8|SVs_TEMP);
3632 sv_utf8_downgrade(tsv, FALSE);
3633 tmps = SvPV_const(tsv, len);
3635 # ifdef USE_ITHREADS
3637 if (!PL_reentrant_buffer->_crypt_struct_buffer) {
3638 /* This should be threadsafe because in ithreads there is only
3639 * one thread per interpreter. If this would not be true,
3640 * we would need a mutex to protect this malloc. */
3641 PL_reentrant_buffer->_crypt_struct_buffer =
3642 (struct crypt_data *)safemalloc(sizeof(struct crypt_data));
3643 #if defined(__GLIBC__) || defined(__EMX__)
3644 if (PL_reentrant_buffer->_crypt_struct_buffer) {
3645 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
3646 /* work around glibc-2.2.5 bug */
3647 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
3651 # endif /* HAS_CRYPT_R */
3652 # endif /* USE_ITHREADS */
3654 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
3656 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
3663 "The crypt() function is unimplemented due to excessive paranoia.");
3667 /* Generally UTF-8 and UTF-EBCDIC are indistinguishable at this level. So
3668 * most comments below say UTF-8, when in fact they mean UTF-EBCDIC as well */
3671 /* also used for: pp_lcfirst() */
3675 /* Actually is both lcfirst() and ucfirst(). Only the first character
3676 * changes. This means that possibly we can change in-place, ie., just
3677 * take the source and change that one character and store it back, but not
3678 * if read-only etc, or if the length changes */
3682 STRLEN slen; /* slen is the byte length of the whole SV. */
3685 bool inplace; /* ? Convert first char only, in-place */
3686 bool doing_utf8 = FALSE; /* ? using utf8 */
3687 bool convert_source_to_utf8 = FALSE; /* ? need to convert */
3688 const int op_type = PL_op->op_type;
3691 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3692 STRLEN ulen; /* ulen is the byte length of the original Unicode character
3693 * stored as UTF-8 at s. */
3694 STRLEN tculen; /* tculen is the byte length of the freshly titlecased (or
3695 * lowercased) character stored in tmpbuf. May be either
3696 * UTF-8 or not, but in either case is the number of bytes */
3698 s = (const U8*)SvPV_const(source, slen);
3700 /* We may be able to get away with changing only the first character, in
3701 * place, but not if read-only, etc. Later we may discover more reasons to
3702 * not convert in-place. */
3703 inplace = !SvREADONLY(source)
3704 && ( SvPADTMP(source)
3705 || ( SvTEMP(source) && !SvSMAGICAL(source)
3706 && SvREFCNT(source) == 1));
3708 /* First calculate what the changed first character should be. This affects
3709 * whether we can just swap it out, leaving the rest of the string unchanged,
3710 * or even if have to convert the dest to UTF-8 when the source isn't */
3712 if (! slen) { /* If empty */
3713 need = 1; /* still need a trailing NUL */
3716 else if (DO_UTF8(source)) { /* Is the source utf8? */
3719 if (op_type == OP_UCFIRST) {
3720 #ifdef USE_LOCALE_CTYPE
3721 _to_utf8_title_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3723 _to_utf8_title_flags(s, tmpbuf, &tculen, 0);
3727 #ifdef USE_LOCALE_CTYPE
3728 _to_utf8_lower_flags(s, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
3730 _to_utf8_lower_flags(s, tmpbuf, &tculen, 0);
3734 /* we can't do in-place if the length changes. */
3735 if (ulen != tculen) inplace = FALSE;
3736 need = slen + 1 - ulen + tculen;
3738 else { /* Non-zero length, non-UTF-8, Need to consider locale and if
3739 * latin1 is treated as caseless. Note that a locale takes
3741 ulen = 1; /* Original character is 1 byte */
3742 tculen = 1; /* Most characters will require one byte, but this will
3743 * need to be overridden for the tricky ones */
3746 if (op_type == OP_LCFIRST) {
3748 /* lower case the first letter: no trickiness for any character */
3749 #ifdef USE_LOCALE_CTYPE
3750 if (IN_LC_RUNTIME(LC_CTYPE)) {
3751 _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
3752 *tmpbuf = toLOWER_LC(*s);
3757 *tmpbuf = (IN_UNI_8_BIT)
3758 ? toLOWER_LATIN1(*s)
3762 #ifdef USE_LOCALE_CTYPE
3764 else if (IN_LC_RUNTIME(LC_CTYPE)) {
3765 if (IN_UTF8_CTYPE_LOCALE) {
3769 _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
3770 *tmpbuf = (U8) toUPPER_LC(*s); /* This would be a bug if any
3771 locales have upper and title case
3775 else if (! IN_UNI_8_BIT) {
3776 *tmpbuf = toUPPER(*s); /* Returns caseless for non-ascii, or
3777 * on EBCDIC machines whatever the
3778 * native function does */
3781 /* Here, is ucfirst non-UTF-8, not in locale (unless that locale is
3782 * UTF-8, which we treat as not in locale), and cased latin1 */
3784 #ifdef USE_LOCALE_CTYPE
3788 title_ord = _to_upper_title_latin1(*s, tmpbuf, &tculen, 's');
3790 assert(tculen == 2);
3792 /* If the result is an upper Latin1-range character, it can
3793 * still be represented in one byte, which is its ordinal */
3794 if (UTF8_IS_DOWNGRADEABLE_START(*tmpbuf)) {
3795 *tmpbuf = (U8) title_ord;
3799 /* Otherwise it became more than one ASCII character (in
3800 * the case of LATIN_SMALL_LETTER_SHARP_S) or changed to
3801 * beyond Latin1, so the number of bytes changed, so can't
3802 * replace just the first character in place. */
3805 /* If the result won't fit in a byte, the entire result
3806 * will have to be in UTF-8. Assume worst case sizing in
3807 * conversion. (all latin1 characters occupy at most two
3809 if (title_ord > 255) {
3811 convert_source_to_utf8 = TRUE;
3812 need = slen * 2 + 1;
3814 /* The (converted) UTF-8 and UTF-EBCDIC lengths of all
3815 * (both) characters whose title case is above 255 is
3819 else { /* LATIN_SMALL_LETTER_SHARP_S expands by 1 byte */
3820 need = slen + 1 + 1;
3824 } /* End of use Unicode (Latin1) semantics */
3825 } /* End of changing the case of the first character */
3827 /* Here, have the first character's changed case stored in tmpbuf. Ready to
3828 * generate the result */
3831 /* We can convert in place. This means we change just the first
3832 * character without disturbing the rest; no need to grow */
3834 s = d = (U8*)SvPV_force_nomg(source, slen);
3840 /* Here, we can't convert in place; we earlier calculated how much
3841 * space we will need, so grow to accommodate that */
3842 SvUPGRADE(dest, SVt_PV);
3843 d = (U8*)SvGROW(dest, need);
3844 (void)SvPOK_only(dest);
3851 if (! convert_source_to_utf8) {
3853 /* Here both source and dest are in UTF-8, but have to create
3854 * the entire output. We initialize the result to be the
3855 * title/lower cased first character, and then append the rest
3857 sv_setpvn(dest, (char*)tmpbuf, tculen);
3859 sv_catpvn(dest, (char*)(s + ulen), slen - ulen);
3863 const U8 *const send = s + slen;
3865 /* Here the dest needs to be in UTF-8, but the source isn't,
3866 * except we earlier UTF-8'd the first character of the source
3867 * into tmpbuf. First put that into dest, and then append the
3868 * rest of the source, converting it to UTF-8 as we go. */
3870 /* Assert tculen is 2 here because the only two characters that
3871 * get to this part of the code have 2-byte UTF-8 equivalents */
3873 *d++ = *(tmpbuf + 1);
3874 s++; /* We have just processed the 1st char */
3876 for (; s < send; s++) {
3877 d = uvchr_to_utf8(d, *s);
3880 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3884 else { /* in-place UTF-8. Just overwrite the first character */
3885 Copy(tmpbuf, d, tculen, U8);
3886 SvCUR_set(dest, need - 1);
3890 else { /* Neither source nor dest are in or need to be UTF-8 */
3892 if (inplace) { /* in-place, only need to change the 1st char */
3895 else { /* Not in-place */
3897 /* Copy the case-changed character(s) from tmpbuf */
3898 Copy(tmpbuf, d, tculen, U8);
3899 d += tculen - 1; /* Code below expects d to point to final
3900 * character stored */
3903 else { /* empty source */
3904 /* See bug #39028: Don't taint if empty */
3908 /* In a "use bytes" we don't treat the source as UTF-8, but, still want
3909 * the destination to retain that flag */
3910 if (SvUTF8(source) && ! IN_BYTES)
3913 if (!inplace) { /* Finish the rest of the string, unchanged */
3914 /* This will copy the trailing NUL */
3915 Copy(s + 1, d + 1, slen, U8);
3916 SvCUR_set(dest, need - 1);
3919 #ifdef USE_LOCALE_CTYPE
3920 if (IN_LC_RUNTIME(LC_CTYPE)) {
3925 if (dest != source && SvTAINTED(source))
3931 /* There's so much setup/teardown code common between uc and lc, I wonder if
3932 it would be worth merging the two, and just having a switch outside each
3933 of the three tight loops. There is less and less commonality though */
3946 if ((SvPADTMP(source)
3948 (SvTEMP(source) && !SvSMAGICAL(source) && SvREFCNT(source) == 1))
3949 && !SvREADONLY(source) && SvPOK(source)
3952 #ifdef USE_LOCALE_CTYPE
3953 (IN_LC_RUNTIME(LC_CTYPE))
3954 ? ! IN_UTF8_CTYPE_LOCALE
3960 /* We can convert in place. The reason we can't if in UNI_8_BIT is to
3961 * make the loop tight, so we overwrite the source with the dest before
3962 * looking at it, and we need to look at the original source
3963 * afterwards. There would also need to be code added to handle
3964 * switching to not in-place in midstream if we run into characters
3965 * that change the length. Since being in locale overrides UNI_8_BIT,
3966 * that latter becomes irrelevant in the above test; instead for
3967 * locale, the size can't normally change, except if the locale is a
3970 s = d = (U8*)SvPV_force_nomg(source, len);
3977 s = (const U8*)SvPV_nomg_const(source, len);
3980 SvUPGRADE(dest, SVt_PV);
3981 d = (U8*)SvGROW(dest, min);
3982 (void)SvPOK_only(dest);
3987 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3988 to check DO_UTF8 again here. */
3990 if (DO_UTF8(source)) {
3991 const U8 *const send = s + len;
3992 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3994 /* All occurrences of these are to be moved to follow any other marks.
3995 * This is context-dependent. We may not be passed enough context to
3996 * move the iota subscript beyond all of them, but we do the best we can
3997 * with what we're given. The result is always better than if we
3998 * hadn't done this. And, the problem would only arise if we are
3999 * passed a character without all its combining marks, which would be
4000 * the caller's mistake. The information this is based on comes from a
4001 * comment in Unicode SpecialCasing.txt, (and the Standard's text
4002 * itself) and so can't be checked properly to see if it ever gets
4003 * revised. But the likelihood of it changing is remote */
4004 bool in_iota_subscript = FALSE;
4010 if (in_iota_subscript && ! _is_utf8_mark(s)) {
4012 /* A non-mark. Time to output the iota subscript */
4013 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
4014 d += capital_iota_len;
4015 in_iota_subscript = FALSE;
4018 /* Then handle the current character. Get the changed case value
4019 * and copy it to the output buffer */
4022 #ifdef USE_LOCALE_CTYPE
4023 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
4025 uv = _to_utf8_upper_flags(s, tmpbuf, &ulen, 0);
4027 #define GREEK_CAPITAL_LETTER_IOTA 0x0399
4028 #define COMBINING_GREEK_YPOGEGRAMMENI 0x0345
4029 if (uv == GREEK_CAPITAL_LETTER_IOTA
4030 && utf8_to_uvchr_buf(s, send, 0) == COMBINING_GREEK_YPOGEGRAMMENI)
4032 in_iota_subscript = TRUE;
4035 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4036 /* If the eventually required minimum size outgrows the
4037 * available space, we need to grow. */
4038 const UV o = d - (U8*)SvPVX_const(dest);
4040 /* If someone uppercases one million U+03B0s we SvGROW()
4041 * one million times. Or we could try guessing how much to
4042 * allocate without allocating too much. Such is life.
4043 * See corresponding comment in lc code for another option
4046 d = (U8*)SvPVX(dest) + o;
4048 Copy(tmpbuf, d, ulen, U8);
4053 if (in_iota_subscript) {
4054 Copy(GREEK_CAPITAL_LETTER_IOTA_UTF8, d, capital_iota_len, U8);
4055 d += capital_iota_len;
4060 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4062 else { /* Not UTF-8 */
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 if (IN_UTF8_CTYPE_LOCALE) {
4074 _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
4075 for (; s < send; d++, s++)
4076 *d = (U8) toUPPER_LC(*s);
4080 if (! IN_UNI_8_BIT) {
4081 for (; s < send; d++, s++) {
4086 #ifdef USE_LOCALE_CTYPE
4089 for (; s < send; d++, s++) {
4090 *d = toUPPER_LATIN1_MOD(*s);
4091 if (LIKELY(*d != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS)) {
4095 /* The mainstream case is the tight loop above. To avoid
4096 * extra tests in that, all three characters that require
4097 * special handling are mapped by the MOD to the one tested
4099 * Use the source to distinguish between the three cases */
4101 #if UNICODE_MAJOR_VERSION > 2 \
4102 || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1 \
4103 && UNICODE_DOT_DOT_VERSION >= 8)
4104 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
4106 /* uc() of this requires 2 characters, but they are
4107 * ASCII. If not enough room, grow the string */
4108 if (SvLEN(dest) < ++min) {
4109 const UV o = d - (U8*)SvPVX_const(dest);
4111 d = (U8*)SvPVX(dest) + o;
4113 *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
4114 continue; /* Back to the tight loop; still in ASCII */
4118 /* The other two special handling characters have their
4119 * upper cases outside the latin1 range, hence need to be
4120 * in UTF-8, so the whole result needs to be in UTF-8. So,
4121 * here we are somewhere in the middle of processing a
4122 * non-UTF-8 string, and realize that we will have to convert
4123 * the whole thing to UTF-8. What to do? There are
4124 * several possibilities. The simplest to code is to
4125 * convert what we have so far, set a flag, and continue on
4126 * in the loop. The flag would be tested each time through
4127 * the loop, and if set, the next character would be
4128 * converted to UTF-8 and stored. But, I (khw) didn't want
4129 * to slow down the mainstream case at all for this fairly
4130 * rare case, so I didn't want to add a test that didn't
4131 * absolutely have to be there in the loop, besides the
4132 * possibility that it would get too complicated for
4133 * optimizers to deal with. Another possibility is to just
4134 * give up, convert the source to UTF-8, and restart the
4135 * function that way. Another possibility is to convert
4136 * both what has already been processed and what is yet to
4137 * come separately to UTF-8, then jump into the loop that
4138 * handles UTF-8. But the most efficient time-wise of the
4139 * ones I could think of is what follows, and turned out to
4140 * not require much extra code. */
4142 /* Convert what we have so far into UTF-8, telling the
4143 * function that we know it should be converted, and to
4144 * allow extra space for what we haven't processed yet.
4145 * Assume the worst case space requirements for converting
4146 * what we haven't processed so far: that it will require
4147 * two bytes for each remaining source character, plus the
4148 * NUL at the end. This may cause the string pointer to
4149 * move, so re-find it. */
4151 len = d - (U8*)SvPVX_const(dest);
4152 SvCUR_set(dest, len);
4153 len = sv_utf8_upgrade_flags_grow(dest,
4154 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
4156 d = (U8*)SvPVX(dest) + len;
4158 /* Now process the remainder of the source, converting to
4159 * upper and UTF-8. If a resulting byte is invariant in
4160 * UTF-8, output it as-is, otherwise convert to UTF-8 and
4161 * append it to the output. */
4162 for (; s < send; s++) {
4163 (void) _to_upper_title_latin1(*s, d, &len, 'S');
4167 /* Here have processed the whole source; no need to continue
4168 * with the outer loop. Each character has been converted
4169 * to upper case and converted to UTF-8 */
4172 } /* End of processing all latin1-style chars */
4173 } /* End of processing all chars */
4174 } /* End of source is not empty */
4176 if (source != dest) {
4177 *d = '\0'; /* Here d points to 1 after last char, add NUL */
4178 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4180 } /* End of isn't utf8 */
4181 #ifdef USE_LOCALE_CTYPE
4182 if (IN_LC_RUNTIME(LC_CTYPE)) {
4187 if (dest != source && SvTAINTED(source))
4205 if ( ( SvPADTMP(source)
4206 || ( SvTEMP(source) && !SvSMAGICAL(source)
4207 && SvREFCNT(source) == 1 )
4209 && !SvREADONLY(source) && SvPOK(source)
4210 && !DO_UTF8(source)) {
4212 /* We can convert in place, as lowercasing anything in the latin1 range
4213 * (or else DO_UTF8 would have been on) doesn't lengthen it */
4215 s = d = (U8*)SvPV_force_nomg(source, len);
4222 s = (const U8*)SvPV_nomg_const(source, len);
4225 SvUPGRADE(dest, SVt_PV);
4226 d = (U8*)SvGROW(dest, min);
4227 (void)SvPOK_only(dest);
4232 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
4233 to check DO_UTF8 again here. */
4235 if (DO_UTF8(source)) {
4236 const U8 *const send = s + len;
4237 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
4240 const STRLEN u = UTF8SKIP(s);
4243 #ifdef USE_LOCALE_CTYPE
4244 _to_utf8_lower_flags(s, tmpbuf, &ulen, IN_LC_RUNTIME(LC_CTYPE));
4246 _to_utf8_lower_flags(s, tmpbuf, &ulen, 0);
4249 /* Here is where we would do context-sensitive actions. See the
4250 * commit message for 86510fb15 for why there isn't any */
4252 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4254 /* If the eventually required minimum size outgrows the
4255 * available space, we need to grow. */
4256 const UV o = d - (U8*)SvPVX_const(dest);
4258 /* If someone lowercases one million U+0130s we SvGROW() one
4259 * million times. Or we could try guessing how much to
4260 * allocate without allocating too much. Such is life.
4261 * Another option would be to grow an extra byte or two more
4262 * each time we need to grow, which would cut down the million
4263 * to 500K, with little waste */
4265 d = (U8*)SvPVX(dest) + o;
4268 /* Copy the newly lowercased letter to the output buffer we're
4270 Copy(tmpbuf, d, ulen, U8);
4273 } /* End of looping through the source string */
4276 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4277 } else { /* Not utf8 */
4279 const U8 *const send = s + len;
4281 /* Use locale casing if in locale; regular style if not treating
4282 * latin1 as having case; otherwise the latin1 casing. Do the
4283 * whole thing in a tight loop, for speed, */
4284 #ifdef USE_LOCALE_CTYPE
4285 if (IN_LC_RUNTIME(LC_CTYPE)) {
4286 _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
4287 for (; s < send; d++, s++)
4288 *d = toLOWER_LC(*s);
4292 if (! IN_UNI_8_BIT) {
4293 for (; s < send; d++, s++) {
4298 for (; s < send; d++, s++) {
4299 *d = toLOWER_LATIN1(*s);
4303 if (source != dest) {
4305 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4308 #ifdef USE_LOCALE_CTYPE
4309 if (IN_LC_RUNTIME(LC_CTYPE)) {
4314 if (dest != source && SvTAINTED(source))
4323 SV * const sv = TOPs;
4325 const char *s = SvPV_const(sv,len);
4327 SvUTF8_off(TARG); /* decontaminate */
4330 SvUPGRADE(TARG, SVt_PV);
4331 SvGROW(TARG, (len * 2) + 1);
4335 STRLEN ulen = UTF8SKIP(s);
4336 bool to_quote = FALSE;
4338 if (UTF8_IS_INVARIANT(*s)) {
4339 if (_isQUOTEMETA(*s)) {
4343 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
4345 #ifdef USE_LOCALE_CTYPE
4346 /* In locale, we quote all non-ASCII Latin1 chars.
4347 * Otherwise use the quoting rules */
4349 IN_LC_RUNTIME(LC_CTYPE)
4352 _isQUOTEMETA(EIGHT_BIT_UTF8_TO_NATIVE(*s, *(s + 1))))
4357 else if (is_QUOTEMETA_high(s)) {
4372 else if (IN_UNI_8_BIT) {
4374 if (_isQUOTEMETA(*s))
4380 /* For non UNI_8_BIT (and hence in locale) just quote all \W
4381 * including everything above ASCII */
4383 if (!isWORDCHAR_A(*s))
4389 SvCUR_set(TARG, d - SvPVX_const(TARG));
4390 (void)SvPOK_only_UTF8(TARG);
4393 sv_setpvn(TARG, s, len);
4409 U8 tmpbuf[UTF8_MAXBYTES_CASE + 1];
4410 #if UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */ \
4411 || (UNICODE_MAJOR_VERSION == 3 && ( UNICODE_DOT_VERSION > 0) \
4412 || UNICODE_DOT_DOT_VERSION > 0)
4413 const bool full_folding = TRUE; /* This variable is here so we can easily
4414 move to more generality later */
4416 const bool full_folding = FALSE;
4418 const U8 flags = ( full_folding ? FOLD_FLAGS_FULL : 0 )
4419 #ifdef USE_LOCALE_CTYPE
4420 | ( IN_LC_RUNTIME(LC_CTYPE) ? FOLD_FLAGS_LOCALE : 0 )
4424 /* This is a facsimile of pp_lc, but with a thousand bugs thanks to me.
4425 * You are welcome(?) -Hugmeir
4433 s = (const U8*)SvPV_nomg_const(source, len);
4435 if (ckWARN(WARN_UNINITIALIZED))
4436 report_uninit(source);
4443 SvUPGRADE(dest, SVt_PV);
4444 d = (U8*)SvGROW(dest, min);
4445 (void)SvPOK_only(dest);
4450 if (DO_UTF8(source)) { /* UTF-8 flagged string. */
4452 const STRLEN u = UTF8SKIP(s);
4455 _to_utf8_fold_flags(s, tmpbuf, &ulen, flags);
4457 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4458 const UV o = d - (U8*)SvPVX_const(dest);
4460 d = (U8*)SvPVX(dest) + o;
4463 Copy(tmpbuf, d, ulen, U8);
4468 } /* Unflagged string */
4470 #ifdef USE_LOCALE_CTYPE
4471 if ( IN_LC_RUNTIME(LC_CTYPE) ) { /* Under locale */
4472 if (IN_UTF8_CTYPE_LOCALE) {
4473 goto do_uni_folding;
4475 _CHECK_AND_WARN_PROBLEMATIC_LOCALE;
4476 for (; s < send; d++, s++)
4477 *d = (U8) toFOLD_LC(*s);
4481 if ( !IN_UNI_8_BIT ) { /* Under nothing, or bytes */
4482 for (; s < send; d++, s++)
4486 #ifdef USE_LOCALE_CTYPE
4489 /* For ASCII and the Latin-1 range, there's only two troublesome
4490 * folds, \x{DF} (\N{LATIN SMALL LETTER SHARP S}), which under full
4491 * casefolding becomes 'ss'; and \x{B5} (\N{MICRO SIGN}), which
4492 * under any fold becomes \x{3BC} (\N{GREEK SMALL LETTER MU}) --
4493 * For the rest, the casefold is their lowercase. */
4494 for (; s < send; d++, s++) {
4495 if (*s == MICRO_SIGN) {
4496 /* \N{MICRO SIGN}'s casefold is \N{GREEK SMALL LETTER MU},
4497 * which is outside of the latin-1 range. There's a couple
4498 * of ways to deal with this -- khw discusses them in
4499 * pp_lc/uc, so go there :) What we do here is upgrade what
4500 * we had already casefolded, then enter an inner loop that
4501 * appends the rest of the characters as UTF-8. */
4502 len = d - (U8*)SvPVX_const(dest);
4503 SvCUR_set(dest, len);
4504 len = sv_utf8_upgrade_flags_grow(dest,
4505 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
4506 /* The max expansion for latin1
4507 * chars is 1 byte becomes 2 */
4509 d = (U8*)SvPVX(dest) + len;
4511 Copy(GREEK_SMALL_LETTER_MU_UTF8, d, small_mu_len, U8);
4514 for (; s < send; s++) {
4516 UV fc = _to_uni_fold_flags(*s, tmpbuf, &ulen, flags);
4517 if UVCHR_IS_INVARIANT(fc) {
4519 && *s == LATIN_SMALL_LETTER_SHARP_S)
4528 Copy(tmpbuf, d, ulen, U8);
4534 else if (full_folding && *s == LATIN_SMALL_LETTER_SHARP_S) {
4535 /* Under full casefolding, LATIN SMALL LETTER SHARP S
4536 * becomes "ss", which may require growing the SV. */
4537 if (SvLEN(dest) < ++min) {
4538 const UV o = d - (U8*)SvPVX_const(dest);
4540 d = (U8*)SvPVX(dest) + o;
4545 else { /* If it's not one of those two, the fold is their lower
4547 *d = toLOWER_LATIN1(*s);
4553 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4555 #ifdef USE_LOCALE_CTYPE
4556 if (IN_LC_RUNTIME(LC_CTYPE)) {
4561 if (SvTAINTED(source))
4571 dSP; dMARK; dORIGMARK;
4572 AV *const av = MUTABLE_AV(POPs);
4573 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4575 if (SvTYPE(av) == SVt_PVAV) {
4576 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4577 bool can_preserve = FALSE;
4583 can_preserve = SvCANEXISTDELETE(av);
4586 if (lval && localizing) {
4589 for (svp = MARK + 1; svp <= SP; svp++) {
4590 const SSize_t elem = SvIV(*svp);
4594 if (max > AvMAX(av))
4598 while (++MARK <= SP) {
4600 SSize_t elem = SvIV(*MARK);
4601 bool preeminent = TRUE;
4603 if (localizing && can_preserve) {
4604 /* If we can determine whether the element exist,
4605 * Try to preserve the existenceness of a tied array
4606 * element by using EXISTS and DELETE if possible.
4607 * Fallback to FETCH and STORE otherwise. */
4608 preeminent = av_exists(av, elem);
4611 svp = av_fetch(av, elem, lval);
4614 DIE(aTHX_ PL_no_aelem, elem);
4617 save_aelem(av, elem, svp);
4619 SAVEADELETE(av, elem);
4622 *MARK = svp ? *svp : &PL_sv_undef;
4625 if (GIMME_V != G_ARRAY) {
4627 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4636 AV *const av = MUTABLE_AV(POPs);
4637 I32 lval = (PL_op->op_flags & OPf_MOD);
4638 SSize_t items = SP - MARK;
4640 if (PL_op->op_private & OPpMAYBE_LVSUB) {
4641 const I32 flags = is_lvalue_sub();
4643 if (!(flags & OPpENTERSUB_INARGS))
4644 /* diag_listed_as: Can't modify %s in %s */
4645 Perl_croak(aTHX_ "Can't modify index/value array slice in list assignment");
4652 *(MARK+items*2-1) = *(MARK+items);
4658 while (++MARK <= SP) {
4661 svp = av_fetch(av, SvIV(*MARK), lval);
4663 if (!svp || !*svp || *svp == &PL_sv_undef) {
4664 DIE(aTHX_ PL_no_aelem, SvIV(*MARK));
4666 *MARK = sv_mortalcopy(*MARK);
4668 *++MARK = svp ? *svp : &PL_sv_undef;
4670 if (GIMME_V != G_ARRAY) {
4671 MARK = SP - items*2;
4672 *++MARK = items > 0 ? *SP : &PL_sv_undef;
4682 AV *array = MUTABLE_AV(POPs);
4683 const I32 gimme = GIMME_V;
4684 IV *iterp = Perl_av_iter_p(aTHX_ array);
4685 const IV current = (*iterp)++;
4687 if (current > av_tindex(array)) {
4689 if (gimme == G_SCALAR)
4697 if (gimme == G_ARRAY) {
4698 SV **const element = av_fetch(array, current, 0);
4699 PUSHs(element ? *element : &PL_sv_undef);
4704 /* also used for: pp_avalues()*/
4708 AV *array = MUTABLE_AV(POPs);
4709 const I32 gimme = GIMME_V;
4711 *Perl_av_iter_p(aTHX_ array) = 0;
4713 if (gimme == G_SCALAR) {
4715 PUSHi(av_tindex(array) + 1);
4717 else if (gimme == G_ARRAY) {
4718 IV n = Perl_av_len(aTHX_ array);
4723 if (PL_op->op_type == OP_AKEYS) {
4724 for (i = 0; i <= n; i++) {
4729 for (i = 0; i <= n; i++) {
4730 SV *const *const elem = Perl_av_fetch(aTHX_ array, i, 0);
4731 PUSHs(elem ? *elem : &PL_sv_undef);
4738 /* Associative arrays. */
4743 HV * hash = MUTABLE_HV(POPs);
4745 const I32 gimme = GIMME_V;
4747 entry = hv_iternext(hash);
4751 SV* const sv = hv_iterkeysv(entry);
4753 if (gimme == G_ARRAY) {
4755 val = hv_iterval(hash, entry);
4759 else if (gimme == G_SCALAR)
4766 S_do_delete_local(pTHX)
4769 const I32 gimme = GIMME_V;
4772 const bool sliced = !!(PL_op->op_private & OPpSLICE);
4773 SV **unsliced_keysv = sliced ? NULL : sp--;
4774 SV * const osv = POPs;
4775 SV **mark = sliced ? PL_stack_base + POPMARK : unsliced_keysv-1;
4777 const bool tied = SvRMAGICAL(osv)
4778 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4779 const bool can_preserve = SvCANEXISTDELETE(osv);
4780 const U32 type = SvTYPE(osv);
4781 SV ** const end = sliced ? SP : unsliced_keysv;
4783 if (type == SVt_PVHV) { /* hash element */
4784 HV * const hv = MUTABLE_HV(osv);
4785 while (++MARK <= end) {
4786 SV * const keysv = *MARK;
4788 bool preeminent = TRUE;
4790 preeminent = hv_exists_ent(hv, keysv, 0);
4792 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4799 sv = hv_delete_ent(hv, keysv, 0, 0);
4801 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4804 if (!sv) DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4805 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4807 *MARK = sv_mortalcopy(sv);
4813 SAVEHDELETE(hv, keysv);
4814 *MARK = &PL_sv_undef;
4818 else if (type == SVt_PVAV) { /* array element */
4819 if (PL_op->op_flags & OPf_SPECIAL) {
4820 AV * const av = MUTABLE_AV(osv);
4821 while (++MARK <= end) {
4822 SSize_t idx = SvIV(*MARK);
4824 bool preeminent = TRUE;
4826 preeminent = av_exists(av, idx);
4828 SV **svp = av_fetch(av, idx, 1);
4835 sv = av_delete(av, idx, 0);
4837 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4840 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4842 *MARK = sv_mortalcopy(sv);
4848 SAVEADELETE(av, idx);
4849 *MARK = &PL_sv_undef;
4854 DIE(aTHX_ "panic: avhv_delete no longer supported");
4857 DIE(aTHX_ "Not a HASH reference");
4859 if (gimme == G_VOID)
4861 else if (gimme == G_SCALAR) {
4866 *++MARK = &PL_sv_undef;
4870 else if (gimme != G_VOID)
4871 PUSHs(*unsliced_keysv);
4882 if (PL_op->op_private & OPpLVAL_INTRO)
4883 return do_delete_local();
4886 discard = (gimme == G_VOID) ? G_DISCARD : 0;
4888 if (PL_op->op_private & OPpSLICE) {
4890 HV * const hv = MUTABLE_HV(POPs);
4891 const U32 hvtype = SvTYPE(hv);
4892 if (hvtype == SVt_PVHV) { /* hash element */
4893 while (++MARK <= SP) {
4894 SV * const sv = hv_delete_ent(hv, *MARK, discard, 0);
4895 *MARK = sv ? sv : &PL_sv_undef;
4898 else if (hvtype == SVt_PVAV) { /* array element */
4899 if (PL_op->op_flags & OPf_SPECIAL) {
4900 while (++MARK <= SP) {
4901 SV * const sv = av_delete(MUTABLE_AV(hv), SvIV(*MARK), discard);
4902 *MARK = sv ? sv : &PL_sv_undef;
4907 DIE(aTHX_ "Not a HASH reference");
4910 else if (gimme == G_SCALAR) {
4915 *++MARK = &PL_sv_undef;
4921 HV * const hv = MUTABLE_HV(POPs);
4923 if (SvTYPE(hv) == SVt_PVHV)
4924 sv = hv_delete_ent(hv, keysv, discard, 0);
4925 else if (SvTYPE(hv) == SVt_PVAV) {
4926 if (PL_op->op_flags & OPf_SPECIAL)
4927 sv = av_delete(MUTABLE_AV(hv), SvIV(keysv), discard);
4929 DIE(aTHX_ "panic: avhv_delete no longer supported");
4932 DIE(aTHX_ "Not a HASH reference");
4947 if (UNLIKELY( PL_op->op_private & OPpEXISTS_SUB )) {
4949 SV * const sv = POPs;
4950 CV * const cv = sv_2cv(sv, &hv, &gv, 0);
4953 if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
4958 hv = MUTABLE_HV(POPs);
4959 if (LIKELY( SvTYPE(hv) == SVt_PVHV )) {
4960 if (hv_exists_ent(hv, tmpsv, 0))
4963 else if (SvTYPE(hv) == SVt_PVAV) {
4964 if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
4965 if (av_exists(MUTABLE_AV(hv), SvIV(tmpsv)))
4970 DIE(aTHX_ "Not a HASH reference");
4977 dSP; dMARK; dORIGMARK;
4978 HV * const hv = MUTABLE_HV(POPs);
4979 const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4980 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4981 bool can_preserve = FALSE;
4987 if (SvCANEXISTDELETE(hv))
4988 can_preserve = TRUE;
4991 while (++MARK <= SP) {
4992 SV * const keysv = *MARK;
4995 bool preeminent = TRUE;
4997 if (localizing && can_preserve) {
4998 /* If we can determine whether the element exist,
4999 * try to preserve the existenceness of a tied hash
5000 * element by using EXISTS and DELETE if possible.
5001 * Fallback to FETCH and STORE otherwise. */
5002 preeminent = hv_exists_ent(hv, keysv, 0);
5005 he = hv_fetch_ent(hv, keysv, lval, 0);
5006 svp = he ? &HeVAL(he) : NULL;
5009 if (!svp || !*svp || *svp == &PL_sv_undef) {
5010 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
5013 if (HvNAME_get(hv) && isGV(*svp))
5014 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
5015 else if (preeminent)
5016 save_helem_flags(hv, keysv, svp,
5017 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
5019 SAVEHDELETE(hv, keysv);
5022 *MARK = svp && *svp ? *svp : &PL_sv_undef;
5024 if (GIMME_V != G_ARRAY) {
5026 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
5035 HV * const hv = MUTABLE_HV(POPs);
5036 I32 lval = (PL_op->op_flags & OPf_MOD);
5037 SSize_t items = SP - MARK;
5039 if (PL_op->op_private & OPpMAYBE_LVSUB) {
5040 const I32 flags = is_lvalue_sub();
5042 if (!(flags & OPpENTERSUB_INARGS))
5043 /* diag_listed_as: Can't modify %s in %s */
5044 Perl_croak(aTHX_ "Can't modify key/value hash slice in list assignment");
5051 *(MARK+items*2-1) = *(MARK+items);
5057 while (++MARK <= SP) {
5058 SV * const keysv = *MARK;
5062 he = hv_fetch_ent(hv, keysv, lval, 0);
5063 svp = he ? &HeVAL(he) : NULL;
5066 if (!svp || !*svp || *svp == &PL_sv_undef) {
5067 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
5069 *MARK = sv_mortalcopy(*MARK);
5071 *++MARK = svp && *svp ? *svp : &PL_sv_undef;
5073 if (GIMME_V != G_ARRAY) {
5074 MARK = SP - items*2;
5075 *++MARK = items > 0 ? *SP : &PL_sv_undef;
5081 /* List operators. */
5085 I32 markidx = POPMARK;
5086 if (GIMME_V != G_ARRAY) {
5087 SV **mark = PL_stack_base + markidx;
5090 *MARK = *SP; /* unwanted list, return last item */
5092 *MARK = &PL_sv_undef;
5102 SV ** const lastrelem = PL_stack_sp;
5103 SV ** const lastlelem = PL_stack_base + POPMARK;
5104 SV ** const firstlelem = PL_stack_base + POPMARK + 1;
5105 SV ** const firstrelem = lastlelem + 1;
5106 const U8 mod = PL_op->op_flags & OPf_MOD;
5108 const I32 max = lastrelem - lastlelem;
5111 if (GIMME_V != G_ARRAY) {
5112 I32 ix = SvIV(*lastlelem);
5115 if (ix < 0 || ix >= max)
5116 *firstlelem = &PL_sv_undef;
5118 *firstlelem = firstrelem[ix];
5124 SP = firstlelem - 1;
5128 for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
5129 I32 ix = SvIV(*lelem);
5132 if (ix < 0 || ix >= max)
5133 *lelem = &PL_sv_undef;
5135 if (!(*lelem = firstrelem[ix]))
5136 *lelem = &PL_sv_undef;
5137 else if (mod && SvPADTMP(*lelem)) {
5138 *lelem = firstrelem[ix] = sv_mortalcopy(*lelem);
5149 const I32 items = SP - MARK;
5150 SV * const av = MUTABLE_SV(av_make(items, MARK+1));
5152 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
5153 ? newRV_noinc(av) : av);
5159 dSP; dMARK; dORIGMARK;
5160 HV* const hv = newHV();
5161 SV* const retval = sv_2mortal( PL_op->op_flags & OPf_SPECIAL
5162 ? newRV_noinc(MUTABLE_SV(hv))
5167 (MARK++, SvGMAGICAL(*MARK) ? sv_mortalcopy(*MARK) : *MARK);
5174 sv_setsv_nomg(val, *MARK);
5178 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash");
5181 (void)hv_store_ent(hv,key,val,0);
5189 S_deref_plain_array(pTHX_ AV *ary)
5191 if (SvTYPE(ary) == SVt_PVAV) return ary;
5192 SvGETMAGIC((SV *)ary);
5193 if (!SvROK(ary) || SvTYPE(SvRV(ary)) != SVt_PVAV)
5194 Perl_die(aTHX_ "Not an ARRAY reference");
5195 else if (SvOBJECT(SvRV(ary)))
5196 Perl_die(aTHX_ "Not an unblessed ARRAY reference");
5197 return (AV *)SvRV(ary);
5200 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
5201 # define DEREF_PLAIN_ARRAY(ary) \
5204 SvTYPE(aRrRay) == SVt_PVAV \
5206 : S_deref_plain_array(aTHX_ aRrRay); \
5209 # define DEREF_PLAIN_ARRAY(ary) \
5211 PL_Sv = (SV *)(ary), \
5212 SvTYPE(PL_Sv) == SVt_PVAV \
5214 : S_deref_plain_array(aTHX_ (AV *)PL_Sv) \
5220 dSP; dMARK; dORIGMARK;
5221 int num_args = (SP - MARK);
5222 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5231 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5234 return Perl_tied_method(aTHX_ SV_CONST(SPLICE), mark - 1, MUTABLE_SV(ary), mg,
5235 GIMME_V | TIED_METHOD_ARGUMENTS_ON_STACK,
5242 offset = i = SvIV(*MARK);
5244 offset += AvFILLp(ary) + 1;
5246 DIE(aTHX_ PL_no_aelem, i);
5248 length = SvIVx(*MARK++);
5250 length += AvFILLp(ary) - offset + 1;
5256 length = AvMAX(ary) + 1; /* close enough to infinity */
5260 length = AvMAX(ary) + 1;
5262 if (offset > AvFILLp(ary) + 1) {
5264 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "splice() offset past end of array" );
5265 offset = AvFILLp(ary) + 1;
5267 after = AvFILLp(ary) + 1 - (offset + length);
5268 if (after < 0) { /* not that much array */
5269 length += after; /* offset+length now in array */
5275 /* At this point, MARK .. SP-1 is our new LIST */
5278 diff = newlen - length;
5279 if (newlen && !AvREAL(ary) && AvREIFY(ary))
5282 /* make new elements SVs now: avoid problems if they're from the array */
5283 for (dst = MARK, i = newlen; i; i--) {
5284 SV * const h = *dst;
5285 *dst++ = newSVsv(h);
5288 if (diff < 0) { /* shrinking the area */
5289 SV **tmparyval = NULL;
5291 Newx(tmparyval, newlen, SV*); /* so remember insertion */
5292 Copy(MARK, tmparyval, newlen, SV*);
5295 MARK = ORIGMARK + 1;
5296 if (GIMME_V == G_ARRAY) { /* copy return vals to stack */
5297 const bool real = cBOOL(AvREAL(ary));
5298 MEXTEND(MARK, length);
5300 EXTEND_MORTAL(length);
5301 for (i = 0, dst = MARK; i < length; i++) {
5302 if ((*dst = AvARRAY(ary)[i+offset])) {
5304 sv_2mortal(*dst); /* free them eventually */
5307 *dst = &PL_sv_undef;
5313 *MARK = AvARRAY(ary)[offset+length-1];
5316 for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
5317 SvREFCNT_dec(*dst++); /* free them now */
5320 AvFILLp(ary) += diff;
5322 /* pull up or down? */
5324 if (offset < after) { /* easier to pull up */
5325 if (offset) { /* esp. if nothing to pull */
5326 src = &AvARRAY(ary)[offset-1];
5327 dst = src - diff; /* diff is negative */
5328 for (i = offset; i > 0; i--) /* can't trust Copy */
5332 AvARRAY(ary) = AvARRAY(ary) - diff; /* diff is negative */
5336 if (after) { /* anything to pull down? */
5337 src = AvARRAY(ary) + offset + length;
5338 dst = src + diff; /* diff is negative */
5339 Move(src, dst, after, SV*);
5341 dst = &AvARRAY(ary)[AvFILLp(ary)+1];
5342 /* avoid later double free */
5349 Copy( tmparyval, AvARRAY(ary) + offset, newlen, SV* );
5350 Safefree(tmparyval);
5353 else { /* no, expanding (or same) */
5354 SV** tmparyval = NULL;
5356 Newx(tmparyval, length, SV*); /* so remember deletion */
5357 Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
5360 if (diff > 0) { /* expanding */
5361 /* push up or down? */
5362 if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
5366 Move(src, dst, offset, SV*);
5368 AvARRAY(ary) = AvARRAY(ary) - diff;/* diff is positive */
5370 AvFILLp(ary) += diff;
5373 if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
5374 av_extend(ary, AvFILLp(ary) + diff);
5375 AvFILLp(ary) += diff;
5378 dst = AvARRAY(ary) + AvFILLp(ary);
5380 for (i = after; i; i--) {
5388 Copy( MARK, AvARRAY(ary) + offset, newlen, SV* );
5391 MARK = ORIGMARK + 1;
5392 if (GIMME_V == G_ARRAY) { /* copy return vals to stack */
5394 const bool real = cBOOL(AvREAL(ary));
5396 EXTEND_MORTAL(length);
5397 for (i = 0, dst = MARK; i < length; i++) {
5398 if ((*dst = tmparyval[i])) {
5400 sv_2mortal(*dst); /* free them eventually */
5402 else *dst = &PL_sv_undef;
5408 else if (length--) {
5409 *MARK = tmparyval[length];
5412 while (length-- > 0)
5413 SvREFCNT_dec(tmparyval[length]);
5417 *MARK = &PL_sv_undef;
5418 Safefree(tmparyval);
5422 mg_set(MUTABLE_SV(ary));
5430 dSP; dMARK; dORIGMARK; dTARGET;
5431 AV * const ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5432 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5435 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5438 ENTER_with_name("call_PUSH");
5439 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5440 LEAVE_with_name("call_PUSH");
5441 /* SPAGAIN; not needed: SP is assigned to immediately below */
5444 if (SvREADONLY(ary) && MARK < SP) Perl_croak_no_modify();
5445 PL_delaymagic = DM_DELAY;
5446 for (++MARK; MARK <= SP; MARK++) {
5448 if (*MARK) SvGETMAGIC(*MARK);
5451 sv_setsv_nomg(sv, *MARK);
5452 av_store(ary, AvFILLp(ary)+1, sv);
5454 if (PL_delaymagic & DM_ARRAY_ISA)
5455 mg_set(MUTABLE_SV(ary));
5460 if (OP_GIMME(PL_op, 0) != G_VOID) {
5461 PUSHi( AvFILL(ary) + 1 );
5466 /* also used for: pp_pop()*/
5470 AV * const av = PL_op->op_flags & OPf_SPECIAL
5471 ? MUTABLE_AV(GvAV(PL_defgv)) : DEREF_PLAIN_ARRAY(MUTABLE_AV(POPs));
5472 SV * const sv = PL_op->op_type == OP_SHIFT ? av_shift(av) : av_pop(av);
5476 (void)sv_2mortal(sv);
5483 dSP; dMARK; dORIGMARK; dTARGET;
5484 AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5485 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5488 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5491 ENTER_with_name("call_UNSHIFT");
5492 call_sv(SV_CONST(UNSHIFT),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
5493 LEAVE_with_name("call_UNSHIFT");
5494 /* SPAGAIN; not needed: SP is assigned to immediately below */
5498 av_unshift(ary, SP - MARK);
5500 SV * const sv = newSVsv(*++MARK);
5501 (void)av_store(ary, i++, sv);
5505 if (OP_GIMME(PL_op, 0) != G_VOID) {
5506 PUSHi( AvFILL(ary) + 1 );
5515 if (GIMME_V == G_ARRAY) {
5516 if (PL_op->op_private & OPpREVERSE_INPLACE) {
5520 assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
5521 (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
5522 av = MUTABLE_AV((*SP));
5523 /* In-place reversing only happens in void context for the array
5524 * assignment. We don't need to push anything on the stack. */
5527 if (SvMAGICAL(av)) {
5529 SV *tmp = sv_newmortal();
5530 /* For SvCANEXISTDELETE */
5533 bool can_preserve = SvCANEXISTDELETE(av);
5535 for (i = 0, j = av_tindex(av); i < j; ++i, --j) {
5539 if (!av_exists(av, i)) {
5540 if (av_exists(av, j)) {
5541 SV *sv = av_delete(av, j, 0);
5542 begin = *av_fetch(av, i, TRUE);
5543 sv_setsv_mg(begin, sv);
5547 else if (!av_exists(av, j)) {
5548 SV *sv = av_delete(av, i, 0);
5549 end = *av_fetch(av, j, TRUE);
5550 sv_setsv_mg(end, sv);
5555 begin = *av_fetch(av, i, TRUE);
5556 end = *av_fetch(av, j, TRUE);
5557 sv_setsv(tmp, begin);
5558 sv_setsv_mg(begin, end);
5559 sv_setsv_mg(end, tmp);
5563 SV **begin = AvARRAY(av);
5566 SV **end = begin + AvFILLp(av);
5568 while (begin < end) {
5569 SV * const tmp = *begin;
5580 SV * const tmp = *MARK;
5584 /* safe as long as stack cannot get extended in the above */
5595 SvUTF8_off(TARG); /* decontaminate */
5597 do_join(TARG, &PL_sv_no, MARK, SP);
5599 sv_setsv(TARG, SP > MARK ? *SP : find_rundefsv());
5602 up = SvPV_force(TARG, len);
5604 if (DO_UTF8(TARG)) { /* first reverse each character */
5605 U8* s = (U8*)SvPVX(TARG);
5606 const U8* send = (U8*)(s + len);
5608 if (UTF8_IS_INVARIANT(*s)) {
5613 if (!utf8_to_uvchr_buf(s, send, 0))
5617 down = (char*)(s - 1);
5618 /* reverse this character */
5622 *down-- = (char)tmp;
5628 down = SvPVX(TARG) + len - 1;
5632 *down-- = (char)tmp;
5634 (void)SvPOK_only_UTF8(TARG);
5645 AV *ary = PL_op->op_flags & OPf_STACKED ? (AV *)POPs : NULL;
5646 IV limit = POPi; /* note, negative is forever */
5647 SV * const sv = POPs;
5649 const char *s = SvPV_const(sv, len);
5650 const bool do_utf8 = DO_UTF8(sv);
5651 const char *strend = s + len;
5657 const STRLEN slen = do_utf8
5658 ? utf8_length((U8*)s, (U8*)strend)
5659 : (STRLEN)(strend - s);
5660 SSize_t maxiters = slen + 10;
5661 I32 trailing_empty = 0;
5663 const I32 origlimit = limit;
5666 const I32 gimme = GIMME_V;
5668 const I32 oldsave = PL_savestack_ix;
5669 U32 make_mortal = SVs_TEMP;
5674 Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
5679 DIE(aTHX_ "panic: pp_split, pm=%p, s=%p", pm, s);
5682 TAINT_IF(get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET &&
5683 (RX_EXTFLAGS(rx) & (RXf_WHITE | RXf_SKIPWHITE)));
5686 if (pm->op_pmreplrootu.op_pmtargetoff) {
5687 ary = GvAVn(MUTABLE_GV(PAD_SVl(pm->op_pmreplrootu.op_pmtargetoff)));
5691 if (pm->op_pmreplrootu.op_pmtargetgv) {
5692 ary = GvAVn(pm->op_pmreplrootu.op_pmtargetgv);
5696 else if (pm->op_targ)
5697 ary = (AV *)PAD_SVl(pm->op_targ);
5703 (void)sv_2mortal(SvREFCNT_inc_simple_NN(sv));
5706 if ((mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied))) {
5708 XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
5715 for (i = AvFILLp(ary); i >= 0; i--)
5716 AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
5718 /* temporarily switch stacks */
5719 SAVESWITCHSTACK(PL_curstack, ary);
5723 base = SP - PL_stack_base;
5725 if (RX_EXTFLAGS(rx) & RXf_SKIPWHITE) {
5727 while (isSPACE_utf8(s))
5730 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5731 while (isSPACE_LC(*s))
5739 if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
5743 gimme_scalar = gimme == G_SCALAR && !ary;
5746 limit = maxiters + 2;
5747 if (RX_EXTFLAGS(rx) & RXf_WHITE) {
5750 /* this one uses 'm' and is a negative test */
5752 while (m < strend && ! isSPACE_utf8(m) ) {
5753 const int t = UTF8SKIP(m);
5754 /* isSPACE_utf8 returns FALSE for malform utf8 */
5761 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5763 while (m < strend && !isSPACE_LC(*m))
5766 while (m < strend && !isSPACE(*m))
5779 dstr = newSVpvn_flags(s, m-s,
5780 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5784 /* skip the whitespace found last */
5786 s = m + UTF8SKIP(m);
5790 /* this one uses 's' and is a positive test */
5792 while (s < strend && isSPACE_utf8(s) )
5795 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET)
5797 while (s < strend && isSPACE_LC(*s))
5800 while (s < strend && isSPACE(*s))
5805 else if (RX_EXTFLAGS(rx) & RXf_START_ONLY) {
5807 for (m = s; m < strend && *m != '\n'; m++)
5820 dstr = newSVpvn_flags(s, m-s,
5821 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5827 else if (RX_EXTFLAGS(rx) & RXf_NULL && !(s >= strend)) {
5829 Pre-extend the stack, either the number of bytes or
5830 characters in the string or a limited amount, triggered by:
5832 my ($x, $y) = split //, $str;
5836 if (!gimme_scalar) {
5837 const U32 items = limit - 1;
5846 /* keep track of how many bytes we skip over */
5856 dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
5869 dstr = newSVpvn(s, 1);
5885 else if (do_utf8 == (RX_UTF8(rx) != 0) &&
5886 (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) && !RX_NPARENS(rx)
5887 && (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
5888 && !(RX_EXTFLAGS(rx) & RXf_IS_ANCHORED)) {
5889 const int tail = (RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL);
5890 SV * const csv = CALLREG_INTUIT_STRING(rx);
5892 len = RX_MINLENRET(rx);
5893 if (len == 1 && !RX_UTF8(rx) && !tail) {
5894 const char c = *SvPV_nolen_const(csv);
5896 for (m = s; m < strend && *m != c; m++)
5907 dstr = newSVpvn_flags(s, m-s,
5908 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5911 /* The rx->minlen is in characters but we want to step
5912 * s ahead by bytes. */
5914 s = (char*)utf8_hop((U8*)m, len);
5916 s = m + len; /* Fake \n at the end */
5920 while (s < strend && --limit &&
5921 (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
5922 csv, multiline ? FBMrf_MULTILINE : 0)) )
5931 dstr = newSVpvn_flags(s, m-s,
5932 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5935 /* The rx->minlen is in characters but we want to step
5936 * s ahead by bytes. */
5938 s = (char*)utf8_hop((U8*)m, len);
5940 s = m + len; /* Fake \n at the end */
5945 maxiters += slen * RX_NPARENS(rx);
5946 while (s < strend && --limit)
5950 rex_return = CALLREGEXEC(rx, (char*)s, (char*)strend, (char*)orig, 1,
5953 if (rex_return == 0)
5955 TAINT_IF(RX_MATCH_TAINTED(rx));
5956 /* we never pass the REXEC_COPY_STR flag, so it should
5957 * never get copied */
5958 assert(!RX_MATCH_COPIED(rx));
5959 m = RX_OFFS(rx)[0].start + orig;
5968 dstr = newSVpvn_flags(s, m-s,
5969 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5972 if (RX_NPARENS(rx)) {
5974 for (i = 1; i <= (I32)RX_NPARENS(rx); i++) {
5975 s = RX_OFFS(rx)[i].start + orig;
5976 m = RX_OFFS(rx)[i].end + orig;
5978 /* japhy (07/27/01) -- the (m && s) test doesn't catch
5979 parens that didn't match -- they should be set to
5980 undef, not the empty string */
5988 if (m >= orig && s >= orig) {
5989 dstr = newSVpvn_flags(s, m-s,
5990 (do_utf8 ? SVf_UTF8 : 0)
5994 dstr = &PL_sv_undef; /* undef, not "" */
6000 s = RX_OFFS(rx)[0].end + orig;
6004 if (!gimme_scalar) {
6005 iters = (SP - PL_stack_base) - base;
6007 if (iters > maxiters)
6008 DIE(aTHX_ "Split loop");
6010 /* keep field after final delim? */
6011 if (s < strend || (iters && origlimit)) {
6012 if (!gimme_scalar) {
6013 const STRLEN l = strend - s;
6014 dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
6019 else if (!origlimit) {
6021 iters -= trailing_empty;
6023 while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
6024 if (TOPs && !make_mortal)
6026 *SP-- = &PL_sv_undef;
6033 LEAVE_SCOPE(oldsave); /* may undo an earlier SWITCHSTACK */
6037 if (SvSMAGICAL(ary)) {
6039 mg_set(MUTABLE_SV(ary));
6042 if (gimme == G_ARRAY) {
6044 Copy(AvARRAY(ary), SP + 1, iters, SV*);
6051 ENTER_with_name("call_PUSH");
6052 call_sv(SV_CONST(PUSH),G_SCALAR|G_DISCARD|G_METHOD_NAMED);
6053 LEAVE_with_name("call_PUSH");
6055 if (gimme == G_ARRAY) {
6057 /* EXTEND should not be needed - we just popped them */
6059 for (i=0; i < iters; i++) {
6060 SV **svp = av_fetch(ary, i, FALSE);
6061 PUSHs((svp) ? *svp : &PL_sv_undef);
6068 if (gimme == G_ARRAY)
6080 SV *const sv = PAD_SVl(PL_op->op_targ);
6082 if (SvPADSTALE(sv)) {
6085 RETURNOP(cLOGOP->op_other);
6087 RETURNOP(cLOGOP->op_next);
6096 if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
6097 || SvTYPE(retsv) == SVt_PVCV) {
6098 retsv = refto(retsv);
6105 /* used for: pp_padany(), pp_mapstart(), pp_custom(); plus any system ops
6106 * that aren't implemented on a particular platform */
6108 PP(unimplemented_op)
6110 const Optype op_type = PL_op->op_type;
6111 /* Using OP_NAME() isn't going to be helpful here. Firstly, it doesn't cope
6112 with out of range op numbers - it only "special" cases op_custom.
6113 Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
6114 if we get here for a custom op then that means that the custom op didn't
6115 have an implementation. Given that OP_NAME() looks up the custom op
6116 by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
6117 registers &PL_unimplemented_op as the address of their custom op.
6118 NULL doesn't generate a useful error message. "custom" does. */
6119 const char *const name = op_type >= OP_max
6120 ? "[out of range]" : PL_op_name[PL_op->op_type];
6121 if(OP_IS_SOCKET(op_type))
6122 DIE(aTHX_ PL_no_sock_func, name);
6123 DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
6126 /* For sorting out arguments passed to a &CORE:: subroutine */
6130 int opnum = SvIOK(cSVOP_sv) ? (int)SvUV(cSVOP_sv) : 0;
6131 int defgv = PL_opargs[opnum] & OA_DEFGV ||opnum==OP_GLOB, whicharg = 0;
6132 AV * const at_ = GvAV(PL_defgv);
6133 SV **svp = at_ ? AvARRAY(at_) : NULL;
6134 I32 minargs = 0, maxargs = 0, numargs = at_ ? AvFILLp(at_)+1 : 0;
6135 I32 oa = opnum ? PL_opargs[opnum] >> OASHIFT : 0;
6136 bool seen_question = 0;
6137 const char *err = NULL;
6138 const bool pushmark = PL_op->op_private & OPpCOREARGS_PUSHMARK;
6140 /* Count how many args there are first, to get some idea how far to
6141 extend the stack. */
6143 if ((oa & 7) == OA_LIST) { maxargs = I32_MAX; break; }
6145 if (oa & OA_OPTIONAL) seen_question = 1;
6146 if (!seen_question) minargs++;
6150 if(numargs < minargs) err = "Not enough";
6151 else if(numargs > maxargs) err = "Too many";
6153 /* diag_listed_as: Too many arguments for %s */
6155 "%s arguments for %s", err,
6156 opnum ? PL_op_desc[opnum] : SvPV_nolen_const(cSVOP_sv)
6159 /* Reset the stack pointer. Without this, we end up returning our own
6160 arguments in list context, in addition to the values we are supposed
6161 to return. nextstate usually does this on sub entry, but we need
6162 to run the next op with the caller's hints, so we cannot have a
6164 SP = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
6166 if(!maxargs) RETURN;
6168 /* We do this here, rather than with a separate pushmark op, as it has
6169 to come in between two things this function does (stack reset and
6170 arg pushing). This seems the easiest way to do it. */
6173 (void)Perl_pp_pushmark(aTHX);
6176 EXTEND(SP, maxargs == I32_MAX ? numargs : maxargs);
6177 PUTBACK; /* The code below can die in various places. */
6179 oa = PL_opargs[opnum] >> OASHIFT;
6180 for (; oa&&(numargs||!pushmark); (void)(numargs&&(++svp,--numargs))) {
6185 if (!numargs && defgv && whicharg == minargs + 1) {
6186 PUSHs(find_rundefsv2(
6187 find_runcv_where(FIND_RUNCV_level_eq, 1, NULL),
6188 cxstack[cxstack_ix].blk_oldcop->cop_seq
6191 else PUSHs(numargs ? svp && *svp ? *svp : &PL_sv_undef : NULL);
6195 PUSHs(svp && *svp ? *svp : &PL_sv_undef);
6200 if (!svp || !*svp || !SvROK(*svp)
6201 || SvTYPE(SvRV(*svp)) != SVt_PVHV)
6203 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
6204 "Type of arg %d to &CORE::%s must be hash reference",
6205 whicharg, OP_DESC(PL_op->op_next)
6210 if (!numargs) PUSHs(NULL);
6211 else if(svp && *svp && SvROK(*svp) && isGV_with_GP(SvRV(*svp)))
6212 /* no magic here, as the prototype will have added an extra
6213 refgen and we just want what was there before that */
6216 const bool constr = PL_op->op_private & whicharg;
6218 svp && *svp ? *svp : &PL_sv_undef,
6219 constr, cBOOL(CopHINTS_get(PL_curcop) & HINT_STRICT_REFS),
6225 if (!numargs) goto try_defsv;
6227 const bool wantscalar =
6228 PL_op->op_private & OPpCOREARGS_SCALARMOD;
6229 if (!svp || !*svp || !SvROK(*svp)
6230 /* We have to permit globrefs even for the \$ proto, as
6231 *foo is indistinguishable from ${\*foo}, and the proto-
6232 type permits the latter. */
6233 || SvTYPE(SvRV(*svp)) > (
6234 wantscalar ? SVt_PVLV
6235 : opnum == OP_LOCK || opnum == OP_UNDEF
6241 "Type of arg %d to &CORE::%s must be %s",
6242 whicharg, PL_op_name[opnum],
6244 ? "scalar reference"
6245 : opnum == OP_LOCK || opnum == OP_UNDEF
6246 ? "reference to one of [$@%&*]"
6247 : "reference to one of [$@%*]"
6250 if (opnum == OP_UNDEF && SvRV(*svp) == (SV *)PL_defgv
6251 && cxstack[cxstack_ix].cx_type & CXp_HASARGS) {
6252 /* Undo @_ localisation, so that sub exit does not undo
6253 part of our undeffing. */
6254 PERL_CONTEXT *cx = &cxstack[cxstack_ix];
6256 cx->cx_type &= ~ CXp_HASARGS;
6257 assert(!AvREAL(cx->blk_sub.argarray));
6262 DIE(aTHX_ "panic: unknown OA_*: %x", (unsigned)(oa&7));
6274 if (PL_op->op_private & OPpOFFBYONE) {
6275 cv = find_runcv_where(FIND_RUNCV_level_eq, 1, NULL);
6277 else cv = find_runcv(NULL);
6278 XPUSHs(CvEVAL(cv) ? &PL_sv_undef : sv_2mortal(newRV((SV *)cv)));
6283 S_localise_aelem_lval(pTHX_ AV * const av, SV * const keysv,
6284 const bool can_preserve)
6286 const SSize_t ix = SvIV(keysv);
6287 if (can_preserve ? av_exists(av, ix) : TRUE) {
6288 SV ** const svp = av_fetch(av, ix, 1);
6290 Perl_croak(aTHX_ PL_no_aelem, ix);
6291 save_aelem(av, ix, svp);
6294 SAVEADELETE(av, ix);
6298 S_localise_helem_lval(pTHX_ HV * const hv, SV * const keysv,
6299 const bool can_preserve)
6301 if (can_preserve ? hv_exists_ent(hv, keysv, 0) : TRUE) {
6302 HE * const he = hv_fetch_ent(hv, keysv, 1, 0);
6303 SV ** const svp = he ? &HeVAL(he) : NULL;
6305 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(keysv));
6306 save_helem_flags(hv, keysv, svp, 0);
6309 SAVEHDELETE(hv, keysv);
6313 S_localise_gv_slot(pTHX_ GV *gv, U8 type)
6315 if (type == OPpLVREF_SV) {
6316 save_pushptrptr(gv, SvREFCNT_inc_simple(GvSV(gv)), SAVEt_GVSV);
6319 else if (type == OPpLVREF_AV)
6320 /* XXX Inefficient, as it creates a new AV, which we are
6321 about to clobber. */
6324 assert(type == OPpLVREF_HV);
6325 /* XXX Likewise inefficient. */
6334 SV * const key = PL_op->op_private & OPpLVREF_ELEM ? POPs : NULL;
6335 SV * const left = PL_op->op_flags & OPf_STACKED ? POPs : NULL;
6337 const char *bad = NULL;
6338 const U8 type = PL_op->op_private & OPpLVREF_TYPE;
6339 if (!SvROK(sv)) DIE(aTHX_ "Assigned value is not a reference");
6342 if (SvTYPE(SvRV(sv)) > SVt_PVLV)
6346 if (SvTYPE(SvRV(sv)) != SVt_PVAV)
6350 if (SvTYPE(SvRV(sv)) != SVt_PVHV)
6354 if (SvTYPE(SvRV(sv)) != SVt_PVCV)
6358 /* diag_listed_as: Assigned value is not %s reference */
6359 DIE(aTHX_ "Assigned value is not a%s reference", bad);
6363 switch (left ? SvTYPE(left) : 0) {
6366 SV * const old = PAD_SV(ARGTARG);
6367 PAD_SETSV(ARGTARG, SvREFCNT_inc_NN(SvRV(sv)));
6369 if ((PL_op->op_private & (OPpLVAL_INTRO|OPpPAD_STATE))
6371 SAVECLEARSV(PAD_SVl(ARGTARG));
6375 if (PL_op->op_private & OPpLVAL_INTRO) {
6376 S_localise_gv_slot(aTHX_ (GV *)left, type);
6378 gv_setref(left, sv);
6383 if (UNLIKELY(PL_op->op_private & OPpLVAL_INTRO)) {
6384 S_localise_aelem_lval(aTHX_ (AV *)left, key,
6385 SvCANEXISTDELETE(left));
6387 av_store((AV *)left, SvIV(key), SvREFCNT_inc_simple_NN(SvRV(sv)));
6390 if (UNLIKELY(PL_op->op_private & OPpLVAL_INTRO)) {
6392 S_localise_helem_lval(aTHX_ (HV *)left, key,
6393 SvCANEXISTDELETE(left));
6395 (void)hv_store_ent((HV *)left, key, SvREFCNT_inc_simple_NN(SvRV(sv)), 0);
6397 if (PL_op->op_flags & OPf_MOD)
6398 SETs(sv_2mortal(newSVsv(sv)));
6399 /* XXX else can weak references go stale before they are read, e.g.,
6408 SV * const ret = sv_2mortal(newSV_type(SVt_PVMG));
6409 SV * const elem = PL_op->op_private & OPpLVREF_ELEM ? POPs : NULL;
6410 SV * const arg = PL_op->op_flags & OPf_STACKED ? POPs : NULL;
6411 MAGIC * const mg = sv_magicext(ret, arg, PERL_MAGIC_lvref,
6412 &PL_vtbl_lvref, (char *)elem,
6413 elem ? HEf_SVKEY : (I32)ARGTARG);
6414 mg->mg_private = PL_op->op_private;
6415 if (PL_op->op_private & OPpLVREF_ITER)
6416 mg->mg_flags |= MGf_PERSIST;
6417 if (UNLIKELY(PL_op->op_private & OPpLVAL_INTRO)) {
6423 const bool can_preserve = SvCANEXISTDELETE(arg);
6424 if (SvTYPE(arg) == SVt_PVAV)
6425 S_localise_aelem_lval(aTHX_ (AV *)arg, elem, can_preserve);
6427 S_localise_helem_lval(aTHX_ (HV *)arg, elem, can_preserve);
6431 S_localise_gv_slot(aTHX_ (GV *)arg,
6432 PL_op->op_private & OPpLVREF_TYPE);
6434 else if (!(PL_op->op_private & OPpPAD_STATE))
6435 SAVECLEARSV(PAD_SVl(ARGTARG));
6444 AV * const av = (AV *)POPs;
6445 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
6446 bool can_preserve = FALSE;
6448 if (UNLIKELY(localizing)) {
6453 can_preserve = SvCANEXISTDELETE(av);
6455 if (SvTYPE(av) == SVt_PVAV) {
6458 for (svp = MARK + 1; svp <= SP; svp++) {
6459 const SSize_t elem = SvIV(*svp);
6463 if (max > AvMAX(av))
6468 while (++MARK <= SP) {
6469 SV * const elemsv = *MARK;
6470 if (SvTYPE(av) == SVt_PVAV)
6471 S_localise_aelem_lval(aTHX_ av, elemsv, can_preserve);
6473 S_localise_helem_lval(aTHX_ (HV *)av, elemsv, can_preserve);
6474 *MARK = sv_2mortal(newSV_type(SVt_PVMG));
6475 sv_magic(*MARK,(SV *)av,PERL_MAGIC_lvref,(char *)elemsv,HEf_SVKEY);
6482 if (PL_op->op_flags & OPf_STACKED)
6483 Perl_pp_rv2av(aTHX);
6485 Perl_pp_padav(aTHX);
6489 SETs(0); /* special alias marker that aassign recognises */
6499 SETs(sv_2mortal((SV *)newCONSTSUB(SvTYPE(CopSTASH(PL_curcop))==SVt_PVHV
6500 ? CopSTASH(PL_curcop)
6502 NULL, SvREFCNT_inc_simple_NN(sv))));
6507 * ex: set ts=8 sts=4 sw=4 et: