3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
19 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
21 static void do_report_used(pTHXo_ SV *sv);
22 static void do_clean_objs(pTHXo_ SV *sv);
23 #ifndef DISABLE_DESTRUCTOR_KLUDGE
24 static void do_clean_named_objs(pTHXo_ SV *sv);
26 static void do_clean_all(pTHXo_ SV *sv);
29 * "A time to plant, and a time to uproot what was planted..."
34 SvANY(p) = (void *)PL_sv_root; \
35 SvFLAGS(p) = SVTYPEMASK; \
40 /* sv_mutex must be held while calling uproot_SV() */
41 #define uproot_SV(p) \
44 PL_sv_root = (SV*)SvANY(p); \
66 if (PL_debug & 32768) \
76 if (PL_debug & 32768) {
81 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
83 svend = &sva[SvREFCNT(sva)];
84 if (p >= sv && p < svend)
88 if (ckWARN_d(WARN_INTERNAL))
89 Perl_warner(aTHX_ WARN_INTERNAL,
90 "Attempt to free non-arena SV: 0x%"UVxf,
98 #else /* ! DEBUGGING */
100 #define del_SV(p) plant_SV(p)
102 #endif /* DEBUGGING */
105 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
110 Zero(ptr, size, char);
112 /* The first SV in an arena isn't an SV. */
113 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
114 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
115 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
117 PL_sv_arenaroot = sva;
118 PL_sv_root = sva + 1;
120 svend = &sva[SvREFCNT(sva) - 1];
123 SvANY(sv) = (void *)(SV*)(sv + 1);
124 SvFLAGS(sv) = SVTYPEMASK;
128 SvFLAGS(sv) = SVTYPEMASK;
131 /* sv_mutex must be held while calling more_sv() */
138 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
139 PL_nice_chunk = Nullch;
142 char *chunk; /* must use New here to match call to */
143 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
144 sv_add_arena(chunk, 1008, 0);
151 S_visit(pTHX_ SVFUNC_t f)
157 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
158 svend = &sva[SvREFCNT(sva)];
159 for (sv = sva + 1; sv < svend; ++sv) {
160 if (SvTYPE(sv) != SVTYPEMASK)
167 Perl_sv_report_used(pTHX)
169 visit(do_report_used);
173 Perl_sv_clean_objs(pTHX)
175 PL_in_clean_objs = TRUE;
176 visit(do_clean_objs);
177 #ifndef DISABLE_DESTRUCTOR_KLUDGE
178 /* some barnacles may yet remain, clinging to typeglobs */
179 visit(do_clean_named_objs);
181 PL_in_clean_objs = FALSE;
185 Perl_sv_clean_all(pTHX)
187 PL_in_clean_all = TRUE;
189 PL_in_clean_all = FALSE;
193 Perl_sv_free_arenas(pTHX)
197 XPV *arena, *arenanext;
199 /* Free arenas here, but be careful about fake ones. (We assume
200 contiguity of the fake ones with the corresponding real ones.) */
202 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
203 svanext = (SV*) SvANY(sva);
204 while (svanext && SvFAKE(svanext))
205 svanext = (SV*) SvANY(svanext);
208 Safefree((void *)sva);
211 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
212 arenanext = (XPV*)arena->xpv_pv;
215 PL_xiv_arenaroot = 0;
217 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
218 arenanext = (XPV*)arena->xpv_pv;
221 PL_xnv_arenaroot = 0;
223 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
224 arenanext = (XPV*)arena->xpv_pv;
227 PL_xrv_arenaroot = 0;
229 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
230 arenanext = (XPV*)arena->xpv_pv;
233 PL_xpv_arenaroot = 0;
235 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
236 arenanext = (XPV*)arena->xpv_pv;
239 PL_xpviv_arenaroot = 0;
241 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
242 arenanext = (XPV*)arena->xpv_pv;
245 PL_xpvnv_arenaroot = 0;
247 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
248 arenanext = (XPV*)arena->xpv_pv;
251 PL_xpvcv_arenaroot = 0;
253 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
254 arenanext = (XPV*)arena->xpv_pv;
257 PL_xpvav_arenaroot = 0;
259 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
260 arenanext = (XPV*)arena->xpv_pv;
263 PL_xpvhv_arenaroot = 0;
265 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
266 arenanext = (XPV*)arena->xpv_pv;
269 PL_xpvmg_arenaroot = 0;
271 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
272 arenanext = (XPV*)arena->xpv_pv;
275 PL_xpvlv_arenaroot = 0;
277 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
278 arenanext = (XPV*)arena->xpv_pv;
281 PL_xpvbm_arenaroot = 0;
283 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
284 arenanext = (XPV*)arena->xpv_pv;
290 Safefree(PL_nice_chunk);
291 PL_nice_chunk = Nullch;
292 PL_nice_chunk_size = 0;
298 Perl_report_uninit(pTHX)
301 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
302 " in ", PL_op_desc[PL_op->op_type]);
304 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
316 * See comment in more_xiv() -- RAM.
318 PL_xiv_root = *(IV**)xiv;
320 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
324 S_del_xiv(pTHX_ XPVIV *p)
326 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
328 *(IV**)xiv = PL_xiv_root;
339 New(705, ptr, 1008/sizeof(XPV), XPV);
340 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
341 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
344 xivend = &xiv[1008 / sizeof(IV) - 1];
345 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
347 while (xiv < xivend) {
348 *(IV**)xiv = (IV *)(xiv + 1);
362 PL_xnv_root = *(NV**)xnv;
364 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
368 S_del_xnv(pTHX_ XPVNV *p)
370 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
372 *(NV**)xnv = PL_xnv_root;
383 New(711, ptr, 1008/sizeof(XPV), XPV);
384 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
385 PL_xnv_arenaroot = ptr;
388 xnvend = &xnv[1008 / sizeof(NV) - 1];
389 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
391 while (xnv < xnvend) {
392 *(NV**)xnv = (NV*)(xnv + 1);
406 PL_xrv_root = (XRV*)xrv->xrv_rv;
412 S_del_xrv(pTHX_ XRV *p)
415 p->xrv_rv = (SV*)PL_xrv_root;
424 register XRV* xrvend;
426 New(712, ptr, 1008/sizeof(XPV), XPV);
427 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
428 PL_xrv_arenaroot = ptr;
431 xrvend = &xrv[1008 / sizeof(XRV) - 1];
432 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
434 while (xrv < xrvend) {
435 xrv->xrv_rv = (SV*)(xrv + 1);
449 PL_xpv_root = (XPV*)xpv->xpv_pv;
455 S_del_xpv(pTHX_ XPV *p)
458 p->xpv_pv = (char*)PL_xpv_root;
467 register XPV* xpvend;
468 New(713, xpv, 1008/sizeof(XPV), XPV);
469 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
470 PL_xpv_arenaroot = xpv;
472 xpvend = &xpv[1008 / sizeof(XPV) - 1];
474 while (xpv < xpvend) {
475 xpv->xpv_pv = (char*)(xpv + 1);
488 xpviv = PL_xpviv_root;
489 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
495 S_del_xpviv(pTHX_ XPVIV *p)
498 p->xpv_pv = (char*)PL_xpviv_root;
506 register XPVIV* xpviv;
507 register XPVIV* xpvivend;
508 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
509 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
510 PL_xpviv_arenaroot = xpviv;
512 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
513 PL_xpviv_root = ++xpviv;
514 while (xpviv < xpvivend) {
515 xpviv->xpv_pv = (char*)(xpviv + 1);
528 xpvnv = PL_xpvnv_root;
529 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
535 S_del_xpvnv(pTHX_ XPVNV *p)
538 p->xpv_pv = (char*)PL_xpvnv_root;
546 register XPVNV* xpvnv;
547 register XPVNV* xpvnvend;
548 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
549 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
550 PL_xpvnv_arenaroot = xpvnv;
552 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
553 PL_xpvnv_root = ++xpvnv;
554 while (xpvnv < xpvnvend) {
555 xpvnv->xpv_pv = (char*)(xpvnv + 1);
568 xpvcv = PL_xpvcv_root;
569 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
575 S_del_xpvcv(pTHX_ XPVCV *p)
578 p->xpv_pv = (char*)PL_xpvcv_root;
586 register XPVCV* xpvcv;
587 register XPVCV* xpvcvend;
588 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
589 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
590 PL_xpvcv_arenaroot = xpvcv;
592 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
593 PL_xpvcv_root = ++xpvcv;
594 while (xpvcv < xpvcvend) {
595 xpvcv->xpv_pv = (char*)(xpvcv + 1);
608 xpvav = PL_xpvav_root;
609 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
615 S_del_xpvav(pTHX_ XPVAV *p)
618 p->xav_array = (char*)PL_xpvav_root;
626 register XPVAV* xpvav;
627 register XPVAV* xpvavend;
628 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
629 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
630 PL_xpvav_arenaroot = xpvav;
632 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
633 PL_xpvav_root = ++xpvav;
634 while (xpvav < xpvavend) {
635 xpvav->xav_array = (char*)(xpvav + 1);
638 xpvav->xav_array = 0;
648 xpvhv = PL_xpvhv_root;
649 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
655 S_del_xpvhv(pTHX_ XPVHV *p)
658 p->xhv_array = (char*)PL_xpvhv_root;
666 register XPVHV* xpvhv;
667 register XPVHV* xpvhvend;
668 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
669 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
670 PL_xpvhv_arenaroot = xpvhv;
672 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
673 PL_xpvhv_root = ++xpvhv;
674 while (xpvhv < xpvhvend) {
675 xpvhv->xhv_array = (char*)(xpvhv + 1);
678 xpvhv->xhv_array = 0;
688 xpvmg = PL_xpvmg_root;
689 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
695 S_del_xpvmg(pTHX_ XPVMG *p)
698 p->xpv_pv = (char*)PL_xpvmg_root;
706 register XPVMG* xpvmg;
707 register XPVMG* xpvmgend;
708 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
709 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
710 PL_xpvmg_arenaroot = xpvmg;
712 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
713 PL_xpvmg_root = ++xpvmg;
714 while (xpvmg < xpvmgend) {
715 xpvmg->xpv_pv = (char*)(xpvmg + 1);
728 xpvlv = PL_xpvlv_root;
729 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
735 S_del_xpvlv(pTHX_ XPVLV *p)
738 p->xpv_pv = (char*)PL_xpvlv_root;
746 register XPVLV* xpvlv;
747 register XPVLV* xpvlvend;
748 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
749 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
750 PL_xpvlv_arenaroot = xpvlv;
752 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
753 PL_xpvlv_root = ++xpvlv;
754 while (xpvlv < xpvlvend) {
755 xpvlv->xpv_pv = (char*)(xpvlv + 1);
768 xpvbm = PL_xpvbm_root;
769 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
775 S_del_xpvbm(pTHX_ XPVBM *p)
778 p->xpv_pv = (char*)PL_xpvbm_root;
786 register XPVBM* xpvbm;
787 register XPVBM* xpvbmend;
788 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
789 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
790 PL_xpvbm_arenaroot = xpvbm;
792 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
793 PL_xpvbm_root = ++xpvbm;
794 while (xpvbm < xpvbmend) {
795 xpvbm->xpv_pv = (char*)(xpvbm + 1);
802 # define my_safemalloc(s) (void*)safexmalloc(717,s)
803 # define my_safefree(p) safexfree((char*)p)
805 # define my_safemalloc(s) (void*)safemalloc(s)
806 # define my_safefree(p) safefree((char*)p)
811 #define new_XIV() my_safemalloc(sizeof(XPVIV))
812 #define del_XIV(p) my_safefree(p)
814 #define new_XNV() my_safemalloc(sizeof(XPVNV))
815 #define del_XNV(p) my_safefree(p)
817 #define new_XRV() my_safemalloc(sizeof(XRV))
818 #define del_XRV(p) my_safefree(p)
820 #define new_XPV() my_safemalloc(sizeof(XPV))
821 #define del_XPV(p) my_safefree(p)
823 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
824 #define del_XPVIV(p) my_safefree(p)
826 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
827 #define del_XPVNV(p) my_safefree(p)
829 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
830 #define del_XPVCV(p) my_safefree(p)
832 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
833 #define del_XPVAV(p) my_safefree(p)
835 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
836 #define del_XPVHV(p) my_safefree(p)
838 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
839 #define del_XPVMG(p) my_safefree(p)
841 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
842 #define del_XPVLV(p) my_safefree(p)
844 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
845 #define del_XPVBM(p) my_safefree(p)
849 #define new_XIV() (void*)new_xiv()
850 #define del_XIV(p) del_xiv((XPVIV*) p)
852 #define new_XNV() (void*)new_xnv()
853 #define del_XNV(p) del_xnv((XPVNV*) p)
855 #define new_XRV() (void*)new_xrv()
856 #define del_XRV(p) del_xrv((XRV*) p)
858 #define new_XPV() (void*)new_xpv()
859 #define del_XPV(p) del_xpv((XPV *)p)
861 #define new_XPVIV() (void*)new_xpviv()
862 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
864 #define new_XPVNV() (void*)new_xpvnv()
865 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
867 #define new_XPVCV() (void*)new_xpvcv()
868 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
870 #define new_XPVAV() (void*)new_xpvav()
871 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
873 #define new_XPVHV() (void*)new_xpvhv()
874 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
876 #define new_XPVMG() (void*)new_xpvmg()
877 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
879 #define new_XPVLV() (void*)new_xpvlv()
880 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
882 #define new_XPVBM() (void*)new_xpvbm()
883 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
887 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
888 #define del_XPVGV(p) my_safefree(p)
890 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
891 #define del_XPVFM(p) my_safefree(p)
893 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
894 #define del_XPVIO(p) my_safefree(p)
897 =for apidoc sv_upgrade
899 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
906 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
916 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
920 if (SvTYPE(sv) == mt)
926 switch (SvTYPE(sv)) {
947 else if (mt < SVt_PVIV)
964 pv = (char*)SvRV(sv);
984 else if (mt == SVt_NV)
995 del_XPVIV(SvANY(sv));
1005 del_XPVNV(SvANY(sv));
1013 magic = SvMAGIC(sv);
1014 stash = SvSTASH(sv);
1015 del_XPVMG(SvANY(sv));
1018 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1023 Perl_croak(aTHX_ "Can't upgrade to undef");
1025 SvANY(sv) = new_XIV();
1029 SvANY(sv) = new_XNV();
1033 SvANY(sv) = new_XRV();
1037 SvANY(sv) = new_XPV();
1043 SvANY(sv) = new_XPVIV();
1053 SvANY(sv) = new_XPVNV();
1061 SvANY(sv) = new_XPVMG();
1067 SvMAGIC(sv) = magic;
1068 SvSTASH(sv) = stash;
1071 SvANY(sv) = new_XPVLV();
1077 SvMAGIC(sv) = magic;
1078 SvSTASH(sv) = stash;
1085 SvANY(sv) = new_XPVAV();
1093 SvMAGIC(sv) = magic;
1094 SvSTASH(sv) = stash;
1100 SvANY(sv) = new_XPVHV();
1108 SvMAGIC(sv) = magic;
1109 SvSTASH(sv) = stash;
1116 SvANY(sv) = new_XPVCV();
1117 Zero(SvANY(sv), 1, XPVCV);
1123 SvMAGIC(sv) = magic;
1124 SvSTASH(sv) = stash;
1127 SvANY(sv) = new_XPVGV();
1133 SvMAGIC(sv) = magic;
1134 SvSTASH(sv) = stash;
1142 SvANY(sv) = new_XPVBM();
1148 SvMAGIC(sv) = magic;
1149 SvSTASH(sv) = stash;
1155 SvANY(sv) = new_XPVFM();
1156 Zero(SvANY(sv), 1, XPVFM);
1162 SvMAGIC(sv) = magic;
1163 SvSTASH(sv) = stash;
1166 SvANY(sv) = new_XPVIO();
1167 Zero(SvANY(sv), 1, XPVIO);
1173 SvMAGIC(sv) = magic;
1174 SvSTASH(sv) = stash;
1175 IoPAGE_LEN(sv) = 60;
1178 SvFLAGS(sv) &= ~SVTYPEMASK;
1184 Perl_sv_backoff(pTHX_ register SV *sv)
1188 char *s = SvPVX(sv);
1189 SvLEN(sv) += SvIVX(sv);
1190 SvPVX(sv) -= SvIVX(sv);
1192 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1194 SvFLAGS(sv) &= ~SVf_OOK;
1201 Expands the character buffer in the SV. This will use C<sv_unref> and will
1202 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1209 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1213 #ifdef HAS_64K_LIMIT
1214 if (newlen >= 0x10000) {
1215 PerlIO_printf(Perl_debug_log,
1216 "Allocation too large: %"UVxf"\n", (UV)newlen);
1219 #endif /* HAS_64K_LIMIT */
1222 if (SvTYPE(sv) < SVt_PV) {
1223 sv_upgrade(sv, SVt_PV);
1226 else if (SvOOK(sv)) { /* pv is offset? */
1229 if (newlen > SvLEN(sv))
1230 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1231 #ifdef HAS_64K_LIMIT
1232 if (newlen >= 0x10000)
1238 if (newlen > SvLEN(sv)) { /* need more room? */
1239 if (SvLEN(sv) && s) {
1240 #if defined(MYMALLOC) && !defined(LEAKTEST)
1241 STRLEN l = malloced_size((void*)SvPVX(sv));
1247 Renew(s,newlen,char);
1250 New(703,s,newlen,char);
1252 SvLEN_set(sv, newlen);
1258 =for apidoc sv_setiv
1260 Copies an integer into the given SV. Does not handle 'set' magic. See
1267 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1269 SV_CHECK_THINKFIRST(sv);
1270 switch (SvTYPE(sv)) {
1272 sv_upgrade(sv, SVt_IV);
1275 sv_upgrade(sv, SVt_PVNV);
1279 sv_upgrade(sv, SVt_PVIV);
1288 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1289 PL_op_desc[PL_op->op_type]);
1291 (void)SvIOK_only(sv); /* validate number */
1297 =for apidoc sv_setiv_mg
1299 Like C<sv_setiv>, but also handles 'set' magic.
1305 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1312 =for apidoc sv_setuv
1314 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1321 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1323 /* With these two if statements:
1324 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1327 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1329 If you wish to remove them, please benchmark to see what the effect is
1331 if (u <= (UV)IV_MAX) {
1332 sv_setiv(sv, (IV)u);
1341 =for apidoc sv_setuv_mg
1343 Like C<sv_setuv>, but also handles 'set' magic.
1349 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1351 /* With these two if statements:
1352 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1355 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1357 If you wish to remove them, please benchmark to see what the effect is
1359 if (u <= (UV)IV_MAX) {
1360 sv_setiv(sv, (IV)u);
1370 =for apidoc sv_setnv
1372 Copies a double into the given SV. Does not handle 'set' magic. See
1379 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1381 SV_CHECK_THINKFIRST(sv);
1382 switch (SvTYPE(sv)) {
1385 sv_upgrade(sv, SVt_NV);
1390 sv_upgrade(sv, SVt_PVNV);
1399 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1400 PL_op_name[PL_op->op_type]);
1403 (void)SvNOK_only(sv); /* validate number */
1408 =for apidoc sv_setnv_mg
1410 Like C<sv_setnv>, but also handles 'set' magic.
1416 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1423 S_not_a_number(pTHX_ SV *sv)
1428 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1429 /* each *s can expand to 4 chars + "...\0",
1430 i.e. need room for 8 chars */
1432 for (s = SvPVX(sv); *s && d < limit; s++) {
1434 if (ch & 128 && !isPRINT_LC(ch)) {
1443 else if (ch == '\r') {
1447 else if (ch == '\f') {
1451 else if (ch == '\\') {
1455 else if (isPRINT_LC(ch))
1470 Perl_warner(aTHX_ WARN_NUMERIC,
1471 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1472 PL_op_desc[PL_op->op_type]);
1474 Perl_warner(aTHX_ WARN_NUMERIC,
1475 "Argument \"%s\" isn't numeric", tmpbuf);
1478 /* the number can be converted to integer with atol() or atoll() although */
1479 #define IS_NUMBER_TO_INT_BY_ATOL 0x01 /* integer (may have decimals) */
1480 #define IS_NUMBER_TO_INT_BY_STRTOL 0x02 /* it may exceed IV_MAX */
1481 #define IS_NUMBER_TO_INT_BY_ATOF 0x04 /* seen something like 123e4 */
1482 #define IS_NUMBER_LONGER_THAN_IV_MAX 0x08 /* more digits than IV_MAX */
1483 #define IS_NUMBER_AS_LONG_AS_IV_MAX 0x10 /* may(be not) larger than IV_MAX */
1484 #define IS_NUMBER_NOT_INT 0x20 /* seen a decimal point or e */
1485 #define IS_NUMBER_NEG 0x40 /* seen a leading - */
1486 #define IS_NUMBER_INFINITY 0x80 /* /^\s*-?Infinity\s*$/i */
1488 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1489 until proven guilty, assume that things are not that bad... */
1491 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1492 an IV (an assumption perl has been based on to date) it becomes necessary
1493 to remove the assumption that the NV always carries enough precision to
1494 recreate the IV whenever needed, and that the NV is the canonical form.
1495 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1496 precision as an side effect of conversion (which would lead to insanity
1497 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1498 1) to distinguish between IV/UV/NV slots that have cached a valid
1499 conversion where precision was lost and IV/UV/NV slots that have a
1500 valid conversion which has lost no precision
1501 2) to ensure that if a numeric conversion to one form is request that
1502 would lose precision, the precise conversion (or differently
1503 imprecise conversion) is also performed and cached, to prevent
1504 requests for different numeric formats on the same SV causing
1505 lossy conversion chains. (lossless conversion chains are perfectly
1510 SvIOKp is true if the IV slot contains a valid value
1511 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1512 SvNOKp is true if the NV slot contains a valid value
1513 SvNOK is true only if the NV value is accurate
1516 while converting from PV to NV check to see if converting that NV to an
1517 IV(or UV) would lose accuracy over a direct conversion from PV to
1518 IV(or UV). If it would, cache both conversions, return NV, but mark
1519 SV as IOK NOKp (ie not NOK).
1521 while converting from PV to IV check to see if converting that IV to an
1522 NV would lose accuracy over a direct conversion from PV to NV. If it
1523 would, cache both conversions, flag similarly.
1525 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1526 correctly because if IV & NV were set NV *always* overruled.
1527 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1528 changes - now IV and NV together means that the two are interchangeable
1529 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1531 The benefit of this is operations such as pp_add know that if SvIOK is
1532 true for both left and right operands, then integer addition can be
1533 used instead of floating point. (for cases where the result won't
1534 overflow) Before, floating point was always used, which could lead to
1535 loss of precision compared with integer addition.
1537 * making IV and NV equal status should make maths accurate on 64 bit
1539 * may speed up maths somewhat if pp_add and friends start to use
1540 integers when possible instead of fp. (hopefully the overhead in
1541 looking for SvIOK and checking for overflow will not outweigh the
1542 fp to integer speedup)
1543 * will slow down integer operations (callers of SvIV) on "inaccurate"
1544 values, as the change from SvIOK to SvIOKp will cause a call into
1545 sv_2iv each time rather than a macro access direct to the IV slot
1546 * should speed up number->string conversion on integers as IV is
1547 favoured when IV and NV equally accurate
1549 ####################################################################
1550 You had better be using SvIOK_notUV if you want an IV for arithmetic
1551 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1552 SvUOK is true iff UV.
1553 ####################################################################
1555 Your mileage will vary depending your CPUs relative fp to integer
1559 #ifndef NV_PRESERVES_UV
1560 #define IS_NUMBER_UNDERFLOW_IV 1
1561 #define IS_NUMBER_UNDERFLOW_UV 2
1562 #define IS_NUMBER_IV_AND_UV 2
1563 #define IS_NUMBER_OVERFLOW_IV 4
1564 #define IS_NUMBER_OVERFLOW_UV 5
1565 /* Hopefully your optimiser will consider inlining these two functions. */
1567 S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
1568 NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
1569 UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
1570 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, (UV)numtype));
1571 if (nv_as_uv <= (UV)IV_MAX) {
1572 (void)SvIOKp_on(sv);
1573 (void)SvNOKp_on(sv);
1574 /* Within suitable range to fit in an IV, atol won't overflow */
1575 /* XXX quite sure? Is that your final answer? not really, I'm
1576 trusting that nv_as_uv to round down if NV is (IV_MAX + 1) */
1577 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1578 if (numtype & IS_NUMBER_NOT_INT) {
1579 /* I believe that even if the original PV had decimals, they
1580 are lost beyond the limit of the FP precision.
1581 However, neither is canonical, so both only get p flags.
1583 /* Both already have p flags, so do nothing */
1584 } else if (SvIVX(sv) == I_V(nv)) {
1589 /* It had no "." so it must be integer. assert (get in here from
1590 sv_2iv and sv_2uv only for ndef HAS_STRTOL and
1591 IS_NUMBER_AS_LONG_AS_IV_MAX) or my logic is faulty and all
1592 conversion routines need audit. */
1594 return nv < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1596 /* between IV_MAX and NV(UV_MAX). Could be slightly> UV_MAX */
1597 (void)SvIOKp_on(sv);
1598 (void)SvNOKp_on(sv);
1601 int save_errno = errno;
1603 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1605 if (numtype & IS_NUMBER_NOT_INT) {
1606 /* UV and NV both imprecise. */
1608 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1617 return IS_NUMBER_OVERFLOW_IV;
1621 /* Must have just overflowed UV, but not enough that an NV could spot
1623 return IS_NUMBER_OVERFLOW_UV;
1626 /* We've just lost integer precision, nothing we could do. */
1627 SvUVX(sv) = nv_as_uv;
1628 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, (UV)numtype));
1629 /* UV and NV slots equally valid only if we have casting symmetry. */
1630 if (numtype & IS_NUMBER_NOT_INT) {
1632 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1633 /* UV_MAX can cast up to NV (UV_MAX+1), that NV casts down to UV_MAX
1634 UV_MAX ought to be 0xFF...FFF which won't preserve (We only
1635 get to this point if NVs don't preserve UVs) */
1640 /* As above, I believe UV at least as good as NV */
1643 #endif /* HAS_STRTOUL */
1644 return IS_NUMBER_OVERFLOW_IV;
1647 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1649 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1651 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1652 if (SvNVX(sv) < (NV)IV_MIN) {
1653 (void)SvIOKp_on(sv);
1656 return IS_NUMBER_UNDERFLOW_IV;
1658 if (SvNVX(sv) > (NV)UV_MAX) {
1659 (void)SvIOKp_on(sv);
1663 return IS_NUMBER_OVERFLOW_UV;
1665 if (!(numtype & (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
1666 (void)SvIOKp_on(sv);
1668 /* Can't use strtol etc to convert this string */
1669 if (SvNVX(sv) <= (UV)IV_MAX) {
1670 SvIVX(sv) = I_V(SvNVX(sv));
1671 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1672 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1674 /* Integer is imprecise. NOK, IOKp */
1676 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1679 SvUVX(sv) = U_V(SvNVX(sv));
1680 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1681 if (SvUVX(sv) == UV_MAX) {
1682 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1683 possibly be preserved by NV. Hence, it must be overflow.
1685 return IS_NUMBER_OVERFLOW_UV;
1687 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1689 /* Integer is imprecise. NOK, IOKp */
1691 return IS_NUMBER_OVERFLOW_IV;
1693 return S_sv_2inuv_non_preserve(aTHX_ sv, numtype);
1695 #endif /* NV_PRESERVES_UV*/
1698 Perl_sv_2iv(pTHX_ register SV *sv)
1702 if (SvGMAGICAL(sv)) {
1707 return I_V(SvNVX(sv));
1709 if (SvPOKp(sv) && SvLEN(sv))
1712 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1713 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1719 if (SvTHINKFIRST(sv)) {
1722 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1723 (SvRV(tmpstr) != SvRV(sv)))
1724 return SvIV(tmpstr);
1725 return PTR2IV(SvRV(sv));
1727 if (SvREADONLY(sv) && SvFAKE(sv)) {
1728 sv_force_normal(sv);
1730 if (SvREADONLY(sv) && !SvOK(sv)) {
1731 if (ckWARN(WARN_UNINITIALIZED))
1738 return (IV)(SvUVX(sv));
1745 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1746 * without also getting a cached IV/UV from it at the same time
1747 * (ie PV->NV conversion should detect loss of accuracy and cache
1748 * IV or UV at same time to avoid this. NWC */
1750 if (SvTYPE(sv) == SVt_NV)
1751 sv_upgrade(sv, SVt_PVNV);
1753 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1754 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1755 certainly cast into the IV range at IV_MAX, whereas the correct
1756 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1758 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1759 SvIVX(sv) = I_V(SvNVX(sv));
1760 if (SvNVX(sv) == (NV) SvIVX(sv)
1761 #ifndef NV_PRESERVES_UV
1762 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1763 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1764 /* Don't flag it as "accurately an integer" if the number
1765 came from a (by definition imprecise) NV operation, and
1766 we're outside the range of NV integer precision */
1769 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1770 DEBUG_c(PerlIO_printf(Perl_debug_log,
1771 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1777 /* IV not precise. No need to convert from PV, as NV
1778 conversion would already have cached IV if it detected
1779 that PV->IV would be better than PV->NV->IV
1780 flags already correct - don't set public IOK. */
1781 DEBUG_c(PerlIO_printf(Perl_debug_log,
1782 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1787 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1788 but the cast (NV)IV_MIN rounds to a the value less (more
1789 negative) than IV_MIN which happens to be equal to SvNVX ??
1790 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1791 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1792 (NV)UVX == NVX are both true, but the values differ. :-(
1793 Hopefully for 2s complement IV_MIN is something like
1794 0x8000000000000000 which will be exact. NWC */
1797 SvUVX(sv) = U_V(SvNVX(sv));
1799 (SvNVX(sv) == (NV) SvUVX(sv))
1800 #ifndef NV_PRESERVES_UV
1801 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1802 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1803 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1804 /* Don't flag it as "accurately an integer" if the number
1805 came from a (by definition imprecise) NV operation, and
1806 we're outside the range of NV integer precision */
1812 DEBUG_c(PerlIO_printf(Perl_debug_log,
1813 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1817 return (IV)SvUVX(sv);
1820 else if (SvPOKp(sv) && SvLEN(sv)) {
1821 I32 numtype = looks_like_number(sv);
1823 /* We want to avoid a possible problem when we cache an IV which
1824 may be later translated to an NV, and the resulting NV is not
1825 the translation of the initial data.
1827 This means that if we cache such an IV, we need to cache the
1828 NV as well. Moreover, we trade speed for space, and do not
1829 cache the NV if we are sure it's not needed.
1832 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1833 /* The NV may be reconstructed from IV - safe to cache IV,
1834 which may be calculated by atol(). */
1835 if (SvTYPE(sv) < SVt_PVIV)
1836 sv_upgrade(sv, SVt_PVIV);
1838 SvIVX(sv) = Atol(SvPVX(sv));
1842 int save_errno = errno;
1843 /* Is it an integer that we could convert with strtol?
1844 So try it, and if it doesn't set errno then it's pukka.
1845 This should be faster than going atof and then thinking. */
1846 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1847 == IS_NUMBER_TO_INT_BY_STRTOL)
1848 /* && is a sequence point. Without it not sure if I'm trying
1849 to do too much between sequence points and hence going
1851 && ((errno = 0), 1) /* , 1 so always true */
1852 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1854 if (SvTYPE(sv) < SVt_PVIV)
1855 sv_upgrade(sv, SVt_PVIV);
1864 /* Hopefully trace flow will optimise this away where possible
1868 /* It wasn't an integer, or it overflowed, or we don't have
1869 strtol. Do things the slow way - check if it's a UV etc. */
1870 d = Atof(SvPVX(sv));
1872 if (SvTYPE(sv) < SVt_PVNV)
1873 sv_upgrade(sv, SVt_PVNV);
1876 if (! numtype && ckWARN(WARN_NUMERIC))
1879 #if defined(USE_LONG_DOUBLE)
1880 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1881 PTR2UV(sv), SvNVX(sv)));
1883 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
1884 PTR2UV(sv), SvNVX(sv)));
1888 #ifdef NV_PRESERVES_UV
1889 (void)SvIOKp_on(sv);
1891 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1892 SvIVX(sv) = I_V(SvNVX(sv));
1893 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1896 /* Integer is imprecise. NOK, IOKp */
1898 /* UV will not work better than IV */
1900 if (SvNVX(sv) > (NV)UV_MAX) {
1902 /* Integer is inaccurate. NOK, IOKp, is UV */
1906 SvUVX(sv) = U_V(SvNVX(sv));
1907 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
1908 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1912 /* Integer is imprecise. NOK, IOKp, is UV */
1918 #else /* NV_PRESERVES_UV */
1919 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1920 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1921 /* Small enough to preserve all bits. */
1922 (void)SvIOKp_on(sv);
1924 SvIVX(sv) = I_V(SvNVX(sv));
1925 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1927 /* Assumption: first non-preserved integer is < IV_MAX,
1928 this NV is in the preserved range, therefore: */
1929 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1931 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
1933 } else if (sv_2iuv_non_preserve (sv, numtype)
1934 >= IS_NUMBER_OVERFLOW_IV)
1936 #endif /* NV_PRESERVES_UV */
1940 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1942 if (SvTYPE(sv) < SVt_IV)
1943 /* Typically the caller expects that sv_any is not NULL now. */
1944 sv_upgrade(sv, SVt_IV);
1947 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1948 PTR2UV(sv),SvIVX(sv)));
1949 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1953 Perl_sv_2uv(pTHX_ register SV *sv)
1957 if (SvGMAGICAL(sv)) {
1962 return U_V(SvNVX(sv));
1963 if (SvPOKp(sv) && SvLEN(sv))
1966 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1967 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1973 if (SvTHINKFIRST(sv)) {
1976 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1977 (SvRV(tmpstr) != SvRV(sv)))
1978 return SvUV(tmpstr);
1979 return PTR2UV(SvRV(sv));
1981 if (SvREADONLY(sv) && SvFAKE(sv)) {
1982 sv_force_normal(sv);
1984 if (SvREADONLY(sv) && !SvOK(sv)) {
1985 if (ckWARN(WARN_UNINITIALIZED))
1995 return (UV)SvIVX(sv);
1999 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2000 * without also getting a cached IV/UV from it at the same time
2001 * (ie PV->NV conversion should detect loss of accuracy and cache
2002 * IV or UV at same time to avoid this. */
2003 /* IV-over-UV optimisation - choose to cache IV if possible */
2005 if (SvTYPE(sv) == SVt_NV)
2006 sv_upgrade(sv, SVt_PVNV);
2008 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2009 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2010 SvIVX(sv) = I_V(SvNVX(sv));
2011 if (SvNVX(sv) == (NV) SvIVX(sv)
2012 #ifndef NV_PRESERVES_UV
2013 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2014 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2015 /* Don't flag it as "accurately an integer" if the number
2016 came from a (by definition imprecise) NV operation, and
2017 we're outside the range of NV integer precision */
2020 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2021 DEBUG_c(PerlIO_printf(Perl_debug_log,
2022 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2028 /* IV not precise. No need to convert from PV, as NV
2029 conversion would already have cached IV if it detected
2030 that PV->IV would be better than PV->NV->IV
2031 flags already correct - don't set public IOK. */
2032 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2038 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2039 but the cast (NV)IV_MIN rounds to a the value less (more
2040 negative) than IV_MIN which happens to be equal to SvNVX ??
2041 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2042 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2043 (NV)UVX == NVX are both true, but the values differ. :-(
2044 Hopefully for 2s complement IV_MIN is something like
2045 0x8000000000000000 which will be exact. NWC */
2048 SvUVX(sv) = U_V(SvNVX(sv));
2050 (SvNVX(sv) == (NV) SvUVX(sv))
2051 #ifndef NV_PRESERVES_UV
2052 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2053 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2054 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2055 /* Don't flag it as "accurately an integer" if the number
2056 came from a (by definition imprecise) NV operation, and
2057 we're outside the range of NV integer precision */
2062 DEBUG_c(PerlIO_printf(Perl_debug_log,
2063 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2069 else if (SvPOKp(sv) && SvLEN(sv)) {
2070 I32 numtype = looks_like_number(sv);
2072 /* We want to avoid a possible problem when we cache a UV which
2073 may be later translated to an NV, and the resulting NV is not
2074 the translation of the initial data.
2076 This means that if we cache such a UV, we need to cache the
2077 NV as well. Moreover, we trade speed for space, and do not
2078 cache the NV if not needed.
2081 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
2082 /* The NV may be reconstructed from IV - safe to cache IV,
2083 which may be calculated by atol(). */
2084 if (SvTYPE(sv) < SVt_PVIV)
2085 sv_upgrade(sv, SVt_PVIV);
2087 SvIVX(sv) = Atol(SvPVX(sv));
2091 char *num_begin = SvPVX(sv);
2092 int save_errno = errno;
2094 /* seems that strtoul taking numbers that start with - is
2095 implementation dependant, and can't be relied upon. */
2096 if (numtype & IS_NUMBER_NEG) {
2097 /* Not totally defensive. assumine that looks_like_num
2098 didn't lie about a - sign */
2099 while (isSPACE(*num_begin))
2101 if (*num_begin == '-')
2105 /* Is it an integer that we could convert with strtoul?
2106 So try it, and if it doesn't set errno then it's pukka.
2107 This should be faster than going atof and then thinking. */
2108 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2109 == IS_NUMBER_TO_INT_BY_STRTOL)
2110 && ((errno = 0), 1) /* always true */
2111 && ((u = Strtoul(num_begin, Null(char**), 10)), 1) /* ditto */
2113 /* If known to be negative, check it didn't undeflow IV
2114 XXX possibly we should put more negative values as NVs
2115 direct rather than go via atof below */
2116 && ((numtype & IS_NUMBER_NEG) ? (u <= (UV)IV_MIN) : 1)) {
2119 if (SvTYPE(sv) < SVt_PVIV)
2120 sv_upgrade(sv, SVt_PVIV);
2123 /* If it's negative must use IV.
2124 IV-over-UV optimisation */
2125 if (numtype & IS_NUMBER_NEG) {
2127 } else if (u <= (UV) IV_MAX) {
2130 /* it didn't overflow, and it was positive. */
2139 /* Hopefully trace flow will optimise this away where possible
2143 /* It wasn't an integer, or it overflowed, or we don't have
2144 strtol. Do things the slow way - check if it's a IV etc. */
2145 d = Atof(SvPVX(sv));
2147 if (SvTYPE(sv) < SVt_PVNV)
2148 sv_upgrade(sv, SVt_PVNV);
2151 if (! numtype && ckWARN(WARN_NUMERIC))
2154 #if defined(USE_LONG_DOUBLE)
2155 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2156 PTR2UV(sv), SvNVX(sv)));
2158 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2159 PTR2UV(sv), SvNVX(sv)));
2162 #ifdef NV_PRESERVES_UV
2163 (void)SvIOKp_on(sv);
2165 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2166 SvIVX(sv) = I_V(SvNVX(sv));
2167 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2170 /* Integer is imprecise. NOK, IOKp */
2172 /* UV will not work better than IV */
2174 if (SvNVX(sv) > (NV)UV_MAX) {
2176 /* Integer is inaccurate. NOK, IOKp, is UV */
2180 SvUVX(sv) = U_V(SvNVX(sv));
2181 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2182 NV preservse UV so can do correct comparison. */
2183 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2187 /* Integer is imprecise. NOK, IOKp, is UV */
2192 #else /* NV_PRESERVES_UV */
2193 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2194 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2195 /* Small enough to preserve all bits. */
2196 (void)SvIOKp_on(sv);
2198 SvIVX(sv) = I_V(SvNVX(sv));
2199 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2201 /* Assumption: first non-preserved integer is < IV_MAX,
2202 this NV is in the preserved range, therefore: */
2203 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2205 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2208 sv_2iuv_non_preserve (sv, numtype);
2209 #endif /* NV_PRESERVES_UV */
2214 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2215 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2218 if (SvTYPE(sv) < SVt_IV)
2219 /* Typically the caller expects that sv_any is not NULL now. */
2220 sv_upgrade(sv, SVt_IV);
2224 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2225 PTR2UV(sv),SvUVX(sv)));
2226 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2230 Perl_sv_2nv(pTHX_ register SV *sv)
2234 if (SvGMAGICAL(sv)) {
2238 if (SvPOKp(sv) && SvLEN(sv)) {
2239 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2241 return Atof(SvPVX(sv));
2245 return (NV)SvUVX(sv);
2247 return (NV)SvIVX(sv);
2250 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2251 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2257 if (SvTHINKFIRST(sv)) {
2260 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2261 (SvRV(tmpstr) != SvRV(sv)))
2262 return SvNV(tmpstr);
2263 return PTR2NV(SvRV(sv));
2265 if (SvREADONLY(sv) && SvFAKE(sv)) {
2266 sv_force_normal(sv);
2268 if (SvREADONLY(sv) && !SvOK(sv)) {
2269 if (ckWARN(WARN_UNINITIALIZED))
2274 if (SvTYPE(sv) < SVt_NV) {
2275 if (SvTYPE(sv) == SVt_IV)
2276 sv_upgrade(sv, SVt_PVNV);
2278 sv_upgrade(sv, SVt_NV);
2279 #if defined(USE_LONG_DOUBLE)
2281 STORE_NUMERIC_LOCAL_SET_STANDARD();
2282 PerlIO_printf(Perl_debug_log,
2283 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2284 PTR2UV(sv), SvNVX(sv));
2285 RESTORE_NUMERIC_LOCAL();
2289 STORE_NUMERIC_LOCAL_SET_STANDARD();
2290 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2291 PTR2UV(sv), SvNVX(sv));
2292 RESTORE_NUMERIC_LOCAL();
2296 else if (SvTYPE(sv) < SVt_PVNV)
2297 sv_upgrade(sv, SVt_PVNV);
2299 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2301 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2302 #ifdef NV_PRESERVES_UV
2305 /* Only set the public NV OK flag if this NV preserves the IV */
2306 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2307 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2308 : (SvIVX(sv) == I_V(SvNVX(sv))))
2314 else if (SvPOKp(sv) && SvLEN(sv)) {
2315 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2317 SvNVX(sv) = Atof(SvPVX(sv));
2318 #ifdef NV_PRESERVES_UV
2321 /* Only set the public NV OK flag if this NV preserves the value in
2322 the PV at least as well as an IV/UV would.
2323 Not sure how to do this 100% reliably. */
2324 /* if that shift count is out of range then Configure's test is
2325 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2327 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2328 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2329 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2330 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2331 /* Definitely too large/small to fit in an integer, so no loss
2332 of precision going to integer in the future via NV */
2335 /* Is it something we can run through strtol etc (ie no
2336 trailing exponent part)? */
2337 int numtype = looks_like_number(sv);
2338 /* XXX probably should cache this if called above */
2341 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2342 /* Can't use strtol etc to convert this string, so don't try */
2345 sv_2inuv_non_preserve (sv, numtype);
2347 #endif /* NV_PRESERVES_UV */
2350 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2352 if (SvTYPE(sv) < SVt_NV)
2353 /* Typically the caller expects that sv_any is not NULL now. */
2354 /* XXX Ilya implies that this is a bug in callers that assume this
2355 and ideally should be fixed. */
2356 sv_upgrade(sv, SVt_NV);
2359 #if defined(USE_LONG_DOUBLE)
2361 STORE_NUMERIC_LOCAL_SET_STANDARD();
2362 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2363 PTR2UV(sv), SvNVX(sv));
2364 RESTORE_NUMERIC_LOCAL();
2368 STORE_NUMERIC_LOCAL_SET_STANDARD();
2369 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2370 PTR2UV(sv), SvNVX(sv));
2371 RESTORE_NUMERIC_LOCAL();
2378 S_asIV(pTHX_ SV *sv)
2380 I32 numtype = looks_like_number(sv);
2383 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2384 return Atol(SvPVX(sv));
2386 if (ckWARN(WARN_NUMERIC))
2389 d = Atof(SvPVX(sv));
2394 S_asUV(pTHX_ SV *sv)
2396 I32 numtype = looks_like_number(sv);
2399 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2400 return Strtoul(SvPVX(sv), Null(char**), 10);
2403 if (ckWARN(WARN_NUMERIC))
2406 return U_V(Atof(SvPVX(sv)));
2410 * Returns a combination of (advisory only - can get false negatives)
2411 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2412 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2413 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2414 * 0 if does not look like number.
2416 * (atol and strtol stop when they hit a decimal point. strtol will return
2417 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2418 * do this, and vendors have had 11 years to get it right.
2419 * However, will try to make it still work with only atol
2421 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2422 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2423 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2424 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2425 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2426 * IS_NUMBER_NOT_INT saw "." or "e"
2428 * IS_NUMBER_INFINITY
2432 =for apidoc looks_like_number
2434 Test if an the content of an SV looks like a number (or is a
2435 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2436 issue a non-numeric warning), even if your atof() doesn't grok them.
2442 Perl_looks_like_number(pTHX_ SV *sv)
2445 register char *send;
2446 register char *sbegin;
2447 register char *nbegin;
2451 #ifdef USE_LOCALE_NUMERIC
2452 bool specialradix = FALSE;
2459 else if (SvPOKp(sv))
2460 sbegin = SvPV(sv, len);
2463 send = sbegin + len;
2470 numtype = IS_NUMBER_NEG;
2477 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2478 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2479 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2480 * will need (int)atof().
2483 /* next must be digit or the radix separator or beginning of infinity */
2487 } while (isDIGIT(*s));
2489 /* Aaargh. long long really is irritating.
2490 In the gospel according to ANSI 1989, it is an axiom that "long"
2491 is the longest integer type, and that if you don't know how long
2492 something is you can cast it to long, and nothing will be lost
2493 (except possibly speed of execution if long is slower than the
2495 Now, one can't be sure if the old rules apply, or long long
2496 (or some other newfangled thing) is actually longer than the
2497 (formerly) longest thing.
2499 /* This lot will work for 64 bit *as long as* either
2500 either long is 64 bit
2501 or we can find both strtol/strtoq and strtoul/strtouq
2502 If not, we really should refuse to let the user use 64 bit IVs
2503 By "64 bit" I really mean IVs that don't get preserved by NVs
2504 It also should work for 128 bit IVs. Can any lend me a machine to
2507 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2508 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2509 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2510 ? sizeof(long) : sizeof (IV))*8-1))
2511 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2513 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2514 digit less (IV_MAX= 9223372036854775807,
2515 UV_MAX= 18446744073709551615) so be cautious */
2516 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2519 #ifdef USE_LOCALE_NUMERIC
2520 || (specialradix = IS_NUMERIC_RADIX(s))
2523 #ifdef USE_LOCALE_NUMERIC
2525 s += SvCUR(PL_numeric_radix);
2529 numtype |= IS_NUMBER_NOT_INT;
2530 while (isDIGIT(*s)) /* optional digits after the radix */
2535 #ifdef USE_LOCALE_NUMERIC
2536 || (specialradix = IS_NUMERIC_RADIX(s))
2539 #ifdef USE_LOCALE_NUMERIC
2541 s += SvCUR(PL_numeric_radix);
2545 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2546 /* no digits before the radix means we need digits after it */
2550 } while (isDIGIT(*s));
2555 else if (*s == 'I' || *s == 'i') {
2556 s++; if (*s != 'N' && *s != 'n') return 0;
2557 s++; if (*s != 'F' && *s != 'f') return 0;
2558 s++; if (*s == 'I' || *s == 'i') {
2559 s++; if (*s != 'N' && *s != 'n') return 0;
2560 s++; if (*s != 'I' && *s != 'i') return 0;
2561 s++; if (*s != 'T' && *s != 't') return 0;
2562 s++; if (*s != 'Y' && *s != 'y') return 0;
2571 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2572 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2574 /* we can have an optional exponent part */
2575 if (*s == 'e' || *s == 'E') {
2576 numtype &= IS_NUMBER_NEG;
2577 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2579 if (*s == '+' || *s == '-')
2584 } while (isDIGIT(*s));
2594 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2595 return IS_NUMBER_TO_INT_BY_ATOL;
2600 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2603 return sv_2pv(sv, &n_a);
2606 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2608 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2610 char *ptr = buf + TYPE_CHARS(UV);
2624 *--ptr = '0' + (uv % 10);
2633 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2638 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2639 char *tmpbuf = tbuf;
2645 if (SvGMAGICAL(sv)) {
2653 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2655 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2660 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2665 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2666 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2673 if (SvTHINKFIRST(sv)) {
2676 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2677 (SvRV(tmpstr) != SvRV(sv)))
2678 return SvPV(tmpstr,*lp);
2685 switch (SvTYPE(sv)) {
2687 if ( ((SvFLAGS(sv) &
2688 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2689 == (SVs_OBJECT|SVs_RMG))
2690 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2691 && (mg = mg_find(sv, 'r'))) {
2692 regexp *re = (regexp *)mg->mg_obj;
2695 char *fptr = "msix";
2700 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2702 while((ch = *fptr++)) {
2704 reflags[left++] = ch;
2707 reflags[right--] = ch;
2712 reflags[left] = '-';
2716 mg->mg_len = re->prelen + 4 + left;
2717 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2718 Copy("(?", mg->mg_ptr, 2, char);
2719 Copy(reflags, mg->mg_ptr+2, left, char);
2720 Copy(":", mg->mg_ptr+left+2, 1, char);
2721 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2722 mg->mg_ptr[mg->mg_len - 1] = ')';
2723 mg->mg_ptr[mg->mg_len] = 0;
2725 PL_reginterp_cnt += re->program[0].next_off;
2737 case SVt_PVBM: if (SvROK(sv))
2740 s = "SCALAR"; break;
2741 case SVt_PVLV: s = "LVALUE"; break;
2742 case SVt_PVAV: s = "ARRAY"; break;
2743 case SVt_PVHV: s = "HASH"; break;
2744 case SVt_PVCV: s = "CODE"; break;
2745 case SVt_PVGV: s = "GLOB"; break;
2746 case SVt_PVFM: s = "FORMAT"; break;
2747 case SVt_PVIO: s = "IO"; break;
2748 default: s = "UNKNOWN"; break;
2752 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2755 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2761 if (SvREADONLY(sv) && !SvOK(sv)) {
2762 if (ckWARN(WARN_UNINITIALIZED))
2768 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2769 /* I'm assuming that if both IV and NV are equally valid then
2770 converting the IV is going to be more efficient */
2771 U32 isIOK = SvIOK(sv);
2772 U32 isUIOK = SvIsUV(sv);
2773 char buf[TYPE_CHARS(UV)];
2776 if (SvTYPE(sv) < SVt_PVIV)
2777 sv_upgrade(sv, SVt_PVIV);
2779 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2781 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2782 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2783 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2784 SvCUR_set(sv, ebuf - ptr);
2794 else if (SvNOKp(sv)) {
2795 if (SvTYPE(sv) < SVt_PVNV)
2796 sv_upgrade(sv, SVt_PVNV);
2797 /* The +20 is pure guesswork. Configure test needed. --jhi */
2798 SvGROW(sv, NV_DIG + 20);
2800 olderrno = errno; /* some Xenix systems wipe out errno here */
2802 if (SvNVX(sv) == 0.0)
2803 (void)strcpy(s,"0");
2807 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2810 #ifdef FIXNEGATIVEZERO
2811 if (*s == '-' && s[1] == '0' && !s[2])
2821 if (ckWARN(WARN_UNINITIALIZED)
2822 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2825 if (SvTYPE(sv) < SVt_PV)
2826 /* Typically the caller expects that sv_any is not NULL now. */
2827 sv_upgrade(sv, SVt_PV);
2830 *lp = s - SvPVX(sv);
2833 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2834 PTR2UV(sv),SvPVX(sv)));
2838 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2839 /* Sneaky stuff here */
2843 tsv = newSVpv(tmpbuf, 0);
2859 len = strlen(tmpbuf);
2861 #ifdef FIXNEGATIVEZERO
2862 if (len == 2 && t[0] == '-' && t[1] == '0') {
2867 (void)SvUPGRADE(sv, SVt_PV);
2869 s = SvGROW(sv, len + 1);
2878 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2881 return sv_2pvbyte(sv, &n_a);
2885 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2887 return sv_2pv(sv,lp);
2891 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2894 return sv_2pvutf8(sv, &n_a);
2898 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2900 sv_utf8_upgrade(sv);
2901 return SvPV(sv,*lp);
2904 /* This function is only called on magical items */
2906 Perl_sv_2bool(pTHX_ register SV *sv)
2915 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2916 (SvRV(tmpsv) != SvRV(sv)))
2917 return SvTRUE(tmpsv);
2918 return SvRV(sv) != 0;
2921 register XPV* Xpvtmp;
2922 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2923 (*Xpvtmp->xpv_pv > '0' ||
2924 Xpvtmp->xpv_cur > 1 ||
2925 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2932 return SvIVX(sv) != 0;
2935 return SvNVX(sv) != 0.0;
2943 =for apidoc sv_utf8_upgrade
2945 Convert the PV of an SV to its UTF8-encoded form.
2951 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2956 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2959 /* This function could be much more efficient if we had a FLAG in SVs
2960 * to signal if there are any hibit chars in the PV.
2961 * Given that there isn't make loop fast as possible
2967 if ((hibit = UTF8_IS_CONTINUED(*t++)))
2974 if (SvREADONLY(sv) && SvFAKE(sv)) {
2975 sv_force_normal(sv);
2978 len = SvCUR(sv) + 1; /* Plus the \0 */
2979 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2980 SvCUR(sv) = len - 1;
2982 Safefree(s); /* No longer using what was there before. */
2983 SvLEN(sv) = len; /* No longer know the real size. */
2989 =for apidoc sv_utf8_downgrade
2991 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2992 This may not be possible if the PV contains non-byte encoding characters;
2993 if this is the case, either returns false or, if C<fail_ok> is not
3000 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3002 if (SvPOK(sv) && SvUTF8(sv)) {
3007 if (SvREADONLY(sv) && SvFAKE(sv))
3008 sv_force_normal(sv);
3010 if (!utf8_to_bytes((U8*)s, &len)) {
3015 Perl_croak(aTHX_ "Wide character in %s",
3016 PL_op_desc[PL_op->op_type]);
3018 Perl_croak(aTHX_ "Wide character");
3030 =for apidoc sv_utf8_encode
3032 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3033 flag so that it looks like bytes again. Nothing calls this.
3039 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3041 sv_utf8_upgrade(sv);
3046 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3051 bool has_utf = FALSE;
3052 if (!sv_utf8_downgrade(sv, TRUE))
3055 /* it is actually just a matter of turning the utf8 flag on, but
3056 * we want to make sure everything inside is valid utf8 first.
3059 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3063 if (UTF8_IS_CONTINUED(*c++)) {
3073 /* Note: sv_setsv() should not be called with a source string that needs
3074 * to be reused, since it may destroy the source string if it is marked
3079 =for apidoc sv_setsv
3081 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3082 The source SV may be destroyed if it is mortal. Does not handle 'set'
3083 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3090 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3092 register U32 sflags;
3098 SV_CHECK_THINKFIRST(dstr);
3100 sstr = &PL_sv_undef;
3101 stype = SvTYPE(sstr);
3102 dtype = SvTYPE(dstr);
3106 /* There's a lot of redundancy below but we're going for speed here */
3111 if (dtype != SVt_PVGV) {
3112 (void)SvOK_off(dstr);
3120 sv_upgrade(dstr, SVt_IV);
3123 sv_upgrade(dstr, SVt_PVNV);
3127 sv_upgrade(dstr, SVt_PVIV);
3130 (void)SvIOK_only(dstr);
3131 SvIVX(dstr) = SvIVX(sstr);
3134 if (SvTAINTED(sstr))
3145 sv_upgrade(dstr, SVt_NV);
3150 sv_upgrade(dstr, SVt_PVNV);
3153 SvNVX(dstr) = SvNVX(sstr);
3154 (void)SvNOK_only(dstr);
3155 if (SvTAINTED(sstr))
3163 sv_upgrade(dstr, SVt_RV);
3164 else if (dtype == SVt_PVGV &&
3165 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3168 if (GvIMPORTED(dstr) != GVf_IMPORTED
3169 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3171 GvIMPORTED_on(dstr);
3182 sv_upgrade(dstr, SVt_PV);
3185 if (dtype < SVt_PVIV)
3186 sv_upgrade(dstr, SVt_PVIV);
3189 if (dtype < SVt_PVNV)
3190 sv_upgrade(dstr, SVt_PVNV);
3197 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3198 PL_op_name[PL_op->op_type]);
3200 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3204 if (dtype <= SVt_PVGV) {
3206 if (dtype != SVt_PVGV) {
3207 char *name = GvNAME(sstr);
3208 STRLEN len = GvNAMELEN(sstr);
3209 sv_upgrade(dstr, SVt_PVGV);
3210 sv_magic(dstr, dstr, '*', Nullch, 0);
3211 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3212 GvNAME(dstr) = savepvn(name, len);
3213 GvNAMELEN(dstr) = len;
3214 SvFAKE_on(dstr); /* can coerce to non-glob */
3216 /* ahem, death to those who redefine active sort subs */
3217 else if (PL_curstackinfo->si_type == PERLSI_SORT
3218 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3219 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3222 #ifdef GV_SHARED_CHECK
3223 if (GvSHARED((GV*)dstr)) {
3224 Perl_croak(aTHX_ PL_no_modify);
3228 (void)SvOK_off(dstr);
3229 GvINTRO_off(dstr); /* one-shot flag */
3231 GvGP(dstr) = gp_ref(GvGP(sstr));
3232 if (SvTAINTED(sstr))
3234 if (GvIMPORTED(dstr) != GVf_IMPORTED
3235 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3237 GvIMPORTED_on(dstr);
3245 if (SvGMAGICAL(sstr)) {
3247 if (SvTYPE(sstr) != stype) {
3248 stype = SvTYPE(sstr);
3249 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3253 if (stype == SVt_PVLV)
3254 (void)SvUPGRADE(dstr, SVt_PVNV);
3256 (void)SvUPGRADE(dstr, stype);
3259 sflags = SvFLAGS(sstr);
3261 if (sflags & SVf_ROK) {
3262 if (dtype >= SVt_PV) {
3263 if (dtype == SVt_PVGV) {
3264 SV *sref = SvREFCNT_inc(SvRV(sstr));
3266 int intro = GvINTRO(dstr);
3268 #ifdef GV_SHARED_CHECK
3269 if (GvSHARED((GV*)dstr)) {
3270 Perl_croak(aTHX_ PL_no_modify);
3277 GvINTRO_off(dstr); /* one-shot flag */
3278 Newz(602,gp, 1, GP);
3279 GvGP(dstr) = gp_ref(gp);
3280 GvSV(dstr) = NEWSV(72,0);
3281 GvLINE(dstr) = CopLINE(PL_curcop);
3282 GvEGV(dstr) = (GV*)dstr;
3285 switch (SvTYPE(sref)) {
3288 SAVESPTR(GvAV(dstr));
3290 dref = (SV*)GvAV(dstr);
3291 GvAV(dstr) = (AV*)sref;
3292 if (!GvIMPORTED_AV(dstr)
3293 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3295 GvIMPORTED_AV_on(dstr);
3300 SAVESPTR(GvHV(dstr));
3302 dref = (SV*)GvHV(dstr);
3303 GvHV(dstr) = (HV*)sref;
3304 if (!GvIMPORTED_HV(dstr)
3305 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3307 GvIMPORTED_HV_on(dstr);
3312 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3313 SvREFCNT_dec(GvCV(dstr));
3314 GvCV(dstr) = Nullcv;
3315 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3316 PL_sub_generation++;
3318 SAVESPTR(GvCV(dstr));
3321 dref = (SV*)GvCV(dstr);
3322 if (GvCV(dstr) != (CV*)sref) {
3323 CV* cv = GvCV(dstr);
3325 if (!GvCVGEN((GV*)dstr) &&
3326 (CvROOT(cv) || CvXSUB(cv)))
3329 /* ahem, death to those who redefine
3330 * active sort subs */
3331 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3332 PL_sortcop == CvSTART(cv))
3334 "Can't redefine active sort subroutine %s",
3335 GvENAME((GV*)dstr));
3336 /* Redefining a sub - warning is mandatory if
3337 it was a const and its value changed. */
3338 if (ckWARN(WARN_REDEFINE)
3340 && (!CvCONST((CV*)sref)
3341 || sv_cmp(cv_const_sv(cv),
3342 cv_const_sv((CV*)sref)))))
3344 Perl_warner(aTHX_ WARN_REDEFINE,
3346 ? "Constant subroutine %s redefined"
3347 : "Subroutine %s redefined",
3348 GvENAME((GV*)dstr));
3351 cv_ckproto(cv, (GV*)dstr,
3352 SvPOK(sref) ? SvPVX(sref) : Nullch);
3354 GvCV(dstr) = (CV*)sref;
3355 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3356 GvASSUMECV_on(dstr);
3357 PL_sub_generation++;
3359 if (!GvIMPORTED_CV(dstr)
3360 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3362 GvIMPORTED_CV_on(dstr);
3367 SAVESPTR(GvIOp(dstr));
3369 dref = (SV*)GvIOp(dstr);
3370 GvIOp(dstr) = (IO*)sref;
3374 SAVESPTR(GvFORM(dstr));
3376 dref = (SV*)GvFORM(dstr);
3377 GvFORM(dstr) = (CV*)sref;
3381 SAVESPTR(GvSV(dstr));
3383 dref = (SV*)GvSV(dstr);
3385 if (!GvIMPORTED_SV(dstr)
3386 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3388 GvIMPORTED_SV_on(dstr);
3396 if (SvTAINTED(sstr))
3401 (void)SvOOK_off(dstr); /* backoff */
3403 Safefree(SvPVX(dstr));
3404 SvLEN(dstr)=SvCUR(dstr)=0;
3407 (void)SvOK_off(dstr);
3408 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3410 if (sflags & SVp_NOK) {
3412 /* Only set the public OK flag if the source has public OK. */
3413 if (sflags & SVf_NOK)
3414 SvFLAGS(dstr) |= SVf_NOK;
3415 SvNVX(dstr) = SvNVX(sstr);
3417 if (sflags & SVp_IOK) {
3418 (void)SvIOKp_on(dstr);
3419 if (sflags & SVf_IOK)
3420 SvFLAGS(dstr) |= SVf_IOK;
3421 if (sflags & SVf_IVisUV)
3423 SvIVX(dstr) = SvIVX(sstr);
3425 if (SvAMAGIC(sstr)) {
3429 else if (sflags & SVp_POK) {
3432 * Check to see if we can just swipe the string. If so, it's a
3433 * possible small lose on short strings, but a big win on long ones.
3434 * It might even be a win on short strings if SvPVX(dstr)
3435 * has to be allocated and SvPVX(sstr) has to be freed.
3438 if (SvTEMP(sstr) && /* slated for free anyway? */
3439 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3440 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3441 SvLEN(sstr) && /* and really is a string */
3442 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3444 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3446 SvFLAGS(dstr) &= ~SVf_OOK;
3447 Safefree(SvPVX(dstr) - SvIVX(dstr));
3449 else if (SvLEN(dstr))
3450 Safefree(SvPVX(dstr));
3452 (void)SvPOK_only(dstr);
3453 SvPV_set(dstr, SvPVX(sstr));
3454 SvLEN_set(dstr, SvLEN(sstr));
3455 SvCUR_set(dstr, SvCUR(sstr));
3458 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3459 SvPV_set(sstr, Nullch);
3464 else { /* have to copy actual string */
3465 STRLEN len = SvCUR(sstr);
3467 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3468 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3469 SvCUR_set(dstr, len);
3470 *SvEND(dstr) = '\0';
3471 (void)SvPOK_only(dstr);
3473 if (sflags & SVf_UTF8)
3476 if (sflags & SVp_NOK) {
3478 if (sflags & SVf_NOK)
3479 SvFLAGS(dstr) |= SVf_NOK;
3480 SvNVX(dstr) = SvNVX(sstr);
3482 if (sflags & SVp_IOK) {
3483 (void)SvIOKp_on(dstr);
3484 if (sflags & SVf_IOK)
3485 SvFLAGS(dstr) |= SVf_IOK;
3486 if (sflags & SVf_IVisUV)
3488 SvIVX(dstr) = SvIVX(sstr);
3491 else if (sflags & SVp_IOK) {
3492 if (sflags & SVf_IOK)
3493 (void)SvIOK_only(dstr);
3498 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3499 if (sflags & SVf_IVisUV)
3501 SvIVX(dstr) = SvIVX(sstr);
3502 if (sflags & SVp_NOK) {
3503 if (sflags & SVf_NOK)
3504 (void)SvNOK_on(dstr);
3506 (void)SvNOKp_on(dstr);
3507 SvNVX(dstr) = SvNVX(sstr);
3510 else if (sflags & SVp_NOK) {
3511 if (sflags & SVf_NOK)
3512 (void)SvNOK_only(dstr);
3517 SvNVX(dstr) = SvNVX(sstr);
3520 if (dtype == SVt_PVGV) {
3521 if (ckWARN(WARN_MISC))
3522 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3525 (void)SvOK_off(dstr);
3527 if (SvTAINTED(sstr))
3532 =for apidoc sv_setsv_mg
3534 Like C<sv_setsv>, but also handles 'set' magic.
3540 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3542 sv_setsv(dstr,sstr);
3547 =for apidoc sv_setpvn
3549 Copies a string into an SV. The C<len> parameter indicates the number of
3550 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3556 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3558 register char *dptr;
3560 SV_CHECK_THINKFIRST(sv);
3566 /* len is STRLEN which is unsigned, need to copy to signed */
3570 (void)SvUPGRADE(sv, SVt_PV);
3572 SvGROW(sv, len + 1);
3574 Move(ptr,dptr,len,char);
3577 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3582 =for apidoc sv_setpvn_mg
3584 Like C<sv_setpvn>, but also handles 'set' magic.
3590 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3592 sv_setpvn(sv,ptr,len);
3597 =for apidoc sv_setpv
3599 Copies a string into an SV. The string must be null-terminated. Does not
3600 handle 'set' magic. See C<sv_setpv_mg>.
3606 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3608 register STRLEN len;
3610 SV_CHECK_THINKFIRST(sv);
3616 (void)SvUPGRADE(sv, SVt_PV);
3618 SvGROW(sv, len + 1);
3619 Move(ptr,SvPVX(sv),len+1,char);
3621 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3626 =for apidoc sv_setpv_mg
3628 Like C<sv_setpv>, but also handles 'set' magic.
3634 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3641 =for apidoc sv_usepvn
3643 Tells an SV to use C<ptr> to find its string value. Normally the string is
3644 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3645 The C<ptr> should point to memory that was allocated by C<malloc>. The
3646 string length, C<len>, must be supplied. This function will realloc the
3647 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3648 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3649 See C<sv_usepvn_mg>.
3655 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3657 SV_CHECK_THINKFIRST(sv);
3658 (void)SvUPGRADE(sv, SVt_PV);
3663 (void)SvOOK_off(sv);
3664 if (SvPVX(sv) && SvLEN(sv))
3665 Safefree(SvPVX(sv));
3666 Renew(ptr, len+1, char);
3669 SvLEN_set(sv, len+1);
3671 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3676 =for apidoc sv_usepvn_mg
3678 Like C<sv_usepvn>, but also handles 'set' magic.
3684 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3686 sv_usepvn(sv,ptr,len);
3691 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3693 if (SvREADONLY(sv)) {
3695 char *pvx = SvPVX(sv);
3696 STRLEN len = SvCUR(sv);
3697 U32 hash = SvUVX(sv);
3698 SvGROW(sv, len + 1);
3699 Move(pvx,SvPVX(sv),len,char);
3703 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3705 else if (PL_curcop != &PL_compiling)
3706 Perl_croak(aTHX_ PL_no_modify);
3709 sv_unref_flags(sv, flags);
3710 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3715 Perl_sv_force_normal(pTHX_ register SV *sv)
3717 sv_force_normal_flags(sv, 0);
3723 Efficient removal of characters from the beginning of the string buffer.
3724 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3725 the string buffer. The C<ptr> becomes the first character of the adjusted
3732 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3736 register STRLEN delta;
3738 if (!ptr || !SvPOKp(sv))
3740 SV_CHECK_THINKFIRST(sv);
3741 if (SvTYPE(sv) < SVt_PVIV)
3742 sv_upgrade(sv,SVt_PVIV);
3745 if (!SvLEN(sv)) { /* make copy of shared string */
3746 char *pvx = SvPVX(sv);
3747 STRLEN len = SvCUR(sv);
3748 SvGROW(sv, len + 1);
3749 Move(pvx,SvPVX(sv),len,char);
3753 SvFLAGS(sv) |= SVf_OOK;
3755 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3756 delta = ptr - SvPVX(sv);
3764 =for apidoc sv_catpvn
3766 Concatenates the string onto the end of the string which is in the SV. The
3767 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3768 'set' magic. See C<sv_catpvn_mg>.
3774 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3779 junk = SvPV_force(sv, tlen);
3780 SvGROW(sv, tlen + len + 1);
3783 Move(ptr,SvPVX(sv)+tlen,len,char);
3786 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3791 =for apidoc sv_catpvn_mg
3793 Like C<sv_catpvn>, but also handles 'set' magic.
3799 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3801 sv_catpvn(sv,ptr,len);
3806 =for apidoc sv_catsv
3808 Concatenates the string from SV C<ssv> onto the end of the string in
3809 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3810 not 'set' magic. See C<sv_catsv_mg>.
3815 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3821 if ((spv = SvPV(ssv, slen))) {
3822 bool dutf8 = DO_UTF8(dsv);
3823 bool sutf8 = DO_UTF8(ssv);
3826 sv_catpvn(dsv,spv,slen);
3829 /* Not modifying source SV, so taking a temporary copy. */
3830 SV* csv = sv_2mortal(newSVsv(ssv));
3834 sv_utf8_upgrade(csv);
3835 cpv = SvPV(csv,clen);
3836 sv_catpvn(dsv,cpv,clen);
3839 sv_utf8_upgrade(dsv);
3840 sv_catpvn(dsv,spv,slen);
3841 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3848 =for apidoc sv_catsv_mg
3850 Like C<sv_catsv>, but also handles 'set' magic.
3856 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3863 =for apidoc sv_catpv
3865 Concatenates the string onto the end of the string which is in the SV.
3866 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3872 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3874 register STRLEN len;
3880 junk = SvPV_force(sv, tlen);
3882 SvGROW(sv, tlen + len + 1);
3885 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3887 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3892 =for apidoc sv_catpv_mg
3894 Like C<sv_catpv>, but also handles 'set' magic.
3900 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3907 Perl_newSV(pTHX_ STRLEN len)
3913 sv_upgrade(sv, SVt_PV);
3914 SvGROW(sv, len + 1);
3919 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3922 =for apidoc sv_magic
3924 Adds magic to an SV.
3930 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3934 if (SvREADONLY(sv)) {
3935 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3936 Perl_croak(aTHX_ PL_no_modify);
3938 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3939 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3946 (void)SvUPGRADE(sv, SVt_PVMG);
3948 Newz(702,mg, 1, MAGIC);
3949 mg->mg_moremagic = SvMAGIC(sv);
3952 if (!obj || obj == sv || how == '#' || how == 'r')
3955 mg->mg_obj = SvREFCNT_inc(obj);
3956 mg->mg_flags |= MGf_REFCOUNTED;
3959 mg->mg_len = namlen;
3962 mg->mg_ptr = savepvn(name, namlen);
3963 else if (namlen == HEf_SVKEY)
3964 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3968 mg->mg_virtual = &PL_vtbl_sv;
3971 mg->mg_virtual = &PL_vtbl_amagic;
3974 mg->mg_virtual = &PL_vtbl_amagicelem;
3977 mg->mg_virtual = &PL_vtbl_ovrld;
3980 mg->mg_virtual = &PL_vtbl_bm;
3983 mg->mg_virtual = &PL_vtbl_regdata;
3986 mg->mg_virtual = &PL_vtbl_regdatum;
3989 mg->mg_virtual = &PL_vtbl_env;
3992 mg->mg_virtual = &PL_vtbl_fm;
3995 mg->mg_virtual = &PL_vtbl_envelem;
3998 mg->mg_virtual = &PL_vtbl_mglob;
4001 mg->mg_virtual = &PL_vtbl_isa;
4004 mg->mg_virtual = &PL_vtbl_isaelem;
4007 mg->mg_virtual = &PL_vtbl_nkeys;
4014 mg->mg_virtual = &PL_vtbl_dbline;
4018 mg->mg_virtual = &PL_vtbl_mutex;
4020 #endif /* USE_THREADS */
4021 #ifdef USE_LOCALE_COLLATE
4023 mg->mg_virtual = &PL_vtbl_collxfrm;
4025 #endif /* USE_LOCALE_COLLATE */
4027 mg->mg_virtual = &PL_vtbl_pack;
4031 mg->mg_virtual = &PL_vtbl_packelem;
4034 mg->mg_virtual = &PL_vtbl_regexp;
4037 mg->mg_virtual = &PL_vtbl_sig;
4040 mg->mg_virtual = &PL_vtbl_sigelem;
4043 mg->mg_virtual = &PL_vtbl_taint;
4047 mg->mg_virtual = &PL_vtbl_uvar;
4050 mg->mg_virtual = &PL_vtbl_vec;
4053 mg->mg_virtual = &PL_vtbl_substr;
4056 mg->mg_virtual = &PL_vtbl_defelem;
4059 mg->mg_virtual = &PL_vtbl_glob;
4062 mg->mg_virtual = &PL_vtbl_arylen;
4065 mg->mg_virtual = &PL_vtbl_pos;
4068 mg->mg_virtual = &PL_vtbl_backref;
4070 case '~': /* Reserved for use by extensions not perl internals. */
4071 /* Useful for attaching extension internal data to perl vars. */
4072 /* Note that multiple extensions may clash if magical scalars */
4073 /* etc holding private data from one are passed to another. */
4077 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4081 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4085 =for apidoc sv_unmagic
4087 Removes magic from an SV.
4093 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4097 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4100 for (mg = *mgp; mg; mg = *mgp) {
4101 if (mg->mg_type == type) {
4102 MGVTBL* vtbl = mg->mg_virtual;
4103 *mgp = mg->mg_moremagic;
4104 if (vtbl && vtbl->svt_free)
4105 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4106 if (mg->mg_ptr && mg->mg_type != 'g')
4107 if (mg->mg_len >= 0)
4108 Safefree(mg->mg_ptr);
4109 else if (mg->mg_len == HEf_SVKEY)
4110 SvREFCNT_dec((SV*)mg->mg_ptr);
4111 if (mg->mg_flags & MGf_REFCOUNTED)
4112 SvREFCNT_dec(mg->mg_obj);
4116 mgp = &mg->mg_moremagic;
4120 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4127 =for apidoc sv_rvweaken
4135 Perl_sv_rvweaken(pTHX_ SV *sv)
4138 if (!SvOK(sv)) /* let undefs pass */
4141 Perl_croak(aTHX_ "Can't weaken a nonreference");
4142 else if (SvWEAKREF(sv)) {
4143 if (ckWARN(WARN_MISC))
4144 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4148 sv_add_backref(tsv, sv);
4155 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4159 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4160 av = (AV*)mg->mg_obj;
4163 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4164 SvREFCNT_dec(av); /* for sv_magic */
4170 S_sv_del_backref(pTHX_ SV *sv)
4177 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4178 Perl_croak(aTHX_ "panic: del_backref");
4179 av = (AV *)mg->mg_obj;
4184 svp[i] = &PL_sv_undef; /* XXX */
4191 =for apidoc sv_insert
4193 Inserts a string at the specified offset/length within the SV. Similar to
4194 the Perl substr() function.
4200 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4204 register char *midend;
4205 register char *bigend;
4211 Perl_croak(aTHX_ "Can't modify non-existent substring");
4212 SvPV_force(bigstr, curlen);
4213 (void)SvPOK_only_UTF8(bigstr);
4214 if (offset + len > curlen) {
4215 SvGROW(bigstr, offset+len+1);
4216 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4217 SvCUR_set(bigstr, offset+len);
4221 i = littlelen - len;
4222 if (i > 0) { /* string might grow */
4223 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4224 mid = big + offset + len;
4225 midend = bigend = big + SvCUR(bigstr);
4228 while (midend > mid) /* shove everything down */
4229 *--bigend = *--midend;
4230 Move(little,big+offset,littlelen,char);
4236 Move(little,SvPVX(bigstr)+offset,len,char);
4241 big = SvPVX(bigstr);
4244 bigend = big + SvCUR(bigstr);
4246 if (midend > bigend)
4247 Perl_croak(aTHX_ "panic: sv_insert");
4249 if (mid - big > bigend - midend) { /* faster to shorten from end */
4251 Move(little, mid, littlelen,char);
4254 i = bigend - midend;
4256 Move(midend, mid, i,char);
4260 SvCUR_set(bigstr, mid - big);
4263 else if ((i = mid - big)) { /* faster from front */
4264 midend -= littlelen;
4266 sv_chop(bigstr,midend-i);
4271 Move(little, mid, littlelen,char);
4273 else if (littlelen) {
4274 midend -= littlelen;
4275 sv_chop(bigstr,midend);
4276 Move(little,midend,littlelen,char);
4279 sv_chop(bigstr,midend);
4285 =for apidoc sv_replace
4287 Make the first argument a copy of the second, then delete the original.
4293 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4295 U32 refcnt = SvREFCNT(sv);
4296 SV_CHECK_THINKFIRST(sv);
4297 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4298 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4299 if (SvMAGICAL(sv)) {
4303 sv_upgrade(nsv, SVt_PVMG);
4304 SvMAGIC(nsv) = SvMAGIC(sv);
4305 SvFLAGS(nsv) |= SvMAGICAL(sv);
4311 assert(!SvREFCNT(sv));
4312 StructCopy(nsv,sv,SV);
4313 SvREFCNT(sv) = refcnt;
4314 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4319 =for apidoc sv_clear
4321 Clear an SV, making it empty. Does not free the memory used by the SV
4328 Perl_sv_clear(pTHX_ register SV *sv)
4332 assert(SvREFCNT(sv) == 0);
4335 if (PL_defstash) { /* Still have a symbol table? */
4340 Zero(&tmpref, 1, SV);
4341 sv_upgrade(&tmpref, SVt_RV);
4343 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4344 SvREFCNT(&tmpref) = 1;
4347 stash = SvSTASH(sv);
4348 destructor = StashHANDLER(stash,DESTROY);
4351 PUSHSTACKi(PERLSI_DESTROY);
4352 SvRV(&tmpref) = SvREFCNT_inc(sv);
4357 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4363 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4365 del_XRV(SvANY(&tmpref));
4368 if (PL_in_clean_objs)
4369 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4371 /* DESTROY gave object new lease on life */
4377 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4378 SvOBJECT_off(sv); /* Curse the object. */
4379 if (SvTYPE(sv) != SVt_PVIO)
4380 --PL_sv_objcount; /* XXX Might want something more general */
4383 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4386 switch (SvTYPE(sv)) {
4389 IoIFP(sv) != PerlIO_stdin() &&
4390 IoIFP(sv) != PerlIO_stdout() &&
4391 IoIFP(sv) != PerlIO_stderr())
4393 io_close((IO*)sv, FALSE);
4395 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4396 PerlDir_close(IoDIRP(sv));
4397 IoDIRP(sv) = (DIR*)NULL;
4398 Safefree(IoTOP_NAME(sv));
4399 Safefree(IoFMT_NAME(sv));
4400 Safefree(IoBOTTOM_NAME(sv));
4415 SvREFCNT_dec(LvTARG(sv));
4419 Safefree(GvNAME(sv));
4420 /* cannot decrease stash refcount yet, as we might recursively delete
4421 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4422 of stash until current sv is completely gone.
4423 -- JohnPC, 27 Mar 1998 */
4424 stash = GvSTASH(sv);
4430 (void)SvOOK_off(sv);
4438 SvREFCNT_dec(SvRV(sv));
4440 else if (SvPVX(sv) && SvLEN(sv))
4441 Safefree(SvPVX(sv));
4442 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4443 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4455 switch (SvTYPE(sv)) {
4471 del_XPVIV(SvANY(sv));
4474 del_XPVNV(SvANY(sv));
4477 del_XPVMG(SvANY(sv));
4480 del_XPVLV(SvANY(sv));
4483 del_XPVAV(SvANY(sv));
4486 del_XPVHV(SvANY(sv));
4489 del_XPVCV(SvANY(sv));
4492 del_XPVGV(SvANY(sv));
4493 /* code duplication for increased performance. */
4494 SvFLAGS(sv) &= SVf_BREAK;
4495 SvFLAGS(sv) |= SVTYPEMASK;
4496 /* decrease refcount of the stash that owns this GV, if any */
4498 SvREFCNT_dec(stash);
4499 return; /* not break, SvFLAGS reset already happened */
4501 del_XPVBM(SvANY(sv));
4504 del_XPVFM(SvANY(sv));
4507 del_XPVIO(SvANY(sv));
4510 SvFLAGS(sv) &= SVf_BREAK;
4511 SvFLAGS(sv) |= SVTYPEMASK;
4515 Perl_sv_newref(pTHX_ SV *sv)
4518 ATOMIC_INC(SvREFCNT(sv));
4525 Free the memory used by an SV.
4531 Perl_sv_free(pTHX_ SV *sv)
4533 int refcount_is_zero;
4537 if (SvREFCNT(sv) == 0) {
4538 if (SvFLAGS(sv) & SVf_BREAK)
4540 if (PL_in_clean_all) /* All is fair */
4542 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4543 /* make sure SvREFCNT(sv)==0 happens very seldom */
4544 SvREFCNT(sv) = (~(U32)0)/2;
4547 if (ckWARN_d(WARN_INTERNAL))
4548 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4551 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4552 if (!refcount_is_zero)
4556 if (ckWARN_d(WARN_DEBUGGING))
4557 Perl_warner(aTHX_ WARN_DEBUGGING,
4558 "Attempt to free temp prematurely: SV 0x%"UVxf,
4563 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4564 /* make sure SvREFCNT(sv)==0 happens very seldom */
4565 SvREFCNT(sv) = (~(U32)0)/2;
4576 Returns the length of the string in the SV. See also C<SvCUR>.
4582 Perl_sv_len(pTHX_ register SV *sv)
4591 len = mg_length(sv);
4593 junk = SvPV(sv, len);
4598 =for apidoc sv_len_utf8
4600 Returns the number of characters in the string in an SV, counting wide
4601 UTF8 bytes as a single character.
4607 Perl_sv_len_utf8(pTHX_ register SV *sv)
4613 return mg_length(sv);
4617 U8 *s = (U8*)SvPV(sv, len);
4619 return Perl_utf8_length(aTHX_ s, s + len);
4624 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4629 I32 uoffset = *offsetp;
4635 start = s = (U8*)SvPV(sv, len);
4637 while (s < send && uoffset--)
4641 *offsetp = s - start;
4645 while (s < send && ulen--)
4655 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4664 s = (U8*)SvPV(sv, len);
4666 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4667 send = s + *offsetp;
4672 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4686 Returns a boolean indicating whether the strings in the two SVs are
4693 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4700 bool pv1tmp = FALSE;
4701 bool pv2tmp = FALSE;
4708 pv1 = SvPV(sv1, cur1);
4715 pv2 = SvPV(sv2, cur2);
4717 /* do not utf8ize the comparands as a side-effect */
4718 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4719 bool is_utf8 = TRUE;
4721 if (PL_hints & HINT_UTF8_DISTINCT)
4725 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4728 pv1tmp = (pv != pv1);
4732 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4735 pv2tmp = (pv != pv2);
4741 eq = memEQ(pv1, pv2, cur1);
4754 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4755 string in C<sv1> is less than, equal to, or greater than the string in
4762 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4767 bool pv1tmp = FALSE;
4768 bool pv2tmp = FALSE;
4775 pv1 = SvPV(sv1, cur1);
4782 pv2 = SvPV(sv2, cur2);
4784 /* do not utf8ize the comparands as a side-effect */
4785 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4786 if (PL_hints & HINT_UTF8_DISTINCT)
4787 return SvUTF8(sv1) ? 1 : -1;
4790 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4794 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4800 cmp = cur2 ? -1 : 0;
4804 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4807 cmp = retval < 0 ? -1 : 1;
4808 } else if (cur1 == cur2) {
4811 cmp = cur1 < cur2 ? -1 : 1;
4824 =for apidoc sv_cmp_locale
4826 Compares the strings in two SVs in a locale-aware manner. See
4833 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4835 #ifdef USE_LOCALE_COLLATE
4841 if (PL_collation_standard)
4845 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4847 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4849 if (!pv1 || !len1) {
4860 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4863 return retval < 0 ? -1 : 1;
4866 * When the result of collation is equality, that doesn't mean
4867 * that there are no differences -- some locales exclude some
4868 * characters from consideration. So to avoid false equalities,
4869 * we use the raw string as a tiebreaker.
4875 #endif /* USE_LOCALE_COLLATE */
4877 return sv_cmp(sv1, sv2);
4880 #ifdef USE_LOCALE_COLLATE
4882 * Any scalar variable may carry an 'o' magic that contains the
4883 * scalar data of the variable transformed to such a format that
4884 * a normal memory comparison can be used to compare the data
4885 * according to the locale settings.
4888 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4892 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4893 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4898 Safefree(mg->mg_ptr);