3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * 'It's a big house this, and very peculiar. Always a bit more
13 * to discover, and no knowing what you'll find round a corner.
14 * And Elves, sir!' --Samwise Gamgee
16 * [p.225 of _The Lord of the Rings_, II/i: "Many Meetings"]
19 /* This file contains general pp ("push/pop") functions that execute the
20 * opcodes that make up a perl program. A typical pp function expects to
21 * find its arguments on the stack, and usually pushes its results onto
22 * the stack, hence the 'pp' terminology. Each OP structure contains
23 * a pointer to the relevant pp_foo() function.
33 /* XXX I can't imagine anyone who doesn't have this actually _needs_
34 it, since pid_t is an integral type.
37 #ifdef NEED_GETPID_PROTO
38 extern Pid_t getpid (void);
42 * Some BSDs and Cygwin default to POSIX math instead of IEEE.
43 * This switches them over to IEEE.
45 #if defined(LIBM_LIB_VERSION)
46 _LIB_VERSION_TYPE _LIB_VERSION = _IEEE_;
49 /* variations on pp_null */
55 if (GIMME_V == G_SCALAR)
66 assert(SvTYPE(TARG) == SVt_PVAV);
67 if (PL_op->op_private & OPpLVAL_INTRO)
68 if (!(PL_op->op_private & OPpPAD_STATE))
69 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
71 if (PL_op->op_flags & OPf_REF) {
74 } else if (PL_op->op_private & OPpMAYBE_LVSUB) {
75 const I32 flags = is_lvalue_sub();
76 if (flags && !(flags & OPpENTERSUB_INARGS)) {
77 if (GIMME == G_SCALAR)
78 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
84 if (gimme == G_ARRAY) {
85 const I32 maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
87 if (SvMAGICAL(TARG)) {
89 for (i=0; i < (U32)maxarg; i++) {
90 SV * const * const svp = av_fetch(MUTABLE_AV(TARG), i, FALSE);
91 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
95 Copy(AvARRAY((const AV *)TARG), SP+1, maxarg, SV*);
99 else if (gimme == G_SCALAR) {
100 SV* const sv = sv_newmortal();
101 const I32 maxarg = AvFILL(MUTABLE_AV(TARG)) + 1;
102 sv_setiv(sv, maxarg);
113 assert(SvTYPE(TARG) == SVt_PVHV);
115 if (PL_op->op_private & OPpLVAL_INTRO)
116 if (!(PL_op->op_private & OPpPAD_STATE))
117 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
118 if (PL_op->op_flags & OPf_REF)
120 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
121 const I32 flags = is_lvalue_sub();
122 if (flags && !(flags & OPpENTERSUB_INARGS)) {
123 if (GIMME == G_SCALAR)
124 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
129 if (gimme == G_ARRAY) {
130 RETURNOP(Perl_do_kv(aTHX));
132 else if (gimme == G_SCALAR) {
133 SV* const sv = Perl_hv_scalar(aTHX_ MUTABLE_HV(TARG));
141 static const char S_no_symref_sv[] =
142 "Can't use string (\"%" SVf32 "\"%s) as %s ref while \"strict refs\" in use";
144 /* In some cases this function inspects PL_op. If this function is called
145 for new op types, more bool parameters may need to be added in place of
148 When noinit is true, the absence of a gv will cause a retval of undef.
149 This is unrelated to the cv-to-gv assignment case.
151 Make sure to use SPAGAIN after calling this.
155 S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict,
159 if (!isGV(sv) || SvFAKE(sv)) SvGETMAGIC(sv);
162 sv = amagic_deref_call(sv, to_gv_amg);
166 if (SvTYPE(sv) == SVt_PVIO) {
167 GV * const gv = MUTABLE_GV(sv_newmortal());
168 gv_init(gv, 0, "", 0, 0);
169 GvIOp(gv) = MUTABLE_IO(sv);
170 SvREFCNT_inc_void_NN(sv);
173 else if (!isGV_with_GP(sv))
174 return (SV *)Perl_die(aTHX_ "Not a GLOB reference");
177 if (!isGV_with_GP(sv)) {
179 /* If this is a 'my' scalar and flag is set then vivify
182 if (vivify_sv && sv != &PL_sv_undef) {
185 Perl_croak_no_modify(aTHX);
186 if (cUNOP->op_targ) {
188 SV * const namesv = PAD_SV(cUNOP->op_targ);
189 const char * const name = SvPV(namesv, len);
190 gv = MUTABLE_GV(newSV(0));
191 gv_init(gv, CopSTASH(PL_curcop), name, len, 0);
194 const char * const name = CopSTASHPV(PL_curcop);
197 prepare_SV_for_RV(sv);
198 SvRV_set(sv, MUTABLE_SV(gv));
203 if (PL_op->op_flags & OPf_REF || strict)
204 return (SV *)Perl_die(aTHX_ PL_no_usym, "a symbol");
205 if (ckWARN(WARN_UNINITIALIZED))
211 if (!(sv = MUTABLE_SV(gv_fetchsv_nomg(
212 sv, GV_ADDMG, SVt_PVGV
222 (SvPOK(sv) && SvCUR(sv)>32 ? "..." : ""),
225 if ((PL_op->op_private & (OPpLVAL_INTRO|OPpDONT_INIT_GV))
226 == OPpDONT_INIT_GV) {
227 /* We are the target of a coderef assignment. Return
228 the scalar unchanged, and let pp_sasssign deal with
232 sv = MUTABLE_SV(gv_fetchsv_nomg(sv, GV_ADD, SVt_PVGV));
234 /* FAKE globs in the symbol table cause weird bugs (#77810) */
239 SV *newsv = sv_newmortal();
240 sv_setsv_flags(newsv, sv, 0);
252 sv, PL_op->op_private & OPpDEREF,
253 PL_op->op_private & HINT_STRICT_REFS,
254 ((PL_op->op_flags & OPf_SPECIAL) && !(PL_op->op_flags & OPf_MOD))
255 || PL_op->op_type == OP_READLINE
258 if (PL_op->op_private & OPpLVAL_INTRO)
259 save_gp(MUTABLE_GV(sv), !(PL_op->op_flags & OPf_SPECIAL));
264 /* Helper function for pp_rv2sv and pp_rv2av */
266 Perl_softref2xv(pTHX_ SV *const sv, const char *const what,
267 const svtype type, SV ***spp)
272 PERL_ARGS_ASSERT_SOFTREF2XV;
274 if (PL_op->op_private & HINT_STRICT_REFS) {
276 Perl_die(aTHX_ S_no_symref_sv, sv, (SvPOK(sv) && SvCUR(sv)>32 ? "..." : ""), what);
278 Perl_die(aTHX_ PL_no_usym, what);
282 PL_op->op_flags & OPf_REF &&
283 PL_op->op_next->op_type != OP_BOOLKEYS
285 Perl_die(aTHX_ PL_no_usym, what);
286 if (ckWARN(WARN_UNINITIALIZED))
288 if (type != SVt_PV && GIMME_V == G_ARRAY) {
292 **spp = &PL_sv_undef;
295 if ((PL_op->op_flags & OPf_SPECIAL) &&
296 !(PL_op->op_flags & OPf_MOD))
298 if (!(gv = gv_fetchsv_nomg(sv, GV_ADDMG, type)))
300 **spp = &PL_sv_undef;
305 gv = gv_fetchsv_nomg(sv, GV_ADD, type);
318 sv = amagic_deref_call(sv, to_sv_amg);
323 switch (SvTYPE(sv)) {
329 DIE(aTHX_ "Not a SCALAR reference");
336 if (!isGV_with_GP(gv)) {
337 gv = Perl_softref2xv(aTHX_ sv, "a SCALAR", SVt_PV, &sp);
343 if (PL_op->op_flags & OPf_MOD) {
344 if (PL_op->op_private & OPpLVAL_INTRO) {
345 if (cUNOP->op_first->op_type == OP_NULL)
346 sv = save_scalar(MUTABLE_GV(TOPs));
348 sv = save_scalar(gv);
350 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
352 else if (PL_op->op_private & OPpDEREF)
353 sv = vivify_ref(sv, PL_op->op_private & OPpDEREF);
362 AV * const av = MUTABLE_AV(TOPs);
363 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
365 SV ** const sv = Perl_av_arylen_p(aTHX_ MUTABLE_AV(av));
367 *sv = newSV_type(SVt_PVMG);
368 sv_magic(*sv, MUTABLE_SV(av), PERL_MAGIC_arylen, NULL, 0);
372 SETs(sv_2mortal(newSViv(
373 AvFILL(MUTABLE_AV(av)) + CopARYBASE_get(PL_curcop)
383 if (PL_op->op_flags & OPf_MOD || LVRET) {
384 SV * const ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
385 sv_magic(ret, NULL, PERL_MAGIC_pos, NULL, 0);
387 LvTARG(ret) = SvREFCNT_inc_simple(sv);
388 PUSHs(ret); /* no SvSETMAGIC */
392 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
393 const MAGIC * const mg = mg_find(sv, PERL_MAGIC_regex_global);
394 if (mg && mg->mg_len >= 0) {
399 PUSHi(i + CopARYBASE_get(PL_curcop));
412 const I32 flags = (PL_op->op_flags & OPf_SPECIAL)
414 : ((PL_op->op_private & (OPpLVAL_INTRO|OPpMAY_RETURN_CONSTANT)) == OPpMAY_RETURN_CONSTANT)
417 /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
418 /* (But not in defined().) */
420 CV *cv = sv_2cv(TOPs, &stash_unused, &gv, flags);
423 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
424 if ((PL_op->op_private & OPpLVAL_INTRO)) {
425 if (gv && GvCV(gv) == cv && (gv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), FALSE)))
428 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
431 else if ((flags == (GV_ADD|GV_NOEXPAND)) && gv && SvROK(gv)) {
435 cv = MUTABLE_CV(&PL_sv_undef);
436 SETs(MUTABLE_SV(cv));
446 SV *ret = &PL_sv_undef;
448 if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
449 const char * s = SvPVX_const(TOPs);
450 if (strnEQ(s, "CORE::", 6)) {
451 const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
452 if (!code || code == -KEY_CORE)
453 DIE(aTHX_ "Can't find an opnumber for \"%s\"", s+6);
454 if (code < 0) { /* Overridable. */
455 SV * const sv = core_prototype(NULL, s + 6, code, NULL);
461 cv = sv_2cv(TOPs, &stash, &gv, 0);
463 ret = newSVpvn_flags(SvPVX_const(cv), SvCUR(cv), SVs_TEMP);
472 CV *cv = MUTABLE_CV(PAD_SV(PL_op->op_targ));
474 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
476 PUSHs(MUTABLE_SV(cv));
490 if (GIMME != G_ARRAY) {
494 *MARK = &PL_sv_undef;
495 *MARK = refto(*MARK);
499 EXTEND_MORTAL(SP - MARK);
501 *MARK = refto(*MARK);
506 S_refto(pTHX_ SV *sv)
511 PERL_ARGS_ASSERT_REFTO;
513 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
516 if (!(sv = LvTARG(sv)))
519 SvREFCNT_inc_void_NN(sv);
521 else if (SvTYPE(sv) == SVt_PVAV) {
522 if (!AvREAL((const AV *)sv) && AvREIFY((const AV *)sv))
523 av_reify(MUTABLE_AV(sv));
525 SvREFCNT_inc_void_NN(sv);
527 else if (SvPADTMP(sv) && !IS_PADGV(sv))
531 SvREFCNT_inc_void_NN(sv);
534 sv_upgrade(rv, SVt_IV);
544 SV * const sv = POPs;
549 if (!sv || !SvROK(sv))
552 pv = sv_reftype(SvRV(sv),TRUE);
553 PUSHp(pv, strlen(pv));
564 stash = CopSTASH(PL_curcop);
566 SV * const ssv = POPs;
570 if (!ssv) goto curstash;
571 if (!SvGMAGICAL(ssv) && !SvAMAGIC(ssv) && SvROK(ssv))
572 Perl_croak(aTHX_ "Attempt to bless into a reference");
573 ptr = SvPV_const(ssv,len);
575 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
576 "Explicit blessing to '' (assuming package main)");
577 stash = gv_stashpvn(ptr, len, GV_ADD);
580 (void)sv_bless(TOPs, stash);
589 const char * const elem = SvPV_nolen_const(sv);
590 GV * const gv = MUTABLE_GV(POPs);
595 /* elem will always be NUL terminated. */
596 const char * const second_letter = elem + 1;
599 if (strEQ(second_letter, "RRAY"))
600 tmpRef = MUTABLE_SV(GvAV(gv));
603 if (strEQ(second_letter, "ODE"))
604 tmpRef = MUTABLE_SV(GvCVu(gv));
607 if (strEQ(second_letter, "ILEHANDLE")) {
608 /* finally deprecated in 5.8.0 */
609 deprecate("*glob{FILEHANDLE}");
610 tmpRef = MUTABLE_SV(GvIOp(gv));
613 if (strEQ(second_letter, "ORMAT"))
614 tmpRef = MUTABLE_SV(GvFORM(gv));
617 if (strEQ(second_letter, "LOB"))
618 tmpRef = MUTABLE_SV(gv);
621 if (strEQ(second_letter, "ASH"))
622 tmpRef = MUTABLE_SV(GvHV(gv));
625 if (*second_letter == 'O' && !elem[2])
626 tmpRef = MUTABLE_SV(GvIOp(gv));
629 if (strEQ(second_letter, "AME"))
630 sv = newSVhek(GvNAME_HEK(gv));
633 if (strEQ(second_letter, "ACKAGE")) {
634 const HV * const stash = GvSTASH(gv);
635 const HEK * const hek = stash ? HvNAME_HEK(stash) : NULL;
636 sv = hek ? newSVhek(hek) : newSVpvs("__ANON__");
640 if (strEQ(second_letter, "CALAR"))
655 /* Pattern matching */
660 register unsigned char *s;
663 MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_study) : NULL;
667 if (mg && SvSCREAM(sv))
670 s = (unsigned char*)(SvPV(sv, len));
671 if (len == 0 || len > I32_MAX || !SvPOK(sv) || SvUTF8(sv) || SvVALID(sv)) {
672 /* No point in studying a zero length string, and not safe to study
673 anything that doesn't appear to be a simple scalar (and hence might
674 change between now and when the regexp engine runs without our set
675 magic ever running) such as a reference to an object with overloaded
676 stringification. Also refuse to study an FBM scalar, as this gives
677 more flexibility in SV flag usage. No real-world code would ever
678 end up studying an FBM scalar, so this isn't a real pessimisation.
679 Endemic use of I32 in Perl_screaminstr makes it hard to safely push
680 the study length limit from I32_MAX to U32_MAX - 1.
687 } else if (len < 0xFFFF) {
692 size = (256 + len) * quanta;
693 sfirst_raw = (char *)safemalloc(size);
696 DIE(aTHX_ "do_study: out of memory");
700 mg = sv_magicext(sv, NULL, PERL_MAGIC_study, &PL_vtbl_regexp, NULL, 0);
701 mg->mg_ptr = sfirst_raw;
703 mg->mg_private = quanta;
705 memset(sfirst_raw, ~0, 256 * quanta);
707 /* The assumption here is that most studied strings are fairly short, hence
708 the pain of the extra code is worth it, given the memory savings.
709 80 character string, 336 bytes as U8, down from 1344 as U32
710 800 character string, 2112 bytes as U16, down from 4224 as U32
714 U8 *const sfirst = (U8 *)sfirst_raw;
715 U8 *const snext = sfirst + 256;
717 const U8 ch = s[len];
718 snext[len] = sfirst[ch];
721 } else if (quanta == 2) {
722 U16 *const sfirst = (U16 *)sfirst_raw;
723 U16 *const snext = sfirst + 256;
725 const U8 ch = s[len];
726 snext[len] = sfirst[ch];
730 U32 *const sfirst = (U32 *)sfirst_raw;
731 U32 *const snext = sfirst + 256;
733 const U8 ch = s[len];
734 snext[len] = sfirst[ch];
747 if (PL_op->op_flags & OPf_STACKED)
749 else if (PL_op->op_private & OPpTARGET_MY)
755 TARG = sv_newmortal();
756 if(PL_op->op_type == OP_TRANSR) {
757 SV * const newsv = newSVsv(sv);
761 else PUSHi(do_trans(sv));
765 /* Lvalue operators. */
768 S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping)
774 PERL_ARGS_ASSERT_DO_CHOMP;
776 if (chomping && (RsSNARF(PL_rs) || RsRECORD(PL_rs)))
778 if (SvTYPE(sv) == SVt_PVAV) {
780 AV *const av = MUTABLE_AV(sv);
781 const I32 max = AvFILL(av);
783 for (i = 0; i <= max; i++) {
784 sv = MUTABLE_SV(av_fetch(av, i, FALSE));
785 if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
786 do_chomp(retval, sv, chomping);
790 else if (SvTYPE(sv) == SVt_PVHV) {
791 HV* const hv = MUTABLE_HV(sv);
793 (void)hv_iterinit(hv);
794 while ((entry = hv_iternext(hv)))
795 do_chomp(retval, hv_iterval(hv,entry), chomping);
798 else if (SvREADONLY(sv)) {
800 /* SV is copy-on-write */
801 sv_force_normal_flags(sv, 0);
804 Perl_croak_no_modify(aTHX);
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, PL_encoding);
820 char *temp_buffer = NULL;
829 while (len && s[-1] == '\n') {
836 STRLEN rslen, rs_charlen;
837 const char *rsptr = SvPV_const(PL_rs, rslen);
839 rs_charlen = SvUTF8(PL_rs)
843 if (SvUTF8(PL_rs) != SvUTF8(sv)) {
844 /* Assumption is that rs is shorter than the scalar. */
846 /* RS is utf8, scalar is 8 bit. */
848 temp_buffer = (char*)bytes_from_utf8((U8*)rsptr,
851 /* Cannot downgrade, therefore cannot possibly match
853 assert (temp_buffer == rsptr);
859 else if (PL_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, PL_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))
885 SvIVX(retval) += rs_charlen;
888 s = SvPV_force_nolen(sv);
896 SvREFCNT_dec(svrecode);
898 Safefree(temp_buffer);
900 if (len && !SvPOK(sv))
901 s = SvPV_force_nomg(sv, len);
904 char * const send = s + len;
905 char * const start = s;
907 while (s > start && UTF8_IS_CONTINUATION(*s))
909 if (is_utf8_string((U8*)s, send - s)) {
910 sv_setpvn(retval, s, send - s);
912 SvCUR_set(sv, s - start);
918 sv_setpvs(retval, "");
922 sv_setpvn(retval, s, 1);
929 sv_setpvs(retval, "");
937 const bool chomping = PL_op->op_type == OP_SCHOMP;
941 do_chomp(TARG, TOPs, chomping);
948 dVAR; dSP; dMARK; dTARGET; dORIGMARK;
949 const bool chomping = PL_op->op_type == OP_CHOMP;
954 do_chomp(TARG, *++MARK, chomping);
965 if (!PL_op->op_private) {
974 SV_CHECK_THINKFIRST_COW_DROP(sv);
976 switch (SvTYPE(sv)) {
980 av_undef(MUTABLE_AV(sv));
983 hv_undef(MUTABLE_HV(sv));
986 if (cv_const_sv((const CV *)sv))
987 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Constant subroutine %s undefined",
988 CvANON((const CV *)sv) ? "(anonymous)"
989 : GvENAME(CvGV((const CV *)sv)));
993 /* let user-undef'd sub keep its identity */
994 GV* const gv = CvGV((const CV *)sv);
995 cv_undef(MUTABLE_CV(sv));
996 CvGV_set(MUTABLE_CV(sv), gv);
1001 SvSetMagicSV(sv, &PL_sv_undef);
1004 else if (isGV_with_GP(sv)) {
1008 /* undef *Pkg::meth_name ... */
1010 = GvCVu((const GV *)sv) && (stash = GvSTASH((const GV *)sv))
1011 && HvENAME_get(stash);
1013 if((stash = GvHV((const GV *)sv))) {
1014 if(HvENAME_get(stash))
1015 SvREFCNT_inc_simple_void_NN(sv_2mortal((SV *)stash));
1019 gp_free(MUTABLE_GV(sv));
1021 GvGP_set(sv, gp_ref(gp));
1022 GvSV(sv) = newSV(0);
1023 GvLINE(sv) = CopLINE(PL_curcop);
1024 GvEGV(sv) = MUTABLE_GV(sv);
1028 mro_package_moved(NULL, stash, (const GV *)sv, 0);
1030 /* undef *Foo::ISA */
1031 if( strEQ(GvNAME((const GV *)sv), "ISA")
1032 && (stash = GvSTASH((const GV *)sv))
1033 && (method_changed || HvENAME(stash)) )
1034 mro_isa_changed_in(stash);
1035 else if(method_changed)
1036 mro_method_changed_in(
1037 GvSTASH((const GV *)sv)
1044 if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) {
1059 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
1060 Perl_croak_no_modify(aTHX);
1061 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1062 && SvIVX(TOPs) != IV_MIN)
1064 SvIV_set(TOPs, SvIVX(TOPs) - 1);
1065 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1076 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
1077 Perl_croak_no_modify(aTHX);
1079 TARG = sv_newmortal();
1080 sv_setsv(TARG, TOPs);
1081 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1082 && SvIVX(TOPs) != IV_MAX)
1084 SvIV_set(TOPs, SvIVX(TOPs) + 1);
1085 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1090 /* special case for undef: see thread at 2003-03/msg00536.html in archive */
1100 if (SvTYPE(TOPs) >= SVt_PVAV || isGV_with_GP(TOPs))
1101 Perl_croak_no_modify(aTHX);
1103 TARG = sv_newmortal();
1104 sv_setsv(TARG, TOPs);
1105 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
1106 && SvIVX(TOPs) != IV_MIN)
1108 SvIV_set(TOPs, SvIVX(TOPs) - 1);
1109 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
1118 /* Ordinary operators. */
1122 dVAR; dSP; dATARGET; SV *svl, *svr;
1123 #ifdef PERL_PRESERVE_IVUV
1126 tryAMAGICbin_MG(pow_amg, AMGf_assign|AMGf_numeric);
1129 #ifdef PERL_PRESERVE_IVUV
1130 /* For integer to integer power, we do the calculation by hand wherever
1131 we're sure it is safe; otherwise we call pow() and try to convert to
1132 integer afterwards. */
1134 SvIV_please_nomg(svr);
1136 SvIV_please_nomg(svl);
1145 const IV iv = SvIVX(svr);
1149 goto float_it; /* Can't do negative powers this way. */
1153 baseuok = SvUOK(svl);
1155 baseuv = SvUVX(svl);
1157 const IV iv = SvIVX(svl);
1160 baseuok = TRUE; /* effectively it's a UV now */
1162 baseuv = -iv; /* abs, baseuok == false records sign */
1165 /* now we have integer ** positive integer. */
1168 /* foo & (foo - 1) is zero only for a power of 2. */
1169 if (!(baseuv & (baseuv - 1))) {
1170 /* We are raising power-of-2 to a positive integer.
1171 The logic here will work for any base (even non-integer
1172 bases) but it can be less accurate than
1173 pow (base,power) or exp (power * log (base)) when the
1174 intermediate values start to spill out of the mantissa.
1175 With powers of 2 we know this can't happen.
1176 And powers of 2 are the favourite thing for perl
1177 programmers to notice ** not doing what they mean. */
1179 NV base = baseuok ? baseuv : -(NV)baseuv;
1184 while (power >>= 1) {
1192 SvIV_please_nomg(svr);
1195 register unsigned int highbit = 8 * sizeof(UV);
1196 register unsigned int diff = 8 * sizeof(UV);
1197 while (diff >>= 1) {
1199 if (baseuv >> highbit) {
1203 /* we now have baseuv < 2 ** highbit */
1204 if (power * highbit <= 8 * sizeof(UV)) {
1205 /* result will definitely fit in UV, so use UV math
1206 on same algorithm as above */
1207 register UV result = 1;
1208 register UV base = baseuv;
1209 const bool odd_power = cBOOL(power & 1);
1213 while (power >>= 1) {
1220 if (baseuok || !odd_power)
1221 /* answer is positive */
1223 else if (result <= (UV)IV_MAX)
1224 /* answer negative, fits in IV */
1225 SETi( -(IV)result );
1226 else if (result == (UV)IV_MIN)
1227 /* 2's complement assumption: special case IV_MIN */
1230 /* answer negative, doesn't fit */
1231 SETn( -(NV)result );
1241 NV right = SvNV_nomg(svr);
1242 NV left = SvNV_nomg(svl);
1245 #if defined(USE_LONG_DOUBLE) && defined(HAS_AIX_POWL_NEG_BASE_BUG)
1247 We are building perl with long double support and are on an AIX OS
1248 afflicted with a powl() function that wrongly returns NaNQ for any
1249 negative base. This was reported to IBM as PMR #23047-379 on
1250 03/06/2006. The problem exists in at least the following versions
1251 of AIX and the libm fileset, and no doubt others as well:
1253 AIX 4.3.3-ML10 bos.adt.libm 4.3.3.50
1254 AIX 5.1.0-ML04 bos.adt.libm 5.1.0.29
1255 AIX 5.2.0 bos.adt.libm 5.2.0.85
1257 So, until IBM fixes powl(), we provide the following workaround to
1258 handle the problem ourselves. Our logic is as follows: for
1259 negative bases (left), we use fmod(right, 2) to check if the
1260 exponent is an odd or even integer:
1262 - if odd, powl(left, right) == -powl(-left, right)
1263 - if even, powl(left, right) == powl(-left, right)
1265 If the exponent is not an integer, the result is rightly NaNQ, so
1266 we just return that (as NV_NAN).
1270 NV mod2 = Perl_fmod( right, 2.0 );
1271 if (mod2 == 1.0 || mod2 == -1.0) { /* odd integer */
1272 SETn( -Perl_pow( -left, right) );
1273 } else if (mod2 == 0.0) { /* even integer */
1274 SETn( Perl_pow( -left, right) );
1275 } else { /* fractional power */
1279 SETn( Perl_pow( left, right) );
1282 SETn( Perl_pow( left, right) );
1283 #endif /* HAS_AIX_POWL_NEG_BASE_BUG */
1285 #ifdef PERL_PRESERVE_IVUV
1287 SvIV_please_nomg(svr);
1295 dVAR; dSP; dATARGET; SV *svl, *svr;
1296 tryAMAGICbin_MG(mult_amg, AMGf_assign|AMGf_numeric);
1299 #ifdef PERL_PRESERVE_IVUV
1300 SvIV_please_nomg(svr);
1302 /* Unless the left argument is integer in range we are going to have to
1303 use NV maths. Hence only attempt to coerce the right argument if
1304 we know the left is integer. */
1305 /* Left operand is defined, so is it IV? */
1306 SvIV_please_nomg(svl);
1308 bool auvok = SvUOK(svl);
1309 bool buvok = SvUOK(svr);
1310 const UV topmask = (~ (UV)0) << (4 * sizeof (UV));
1311 const UV botmask = ~((~ (UV)0) << (4 * sizeof (UV)));
1320 const IV aiv = SvIVX(svl);
1323 auvok = TRUE; /* effectively it's a UV now */
1325 alow = -aiv; /* abs, auvok == false records sign */
1331 const IV biv = SvIVX(svr);
1334 buvok = TRUE; /* effectively it's a UV now */
1336 blow = -biv; /* abs, buvok == false records sign */
1340 /* If this does sign extension on unsigned it's time for plan B */
1341 ahigh = alow >> (4 * sizeof (UV));
1343 bhigh = blow >> (4 * sizeof (UV));
1345 if (ahigh && bhigh) {
1347 /* eg 32 bit is at least 0x10000 * 0x10000 == 0x100000000
1348 which is overflow. Drop to NVs below. */
1349 } else if (!ahigh && !bhigh) {
1350 /* eg 32 bit is at most 0xFFFF * 0xFFFF == 0xFFFE0001
1351 so the unsigned multiply cannot overflow. */
1352 const UV product = alow * blow;
1353 if (auvok == buvok) {
1354 /* -ve * -ve or +ve * +ve gives a +ve result. */
1358 } else if (product <= (UV)IV_MIN) {
1359 /* 2s complement assumption that (UV)-IV_MIN is correct. */
1360 /* -ve result, which could overflow an IV */
1362 SETi( -(IV)product );
1364 } /* else drop to NVs below. */
1366 /* One operand is large, 1 small */
1369 /* swap the operands */
1371 bhigh = blow; /* bhigh now the temp var for the swap */
1375 /* now, ((ahigh * blow) << half_UV_len) + (alow * blow)
1376 multiplies can't overflow. shift can, add can, -ve can. */
1377 product_middle = ahigh * blow;
1378 if (!(product_middle & topmask)) {
1379 /* OK, (ahigh * blow) won't lose bits when we shift it. */
1381 product_middle <<= (4 * sizeof (UV));
1382 product_low = alow * blow;
1384 /* as for pp_add, UV + something mustn't get smaller.
1385 IIRC ANSI mandates this wrapping *behaviour* for
1386 unsigned whatever the actual representation*/
1387 product_low += product_middle;
1388 if (product_low >= product_middle) {
1389 /* didn't overflow */
1390 if (auvok == buvok) {
1391 /* -ve * -ve or +ve * +ve gives a +ve result. */
1393 SETu( product_low );
1395 } else if (product_low <= (UV)IV_MIN) {
1396 /* 2s complement assumption again */
1397 /* -ve result, which could overflow an IV */
1399 SETi( -(IV)product_low );
1401 } /* else drop to NVs below. */
1403 } /* product_middle too large */
1404 } /* ahigh && bhigh */
1409 NV right = SvNV_nomg(svr);
1410 NV left = SvNV_nomg(svl);
1412 SETn( left * right );
1419 dVAR; dSP; dATARGET; SV *svl, *svr;
1420 tryAMAGICbin_MG(div_amg, AMGf_assign|AMGf_numeric);
1423 /* Only try to do UV divide first
1424 if ((SLOPPYDIVIDE is true) or
1425 (PERL_PRESERVE_IVUV is true and one or both SV is a UV too large
1427 The assumption is that it is better to use floating point divide
1428 whenever possible, only doing integer divide first if we can't be sure.
1429 If NV_PRESERVES_UV is true then we know at compile time that no UV
1430 can be too large to preserve, so don't need to compile the code to
1431 test the size of UVs. */
1434 # define PERL_TRY_UV_DIVIDE
1435 /* ensure that 20./5. == 4. */
1437 # ifdef PERL_PRESERVE_IVUV
1438 # ifndef NV_PRESERVES_UV
1439 # define PERL_TRY_UV_DIVIDE
1444 #ifdef PERL_TRY_UV_DIVIDE
1445 SvIV_please_nomg(svr);
1447 SvIV_please_nomg(svl);
1449 bool left_non_neg = SvUOK(svl);
1450 bool right_non_neg = SvUOK(svr);
1454 if (right_non_neg) {
1458 const IV biv = SvIVX(svr);
1461 right_non_neg = TRUE; /* effectively it's a UV now */
1467 /* historically undef()/0 gives a "Use of uninitialized value"
1468 warning before dieing, hence this test goes here.
1469 If it were immediately before the second SvIV_please, then
1470 DIE() would be invoked before left was even inspected, so
1471 no inspection would give no warning. */
1473 DIE(aTHX_ "Illegal division by zero");
1479 const IV aiv = SvIVX(svl);
1482 left_non_neg = TRUE; /* effectively it's a UV now */
1491 /* For sloppy divide we always attempt integer division. */
1493 /* Otherwise we only attempt it if either or both operands
1494 would not be preserved by an NV. If both fit in NVs
1495 we fall through to the NV divide code below. However,
1496 as left >= right to ensure integer result here, we know that
1497 we can skip the test on the right operand - right big
1498 enough not to be preserved can't get here unless left is
1501 && (left > ((UV)1 << NV_PRESERVES_UV_BITS))
1504 /* Integer division can't overflow, but it can be imprecise. */
1505 const UV result = left / right;
1506 if (result * right == left) {
1507 SP--; /* result is valid */
1508 if (left_non_neg == right_non_neg) {
1509 /* signs identical, result is positive. */
1513 /* 2s complement assumption */
1514 if (result <= (UV)IV_MIN)
1515 SETi( -(IV)result );
1517 /* It's exact but too negative for IV. */
1518 SETn( -(NV)result );
1521 } /* tried integer divide but it was not an integer result */
1522 } /* else (PERL_ABS(result) < 1.0) or (both UVs in range for NV) */
1523 } /* left wasn't SvIOK */
1524 } /* right wasn't SvIOK */
1525 #endif /* PERL_TRY_UV_DIVIDE */
1527 NV right = SvNV_nomg(svr);
1528 NV left = SvNV_nomg(svl);
1529 (void)POPs;(void)POPs;
1530 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1531 if (! Perl_isnan(right) && right == 0.0)
1535 DIE(aTHX_ "Illegal division by zero");
1536 PUSHn( left / right );
1543 dVAR; dSP; dATARGET;
1544 tryAMAGICbin_MG(modulo_amg, AMGf_assign|AMGf_numeric);
1548 bool left_neg = FALSE;
1549 bool right_neg = FALSE;
1550 bool use_double = FALSE;
1551 bool dright_valid = FALSE;
1554 SV * const svr = TOPs;
1555 SV * const svl = TOPm1s;
1556 SvIV_please_nomg(svr);
1558 right_neg = !SvUOK(svr);
1562 const IV biv = SvIVX(svr);
1565 right_neg = FALSE; /* effectively it's a UV now */
1572 dright = SvNV_nomg(svr);
1573 right_neg = dright < 0;
1576 if (dright < UV_MAX_P1) {
1577 right = U_V(dright);
1578 dright_valid = TRUE; /* In case we need to use double below. */
1584 /* At this point use_double is only true if right is out of range for
1585 a UV. In range NV has been rounded down to nearest UV and
1586 use_double false. */
1587 SvIV_please_nomg(svl);
1588 if (!use_double && SvIOK(svl)) {
1590 left_neg = !SvUOK(svl);
1594 const IV aiv = SvIVX(svl);
1597 left_neg = FALSE; /* effectively it's a UV now */
1605 dleft = SvNV_nomg(svl);
1606 left_neg = dleft < 0;
1610 /* This should be exactly the 5.6 behaviour - if left and right are
1611 both in range for UV then use U_V() rather than floor. */
1613 if (dleft < UV_MAX_P1) {
1614 /* right was in range, so is dleft, so use UVs not double.
1618 /* left is out of range for UV, right was in range, so promote
1619 right (back) to double. */
1621 /* The +0.5 is used in 5.6 even though it is not strictly
1622 consistent with the implicit +0 floor in the U_V()
1623 inside the #if 1. */
1624 dleft = Perl_floor(dleft + 0.5);
1627 dright = Perl_floor(dright + 0.5);
1638 DIE(aTHX_ "Illegal modulus zero");
1640 dans = Perl_fmod(dleft, dright);
1641 if ((left_neg != right_neg) && dans)
1642 dans = dright - dans;
1645 sv_setnv(TARG, dans);
1651 DIE(aTHX_ "Illegal modulus zero");
1654 if ((left_neg != right_neg) && ans)
1657 /* XXX may warn: unary minus operator applied to unsigned type */
1658 /* could change -foo to be (~foo)+1 instead */
1659 if (ans <= ~((UV)IV_MAX)+1)
1660 sv_setiv(TARG, ~ans+1);
1662 sv_setnv(TARG, -(NV)ans);
1665 sv_setuv(TARG, ans);
1674 dVAR; dSP; dATARGET;
1678 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1679 /* TODO: think of some way of doing list-repeat overloading ??? */
1684 tryAMAGICbin_MG(repeat_amg, AMGf_assign);
1690 const UV uv = SvUV_nomg(sv);
1692 count = IV_MAX; /* The best we can do? */
1696 const IV iv = SvIV_nomg(sv);
1703 else if (SvNOKp(sv)) {
1704 const NV nv = SvNV_nomg(sv);
1711 count = SvIV_nomg(sv);
1713 if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
1715 static const char oom_list_extend[] = "Out of memory during list extend";
1716 const I32 items = SP - MARK;
1717 const I32 max = items * count;
1719 MEM_WRAP_CHECK_1(max, SV*, oom_list_extend);
1720 /* Did the max computation overflow? */
1721 if (items > 0 && max > 0 && (max < items || max < count))
1722 Perl_croak(aTHX_ oom_list_extend);
1727 /* This code was intended to fix 20010809.028:
1730 for (($x =~ /./g) x 2) {
1731 print chop; # "abcdabcd" expected as output.
1734 * but that change (#11635) broke this code:
1736 $x = [("foo")x2]; # only one "foo" ended up in the anonlist.
1738 * I can't think of a better fix that doesn't introduce
1739 * an efficiency hit by copying the SVs. The stack isn't
1740 * refcounted, and mortalisation obviously doesn't
1741 * Do The Right Thing when the stack has more than
1742 * one pointer to the same mortal value.
1746 *SP = sv_2mortal(newSVsv(*SP));
1756 repeatcpy((char*)(MARK + items), (char*)MARK,
1757 items * sizeof(const SV *), count - 1);
1760 else if (count <= 0)
1763 else { /* Note: mark already snarfed by pp_list */
1764 SV * const tmpstr = POPs;
1767 static const char oom_string_extend[] =
1768 "Out of memory during string extend";
1771 sv_setsv_nomg(TARG, tmpstr);
1772 SvPV_force_nomg(TARG, len);
1773 isutf = DO_UTF8(TARG);
1778 const STRLEN max = (UV)count * len;
1779 if (len > MEM_SIZE_MAX / count)
1780 Perl_croak(aTHX_ oom_string_extend);
1781 MEM_WRAP_CHECK_1(max, char, oom_string_extend);
1782 SvGROW(TARG, max + 1);
1783 repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
1784 SvCUR_set(TARG, SvCUR(TARG) * count);
1786 *SvEND(TARG) = '\0';
1789 (void)SvPOK_only_UTF8(TARG);
1791 (void)SvPOK_only(TARG);
1793 if (PL_op->op_private & OPpREPEAT_DOLIST) {
1794 /* The parser saw this as a list repeat, and there
1795 are probably several items on the stack. But we're
1796 in scalar context, and there's no pp_list to save us
1797 now. So drop the rest of the items -- robin@kitsite.com
1809 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
1810 tryAMAGICbin_MG(subtr_amg, AMGf_assign|AMGf_numeric);
1813 useleft = USE_LEFT(svl);
1814 #ifdef PERL_PRESERVE_IVUV
1815 /* See comments in pp_add (in pp_hot.c) about Overflow, and how
1816 "bad things" happen if you rely on signed integers wrapping. */
1817 SvIV_please_nomg(svr);
1819 /* Unless the left argument is integer in range we are going to have to
1820 use NV maths. Hence only attempt to coerce the right argument if
1821 we know the left is integer. */
1822 register UV auv = 0;
1828 a_valid = auvok = 1;
1829 /* left operand is undef, treat as zero. */
1831 /* Left operand is defined, so is it IV? */
1832 SvIV_please_nomg(svl);
1834 if ((auvok = SvUOK(svl)))
1837 register const IV aiv = SvIVX(svl);
1840 auvok = 1; /* Now acting as a sign flag. */
1841 } else { /* 2s complement assumption for IV_MIN */
1849 bool result_good = 0;
1852 bool buvok = SvUOK(svr);
1857 register const IV biv = SvIVX(svr);
1864 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
1865 else "IV" now, independent of how it came in.
1866 if a, b represents positive, A, B negative, a maps to -A etc
1871 all UV maths. negate result if A negative.
1872 subtract if signs same, add if signs differ. */
1874 if (auvok ^ buvok) {
1883 /* Must get smaller */
1888 if (result <= buv) {
1889 /* result really should be -(auv-buv). as its negation
1890 of true value, need to swap our result flag */
1902 if (result <= (UV)IV_MIN)
1903 SETi( -(IV)result );
1905 /* result valid, but out of range for IV. */
1906 SETn( -(NV)result );
1910 } /* Overflow, drop through to NVs. */
1915 NV value = SvNV_nomg(svr);
1919 /* left operand is undef, treat as zero - value */
1923 SETn( SvNV_nomg(svl) - value );
1930 dVAR; dSP; dATARGET; SV *svl, *svr;
1931 tryAMAGICbin_MG(lshift_amg, AMGf_assign|AMGf_numeric);
1935 const IV shift = SvIV_nomg(svr);
1936 if (PL_op->op_private & HINT_INTEGER) {
1937 const IV i = SvIV_nomg(svl);
1941 const UV u = SvUV_nomg(svl);
1950 dVAR; dSP; dATARGET; SV *svl, *svr;
1951 tryAMAGICbin_MG(rshift_amg, AMGf_assign|AMGf_numeric);
1955 const IV shift = SvIV_nomg(svr);
1956 if (PL_op->op_private & HINT_INTEGER) {
1957 const IV i = SvIV_nomg(svl);
1961 const UV u = SvUV_nomg(svl);
1973 tryAMAGICbin_MG(lt_amg, AMGf_set|AMGf_numeric);
1977 (SvIOK_notUV(left) && SvIOK_notUV(right))
1978 ? (SvIVX(left) < SvIVX(right))
1979 : (do_ncmp(left, right) == -1)
1989 tryAMAGICbin_MG(gt_amg, AMGf_set|AMGf_numeric);
1993 (SvIOK_notUV(left) && SvIOK_notUV(right))
1994 ? (SvIVX(left) > SvIVX(right))
1995 : (do_ncmp(left, right) == 1)
2005 tryAMAGICbin_MG(le_amg, AMGf_set|AMGf_numeric);
2009 (SvIOK_notUV(left) && SvIOK_notUV(right))
2010 ? (SvIVX(left) <= SvIVX(right))
2011 : (do_ncmp(left, right) <= 0)
2021 tryAMAGICbin_MG(ge_amg, AMGf_set|AMGf_numeric);
2025 (SvIOK_notUV(left) && SvIOK_notUV(right))
2026 ? (SvIVX(left) >= SvIVX(right))
2027 : ( (do_ncmp(left, right) & 2) == 0)
2037 tryAMAGICbin_MG(ne_amg, AMGf_set|AMGf_numeric);
2041 (SvIOK_notUV(left) && SvIOK_notUV(right))
2042 ? (SvIVX(left) != SvIVX(right))
2043 : (do_ncmp(left, right) != 0)
2048 /* compare left and right SVs. Returns:
2052 * 2: left or right was a NaN
2055 Perl_do_ncmp(pTHX_ SV* const left, SV * const right)
2059 PERL_ARGS_ASSERT_DO_NCMP;
2060 #ifdef PERL_PRESERVE_IVUV
2061 SvIV_please_nomg(right);
2062 /* Fortunately it seems NaN isn't IOK */
2064 SvIV_please_nomg(left);
2067 const IV leftiv = SvIVX(left);
2068 if (!SvUOK(right)) {
2069 /* ## IV <=> IV ## */
2070 const IV rightiv = SvIVX(right);
2071 return (leftiv > rightiv) - (leftiv < rightiv);
2073 /* ## IV <=> UV ## */
2075 /* As (b) is a UV, it's >=0, so it must be < */
2078 const UV rightuv = SvUVX(right);
2079 return ((UV)leftiv > rightuv) - ((UV)leftiv < rightuv);
2084 /* ## UV <=> UV ## */
2085 const UV leftuv = SvUVX(left);
2086 const UV rightuv = SvUVX(right);
2087 return (leftuv > rightuv) - (leftuv < rightuv);
2089 /* ## UV <=> IV ## */
2091 const IV rightiv = SvIVX(right);
2093 /* As (a) is a UV, it's >=0, so it cannot be < */
2096 const UV leftuv = SvUVX(left);
2097 return (leftuv > (UV)rightiv) - (leftuv < (UV)rightiv);
2105 NV const rnv = SvNV_nomg(right);
2106 NV const lnv = SvNV_nomg(left);
2108 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2109 if (Perl_isnan(lnv) || Perl_isnan(rnv)) {
2112 return (lnv > rnv) - (lnv < rnv);
2131 tryAMAGICbin_MG(ncmp_amg, AMGf_numeric);
2134 value = do_ncmp(left, right);
2149 int amg_type = sle_amg;
2153 switch (PL_op->op_type) {
2172 tryAMAGICbin_MG(amg_type, AMGf_set);
2175 const int cmp = (IN_LOCALE_RUNTIME
2176 ? sv_cmp_locale_flags(left, right, 0)
2177 : sv_cmp_flags(left, right, 0));
2178 SETs(boolSV(cmp * multiplier < rhs));
2186 tryAMAGICbin_MG(seq_amg, AMGf_set);
2189 SETs(boolSV(sv_eq_flags(left, right, 0)));
2197 tryAMAGICbin_MG(sne_amg, AMGf_set);
2200 SETs(boolSV(!sv_eq_flags(left, right, 0)));
2208 tryAMAGICbin_MG(scmp_amg, 0);
2211 const int cmp = (IN_LOCALE_RUNTIME
2212 ? sv_cmp_locale_flags(left, right, 0)
2213 : sv_cmp_flags(left, right, 0));
2221 dVAR; dSP; dATARGET;
2222 tryAMAGICbin_MG(band_amg, AMGf_assign);
2225 if (SvNIOKp(left) || SvNIOKp(right)) {
2226 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2227 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2228 if (PL_op->op_private & HINT_INTEGER) {
2229 const IV i = SvIV_nomg(left) & SvIV_nomg(right);
2233 const UV u = SvUV_nomg(left) & SvUV_nomg(right);
2236 if (left_ro_nonnum) SvNIOK_off(left);
2237 if (right_ro_nonnum) SvNIOK_off(right);
2240 do_vop(PL_op->op_type, TARG, left, right);
2249 dVAR; dSP; dATARGET;
2250 const int op_type = PL_op->op_type;
2252 tryAMAGICbin_MG((op_type == OP_BIT_OR ? bor_amg : bxor_amg), AMGf_assign);
2255 if (SvNIOKp(left) || SvNIOKp(right)) {
2256 const bool left_ro_nonnum = !SvNIOKp(left) && SvREADONLY(left);
2257 const bool right_ro_nonnum = !SvNIOKp(right) && SvREADONLY(right);
2258 if (PL_op->op_private & HINT_INTEGER) {
2259 const IV l = (USE_LEFT(left) ? SvIV_nomg(left) : 0);
2260 const IV r = SvIV_nomg(right);
2261 const IV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2265 const UV l = (USE_LEFT(left) ? SvUV_nomg(left) : 0);
2266 const UV r = SvUV_nomg(right);
2267 const UV result = op_type == OP_BIT_OR ? (l | r) : (l ^ r);
2270 if (left_ro_nonnum) SvNIOK_off(left);
2271 if (right_ro_nonnum) SvNIOK_off(right);
2274 do_vop(op_type, TARG, left, right);
2284 tryAMAGICun_MG(neg_amg, AMGf_numeric);
2286 SV * const sv = TOPs;
2287 const int flags = SvFLAGS(sv);
2289 if( !SvNIOK( sv ) && looks_like_number( sv ) ){
2293 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
2294 /* It's publicly an integer, or privately an integer-not-float */
2297 if (SvIVX(sv) == IV_MIN) {
2298 /* 2s complement assumption. */
2299 SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) == IV_MIN */
2302 else if (SvUVX(sv) <= IV_MAX) {
2307 else if (SvIVX(sv) != IV_MIN) {
2311 #ifdef PERL_PRESERVE_IVUV
2319 SETn(-SvNV_nomg(sv));
2320 else if (SvPOKp(sv)) {
2322 const char * const s = SvPV_nomg_const(sv, len);
2323 if (isIDFIRST(*s)) {
2324 sv_setpvs(TARG, "-");
2327 else if (*s == '+' || *s == '-') {
2328 sv_setsv_nomg(TARG, sv);
2329 *SvPV_force_nomg(TARG, len) = *s == '-' ? '+' : '-';
2331 else if (DO_UTF8(sv)) {
2332 SvIV_please_nomg(sv);
2334 goto oops_its_an_int;
2336 sv_setnv(TARG, -SvNV_nomg(sv));
2338 sv_setpvs(TARG, "-");
2343 SvIV_please_nomg(sv);
2345 goto oops_its_an_int;
2346 sv_setnv(TARG, -SvNV_nomg(sv));
2351 SETn(-SvNV_nomg(sv));
2359 tryAMAGICun_MG(not_amg, AMGf_set);
2360 *PL_stack_sp = boolSV(!SvTRUE_nomg(*PL_stack_sp));
2367 tryAMAGICun_MG(compl_amg, AMGf_numeric);
2371 if (PL_op->op_private & HINT_INTEGER) {
2372 const IV i = ~SvIV_nomg(sv);
2376 const UV u = ~SvUV_nomg(sv);
2385 (void)SvPV_nomg_const(sv,len); /* force check for uninit var */
2386 sv_setsv_nomg(TARG, sv);
2387 tmps = (U8*)SvPV_force_nomg(TARG, len);
2390 /* Calculate exact length, let's not estimate. */
2395 U8 * const send = tmps + len;
2396 U8 * const origtmps = tmps;
2397 const UV utf8flags = UTF8_ALLOW_ANYUV;
2399 while (tmps < send) {
2400 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2402 targlen += UNISKIP(~c);
2408 /* Now rewind strings and write them. */
2415 Newx(result, targlen + 1, U8);
2417 while (tmps < send) {
2418 const UV c = utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2420 p = uvchr_to_utf8_flags(p, ~c, UNICODE_ALLOW_ANY);
2423 sv_usepvn_flags(TARG, (char*)result, targlen,
2424 SV_HAS_TRAILING_NUL);
2431 Newx(result, nchar + 1, U8);
2433 while (tmps < send) {
2434 const U8 c = (U8)utf8n_to_uvchr(tmps, send-tmps, &l, utf8flags);
2439 sv_usepvn_flags(TARG, (char*)result, nchar, SV_HAS_TRAILING_NUL);
2447 register long *tmpl;
2448 for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
2451 for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
2456 for ( ; anum > 0; anum--, tmps++)
2464 /* integer versions of some of the above */
2468 dVAR; dSP; dATARGET;
2469 tryAMAGICbin_MG(mult_amg, AMGf_assign);
2472 SETi( left * right );
2480 dVAR; dSP; dATARGET;
2481 tryAMAGICbin_MG(div_amg, AMGf_assign);
2484 IV value = SvIV_nomg(right);
2486 DIE(aTHX_ "Illegal division by zero");
2487 num = SvIV_nomg(left);
2489 /* avoid FPE_INTOVF on some platforms when num is IV_MIN */
2493 value = num / value;
2499 #if defined(__GLIBC__) && IVSIZE == 8
2506 /* This is the vanilla old i_modulo. */
2507 dVAR; dSP; dATARGET;
2508 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2512 DIE(aTHX_ "Illegal modulus zero");
2513 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2517 SETi( left % right );
2522 #if defined(__GLIBC__) && IVSIZE == 8
2527 /* This is the i_modulo with the workaround for the _moddi3 bug
2528 * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
2529 * See below for pp_i_modulo. */
2530 dVAR; dSP; dATARGET;
2531 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2535 DIE(aTHX_ "Illegal modulus zero");
2536 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2540 SETi( left % PERL_ABS(right) );
2547 dVAR; dSP; dATARGET;
2548 tryAMAGICbin_MG(modulo_amg, AMGf_assign);
2552 DIE(aTHX_ "Illegal modulus zero");
2553 /* The assumption is to use hereafter the old vanilla version... */
2555 PL_ppaddr[OP_I_MODULO] =
2557 /* .. but if we have glibc, we might have a buggy _moddi3
2558 * (at least glicb 2.2.5 is known to have this bug), in other
2559 * words our integer modulus with negative quad as the second
2560 * argument might be broken. Test for this and re-patch the
2561 * opcode dispatch table if that is the case, remembering to
2562 * also apply the workaround so that this first round works
2563 * right, too. See [perl #9402] for more information. */
2567 /* Cannot do this check with inlined IV constants since
2568 * that seems to work correctly even with the buggy glibc. */
2570 /* Yikes, we have the bug.
2571 * Patch in the workaround version. */
2573 PL_ppaddr[OP_I_MODULO] =
2574 &Perl_pp_i_modulo_1;
2575 /* Make certain we work right this time, too. */
2576 right = PERL_ABS(right);
2579 /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
2583 SETi( left % right );
2591 dVAR; dSP; dATARGET;
2592 tryAMAGICbin_MG(add_amg, AMGf_assign);
2594 dPOPTOPiirl_ul_nomg;
2595 SETi( left + right );
2602 dVAR; dSP; dATARGET;
2603 tryAMAGICbin_MG(subtr_amg, AMGf_assign);
2605 dPOPTOPiirl_ul_nomg;
2606 SETi( left - right );
2614 tryAMAGICbin_MG(lt_amg, AMGf_set);
2617 SETs(boolSV(left < right));
2625 tryAMAGICbin_MG(gt_amg, AMGf_set);
2628 SETs(boolSV(left > right));
2636 tryAMAGICbin_MG(le_amg, AMGf_set);
2639 SETs(boolSV(left <= right));
2647 tryAMAGICbin_MG(ge_amg, AMGf_set);
2650 SETs(boolSV(left >= right));
2658 tryAMAGICbin_MG(eq_amg, AMGf_set);
2661 SETs(boolSV(left == right));
2669 tryAMAGICbin_MG(ne_amg, AMGf_set);
2672 SETs(boolSV(left != right));
2680 tryAMAGICbin_MG(ncmp_amg, 0);
2687 else if (left < right)
2699 tryAMAGICun_MG(neg_amg, 0);
2701 SV * const sv = TOPs;
2702 IV const i = SvIV_nomg(sv);
2708 /* High falutin' math. */
2713 tryAMAGICbin_MG(atan2_amg, 0);
2716 SETn(Perl_atan2(left, right));
2724 int amg_type = sin_amg;
2725 const char *neg_report = NULL;
2726 NV (*func)(NV) = Perl_sin;
2727 const int op_type = PL_op->op_type;
2744 amg_type = sqrt_amg;
2746 neg_report = "sqrt";
2751 tryAMAGICun_MG(amg_type, 0);
2753 SV * const arg = POPs;
2754 const NV value = SvNV_nomg(arg);
2756 if (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0)) {
2757 SET_NUMERIC_STANDARD();
2758 DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
2761 XPUSHn(func(value));
2766 /* Support Configure command-line overrides for rand() functions.
2767 After 5.005, perhaps we should replace this by Configure support
2768 for drand48(), random(), or rand(). For 5.005, though, maintain
2769 compatibility by calling rand() but allow the user to override it.
2770 See INSTALL for details. --Andy Dougherty 15 July 1998
2772 /* Now it's after 5.005, and Configure supports drand48() and random(),
2773 in addition to rand(). So the overrides should not be needed any more.
2774 --Jarkko Hietaniemi 27 September 1998
2777 #ifndef HAS_DRAND48_PROTO
2778 extern double drand48 (void);
2788 value = 1.0; (void)POPs;
2794 if (!PL_srand_called) {
2795 (void)seedDrand01((Rand_seed_t)seed());
2796 PL_srand_called = TRUE;
2806 const UV anum = (MAXARG < 1 || (!TOPs && !POPs)) ? seed() : POPu;
2807 (void)seedDrand01((Rand_seed_t)anum);
2808 PL_srand_called = TRUE;
2812 /* Historically srand always returned true. We can avoid breaking
2814 sv_setpvs(TARG, "0 but true");
2823 tryAMAGICun_MG(int_amg, AMGf_numeric);
2825 SV * const sv = TOPs;
2826 const IV iv = SvIV_nomg(sv);
2827 /* XXX it's arguable that compiler casting to IV might be subtly
2828 different from modf (for numbers inside (IV_MIN,UV_MAX)) in which
2829 else preferring IV has introduced a subtle behaviour change bug. OTOH
2830 relying on floating point to be accurate is a bug. */
2835 else if (SvIOK(sv)) {
2837 SETu(SvUV_nomg(sv));
2842 const NV value = SvNV_nomg(sv);
2844 if (value < (NV)UV_MAX + 0.5) {
2847 SETn(Perl_floor(value));
2851 if (value > (NV)IV_MIN - 0.5) {
2854 SETn(Perl_ceil(value));
2865 tryAMAGICun_MG(abs_amg, AMGf_numeric);
2867 SV * const sv = TOPs;
2868 /* This will cache the NV value if string isn't actually integer */
2869 const IV iv = SvIV_nomg(sv);
2874 else if (SvIOK(sv)) {
2875 /* IVX is precise */
2877 SETu(SvUV_nomg(sv)); /* force it to be numeric only */
2885 /* 2s complement assumption. Also, not really needed as
2886 IV_MIN and -IV_MIN should both be %100...00 and NV-able */
2892 const NV value = SvNV_nomg(sv);
2906 I32 flags = PERL_SCAN_ALLOW_UNDERSCORES;
2910 SV* const sv = POPs;
2912 tmps = (SvPV_const(sv, len));
2914 /* If Unicode, try to downgrade
2915 * If not possible, croak. */
2916 SV* const tsv = sv_2mortal(newSVsv(sv));
2919 sv_utf8_downgrade(tsv, FALSE);
2920 tmps = SvPV_const(tsv, len);
2922 if (PL_op->op_type == OP_HEX)
2925 while (*tmps && len && isSPACE(*tmps))
2929 if (*tmps == 'x' || *tmps == 'X') {
2931 result_uv = grok_hex (tmps, &len, &flags, &result_nv);
2933 else if (*tmps == 'b' || *tmps == 'B')
2934 result_uv = grok_bin (tmps, &len, &flags, &result_nv);
2936 result_uv = grok_oct (tmps, &len, &flags, &result_nv);
2938 if (flags & PERL_SCAN_GREATER_THAN_UV_MAX) {
2952 SV * const sv = TOPs;
2954 if (SvGAMAGIC(sv)) {
2955 /* For an overloaded or magic scalar, we can't know in advance if
2956 it's going to be UTF-8 or not. Also, we can't call sv_len_utf8 as
2957 it likes to cache the length. Maybe that should be a documented
2962 = sv_2pv_flags(sv, &len,
2963 SV_UNDEF_RETURNS_NULL|SV_CONST_RETURN|SV_GMAGIC);
2966 if (!SvPADTMP(TARG)) {
2967 sv_setsv(TARG, &PL_sv_undef);
2972 else if (DO_UTF8(sv)) {
2973 SETi(utf8_length((U8*)p, (U8*)p + len));
2977 } else if (SvOK(sv)) {
2978 /* Neither magic nor overloaded. */
2980 SETi(sv_len_utf8(sv));
2984 if (!SvPADTMP(TARG)) {
2985 sv_setsv_nomg(TARG, &PL_sv_undef);
3007 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3009 const IV arybase = CopARYBASE_get(PL_curcop);
3011 const char *repl = NULL;
3013 int num_args = PL_op->op_private & 7;
3014 bool repl_need_utf8_upgrade = FALSE;
3015 bool repl_is_utf8 = FALSE;
3019 if((repl_sv = POPs)) {
3020 repl = SvPV_const(repl_sv, repl_len);
3021 repl_is_utf8 = DO_UTF8(repl_sv) && SvCUR(repl_sv);
3025 if ((len_sv = POPs)) {
3026 len_iv = SvIV(len_sv);
3027 len_is_uv = SvIOK_UV(len_sv);
3032 pos1_iv = SvIV(pos_sv);
3033 pos1_is_uv = SvIOK_UV(pos_sv);
3039 sv_utf8_upgrade(sv);
3041 else if (DO_UTF8(sv))
3042 repl_need_utf8_upgrade = TRUE;
3044 tmps = SvPV_const(sv, curlen);
3046 utf8_curlen = sv_len_utf8(sv);
3047 if (utf8_curlen == curlen)
3050 curlen = utf8_curlen;
3055 if ( (pos1_is_uv && arybase < 0) || (pos1_iv >= arybase) ) { /* pos >= $[ */
3056 UV pos1_uv = pos1_iv-arybase;
3057 /* Overflow can occur when $[ < 0 */
3058 if (arybase < 0 && pos1_uv < (UV)pos1_iv)
3063 else if (pos1_is_uv ? (UV)pos1_iv > 0 : pos1_iv > 0) {
3064 goto bound_fail; /* $[=3; substr($_,2,...) */
3066 else { /* pos < $[ */
3067 if (pos1_iv == 0) { /* $[=1; substr($_,0,...) */
3072 pos1_is_uv = curlen-1 > ~(UV)pos1_iv;
3077 if (pos1_is_uv || pos1_iv > 0) {
3078 if ((UV)pos1_iv > curlen)
3083 if (!len_is_uv && len_iv < 0) {
3084 pos2_iv = curlen + len_iv;
3086 pos2_is_uv = curlen-1 > ~(UV)len_iv;
3089 } else { /* len_iv >= 0 */
3090 if (!pos1_is_uv && pos1_iv < 0) {
3091 pos2_iv = pos1_iv + len_iv;
3092 pos2_is_uv = (UV)len_iv > (UV)IV_MAX;
3094 if ((UV)len_iv > curlen-(UV)pos1_iv)
3097 pos2_iv = pos1_iv+len_iv;
3107 if (!pos2_is_uv && pos2_iv < 0) {
3108 if (!pos1_is_uv && pos1_iv < 0)
3112 else if (!pos1_is_uv && pos1_iv < 0)
3115 if ((UV)pos2_iv < (UV)pos1_iv)
3117 if ((UV)pos2_iv > curlen)
3121 /* pos1_iv and pos2_iv both in 0..curlen, so the cast is safe */
3122 const STRLEN pos = (STRLEN)( (UV)pos1_iv );
3123 const STRLEN len = (STRLEN)( (UV)pos2_iv - (UV)pos1_iv );
3124 STRLEN byte_len = len;
3125 STRLEN byte_pos = utf8_curlen
3126 ? sv_pos_u2b_flags(sv, pos, &byte_len, SV_CONST_RETURN) : pos;
3128 if (lvalue && !repl) {
3131 if (!SvGMAGICAL(sv)) {
3133 SvPV_force_nolen(sv);
3134 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
3135 "Attempt to use reference as lvalue in substr");
3137 if (isGV_with_GP(sv))
3138 SvPV_force_nolen(sv);
3139 else if (SvOK(sv)) /* is it defined ? */
3140 (void)SvPOK_only_UTF8(sv);
3142 sv_setpvs(sv, ""); /* avoid lexical reincarnation */
3145 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3146 sv_magic(ret, NULL, PERL_MAGIC_substr, NULL, 0);
3148 LvTARG(ret) = SvREFCNT_inc_simple(sv);
3149 LvTARGOFF(ret) = pos;
3150 LvTARGLEN(ret) = len;
3153 PUSHs(ret); /* avoid SvSETMAGIC here */
3157 SvTAINTED_off(TARG); /* decontaminate */
3158 SvUTF8_off(TARG); /* decontaminate */
3161 sv_setpvn(TARG, tmps, byte_len);
3162 #ifdef USE_LOCALE_COLLATE
3163 sv_unmagic(TARG, PERL_MAGIC_collxfrm);
3169 SV* repl_sv_copy = NULL;
3171 if (repl_need_utf8_upgrade) {
3172 repl_sv_copy = newSVsv(repl_sv);
3173 sv_utf8_upgrade(repl_sv_copy);
3174 repl = SvPV_const(repl_sv_copy, repl_len);
3175 repl_is_utf8 = DO_UTF8(repl_sv_copy) && SvCUR(sv);
3179 sv_insert_flags(sv, byte_pos, byte_len, repl, repl_len, 0);
3182 SvREFCNT_dec(repl_sv_copy);
3192 Perl_croak(aTHX_ "substr outside of string");
3193 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
3200 register const IV size = POPi;
3201 register const IV offset = POPi;
3202 register SV * const src = POPs;
3203 const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
3206 if (lvalue) { /* it's an lvalue! */
3207 ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
3208 sv_magic(ret, NULL, PERL_MAGIC_vec, NULL, 0);
3210 LvTARG(ret) = SvREFCNT_inc_simple(src);
3211 LvTARGOFF(ret) = offset;
3212 LvTARGLEN(ret) = size;
3216 SvTAINTED_off(TARG); /* decontaminate */
3220 sv_setuv(ret, do_vecget(src, offset, size));
3236 const char *little_p;
3237 const I32 arybase = CopARYBASE_get(PL_curcop);
3240 const bool is_index = PL_op->op_type == OP_INDEX;
3241 const bool threeargs = MAXARG >= 3 && (TOPs || ((void)POPs,0));
3244 /* arybase is in characters, like offset, so combine prior to the
3245 UTF-8 to bytes calculation. */
3246 offset = POPi - arybase;
3250 big_p = SvPV_const(big, biglen);
3251 little_p = SvPV_const(little, llen);
3253 big_utf8 = DO_UTF8(big);
3254 little_utf8 = DO_UTF8(little);
3255 if (big_utf8 ^ little_utf8) {
3256 /* One needs to be upgraded. */
3257 if (little_utf8 && !PL_encoding) {
3258 /* Well, maybe instead we might be able to downgrade the small
3260 char * const pv = (char*)bytes_from_utf8((U8 *)little_p, &llen,
3263 /* If the large string is ISO-8859-1, and it's not possible to
3264 convert the small string to ISO-8859-1, then there is no
3265 way that it could be found anywhere by index. */
3270 /* At this point, pv is a malloc()ed string. So donate it to temp
3271 to ensure it will get free()d */
3272 little = temp = newSV(0);
3273 sv_usepvn(temp, pv, llen);
3274 little_p = SvPVX(little);
3277 ? newSVpvn(big_p, biglen) : newSVpvn(little_p, llen);
3280 sv_recode_to_utf8(temp, PL_encoding);
3282 sv_utf8_upgrade(temp);
3287 big_p = SvPV_const(big, biglen);
3290 little_p = SvPV_const(little, llen);
3294 if (SvGAMAGIC(big)) {
3295 /* Life just becomes a lot easier if I use a temporary here.
3296 Otherwise I need to avoid calls to sv_pos_u2b(), which (dangerously)
3297 will trigger magic and overloading again, as will fbm_instr()
3299 big = newSVpvn_flags(big_p, biglen,
3300 SVs_TEMP | (big_utf8 ? SVf_UTF8 : 0));
3303 if (SvGAMAGIC(little) || (is_index && !SvOK(little))) {
3304 /* index && SvOK() is a hack. fbm_instr() calls SvPV_const, which will
3305 warn on undef, and we've already triggered a warning with the
3306 SvPV_const some lines above. We can't remove that, as we need to
3307 call some SvPV to trigger overloading early and find out if the
3309 This is all getting to messy. The API isn't quite clean enough,
3310 because data access has side effects.
3312 little = newSVpvn_flags(little_p, llen,
3313 SVs_TEMP | (little_utf8 ? SVf_UTF8 : 0));
3314 little_p = SvPVX(little);
3318 offset = is_index ? 0 : biglen;
3320 if (big_utf8 && offset > 0)
3321 sv_pos_u2b(big, &offset, 0);
3327 else if (offset > (I32)biglen)
3329 if (!(little_p = is_index
3330 ? fbm_instr((unsigned char*)big_p + offset,
3331 (unsigned char*)big_p + biglen, little, 0)
3332 : rninstr(big_p, big_p + offset,
3333 little_p, little_p + llen)))
3336 retval = little_p - big_p;
3337 if (retval > 0 && big_utf8)
3338 sv_pos_b2u(big, &retval);
3342 PUSHi(retval + arybase);
3348 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
3349 SvTAINTED_off(TARG);
3350 do_sprintf(TARG, SP-MARK, MARK+1);
3351 TAINT_IF(SvTAINTED(TARG));
3363 const U8 *s = (U8*)SvPV_const(argsv, len);
3365 if (PL_encoding && SvPOK(argsv) && !DO_UTF8(argsv)) {
3366 SV * const tmpsv = sv_2mortal(newSVsv(argsv));
3367 s = (U8*)sv_recode_to_utf8(tmpsv, PL_encoding);
3371 XPUSHu(DO_UTF8(argsv) ?
3372 utf8n_to_uvchr(s, UTF8_MAXBYTES, 0, UTF8_ALLOW_ANYUV) :
3384 if (((SvIOK_notUV(TOPs) && SvIV(TOPs) < 0)
3386 (SvNOK(TOPs) && SvNV(TOPs) < 0.0))) {
3388 value = POPu; /* chr(-1) eq chr(0xff), etc. */
3390 (void) POPs; /* Ignore the argument value. */
3391 value = UNICODE_REPLACEMENT;
3397 SvUPGRADE(TARG,SVt_PV);
3399 if (value > 255 && !IN_BYTES) {
3400 SvGROW(TARG, (STRLEN)UNISKIP(value)+1);
3401 tmps = (char*)uvchr_to_utf8_flags((U8*)SvPVX(TARG), value, 0);
3402 SvCUR_set(TARG, tmps - SvPVX_const(TARG));
3404 (void)SvPOK_only(TARG);
3413 *tmps++ = (char)value;
3415 (void)SvPOK_only(TARG);
3417 if (PL_encoding && !IN_BYTES) {
3418 sv_recode_to_utf8(TARG, PL_encoding);
3420 if (SvCUR(TARG) == 0 || !is_utf8_string((U8*)tmps, SvCUR(TARG)) ||
3421 UNICODE_IS_REPLACEMENT(utf8_to_uvchr((U8*)tmps, NULL))) {
3425 *tmps++ = (char)value;
3441 const char *tmps = SvPV_const(left, len);
3443 if (DO_UTF8(left)) {
3444 /* If Unicode, try to downgrade.
3445 * If not possible, croak.
3446 * Yes, we made this up. */
3447 SV* const tsv = sv_2mortal(newSVsv(left));
3450 sv_utf8_downgrade(tsv, FALSE);
3451 tmps = SvPV_const(tsv, len);
3453 # ifdef USE_ITHREADS
3455 if (!PL_reentrant_buffer->_crypt_struct_buffer) {
3456 /* This should be threadsafe because in ithreads there is only
3457 * one thread per interpreter. If this would not be true,
3458 * we would need a mutex to protect this malloc. */
3459 PL_reentrant_buffer->_crypt_struct_buffer =
3460 (struct crypt_data *)safemalloc(sizeof(struct crypt_data));
3461 #if defined(__GLIBC__) || defined(__EMX__)
3462 if (PL_reentrant_buffer->_crypt_struct_buffer) {
3463 PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
3464 /* work around glibc-2.2.5 bug */
3465 PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
3469 # endif /* HAS_CRYPT_R */
3470 # endif /* USE_ITHREADS */
3472 sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
3474 sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
3480 "The crypt() function is unimplemented due to excessive paranoia.");
3484 /* Generally UTF-8 and UTF-EBCDIC are indistinguishable at this level. So
3485 * most comments below say UTF-8, when in fact they mean UTF-EBCDIC as well */
3487 /* Below are several macros that generate code */
3488 /* Generates code to store a unicode codepoint c that is known to occupy
3489 * exactly two UTF-8 and UTF-EBCDIC bytes; it is stored into p and p+1. */
3490 #define STORE_UNI_TO_UTF8_TWO_BYTE(p, c) \
3492 *(p) = UTF8_TWO_BYTE_HI(c); \
3493 *((p)+1) = UTF8_TWO_BYTE_LO(c); \
3496 /* Like STORE_UNI_TO_UTF8_TWO_BYTE, but advances p to point to the next
3497 * available byte after the two bytes */
3498 #define CAT_UNI_TO_UTF8_TWO_BYTE(p, c) \
3500 *(p)++ = UTF8_TWO_BYTE_HI(c); \
3501 *((p)++) = UTF8_TWO_BYTE_LO(c); \
3504 /* Generates code to store the upper case of latin1 character l which is known
3505 * to have its upper case be non-latin1 into the two bytes p and p+1. There
3506 * are only two characters that fit this description, and this macro knows
3507 * about them, and that the upper case values fit into two UTF-8 or UTF-EBCDIC
3509 #define STORE_NON_LATIN1_UC(p, l) \
3511 if ((l) == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS) { \
3512 STORE_UNI_TO_UTF8_TWO_BYTE((p), LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS); \
3513 } else { /* Must be the following letter */ \
3514 STORE_UNI_TO_UTF8_TWO_BYTE((p), GREEK_CAPITAL_LETTER_MU); \
3518 /* Like STORE_NON_LATIN1_UC, but advances p to point to the next available byte
3519 * after the character stored */
3520 #define CAT_NON_LATIN1_UC(p, l) \
3522 if ((l) == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS) { \
3523 CAT_UNI_TO_UTF8_TWO_BYTE((p), LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS); \
3525 CAT_UNI_TO_UTF8_TWO_BYTE((p), GREEK_CAPITAL_LETTER_MU); \
3529 /* Generates code to add the two UTF-8 bytes (probably u) that are the upper
3530 * case of l into p and p+1. u must be the result of toUPPER_LATIN1_MOD(l),
3531 * and must require two bytes to store it. Advances p to point to the next
3532 * available position */
3533 #define CAT_TWO_BYTE_UNI_UPPER_MOD(p, l, u) \
3535 if ((u) != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS) { \
3536 CAT_UNI_TO_UTF8_TWO_BYTE((p), (u)); /* not special, just save it */ \
3537 } else if (l == LATIN_SMALL_LETTER_SHARP_S) { \
3538 *(p)++ = 'S'; *(p)++ = 'S'; /* upper case is 'SS' */ \
3539 } else {/* else is one of the other two special cases */ \
3540 CAT_NON_LATIN1_UC((p), (l)); \
3546 /* Actually is both lcfirst() and ucfirst(). Only the first character
3547 * changes. This means that possibly we can change in-place, ie., just
3548 * take the source and change that one character and store it back, but not
3549 * if read-only etc, or if the length changes */
3554 STRLEN slen; /* slen is the byte length of the whole SV. */
3557 bool inplace; /* ? Convert first char only, in-place */
3558 bool doing_utf8 = FALSE; /* ? using utf8 */
3559 bool convert_source_to_utf8 = FALSE; /* ? need to convert */
3560 const int op_type = PL_op->op_type;
3563 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
3564 STRLEN ulen; /* ulen is the byte length of the original Unicode character
3565 * stored as UTF-8 at s. */
3566 STRLEN tculen; /* tculen is the byte length of the freshly titlecased (or
3567 * lowercased) character stored in tmpbuf. May be either
3568 * UTF-8 or not, but in either case is the number of bytes */
3572 s = (const U8*)SvPV_nomg_const(source, slen);
3574 if (ckWARN(WARN_UNINITIALIZED))
3575 report_uninit(source);
3580 /* We may be able to get away with changing only the first character, in
3581 * place, but not if read-only, etc. Later we may discover more reasons to
3582 * not convert in-place. */
3583 inplace = SvPADTMP(source) && !SvREADONLY(source) && SvTEMP(source);
3585 /* First calculate what the changed first character should be. This affects
3586 * whether we can just swap it out, leaving the rest of the string unchanged,
3587 * or even if have to convert the dest to UTF-8 when the source isn't */
3589 if (! slen) { /* If empty */
3590 need = 1; /* still need a trailing NUL */
3592 else if (DO_UTF8(source)) { /* Is the source utf8? */
3595 if (UTF8_IS_INVARIANT(*s)) {
3597 /* An invariant source character is either ASCII or, in EBCDIC, an
3598 * ASCII equivalent or a caseless C1 control. In both these cases,
3599 * the lower and upper cases of any character are also invariants
3600 * (and title case is the same as upper case). So it is safe to
3601 * use the simple case change macros which avoid the overhead of
3602 * the general functions. Note that if perl were to be extended to
3603 * do locale handling in UTF-8 strings, this wouldn't be true in,
3604 * for example, Lithuanian or Turkic. */
3605 *tmpbuf = (op_type == OP_LCFIRST) ? toLOWER(*s) : toUPPER(*s);
3609 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
3612 /* Similarly, if the source character isn't invariant but is in the
3613 * latin1 range (or EBCDIC equivalent thereof), we have the case
3614 * changes compiled into perl, and can avoid the overhead of the
3615 * general functions. In this range, the characters are stored as
3616 * two UTF-8 bytes, and it so happens that any changed-case version
3617 * is also two bytes (in both ASCIIish and EBCDIC machines). */
3621 /* Convert the two source bytes to a single Unicode code point
3622 * value, change case and save for below */
3623 chr = TWO_BYTE_UTF8_TO_UNI(*s, *(s+1));
3624 if (op_type == OP_LCFIRST) { /* lower casing is easy */
3625 U8 lower = toLOWER_LATIN1(chr);
3626 STORE_UNI_TO_UTF8_TWO_BYTE(tmpbuf, lower);
3628 else { /* ucfirst */
3629 U8 upper = toUPPER_LATIN1_MOD(chr);
3631 /* Most of the latin1 range characters are well-behaved. Their
3632 * title and upper cases are the same, and are also in the
3633 * latin1 range. The macro above returns their upper (hence
3634 * title) case, and all that need be done is to save the result
3635 * for below. However, several characters are problematic, and
3636 * have to be handled specially. The MOD in the macro name
3637 * above means that these tricky characters all get mapped to
3638 * the single character LATIN_SMALL_LETTER_Y_WITH_DIAERESIS.
3639 * This mapping saves some tests for the majority of the
3642 if (upper != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS) {
3644 /* Not tricky. Just save it. */
3645 STORE_UNI_TO_UTF8_TWO_BYTE(tmpbuf, upper);
3647 else if (chr == LATIN_SMALL_LETTER_SHARP_S) {
3649 /* This one is tricky because it is two characters long,
3650 * though the UTF-8 is still two bytes, so the stored
3651 * length doesn't change */
3652 *tmpbuf = 'S'; /* The UTF-8 is 'Ss' */
3653 *(tmpbuf + 1) = 's';
3657 /* The other two have their title and upper cases the same,
3658 * but are tricky because the changed-case characters
3659 * aren't in the latin1 range. They, however, do fit into
3660 * two UTF-8 bytes */
3661 STORE_NON_LATIN1_UC(tmpbuf, chr);
3667 /* Here, can't short-cut the general case */
3669 utf8_to_uvchr(s, &ulen);
3670 if (op_type == OP_UCFIRST) toTITLE_utf8(s, tmpbuf, &tculen);
3671 else toLOWER_utf8(s, tmpbuf, &tculen);
3673 /* we can't do in-place if the length changes. */
3674 if (ulen != tculen) inplace = FALSE;
3675 need = slen + 1 - ulen + tculen;
3678 else { /* Non-zero length, non-UTF-8, Need to consider locale and if
3679 * latin1 is treated as caseless. Note that a locale takes
3681 tculen = 1; /* Most characters will require one byte, but this will
3682 * need to be overridden for the tricky ones */
3685 if (op_type == OP_LCFIRST) {
3687 /* lower case the first letter: no trickiness for any character */
3688 *tmpbuf = (IN_LOCALE_RUNTIME) ? toLOWER_LC(*s) :
3689 ((IN_UNI_8_BIT) ? toLOWER_LATIN1(*s) : toLOWER(*s));
3692 else if (IN_LOCALE_RUNTIME) {
3693 *tmpbuf = toUPPER_LC(*s); /* This would be a bug if any locales
3694 * have upper and title case different
3697 else if (! IN_UNI_8_BIT) {
3698 *tmpbuf = toUPPER(*s); /* Returns caseless for non-ascii, or
3699 * on EBCDIC machines whatever the
3700 * native function does */
3702 else { /* is ucfirst non-UTF-8, not in locale, and cased latin1 */
3703 *tmpbuf = toUPPER_LATIN1_MOD(*s);
3705 /* tmpbuf now has the correct title case for all latin1 characters
3706 * except for the several ones that have tricky handling. All
3707 * of these are mapped by the MOD to the letter below. */
3708 if (*tmpbuf == LATIN_SMALL_LETTER_Y_WITH_DIAERESIS) {
3710 /* The length is going to change, with all three of these, so
3711 * can't replace just the first character */
3714 /* We use the original to distinguish between these tricky
3716 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
3717 /* Two character title case 'Ss', but can remain non-UTF-8 */
3720 *(tmpbuf + 1) = 's'; /* Assert: length(tmpbuf) >= 2 */
3725 /* The other two tricky ones have their title case outside
3726 * latin1. It is the same as their upper case. */
3728 STORE_NON_LATIN1_UC(tmpbuf, *s);
3730 /* The UTF-8 and UTF-EBCDIC lengths of both these characters
3731 * and their upper cases is 2. */
3734 /* The entire result will have to be in UTF-8. Assume worst
3735 * case sizing in conversion. (all latin1 characters occupy
3736 * at most two bytes in utf8) */
3737 convert_source_to_utf8 = TRUE;
3738 need = slen * 2 + 1;
3740 } /* End of is one of the three special chars */
3741 } /* End of use Unicode (Latin1) semantics */
3742 } /* End of changing the case of the first character */
3744 /* Here, have the first character's changed case stored in tmpbuf. Ready to
3745 * generate the result */
3748 /* We can convert in place. This means we change just the first
3749 * character without disturbing the rest; no need to grow */
3751 s = d = (U8*)SvPV_force_nomg(source, slen);
3757 /* Here, we can't convert in place; we earlier calculated how much
3758 * space we will need, so grow to accommodate that */
3759 SvUPGRADE(dest, SVt_PV);
3760 d = (U8*)SvGROW(dest, need);
3761 (void)SvPOK_only(dest);
3768 if (! convert_source_to_utf8) {
3770 /* Here both source and dest are in UTF-8, but have to create
3771 * the entire output. We initialize the result to be the
3772 * title/lower cased first character, and then append the rest
3774 sv_setpvn(dest, (char*)tmpbuf, tculen);
3776 sv_catpvn(dest, (char*)(s + ulen), slen - ulen);
3780 const U8 *const send = s + slen;
3782 /* Here the dest needs to be in UTF-8, but the source isn't,
3783 * except we earlier UTF-8'd the first character of the source
3784 * into tmpbuf. First put that into dest, and then append the
3785 * rest of the source, converting it to UTF-8 as we go. */
3787 /* Assert tculen is 2 here because the only two characters that
3788 * get to this part of the code have 2-byte UTF-8 equivalents */
3790 *d++ = *(tmpbuf + 1);
3791 s++; /* We have just processed the 1st char */
3793 for (; s < send; s++) {
3794 d = uvchr_to_utf8(d, *s);
3797 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3801 else { /* in-place UTF-8. Just overwrite the first character */
3802 Copy(tmpbuf, d, tculen, U8);
3803 SvCUR_set(dest, need - 1);
3806 else { /* Neither source nor dest are in or need to be UTF-8 */
3808 if (IN_LOCALE_RUNTIME) {
3812 if (inplace) { /* in-place, only need to change the 1st char */
3815 else { /* Not in-place */
3817 /* Copy the case-changed character(s) from tmpbuf */
3818 Copy(tmpbuf, d, tculen, U8);
3819 d += tculen - 1; /* Code below expects d to point to final
3820 * character stored */
3823 else { /* empty source */
3824 /* See bug #39028: Don't taint if empty */
3828 /* In a "use bytes" we don't treat the source as UTF-8, but, still want
3829 * the destination to retain that flag */
3833 if (!inplace) { /* Finish the rest of the string, unchanged */
3834 /* This will copy the trailing NUL */
3835 Copy(s + 1, d + 1, slen, U8);
3836 SvCUR_set(dest, need - 1);
3839 if (dest != source && SvTAINTED(source))
3845 /* There's so much setup/teardown code common between uc and lc, I wonder if
3846 it would be worth merging the two, and just having a switch outside each
3847 of the three tight loops. There is less and less commonality though */
3861 if (SvPADTMP(source) && !SvREADONLY(source) && !SvAMAGIC(source)
3862 && SvTEMP(source) && !DO_UTF8(source)
3863 && (IN_LOCALE_RUNTIME || ! IN_UNI_8_BIT)) {
3865 /* We can convert in place. The reason we can't if in UNI_8_BIT is to
3866 * make the loop tight, so we overwrite the source with the dest before
3867 * looking at it, and we need to look at the original source
3868 * afterwards. There would also need to be code added to handle
3869 * switching to not in-place in midstream if we run into characters
3870 * that change the length.
3873 s = d = (U8*)SvPV_force_nomg(source, len);
3880 /* The old implementation would copy source into TARG at this point.
3881 This had the side effect that if source was undef, TARG was now
3882 an undefined SV with PADTMP set, and they don't warn inside
3883 sv_2pv_flags(). However, we're now getting the PV direct from
3884 source, which doesn't have PADTMP set, so it would warn. Hence the
3888 s = (const U8*)SvPV_nomg_const(source, len);
3890 if (ckWARN(WARN_UNINITIALIZED))
3891 report_uninit(source);
3897 SvUPGRADE(dest, SVt_PV);
3898 d = (U8*)SvGROW(dest, min);
3899 (void)SvPOK_only(dest);
3904 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
3905 to check DO_UTF8 again here. */
3907 if (DO_UTF8(source)) {
3908 const U8 *const send = s + len;
3909 U8 tmpbuf[UTF8_MAXBYTES+1];
3911 /* All occurrences of these are to be moved to follow any other marks.
3912 * This is context-dependent. We may not be passed enough context to
3913 * move the iota subscript beyond all of them, but we do the best we can
3914 * with what we're given. The result is always better than if we
3915 * hadn't done this. And, the problem would only arise if we are
3916 * passed a character without all its combining marks, which would be
3917 * the caller's mistake. The information this is based on comes from a
3918 * comment in Unicode SpecialCasing.txt, (and the Standard's text
3919 * itself) and so can't be checked properly to see if it ever gets
3920 * revised. But the likelihood of it changing is remote */
3921 bool in_iota_subscript = FALSE;
3924 if (in_iota_subscript && ! is_utf8_mark(s)) {
3925 /* A non-mark. Time to output the iota subscript */
3926 #define GREEK_CAPITAL_LETTER_IOTA 0x0399
3927 #define COMBINING_GREEK_YPOGEGRAMMENI 0x0345
3929 CAT_UNI_TO_UTF8_TWO_BYTE(d, GREEK_CAPITAL_LETTER_IOTA);
3930 in_iota_subscript = FALSE;
3933 /* If the UTF-8 character is invariant, then it is in the range
3934 * known by the standard macro; result is only one byte long */
3935 if (UTF8_IS_INVARIANT(*s)) {
3939 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
3941 /* Likewise, if it fits in a byte, its case change is in our
3943 U8 orig = TWO_BYTE_UTF8_TO_UNI(*s, *(s+1));
3944 U8 upper = toUPPER_LATIN1_MOD(orig);
3945 CAT_TWO_BYTE_UNI_UPPER_MOD(d, orig, upper);
3950 /* Otherwise, need the general UTF-8 case. Get the changed
3951 * case value and copy it to the output buffer */
3953 const STRLEN u = UTF8SKIP(s);
3956 const UV uv = toUPPER_utf8(s, tmpbuf, &ulen);
3957 if (uv == GREEK_CAPITAL_LETTER_IOTA
3958 && utf8_to_uvchr(s, 0) == COMBINING_GREEK_YPOGEGRAMMENI)
3960 in_iota_subscript = TRUE;
3963 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
3964 /* If the eventually required minimum size outgrows
3965 * the available space, we need to grow. */
3966 const UV o = d - (U8*)SvPVX_const(dest);
3968 /* If someone uppercases one million U+03B0s we
3969 * SvGROW() one million times. Or we could try
3970 * guessing how much to allocate without allocating too
3971 * much. Such is life. See corresponding comment in
3972 * lc code for another option */
3974 d = (U8*)SvPVX(dest) + o;
3976 Copy(tmpbuf, d, ulen, U8);
3982 if (in_iota_subscript) {
3983 CAT_UNI_TO_UTF8_TWO_BYTE(d, GREEK_CAPITAL_LETTER_IOTA);
3987 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
3989 else { /* Not UTF-8 */
3991 const U8 *const send = s + len;
3993 /* Use locale casing if in locale; regular style if not treating
3994 * latin1 as having case; otherwise the latin1 casing. Do the
3995 * whole thing in a tight loop, for speed, */
3996 if (IN_LOCALE_RUNTIME) {
3999 for (; s < send; d++, s++)
4000 *d = toUPPER_LC(*s);
4002 else if (! IN_UNI_8_BIT) {
4003 for (; s < send; d++, s++) {
4008 for (; s < send; d++, s++) {
4009 *d = toUPPER_LATIN1_MOD(*s);
4010 if (*d != LATIN_SMALL_LETTER_Y_WITH_DIAERESIS) continue;
4012 /* The mainstream case is the tight loop above. To avoid
4013 * extra tests in that, all three characters that require
4014 * special handling are mapped by the MOD to the one tested
4016 * Use the source to distinguish between the three cases */
4018 if (*s == LATIN_SMALL_LETTER_SHARP_S) {
4020 /* uc() of this requires 2 characters, but they are
4021 * ASCII. If not enough room, grow the string */
4022 if (SvLEN(dest) < ++min) {
4023 const UV o = d - (U8*)SvPVX_const(dest);
4025 d = (U8*)SvPVX(dest) + o;
4027 *d++ = 'S'; *d = 'S'; /* upper case is 'SS' */
4028 continue; /* Back to the tight loop; still in ASCII */
4031 /* The other two special handling characters have their
4032 * upper cases outside the latin1 range, hence need to be
4033 * in UTF-8, so the whole result needs to be in UTF-8. So,
4034 * here we are somewhere in the middle of processing a
4035 * non-UTF-8 string, and realize that we will have to convert
4036 * the whole thing to UTF-8. What to do? There are
4037 * several possibilities. The simplest to code is to
4038 * convert what we have so far, set a flag, and continue on
4039 * in the loop. The flag would be tested each time through
4040 * the loop, and if set, the next character would be
4041 * converted to UTF-8 and stored. But, I (khw) didn't want
4042 * to slow down the mainstream case at all for this fairly
4043 * rare case, so I didn't want to add a test that didn't
4044 * absolutely have to be there in the loop, besides the
4045 * possibility that it would get too complicated for
4046 * optimizers to deal with. Another possibility is to just
4047 * give up, convert the source to UTF-8, and restart the
4048 * function that way. Another possibility is to convert
4049 * both what has already been processed and what is yet to
4050 * come separately to UTF-8, then jump into the loop that
4051 * handles UTF-8. But the most efficient time-wise of the
4052 * ones I could think of is what follows, and turned out to
4053 * not require much extra code. */
4055 /* Convert what we have so far into UTF-8, telling the
4056 * function that we know it should be converted, and to
4057 * allow extra space for what we haven't processed yet.
4058 * Assume the worst case space requirements for converting
4059 * what we haven't processed so far: that it will require
4060 * two bytes for each remaining source character, plus the
4061 * NUL at the end. This may cause the string pointer to
4062 * move, so re-find it. */
4064 len = d - (U8*)SvPVX_const(dest);
4065 SvCUR_set(dest, len);
4066 len = sv_utf8_upgrade_flags_grow(dest,
4067 SV_GMAGIC|SV_FORCE_UTF8_UPGRADE,
4069 d = (U8*)SvPVX(dest) + len;
4071 /* And append the current character's upper case in UTF-8 */
4072 CAT_NON_LATIN1_UC(d, *s);
4074 /* Now process the remainder of the source, converting to
4075 * upper and UTF-8. If a resulting byte is invariant in
4076 * UTF-8, output it as-is, otherwise convert to UTF-8 and
4077 * append it to the output. */
4080 for (; s < send; s++) {
4081 U8 upper = toUPPER_LATIN1_MOD(*s);
4082 if UTF8_IS_INVARIANT(upper) {
4086 CAT_TWO_BYTE_UNI_UPPER_MOD(d, *s, upper);
4090 /* Here have processed the whole source; no need to continue
4091 * with the outer loop. Each character has been converted
4092 * to upper case and converted to UTF-8 */
4095 } /* End of processing all latin1-style chars */
4096 } /* End of processing all chars */
4097 } /* End of source is not empty */
4099 if (source != dest) {
4100 *d = '\0'; /* Here d points to 1 after last char, add NUL */
4101 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4103 } /* End of isn't utf8 */
4104 if (dest != source && SvTAINTED(source))
4123 if (SvPADTMP(source) && !SvREADONLY(source) && !SvAMAGIC(source)
4124 && SvTEMP(source) && !DO_UTF8(source)) {
4126 /* We can convert in place, as lowercasing anything in the latin1 range
4127 * (or else DO_UTF8 would have been on) doesn't lengthen it */
4129 s = d = (U8*)SvPV_force_nomg(source, len);
4136 /* The old implementation would copy source into TARG at this point.
4137 This had the side effect that if source was undef, TARG was now
4138 an undefined SV with PADTMP set, and they don't warn inside
4139 sv_2pv_flags(). However, we're now getting the PV direct from
4140 source, which doesn't have PADTMP set, so it would warn. Hence the
4144 s = (const U8*)SvPV_nomg_const(source, len);
4146 if (ckWARN(WARN_UNINITIALIZED))
4147 report_uninit(source);
4153 SvUPGRADE(dest, SVt_PV);
4154 d = (U8*)SvGROW(dest, min);
4155 (void)SvPOK_only(dest);
4160 /* Overloaded values may have toggled the UTF-8 flag on source, so we need
4161 to check DO_UTF8 again here. */
4163 if (DO_UTF8(source)) {
4164 const U8 *const send = s + len;
4165 U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
4168 if (UTF8_IS_INVARIANT(*s)) {
4170 /* Invariant characters use the standard mappings compiled in.
4175 else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
4177 /* As do the ones in the Latin1 range */
4178 U8 lower = toLOWER_LATIN1(TWO_BYTE_UTF8_TO_UNI(*s, *(s+1)));
4179 CAT_UNI_TO_UTF8_TWO_BYTE(d, lower);
4183 /* Here, is utf8 not in Latin-1 range, have to go out and get
4184 * the mappings from the tables. */
4186 const STRLEN u = UTF8SKIP(s);
4189 #ifndef CONTEXT_DEPENDENT_CASING
4190 toLOWER_utf8(s, tmpbuf, &ulen);
4192 /* This is ifdefd out because it probably is the wrong thing to do. The right
4193 * thing is probably to have an I/O layer that converts final sigma to regular
4194 * on input and vice versa (under the correct circumstances) on output. In
4195 * effect, the final sigma is just a glyph variation when the regular one
4196 * occurs at the end of a word. And we don't really know what's going to be
4197 * the end of the word until it is finally output, as splitting and joining can
4198 * occur at any time and change what once was the word end to be in the middle,
4199 * and vice versa. */
4201 const UV uv = toLOWER_utf8(s, tmpbuf, &ulen);
4203 /* If the lower case is a small sigma, it may be that we need
4204 * to change it to a final sigma. This happens at the end of
4205 * a word that contains more than just this character, and only
4206 * when we started with a capital sigma. */
4207 if (uv == UNICODE_GREEK_SMALL_LETTER_SIGMA &&
4208 s > send - len && /* Makes sure not the first letter */
4209 utf8_to_uvchr(s, 0) == UNICODE_GREEK_CAPITAL_LETTER_SIGMA
4212 /* We use the algorithm in:
4213 * http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf (C
4214 * is a CAPITAL SIGMA): If C is preceded by a sequence
4215 * consisting of a cased letter and a case-ignorable
4216 * sequence, and C is not followed by a sequence consisting
4217 * of a case ignorable sequence and then a cased letter,
4218 * then when lowercasing C, C becomes a final sigma */
4220 /* To determine if this is the end of a word, need to peek
4221 * ahead. Look at the next character */
4222 const U8 *peek = s + u;
4224 /* Skip any case ignorable characters */
4225 while (peek < send && is_utf8_case_ignorable(peek)) {
4226 peek += UTF8SKIP(peek);
4229 /* If we reached the end of the string without finding any
4230 * non-case ignorable characters, or if the next such one
4231 * is not-cased, then we have met the conditions for it
4232 * being a final sigma with regards to peek ahead, and so
4233 * must do peek behind for the remaining conditions. (We
4234 * know there is stuff behind to look at since we tested
4235 * above that this isn't the first letter) */
4236 if (peek >= send || ! is_utf8_cased(peek)) {
4237 peek = utf8_hop(s, -1);
4239 /* Here are at the beginning of the first character
4240 * before the original upper case sigma. Keep backing
4241 * up, skipping any case ignorable characters */
4242 while (is_utf8_case_ignorable(peek)) {
4243 peek = utf8_hop(peek, -1);
4246 /* Here peek points to the first byte of the closest
4247 * non-case-ignorable character before the capital
4248 * sigma. If it is cased, then by the Unicode
4249 * algorithm, we should use a small final sigma instead
4250 * of what we have */
4251 if (is_utf8_cased(peek)) {
4252 STORE_UNI_TO_UTF8_TWO_BYTE(tmpbuf,
4253 UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA);
4257 else { /* Not a context sensitive mapping */
4258 #endif /* End of commented out context sensitive */
4259 if (ulen > u && (SvLEN(dest) < (min += ulen - u))) {
4261 /* If the eventually required minimum size outgrows
4262 * the available space, we need to grow. */
4263 const UV o = d - (U8*)SvPVX_const(dest);
4265 /* If someone lowercases one million U+0130s we
4266 * SvGROW() one million times. Or we could try
4267 * guessing how much to allocate without allocating too
4268 * much. Such is life. Another option would be to
4269 * grow an extra byte or two more each time we need to
4270 * grow, which would cut down the million to 500K, with
4273 d = (U8*)SvPVX(dest) + o;
4275 #ifdef CONTEXT_DEPENDENT_CASING
4278 /* Copy the newly lowercased letter to the output buffer we're
4280 Copy(tmpbuf, d, ulen, U8);
4284 } /* End of looping through the source string */
4287 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4288 } else { /* Not utf8 */
4290 const U8 *const send = s + len;
4292 /* Use locale casing if in locale; regular style if not treating
4293 * latin1 as having case; otherwise the latin1 casing. Do the
4294 * whole thing in a tight loop, for speed, */
4295 if (IN_LOCALE_RUNTIME) {
4298 for (; s < send; d++, s++)
4299 *d = toLOWER_LC(*s);
4301 else if (! IN_UNI_8_BIT) {
4302 for (; s < send; d++, s++) {
4307 for (; s < send; d++, s++) {
4308 *d = toLOWER_LATIN1(*s);
4312 if (source != dest) {
4314 SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
4317 if (dest != source && SvTAINTED(source))
4326 SV * const sv = TOPs;
4328 register const char *s = SvPV_const(sv,len);
4330 SvUTF8_off(TARG); /* decontaminate */
4333 SvUPGRADE(TARG, SVt_PV);
4334 SvGROW(TARG, (len * 2) + 1);
4338 if (UTF8_IS_CONTINUED(*s)) {
4339 STRLEN ulen = UTF8SKIP(s);
4363 SvCUR_set(TARG, d - SvPVX_const(TARG));
4364 (void)SvPOK_only_UTF8(TARG);
4367 sv_setpvn(TARG, s, len);
4376 dVAR; dSP; dMARK; dORIGMARK;
4377 register AV *const av = MUTABLE_AV(POPs);
4378 register const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4380 if (SvTYPE(av) == SVt_PVAV) {
4381 const I32 arybase = CopARYBASE_get(PL_curcop);
4382 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4383 bool can_preserve = FALSE;
4389 can_preserve = SvCANEXISTDELETE(av);
4392 if (lval && localizing) {
4395 for (svp = MARK + 1; svp <= SP; svp++) {
4396 const I32 elem = SvIV(*svp);
4400 if (max > AvMAX(av))
4404 while (++MARK <= SP) {
4406 I32 elem = SvIV(*MARK);
4407 bool preeminent = TRUE;
4411 if (localizing && can_preserve) {
4412 /* If we can determine whether the element exist,
4413 * Try to preserve the existenceness of a tied array
4414 * element by using EXISTS and DELETE if possible.
4415 * Fallback to FETCH and STORE otherwise. */
4416 preeminent = av_exists(av, elem);
4419 svp = av_fetch(av, elem, lval);
4421 if (!svp || *svp == &PL_sv_undef)
4422 DIE(aTHX_ PL_no_aelem, elem);
4425 save_aelem(av, elem, svp);
4427 SAVEADELETE(av, elem);
4430 *MARK = svp ? *svp : &PL_sv_undef;
4433 if (GIMME != G_ARRAY) {
4435 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4441 /* Smart dereferencing for keys, values and each */
4453 (SvTYPE(sv) != SVt_PVHV && SvTYPE(sv) != SVt_PVAV)
4458 "Type of argument to %s must be unblessed hashref or arrayref",
4459 PL_op_desc[PL_op->op_type] );
4462 if (PL_op->op_flags & OPf_SPECIAL && SvTYPE(sv) == SVt_PVAV)
4464 "Can't modify %s in %s",
4465 PL_op_desc[PL_op->op_type], PL_op_desc[PL_op->op_next->op_type]
4468 /* Delegate to correct function for op type */
4470 if (PL_op->op_type == OP_RKEYS || PL_op->op_type == OP_RVALUES) {
4471 return (SvTYPE(sv) == SVt_PVHV) ? Perl_do_kv(aTHX) : Perl_pp_akeys(aTHX);
4474 return (SvTYPE(sv) == SVt_PVHV) ? Perl_pp_each(aTHX) : Perl_pp_aeach(aTHX);
4482 AV *array = MUTABLE_AV(POPs);
4483 const I32 gimme = GIMME_V;
4484 IV *iterp = Perl_av_iter_p(aTHX_ array);
4485 const IV current = (*iterp)++;
4487 if (current > av_len(array)) {
4489 if (gimme == G_SCALAR)
4496 mPUSHi(CopARYBASE_get(PL_curcop) + current);
4497 if (gimme == G_ARRAY) {
4498 SV **const element = av_fetch(array, current, 0);
4499 PUSHs(element ? *element : &PL_sv_undef);
4508 AV *array = MUTABLE_AV(POPs);
4509 const I32 gimme = GIMME_V;
4511 *Perl_av_iter_p(aTHX_ array) = 0;
4513 if (gimme == G_SCALAR) {
4515 PUSHi(av_len(array) + 1);
4517 else if (gimme == G_ARRAY) {
4518 IV n = Perl_av_len(aTHX_ array);
4519 IV i = CopARYBASE_get(PL_curcop);
4523 if (PL_op->op_type == OP_AKEYS || PL_op->op_type == OP_RKEYS) {
4525 for (; i <= n; i++) {
4530 for (i = 0; i <= n; i++) {
4531 SV *const *const elem = Perl_av_fetch(aTHX_ array, i, 0);
4532 PUSHs(elem ? *elem : &PL_sv_undef);
4539 /* Associative arrays. */
4545 HV * hash = MUTABLE_HV(POPs);
4547 const I32 gimme = GIMME_V;
4550 /* might clobber stack_sp */
4551 entry = hv_iternext(hash);
4556 SV* const sv = hv_iterkeysv(entry);
4557 PUSHs(sv); /* won't clobber stack_sp */
4558 if (gimme == G_ARRAY) {
4561 /* might clobber stack_sp */
4562 val = hv_iterval(hash, entry);
4567 else if (gimme == G_SCALAR)
4574 S_do_delete_local(pTHX)
4578 const I32 gimme = GIMME_V;
4582 if (PL_op->op_private & OPpSLICE) {
4584 SV * const osv = POPs;
4585 const bool tied = SvRMAGICAL(osv)
4586 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4587 const bool can_preserve = SvCANEXISTDELETE(osv)
4588 || mg_find((const SV *)osv, PERL_MAGIC_env);
4589 const U32 type = SvTYPE(osv);
4590 if (type == SVt_PVHV) { /* hash element */
4591 HV * const hv = MUTABLE_HV(osv);
4592 while (++MARK <= SP) {
4593 SV * const keysv = *MARK;
4595 bool preeminent = TRUE;
4597 preeminent = hv_exists_ent(hv, keysv, 0);
4599 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4606 sv = hv_delete_ent(hv, keysv, 0, 0);
4607 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4610 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4612 *MARK = sv_mortalcopy(sv);
4618 SAVEHDELETE(hv, keysv);
4619 *MARK = &PL_sv_undef;
4623 else if (type == SVt_PVAV) { /* array element */
4624 if (PL_op->op_flags & OPf_SPECIAL) {
4625 AV * const av = MUTABLE_AV(osv);
4626 while (++MARK <= SP) {
4627 I32 idx = SvIV(*MARK);
4629 bool preeminent = TRUE;
4631 preeminent = av_exists(av, idx);
4633 SV **svp = av_fetch(av, idx, 1);
4640 sv = av_delete(av, idx, 0);
4641 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4644 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4646 *MARK = sv_mortalcopy(sv);
4652 SAVEADELETE(av, idx);
4653 *MARK = &PL_sv_undef;
4659 DIE(aTHX_ "Not a HASH reference");
4660 if (gimme == G_VOID)
4662 else if (gimme == G_SCALAR) {
4667 *++MARK = &PL_sv_undef;
4672 SV * const keysv = POPs;
4673 SV * const osv = POPs;
4674 const bool tied = SvRMAGICAL(osv)
4675 && mg_find((const SV *)osv, PERL_MAGIC_tied);
4676 const bool can_preserve = SvCANEXISTDELETE(osv)
4677 || mg_find((const SV *)osv, PERL_MAGIC_env);
4678 const U32 type = SvTYPE(osv);
4680 if (type == SVt_PVHV) {
4681 HV * const hv = MUTABLE_HV(osv);
4682 bool preeminent = TRUE;
4684 preeminent = hv_exists_ent(hv, keysv, 0);
4686 HE *he = hv_fetch_ent(hv, keysv, 1, 0);
4693 sv = hv_delete_ent(hv, keysv, 0, 0);
4694 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4697 save_helem_flags(hv, keysv, &sv, SAVEf_KEEPOLDELEM);
4699 SV *nsv = sv_mortalcopy(sv);
4705 SAVEHDELETE(hv, keysv);
4707 else if (type == SVt_PVAV) {
4708 if (PL_op->op_flags & OPf_SPECIAL) {
4709 AV * const av = MUTABLE_AV(osv);
4710 I32 idx = SvIV(keysv);
4711 bool preeminent = TRUE;
4713 preeminent = av_exists(av, idx);
4715 SV **svp = av_fetch(av, idx, 1);
4722 sv = av_delete(av, idx, 0);
4723 SvREFCNT_inc_simple_void(sv); /* De-mortalize */
4726 save_aelem_flags(av, idx, &sv, SAVEf_KEEPOLDELEM);
4728 SV *nsv = sv_mortalcopy(sv);
4734 SAVEADELETE(av, idx);
4737 DIE(aTHX_ "panic: avhv_delete no longer supported");
4740 DIE(aTHX_ "Not a HASH reference");
4743 if (gimme != G_VOID)
4757 if (PL_op->op_private & OPpLVAL_INTRO)
4758 return do_delete_local();
4761 discard = (gimme == G_VOID) ? G_DISCARD : 0;
4763 if (PL_op->op_private & OPpSLICE) {
4765 HV * const hv = MUTABLE_HV(POPs);
4766 const U32 hvtype = SvTYPE(hv);
4767 if (hvtype == SVt_PVHV) { /* hash element */
4768 while (++MARK <= SP) {
4769 SV * const sv = hv_delete_ent(hv, *MARK, discard, 0);
4770 *MARK = sv ? sv : &PL_sv_undef;
4773 else if (hvtype == SVt_PVAV) { /* array element */
4774 if (PL_op->op_flags & OPf_SPECIAL) {
4775 while (++MARK <= SP) {
4776 SV * const sv = av_delete(MUTABLE_AV(hv), SvIV(*MARK), discard);
4777 *MARK = sv ? sv : &PL_sv_undef;
4782 DIE(aTHX_ "Not a HASH reference");
4785 else if (gimme == G_SCALAR) {
4790 *++MARK = &PL_sv_undef;
4796 HV * const hv = MUTABLE_HV(POPs);
4798 if (SvTYPE(hv) == SVt_PVHV)
4799 sv = hv_delete_ent(hv, keysv, discard, 0);
4800 else if (SvTYPE(hv) == SVt_PVAV) {
4801 if (PL_op->op_flags & OPf_SPECIAL)
4802 sv = av_delete(MUTABLE_AV(hv), SvIV(keysv), discard);
4804 DIE(aTHX_ "panic: avhv_delete no longer supported");
4807 DIE(aTHX_ "Not a HASH reference");
4823 if (PL_op->op_private & OPpEXISTS_SUB) {
4825 SV * const sv = POPs;
4826 CV * const cv = sv_2cv(sv, &hv, &gv, 0);
4829 if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
4834 hv = MUTABLE_HV(POPs);
4835 if (SvTYPE(hv) == SVt_PVHV) {
4836 if (hv_exists_ent(hv, tmpsv, 0))
4839 else if (SvTYPE(hv) == SVt_PVAV) {
4840 if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
4841 if (av_exists(MUTABLE_AV(hv), SvIV(tmpsv)))
4846 DIE(aTHX_ "Not a HASH reference");
4853 dVAR; dSP; dMARK; dORIGMARK;
4854 register HV * const hv = MUTABLE_HV(POPs);
4855 register const I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
4856 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
4857 bool can_preserve = FALSE;
4863 if (SvCANEXISTDELETE(hv) || mg_find((const SV *)hv, PERL_MAGIC_env))
4864 can_preserve = TRUE;
4867 while (++MARK <= SP) {
4868 SV * const keysv = *MARK;
4871 bool preeminent = TRUE;
4873 if (localizing && can_preserve) {
4874 /* If we can determine whether the element exist,
4875 * try to preserve the existenceness of a tied hash
4876 * element by using EXISTS and DELETE if possible.
4877 * Fallback to FETCH and STORE otherwise. */
4878 preeminent = hv_exists_ent(hv, keysv, 0);
4881 he = hv_fetch_ent(hv, keysv, lval, 0);
4882 svp = he ? &HeVAL(he) : NULL;
4885 if (!svp || *svp == &PL_sv_undef) {
4886 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
4889 if (HvNAME_get(hv) && isGV(*svp))
4890 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
4891 else if (preeminent)
4892 save_helem_flags(hv, keysv, svp,
4893 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
4895 SAVEHDELETE(hv, keysv);
4898 *MARK = svp ? *svp : &PL_sv_undef;
4900 if (GIMME != G_ARRAY) {
4902 *++MARK = SP > ORIGMARK ? *SP : &PL_sv_undef;
4908 /* List operators. */
4913 if (GIMME != G_ARRAY) {
4915 *MARK = *SP; /* unwanted list, return last item */
4917 *MARK = &PL_sv_undef;
4927 SV ** const lastrelem = PL_stack_sp;
4928 SV ** const lastlelem = PL_stack_base + POPMARK;
4929 SV ** const firstlelem = PL_stack_base + POPMARK + 1;
4930 register SV ** const firstrelem = lastlelem + 1;
4931 const I32 arybase = CopARYBASE_get(PL_curcop);
4932 I32 is_something_there = FALSE;
4934 register const I32 max = lastrelem - lastlelem;
4935 register SV **lelem;
4937 if (GIMME != G_ARRAY) {
4938 I32 ix = SvIV(*lastlelem);
4943 if (ix < 0 || ix >= max)
4944 *firstlelem = &PL_sv_undef;
4946 *firstlelem = firstrelem[ix];
4952 SP = firstlelem - 1;
4956 for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
4957 I32 ix = SvIV(*lelem);
4962 if (ix < 0 || ix >= max)
4963 *lelem = &PL_sv_undef;
4965 is_something_there = TRUE;
4966 if (!(*lelem = firstrelem[ix]))
4967 *lelem = &PL_sv_undef;
4970 if (is_something_there)
4973 SP = firstlelem - 1;
4979 dVAR; dSP; dMARK; dORIGMARK;
4980 const I32 items = SP - MARK;
4981 SV * const av = MUTABLE_SV(av_make(items, MARK+1));
4982 SP = ORIGMARK; /* av_make() might realloc stack_sp */
4983 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
4984 ? newRV_noinc(av) : av);
4990 dVAR; dSP; dMARK; dORIGMARK;
4991 HV* const hv = newHV();
4994 SV * const key = *++MARK;
4995 SV * const val = newSV(0);
4997 sv_setsv(val, *++MARK);
4999 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Odd number of elements in anonymous hash");
5000 (void)hv_store_ent(hv,key,val,0);
5003 mXPUSHs((PL_op->op_flags & OPf_SPECIAL)
5004 ? newRV_noinc(MUTABLE_SV(hv)) : MUTABLE_SV(hv));
5009 S_deref_plain_array(pTHX_ AV *ary)
5011 if (SvTYPE(ary) == SVt_PVAV) return ary;
5012 SvGETMAGIC((SV *)ary);
5013 if (!SvROK(ary) || SvTYPE(SvRV(ary)) != SVt_PVAV)
5014 Perl_die(aTHX_ "Not an ARRAY reference");
5015 else if (SvOBJECT(SvRV(ary)))
5016 Perl_die(aTHX_ "Not an unblessed ARRAY reference");
5017 return (AV *)SvRV(ary);
5020 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
5021 # define DEREF_PLAIN_ARRAY(ary) \
5024 SvTYPE(aRrRay) == SVt_PVAV \
5026 : S_deref_plain_array(aTHX_ aRrRay); \
5029 # define DEREF_PLAIN_ARRAY(ary) \
5031 PL_Sv = (SV *)(ary), \
5032 SvTYPE(PL_Sv) == SVt_PVAV \
5034 : S_deref_plain_array(aTHX_ (AV *)PL_Sv) \
5040 dVAR; dSP; dMARK; dORIGMARK;
5041 int num_args = (SP - MARK);
5042 register AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5046 register I32 offset;
5047 register I32 length;
5051 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5054 return Perl_tied_method(aTHX_ "SPLICE", mark - 1, MUTABLE_SV(ary), mg,
5055 GIMME_V | TIED_METHOD_ARGUMENTS_ON_STACK,
5062 offset = i = SvIV(*MARK);
5064 offset += AvFILLp(ary) + 1;
5066 offset -= CopARYBASE_get(PL_curcop);
5068 DIE(aTHX_ PL_no_aelem, i);
5070 length = SvIVx(*MARK++);
5072 length += AvFILLp(ary) - offset + 1;
5078 length = AvMAX(ary) + 1; /* close enough to infinity */
5082 length = AvMAX(ary) + 1;
5084 if (offset > AvFILLp(ary) + 1) {
5086 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "splice() offset past end of array" );
5087 offset = AvFILLp(ary) + 1;
5089 after = AvFILLp(ary) + 1 - (offset + length);
5090 if (after < 0) { /* not that much array */
5091 length += after; /* offset+length now in array */
5097 /* At this point, MARK .. SP-1 is our new LIST */
5100 diff = newlen - length;
5101 if (newlen && !AvREAL(ary) && AvREIFY(ary))
5104 /* make new elements SVs now: avoid problems if they're from the array */
5105 for (dst = MARK, i = newlen; i; i--) {
5106 SV * const h = *dst;
5107 *dst++ = newSVsv(h);
5110 if (diff < 0) { /* shrinking the area */
5111 SV **tmparyval = NULL;
5113 Newx(tmparyval, newlen, SV*); /* so remember insertion */
5114 Copy(MARK, tmparyval, newlen, SV*);
5117 MARK = ORIGMARK + 1;
5118 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5119 MEXTEND(MARK, length);
5120 Copy(AvARRAY(ary)+offset, MARK, length, SV*);
5122 EXTEND_MORTAL(length);
5123 for (i = length, dst = MARK; i; i--) {
5124 sv_2mortal(*dst); /* free them eventually */
5131 *MARK = AvARRAY(ary)[offset+length-1];
5134 for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
5135 SvREFCNT_dec(*dst++); /* free them now */
5138 AvFILLp(ary) += diff;
5140 /* pull up or down? */
5142 if (offset < after) { /* easier to pull up */
5143 if (offset) { /* esp. if nothing to pull */
5144 src = &AvARRAY(ary)[offset-1];
5145 dst = src - diff; /* diff is negative */
5146 for (i = offset; i > 0; i--) /* can't trust Copy */
5150 AvARRAY(ary) = AvARRAY(ary) - diff; /* diff is negative */
5154 if (after) { /* anything to pull down? */
5155 src = AvARRAY(ary) + offset + length;
5156 dst = src + diff; /* diff is negative */
5157 Move(src, dst, after, SV*);
5159 dst = &AvARRAY(ary)[AvFILLp(ary)+1];
5160 /* avoid later double free */
5164 dst[--i] = &PL_sv_undef;
5167 Copy( tmparyval, AvARRAY(ary) + offset, newlen, SV* );
5168 Safefree(tmparyval);
5171 else { /* no, expanding (or same) */
5172 SV** tmparyval = NULL;
5174 Newx(tmparyval, length, SV*); /* so remember deletion */
5175 Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
5178 if (diff > 0) { /* expanding */
5179 /* push up or down? */
5180 if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
5184 Move(src, dst, offset, SV*);
5186 AvARRAY(ary) = AvARRAY(ary) - diff;/* diff is positive */
5188 AvFILLp(ary) += diff;
5191 if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
5192 av_extend(ary, AvFILLp(ary) + diff);
5193 AvFILLp(ary) += diff;
5196 dst = AvARRAY(ary) + AvFILLp(ary);
5198 for (i = after; i; i--) {
5206 Copy( MARK, AvARRAY(ary) + offset, newlen, SV* );
5209 MARK = ORIGMARK + 1;
5210 if (GIMME == G_ARRAY) { /* copy return vals to stack */
5212 Copy(tmparyval, MARK, length, SV*);
5214 EXTEND_MORTAL(length);
5215 for (i = length, dst = MARK; i; i--) {
5216 sv_2mortal(*dst); /* free them eventually */
5223 else if (length--) {
5224 *MARK = tmparyval[length];
5227 while (length-- > 0)
5228 SvREFCNT_dec(tmparyval[length]);
5232 *MARK = &PL_sv_undef;
5233 Safefree(tmparyval);
5237 mg_set(MUTABLE_SV(ary));
5245 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
5246 register AV * const ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5247 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5250 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5253 ENTER_with_name("call_PUSH");
5254 call_method("PUSH",G_SCALAR|G_DISCARD);
5255 LEAVE_with_name("call_PUSH");
5259 PL_delaymagic = DM_DELAY;
5260 for (++MARK; MARK <= SP; MARK++) {
5261 SV * const sv = newSV(0);
5263 sv_setsv(sv, *MARK);
5264 av_store(ary, AvFILLp(ary)+1, sv);
5266 if (PL_delaymagic & DM_ARRAY_ISA)
5267 mg_set(MUTABLE_SV(ary));
5272 if (OP_GIMME(PL_op, 0) != G_VOID) {
5273 PUSHi( AvFILL(ary) + 1 );
5282 AV * const av = PL_op->op_flags & OPf_SPECIAL
5283 ? MUTABLE_AV(GvAV(PL_defgv)) : DEREF_PLAIN_ARRAY(MUTABLE_AV(POPs));
5284 SV * const sv = PL_op->op_type == OP_SHIFT ? av_shift(av) : av_pop(av);
5288 (void)sv_2mortal(sv);
5295 dVAR; dSP; dMARK; dORIGMARK; dTARGET;
5296 register AV *ary = DEREF_PLAIN_ARRAY(MUTABLE_AV(*++MARK));
5297 const MAGIC * const mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied);
5300 *MARK-- = SvTIED_obj(MUTABLE_SV(ary), mg);
5303 ENTER_with_name("call_UNSHIFT");
5304 call_method("UNSHIFT",G_SCALAR|G_DISCARD);
5305 LEAVE_with_name("call_UNSHIFT");
5310 av_unshift(ary, SP - MARK);
5312 SV * const sv = newSVsv(*++MARK);
5313 (void)av_store(ary, i++, sv);
5317 if (OP_GIMME(PL_op, 0) != G_VOID) {
5318 PUSHi( AvFILL(ary) + 1 );
5327 if (GIMME == G_ARRAY) {
5328 if (PL_op->op_private & OPpREVERSE_INPLACE) {
5332 assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
5333 (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
5334 av = MUTABLE_AV((*SP));
5335 /* In-place reversing only happens in void context for the array
5336 * assignment. We don't need to push anything on the stack. */
5339 if (SvMAGICAL(av)) {
5341 register SV *tmp = sv_newmortal();
5342 /* For SvCANEXISTDELETE */
5345 bool can_preserve = SvCANEXISTDELETE(av);
5347 for (i = 0, j = av_len(av); i < j; ++i, --j) {
5348 register SV *begin, *end;
5351 if (!av_exists(av, i)) {
5352 if (av_exists(av, j)) {
5353 register SV *sv = av_delete(av, j, 0);
5354 begin = *av_fetch(av, i, TRUE);
5355 sv_setsv_mg(begin, sv);
5359 else if (!av_exists(av, j)) {
5360 register SV *sv = av_delete(av, i, 0);
5361 end = *av_fetch(av, j, TRUE);
5362 sv_setsv_mg(end, sv);
5367 begin = *av_fetch(av, i, TRUE);
5368 end = *av_fetch(av, j, TRUE);
5369 sv_setsv(tmp, begin);
5370 sv_setsv_mg(begin, end);
5371 sv_setsv_mg(end, tmp);
5375 SV **begin = AvARRAY(av);
5378 SV **end = begin + AvFILLp(av);
5380 while (begin < end) {
5381 register SV * const tmp = *begin;
5392 register SV * const tmp = *MARK;
5396 /* safe as long as stack cannot get extended in the above */
5402 register char *down;
5407 SvUTF8_off(TARG); /* decontaminate */
5409 do_join(TARG, &PL_sv_no, MARK, SP);
5411 sv_setsv(TARG, SP > MARK ? *SP : find_rundefsv());
5412 if (! SvOK(TARG) && ckWARN(WARN_UNINITIALIZED))
5413 report_uninit(TARG);
5416 up = SvPV_force(TARG, len);
5418 if (DO_UTF8(TARG)) { /* first reverse each character */
5419 U8* s = (U8*)SvPVX(TARG);
5420 const U8* send = (U8*)(s + len);
5422 if (UTF8_IS_INVARIANT(*s)) {
5427 if (!utf8_to_uvchr(s, 0))
5431 down = (char*)(s - 1);
5432 /* reverse this character */
5436 *down-- = (char)tmp;
5442 down = SvPVX(TARG) + len - 1;
5446 *down-- = (char)tmp;
5448 (void)SvPOK_only_UTF8(TARG);
5460 register IV limit = POPi; /* note, negative is forever */
5461 SV * const sv = POPs;
5463 register const char *s = SvPV_const(sv, len);
5464 const bool do_utf8 = DO_UTF8(sv);
5465 const char *strend = s + len;
5467 register REGEXP *rx;
5469 register const char *m;
5471 const STRLEN slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : (STRLEN)(strend - s);
5472 I32 maxiters = slen + 10;
5473 I32 trailing_empty = 0;
5475 const I32 origlimit = limit;
5478 const I32 gimme = GIMME_V;
5480 const I32 oldsave = PL_savestack_ix;
5481 U32 make_mortal = SVs_TEMP;
5486 Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
5491 DIE(aTHX_ "panic: pp_split");
5494 TAINT_IF(get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET &&
5495 (RX_EXTFLAGS(rx) & (RXf_WHITE | RXf_SKIPWHITE)));
5497 RX_MATCH_UTF8_set(rx, do_utf8);
5500 if (pm->op_pmreplrootu.op_pmtargetoff) {
5501 ary = GvAVn(MUTABLE_GV(PAD_SVl(pm->op_pmreplrootu.op_pmtargetoff)));
5504 if (pm->op_pmreplrootu.op_pmtargetgv) {
5505 ary = GvAVn(pm->op_pmreplrootu.op_pmtargetgv);
5510 if (ary && (gimme != G_ARRAY || (pm->op_pmflags & PMf_ONCE))) {
5516 if ((mg = SvTIED_mg((const SV *)ary, PERL_MAGIC_tied))) {
5518 XPUSHs(SvTIED_obj(MUTABLE_SV(ary), mg));
5525 for (i = AvFILLp(ary); i >= 0; i--)
5526 AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
5528 /* temporarily switch stacks */
5529 SAVESWITCHSTACK(PL_curstack, ary);
5533 base = SP - PL_stack_base;
5535 if (RX_EXTFLAGS(rx) & RXf_SKIPWHITE) {
5537 while (*s == ' ' || is_utf8_space((U8*)s))
5540 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5541 while (isSPACE_LC(*s))
5549 if (RX_EXTFLAGS(rx) & RXf_PMf_MULTILINE) {
5553 gimme_scalar = gimme == G_SCALAR && !ary;
5556 limit = maxiters + 2;
5557 if (RX_EXTFLAGS(rx) & RXf_WHITE) {
5560 /* this one uses 'm' and is a negative test */
5562 while (m < strend && !( *m == ' ' || is_utf8_space((U8*)m) )) {
5563 const int t = UTF8SKIP(m);
5564 /* is_utf8_space returns FALSE for malform utf8 */
5571 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5572 while (m < strend && !isSPACE_LC(*m))
5575 while (m < strend && !isSPACE(*m))
5588 dstr = newSVpvn_flags(s, m-s,
5589 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5593 /* skip the whitespace found last */
5595 s = m + UTF8SKIP(m);
5599 /* this one uses 's' and is a positive test */
5601 while (s < strend && ( *s == ' ' || is_utf8_space((U8*)s) ))
5604 else if (get_regex_charset(RX_EXTFLAGS(rx)) == REGEX_LOCALE_CHARSET) {
5605 while (s < strend && isSPACE_LC(*s))
5608 while (s < strend && isSPACE(*s))
5613 else if (RX_EXTFLAGS(rx) & RXf_START_ONLY) {
5615 for (m = s; m < strend && *m != '\n'; m++)
5628 dstr = newSVpvn_flags(s, m-s,
5629 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5635 else if (RX_EXTFLAGS(rx) & RXf_NULL && !(s >= strend)) {
5637 Pre-extend the stack, either the number of bytes or
5638 characters in the string or a limited amount, triggered by:
5640 my ($x, $y) = split //, $str;
5644 if (!gimme_scalar) {
5645 const U32 items = limit - 1;
5654 /* keep track of how many bytes we skip over */
5664 dstr = newSVpvn_flags(m, s-m, SVf_UTF8 | make_mortal);
5677 dstr = newSVpvn(s, 1);
5693 else if (do_utf8 == (RX_UTF8(rx) != 0) &&
5694 (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) && !RX_NPARENS(rx)
5695 && (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
5696 && !(RX_EXTFLAGS(rx) & RXf_ANCH)) {
5697 const int tail = (RX_EXTFLAGS(rx) & RXf_INTUIT_TAIL);
5698 SV * const csv = CALLREG_INTUIT_STRING(rx);
5700 len = RX_MINLENRET(rx);
5701 if (len == 1 && !RX_UTF8(rx) && !tail) {
5702 const char c = *SvPV_nolen_const(csv);
5704 for (m = s; m < strend && *m != c; m++)
5715 dstr = newSVpvn_flags(s, m-s,
5716 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5719 /* The rx->minlen is in characters but we want to step
5720 * s ahead by bytes. */
5722 s = (char*)utf8_hop((U8*)m, len);
5724 s = m + len; /* Fake \n at the end */
5728 while (s < strend && --limit &&
5729 (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
5730 csv, multiline ? FBMrf_MULTILINE : 0)) )
5739 dstr = newSVpvn_flags(s, m-s,
5740 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5743 /* The rx->minlen is in characters but we want to step
5744 * s ahead by bytes. */
5746 s = (char*)utf8_hop((U8*)m, len);
5748 s = m + len; /* Fake \n at the end */
5753 maxiters += slen * RX_NPARENS(rx);
5754 while (s < strend && --limit)
5758 rex_return = CALLREGEXEC(rx, (char*)s, (char*)strend, (char*)orig, 1 ,
5759 sv, NULL, SvSCREAM(sv) ? REXEC_SCREAM : 0);
5761 if (rex_return == 0)
5763 TAINT_IF(RX_MATCH_TAINTED(rx));
5764 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
5767 orig = RX_SUBBEG(rx);
5769 strend = s + (strend - m);
5771 m = RX_OFFS(rx)[0].start + orig;
5780 dstr = newSVpvn_flags(s, m-s,
5781 (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5784 if (RX_NPARENS(rx)) {
5786 for (i = 1; i <= (I32)RX_NPARENS(rx); i++) {
5787 s = RX_OFFS(rx)[i].start + orig;
5788 m = RX_OFFS(rx)[i].end + orig;
5790 /* japhy (07/27/01) -- the (m && s) test doesn't catch
5791 parens that didn't match -- they should be set to
5792 undef, not the empty string */
5800 if (m >= orig && s >= orig) {
5801 dstr = newSVpvn_flags(s, m-s,
5802 (do_utf8 ? SVf_UTF8 : 0)
5806 dstr = &PL_sv_undef; /* undef, not "" */
5812 s = RX_OFFS(rx)[0].end + orig;
5816 if (!gimme_scalar) {
5817 iters = (SP - PL_stack_base) - base;
5819 if (iters > maxiters)
5820 DIE(aTHX_ "Split loop");
5822 /* keep field after final delim? */
5823 if (s < strend || (iters && origlimit)) {
5824 if (!gimme_scalar) {
5825 const STRLEN l = strend - s;
5826 dstr = newSVpvn_flags(s, l, (do_utf8 ? SVf_UTF8 : 0) | make_mortal);
5831 else if (!origlimit) {
5833 iters -= trailing_empty;
5835 while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) {
5836 if (TOPs && !make_mortal)
5838 *SP-- = &PL_sv_undef;
5845 LEAVE_SCOPE(oldsave); /* may undo an earlier SWITCHSTACK */
5849 if (SvSMAGICAL(ary)) {
5851 mg_set(MUTABLE_SV(ary));
5854 if (gimme == G_ARRAY) {
5856 Copy(AvARRAY(ary), SP + 1, iters, SV*);
5863 ENTER_with_name("call_PUSH");
5864 call_method("PUSH",G_SCALAR|G_DISCARD);
5865 LEAVE_with_name("call_PUSH");
5867 if (gimme == G_ARRAY) {
5869 /* EXTEND should not be needed - we just popped them */
5871 for (i=0; i < iters; i++) {
5872 SV **svp = av_fetch(ary, i, FALSE);
5873 PUSHs((svp) ? *svp : &PL_sv_undef);
5880 if (gimme == G_ARRAY)
5892 SV *const sv = PAD_SVl(PL_op->op_targ);
5894 if (SvPADSTALE(sv)) {
5897 RETURNOP(cLOGOP->op_other);
5899 RETURNOP(cLOGOP->op_next);
5909 if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
5910 || SvTYPE(retsv) == SVt_PVCV) {
5911 retsv = refto(retsv);
5918 PP(unimplemented_op)
5921 const Optype op_type = PL_op->op_type;
5922 /* Using OP_NAME() isn't going to be helpful here. Firstly, it doesn't cope
5923 with out of range op numbers - it only "special" cases op_custom.
5924 Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
5925 if we get here for a custom op then that means that the custom op didn't
5926 have an implementation. Given that OP_NAME() looks up the custom op
5927 by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
5928 registers &PL_unimplemented_op as the address of their custom op.
5929 NULL doesn't generate a useful error message. "custom" does. */
5930 const char *const name = op_type >= OP_max
5931 ? "[out of range]" : PL_op_name[PL_op->op_type];
5932 if(OP_IS_SOCKET(op_type))
5933 DIE(aTHX_ PL_no_sock_func, name);
5934 DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
5941 HV * const hv = (HV*)POPs;
5943 if (SvTYPE(hv) != SVt_PVHV) { XPUSHs(&PL_sv_no); RETURN; }
5945 if (SvRMAGICAL(hv)) {
5946 MAGIC * const mg = mg_find((SV*)hv, PERL_MAGIC_tied);
5948 XPUSHs(magic_scalarpack(hv, mg));
5953 XPUSHs(boolSV(HvUSEDKEYS(hv) != 0));
5957 /* For sorting out arguments passed to a &CORE:: subroutine */
5961 int opnum = SvIOK(cSVOP_sv) ? (int)SvUV(cSVOP_sv) : 0;
5962 int defgv = PL_opargs[opnum] & OA_DEFGV, whicharg = 0;
5963 AV * const at_ = GvAV(PL_defgv);
5964 SV **svp = AvARRAY(at_);
5965 I32 minargs = 0, maxargs = 0, numargs = AvFILLp(at_)+1;
5966 I32 oa = opnum ? PL_opargs[opnum] >> OASHIFT : 0;
5967 bool seen_question = 0;
5968 const char *err = NULL;
5969 const bool pushmark = PL_op->op_private & OPpCOREARGS_PUSHMARK;
5971 /* Count how many args there are first, to get some idea how far to
5972 extend the stack. */
5974 if ((oa & 7) == OA_LIST) { maxargs = I32_MAX; break; }
5976 if (oa & OA_OPTIONAL) seen_question = 1;
5977 if (!seen_question) minargs++;
5981 if(numargs < minargs) err = "Not enough";
5982 else if(numargs > maxargs) err = "Too many";
5984 /* diag_listed_as: Too many arguments for %s */
5986 "%s arguments for %s", err,
5987 opnum ? OP_DESC(PL_op->op_next) : SvPV_nolen_const(cSVOP_sv)
5990 /* Reset the stack pointer. Without this, we end up returning our own
5991 arguments in list context, in addition to the values we are supposed
5992 to return. nextstate usually does this on sub entry, but we need
5993 to run the next op with the caller’s hints, so we cannot have a
5995 SP = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
5997 if(!maxargs) RETURN;
5999 /* We do this here, rather than with a separate pushmark op, as it has
6000 to come in between two things this function does (stack reset and
6001 arg pushing). This seems the easiest way to do it. */
6004 (void)Perl_pp_pushmark(aTHX);
6007 EXTEND(SP, maxargs == I32_MAX ? numargs : maxargs);
6008 PUTBACK; /* The code below can die in various places. */
6010 oa = PL_opargs[opnum] >> OASHIFT;
6011 for (; oa&&(numargs||!pushmark); (void)(numargs&&(++svp,--numargs))) {
6015 if (!numargs && defgv && whicharg == minargs + 1) {
6016 PERL_SI * const oldsi = PL_curstackinfo;
6017 I32 const oldcxix = oldsi->si_cxix;
6019 if (oldcxix) oldsi->si_cxix--;
6020 else PL_curstackinfo = oldsi->si_prev;
6021 caller = find_runcv(NULL);
6022 PL_curstackinfo = oldsi;
6023 oldsi->si_cxix = oldcxix;
6024 PUSHs(find_rundefsv2(
6025 caller,cxstack[cxstack_ix].blk_oldcop->cop_seq
6028 else PUSHs(numargs ? svp && *svp ? *svp : &PL_sv_undef : NULL);
6032 PUSHs(svp && *svp ? *svp : &PL_sv_undef);
6037 if (!svp || !*svp || !SvROK(*svp)
6038 || SvTYPE(SvRV(*svp)) != SVt_PVHV)
6040 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
6041 "Type of arg %d to &CORE::%s must be hash reference",
6042 whicharg, OP_DESC(PL_op->op_next)
6047 if (!numargs) PUSHs(NULL);
6048 else if(svp && *svp && SvROK(*svp) && isGV_with_GP(SvRV(*svp)))
6049 /* no magic here, as the prototype will have added an extra
6050 refgen and we just want what was there before that */
6053 const bool constr = PL_op->op_private & whicharg;
6055 svp && *svp ? *svp : &PL_sv_undef,
6056 constr, CopHINTS_get(PL_curcop) & HINT_STRICT_REFS,
6063 const bool wantscalar =
6064 PL_op->op_private & OPpCOREARGS_SCALARMOD;
6065 if (!svp || !*svp || !SvROK(*svp)
6066 /* We have to permit globrefs even for the \$ proto, as
6067 *foo is indistinguishable from ${\*foo}, and the proto-
6068 type permits the latter. */
6069 || SvTYPE(SvRV(*svp)) > (
6070 wantscalar ? SVt_PVLV
6071 : opnum == OP_LOCK ? SVt_PVCV
6076 /* diag_listed_as: Type of arg %d to &CORE::%s must be %s*/
6077 "Type of arg %d to &CORE::%s must be %s",
6078 whicharg, OP_DESC(PL_op->op_next),
6080 ? "scalar reference"
6082 ? "reference to one of [$@%&*]"
6083 : "reference to one of [$@%*]"
6089 DIE(aTHX_ "panic: unknown OA_*: %x", (unsigned)(oa&7));
6099 * c-indentation-style: bsd
6101 * indent-tabs-mode: t
6104 * ex: set ts=8 sts=4 sw=4 noet: